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.
Files changed (84) hide show
  1. package/README.md +126 -198
  2. package/dist/agent-loop.d.ts +21 -3
  3. package/dist/agent-loop.d.ts.map +1 -1
  4. package/dist/agent-loop.js +279 -90
  5. package/dist/agents/index.js +1079 -124
  6. package/dist/agents/tools.d.ts.map +1 -1
  7. package/dist/agents/tools.js +1079 -124
  8. package/dist/agents/types.d.ts +4 -0
  9. package/dist/agents/types.d.ts.map +1 -1
  10. package/dist/api.d.ts +8 -5
  11. package/dist/api.d.ts.map +1 -1
  12. package/dist/api.js +1663 -430
  13. package/dist/hooks.d.ts +19 -1
  14. package/dist/hooks.d.ts.map +1 -1
  15. package/dist/hooks.js +27 -2
  16. package/dist/index.d.ts +8 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1671 -431
  19. package/dist/mcp/client.d.ts +8 -1
  20. package/dist/mcp/client.d.ts.map +1 -1
  21. package/dist/mcp/client.js +134 -13
  22. package/dist/mcp/index.js +134 -13
  23. package/dist/mcp/types.d.ts +21 -1
  24. package/dist/mcp/types.d.ts.map +1 -1
  25. package/dist/permissions.d.ts.map +1 -1
  26. package/dist/permissions.js +7 -3
  27. package/dist/providers/anthropic.d.ts.map +1 -1
  28. package/dist/providers/anthropic.js +41 -2
  29. package/dist/providers/openai.d.ts +6 -0
  30. package/dist/providers/openai.d.ts.map +1 -1
  31. package/dist/providers/openai.js +36 -6
  32. package/dist/providers/registry.js +76 -8
  33. package/dist/providers/types.d.ts +4 -1
  34. package/dist/providers/types.d.ts.map +1 -1
  35. package/dist/query.d.ts +21 -2
  36. package/dist/query.d.ts.map +1 -1
  37. package/dist/query.js +69 -1
  38. package/dist/skills/index.js +23 -1
  39. package/dist/skills/skills.d.ts +16 -0
  40. package/dist/skills/skills.d.ts.map +1 -1
  41. package/dist/skills/skills.js +23 -1
  42. package/dist/tools/ask-user-question.d.ts +7 -0
  43. package/dist/tools/ask-user-question.d.ts.map +1 -0
  44. package/dist/tools/ask-user-question.js +48 -0
  45. package/dist/tools/bash.d.ts.map +1 -1
  46. package/dist/tools/bash.js +47 -2
  47. package/dist/tools/config.d.ts +7 -0
  48. package/dist/tools/config.d.ts.map +1 -0
  49. package/dist/tools/config.js +114 -0
  50. package/dist/tools/exit-plan-mode.d.ts +7 -0
  51. package/dist/tools/exit-plan-mode.d.ts.map +1 -0
  52. package/dist/tools/exit-plan-mode.js +34 -0
  53. package/dist/tools/index.d.ts +7 -0
  54. package/dist/tools/index.d.ts.map +1 -1
  55. package/dist/tools/index.js +506 -9
  56. package/dist/tools/notebook-edit.d.ts +7 -0
  57. package/dist/tools/notebook-edit.d.ts.map +1 -0
  58. package/dist/tools/notebook-edit.js +83 -0
  59. package/dist/tools/presets.d.ts +2 -1
  60. package/dist/tools/presets.d.ts.map +1 -1
  61. package/dist/tools/presets.js +22 -4
  62. package/dist/tools/read.d.ts.map +1 -1
  63. package/dist/tools/read.js +12 -1
  64. package/dist/tools/registry.d.ts +2 -0
  65. package/dist/tools/registry.d.ts.map +1 -1
  66. package/dist/tools/registry.js +10 -0
  67. package/dist/tools/todo-write.d.ts +7 -0
  68. package/dist/tools/todo-write.d.ts.map +1 -0
  69. package/dist/tools/todo-write.js +69 -0
  70. package/dist/tools/web-fetch.d.ts +6 -0
  71. package/dist/tools/web-fetch.d.ts.map +1 -0
  72. package/dist/tools/web-fetch.js +85 -0
  73. package/dist/tools/web-search.d.ts +7 -0
  74. package/dist/tools/web-search.d.ts.map +1 -0
  75. package/dist/tools/web-search.js +78 -0
  76. package/dist/types.d.ts +344 -42
  77. package/dist/types.d.ts.map +1 -1
  78. package/dist/utils/session-store.d.ts +1 -1
  79. package/dist/utils/session-store.d.ts.map +1 -1
  80. package/dist/utils/session-store.js +49 -2
  81. package/dist/utils/system-prompt.d.ts +2 -0
  82. package/dist/utils/system-prompt.d.ts.map +1 -1
  83. package/dist/utils/system-prompt.js +33 -4
  84. package/package.json +3 -2
@@ -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 mcp__server__tool.
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
@@ -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;AASpB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,OAAO,CAAsC;gBAEzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAI9C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAKnB,UAAU;IA+DxB;;OAEG;IACH,QAAQ,IAAI,kBAAkB,EAAE;IAsB1B,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;IAcrB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAYhC"}
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"}
@@ -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: { name, status: "connected", tools }
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: { name, status: "failed", error }
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 namespacedName = `mcp__${serverName}__${tool.name}`;
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({ name, status: "pending" });
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 closeAll() {
169
- for (const [, server] of this.servers) {
170
- if (server.client) {
171
- try {
172
- await server.client.close();
173
- } catch {}
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: { name, status: "connected", tools }
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: { name, status: "failed", error }
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 namespacedName = `mcp__${serverName}__${tool.name}`;
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({ name, status: "pending" });
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 closeAll() {
169
- for (const [, server] of this.servers) {
170
- if (server.client) {
171
- try {
172
- await server.client.close();
173
- } catch {}
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
  }
@@ -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
  };
@@ -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;CAClC,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,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,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,SAAS,GAAG,UAAU,CAAC;IACxD,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,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;IAoF5B,iEAAiE;IACjE,OAAO,CAAC,sBAAsB;IAiD9B,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAInC,OAAO,IAAI,cAAc;CAG1B"}
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"}
@@ -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, options);
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;IAmJ5D,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;IAgBlD,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,aAAa;CActB"}
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;AAGpD,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;gBAExB,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;IAQ5D,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;IAYhC,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,iBAAiB;CAgB1B"}
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"}