openfox 2.0.13 → 2.0.15

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 (36) hide show
  1. package/dist/{chat-handler-6NUNVXIU.js → chat-handler-RYOG3WJP.js} +9 -7
  2. package/dist/{chunk-VFRWE5X4.js → chunk-2GX5EIIU.js} +481 -2104
  3. package/dist/{chunk-FQIT7VIA.js → chunk-3IKRNKPI.js} +6 -6
  4. package/dist/{chunk-A52FXWJX.js → chunk-3SGGOBCL.js} +10 -387
  5. package/dist/chunk-EKTGRBDC.js +2072 -0
  6. package/dist/{chunk-3QB2RMX2.js → chunk-F4PMNP7S.js} +2 -2
  7. package/dist/{chunk-TIKQWNYK.js → chunk-J7KOV4ST.js} +2 -2
  8. package/dist/{chunk-2VDLXCLO.js → chunk-KPKSN362.js} +288 -26
  9. package/dist/chunk-NWO6GRYE.js +39 -0
  10. package/dist/chunk-PQ56PX7L.js +397 -0
  11. package/dist/{chunk-HPCGVAS4.js → chunk-SNQT7LNU.js} +18 -1
  12. package/dist/{chunk-5BDVM6YI.js → chunk-YD6NDTKF.js} +1 -1
  13. package/dist/{chunk-EZJUU54W.js → chunk-Z64KW2HD.js} +23 -17
  14. package/dist/cli/dev.js +1 -1
  15. package/dist/cli/index.js +1 -1
  16. package/dist/{config-BU66P4KX.js → config-Z66BQTNX.js} +2 -2
  17. package/dist/{orchestrator-WXEZHUVQ.js → orchestrator-KRCVDTZ6.js} +8 -6
  18. package/dist/package.json +3 -3
  19. package/dist/{processor-GA5NG3T7.js → processor-JHR3Z42W.js} +9 -7
  20. package/dist/{protocol-CaLuIetw.d.ts → protocol-BC1QSQ-Y.d.ts} +16 -1
  21. package/dist/{protocol-YYWMFR35.js → protocol-BKNLAEPJ.js} +3 -3
  22. package/dist/{provider-QPECLUZ7.js → provider-YBTRC77Y.js} +7 -5
  23. package/dist/{provider-manager-YA2WALTF.js → provider-manager-DETXLDKW.js} +3 -2
  24. package/dist/{serve-TJHQ326L.js → serve-AV74ODQ6.js} +13 -9
  25. package/dist/server/index.d.ts +21 -2
  26. package/dist/server/index.js +11 -7
  27. package/dist/server-P7E2IPVL.js +31 -0
  28. package/dist/shared/index.d.ts +2 -2
  29. package/dist/shared/index.js +1 -1
  30. package/dist/tool-adapter-B7QP6NLA.js +7 -0
  31. package/dist/{tools-THXBQJ7A.js → tools-WEE4XDTL.js} +9 -5
  32. package/dist/web/assets/{index-CQw-9GC9.js → index-BMz5-yAf.js} +76 -75
  33. package/dist/web/assets/{index-Db3yUKBI.css → index-Ho_tVUbw.css} +1 -1
  34. package/dist/web/index.html +2 -2
  35. package/dist/web/sw.js +1 -1
  36. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createServerMessage,
3
3
  isClientMessage
4
- } from "./chunk-5BDVM6YI.js";
4
+ } from "./chunk-YD6NDTKF.js";
5
5
 
6
6
  // src/server/ws/protocol.ts
7
7
  function enrichMessagesWithToolResults(messages) {
@@ -339,4 +339,4 @@ export {
339
339
  createQueueStateMessage,
340
340
  storedEventToServerMessage
341
341
  };
342
- //# sourceMappingURL=chunk-3QB2RMX2.js.map
342
+ //# sourceMappingURL=chunk-F4PMNP7S.js.map
@@ -9,7 +9,7 @@ import {
9
9
  import {
10
10
  createContextStateMessage,
11
11
  createSessionStateMessage
12
- } from "./chunk-3QB2RMX2.js";
12
+ } from "./chunk-F4PMNP7S.js";
13
13
  import {
14
14
  getPendingQuestionsForSession
15
15
  } from "./chunk-EU3WWTFH.js";
@@ -154,4 +154,4 @@ export {
154
154
  needsNameGenerationCheck,
155
155
  applyGeneratedSessionName
156
156
  };
157
- //# sourceMappingURL=chunk-TIKQWNYK.js.map
157
+ //# sourceMappingURL=chunk-J7KOV4ST.js.map
@@ -1,3 +1,6 @@
1
+ import {
2
+ getProject
3
+ } from "./chunk-XAMAYRDA.js";
1
4
  import {
2
5
  COMPACTION_PROMPT,
3
6
  TurnMetrics,
@@ -29,8 +32,8 @@ import {
29
32
  getSessionProcessCount
30
33
  } from "./chunk-VRGRAQDG.js";
31
34
  import {
32
- getProject
33
- } from "./chunk-XAMAYRDA.js";
35
+ createMcpTools
36
+ } from "./chunk-NWO6GRYE.js";
34
37
  import {
35
38
  getCurrentContextWindowId,
36
39
  getCurrentWindowMessageOptions,
@@ -52,7 +55,7 @@ import {
52
55
  createChatMessageUpdatedMessage,
53
56
  createChatPathConfirmationMessage,
54
57
  createQueueStateMessage
55
- } from "./chunk-3QB2RMX2.js";
58
+ } from "./chunk-F4PMNP7S.js";
56
59
  import {
57
60
  AskUserInterrupt,
58
61
  askUserTool
@@ -62,6 +65,10 @@ import {
62
65
  deleteSetting,
63
66
  getSetting
64
67
  } from "./chunk-RFNEDBVO.js";
68
+ import {
69
+ loadGlobalConfig,
70
+ saveGlobalConfig
71
+ } from "./chunk-SNQT7LNU.js";
65
72
  import {
66
73
  getGlobalConfigDir
67
74
  } from "./chunk-CQGTEGKL.js";
@@ -806,6 +813,14 @@ function formatDiagnosticsForLLM(diagnostics) {
806
813
  }
807
814
  return output;
808
815
  }
816
+ function appendLspInstallHint(output, lspManager, path) {
817
+ if (!lspManager) return output;
818
+ const hint = lspManager.getInstallHint(path);
819
+ if (!hint) return output;
820
+ return output + `
821
+
822
+ \u26A0\uFE0F Language server not installed. To enable diagnostics: \`${hint}\``;
823
+ }
809
824
 
810
825
  // src/server/tools/write.ts
811
826
  var writeFileTool = createTool(
@@ -849,6 +864,7 @@ var writeFileTool = createTool(
849
864
  if (context.lspManager) {
850
865
  diagnostics = await context.lspManager.notifyFileChange(fullPath, args.content);
851
866
  output += formatDiagnosticsForLLM(diagnostics);
867
+ output = appendLspInstallHint(output, context.lspManager, fullPath);
852
868
  }
853
869
  const newHash = await computeFileHash(fullPath);
854
870
  if (newHash) {
@@ -1102,6 +1118,7 @@ Make sure whitespace and indentation match exactly.`
1102
1118
  if (context.lspManager) {
1103
1119
  diagnostics = await context.lspManager.notifyFileChange(fullPath, newContent);
1104
1120
  output += formatDiagnosticsForLLM(diagnostics);
1121
+ output = appendLspInstallHint(output, context.lspManager, fullPath);
1105
1122
  }
1106
1123
  const newHash = await computeFileHash(fullPath);
1107
1124
  if (newHash) {
@@ -2266,7 +2283,7 @@ ${CONTINUE_PROMPT}` : CONTINUE_PROMPT;
2266
2283
  systemPrompt: assembledRequest.systemPrompt,
2267
2284
  llmClient,
2268
2285
  messages: assembledRequest.messages,
2269
- tools: toolRegistry.definitions,
2286
+ tools: assembledRequest.tools,
2270
2287
  toolChoice: "auto",
2271
2288
  signal,
2272
2289
  ...config.retryPatterns ? { retryPatterns: config.retryPatterns } : {},
@@ -2575,7 +2592,8 @@ function createAssemblyResult(input) {
2575
2592
  const messagesForLLM = input.messages.filter((m) => m.source !== "runtime");
2576
2593
  return {
2577
2594
  systemPrompt: input.systemPrompt,
2578
- messages: messagesForLLM.map((message) => messageToMinimal(message))
2595
+ messages: messagesForLLM.map((message) => messageToMinimal(message)),
2596
+ tools: input.requestTools
2579
2597
  };
2580
2598
  }
2581
2599
  function buildAssemblyInput(systemPrompt, baseInput) {
@@ -2676,10 +2694,10 @@ async function describeImageFromDataUrl(dataUrl, visionModel, options) {
2676
2694
  import { createHash as createHash2 } from "crypto";
2677
2695
  async function loadVisionModelFromGlobalConfig() {
2678
2696
  try {
2679
- const { loadGlobalConfig, getVisionFallback } = await import("./config-BU66P4KX.js");
2697
+ const { loadGlobalConfig: loadGlobalConfig2, getVisionFallback } = await import("./config-Z66BQTNX.js");
2680
2698
  const runtimeConfig = getRuntimeConfig();
2681
2699
  const mode = runtimeConfig.mode ?? "production";
2682
- const globalConfig = await loadGlobalConfig(mode);
2700
+ const globalConfig = await loadGlobalConfig2(mode);
2683
2701
  const fallback = getVisionFallback(globalConfig);
2684
2702
  if (fallback?.enabled && fallback.model) {
2685
2703
  return { baseUrl: fallback.url, model: fallback.model, timeout: fallback.timeout * 1e3 };
@@ -3131,7 +3149,7 @@ var callSubAgentTool = {
3131
3149
  };
3132
3150
  }
3133
3151
  try {
3134
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-THXBQJ7A.js");
3152
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-WEE4XDTL.js");
3135
3153
  const toolRegistry = getToolRegistryForAgent2(agentDef);
3136
3154
  const turnMetrics = new TurnMetrics();
3137
3155
  const result = await executeSubAgent({
@@ -3918,6 +3936,238 @@ These processes run independently of agent turns and persist across session comp
3918
3936
  }
3919
3937
  );
3920
3938
 
3939
+ // src/server/chat/dynamic-context.ts
3940
+ import { createHash as createHash3 } from "crypto";
3941
+ function computeDynamicContextHash(instructionContent, skills, toolFingerprint) {
3942
+ const dynamicInputs = JSON.stringify({
3943
+ instructions: instructionContent,
3944
+ skills: skills.map((s) => s.id).sort(),
3945
+ ...toolFingerprint ? { tools: toolFingerprint } : {}
3946
+ });
3947
+ return createHash3("sha256").update(dynamicInputs).digest("hex");
3948
+ }
3949
+ function getToolFingerprint(tools) {
3950
+ return tools.map((t) => `${t.function.name}:${JSON.stringify(t.function.parameters)}`).sort().join("|");
3951
+ }
3952
+ async function computeContextHash(sessionManager, sessionId) {
3953
+ const session = sessionManager.requireSession(sessionId);
3954
+ const { content: instructionContent } = await getAllInstructions(session.workdir, session.projectId);
3955
+ const runtimeConfig = getRuntimeConfig();
3956
+ const configDir = getGlobalConfigDir(runtimeConfig.mode ?? "production");
3957
+ const skills = await getEnabledSkillMetadata(configDir, runtimeConfig.workdir);
3958
+ const { createToolRegistry: createToolRegistry2 } = await import("./tools-WEE4XDTL.js");
3959
+ const allTools = createToolRegistry2().definitions;
3960
+ const toolFingerprint = getToolFingerprint(allTools);
3961
+ const hash = computeDynamicContextHash(instructionContent, skills, toolFingerprint);
3962
+ return { hash, instructionContent, skills, allTools };
3963
+ }
3964
+ async function applyDynamicContext(sessionManager, sessionId) {
3965
+ const { hash, instructionContent, skills, allTools } = await computeContextHash(sessionManager, sessionId);
3966
+ const allAgents = await loadAllAgentsDefault();
3967
+ const subAgentDefs = getSubAgents(allAgents);
3968
+ const systemPrompt = buildTopLevelSystemPrompt(
3969
+ sessionManager.requireSession(sessionId).workdir,
3970
+ instructionContent || void 0,
3971
+ skills,
3972
+ subAgentDefs
3973
+ );
3974
+ sessionManager.setCachedPrompt(sessionId, systemPrompt, allTools, hash);
3975
+ sessionManager.setDynamicContextChanged(sessionId, false);
3976
+ sessionManager.clearDebugDump(sessionId);
3977
+ logger.debug("applyDynamicContext done", { sessionId, hash, toolCount: allTools.length });
3978
+ }
3979
+
3980
+ // src/server/tools/mcp-config.ts
3981
+ var mcpManagerForTools = null;
3982
+ var mcpConfigMode = "production";
3983
+ var mcpNotifyChanged = null;
3984
+ function setMcpManagerForTools(manager) {
3985
+ mcpManagerForTools = manager;
3986
+ }
3987
+ function setMcpConfigMode(mode) {
3988
+ mcpConfigMode = mode;
3989
+ }
3990
+ function setNotifyMcpServersChanged(fn) {
3991
+ mcpNotifyChanged = fn;
3992
+ }
3993
+ var mcpConfigTool = createTool(
3994
+ "mcp_config",
3995
+ {
3996
+ type: "function",
3997
+ function: {
3998
+ name: "mcp_config",
3999
+ description: "Configure MCP servers (Model Context Protocol). Actions: list (show all servers and tools), add (add a server), remove (delete a server), toggle-tool (enable/disable a tool). Use this when the user asks to add, remove, or configure MCP servers or tools.",
4000
+ parameters: {
4001
+ type: "object",
4002
+ properties: {
4003
+ action: {
4004
+ type: "string",
4005
+ enum: ["list", "add", "remove", "toggle-tool"],
4006
+ description: "Action: list (show servers), add (add new server), remove (delete a server), toggle-tool (enable/disable a tool)"
4007
+ },
4008
+ name: {
4009
+ type: "string",
4010
+ description: "Server name (required for: add, remove, toggle-tool)"
4011
+ },
4012
+ transport: {
4013
+ type: "string",
4014
+ enum: ["stdio", "http"],
4015
+ description: "Transport type (for add). Default: stdio"
4016
+ },
4017
+ command: {
4018
+ type: "string",
4019
+ description: 'Command for stdio transport (e.g. "npx")'
4020
+ },
4021
+ args: {
4022
+ type: "array",
4023
+ items: { type: "string" },
4024
+ description: "Command arguments for stdio transport"
4025
+ },
4026
+ env: {
4027
+ type: "object",
4028
+ additionalProperties: { type: "string" },
4029
+ description: "Environment variables for stdio transport"
4030
+ },
4031
+ url: {
4032
+ type: "string",
4033
+ description: 'Server URL for HTTP transport (e.g. "https://mcp.example.com/mcp")'
4034
+ },
4035
+ headers: {
4036
+ type: "object",
4037
+ additionalProperties: { type: "string" },
4038
+ description: 'HTTP headers for HTTP transport (e.g. {"Authorization": "Bearer xxx"})'
4039
+ },
4040
+ toolName: {
4041
+ type: "string",
4042
+ description: "Tool name to toggle (required for: toggle-tool)"
4043
+ },
4044
+ enabled: {
4045
+ type: "boolean",
4046
+ description: "Whether the tool should be enabled (required for: toggle-tool)"
4047
+ }
4048
+ },
4049
+ required: ["action"]
4050
+ }
4051
+ }
4052
+ },
4053
+ async (args, context, helpers) => {
4054
+ const actionError = validateActionWithPermission(
4055
+ args.action,
4056
+ ["list", "add", "remove", "toggle-tool"],
4057
+ "mcp_config",
4058
+ context.permittedActions
4059
+ );
4060
+ if (actionError) return actionError;
4061
+ if (!mcpManagerForTools) {
4062
+ return helpers.error("MCP manager not available");
4063
+ }
4064
+ async function persistAndRebuild(updater) {
4065
+ const globalConfig = await loadGlobalConfig(mcpConfigMode);
4066
+ const mcpServers = { ...globalConfig.mcpServers ?? {} };
4067
+ const updated = updater(mcpServers);
4068
+ await saveGlobalConfig(mcpConfigMode, { ...globalConfig, mcpServers: updated });
4069
+ }
4070
+ async function rebuildTools() {
4071
+ const { setMcpTools: setMcpTools2 } = await import("./tools-WEE4XDTL.js");
4072
+ const mcpTools = createMcpTools(mcpManagerForTools);
4073
+ setMcpTools2(mcpTools);
4074
+ }
4075
+ if (args.action === "list") {
4076
+ const servers = mcpManagerForTools.getAllServers();
4077
+ if (servers.length === 0) {
4078
+ return helpers.success("No MCP servers configured.");
4079
+ }
4080
+ const lines = [];
4081
+ for (const server of servers) {
4082
+ const connStr = server.status === "connected" ? "\u25CF" : server.status === "error" ? "\u2717" : "\u25CB";
4083
+ const cmdStr = server.config.command ? `${server.config.command} ${(server.config.args ?? []).join(" ")}` : server.config.url ?? "";
4084
+ lines.push(
4085
+ `${connStr} ${server.name} (${server.config.transport}) \u2014 ${server.status}${server.error ? `: ${server.error}` : ""}`
4086
+ );
4087
+ lines.push(` ${cmdStr}`);
4088
+ lines.push(` ${server.tools.length} tools, ~${server.estimatedTokens} tokens`);
4089
+ const enabledTools = server.tools.filter((t) => t.enabled);
4090
+ const disabledTools = server.tools.filter((t) => !t.enabled);
4091
+ if (enabledTools.length > 0) {
4092
+ lines.push(` Enabled: ${enabledTools.map((t) => t.name).join(", ")}`);
4093
+ }
4094
+ if (disabledTools.length > 0) {
4095
+ lines.push(` Disabled: ${disabledTools.map((t) => t.name).join(", ")}`);
4096
+ }
4097
+ }
4098
+ return helpers.success(lines.join("\n"));
4099
+ }
4100
+ if (args.action === "add") {
4101
+ if (!args.name) return helpers.error("Missing required field: name");
4102
+ if (args.transport === "http") {
4103
+ if (!args.url) return helpers.error("url is required for http transport");
4104
+ } else if (!args.command) {
4105
+ return helpers.error("command is required for stdio transport");
4106
+ }
4107
+ const serverCfg = {
4108
+ transport: args.transport ?? "stdio",
4109
+ ...args.command ? { command: args.command } : {},
4110
+ ...args.args && args.args.length > 0 ? { args: args.args } : {},
4111
+ ...args.env && Object.keys(args.env).length > 0 ? { env: args.env } : {},
4112
+ ...args.url ? { url: args.url } : {},
4113
+ ...args.headers && Object.keys(args.headers).length > 0 ? { headers: args.headers } : {}
4114
+ };
4115
+ await persistAndRebuild((mcpServers) => {
4116
+ mcpServers[args.name] = serverCfg;
4117
+ return mcpServers;
4118
+ });
4119
+ await mcpManagerForTools.addServer(args.name, serverCfg);
4120
+ await rebuildTools();
4121
+ await applyDynamicContext(context.sessionManager, context.sessionId);
4122
+ mcpNotifyChanged?.(context.sessionId);
4123
+ const server = mcpManagerForTools.getServer(args.name);
4124
+ const toolCount = server?.tools.length ?? 0;
4125
+ return helpers.success(`Added MCP server "${args.name}" (${toolCount} tools discovered).`);
4126
+ }
4127
+ if (args.action === "remove") {
4128
+ if (!args.name) return helpers.error("Missing required field: name");
4129
+ await persistAndRebuild((mcpServers) => {
4130
+ delete mcpServers[args.name];
4131
+ return mcpServers;
4132
+ });
4133
+ mcpManagerForTools.removeServer(args.name);
4134
+ await rebuildTools();
4135
+ await applyDynamicContext(context.sessionManager, context.sessionId);
4136
+ mcpNotifyChanged?.(context.sessionId);
4137
+ return helpers.success(`Removed MCP server "${args.name}".`);
4138
+ }
4139
+ if (args.action === "toggle-tool") {
4140
+ if (!args.name) return helpers.error("Missing required field: name");
4141
+ if (!args.toolName) return helpers.error("Missing required field: toolName");
4142
+ if (args.enabled === void 0) return helpers.error("Missing required field: enabled");
4143
+ const server = mcpManagerForTools.getServer(args.name);
4144
+ const currentDisabled = (server?.tools ?? []).filter((t) => !t.enabled).map((t) => t.name);
4145
+ const afterDisabled = args.enabled ? currentDisabled.filter((n) => n !== args.toolName) : [...currentDisabled, args.toolName];
4146
+ await persistAndRebuild((mcpServers) => {
4147
+ const cfg = mcpServers[args.name];
4148
+ if (cfg) {
4149
+ const updated = { ...cfg };
4150
+ if (afterDisabled.length > 0) {
4151
+ updated.disabledTools = afterDisabled;
4152
+ } else {
4153
+ delete updated.disabledTools;
4154
+ }
4155
+ mcpServers[args.name] = updated;
4156
+ }
4157
+ return mcpServers;
4158
+ });
4159
+ await mcpManagerForTools.setToolEnabled(args.name, args.toolName, args.enabled);
4160
+ await rebuildTools();
4161
+ await applyDynamicContext(context.sessionManager, context.sessionId);
4162
+ mcpNotifyChanged?.(context.sessionId);
4163
+ return helpers.success(
4164
+ `Tool "${args.toolName}" ${args.enabled ? "enabled" : "disabled"} on server "${args.name}".`
4165
+ );
4166
+ }
4167
+ return helpers.error("Unexpected error");
4168
+ }
4169
+ );
4170
+
3921
4171
  // src/server/tools/index.ts
3922
4172
  function parseToolPermissions(allowedTools) {
3923
4173
  const result = {};
@@ -4056,24 +4306,29 @@ function createRegistryFromTools(tools, allowedTools, toolPermissions) {
4056
4306
  }
4057
4307
  };
4058
4308
  }
4309
+ var mcpToolsOverride = [];
4310
+ function setMcpTools(tools) {
4311
+ mcpToolsOverride = tools;
4312
+ }
4059
4313
  function getAllToolsMap() {
4060
- return new Map([
4061
- ...[
4062
- readFileTool,
4063
- writeFileTool,
4064
- editFileTool,
4065
- runCommandTool,
4066
- askUserTool,
4067
- sessionMetadataTool,
4068
- callSubAgentTool,
4069
- loadSkillTool,
4070
- returnValueTool,
4071
- webFetchTool,
4072
- devServerTool,
4073
- stepDoneTool,
4074
- backgroundProcessTool
4075
- ].map((t) => [t.name, t])
4076
- ]);
4314
+ const builtInTools = [
4315
+ readFileTool,
4316
+ writeFileTool,
4317
+ editFileTool,
4318
+ runCommandTool,
4319
+ askUserTool,
4320
+ sessionMetadataTool,
4321
+ callSubAgentTool,
4322
+ loadSkillTool,
4323
+ returnValueTool,
4324
+ webFetchTool,
4325
+ devServerTool,
4326
+ stepDoneTool,
4327
+ backgroundProcessTool,
4328
+ mcpConfigTool
4329
+ ].map((t) => [t.name, t]);
4330
+ const mcpEntries = mcpToolsOverride.map((t) => [t.name, t]);
4331
+ return new Map([...builtInTools, ...mcpEntries]);
4077
4332
  }
4078
4333
  function createPermissionErrorMessage(toolName, allowedTools) {
4079
4334
  if (allowedTools.length === 0) {
@@ -4178,12 +4433,19 @@ export {
4178
4433
  executeSubAgent,
4179
4434
  devServerManager,
4180
4435
  stepDoneTool,
4436
+ computeDynamicContextHash,
4437
+ getToolFingerprint,
4438
+ applyDynamicContext,
4439
+ setMcpManagerForTools,
4440
+ setMcpConfigMode,
4441
+ setNotifyMcpServersChanged,
4181
4442
  parseToolPermissions,
4182
4443
  getToolPermissions,
4183
4444
  validateToolAction,
4184
4445
  createRegistryFromTools,
4446
+ setMcpTools,
4185
4447
  getToolRegistryForSubAgent,
4186
4448
  getToolRegistryForAgent,
4187
4449
  createToolRegistry
4188
4450
  };
4189
- //# sourceMappingURL=chunk-2VDLXCLO.js.map
4451
+ //# sourceMappingURL=chunk-KPKSN362.js.map
@@ -0,0 +1,39 @@
1
+ // src/server/mcp/tool-adapter.ts
2
+ function createMcpTools(mcpManager) {
3
+ const tools = [];
4
+ for (const server of mcpManager.getAllServers()) {
5
+ for (const mcpTool of server.tools) {
6
+ if (!mcpTool.enabled) continue;
7
+ const prefixedName = `${server.name}_${mcpTool.name}`;
8
+ const definition = {
9
+ type: "function",
10
+ function: {
11
+ name: prefixedName,
12
+ description: mcpTool.description ?? "",
13
+ parameters: mcpTool.inputSchema
14
+ }
15
+ };
16
+ tools.push({
17
+ name: prefixedName,
18
+ definition,
19
+ execute: async (args, _context) => {
20
+ const start = Date.now();
21
+ const result = await mcpManager.callTool(server.name, mcpTool.name, args);
22
+ return {
23
+ success: result.success,
24
+ ...result.output ? { output: result.output } : {},
25
+ ...result.error ? { error: result.error } : {},
26
+ durationMs: Date.now() - start,
27
+ truncated: false
28
+ };
29
+ }
30
+ });
31
+ }
32
+ }
33
+ return tools;
34
+ }
35
+
36
+ export {
37
+ createMcpTools
38
+ };
39
+ //# sourceMappingURL=chunk-NWO6GRYE.js.map