@slopus/rig 0.0.3 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +144 -1
- package/dist/agent/Agent.d.ts +16 -0
- package/dist/agent/Agent.d.ts.map +1 -1
- package/dist/agent/Agent.js +106 -0
- package/dist/agent/compaction/compactConversation.d.ts +22 -0
- package/dist/agent/compaction/compactConversation.d.ts.map +1 -0
- package/dist/agent/compaction/compactConversation.js +77 -0
- package/dist/agent/compaction/estimateMessagesTokens.d.ts +3 -0
- package/dist/agent/compaction/estimateMessagesTokens.d.ts.map +1 -0
- package/dist/agent/compaction/estimateMessagesTokens.js +39 -0
- package/dist/agent/compaction/formatMessagesForCompaction.d.ts +3 -0
- package/dist/agent/compaction/formatMessagesForCompaction.d.ts.map +1 -0
- package/dist/agent/compaction/formatMessagesForCompaction.js +30 -0
- package/dist/agent/compaction/requestCompactionSummary.d.ts +11 -0
- package/dist/agent/compaction/requestCompactionSummary.d.ts.map +1 -0
- package/dist/agent/compaction/requestCompactionSummary.js +43 -0
- package/dist/agent/context/AgentContext.d.ts +8 -0
- package/dist/agent/context/AgentContext.d.ts.map +1 -1
- package/dist/agent/context/BashContext.d.ts +23 -0
- package/dist/agent/context/BashContext.d.ts.map +1 -1
- package/dist/agent/context/GoalContext.d.ts +7 -0
- package/dist/agent/context/GoalContext.d.ts.map +1 -0
- package/dist/agent/context/GoalContext.js +1 -0
- package/dist/agent/context/SubagentContext.d.ts +20 -1
- package/dist/agent/context/SubagentContext.d.ts.map +1 -1
- package/dist/agent/context/TaskContext.d.ts +8 -0
- package/dist/agent/context/TaskContext.d.ts.map +1 -0
- package/dist/agent/context/TaskContext.js +1 -0
- package/dist/agent/context/UserInputContext.d.ts +7 -0
- package/dist/agent/context/UserInputContext.d.ts.map +1 -0
- package/dist/agent/context/UserInputContext.js +1 -0
- package/dist/agent/context/assertCanWritePath.d.ts +3 -0
- package/dist/agent/context/assertCanWritePath.d.ts.map +1 -0
- package/dist/agent/context/assertCanWritePath.js +11 -0
- package/dist/agent/context/createJustBashBashContext.d.ts.map +1 -1
- package/dist/agent/context/createJustBashBashContext.js +127 -0
- package/dist/agent/context/createNodeAgentContext.d.ts +8 -0
- package/dist/agent/context/createNodeAgentContext.d.ts.map +1 -1
- package/dist/agent/context/createNodeAgentContext.js +15 -2
- package/dist/agent/context/createNodeBashContext.d.ts +2 -0
- package/dist/agent/context/createNodeBashContext.d.ts.map +1 -1
- package/dist/agent/context/createNodeBashContext.js +123 -4
- package/dist/agent/context/createNodeFileSystemContext.d.ts +2 -0
- package/dist/agent/context/createNodeFileSystemContext.d.ts.map +1 -1
- package/dist/agent/context/createNodeFileSystemContext.js +18 -8
- package/dist/agent/context/createSandboxedCommand.d.ts +7 -0
- package/dist/agent/context/createSandboxedCommand.d.ts.map +1 -0
- package/dist/agent/context/createSandboxedCommand.js +47 -0
- package/dist/agent/context/findGitWritablePaths.d.ts +2 -0
- package/dist/agent/context/findGitWritablePaths.d.ts.map +1 -0
- package/dist/agent/context/findGitWritablePaths.js +54 -0
- package/dist/agent/context/isPathInsideWorkspace.d.ts +2 -0
- package/dist/agent/context/isPathInsideWorkspace.d.ts.map +1 -0
- package/dist/agent/context/isPathInsideWorkspace.js +14 -0
- package/dist/agent/context/resolvePotentialPath.d.ts +2 -0
- package/dist/agent/context/resolvePotentialPath.d.ts.map +1 -0
- package/dist/agent/context/resolvePotentialPath.js +32 -0
- package/dist/agent/createPermissionInstructions.d.ts +3 -0
- package/dist/agent/createPermissionInstructions.d.ts.map +1 -0
- package/dist/agent/createPermissionInstructions.js +12 -0
- package/dist/agent/createSubagentInstructions.js +1 -1
- package/dist/agent/createSystemPrompt.d.ts.map +1 -1
- package/dist/agent/createSystemPrompt.js +4 -0
- package/dist/agent/index.d.ts +7 -3
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/loop.d.ts +16 -2
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +115 -15
- package/dist/agent/printAgentMessageToConsole.d.ts +1 -0
- package/dist/agent/printAgentMessageToConsole.d.ts.map +1 -1
- package/dist/agent/selectSystemPromptForModel.js +1 -1
- package/dist/agent/types.d.ts +1 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/app/CodingAssistantAgentBackend.d.ts +11 -1
- package/dist/app/CodingAssistantAgentBackend.d.ts.map +1 -1
- package/dist/app/CodingAssistantApp.d.ts +7 -1
- package/dist/app/CodingAssistantApp.d.ts.map +1 -1
- package/dist/app/CodingAssistantApp.js +678 -45
- package/dist/app/ScrollbackPreservingTerminal.d.ts +5 -0
- package/dist/app/ScrollbackPreservingTerminal.d.ts.map +1 -0
- package/dist/app/ScrollbackPreservingTerminal.js +7 -0
- package/dist/app/StartupStatusApp.js +1 -1
- package/dist/app/createCodingAssistantAgent.d.ts +6 -1
- package/dist/app/createCodingAssistantAgent.d.ts.map +1 -1
- package/dist/app/createCodingAssistantAgent.js +24 -7
- package/dist/app/createSlashCommands.d.ts.map +1 -1
- package/dist/app/createSlashCommands.js +42 -0
- package/dist/app/describeReasoningLevel.d.ts.map +1 -1
- package/dist/app/describeReasoningLevel.js +1 -0
- package/dist/app/highlightAgentCode.d.ts.map +1 -1
- package/dist/app/highlightAgentCode.js +10 -7
- package/dist/app/humanizeGoalStatus.d.ts +3 -0
- package/dist/app/humanizeGoalStatus.d.ts.map +1 -0
- package/dist/app/humanizeGoalStatus.js +9 -0
- package/dist/app/humanizePermissionMode.d.ts +3 -0
- package/dist/app/humanizePermissionMode.d.ts.map +1 -0
- package/dist/app/humanizePermissionMode.js +9 -0
- package/dist/app/humanizeReasoningLevel.d.ts.map +1 -1
- package/dist/app/humanizeReasoningLevel.js +3 -0
- package/dist/app/humanizeToolName.d.ts +2 -0
- package/dist/app/humanizeToolName.d.ts.map +1 -0
- package/dist/app/humanizeToolName.js +40 -0
- package/dist/app/main.d.ts.map +1 -1
- package/dist/app/main.js +4 -0
- package/dist/app/renderAgentMarkdown.d.ts.map +1 -1
- package/dist/app/renderAgentMarkdown.js +2 -1
- package/dist/app/runApp.d.ts +2 -0
- package/dist/app/runApp.d.ts.map +1 -1
- package/dist/app/runApp.js +48 -3
- package/dist/app/sanitizeTerminalText.d.ts +2 -0
- package/dist/app/sanitizeTerminalText.d.ts.map +1 -0
- package/dist/app/sanitizeTerminalText.js +55 -0
- package/dist/app/upsertSubagentSummary.d.ts +3 -0
- package/dist/app/upsertSubagentSummary.d.ts.map +1 -0
- package/dist/app/upsertSubagentSummary.js +6 -0
- package/dist/client/ProtocolHttpClient.d.ts +12 -1
- package/dist/client/ProtocolHttpClient.d.ts.map +1 -1
- package/dist/client/ProtocolHttpClient.js +21 -0
- package/dist/client/RemoteAgent.d.ts +11 -1
- package/dist/client/RemoteAgent.d.ts.map +1 -1
- package/dist/client/RemoteAgent.js +91 -1
- package/dist/config/createConfigFile.d.ts.map +1 -1
- package/dist/config/createConfigFile.js +5 -0
- package/dist/config/defaultConfig.d.ts.map +1 -1
- package/dist/config/defaultConfig.js +2 -0
- package/dist/config/mergeConfigValues.d.ts.map +1 -1
- package/dist/config/mergeConfigValues.js +8 -1
- package/dist/config/parseConfigToml.d.ts.map +1 -1
- package/dist/config/parseConfigToml.js +88 -0
- package/dist/config/serializeMcpServers.d.ts +3 -0
- package/dist/config/serializeMcpServers.d.ts.map +1 -0
- package/dist/config/serializeMcpServers.js +34 -0
- package/dist/config/types.d.ts +6 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/writeRuntimeConfig.d.ts.map +1 -1
- package/dist/config/writeRuntimeConfig.js +3 -0
- package/dist/goals/SessionGoal.d.ts +14 -0
- package/dist/goals/SessionGoal.d.ts.map +1 -0
- package/dist/goals/SessionGoal.js +1 -0
- package/dist/goals/createGoalContinuationPrompt.d.ts +3 -0
- package/dist/goals/createGoalContinuationPrompt.d.ts.map +1 -0
- package/dist/goals/createGoalContinuationPrompt.js +17 -0
- package/dist/goals/index.d.ts +5 -0
- package/dist/goals/index.d.ts.map +1 -0
- package/dist/goals/index.js +3 -0
- package/dist/goals/isGoalStatus.d.ts +3 -0
- package/dist/goals/isGoalStatus.d.ts.map +1 -0
- package/dist/goals/isGoalStatus.js +3 -0
- package/dist/goals/normalizeGoalObjective.d.ts +3 -0
- package/dist/goals/normalizeGoalObjective.d.ts.map +1 -0
- package/dist/goals/normalizeGoalObjective.js +11 -0
- package/dist/mcp/McpClientManager.d.ts +12 -0
- package/dist/mcp/McpClientManager.d.ts.map +1 -0
- package/dist/mcp/McpClientManager.js +123 -0
- package/dist/mcp/connectMcpServer.d.ts +8 -0
- package/dist/mcp/connectMcpServer.d.ts.map +1 -0
- package/dist/mcp/connectMcpServer.js +47 -0
- package/dist/mcp/createMcpTool.d.ts +11 -0
- package/dist/mcp/createMcpTool.d.ts.map +1 -0
- package/dist/mcp/createMcpTool.js +43 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +3 -0
- package/dist/mcp/loadMcpServerConfigs.d.ts +4 -0
- package/dist/mcp/loadMcpServerConfigs.d.ts.map +1 -0
- package/dist/mcp/loadMcpServerConfigs.js +122 -0
- package/dist/mcp/mcpResultToContentBlocks.d.ts +3 -0
- package/dist/mcp/mcpResultToContentBlocks.d.ts.map +1 -0
- package/dist/mcp/mcpResultToContentBlocks.js +51 -0
- package/dist/mcp/mergeMcpTools.d.ts +7 -0
- package/dist/mcp/mergeMcpTools.d.ts.map +1 -0
- package/dist/mcp/mergeMcpTools.js +34 -0
- package/dist/mcp/normalizeMcpName.d.ts +2 -0
- package/dist/mcp/normalizeMcpName.d.ts.map +1 -0
- package/dist/mcp/normalizeMcpName.js +3 -0
- package/dist/mcp/types.d.ts +37 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +1 -0
- package/dist/permissions/PermissionContext.d.ts +7 -0
- package/dist/permissions/PermissionContext.d.ts.map +1 -0
- package/dist/permissions/PermissionContext.js +1 -0
- package/dist/permissions/PermissionMode.d.ts +3 -0
- package/dist/permissions/PermissionMode.d.ts.map +1 -0
- package/dist/permissions/PermissionMode.js +1 -0
- package/dist/permissions/createPermissionContext.d.ts +4 -0
- package/dist/permissions/createPermissionContext.d.ts.map +1 -0
- package/dist/permissions/createPermissionContext.js +16 -0
- package/dist/permissions/index.d.ts +13 -0
- package/dist/permissions/index.d.ts.map +1 -0
- package/dist/permissions/index.js +9 -0
- package/dist/permissions/isPermissionMode.d.ts +3 -0
- package/dist/permissions/isPermissionMode.d.ts.map +1 -0
- package/dist/permissions/isPermissionMode.js +6 -0
- package/dist/permissions/parseAutoPermissionReview.d.ts +7 -0
- package/dist/permissions/parseAutoPermissionReview.d.ts.map +1 -0
- package/dist/permissions/parseAutoPermissionReview.js +33 -0
- package/dist/permissions/parsePermissionMode.d.ts +3 -0
- package/dist/permissions/parsePermissionMode.d.ts.map +1 -0
- package/dist/permissions/parsePermissionMode.js +6 -0
- package/dist/permissions/requestAutoPermissionApproval.d.ts +9 -0
- package/dist/permissions/requestAutoPermissionApproval.d.ts.map +1 -0
- package/dist/permissions/requestAutoPermissionApproval.js +26 -0
- package/dist/permissions/reviewAutoPermission.d.ts +13 -0
- package/dist/permissions/reviewAutoPermission.d.ts.map +1 -0
- package/dist/permissions/reviewAutoPermission.js +70 -0
- package/dist/permissions/shouldElevateToolInAutoMode.d.ts +2 -0
- package/dist/permissions/shouldElevateToolInAutoMode.d.ts.map +1 -0
- package/dist/permissions/shouldElevateToolInAutoMode.js +37 -0
- package/dist/permissions/shouldReviewToolInAutoMode.d.ts +2 -0
- package/dist/permissions/shouldReviewToolInAutoMode.d.ts.map +1 -0
- package/dist/permissions/shouldReviewToolInAutoMode.js +85 -0
- package/dist/permissions/summarizePermissionAction.d.ts +2 -0
- package/dist/permissions/summarizePermissionAction.d.ts.map +1 -0
- package/dist/permissions/summarizePermissionAction.js +29 -0
- package/dist/protocol/SessionProtocol.d.ts +49 -2
- package/dist/protocol/SessionProtocol.d.ts.map +1 -1
- package/dist/protocol/index.d.ts +4 -1
- package/dist/protocol/index.d.ts.map +1 -1
- package/dist/providers/claude-sdk.d.ts.map +1 -1
- package/dist/providers/claude-sdk.js +7 -6
- package/dist/providers/codex.d.ts.map +1 -1
- package/dist/providers/codex.js +52 -6
- package/dist/providers/models.d.ts +12 -9
- package/dist/providers/models.d.ts.map +1 -1
- package/dist/providers/models.js +36 -0
- package/dist/providers/types.d.ts +3 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/review/createCodeReviewPrompt.d.ts +2 -0
- package/dist/review/createCodeReviewPrompt.d.ts.map +1 -0
- package/dist/review/createCodeReviewPrompt.js +11 -0
- package/dist/review/index.d.ts +2 -0
- package/dist/review/index.d.ts.map +1 -0
- package/dist/review/index.js +1 -0
- package/dist/server/AgentSessionManager.d.ts +10 -1
- package/dist/server/AgentSessionManager.d.ts.map +1 -1
- package/dist/server/AgentSessionManager.js +203 -12
- package/dist/server/InMemorySession.d.ts +34 -1
- package/dist/server/InMemorySession.d.ts.map +1 -1
- package/dist/server/InMemorySession.js +558 -10
- package/dist/server/InMemorySessionStore.d.ts +2 -0
- package/dist/server/InMemorySessionStore.d.ts.map +1 -1
- package/dist/server/InMemorySessionStore.js +7 -0
- package/dist/server/PersistentSessionStore.d.ts +2 -0
- package/dist/server/PersistentSessionStore.d.ts.map +1 -1
- package/dist/server/PersistentSessionStore.js +80 -5
- package/dist/server/createGoalTitle.d.ts +2 -0
- package/dist/server/createGoalTitle.d.ts.map +1 -0
- package/dist/server/createGoalTitle.js +4 -0
- package/dist/server/createModelCatalog.js +2 -2
- package/dist/server/createProtocolHttpServer.d.ts.map +1 -1
- package/dist/server/createProtocolHttpServer.js +119 -2
- package/dist/server/runLocalProtocolServer.d.ts.map +1 -1
- package/dist/server/runLocalProtocolServer.js +18 -2
- package/dist/tasks/index.d.ts +2 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +1 -0
- package/dist/tasks/types.d.ts +39 -0
- package/dist/tasks/types.d.ts.map +1 -0
- package/dist/tasks/types.js +1 -0
- package/dist/tools/Agent.d.ts +13 -3
- package/dist/tools/Agent.d.ts.map +1 -1
- package/dist/tools/Agent.js +40 -12
- package/dist/tools/claude/AskUserQuestion.d.ts +23 -0
- package/dist/tools/claude/AskUserQuestion.d.ts.map +1 -0
- package/dist/tools/claude/AskUserQuestion.js +52 -0
- package/dist/tools/claude/Bash.d.ts +2 -0
- package/dist/tools/claude/Bash.d.ts.map +1 -1
- package/dist/tools/claude/Bash.js +20 -2
- package/dist/tools/claude/SendMessage.d.ts +10 -0
- package/dist/tools/claude/SendMessage.d.ts.map +1 -0
- package/dist/tools/claude/SendMessage.js +33 -0
- package/dist/tools/claude/TaskCreate.d.ts +12 -0
- package/dist/tools/claude/TaskCreate.d.ts.map +1 -0
- package/dist/tools/claude/TaskCreate.js +34 -0
- package/dist/tools/claude/TaskGet.d.ts +16 -0
- package/dist/tools/claude/TaskGet.d.ts.map +1 -0
- package/dist/tools/claude/TaskGet.js +44 -0
- package/dist/tools/claude/TaskList.d.ts +10 -0
- package/dist/tools/claude/TaskList.d.ts.map +1 -0
- package/dist/tools/claude/TaskList.js +51 -0
- package/dist/tools/claude/TaskOutput.d.ts +17 -0
- package/dist/tools/claude/TaskOutput.d.ts.map +1 -0
- package/dist/tools/claude/TaskOutput.js +74 -0
- package/dist/tools/claude/TaskStop.d.ts +10 -0
- package/dist/tools/claude/TaskStop.d.ts.map +1 -0
- package/dist/tools/claude/TaskStop.js +42 -0
- package/dist/tools/claude/TaskUpdate.d.ts +21 -0
- package/dist/tools/claude/TaskUpdate.d.ts.map +1 -0
- package/dist/tools/claude/TaskUpdate.js +55 -0
- package/dist/tools/claude/index.d.ts +111 -5
- package/dist/tools/claude/index.d.ts.map +1 -1
- package/dist/tools/claude/index.js +24 -2
- package/dist/tools/claude/parseBackgroundTaskId.d.ts +2 -0
- package/dist/tools/claude/parseBackgroundTaskId.d.ts.map +1 -0
- package/dist/tools/claude/parseBackgroundTaskId.js +7 -0
- package/dist/tools/claude/taskSchemas.d.ts +14 -0
- package/dist/tools/claude/taskSchemas.d.ts.map +1 -0
- package/dist/tools/claude/taskSchemas.js +18 -0
- package/dist/tools/codex/exec_command.d.ts +8 -6
- package/dist/tools/codex/exec_command.d.ts.map +1 -1
- package/dist/tools/codex/exec_command.js +37 -18
- package/dist/tools/codex/followup_task.d.ts +11 -0
- package/dist/tools/codex/followup_task.d.ts.map +1 -0
- package/dist/tools/codex/followup_task.js +18 -0
- package/dist/tools/codex/humanizeTaskName.d.ts +2 -0
- package/dist/tools/codex/humanizeTaskName.d.ts.map +1 -0
- package/dist/tools/codex/humanizeTaskName.js +4 -0
- package/dist/tools/codex/index.d.ts +90 -7
- package/dist/tools/codex/index.d.ts.map +1 -1
- package/dist/tools/codex/index.js +24 -0
- package/dist/tools/codex/interrupt_agent.d.ts +10 -0
- package/dist/tools/codex/interrupt_agent.d.ts.map +1 -0
- package/dist/tools/codex/interrupt_agent.js +17 -0
- package/dist/tools/codex/list_agents.d.ts +12 -0
- package/dist/tools/codex/list_agents.d.ts.map +1 -0
- package/dist/tools/codex/list_agents.js +23 -0
- package/dist/tools/codex/request_user_input.d.ts +16 -0
- package/dist/tools/codex/request_user_input.d.ts.map +1 -0
- package/dist/tools/codex/request_user_input.js +58 -0
- package/dist/tools/codex/requireSubagentContext.d.ts +3 -0
- package/dist/tools/codex/requireSubagentContext.d.ts.map +1 -0
- package/dist/tools/codex/requireSubagentContext.js +6 -0
- package/dist/tools/codex/spawn_agent.d.ts +9 -0
- package/dist/tools/codex/spawn_agent.d.ts.map +1 -0
- package/dist/tools/codex/spawn_agent.js +35 -0
- package/dist/tools/codex/subagentSchemas.d.ts +8 -0
- package/dist/tools/codex/subagentSchemas.d.ts.map +1 -0
- package/dist/tools/codex/subagentSchemas.js +13 -0
- package/dist/tools/codex/unifiedExecOutput.d.ts +14 -0
- package/dist/tools/codex/unifiedExecOutput.d.ts.map +1 -0
- package/dist/tools/codex/unifiedExecOutput.js +44 -0
- package/dist/tools/codex/update_plan.d.ts +10 -0
- package/dist/tools/codex/update_plan.d.ts.map +1 -0
- package/dist/tools/codex/update_plan.js +34 -0
- package/dist/tools/codex/wait_agent.d.ts +13 -0
- package/dist/tools/codex/wait_agent.d.ts.map +1 -0
- package/dist/tools/codex/wait_agent.js +32 -0
- package/dist/tools/codex/write_stdin.d.ts +6 -1
- package/dist/tools/codex/write_stdin.d.ts.map +1 -1
- package/dist/tools/codex/write_stdin.js +44 -12
- package/dist/tools/goals/create_goal.d.ts +11 -0
- package/dist/tools/goals/create_goal.d.ts.map +1 -0
- package/dist/tools/goals/create_goal.js +29 -0
- package/dist/tools/goals/get_goal.d.ts +9 -0
- package/dist/tools/goals/get_goal.d.ts.map +1 -0
- package/dist/tools/goals/get_goal.js +26 -0
- package/dist/tools/goals/goalSchemas.d.ts +8 -0
- package/dist/tools/goals/goalSchemas.d.ts.map +1 -0
- package/dist/tools/goals/goalSchemas.js +13 -0
- package/dist/tools/goals/index.d.ts +30 -0
- package/dist/tools/goals/index.d.ts.map +1 -0
- package/dist/tools/goals/index.js +7 -0
- package/dist/tools/goals/update_goal.d.ts +11 -0
- package/dist/tools/goals/update_goal.d.ts.map +1 -0
- package/dist/tools/goals/update_goal.js +33 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/pi/bash.d.ts.map +1 -1
- package/dist/tools/pi/bash.js +2 -0
- package/dist/tools/utils/readSessionWithProgress.d.ts +9 -0
- package/dist/tools/utils/readSessionWithProgress.d.ts.map +1 -0
- package/dist/tools/utils/readSessionWithProgress.js +27 -0
- package/dist/tools/utils/shell.d.ts +2 -0
- package/dist/tools/utils/shell.d.ts.map +1 -1
- package/dist/tools/utils/shell.js +37 -0
- package/dist/tools/utils/summarizeShellOutput.d.ts.map +1 -1
- package/dist/tools/utils/summarizeShellOutput.js +2 -0
- package/dist/user-input/index.d.ts +2 -0
- package/dist/user-input/index.d.ts.map +1 -0
- package/dist/user-input/index.js +1 -0
- package/dist/user-input/types.d.ts +19 -0
- package/dist/user-input/types.d.ts.map +1 -0
- package/dist/user-input/types.js +1 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-BuJOCQJD.js +1 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-TwhCqUaJ.js +1 -0
- package/dist/web/assets/index-B6Bc6sUJ.css +1 -0
- package/dist/web/assets/index-BC99-iZC.js +341 -0
- package/dist/web/assets/index-BZN9jSiw.js +341 -0
- package/dist/web/assets/index-CcF0unjO.css +1 -0
- package/dist/web/index.html +2 -2
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeGoalObjective.d.ts","sourceRoot":"","sources":["../../sources/goals/normalizeGoalObjective.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWhE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const MAX_GOAL_OBJECTIVE_CHARS = 20_000;
|
|
2
|
+
export function normalizeGoalObjective(objective) {
|
|
3
|
+
const normalized = objective.trim();
|
|
4
|
+
if (normalized.length === 0) {
|
|
5
|
+
throw new Error("Goal objective must not be empty.");
|
|
6
|
+
}
|
|
7
|
+
if (normalized.length > MAX_GOAL_OBJECTIVE_CHARS) {
|
|
8
|
+
throw new Error(`Goal objective must be ${MAX_GOAL_OBJECTIVE_CHARS.toLocaleString("en-US")} characters or fewer.`);
|
|
9
|
+
}
|
|
10
|
+
return normalized;
|
|
11
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { McpToolLoadResult, McpToolProvider } from "./types.js";
|
|
2
|
+
export interface McpClientManagerOptions {
|
|
3
|
+
env?: NodeJS.ProcessEnv;
|
|
4
|
+
homeDirectory?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class McpClientManager implements McpToolProvider {
|
|
7
|
+
#private;
|
|
8
|
+
constructor(options?: McpClientManagerOptions);
|
|
9
|
+
load(cwd: string): Promise<McpToolLoadResult>;
|
|
10
|
+
close(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=McpClientManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpClientManager.d.ts","sourceRoot":"","sources":["../../sources/mcp/McpClientManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGR,iBAAiB,EACjB,eAAe,EAClB,MAAM,YAAY,CAAC;AAoBpB,MAAM,WAAW,uBAAuB;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,gBAAiB,YAAW,eAAe;;gBAKxC,OAAO,GAAE,uBAA4B;IAK3C,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAU7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAgH/B"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { connectMcpServer } from "./connectMcpServer.js";
|
|
2
|
+
import { createMcpTool } from "./createMcpTool.js";
|
|
3
|
+
import { loadMcpServerConfigs } from "./loadMcpServerConfigs.js";
|
|
4
|
+
export class McpClientManager {
|
|
5
|
+
#connectionSets = new Map();
|
|
6
|
+
#env;
|
|
7
|
+
#homeDirectory;
|
|
8
|
+
constructor(options = {}) {
|
|
9
|
+
this.#env = options.env ?? process.env;
|
|
10
|
+
this.#homeDirectory = options.homeDirectory;
|
|
11
|
+
}
|
|
12
|
+
async load(cwd) {
|
|
13
|
+
let pending = this.#connectionSets.get(cwd);
|
|
14
|
+
if (pending === undefined) {
|
|
15
|
+
pending = this.#loadConnectionSet(cwd);
|
|
16
|
+
this.#connectionSets.set(cwd, pending);
|
|
17
|
+
}
|
|
18
|
+
const loaded = await pending;
|
|
19
|
+
return { servers: loaded.servers, tools: loaded.tools };
|
|
20
|
+
}
|
|
21
|
+
async close() {
|
|
22
|
+
const sets = await Promise.allSettled(this.#connectionSets.values());
|
|
23
|
+
this.#connectionSets.clear();
|
|
24
|
+
await Promise.allSettled(sets.flatMap((set) => set.status === "fulfilled"
|
|
25
|
+
? set.value.connections.map((connection) => connection.close())
|
|
26
|
+
: []));
|
|
27
|
+
}
|
|
28
|
+
async #loadConnectionSet(cwd) {
|
|
29
|
+
const configs = await loadMcpServerConfigs(cwd, {
|
|
30
|
+
env: this.#env,
|
|
31
|
+
...(this.#homeDirectory !== undefined ? { homeDirectory: this.#homeDirectory } : {}),
|
|
32
|
+
});
|
|
33
|
+
const entries = Object.entries(configs).sort(([left], [right]) => left.localeCompare(right));
|
|
34
|
+
const disabledSummaries = entries
|
|
35
|
+
.filter(([, config]) => config.enabled === false)
|
|
36
|
+
.map(([name]) => ({ name, status: "disabled", toolCount: 0 }));
|
|
37
|
+
const results = await Promise.all(entries
|
|
38
|
+
.filter(([, config]) => config.enabled !== false)
|
|
39
|
+
.map(([name, config]) => this.#connectServer(name, config, cwd)));
|
|
40
|
+
const connections = [];
|
|
41
|
+
const servers = [...disabledSummaries];
|
|
42
|
+
const tools = [];
|
|
43
|
+
const toolNames = new Set();
|
|
44
|
+
for (const result of results) {
|
|
45
|
+
if ("errorMessage" in result) {
|
|
46
|
+
servers.push({
|
|
47
|
+
errorMessage: result.errorMessage,
|
|
48
|
+
name: result.name,
|
|
49
|
+
status: "failed",
|
|
50
|
+
toolCount: 0,
|
|
51
|
+
});
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const serverTools = result.tools.map((tool) => createMcpTool({
|
|
55
|
+
client: result.connection.client,
|
|
56
|
+
serverName: result.name,
|
|
57
|
+
tool,
|
|
58
|
+
...(result.config.toolTimeoutMs !== undefined
|
|
59
|
+
? { timeoutMs: result.config.toolTimeoutMs }
|
|
60
|
+
: {}),
|
|
61
|
+
}));
|
|
62
|
+
const duplicate = serverTools.find((tool) => toolNames.has(tool.name));
|
|
63
|
+
const duplicateInsideServer = new Set(serverTools.map((tool) => tool.name)).size !== serverTools.length;
|
|
64
|
+
if (duplicate !== undefined || duplicateInsideServer) {
|
|
65
|
+
await result.connection.close().catch(() => undefined);
|
|
66
|
+
servers.push({
|
|
67
|
+
errorMessage: `MCP tool names collide after normalization for server "${result.name}".`,
|
|
68
|
+
name: result.name,
|
|
69
|
+
status: "failed",
|
|
70
|
+
toolCount: 0,
|
|
71
|
+
});
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
connections.push(result.connection);
|
|
75
|
+
for (const tool of serverTools) {
|
|
76
|
+
toolNames.add(tool.name);
|
|
77
|
+
tools.push(tool);
|
|
78
|
+
}
|
|
79
|
+
servers.push({
|
|
80
|
+
name: result.name,
|
|
81
|
+
status: "connected",
|
|
82
|
+
toolCount: serverTools.length,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
servers.sort((left, right) => left.name.localeCompare(right.name));
|
|
86
|
+
return { connections, servers, tools };
|
|
87
|
+
}
|
|
88
|
+
async #connectServer(name, config, cwd) {
|
|
89
|
+
let connection;
|
|
90
|
+
try {
|
|
91
|
+
connection = await connectMcpServer(name, config, cwd, this.#env);
|
|
92
|
+
const tools = await listAllTools(connection.client, config.startupTimeoutMs ?? 10_000);
|
|
93
|
+
const enabled = config.enabledTools === undefined ? undefined : new Set(config.enabledTools);
|
|
94
|
+
const disabled = new Set(config.disabledTools ?? []);
|
|
95
|
+
return {
|
|
96
|
+
config,
|
|
97
|
+
connection,
|
|
98
|
+
name,
|
|
99
|
+
tools: tools.filter((tool) => (enabled === undefined || enabled.has(tool.name)) &&
|
|
100
|
+
!disabled.has(tool.name)),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
await connection?.close().catch(() => undefined);
|
|
105
|
+
return {
|
|
106
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
107
|
+
name,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async function listAllTools(client, timeout) {
|
|
113
|
+
const tools = [];
|
|
114
|
+
let cursor;
|
|
115
|
+
do {
|
|
116
|
+
const page = await client.listTools(cursor === undefined ? undefined : { cursor }, {
|
|
117
|
+
timeout,
|
|
118
|
+
});
|
|
119
|
+
tools.push(...page.tools);
|
|
120
|
+
cursor = page.nextCursor;
|
|
121
|
+
} while (cursor !== undefined);
|
|
122
|
+
return tools;
|
|
123
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
|
+
import type { McpServerConfig } from "./types.js";
|
|
3
|
+
export interface ConnectedMcpServer {
|
|
4
|
+
client: Client;
|
|
5
|
+
close(): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export declare function connectMcpServer(name: string, config: McpServerConfig, cwd: string, env?: NodeJS.ProcessEnv): Promise<ConnectedMcpServer>;
|
|
8
|
+
//# sourceMappingURL=connectMcpServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectMcpServer.d.ts","sourceRoot":"","sources":["../../sources/mcp/connectMcpServer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,wBAAsB,gBAAgB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,GACrC,OAAO,CAAC,kBAAkB,CAAC,CAe7B"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
3
|
+
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
4
|
+
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
5
|
+
export async function connectMcpServer(name, config, cwd, env = process.env) {
|
|
6
|
+
const client = new Client({ name: "rig", version: "0.0.4" });
|
|
7
|
+
const transport = createTransport(config, cwd, env);
|
|
8
|
+
try {
|
|
9
|
+
await client.connect(transport, { timeout: config.startupTimeoutMs ?? 10_000 });
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
await transport.close().catch(() => undefined);
|
|
13
|
+
throw new Error(`MCP server "${name}" could not connect: ${error instanceof Error ? error.message : String(error)}`);
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
client,
|
|
17
|
+
close: () => client.close(),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function createTransport(config, cwd, env) {
|
|
21
|
+
if (config.transport === "stdio") {
|
|
22
|
+
return new StdioClientTransport({
|
|
23
|
+
args: [...(config.args ?? [])],
|
|
24
|
+
command: config.command,
|
|
25
|
+
cwd: config.cwd === undefined ? cwd : resolve(cwd, config.cwd),
|
|
26
|
+
env: {
|
|
27
|
+
...stringEnvironment(env),
|
|
28
|
+
...config.env,
|
|
29
|
+
},
|
|
30
|
+
stderr: "ignore",
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const headers = new Headers(config.headers);
|
|
34
|
+
if (config.bearerTokenEnvVar !== undefined) {
|
|
35
|
+
const token = env[config.bearerTokenEnvVar];
|
|
36
|
+
if (token === undefined || token === "") {
|
|
37
|
+
throw new Error(`MCP bearer token environment variable "${config.bearerTokenEnvVar}" is not set.`);
|
|
38
|
+
}
|
|
39
|
+
headers.set("Authorization", `Bearer ${token}`);
|
|
40
|
+
}
|
|
41
|
+
return new StreamableHTTPClientTransport(new URL(config.url), {
|
|
42
|
+
requestInit: { headers },
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function stringEnvironment(env) {
|
|
46
|
+
return Object.fromEntries(Object.entries(env).filter((entry) => entry[1] !== undefined));
|
|
47
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
|
+
import { type AnyDefinedTool } from "../agent/types.js";
|
|
3
|
+
type ListedMcpTool = Awaited<ReturnType<Client["listTools"]>>["tools"][number];
|
|
4
|
+
export declare function createMcpTool(options: {
|
|
5
|
+
client: Client;
|
|
6
|
+
serverName: string;
|
|
7
|
+
tool: ListedMcpTool;
|
|
8
|
+
timeoutMs?: number;
|
|
9
|
+
}): AnyDefinedTool;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=createMcpTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMcpTool.d.ts","sourceRoot":"","sources":["../../sources/mcp/createMcpTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGxE,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIpE,KAAK,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/E,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,cAAc,CA+BjB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Type } from "@sinclair/typebox";
|
|
2
|
+
import { defineTool } from "../agent/types.js";
|
|
3
|
+
import { mcpResultToContentBlocks } from "./mcpResultToContentBlocks.js";
|
|
4
|
+
import { normalizeMcpName } from "./normalizeMcpName.js";
|
|
5
|
+
export function createMcpTool(options) {
|
|
6
|
+
const qualifiedName = `mcp__${normalizeMcpName(options.serverName)}__${normalizeMcpName(options.tool.name)}`;
|
|
7
|
+
const tool = defineTool({
|
|
8
|
+
name: qualifiedName,
|
|
9
|
+
label: qualifiedName,
|
|
10
|
+
description: options.tool.description ?? `Use ${options.tool.name} from ${options.serverName}.`,
|
|
11
|
+
arguments: Type.Unsafe(options.tool.inputSchema),
|
|
12
|
+
returnType: Type.Unknown(),
|
|
13
|
+
async execute(args, _context, execution) {
|
|
14
|
+
const result = await options.client.callTool({
|
|
15
|
+
arguments: isRecord(args) ? args : {},
|
|
16
|
+
name: options.tool.name,
|
|
17
|
+
}, undefined, {
|
|
18
|
+
...(execution.signal !== undefined ? { signal: execution.signal } : {}),
|
|
19
|
+
...(options.timeoutMs !== undefined ? { timeout: options.timeoutMs } : {}),
|
|
20
|
+
});
|
|
21
|
+
if (result.isError === true) {
|
|
22
|
+
throw new Error(firstText(result) ?? "The MCP tool reported an error.");
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
},
|
|
26
|
+
toLLM: (result) => mcpResultToContentBlocks(result),
|
|
27
|
+
toUI: () => `${humanizeName(options.serverName)} · ${humanizeName(options.tool.name)}`,
|
|
28
|
+
locks: options.tool.annotations?.readOnlyHint === true ? [] : [`mcp:${options.serverName}`],
|
|
29
|
+
});
|
|
30
|
+
return tool;
|
|
31
|
+
}
|
|
32
|
+
function firstText(result) {
|
|
33
|
+
if (!isRecord(result) || !Array.isArray(result.content))
|
|
34
|
+
return undefined;
|
|
35
|
+
const text = result.content.find((content) => isRecord(content) && content.type === "text" && typeof content.text === "string");
|
|
36
|
+
return text?.text;
|
|
37
|
+
}
|
|
38
|
+
function humanizeName(value) {
|
|
39
|
+
return value.replace(/[_-]+/g, " ").replace(/\b\w/g, (character) => character.toUpperCase());
|
|
40
|
+
}
|
|
41
|
+
function isRecord(value) {
|
|
42
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
43
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { McpClientManager } from "./McpClientManager.js";
|
|
2
|
+
export { loadMcpServerConfigs } from "./loadMcpServerConfigs.js";
|
|
3
|
+
export { mergeMcpTools } from "./mergeMcpTools.js";
|
|
4
|
+
export type { McpHttpServerConfig, McpServerConfig, McpServerSummary, McpStdioServerConfig, McpToolLoadResult, McpToolProvider, } from "./types.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../sources/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EACR,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAClB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { LoadConfigOptions } from "../config/types.js";
|
|
2
|
+
import type { McpServerConfig } from "./types.js";
|
|
3
|
+
export declare function loadMcpServerConfigs(cwd: string, options?: Omit<LoadConfigOptions, "cwd">): Promise<Readonly<Record<string, McpServerConfig>>>;
|
|
4
|
+
//# sourceMappingURL=loadMcpServerConfigs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadMcpServerConfigs.d.ts","sourceRoot":"","sources":["../../sources/mcp/loadMcpServerConfigs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAsB,oBAAoB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAM,GAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAIpD"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { loadConfig } from "../config/loadConfig.js";
|
|
4
|
+
export async function loadMcpServerConfigs(cwd, options = {}) {
|
|
5
|
+
const loaded = await loadConfig({ ...options, cwd });
|
|
6
|
+
const projectServers = await readProjectMcpConfig(join(cwd, ".mcp.json"));
|
|
7
|
+
return { ...loaded.config.mcpServers, ...projectServers };
|
|
8
|
+
}
|
|
9
|
+
async function readProjectMcpConfig(path) {
|
|
10
|
+
let source;
|
|
11
|
+
try {
|
|
12
|
+
source = await readFile(path, "utf8");
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
if (isMissingFileError(error))
|
|
16
|
+
return {};
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
let document;
|
|
20
|
+
try {
|
|
21
|
+
document = JSON.parse(source);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
throw new Error(`.mcp.json is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
25
|
+
}
|
|
26
|
+
if (!isRecord(document) || !isRecord(document.mcpServers)) {
|
|
27
|
+
throw new Error('.mcp.json must contain an "mcpServers" object.');
|
|
28
|
+
}
|
|
29
|
+
return Object.fromEntries(Object.entries(document.mcpServers).map(([name, value]) => [
|
|
30
|
+
name,
|
|
31
|
+
parseProjectServer(name, value),
|
|
32
|
+
]));
|
|
33
|
+
}
|
|
34
|
+
function parseProjectServer(name, value) {
|
|
35
|
+
if (!isRecord(value)) {
|
|
36
|
+
throw new Error(`MCP server "${name}" must be an object.`);
|
|
37
|
+
}
|
|
38
|
+
const type = typeof value.type === "string" ? value.type : undefined;
|
|
39
|
+
if (type !== undefined && type !== "stdio" && type !== "http") {
|
|
40
|
+
throw new Error(`MCP server "${name}" uses unsupported transport "${type}". Use stdio or http.`);
|
|
41
|
+
}
|
|
42
|
+
const common = {
|
|
43
|
+
...optionalBoolean(value.enabled, "enabled", name),
|
|
44
|
+
...optionalStringArray(value.enabledTools, "enabledTools", name),
|
|
45
|
+
...optionalStringArray(value.disabledTools, "disabledTools", name),
|
|
46
|
+
...optionalPositiveNumber(value.startupTimeoutMs, "startupTimeoutMs", name),
|
|
47
|
+
...optionalPositiveNumber(value.toolTimeoutMs, "toolTimeoutMs", name),
|
|
48
|
+
};
|
|
49
|
+
if (type === "stdio" || typeof value.command === "string") {
|
|
50
|
+
if (typeof value.command !== "string" || value.command.trim() === "") {
|
|
51
|
+
throw new Error(`MCP server "${name}" must provide a command.`);
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
...common,
|
|
55
|
+
...optionalStringArray(value.args, "args", name),
|
|
56
|
+
...optionalStringRecord(value.env, "env", name),
|
|
57
|
+
...optionalString(value.cwd, "cwd", name),
|
|
58
|
+
command: value.command,
|
|
59
|
+
transport: "stdio",
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (type === "http" || typeof value.url === "string") {
|
|
63
|
+
if (typeof value.url !== "string" || value.url.trim() === "") {
|
|
64
|
+
throw new Error(`MCP server "${name}" must provide a URL.`);
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
...common,
|
|
68
|
+
...optionalStringRecord(value.headers, "headers", name),
|
|
69
|
+
...optionalString(value.bearerTokenEnvVar, "bearerTokenEnvVar", name),
|
|
70
|
+
transport: "http",
|
|
71
|
+
url: value.url,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
throw new Error(`MCP server "${name}" must configure either command or url.`);
|
|
75
|
+
}
|
|
76
|
+
function optionalBoolean(value, key, serverName) {
|
|
77
|
+
if (value === undefined)
|
|
78
|
+
return {};
|
|
79
|
+
if (typeof value !== "boolean")
|
|
80
|
+
throw invalidField(serverName, key, "a boolean");
|
|
81
|
+
return { enabled: value };
|
|
82
|
+
}
|
|
83
|
+
function optionalPositiveNumber(value, key, serverName) {
|
|
84
|
+
if (value === undefined)
|
|
85
|
+
return {};
|
|
86
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
|
|
87
|
+
throw invalidField(serverName, key, "a positive number");
|
|
88
|
+
}
|
|
89
|
+
return { [key]: value };
|
|
90
|
+
}
|
|
91
|
+
function optionalString(value, key, serverName) {
|
|
92
|
+
if (value === undefined)
|
|
93
|
+
return {};
|
|
94
|
+
if (typeof value !== "string")
|
|
95
|
+
throw invalidField(serverName, key, "a string");
|
|
96
|
+
return { [key]: value };
|
|
97
|
+
}
|
|
98
|
+
function optionalStringArray(value, key, serverName) {
|
|
99
|
+
if (value === undefined)
|
|
100
|
+
return {};
|
|
101
|
+
if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string")) {
|
|
102
|
+
throw invalidField(serverName, key, "an array of strings");
|
|
103
|
+
}
|
|
104
|
+
return { [key]: value };
|
|
105
|
+
}
|
|
106
|
+
function optionalStringRecord(value, key, serverName) {
|
|
107
|
+
if (value === undefined)
|
|
108
|
+
return {};
|
|
109
|
+
if (!isRecord(value) || Object.values(value).some((entry) => typeof entry !== "string")) {
|
|
110
|
+
throw invalidField(serverName, key, "an object with string values");
|
|
111
|
+
}
|
|
112
|
+
return { [key]: value };
|
|
113
|
+
}
|
|
114
|
+
function invalidField(serverName, key, expectation) {
|
|
115
|
+
return new Error(`MCP server "${serverName}" field "${key}" must be ${expectation}.`);
|
|
116
|
+
}
|
|
117
|
+
function isRecord(value) {
|
|
118
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
119
|
+
}
|
|
120
|
+
function isMissingFileError(error) {
|
|
121
|
+
return isRecord(error) && error.code === "ENOENT";
|
|
122
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpResultToContentBlocks.d.ts","sourceRoot":"","sources":["../../sources/mcp/mcpResultToContentBlocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,YAAY,EAAE,CAUjF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export function mcpResultToContentBlocks(result) {
|
|
2
|
+
if (!isRecord(result))
|
|
3
|
+
return [{ type: "text", text: String(result) }];
|
|
4
|
+
const blocks = Array.isArray(result.content)
|
|
5
|
+
? result.content.flatMap((content) => contentToBlocks(content))
|
|
6
|
+
: [];
|
|
7
|
+
if (blocks.length > 0)
|
|
8
|
+
return blocks;
|
|
9
|
+
if (result.structuredContent !== undefined) {
|
|
10
|
+
return [{ type: "text", text: JSON.stringify(result.structuredContent) }];
|
|
11
|
+
}
|
|
12
|
+
return [{ type: "text", text: "The MCP tool completed without returning content." }];
|
|
13
|
+
}
|
|
14
|
+
function contentToBlocks(content) {
|
|
15
|
+
if (!isRecord(content) || typeof content.type !== "string")
|
|
16
|
+
return [];
|
|
17
|
+
if (content.type === "text" && typeof content.text === "string") {
|
|
18
|
+
return [{ type: "text", text: content.text }];
|
|
19
|
+
}
|
|
20
|
+
if (content.type === "image" &&
|
|
21
|
+
typeof content.data === "string" &&
|
|
22
|
+
typeof content.mimeType === "string") {
|
|
23
|
+
return [{ type: "image", data: content.data, mediaType: content.mimeType }];
|
|
24
|
+
}
|
|
25
|
+
if (content.type === "resource" && isRecord(content.resource)) {
|
|
26
|
+
if (typeof content.resource.text === "string") {
|
|
27
|
+
return [{ type: "text", text: content.resource.text }];
|
|
28
|
+
}
|
|
29
|
+
return [
|
|
30
|
+
{
|
|
31
|
+
type: "text",
|
|
32
|
+
text: `MCP resource: ${typeof content.resource.uri === "string" ? content.resource.uri : "embedded content"}`,
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
if (content.type === "resource_link") {
|
|
37
|
+
return [
|
|
38
|
+
{
|
|
39
|
+
type: "text",
|
|
40
|
+
text: `MCP resource: ${typeof content.uri === "string" ? content.uri : "linked content"}`,
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
if (content.type === "audio") {
|
|
45
|
+
return [{ type: "text", text: "The MCP tool returned audio content." }];
|
|
46
|
+
}
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
function isRecord(value) {
|
|
50
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
51
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AnyDefinedTool } from "../agent/index.js";
|
|
2
|
+
import type { McpServerSummary, McpToolLoadResult } from "./types.js";
|
|
3
|
+
export declare function mergeMcpTools(existingTools: readonly AnyDefinedTool[], loaded: McpToolLoadResult): {
|
|
4
|
+
servers: readonly McpServerSummary[];
|
|
5
|
+
tools: readonly AnyDefinedTool[];
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=mergeMcpTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mergeMcpTools.d.ts","sourceRoot":"","sources":["../../sources/mcp/mergeMcpTools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE,wBAAgB,aAAa,CACzB,aAAa,EAAE,SAAS,cAAc,EAAE,EACxC,MAAM,EAAE,iBAAiB,GAC1B;IAAE,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,CA6C5E"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { normalizeMcpName } from "./normalizeMcpName.js";
|
|
2
|
+
export function mergeMcpTools(existingTools, loaded) {
|
|
3
|
+
const existingNames = new Set(existingTools.map((tool) => tool.name));
|
|
4
|
+
const conflictingNames = new Set(loaded.tools.filter((tool) => existingNames.has(tool.name)).map((tool) => tool.name));
|
|
5
|
+
if (conflictingNames.size === 0) {
|
|
6
|
+
return { servers: loaded.servers, tools: [...existingTools, ...loaded.tools] };
|
|
7
|
+
}
|
|
8
|
+
const conflictingServers = new Set();
|
|
9
|
+
const servers = loaded.servers.map((server) => {
|
|
10
|
+
const prefix = `mcp__${normalizeMcpName(server.name)}__`;
|
|
11
|
+
const conflicts = [...conflictingNames].filter((name) => name.startsWith(prefix));
|
|
12
|
+
if (conflicts.length === 0)
|
|
13
|
+
return server;
|
|
14
|
+
conflictingServers.add(server.name);
|
|
15
|
+
return {
|
|
16
|
+
errorMessage: `Tool name conflict: ${conflicts.join(", ")}`,
|
|
17
|
+
name: server.name,
|
|
18
|
+
status: "failed",
|
|
19
|
+
toolCount: 0,
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
const unresolved = [...conflictingNames].filter((name) => !loaded.servers.some((server) => name.startsWith(`mcp__${normalizeMcpName(server.name)}__`)));
|
|
23
|
+
if (unresolved.length > 0) {
|
|
24
|
+
servers.push({
|
|
25
|
+
errorMessage: `Tool name conflict: ${unresolved.join(", ")}`,
|
|
26
|
+
name: "MCP tools",
|
|
27
|
+
status: "failed",
|
|
28
|
+
toolCount: 0,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const accepted = loaded.tools.filter((tool) => !existingNames.has(tool.name) &&
|
|
32
|
+
![...conflictingServers].some((serverName) => tool.name.startsWith(`mcp__${normalizeMcpName(serverName)}__`)));
|
|
33
|
+
return { servers, tools: [...existingTools, ...accepted] };
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeMcpName.d.ts","sourceRoot":"","sources":["../../sources/mcp/normalizeMcpName.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { AnyDefinedTool } from "../agent/index.js";
|
|
2
|
+
export interface McpServerConfigBase {
|
|
3
|
+
disabledTools?: readonly string[];
|
|
4
|
+
enabled?: boolean;
|
|
5
|
+
enabledTools?: readonly string[];
|
|
6
|
+
startupTimeoutMs?: number;
|
|
7
|
+
toolTimeoutMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface McpStdioServerConfig extends McpServerConfigBase {
|
|
10
|
+
args?: readonly string[];
|
|
11
|
+
command: string;
|
|
12
|
+
cwd?: string;
|
|
13
|
+
env?: Readonly<Record<string, string>>;
|
|
14
|
+
transport: "stdio";
|
|
15
|
+
}
|
|
16
|
+
export interface McpHttpServerConfig extends McpServerConfigBase {
|
|
17
|
+
bearerTokenEnvVar?: string;
|
|
18
|
+
headers?: Readonly<Record<string, string>>;
|
|
19
|
+
transport: "http";
|
|
20
|
+
url: string;
|
|
21
|
+
}
|
|
22
|
+
export type McpServerConfig = McpStdioServerConfig | McpHttpServerConfig;
|
|
23
|
+
export interface McpServerSummary {
|
|
24
|
+
errorMessage?: string;
|
|
25
|
+
name: string;
|
|
26
|
+
status: "connected" | "disabled" | "failed";
|
|
27
|
+
toolCount: number;
|
|
28
|
+
}
|
|
29
|
+
export interface McpToolLoadResult {
|
|
30
|
+
servers: readonly McpServerSummary[];
|
|
31
|
+
tools: readonly AnyDefinedTool[];
|
|
32
|
+
}
|
|
33
|
+
export interface McpToolProvider {
|
|
34
|
+
close(): Promise<void>;
|
|
35
|
+
load(cwd: string): Promise<McpToolLoadResult>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../sources/mcp/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAChC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC7D,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,mBAAmB,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PermissionMode } from "./PermissionMode.js";
|
|
2
|
+
export interface PermissionContext {
|
|
3
|
+
readonly mode: PermissionMode;
|
|
4
|
+
runWithMode<T>(mode: PermissionMode, action: () => Promise<T> | T): Promise<T>;
|
|
5
|
+
setMode(mode: PermissionMode): void;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=PermissionContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionContext.d.ts","sourceRoot":"","sources":["../../sources/permissions/PermissionContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionMode.d.ts","sourceRoot":"","sources":["../../sources/permissions/PermissionMode.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,iBAAiB,GAAG,WAAW,GAAG,aAAa,CAAC;AAEtF,eAAO,MAAM,uBAAuB,EAAE,cAAkC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const DEFAULT_PERMISSION_MODE = "workspace_write";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { PermissionContext } from "./PermissionContext.js";
|
|
2
|
+
import type { PermissionMode } from "./PermissionMode.js";
|
|
3
|
+
export declare function createPermissionContext(initialMode: PermissionMode): PermissionContext;
|
|
4
|
+
//# sourceMappingURL=createPermissionContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPermissionContext.d.ts","sourceRoot":"","sources":["../../sources/permissions/createPermissionContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,cAAc,GAAG,iBAAiB,CActF"}
|