mirror of
https://github.com/moeru-ai/airi.git
synced 2026-04-28 06:29:33 +00:00
85 lines
3 KiB
TypeScript
85 lines
3 KiB
TypeScript
import type { ComputerUseServerOptions } from './server/runtime'
|
|
|
|
import process, { env } from 'node:process'
|
|
|
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
|
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
|
import { resolveComputerUseConfig } from './config'
|
|
import { createExecuteAction } from './server/action-executor'
|
|
import { registerAccessibilityTools } from './server/register-accessibility'
|
|
import { registerCdpTools } from './server/register-cdp'
|
|
import { registerChromeSessionTools } from './server/register-chrome-session'
|
|
import { registerDesktopGroundingTools } from './server/register-desktop-grounding'
|
|
import { registerDisplayTools } from './server/register-display'
|
|
import { destroyAllPtySessions, registerPtyTools } from './server/register-pty'
|
|
import { registerTaskMemoryTools } from './server/register-task-memory'
|
|
import { registerComputerUseTools } from './server/register-tools'
|
|
import { registerVscodeTools } from './server/register-vscode'
|
|
import { createRuntime } from './server/runtime'
|
|
|
|
const packageVersion = '0.1.0'
|
|
const enableTestTools = ['1', 'true', 'yes', 'on'].includes((env.COMPUTER_USE_ENABLE_TEST_TOOLS || '').trim().toLowerCase())
|
|
|
|
export { type ComputerUseServerOptions } from './server/runtime'
|
|
|
|
export async function createComputerUseMcpServer(config = resolveComputerUseConfig(), options: ComputerUseServerOptions = {}) {
|
|
const runtime = await createRuntime(config, options)
|
|
const executeAction = createExecuteAction(runtime)
|
|
const server = new McpServer({
|
|
name: 'AIRI Computer Use',
|
|
version: packageVersion,
|
|
})
|
|
|
|
registerComputerUseTools({
|
|
server,
|
|
runtime,
|
|
executeAction,
|
|
enableTestTools,
|
|
})
|
|
|
|
registerTaskMemoryTools(server, runtime)
|
|
|
|
registerAccessibilityTools({ server, runtime })
|
|
registerDisplayTools({ server, runtime })
|
|
registerPtyTools({ server, runtime })
|
|
registerVscodeTools({
|
|
server,
|
|
runtime,
|
|
executeTerminalCommand: async (input, toolName) => {
|
|
return await executeAction({ kind: 'terminal_exec', input }, toolName)
|
|
},
|
|
})
|
|
const cdpCleanup = registerCdpTools({ server, runtime })
|
|
registerDesktopGroundingTools({ server, runtime, executeAction })
|
|
registerChromeSessionTools({ server, runtime })
|
|
|
|
return {
|
|
server,
|
|
runtime,
|
|
cdpCleanup,
|
|
}
|
|
}
|
|
|
|
export async function startComputerUseMcpServer(config = resolveComputerUseConfig(), options: ComputerUseServerOptions = {}) {
|
|
const { server, runtime, cdpCleanup } = await createComputerUseMcpServer(config, options)
|
|
const transport = new StdioServerTransport()
|
|
await server.connect(transport)
|
|
|
|
const shutdown = async () => {
|
|
destroyAllPtySessions()
|
|
await cdpCleanup.close().catch(() => {})
|
|
await runtime.cdpBridgeManager.close().catch(() => {})
|
|
await runtime.browserDomBridge.close().catch(() => {})
|
|
await runtime.executor.close?.().catch(() => {})
|
|
}
|
|
|
|
process.once('SIGINT', () => {
|
|
void shutdown()
|
|
})
|
|
process.once('SIGTERM', () => {
|
|
void shutdown()
|
|
})
|
|
|
|
return { server, transport, runtime }
|
|
}
|