neoctl 0.2.53 → 0.2.54

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.
Files changed (76) hide show
  1. package/README.md +0 -1
  2. package/dist/agents/agent-tool.js +4 -4
  3. package/dist/agents/agent-tool.js.map +1 -1
  4. package/dist/core/query-engine.d.ts +10 -0
  5. package/dist/core/query-engine.js +72 -16
  6. package/dist/core/query-engine.js.map +1 -1
  7. package/dist/core/query.d.ts +1 -0
  8. package/dist/core/query.js +5 -0
  9. package/dist/core/query.js.map +1 -1
  10. package/dist/core/run-agent.js +45 -36
  11. package/dist/core/run-agent.js.map +1 -1
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.js +2 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/model/agent-settings-boundary.d.ts +11 -0
  16. package/dist/model/agent-settings-boundary.js +52 -0
  17. package/dist/model/agent-settings-boundary.js.map +1 -0
  18. package/dist/model/anthropic-adapter.d.ts +24 -0
  19. package/dist/model/anthropic-adapter.js +106 -0
  20. package/dist/model/anthropic-adapter.js.map +1 -0
  21. package/dist/model/anthropic-mapper.d.ts +14 -0
  22. package/dist/model/anthropic-mapper.js +340 -0
  23. package/dist/model/anthropic-mapper.js.map +1 -0
  24. package/dist/model/composition-runtime.d.ts +31 -0
  25. package/dist/model/composition-runtime.js +31 -0
  26. package/dist/model/composition-runtime.js.map +1 -0
  27. package/dist/model/config.d.ts +10 -3
  28. package/dist/model/config.js +26 -10
  29. package/dist/model/config.js.map +1 -1
  30. package/dist/model/context-window.d.ts +16 -1
  31. package/dist/model/context-window.js +171 -5
  32. package/dist/model/context-window.js.map +1 -1
  33. package/dist/model/env.js +0 -1
  34. package/dist/model/env.js.map +1 -1
  35. package/dist/model/model-gateway.d.ts +3 -1
  36. package/dist/model/model-gateway.js +4 -0
  37. package/dist/model/model-gateway.js.map +1 -1
  38. package/dist/model/model-metadata.json +9 -3
  39. package/dist/model/openai-adapter.js +2 -1
  40. package/dist/model/openai-adapter.js.map +1 -1
  41. package/dist/model/provider-factory.js +28 -1
  42. package/dist/model/provider-factory.js.map +1 -1
  43. package/dist/model/settings-files.d.ts +3 -0
  44. package/dist/model/settings-files.js +43 -0
  45. package/dist/model/settings-files.js.map +1 -0
  46. package/dist/model/settings-store.d.ts +84 -0
  47. package/dist/model/settings-store.js +191 -0
  48. package/dist/model/settings-store.js.map +1 -0
  49. package/dist/model/settings-sync.d.ts +23 -0
  50. package/dist/model/settings-sync.js +68 -0
  51. package/dist/model/settings-sync.js.map +1 -0
  52. package/dist/repl/commands.d.ts +1 -1
  53. package/dist/repl/commands.js +3 -2
  54. package/dist/repl/commands.js.map +1 -1
  55. package/dist/repl/index.js +50 -22
  56. package/dist/repl/index.js.map +1 -1
  57. package/dist/session/session-store.d.ts +2 -0
  58. package/dist/session/session-store.js +7 -1
  59. package/dist/session/session-store.js.map +1 -1
  60. package/dist/tasks/task-persistence.js +2 -1
  61. package/dist/tasks/task-persistence.js.map +1 -1
  62. package/dist/tools/builtins/image-generation-tool.js +2 -0
  63. package/dist/tools/builtins/image-generation-tool.js.map +1 -1
  64. package/dist/tools/builtins/search-providers.js +2 -0
  65. package/dist/tools/builtins/search-providers.js.map +1 -1
  66. package/dist/tools/builtins/search-tool.d.ts +2 -0
  67. package/dist/tools/builtins/search-tool.js +2 -2
  68. package/dist/tools/builtins/search-tool.js.map +1 -1
  69. package/dist/web/index.d.ts +9 -3
  70. package/dist/web/index.js +121 -29
  71. package/dist/web/index.js.map +1 -1
  72. package/dist/web/model-settings-api.d.ts +9 -0
  73. package/dist/web/model-settings-api.js +221 -0
  74. package/dist/web/model-settings-api.js.map +1 -0
  75. package/package.json +2 -2
  76. package/scripts/initialize-model-metadata.mjs +6 -0
@@ -0,0 +1,106 @@
1
+ import { EnvCredentialProvider, StaticCredentialProvider } from "./credentials.js";
2
+ import { categoryForStatus, ModelAPIError, normalizeUnknownError, parseRetryAfterMs } from "./errors.js";
3
+ import { anthropicInvalid, buildAnthropicRequest, normalizeAnthropicObject, normalizeAnthropicStream } from "./anthropic-mapper.js";
4
+ /** Native Messages API. CPA owns upstream OAuth; neo only receives its API key. */
5
+ export class AnthropicAdapter {
6
+ options;
7
+ name = "anthropic";
8
+ capabilities = {
9
+ streaming: true, functionTools: true, parallelToolCalls: true, structuredOutput: true,
10
+ previousResponseId: false, imageInput: true, fileInput: false, reasoningConfig: true, builtInTools: false,
11
+ };
12
+ credentials;
13
+ url;
14
+ constructor(options) {
15
+ this.options = options;
16
+ this.credentials = options.credentialProvider ?? (options.apiKey ? new StaticCredentialProvider(options.apiKey) : new EnvCredentialProvider("ANTHROPIC_API_KEY"));
17
+ const base = (options.baseUrl ?? "https://api.anthropic.com").replace(/\/+$/, "");
18
+ const parsed = new URL(base);
19
+ if (!["http:", "https:"].includes(parsed.protocol) || parsed.search || parsed.hash)
20
+ anthropicInvalid("ANTHROPIC_BASE_URL must be an HTTP(S) origin or API prefix without query/fragment");
21
+ this.url = base.endsWith("/v1/messages") ? base : base.endsWith("/v1") ? `${base}/messages` : `${base}/v1/messages`;
22
+ }
23
+ async *stream(request) {
24
+ const body = buildAnthropicRequest(request, this.options);
25
+ const credential = await this.credentials.getCredential();
26
+ if (!credential)
27
+ throw new ModelAPIError({ provider: this.name, category: "auth_unavailable", message: "ANTHROPIC_API_KEY (official or gateway key) is not configured" });
28
+ const maxRetries = this.options.maxRetries ?? 2;
29
+ for (let attempt = 0;; attempt++) {
30
+ let published = false;
31
+ try {
32
+ for await (const event of this.attempt(request, body, credential)) {
33
+ if (["assistant_delta", "thinking_delta", "assistant_message", "tool_call_started", "tool_call_delta", "tool_use"].includes(event.type))
34
+ published = true;
35
+ yield event;
36
+ }
37
+ return;
38
+ }
39
+ catch (error) {
40
+ if (request.cancellation?.aborted)
41
+ throw new ModelAPIError({ provider: this.name, category: "user_abort", message: "Claude request cancelled", retryable: false });
42
+ const normalized = normalizeUnknownError(error, this.name);
43
+ if (published || !normalized.retryable || attempt >= maxRetries)
44
+ throw normalized;
45
+ const delayMs = Math.min(normalized.retryAfterMs ?? 3000, 32000);
46
+ yield { type: "retrying", error: normalized, attempt: attempt + 1, delayMs };
47
+ await abortableDelay(delayMs, request.cancellation);
48
+ }
49
+ }
50
+ }
51
+ async *attempt(request, body, credential) {
52
+ const controller = new AbortController();
53
+ const cancel = () => controller.abort();
54
+ if (request.cancellation?.aborted)
55
+ cancel();
56
+ request.cancellation?.addEventListener("abort", cancel, { once: true });
57
+ const timeoutMs = request.timeoutMs ?? this.options.timeoutMs ?? 120000;
58
+ const timer = timeoutMs > 0 ? setTimeout(cancel, timeoutMs) : undefined;
59
+ try {
60
+ const response = await fetch(this.url, {
61
+ method: "POST",
62
+ headers: { "Content-Type": "application/json", Accept: request.stream === false ? "application/json" : "text/event-stream", "User-Agent": "neoctl/anthropic", "x-api-key": credential, "anthropic-version": this.options.apiVersion ?? "2023-06-01" },
63
+ body: JSON.stringify(body), signal: controller.signal,
64
+ });
65
+ if (request.stream !== false && response.ok && timer)
66
+ clearTimeout(timer);
67
+ if (!response.ok) {
68
+ const raw = await response.text();
69
+ let parsed;
70
+ try {
71
+ parsed = JSON.parse(raw);
72
+ }
73
+ catch {
74
+ parsed = { message: raw };
75
+ }
76
+ const error = parsed.error && typeof parsed.error === "object" ? parsed.error : parsed;
77
+ const message = typeof error.message === "string" ? error.message : `HTTP ${response.status} from Claude`;
78
+ throw new ModelAPIError({ provider: this.name, category: /prompt is too long|context.*(?:length|limit)/i.test(message) ? "context_length" : categoryForStatus(response.status, parsed), message, status: response.status, code: typeof error.type === "string" ? error.type : undefined, requestId: response.headers.get("request-id") ?? undefined, retryAfterMs: parseRetryAfterMs(response.headers.get("retry-after")), raw: parsed });
79
+ }
80
+ const model = request.model ?? this.options.model;
81
+ if (request.stream === false)
82
+ yield* normalizeAnthropicObject(await response.json(), model);
83
+ else {
84
+ if (!response.body)
85
+ throw new ModelAPIError({ provider: this.name, category: "provider_bug", message: "Claude streaming response has no body", retryable: false });
86
+ yield* normalizeAnthropicStream(response.body, model, this.options.streamIdleTimeoutMs);
87
+ }
88
+ }
89
+ finally {
90
+ if (timer)
91
+ clearTimeout(timer);
92
+ request.cancellation?.removeEventListener("abort", cancel);
93
+ controller.abort();
94
+ }
95
+ }
96
+ }
97
+ async function abortableDelay(ms, signal) {
98
+ if (signal?.aborted)
99
+ throw new ModelAPIError({ provider: "anthropic", category: "user_abort", message: "Claude request cancelled", retryable: false });
100
+ await new Promise((resolve, reject) => {
101
+ const abort = () => { clearTimeout(timer); signal?.removeEventListener("abort", abort); reject(new ModelAPIError({ provider: "anthropic", category: "user_abort", message: "Claude request cancelled", retryable: false })); };
102
+ const timer = setTimeout(() => { signal?.removeEventListener("abort", abort); resolve(); }, ms);
103
+ signal?.addEventListener("abort", abort, { once: true });
104
+ });
105
+ }
106
+ //# sourceMappingURL=anthropic-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-adapter.js","sourceRoot":"","sources":["../../src/model/anthropic-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ModelRequest, ModelStreamEvent, ModelUsage, ReasoningConfig } from "./model-gateway.js";
2
+ type Block = Record<string, unknown>;
3
+ export interface AnthropicMapperOptions {
4
+ model: string;
5
+ defaultMaxOutputTokens?: number;
6
+ defaultReasoning?: ReasoningConfig | null;
7
+ thinkingBudgetTokens?: number;
8
+ }
9
+ export declare function anthropicInvalid(message: string): never;
10
+ export declare function buildAnthropicRequest(request: ModelRequest, options: AnthropicMapperOptions): Block;
11
+ export declare function anthropicUsage(raw: Block): ModelUsage;
12
+ export declare function normalizeAnthropicObject(body: Block, model: string): Generator<ModelStreamEvent>;
13
+ export declare function normalizeAnthropicStream(stream: ReadableStream<Uint8Array>, model: string, idleTimeoutMs?: number): AsyncGenerator<ModelStreamEvent>;
14
+ export {};
@@ -0,0 +1,340 @@
1
+ import { createHash } from "node:crypto";
2
+ import { createTextMessage } from "../types/messages.js";
3
+ import { splitSystemPromptPrefix } from "../context/prompts.js";
4
+ import { resolveImageBlockDataSync } from "../core/image-storage.js";
5
+ import { validateImageInput } from "../core/image-input.js";
6
+ import { ModelAPIError } from "./errors.js";
7
+ import { decodeSSE } from "./sse-decoder.js";
8
+ import { findModelMetadata } from "./context-window.js";
9
+ export function anthropicInvalid(message) {
10
+ throw new ModelAPIError({ provider: "anthropic", category: "invalid_request", message, retryable: false });
11
+ }
12
+ function protocolError(message) {
13
+ throw new ModelAPIError({ provider: "anthropic", category: "provider_bug", message, retryable: false });
14
+ }
15
+ function record(value) { return !!value && typeof value === "object" && !Array.isArray(value); }
16
+ function visibleFingerprint(blocks) {
17
+ return createHash("sha256").update(JSON.stringify(blocks.filter(b => b.type !== "thinking"))).digest("hex");
18
+ }
19
+ export function buildAnthropicRequest(request, options) {
20
+ const model = request.model ?? options.model;
21
+ const metadata = findModelMetadata(model);
22
+ const maxTokens = request.maxOutputTokens ?? options.defaultMaxOutputTokens ?? 8192;
23
+ if (!Number.isSafeInteger(maxTokens) || maxTokens <= 0)
24
+ anthropicInvalid("Claude max_tokens must be a positive integer");
25
+ if (metadata?.provider === "anthropic" && metadata.maxOutputTokens && maxTokens > metadata.maxOutputTokens)
26
+ anthropicInvalid(`max_tokens exceeds the configured limit for ${model}: ${metadata.maxOutputTokens}`);
27
+ const split = splitSystemPromptPrefix(request.instructions ?? request.systemPrompt ?? "");
28
+ const system = [split.stablePrefix, split.dynamicSuffix].filter(Boolean).map(text => ({ type: "text", text }));
29
+ const turns = [];
30
+ const uses = new Set(), results = new Set();
31
+ for (const m of request.messages)
32
+ for (const b of m.blocks) {
33
+ if (b.type === "tool_use")
34
+ uses.add(b.id);
35
+ if (b.type === "tool_result")
36
+ results.add(b.toolUseId);
37
+ }
38
+ const paired = new Set([...uses].filter(id => results.has(id)));
39
+ for (const message of request.messages) {
40
+ if (message.role === "progress" || message.role === "tombstone" || message.metadata?.displayOnly || message.metadata?.systemInit)
41
+ continue;
42
+ if (message.role === "system") {
43
+ for (const b of message.blocks)
44
+ if (b.type === "text" && b.text.trim())
45
+ system.push({ type: "text", text: b.text });
46
+ continue;
47
+ }
48
+ const role = message.role === "assistant" ? "assistant" : "user";
49
+ let content = [];
50
+ // Preserve the provider's signed/opaque blocks through neo's local thinking
51
+ // filtering and session persistence. Never replay another provider/model's
52
+ // signatures or resurrect content changed by compaction.
53
+ const replay = message.metadata?.anthropicReplay;
54
+ if (role === "assistant" && record(replay) && replay.model === model && replay.fingerprint === visibleFingerprint(message.blocks) && Array.isArray(replay.content)) {
55
+ content = replay.content.filter(b => b.type !== "tool_use" || paired.has(String(b.id))).map(b => ({ ...b }));
56
+ }
57
+ else {
58
+ for (const b of message.blocks) {
59
+ if (b.type === "text" && b.text.trim())
60
+ content.push({ type: "text", text: b.text });
61
+ else if (b.type === "image" && role === "user") {
62
+ const data = resolveImageBlockDataSync(b);
63
+ if (!data)
64
+ anthropicInvalid("Claude image data is missing");
65
+ const image = validateImageInput(data);
66
+ content.push({ type: "image", source: { type: "base64", media_type: image.mimeType, data: image.data } });
67
+ }
68
+ else if (b.type === "tool_use" && role === "assistant" && paired.has(b.id)) {
69
+ if (!record(b.input))
70
+ anthropicInvalid(`Tool input for ${b.name} must be a JSON object`);
71
+ content.push({ type: "tool_use", id: b.id, name: b.name, input: b.input });
72
+ }
73
+ else if (b.type === "tool_result" && paired.has(b.toolUseId)) {
74
+ content.push({ type: "tool_result", tool_use_id: b.toolUseId, is_error: !b.ok, content: typeof b.output === "string" ? b.output : JSON.stringify(b.output) ?? "null" });
75
+ }
76
+ }
77
+ }
78
+ if (!content.length)
79
+ continue;
80
+ const last = turns[turns.length - 1];
81
+ if (last?.role === role)
82
+ last.content.push(...content);
83
+ else
84
+ turns.push({ role, content });
85
+ }
86
+ // Multiple parallel tool results and injected runtime context share a user
87
+ // turn. Anthropic requires all tool_result blocks before ordinary user text.
88
+ for (const turn of turns)
89
+ if (turn.role === "user")
90
+ turn.content = [...turn.content.filter(b => b.type === "tool_result"), ...turn.content.filter(b => b.type !== "tool_result")];
91
+ let pending = new Set();
92
+ for (const turn of turns) {
93
+ if (turn.role === "user") {
94
+ const ids = turn.content.filter(b => b.type === "tool_result").map(b => String(b.tool_use_id));
95
+ if (ids.length !== new Set(ids).size || ids.some(id => !pending.has(id)) || [...pending].some(id => !ids.includes(id)))
96
+ anthropicInvalid("Claude tool results must immediately follow and match all assistant tool calls");
97
+ pending.clear();
98
+ }
99
+ else {
100
+ pending = new Set(turn.content.filter(b => b.type === "tool_use").map(b => String(b.id)));
101
+ }
102
+ }
103
+ if (pending.size)
104
+ anthropicInvalid("Claude tool calls are missing their following results");
105
+ if (!turns.length || turns[0].role !== "user")
106
+ anthropicInvalid("Claude messages must start with a non-empty user turn");
107
+ if (turns[turns.length - 1].role === "assistant")
108
+ anthropicInvalid("Claude assistant prefill is not supported; append a user turn");
109
+ const body = { model, max_tokens: maxTokens, messages: turns, stream: request.stream !== false };
110
+ if (system.length)
111
+ body.system = system;
112
+ const tools = request.tools.map(t => ({ name: t.name, description: t.description, input_schema: t.inputSchema }));
113
+ if (tools.length) {
114
+ body.tools = tools;
115
+ const choice = request.toolChoice;
116
+ if (typeof choice === "object") {
117
+ if (!tools.some(t => t.name === choice.name))
118
+ anthropicInvalid(`Unknown Claude tool choice: ${choice.name}`);
119
+ body.tool_choice = { type: "tool", name: choice.name };
120
+ }
121
+ else
122
+ body.tool_choice = { type: choice === "required" ? "any" : choice ?? "auto" };
123
+ }
124
+ else if (request.toolChoice === "required" || typeof request.toolChoice === "object")
125
+ anthropicInvalid("Claude tool choice requires tools");
126
+ configureThinking(body, request, options, model, maxTokens);
127
+ if (request.textFormat?.type === "json_schema") {
128
+ if (!request.textFormat.schema)
129
+ anthropicInvalid("Claude JSON schema output requires a schema");
130
+ body.output_config = { ...(body.output_config ?? {}), format: { type: "json_schema", schema: request.textFormat.schema } };
131
+ }
132
+ else if (request.textFormat?.type === "json_object")
133
+ anthropicInvalid("Claude requires json_schema rather than OpenAI json_object output");
134
+ if (request.serviceTier && request.serviceTier !== "auto" && request.serviceTier !== "default")
135
+ anthropicInvalid(`Claude does not map OpenAI service tier '${request.serviceTier}'`);
136
+ if (request.serviceTier === "auto")
137
+ body.service_tier = "auto";
138
+ if (request.serviceTier === "default")
139
+ body.service_tier = "standard_only";
140
+ if (request.metadata?.user_id)
141
+ body.metadata = { user_id: request.metadata.user_id };
142
+ // Deliberately no OpenAI-only fields, previous_response_id, or arbitrary
143
+ // providerOptions spreading. Claude history is sent explicitly each time.
144
+ return body;
145
+ }
146
+ function configureThinking(body, request, options, model, maxTokens) {
147
+ const reasoning = request.reasoning === undefined ? options.defaultReasoning : request.reasoning;
148
+ if (reasoning?.summary)
149
+ anthropicInvalid("OpenAI reasoning.summary is not a Claude parameter");
150
+ const effort = reasoning?.effort;
151
+ const metadata = findModelMetadata(model);
152
+ if (effort && metadata?.provider === "anthropic" && metadata.reasoningEfforts && !metadata.reasoningEfforts.includes(effort))
153
+ anthropicInvalid(`Claude model ${model} does not support effort '${effort}'`);
154
+ const adaptive = /claude-(?:opus-4-[678]|sonnet-4-6|(?:opus|sonnet|haiku|fable|mythos)-5|mythos-preview)/i.test(model);
155
+ const alwaysOn = /claude-(?:opus-5-5|sonnet-5-5|fable-5|mythos-5|mythos-preview)/i.test(model);
156
+ const disabled = reasoning === null || effort === "none";
157
+ if (disabled) {
158
+ if (alwaysOn)
159
+ anthropicInvalid(`Thinking cannot be disabled on ${model}`);
160
+ body.thinking = { type: "disabled" };
161
+ }
162
+ else if (effort) {
163
+ if (effort === "minimal" && !metadata?.reasoningEfforts?.includes(effort))
164
+ anthropicInvalid("Claude has no 'minimal' effort; select low, medium, or high");
165
+ if (adaptive) {
166
+ body.thinking = { type: "adaptive" };
167
+ body.output_config = { effort };
168
+ }
169
+ else {
170
+ if (!["low", "medium", "high"].includes(effort))
171
+ anthropicInvalid("Legacy Claude thinking supports low/medium/high budget mapping only");
172
+ const budget = options.thinkingBudgetTokens ?? Math.min(({ low: 1024, medium: 2048, high: 4096 }[effort]), maxTokens - 1);
173
+ if (!Number.isSafeInteger(budget) || budget < 1024 || budget >= maxTokens)
174
+ anthropicInvalid("Claude thinking budget must be >=1024 and less than max_tokens; raise MODEL_MAX_OUTPUT_TOKENS or set ANTHROPIC_THINKING_BUDGET_TOKENS");
175
+ body.thinking = { type: "enabled", budget_tokens: budget };
176
+ }
177
+ }
178
+ const choice = body.tool_choice;
179
+ const thinkingEnabled = !!body.thinking && body.thinking.type !== "disabled";
180
+ const defaultThinking = /claude-(?:(?:opus|sonnet|haiku|fable|mythos)-5|mythos-preview)/i.test(model) && !disabled;
181
+ if ((thinkingEnabled || defaultThinking) && (choice?.type === "any" || choice?.type === "tool"))
182
+ anthropicInvalid("Claude thinking requires auto or none tool choice");
183
+ }
184
+ export function anthropicUsage(raw) {
185
+ const number = (key) => typeof raw[key] === "number" ? raw[key] : 0;
186
+ const inputTokens = number("input_tokens") + number("cache_creation_input_tokens") + number("cache_read_input_tokens");
187
+ const outputTokens = number("output_tokens");
188
+ return { inputTokens, outputTokens, totalTokens: inputTokens + outputTokens, cachedTokens: number("cache_read_input_tokens"), raw };
189
+ }
190
+ function assistantMessage(content, model, id) {
191
+ const blocks = [];
192
+ for (const b of content) {
193
+ if (b.type === "text" && typeof b.text === "string")
194
+ blocks.push({ type: "text", text: b.text });
195
+ else if (b.type === "thinking")
196
+ blocks.push({ type: "thinking", text: String(b.thinking ?? ""), signature: typeof b.signature === "string" ? b.signature : undefined });
197
+ else if (b.type === "tool_use") {
198
+ if (typeof b.id !== "string" || typeof b.name !== "string" || !record(b.input))
199
+ protocolError("Invalid Claude tool_use block");
200
+ blocks.push({ type: "tool_use", id: b.id, name: b.name, input: b.input });
201
+ }
202
+ }
203
+ const message = { ...createTextMessage("assistant", ""), blocks, providerMessageId: id };
204
+ return { ...message, metadata: { anthropicReplay: { model, content, fingerprint: visibleFingerprint(blocks) } } };
205
+ }
206
+ export function* normalizeAnthropicObject(body, model) {
207
+ if (body.type === "error")
208
+ throw anthropicStreamError(body);
209
+ if (body.type !== "message" || !Array.isArray(body.content))
210
+ protocolError("Expected an Anthropic Message response");
211
+ if (typeof body.stop_reason !== "string" || !body.stop_reason)
212
+ protocolError("Incomplete Claude Message response: missing stop_reason");
213
+ if (!body.content.every(record))
214
+ protocolError("Invalid Claude Message content block");
215
+ const content = body.content;
216
+ const id = typeof body.id === "string" ? body.id : undefined;
217
+ if (id)
218
+ yield { type: "response_started", responseId: id };
219
+ yield { type: "assistant_message", message: assistantMessage(content, model, id) };
220
+ yield completionEvent(body.stop_reason, anthropicUsage(record(body.usage) ? body.usage : {}));
221
+ }
222
+ export async function* normalizeAnthropicStream(stream, model, idleTimeoutMs = 120000) {
223
+ const blocks = new Map();
224
+ const partialJson = new Map();
225
+ const openBlocks = new Set();
226
+ let id, started = false, stopped = false, reason;
227
+ let usage = {};
228
+ for await (const sse of decodeSSE(stream, idleTimeoutMs)) {
229
+ if (!record(sse.data))
230
+ protocolError("Invalid JSON in Claude SSE event");
231
+ const event = sse.data;
232
+ const type = event.type ?? sse.event;
233
+ if (type === "error")
234
+ throw anthropicStreamError(event);
235
+ yield { type: "provider_event", event };
236
+ if (type === "message_start") {
237
+ if (started || !record(event.message))
238
+ protocolError("Invalid Claude message_start");
239
+ started = true;
240
+ const message = event.message;
241
+ id = typeof message.id === "string" ? message.id : undefined;
242
+ if (record(message.usage))
243
+ usage = { ...message.usage };
244
+ if (id)
245
+ yield { type: "response_started", responseId: id };
246
+ }
247
+ else if (type === "content_block_start") {
248
+ const index = event.index;
249
+ if (!started || !Number.isInteger(index) || blocks.has(index) || !record(event.content_block))
250
+ protocolError("Invalid Claude content_block_start");
251
+ const block = { ...event.content_block };
252
+ blocks.set(index, block);
253
+ openBlocks.add(index);
254
+ if (block.type === "tool_use") {
255
+ partialJson.set(index, "");
256
+ yield { type: "tool_call_started", callId: String(block.id), name: String(block.name) };
257
+ }
258
+ }
259
+ else if (type === "content_block_delta") {
260
+ const index = event.index, block = blocks.get(index);
261
+ if (!block || !openBlocks.has(index) || !record(event.delta))
262
+ protocolError("Claude delta has no open content block");
263
+ const b = block, delta = event.delta;
264
+ if (delta.type === "text_delta") {
265
+ const text = String(delta.text ?? "");
266
+ b.text = String(b.text ?? "") + text;
267
+ yield { type: "assistant_delta", text };
268
+ }
269
+ else if (delta.type === "thinking_delta") {
270
+ const text = String(delta.thinking ?? "");
271
+ b.thinking = String(b.thinking ?? "") + text;
272
+ yield { type: "thinking_delta", text };
273
+ }
274
+ else if (delta.type === "signature_delta")
275
+ b.signature = String(b.signature ?? "") + String(delta.signature ?? "");
276
+ else if (delta.type === "input_json_delta") {
277
+ const text = String(delta.partial_json ?? "");
278
+ partialJson.set(index, (partialJson.get(index) ?? "") + text);
279
+ yield { type: "tool_call_delta", callId: String(b.id), name: String(b.name), argumentsDelta: text };
280
+ }
281
+ else if (delta.type === "citations_delta") {
282
+ b.citations = [...(Array.isArray(b.citations) ? b.citations : []), delta.citation];
283
+ }
284
+ }
285
+ else if (type === "content_block_stop") {
286
+ const index = event.index, block = blocks.get(index);
287
+ if (!block || !openBlocks.delete(index))
288
+ protocolError("Claude stopped an unopened content block");
289
+ if (block.type === "tool_use") {
290
+ const json = partialJson.get(index);
291
+ if (json) {
292
+ try {
293
+ block.input = JSON.parse(json);
294
+ }
295
+ catch {
296
+ protocolError("Claude returned incomplete or malformed tool JSON");
297
+ }
298
+ }
299
+ if (!record(block.input))
300
+ protocolError("Claude tool input must be an object");
301
+ }
302
+ if (block.type === "text")
303
+ yield { type: "assistant_text_done" };
304
+ }
305
+ else if (type === "message_delta") {
306
+ if (record(event.delta) && typeof event.delta.stop_reason === "string")
307
+ reason = event.delta.stop_reason;
308
+ if (record(event.usage))
309
+ usage = { ...usage, ...event.usage };
310
+ }
311
+ else if (type === "message_stop") {
312
+ if (!started || openBlocks.size || !reason)
313
+ protocolError("Incomplete Claude message at message_stop");
314
+ stopped = true;
315
+ const content = [...blocks.entries()].sort(([a], [b]) => a - b).map(([, b]) => b);
316
+ // Emit completed tool calls only after the whole message validates. A
317
+ // truncated stream must never execute a partially received command.
318
+ yield { type: "assistant_message", message: assistantMessage(content, model, id) };
319
+ yield completionEvent(reason, anthropicUsage(usage));
320
+ break;
321
+ }
322
+ }
323
+ if (!stopped)
324
+ protocolError("Claude stream closed before message_stop");
325
+ }
326
+ function completionEvent(reason, usage) {
327
+ return reason === "max_tokens" || reason === "model_context_window_exceeded"
328
+ ? { type: "response_incomplete", reason, usage }
329
+ : { type: "response_completed", stopReason: reason, usage };
330
+ }
331
+ function anthropicStreamError(event) {
332
+ const error = record(event.error) ? event.error : event;
333
+ const type = String(error.type ?? "api_error"), message = String(error.message ?? "Claude stream error");
334
+ const category = /prompt is too long|context.*(?:length|limit)/i.test(message) ? "context_length"
335
+ : type === "overloaded_error" ? "overloaded" : type === "rate_limit_error" ? "rate_limit"
336
+ : type === "authentication_error" ? "auth_unavailable" : type === "permission_error" ? "permission_denied"
337
+ : type === "invalid_request_error" ? "invalid_request" : "server_error";
338
+ return new ModelAPIError({ provider: "anthropic", category, code: type, message, raw: event });
339
+ }
340
+ //# sourceMappingURL=anthropic-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-mapper.js","sourceRoot":"","sources":["../../src/model/anthropic-mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type ApiConnection, type Composition } from "./settings-store.js";
2
+ import type { ToolRegistry } from "../tools/registry.js";
3
+ export declare function compositionProviders(c: Composition, connections: ApiConnection[]): {
4
+ openai: import("../tools/builtins/search-providers.js").SearchProvider | undefined;
5
+ exa: import("../tools/builtins/search-providers.js").SearchProvider | undefined;
6
+ image: {
7
+ description: string;
8
+ name: string;
9
+ aliases?: readonly string[];
10
+ searchHint?: string;
11
+ inputSchema: import("../index.js").JsonSchema;
12
+ outputSchema?: import("../index.js").JsonSchema;
13
+ metadata: import("../index.js").ToolMetadata;
14
+ validate?(input: unknown, context: import("../index.js").ToolUseContext): import("../tools/builtins/image-generation-tool.js").ImageGenerationToolInput;
15
+ validateInput?(input: import("../tools/builtins/image-generation-tool.js").ImageGenerationToolInput, context: import("../index.js").ToolUseContext): import("../index.js").ValidationResult<import("../tools/builtins/image-generation-tool.js").ImageGenerationToolInput> | Promise<import("../index.js").ValidationResult<import("../tools/builtins/image-generation-tool.js").ImageGenerationToolInput>>;
16
+ isConcurrencySafe?(input: import("../tools/builtins/image-generation-tool.js").ImageGenerationToolInput, context: import("../index.js").ToolUseContext): boolean;
17
+ isEnabled?(context?: import("../index.js").ToolUseContext): boolean;
18
+ isReadOnly?(input: import("../tools/builtins/image-generation-tool.js").ImageGenerationToolInput, context: import("../index.js").ToolUseContext): boolean;
19
+ isDestructive?(input: import("../tools/builtins/image-generation-tool.js").ImageGenerationToolInput, context: import("../index.js").ToolUseContext): boolean;
20
+ interruptBehavior?(input: import("../tools/builtins/image-generation-tool.js").ImageGenerationToolInput, context: import("../index.js").ToolUseContext): "cancel" | "block";
21
+ backfillObservableInput?(input: import("../tools/builtins/image-generation-tool.js").ImageGenerationToolInput, context: import("../index.js").ToolUseContext): unknown;
22
+ execute?(input: import("../tools/builtins/image-generation-tool.js").ImageGenerationToolInput, context: import("../index.js").ToolUseContext): Promise<import("../index.js").ToolResult>;
23
+ call?(input: import("../tools/builtins/image-generation-tool.js").ImageGenerationToolInput, context: import("../index.js").ToolUseContext, options: import("../index.js").ToolCallOptions<import("../tools/builtins/image-generation-tool.js").ImageGenerationToolInput>): Promise<import("../index.js").ToolResult>;
24
+ mapResult?(result: import("../index.js").ToolResult, request: import("../index.js").ToolUseRequest): unknown;
25
+ renderToolUseMessage?(input: import("../tools/builtins/image-generation-tool.js").ImageGenerationToolInput): import("../index.js").Message | undefined;
26
+ renderToolResultMessage?(result: import("../index.js").ToolResult, request?: import("../index.js").ToolUseRequest): import("../index.js").Message | undefined;
27
+ renderToolProgressMessage?(progress: import("../index.js").ToolProgressEvent): import("../index.js").Message | undefined;
28
+ } | undefined;
29
+ search: import("../index.js").Tool<import("../tools/builtins/search-tool.js").WebSearchToolInput> | undefined;
30
+ };
31
+ export declare function registerCompositionTools(tools: ToolRegistry, c: Composition, connections: ApiConnection[]): void;
@@ -0,0 +1,31 @@
1
+ import { createSearchTool } from "../tools/builtins/search-tool.js";
2
+ import { createOpenAISearchProvider, createExaSearchProvider } from "../tools/builtins/search-providers.js";
3
+ import { createOpenAIImageGenerationTool } from "../tools/builtins/image-generation-tool.js";
4
+ import { connectionProtocols, optionalInteger } from "./settings-store.js";
5
+ export function compositionProviders(c, connections) {
6
+ const connection = (id) => { const a = connections.find(a => a.id === id); if (!a || !connectionProtocols(a).includes("openai"))
7
+ throw new Error("需要 OpenAI 兼容连接。"); return a; };
8
+ const openai = c.search.api ? (() => { const a = connection(c.search.api); return createOpenAISearchProvider({ apiKey: a.key, baseUrl: a.baseUrl, model: c.search.model, maxOutputTokens: optionalInteger(c.search.tokens, "搜索 Token"), searchContextSize: c.search.context || undefined, timeoutMs: optionalInteger(c.search.timeout, "搜索超时"), toolType: c.search.toolType }); })() : undefined;
9
+ const exa = c.search.exa ? createExaSearchProvider({ mcpUrl: c.search.exaUrl, toolName: c.search.exaTool, timeoutMs: optionalInteger(c.search.exaTimeout, "Exa 超时") }) : undefined;
10
+ const image = c.image.api ? (() => { const a = connection(c.image.api); const tool = createOpenAIImageGenerationTool({ apiKey: a.key, baseUrl: a.baseUrl, model: c.image.model, timeoutMs: optionalInteger(c.image.timeout, "图片超时") ?? 360000 }); return { ...tool, description: String(tool.description).replace("Available only when MODEL_PROVIDER=openai.", "Uses the separately configured OpenAI-compatible Images connection.") }; })() : undefined;
11
+ const search = openai || exa ? createSearchTool({
12
+ description: openai ? "Search the web. OpenAI Responses is the default. " + (exa ? "Use provider=exa only when OpenAI is unavailable, results are incomplete, or the user explicitly requests Exa." : "Exa is disabled; do not request it.") : "Search the web using Exa MCP. OpenAI search is disabled. Use provider=exa or omit provider.",
13
+ resolveProvider(name) { const selected = name?.trim().toLowerCase() || (openai ? "openai" : "exa"); const p = selected === "exa" ? exa : ["openai", "gpt"].includes(selected) ? openai : undefined; if (!p)
14
+ throw new Error(`Search provider ${selected} is not configured.`); return p; },
15
+ }) : undefined;
16
+ return { openai, exa, image, search };
17
+ }
18
+ export function registerCompositionTools(tools, c, connections) {
19
+ const providers = compositionProviders(c, connections);
20
+ for (const name of ["image_create", "web_search"]) {
21
+ const enabled = tools.isEnabled(name);
22
+ tools.unregister(name);
23
+ const tool = name === "image_create" ? providers.image : providers.search;
24
+ if (tool) {
25
+ tools.register(tool);
26
+ if (enabled === false)
27
+ tools.setEnabled(name, false);
28
+ }
29
+ }
30
+ }
31
+ //# sourceMappingURL=composition-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition-runtime.js","sourceRoot":"","sources":["../../src/model/composition-runtime.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import type { ReasoningConfig } from "./model-gateway.js";
2
- export type ModelProviderName = "openai";
1
+ import { type ReasoningConfig } from "./model-gateway.js";
2
+ export type ModelProviderName = "openai" | "anthropic";
3
3
  export type ReasoningSummary = NonNullable<ReasoningConfig["summary"]>;
4
4
  export interface BaseModelProviderConfig {
5
5
  provider: ModelProviderName;
@@ -19,6 +19,13 @@ export interface OpenAIProviderConfig extends BaseModelProviderConfig {
19
19
  endpoint?: OpenAIEndpointPreference;
20
20
  };
21
21
  }
22
- export type ModelProviderConfig = OpenAIProviderConfig;
22
+ export interface AnthropicProviderConfig extends BaseModelProviderConfig {
23
+ provider: "anthropic";
24
+ anthropic?: {
25
+ apiVersion?: string;
26
+ thinkingBudgetTokens?: number;
27
+ };
28
+ }
29
+ export type ModelProviderConfig = OpenAIProviderConfig | AnthropicProviderConfig;
23
30
  export declare function readModelProviderConfig(env?: NodeJS.ProcessEnv): ModelProviderConfig | undefined;
24
31
  export declare function parseReasoning(effortValue: string | undefined, summaryValue?: string | undefined): ReasoningConfig | null | undefined;