fourmis-agents-sdk 0.3.1 → 0.4.1
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/README.md +126 -198
- package/dist/agent-loop.d.ts +21 -3
- package/dist/agent-loop.d.ts.map +1 -1
- package/dist/agent-loop.js +279 -90
- package/dist/agents/index.js +1079 -124
- package/dist/agents/tools.d.ts.map +1 -1
- package/dist/agents/tools.js +1079 -124
- package/dist/agents/types.d.ts +4 -0
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/api.d.ts +8 -5
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +1663 -430
- package/dist/hooks.d.ts +19 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +27 -2
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1671 -431
- package/dist/mcp/client.d.ts +8 -1
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +134 -13
- package/dist/mcp/index.js +134 -13
- package/dist/mcp/types.d.ts +21 -1
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/permissions.d.ts.map +1 -1
- package/dist/permissions.js +7 -3
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +41 -2
- package/dist/providers/openai.d.ts +6 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +36 -6
- package/dist/providers/registry.js +76 -8
- package/dist/providers/types.d.ts +4 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/query.d.ts +21 -2
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +69 -1
- package/dist/skills/index.js +23 -1
- package/dist/skills/skills.d.ts +16 -0
- package/dist/skills/skills.d.ts.map +1 -1
- package/dist/skills/skills.js +23 -1
- package/dist/tools/ask-user-question.d.ts +7 -0
- package/dist/tools/ask-user-question.d.ts.map +1 -0
- package/dist/tools/ask-user-question.js +48 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +47 -2
- package/dist/tools/config.d.ts +7 -0
- package/dist/tools/config.d.ts.map +1 -0
- package/dist/tools/config.js +114 -0
- package/dist/tools/exit-plan-mode.d.ts +7 -0
- package/dist/tools/exit-plan-mode.d.ts.map +1 -0
- package/dist/tools/exit-plan-mode.js +34 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +506 -9
- package/dist/tools/notebook-edit.d.ts +7 -0
- package/dist/tools/notebook-edit.d.ts.map +1 -0
- package/dist/tools/notebook-edit.js +83 -0
- package/dist/tools/presets.d.ts +2 -1
- package/dist/tools/presets.d.ts.map +1 -1
- package/dist/tools/presets.js +22 -4
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +12 -1
- package/dist/tools/registry.d.ts +2 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +10 -0
- package/dist/tools/todo-write.d.ts +7 -0
- package/dist/tools/todo-write.d.ts.map +1 -0
- package/dist/tools/todo-write.js +69 -0
- package/dist/tools/web-fetch.d.ts +6 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +85 -0
- package/dist/tools/web-search.d.ts +7 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +78 -0
- package/dist/types.d.ts +344 -42
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/session-store.d.ts +1 -1
- package/dist/utils/session-store.d.ts.map +1 -1
- package/dist/utils/session-store.js +49 -2
- package/dist/utils/system-prompt.d.ts +2 -0
- package/dist/utils/system-prompt.d.ts.map +1 -1
- package/dist/utils/system-prompt.js +33 -4
- package/package.json +3 -2
package/dist/mcp/client.d.ts
CHANGED
|
@@ -3,14 +3,17 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { ToolImplementation, ToolResult } from "../tools/registry.js";
|
|
5
5
|
import type { McpServerConfig, McpServerStatus, McpResourceInfo } from "./types.js";
|
|
6
|
+
import type { McpSetServersResult } from "../types.js";
|
|
6
7
|
export declare class McpClientManager {
|
|
7
8
|
private configs;
|
|
8
9
|
private servers;
|
|
10
|
+
private disabled;
|
|
9
11
|
constructor(configs: Record<string, McpServerConfig>);
|
|
10
12
|
connectAll(): Promise<void>;
|
|
11
13
|
private connectOne;
|
|
14
|
+
private toStatusConfig;
|
|
12
15
|
/**
|
|
13
|
-
* Get all MCP tools wrapped as ToolImplementation, namespaced as
|
|
16
|
+
* Get all MCP tools wrapped as ToolImplementation, namespaced as server__tool.
|
|
14
17
|
*/
|
|
15
18
|
getTools(): ToolImplementation[];
|
|
16
19
|
callTool(serverName: string, toolName: string, input: unknown): Promise<ToolResult>;
|
|
@@ -19,6 +22,10 @@ export declare class McpClientManager {
|
|
|
19
22
|
})[]>;
|
|
20
23
|
readResource(serverName: string, uri: string): Promise<string>;
|
|
21
24
|
status(): McpServerStatus[];
|
|
25
|
+
reconnectServer(serverName: string): Promise<void>;
|
|
26
|
+
toggleServer(serverName: string, enabled: boolean): Promise<void>;
|
|
27
|
+
setServers(servers: Record<string, McpServerConfig>): Promise<McpSetServersResult>;
|
|
28
|
+
private closeOne;
|
|
22
29
|
closeAll(): Promise<void>;
|
|
23
30
|
}
|
|
24
31
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/mcp/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAEf,eAAe,EAChB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAEf,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AASvD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAI9C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAKnB,UAAU;IAkGxB,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,QAAQ,IAAI,kBAAkB,EAAE;IAwB1B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IA2BnF,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,eAAe,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IA4BrF,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAepE,MAAM,IAAI,eAAe,EAAE;IA0BrB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAalD,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BjE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAmC1E,QAAQ;IAWhB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAMhC"}
|
package/dist/mcp/client.js
CHANGED
|
@@ -19,14 +19,29 @@ import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
|
|
|
19
19
|
class McpClientManager {
|
|
20
20
|
configs;
|
|
21
21
|
servers = new Map;
|
|
22
|
+
disabled = new Set;
|
|
22
23
|
constructor(configs) {
|
|
23
|
-
this.configs = configs;
|
|
24
|
+
this.configs = { ...configs };
|
|
24
25
|
}
|
|
25
26
|
async connectAll() {
|
|
26
27
|
const entries = Object.entries(this.configs);
|
|
27
28
|
await Promise.all(entries.map(([name, config]) => this.connectOne(name, config)));
|
|
28
29
|
}
|
|
29
30
|
async connectOne(name, config) {
|
|
31
|
+
if (this.disabled.has(name)) {
|
|
32
|
+
this.servers.set(name, {
|
|
33
|
+
name,
|
|
34
|
+
client: null,
|
|
35
|
+
tools: [],
|
|
36
|
+
status: {
|
|
37
|
+
name,
|
|
38
|
+
status: "disabled",
|
|
39
|
+
config: this.toStatusConfig(config),
|
|
40
|
+
scope: config.type === "sdk" ? "sdk" : "session"
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
30
45
|
try {
|
|
31
46
|
const client = new Client({ name: `fourmis-${name}`, version: "1.0.0" });
|
|
32
47
|
if (config.type === "sdk") {
|
|
@@ -60,13 +75,25 @@ class McpClientManager {
|
|
|
60
75
|
const tools = (toolsResult.tools ?? []).map((t) => ({
|
|
61
76
|
name: t.name,
|
|
62
77
|
description: t.description,
|
|
63
|
-
inputSchema: t.inputSchema
|
|
78
|
+
inputSchema: t.inputSchema,
|
|
79
|
+
annotations: t.annotations ? {
|
|
80
|
+
readOnly: t.annotations.readOnly,
|
|
81
|
+
destructive: t.annotations.destructive,
|
|
82
|
+
openWorld: t.annotations.openWorld
|
|
83
|
+
} : undefined
|
|
64
84
|
}));
|
|
65
85
|
this.servers.set(name, {
|
|
66
86
|
name,
|
|
67
87
|
client,
|
|
68
88
|
tools,
|
|
69
|
-
status: {
|
|
89
|
+
status: {
|
|
90
|
+
name,
|
|
91
|
+
status: "connected",
|
|
92
|
+
tools,
|
|
93
|
+
serverInfo: { name, version: "1.0.0" },
|
|
94
|
+
config: this.toStatusConfig(config),
|
|
95
|
+
scope: config.type === "sdk" ? "sdk" : "session"
|
|
96
|
+
}
|
|
70
97
|
});
|
|
71
98
|
} catch (err) {
|
|
72
99
|
const error = err instanceof Error ? err.message : String(err);
|
|
@@ -74,17 +101,31 @@ class McpClientManager {
|
|
|
74
101
|
name,
|
|
75
102
|
client: null,
|
|
76
103
|
tools: [],
|
|
77
|
-
status: {
|
|
104
|
+
status: {
|
|
105
|
+
name,
|
|
106
|
+
status: "failed",
|
|
107
|
+
error,
|
|
108
|
+
config: this.toStatusConfig(config),
|
|
109
|
+
scope: config.type === "sdk" ? "sdk" : "session"
|
|
110
|
+
}
|
|
78
111
|
});
|
|
79
112
|
}
|
|
80
113
|
}
|
|
114
|
+
toStatusConfig(config) {
|
|
115
|
+
if (config.type === "sdk") {
|
|
116
|
+
return { type: "sdk", name: config.name };
|
|
117
|
+
}
|
|
118
|
+
return config;
|
|
119
|
+
}
|
|
81
120
|
getTools() {
|
|
82
121
|
const result = [];
|
|
83
122
|
for (const [serverName, server] of this.servers) {
|
|
84
123
|
if (server.status.status !== "connected")
|
|
85
124
|
continue;
|
|
86
125
|
for (const tool of server.tools) {
|
|
87
|
-
const
|
|
126
|
+
const config = this.configs[serverName];
|
|
127
|
+
const prefix = "toolPrefix" in config ? config.toolPrefix : serverName;
|
|
128
|
+
const namespacedName = prefix === "" ? tool.name : `${prefix}__${tool.name}`;
|
|
88
129
|
result.push({
|
|
89
130
|
name: namespacedName,
|
|
90
131
|
description: tool.description ?? `MCP tool ${tool.name} from ${serverName}`,
|
|
@@ -155,24 +196,104 @@ class McpClientManager {
|
|
|
155
196
|
}
|
|
156
197
|
status() {
|
|
157
198
|
const result = [];
|
|
158
|
-
for (const [name] of Object.entries(this.configs)) {
|
|
199
|
+
for (const [name, config] of Object.entries(this.configs)) {
|
|
159
200
|
const server = this.servers.get(name);
|
|
160
201
|
if (server) {
|
|
161
202
|
result.push(server.status);
|
|
203
|
+
} else if (this.disabled.has(name)) {
|
|
204
|
+
result.push({
|
|
205
|
+
name,
|
|
206
|
+
status: "disabled",
|
|
207
|
+
config: this.toStatusConfig(config),
|
|
208
|
+
scope: config.type === "sdk" ? "sdk" : "session"
|
|
209
|
+
});
|
|
162
210
|
} else {
|
|
163
|
-
result.push({
|
|
211
|
+
result.push({
|
|
212
|
+
name,
|
|
213
|
+
status: "pending",
|
|
214
|
+
config: this.toStatusConfig(config),
|
|
215
|
+
scope: config.type === "sdk" ? "sdk" : "session"
|
|
216
|
+
});
|
|
164
217
|
}
|
|
165
218
|
}
|
|
166
219
|
return result;
|
|
167
220
|
}
|
|
168
|
-
async
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
221
|
+
async reconnectServer(serverName) {
|
|
222
|
+
const config = this.configs[serverName];
|
|
223
|
+
if (!config) {
|
|
224
|
+
throw new Error(`MCP server "${serverName}" is not configured`);
|
|
225
|
+
}
|
|
226
|
+
await this.closeOne(serverName);
|
|
227
|
+
await this.connectOne(serverName, config);
|
|
228
|
+
const status = this.servers.get(serverName)?.status;
|
|
229
|
+
if (!status || status.status !== "connected") {
|
|
230
|
+
throw new Error(status?.error ?? `Failed to reconnect MCP server "${serverName}"`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
async toggleServer(serverName, enabled) {
|
|
234
|
+
const config = this.configs[serverName];
|
|
235
|
+
if (!config) {
|
|
236
|
+
throw new Error(`MCP server "${serverName}" is not configured`);
|
|
237
|
+
}
|
|
238
|
+
if (!enabled) {
|
|
239
|
+
this.disabled.add(serverName);
|
|
240
|
+
await this.closeOne(serverName);
|
|
241
|
+
this.servers.set(serverName, {
|
|
242
|
+
name: serverName,
|
|
243
|
+
client: null,
|
|
244
|
+
tools: [],
|
|
245
|
+
status: {
|
|
246
|
+
name: serverName,
|
|
247
|
+
status: "disabled",
|
|
248
|
+
config: this.toStatusConfig(config),
|
|
249
|
+
scope: config.type === "sdk" ? "sdk" : "session"
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
this.disabled.delete(serverName);
|
|
255
|
+
await this.reconnectServer(serverName);
|
|
256
|
+
}
|
|
257
|
+
async setServers(servers) {
|
|
258
|
+
const prevNames = new Set(Object.keys(this.configs));
|
|
259
|
+
const nextNames = new Set(Object.keys(servers));
|
|
260
|
+
const added = [...nextNames].filter((n) => !prevNames.has(n));
|
|
261
|
+
const removed = [...prevNames].filter((n) => !nextNames.has(n));
|
|
262
|
+
const errors = {};
|
|
263
|
+
for (const name of removed) {
|
|
264
|
+
await this.closeOne(name);
|
|
265
|
+
delete this.configs[name];
|
|
266
|
+
this.disabled.delete(name);
|
|
267
|
+
this.servers.delete(name);
|
|
268
|
+
}
|
|
269
|
+
for (const [name, config] of Object.entries(servers)) {
|
|
270
|
+
const prev = this.configs[name];
|
|
271
|
+
this.configs[name] = config;
|
|
272
|
+
if (this.disabled.has(name))
|
|
273
|
+
continue;
|
|
274
|
+
if (!prev || JSON.stringify(this.toStatusConfig(prev)) !== JSON.stringify(this.toStatusConfig(config))) {
|
|
275
|
+
await this.closeOne(name);
|
|
276
|
+
await this.connectOne(name, config);
|
|
277
|
+
}
|
|
278
|
+
const status = this.servers.get(name)?.status;
|
|
279
|
+
if (!status || status.status === "failed") {
|
|
280
|
+
errors[name] = status?.error ?? "Failed to connect";
|
|
174
281
|
}
|
|
175
282
|
}
|
|
283
|
+
return { added, removed, errors };
|
|
284
|
+
}
|
|
285
|
+
async closeOne(serverName) {
|
|
286
|
+
const existing = this.servers.get(serverName);
|
|
287
|
+
if (existing?.client) {
|
|
288
|
+
try {
|
|
289
|
+
await existing.client.close();
|
|
290
|
+
} catch {}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
async closeAll() {
|
|
294
|
+
for (const [name] of this.servers) {
|
|
295
|
+
await this.closeOne(name);
|
|
296
|
+
}
|
|
176
297
|
this.servers.clear();
|
|
177
298
|
}
|
|
178
299
|
}
|
package/dist/mcp/index.js
CHANGED
|
@@ -19,14 +19,29 @@ import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
|
|
|
19
19
|
class McpClientManager {
|
|
20
20
|
configs;
|
|
21
21
|
servers = new Map;
|
|
22
|
+
disabled = new Set;
|
|
22
23
|
constructor(configs) {
|
|
23
|
-
this.configs = configs;
|
|
24
|
+
this.configs = { ...configs };
|
|
24
25
|
}
|
|
25
26
|
async connectAll() {
|
|
26
27
|
const entries = Object.entries(this.configs);
|
|
27
28
|
await Promise.all(entries.map(([name, config]) => this.connectOne(name, config)));
|
|
28
29
|
}
|
|
29
30
|
async connectOne(name, config) {
|
|
31
|
+
if (this.disabled.has(name)) {
|
|
32
|
+
this.servers.set(name, {
|
|
33
|
+
name,
|
|
34
|
+
client: null,
|
|
35
|
+
tools: [],
|
|
36
|
+
status: {
|
|
37
|
+
name,
|
|
38
|
+
status: "disabled",
|
|
39
|
+
config: this.toStatusConfig(config),
|
|
40
|
+
scope: config.type === "sdk" ? "sdk" : "session"
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
30
45
|
try {
|
|
31
46
|
const client = new Client({ name: `fourmis-${name}`, version: "1.0.0" });
|
|
32
47
|
if (config.type === "sdk") {
|
|
@@ -60,13 +75,25 @@ class McpClientManager {
|
|
|
60
75
|
const tools = (toolsResult.tools ?? []).map((t) => ({
|
|
61
76
|
name: t.name,
|
|
62
77
|
description: t.description,
|
|
63
|
-
inputSchema: t.inputSchema
|
|
78
|
+
inputSchema: t.inputSchema,
|
|
79
|
+
annotations: t.annotations ? {
|
|
80
|
+
readOnly: t.annotations.readOnly,
|
|
81
|
+
destructive: t.annotations.destructive,
|
|
82
|
+
openWorld: t.annotations.openWorld
|
|
83
|
+
} : undefined
|
|
64
84
|
}));
|
|
65
85
|
this.servers.set(name, {
|
|
66
86
|
name,
|
|
67
87
|
client,
|
|
68
88
|
tools,
|
|
69
|
-
status: {
|
|
89
|
+
status: {
|
|
90
|
+
name,
|
|
91
|
+
status: "connected",
|
|
92
|
+
tools,
|
|
93
|
+
serverInfo: { name, version: "1.0.0" },
|
|
94
|
+
config: this.toStatusConfig(config),
|
|
95
|
+
scope: config.type === "sdk" ? "sdk" : "session"
|
|
96
|
+
}
|
|
70
97
|
});
|
|
71
98
|
} catch (err) {
|
|
72
99
|
const error = err instanceof Error ? err.message : String(err);
|
|
@@ -74,17 +101,31 @@ class McpClientManager {
|
|
|
74
101
|
name,
|
|
75
102
|
client: null,
|
|
76
103
|
tools: [],
|
|
77
|
-
status: {
|
|
104
|
+
status: {
|
|
105
|
+
name,
|
|
106
|
+
status: "failed",
|
|
107
|
+
error,
|
|
108
|
+
config: this.toStatusConfig(config),
|
|
109
|
+
scope: config.type === "sdk" ? "sdk" : "session"
|
|
110
|
+
}
|
|
78
111
|
});
|
|
79
112
|
}
|
|
80
113
|
}
|
|
114
|
+
toStatusConfig(config) {
|
|
115
|
+
if (config.type === "sdk") {
|
|
116
|
+
return { type: "sdk", name: config.name };
|
|
117
|
+
}
|
|
118
|
+
return config;
|
|
119
|
+
}
|
|
81
120
|
getTools() {
|
|
82
121
|
const result = [];
|
|
83
122
|
for (const [serverName, server] of this.servers) {
|
|
84
123
|
if (server.status.status !== "connected")
|
|
85
124
|
continue;
|
|
86
125
|
for (const tool of server.tools) {
|
|
87
|
-
const
|
|
126
|
+
const config = this.configs[serverName];
|
|
127
|
+
const prefix = "toolPrefix" in config ? config.toolPrefix : serverName;
|
|
128
|
+
const namespacedName = prefix === "" ? tool.name : `${prefix}__${tool.name}`;
|
|
88
129
|
result.push({
|
|
89
130
|
name: namespacedName,
|
|
90
131
|
description: tool.description ?? `MCP tool ${tool.name} from ${serverName}`,
|
|
@@ -155,24 +196,104 @@ class McpClientManager {
|
|
|
155
196
|
}
|
|
156
197
|
status() {
|
|
157
198
|
const result = [];
|
|
158
|
-
for (const [name] of Object.entries(this.configs)) {
|
|
199
|
+
for (const [name, config] of Object.entries(this.configs)) {
|
|
159
200
|
const server = this.servers.get(name);
|
|
160
201
|
if (server) {
|
|
161
202
|
result.push(server.status);
|
|
203
|
+
} else if (this.disabled.has(name)) {
|
|
204
|
+
result.push({
|
|
205
|
+
name,
|
|
206
|
+
status: "disabled",
|
|
207
|
+
config: this.toStatusConfig(config),
|
|
208
|
+
scope: config.type === "sdk" ? "sdk" : "session"
|
|
209
|
+
});
|
|
162
210
|
} else {
|
|
163
|
-
result.push({
|
|
211
|
+
result.push({
|
|
212
|
+
name,
|
|
213
|
+
status: "pending",
|
|
214
|
+
config: this.toStatusConfig(config),
|
|
215
|
+
scope: config.type === "sdk" ? "sdk" : "session"
|
|
216
|
+
});
|
|
164
217
|
}
|
|
165
218
|
}
|
|
166
219
|
return result;
|
|
167
220
|
}
|
|
168
|
-
async
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
221
|
+
async reconnectServer(serverName) {
|
|
222
|
+
const config = this.configs[serverName];
|
|
223
|
+
if (!config) {
|
|
224
|
+
throw new Error(`MCP server "${serverName}" is not configured`);
|
|
225
|
+
}
|
|
226
|
+
await this.closeOne(serverName);
|
|
227
|
+
await this.connectOne(serverName, config);
|
|
228
|
+
const status = this.servers.get(serverName)?.status;
|
|
229
|
+
if (!status || status.status !== "connected") {
|
|
230
|
+
throw new Error(status?.error ?? `Failed to reconnect MCP server "${serverName}"`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
async toggleServer(serverName, enabled) {
|
|
234
|
+
const config = this.configs[serverName];
|
|
235
|
+
if (!config) {
|
|
236
|
+
throw new Error(`MCP server "${serverName}" is not configured`);
|
|
237
|
+
}
|
|
238
|
+
if (!enabled) {
|
|
239
|
+
this.disabled.add(serverName);
|
|
240
|
+
await this.closeOne(serverName);
|
|
241
|
+
this.servers.set(serverName, {
|
|
242
|
+
name: serverName,
|
|
243
|
+
client: null,
|
|
244
|
+
tools: [],
|
|
245
|
+
status: {
|
|
246
|
+
name: serverName,
|
|
247
|
+
status: "disabled",
|
|
248
|
+
config: this.toStatusConfig(config),
|
|
249
|
+
scope: config.type === "sdk" ? "sdk" : "session"
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
this.disabled.delete(serverName);
|
|
255
|
+
await this.reconnectServer(serverName);
|
|
256
|
+
}
|
|
257
|
+
async setServers(servers) {
|
|
258
|
+
const prevNames = new Set(Object.keys(this.configs));
|
|
259
|
+
const nextNames = new Set(Object.keys(servers));
|
|
260
|
+
const added = [...nextNames].filter((n) => !prevNames.has(n));
|
|
261
|
+
const removed = [...prevNames].filter((n) => !nextNames.has(n));
|
|
262
|
+
const errors = {};
|
|
263
|
+
for (const name of removed) {
|
|
264
|
+
await this.closeOne(name);
|
|
265
|
+
delete this.configs[name];
|
|
266
|
+
this.disabled.delete(name);
|
|
267
|
+
this.servers.delete(name);
|
|
268
|
+
}
|
|
269
|
+
for (const [name, config] of Object.entries(servers)) {
|
|
270
|
+
const prev = this.configs[name];
|
|
271
|
+
this.configs[name] = config;
|
|
272
|
+
if (this.disabled.has(name))
|
|
273
|
+
continue;
|
|
274
|
+
if (!prev || JSON.stringify(this.toStatusConfig(prev)) !== JSON.stringify(this.toStatusConfig(config))) {
|
|
275
|
+
await this.closeOne(name);
|
|
276
|
+
await this.connectOne(name, config);
|
|
277
|
+
}
|
|
278
|
+
const status = this.servers.get(name)?.status;
|
|
279
|
+
if (!status || status.status === "failed") {
|
|
280
|
+
errors[name] = status?.error ?? "Failed to connect";
|
|
174
281
|
}
|
|
175
282
|
}
|
|
283
|
+
return { added, removed, errors };
|
|
284
|
+
}
|
|
285
|
+
async closeOne(serverName) {
|
|
286
|
+
const existing = this.servers.get(serverName);
|
|
287
|
+
if (existing?.client) {
|
|
288
|
+
try {
|
|
289
|
+
await existing.client.close();
|
|
290
|
+
} catch {}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
async closeAll() {
|
|
294
|
+
for (const [name] of this.servers) {
|
|
295
|
+
await this.closeOne(name);
|
|
296
|
+
}
|
|
176
297
|
this.servers.clear();
|
|
177
298
|
}
|
|
178
299
|
}
|
package/dist/mcp/types.d.ts
CHANGED
|
@@ -20,6 +20,13 @@ export type McpHttpConfig = {
|
|
|
20
20
|
type: "http";
|
|
21
21
|
url: string;
|
|
22
22
|
headers?: Record<string, string>;
|
|
23
|
+
/** Custom prefix for tool names. If empty string, no prefix is added. Defaults to server name. */
|
|
24
|
+
toolPrefix?: string;
|
|
25
|
+
};
|
|
26
|
+
export type McpClaudeAIProxyConfig = {
|
|
27
|
+
type: "claudeai-proxy";
|
|
28
|
+
url: string;
|
|
29
|
+
id: string;
|
|
23
30
|
};
|
|
24
31
|
export type McpSdkConfig = {
|
|
25
32
|
type: "sdk";
|
|
@@ -27,10 +34,17 @@ export type McpSdkConfig = {
|
|
|
27
34
|
instance: McpServerInstance;
|
|
28
35
|
};
|
|
29
36
|
export type McpServerConfig = McpStdioConfig | McpSseConfig | McpHttpConfig | McpSdkConfig;
|
|
37
|
+
export type McpServerConfigForProcessTransport = McpStdioConfig | McpSseConfig | McpHttpConfig | Omit<McpSdkConfig, "instance">;
|
|
38
|
+
export type McpServerStatusConfig = McpServerConfigForProcessTransport | McpClaudeAIProxyConfig;
|
|
30
39
|
export type McpToolInfo = {
|
|
31
40
|
name: string;
|
|
32
41
|
description?: string;
|
|
33
42
|
inputSchema?: Record<string, unknown>;
|
|
43
|
+
annotations?: {
|
|
44
|
+
readOnly?: boolean;
|
|
45
|
+
destructive?: boolean;
|
|
46
|
+
openWorld?: boolean;
|
|
47
|
+
};
|
|
34
48
|
};
|
|
35
49
|
export type McpResourceInfo = {
|
|
36
50
|
uri: string;
|
|
@@ -40,7 +54,13 @@ export type McpResourceInfo = {
|
|
|
40
54
|
};
|
|
41
55
|
export type McpServerStatus = {
|
|
42
56
|
name: string;
|
|
43
|
-
status: "connected" | "failed" | "pending" | "disabled";
|
|
57
|
+
status: "connected" | "failed" | "needs-auth" | "pending" | "disabled";
|
|
58
|
+
serverInfo?: {
|
|
59
|
+
name: string;
|
|
60
|
+
version: string;
|
|
61
|
+
};
|
|
62
|
+
config?: McpServerStatusConfig;
|
|
63
|
+
scope?: string;
|
|
44
64
|
tools?: McpToolInfo[];
|
|
45
65
|
error?: string;
|
|
46
66
|
};
|
package/dist/mcp/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kGAAkG;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,gBAAgB,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC;AAE3F,MAAM,MAAM,kCAAkC,GAC1C,cAAc,GACd,YAAY,GACZ,aAAa,GACb,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAEnC,MAAM,MAAM,qBAAqB,GAAG,kCAAkC,GAAG,sBAAsB,CAAC;AAEhG,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE;QACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC;IACvE,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA+CrD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAGxC,IAAI,GAAE,cAA0B,EAChC,UAAU,CAAC,EAAE,UAAU,EACvB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,eAAe,CAAC,EAAE,eAAe;IAS7B,KAAK,CACT,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACpE,OAAO,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA+CrD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAGxC,IAAI,GAAE,cAA0B,EAChC,UAAU,CAAC,EAAE,UAAU,EACvB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,eAAe,CAAC,EAAE,eAAe;IAS7B,KAAK,CACT,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACpE,OAAO,CAAC,gBAAgB,CAAC;IAwF5B,iEAAiE;IACjE,OAAO,CAAC,sBAAsB;IAiD9B,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAInC,OAAO,IAAI,cAAc;CAG1B"}
|
package/dist/permissions.js
CHANGED
|
@@ -13,8 +13,8 @@ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
|
13
13
|
var __require = import.meta.require;
|
|
14
14
|
|
|
15
15
|
// src/permissions.ts
|
|
16
|
-
var SAFE_TOOLS = new Set(["Read", "Glob", "Grep"]);
|
|
17
|
-
var EDIT_TOOLS = new Set(["Write", "Edit"]);
|
|
16
|
+
var SAFE_TOOLS = new Set(["Read", "Glob", "Grep", "WebFetch", "WebSearch"]);
|
|
17
|
+
var EDIT_TOOLS = new Set(["Write", "Edit", "NotebookEdit", "TodoWrite", "Config"]);
|
|
18
18
|
var FS_COMMANDS = ["mkdir", "touch", "rm", "mv", "cp"];
|
|
19
19
|
var DELEGATE_TOOLS = new Set(["Teammate", "Task", "TaskOutput", "TaskStop"]);
|
|
20
20
|
function normalizeRules(rules) {
|
|
@@ -94,7 +94,11 @@ class PermissionManager {
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
if (this.canUseTool) {
|
|
97
|
-
const result = await this.canUseTool(toolName, input,
|
|
97
|
+
const result = await this.canUseTool(toolName, input, {
|
|
98
|
+
...options,
|
|
99
|
+
toolUseID: options.toolUseId,
|
|
100
|
+
agentID: options.agentId
|
|
101
|
+
});
|
|
98
102
|
if (result.behavior === "allow" && result.updatedPermissions) {
|
|
99
103
|
this.applyPermissionUpdates(result.updatedPermissions);
|
|
100
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACT,eAAe,EAIhB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiB9C,qBAAa,gBAAiB,YAAW,eAAe;IACtD,IAAI,SAAe;IACnB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,SAAS,CAAU;gBAEf,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAwBpD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACT,eAAe,EAIhB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiB9C,qBAAa,gBAAiB,YAAW,eAAe;IACtD,IAAI,SAAe;IACnB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,SAAS,CAAU;gBAEf,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAwBpD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IA2L5D,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM;IAIvD,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIvC,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO;IAiBlD,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,aAAa;CActB"}
|
|
@@ -267,6 +267,44 @@ class AnthropicAdapter {
|
|
|
267
267
|
max_tokens: maxTokens,
|
|
268
268
|
stream: true
|
|
269
269
|
};
|
|
270
|
+
if (request.thinking) {
|
|
271
|
+
switch (request.thinking.type) {
|
|
272
|
+
case "adaptive":
|
|
273
|
+
params.thinking = { type: "adaptive" };
|
|
274
|
+
break;
|
|
275
|
+
case "disabled":
|
|
276
|
+
params.thinking = { type: "disabled" };
|
|
277
|
+
break;
|
|
278
|
+
case "enabled":
|
|
279
|
+
params.thinking = {
|
|
280
|
+
type: "enabled",
|
|
281
|
+
budget_tokens: request.thinking.budgetTokens
|
|
282
|
+
};
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
} else if (request.thinkingBudget !== undefined) {
|
|
286
|
+
if (request.thinkingBudget <= 0) {
|
|
287
|
+
params.thinking = { type: "disabled" };
|
|
288
|
+
} else {
|
|
289
|
+
params.thinking = {
|
|
290
|
+
type: "enabled",
|
|
291
|
+
budget_tokens: Math.max(1024, request.thinkingBudget)
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
const outputConfig = {};
|
|
296
|
+
if (request.effort) {
|
|
297
|
+
outputConfig.effort = request.effort;
|
|
298
|
+
}
|
|
299
|
+
if (request.outputFormat?.type === "json_schema") {
|
|
300
|
+
outputConfig.format = {
|
|
301
|
+
type: "json_schema",
|
|
302
|
+
schema: request.outputFormat.schema
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
if (Object.keys(outputConfig).length > 0) {
|
|
306
|
+
params.output_config = outputConfig;
|
|
307
|
+
}
|
|
270
308
|
if (this.oauthMode) {
|
|
271
309
|
const systemBlocks = [
|
|
272
310
|
{ type: "text", text: "You are Claude Code, Anthropic's official CLI for Claude." }
|
|
@@ -391,11 +429,12 @@ class AnthropicAdapter {
|
|
|
391
429
|
switch (feature) {
|
|
392
430
|
case "streaming":
|
|
393
431
|
case "tool_calling":
|
|
394
|
-
case "image_input":
|
|
395
|
-
case "pdf_input":
|
|
396
432
|
case "thinking":
|
|
397
433
|
case "structured_output":
|
|
398
434
|
return true;
|
|
435
|
+
case "image_input":
|
|
436
|
+
case "pdf_input":
|
|
437
|
+
return false;
|
|
399
438
|
default:
|
|
400
439
|
return false;
|
|
401
440
|
}
|
|
@@ -14,12 +14,16 @@ import OpenAI from "openai";
|
|
|
14
14
|
import type { ProviderAdapter, ChatRequest, ChatChunk, ProviderFeature, NormalizedMessage } from "./types.js";
|
|
15
15
|
import type { TokenUsage } from "../types.js";
|
|
16
16
|
type OAIMessage = OpenAI.ChatCompletionMessageParam;
|
|
17
|
+
/** Replace invalid chars and truncate to 64 chars (with hash suffix if needed). */
|
|
18
|
+
export declare function sanitizeToolName(name: string): string;
|
|
17
19
|
export declare class OpenAIAdapter implements ProviderAdapter {
|
|
18
20
|
name: string;
|
|
19
21
|
private client;
|
|
20
22
|
private codexMode;
|
|
21
23
|
private accountId?;
|
|
22
24
|
private currentAccessToken?;
|
|
25
|
+
/** Maps sanitized OpenAI tool name → original name. Rebuilt each query cycle. */
|
|
26
|
+
private toolNameMap;
|
|
23
27
|
constructor(options?: {
|
|
24
28
|
apiKey?: string;
|
|
25
29
|
baseUrl?: string;
|
|
@@ -35,6 +39,8 @@ export declare class OpenAIAdapter implements ProviderAdapter {
|
|
|
35
39
|
convertMessagesForResponses(messages: NormalizedMessage[]): any[];
|
|
36
40
|
private convertTools;
|
|
37
41
|
private convertToolsForResponses;
|
|
42
|
+
/** Resolve a tool name from OpenAI back to the original (pre-sanitization) name. */
|
|
43
|
+
private resolveToolName;
|
|
38
44
|
private mapStopReason;
|
|
39
45
|
private mapResponseStatus;
|
|
40
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACT,eAAe,EAEf,iBAAiB,EAKlB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqB9C,KAAK,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACT,eAAe,EAEf,iBAAiB,EAKlB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqB9C,KAAK,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAMpD,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMrD;AAYD,qBAAa,aAAc,YAAW,eAAe;IACnD,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,iFAAiF;IACjF,OAAO,CAAC,WAAW,CAA6B;gBAEpC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAoCpD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAmB5D,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM;IAIvD,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIvC,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO;YAiBnC,eAAe;YAqGf,aAAa;YAgFd,oBAAoB;IAuBlC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE;IA4EnF,2BAA2B,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,GAAG,EAAE;IAuEjE,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,wBAAwB;IAUhC,oFAAoF;IACpF,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,iBAAiB;CAgB1B"}
|