@truefoundry/trueforge-core 0.0.0 → 0.1.0-rc.0
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/LICENSE +21 -0
- package/dist/agent-session/ITurnResourceResolver.d.ts +69 -0
- package/dist/agent-session/ITurnResourceResolver.d.ts.map +1 -0
- package/dist/agent-session/ITurnResourceResolver.js +19 -0
- package/dist/agent-session/ITurnResourceResolver.js.map +1 -0
- package/dist/agent-session/ITurnResourceResolver.mjs +1 -0
- package/dist/agent-session/ITurnResourceResolver.mjs.map +1 -0
- package/dist/agent-session/SessionHandle.d.ts +81 -0
- package/dist/agent-session/SessionHandle.d.ts.map +1 -0
- package/dist/agent-session/SessionHandle.js +392 -0
- package/dist/agent-session/SessionHandle.js.map +1 -0
- package/dist/agent-session/SessionHandle.mjs +371 -0
- package/dist/agent-session/SessionHandle.mjs.map +1 -0
- package/dist/agent-session/Sessions.d.ts +25 -0
- package/dist/agent-session/Sessions.d.ts.map +1 -0
- package/dist/agent-session/Sessions.js +71 -0
- package/dist/agent-session/Sessions.js.map +1 -0
- package/dist/agent-session/Sessions.mjs +46 -0
- package/dist/agent-session/Sessions.mjs.map +1 -0
- package/dist/agent-session/TurnHandle.d.ts +88 -0
- package/dist/agent-session/TurnHandle.d.ts.map +1 -0
- package/dist/agent-session/TurnHandle.js +490 -0
- package/dist/agent-session/TurnHandle.js.map +1 -0
- package/dist/agent-session/TurnHandle.mjs +469 -0
- package/dist/agent-session/TurnHandle.mjs.map +1 -0
- package/dist/agent-session/TurnResourceResolver.d.ts +154 -0
- package/dist/agent-session/TurnResourceResolver.d.ts.map +1 -0
- package/dist/agent-session/TurnResourceResolver.js +178 -0
- package/dist/agent-session/TurnResourceResolver.js.map +1 -0
- package/dist/agent-session/TurnResourceResolver.mjs +153 -0
- package/dist/agent-session/TurnResourceResolver.mjs.map +1 -0
- package/dist/agent-session/builtinsFromSpec.d.ts +19 -0
- package/dist/agent-session/builtinsFromSpec.d.ts.map +1 -0
- package/dist/agent-session/builtinsFromSpec.js +73 -0
- package/dist/agent-session/builtinsFromSpec.js.map +1 -0
- package/dist/agent-session/builtinsFromSpec.mjs +48 -0
- package/dist/agent-session/builtinsFromSpec.mjs.map +1 -0
- package/dist/agent-session/index.d.ts +29 -0
- package/dist/agent-session/index.d.ts.map +1 -0
- package/dist/agent-session/index.js +117 -0
- package/dist/agent-session/index.js.map +1 -0
- package/dist/agent-session/index.mjs +84 -0
- package/dist/agent-session/index.mjs.map +1 -0
- package/dist/agent-session/models/SessionRecord.d.ts +34 -0
- package/dist/agent-session/models/SessionRecord.d.ts.map +1 -0
- package/dist/agent-session/models/SessionRecord.js +19 -0
- package/dist/agent-session/models/SessionRecord.js.map +1 -0
- package/dist/agent-session/models/SessionRecord.mjs +1 -0
- package/dist/agent-session/models/SessionRecord.mjs.map +1 -0
- package/dist/agent-session/models/TurnRecord.d.ts +37 -0
- package/dist/agent-session/models/TurnRecord.d.ts.map +1 -0
- package/dist/agent-session/models/TurnRecord.js +31 -0
- package/dist/agent-session/models/TurnRecord.js.map +1 -0
- package/dist/agent-session/models/TurnRecord.mjs +6 -0
- package/dist/agent-session/models/TurnRecord.mjs.map +1 -0
- package/dist/agent-session/schemas/agentSpec.d.ts +142 -0
- package/dist/agent-session/schemas/agentSpec.d.ts.map +1 -0
- package/dist/agent-session/schemas/agentSpec.js +170 -0
- package/dist/agent-session/schemas/agentSpec.js.map +1 -0
- package/dist/agent-session/schemas/agentSpec.mjs +154 -0
- package/dist/agent-session/schemas/agentSpec.mjs.map +1 -0
- package/dist/agent-session/schemas/events.d.ts +1037 -0
- package/dist/agent-session/schemas/events.d.ts.map +1 -0
- package/dist/agent-session/schemas/events.js +80 -0
- package/dist/agent-session/schemas/events.js.map +1 -0
- package/dist/agent-session/schemas/events.mjs +69 -0
- package/dist/agent-session/schemas/events.mjs.map +1 -0
- package/dist/agent-session/schemas/pagination.d.ts +9 -0
- package/dist/agent-session/schemas/pagination.d.ts.map +1 -0
- package/dist/agent-session/schemas/pagination.js +36 -0
- package/dist/agent-session/schemas/pagination.js.map +1 -0
- package/dist/agent-session/schemas/pagination.mjs +11 -0
- package/dist/agent-session/schemas/pagination.mjs.map +1 -0
- package/dist/agent-session/schemas/session.d.ts +319 -0
- package/dist/agent-session/schemas/session.d.ts.map +1 -0
- package/dist/agent-session/schemas/session.js +58 -0
- package/dist/agent-session/schemas/session.js.map +1 -0
- package/dist/agent-session/schemas/session.mjs +30 -0
- package/dist/agent-session/schemas/session.mjs.map +1 -0
- package/dist/agent-session/schemas/turn.d.ts +494 -0
- package/dist/agent-session/schemas/turn.d.ts.map +1 -0
- package/dist/agent-session/schemas/turn.js +131 -0
- package/dist/agent-session/schemas/turn.js.map +1 -0
- package/dist/agent-session/schemas/turn.mjs +102 -0
- package/dist/agent-session/schemas/turn.mjs.map +1 -0
- package/dist/agent-session/store/ISessionStore.d.ts +310 -0
- package/dist/agent-session/store/ISessionStore.d.ts.map +1 -0
- package/dist/agent-session/store/ISessionStore.js +19 -0
- package/dist/agent-session/store/ISessionStore.js.map +1 -0
- package/dist/agent-session/store/ISessionStore.mjs +1 -0
- package/dist/agent-session/store/ISessionStore.mjs.map +1 -0
- package/dist/agent-session/store/InMemorySessionStore.d.ts +55 -0
- package/dist/agent-session/store/InMemorySessionStore.d.ts.map +1 -0
- package/dist/agent-session/store/InMemorySessionStore.js +475 -0
- package/dist/agent-session/store/InMemorySessionStore.js.map +1 -0
- package/dist/agent-session/store/InMemorySessionStore.mjs +461 -0
- package/dist/agent-session/store/InMemorySessionStore.mjs.map +1 -0
- package/dist/agent-session/store/OffsetPageToken.d.ts +13 -0
- package/dist/agent-session/store/OffsetPageToken.d.ts.map +1 -0
- package/dist/agent-session/store/OffsetPageToken.js +60 -0
- package/dist/agent-session/store/OffsetPageToken.js.map +1 -0
- package/dist/agent-session/store/OffsetPageToken.mjs +32 -0
- package/dist/agent-session/store/OffsetPageToken.mjs.map +1 -0
- package/dist/agent-session/store/PageToken.d.ts +4 -0
- package/dist/agent-session/store/PageToken.d.ts.map +1 -0
- package/dist/agent-session/store/PageToken.js +45 -0
- package/dist/agent-session/store/PageToken.js.map +1 -0
- package/dist/agent-session/store/PageToken.mjs +19 -0
- package/dist/agent-session/store/PageToken.mjs.map +1 -0
- package/dist/agent-session/store/SessionEventPageToken.d.ts +14 -0
- package/dist/agent-session/store/SessionEventPageToken.d.ts.map +1 -0
- package/dist/agent-session/store/SessionEventPageToken.js +70 -0
- package/dist/agent-session/store/SessionEventPageToken.js.map +1 -0
- package/dist/agent-session/store/SessionEventPageToken.mjs +42 -0
- package/dist/agent-session/store/SessionEventPageToken.mjs.map +1 -0
- package/dist/agent-session/store/SessionListPageToken.d.ts +24 -0
- package/dist/agent-session/store/SessionListPageToken.d.ts.map +1 -0
- package/dist/agent-session/store/SessionListPageToken.js +66 -0
- package/dist/agent-session/store/SessionListPageToken.js.map +1 -0
- package/dist/agent-session/store/SessionListPageToken.mjs +38 -0
- package/dist/agent-session/store/SessionListPageToken.mjs.map +1 -0
- package/dist/agent-session/store/SessionStoreErrors.d.ts +43 -0
- package/dist/agent-session/store/SessionStoreErrors.d.ts.map +1 -0
- package/dist/agent-session/store/SessionStoreErrors.js +126 -0
- package/dist/agent-session/store/SessionStoreErrors.js.map +1 -0
- package/dist/agent-session/store/SessionStoreErrors.mjs +92 -0
- package/dist/agent-session/store/SessionStoreErrors.mjs.map +1 -0
- package/dist/agent-session/store/assertCreateTurnThreadDelta.d.ts +18 -0
- package/dist/agent-session/store/assertCreateTurnThreadDelta.d.ts.map +1 -0
- package/dist/agent-session/store/assertCreateTurnThreadDelta.js +67 -0
- package/dist/agent-session/store/assertCreateTurnThreadDelta.js.map +1 -0
- package/dist/agent-session/store/assertCreateTurnThreadDelta.mjs +42 -0
- package/dist/agent-session/store/assertCreateTurnThreadDelta.mjs.map +1 -0
- package/dist/core/InstructionBuilder.d.ts +71 -0
- package/dist/core/InstructionBuilder.d.ts.map +1 -0
- package/dist/core/InstructionBuilder.js +95 -0
- package/dist/core/InstructionBuilder.js.map +1 -0
- package/dist/core/InstructionBuilder.mjs +69 -0
- package/dist/core/InstructionBuilder.mjs.map +1 -0
- package/dist/core/capabilities/AgentCapability.d.ts +32 -0
- package/dist/core/capabilities/AgentCapability.d.ts.map +1 -0
- package/dist/core/capabilities/AgentCapability.js +19 -0
- package/dist/core/capabilities/AgentCapability.js.map +1 -0
- package/dist/core/capabilities/AgentCapability.mjs +1 -0
- package/dist/core/capabilities/AgentCapability.mjs.map +1 -0
- package/dist/core/capabilities/AgentContextProcessor.d.ts +30 -0
- package/dist/core/capabilities/AgentContextProcessor.d.ts.map +1 -0
- package/dist/core/capabilities/AgentContextProcessor.js +19 -0
- package/dist/core/capabilities/AgentContextProcessor.js.map +1 -0
- package/dist/core/capabilities/AgentContextProcessor.mjs +1 -0
- package/dist/core/capabilities/AgentContextProcessor.mjs.map +1 -0
- package/dist/core/capabilities/ToolResponseProcessor.d.ts +12 -0
- package/dist/core/capabilities/ToolResponseProcessor.d.ts.map +1 -0
- package/dist/core/capabilities/ToolResponseProcessor.js +19 -0
- package/dist/core/capabilities/ToolResponseProcessor.js.map +1 -0
- package/dist/core/capabilities/ToolResponseProcessor.mjs +1 -0
- package/dist/core/capabilities/ToolResponseProcessor.mjs.map +1 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.d.ts +11 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.d.ts.map +1 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.js +90 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.js.map +1 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.mjs +64 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.mjs.map +1 -0
- package/dist/core/capabilities/builtins/ContextCompaction.d.ts +23 -0
- package/dist/core/capabilities/builtins/ContextCompaction.d.ts.map +1 -0
- package/dist/core/capabilities/builtins/ContextCompaction.js +235 -0
- package/dist/core/capabilities/builtins/ContextCompaction.js.map +1 -0
- package/dist/core/capabilities/builtins/ContextCompaction.mjs +208 -0
- package/dist/core/capabilities/builtins/ContextCompaction.mjs.map +1 -0
- package/dist/core/capabilities/builtins/CurrentDateTime.d.ts +17 -0
- package/dist/core/capabilities/builtins/CurrentDateTime.d.ts.map +1 -0
- package/dist/core/capabilities/builtins/CurrentDateTime.js +75 -0
- package/dist/core/capabilities/builtins/CurrentDateTime.js.map +1 -0
- package/dist/core/capabilities/builtins/CurrentDateTime.mjs +47 -0
- package/dist/core/capabilities/builtins/CurrentDateTime.mjs.map +1 -0
- package/dist/core/capabilities/builtins/DynamicSubAgents.d.ts +39 -0
- package/dist/core/capabilities/builtins/DynamicSubAgents.d.ts.map +1 -0
- package/dist/core/capabilities/builtins/DynamicSubAgents.js +176 -0
- package/dist/core/capabilities/builtins/DynamicSubAgents.js.map +1 -0
- package/dist/core/capabilities/builtins/DynamicSubAgents.mjs +134 -0
- package/dist/core/capabilities/builtins/DynamicSubAgents.mjs.map +1 -0
- package/dist/core/capabilities/builtins/LargeToolResponse.d.ts +40 -0
- package/dist/core/capabilities/builtins/LargeToolResponse.d.ts.map +1 -0
- package/dist/core/capabilities/builtins/LargeToolResponse.js +225 -0
- package/dist/core/capabilities/builtins/LargeToolResponse.js.map +1 -0
- package/dist/core/capabilities/builtins/LargeToolResponse.mjs +186 -0
- package/dist/core/capabilities/builtins/LargeToolResponse.mjs.map +1 -0
- package/dist/core/capabilities/builtins/OpenUI.d.ts +31 -0
- package/dist/core/capabilities/builtins/OpenUI.d.ts.map +1 -0
- package/dist/core/capabilities/builtins/OpenUI.js +376 -0
- package/dist/core/capabilities/builtins/OpenUI.js.map +1 -0
- package/dist/core/capabilities/builtins/OpenUI.mjs +326 -0
- package/dist/core/capabilities/builtins/OpenUI.mjs.map +1 -0
- package/dist/core/errors.d.ts +33 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +88 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/errors.mjs +57 -0
- package/dist/core/errors.mjs.map +1 -0
- package/dist/core/events/PassthroughEvents.d.ts +30 -0
- package/dist/core/events/PassthroughEvents.d.ts.map +1 -0
- package/dist/core/events/PassthroughEvents.js +19 -0
- package/dist/core/events/PassthroughEvents.js.map +1 -0
- package/dist/core/events/PassthroughEvents.mjs +1 -0
- package/dist/core/events/PassthroughEvents.mjs.map +1 -0
- package/dist/core/events/schema.d.ts +1103 -0
- package/dist/core/events/schema.d.ts.map +1 -0
- package/dist/core/events/schema.js +337 -0
- package/dist/core/events/schema.js.map +1 -0
- package/dist/core/events/schema.mjs +283 -0
- package/dist/core/events/schema.mjs.map +1 -0
- package/dist/core/index.d.ts +60 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +209 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/index.mjs +144 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/core/llm/ILLM.d.ts +15 -0
- package/dist/core/llm/ILLM.d.ts.map +1 -0
- package/dist/core/llm/ILLM.js +19 -0
- package/dist/core/llm/ILLM.js.map +1 -0
- package/dist/core/llm/ILLM.mjs +1 -0
- package/dist/core/llm/ILLM.mjs.map +1 -0
- package/dist/core/llm/LLMTypes.d.ts +369 -0
- package/dist/core/llm/LLMTypes.d.ts.map +1 -0
- package/dist/core/llm/LLMTypes.js +170 -0
- package/dist/core/llm/LLMTypes.js.map +1 -0
- package/dist/core/llm/LLMTypes.mjs +133 -0
- package/dist/core/llm/LLMTypes.mjs.map +1 -0
- package/dist/core/llm/VercelAILLM.d.ts +228 -0
- package/dist/core/llm/VercelAILLM.d.ts.map +1 -0
- package/dist/core/llm/VercelAILLM.js +1042 -0
- package/dist/core/llm/VercelAILLM.js.map +1 -0
- package/dist/core/llm/VercelAILLM.mjs +999 -0
- package/dist/core/llm/VercelAILLM.mjs.map +1 -0
- package/dist/core/llm/openaiSchemas.d.ts +190 -0
- package/dist/core/llm/openaiSchemas.d.ts.map +1 -0
- package/dist/core/llm/openaiSchemas.js +144 -0
- package/dist/core/llm/openaiSchemas.js.map +1 -0
- package/dist/core/llm/openaiSchemas.mjs +107 -0
- package/dist/core/llm/openaiSchemas.mjs.map +1 -0
- package/dist/core/llm/responseFormat.d.ts +25 -0
- package/dist/core/llm/responseFormat.d.ts.map +1 -0
- package/dist/core/llm/responseFormat.js +58 -0
- package/dist/core/llm/responseFormat.js.map +1 -0
- package/dist/core/llm/responseFormat.mjs +32 -0
- package/dist/core/llm/responseFormat.mjs.map +1 -0
- package/dist/core/llm/toOpenAIChatMessage.d.ts +11 -0
- package/dist/core/llm/toOpenAIChatMessage.d.ts.map +1 -0
- package/dist/core/llm/toOpenAIChatMessage.js +95 -0
- package/dist/core/llm/toOpenAIChatMessage.js.map +1 -0
- package/dist/core/llm/toOpenAIChatMessage.mjs +70 -0
- package/dist/core/llm/toOpenAIChatMessage.mjs.map +1 -0
- package/dist/core/llm/usage.d.ts +4 -0
- package/dist/core/llm/usage.d.ts.map +1 -0
- package/dist/core/llm/usage.js +52 -0
- package/dist/core/llm/usage.js.map +1 -0
- package/dist/core/llm/usage.mjs +26 -0
- package/dist/core/llm/usage.mjs.map +1 -0
- package/dist/core/mcp/ClientSideTool.d.ts +10 -0
- package/dist/core/mcp/ClientSideTool.d.ts.map +1 -0
- package/dist/core/mcp/ClientSideTool.js +56 -0
- package/dist/core/mcp/ClientSideTool.js.map +1 -0
- package/dist/core/mcp/ClientSideTool.mjs +31 -0
- package/dist/core/mcp/ClientSideTool.mjs.map +1 -0
- package/dist/core/mcp/IMCPServer.d.ts +78 -0
- package/dist/core/mcp/IMCPServer.d.ts.map +1 -0
- package/dist/core/mcp/IMCPServer.js +63 -0
- package/dist/core/mcp/IMCPServer.js.map +1 -0
- package/dist/core/mcp/IMCPServer.mjs +33 -0
- package/dist/core/mcp/IMCPServer.mjs.map +1 -0
- package/dist/core/mcp/LocalToolMCP.d.ts +39 -0
- package/dist/core/mcp/LocalToolMCP.d.ts.map +1 -0
- package/dist/core/mcp/LocalToolMCP.js +121 -0
- package/dist/core/mcp/LocalToolMCP.js.map +1 -0
- package/dist/core/mcp/LocalToolMCP.mjs +98 -0
- package/dist/core/mcp/LocalToolMCP.mjs.map +1 -0
- package/dist/core/mcp/RemoteMCP.d.ts +67 -0
- package/dist/core/mcp/RemoteMCP.d.ts.map +1 -0
- package/dist/core/mcp/RemoteMCP.js +244 -0
- package/dist/core/mcp/RemoteMCP.js.map +1 -0
- package/dist/core/mcp/RemoteMCP.mjs +222 -0
- package/dist/core/mcp/RemoteMCP.mjs.map +1 -0
- package/dist/core/mcp/ToolSelectorPolicy.d.ts +52 -0
- package/dist/core/mcp/ToolSelectorPolicy.d.ts.map +1 -0
- package/dist/core/mcp/ToolSelectorPolicy.js +108 -0
- package/dist/core/mcp/ToolSelectorPolicy.js.map +1 -0
- package/dist/core/mcp/ToolSelectorPolicy.mjs +90 -0
- package/dist/core/mcp/ToolSelectorPolicy.mjs.map +1 -0
- package/dist/core/mcp/ToolSet.d.ts +31 -0
- package/dist/core/mcp/ToolSet.d.ts.map +1 -0
- package/dist/core/mcp/ToolSet.js +119 -0
- package/dist/core/mcp/ToolSet.js.map +1 -0
- package/dist/core/mcp/ToolSet.mjs +98 -0
- package/dist/core/mcp/ToolSet.mjs.map +1 -0
- package/dist/core/mcp/convertMCPServers.d.ts +22 -0
- package/dist/core/mcp/convertMCPServers.d.ts.map +1 -0
- package/dist/core/mcp/convertMCPServers.js +89 -0
- package/dist/core/mcp/convertMCPServers.js.map +1 -0
- package/dist/core/mcp/convertMCPServers.mjs +64 -0
- package/dist/core/mcp/convertMCPServers.mjs.map +1 -0
- package/dist/core/mcp/executeToolCalls.d.ts +31 -0
- package/dist/core/mcp/executeToolCalls.d.ts.map +1 -0
- package/dist/core/mcp/executeToolCalls.js +168 -0
- package/dist/core/mcp/executeToolCalls.js.map +1 -0
- package/dist/core/mcp/executeToolCalls.mjs +149 -0
- package/dist/core/mcp/executeToolCalls.mjs.map +1 -0
- package/dist/core/mcp/pagination.d.ts +11 -0
- package/dist/core/mcp/pagination.d.ts.map +1 -0
- package/dist/core/mcp/pagination.js +49 -0
- package/dist/core/mcp/pagination.js.map +1 -0
- package/dist/core/mcp/pagination.mjs +24 -0
- package/dist/core/mcp/pagination.mjs.map +1 -0
- package/dist/core/mcp/remoteMcpClient.d.ts +36 -0
- package/dist/core/mcp/remoteMcpClient.d.ts.map +1 -0
- package/dist/core/mcp/remoteMcpClient.js +138 -0
- package/dist/core/mcp/remoteMcpClient.js.map +1 -0
- package/dist/core/mcp/remoteMcpClient.mjs +112 -0
- package/dist/core/mcp/remoteMcpClient.mjs.map +1 -0
- package/dist/core/mcp/toolNames.d.ts +6 -0
- package/dist/core/mcp/toolNames.d.ts.map +1 -0
- package/dist/core/mcp/toolNames.js +59 -0
- package/dist/core/mcp/toolNames.js.map +1 -0
- package/dist/core/mcp/toolNames.mjs +33 -0
- package/dist/core/mcp/toolNames.mjs.map +1 -0
- package/dist/core/mcp/toolSelectors.d.ts +28 -0
- package/dist/core/mcp/toolSelectors.d.ts.map +1 -0
- package/dist/core/mcp/toolSelectors.js +113 -0
- package/dist/core/mcp/toolSelectors.js.map +1 -0
- package/dist/core/mcp/toolSelectors.mjs +78 -0
- package/dist/core/mcp/toolSelectors.mjs.map +1 -0
- package/dist/core/runtime/AgentDefinition.d.ts +23 -0
- package/dist/core/runtime/AgentDefinition.d.ts.map +1 -0
- package/dist/core/runtime/AgentDefinition.js +19 -0
- package/dist/core/runtime/AgentDefinition.js.map +1 -0
- package/dist/core/runtime/AgentDefinition.mjs +1 -0
- package/dist/core/runtime/AgentDefinition.mjs.map +1 -0
- package/dist/core/runtime/AgentThread.d.ts +64 -0
- package/dist/core/runtime/AgentThread.d.ts.map +1 -0
- package/dist/core/runtime/AgentThread.js +1065 -0
- package/dist/core/runtime/AgentThread.js.map +1 -0
- package/dist/core/runtime/AgentThread.mjs +1062 -0
- package/dist/core/runtime/AgentThread.mjs.map +1 -0
- package/dist/core/runtime/AgentThread.types.d.ts +123 -0
- package/dist/core/runtime/AgentThread.types.d.ts.map +1 -0
- package/dist/core/runtime/AgentThread.types.js +46 -0
- package/dist/core/runtime/AgentThread.types.js.map +1 -0
- package/dist/core/runtime/AgentThread.types.mjs +20 -0
- package/dist/core/runtime/AgentThread.types.mjs.map +1 -0
- package/dist/core/runtime/AgentThreadOrchestrator.d.ts +35 -0
- package/dist/core/runtime/AgentThreadOrchestrator.d.ts.map +1 -0
- package/dist/core/runtime/AgentThreadOrchestrator.js +433 -0
- package/dist/core/runtime/AgentThreadOrchestrator.js.map +1 -0
- package/dist/core/runtime/AgentThreadOrchestrator.mjs +418 -0
- package/dist/core/runtime/AgentThreadOrchestrator.mjs.map +1 -0
- package/dist/core/runtime/CreateDynamicSubAgentThread.d.ts +11 -0
- package/dist/core/runtime/CreateDynamicSubAgentThread.d.ts.map +1 -0
- package/dist/core/runtime/CreateDynamicSubAgentThread.js +19 -0
- package/dist/core/runtime/CreateDynamicSubAgentThread.js.map +1 -0
- package/dist/core/runtime/CreateDynamicSubAgentThread.mjs +1 -0
- package/dist/core/runtime/CreateDynamicSubAgentThread.mjs.map +1 -0
- package/dist/core/runtime/DeferredTool.d.ts +34 -0
- package/dist/core/runtime/DeferredTool.d.ts.map +1 -0
- package/dist/core/runtime/DeferredTool.js +321 -0
- package/dist/core/runtime/DeferredTool.js.map +1 -0
- package/dist/core/runtime/DeferredTool.mjs +287 -0
- package/dist/core/runtime/DeferredTool.mjs.map +1 -0
- package/dist/core/runtime/OpenToolCallCloser.d.ts +21 -0
- package/dist/core/runtime/OpenToolCallCloser.d.ts.map +1 -0
- package/dist/core/runtime/OpenToolCallCloser.js +92 -0
- package/dist/core/runtime/OpenToolCallCloser.js.map +1 -0
- package/dist/core/runtime/OpenToolCallCloser.mjs +66 -0
- package/dist/core/runtime/OpenToolCallCloser.mjs.map +1 -0
- package/dist/core/runtime/UserInputMessage.d.ts +16 -0
- package/dist/core/runtime/UserInputMessage.d.ts.map +1 -0
- package/dist/core/runtime/UserInputMessage.js +183 -0
- package/dist/core/runtime/UserInputMessage.js.map +1 -0
- package/dist/core/runtime/UserInputMessage.mjs +157 -0
- package/dist/core/runtime/UserInputMessage.mjs.map +1 -0
- package/dist/core/runtime/contextUsage.d.ts +17 -0
- package/dist/core/runtime/contextUsage.d.ts.map +1 -0
- package/dist/core/runtime/contextUsage.js +56 -0
- package/dist/core/runtime/contextUsage.js.map +1 -0
- package/dist/core/runtime/contextUsage.mjs +28 -0
- package/dist/core/runtime/contextUsage.mjs.map +1 -0
- package/dist/core/runtime/contextUtils.d.ts +30 -0
- package/dist/core/runtime/contextUtils.d.ts.map +1 -0
- package/dist/core/runtime/contextUtils.js +198 -0
- package/dist/core/runtime/contextUtils.js.map +1 -0
- package/dist/core/runtime/contextUtils.mjs +148 -0
- package/dist/core/runtime/contextUtils.mjs.map +1 -0
- package/dist/core/runtime/metrics.d.ts +22 -0
- package/dist/core/runtime/metrics.d.ts.map +1 -0
- package/dist/core/runtime/metrics.js +89 -0
- package/dist/core/runtime/metrics.js.map +1 -0
- package/dist/core/runtime/metrics.mjs +61 -0
- package/dist/core/runtime/metrics.mjs.map +1 -0
- package/dist/core/sandbox/Sandbox.d.ts +121 -0
- package/dist/core/sandbox/Sandbox.d.ts.map +1 -0
- package/dist/core/sandbox/Sandbox.js +572 -0
- package/dist/core/sandbox/Sandbox.js.map +1 -0
- package/dist/core/sandbox/Sandbox.mjs +536 -0
- package/dist/core/sandbox/Sandbox.mjs.map +1 -0
- package/dist/core/sandbox/SandboxErrors.d.ts +30 -0
- package/dist/core/sandbox/SandboxErrors.d.ts.map +1 -0
- package/dist/core/sandbox/SandboxErrors.js +102 -0
- package/dist/core/sandbox/SandboxErrors.js.map +1 -0
- package/dist/core/sandbox/SandboxErrors.mjs +71 -0
- package/dist/core/sandbox/SandboxErrors.mjs.map +1 -0
- package/dist/core/sandbox/SandboxNatsBridge.d.ts +33 -0
- package/dist/core/sandbox/SandboxNatsBridge.d.ts.map +1 -0
- package/dist/core/sandbox/SandboxNatsBridge.js +222 -0
- package/dist/core/sandbox/SandboxNatsBridge.js.map +1 -0
- package/dist/core/sandbox/SandboxNatsBridge.mjs +201 -0
- package/dist/core/sandbox/SandboxNatsBridge.mjs.map +1 -0
- package/dist/core/sandbox/constants.d.ts +10 -0
- package/dist/core/sandbox/constants.d.ts.map +1 -0
- package/dist/core/sandbox/constants.js +37 -0
- package/dist/core/sandbox/constants.js.map +1 -0
- package/dist/core/sandbox/constants.mjs +10 -0
- package/dist/core/sandbox/constants.mjs.map +1 -0
- package/dist/core/sandbox/provider/DaytonaProvider.d.ts +80 -0
- package/dist/core/sandbox/provider/DaytonaProvider.d.ts.map +1 -0
- package/dist/core/sandbox/provider/DaytonaProvider.js +346 -0
- package/dist/core/sandbox/provider/DaytonaProvider.js.map +1 -0
- package/dist/core/sandbox/provider/DaytonaProvider.mjs +326 -0
- package/dist/core/sandbox/provider/DaytonaProvider.mjs.map +1 -0
- package/dist/core/sandbox/provider/Provider.d.ts +83 -0
- package/dist/core/sandbox/provider/Provider.d.ts.map +1 -0
- package/dist/core/sandbox/provider/Provider.js +43 -0
- package/dist/core/sandbox/provider/Provider.js.map +1 -0
- package/dist/core/sandbox/provider/Provider.mjs +17 -0
- package/dist/core/sandbox/provider/Provider.mjs.map +1 -0
- package/dist/core/sandbox/provider/TFYSandboxProvider.d.ts +41 -0
- package/dist/core/sandbox/provider/TFYSandboxProvider.d.ts.map +1 -0
- package/dist/core/sandbox/provider/TFYSandboxProvider.js +180 -0
- package/dist/core/sandbox/provider/TFYSandboxProvider.js.map +1 -0
- package/dist/core/sandbox/provider/TFYSandboxProvider.mjs +147 -0
- package/dist/core/sandbox/provider/TFYSandboxProvider.mjs.map +1 -0
- package/dist/core/sandbox/sandboxImage.d.ts +6 -0
- package/dist/core/sandbox/sandboxImage.d.ts.map +1 -0
- package/dist/core/sandbox/sandboxImage.js +31 -0
- package/dist/core/sandbox/sandboxImage.js.map +1 -0
- package/dist/core/sandbox/sandboxImage.mjs +6 -0
- package/dist/core/sandbox/sandboxImage.mjs.map +1 -0
- package/dist/core/sandbox/sandboxScripts.gen.d.ts +5 -0
- package/dist/core/sandbox/sandboxScripts.gen.d.ts.map +1 -0
- package/dist/core/sandbox/sandboxScripts.gen.js +343 -0
- package/dist/core/sandbox/sandboxScripts.gen.js.map +1 -0
- package/dist/core/sandbox/sandboxScripts.gen.mjs +318 -0
- package/dist/core/sandbox/sandboxScripts.gen.mjs.map +1 -0
- package/dist/core/sandbox/skills/ISkillMounter.d.ts +7 -0
- package/dist/core/sandbox/skills/ISkillMounter.d.ts.map +1 -0
- package/dist/core/sandbox/skills/ISkillMounter.js +19 -0
- package/dist/core/sandbox/skills/ISkillMounter.js.map +1 -0
- package/dist/core/sandbox/skills/ISkillMounter.mjs +1 -0
- package/dist/core/sandbox/skills/ISkillMounter.mjs.map +1 -0
- package/dist/core/sandbox/skills/SkillMounter.d.ts +17 -0
- package/dist/core/sandbox/skills/SkillMounter.d.ts.map +1 -0
- package/dist/core/sandbox/skills/SkillMounter.js +73 -0
- package/dist/core/sandbox/skills/SkillMounter.js.map +1 -0
- package/dist/core/sandbox/skills/SkillMounter.mjs +48 -0
- package/dist/core/sandbox/skills/SkillMounter.mjs.map +1 -0
- package/dist/core/sandbox/skills/constants.d.ts +10 -0
- package/dist/core/sandbox/skills/constants.d.ts.map +1 -0
- package/dist/core/sandbox/skills/constants.js +56 -0
- package/dist/core/sandbox/skills/constants.js.map +1 -0
- package/dist/core/sandbox/skills/constants.mjs +28 -0
- package/dist/core/sandbox/skills/constants.mjs.map +1 -0
- package/dist/core/sandbox/skills/index.d.ts +5 -0
- package/dist/core/sandbox/skills/index.d.ts.map +1 -0
- package/dist/core/sandbox/skills/index.js +40 -0
- package/dist/core/sandbox/skills/index.js.map +1 -0
- package/dist/core/sandbox/skills/index.mjs +11 -0
- package/dist/core/sandbox/skills/index.mjs.map +1 -0
- package/dist/core/tracing/AgentTracing.d.ts +38 -0
- package/dist/core/tracing/AgentTracing.d.ts.map +1 -0
- package/dist/core/tracing/AgentTracing.js +19 -0
- package/dist/core/tracing/AgentTracing.js.map +1 -0
- package/dist/core/tracing/AgentTracing.mjs +1 -0
- package/dist/core/tracing/AgentTracing.mjs.map +1 -0
- package/dist/core/tracing/NoopAgentTracing.d.ts +3 -0
- package/dist/core/tracing/NoopAgentTracing.d.ts.map +1 -0
- package/dist/core/tracing/NoopAgentTracing.js +79 -0
- package/dist/core/tracing/NoopAgentTracing.js.map +1 -0
- package/dist/core/tracing/NoopAgentTracing.mjs +54 -0
- package/dist/core/tracing/NoopAgentTracing.mjs.map +1 -0
- package/dist/core/util/abort.d.ts +2 -0
- package/dist/core/util/abort.d.ts.map +1 -0
- package/dist/core/util/abort.js +38 -0
- package/dist/core/util/abort.js.map +1 -0
- package/dist/core/util/abort.mjs +13 -0
- package/dist/core/util/abort.mjs.map +1 -0
- package/dist/core/util/errorLogFields.d.ts +6 -0
- package/dist/core/util/errorLogFields.d.ts.map +1 -0
- package/dist/core/util/errorLogFields.js +36 -0
- package/dist/core/util/errorLogFields.js.map +1 -0
- package/dist/core/util/errorLogFields.mjs +11 -0
- package/dist/core/util/errorLogFields.mjs.map +1 -0
- package/dist/core/util/promiseUtils.d.ts +7 -0
- package/dist/core/util/promiseUtils.d.ts.map +1 -0
- package/dist/core/util/promiseUtils.js +82 -0
- package/dist/core/util/promiseUtils.js.map +1 -0
- package/dist/core/util/promiseUtils.mjs +55 -0
- package/dist/core/util/promiseUtils.mjs.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +8 -0
- package/dist/index.mjs.map +1 -0
- package/dist/package.json +3 -0
- package/dist/request-reply/client.d.ts +21 -0
- package/dist/request-reply/client.d.ts.map +1 -0
- package/dist/request-reply/client.js +92 -0
- package/dist/request-reply/client.js.map +1 -0
- package/dist/request-reply/client.mjs +67 -0
- package/dist/request-reply/client.mjs.map +1 -0
- package/dist/request-reply/errors.d.ts +23 -0
- package/dist/request-reply/errors.d.ts.map +1 -0
- package/dist/request-reply/errors.js +66 -0
- package/dist/request-reply/errors.js.map +1 -0
- package/dist/request-reply/errors.mjs +39 -0
- package/dist/request-reply/errors.mjs.map +1 -0
- package/dist/request-reply/executor.d.ts +70 -0
- package/dist/request-reply/executor.d.ts.map +1 -0
- package/dist/request-reply/executor.js +267 -0
- package/dist/request-reply/executor.js.map +1 -0
- package/dist/request-reply/executor.mjs +232 -0
- package/dist/request-reply/executor.mjs.map +1 -0
- package/dist/request-reply/index.d.ts +16 -0
- package/dist/request-reply/index.d.ts.map +1 -0
- package/dist/request-reply/index.js +47 -0
- package/dist/request-reply/index.js.map +1 -0
- package/dist/request-reply/index.mjs +16 -0
- package/dist/request-reply/index.mjs.map +1 -0
- package/dist/request-reply/router.d.ts +20 -0
- package/dist/request-reply/router.d.ts.map +1 -0
- package/dist/request-reply/router.js +55 -0
- package/dist/request-reply/router.js.map +1 -0
- package/dist/request-reply/router.mjs +30 -0
- package/dist/request-reply/router.mjs.map +1 -0
- package/dist/request-reply/types.d.ts +25 -0
- package/dist/request-reply/types.d.ts.map +1 -0
- package/dist/request-reply/types.js +54 -0
- package/dist/request-reply/types.js.map +1 -0
- package/dist/request-reply/types.mjs +28 -0
- package/dist/request-reply/types.mjs.map +1 -0
- package/dist/request-reply/utils.d.ts +9 -0
- package/dist/request-reply/utils.d.ts.map +1 -0
- package/dist/request-reply/utils.js +51 -0
- package/dist/request-reply/utils.js.map +1 -0
- package/dist/request-reply/utils.mjs +22 -0
- package/dist/request-reply/utils.mjs.map +1 -0
- package/package.json +127 -6
- package/README.md +0 -4
- package/index.js +0 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// src/core/mcp/convertMCPServers.ts
|
|
2
|
+
import { isAuthRequired } from "./IMCPServer.mjs";
|
|
3
|
+
import { getUniqueSanitizedToolName } from "./toolNames.mjs";
|
|
4
|
+
async function convertMCPServersToTools(params) {
|
|
5
|
+
const { tfyManagedServers, userServers } = params;
|
|
6
|
+
const tools = [];
|
|
7
|
+
const toolMapping = /* @__PURE__ */ new Map();
|
|
8
|
+
const initializationInfo = [];
|
|
9
|
+
const authRequirementInfo = [];
|
|
10
|
+
const registeredNames = /* @__PURE__ */ new Set();
|
|
11
|
+
const filteredUserServers = userServers.filter((s) => s.preload || s.hasPreloadedTools);
|
|
12
|
+
const sortedTfyServers = [...tfyManagedServers].sort((a, b) => a.name > b.name ? 1 : -1);
|
|
13
|
+
const sortedUserServers = [...filteredUserServers].sort((a, b) => a.name > b.name ? 1 : -1);
|
|
14
|
+
const allServers = [...sortedTfyServers, ...sortedUserServers];
|
|
15
|
+
const listResults = await Promise.all(
|
|
16
|
+
allServers.map(async (server) => ({ serverName: server.name, response: await server.listTools() }))
|
|
17
|
+
);
|
|
18
|
+
for (let i = 0; i < allServers.length; i++) {
|
|
19
|
+
const listResult = listResults[i];
|
|
20
|
+
if (!listResult) continue;
|
|
21
|
+
const { serverName, response: listResponse } = listResult;
|
|
22
|
+
if (isAuthRequired(listResponse)) {
|
|
23
|
+
authRequirementInfo.push(listResponse.authRequired);
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
const { result: mcpTools, wasInitialized } = listResponse;
|
|
27
|
+
if (wasInitialized) {
|
|
28
|
+
initializationInfo.push(wasInitialized);
|
|
29
|
+
}
|
|
30
|
+
const toolSet = allServers[i];
|
|
31
|
+
if (toolSet === void 0) {
|
|
32
|
+
throw new Error(`Unreachable: missing tool set at index ${String(i)}`);
|
|
33
|
+
}
|
|
34
|
+
const sortedTools = [...mcpTools.tools].sort((a, b) => a.name > b.name ? 1 : -1);
|
|
35
|
+
for (const mcpTool of sortedTools) {
|
|
36
|
+
if (!mcpTool.preload) continue;
|
|
37
|
+
const { name: toolName } = getUniqueSanitizedToolName(mcpTool.name, registeredNames);
|
|
38
|
+
registeredNames.add(toolName);
|
|
39
|
+
const description = `mcp server: ${serverName}
|
|
40
|
+
${mcpTool.description ?? ""}`;
|
|
41
|
+
tools.push({
|
|
42
|
+
type: "function",
|
|
43
|
+
function: {
|
|
44
|
+
name: toolName,
|
|
45
|
+
description,
|
|
46
|
+
parameters: {
|
|
47
|
+
type: "object",
|
|
48
|
+
properties: mcpTool.inputSchema.properties ?? {},
|
|
49
|
+
required: mcpTool.inputSchema.required ?? []
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
toolMapping.set(toolName, {
|
|
54
|
+
toolSet,
|
|
55
|
+
originalToolName: mcpTool.name
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return { convertedTools: { tools, toolMapping }, initializationInfo, authRequirementInfo };
|
|
60
|
+
}
|
|
61
|
+
export {
|
|
62
|
+
convertMCPServersToTools
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=convertMCPServers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/mcp/convertMCPServers.ts"],"sourcesContent":["import type { ChatCompletionTool } from 'openai/resources/chat';\nimport type { MCPServerInitInfo } from '../events/schema';\nimport type { MCPAuthRequired } from '../mcp/IMCPServer';\nimport { type IToolSet, isAuthRequired } from './IMCPServer';\nimport { getUniqueSanitizedToolName } from './toolNames';\n\nexport interface MappedMCPTool {\n toolSet: IToolSet;\n originalToolName: string;\n}\n\nexport interface ConvertToolsResult {\n tools: ChatCompletionTool[];\n toolMapping: Map<string, MappedMCPTool>;\n}\n\nexport interface ConvertMCPServersToToolsResult {\n convertedTools: ConvertToolsResult;\n initializationInfo: MCPServerInitInfo[];\n authRequirementInfo: MCPAuthRequired[];\n}\n\nexport async function convertMCPServersToTools(params: {\n tfyManagedServers: IToolSet[];\n userServers: IToolSet[];\n}): Promise<ConvertMCPServersToToolsResult> {\n const { tfyManagedServers, userServers } = params;\n const tools: ChatCompletionTool[] = [];\n const toolMapping = new Map<string, MappedMCPTool>();\n const initializationInfo: MCPServerInitInfo[] = [];\n const authRequirementInfo: MCPAuthRequired[] = [];\n const registeredNames = new Set<string>();\n\n // Skip non-preloaded servers that have no preloaded tools, to avoid unnecessary listTools() calls and OAuth triggers.\n // Non-preloaded servers with some preloaded tools are kept so those tools can be registered.\n const filteredUserServers = userServers.filter(s => s.preload || s.hasPreloadedTools);\n\n // TFY-managed servers first so they claim their original tool names before user servers.\n const sortedTfyServers = [...tfyManagedServers].sort((a, b) => (a.name > b.name ? 1 : -1));\n const sortedUserServers = [...filteredUserServers].sort((a, b) => (a.name > b.name ? 1 : -1));\n const allServers = [...sortedTfyServers, ...sortedUserServers];\n\n const listResults = await Promise.all(\n allServers.map(async server => ({ serverName: server.name, response: await server.listTools() })),\n );\n\n for (let i = 0; i < allServers.length; i++) {\n const listResult = listResults[i];\n if (!listResult) continue;\n const { serverName, response: listResponse } = listResult;\n if (isAuthRequired(listResponse)) {\n authRequirementInfo.push(listResponse.authRequired);\n continue;\n }\n const { result: mcpTools, wasInitialized } = listResponse;\n if (wasInitialized) {\n initializationInfo.push(wasInitialized);\n }\n\n const toolSet = allServers[i];\n if (toolSet === undefined) {\n throw new Error(`Unreachable: missing tool set at index ${String(i)}`);\n }\n const sortedTools = [...mcpTools.tools].sort((a, b) => (a.name > b.name ? 1 : -1));\n for (const mcpTool of sortedTools) {\n if (!mcpTool.preload) continue;\n const { name: toolName } = getUniqueSanitizedToolName(mcpTool.name, registeredNames);\n registeredNames.add(toolName);\n const description = `mcp server: ${serverName}\\n${mcpTool.description ?? ''}`;\n tools.push({\n type: 'function',\n function: {\n name: toolName,\n description: description,\n parameters: {\n type: 'object',\n properties: mcpTool.inputSchema.properties ?? {},\n required: mcpTool.inputSchema.required ?? [],\n },\n },\n });\n\n toolMapping.set(toolName, {\n toolSet,\n originalToolName: mcpTool.name,\n });\n }\n }\n\n return { convertedTools: { tools, toolMapping }, initializationInfo, authRequirementInfo };\n}\n"],"mappings":";AAGA,SAAwB,sBAAsB;AAC9C,SAAS,kCAAkC;AAkB3C,eAAsB,yBAAyB,QAGH;AAC1C,QAAM,EAAE,mBAAmB,YAAY,IAAI;AAC3C,QAAM,QAA8B,CAAC;AACrC,QAAM,cAAc,oBAAI,IAA2B;AACnD,QAAM,qBAA0C,CAAC;AACjD,QAAM,sBAAyC,CAAC;AAChD,QAAM,kBAAkB,oBAAI,IAAY;AAIxC,QAAM,sBAAsB,YAAY,OAAO,OAAK,EAAE,WAAW,EAAE,iBAAiB;AAGpF,QAAM,mBAAmB,CAAC,GAAG,iBAAiB,EAAE,KAAK,CAAC,GAAG,MAAO,EAAE,OAAO,EAAE,OAAO,IAAI,EAAG;AACzF,QAAM,oBAAoB,CAAC,GAAG,mBAAmB,EAAE,KAAK,CAAC,GAAG,MAAO,EAAE,OAAO,EAAE,OAAO,IAAI,EAAG;AAC5F,QAAM,aAAa,CAAC,GAAG,kBAAkB,GAAG,iBAAiB;AAE7D,QAAM,cAAc,MAAM,QAAQ;AAAA,IAChC,WAAW,IAAI,OAAM,YAAW,EAAE,YAAY,OAAO,MAAM,UAAU,MAAM,OAAO,UAAU,EAAE,EAAE;AAAA,EAClG;AAEA,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,UAAM,aAAa,YAAY,CAAC;AAChC,QAAI,CAAC,WAAY;AACjB,UAAM,EAAE,YAAY,UAAU,aAAa,IAAI;AAC/C,QAAI,eAAe,YAAY,GAAG;AAChC,0BAAoB,KAAK,aAAa,YAAY;AAClD;AAAA,IACF;AACA,UAAM,EAAE,QAAQ,UAAU,eAAe,IAAI;AAC7C,QAAI,gBAAgB;AAClB,yBAAmB,KAAK,cAAc;AAAA,IACxC;AAEA,UAAM,UAAU,WAAW,CAAC;AAC5B,QAAI,YAAY,QAAW;AACzB,YAAM,IAAI,MAAM,0CAA0C,OAAO,CAAC,CAAC,EAAE;AAAA,IACvE;AACA,UAAM,cAAc,CAAC,GAAG,SAAS,KAAK,EAAE,KAAK,CAAC,GAAG,MAAO,EAAE,OAAO,EAAE,OAAO,IAAI,EAAG;AACjF,eAAW,WAAW,aAAa;AACjC,UAAI,CAAC,QAAQ,QAAS;AACtB,YAAM,EAAE,MAAM,SAAS,IAAI,2BAA2B,QAAQ,MAAM,eAAe;AACnF,sBAAgB,IAAI,QAAQ;AAC5B,YAAM,cAAc,eAAe,UAAU;AAAA,EAAK,QAAQ,eAAe,EAAE;AAC3E,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,UAAU;AAAA,UACR,MAAM;AAAA,UACN;AAAA,UACA,YAAY;AAAA,YACV,MAAM;AAAA,YACN,YAAY,QAAQ,YAAY,cAAc,CAAC;AAAA,YAC/C,UAAU,QAAQ,YAAY,YAAY,CAAC;AAAA,UAC7C;AAAA,QACF;AAAA,MACF,CAAC;AAED,kBAAY,IAAI,UAAU;AAAA,QACxB;AAAA,QACA,kBAAkB,QAAQ;AAAA,MAC5B,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO,EAAE,gBAAgB,EAAE,OAAO,YAAY,GAAG,oBAAoB,oBAAoB;AAC3F;","names":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { RegisteredPassthroughEvent } from '../events/PassthroughEvents';
|
|
2
|
+
import type { ApprovalDecision, MCPServerInitInfo } from '../events/schema';
|
|
3
|
+
import type { InternalEnrichedAssistantMessage, InternalEnrichedToolCall, LLMToolMessage } from '../llm/LLMTypes';
|
|
4
|
+
import type { MCPAuthRequired } from '../mcp/IMCPServer';
|
|
5
|
+
import type { AgentThreadCreateSubAgent } from '../runtime/AgentThread.types';
|
|
6
|
+
import type { SandboxInfo } from '../sandbox/Sandbox';
|
|
7
|
+
import type { MappedMCPTool } from './convertMCPServers';
|
|
8
|
+
export interface ToolCallResult {
|
|
9
|
+
message: LLMToolMessage;
|
|
10
|
+
info?: MappedMCPTool | undefined;
|
|
11
|
+
failure: boolean;
|
|
12
|
+
isStructuredContent: boolean;
|
|
13
|
+
completedAt: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ExecuteToolCallsResult {
|
|
16
|
+
toolCallResults: ToolCallResult[];
|
|
17
|
+
initializationInfo: MCPServerInitInfo[];
|
|
18
|
+
createThreadEvents: AgentThreadCreateSubAgent[];
|
|
19
|
+
sandboxCreated: SandboxInfo | undefined;
|
|
20
|
+
authRequirementInfo: MCPAuthRequired[];
|
|
21
|
+
approvalRequiredToolCalls: InternalEnrichedToolCall[];
|
|
22
|
+
clientSideToolCalls: InternalEnrichedToolCall[];
|
|
23
|
+
events: RegisteredPassthroughEvent[];
|
|
24
|
+
}
|
|
25
|
+
export declare function executeToolCalls({ assistantMessage, toolMapping, threadId, approvalDecisions, }: {
|
|
26
|
+
assistantMessage: InternalEnrichedAssistantMessage;
|
|
27
|
+
toolMapping: Map<string, MappedMCPTool>;
|
|
28
|
+
threadId: string;
|
|
29
|
+
approvalDecisions: Map<string, ApprovalDecision>;
|
|
30
|
+
}): Promise<ExecuteToolCallsResult>;
|
|
31
|
+
//# sourceMappingURL=executeToolCalls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executeToolCalls.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/executeToolCalls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,KAAK,EAAE,gCAAgC,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASzD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,cAAc,CAAC;IAKxB,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,kBAAkB,EAAE,yBAAyB,EAAE,CAAC;IAChD,cAAc,EAAE,WAAW,GAAG,SAAS,CAAC;IACxC,mBAAmB,EAAE,eAAe,EAAE,CAAC;IACvC,yBAAyB,EAAE,wBAAwB,EAAE,CAAC;IACtD,mBAAmB,EAAE,wBAAwB,EAAE,CAAC;IAChD,MAAM,EAAE,0BAA0B,EAAE,CAAC;CACtC;AAED,wBAAsB,gBAAgB,CAAC,EACrC,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,iBAAiB,GAClB,EAAE;IACD,gBAAgB,EAAE,gCAAgC,CAAC;IACnD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAClD,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAkJlC"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/core/mcp/executeToolCalls.ts
|
|
21
|
+
var executeToolCalls_exports = {};
|
|
22
|
+
__export(executeToolCalls_exports, {
|
|
23
|
+
executeToolCalls: () => executeToolCalls
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(executeToolCalls_exports);
|
|
26
|
+
var import_AgentThread = require("../runtime/AgentThread.types.js");
|
|
27
|
+
var import_IMCPServer = require("./IMCPServer.js");
|
|
28
|
+
async function executeToolCalls({
|
|
29
|
+
assistantMessage,
|
|
30
|
+
toolMapping,
|
|
31
|
+
threadId,
|
|
32
|
+
approvalDecisions
|
|
33
|
+
}) {
|
|
34
|
+
const toolMessages = [];
|
|
35
|
+
const initializationInfo = [];
|
|
36
|
+
const createThreadEvents = [];
|
|
37
|
+
const authRequirementInfo = [];
|
|
38
|
+
const approvalRequiredToolCalls = [];
|
|
39
|
+
const clientSideToolCalls = [];
|
|
40
|
+
const passthroughEvents = [];
|
|
41
|
+
let sandboxCreated;
|
|
42
|
+
if (!assistantMessage.tool_calls) {
|
|
43
|
+
return {
|
|
44
|
+
toolCallResults: toolMessages,
|
|
45
|
+
initializationInfo,
|
|
46
|
+
createThreadEvents,
|
|
47
|
+
sandboxCreated,
|
|
48
|
+
authRequirementInfo,
|
|
49
|
+
approvalRequiredToolCalls,
|
|
50
|
+
clientSideToolCalls,
|
|
51
|
+
events: passthroughEvents
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const toolCallPromises = assistantMessage.tool_calls.map(async (toolCall) => {
|
|
55
|
+
const toolInfo = toolMapping.get(toolCall.function.name);
|
|
56
|
+
if (!toolInfo) {
|
|
57
|
+
return {
|
|
58
|
+
toolCall,
|
|
59
|
+
toolInfo,
|
|
60
|
+
response: (0, import_IMCPServer.toolResultResponse)({ text: `Tool ${toolCall.function.name} not found in tool mapping` }),
|
|
61
|
+
failure: true,
|
|
62
|
+
completedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const args = JSON.parse(toolCall.function.arguments || "{}");
|
|
67
|
+
const response = await toolInfo.toolSet.callTool(
|
|
68
|
+
{
|
|
69
|
+
name: toolInfo.originalToolName,
|
|
70
|
+
arguments: args
|
|
71
|
+
},
|
|
72
|
+
approvalDecisions.get(toolCall.id)
|
|
73
|
+
);
|
|
74
|
+
return { toolCall, toolInfo, response, failure: false, completedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
75
|
+
} catch (error) {
|
|
76
|
+
return {
|
|
77
|
+
toolCall,
|
|
78
|
+
toolInfo,
|
|
79
|
+
response: (0, import_IMCPServer.toolResultResponse)({
|
|
80
|
+
text: JSON.stringify({ error: error instanceof Error ? error.message : "Tool execution failed" }),
|
|
81
|
+
isError: true
|
|
82
|
+
}),
|
|
83
|
+
failure: true,
|
|
84
|
+
completedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
const results = await Promise.all(toolCallPromises);
|
|
89
|
+
for (const { toolCall, toolInfo, response, failure, completedAt } of results) {
|
|
90
|
+
if ((0, import_IMCPServer.isCallToolResponseCreateSubAgent)(response)) {
|
|
91
|
+
createThreadEvents.push({
|
|
92
|
+
type: import_AgentThread.InternalEventType.AGENT_CREATE_SUBAGENT,
|
|
93
|
+
thread_id: threadId,
|
|
94
|
+
tool_call_id: toolCall.id,
|
|
95
|
+
agent_info: response.createSubAgent
|
|
96
|
+
});
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if ((0, import_IMCPServer.isAuthRequired)(response)) {
|
|
100
|
+
authRequirementInfo.push(response.authRequired);
|
|
101
|
+
toolMessages.push({
|
|
102
|
+
message: {
|
|
103
|
+
role: "tool",
|
|
104
|
+
tool_call_id: toolCall.id,
|
|
105
|
+
content: "Waiting for user to authenticate. Please try again 1 time."
|
|
106
|
+
},
|
|
107
|
+
failure: true,
|
|
108
|
+
info: toolInfo,
|
|
109
|
+
isStructuredContent: false,
|
|
110
|
+
completedAt
|
|
111
|
+
});
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if ((0, import_IMCPServer.isApprovalRequiredResponse)(response)) {
|
|
115
|
+
approvalRequiredToolCalls.push(toolCall);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if ((0, import_IMCPServer.isClientSideToolRequiredResponse)(response)) {
|
|
119
|
+
clientSideToolCalls.push(toolCall);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const { result, wasInitialized } = response;
|
|
123
|
+
let content;
|
|
124
|
+
let isStructuredContent = false;
|
|
125
|
+
if (result.isError) {
|
|
126
|
+
content = JSON.stringify({ error: result.content });
|
|
127
|
+
} else if (result.structuredContent) {
|
|
128
|
+
isStructuredContent = true;
|
|
129
|
+
content = JSON.stringify(result.structuredContent);
|
|
130
|
+
} else if (Array.isArray(result.content)) {
|
|
131
|
+
const textContent = result.content.filter((c) => c.type === "text").map((c) => c.text).join("\n");
|
|
132
|
+
content = textContent || JSON.stringify(result.content);
|
|
133
|
+
} else {
|
|
134
|
+
content = JSON.stringify(result.content);
|
|
135
|
+
}
|
|
136
|
+
toolMessages.push({
|
|
137
|
+
message: { role: "tool", tool_call_id: toolCall.id, content },
|
|
138
|
+
failure,
|
|
139
|
+
info: toolInfo,
|
|
140
|
+
isStructuredContent,
|
|
141
|
+
completedAt
|
|
142
|
+
});
|
|
143
|
+
if (wasInitialized) {
|
|
144
|
+
initializationInfo.push(wasInitialized);
|
|
145
|
+
}
|
|
146
|
+
if (response.sandboxCreated && response.sandboxInfo) {
|
|
147
|
+
sandboxCreated = response.sandboxInfo;
|
|
148
|
+
}
|
|
149
|
+
if (response.events?.length) {
|
|
150
|
+
passthroughEvents.push(...response.events);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
toolCallResults: toolMessages,
|
|
155
|
+
initializationInfo,
|
|
156
|
+
createThreadEvents,
|
|
157
|
+
sandboxCreated,
|
|
158
|
+
authRequirementInfo,
|
|
159
|
+
approvalRequiredToolCalls,
|
|
160
|
+
clientSideToolCalls,
|
|
161
|
+
events: passthroughEvents
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
165
|
+
0 && (module.exports = {
|
|
166
|
+
executeToolCalls
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=executeToolCalls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/mcp/executeToolCalls.ts"],"sourcesContent":["import type { RegisteredPassthroughEvent } from '../events/PassthroughEvents';\nimport type { ApprovalDecision, MCPServerInitInfo } from '../events/schema';\nimport type { InternalEnrichedAssistantMessage, InternalEnrichedToolCall, LLMToolMessage } from '../llm/LLMTypes';\nimport type { MCPAuthRequired } from '../mcp/IMCPServer';\nimport type { AgentThreadCreateSubAgent } from '../runtime/AgentThread.types';\nimport { InternalEventType } from '../runtime/AgentThread.types';\nimport type { SandboxInfo } from '../sandbox/Sandbox';\nimport type { MappedMCPTool } from './convertMCPServers';\nimport {\n isApprovalRequiredResponse,\n isAuthRequired,\n isCallToolResponseCreateSubAgent,\n isClientSideToolRequiredResponse,\n toolResultResponse,\n} from './IMCPServer';\n\nexport interface ToolCallResult {\n message: LLMToolMessage;\n // Absent only for unknown-tool calls (LLM hallucinated a name not in toolMapping):\n // there is no backing MCP server. Downstream consumers (e.g. LargeToolResponse)\n // gate on `failure: false` before reading `info`, so the absence is naturally\n // short-circuited on the success path.\n info?: MappedMCPTool | undefined;\n failure: boolean;\n isStructuredContent: boolean;\n completedAt: string;\n}\n\nexport interface ExecuteToolCallsResult {\n toolCallResults: ToolCallResult[];\n initializationInfo: MCPServerInitInfo[];\n createThreadEvents: AgentThreadCreateSubAgent[];\n sandboxCreated: SandboxInfo | undefined;\n authRequirementInfo: MCPAuthRequired[];\n approvalRequiredToolCalls: InternalEnrichedToolCall[];\n clientSideToolCalls: InternalEnrichedToolCall[];\n events: RegisteredPassthroughEvent[];\n}\n\nexport async function executeToolCalls({\n assistantMessage,\n toolMapping,\n threadId,\n approvalDecisions,\n}: {\n assistantMessage: InternalEnrichedAssistantMessage;\n toolMapping: Map<string, MappedMCPTool>;\n threadId: string;\n approvalDecisions: Map<string, ApprovalDecision>;\n}): Promise<ExecuteToolCallsResult> {\n const toolMessages: ToolCallResult[] = [];\n const initializationInfo: MCPServerInitInfo[] = [];\n const createThreadEvents: AgentThreadCreateSubAgent[] = [];\n const authRequirementInfo: MCPAuthRequired[] = [];\n const approvalRequiredToolCalls: InternalEnrichedToolCall[] = [];\n const clientSideToolCalls: InternalEnrichedToolCall[] = [];\n const passthroughEvents: RegisteredPassthroughEvent[] = [];\n let sandboxCreated: SandboxInfo | undefined;\n\n if (!assistantMessage.tool_calls) {\n return {\n toolCallResults: toolMessages,\n initializationInfo,\n createThreadEvents,\n sandboxCreated,\n authRequirementInfo,\n approvalRequiredToolCalls,\n clientSideToolCalls,\n events: passthroughEvents,\n };\n }\n\n const toolCallPromises = assistantMessage.tool_calls.map(async toolCall => {\n const toolInfo = toolMapping.get(toolCall.function.name);\n if (!toolInfo) {\n return {\n toolCall,\n toolInfo,\n response: toolResultResponse({ text: `Tool ${toolCall.function.name} not found in tool mapping` }),\n failure: true,\n completedAt: new Date().toISOString(),\n };\n }\n\n try {\n const args: Record<string, unknown> = JSON.parse(toolCall.function.arguments || '{}') as Record<string, unknown>;\n const response = await toolInfo.toolSet.callTool(\n {\n name: toolInfo.originalToolName,\n arguments: args,\n },\n approvalDecisions.get(toolCall.id),\n );\n return { toolCall, toolInfo, response, failure: false, completedAt: new Date().toISOString() };\n } catch (error) {\n return {\n toolCall,\n toolInfo,\n response: toolResultResponse({\n text: JSON.stringify({ error: error instanceof Error ? error.message : 'Tool execution failed' }),\n isError: true,\n }),\n failure: true,\n completedAt: new Date().toISOString(),\n };\n }\n });\n\n const results = await Promise.all(toolCallPromises);\n for (const { toolCall, toolInfo, response, failure, completedAt } of results) {\n if (isCallToolResponseCreateSubAgent(response)) {\n createThreadEvents.push({\n type: InternalEventType.AGENT_CREATE_SUBAGENT,\n thread_id: threadId,\n tool_call_id: toolCall.id,\n agent_info: response.createSubAgent,\n });\n continue;\n }\n\n if (isAuthRequired(response)) {\n authRequirementInfo.push(response.authRequired);\n // Must still emit a tool result so every tool_call in the assistant message has a\n // matching tool_result in context; otherwise the LLM API rejects the conversation.\n toolMessages.push({\n message: {\n role: 'tool',\n tool_call_id: toolCall.id,\n content: 'Waiting for user to authenticate. Please try again 1 time.',\n },\n failure: true,\n info: toolInfo,\n isStructuredContent: false,\n completedAt,\n });\n continue;\n }\n\n if (isApprovalRequiredResponse(response)) {\n approvalRequiredToolCalls.push(toolCall);\n continue;\n }\n\n if (isClientSideToolRequiredResponse(response)) {\n clientSideToolCalls.push(toolCall);\n continue;\n }\n\n const { result, wasInitialized } = response;\n\n let content: string;\n let isStructuredContent = false;\n if (result.isError) {\n content = JSON.stringify({ error: result.content });\n } else if (result.structuredContent) {\n isStructuredContent = true;\n content = JSON.stringify(result.structuredContent);\n } else if (Array.isArray(result.content)) {\n const textContent = result.content\n .filter((c): c is { type: 'text'; text: string } => c.type === 'text')\n .map(c => c.text)\n .join('\\n');\n content = textContent || JSON.stringify(result.content);\n } else {\n content = JSON.stringify(result.content);\n }\n\n toolMessages.push({\n message: { role: 'tool' as const, tool_call_id: toolCall.id, content },\n failure,\n info: toolInfo,\n isStructuredContent,\n completedAt,\n });\n if (wasInitialized) {\n initializationInfo.push(wasInitialized);\n }\n if (response.sandboxCreated && response.sandboxInfo) {\n sandboxCreated = response.sandboxInfo;\n }\n if (response.events?.length) {\n passthroughEvents.push(...response.events);\n }\n }\n\n return {\n toolCallResults: toolMessages,\n initializationInfo,\n createThreadEvents,\n sandboxCreated,\n authRequirementInfo,\n approvalRequiredToolCalls,\n clientSideToolCalls,\n events: passthroughEvents,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,yBAAkC;AAGlC,wBAMO;AAyBP,eAAsB,iBAAiB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKoC;AAClC,QAAM,eAAiC,CAAC;AACxC,QAAM,qBAA0C,CAAC;AACjD,QAAM,qBAAkD,CAAC;AACzD,QAAM,sBAAyC,CAAC;AAChD,QAAM,4BAAwD,CAAC;AAC/D,QAAM,sBAAkD,CAAC;AACzD,QAAM,oBAAkD,CAAC;AACzD,MAAI;AAEJ,MAAI,CAAC,iBAAiB,YAAY;AAChC,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,mBAAmB,iBAAiB,WAAW,IAAI,OAAM,aAAY;AACzE,UAAM,WAAW,YAAY,IAAI,SAAS,SAAS,IAAI;AACvD,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,cAAU,sCAAmB,EAAE,MAAM,QAAQ,SAAS,SAAS,IAAI,6BAA6B,CAAC;AAAA,QACjG,SAAS;AAAA,QACT,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,MACtC;AAAA,IACF;AAEA,QAAI;AACF,YAAM,OAAgC,KAAK,MAAM,SAAS,SAAS,aAAa,IAAI;AACpF,YAAM,WAAW,MAAM,SAAS,QAAQ;AAAA,QACtC;AAAA,UACE,MAAM,SAAS;AAAA,UACf,WAAW;AAAA,QACb;AAAA,QACA,kBAAkB,IAAI,SAAS,EAAE;AAAA,MACnC;AACA,aAAO,EAAE,UAAU,UAAU,UAAU,SAAS,OAAO,cAAa,oBAAI,KAAK,GAAE,YAAY,EAAE;AAAA,IAC/F,SAAS,OAAO;AACd,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,cAAU,sCAAmB;AAAA,UAC3B,MAAM,KAAK,UAAU,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,wBAAwB,CAAC;AAAA,UAChG,SAAS;AAAA,QACX,CAAC;AAAA,QACD,SAAS;AAAA,QACT,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,MACtC;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,UAAU,MAAM,QAAQ,IAAI,gBAAgB;AAClD,aAAW,EAAE,UAAU,UAAU,UAAU,SAAS,YAAY,KAAK,SAAS;AAC5E,YAAI,oDAAiC,QAAQ,GAAG;AAC9C,yBAAmB,KAAK;AAAA,QACtB,MAAM,qCAAkB;AAAA,QACxB,WAAW;AAAA,QACX,cAAc,SAAS;AAAA,QACvB,YAAY,SAAS;AAAA,MACvB,CAAC;AACD;AAAA,IACF;AAEA,YAAI,kCAAe,QAAQ,GAAG;AAC5B,0BAAoB,KAAK,SAAS,YAAY;AAG9C,mBAAa,KAAK;AAAA,QAChB,SAAS;AAAA,UACP,MAAM;AAAA,UACN,cAAc,SAAS;AAAA,UACvB,SAAS;AAAA,QACX;AAAA,QACA,SAAS;AAAA,QACT,MAAM;AAAA,QACN,qBAAqB;AAAA,QACrB;AAAA,MACF,CAAC;AACD;AAAA,IACF;AAEA,YAAI,8CAA2B,QAAQ,GAAG;AACxC,gCAA0B,KAAK,QAAQ;AACvC;AAAA,IACF;AAEA,YAAI,oDAAiC,QAAQ,GAAG;AAC9C,0BAAoB,KAAK,QAAQ;AACjC;AAAA,IACF;AAEA,UAAM,EAAE,QAAQ,eAAe,IAAI;AAEnC,QAAI;AACJ,QAAI,sBAAsB;AAC1B,QAAI,OAAO,SAAS;AAClB,gBAAU,KAAK,UAAU,EAAE,OAAO,OAAO,QAAQ,CAAC;AAAA,IACpD,WAAW,OAAO,mBAAmB;AACnC,4BAAsB;AACtB,gBAAU,KAAK,UAAU,OAAO,iBAAiB;AAAA,IACnD,WAAW,MAAM,QAAQ,OAAO,OAAO,GAAG;AACxC,YAAM,cAAc,OAAO,QACxB,OAAO,CAAC,MAA2C,EAAE,SAAS,MAAM,EACpE,IAAI,OAAK,EAAE,IAAI,EACf,KAAK,IAAI;AACZ,gBAAU,eAAe,KAAK,UAAU,OAAO,OAAO;AAAA,IACxD,OAAO;AACL,gBAAU,KAAK,UAAU,OAAO,OAAO;AAAA,IACzC;AAEA,iBAAa,KAAK;AAAA,MAChB,SAAS,EAAE,MAAM,QAAiB,cAAc,SAAS,IAAI,QAAQ;AAAA,MACrE;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,CAAC;AACD,QAAI,gBAAgB;AAClB,yBAAmB,KAAK,cAAc;AAAA,IACxC;AACA,QAAI,SAAS,kBAAkB,SAAS,aAAa;AACnD,uBAAiB,SAAS;AAAA,IAC5B;AACA,QAAI,SAAS,QAAQ,QAAQ;AAC3B,wBAAkB,KAAK,GAAG,SAAS,MAAM;AAAA,IAC3C;AAAA,EACF;AAEA,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV;AACF;","names":[]}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// src/core/mcp/executeToolCalls.ts
|
|
2
|
+
import { InternalEventType } from "../runtime/AgentThread.types.mjs";
|
|
3
|
+
import {
|
|
4
|
+
isApprovalRequiredResponse,
|
|
5
|
+
isAuthRequired,
|
|
6
|
+
isCallToolResponseCreateSubAgent,
|
|
7
|
+
isClientSideToolRequiredResponse,
|
|
8
|
+
toolResultResponse
|
|
9
|
+
} from "./IMCPServer.mjs";
|
|
10
|
+
async function executeToolCalls({
|
|
11
|
+
assistantMessage,
|
|
12
|
+
toolMapping,
|
|
13
|
+
threadId,
|
|
14
|
+
approvalDecisions
|
|
15
|
+
}) {
|
|
16
|
+
const toolMessages = [];
|
|
17
|
+
const initializationInfo = [];
|
|
18
|
+
const createThreadEvents = [];
|
|
19
|
+
const authRequirementInfo = [];
|
|
20
|
+
const approvalRequiredToolCalls = [];
|
|
21
|
+
const clientSideToolCalls = [];
|
|
22
|
+
const passthroughEvents = [];
|
|
23
|
+
let sandboxCreated;
|
|
24
|
+
if (!assistantMessage.tool_calls) {
|
|
25
|
+
return {
|
|
26
|
+
toolCallResults: toolMessages,
|
|
27
|
+
initializationInfo,
|
|
28
|
+
createThreadEvents,
|
|
29
|
+
sandboxCreated,
|
|
30
|
+
authRequirementInfo,
|
|
31
|
+
approvalRequiredToolCalls,
|
|
32
|
+
clientSideToolCalls,
|
|
33
|
+
events: passthroughEvents
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const toolCallPromises = assistantMessage.tool_calls.map(async (toolCall) => {
|
|
37
|
+
const toolInfo = toolMapping.get(toolCall.function.name);
|
|
38
|
+
if (!toolInfo) {
|
|
39
|
+
return {
|
|
40
|
+
toolCall,
|
|
41
|
+
toolInfo,
|
|
42
|
+
response: toolResultResponse({ text: `Tool ${toolCall.function.name} not found in tool mapping` }),
|
|
43
|
+
failure: true,
|
|
44
|
+
completedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const args = JSON.parse(toolCall.function.arguments || "{}");
|
|
49
|
+
const response = await toolInfo.toolSet.callTool(
|
|
50
|
+
{
|
|
51
|
+
name: toolInfo.originalToolName,
|
|
52
|
+
arguments: args
|
|
53
|
+
},
|
|
54
|
+
approvalDecisions.get(toolCall.id)
|
|
55
|
+
);
|
|
56
|
+
return { toolCall, toolInfo, response, failure: false, completedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
57
|
+
} catch (error) {
|
|
58
|
+
return {
|
|
59
|
+
toolCall,
|
|
60
|
+
toolInfo,
|
|
61
|
+
response: toolResultResponse({
|
|
62
|
+
text: JSON.stringify({ error: error instanceof Error ? error.message : "Tool execution failed" }),
|
|
63
|
+
isError: true
|
|
64
|
+
}),
|
|
65
|
+
failure: true,
|
|
66
|
+
completedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
const results = await Promise.all(toolCallPromises);
|
|
71
|
+
for (const { toolCall, toolInfo, response, failure, completedAt } of results) {
|
|
72
|
+
if (isCallToolResponseCreateSubAgent(response)) {
|
|
73
|
+
createThreadEvents.push({
|
|
74
|
+
type: InternalEventType.AGENT_CREATE_SUBAGENT,
|
|
75
|
+
thread_id: threadId,
|
|
76
|
+
tool_call_id: toolCall.id,
|
|
77
|
+
agent_info: response.createSubAgent
|
|
78
|
+
});
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (isAuthRequired(response)) {
|
|
82
|
+
authRequirementInfo.push(response.authRequired);
|
|
83
|
+
toolMessages.push({
|
|
84
|
+
message: {
|
|
85
|
+
role: "tool",
|
|
86
|
+
tool_call_id: toolCall.id,
|
|
87
|
+
content: "Waiting for user to authenticate. Please try again 1 time."
|
|
88
|
+
},
|
|
89
|
+
failure: true,
|
|
90
|
+
info: toolInfo,
|
|
91
|
+
isStructuredContent: false,
|
|
92
|
+
completedAt
|
|
93
|
+
});
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (isApprovalRequiredResponse(response)) {
|
|
97
|
+
approvalRequiredToolCalls.push(toolCall);
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (isClientSideToolRequiredResponse(response)) {
|
|
101
|
+
clientSideToolCalls.push(toolCall);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const { result, wasInitialized } = response;
|
|
105
|
+
let content;
|
|
106
|
+
let isStructuredContent = false;
|
|
107
|
+
if (result.isError) {
|
|
108
|
+
content = JSON.stringify({ error: result.content });
|
|
109
|
+
} else if (result.structuredContent) {
|
|
110
|
+
isStructuredContent = true;
|
|
111
|
+
content = JSON.stringify(result.structuredContent);
|
|
112
|
+
} else if (Array.isArray(result.content)) {
|
|
113
|
+
const textContent = result.content.filter((c) => c.type === "text").map((c) => c.text).join("\n");
|
|
114
|
+
content = textContent || JSON.stringify(result.content);
|
|
115
|
+
} else {
|
|
116
|
+
content = JSON.stringify(result.content);
|
|
117
|
+
}
|
|
118
|
+
toolMessages.push({
|
|
119
|
+
message: { role: "tool", tool_call_id: toolCall.id, content },
|
|
120
|
+
failure,
|
|
121
|
+
info: toolInfo,
|
|
122
|
+
isStructuredContent,
|
|
123
|
+
completedAt
|
|
124
|
+
});
|
|
125
|
+
if (wasInitialized) {
|
|
126
|
+
initializationInfo.push(wasInitialized);
|
|
127
|
+
}
|
|
128
|
+
if (response.sandboxCreated && response.sandboxInfo) {
|
|
129
|
+
sandboxCreated = response.sandboxInfo;
|
|
130
|
+
}
|
|
131
|
+
if (response.events?.length) {
|
|
132
|
+
passthroughEvents.push(...response.events);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
toolCallResults: toolMessages,
|
|
137
|
+
initializationInfo,
|
|
138
|
+
createThreadEvents,
|
|
139
|
+
sandboxCreated,
|
|
140
|
+
authRequirementInfo,
|
|
141
|
+
approvalRequiredToolCalls,
|
|
142
|
+
clientSideToolCalls,
|
|
143
|
+
events: passthroughEvents
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export {
|
|
147
|
+
executeToolCalls
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=executeToolCalls.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/mcp/executeToolCalls.ts"],"sourcesContent":["import type { RegisteredPassthroughEvent } from '../events/PassthroughEvents';\nimport type { ApprovalDecision, MCPServerInitInfo } from '../events/schema';\nimport type { InternalEnrichedAssistantMessage, InternalEnrichedToolCall, LLMToolMessage } from '../llm/LLMTypes';\nimport type { MCPAuthRequired } from '../mcp/IMCPServer';\nimport type { AgentThreadCreateSubAgent } from '../runtime/AgentThread.types';\nimport { InternalEventType } from '../runtime/AgentThread.types';\nimport type { SandboxInfo } from '../sandbox/Sandbox';\nimport type { MappedMCPTool } from './convertMCPServers';\nimport {\n isApprovalRequiredResponse,\n isAuthRequired,\n isCallToolResponseCreateSubAgent,\n isClientSideToolRequiredResponse,\n toolResultResponse,\n} from './IMCPServer';\n\nexport interface ToolCallResult {\n message: LLMToolMessage;\n // Absent only for unknown-tool calls (LLM hallucinated a name not in toolMapping):\n // there is no backing MCP server. Downstream consumers (e.g. LargeToolResponse)\n // gate on `failure: false` before reading `info`, so the absence is naturally\n // short-circuited on the success path.\n info?: MappedMCPTool | undefined;\n failure: boolean;\n isStructuredContent: boolean;\n completedAt: string;\n}\n\nexport interface ExecuteToolCallsResult {\n toolCallResults: ToolCallResult[];\n initializationInfo: MCPServerInitInfo[];\n createThreadEvents: AgentThreadCreateSubAgent[];\n sandboxCreated: SandboxInfo | undefined;\n authRequirementInfo: MCPAuthRequired[];\n approvalRequiredToolCalls: InternalEnrichedToolCall[];\n clientSideToolCalls: InternalEnrichedToolCall[];\n events: RegisteredPassthroughEvent[];\n}\n\nexport async function executeToolCalls({\n assistantMessage,\n toolMapping,\n threadId,\n approvalDecisions,\n}: {\n assistantMessage: InternalEnrichedAssistantMessage;\n toolMapping: Map<string, MappedMCPTool>;\n threadId: string;\n approvalDecisions: Map<string, ApprovalDecision>;\n}): Promise<ExecuteToolCallsResult> {\n const toolMessages: ToolCallResult[] = [];\n const initializationInfo: MCPServerInitInfo[] = [];\n const createThreadEvents: AgentThreadCreateSubAgent[] = [];\n const authRequirementInfo: MCPAuthRequired[] = [];\n const approvalRequiredToolCalls: InternalEnrichedToolCall[] = [];\n const clientSideToolCalls: InternalEnrichedToolCall[] = [];\n const passthroughEvents: RegisteredPassthroughEvent[] = [];\n let sandboxCreated: SandboxInfo | undefined;\n\n if (!assistantMessage.tool_calls) {\n return {\n toolCallResults: toolMessages,\n initializationInfo,\n createThreadEvents,\n sandboxCreated,\n authRequirementInfo,\n approvalRequiredToolCalls,\n clientSideToolCalls,\n events: passthroughEvents,\n };\n }\n\n const toolCallPromises = assistantMessage.tool_calls.map(async toolCall => {\n const toolInfo = toolMapping.get(toolCall.function.name);\n if (!toolInfo) {\n return {\n toolCall,\n toolInfo,\n response: toolResultResponse({ text: `Tool ${toolCall.function.name} not found in tool mapping` }),\n failure: true,\n completedAt: new Date().toISOString(),\n };\n }\n\n try {\n const args: Record<string, unknown> = JSON.parse(toolCall.function.arguments || '{}') as Record<string, unknown>;\n const response = await toolInfo.toolSet.callTool(\n {\n name: toolInfo.originalToolName,\n arguments: args,\n },\n approvalDecisions.get(toolCall.id),\n );\n return { toolCall, toolInfo, response, failure: false, completedAt: new Date().toISOString() };\n } catch (error) {\n return {\n toolCall,\n toolInfo,\n response: toolResultResponse({\n text: JSON.stringify({ error: error instanceof Error ? error.message : 'Tool execution failed' }),\n isError: true,\n }),\n failure: true,\n completedAt: new Date().toISOString(),\n };\n }\n });\n\n const results = await Promise.all(toolCallPromises);\n for (const { toolCall, toolInfo, response, failure, completedAt } of results) {\n if (isCallToolResponseCreateSubAgent(response)) {\n createThreadEvents.push({\n type: InternalEventType.AGENT_CREATE_SUBAGENT,\n thread_id: threadId,\n tool_call_id: toolCall.id,\n agent_info: response.createSubAgent,\n });\n continue;\n }\n\n if (isAuthRequired(response)) {\n authRequirementInfo.push(response.authRequired);\n // Must still emit a tool result so every tool_call in the assistant message has a\n // matching tool_result in context; otherwise the LLM API rejects the conversation.\n toolMessages.push({\n message: {\n role: 'tool',\n tool_call_id: toolCall.id,\n content: 'Waiting for user to authenticate. Please try again 1 time.',\n },\n failure: true,\n info: toolInfo,\n isStructuredContent: false,\n completedAt,\n });\n continue;\n }\n\n if (isApprovalRequiredResponse(response)) {\n approvalRequiredToolCalls.push(toolCall);\n continue;\n }\n\n if (isClientSideToolRequiredResponse(response)) {\n clientSideToolCalls.push(toolCall);\n continue;\n }\n\n const { result, wasInitialized } = response;\n\n let content: string;\n let isStructuredContent = false;\n if (result.isError) {\n content = JSON.stringify({ error: result.content });\n } else if (result.structuredContent) {\n isStructuredContent = true;\n content = JSON.stringify(result.structuredContent);\n } else if (Array.isArray(result.content)) {\n const textContent = result.content\n .filter((c): c is { type: 'text'; text: string } => c.type === 'text')\n .map(c => c.text)\n .join('\\n');\n content = textContent || JSON.stringify(result.content);\n } else {\n content = JSON.stringify(result.content);\n }\n\n toolMessages.push({\n message: { role: 'tool' as const, tool_call_id: toolCall.id, content },\n failure,\n info: toolInfo,\n isStructuredContent,\n completedAt,\n });\n if (wasInitialized) {\n initializationInfo.push(wasInitialized);\n }\n if (response.sandboxCreated && response.sandboxInfo) {\n sandboxCreated = response.sandboxInfo;\n }\n if (response.events?.length) {\n passthroughEvents.push(...response.events);\n }\n }\n\n return {\n toolCallResults: toolMessages,\n initializationInfo,\n createThreadEvents,\n sandboxCreated,\n authRequirementInfo,\n approvalRequiredToolCalls,\n clientSideToolCalls,\n events: passthroughEvents,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Logger } from 'winston';
|
|
2
|
+
/**
|
|
3
|
+
* Walk an MCP cursor-paginated list to completion, guarding against servers that return a
|
|
4
|
+
* previously seen cursor (which would otherwise loop forever). If a repeated cursor is seen the
|
|
5
|
+
* loop stops and (when a logger is supplied) a warning is emitted naming the server.
|
|
6
|
+
*/
|
|
7
|
+
export declare function paginateWithCursorGuard<T>(fetchNext: (cursor: string | undefined) => Promise<{
|
|
8
|
+
items: T[];
|
|
9
|
+
nextCursor?: string | undefined;
|
|
10
|
+
}>, serverIdentifier: string | undefined, logger?: Logger): Promise<T[]>;
|
|
11
|
+
//# sourceMappingURL=pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAC7C,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,EACnG,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,EAAE,CAAC,CAsBd"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/core/mcp/pagination.ts
|
|
21
|
+
var pagination_exports = {};
|
|
22
|
+
__export(pagination_exports, {
|
|
23
|
+
paginateWithCursorGuard: () => paginateWithCursorGuard
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(pagination_exports);
|
|
26
|
+
async function paginateWithCursorGuard(fetchNext, serverIdentifier, logger) {
|
|
27
|
+
const allItems = [];
|
|
28
|
+
const seenCursors = /* @__PURE__ */ new Set();
|
|
29
|
+
const serverName = serverIdentifier ?? "unknown";
|
|
30
|
+
const firstResult = await fetchNext(void 0);
|
|
31
|
+
allItems.push(...firstResult.items);
|
|
32
|
+
let cursor = firstResult.nextCursor;
|
|
33
|
+
while (cursor) {
|
|
34
|
+
if (seenCursors.has(cursor)) {
|
|
35
|
+
logger?.warn(`Detected repeated cursor "${cursor}" from server ${serverName}. Breaking pagination loop.`);
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
seenCursors.add(cursor);
|
|
39
|
+
const result = await fetchNext(cursor);
|
|
40
|
+
allItems.push(...result.items);
|
|
41
|
+
cursor = result.nextCursor;
|
|
42
|
+
}
|
|
43
|
+
return allItems;
|
|
44
|
+
}
|
|
45
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
46
|
+
0 && (module.exports = {
|
|
47
|
+
paginateWithCursorGuard
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/mcp/pagination.ts"],"sourcesContent":["import type { Logger } from 'winston';\n\n/**\n * Walk an MCP cursor-paginated list to completion, guarding against servers that return a\n * previously seen cursor (which would otherwise loop forever). If a repeated cursor is seen the\n * loop stops and (when a logger is supplied) a warning is emitted naming the server.\n */\nexport async function paginateWithCursorGuard<T>(\n fetchNext: (cursor: string | undefined) => Promise<{ items: T[]; nextCursor?: string | undefined }>,\n serverIdentifier: string | undefined,\n logger?: Logger,\n): Promise<T[]> {\n const allItems: T[] = [];\n const seenCursors = new Set<string>();\n const serverName = serverIdentifier ?? 'unknown';\n\n const firstResult = await fetchNext(undefined);\n allItems.push(...firstResult.items);\n let cursor = firstResult.nextCursor;\n\n while (cursor) {\n if (seenCursors.has(cursor)) {\n logger?.warn(`Detected repeated cursor \"${cursor}\" from server ${serverName}. Breaking pagination loop.`);\n break;\n }\n seenCursors.add(cursor);\n\n const result = await fetchNext(cursor);\n allItems.push(...result.items);\n cursor = result.nextCursor;\n }\n\n return allItems;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,eAAsB,wBACpB,WACA,kBACA,QACc;AACd,QAAM,WAAgB,CAAC;AACvB,QAAM,cAAc,oBAAI,IAAY;AACpC,QAAM,aAAa,oBAAoB;AAEvC,QAAM,cAAc,MAAM,UAAU,MAAS;AAC7C,WAAS,KAAK,GAAG,YAAY,KAAK;AAClC,MAAI,SAAS,YAAY;AAEzB,SAAO,QAAQ;AACb,QAAI,YAAY,IAAI,MAAM,GAAG;AAC3B,cAAQ,KAAK,6BAA6B,MAAM,iBAAiB,UAAU,6BAA6B;AACxG;AAAA,IACF;AACA,gBAAY,IAAI,MAAM;AAEtB,UAAM,SAAS,MAAM,UAAU,MAAM;AACrC,aAAS,KAAK,GAAG,OAAO,KAAK;AAC7B,aAAS,OAAO;AAAA,EAClB;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// src/core/mcp/pagination.ts
|
|
2
|
+
async function paginateWithCursorGuard(fetchNext, serverIdentifier, logger) {
|
|
3
|
+
const allItems = [];
|
|
4
|
+
const seenCursors = /* @__PURE__ */ new Set();
|
|
5
|
+
const serverName = serverIdentifier ?? "unknown";
|
|
6
|
+
const firstResult = await fetchNext(void 0);
|
|
7
|
+
allItems.push(...firstResult.items);
|
|
8
|
+
let cursor = firstResult.nextCursor;
|
|
9
|
+
while (cursor) {
|
|
10
|
+
if (seenCursors.has(cursor)) {
|
|
11
|
+
logger?.warn(`Detected repeated cursor "${cursor}" from server ${serverName}. Breaking pagination loop.`);
|
|
12
|
+
break;
|
|
13
|
+
}
|
|
14
|
+
seenCursors.add(cursor);
|
|
15
|
+
const result = await fetchNext(cursor);
|
|
16
|
+
allItems.push(...result.items);
|
|
17
|
+
cursor = result.nextCursor;
|
|
18
|
+
}
|
|
19
|
+
return allItems;
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
paginateWithCursorGuard
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=pagination.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/mcp/pagination.ts"],"sourcesContent":["import type { Logger } from 'winston';\n\n/**\n * Walk an MCP cursor-paginated list to completion, guarding against servers that return a\n * previously seen cursor (which would otherwise loop forever). If a repeated cursor is seen the\n * loop stops and (when a logger is supplied) a warning is emitted naming the server.\n */\nexport async function paginateWithCursorGuard<T>(\n fetchNext: (cursor: string | undefined) => Promise<{ items: T[]; nextCursor?: string | undefined }>,\n serverIdentifier: string | undefined,\n logger?: Logger,\n): Promise<T[]> {\n const allItems: T[] = [];\n const seenCursors = new Set<string>();\n const serverName = serverIdentifier ?? 'unknown';\n\n const firstResult = await fetchNext(undefined);\n allItems.push(...firstResult.items);\n let cursor = firstResult.nextCursor;\n\n while (cursor) {\n if (seenCursors.has(cursor)) {\n logger?.warn(`Detected repeated cursor \"${cursor}\" from server ${serverName}. Breaking pagination loop.`);\n break;\n }\n seenCursors.add(cursor);\n\n const result = await fetchNext(cursor);\n allItems.push(...result.items);\n cursor = result.nextCursor;\n }\n\n return allItems;\n}\n"],"mappings":";AAOA,eAAsB,wBACpB,WACA,kBACA,QACc;AACd,QAAM,WAAgB,CAAC;AACvB,QAAM,cAAc,oBAAI,IAAY;AACpC,QAAM,aAAa,oBAAoB;AAEvC,QAAM,cAAc,MAAM,UAAU,MAAS;AAC7C,WAAS,KAAK,GAAG,YAAY,KAAK;AAClC,MAAI,SAAS,YAAY;AAEzB,SAAO,QAAQ;AACb,QAAI,YAAY,IAAI,MAAM,GAAG;AAC3B,cAAQ,KAAK,6BAA6B,MAAM,iBAAiB,UAAU,6BAA6B;AACxG;AAAA,IACF;AACA,gBAAY,IAAI,MAAM;AAEtB,UAAM,SAAS,MAAM,UAAU,MAAM;AACrC,aAAS,KAAK,GAAG,OAAO,KAAK;AAC7B,aAAS,OAAO;AAAA,EAClB;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { CallToolRequest, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type { ToolSchema } from './IMCPServer';
|
|
3
|
+
/** Networking for remote (url-based) MCP servers, kept separate so it can be mocked in tests. */
|
|
4
|
+
export type RemoteMcpTransportType = 'streamable-http' | 'sse';
|
|
5
|
+
export interface RemoteMcpConnection {
|
|
6
|
+
readonly transportType: RemoteMcpTransportType;
|
|
7
|
+
/** Session id for a stateful server, or null for a stateless one. */
|
|
8
|
+
readonly sessionId: string | null;
|
|
9
|
+
listTools(cursor?: string): Promise<{
|
|
10
|
+
tools: ToolSchema[];
|
|
11
|
+
nextCursor?: string | undefined;
|
|
12
|
+
}>;
|
|
13
|
+
callTool(params: CallToolRequest['params']): Promise<CallToolResult>;
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare function isSessionExpiredError(error: unknown): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Connect to a remote MCP server, keeping the first transport that connects. `sessionId` is passed to
|
|
19
|
+
* every attempt so a stateful session resumes in place instead of opening a throwaway one.
|
|
20
|
+
*
|
|
21
|
+
* `knownTransportType` is a hint (from a prior connect / persisted state): it's tried first for a fast
|
|
22
|
+
* path, but on failure we still fall back to probing the remaining transports, so a stale or wrong
|
|
23
|
+
* hint (server switched transports, bad resume data) self-heals instead of failing every turn.
|
|
24
|
+
*/
|
|
25
|
+
export declare function connectRemoteMcp(params: {
|
|
26
|
+
url: string;
|
|
27
|
+
headers: Record<string, string>;
|
|
28
|
+
sessionId?: string | undefined;
|
|
29
|
+
knownTransportType?: RemoteMcpTransportType | undefined;
|
|
30
|
+
requestTimeoutMs: number;
|
|
31
|
+
connectTimeoutMs: number;
|
|
32
|
+
signal: AbortSignal;
|
|
33
|
+
onClose?: (() => void) | undefined;
|
|
34
|
+
onError?: ((error: Error) => void) | undefined;
|
|
35
|
+
}): Promise<RemoteMcpConnection>;
|
|
36
|
+
//# sourceMappingURL=remoteMcpClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteMcpClient.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/remoteMcpClient.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAI1F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,iGAAiG;AAEjG,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,GAAG,KAAK,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,sBAAsB,CAAC;IAC/C,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IAC9F,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAoCD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI7D;AA0DD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kBAAkB,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACxD,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAChD,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwC/B"}
|