mirror of
https://github.com/simstudioai/sim.git
synced 2026-02-13 16:05:09 -05:00
* v0 * v1 * Basic ss tes * Ss tests * Stuff * Add mcp * mcp v1 * Improvement * Fix * BROKEN * Checkpoint * Streaming * Fix abort * Things are broken * Streaming seems to work but copilot is dumb * Fix edge issue * LUAAAA * Fix stream buffer * Fix lint * Checkpoint * Initial temp state, in the middle of a refactor * Initial test shows diff store still working * Tool refactor * First cleanup pass complete - untested * Continued cleanup * Refactor * Refactor complete - no testing yet * Fix - cursor makes me sad * Fix mcp * Clean up mcp * Updated mcp * Add respond to subagents * Fix definitions * Add tools * Add tools * Add copilot mcp tracking * Fix lint * Fix mcp * Fix * Updates * Clean up mcp * Fix copilot mcp tool names to be sim prefixed * Add opus 4.6 * Fix discovery tool * Fix * Remove logs * Fix go side tool rendering * Update docs * Fix hydration * Fix tool call resolution * Fix * Fix lint * Fix superagent and autoallow integrations * Fix always allow * Update block * Remove plan docs * Fix hardcoded ff * Fix dropped provider * Fix lint * Fix tests * Fix dead messages array * Fix discovery * Fix run workflow * Fix run block * Fix run from block in copilot * Fix lint * Fix skip and mtb * Fix typing * Fix tool call * Bump api version * Fix bun lock * Nuke bad files
65 lines
3.3 KiB
TypeScript
65 lines
3.3 KiB
TypeScript
import { createLogger } from '@sim/logger'
|
|
import type { BaseServerTool, ServerToolContext } from '@/lib/copilot/tools/server/base-tool'
|
|
import { getBlockConfigServerTool } from '@/lib/copilot/tools/server/blocks/get-block-config'
|
|
import { getBlockOptionsServerTool } from '@/lib/copilot/tools/server/blocks/get-block-options'
|
|
import { getBlocksAndToolsServerTool } from '@/lib/copilot/tools/server/blocks/get-blocks-and-tools'
|
|
import { getBlocksMetadataServerTool } from '@/lib/copilot/tools/server/blocks/get-blocks-metadata-tool'
|
|
import { getTriggerBlocksServerTool } from '@/lib/copilot/tools/server/blocks/get-trigger-blocks'
|
|
import { searchDocumentationServerTool } from '@/lib/copilot/tools/server/docs/search-documentation'
|
|
import { knowledgeBaseServerTool } from '@/lib/copilot/tools/server/knowledge/knowledge-base'
|
|
import { makeApiRequestServerTool } from '@/lib/copilot/tools/server/other/make-api-request'
|
|
import { searchOnlineServerTool } from '@/lib/copilot/tools/server/other/search-online'
|
|
import { getCredentialsServerTool } from '@/lib/copilot/tools/server/user/get-credentials'
|
|
import { setEnvironmentVariablesServerTool } from '@/lib/copilot/tools/server/user/set-environment-variables'
|
|
import { editWorkflowServerTool } from '@/lib/copilot/tools/server/workflow/edit-workflow'
|
|
import { getWorkflowConsoleServerTool } from '@/lib/copilot/tools/server/workflow/get-workflow-console'
|
|
import { ExecuteResponseSuccessSchema } from '@/lib/copilot/tools/shared/schemas'
|
|
|
|
export { ExecuteResponseSuccessSchema }
|
|
export type ExecuteResponseSuccess = (typeof ExecuteResponseSuccessSchema)['_type']
|
|
|
|
const logger = createLogger('ServerToolRouter')
|
|
|
|
/** Registry of all server tools. Tools self-declare their validation schemas. */
|
|
const serverToolRegistry: Record<string, BaseServerTool> = {
|
|
[getBlocksAndToolsServerTool.name]: getBlocksAndToolsServerTool,
|
|
[getBlocksMetadataServerTool.name]: getBlocksMetadataServerTool,
|
|
[getBlockOptionsServerTool.name]: getBlockOptionsServerTool,
|
|
[getBlockConfigServerTool.name]: getBlockConfigServerTool,
|
|
[getTriggerBlocksServerTool.name]: getTriggerBlocksServerTool,
|
|
[editWorkflowServerTool.name]: editWorkflowServerTool,
|
|
[getWorkflowConsoleServerTool.name]: getWorkflowConsoleServerTool,
|
|
[searchDocumentationServerTool.name]: searchDocumentationServerTool,
|
|
[searchOnlineServerTool.name]: searchOnlineServerTool,
|
|
[setEnvironmentVariablesServerTool.name]: setEnvironmentVariablesServerTool,
|
|
[getCredentialsServerTool.name]: getCredentialsServerTool,
|
|
[makeApiRequestServerTool.name]: makeApiRequestServerTool,
|
|
[knowledgeBaseServerTool.name]: knowledgeBaseServerTool,
|
|
}
|
|
|
|
/**
|
|
* Route a tool execution request to the appropriate server tool.
|
|
* Validates input/output using the tool's declared Zod schemas if present.
|
|
*/
|
|
export async function routeExecution(
|
|
toolName: string,
|
|
payload: unknown,
|
|
context?: ServerToolContext
|
|
): Promise<unknown> {
|
|
const tool = serverToolRegistry[toolName]
|
|
if (!tool) {
|
|
throw new Error(`Unknown server tool: ${toolName}`)
|
|
}
|
|
|
|
logger.debug('Routing to tool', { toolName })
|
|
|
|
// Validate input if tool declares a schema
|
|
const args = tool.inputSchema ? tool.inputSchema.parse(payload ?? {}) : (payload ?? {})
|
|
|
|
// Execute
|
|
const result = await tool.execute(args, context)
|
|
|
|
// Validate output if tool declares a schema
|
|
return tool.outputSchema ? tool.outputSchema.parse(result) : result
|
|
}
|