@nodetool-ai/runtime 0.7.0-rc.11
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/bridge-protocol.d.ts +39 -0
- package/dist/bridge-protocol.d.ts.map +1 -0
- package/dist/bridge-protocol.js +39 -0
- package/dist/bridge-protocol.js.map +1 -0
- package/dist/comfy-executor.d.ts +41 -0
- package/dist/comfy-executor.d.ts.map +1 -0
- package/dist/comfy-executor.js +305 -0
- package/dist/comfy-executor.js.map +1 -0
- package/dist/context-packer.d.ts +22 -0
- package/dist/context-packer.d.ts.map +1 -0
- package/dist/context-packer.js +66 -0
- package/dist/context-packer.js.map +1 -0
- package/dist/context.d.ts +405 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +1455 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/node-executor.d.ts +53 -0
- package/dist/node-executor.d.ts.map +1 -0
- package/dist/node-executor.js +9 -0
- package/dist/node-executor.js.map +1 -0
- package/dist/providers/aki-manifest.json +34 -0
- package/dist/providers/aki-provider.d.ts +65 -0
- package/dist/providers/aki-provider.d.ts.map +1 -0
- package/dist/providers/aki-provider.js +517 -0
- package/dist/providers/aki-provider.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +55 -0
- package/dist/providers/anthropic-provider.d.ts.map +1 -0
- package/dist/providers/anthropic-provider.js +563 -0
- package/dist/providers/anthropic-provider.js.map +1 -0
- package/dist/providers/base-provider.d.ts +194 -0
- package/dist/providers/base-provider.d.ts.map +1 -0
- package/dist/providers/base-provider.js +515 -0
- package/dist/providers/base-provider.js.map +1 -0
- package/dist/providers/cerebras-provider.d.ts +20 -0
- package/dist/providers/cerebras-provider.d.ts.map +1 -0
- package/dist/providers/cerebras-provider.js +52 -0
- package/dist/providers/cerebras-provider.js.map +1 -0
- package/dist/providers/claude-agent-provider.d.ts +107 -0
- package/dist/providers/claude-agent-provider.d.ts.map +1 -0
- package/dist/providers/claude-agent-provider.js +586 -0
- package/dist/providers/claude-agent-provider.js.map +1 -0
- package/dist/providers/cohere-provider.d.ts +36 -0
- package/dist/providers/cohere-provider.d.ts.map +1 -0
- package/dist/providers/cohere-provider.js +116 -0
- package/dist/providers/cohere-provider.js.map +1 -0
- package/dist/providers/cost-calculator.d.ts +109 -0
- package/dist/providers/cost-calculator.d.ts.map +1 -0
- package/dist/providers/cost-calculator.js +475 -0
- package/dist/providers/cost-calculator.js.map +1 -0
- package/dist/providers/deepseek-provider.d.ts +25 -0
- package/dist/providers/deepseek-provider.d.ts.map +1 -0
- package/dist/providers/deepseek-provider.js +58 -0
- package/dist/providers/deepseek-provider.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +52 -0
- package/dist/providers/fake-provider.d.ts.map +1 -0
- package/dist/providers/fake-provider.js +107 -0
- package/dist/providers/fake-provider.js.map +1 -0
- package/dist/providers/fal-provider.d.ts +32 -0
- package/dist/providers/fal-provider.d.ts.map +1 -0
- package/dist/providers/fal-provider.js +445 -0
- package/dist/providers/fal-provider.js.map +1 -0
- package/dist/providers/gemini-provider.d.ts +109 -0
- package/dist/providers/gemini-provider.d.ts.map +1 -0
- package/dist/providers/gemini-provider.js +943 -0
- package/dist/providers/gemini-provider.js.map +1 -0
- package/dist/providers/groq-provider.d.ts +20 -0
- package/dist/providers/groq-provider.d.ts.map +1 -0
- package/dist/providers/groq-provider.js +52 -0
- package/dist/providers/groq-provider.js.map +1 -0
- package/dist/providers/huggingface-provider.d.ts +59 -0
- package/dist/providers/huggingface-provider.d.ts.map +1 -0
- package/dist/providers/huggingface-provider.js +305 -0
- package/dist/providers/huggingface-provider.js.map +1 -0
- package/dist/providers/index.d.ts +69 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +137 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/jina-provider.d.ts +37 -0
- package/dist/providers/jina-provider.d.ts.map +1 -0
- package/dist/providers/jina-provider.js +118 -0
- package/dist/providers/jina-provider.js.map +1 -0
- package/dist/providers/kie-provider.d.ts +19 -0
- package/dist/providers/kie-provider.d.ts.map +1 -0
- package/dist/providers/kie-provider.js +118 -0
- package/dist/providers/kie-provider.js.map +1 -0
- package/dist/providers/llama-provider.d.ts +49 -0
- package/dist/providers/llama-provider.d.ts.map +1 -0
- package/dist/providers/llama-provider.js +381 -0
- package/dist/providers/llama-provider.js.map +1 -0
- package/dist/providers/lmstudio-provider.d.ts +22 -0
- package/dist/providers/lmstudio-provider.d.ts.map +1 -0
- package/dist/providers/lmstudio-provider.js +63 -0
- package/dist/providers/lmstudio-provider.js.map +1 -0
- package/dist/providers/manifest-models.d.ts +12 -0
- package/dist/providers/manifest-models.d.ts.map +1 -0
- package/dist/providers/manifest-models.js +96 -0
- package/dist/providers/manifest-models.js.map +1 -0
- package/dist/providers/meshy-provider.d.ts +53 -0
- package/dist/providers/meshy-provider.d.ts.map +1 -0
- package/dist/providers/meshy-provider.js +230 -0
- package/dist/providers/meshy-provider.js.map +1 -0
- package/dist/providers/minimax-provider.d.ts +66 -0
- package/dist/providers/minimax-provider.d.ts.map +1 -0
- package/dist/providers/minimax-provider.js +531 -0
- package/dist/providers/minimax-provider.js.map +1 -0
- package/dist/providers/mistral-provider.d.ts +26 -0
- package/dist/providers/mistral-provider.d.ts.map +1 -0
- package/dist/providers/mistral-provider.js +74 -0
- package/dist/providers/mistral-provider.js.map +1 -0
- package/dist/providers/moonshot-provider.d.ts +24 -0
- package/dist/providers/moonshot-provider.d.ts.map +1 -0
- package/dist/providers/moonshot-provider.js +43 -0
- package/dist/providers/moonshot-provider.js.map +1 -0
- package/dist/providers/ollama-provider.d.ts +71 -0
- package/dist/providers/ollama-provider.d.ts.map +1 -0
- package/dist/providers/ollama-provider.js +480 -0
- package/dist/providers/ollama-provider.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +103 -0
- package/dist/providers/openai-provider.d.ts.map +1 -0
- package/dist/providers/openai-provider.js +917 -0
- package/dist/providers/openai-provider.js.map +1 -0
- package/dist/providers/openrouter-provider.d.ts +49 -0
- package/dist/providers/openrouter-provider.d.ts.map +1 -0
- package/dist/providers/openrouter-provider.js +147 -0
- package/dist/providers/openrouter-provider.js.map +1 -0
- package/dist/providers/provider-registry.d.ts +24 -0
- package/dist/providers/provider-registry.d.ts.map +1 -0
- package/dist/providers/provider-registry.js +124 -0
- package/dist/providers/provider-registry.js.map +1 -0
- package/dist/providers/python-provider.d.ts +75 -0
- package/dist/providers/python-provider.d.ts.map +1 -0
- package/dist/providers/python-provider.js +157 -0
- package/dist/providers/python-provider.js.map +1 -0
- package/dist/providers/replicate-provider.d.ts +73 -0
- package/dist/providers/replicate-provider.d.ts.map +1 -0
- package/dist/providers/replicate-provider.js +484 -0
- package/dist/providers/replicate-provider.js.map +1 -0
- package/dist/providers/rodin-provider.d.ts +41 -0
- package/dist/providers/rodin-provider.d.ts.map +1 -0
- package/dist/providers/rodin-provider.js +236 -0
- package/dist/providers/rodin-provider.js.map +1 -0
- package/dist/providers/scripted-provider.d.ts +141 -0
- package/dist/providers/scripted-provider.d.ts.map +1 -0
- package/dist/providers/scripted-provider.js +246 -0
- package/dist/providers/scripted-provider.js.map +1 -0
- package/dist/providers/together-provider.d.ts +20 -0
- package/dist/providers/together-provider.d.ts.map +1 -0
- package/dist/providers/together-provider.js +56 -0
- package/dist/providers/together-provider.js.map +1 -0
- package/dist/providers/types.d.ts +202 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/vllm-provider.d.ts +22 -0
- package/dist/providers/vllm-provider.d.ts.map +1 -0
- package/dist/providers/vllm-provider.js +66 -0
- package/dist/providers/vllm-provider.js.map +1 -0
- package/dist/providers/voyage-provider.d.ts +37 -0
- package/dist/providers/voyage-provider.d.ts.map +1 -0
- package/dist/providers/voyage-provider.js +124 -0
- package/dist/providers/voyage-provider.js.map +1 -0
- package/dist/providers/xai-provider.d.ts +24 -0
- package/dist/providers/xai-provider.d.ts.map +1 -0
- package/dist/providers/xai-provider.js +57 -0
- package/dist/providers/xai-provider.js.map +1 -0
- package/dist/python-bridge-types.d.ts +70 -0
- package/dist/python-bridge-types.d.ts.map +1 -0
- package/dist/python-bridge-types.js +2 -0
- package/dist/python-bridge-types.js.map +1 -0
- package/dist/python-node-executor.d.ts +20 -0
- package/dist/python-node-executor.d.ts.map +1 -0
- package/dist/python-node-executor.js +219 -0
- package/dist/python-node-executor.js.map +1 -0
- package/dist/python-stdio-bridge.d.ts +67 -0
- package/dist/python-stdio-bridge.d.ts.map +1 -0
- package/dist/python-stdio-bridge.js +704 -0
- package/dist/python-stdio-bridge.js.map +1 -0
- package/dist/recommended-models.d.ts +17 -0
- package/dist/recommended-models.d.ts.map +1 -0
- package/dist/recommended-models.js +139 -0
- package/dist/recommended-models.js.map +1 -0
- package/dist/telemetry.d.ts +61 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +128 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/trace-exporters.d.ts +72 -0
- package/dist/trace-exporters.d.ts.map +1 -0
- package/dist/trace-exporters.js +216 -0
- package/dist/trace-exporters.js.map +1 -0
- package/dist/tracing-helpers.d.ts +99 -0
- package/dist/tracing-helpers.d.ts.map +1 -0
- package/dist/tracing-helpers.js +217 -0
- package/dist/tracing-helpers.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,586 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Agent Provider
|
|
3
|
+
*
|
|
4
|
+
* Uses the Claude Agent SDK (@anthropic-ai/claude-agent-sdk) to interact with
|
|
5
|
+
* Claude through the user's Claude subscription (Claude Pro/Max/Team).
|
|
6
|
+
*
|
|
7
|
+
* Requirements:
|
|
8
|
+
* - Claude Code CLI installed and authenticated (`claude` command available)
|
|
9
|
+
* - Active Claude subscription
|
|
10
|
+
* - @anthropic-ai/claude-agent-sdk package installed
|
|
11
|
+
*
|
|
12
|
+
* This provider does NOT require an ANTHROPIC_API_KEY — it uses the Claude Code
|
|
13
|
+
* session which authenticates through the user's Claude subscription.
|
|
14
|
+
*
|
|
15
|
+
* Tool support: tools are exposed as an in-process MCP server via the SDK's
|
|
16
|
+
* createSdkMcpServer() + tool() helpers. Claude calls tools natively through
|
|
17
|
+
* the MCP protocol; the provider yields ToolCall items for tracking.
|
|
18
|
+
* An onToolCall callback must be supplied for tool execution.
|
|
19
|
+
*/
|
|
20
|
+
import { BaseProvider } from "./base-provider.js";
|
|
21
|
+
import { createLogger } from "@nodetool-ai/config";
|
|
22
|
+
import * as sdk from "@anthropic-ai/claude-agent-sdk";
|
|
23
|
+
import { z } from "zod";
|
|
24
|
+
const log = createLogger("nodetool.runtime.providers.claude_agent");
|
|
25
|
+
const MCP_SERVER_NAME = "nodetool-tools";
|
|
26
|
+
/**
|
|
27
|
+
* Error thrown by the Claude Agent provider. Carries a categorised `kind`
|
|
28
|
+
* alongside a user-facing message so callers (UI, CLI) can decide how to
|
|
29
|
+
* render the failure (e.g. show a "Sign in" button for `auth`).
|
|
30
|
+
*/
|
|
31
|
+
export class ClaudeAgentError extends Error {
|
|
32
|
+
kind;
|
|
33
|
+
constructor(kind, message, cause) {
|
|
34
|
+
super(message, cause !== undefined ? { cause } : undefined);
|
|
35
|
+
this.name = "ClaudeAgentError";
|
|
36
|
+
this.kind = kind;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Classify a raw error from the Claude Agent SDK (or its child process) into
|
|
41
|
+
* a ClaudeAgentError with an actionable, user-facing message.
|
|
42
|
+
*/
|
|
43
|
+
export function classifyClaudeAgentError(error) {
|
|
44
|
+
if (error instanceof ClaudeAgentError)
|
|
45
|
+
return error;
|
|
46
|
+
const original = error instanceof Error ? error.message : String(error);
|
|
47
|
+
const lower = original.toLowerCase();
|
|
48
|
+
// SDK package itself not installed (optional dependency missing).
|
|
49
|
+
if (lower.includes("cannot find module") &&
|
|
50
|
+
lower.includes("claude-agent-sdk")) {
|
|
51
|
+
return new ClaudeAgentError("sdk_not_installed", "The @anthropic-ai/claude-agent-sdk package is not installed. " +
|
|
52
|
+
"The Claude Agent provider requires this optional dependency — install it with " +
|
|
53
|
+
"`npm install @anthropic-ai/claude-agent-sdk`, then restart NodeTool. " +
|
|
54
|
+
`Original error: ${original}`, error);
|
|
55
|
+
}
|
|
56
|
+
// Claude Code CLI binary not on PATH.
|
|
57
|
+
if (lower.includes("enoent") ||
|
|
58
|
+
lower.includes("claude: not found") ||
|
|
59
|
+
lower.includes("command not found: claude") ||
|
|
60
|
+
(lower.includes("spawn") && lower.includes("claude"))) {
|
|
61
|
+
return new ClaudeAgentError("cli_not_found", "Claude Code CLI not found on PATH. The Claude Agent provider spawns the " +
|
|
62
|
+
"`claude` command — install it from https://docs.anthropic.com/claude-code/install " +
|
|
63
|
+
"(or via `npm install -g @anthropic-ai/claude-code`), then run `claude login` to " +
|
|
64
|
+
`authenticate. Original error: ${original}`, error);
|
|
65
|
+
}
|
|
66
|
+
// Running as root — SDK refuses --dangerously-skip-permissions.
|
|
67
|
+
if (lower.includes("dangerously-skip-permissions") ||
|
|
68
|
+
(lower.includes("root") && lower.includes("refus")) ||
|
|
69
|
+
(lower.includes("uid") && lower.includes("0"))) {
|
|
70
|
+
return new ClaudeAgentError("running_as_root", "The Claude Agent SDK refuses to run as root (uid=0) because it passes " +
|
|
71
|
+
"--dangerously-skip-permissions to the Claude CLI. Run NodeTool as a non-root " +
|
|
72
|
+
"user, or switch to the `anthropic` provider which uses ANTHROPIC_API_KEY " +
|
|
73
|
+
`directly. Original error: ${original}`, error);
|
|
74
|
+
}
|
|
75
|
+
// Abort.
|
|
76
|
+
if (lower.includes("abort") ||
|
|
77
|
+
error instanceof Error && error.name === "AbortError") {
|
|
78
|
+
return new ClaudeAgentError("aborted", "Claude Agent request was aborted.", error);
|
|
79
|
+
}
|
|
80
|
+
// Authentication failure.
|
|
81
|
+
if (lower.includes("unauthorized") ||
|
|
82
|
+
lower.includes("401") ||
|
|
83
|
+
lower.includes("403") ||
|
|
84
|
+
lower.includes("forbidden") ||
|
|
85
|
+
lower.includes("not logged in") ||
|
|
86
|
+
lower.includes("not authenticated") ||
|
|
87
|
+
lower.includes("invalid api key") ||
|
|
88
|
+
lower.includes("authentication") ||
|
|
89
|
+
lower.includes("oauth")) {
|
|
90
|
+
return new ClaudeAgentError("auth", "Claude Agent authentication failed. Run `claude login` in a terminal to " +
|
|
91
|
+
"sign in with your Claude subscription, or set ANTHROPIC_API_KEY. " +
|
|
92
|
+
`Original error: ${original}`, error);
|
|
93
|
+
}
|
|
94
|
+
// Rate limit.
|
|
95
|
+
if (lower.includes("429") ||
|
|
96
|
+
lower.includes("rate limit") ||
|
|
97
|
+
lower.includes("too many requests") ||
|
|
98
|
+
lower.includes("quota")) {
|
|
99
|
+
return new ClaudeAgentError("rate_limit", "Claude Agent rate limit reached. Wait a moment and retry, or check your " +
|
|
100
|
+
`Claude subscription usage limits. Original error: ${original}`, error);
|
|
101
|
+
}
|
|
102
|
+
// Context length.
|
|
103
|
+
if (lower.includes("context length") ||
|
|
104
|
+
lower.includes("context window") ||
|
|
105
|
+
lower.includes("token limit") ||
|
|
106
|
+
lower.includes("maximum context") ||
|
|
107
|
+
lower.includes("too long") ||
|
|
108
|
+
lower.includes("prompt is too long")) {
|
|
109
|
+
return new ClaudeAgentError("context_length", "Claude Agent request exceeded the model's context window. Shorten the " +
|
|
110
|
+
"conversation (clear older messages) or switch to a model with a larger " +
|
|
111
|
+
`context window. Original error: ${original}`, error);
|
|
112
|
+
}
|
|
113
|
+
// Invalid / unknown model.
|
|
114
|
+
if (lower.includes("model") &&
|
|
115
|
+
(lower.includes("invalid") ||
|
|
116
|
+
lower.includes("not found") ||
|
|
117
|
+
lower.includes("unknown") ||
|
|
118
|
+
lower.includes("does not exist"))) {
|
|
119
|
+
return new ClaudeAgentError("invalid_model", "Claude Agent could not use the requested model. Check that the model ID " +
|
|
120
|
+
"is valid and available on your Claude subscription. " +
|
|
121
|
+
`Original error: ${original}`, error);
|
|
122
|
+
}
|
|
123
|
+
return new ClaudeAgentError("unknown", `Claude Agent provider error: ${original}`, error);
|
|
124
|
+
}
|
|
125
|
+
const CLAUDE_AGENT_MODELS = [
|
|
126
|
+
{
|
|
127
|
+
id: "claude-opus-4-7",
|
|
128
|
+
name: "Claude Opus 4.7",
|
|
129
|
+
provider: "claude_agent"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
id: "claude-sonnet-4-6",
|
|
133
|
+
name: "Claude Sonnet 4.6",
|
|
134
|
+
provider: "claude_agent"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: "claude-haiku-4-5",
|
|
138
|
+
name: "Claude Haiku 4.5",
|
|
139
|
+
provider: "claude_agent"
|
|
140
|
+
}
|
|
141
|
+
];
|
|
142
|
+
const DISALLOWED_TOOLS = [];
|
|
143
|
+
function extractText(content) {
|
|
144
|
+
if (typeof content === "string")
|
|
145
|
+
return content;
|
|
146
|
+
if (Array.isArray(content)) {
|
|
147
|
+
return content
|
|
148
|
+
.filter((c) => c.type === "text")
|
|
149
|
+
.map((c) => c.text)
|
|
150
|
+
.join("\n");
|
|
151
|
+
}
|
|
152
|
+
return String(content ?? "");
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Convert a JSON Schema property to a Zod type.
|
|
156
|
+
* Handles the common subset used by agent tools.
|
|
157
|
+
*/
|
|
158
|
+
function jsonSchemaPropertyToZod(prop, z) {
|
|
159
|
+
const type = prop.type;
|
|
160
|
+
const enumValues = prop.enum;
|
|
161
|
+
if (enumValues && Array.isArray(enumValues)) {
|
|
162
|
+
// z.enum requires string literals
|
|
163
|
+
if (enumValues.every((v) => typeof v === "string")) {
|
|
164
|
+
return z.enum(enumValues);
|
|
165
|
+
}
|
|
166
|
+
return z.any();
|
|
167
|
+
}
|
|
168
|
+
switch (type) {
|
|
169
|
+
case "string":
|
|
170
|
+
return z.string();
|
|
171
|
+
case "number":
|
|
172
|
+
case "integer":
|
|
173
|
+
return z.number();
|
|
174
|
+
case "boolean":
|
|
175
|
+
return z.boolean();
|
|
176
|
+
case "array": {
|
|
177
|
+
const items = prop.items;
|
|
178
|
+
if (items) {
|
|
179
|
+
return z.array(jsonSchemaPropertyToZod(items, z));
|
|
180
|
+
}
|
|
181
|
+
return z.array(z.any());
|
|
182
|
+
}
|
|
183
|
+
case "object": {
|
|
184
|
+
const properties = prop.properties;
|
|
185
|
+
if (properties) {
|
|
186
|
+
const shape = {};
|
|
187
|
+
const required = prop.required ?? [];
|
|
188
|
+
for (const [key, val] of Object.entries(properties)) {
|
|
189
|
+
let zodType = jsonSchemaPropertyToZod(val, z);
|
|
190
|
+
if (!required.includes(key)) {
|
|
191
|
+
zodType = zodType.optional();
|
|
192
|
+
}
|
|
193
|
+
shape[key] = zodType;
|
|
194
|
+
}
|
|
195
|
+
return z.object(shape);
|
|
196
|
+
}
|
|
197
|
+
return z.record(z.string(), z.any());
|
|
198
|
+
}
|
|
199
|
+
default:
|
|
200
|
+
return z.any();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Convert a ProviderTool's JSON Schema inputSchema to a Zod raw shape
|
|
205
|
+
* suitable for the SDK's tool() function.
|
|
206
|
+
*/
|
|
207
|
+
function jsonSchemaToZodShape(schema, z) {
|
|
208
|
+
if (!schema)
|
|
209
|
+
return {};
|
|
210
|
+
const properties = schema.properties;
|
|
211
|
+
if (!properties)
|
|
212
|
+
return {};
|
|
213
|
+
const required = schema.required ?? [];
|
|
214
|
+
const shape = {};
|
|
215
|
+
for (const [key, prop] of Object.entries(properties)) {
|
|
216
|
+
let zodType = jsonSchemaPropertyToZod(prop, z);
|
|
217
|
+
if (!required.includes(key)) {
|
|
218
|
+
zodType = zodType.optional();
|
|
219
|
+
}
|
|
220
|
+
if (typeof prop.description === "string") {
|
|
221
|
+
zodType = zodType.describe(prop.description);
|
|
222
|
+
}
|
|
223
|
+
shape[key] = zodType;
|
|
224
|
+
}
|
|
225
|
+
return shape;
|
|
226
|
+
}
|
|
227
|
+
export class ClaudeAgentProvider extends BaseProvider {
|
|
228
|
+
static requiredSecrets() {
|
|
229
|
+
return [];
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Maps threadId → Claude SDK session ID.
|
|
233
|
+
* Allows resuming conversations across multiple generateMessages() calls.
|
|
234
|
+
*/
|
|
235
|
+
_sessions = new Map();
|
|
236
|
+
constructor(_secrets = {}) {
|
|
237
|
+
super("claude_agent");
|
|
238
|
+
}
|
|
239
|
+
async hasToolSupport(_model) {
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
async getAvailableLanguageModels() {
|
|
243
|
+
return CLAUDE_AGENT_MODELS;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Extract the system prompt and the last user message from the messages array.
|
|
247
|
+
*/
|
|
248
|
+
extractPrompt(messages) {
|
|
249
|
+
let systemPrompt = "You are a helpful assistant.";
|
|
250
|
+
let prompt = "";
|
|
251
|
+
for (const msg of messages) {
|
|
252
|
+
if (msg.role === "system") {
|
|
253
|
+
systemPrompt = extractText(msg.content);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Walk backwards to find the last user message — that's our prompt.
|
|
257
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
258
|
+
if (messages[i].role === "user") {
|
|
259
|
+
prompt = extractText(messages[i].content);
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (!prompt) {
|
|
264
|
+
prompt = "Hello";
|
|
265
|
+
}
|
|
266
|
+
return { systemPrompt, prompt };
|
|
267
|
+
}
|
|
268
|
+
/** Look up an existing Claude session for the given threadId. */
|
|
269
|
+
getSessionId(threadId) {
|
|
270
|
+
if (!threadId)
|
|
271
|
+
return undefined;
|
|
272
|
+
return this._sessions.get(threadId);
|
|
273
|
+
}
|
|
274
|
+
/** Store the Claude session ID for a threadId. */
|
|
275
|
+
setSessionId(threadId, sessionId) {
|
|
276
|
+
this._sessions.set(threadId, sessionId);
|
|
277
|
+
}
|
|
278
|
+
/** Remove a stored session (e.g. when a conversation is closed). */
|
|
279
|
+
clearSession(threadId) {
|
|
280
|
+
this._sessions.delete(threadId);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Build an in-process MCP server from ProviderTool definitions.
|
|
284
|
+
* Each tool's handler calls the onToolCall callback.
|
|
285
|
+
*/
|
|
286
|
+
buildMcpServer(tools, onToolCall, sdk, z, toolCallTracker) {
|
|
287
|
+
const mcpTools = tools.map((t) => {
|
|
288
|
+
const zodShape = jsonSchemaToZodShape(t.inputSchema, z);
|
|
289
|
+
return sdk.tool(t.name, t.description ?? "", zodShape, async (args) => {
|
|
290
|
+
// Track the tool call for yielding to the caller
|
|
291
|
+
const toolCall = {
|
|
292
|
+
id: `call_${Date.now()}_${toolCallTracker.length}`,
|
|
293
|
+
name: t.name,
|
|
294
|
+
args
|
|
295
|
+
};
|
|
296
|
+
toolCallTracker.push(toolCall);
|
|
297
|
+
log.debug("MCP tool called", { name: t.name, args });
|
|
298
|
+
try {
|
|
299
|
+
const result = await onToolCall(t.name, args);
|
|
300
|
+
return { content: [{ type: "text", text: result }] };
|
|
301
|
+
}
|
|
302
|
+
catch (e) {
|
|
303
|
+
const errorMsg = `Tool execution error: ${e}`;
|
|
304
|
+
log.error("MCP tool error", { name: t.name, error: errorMsg });
|
|
305
|
+
return {
|
|
306
|
+
content: [{ type: "text", text: errorMsg }],
|
|
307
|
+
isError: true
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
return sdk.createSdkMcpServer({
|
|
313
|
+
name: MCP_SERVER_NAME,
|
|
314
|
+
version: "1.0.0",
|
|
315
|
+
tools: mcpTools
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
async *generateMessages(args) {
|
|
319
|
+
const toolCount = args.tools?.length ?? 0;
|
|
320
|
+
const hasOnToolCall = !!args.onToolCall;
|
|
321
|
+
const hasTools = toolCount > 0 && hasOnToolCall;
|
|
322
|
+
const { systemPrompt, prompt } = this.extractPrompt(args.messages);
|
|
323
|
+
const threadId = args.threadId ?? null;
|
|
324
|
+
const resumeSessionId = this.getSessionId(threadId);
|
|
325
|
+
// Pre-flight: fail fast with a clear message if running as root, since the
|
|
326
|
+
// SDK always refuses --dangerously-skip-permissions for uid=0. Without this
|
|
327
|
+
// check the underlying error surfaces as an opaque child-process failure.
|
|
328
|
+
if (typeof process.getuid === "function" && process.getuid() === 0) {
|
|
329
|
+
throw new ClaudeAgentError("running_as_root", "The Claude Agent SDK refuses to run as root (uid=0) because it passes " +
|
|
330
|
+
"--dangerously-skip-permissions to the Claude CLI. Run NodeTool as a " +
|
|
331
|
+
"non-root user, or use the `anthropic` provider with ANTHROPIC_API_KEY.");
|
|
332
|
+
}
|
|
333
|
+
log.info("Claude Agent generateMessages called", {
|
|
334
|
+
toolCount,
|
|
335
|
+
hasOnToolCall,
|
|
336
|
+
hasTools,
|
|
337
|
+
toolNames: args.tools?.map((t) => t.name) ?? []
|
|
338
|
+
});
|
|
339
|
+
// Track tool calls made during this query (populated by MCP handlers)
|
|
340
|
+
const toolCallTracker = [];
|
|
341
|
+
// Build MCP server if tools + callback provided
|
|
342
|
+
let mcpServer;
|
|
343
|
+
let allowedTools = [];
|
|
344
|
+
if (hasTools && args.tools && args.onToolCall) {
|
|
345
|
+
mcpServer = this.buildMcpServer(args.tools, args.onToolCall, sdk, z, toolCallTracker);
|
|
346
|
+
allowedTools = args.tools.map((t) => `mcp__${MCP_SERVER_NAME}__${t.name}`);
|
|
347
|
+
log.info("MCP server built", {
|
|
348
|
+
mcpToolCount: args.tools.length,
|
|
349
|
+
allowedTools
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
log.info("Claude Agent request", {
|
|
353
|
+
model: args.model,
|
|
354
|
+
promptLength: prompt.length,
|
|
355
|
+
threadId,
|
|
356
|
+
resuming: !!resumeSessionId,
|
|
357
|
+
tools: hasTools ? args.tools.map((t) => t.name) : [],
|
|
358
|
+
mcpEnabled: !!mcpServer
|
|
359
|
+
});
|
|
360
|
+
// Strip all Claude Code env vars to allow running inside a Claude Code session.
|
|
361
|
+
// Just deleting CLAUDECODE/CLAUDE_CODE is not enough — the SDK inherits
|
|
362
|
+
// session IDs, proxy settings, auth tokens, etc. that conflict with
|
|
363
|
+
// spawning a nested Claude Code process.
|
|
364
|
+
const cleanEnv = { ...process.env };
|
|
365
|
+
for (const key of Object.keys(cleanEnv)) {
|
|
366
|
+
if (key === "CLAUDECODE" ||
|
|
367
|
+
key === "CLAUDE_CODE" ||
|
|
368
|
+
key.startsWith("CLAUDE_CODE_") ||
|
|
369
|
+
key.startsWith("CLAUDE_SESSION_") ||
|
|
370
|
+
key.startsWith("CLAUDE_ENABLE_") ||
|
|
371
|
+
key.startsWith("CLAUDE_AFTER_") ||
|
|
372
|
+
key.startsWith("CLAUDE_AUTO_")) {
|
|
373
|
+
delete cleanEnv[key];
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
// Bridge AbortSignal → AbortController for the SDK
|
|
377
|
+
let abortController;
|
|
378
|
+
if (args.signal) {
|
|
379
|
+
abortController = new AbortController();
|
|
380
|
+
if (args.signal.aborted) {
|
|
381
|
+
abortController.abort();
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
args.signal.addEventListener("abort", () => abortController.abort(), { once: true });
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
let queryHandle;
|
|
388
|
+
try {
|
|
389
|
+
queryHandle = sdk.query({
|
|
390
|
+
prompt,
|
|
391
|
+
options: {
|
|
392
|
+
model: args.model,
|
|
393
|
+
systemPrompt,
|
|
394
|
+
maxTurns: hasTools ? 10 : 1,
|
|
395
|
+
permissionMode: "bypassPermissions",
|
|
396
|
+
allowDangerouslySkipPermissions: true,
|
|
397
|
+
disallowedTools: DISALLOWED_TOOLS,
|
|
398
|
+
allowedTools,
|
|
399
|
+
env: cleanEnv,
|
|
400
|
+
...(abortController ? { abortController } : {}),
|
|
401
|
+
...(mcpServer
|
|
402
|
+
? { mcpServers: { [MCP_SERVER_NAME]: mcpServer } }
|
|
403
|
+
: {}),
|
|
404
|
+
...(resumeSessionId ? { resume: resumeSessionId } : {})
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
catch (err) {
|
|
409
|
+
const classified = classifyClaudeAgentError(err);
|
|
410
|
+
log.error("Claude Agent sdk.query() failed", {
|
|
411
|
+
kind: classified.kind,
|
|
412
|
+
error: classified.message,
|
|
413
|
+
model: args.model
|
|
414
|
+
});
|
|
415
|
+
throw classified;
|
|
416
|
+
}
|
|
417
|
+
// streamedTextLength tracks the text position within the current assistant turn.
|
|
418
|
+
// It resets when a new turn begins (after tool execution in multi-turn MCP queries).
|
|
419
|
+
let streamedTextLength = 0;
|
|
420
|
+
let yieldedToolCallCount = 0;
|
|
421
|
+
// Track whether we already yielded text via stream_event/assistant messages
|
|
422
|
+
// so we can skip the duplicate result event.
|
|
423
|
+
let hasYieldedText = false;
|
|
424
|
+
try {
|
|
425
|
+
for await (const msg of queryHandle) {
|
|
426
|
+
const msgObj = msg;
|
|
427
|
+
const msgType = msgObj.type;
|
|
428
|
+
// Capture session ID from the init event
|
|
429
|
+
if (msgType === "system" &&
|
|
430
|
+
msgObj.subtype === "init" &&
|
|
431
|
+
typeof msgObj.session_id === "string" &&
|
|
432
|
+
threadId) {
|
|
433
|
+
this.setSessionId(threadId, msgObj.session_id);
|
|
434
|
+
log.debug("Claude session initialized", {
|
|
435
|
+
threadId,
|
|
436
|
+
sessionId: msgObj.session_id
|
|
437
|
+
});
|
|
438
|
+
continue;
|
|
439
|
+
}
|
|
440
|
+
// Yield any new tool calls that were tracked by MCP handlers.
|
|
441
|
+
// When tool calls appear, a new assistant turn follows — reset text position.
|
|
442
|
+
if (yieldedToolCallCount < toolCallTracker.length) {
|
|
443
|
+
while (yieldedToolCallCount < toolCallTracker.length) {
|
|
444
|
+
yield toolCallTracker[yieldedToolCallCount++];
|
|
445
|
+
}
|
|
446
|
+
// Reset for the next assistant turn's text
|
|
447
|
+
streamedTextLength = 0;
|
|
448
|
+
}
|
|
449
|
+
// Stream events provide incremental text updates
|
|
450
|
+
if (msgType === "stream_event") {
|
|
451
|
+
const partial = msgObj.message;
|
|
452
|
+
const content = partial?.content;
|
|
453
|
+
if (Array.isArray(content)) {
|
|
454
|
+
const text = content
|
|
455
|
+
.filter((b) => b?.type === "text" && typeof b.text === "string")
|
|
456
|
+
.map((b) => b.text)
|
|
457
|
+
.join("");
|
|
458
|
+
if (text.length > streamedTextLength) {
|
|
459
|
+
const delta = text.slice(streamedTextLength);
|
|
460
|
+
streamedTextLength = text.length;
|
|
461
|
+
hasYieldedText = true;
|
|
462
|
+
yield { type: "chunk", content: delta, done: false };
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
continue;
|
|
466
|
+
}
|
|
467
|
+
// Full assistant message — emit any remaining text not covered by stream events
|
|
468
|
+
if (msgType === "assistant") {
|
|
469
|
+
const message = msgObj.message;
|
|
470
|
+
const content = message?.content;
|
|
471
|
+
if (Array.isArray(content)) {
|
|
472
|
+
const text = content
|
|
473
|
+
.filter((b) => b?.type === "text" && typeof b.text === "string")
|
|
474
|
+
.map((b) => b.text)
|
|
475
|
+
.join("");
|
|
476
|
+
if (text.length > streamedTextLength) {
|
|
477
|
+
const delta = text.slice(streamedTextLength);
|
|
478
|
+
streamedTextLength = text.length;
|
|
479
|
+
hasYieldedText = true;
|
|
480
|
+
yield { type: "chunk", content: delta, done: false };
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
// Reset for next turn (if multi-turn agentic query)
|
|
484
|
+
streamedTextLength = 0;
|
|
485
|
+
continue;
|
|
486
|
+
}
|
|
487
|
+
// Result event — surface errors and fall back text when nothing was streamed.
|
|
488
|
+
if (msgType === "result") {
|
|
489
|
+
const subtype = msgObj.subtype;
|
|
490
|
+
const isError = msgObj.is_error === true;
|
|
491
|
+
const rawResult = msgObj.result;
|
|
492
|
+
const resultText = typeof rawResult === "string" ? rawResult : undefined;
|
|
493
|
+
if (isError || (subtype && subtype.startsWith("error"))) {
|
|
494
|
+
const detail = resultText ?? this.describeErrorSubtype(subtype);
|
|
495
|
+
const kind = subtype === "error_max_turns"
|
|
496
|
+
? "max_turns"
|
|
497
|
+
: subtype === "error_during_execution"
|
|
498
|
+
? "execution"
|
|
499
|
+
: "unknown";
|
|
500
|
+
const message = kind === "max_turns"
|
|
501
|
+
? `Claude Agent stopped after reaching the max turn limit without ` +
|
|
502
|
+
`finishing. Increase maxTurns, simplify the task, or break it into ` +
|
|
503
|
+
`smaller steps. Detail: ${detail}`
|
|
504
|
+
: kind === "execution"
|
|
505
|
+
? `Claude Agent execution error: ${detail}`
|
|
506
|
+
: `Claude Agent returned an error result (${subtype ?? "unknown"}): ${detail}`;
|
|
507
|
+
log.error("Claude Agent result error", {
|
|
508
|
+
subtype,
|
|
509
|
+
is_error: isError,
|
|
510
|
+
detail
|
|
511
|
+
});
|
|
512
|
+
throw new ClaudeAgentError(kind, message);
|
|
513
|
+
}
|
|
514
|
+
if (!hasYieldedText && resultText && resultText.length > 0) {
|
|
515
|
+
yield { type: "chunk", content: resultText, done: false };
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
catch (err) {
|
|
521
|
+
const classified = classifyClaudeAgentError(err);
|
|
522
|
+
log.error("Claude Agent stream failed", {
|
|
523
|
+
kind: classified.kind,
|
|
524
|
+
error: classified.message,
|
|
525
|
+
model: args.model
|
|
526
|
+
});
|
|
527
|
+
throw classified;
|
|
528
|
+
}
|
|
529
|
+
// Yield any remaining tool calls
|
|
530
|
+
while (yieldedToolCallCount < toolCallTracker.length) {
|
|
531
|
+
yield toolCallTracker[yieldedToolCallCount++];
|
|
532
|
+
}
|
|
533
|
+
// Final done signal
|
|
534
|
+
yield { type: "chunk", content: "", done: true };
|
|
535
|
+
}
|
|
536
|
+
async generateMessage(args) {
|
|
537
|
+
const parts = [];
|
|
538
|
+
const toolCalls = [];
|
|
539
|
+
for await (const item of this.generateMessages(args)) {
|
|
540
|
+
if ("type" in item && item.type === "chunk") {
|
|
541
|
+
const chunk = item;
|
|
542
|
+
if (chunk.content)
|
|
543
|
+
parts.push(chunk.content);
|
|
544
|
+
}
|
|
545
|
+
if ("id" in item && "name" in item && "args" in item) {
|
|
546
|
+
toolCalls.push(item);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
return {
|
|
550
|
+
role: "assistant",
|
|
551
|
+
content: parts.join(""),
|
|
552
|
+
...(toolCalls.length > 0 ? { toolCalls } : {})
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
describeErrorSubtype(subtype) {
|
|
556
|
+
switch (subtype) {
|
|
557
|
+
case "error_max_turns":
|
|
558
|
+
return "agent reached the maximum number of turns";
|
|
559
|
+
case "error_during_execution":
|
|
560
|
+
return "an error occurred during agent execution";
|
|
561
|
+
default:
|
|
562
|
+
return subtype ?? "unknown error";
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
isContextLengthError(error) {
|
|
566
|
+
if (error instanceof ClaudeAgentError)
|
|
567
|
+
return error.kind === "context_length";
|
|
568
|
+
const msg = String(error).toLowerCase();
|
|
569
|
+
return (msg.includes("context length") ||
|
|
570
|
+
msg.includes("context window") ||
|
|
571
|
+
msg.includes("token limit") ||
|
|
572
|
+
msg.includes("too long") ||
|
|
573
|
+
msg.includes("maximum context"));
|
|
574
|
+
}
|
|
575
|
+
isAuthError(error) {
|
|
576
|
+
if (error instanceof ClaudeAgentError)
|
|
577
|
+
return error.kind === "auth";
|
|
578
|
+
return super.isAuthError(error);
|
|
579
|
+
}
|
|
580
|
+
isRateLimitError(error) {
|
|
581
|
+
if (error instanceof ClaudeAgentError)
|
|
582
|
+
return error.kind === "rate_limit";
|
|
583
|
+
return super.isRateLimitError(error);
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
//# sourceMappingURL=claude-agent-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-agent-provider.js","sourceRoot":"","sources":["../../src/providers/claude-agent-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cohere Provider — exposes Cohere's `/v2/embed` text embedding API through
|
|
3
|
+
* the standard {@link BaseProvider} interface.
|
|
4
|
+
*
|
|
5
|
+
* API docs: https://docs.cohere.com/reference/embed
|
|
6
|
+
*/
|
|
7
|
+
import { BaseProvider } from "./base-provider.js";
|
|
8
|
+
import type { EmbeddingModel, Message, ProviderStreamItem } from "./types.js";
|
|
9
|
+
export interface CohereProviderOptions {
|
|
10
|
+
fetchFn?: typeof fetch;
|
|
11
|
+
/**
|
|
12
|
+
* The Cohere `input_type` parameter. Defaults to `"search_document"` which
|
|
13
|
+
* is appropriate for indexing content into a vector store. Use
|
|
14
|
+
* `"search_query"` when embedding user queries against a document index.
|
|
15
|
+
*/
|
|
16
|
+
inputType?: "search_document" | "search_query" | "classification" | "clustering";
|
|
17
|
+
}
|
|
18
|
+
export declare class CohereProvider extends BaseProvider {
|
|
19
|
+
static requiredSecrets(): string[];
|
|
20
|
+
private readonly apiKey;
|
|
21
|
+
private readonly _fetch;
|
|
22
|
+
private readonly inputType;
|
|
23
|
+
constructor(secrets?: {
|
|
24
|
+
COHERE_API_KEY?: string;
|
|
25
|
+
}, options?: CohereProviderOptions);
|
|
26
|
+
getContainerEnv(): Record<string, string>;
|
|
27
|
+
generateMessage(_args: Parameters<BaseProvider["generateMessage"]>[0]): Promise<Message>;
|
|
28
|
+
generateMessages(_args: Parameters<BaseProvider["generateMessages"]>[0]): AsyncGenerator<ProviderStreamItem>;
|
|
29
|
+
getAvailableEmbeddingModels(): Promise<EmbeddingModel[]>;
|
|
30
|
+
generateEmbedding(args: {
|
|
31
|
+
text: string | string[];
|
|
32
|
+
model: string;
|
|
33
|
+
dimensions?: number;
|
|
34
|
+
}): Promise<number[][]>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=cohere-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cohere-provider.d.ts","sourceRoot":"","sources":["../../src/providers/cohere-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EACP,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAuCpB,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,iBAAiB,GAAG,cAAc,GAAG,gBAAgB,GAAG,YAAY,CAAC;CAClF;AAED,qBAAa,cAAe,SAAQ,YAAY;WAC9B,eAAe,IAAI,MAAM,EAAE;IAI3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAGjC,OAAO,GAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAO,EACzC,OAAO,GAAE,qBAA0B;IAW5B,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAI5C,eAAe,CACnB,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,GACpD,OAAO,CAAC,OAAO,CAAC;IAIZ,gBAAgB,CACrB,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,GACrD,cAAc,CAAC,kBAAkB,CAAC;IAKtB,2BAA2B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIxD,iBAAiB,CAAC,IAAI,EAAE;QACrC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAoDxB"}
|