deeper-cli 1.2.3 → 1.2.4
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/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/chat-repl.ts +1 -1
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/constants.ts","../../src/core/config.ts","../../src/cli/bootstrap.ts","../../src/cli/commands/run.ts","../../src/cli/commands/config.ts","../../src/cli/commands/skill.ts","../../src/cli/commands/mcp.ts","../../src/tools/tool-types.ts","../../src/tools/ToolValidator.ts","../../src/memory/xmemory.ts","../../src/ui/markdown.ts","../../src/tools/builtin/ai/todo_manager.ts","../../src/tools/builtin/ai/token_count.ts","../../src/skills/SkillRegistry.ts","../../src/skills/SkillLoader.ts","../../src/skills/SkillExecutor.ts","../../src/skills/SkillCreator.ts","../../src/skills/SkillTrigger.ts","../../src/core/eventbus.ts","../../src/skills/SkillEngine.ts","../../src/mcp/StdioTransport.ts","../../src/mcp/SSETransport.ts","../../src/mcp/ToolAdapter.ts","../../src/mcp/ResourceAdapter.ts","../../src/mcp/MCPClient.ts","../../src/model/RetryManager.ts","../../src/model/StreamHandler.ts","../../src/core/logger.ts","../../src/model/DeepSeekClient.ts","../../src/ui/ansi.ts","../../src/tools/builtin/filesystem/read_file.ts","../../src/tools/builtin/filesystem/write_file.ts","../../src/tools/builtin/filesystem/edit_file.ts","../../src/tools/builtin/filesystem/delete_file.ts","../../src/tools/builtin/filesystem/list_dir.ts","../../src/tools/builtin/filesystem/glob_find.ts","../../src/tools/builtin/filesystem/move_file.ts","../../src/tools/builtin/filesystem/copy_file.ts","../../src/tools/builtin/filesystem/create_dir.ts","../../src/tools/builtin/filesystem/file_info.ts","../../src/tools/builtin/filesystem/watch_file.ts","../../src/tools/builtin/filesystem/batch_read.ts","../../src/tools/builtin/filesystem/batch_write.ts","../../src/tools/builtin/filesystem/diff_files.ts","../../src/tools/builtin/filesystem/merge_files.ts","../../src/tools/builtin/search/grep_search.ts","../../src/tools/builtin/search/codebase_search.ts","../../src/tools/builtin/search/symbol_search.ts","../../src/tools/builtin/search/find_references.ts","../../src/tools/builtin/search/find_definition.ts","../../src/tools/builtin/search/text_search.ts","../../src/tools/builtin/search/fuzzy_find.ts","../../src/tools/builtin/search/regex_find.ts","../../src/tools/builtin/search/search_package.ts","../../src/tools/builtin/search/search_docs.ts","../../src/tools/builtin/shell/process-pool.ts","../../src/tools/builtin/shell/run_command.ts","../../src/tools/builtin/shell/run_async.ts","../../src/tools/builtin/shell/check_status.ts","../../src/tools/builtin/shell/stop_command.ts","../../src/tools/builtin/shell/pipe_commands.ts","../../src/tools/builtin/shell/shell_script.ts","../../src/tools/builtin/shell/background_terminal.ts","../../src/tools/builtin/shell/send_keys.ts","../../src/tools/builtin/shell/send_ctrl_keys.ts","../../src/tools/builtin/shell/send_text.ts","../../src/tools/builtin/shell/terminal_screenshot.ts","../../src/tools/builtin/shell/terminal_resize.ts","../../src/tools/builtin/shell/list_terminals.ts","../../src/tools/builtin/shell/kill_terminal.ts","../../src/tools/builtin/shell/interactive_terminal.ts","../../src/tools/builtin/network/web_fetch.ts","../../src/tools/builtin/network/web_search.ts","../../src/tools/builtin/network/http_request.ts","../../src/tools/builtin/network/download_file.ts","../../src/tools/builtin/network/api_call.ts","../../src/tools/builtin/network/graphql_query.ts","../../src/tools/builtin/network/websocket_connect.ts","../../src/tools/builtin/network/check_url.ts","../../src/tools/builtin/network/screenshot_page.ts","../../src/tools/builtin/network/parse_html.ts","../../src/tools/builtin/network/browser_action.ts","../../src/tools/builtin/network/proxy_request.ts","../../src/tools/builtin/code/parse_ast.ts","../../src/tools/builtin/code/format_code.ts","../../src/tools/builtin/code/lint_code.ts","../../src/tools/builtin/code/type_check.ts","../../src/tools/builtin/code/generate_code.ts","../../src/tools/builtin/code/refactor_code.ts","../../src/tools/builtin/code/extract_function.ts","../../src/tools/builtin/code/analyze_deps.ts","../../src/tools/builtin/code/import_organizer.ts","../../src/tools/builtin/code/code_metrics.ts","../../src/core/bugscan.ts","../../src/tools/builtin/code/bug_scan.ts","../../src/tools/builtin/database/sql_query.ts","../../src/tools/builtin/database/sql_migrate.ts","../../src/tools/builtin/database/nosql_query.ts","../../src/tools/builtin/database/db_schema.ts","../../src/tools/builtin/database/db_backup.ts","../../src/tools/builtin/database/db_restore.ts","../../src/tools/builtin/database/redis_command.ts","../../src/tools/builtin/database/orm_generate.ts","../../src/tools/builtin/data/json_parse.ts","../../src/tools/builtin/data/csv_parse.ts","../../src/tools/builtin/data/xml_parse.ts","../../src/tools/builtin/data/yaml_parse.ts","../../src/tools/builtin/data/toml_parse.ts","../../src/tools/builtin/data/data_transform.ts","../../src/tools/builtin/data/data_validate.ts","../../src/tools/builtin/data/data_diff.ts","../../src/tools/builtin/data/template_render.ts","../../src/tools/builtin/data/chart_generate.ts","../../src/tools/builtin/security/secret_scan.ts","../../src/tools/builtin/security/encrypt_file.ts","../../src/tools/builtin/security/decrypt_file.ts","../../src/tools/builtin/security/hash_generate.ts","../../src/tools/builtin/security/jwt_decode.ts","../../src/tools/builtin/security/vulnerability_check.ts","../../src/tools/builtin/project/npm_manage.ts","../../src/tools/builtin/project/project_init.ts","../../src/tools/builtin/project/build_project.ts","../../src/tools/builtin/project/run_test.ts","../../src/tools/builtin/project/coverage_report.ts","../../src/tools/builtin/project/env_manage.ts","../../src/tools/builtin/project/config_manage.ts","../../src/tools/builtin/project/docker_manage.ts","../../src/tools/builtin/ai/context_summarize.ts","../../src/tools/builtin/ai/prompt_template.ts","../../src/tools/builtin/ai/skill_create.ts","../../src/tools/builtin/ai/tool_create.ts","../../src/tools/builtin/ai/memory_store.ts","../../src/tools/builtin/ai/subagent.ts","../../src/tools/builtin/system/process_list.ts","../../src/tools/builtin/system/system_info.ts","../../src/tools/builtin/system/resource_monitor.ts","../../src/tools/builtin/system/notify_user.ts","../../src/tools/builtin/system/log_viewer.ts","../../src/tools/builtin/index.ts","../../src/cli/chat-repl.ts","../../src/cli/commands/chat.ts","../../src/cli/index.ts"],"sourcesContent":["import { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport process from 'node:process';\n\nexport const DEEPER_VERSION = '1.0.0';\nexport const DEEPER_NAME = 'DeeperCode';\nexport const DEEPER_HOME = join(process.env.DEEPER_HOME || join(homedir(), '.deeper'));\nexport const DEEPER_CONFIG_FILE = join(DEEPER_HOME, 'config.json');\nexport const DEEPER_MCP_FILE = join(DEEPER_HOME, 'mcp.json');\nexport const DEEPER_SKILLS_DIR = join(DEEPER_HOME, 'skills');\nexport const DEEPER_SESSIONS_DIR = join(DEEPER_HOME, 'sessions');\nexport const DEEPER_LOGS_DIR = join(DEEPER_HOME, 'logs');\nexport const DEEPER_MEMORY_FILE = join(DEEPER_HOME, 'memory.json');\nexport const PROJECT_CONFIG_DIR = '.deeper';\nexport const PROJECT_CONFIG_FILE = join(PROJECT_CONFIG_DIR, 'config.json');\nexport const PROJECT_SKILLS_DIR = join(PROJECT_CONFIG_DIR, 'skills');\n\nexport const DEEPSEEK_BASE_URL = 'https://api.deepseek.com';\nexport const DEEPSEEK_DEFAULT_MODEL = 'deepseek-v4-pro';\nexport const DEEPSEEK_MODELS = ['deepseek-v4-pro', 'deepseek-v4-flash'] as const;\nexport type DeepSeekModel = typeof DEEPSEEK_MODELS[number];\nexport const DEEPSEEK_MAX_TOKENS = 1_048_576;\nexport const DEEPSEEK_THINK_BUDGET = 16000;\n\nexport const AGENT_MAX_SUB_AGENTS = 5;\nexport const AGENT_MAX_RECURSION_DEPTH = 2;\nexport const AGENT_SUB_AGENT_TIMEOUT_MS = 120000;\nexport const AGENT_MAX_CONCURRENT_TOOLS = 3;\n\nexport const CONTEXT_MAX_TOKENS = 1_048_576;\nexport const CONTEXT_AUTO_SUMMARIZE_THRESHOLD = 786_432;\nexport const CONTEXT_HISTORY_SIZE = 80;\nexport const CONTEXT_FILE_LIMIT = 50_000;\n\nexport const CONTEXT_COMPRESSION_STAGES = [\n { threshold: 0.7, strategy: 'light' },\n { threshold: 0.85, strategy: 'aggressive' },\n { threshold: 0.95, strategy: 'emergency' },\n] as const;\n\nexport const MCP_CONNECTION_TIMEOUT_MS = 10000;\n\nexport const TOOL_CATEGORIES = [\n 'filesystem', 'search', 'shell', 'network',\n 'code', 'database', 'data', 'security',\n 'project', 'ai', 'system',\n] as const;\n\nexport type ToolCategory = typeof TOOL_CATEGORIES[number];\n","import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport process from 'node:process';\nimport { DEEPER_CONFIG_FILE, PROJECT_CONFIG_FILE, DEEPSEEK_DEFAULT_MODEL, DEEPSEEK_BASE_URL } from './constants.js';\n\nexport interface MCPConfigEntry {\n name: string;\n command?: string;\n args?: string[];\n url?: string;\n enabled: boolean;\n autoConnect: boolean;\n}\n\nexport interface SkillConfigEntry {\n name: string;\n path: string;\n enabled: boolean;\n autoLoad: boolean;\n}\n\nexport interface DeeperConfig {\n model: string;\n apiKey: string;\n baseUrl: string;\n temperature: number;\n maxTokens: number;\n thinkEnabled: boolean;\n thinkBudget: number;\n thinkBudgetTokens: number;\n logLevel: string;\n maxRetries: number;\n timeoutMs: number;\n maxSubAgents: number;\n maxRecursionDepth: number;\n theme: 'dark' | 'light';\n locale: string;\n mcpServers: MCPConfigEntry[];\n skills: SkillConfigEntry[];\n [key: string]: unknown;\n}\n\nconst DEFAULT_CONFIG: DeeperConfig = {\n model: DEEPSEEK_DEFAULT_MODEL,\n apiKey: process.env.DEEPSEEK_API_KEY || '',\n baseUrl: DEEPSEEK_BASE_URL,\n temperature: 0.7,\n maxTokens: 8192,\n thinkEnabled: true,\n thinkBudget: 32000,\n thinkBudgetTokens: 32000,\n logLevel: 'info',\n maxRetries: 3,\n timeoutMs: 120000,\n maxSubAgents: 5,\n maxRecursionDepth: 2,\n theme: 'dark',\n locale: 'zh-CN',\n mcpServers: [],\n skills: [],\n};\n\nconst PROJECT_CONFIG_PATH = join(process.cwd(), PROJECT_CONFIG_FILE);\nconst USER_CONFIG_PATH = DEEPER_CONFIG_FILE;\n\nexport class ConfigManager {\n private defaults: DeeperConfig;\n private userConfig: Partial<DeeperConfig>;\n private projectConfig: Partial<DeeperConfig>;\n private envOverrides: Partial<DeeperConfig>;\n private cliOverrides: Partial<DeeperConfig>;\n\n constructor() {\n this.defaults = { ...DEFAULT_CONFIG };\n this.userConfig = {};\n this.projectConfig = {};\n this.envOverrides = {};\n this.cliOverrides = {};\n }\n\n load(): void {\n this.userConfig = this.readJSONFile(USER_CONFIG_PATH);\n this.projectConfig = this.readJSONFile(PROJECT_CONFIG_PATH);\n this.envOverrides = this.readEnvOverrides();\n }\n\n save(scope: 'user' | 'project'): void {\n const configPath = scope === 'user' ? USER_CONFIG_PATH : PROJECT_CONFIG_PATH;\n const currentConfig = scope === 'user' ? this.userConfig : this.projectConfig;\n const dir = dirname(configPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(configPath, JSON.stringify(currentConfig, null, 2), 'utf-8');\n }\n\n get<K extends keyof DeeperConfig>(key: K): DeeperConfig[K] {\n if (key in this.cliOverrides) {\n return this.cliOverrides[key] as DeeperConfig[K];\n }\n if (key in this.envOverrides) {\n return this.envOverrides[key] as DeeperConfig[K];\n }\n if (key in this.projectConfig) {\n return this.projectConfig[key] as DeeperConfig[K];\n }\n if (key in this.userConfig) {\n return this.userConfig[key] as DeeperConfig[K];\n }\n return this.defaults[key];\n }\n\n set<K extends keyof DeeperConfig>(key: K, value: DeeperConfig[K], scope: 'cli' | 'project' | 'user'): void {\n switch (scope) {\n case 'cli':\n this.cliOverrides[key] = value;\n break;\n case 'project':\n this.projectConfig[key] = value;\n break;\n case 'user':\n this.userConfig[key] = value;\n break;\n }\n }\n\n setCliOverrides(overrides: Partial<DeeperConfig>): void {\n this.cliOverrides = { ...overrides };\n }\n\n getAll(): DeeperConfig {\n return {\n ...this.defaults,\n ...this.userConfig,\n ...this.projectConfig,\n ...this.envOverrides,\n ...this.cliOverrides,\n };\n }\n\n private readJSONFile(path: string): Partial<DeeperConfig> {\n try {\n if (existsSync(path)) {\n const content = readFileSync(path, 'utf-8');\n return JSON.parse(content) as Partial<DeeperConfig>;\n }\n } catch {\n }\n return {};\n }\n\n private readEnvOverrides(): Partial<DeeperConfig> {\n const overrides: Partial<DeeperConfig> = {};\n const envMap: Record<string, keyof DeeperConfig> = {\n DEEPER_MODEL: 'model',\n DEEPER_API_KEY: 'apiKey',\n DEEPER_BASE_URL: 'baseUrl',\n DEEPER_TEMPERATURE: 'temperature',\n DEEPER_MAX_TOKENS: 'maxTokens',\n DEEPER_THINK_ENABLED: 'thinkEnabled',\n DEEPER_THINK_BUDGET: 'thinkBudget',\n DEEPER_LOG_LEVEL: 'logLevel',\n DEEPER_MAX_RETRIES: 'maxRetries',\n DEEPER_TIMEOUT: 'timeoutMs',\n };\n\n for (const [envKey, configKey] of Object.entries(envMap)) {\n const value = process.env[envKey];\n if (value !== undefined) {\n switch (typeof DEFAULT_CONFIG[configKey]) {\n case 'number':\n (overrides as Record<string, unknown>)[configKey] = Number(value);\n break;\n case 'boolean':\n (overrides as Record<string, unknown>)[configKey] = value.toLowerCase() === 'true' || value === '1';\n break;\n default:\n (overrides as Record<string, unknown>)[configKey] = value;\n break;\n }\n }\n }\n\n return overrides;\n }\n}\n\nlet cachedConfig: DeeperConfig | null = null;\n\nconst KEY_ALIASES: Record<string, keyof DeeperConfig> = {\n api_key: 'apiKey',\n 'api-key': 'apiKey',\n base_url: 'baseUrl',\n 'base-url': 'baseUrl',\n max_tokens: 'maxTokens',\n 'max-tokens': 'maxTokens',\n think_enabled: 'thinkEnabled',\n 'think-enabled': 'thinkEnabled',\n think_budget: 'thinkBudget',\n 'think-budget': 'thinkBudget',\n log_level: 'logLevel',\n 'log-level': 'logLevel',\n max_retries: 'maxRetries',\n 'max-retries': 'maxRetries',\n timeout_ms: 'timeoutMs',\n 'timeout-ms': 'timeoutMs',\n max_sub_agents: 'maxSubAgents',\n 'max-sub-agents': 'maxSubAgents',\n max_recursion_depth: 'maxRecursionDepth',\n 'max-recursion-depth': 'maxRecursionDepth',\n mcp_servers: 'mcpServers',\n 'mcp-servers': 'mcpServers',\n};\n\nfunction normalizeConfig(raw: Record<string, unknown>): Partial<DeeperConfig> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(raw)) {\n const canonical = KEY_ALIASES[key] || key;\n result[canonical] = value;\n }\n return result as Partial<DeeperConfig>;\n}\n\nexport function loadConfig(): DeeperConfig {\n if (cachedConfig) return cachedConfig;\n try {\n if (existsSync(DEEPER_CONFIG_FILE)) {\n const raw = readFileSync(DEEPER_CONFIG_FILE, 'utf-8');\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n cachedConfig = { ...DEFAULT_CONFIG, ...normalizeConfig(parsed) };\n } else {\n cachedConfig = { ...DEFAULT_CONFIG };\n }\n } catch {\n cachedConfig = { ...DEFAULT_CONFIG };\n }\n return cachedConfig;\n}\n\nexport function saveConfig(config?: DeeperConfig): void {\n if (config) cachedConfig = { ...config };\n if (!cachedConfig) cachedConfig = { ...DEFAULT_CONFIG };\n const dir = dirname(DEEPER_CONFIG_FILE);\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n writeFileSync(DEEPER_CONFIG_FILE, JSON.stringify(cachedConfig, null, 2), 'utf-8');\n}\n\nexport function getConfig(): DeeperConfig {\n return cachedConfig ?? loadConfig();\n}\n\nexport function updateConfig(partial: Partial<DeeperConfig>): DeeperConfig {\n const current = getConfig();\n cachedConfig = { ...current, ...partial };\n saveConfig();\n return cachedConfig;\n}\n\nexport function resetConfig(): DeeperConfig {\n cachedConfig = { ...DEFAULT_CONFIG };\n saveConfig();\n return cachedConfig;\n}\n\nexport function getConfigValue<K extends keyof DeeperConfig>(key: K): DeeperConfig[K] {\n return getConfig()[key];\n}\n\nexport function setConfigValue<K extends keyof DeeperConfig>(key: K, value: DeeperConfig[K]): void {\n updateConfig({ [key]: value } as unknown as Partial<DeeperConfig>);\n}\n\nexport function getApiKey(): string {\n return getConfig().apiKey || process.env.DEEPSEEK_API_KEY || '';\n}\n\nexport function getModel(): string {\n return getConfig().model;\n}\n\nexport function getBaseUrl(): string {\n return getConfig().baseUrl;\n}\n\nexport const configManager = { load: () => loadConfig(), save: saveConfig, get: getConfigValue, set: setConfigValue, getAll: getConfig };\n","import { existsSync, mkdirSync } from 'node:fs';\nimport { DEEPER_HOME, DEEPER_CONFIG_FILE, DEEPER_SKILLS_DIR, DEEPER_SESSIONS_DIR, DEEPER_LOGS_DIR, DEEPER_VERSION } from '../core/constants.ts';\nimport { loadConfig } from '../core/config.ts';\nimport { eventbus } from '../core/eventbus.ts';\n\nexport interface BootstrapResult {\n success: boolean;\n errors: string[];\n warnings: string[];\n config: ReturnType<typeof loadConfig>;\n}\n\nexport async function bootstrap(): Promise<BootstrapResult> {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n const nodeVersion = process.versions.node;\n const majorVersion = parseInt(nodeVersion.split('.')[0], 10);\n if (majorVersion < 20) {\n errors.push(`Node.js 版本过低: ${nodeVersion},需要 >= 20.0.0`);\n return { success: false, errors, warnings, config: loadConfig() };\n }\n\n const dirs = [\n DEEPER_HOME,\n DEEPER_SKILLS_DIR,\n DEEPER_SESSIONS_DIR,\n DEEPER_LOGS_DIR,\n ];\n\n for (const dir of dirs) {\n try {\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n } catch {\n errors.push(`无法创建目录: ${dir}`);\n }\n }\n\n let config;\n try {\n config = loadConfig();\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n errors.push(`配置加载失败: ${msg}`);\n config = loadConfig();\n }\n\n if (!config.apiKey && !process.env.DEEPSEEK_API_KEY) {\n warnings.push('未设置 API Key。请运行: deeper config set api_key \"sk-你的密钥\"');\n }\n\n if (errors.length > 0) {\n return { success: false, errors, warnings, config };\n }\n\n return { success: true, errors, warnings, config };\n}\n\nexport function checkNodeVersion(): boolean {\n const nodeVersion = process.versions.node;\n const majorVersion = parseInt(nodeVersion.split('.')[0], 10);\n return majorVersion >= 20;\n}\n\nexport function getVersionInfo(): string {\n return `DeeperCode v${DEEPER_VERSION} | Node.js ${process.versions.node} | ${process.platform} ${process.arch}`;\n}\n","import { loadConfig } from '../../core/config.ts';\nimport { bootstrap } from '../bootstrap.ts';\nimport type { DeeperConfig } from '../../core/config.ts';\n\ninterface RunOptions {\n task?: string;\n model?: string;\n apiKey?: string;\n files?: string[];\n}\n\nexport async function run(task: string, opts: RunOptions = {}): Promise<void> {\n const result = await bootstrap();\n\n if (!result.success) {\n for (const err of result.errors) {\n console.error(`❌ ${err}`);\n }\n process.exit(1);\n }\n\n if (!task) {\n console.error('❌ 请提供任务描述。用法: deeper run \"任务描述\"');\n process.exit(1);\n }\n\n const config = opts.model || opts.apiKey\n ? { ...result.config, ...(opts.model ? { model: opts.model } : {}), ...(opts.apiKey ? { apiKey: opts.apiKey } : {}) }\n : result.config;\n\n if (!config.apiKey && !process.env.DEEPSEEK_API_KEY) {\n console.error('❌ 未设置 API Key');\n console.error(' 请设置环境变量 DEEPSEEK_API_KEY 或使用 --api-key 参数');\n process.exit(1);\n }\n\n console.log(`\\n🚀 DeeperCode 执行任务\\n`);\n console.log(`📋 任务: ${task}`);\n console.log(`🤖 模型: ${config.model}`);\n console.log(`🔗 API: ${config.baseUrl}`);\n console.log();\n\n console.log('⏳ 正在连接 DeepSeek API...');\n console.log();\n\n try {\n const apiKey = config.apiKey || process.env.DEEPSEEK_API_KEY || '';\n const response = await fetch(`${config.baseUrl}/v1/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({\n model: config.model,\n messages: [\n {\n role: 'system',\n content: '你是一个强大的 AI 编程助手。请帮助用户完成任务。',\n },\n {\n role: 'user',\n content: task,\n },\n ],\n stream: true,\n max_tokens: Math.max(1, Math.min(config.maxTokens || 4096, 131072)),\n }),\n });\n\n if (!response.ok) {\n const text = await response.text();\n console.error(`❌ API 请求失败 (${response.status}): ${text}`);\n process.exit(1);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n console.error('❌ 无法读取响应流');\n process.exit(1);\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n let fullContent = '';\n let thinkingContent = '';\n\n console.log('📝 AI 响应:\\n');\n console.log('─'.repeat(60));\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed.startsWith('data: ')) continue;\n\n const data = trimmed.slice(6);\n if (data === '[DONE]') continue;\n\n try {\n const parsed = JSON.parse(data);\n const delta = parsed.choices?.[0]?.delta;\n\n if (delta?.thinking) {\n thinkingContent += delta.thinking;\n }\n\n if (delta?.content) {\n fullContent += delta.content;\n process.stdout.write(delta.content);\n }\n } catch {\n // 跳过无法解析的行\n }\n }\n }\n\n console.log('\\n' + '─'.repeat(60));\n console.log();\n\n if (thinkingContent) {\n console.log('💭 思考过程:');\n console.log('─'.repeat(60));\n console.log(thinkingContent.slice(0, 500));\n if (thinkingContent.length > 500) {\n console.log(`... (还有 ${thinkingContent.length - 500} 字符)`);\n }\n console.log('─'.repeat(60));\n }\n\n const usage = `📊 Token: ~${fullContent.length} 输出`;\n console.log(usage);\n console.log();\n\n console.log('✅ 任务执行完成!');\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(`❌ 请求失败: ${msg}`);\n process.exit(1);\n }\n}\n","import { getConfig, updateConfig, resetConfig, type DeeperConfig } from '../../core/config.ts';\nimport { loadConfig } from '../../core/config.ts';\nimport { DEEPER_CONFIG_FILE } from '../../core/constants.ts';\n\nexport async function configCommand(args: string[]): Promise<void> {\n loadConfig();\n const subcommand = args[0] || 'list';\n\n switch (subcommand) {\n case 'list':\n case 'ls': {\n const config = getConfig();\n console.log('\\n📋 DeeperCode 配置:\\n');\n const displayKeys: { key: string; value: unknown; mask?: boolean }[] = [\n { key: 'model', value: config.model },\n { key: 'baseUrl', value: config.baseUrl },\n { key: 'apiKey', value: config.apiKey || '', mask: true },\n { key: 'maxTokens', value: config.maxTokens },\n { key: 'thinkBudget', value: config.thinkBudget },\n { key: 'thinkEnabled', value: config.thinkEnabled },\n { key: 'temperature', value: config.temperature },\n { key: 'maxSubAgents', value: config.maxSubAgents },\n { key: 'maxRecursionDepth', value: config.maxRecursionDepth },\n { key: 'timeoutMs', value: config.timeoutMs },\n { key: 'theme', value: config.theme },\n { key: 'locale', value: config.locale },\n ];\n for (const { key, value, mask } of displayKeys) {\n const raw = String(value ?? '');\n const display = mask\n ? (raw ? `${raw.slice(0, 8)}...${raw.slice(-4)}` : '(未设置)')\n : JSON.stringify(value);\n console.log(` ${key.padEnd(20)} ${display}`);\n }\n console.log();\n break;\n }\n\n case 'get': {\n const rawKey = args[1];\n if (!rawKey) {\n console.error('❌ 用法: deeper config get <key>');\n process.exit(1);\n }\n const KEY_ALIASES: Record<string, string> = {\n api_key: 'apiKey', 'api-key': 'apiKey', apikey: 'apiKey', key: 'apiKey',\n };\n const key = KEY_ALIASES[rawKey.toLowerCase()] || rawKey;\n const config = getConfig();\n const value = (config as Record<string, unknown>)[key];\n if (value === undefined) {\n console.error(`❌ 未知配置项: ${rawKey}`);\n process.exit(1);\n }\n if (key === 'apiKey') {\n const str = String(value || '');\n console.log(str ? `${str.slice(0, 8)}...${str.slice(-4)}` : '(未设置)');\n } else {\n console.log(JSON.stringify(value, null, 2));\n }\n break;\n }\n\n case 'set': {\n const rawKey = args[1];\n const rawValue = args[2];\n if (!rawKey || rawValue === undefined) {\n console.error('❌ 用法: deeper config set <key> <value>');\n process.exit(1);\n }\n\n const KEY_ALIASES: Record<string, string> = {\n api_key: 'apiKey', 'api-key': 'apiKey', apikey: 'apiKey', key: 'apiKey',\n base_url: 'baseUrl', 'base-url': 'baseUrl',\n max_tokens: 'maxTokens', 'max-tokens': 'maxTokens',\n think_budget: 'thinkBudget', 'think-budget': 'thinkBudget',\n think_enabled: 'thinkEnabled', 'think-enabled': 'thinkEnabled',\n log_level: 'logLevel', 'log-level': 'logLevel',\n max_retries: 'maxRetries', 'max-retries': 'maxRetries',\n timeout_ms: 'timeoutMs', 'timeout-ms': 'timeoutMs',\n max_sub_agents: 'maxSubAgents', 'max-sub-agents': 'maxSubAgents',\n max_recursion_depth: 'maxRecursionDepth', 'max-recursion-depth': 'maxRecursionDepth',\n };\n const key = KEY_ALIASES[rawKey.toLowerCase()] || rawKey;\n\n try {\n let parsedValue: unknown = rawValue;\n if (rawValue === 'true') parsedValue = true;\n else if (rawValue === 'false') parsedValue = false;\n else if (!isNaN(Number(rawValue))) parsedValue = Number(rawValue);\n\n updateConfig({ [key]: parsedValue } as Partial<DeeperConfig>);\n console.log(`✅ 已设置 ${key} = ${JSON.stringify(parsedValue)}`);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(`❌ 设置失败: ${msg}`);\n process.exit(1);\n }\n break;\n }\n\n case 'reset': {\n const config = resetConfig();\n console.log('✅ 配置已重置为默认值');\n console.log(JSON.stringify(config, null, 2));\n break;\n }\n\n case 'path': {\n console.log(`配置文件路径: ${DEEPER_CONFIG_FILE}`);\n break;\n }\n\n default: {\n console.log(`\n📋 DeeperCode 配置管理\n\n用法:\n deeper config list 列出所有配置\n deeper config get <key> 获取配置项\n deeper config set <key> <value> 设置配置项\n deeper config reset 重置配置\n deeper config path 显示配置文件路径\n\n示例:\n deeper config set model deepseek-v4-pro\n deeper config set theme light\n deeper config get apiKey\n`);\n break;\n }\n }\n}\n","import { readdirSync, existsSync, readFileSync, mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { bootstrap } from '../bootstrap.ts';\nimport { DEEPER_SKILLS_DIR, PROJECT_SKILLS_DIR } from '../../core/constants.ts';\n\nexport async function skillCommand(args: string[]): Promise<void> {\n const result = await bootstrap();\n if (!result.success) {\n for (const err of result.errors) {\n console.error(`❌ ${err}`);\n }\n process.exit(1);\n }\n\n const subcommand = args[0] || 'list';\n\n switch (subcommand) {\n case 'list':\n case 'ls': {\n console.log('\\n🧩 DeeperCode Skills:\\n');\n\n const homeSkills = listSkills(DEEPER_SKILLS_DIR);\n console.log(`📁 全局 Skills (${DEEPER_SKILLS_DIR}):`);\n if (homeSkills.length === 0) {\n console.log(' (无)');\n } else {\n for (const skill of homeSkills) {\n console.log(` 📦 ${skill.name} - ${skill.description}`);\n }\n }\n\n const cwd = process.cwd();\n const projectSkillsDir = join(cwd, PROJECT_SKILLS_DIR);\n if (existsSync(projectSkillsDir)) {\n const projectSkills = listSkills(projectSkillsDir);\n console.log(`\\n📁 项目 Skills (${projectSkillsDir}):`);\n if (projectSkills.length === 0) {\n console.log(' (无)');\n } else {\n for (const skill of projectSkills) {\n console.log(` 📦 ${skill.name} - ${skill.description}`);\n }\n }\n }\n\n console.log();\n break;\n }\n\n case 'create': {\n const name = args[1];\n if (!name) {\n console.error('❌ 用法: deeper skill create <name>');\n process.exit(1);\n }\n\n const targetDir = join(DEEPER_SKILLS_DIR, name);\n if (existsSync(targetDir)) {\n console.error(`❌ Skill \"${name}\" 已存在`);\n process.exit(1);\n }\n\n try {\n mkdirSync(targetDir, { recursive: true });\n const skillDef = {\n name,\n version: '1.0.0',\n description: `${name} 技能`,\n triggers: [],\n steps: [],\n };\n writeFileSync(\n join(targetDir, 'skill.json'),\n JSON.stringify(skillDef, null, 2),\n 'utf-8',\n );\n console.log(`✅ Skill \"${name}\" 已创建: ${targetDir}`);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(`❌ 创建失败: ${msg}`);\n process.exit(1);\n }\n break;\n }\n\n case 'info': {\n const name = args[1];\n if (!name) {\n console.error('❌ 用法: deeper skill info <name>');\n process.exit(1);\n }\n\n const skillPath = join(DEEPER_SKILLS_DIR, name, 'skill.json');\n if (!existsSync(skillPath)) {\n console.error(`❌ Skill \"${name}\" 不存在`);\n process.exit(1);\n }\n\n try {\n const content = readFileSync(skillPath, 'utf-8');\n const skillDef = JSON.parse(content);\n console.log(JSON.stringify(skillDef, null, 2));\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(`❌ 读取失败: ${msg}`);\n process.exit(1);\n }\n break;\n }\n\n default: {\n console.log(`\n🧩 DeeperCode Skill 管理\n\n用法:\n deeper skill list 列出所有 Skills\n deeper skill create <name> 创建新 Skill\n deeper skill info <name> 查看 Skill 详情\n\n示例:\n deeper skill list\n deeper skill create my-skill\n deeper skill info my-skill\n`);\n break;\n }\n }\n}\n\nfunction listSkills(dir: string): { name: string; description: string }[] {\n try {\n if (!existsSync(dir)) return [];\n const entries = readdirSync(dir, { withFileTypes: true });\n return entries\n .filter((e) => e.isDirectory())\n .map((e) => {\n const skillFile = join(dir, e.name, 'skill.json');\n if (existsSync(skillFile)) {\n try {\n const content = readFileSync(skillFile, 'utf-8');\n const def = JSON.parse(content);\n return { name: def.name || e.name, description: def.description || '' };\n } catch {\n return { name: e.name, description: '' };\n }\n }\n return { name: e.name, description: '' };\n });\n } catch {\n return [];\n }\n}\n","import { existsSync, readFileSync } from 'node:fs';\nimport { bootstrap } from '../bootstrap.ts';\nimport { DEEPER_MCP_FILE } from '../../core/constants.ts';\nimport { getConfig, updateConfig, type MCPConfigEntry } from '../../core/config.ts';\n\nexport async function mcpCommand(args: string[]): Promise<void> {\n const result = await bootstrap();\n if (!result.success) {\n for (const err of result.errors) {\n console.error(`❌ ${err}`);\n }\n process.exit(1);\n }\n\n const subcommand = args[0] || 'list';\n\n switch (subcommand) {\n case 'list':\n case 'ls': {\n const config = getConfig();\n const servers = config.mcpServers || [];\n\n console.log('\\n🔌 MCP 服务器:\\n');\n\n if (servers.length === 0) {\n console.log(' (未配置任何 MCP 服务器)');\n console.log();\n console.log(' 使用 \"deeper mcp add\" 添加 MCP 服务器');\n } else {\n for (const server of servers) {\n const status = server.enabled ? '✅ 启用' : '⏸ 禁用';\n const type = server.url ? 'SSE/HTTP' : 'Stdio';\n console.log(` 📡 ${server.name.padEnd(20)} ${status} | ${type}`);\n if (server.command) {\n console.log(` 命令: ${server.command} ${(server.args || []).join(' ')}`);\n }\n if (server.url) {\n console.log(` URL: ${server.url}`);\n }\n if (server.autoConnect) {\n console.log(` 🔗 自动连接`);\n }\n }\n }\n console.log();\n break;\n }\n\n case 'add': {\n const name = args[1];\n const type = args[2];\n\n if (!name) {\n console.error('❌ 用法: deeper mcp add <name> stdio <command> [args...]');\n console.error(' deeper mcp add <name> sse <url>');\n process.exit(1);\n }\n\n const config = getConfig();\n const servers = [...(config.mcpServers || [])];\n\n if (servers.find((s) => s.name === name)) {\n console.error(`❌ MCP 服务器 \"${name}\" 已存在`);\n process.exit(1);\n }\n\n if (type === 'stdio') {\n const command = args[3];\n if (!command) {\n console.error('❌ 请提供命令');\n process.exit(1);\n }\n const cmdArgs = args.slice(4);\n servers.push({\n name,\n command,\n args: cmdArgs,\n enabled: true,\n autoConnect: true,\n });\n } else if (type === 'sse' || type === 'http') {\n const url = args[3];\n if (!url) {\n console.error('❌ 请提供 URL');\n process.exit(1);\n }\n servers.push({\n name,\n url,\n enabled: true,\n autoConnect: true,\n });\n } else {\n console.error('❌ 未知类型。支持: stdio, sse');\n process.exit(1);\n }\n\n updateConfig({ mcpServers: servers } as any);\n console.log(`✅ MCP 服务器 \"${name}\" 已添加`);\n break;\n }\n\n case 'remove':\n case 'rm': {\n const name = args[1];\n if (!name) {\n console.error('❌ 用法: deeper mcp remove <name>');\n process.exit(1);\n }\n\n const config = getConfig();\n const servers = (config.mcpServers || []).filter((s) => s.name !== name);\n\n if (servers.length === config.mcpServers?.length) {\n console.error(`❌ MCP 服务器 \"${name}\" 不存在`);\n process.exit(1);\n }\n\n updateConfig({ mcpServers: servers } as any);\n console.log(`✅ MCP 服务器 \"${name}\" 已移除`);\n break;\n }\n\n case 'connect': {\n const name = args[1];\n if (!name) {\n console.error('❌ 用法: deeper mcp connect <name>');\n process.exit(1);\n }\n console.log(`🔌 连接 MCP 服务器 \"${name}\"...`);\n console.log('💡 在 REPL 中使用 /mcp 查看已连接的服务器');\n break;\n }\n\n case 'config': {\n const filePath = DEEPER_MCP_FILE;\n if (existsSync(filePath)) {\n try {\n const content = readFileSync(filePath, 'utf-8');\n console.log(`📄 MCP 配置文件: ${filePath}`);\n console.log(content);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(`❌ 读取失败: ${msg}`);\n }\n } else {\n console.log(`MCP 配置文件不存在: ${filePath}`);\n }\n break;\n }\n\n default: {\n console.log(`\n🔌 DeeperCode MCP 管理\n\n用法:\n deeper mcp list 列出所有 MCP 服务器\n deeper mcp add <name> stdio <cmd> [args] 添加 Stdio MCP 服务器\n deeper mcp add <name> sse <url> 添加 SSE/HTTP MCP 服务器\n deeper mcp remove <name> 移除 MCP 服务器\n deeper mcp connect <name> 连接 MCP 服务器\n deeper mcp config 查看 MCP 配置文件\n\n示例:\n deeper mcp add filesystem stdio npx -y @modelcontextprotocol/server-filesystem\n deeper mcp add myserver sse http://localhost:3001\n deeper mcp remove myserver\n`);\n break;\n }\n }\n}\n","export interface JSONSchema {\n type: string;\n properties?: Record<string, JSONSchema>;\n required?: string[];\n description?: string;\n enum?: string[];\n items?: JSONSchema;\n additionalProperties?: boolean;\n}\n\nexport interface ToolParameter {\n name: string;\n type: string;\n description: string;\n required: boolean;\n default?: unknown;\n enum?: string[];\n}\n\nexport interface ToolDefinition {\n name: string;\n description: string;\n category: string;\n parameters: JSONSchema;\n dangerous?: boolean;\n requiresApproval?: boolean;\n}\n\nexport interface ToolResult {\n success: boolean;\n output: string;\n error?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface ToolExecutor {\n execute(params: Record<string, unknown>, signal?: AbortSignal): Promise<ToolResult>;\n}\n\nexport type Tool = ToolDefinition & ToolExecutor;\n\nexport interface ToolCall {\n id: string;\n name: string;\n arguments: Record<string, unknown>;\n index?: number;\n}\n\nexport interface ToolCallResult {\n callId: string;\n result: ToolResult;\n timestamp: number;\n}\n\nexport type ToolSafetyLevel = 'safe' | 'confirm' | 'dangerous';\n\nexport const TOOL_SAFETY_MAP: Record<string, ToolSafetyLevel> = {\n read_file: 'safe', list_dir: 'safe', glob_find: 'safe', file_info: 'safe',\n grep_search: 'safe', text_search: 'safe', fuzzy_find: 'safe', regex_find: 'safe',\n find_references: 'safe', find_definition: 'safe', symbol_search: 'safe',\n search_package: 'safe', search_docs: 'safe', codebase_search: 'safe',\n token_count: 'safe', system_info: 'safe', process_list: 'safe',\n resource_monitor: 'safe', log_viewer: 'safe', bug_scan: 'safe',\n web_fetch: 'safe', web_search: 'safe', check_url: 'safe',\n parse_html: 'safe', http_request: 'safe',\n watch_file: 'safe', batch_read: 'safe', create_dir: 'safe',\n json_parse: 'safe', csv_parse: 'safe', xml_parse: 'safe', yaml_parse: 'safe', toml_parse: 'safe',\n data_validate: 'safe', data_diff: 'safe', hash_generate: 'safe', jwt_decode: 'safe',\n coverage_report: 'safe', config_manage: 'safe', notify_user: 'safe',\n format_code: 'safe', lint_code: 'safe', type_check: 'safe', code_metrics: 'safe',\n analyze_deps: 'safe', import_organizer: 'safe', parse_ast: 'safe',\n db_schema: 'safe',\n context_summarize: 'safe', prompt_template: 'safe',\n skill_create: 'safe', tool_create: 'safe', memory_store: 'safe',\n todo_manager: 'safe', subagent: 'safe',\n background_terminal: 'safe', list_terminals: 'safe', read_terminal: 'safe',\n send_keys: 'safe', send_ctrl_keys: 'safe', send_text: 'safe', kill_terminal: 'safe',\n terminal_screenshot: 'safe', terminal_resize: 'safe', check_status: 'safe', stop_command: 'safe',\n download_file: 'safe', api_call: 'safe', graphql_query: 'safe', websocket_connect: 'safe',\n\n write_file: 'safe', edit_file: 'safe',\n delete_file: 'confirm', move_file: 'confirm', copy_file: 'confirm', batch_write: 'safe',\n merge_files: 'confirm', diff_files: 'confirm',\n run_command: 'safe', run_async: 'safe', pipe_commands: 'safe',\n shell_script: 'confirm', npm_manage: 'confirm',\n project_init: 'confirm', build_project: 'confirm', run_test: 'confirm',\n docker_manage: 'confirm', env_manage: 'confirm',\n sql_query: 'confirm', sql_migrate: 'confirm', nosql_query: 'confirm',\n db_backup: 'confirm', db_restore: 'confirm', redis_command: 'confirm',\n encrypt_file: 'confirm', decrypt_file: 'confirm',\n template_render: 'confirm', chart_generate: 'confirm',\n secret_scan: 'confirm', vulnerability_check: 'confirm',\n orm_generate: 'confirm', generate_code: 'confirm', refactor_code: 'confirm',\n extract_function: 'confirm', data_transform: 'confirm', proxy_request: 'confirm',\n\n interactive_terminal: 'confirm',\n browser_action: 'confirm', screenshot_page: 'confirm',\n};\n","import type { Tool, ToolResult, JSONSchema } from './tool-types.js';\n\nfunction getPropType(schema: JSONSchema, path: string): string {\n return schema.type ?? 'any';\n}\n\nfunction checkRequired(\n params: Record<string, unknown>,\n schema: JSONSchema,\n errors: string[]\n): void {\n const required = schema.required ?? [];\n for (const key of required) {\n if (!(key in params) || params[key] === undefined) {\n errors.push(`缺少必需参数: ${key}`);\n }\n }\n}\n\nfunction checkTypes(\n params: Record<string, unknown>,\n schema: JSONSchema,\n path: string,\n errors: string[]\n): void {\n const props = schema.properties;\n if (!props) return;\n\n for (const [key, propSchema] of Object.entries(props)) {\n const value = params[key];\n const fullPath = path ? `${path}.${key}` : key;\n\n if (value === undefined || value === null) continue;\n\n switch (propSchema.type) {\n case 'string':\n if (typeof value !== 'string') {\n errors.push(`参数 \"${fullPath}\" 应为字符串类型`);\n }\n if (propSchema.enum && !propSchema.enum.includes(value as string)) {\n errors.push(`参数 \"${fullPath}\" 值不在允许范围内: ${propSchema.enum.join(', ')}`);\n }\n break;\n case 'number':\n case 'integer':\n if (typeof value !== 'number') {\n errors.push(`参数 \"${fullPath}\" 应为数字类型`);\n }\n break;\n case 'boolean':\n if (typeof value !== 'boolean') {\n errors.push(`参数 \"${fullPath}\" 应为布尔类型`);\n }\n break;\n case 'array':\n if (!Array.isArray(value)) {\n errors.push(`参数 \"${fullPath}\" 应为数组类型`);\n } else if (propSchema.items) {\n const itemSchema = propSchema.items;\n for (let i = 0; i < value.length; i++) {\n if (itemSchema.type === 'string' && typeof value[i] !== 'string') {\n errors.push(`参数 \"${fullPath}[${i}]\" 应为字符串类型`);\n } else if (itemSchema.type === 'number' && typeof value[i] !== 'number') {\n errors.push(`参数 \"${fullPath}[${i}]\" 应为数字类型`);\n }\n }\n }\n break;\n case 'object':\n if (typeof value !== 'object' || value === null) {\n errors.push(`参数 \"${fullPath}\" 应为对象类型`);\n } else if (propSchema.properties) {\n checkTypes(value as Record<string, unknown>, propSchema, fullPath, errors);\n }\n break;\n }\n }\n}\n\nexport class ToolValidator {\n validate(tool: Tool, params: Record<string, unknown>): ToolResult {\n const errors: string[] = [];\n const schema = tool.parameters;\n\n checkRequired(params, schema, errors);\n checkTypes(params, schema, '', errors);\n\n if (errors.length > 0) {\n return {\n success: false,\n output: '',\n error: `参数验证失败:\\n${errors.map(e => ` - ${e}`).join('\\n')}`,\n metadata: { validationErrors: errors },\n };\n }\n\n return { success: true, output: '参数验证通过' };\n }\n\n validateMany(tool: Tool, calls: Record<string, unknown>[]): ToolResult[] {\n return calls.map(params => this.validate(tool, params));\n }\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { DEEPER_HOME } from '../core/constants.js';\n\nexport interface MemoryEntry {\n id: string;\n type: 'working' | 'episodic' | 'semantic' | 'procedural';\n content: string;\n tags: string[];\n importance: number; // 0-10\n accuracy: number; // 0-10, 自评置信度\n createdAt: number;\n accessedAt: number;\n accessCount: number;\n sessionId: string;\n source: string; // 'user' | 'agent' | 'tool' | 'system'\n references: string[]; // 关联条目 ID\n}\n\ninterface XMemStats {\n totalEntries: number;\n byType: Record<string, number>;\n totalTokens: number;\n lastCleanup: number;\n}\n\nconst MEM_DIR = join(DEEPER_HOME, 'xmemory');\nconst STATS_FILE = join(MEM_DIR, 'stats.json');\nconst MAX_WORKING_MEM = 50;\nconst MAX_TOTAL_MEM = 2000;\nconst CLEANUP_THRESHOLD = 1500;\n\nlet currentSessionId = '';\n\nexport function setSessionId(id: string) { currentSessionId = id; }\n\nfunction uid(): string {\n return `mem_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n}\n\nfunction ensureDir(): void {\n if (!existsSync(MEM_DIR)) mkdirSync(MEM_DIR, { recursive: true });\n if (!existsSync(STATS_FILE)) {\n writeFileSync(STATS_FILE, JSON.stringify({ totalEntries: 0, byType: {}, totalTokens: 0, lastCleanup: Date.now() }), 'utf-8');\n }\n}\n\nfunction loadStats(): XMemStats {\n try {\n return JSON.parse(readFileSync(STATS_FILE, 'utf-8')) as XMemStats;\n } catch { return { totalEntries: 0, byType: {}, totalTokens: 0, lastCleanup: 0 }; }\n}\n\nfunction saveStats(s: XMemStats): void {\n writeFileSync(STATS_FILE, JSON.stringify(s, null, 2), 'utf-8');\n}\n\nexport class XMemory {\n private working: MemoryEntry[] = [];\n private index: Map<string, MemoryEntry> = new Map();\n private dirty = false;\n\n constructor() {\n ensureDir();\n }\n\n // ============ 写入 ============\n store(\n type: MemoryEntry['type'],\n content: string,\n tags: string[] = [],\n importance = 5,\n accuracy = 7,\n source: MemoryEntry['source'] = 'agent',\n references: string[] = [],\n ): string {\n const id = uid();\n const entry: MemoryEntry = {\n id, type, content: content.slice(0, 2000), tags,\n importance: Math.min(10, Math.max(0, importance)),\n accuracy: Math.min(10, Math.max(0, accuracy)),\n createdAt: Date.now(), accessedAt: Date.now(),\n accessCount: 1, sessionId: currentSessionId,\n source, references,\n };\n\n if (type === 'working') {\n this.working.push(entry);\n if (this.working.length > MAX_WORKING_MEM) {\n this.working.shift();\n }\n }\n\n this.index.set(id, entry);\n this.dirty = true;\n\n if (this.index.size > CLEANUP_THRESHOLD) {\n this.autoCleanup();\n }\n\n return id;\n }\n\n storeEpisodic(content: string, tags: string[] = [], importance = 5): string {\n return this.store('episodic', content, tags, importance, 7, 'agent');\n }\n\n storeSemantic(content: string, tags: string[] = [], importance = 7): string {\n return this.store('semantic', content, tags, importance, 9, 'agent');\n }\n\n storeProcedural(content: string, tags: string[] = [], importance = 8): string {\n return this.store('procedural', content, tags, importance, 9, 'agent');\n }\n\n storeWorking(content: string, tags: string[] = []): string {\n return this.store('working', content, tags, 3, 5, 'agent');\n }\n\n // ============ 检索 ============\n recall(query: string, limit = 5, minImportance = 0): MemoryEntry[] {\n const keywords = query.toLowerCase().split(/[\\s,,。]+/).filter(w => w.length > 1);\n if (keywords.length === 0) return [];\n\n const scored: Array<{ entry: MemoryEntry; score: number }> = [];\n const now = Date.now();\n\n for (const entry of this.index.values()) {\n if (entry.importance < minImportance) continue;\n let score = 0;\n const c = (entry.content || '').toLowerCase();\n const t = entry.tags.join(' ').toLowerCase();\n\n for (const kw of keywords) {\n if (c.includes(kw)) score += 3;\n if (t.includes(kw)) score += 2;\n if (entry.type === 'procedural' && c.includes(kw)) score += 1;\n }\n\n // 衰减: 重要度高 + 最近访问 权重高\n const age = (now - entry.accessedAt) / (1000 * 60 * 60);\n score += entry.importance * 0.5;\n score -= Math.min(age / 24, 5); // 每 24 小时衰减 max 5\n\n if (score > 0) scored.push({ entry, score });\n }\n\n scored.sort((a, b) => b.score - a.score);\n return scored.slice(0, limit).map(s => {\n s.entry.accessedAt = now;\n s.entry.accessCount++;\n return s.entry;\n });\n }\n\n getByType(type: MemoryEntry['type'], limit = 20): MemoryEntry[] {\n const res: MemoryEntry[] = [];\n for (const entry of this.index.values()) {\n if (entry.type === type) res.push(entry);\n }\n res.sort((a, b) => b.createdAt - a.createdAt);\n return res.slice(0, limit);\n }\n\n getWorking(): MemoryEntry[] {\n return this.working;\n }\n\n getWorkingContext(maxTokens = 2000): string {\n if (this.working.length === 0) return '';\n const lines = this.working.map(e => `[工作记忆] ${e.content.slice(0, 300)}`);\n let result = '';\n for (const line of lines) {\n if ((result + line).length > maxTokens * 4) break;\n result += line + '\\n';\n }\n return result;\n }\n\n getProceduralHints(task: string, limit = 5): string {\n const recalled = this.recall(task, limit, 3);\n const proc = recalled.filter(r => r.type === 'procedural' || r.type === 'semantic');\n if (proc.length === 0) return '';\n return '[记忆提示]\\n' + proc.map(p => `- ${p.content.slice(0, 250)}`).join('\\n');\n }\n\n getSessionSummary(): string {\n const entries = [...this.index.values()].filter(e => e.sessionId === currentSessionId);\n if (entries.length === 0) return '';\n const key = entries\n .filter(e => e.importance >= 5)\n .sort((a, b) => b.importance - a.importance)\n .slice(0, 8);\n return `[XMemory·本会话]\\n` + key.map(e => {\n const t = e.type === 'semantic' ? '知识' : e.type === 'procedural' ? '技能' : e.type === 'episodic' ? '经历' : '工作';\n return `[${t}] ${e.content.slice(0, 200)}`;\n }).join('\\n');\n }\n\n // ============ 持久化 ============\n async save(): Promise<void> {\n if (!this.dirty) return;\n ensureDir();\n\n // 分批写入:每个 type 一个文件\n const byType: Record<string, MemoryEntry[]> = {};\n for (const entry of this.index.values()) {\n if (!byType[entry.type]) byType[entry.type] = [];\n byType[entry.type].push(entry);\n }\n\n for (const [type, entries] of Object.entries(byType)) {\n const file = join(MEM_DIR, `${type}.json`);\n writeFileSync(file, JSON.stringify(entries.slice(-500)), 'utf-8'); // 每个类型最多 500 条\n }\n\n const stats = loadStats();\n stats.totalEntries = this.index.size;\n stats.byType = {};\n for (const entry of this.index.values()) {\n stats.byType[entry.type] = (stats.byType[entry.type] || 0) + 1;\n }\n stats.totalTokens = [...this.index.values()].reduce((s, e) => s + e.content.length, 0);\n saveStats(stats);\n\n this.dirty = false;\n }\n\n async load(): Promise<void> {\n ensureDir();\n let total = 0;\n\n for (const type of ['working', 'episodic', 'semantic', 'procedural']) {\n const file = join(MEM_DIR, `${type}.json`);\n if (!existsSync(file)) continue;\n try {\n const entries = JSON.parse(readFileSync(file, 'utf-8')) as MemoryEntry[];\n for (const entry of entries) {\n if (total > MAX_TOTAL_MEM) break;\n this.index.set(entry.id, entry);\n if (entry.type === 'working') this.working.push(entry);\n total++;\n }\n } catch { /* skip corrupt files */ }\n }\n\n if (this.working.length > MAX_WORKING_MEM) {\n this.working = this.working.slice(-MAX_WORKING_MEM);\n }\n }\n\n // ============ 维护 ============\n private autoCleanup(): void {\n const entries = [...this.index.values()];\n entries.sort((a, b) => {\n const scoreA = a.importance * 2 + a.accessCount - (Date.now() - a.accessedAt) / (1000 * 60 * 60 * 24);\n const scoreB = b.importance * 2 + b.accessCount - (Date.now() - b.accessedAt) / (1000 * 60 * 60 * 24);\n return scoreA - scoreB;\n });\n\n const toKeep = entries.slice(-500);\n this.index.clear();\n this.working = [];\n for (const entry of toKeep) {\n this.index.set(entry.id, entry);\n if (entry.type === 'working') this.working.push(entry);\n }\n this.dirty = true;\n }\n\n get totalEntries(): number { return this.index.size; }\n get dirtyState(): boolean { return this.dirty; }\n}\n\nexport const xmemory = new XMemory();\n","const A = { R: '\\x1b[0m', b: '\\x1b[1m', d: '\\x1b[2m', i: '\\x1b[3m', u: '\\x1b[4m', g: '\\x1b[32m', inv: '\\x1b[7m' };\nfunction ansi(code: string, text: string) { return code + text + A.R; }\n\nexport class MarkdownStreamRenderer {\n private lineBuf = '';\n private inCodeBlock = false;\n private codeLang = '';\n private codeContent = '';\n private codeDropped = 0;\n private seenFirstLine = false;\n private tableRows: string[] = [];\n private inTable = false;\n private tableAligns: ('L'|'C'|'R')[] = [];\n\n private static readonly MAX_LINE = 4096;\n private static readonly MAX_CODE = 51200;\n\n feed(chunk: string): string | null {\n this.lineBuf += chunk;\n if (this.lineBuf.length > MarkdownStreamRenderer.MAX_LINE) this.lineBuf = this.lineBuf.slice(-MarkdownStreamRenderer.MAX_LINE);\n\n const idx = this.lineBuf.indexOf('\\n');\n if (idx === -1) return null;\n const line = this.lineBuf.slice(0, idx);\n this.lineBuf = this.lineBuf.slice(idx + 1);\n\n if (this.inCodeBlock) {\n if (/^```\\s*$/.test(line.trim())) {\n this.inCodeBlock = false;\n let out = this.flushCodeBlock() + '\\n';\n if (this.codeLang.toLowerCase() === 'markdown') out = '';\n return out;\n }\n if (this.codeContent.length < MarkdownStreamRenderer.MAX_CODE) {\n this.codeContent += line + '\\n';\n } else {\n this.codeDropped++;\n }\n return null;\n }\n\n if (/^```(\\w*)\\s*$/.test(line.trim())) {\n this.inCodeBlock = true;\n this.codeLang = line.trim().slice(3).trim();\n this.codeContent = '';\n if (!this.seenFirstLine) { this.seenFirstLine = true; return ansi(A.d, ` ┌ ${this.codeLang || 'code'}`) + '\\n'; }\n return `\\n` + ansi(A.d, ` ┌ ${this.codeLang || 'code'}`) + '\\n';\n }\n\n // ── Table detection ──\n const isPipeLine = /^\\|.+|\\s+\\|/.test(line) && line.includes('|');\n const isSepLine = /^\\|?[\\s\\-:]+(\\|[\\s\\-:]+)+\\|?\\s*$/.test(line.trim()) && !/[a-zA-Z\\u4e00-\\u9fff]/.test(line.trim());\n\n if (isPipeLine) {\n if (!this.inTable) {\n this.inTable = true;\n this.tableRows = [];\n this.tableAligns = [];\n }\n if (isSepLine) {\n // Parse alignment from separator row\n const cells = line.split('|').filter(c => /[\\-:]/.test(c));\n this.tableAligns = cells.map(c => {\n const t = c.trim();\n if (t.startsWith(':') && t.endsWith(':')) return 'C';\n if (t.endsWith(':')) return 'R';\n return 'L';\n });\n return null;\n }\n this.tableRows.push(line);\n return null;\n }\n\n // End of table\n if (this.inTable) {\n const out = this.renderTable();\n this.inTable = false;\n this.tableRows = [];\n this.tableAligns = [];\n this.seenFirstLine = true;\n return out + '\\n' + this.renderLine(line) + '\\n';\n }\n\n this.seenFirstLine = true;\n return this.renderLine(line) + '\\n';\n }\n\n flush(): string {\n let out = '';\n if (this.inTable) {\n out += this.renderTable();\n this.inTable = false;\n this.tableRows = [];\n }\n if (this.inCodeBlock) {\n out += this.flushCodeBlock();\n this.inCodeBlock = false;\n }\n if (this.lineBuf) {\n out += this.lineBuf;\n this.lineBuf = '';\n }\n return out;\n }\n\n reset(): void {\n this.lineBuf = ''; this.inCodeBlock = false; this.codeLang = ''; this.codeContent = ''; this.codeDropped = 0; this.seenFirstLine = false;\n this.inTable = false; this.tableRows = []; this.tableAligns = [];\n }\n\n // ── Table rendering ──\n\n private renderTable(): string {\n if (this.tableRows.length === 0) return '';\n const headerRow = this.tableRows[0];\n const dataRows = this.tableRows.slice(this.tableAligns.length === 0 ? 0 : 1);\n const headerCells = headerRow ? this.splitCells(headerRow) : [];\n const allRows: string[][] = [];\n\n if (this.tableAligns.length > 0 && headerRow) {\n allRows.push(headerCells);\n allRows.push(...dataRows.map(r => this.splitCells(r)));\n } else {\n allRows.push(...this.tableRows.map(r => this.splitCells(r)));\n }\n\n const colCount = Math.max(...allRows.map(r => r.length), 1);\n const colWidths: number[] = Array(colCount).fill(3);\n for (const row of allRows) {\n for (let i = 0; i < row.length; i++) {\n const w = this.visualLen(row[i]);\n if (w > colWidths[i]) colWidths[i] = Math.min(w, 30);\n }\n }\n\n const aligns = Array(colCount).fill('L');\n for (let i = 0; i < this.tableAligns.length && i < colCount; i++) aligns[i] = this.tableAligns[i];\n\n const F = ansi(A.d + '\\x1b[90m', '│');\n let out = '';\n\n // Top border\n out += A.d + '\\x1b[90m' + ' ┌' + colWidths.map(w => '─'.repeat(Math.max(0, w + 2))).join('┬') + '┐' + A.R + '\\n';\n\n // Header row\n if (allRows.length > 0 && colWidths.length > 0) {\n out += ` ${F} ` + allRows[0].map((c, i) => this.padCell(c, colWidths[i] || 3, 'C', true)).join(` ${F} `) + ` ${F}\\n`;\n // Separator\n out += A.d + '\\x1b[90m' + ' ├' + colWidths.map(w => '─'.repeat(Math.max(0, w + 2))).join('┼') + '┤' + A.R + '\\n';\n }\n\n // Data rows\n const maxRows = 12;\n for (let r = 1; r < allRows.length && r <= maxRows; r++) {\n out += ` ${F} ` + allRows[r].map((c, i) => this.padCell(c, colWidths[i] || 3, aligns[i] || 'L', false)).join(` ${F} `) + ` ${F}\\n`;\n }\n if (allRows.length > maxRows + 1) {\n out += ansi(A.d + '\\x1b[90m', ` ${F} ${ansi(A.d, '...')} `.padEnd(colWidths.reduce((a, w) => a + w + 3, 3))) + ` ${F}` + '\\n';\n }\n\n // Bottom border\n out += A.d + '\\x1b[90m' + ' └' + colWidths.map(w => '─'.repeat(Math.max(0, w + 2))).join('┴') + '┘' + A.R;\n return out;\n }\n\n private splitCells(line: string): string[] {\n let s = line.trim();\n if (s.startsWith('|')) s = s.slice(1);\n if (s.endsWith('|')) s = s.slice(0, -1);\n return s.split('|').map(c => c.trim());\n }\n\n private visualLen(s: string): number {\n return s.replace(/\\x1b\\[[0-9;]*[a-zA-Z]/g, '').replace(/[^\\x00-\\xff]/g, ' ').length;\n }\n\n private padCell(text: string, width: number, align: string, bold: boolean): string {\n const raw = text.replace(/\\x1b\\[[0-9;]*[a-zA-Z]/g, '');\n const visual = this.visualLen(raw);\n const pad = Math.max(0, width - visual);\n const left = align === 'R' ? pad : align === 'C' ? Math.floor(pad / 2) : 0;\n const right = Math.max(0, pad - left);\n const content = bold ? ansi(A.b, raw) : raw;\n return ' '.repeat(left) + content + ' '.repeat(right);\n }\n\n // ── Flush code ──\n\n private flushCodeBlock(): string {\n const lines = this.codeContent.split('\\n').filter(l => l || true);\n let out = '';\n const max = Math.min(lines.length, 20);\n for (let i = 0; i < max; i++) {\n out += ` ${ansi(A.d + '\\x1b[90m', String(i + 1).padStart(3, ' '))} ${ansi(A.d, '│')} ${lines[i]}\\n`;\n }\n if (lines.length > 20) out += ansi(A.d + '\\x1b[90m', ` ... (${lines.length - 20} lines omitted)\\n`);\n if (this.codeDropped > 0) out += ansi(A.d + '\\x1b[90m', ` ... (${this.codeDropped} lines dropped, code too large)\\n`);\n out += ansi(A.d, ` └ ${this.codeLang || 'code'}`);\n this.codeContent = '';\n this.codeDropped = 0;\n return out;\n }\n\n // ── Render line ──\n\n private renderLine(line: string): string {\n const t = line.trim();\n if (t === '') return '';\n\n let m: RegExpMatchArray | null;\n if ((m = line.match(/^#{4}\\s+(.+)/))) return ansi(A.b + '\\x1b[36m', ` ## ${m[1]}`);\n if ((m = line.match(/^#{3}\\s+(.+)/))) return ansi(A.b + '\\x1b[33m', ` ▸ ${m[1]}`);\n if ((m = line.match(/^#{2}\\s+(.+)/))) return ansi(A.b + '\\x1b[34m', ` ▸▸ ${m[1]}`);\n if ((m = line.match(/^#\\s+(.+)/))) return ansi(A.b + '\\x1b[35m', ` █ ${m[1]}`);\n if (line.startsWith('> ')) return ansi(A.d + '\\x1b[90m', ` │ ${line.slice(2)}`);\n if (/^[-*_]{3,}\\s*$/.test(t) && !t.includes('|')) return ansi(A.d + '\\x1b[90m', ' ──'.repeat(12));\n if ((m = line.match(/^(\\s*)(\\d+)\\.\\s+(.+)/))) { const sp = m[1].length; return ' '.repeat(Math.max(0, sp)) + ansi(A.b + '\\x1b[36m', `${m[2]}.`) + ' ' + this.inline(m[3]); }\n if ((m = line.match(/^(\\s*)[*+-]\\s+(.+)/))) { const sp = m[1].length; return ' '.repeat(Math.max(0, sp)) + ansi(A.g, '• ') + this.inline(m[2]); }\n if ((m = line.match(/^(\\s*)- \\[([ x])\\]\\s+(.+)/))) {\n const ck = m[2] === 'x' ? ansi(A.g, '✓') : ansi(A.d + '\\x1b[90m', '○');\n return ` ${ck} ${this.inline(m[3])}`;\n }\n return ' ' + this.inline(line);\n }\n\n private inline(text: string): string {\n let s = text;\n s = s.replace(/`([^`]+)`/g, (_, c) => ansi(A.inv + '\\x1b[33m', c));\n s = s.replace(/\\*\\*\\*(.+?)\\*\\*\\*/g, (_, c) => ansi(A.b + A.i, c));\n s = s.replace(/\\*\\*(.+?)\\*\\*/g, (_, c) => ansi(A.b, c));\n s = s.replace(/\\*(.+?)\\*/g, (_, c) => ansi(A.i, c));\n s = s.replace(/~~(.+?)~~/g, (_, c) => ansi(A.d + '\\x1b[9m', c));\n s = s.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_, txt, url) =>\n ansi(A.u + '\\x1b[36m', txt) + ansi(A.d + '\\x1b[90m', ` (${url.slice(0, 40)})`));\n return s;\n }\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport interface TodoItem {\n id: string;\n title: string;\n status: 'pending' | 'in_progress' | 'done' | 'cancelled';\n subtasks?: { title: string; status: 'pending' | 'done' }[];\n plan?: string;\n agent?: string;\n}\n\nexport const todos: Map<string, TodoItem[]> = new Map();\nconst MAX_TOP = 12;\n\nfunction uid() { return `t${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`; }\n\nfunction formatList(items: TodoItem[], indent = 0): string {\n const lines: string[] = [];\n for (const t of items) {\n const pf = ' '.repeat(indent);\n const s = t.status === 'done' ? '✓' : t.status === 'in_progress' ? '◉' : t.status === 'cancelled' ? '✗' : '○';\n lines.push(`${pf}${s} ${t.title.slice(0, 72)}`);\n if (t.subtasks) for (const st of t.subtasks) {\n const ss = st.status === 'done' ? '✓' : '○';\n lines.push(`${pf} ${ss} ${st.title.slice(0, 60)}`);\n }\n }\n return lines.join('\\n');\n}\n\nfunction formatChange(changes: Array<{ oldStatus: string; newStatus: string; title: string }>): string {\n if (changes.length === 0) return '无变更';\n const sMap: Record<string, string> = { pending: '○', in_progress: '◉', done: '✓', cancelled: '✗' };\n return changes.map(c => `${sMap[c.oldStatus]} → ${sMap[c.newStatus]} ${c.title.slice(0, 60)}`).join('\\n');\n}\n\nfunction findAndUpdate(items: TodoItem[], idOrTitle: string, status: string): Array<{ oldStatus: string; newStatus: string; title: string }> {\n const changes: Array<{ oldStatus: string; newStatus: string; title: string }> = [];\n for (const t of items) {\n if (t.id === idOrTitle || t.title === idOrTitle) {\n if (t.status !== status) { changes.push({ oldStatus: t.status, newStatus: status, title: t.title }); t.status = status as any; }\n break;\n }\n if (t.subtasks) for (const st of t.subtasks) {\n if (st.title === idOrTitle || st.title.includes(idOrTitle)) {\n if (st.status !== status) { changes.push({ oldStatus: st.status, newStatus: status, title: st.title }); st.status = status as any; }\n break;\n }\n }\n }\n return changes;\n}\n\nfunction countStats(items: TodoItem[]) {\n let total = 0, done = 0;\n for (const t of items) {\n total++; if (t.status === 'done') done++;\n if (t.subtasks) for (const st of t.subtasks) { total++; if (st.status === 'done') done++; }\n }\n return { total, done };\n}\n\nexport const todo_manager: Tool = {\n name: 'todo_manager',\n description: '管理任务面板。复杂任务前创建 items 列表(≤8项),过程中用 update 改变状态(title 或 task_id 定位)。',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['create', 'update', 'list', 'clear'], description: '操作' },\n task_id: { type: 'string', description: 'update 时用 id 定位任务' },\n title: { type: 'string', description: 'update 时用标题定位任务(唯一匹配)' },\n status: { type: 'string', enum: ['pending', 'in_progress', 'done', 'cancelled'], description: '更新目标状态' },\n items: { type: 'array', items: { type: 'object', properties: { title: { type: 'string' }, plan: { type: 'string' }, agent: { type: 'string' }, subtasks: { type: 'array', items: { type: 'object', properties: { title: { type: 'string' } } } } } }, description: 'create 时传入 ≤8 项' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n const action = params.action as string;\n const sessionId = 'default';\n\n if (action === 'list') {\n const items = todos.get(sessionId) || [];\n if (items.length === 0) return { success: true, output: '任务列表为空' };\n const { total, done } = countStats(items);\n return { success: true, output: `📋 ${done}/${total}\\n${formatList(items)}`, metadata: { total, done } };\n }\n\n if (action === 'clear') {\n todos.set(sessionId, []);\n return { success: true, output: '已清空' };\n }\n\n if (action === 'create') {\n const items = (params.items as any[]) || [];\n if (items.length === 0 && params.title) {\n todos.set(sessionId, [{ id: uid(), title: params.title as string, status: 'pending', plan: (params as any).plan }]);\n return { success: true, output: `📋 1 项\\n${formatList(todos.get(sessionId)!)}`, metadata: { total: 1, done: 0 } };\n }\n const top = items.slice(0, MAX_TOP);\n const mapped: TodoItem[] = top.map((t: any) => ({\n id: uid(), title: t.title, status: 'pending',\n plan: t.plan, agent: t.agent,\n subtasks: t.subtasks ? t.subtasks.slice(0, 6).map((st: any) => ({ title: st.title, status: 'pending' as const })) : undefined,\n }));\n todos.set(sessionId, mapped);\n const { total, done } = countStats(mapped);\n return { success: true, output: `📋 ${done}/${total}\\n${formatList(mapped)}`, metadata: { total, done, topLevel: mapped.length } };\n }\n\n if (action === 'update') {\n const list = todos.get(sessionId) || [];\n const tid = params.task_id as string;\n const title = params.title as string;\n const status = (params.status as string) || 'in_progress';\n let changes: Array<{ oldStatus: string; newStatus: string; title: string }> = [];\n if (tid) changes = findAndUpdate(list, tid, status);\n else if (title) changes = findAndUpdate(list, title, status);\n if (changes.length === 0 && (tid || title)) {\n return { success: false, error: `未找到: ${tid || title}`, output: '' };\n }\n todos.set(sessionId, list);\n if (changes.length === 0) {\n const { done, total } = countStats(list);\n return { success: true, output: `📋 ${done}/${total}\\n${formatList(list)}` };\n }\n const { done, total } = countStats(list);\n return { success: true, output: `${formatChange(changes)}\\n(${done}/${total})` };\n }\n\n return { success: false, error: '未知 action: ' + action, output: '' };\n },\n};\n\nexport function getTodos(): TodoItem[] {\n return todos.get('default') || [];\n}\n\nexport function todoSummary(maxItems = 8): string {\n const items = getTodos();\n if (items.length === 0) return '';\n const pending = items.filter(t => t.status !== 'done' && t.status !== 'cancelled');\n if (pending.length === 0) return '';\n let s = `[任务 ${pending.length}/${items.length}]\\n`;\n for (const t of pending.slice(0, maxItems)) {\n const sym = t.status === 'in_progress' ? '⏳' : '⬚';\n s += `${sym} ${t.title.slice(0, 50)}`;\n if (t.subtasks) {\n const subDone = t.subtasks.filter(st => st.status === 'done').length;\n s += ` (${subDone}/${t.subtasks.length})`;\n }\n s += '\\n';\n }\n return s;\n}\n","import type { Tool } from '../../tool-types.js';\n\n/**\n * DeepSeek-V3/V4 token estimator.\n *\n * DeepSeek uses a BPE tokenizer. Approximation:\n * - CJK chars (中文/日文/韩文): ~1.6 tokens each\n * - English words (common): ~1.3 tokens each\n * - Code / symbol-heavy: ~1 token per 2.5 chars\n * - Digits: ~1 token per 3 chars\n * - Newlines: ~1 token each\n * - Leading whitespace: ~1 token\n */\n\nconst CJK_RE = /[\\u4e00-\\u9fff\\u3400-\\u4dbf\\u{20000}-\\u{2a6df}\\u{2a700}-\\u{2b73f}\\u{2b740}-\\u{2b81f}\\u{2b820}-\\u{2ceaf}\\u{f900}-\\u{faff}\\u{2f800}-\\u{2fa1f}]/gu;\nconst HANGUL_RE = /[\\uac00-\\ud7af]/g;\nconst JAPANESE_RE = /[\\u3040-\\u309f\\u30a0-\\u30ff]/g;\nconst CJK_PUNCT_RE = /[\\u3000-\\u303f\\uff00-\\uffef]/g;\n\nexport function estimateTokens(text: string): number {\n if (!text) return 0;\n\n let tokens = 0;\n let remaining = text;\n\n // Count CJK characters (Chinese)\n const cjk = remaining.match(CJK_RE);\n if (cjk) tokens += Math.ceil(cjk.length * 1.6);\n\n // Count Korean Hangul\n const hangul = remaining.match(HANGUL_RE);\n if (hangul) tokens += Math.ceil(hangul.length * 1.5);\n\n // Count Japanese kana\n const jp = remaining.match(JAPANESE_RE);\n if (jp) tokens += Math.ceil(jp.length * 1.4);\n\n // Count CJK punctuation\n const cjkp = remaining.match(CJK_PUNCT_RE);\n if (cjkp) tokens += cjkp.length;\n\n // Remove all CJK-related chars to process ASCII portion\n let ascii = remaining;\n ascii = ascii.replace(CJK_RE, '');\n ascii = ascii.replace(HANGUL_RE, '');\n ascii = ascii.replace(JAPANESE_RE, '');\n ascii = ascii.replace(CJK_PUNCT_RE, '');\n\n // Count newlines\n const nls = ascii.split('\\n').length - 1;\n tokens += nls;\n\n // Count each line's content separately (better word-boundary handling)\n const lines = ascii.split('\\n');\n for (const line of lines) {\n if (!line.trim()) { tokens += 1; continue; }\n\n // Split into segments: code/symbols vs words\n // Code-like: contains lots of symbols\n const symbols = (line.match(/[{}()\\[\\];:'\"`,.<>\\/\\\\|&^~`@#$%*+=\\-!?]/g) || []).length;\n const digits = (line.match(/\\d+/g) || []).join('').length;\n const words = line.match(/[a-zA-Z_]+/g) || [];\n\n const wordTokens = words.reduce((s, w) => {\n if (w.length <= 4) return s + 1;\n return s + Math.ceil(w.length / 3.5);\n }, 0);\n\n // Whitespace and punctuation within words are usually part of the token\n const digitTokens = Math.ceil(digits / 3);\n const symbolTokens = Math.ceil(symbols / 1.8);\n\n tokens += wordTokens + digitTokens + symbolTokens;\n }\n\n // Floor + 10% safety margin for BPE overhead\n return Math.max(1, Math.floor(tokens * 1.1));\n}\n\n/**\n * Estimate tokens for an array of chat messages (DeepSeek API format).\n * Includes counting tool definitions.\n */\nexport function estimateMessageTokens(\n messages: Array<Record<string, unknown>>,\n tools?: Array<{ type: string; function: { name: string; description: string; parameters: Record<string, unknown> } }>,\n): number {\n let total = 0;\n\n // System overhead (~8 tokens per DeepSeek's API format)\n total += 8;\n\n for (const msg of messages) {\n // Role overhead\n total += 3;\n\n const content = msg.content as string | null | undefined;\n if (content) total += estimateTokens(content);\n\n const toolCalls = msg.tool_calls as Array<{ function?: { name?: string; arguments?: string } }> | undefined;\n if (toolCalls) {\n for (const tc of toolCalls) {\n total += estimateTokens(tc.function?.name || '');\n total += estimateTokens(tc.function?.arguments || '');\n total += 4; // JSON structure overhead per tool call\n }\n }\n\n const toolCallId = msg.tool_call_id as string | undefined;\n if (toolCallId) total += estimateTokens(toolCallId) + 2;\n }\n\n // Tool definitions\n if (tools) {\n for (const t of tools) {\n total += estimateTokens(t.function.name);\n total += estimateTokens(t.function.description);\n total += estimateTokens(JSON.stringify(t.function.parameters));\n total += 4; // JSON structure overhead per tool def\n }\n }\n\n return total;\n}\n\nexport const token_count: Tool = {\n name: 'token_count',\n description: '计算文本/文件/对话的 Token 数量 (DeepSeek-V3/V4 BPE 估算)。支持统计中文、英文、代码的 Token 消耗。',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n text: { type: 'string', description: '要计数的文本' },\n file_path: { type: 'string', description: '文件绝对路径' },\n messages: { type: 'string', description: 'JSON 格式的对话消息列表 (可选)' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const text = params.text as string | undefined;\n const filePath = params.file_path as string | undefined;\n const messagesJson = params.messages as string | undefined;\n\n let content = '';\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n content = readFileSync(abs, 'utf-8');\n } else if (text) {\n content = text;\n } else if (messagesJson) {\n content = messagesJson;\n } else {\n return { success: false, error: '请提供 text、file_path 或 messages 参数', output: '' };\n }\n\n const chars = content.length;\n const words = content.split(/\\s+/).filter(w => w.length > 0).length;\n const lines = content.split('\\n').length;\n const hasCJK = CJK_RE.test(content);\n\n let tokens = 0;\n let msgsEstimate = 0;\n\n if (messagesJson) {\n try {\n const msgs = JSON.parse(messagesJson) as Array<Record<string, unknown>>;\n msgsEstimate = estimateMessageTokens(msgs);\n tokens = msgsEstimate;\n } catch {\n tokens = estimateTokens(content);\n }\n } else {\n tokens = estimateTokens(content);\n }\n\n const output = [\n `Token 估算 (DeepSeek BPE):`,\n `总 Token: ${tokens.toLocaleString()}`,\n `字符数: ${chars.toLocaleString()}`,\n `单词数: ${words.toLocaleString()} ${hasCJK ? '(含中文)' : ''}`,\n `行数: ${lines.toLocaleString()}`,\n `比率: ${(chars / tokens).toFixed(1)} 字符/Token`,\n ].join('\\n');\n\n return { success: true, output, metadata: { tokens, chars, words, lines, messagesTokens: msgsEstimate } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Skill, SkillMeta } from './types.js';\n\nexport class SkillRegistry {\n private skills = new Map<string, Skill>();\n\n register(skill: Skill): void {\n if (this.skills.has(skill.meta.name)) {\n throw new Error(`Skill already registered: ${skill.meta.name}`);\n }\n this.skills.set(skill.meta.name, skill);\n }\n\n unregister(name: string): boolean {\n return this.skills.delete(name);\n }\n\n get(name: string): Skill | undefined {\n return this.skills.get(name);\n }\n\n getAll(): Skill[] {\n return Array.from(this.skills.values());\n }\n\n findByTrigger(trigger: string): Skill[] {\n const lowerTrigger = trigger.toLowerCase();\n const matches: Skill[] = [];\n\n for (const skill of this.skills.values()) {\n if (skill.meta.triggers.some((t) => lowerTrigger.includes(t.toLowerCase()))) {\n matches.push(skill);\n }\n }\n\n return matches;\n }\n\n findByTool(toolName: string): Skill[] {\n const matches: Skill[] = [];\n\n for (const skill of this.skills.values()) {\n if (skill.meta.tools.includes(toolName)) {\n matches.push(skill);\n }\n }\n\n return matches;\n }\n\n findByDependency(depName: string): Skill[] {\n const matches: Skill[] = [];\n\n for (const skill of this.skills.values()) {\n if (skill.meta.dependencies.includes(depName)) {\n matches.push(skill);\n }\n }\n\n return matches;\n }\n\n getMeta(): SkillMeta[] {\n return Array.from(this.skills.values()).map((s) => s.meta);\n }\n\n clear(): void {\n this.skills.clear();\n }\n\n get size(): number {\n return this.skills.size;\n }\n}\n","import { readFile, readdir } from 'node:fs/promises';\nimport { existsSync, watch } from 'node:fs';\nimport { join } from 'node:path';\nimport { DEEPER_SKILLS_DIR, PROJECT_SKILLS_DIR } from '../core/constants.js';\nimport type { Skill, SkillMeta, SkillLoadResult } from './types.js';\n\nfunction parseSimpleYaml(s: string): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n const lines = s.split('\\n');\n let listKey = '';\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n const listMatch = trimmed.match(/^\\s*-\\s+(.+)/);\n if (listMatch && listKey) {\n const arr = (result[listKey] as string[]) || [];\n arr.push(listMatch[1]);\n result[listKey] = arr;\n continue;\n }\n const kv = trimmed.match(/^([^:]+):\\s*(.*)/);\n if (kv) {\n listKey = kv[2] === '' ? kv[1].trim() : '';\n if (!listKey) result[kv[1].trim()] = kv[2].trim();\n }\n }\n return result;\n}\n\ninterface FrontmatterResult {\n meta: SkillMeta;\n body: string;\n}\n\nexport class SkillLoader {\n private scanDirs: string[];\n private watchers: Array<ReturnType<typeof watch>> = [];\n\n constructor(additionalDirs?: string[]) {\n this.scanDirs = [DEEPER_SKILLS_DIR, PROJECT_SKILLS_DIR];\n if (additionalDirs) {\n this.scanDirs.push(...additionalDirs);\n }\n }\n\n async loadAll(): Promise<SkillLoadResult[]> {\n const results: SkillLoadResult[] = [];\n\n for (const dir of this.scanDirs) {\n if (!existsSync(dir)) continue;\n const dirResults = await this.scanDirectory(dir);\n results.push(...dirResults);\n }\n\n return results;\n }\n\n async loadSingle(dirPath: string, skillName: string): Promise<SkillLoadResult | null> {\n const mdPath = join(dirPath, skillName, 'skill.md');\n const jsPath = join(dirPath, skillName, 'skill.js');\n\n if (!existsSync(mdPath)) return null;\n\n try {\n const mdContent = await readFile(mdPath, 'utf-8');\n const { meta, body } = this.parseFrontmatter(mdContent);\n\n let code: string | undefined;\n if (existsSync(jsPath)) {\n code = await readFile(jsPath, 'utf-8');\n }\n\n const skill: Skill = { meta, content: body, code };\n\n return {\n skill,\n source: dirPath,\n fromCodeFile: !!code,\n };\n } catch {\n return null;\n }\n }\n\n startWatching(callback: (result: SkillLoadResult) => void): void {\n for (const dir of this.scanDirs) {\n if (!existsSync(dir)) continue;\n\n try {\n const watcher = watch(dir, { recursive: true }, async (_eventType, filename) => {\n if (!filename) return;\n const parts = filename.toString().split(/[/\\\\]/);\n if (parts.length < 2) return;\n\n const skillName = parts[0];\n const result = await this.loadSingle(dir, skillName);\n if (result) {\n callback(result);\n }\n });\n this.watchers.push(watcher);\n } catch {\n continue;\n }\n }\n }\n\n stopWatching(): void {\n for (const watcher of this.watchers) {\n watcher.close();\n }\n this.watchers = [];\n }\n\n private async scanDirectory(dirPath: string): Promise<SkillLoadResult[]> {\n const results: SkillLoadResult[] = [];\n\n try {\n const entries = await readdir(dirPath, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n\n const skillDir = join(dirPath, entry.name);\n const mdFile = join(skillDir, 'skill.md');\n\n if (!existsSync(mdFile)) continue;\n\n const result = await this.loadSingle(dirPath, entry.name);\n if (result) {\n results.push(result);\n }\n }\n } catch {\n // Directory may not exist yet\n }\n\n return results;\n }\n\n private parseFrontmatter(markdown: string): FrontmatterResult {\n const frontmatterRegex = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?([\\s\\S]*)$/;\n const match = markdown.match(frontmatterRegex);\n\n if (!match) {\n return {\n meta: {\n name: 'unnamed',\n description: 'No description',\n version: '1.0.0',\n author: 'unknown',\n triggers: [],\n tools: [],\n dependencies: [],\n },\n body: markdown,\n };\n }\n\n const yamlContent = match[1];\n const body = match[2];\n\n let parsed: Record<string, unknown> = {};\n try {\n parsed = parseSimpleYaml(yamlContent) as Record<string, unknown>;\n } catch {\n // If YAML parsing fails, use defaults\n }\n\n const meta: SkillMeta = {\n name: (parsed.name as string) || 'unnamed',\n description: (parsed.description as string) || 'No description',\n version: (parsed.version as string) || '1.0.0',\n author: (parsed.author as string) || 'unknown',\n triggers: Array.isArray(parsed.triggers) ? parsed.triggers.map(String) : [],\n tools: Array.isArray(parsed.tools) ? parsed.tools.map(String) : [],\n dependencies: Array.isArray(parsed.dependencies) ? parsed.dependencies.map(String) : [],\n };\n\n return { meta, body };\n }\n}\n","import type { Skill, SkillExecutionResult } from './types.js';\n\ninterface ExecutionContext {\n skill: Skill;\n params: Record<string, unknown>;\n env: Record<string, string>;\n}\n\nexport class SkillExecutor {\n async execute(skill: Skill, context: Record<string, unknown>): Promise<SkillExecutionResult> {\n const startTime = Date.now();\n\n try {\n let output = '';\n\n if (skill.code) {\n const codeResult = await this.runCode(skill.code, {\n skill,\n params: context,\n env: process.env as Record<string, string>,\n });\n output += codeResult;\n }\n\n if (!output) {\n output = `Skill \"${skill.meta.name}\" instructions ready for AI processing.\\n`;\n output += `Description: ${skill.meta.description}\\n`;\n output += `---\\n${skill.content}\\n---`;\n }\n\n return {\n success: true,\n output,\n duration: Date.now() - startTime,\n };\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n output: '',\n error: errMsg,\n duration: Date.now() - startTime,\n };\n }\n }\n\n async runCode(code: string, ctx: ExecutionContext): Promise<string> {\n const lines: string[] = [];\n\n const sandbox = {\n console: {\n log: (...args: unknown[]) => {\n lines.push(args.map((a) => (typeof a === 'string' ? a : JSON.stringify(a))).join(' '));\n },\n warn: (...args: unknown[]) => {\n lines.push('[WARN] ' + args.map((a) => (typeof a === 'string' ? a : JSON.stringify(a))).join(' '));\n },\n error: (...args: unknown[]) => {\n lines.push('[ERROR] ' + args.map((a) => (typeof a === 'string' ? a : JSON.stringify(a))).join(' '));\n },\n },\n skill: ctx.skill,\n params: ctx.params,\n env: ctx.env,\n fetch: globalThis.fetch,\n setTimeout: globalThis.setTimeout,\n clearTimeout: globalThis.clearTimeout,\n JSON: JSON,\n Math: Math,\n Date: Date,\n Object: Object,\n Array: Array,\n String: String,\n Number: Number,\n Boolean: Boolean,\n Map: Map,\n Set: Set,\n RegExp: RegExp,\n Error: Error,\n Promise: Promise,\n };\n\n try {\n const wrappedCode = `\n return (async () => {\n ${code}\n })();\n `;\n\n const fn = new Function(\n ...Object.keys(sandbox),\n wrappedCode,\n );\n\n const result = await fn(...Object.values(sandbox));\n\n if (result !== undefined && result !== null) {\n lines.push(typeof result === 'string' ? result : JSON.stringify(result, null, 2));\n }\n\n return lines.join('\\n');\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : String(error);\n return `Code execution error: ${errMsg}\\n${lines.join('\\n')}`;\n }\n }\n}\n","import { mkdir, writeFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { DEEPER_SKILLS_DIR } from '../core/constants.js';\nimport type { Skill, SkillMeta } from './types.js';\n\nfunction parseSimpleYaml(s: string): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n const lines = s.split('\\n');\n let listKey = '';\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n const listMatch = trimmed.match(/^\\s*-\\s+(.+)/);\n if (listMatch && listKey) {\n const arr = (result[listKey] as string[]) || [];\n arr.push(listMatch[1]);\n result[listKey] = arr;\n continue;\n }\n const kv = trimmed.match(/^([^:]+):\\s*(.*)/);\n if (kv) {\n listKey = kv[2] === '' ? kv[1].trim() : '';\n if (!listKey) result[kv[1].trim()] = kv[2].trim();\n }\n }\n return result;\n}\n\nexport interface CreateSkillInput {\n meta: SkillMeta;\n content: string;\n code?: string;\n}\n\nexport class SkillCreator {\n private outputDir: string;\n\n constructor(outputDir?: string) {\n this.outputDir = outputDir || DEEPER_SKILLS_DIR;\n }\n\n async create(input: CreateSkillInput): Promise<Skill> {\n const skillDir = join(this.outputDir, input.meta.name);\n\n await mkdir(skillDir, { recursive: true });\n\n const yamlFrontmatter = this.buildYamlFrontmatter(input.meta);\n const mdContent = `---\\n${yamlFrontmatter}---\\n\\n${input.content}`;\n\n const mdPath = join(skillDir, 'skill.md');\n await writeFile(mdPath, mdContent, 'utf-8');\n\n if (input.code) {\n const jsPath = join(skillDir, 'skill.js');\n await writeFile(jsPath, input.code, 'utf-8');\n }\n\n return {\n meta: input.meta,\n content: input.content,\n code: input.code,\n };\n }\n\n async update(name: string, updates: Partial<CreateSkillInput>): Promise<Skill | null> {\n const skillDir = join(this.outputDir, name);\n const mdPath = join(skillDir, 'skill.md');\n\n if (!existsSync(mdPath)) {\n return null;\n }\n\n const { readFile } = await import('node:fs/promises');\n const existingMd = await readFile(mdPath, 'utf-8');\n\n let existingMeta: SkillMeta = {\n name,\n description: '',\n version: '1.0.0',\n author: 'unknown',\n triggers: [],\n tools: [],\n dependencies: [],\n };\n\n let existingBody = existingMd;\n\n const frontmatterRegex = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?([\\s\\S]*)$/;\n const match = existingMd.match(frontmatterRegex);\n if (match) {\n try {\n const parsed = parseSimpleYaml(match[1]) as Record<string, unknown>;\n existingMeta = {\n name: (parsed.name as string) || name,\n description: (parsed.description as string) || '',\n version: (parsed.version as string) || '1.0.0',\n author: (parsed.author as string) || 'unknown',\n triggers: Array.isArray(parsed.triggers) ? parsed.triggers.map(String) : [],\n tools: Array.isArray(parsed.tools) ? parsed.tools.map(String) : [],\n dependencies: Array.isArray(parsed.dependencies) ? parsed.dependencies.map(String) : [],\n };\n } catch {\n // Use defaults\n }\n existingBody = match[2];\n }\n\n const newMeta: SkillMeta = {\n ...existingMeta,\n ...updates.meta,\n };\n\n const newContent = updates.content || existingBody;\n\n return this.create({\n meta: newMeta,\n content: newContent,\n code: updates.code,\n });\n }\n\n private buildYamlFrontmatter(meta: SkillMeta): string {\n const lines: string[] = [];\n lines.push(`name: ${meta.name}`);\n lines.push(`description: ${meta.description}`);\n lines.push(`version: ${meta.version}`);\n lines.push(`author: ${meta.author}`);\n\n if (meta.triggers.length > 0) {\n lines.push('triggers:');\n for (const t of meta.triggers) {\n lines.push(` - ${t}`);\n }\n }\n\n if (meta.tools.length > 0) {\n lines.push('tools:');\n for (const t of meta.tools) {\n lines.push(` - ${t}`);\n }\n }\n\n if (meta.dependencies.length > 0) {\n lines.push('dependencies:');\n for (const d of meta.dependencies) {\n lines.push(` - ${d}`);\n }\n }\n\n return lines.join('\\n') + '\\n';\n }\n}\n","import type { Skill } from './types.js';\nimport type { SkillRegistry } from './SkillRegistry.js';\n\ninterface TriggerMatch {\n skill: Skill;\n score: number;\n matchedTriggers: string[];\n}\n\nexport class SkillTrigger {\n private registry: SkillRegistry;\n\n constructor(registry: SkillRegistry) {\n this.registry = registry;\n }\n\n match(input: string): Skill[] {\n const lowerInput = input.toLowerCase();\n const matches: TriggerMatch[] = [];\n\n for (const skill of this.registry.getAll()) {\n const matchedTriggers: string[] = [];\n let score = 0;\n\n for (const trigger of skill.meta.triggers) {\n const lowerTrigger = trigger.toLowerCase();\n if (lowerInput.includes(lowerTrigger)) {\n matchedTriggers.push(trigger);\n score += lowerTrigger.length;\n }\n }\n\n const nameMatch = skill.meta.name.toLowerCase();\n if (lowerInput.includes(nameMatch)) {\n matchedTriggers.push(skill.meta.name);\n score += nameMatch.length * 2;\n }\n\n const descWords = skill.meta.description.toLowerCase().split(/\\s+/);\n for (const word of descWords) {\n if (word.length > 3 && lowerInput.includes(word)) {\n score += 1;\n }\n }\n\n if (matchedTriggers.length > 0 || score > 0) {\n matches.push({ skill, score, matchedTriggers });\n }\n }\n\n matches.sort((a, b) => b.score - a.score);\n\n return matches.map((m) => m.skill);\n }\n\n getRecommendedSkills(input: string, maxResults: number = 3): Array<{\n skill: Skill;\n reason: string;\n }> {\n const matched = this.match(input).slice(0, maxResults);\n\n return matched.map((skill) => {\n const reasons: string[] = [];\n\n const lowerInput = input.toLowerCase();\n for (const trigger of skill.meta.triggers) {\n if (lowerInput.includes(trigger.toLowerCase())) {\n reasons.push(`matched trigger: \"${trigger}\"`);\n }\n }\n\n if (lowerInput.includes(skill.meta.name.toLowerCase())) {\n reasons.push(`matched name: \"${skill.meta.name}\"`);\n }\n\n return {\n skill,\n reason: reasons.length > 0 ? reasons.join(', ') : 'contextually relevant',\n };\n });\n }\n}\n","import { EventEmitter } from 'node:events';\n\nexport interface ContextUpdatedPayload {\n modelName: string;\n tokenCount: number;\n memoryUsage: number;\n uptime: number;\n}\n\nexport interface MessagePayload {\n id: string;\n role: 'user' | 'assistant' | 'system';\n content: string;\n thinking?: string;\n timestamp: number;\n}\n\nexport interface ToolCallPayload {\n id: string;\n toolName: string;\n args: Record<string, unknown>;\n status: 'pending' | 'running' | 'completed' | 'failed';\n result?: string;\n}\n\nexport interface DiffPayload {\n filePath: string;\n oldContent: string;\n newContent: string;\n}\n\nexport interface AgentPayload {\n id: string;\n name: string;\n status: 'idle' | 'running' | 'completed' | 'failed';\n parentId?: string;\n task: string;\n children?: AgentPayload[];\n}\n\nexport const Events = {\n CONTEXT_UPDATED: 'context:updated',\n MESSAGE_SEND: 'message:send',\n MESSAGE_RECEIVED: 'message:received',\n MESSAGE_STREAMING: 'message:streaming',\n TOOL_CALL_START: 'tool:call:start',\n TOOL_CALL_END: 'tool:call:end',\n FILE_DIFF: 'file:diff',\n AGENT_TREE_UPDATED: 'agent:tree:updated',\n APP_QUIT: 'app:quit',\n APP_CLEAR: 'app:clear',\n STATUS_UPDATE: 'status:update',\n CONFIG_CHANGED: 'config:changed',\n AGENT_STATUS_CHANGE: 'agent:status:change',\n AGENT_CREATED: 'agent:created',\n AGENT_THINKING: 'agent:thinking',\n AGENT_EXECUTING: 'agent:executing',\n AGENT_WAITING: 'agent:waiting',\n AGENT_COMPLETED: 'agent:completed',\n AGENT_FAILED: 'agent:failed',\n AGENT_CANCELLED: 'agent:cancelled',\n AGENT_LOOP_ITERATION: 'agent:loop:iteration',\n AGENT_LOOP_DETECTED: 'agent:loop:detected',\n AGENT_LOOP_LIMIT: 'agent:loop:limit',\n TOOL_CALL_ERROR: 'tool:call:error',\n ORCHESTRATOR_DECOMPOSE: 'orchestrator:decompose',\n ORCHESTRATOR_DISPATCH: 'orchestrator:dispatch',\n ORCHESTRATOR_AGGREGATE: 'orchestrator:aggregate',\n SUBAGENT_START: 'subagent:start',\n SUBAGENT_TIMEOUT: 'subagent:timeout',\n SUBAGENT_COMPLETE: 'subagent:complete',\n SUBAGENT_ERROR: 'subagent:error',\n POOL_ACQUIRE: 'pool:acquire',\n POOL_RELEASE: 'pool:release',\n POOL_QUEUE: 'pool:queue',\n CONTEXT_SUMMARIZED: 'context:summarized',\n CONTEXT_TOKEN_WARNING: 'context:token:warning',\n MCP_CONNECTED: 'mcp:connected',\n MCP_ERROR: 'mcp:error',\n MCP_DISCONNECTED: 'mcp:disconnected',\n MCP_TOOLS_DISCOVERED: 'mcp:tools:discovered',\n SKILL_LOADED: 'skill:loaded',\n SKILL_EXECUTED: 'skill:executed',\n SKILL_CREATED: 'skill:created',\n SKILL_TRIGGERED: 'skill:triggered',\n} as const;\n\nexport const EventBusEvents = Events;\n\nexport class EventBus extends EventEmitter {\n private static instance: EventBus;\n\n static getInstance(): EventBus {\n if (!EventBus.instance) {\n EventBus.instance = new EventBus();\n }\n return EventBus.instance;\n }\n\n onContextUpdated(handler: (payload: ContextUpdatedPayload) => void): void {\n this.on(EventBusEvents.CONTEXT_UPDATED, handler);\n }\n\n emitContextUpdated(payload: ContextUpdatedPayload): void {\n this.emit(EventBusEvents.CONTEXT_UPDATED, payload);\n }\n\n onMessageSend(handler: (payload: { content: string }) => void): void {\n this.on(EventBusEvents.MESSAGE_SEND, handler);\n }\n\n emitMessageSend(payload: { content: string }): void {\n this.emit(EventBusEvents.MESSAGE_SEND, payload);\n }\n\n onMessageReceived(handler: (payload: MessagePayload) => void): void {\n this.on(EventBusEvents.MESSAGE_RECEIVED, handler);\n }\n\n emitMessageReceived(payload: MessagePayload): void {\n this.emit(EventBusEvents.MESSAGE_RECEIVED, payload);\n }\n\n onMessageStreaming(handler: (payload: { id: string; content: string; thinking?: string }) => void): void {\n this.on(EventBusEvents.MESSAGE_STREAMING, handler);\n }\n\n emitMessageStreaming(payload: { id: string; content: string; thinking?: string }): void {\n this.emit(EventBusEvents.MESSAGE_STREAMING, payload);\n }\n\n onToolCallStart(handler: (payload: ToolCallPayload) => void): void {\n this.on(EventBusEvents.TOOL_CALL_START, handler);\n }\n\n emitToolCallStart(payload: ToolCallPayload): void {\n this.emit(EventBusEvents.TOOL_CALL_START, payload);\n }\n\n onToolCallEnd(handler: (payload: ToolCallPayload) => void): void {\n this.on(EventBusEvents.TOOL_CALL_END, handler);\n }\n\n emitToolCallEnd(payload: ToolCallPayload): void {\n this.emit(EventBusEvents.TOOL_CALL_END, payload);\n }\n\n onFileDiff(handler: (payload: DiffPayload) => void): void {\n this.on(EventBusEvents.FILE_DIFF, handler);\n }\n\n emitFileDiff(payload: DiffPayload): void {\n this.emit(EventBusEvents.FILE_DIFF, payload);\n }\n\n onAgentTreeUpdated(handler: (payload: { agents: AgentPayload[] }) => void): void {\n this.on(EventBusEvents.AGENT_TREE_UPDATED, handler);\n }\n\n emitAgentTreeUpdated(payload: { agents: AgentPayload[] }): void {\n this.emit(EventBusEvents.AGENT_TREE_UPDATED, payload);\n }\n\n onAppQuit(handler: () => void): void {\n this.on(EventBusEvents.APP_QUIT, handler);\n }\n\n emitAppQuit(): void {\n this.emit(EventBusEvents.APP_QUIT);\n }\n\n onAppClear(handler: () => void): void {\n this.on(EventBusEvents.APP_CLEAR, handler);\n }\n\n emitAppClear(): void {\n this.emit(EventBusEvents.APP_CLEAR);\n }\n\n onStatusUpdate(handler: (payload: Partial<ContextUpdatedPayload>) => void): void {\n this.on(EventBusEvents.STATUS_UPDATE, handler);\n }\n\n emitStatusUpdate(payload: Partial<ContextUpdatedPayload>): void {\n this.emit(EventBusEvents.STATUS_UPDATE, payload);\n }\n\n onConfigChanged(handler: (payload: Record<string, unknown>) => void): void {\n this.on(EventBusEvents.CONFIG_CHANGED, handler);\n }\n\n emitConfigChanged(payload: Record<string, unknown>): void {\n this.emit(EventBusEvents.CONFIG_CHANGED, payload);\n }\n\n reset(): void {\n this.removeAllListeners();\n }\n}\n\nexport const eventbus = EventBus.getInstance();\nexport const globalEventBus = eventbus;\n","import { SkillRegistry } from './SkillRegistry.js';\nimport { SkillLoader } from './SkillLoader.js';\nimport { SkillExecutor } from './SkillExecutor.js';\nimport { SkillCreator } from './SkillCreator.js';\nimport { SkillTrigger } from './SkillTrigger.js';\nimport { EventBus, Events } from '../core/eventbus.js';\nimport type { Skill, SkillExecutionResult } from './types.js';\n\nexport class SkillEngine {\n private registry: SkillRegistry;\n private loader: SkillLoader;\n private executor: SkillExecutor;\n private creator: SkillCreator;\n private trigger: SkillTrigger;\n private eventbus: EventBus;\n\n constructor(eventbus?: EventBus) {\n this.registry = new SkillRegistry();\n this.loader = new SkillLoader();\n this.executor = new SkillExecutor();\n this.creator = new SkillCreator();\n this.trigger = new SkillTrigger(this.registry);\n this.eventbus = eventbus || new EventBus();\n }\n\n getRegistry(): SkillRegistry {\n return this.registry;\n }\n\n getLoader(): SkillLoader {\n return this.loader;\n }\n\n getTrigger(): SkillTrigger {\n return this.trigger;\n }\n\n async loadAll(): Promise<number> {\n const results = await this.loader.loadAll();\n let count = 0;\n\n for (const result of results) {\n this.registry.register(result.skill);\n count++;\n this.eventbus.emit(Events.SKILL_LOADED, {\n name: result.skill.meta.name,\n source: result.source,\n hasCode: !!result.skill.code,\n });\n }\n\n return count;\n }\n\n async reload(): Promise<number> {\n this.registry.clear();\n return this.loadAll();\n }\n\n async execute(name: string, context: Record<string, unknown>): Promise<SkillExecutionResult> {\n const skill = this.registry.get(name);\n if (!skill) {\n return {\n success: false,\n output: '',\n error: `Skill not found: ${name}`,\n duration: 0,\n };\n }\n\n const startTime = Date.now();\n try {\n const result = await this.executor.execute(skill, context);\n const duration = Date.now() - startTime;\n\n this.eventbus.emit(Events.SKILL_EXECUTED, {\n name: skill.meta.name,\n success: result.success,\n duration,\n });\n\n return { ...result, duration };\n } catch (error) {\n const duration = Date.now() - startTime;\n const errMsg = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n output: '',\n error: errMsg,\n duration,\n };\n }\n }\n\n async createSkill(\n name: string,\n description: string,\n content: string,\n code?: string,\n ): Promise<Skill> {\n const skill = await this.creator.create({\n meta: {\n name,\n description,\n version: '1.0.0',\n author: 'DeeperCode AI',\n triggers: [],\n tools: [],\n dependencies: [],\n },\n content,\n code,\n });\n\n this.registry.register(skill);\n\n this.eventbus.emit(Events.SKILL_CREATED, {\n name: skill.meta.name,\n description: skill.meta.description,\n });\n\n return skill;\n }\n\n matchTriggers(input: string): Skill[] {\n const matches = this.trigger.match(input);\n for (const skill of matches) {\n this.eventbus.emit(Events.SKILL_TRIGGERED, {\n name: skill.meta.name,\n input: input.slice(0, 100),\n });\n }\n return matches;\n }\n\n getSystemPrompt(context?: Record<string, unknown>): string {\n const allSkills = this.registry.getAll();\n if (allSkills.length === 0) return '';\n\n let prompt = 'Available Skills:\\n\\n';\n for (const skill of allSkills) {\n prompt += `## ${skill.meta.name} (v${skill.meta.version})\\n`;\n prompt += `${skill.meta.description}\\n`;\n\n if (skill.meta.triggers.length > 0) {\n prompt += `Triggers: ${skill.meta.triggers.join(', ')}\\n`;\n }\n\n prompt += `---\\n${skill.content.slice(0, 1000)}\\n`;\n if (skill.content.length > 1000) {\n prompt += '...(truncated)\\n';\n }\n prompt += '\\n';\n }\n\n return prompt;\n }\n}\n","import { spawn } from 'node:child_process';\nimport type { ChildProcess } from 'node:child_process';\nimport { createInterface } from 'node:readline';\nimport type { MCPServerConfig, JSONRPCMessage, MCPTransport } from './types.js';\n\nexport class StdioTransport implements MCPTransport {\n private process: ChildProcess | null = null;\n private messageHandlers: Array<(message: JSONRPCMessage) => void> = [];\n private connected: boolean = false;\n private buffer: string = '';\n\n async connect(config: MCPServerConfig): Promise<void> {\n if (!config.command) {\n throw new Error('StdioTransport requires a command');\n }\n\n const env = {\n ...process.env,\n ...config.env,\n };\n\n this.process = spawn(config.command, config.args || [], {\n stdio: ['pipe', 'pipe', 'pipe'],\n env,\n shell: true,\n });\n\n const rl = createInterface({ input: this.process.stdout! });\n\n rl.on('line', (line: string) => {\n try {\n const message = JSON.parse(line) as JSONRPCMessage;\n for (const handler of this.messageHandlers) {\n handler(message);\n }\n } catch {\n this.buffer += line;\n }\n });\n\n this.process.stderr?.on('data', (data: Buffer) => {\n const text = data.toString();\n try {\n const message = JSON.parse(text) as JSONRPCMessage;\n for (const handler of this.messageHandlers) {\n handler(message);\n }\n } catch {\n // MCP stderr is for logging, not JSON-RPC\n }\n });\n\n this.process.on('exit', (code) => {\n this.connected = false;\n if (code !== 0 && code !== null) {\n for (const handler of this.messageHandlers) {\n handler({\n jsonrpc: '2.0',\n method: 'exit',\n params: { code },\n });\n }\n }\n });\n\n this.process.on('error', (err) => {\n this.connected = false;\n for (const handler of this.messageHandlers) {\n handler({\n jsonrpc: '2.0',\n method: 'error',\n params: { message: err.message },\n });\n }\n });\n\n this.connected = true;\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this.process || !this.connected) {\n throw new Error('StdioTransport not connected');\n }\n\n const line = JSON.stringify(message) + '\\n';\n await new Promise<void>((resolve, reject) => {\n this.process!.stdin!.write(line, (err) => {\n if (err) reject(err);\n else resolve();\n });\n });\n }\n\n onMessage(handler: (message: JSONRPCMessage) => void): () => void {\n this.messageHandlers.push(handler);\n return () => {\n const idx = this.messageHandlers.indexOf(handler);\n if (idx !== -1) {\n this.messageHandlers.splice(idx, 1);\n }\n };\n }\n\n disconnect(): void {\n if (this.process) {\n this.process.stdin?.end();\n this.process.kill();\n this.process = null;\n }\n this.connected = false;\n }\n\n isConnected(): boolean {\n return this.connected && this.process !== null && !this.process.killed;\n }\n}\n","import type { MCPServerConfig, JSONRPCMessage, MCPTransport } from './types.js';\n\nexport class SSETransport implements MCPTransport {\n private url: string = '';\n private headers: Record<string, string> = {};\n private messageHandlers: Array<(message: JSONRPCMessage) => void> = [];\n private connected: boolean = false;\n private abortController: AbortController | null = null;\n\n async connect(config: MCPServerConfig): Promise<void> {\n if (!config.url) {\n throw new Error('SSETransport requires a URL');\n }\n\n this.url = config.url;\n this.headers = config.headers || {};\n this.abortController = new AbortController();\n\n this.connected = true;\n\n this.establishSSEConnection();\n }\n\n private async establishSSEConnection(): Promise<void> {\n try {\n const response = await fetch(this.url, {\n method: 'GET',\n headers: {\n Accept: 'text/event-stream',\n ...this.headers,\n },\n signal: this.abortController!.signal,\n });\n\n if (!response.ok) {\n throw new Error(`SSE connection failed: ${response.status} ${response.statusText}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('SSE response has no readable body');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (this.connected) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n let eventData = '';\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n eventData += line.slice(6);\n } else if (line === '' && eventData) {\n try {\n const message = JSON.parse(eventData) as JSONRPCMessage;\n for (const handler of this.messageHandlers) {\n handler(message);\n }\n } catch {\n // Ignore non-JSON SSE data\n }\n eventData = '';\n }\n }\n }\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n this.connected = false;\n for (const handler of this.messageHandlers) {\n handler({\n jsonrpc: '2.0',\n method: 'error',\n params: { message: String(error) },\n });\n }\n }\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this.connected) {\n throw new Error('SSETransport not connected');\n }\n\n const response = await fetch(this.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.headers,\n },\n body: JSON.stringify(message),\n signal: this.abortController!.signal,\n });\n\n if (!response.ok) {\n throw new Error(`SSE POST failed: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json() as JSONRPCMessage;\n for (const handler of this.messageHandlers) {\n handler(data);\n }\n }\n\n onMessage(handler: (message: JSONRPCMessage) => void): () => void {\n this.messageHandlers.push(handler);\n return () => {\n const idx = this.messageHandlers.indexOf(handler);\n if (idx !== -1) {\n this.messageHandlers.splice(idx, 1);\n }\n };\n }\n\n disconnect(): void {\n this.connected = false;\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n }\n\n isConnected(): boolean {\n return this.connected;\n }\n}\n","import type { Tool, ToolResult } from '../tools/tool-types.js';\nimport type { MCPTool } from './types.js';\nimport type { MCPClient } from './MCPClient.js';\n\nexport class ToolAdapter {\n private client: MCPClient;\n\n constructor(client: MCPClient) {\n this.client = client;\n }\n\n adapt(mcpTool: MCPTool, serverName: string): Tool {\n const adaptedName = `mcp:${serverName}:${mcpTool.name}`;\n\n const tool: Tool = {\n name: adaptedName,\n description: `[MCP:${serverName}] ${mcpTool.description}`,\n category: this.inferCategory(mcpTool) as string,\n parameters: mcpTool.inputSchema,\n dangerous: false,\n requiresApproval: false,\n execute: async (params: Record<string, unknown>, signal?: AbortSignal): Promise<ToolResult> => {\n try {\n const result = await this.client.callTool(serverName, mcpTool.name, params);\n return result;\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n output: '',\n error: `MCP tool error [${serverName}/${mcpTool.name}]: ${errMsg}`,\n };\n }\n },\n };\n\n return tool;\n }\n\n adaptBatch(mcpTools: MCPTool[], serverName: string): Tool[] {\n return mcpTools.map((t) => this.adapt(t, serverName));\n }\n\n private inferCategory(mcpTool: MCPTool): string {\n const desc = (mcpTool.description + ' ' + mcpTool.name).toLowerCase();\n\n if (desc.includes('file') || desc.includes('dir') || desc.includes('path')) {\n return 'filesystem';\n }\n if (desc.includes('search') || desc.includes('find') || desc.includes('query')) {\n return 'search';\n }\n if (desc.includes('shell') || desc.includes('command') || desc.includes('exec')) {\n return 'shell';\n }\n if (desc.includes('http') || desc.includes('api') || desc.includes('fetch') || desc.includes('url')) {\n return 'network';\n }\n if (desc.includes('code') || desc.includes('lint') || desc.includes('compile')) {\n return 'code';\n }\n if (desc.includes('db') || desc.includes('sql') || desc.includes('database')) {\n return 'database';\n }\n if (desc.includes('security') || desc.includes('auth') || desc.includes('token')) {\n return 'security';\n }\n\n return 'system';\n }\n}\n","import type { Tool, ToolResult } from '../tools/tool-types.js';\nimport type { MCPResource } from './types.js';\nimport type { MCPClient } from './MCPClient.js';\n\nexport class ResourceAdapter {\n private client: MCPClient;\n\n constructor(client: MCPClient) {\n this.client = client;\n }\n\n async readResource(serverName: string, uri: string): Promise<string> {\n const content = await this.client.readResource(serverName, uri);\n return content;\n }\n\n async listResources(serverName: string): Promise<MCPResource[]> {\n return this.client.listResources(serverName);\n }\n\n createResourceTools(resources: MCPResource[], serverName: string): Tool[] {\n return resources.map((resource) => this.adaptResource(resource, serverName));\n }\n\n private adaptResource(resource: MCPResource, serverName: string): Tool {\n const adaptedName = `mcp:${serverName}:resource:${resource.name}`;\n\n return {\n name: adaptedName,\n description: `[MCP:${serverName}] Read resource: ${resource.name} (${resource.uri})`,\n category: 'system',\n parameters: {\n type: 'object',\n properties: {},\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n execute: async (_params: Record<string, unknown>, _signal?: AbortSignal): Promise<ToolResult> => {\n try {\n const content = await this.client.readResource(serverName, resource.uri);\n return {\n success: true,\n output: content,\n metadata: { uri: resource.uri, mimeType: resource.mimeType },\n };\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n output: '',\n error: `MCP resource error [${serverName}/${resource.name}]: ${errMsg}`,\n };\n }\n },\n };\n }\n}\n","import { EventBus, Events } from '../core/eventbus.js';\nimport { StdioTransport } from './StdioTransport.js';\nimport { SSETransport } from './SSETransport.js';\nimport { ToolAdapter } from './ToolAdapter.js';\nimport { ResourceAdapter } from './ResourceAdapter.js';\nimport type {\n MCPServerConfig,\n MCPTool,\n MCPResource,\n MCPTransport,\n JSONRPCMessage,\n JSONRPCResponse,\n} from './types.js';\nimport type { Tool, ToolResult } from '../tools/tool-types.js';\nimport { MCP_CONNECTION_TIMEOUT_MS } from '../core/constants.js';\n\ninterface ServerConnection {\n config: MCPServerConfig;\n transport: MCPTransport;\n tools: MCPTool[];\n resources: MCPResource[];\n connected: boolean;\n}\n\nexport class MCPClient {\n private servers = new Map<string, ServerConnection>();\n private eventbus: EventBus;\n private toolAdapter: ToolAdapter;\n private resourceAdapter: ResourceAdapter;\n private requestIdCounter = 0;\n\n constructor(eventbus?: EventBus) {\n this.eventbus = eventbus || new EventBus();\n this.toolAdapter = new ToolAdapter(this);\n this.resourceAdapter = new ResourceAdapter(this);\n }\n\n async connect(config: MCPServerConfig): Promise<void> {\n if (this.servers.has(config.name)) {\n await this.disconnect(config.name);\n }\n\n const transport: MCPTransport = config.type === 'stdio'\n ? new StdioTransport()\n : new SSETransport();\n\n const connection: ServerConnection = {\n config,\n transport,\n tools: [],\n resources: [],\n connected: false,\n };\n\n this.servers.set(config.name, connection);\n\n try {\n const connectPromise = transport.connect(config);\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error(`Connection timeout: ${config.name}`)), MCP_CONNECTION_TIMEOUT_MS);\n });\n\n await Promise.race([connectPromise, timeoutPromise]);\n\n connection.connected = true;\n\n transport.onMessage((message: JSONRPCMessage) => {\n this.handleMessage(config.name, message);\n });\n\n await this.initializeServer(config.name);\n\n this.eventbus.emit(Events.MCP_CONNECTED, {\n serverName: config.name,\n type: config.type,\n });\n } catch (error) {\n transport.disconnect();\n this.servers.delete(config.name);\n\n this.eventbus.emit(Events.MCP_ERROR, {\n serverName: config.name,\n error: error instanceof Error ? error.message : String(error),\n });\n\n throw error;\n }\n }\n\n disconnect(name: string): void {\n const connection = this.servers.get(name);\n if (!connection) return;\n\n connection.transport.disconnect();\n connection.connected = false;\n this.servers.delete(name);\n\n this.eventbus.emit(Events.MCP_DISCONNECTED, {\n serverName: name,\n });\n }\n\n disconnectAll(): void {\n for (const name of this.servers.keys()) {\n this.disconnect(name);\n }\n }\n\n listTools(serverName?: string): MCPTool[] {\n if (serverName) {\n const connection = this.servers.get(serverName);\n return connection ? [...connection.tools] : [];\n }\n\n const allTools: MCPTool[] = [];\n for (const [, conn] of this.servers) {\n allTools.push(...conn.tools);\n }\n return allTools;\n }\n\n getAdaptedTools(): Tool[] {\n const tools: Tool[] = [];\n for (const [name, conn] of this.servers) {\n tools.push(...this.toolAdapter.adaptBatch(conn.tools, name));\n }\n return tools;\n }\n\n async callTool(\n serverName: string,\n toolName: string,\n args: Record<string, unknown>,\n ): Promise<ToolResult> {\n const connection = this.servers.get(serverName);\n if (!connection) {\n return {\n success: false,\n output: '',\n error: `Server not connected: ${serverName}`,\n };\n }\n\n if (!connection.connected) {\n return {\n success: false,\n output: '',\n error: `Server disconnected: ${serverName}`,\n };\n }\n\n try {\n const requestId = ++this.requestIdCounter;\n const response = await this.sendRequest(connection, requestId, 'tools/call', {\n name: toolName,\n arguments: args,\n });\n\n const result = response.result as Record<string, unknown> | undefined;\n const content = result?.content;\n\n if (Array.isArray(content)) {\n const textParts = content\n .filter((c: unknown) => {\n const item = c as Record<string, unknown>;\n return item?.type === 'text' && typeof item?.text === 'string';\n })\n .map((c: unknown) => (c as Record<string, string>).text);\n\n return {\n success: true,\n output: textParts.join('\\n'),\n };\n }\n\n return {\n success: true,\n output: typeof content === 'string' ? content : JSON.stringify(content),\n };\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n output: '',\n error: errMsg,\n };\n }\n }\n\n async listResources(serverName: string): Promise<MCPResource[]> {\n const connection = this.servers.get(serverName);\n if (!connection) return [];\n\n try {\n const requestId = ++this.requestIdCounter;\n const response = await this.sendRequest(connection, requestId, 'resources/list', {});\n\n const result = response.result as Record<string, unknown> | undefined;\n const resources = result?.resources;\n\n if (Array.isArray(resources)) {\n return resources as MCPResource[];\n }\n\n return [];\n } catch {\n return [];\n }\n }\n\n async readResource(serverName: string, uri: string): Promise<string> {\n const connection = this.servers.get(serverName);\n if (!connection) {\n throw new Error(`Server not connected: ${serverName}`);\n }\n\n const requestId = ++this.requestIdCounter;\n const response = await this.sendRequest(connection, requestId, 'resources/read', { uri });\n\n const result = response.result as Record<string, unknown> | undefined;\n const contents = result?.contents;\n\n if (Array.isArray(contents)) {\n const textParts = contents\n .filter((c: unknown) => {\n const item = c as Record<string, unknown>;\n return typeof item?.text === 'string';\n })\n .map((c: unknown) => (c as Record<string, string>).text);\n\n return textParts.join('\\n');\n }\n\n return JSON.stringify(contents);\n }\n\n isConnected(name: string): boolean {\n const connection = this.servers.get(name);\n return connection ? connection.connected : false;\n }\n\n getConnectedServers(): string[] {\n const names: string[] = [];\n for (const [name, conn] of this.servers) {\n if (conn.connected) {\n names.push(name);\n }\n }\n return names;\n }\n\n private async initializeServer(serverName: string): Promise<void> {\n const connection = this.servers.get(serverName);\n if (!connection) return;\n\n const initRequestId = ++this.requestIdCounter;\n const initResponse = await this.sendRequest(connection, initRequestId, 'initialize', {\n protocolVersion: '2024-11-18',\n capabilities: {\n tools: {},\n resources: {},\n },\n clientInfo: {\n name: 'DeeperCode',\n version: '1.0.0',\n },\n });\n\n const notifyMessage = {\n jsonrpc: '2.0' as const,\n method: 'notifications/initialized',\n };\n await connection.transport.send(notifyMessage);\n\n const toolsRequestId = ++this.requestIdCounter;\n const toolsResponse = await this.sendRequest(connection, toolsRequestId, 'tools/list', {});\n\n const toolsResult = toolsResponse.result as Record<string, unknown> | undefined;\n if (toolsResult?.tools && Array.isArray(toolsResult.tools)) {\n connection.tools = toolsResult.tools as MCPTool[];\n }\n\n this.eventbus.emit(Events.MCP_TOOLS_DISCOVERED, {\n serverName,\n toolCount: connection.tools.length,\n tools: connection.tools.map((t) => t.name),\n });\n }\n\n private async sendRequest(\n connection: ServerConnection,\n requestId: number,\n method: string,\n params: Record<string, unknown>,\n timeoutMs: number = 30000,\n ): Promise<JSONRPCResponse> {\n const request = {\n jsonrpc: '2.0' as const,\n id: requestId,\n method,\n params,\n };\n\n const responsePromise = new Promise<JSONRPCResponse>((resolve, reject) => {\n const timeout = setTimeout(() => {\n cleanup();\n reject(new Error(`Request timeout: ${method}`));\n }, timeoutMs);\n\n const cleanup = connection.transport.onMessage((message: JSONRPCMessage) => {\n if ('id' in message && message.id === requestId) {\n clearTimeout(timeout);\n cleanup();\n resolve(message as JSONRPCResponse);\n }\n });\n });\n\n await connection.transport.send(request);\n return responsePromise;\n }\n\n private handleMessage(_serverName: string, _message: JSONRPCMessage): void {\n // Messages are handled through the request/response pattern in sendRequest\n }\n}\n","export interface RetryOptions {\n onRetry?: (error: Error, attempt: number, delayMs: number) => void;\n}\n\nexport class RetryManager {\n private maxRetries: number;\n private baseDelayMs: number;\n private maxDelayMs: number;\n\n constructor(maxRetries: number = 3, baseDelayMs: number = 1000, maxDelayMs: number = 30000) {\n this.maxRetries = maxRetries;\n this.baseDelayMs = baseDelayMs;\n this.maxDelayMs = maxDelayMs;\n }\n\n async execute<T>(\n fn: () => Promise<T>,\n shouldRetry?: (error: Error, attempt: number) => boolean,\n options?: RetryOptions,\n ): Promise<T> {\n let lastError: Error | undefined;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n if (attempt === this.maxRetries) {\n break;\n }\n\n if (shouldRetry && !shouldRetry(lastError, attempt)) {\n break;\n }\n\n if (!shouldRetry && this.isDefaultNonRetryable(lastError)) {\n break;\n }\n\n const delay = this.calculateDelay(attempt);\n\n if (options?.onRetry) {\n options.onRetry(lastError, attempt, delay);\n }\n\n await this.sleep(delay);\n }\n }\n\n throw lastError ?? new Error('Max retries exceeded');\n }\n\n withTimeout<T>(fn: () => Promise<T>, timeoutMs: number, signal?: AbortSignal): Promise<T> {\n const controller = new AbortController();\n\n return new Promise<T>((resolve, reject) => {\n const timer = setTimeout(() => {\n controller.abort();\n reject(new Error(`Request timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n\n const onAbort = (): void => {\n clearTimeout(timer);\n controller.abort();\n reject(new Error('Request was aborted'));\n };\n\n if (signal) {\n if (signal.aborted) {\n clearTimeout(timer);\n controller.abort();\n reject(new Error('Request was aborted'));\n return;\n }\n signal.addEventListener('abort', onAbort, { once: true });\n }\n\n fn()\n .then((result) => {\n clearTimeout(timer);\n if (signal) {\n signal.removeEventListener('abort', onAbort);\n }\n resolve(result);\n })\n .catch((error) => {\n clearTimeout(timer);\n if (signal) {\n signal.removeEventListener('abort', onAbort);\n }\n reject(error);\n });\n });\n }\n\n private calculateDelay(attempt: number): number {\n const exponentialDelay = this.baseDelayMs * Math.pow(2, attempt);\n const jitter = Math.random() * exponentialDelay;\n return Math.min(exponentialDelay + jitter, this.maxDelayMs);\n }\n\n private isDefaultNonRetryable(error: Error): boolean {\n const msg = error.message.toLowerCase();\n if (msg.includes('400') && !msg.includes('429')) return true;\n if (msg.includes('401') || msg.includes('unauthorized')) return true;\n if (msg.includes('403') || msg.includes('forbidden')) return true;\n if (msg.includes('404') || msg.includes('not found')) return true;\n return false;\n }\n\n private sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(resolve, ms);\n if (signal) {\n const onAbort = () => {\n clearTimeout(timer);\n reject(new Error('Retry sleep was aborted'));\n };\n if (signal.aborted) {\n clearTimeout(timer);\n reject(new Error('Retry sleep was aborted'));\n return;\n }\n signal.addEventListener('abort', onAbort, { once: true });\n }\n });\n }\n}\n","import type { ToolCall } from '../tools/tool-types.js';\nimport type { StreamChunk } from './types.js';\n\ninterface ParsedSSEEvent {\n data: string;\n event?: string;\n id?: string;\n}\n\ninterface PendingToolCall {\n id: string;\n name: string;\n argsStr: string;\n index: number;\n started: boolean;\n}\n\nexport class StreamHandler {\n private textBuffer: string;\n private thinkingBuffer: string;\n private toolCallBuffer: Map<number, PendingToolCall>;\n private finished: boolean;\n private lastYieldedIndex: number;\n\n constructor() {\n this.textBuffer = '';\n this.thinkingBuffer = '';\n this.toolCallBuffer = new Map();\n this.finished = false;\n this.lastYieldedIndex = -1;\n }\n\n reset(): void {\n this.textBuffer = '';\n this.thinkingBuffer = '';\n this.toolCallBuffer.clear();\n this.finished = false;\n this.lastYieldedIndex = -1;\n }\n\n handleEvent(event: string, data: string): StreamChunk | StreamChunk[] | null {\n if (event === 'error') {\n return { type: 'error', error: data || 'SSE error event' };\n }\n\n if (event === '[DONE]' || data === '[DONE]') {\n const results = this.finalizePendingToolCalls();\n this.finished = true;\n if (results.length > 0) {\n return [...results, { type: 'done' } as StreamChunk];\n }\n return { type: 'done' };\n }\n\n if (!data) {\n return null;\n }\n\n try {\n const parsed = JSON.parse(data) as Record<string, unknown>;\n const choices = parsed.choices as Array<Record<string, unknown>> | undefined;\n\n if (!choices || choices.length === 0) {\n return null;\n }\n\n const choice = choices[0];\n const delta = choice.delta as Record<string, unknown> | undefined;\n\n if (!delta) {\n const finishReason = choice.finish_reason as string | undefined;\n if (finishReason === 'stop' || finishReason === 'length' || finishReason === 'tool_calls') {\n const results = this.finalizePendingToolCalls();\n this.finished = true;\n if (results.length > 0) {\n return [...results, { type: 'done' } as StreamChunk];\n }\n return { type: 'done' };\n }\n return null;\n }\n\n if (delta.reasoning_content) {\n const thinkingChunk = delta.reasoning_content as string;\n this.thinkingBuffer += thinkingChunk;\n if (this.thinkingBuffer.length > 100_000) {\n this.thinkingBuffer = this.thinkingBuffer.slice(-80_000);\n }\n return {\n type: 'thinking',\n content: thinkingChunk,\n };\n }\n\n if (delta.tool_calls) {\n return this.handleToolCallsDelta(delta.tool_calls as Array<Record<string, unknown>>);\n }\n\n if (delta.content) {\n const textChunk = delta.content as string;\n this.textBuffer += textChunk;\n if (this.textBuffer.length > 500_000) {\n this.textBuffer = this.textBuffer.slice(-400_000);\n }\n return {\n type: 'text',\n content: textChunk,\n };\n }\n\n const finishReason = choice.finish_reason as string | undefined;\n if (finishReason === 'stop' || finishReason === 'length' || finishReason === 'tool_calls') {\n const results = this.finalizePendingToolCalls();\n this.finished = true;\n if (results.length > 0) {\n return [...results, { type: 'done' } as StreamChunk];\n }\n return { type: 'done' };\n }\n } catch {\n return {\n type: 'error',\n error: `Failed to parse SSE data: ${data.slice(0, 200)}`,\n };\n }\n\n return null;\n }\n\n getAccumulatedText(): string {\n return this.textBuffer;\n }\n\n getAccumulatedThinking(): string {\n return this.thinkingBuffer;\n }\n\n getToolCalls(): ToolCall[] {\n const result: ToolCall[] = [];\n const indices = [...this.toolCallBuffer.keys()].sort((a, b) => a - b);\n for (const idx of indices) {\n const pending = this.toolCallBuffer.get(idx);\n if (pending) {\n result.push({\n id: pending.id,\n name: pending.name,\n arguments: this.parseArgsStr(pending.argsStr),\n index: pending.index,\n });\n }\n }\n return result;\n }\n\n isFinished(): boolean {\n return this.finished;\n }\n\n private handleToolCallsDelta(toolCalls: Array<Record<string, unknown>>): StreamChunk[] {\n const results: StreamChunk[] = [];\n\n for (const tc of toolCalls) {\n const index = tc.index as number;\n const id = tc.id as string | undefined;\n const fn = tc.function as Record<string, unknown> | undefined;\n\n if (!this.toolCallBuffer.has(index)) {\n this.toolCallBuffer.set(index, {\n id: id ?? '',\n name: fn?.name as string ?? '',\n argsStr: '',\n index,\n started: false,\n });\n }\n\n const existing = this.toolCallBuffer.get(index)!;\n\n if (id) {\n existing.id = id;\n }\n if (fn?.name) {\n existing.name = fn.name as string;\n }\n if (fn?.arguments) {\n existing.argsStr += fn.arguments as string;\n }\n\n if (!existing.started) {\n existing.started = true;\n if (this.lastYieldedIndex >= 0) {\n const prev = this.toolCallBuffer.get(this.lastYieldedIndex);\n if (prev && prev !== existing) {\n results.push({\n type: 'tool_call_end',\n tool_call: {\n id: prev.id,\n name: prev.name,\n arguments: this.parseArgsStr(prev.argsStr),\n index: prev.index,\n },\n } as StreamChunk);\n }\n }\n this.lastYieldedIndex = index;\n results.push({\n type: 'tool_call_start',\n tool_call: { id: existing.id, name: existing.name, index: existing.index },\n } as StreamChunk);\n }\n }\n\n return results;\n }\n\n private finalizePendingToolCalls(): StreamChunk[] {\n const results: StreamChunk[] = [];\n if (this.lastYieldedIndex >= 0) {\n const last = this.toolCallBuffer.get(this.lastYieldedIndex);\n if (last) {\n results.push({\n type: 'tool_call_end',\n tool_call: {\n id: last.id,\n name: last.name,\n arguments: this.parseArgsStr(last.argsStr),\n index: last.index,\n },\n } as StreamChunk);\n }\n this.lastYieldedIndex = -1;\n }\n return results;\n }\n\n private parseArgsStr(argsStr: string): Record<string, unknown> {\n if (!argsStr) return {};\n try {\n return JSON.parse(argsStr) as Record<string, unknown>;\n } catch {\n const trimmed = argsStr.trim();\n if (trimmed.startsWith('{') && !trimmed.endsWith('}')) {\n try {\n return JSON.parse(trimmed + '}') as Record<string, unknown>;\n } catch {\n try {\n return JSON.parse(trimmed + '}}') as Record<string, unknown>;\n } catch {}\n }\n }\n return {};\n }\n }\n}\n","import { appendFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { DEEPER_LOGS_DIR } from './constants.js';\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nconst LOG_LEVEL_RANK: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\nexport class Logger {\n private level: LogLevel;\n private logDir: string;\n private currentLogFile: string;\n\n constructor(level: LogLevel = 'info', logDir?: string) {\n this.level = level;\n this.logDir = logDir ?? DEEPER_LOGS_DIR;\n this.currentLogFile = this.generateLogFileName();\n this.ensureLogDir();\n }\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n debug(message: string, data?: unknown): void {\n this.log('debug', message, data);\n }\n\n info(message: string, data?: unknown): void {\n this.log('info', message, data);\n }\n\n warn(message: string, data?: unknown): void {\n this.log('warn', message, data);\n }\n\n error(message: string, data?: unknown): void {\n this.log('error', message, data);\n }\n\n private log(level: LogLevel, message: string, data?: unknown): void {\n if (LOG_LEVEL_RANK[level] < LOG_LEVEL_RANK[this.level]) {\n return;\n }\n\n const timestamp = new Date().toISOString();\n const formatted = this.formatMessage(level, timestamp, message, data);\n\n switch (level) {\n case 'error':\n console.error(formatted);\n break;\n case 'warn':\n console.warn(formatted);\n break;\n default:\n console.log(formatted);\n break;\n }\n\n try {\n appendFileSync(this.currentLogFile, this.stripAnsi(formatted) + '\\n', 'utf-8');\n } catch {\n }\n }\n\n private formatMessage(level: LogLevel, timestamp: string, message: string, data?: unknown): string {\n const levelUpper = level.toUpperCase();\n const base = `[${timestamp}] [${levelUpper}] ${message}`;\n if (data !== undefined) {\n if (typeof data === 'string') {\n return `${base} ${data}`;\n }\n if (data instanceof Error) {\n return `${base} ${data.message}\\n${data.stack ?? ''}`;\n }\n try {\n return `${base} ${JSON.stringify(data)}`;\n } catch {\n return `${base} [Unserializable data]`;\n }\n }\n return base;\n }\n\n private stripAnsi(text: string): string {\n return text.replace(/\\x1b\\[[0-9;]*m/g, '');\n }\n\n private generateLogFileName(): string {\n const now = new Date();\n const dateStr = now.toISOString().slice(0, 10).replace(/-/g, '');\n return join(this.logDir, `deeper-${dateStr}.log`);\n }\n\n private ensureLogDir(): void {\n const dir = dirname(this.currentLogFile);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n }\n}\n\nexport const logger = new Logger();\n","import type { ChatMessage, DeepSeekConfig, StreamChunk } from './types.js';\nimport type { ToolDefinition } from '../tools/tool-types.js';\nimport { RetryManager } from './RetryManager.js';\nimport { StreamHandler } from './StreamHandler.js';\nimport { logger } from '../core/logger.js';\n\ninterface ChatCompletionRequest {\n model: string;\n messages: Array<Record<string, unknown>>;\n temperature?: number;\n max_tokens?: number;\n stream?: boolean;\n tools?: Array<Record<string, unknown>>;\n tool_choice?: string;\n}\n\ninterface ChatCompletionResponse {\n id: string;\n object: string;\n created: number;\n model: string;\n choices: Array<{\n index: number;\n message: {\n role: string;\n content: string | null;\n tool_calls?: Array<{\n id: string;\n type: string;\n function: {\n name: string;\n arguments: string;\n };\n }>;\n reasoning_content?: string;\n };\n finish_reason: string;\n }>;\n}\n\nconst DEFAULT_TIMEOUT_MS = 120000;\nconst MAX_RETRIES = 3;\n\nconst isRetryable = (error: Error, _attempt: number): boolean => {\n const msg = error.message.toLowerCase();\n if (msg.includes('429') || msg.includes('rate limit')) return true;\n if (msg.includes('500') || msg.includes('502') || msg.includes('503') || msg.includes('504')) return true;\n if (msg.includes('timeout') || msg.includes('abort')) return _attempt < 2;\n if (msg.includes('econnreset') || msg.includes('econnrefused')) return true;\n return false;\n};\n\nexport class DeepSeekClient {\n private config: DeepSeekConfig;\n private retryManager: RetryManager;\n\n constructor(config: DeepSeekConfig) {\n this.config = config;\n this.retryManager = new RetryManager(MAX_RETRIES);\n }\n\n async chat(\n messages: ChatMessage[],\n tools?: ToolDefinition[],\n overrides?: Partial<DeepSeekConfig>,\n ): Promise<ChatMessage> {\n const cfg = this.mergeConfig(overrides);\n const body = this.buildRequestBody(messages, tools, cfg, false);\n\n const response = await this.retryManager.execute(async () => {\n return this.retryManager.withTimeout(\n () => this.makeRequest(cfg, body),\n DEFAULT_TIMEOUT_MS,\n cfg.signal,\n );\n }, isRetryable);\n\n const data = (await response.json()) as ChatCompletionResponse;\n\n if (!data.choices || data.choices.length === 0) {\n throw new Error('No choices returned from API');\n }\n\n const choice = data.choices[0];\n const message = choice.message;\n\n const result: ChatMessage = {\n role: 'assistant',\n content: message.content,\n };\n\n if (message.tool_calls) {\n result.tool_calls = message.tool_calls.map((tc) => ({\n id: tc.id,\n name: tc.function.name,\n arguments: this.parseArguments(tc.function.arguments),\n }));\n }\n\n if (message.reasoning_content) {\n result.reasoning_content = message.reasoning_content;\n }\n\n return result;\n }\n\n async chatStream(\n messages: ChatMessage[],\n tools?: ToolDefinition[],\n overrides?: Partial<DeepSeekConfig>,\n ): Promise<AsyncIterable<StreamChunk>> {\n const cfg = this.mergeConfig(overrides);\n const body = this.buildRequestBody(messages, tools, cfg, true);\n\n const response = await this.retryManager.execute(async () => {\n return this.retryManager.withTimeout(\n () => this.makeRequest(cfg, body),\n DEFAULT_TIMEOUT_MS,\n cfg.signal,\n );\n }, isRetryable);\n\n if (!response.body) {\n throw new Error('Response body is empty');\n }\n\n return this.createStreamIterable(response.body);\n }\n\n private async *createStreamIterable(body: unknown): AsyncIterable<StreamChunk> {\n const handler = new StreamHandler();\n let buffer = '';\n const stream = body as AsyncIterable<Uint8Array>;\n\n for await (const chunk of stream) {\n const text = typeof chunk === 'string' ? chunk : new TextDecoder().decode(chunk);\n buffer += text;\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':')) {\n continue;\n }\n\n if (trimmed.startsWith('data: ')) {\n const data = trimmed.slice(6);\n const result = handler.handleEvent('message', data);\n if (result) {\n if (Array.isArray(result)) { for (const r of result) yield r; }\n else yield result;\n }\n } else if (trimmed === 'data: [DONE]') {\n yield { type: 'done' };\n return;\n }\n }\n }\n\n if (buffer.trim()) {\n const trimmed = buffer.trim();\n if (trimmed.startsWith('data: ')) {\n const data = trimmed.slice(6);\n const result = handler.handleEvent('message', data);\n if (result) {\n if (Array.isArray(result)) { for (const r of result) yield r; }\n else yield result;\n }\n }\n }\n\n if (!handler.isFinished()) {\n yield { type: 'done' };\n }\n }\n\n private buildRequestBody(\n messages: ChatMessage[],\n tools: ToolDefinition[] | undefined,\n config: DeepSeekConfig,\n stream: boolean,\n ): string {\n const body: ChatCompletionRequest = {\n model: config.model,\n messages: messages.map((m) => {\n const msg: Record<string, unknown> = {\n role: m.role,\n content: m.content,\n };\n if (m.tool_calls) {\n msg.tool_calls = m.tool_calls.map((tc) => ({\n id: tc.id,\n type: 'function',\n function: {\n name: tc.name,\n arguments: JSON.stringify(tc.arguments),\n },\n }));\n }\n if (m.tool_call_id) {\n msg.tool_call_id = m.tool_call_id;\n }\n if (m.role === 'tool') {\n msg.name = m.name || 'tool';\n } else if (m.name) {\n msg.name = m.name;\n }\n const rc = m.reasoning_content || m.thinking;\n if (rc) msg.reasoning_content = rc;\n return msg;\n }),\n temperature: config.temperature,\n max_tokens: config.maxTokens,\n stream,\n };\n\n if (config.think?.enabled) {\n (body as Record<string, unknown>).thinking = {\n type: 'enabled',\n budget_tokens: config.think.budgetTokens,\n };\n }\n\n if (tools && tools.length > 0) {\n body.tools = tools.map((tool) => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n }));\n body.tool_choice = 'auto';\n }\n\n return JSON.stringify(body);\n }\n\n private async makeRequest(config: DeepSeekConfig, body: string): Promise<Response> {\n const url = `${config.baseUrl}/v1/chat/completions`;\n\n logger.debug('DeepSeek API request', { url, model: config.model });\n\n const fetchOpts: RequestInit = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${config.apiKey}`,\n 'Accept': 'application/json',\n },\n body,\n };\n\n if (config.signal) {\n fetchOpts.signal = config.signal;\n }\n\n const response = await fetch(url, fetchOpts);\n\n if (!response.ok) {\n const errorBody = await response.text().catch(() => '');\n logger.error('DeepSeek API error', {\n status: response.status,\n statusText: response.statusText,\n body: errorBody.slice(0, 500),\n });\n throw new Error(`API request failed: ${response.status} ${response.statusText} - ${errorBody.slice(0, 200)}`);\n }\n\n return response;\n }\n\n private parseArguments(argsStr: string): Record<string, unknown> {\n try {\n return JSON.parse(argsStr) as Record<string, unknown>;\n } catch {\n return {};\n }\n }\n\n private mergeConfig(overrides?: Partial<DeepSeekConfig>): DeepSeekConfig {\n if (!overrides) {\n return this.config;\n }\n return {\n ...this.config,\n ...overrides,\n think: {\n ...this.config.think,\n ...(overrides.think ?? {}),\n },\n };\n }\n}\n","import process from 'node:process';\n\n// ---- output buffer ----\nlet writeBuf = '';\nlet writeTimer: ReturnType<typeof setTimeout> | null = null;\nexport const O = (s: string) => { writeBuf += s; if (!writeTimer) writeTimer = setTimeout(() => { const b = writeBuf; writeBuf = ''; writeTimer = null; if (b) process.stdout.write(b); }, 16); };\nexport function Oflush() { if (writeTimer) { clearTimeout(writeTimer); writeTimer = null; } if (writeBuf) { const b = writeBuf; writeBuf = ''; process.stdout.write(b); } }\n\n// ---- ANSI colors ----\nexport const A = {\n R: '\\x1b[0m', d: '\\x1b[2m', b: '\\x1b[1m',\n c: '\\x1b[36m', g: '\\x1b[32m', y: '\\x1b[33m',\n r: '\\x1b[31m', B: '\\x1b[34m', m: '\\x1b[35m',\n G: '\\x1b[90m',\n};\nexport function d(s: string) { return A.d + s + A.R; }\nexport function b(s: string) { return A.b + s + A.R; }\nexport function c(s: string) { return A.c + s + A.R; }\nexport function g(s: string) { return A.g + s + A.R; }\nexport function y(s: string) { return A.y + s + A.R; }\nexport function r(s: string) { return A.r + s + A.R; }\nexport function B(s: string) { return A.B + s + A.R; }\nexport function G(s: string) { return A.G + s + A.R; }\n\n// ---- thinking animation ----\nlet stepTs = Date.now();\nconst WAVE_CHARS = '▁▂▃▄▅▆▇█';\nconst BRAILLE = '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏';\n\nexport function resetTimer() { stepTs = Date.now(); }\nexport function elapsedSec() { return (Date.now() - stepTs) / 1000; }\n\nexport function thinkingAnim(label: string): string {\n return thinkingAnimAt(label, stepTs);\n}\nexport function thinkingAnimAt(label: string, start: number): string {\n const t = (Date.now() - start) / 1000;\n let wave = '';\n for (let i = 0; i < 9; i++) {\n const v = Math.sin((i / 9) * Math.PI * 2 + t * 2.5) * 0.5 + 0.5;\n const ch = WAVE_CHARS[Math.floor(v * 7)] || '█';\n if (v > 0.67) wave += A.c + ch + A.R;\n else if (v > 0.33) wave += A.m + ch + A.R;\n else wave += A.G + ch + A.R;\n }\n const spin = A.c + A.b + BRAILLE[Math.floor((t * 10) % 8)] + A.R;\n const orb = ['◜', '◝', '◞', '◟'];\n const pulse = Math.sin(t * 4) > 0 ? A.c + orb[Math.floor((t * 7) % 4)] + A.R : A.G + orb[Math.floor((t * 7) % 4)] + A.R;\n return A.d + ' ' + A.R + wave + ' ' + spin + ' ' + pulse + ' ' + A.d + label + A.R + ' ' + A.G + t.toFixed(1) + 's' + A.R;\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve, normalize } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const read_file: Tool = {\n name: 'read_file',\n description: '读取文件内容,支持指定行范围和偏移量,最大支持1万行',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件绝对路径' },\n offset: { type: 'number', description: '起始行号(从1开始)' },\n limit: { type: 'number', description: '读取行数(最大10000)' },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n const statSync = await import('node:fs').then(m => m.statSync);\n const stat = statSync(filePath);\n if (stat.isDirectory()) {\n return { success: false, error: `路径是目录,不是文件: ${filePath}`, output: '' };\n }\n const maxSize = 20 * 1024 * 1024;\n if (stat.size > maxSize) {\n return { success: false, error: `文件过大 (${(stat.size / 1024 / 1024).toFixed(1)}MB),限制 ${maxSize / 1024 / 1024}MB`, output: '' };\n }\n let raw = readFileSync(filePath, 'utf-8');\n const offset = (params.offset as number) ?? 1;\n let limit = params.limit as number | undefined;\n if (limit !== undefined) limit = Math.min(limit, 10000);\n if (offset > 1 || limit !== undefined) {\n const lines = raw.split('\\n');\n const start = Math.max(0, offset - 1);\n const end = limit !== undefined ? Math.min(start + limit, lines.length) : lines.length;\n raw = lines.slice(start, end).join('\\n');\n } else {\n const lines = raw.split('\\n');\n if (lines.length > 10000) {\n raw = lines.slice(0, 10000).join('\\n') + `\\n... (共${lines.length}行,仅显示前10000行)`;\n }\n }\n return { success: true, output: raw, metadata: { size: stat.size, path: normalize(filePath) } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { existsSync, mkdirSync } from 'node:fs';\nimport { writeFile, appendFile, readFile } from 'node:fs/promises';\nimport { dirname, resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const write_file: Tool = {\n name: 'write_file',\n description: '写入文件内容,自动创建父目录。最大 512KB。空内容会跳过写入。',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件绝对路径' },\n content: { type: 'string', description: '要写入的内容' },\n append: { type: 'boolean', description: '是否追加模式' },\n },\n required: ['file_path', 'content'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n const content = params.content as string;\n if (content.length > 524_288) {\n return { success: false, error: `内容过大 (${content.length}B, 最大 512KB)`, output: '' };\n }\n try {\n const filePath = resolve(params.file_path as string);\n const append = (params.append as boolean) ?? false;\n if (!content.trim() && !append) {\n return { success: false, error: `内容为空,跳过写入: ${filePath}`, output: '' };\n }\n const dir = dirname(filePath);\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n if (append) {\n await appendFile(filePath, content, 'utf-8');\n } else {\n await writeFile(filePath, content, 'utf-8');\n }\n const lineCount = content.split('\\n').length;\n return { success: true, output: `文件已${append ? '追加' : '写入'}: ${filePath} (${lineCount}行)` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const edit_file: Tool = {\n name: 'edit_file',\n description: '通过搜索替换编辑文件内容',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件绝对路径' },\n old_str: { type: 'string', description: '要替换的源字符串' },\n new_str: { type: 'string', description: '替换后的字符串' },\n replace_all: { type: 'boolean', description: '是否替换所有匹配项' },\n },\n required: ['file_path', 'old_str', 'new_str'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const oldStr = params.old_str as string;\n const newStr = params.new_str as string;\n const replaceAll = (params.replace_all as boolean) ?? false;\n if (!existsSync(filePath)) return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n const content = readFileSync(filePath, 'utf-8');\n const index = content.indexOf(oldStr);\n if (index === -1) return { success: false, error: '未找到匹配的字符串', output: '' };\n let replaced: string; let count: number;\n if (replaceAll) {\n const regex = new RegExp(oldStr.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g');\n const before = content;\n replaced = content.replace(regex, newStr.replace(/\\$/g, '$$$$'));\n count = (before.match(regex) || []).length;\n } else {\n replaced = content.slice(0, index) + newStr + content.slice(index + oldStr.length);\n count = 1;\n }\n writeFileSync(filePath, replaced, 'utf-8');\n return { success: true, output: `已替换 ${count} 处匹配: ${filePath}` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { unlinkSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const delete_file: Tool = {\n name: 'delete_file',\n description: '删除指定文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件绝对路径' },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n unlinkSync(filePath);\n return { success: true, output: `已删除: ${filePath}` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readdirSync, existsSync } from 'node:fs';\nimport { resolve, join } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const list_dir: Tool = {\n name: 'list_dir',\n description: '列出目录内容',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n dir_path: { type: 'string', description: '目录绝对路径' },\n recursive: { type: 'boolean', description: '是否递归列出' },\n max_depth: { type: 'number', description: '递归最大深度' },\n },\n required: ['dir_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const dirPath = resolve(params.dir_path as string);\n const recursive = (params.recursive as boolean) ?? false;\n const maxDepth = (params.max_depth as number) ?? 3;\n if (!existsSync(dirPath)) {\n return { success: false, error: `目录不存在: ${dirPath}`, output: '' };\n }\n const { statSync } = await import('node:fs');\n const lines: string[] = [];\n function walk(dir: string, depth: number, prefix: string) {\n if (depth > maxDepth) return;\n try {\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const isDir = entry.isDirectory();\n lines.push(`${prefix}${isDir ? '📁' : '📄'} ${entry.name}`);\n if (isDir && recursive) {\n walk(join(dir, entry.name), depth + 1, prefix + ' ');\n }\n }\n } catch {\n lines.push(`${prefix}权限不足`);\n }\n }\n walk(dirPath, 1, '');\n return { success: true, output: lines.join('\\n'), metadata: { path: dirPath, entries: lines.length } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const glob_find: Tool = {\n name: 'glob_find',\n description: '使用 glob 模式匹配查找文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n pattern: { type: 'string', description: 'Glob 匹配模式,如 **/*.ts' },\n cwd: { type: 'string', description: '搜索根目录' },\n ignore: { type: 'array', items: { type: 'string' }, description: '忽略模式列表' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['pattern'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const pattern = params.pattern as string;\n const cwd = (params.cwd as string) ? resolve(params.cwd as string) : process.cwd();\n const ignore = (params.ignore as string[]) ?? [];\n const maxResults = (params.max_results as number) ?? 1000;\n const fg = await import('fast-glob');\n const files = await fg.default(pattern, {\n cwd,\n ignore: ['node_modules/**', '.git/**', ...ignore],\n absolute: false,\n dot: false,\n onlyFiles: true,\n });\n const results = files.slice(0, maxResults);\n return {\n success: true,\n output: results.join('\\n'),\n metadata: { count: results.length, total: files.length, pattern },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { renameSync, existsSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const move_file: Tool = {\n name: 'move_file',\n description: '移动或重命名文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n source: { type: 'string', description: '源文件路径' },\n destination: { type: 'string', description: '目标文件路径' },\n },\n required: ['source', 'destination'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const source = resolve(params.source as string);\n const dest = resolve(params.destination as string);\n if (!existsSync(source)) {\n return { success: false, error: `源文件不存在: ${source}`, output: '' };\n }\n const destDir = dirname(dest);\n const { mkdirSync } = await import('node:fs');\n if (!existsSync(destDir)) {\n mkdirSync(destDir, { recursive: true });\n }\n renameSync(source, dest);\n return { success: true, output: `已移动: ${source} -> ${dest}` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { copyFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const copy_file: Tool = {\n name: 'copy_file',\n description: '复制文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n source: { type: 'string', description: '源文件路径' },\n destination: { type: 'string', description: '目标文件路径' },\n },\n required: ['source', 'destination'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const source = resolve(params.source as string);\n const dest = resolve(params.destination as string);\n if (!existsSync(source)) {\n return { success: false, error: `源文件不存在: ${source}`, output: '' };\n }\n const destDir = dirname(dest);\n if (!existsSync(destDir)) {\n mkdirSync(destDir, { recursive: true });\n }\n copyFileSync(source, dest);\n return { success: true, output: `已复制: ${source} -> ${dest}` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { mkdirSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const create_dir: Tool = {\n name: 'create_dir',\n description: '创建目录(递归创建父目录)',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n dir_path: { type: 'string', description: '目录绝对路径' },\n },\n required: ['dir_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const dirPath = resolve(params.dir_path as string);\n if (existsSync(dirPath)) {\n return { success: true, output: `目录已存在: ${dirPath}` };\n }\n mkdirSync(dirPath, { recursive: true });\n return { success: true, output: `目录已创建: ${dirPath}` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { statSync, existsSync } from 'node:fs';\nimport { resolve, basename } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const file_info: Tool = {\n name: 'file_info',\n description: '获取文件元信息(大小、修改时间等)',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件绝对路径' },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n const stat = statSync(filePath);\n const info = {\n name: basename(filePath),\n path: filePath,\n size: stat.size,\n sizeFormatted: formatSize(stat.size),\n isDirectory: stat.isDirectory(),\n isFile: stat.isFile(),\n isSymlink: stat.isSymbolicLink(),\n created: stat.birthtime.toISOString(),\n modified: stat.mtime.toISOString(),\n accessed: stat.atime.toISOString(),\n permissions: stat.mode.toString(8).slice(-3),\n readable: true,\n writable: true,\n };\n return { success: true, output: JSON.stringify(info, null, 2), metadata: info };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / 1024 / 1024).toFixed(1)} MB`;\n return `${(bytes / 1024 / 1024 / 1024).toFixed(1)} GB`;\n}\n","import { watch, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const watch_file: Tool = {\n name: 'watch_file',\n description: '监听文件变化并返回初始状态',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件绝对路径' },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n return {\n success: true,\n output: `监听已设置: ${filePath}(文件变化将在下次查询时反映)`,\n metadata: { watching: true, path: filePath },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const batch_read: Tool = {\n name: 'batch_read',\n description: '批量读取多个文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_paths: { type: 'array', items: { type: 'string' }, description: '文件路径列表' },\n max_size_per_file: { type: 'number', description: '单文件最大字节数' },\n },\n required: ['file_paths'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const paths = params.file_paths as string[];\n const maxSize = (params.max_size_per_file as number) ?? 1024 * 1024;\n const results: Record<string, { content: string; error?: string }> = {};\n for (const p of paths) {\n const abs = resolve(p);\n try {\n if (!existsSync(abs)) {\n results[p] = { content: '', error: '文件不存在' };\n continue;\n }\n const stat = await import('node:fs').then(m => m.statSync(abs));\n if (stat.size > maxSize) {\n results[p] = { content: '', error: `文件过大 (${stat.size} > ${maxSize})` };\n continue;\n }\n results[p] = { content: readFileSync(abs, 'utf-8') };\n } catch (e) {\n results[p] = { content: '', error: (e as Error).message };\n }\n }\n const output = Object.entries(results)\n .map(([path, r]) => {\n if (r.error) return `--- ${path} (ERROR: ${r.error}) ---`;\n return `--- ${path} ---\\n${r.content}`;\n })\n .join('\\n\\n');\n return {\n success: true,\n output,\n metadata: { files: paths.length, read: Object.values(results).filter(r => !r.error).length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { existsSync, mkdirSync } from 'node:fs';\nimport { writeFile } from 'node:fs/promises';\nimport { resolve, dirname } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const batch_write: Tool = {\n name: 'batch_write',\n description: '批量写入多个文件,自动创建父目录,跳过空内容文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n files: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n file_path: { type: 'string' },\n content: { type: 'string' },\n },\n },\n description: '文件列表 [{file_path, content}]',\n },\n },\n required: ['files'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const files = params.files as { file_path: string; content: string }[];\n if (!files || !files.length) {\n return { success: false, error: '文件列表为空', output: '' };\n }\n const results: string[] = [];\n const skipped: string[] = [];\n for (const f of files) {\n const abs = resolve(f.file_path);\n const content = f.content || '';\n if (!content.trim()) {\n skipped.push(abs);\n continue;\n }\n if (content.length > 524_288) {\n skipped.push(`${abs} (内容过大)`);\n continue;\n }\n const dir = dirname(abs);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n await writeFile(abs, content, 'utf-8');\n results.push(abs);\n }\n let output = `已写入 ${results.length} 个文件`;\n if (skipped.length > 0) output += `,跳过 ${skipped.length} 个(空内容)`;\n if (results.length > 0) output += ':\\n' + results.join('\\n');\n return {\n success: results.length > 0,\n output,\n metadata: { count: results.length, skipped: skipped.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const diff_files: Tool = {\n name: 'diff_files',\n description: '比较两个文件的差异',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_a: { type: 'string', description: '文件A路径' },\n file_b: { type: 'string', description: '文件B路径' },\n context_lines: { type: 'number', description: '上下文行数' },\n },\n required: ['file_a', 'file_b'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const fileA = resolve(params.file_a as string);\n const fileB = resolve(params.file_b as string);\n const contextLines = (params.context_lines as number) ?? 3;\n if (!existsSync(fileA)) return { success: false, error: `文件A不存在: ${fileA}`, output: '' };\n if (!existsSync(fileB)) return { success: false, error: `文件B不存在: ${fileB}`, output: '' };\n const contentA = readFileSync(fileA, 'utf-8');\n const contentB = readFileSync(fileB, 'utf-8');\n const Diff = await import('diff');\n const patch = Diff.structuredPatch(\n fileA, fileB, contentA, contentB,\n 'a', 'b',\n { context: contextLines }\n );\n let output = '';\n for (const hunk of patch.hunks) {\n output += `@@ -${hunk.oldStart},${hunk.oldLines} +${hunk.newStart},${hunk.newLines} @@\\n`;\n for (const line of hunk.lines) {\n output += line + '\\n';\n }\n }\n return { success: true, output: output || '文件内容相同' };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const merge_files: Tool = {\n name: 'merge_files',\n description: '合并多个文件内容写入目标文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_paths: { type: 'array', items: { type: 'string' }, description: '源文件路径列表' },\n output: { type: 'string', description: '输出文件路径' },\n separator: { type: 'string', description: '文件间分隔符,默认换行' },\n },\n required: ['file_paths', 'output'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const paths = params.file_paths as string[];\n const output = resolve(params.output as string);\n const sep = (params.separator as string) ?? '\\n';\n const parts: string[] = [];\n for (const p of paths) {\n const abs = resolve(p);\n if (!existsSync(abs)) {\n return { success: false, error: `文件不存在: ${abs}`, output: '' };\n }\n parts.push(readFileSync(abs, 'utf-8'));\n }\n const merged = parts.join(sep);\n writeFileSync(output, merged, 'utf-8');\n return {\n success: true,\n output: `已合并 ${paths.length} 个文件到: ${output}`,\n metadata: { count: paths.length, size: merged.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const grep_search: Tool = {\n name: 'grep_search',\n description: '使用正则表达式搜索文件内容',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n pattern: { type: 'string', description: '搜索正则表达式' },\n file_path: { type: 'string', description: '目标文件路径' },\n dir_path: { type: 'string', description: '目标目录路径' },\n case_sensitive: { type: 'boolean', description: '是否区分大小写' },\n glob: { type: 'string', description: '文件过滤模式,如 *.ts' },\n max_results: { type: 'number', description: '最大结果数' },\n context_lines: { type: 'number', description: '上下文行数' },\n },\n required: ['pattern'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const pattern = params.pattern as string;\n const filePath = params.file_path as string | undefined;\n const dirPath = params.dir_path as string | undefined;\n const caseSensitive = (params.case_sensitive as boolean) ?? false;\n const glob = params.glob as string | undefined;\n const maxResults = (params.max_results as number) ?? 100;\n const contextLines = (params.context_lines as number) ?? 0;\n\n const regex = new RegExp(pattern, caseSensitive ? 'gm' : 'gim');\n const results: string[] = [];\n const maxFileSize = 5 * 1024 * 1024;\n\n function searchFile(fp: string): void {\n if (results.length >= maxResults) return;\n try {\n const stat = statSync(fp);\n if (stat.size > maxFileSize) return;\n const content = readFileSync(fp, 'utf-8');\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length && results.length < maxResults; i++) {\n if (regex.test(lines[i])) {\n regex.lastIndex = 0;\n const lineNum = i + 1;\n if (contextLines > 0) {\n const from = Math.max(0, i - contextLines);\n const to = Math.min(lines.length, i + contextLines + 1);\n for (let j = from; j < to; j++) {\n results.push(`${fp}:${j + 1}:${lines[j]}`);\n }\n } else {\n results.push(`${fp}:${lineNum}:${lines[i]}`);\n }\n }\n }\n } catch { /* skip */ }\n }\n\n if (filePath) {\n const abs = resolve(filePath);\n if (existsSync(abs)) searchFile(abs);\n } else if (dirPath) {\n const fg = await import('fast-glob');\n const pattern = glob ? `**/${glob}` : '**/*';\n const files = await fg.default(pattern, {\n cwd: resolve(dirPath),\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n for (const f of files) {\n if (results.length >= maxResults) break;\n searchFile(f);\n }\n }\n\n return {\n success: true,\n output: results.join('\\n') || '未找到匹配结果',\n metadata: { matches: results.length, maxResults },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve, relative } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const codebase_search: Tool = {\n name: 'codebase_search',\n description: '代码库语义搜索,基于关键词进行加权评分搜索',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n query: { type: 'string', description: '搜索查询关键词' },\n cwd: { type: 'string', description: '搜索根目录' },\n glob: { type: 'string', description: '文件过滤模式' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['query'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const query = (params.query as string).toLowerCase();\n const cwd = (params.cwd as string) ? resolve(params.cwd as string) : process.cwd();\n const glob = (params.glob as string) ?? '**/*.{ts,js,tsx,jsx,py,java,go,rs}';\n const maxResults = (params.max_results as number) ?? 50;\n const keywords = query.split(/\\s+/).filter(k => k.length > 0);\n\n const fg = await import('fast-glob');\n const files = await fg.default(glob, {\n cwd,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**', '*.min.*'],\n onlyFiles: true,\n });\n\n const scored: { file: string; score: number; snippet: string }[] = [];\n const maxFileSize = 500 * 1024;\n\n for (const fp of files) {\n try {\n const stat = statSync(fp);\n if (stat.size > maxFileSize) continue;\n const content = readFileSync(fp, 'utf-8');\n const lower = content.toLowerCase();\n let score = 0;\n for (const kw of keywords) {\n const matches = lower.split(kw).length - 1;\n score += matches * 10;\n }\n const fileName = fp.split(/[/\\\\]/).pop()?.toLowerCase() ?? '';\n for (const kw of keywords) {\n if (fileName.includes(kw)) score += 50;\n }\n if (score > 0) {\n const idx = lower.indexOf(keywords[0]);\n const snippet = idx >= 0\n ? content.slice(Math.max(0, idx - 40), idx + 80).replace(/\\n/g, ' ')\n : content.slice(0, 120).replace(/\\n/g, ' ');\n scored.push({ file: relative(cwd, fp), score, snippet });\n }\n } catch { /* skip */ }\n }\n\n scored.sort((a, b) => b.score - a.score);\n const top = scored.slice(0, maxResults);\n const output = top.length > 0\n ? top.map(r => `${r.file} (score: ${r.score})\\n ${r.snippet}`).join('\\n\\n')\n : '未找到相关结果';\n\n return { success: true, output, metadata: { total: scored.length, shown: top.length } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve, relative } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const symbol_search: Tool = {\n name: 'symbol_search',\n description: '在代码库中搜索符号(函数、类、变量定义)',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: '符号名称' },\n cwd: { type: 'string', description: '搜索根目录' },\n type: { type: 'string', description: '符号类型: function, class, variable, interface, type', enum: ['function', 'class', 'variable', 'interface', 'type', 'all'] },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['name'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const name = params.name as string;\n const cwd = (params.cwd as string) ? resolve(params.cwd as string) : process.cwd();\n const symbolType = (params.type as string) ?? 'all';\n const maxResults = (params.max_results as number) ?? 50;\n\n const patterns: [string, RegExp][] = [];\n if (symbolType === 'all' || symbolType === 'function') {\n patterns.push(['function', new RegExp(`(?:function\\\\s+${name}|${name}\\\\s*[=:]\\\\s*(?:async\\\\s+)?(?:function|\\\\([^)]*\\\\)\\\\s*=>)|(?:async\\\\s+)?${name}\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{`, 'gmi')]);\n }\n if (symbolType === 'all' || symbolType === 'class') {\n patterns.push(['class', new RegExp(`class\\\\s+${name}\\\\b`, 'gmi')]);\n }\n if (symbolType === 'all' || symbolType === 'variable') {\n patterns.push(['variable', new RegExp(`(?:const|let|var)\\\\s+${name}\\\\b`, 'gmi')]);\n }\n if (symbolType === 'all' || symbolType === 'interface') {\n patterns.push(['interface', new RegExp(`interface\\\\s+${name}\\\\b`, 'gmi')]);\n }\n if (symbolType === 'all' || symbolType === 'type') {\n patterns.push(['type', new RegExp(`type\\\\s+${name}\\\\b`, 'gmi')]);\n }\n\n const fg = await import('fast-glob');\n const files = await fg.default('**/*.{ts,js,tsx,jsx}', {\n cwd,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n\n const results: string[] = [];\n const maxFileSize = 2 * 1024 * 1024;\n\n for (const fp of files) {\n if (results.length >= maxResults) break;\n try {\n const stat = statSync(fp);\n if (stat.size > maxFileSize) continue;\n const content = readFileSync(fp, 'utf-8');\n for (const [type, regex] of patterns) {\n regex.lastIndex = 0;\n let match;\n while ((match = regex.exec(content)) !== null && results.length < maxResults) {\n const line = content.slice(0, match.index).split('\\n').length;\n results.push(`${relative(cwd, fp)}:${line}: [${type}] ${match[0].trim()}`);\n }\n }\n } catch { /* skip */ }\n }\n\n return {\n success: true,\n output: results.join('\\n') || '未找到匹配符号',\n metadata: { count: results.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve, relative } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const find_references: Tool = {\n name: 'find_references',\n description: '查找指定符号的所有引用位置',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: '符号名称' },\n cwd: { type: 'string', description: '搜索根目录' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['name'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const name = params.name as string;\n const cwd = (params.cwd as string) ? resolve(params.cwd as string) : process.cwd();\n const maxResults = (params.max_results as number) ?? 100;\n\n const fg = await import('fast-glob');\n const files = await fg.default('**/*.{ts,js,tsx,jsx}', {\n cwd,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n\n const refRegex = new RegExp(`\\\\b${escapeRegex(name)}\\\\b`, 'gm');\n const defRegex = new RegExp(`(?:function\\\\s+${escapeRegex(name)}|class\\\\s+${escapeRegex(name)}|(?:const|let|var)\\\\s+${escapeRegex(name)}\\\\s*=|interface\\\\s+${escapeRegex(name)}|type\\\\s+${escapeRegex(name)}\\\\s*=)`, 'gm');\n\n const results: { file: string; line: number; text: string; type: 'definition' | 'reference' }[] = [];\n const maxFileSize = 2 * 1024 * 1024;\n\n for (const fp of files) {\n if (results.length >= maxResults) break;\n try {\n const stat = statSync(fp);\n if (stat.size > maxFileSize) continue;\n const content = readFileSync(fp, 'utf-8');\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length && results.length < maxResults; i++) {\n if (lines[i].match(refRegex)) {\n const isDef = defRegex.test(lines[i]);\n results.push({\n file: relative(cwd, fp),\n line: i + 1,\n text: lines[i].trim(),\n type: isDef ? 'definition' : 'reference',\n });\n }\n }\n } catch { /* skip */ }\n }\n\n const output = results.map(r => `${r.file}:${r.line} [${r.type}] ${r.text}`).join('\\n');\n return {\n success: true,\n output: output || '未找到引用',\n metadata: { count: results.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve, relative } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const find_definition: Tool = {\n name: 'find_definition',\n description: '查找指定符号的定义位置',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: '符号名称' },\n cwd: { type: 'string', description: '搜索根目录' },\n },\n required: ['name'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const name = params.name as string;\n const cwd = (params.cwd as string) ? resolve(params.cwd as string) : process.cwd();\n\n const fg = await import('fast-glob');\n const files = await fg.default('**/*.{ts,js,tsx,jsx}', {\n cwd,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n\n const defRegex = new RegExp(\n `(?:function\\\\s+${escapeRegex(name)}\\\\b|` +\n `class\\\\s+${escapeRegex(name)}\\\\b|` +\n `(?:const|let|var)\\\\s+${escapeRegex(name)}\\\\s*=|` +\n `interface\\\\s+${escapeRegex(name)}\\\\b|` +\n `type\\\\s+${escapeRegex(name)}\\\\s*=|` +\n `(?:export\\\\s+)?(?:async\\\\s+)?${escapeRegex(name)}\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{|` +\n `this\\\\.${escapeRegex(name)}\\\\s*=\\\\s*(?:async\\\\s+)?(?:function|\\\\(|${escapeRegex(name)})|` +\n `(?:public|private|protected|static|readonly)?\\\\s*(?:async\\\\s+)?${escapeRegex(name)}\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{` +\n `)`,\n 'gmi'\n );\n\n const results: { file: string; line: number; text: string }[] = [];\n const maxFileSize = 2 * 1024 * 1024;\n\n for (const fp of files) {\n try {\n const stat = statSync(fp);\n if (stat.size > maxFileSize) continue;\n const content = readFileSync(fp, 'utf-8');\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n if (defRegex.test(lines[i])) {\n defRegex.lastIndex = 0;\n results.push({\n file: relative(cwd, fp),\n line: i + 1,\n text: lines[i].trim(),\n });\n }\n }\n } catch { /* skip */ }\n }\n\n const output = results.length > 0\n ? results.map(r => `${r.file}:${r.line}: ${r.text}`).join('\\n')\n : `未找到 \"${name}\" 的定义`;\n\n return {\n success: true,\n output,\n metadata: { count: results.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const text_search: Tool = {\n name: 'text_search',\n description: '全文搜索,在文件内容中查找文本',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n text: { type: 'string', description: '搜索文本' },\n dir_path: { type: 'string', description: '搜索目录' },\n file_pattern: { type: 'string', description: '文件匹配模式,如 *.md' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['text', 'dir_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const text = params.text as string;\n const dirPath = resolve(params.dir_path as string);\n const filePattern = (params.file_pattern as string) ?? '**/*';\n const maxResults = (params.max_results as number) ?? 100;\n\n const fg = await import('fast-glob');\n const files = await fg.default(filePattern, {\n cwd: dirPath,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**', '*.min.*', '*.jpg', '*.png', '*.gif', '*.ico', '*.svg'],\n onlyFiles: true,\n });\n\n const results: string[] = [];\n const maxFileSize = 2 * 1024 * 1024;\n\n for (const fp of files) {\n if (results.length >= maxResults) break;\n try {\n const stat = await import('node:fs').then(m => m.statSync(fp));\n if (stat.size > maxFileSize) continue;\n const content = readFileSync(fp, 'utf-8');\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length && results.length < maxResults; i++) {\n if (lines[i].includes(text)) {\n results.push(`${fp}:${i + 1}:${lines[i].trim()}`);\n }\n }\n } catch { /* skip */ }\n }\n\n return {\n success: true,\n output: results.join('\\n') || '未找到匹配结果',\n metadata: { matches: results.length, dir: dirPath },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const fuzzy_find: Tool = {\n name: 'fuzzy_find',\n description: '模糊匹配文件名',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: '模糊文件名' },\n cwd: { type: 'string', description: '搜索目录' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['name'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const name = (params.name as string).toLowerCase();\n const cwd = (params.cwd as string) ? resolve(params.cwd as string) : process.cwd();\n const maxResults = (params.max_results as number) ?? 20;\n\n const fg = await import('fast-glob');\n const files = await fg.default('**/*', {\n cwd,\n absolute: false,\n ignore: ['node_modules/**', '.git/**'],\n onlyFiles: true,\n });\n\n const scored = files\n .map(f => ({ file: f, score: fuzzyScore(name, f.toLowerCase()) }))\n .filter(r => r.score > 0)\n .sort((a, b) => b.score - a.score)\n .slice(0, maxResults);\n\n const output = scored.length > 0\n ? scored.map(r => r.file).join('\\n')\n : '未找到匹配文件';\n\n return { success: true, output, metadata: { count: scored.length } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction fuzzyScore(needle: string, haystack: string): number {\n let p = 0;\n let prevMatch = -2;\n let score = 0;\n for (let i = 0; i < needle.length && p < haystack.length; i++) {\n const nc = needle[i];\n let found = false;\n while (p < haystack.length) {\n if (haystack[p] === nc) {\n score += 10;\n if (p === prevMatch + 1) score += 5;\n prevMatch = p;\n p++;\n found = true;\n break;\n }\n p++;\n }\n if (!found) return 0;\n }\n const fileName = haystack.split(/[/\\\\]/).pop() ?? '';\n if (fileName.includes(needle)) score += 30;\n if (fileName.startsWith(needle)) score += 20;\n return score;\n}\n","import { readFileSync, writeFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const regex_find: Tool = {\n name: 'regex_find',\n description: '使用正则表达式搜索并替换文件内容',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n pattern: { type: 'string', description: '正则表达式' },\n replacement: { type: 'string', description: '替换字符串' },\n file_path: { type: 'string', description: '文件路径' },\n dir_path: { type: 'string', description: '目录路径' },\n file_pattern: { type: 'string', description: '文件匹配模式' },\n case_sensitive: { type: 'boolean', description: '是否区分大小写' },\n dry_run: { type: 'boolean', description: '仅预览不实际修改' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['pattern'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const regPattern = params.pattern as string;\n const replacement = (params.replacement as string) ?? '';\n const filePath = params.file_path as string | undefined;\n const dirPath = params.dir_path as string | undefined;\n const filePattern = (params.file_pattern as string) ?? '**/*';\n const caseSensitive = (params.case_sensitive as boolean) ?? false;\n const dryRun = (params.dry_run as boolean) ?? true;\n const maxResults = (params.max_results as number) ?? 100;\n\n const regex = new RegExp(regPattern, caseSensitive ? 'gm' : 'gim');\n const results: string[] = [];\n const maxFileSize = 2 * 1024 * 1024;\n\n async function processFile(fp: string): Promise<void> {\n if (results.length >= maxResults) return;\n try {\n const stat = await import('node:fs').then(m => m.statSync(fp));\n if (stat.size > maxFileSize) return;\n let content = readFileSync(fp, 'utf-8');\n if (!regex.test(content)) return;\n regex.lastIndex = 0;\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length && results.length < maxResults; i++) {\n if (regex.test(lines[i])) {\n regex.lastIndex = 0;\n const newLine = lines[i].replace(new RegExp(regPattern, caseSensitive ? 'gm' : 'gim'), replacement.replace(/\\$/g, '$$$$'));\n results.push(`${fp}:${i + 1}: - ${lines[i].trim()}\\n + ${newLine.trim()}`);\n }\n }\n if (!dryRun) {\n regex.lastIndex = 0;\n content = content.replace(new RegExp(regPattern, caseSensitive ? 'gm' : 'gim'), replacement.replace(/\\$/g, '$$$$'));\n writeFileSync(fp, content, 'utf-8');\n }\n } catch { /* skip */ }\n }\n\n if (filePath) {\n const abs = resolve(filePath);\n if (existsSync(abs)) await processFile(abs);\n } else if (dirPath) {\n const fg = await import('fast-glob');\n const files = await fg.default(filePattern, {\n cwd: resolve(dirPath),\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n for (const f of files) {\n if (results.length >= maxResults) break;\n await processFile(f);\n }\n }\n\n const prefix = dryRun ? '[预览模式] ' : '[已修改] ';\n return {\n success: true,\n output: results.length > 0 ? prefix + `找到 ${results.length} 处匹配:\\n${results.join('\\n')}` : '未找到匹配',\n metadata: { matches: results.length, dryRun },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const search_package: Tool = {\n name: 'search_package',\n description: '搜索 npm 包',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: '包名关键词' },\n count: { type: 'number', description: '返回数量' },\n },\n required: ['name'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const name = params.name as string;\n const count = (params.count as number) ?? 10;\n const output = execSync(\n `npm search \"${name}\" --registry https://registry.npmmirror.com --json 2>&1`,\n { encoding: 'utf-8', timeout: 15000 }\n );\n const results = JSON.parse(output);\n const items = (Array.isArray(results) ? results.slice(0, count) : [results]).map(\n (pkg: Record<string, unknown>) => ({\n name: pkg.name as string,\n version: pkg.version as string,\n description: pkg.description as string,\n author: (pkg.author as Record<string, unknown> | undefined)?.name || pkg.author,\n })\n );\n return {\n success: true,\n output: items.map((i: Record<string, unknown>) =>\n `${i.name}@${i.version}\\n ${i.description}\\n Author: ${i.author}`\n ).join('\\n\\n'),\n metadata: { count: items.length },\n };\n } catch {\n return {\n success: true,\n output: `请在 npm 官网搜索: https://www.npmjs.com/search?q=${encodeURIComponent(params.name as string)}`,\n metadata: { fallback: true },\n };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const search_docs: Tool = {\n name: 'search_docs',\n description: '搜索在线文档,返回搜索建议和常用文档链接',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n query: { type: 'string', description: '搜索关键词' },\n source: { type: 'string', description: '文档源: mdn, npm, typescript, nodejs, react, all', enum: ['mdn', 'npm', 'typescript', 'nodejs', 'react', 'all'] },\n },\n required: ['query'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const query = params.query as string;\n const source = (params.source as string) ?? 'all';\n const encoded = encodeURIComponent(query);\n\n const docLinks: Record<string, string> = {\n mdn: `https://developer.mozilla.org/zh-CN/search?q=${encoded}`,\n npm: `https://www.npmjs.com/search?q=${encoded}`,\n typescript: `https://www.typescriptlang.org/search?q=${encoded}`,\n nodejs: `https://nodejs.org/api/all.html`,\n react: `https://react.dev/`,\n };\n\n const lines: string[] = ['建议访问以下文档搜索:', ''];\n if (source === 'all') {\n for (const [name, url] of Object.entries(docLinks)) {\n lines.push(`- ${name.toUpperCase()}: ${url}`);\n }\n } else {\n lines.push(`- ${docLinks[source]}`);\n }\n\n lines.push('', `同时可以在 Stack Overflow 搜索: https://stackoverflow.com/search?q=${encoded}`);\n\n return {\n success: true,\n output: lines.join('\\n'),\n metadata: { query, source },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { spawn, type ChildProcess } from 'node:child_process';\n\nexport interface ProcessEntry {\n proc: ChildProcess;\n output: string;\n startTime: number;\n command: string;\n cwd: string;\n alive: boolean;\n}\n\nconst pool = new Map<string, ProcessEntry>();\nconst RING_SIZE = 64_000;\nconst TAIL_SIZE = 16_000;\n\nexport function decodeBuffer(bufs: Buffer[]): string {\n const buf = Buffer.concat(bufs);\n if (process.platform === 'win32') {\n try {\n const decoder = new TextDecoder('gbk', { fatal: false });\n return decoder.decode(buf);\n } catch {\n return buf.toString('utf-8');\n }\n }\n return buf.toString('utf-8');\n}\n\nfunction ringPush(entry: ProcessEntry, chunk: string): void {\n entry.output += chunk;\n if (entry.output.length > RING_SIZE) {\n entry.output = entry.output.slice(-RING_SIZE);\n }\n}\n\nexport function startBgProcess(params: {\n command: string;\n cwd?: string;\n terminalId?: string;\n env?: Record<string, string>;\n}): { terminalId: string; pid: number | undefined } {\n const cwd = params.cwd || process.cwd();\n const terminalId = params.terminalId || `bg_${Date.now()}_${Math.random().toString(36).slice(2,6)}`;\n const [cmd, ...args] = params.command.split(/\\s+/);\n\n if (pool.has(terminalId)) {\n const old = pool.get(terminalId)!;\n try { old.proc.kill(); } catch {}\n pool.delete(terminalId);\n }\n\n const proc = spawn(cmd, args, {\n cwd,\n shell: true,\n stdio: ['pipe', 'pipe', 'pipe'],\n env: params.env ? { ...process.env, ...params.env } : process.env,\n });\n\n const entry: ProcessEntry = {\n proc,\n output: '',\n startTime: Date.now(),\n command: params.command,\n cwd,\n alive: true,\n };\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n\n proc.stdout?.on('data', (d: Buffer) => stdoutChunks.push(d));\n proc.stderr?.on('data', (d: Buffer) => stderrChunks.push(d));\n\n const flushInterval = setInterval(() => {\n if (stdoutChunks.length > 0) {\n ringPush(entry, decodeBuffer(stdoutChunks.splice(0)));\n }\n if (stderrChunks.length > 0) {\n ringPush(entry, '[stderr] ' + decodeBuffer(stderrChunks.splice(0)));\n }\n }, 50);\n\n proc.on('close', (code) => {\n clearInterval(flushInterval);\n if (stdoutChunks.length > 0) ringPush(entry, decodeBuffer(stdoutChunks.splice(0)));\n if (stderrChunks.length > 0) ringPush(entry, '[stderr] ' + decodeBuffer(stderrChunks.splice(0)));\n entry.alive = false;\n ringPush(entry, `\\n[进程结束, exitCode=${code}]\\n`);\n });\n\n proc.on('error', (err) => {\n clearInterval(flushInterval);\n entry.alive = false;\n ringPush(entry, `\\n[进程错误: ${err.message}]\\n`);\n });\n\n pool.set(terminalId, entry);\n return { terminalId, pid: proc.pid ?? undefined };\n}\n\nexport function readOutput(terminalId: string, tailOnly?: boolean): string | null {\n const entry = pool.get(terminalId);\n if (!entry) return null;\n const full = entry.output || '(暂无输出)';\n if (tailOnly) {\n return full.length > TAIL_SIZE ? '...(截断)\\n' + full.slice(-TAIL_SIZE) : full;\n }\n return full.length > TAIL_SIZE * 2 ? full.slice(-TAIL_SIZE * 2) : full;\n}\n\nexport function listProcesses(): Array<{\n id: string; pid: number | undefined; command: string;\n alive: boolean; runningSec: number; outputLen: number; outputTail: string;\n}> {\n return Array.from(pool.entries()).map(([id, e]) => ({\n id,\n pid: e.proc.pid ?? undefined,\n command: e.command.slice(0, 60),\n alive: e.alive,\n runningSec: Math.round((Date.now() - e.startTime) / 1000),\n outputLen: e.output.length,\n outputTail: e.output.slice(-200).replace(/\\n/g, '↵').slice(0, 160),\n }));\n}\n\nexport function killProcess(terminalId: string): boolean {\n const entry = pool.get(terminalId);\n if (!entry) return false;\n try { entry.proc.kill('SIGKILL'); } catch {}\n pool.delete(terminalId);\n return true;\n}\n\nexport function getProcess(terminalId: string): ProcessEntry | undefined {\n return pool.get(terminalId);\n}\n\nexport function sendToStdin(terminalId: string, text: string): boolean {\n const entry = pool.get(terminalId);\n if (!entry || !entry.alive || !entry.proc.stdin) return false;\n entry.proc.stdin.write(text + '\\n');\n return true;\n}\n\nexport function sendSignal(terminalId: string, signal: 'SIGINT' | 'SIGTERM' | 'SIGKILL'): boolean {\n const entry = pool.get(terminalId);\n if (!entry || !entry.alive) return false;\n try { entry.proc.kill(signal); } catch { return false; }\n return true;\n}\n","import { spawn } from 'node:child_process';\nimport { decodeBuffer } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const run_command: Tool = {\n name: 'run_command',\n description: '执行系统命令并返回结果 (阻塞等待完成)',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n command: { type: 'string', description: '要执行的命令' },\n cwd: { type: 'string', description: '工作目录' },\n timeout_ms: { type: 'number', description: '超时毫秒数 (默认 30s)' },\n },\n required: ['command'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n return new Promise((resolve) => {\n const command = params.command as string;\n const cwd = (params.cwd as string) || process.cwd();\n const timeout = (params.timeout_ms as number) ?? 30_000;\n\n const proc = spawn(command, {\n cwd, shell: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n const timer = setTimeout(() => {\n try { proc.kill(); } catch {}\n resolve({ success: false, error: `命令超时 (${timeout}ms)`, output: '' });\n }, timeout);\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n proc.stdout?.on('data', (chunk: Buffer) => stdoutChunks.push(chunk));\n proc.stderr?.on('data', (chunk: Buffer) => stderrChunks.push(chunk));\n\n proc.on('error', (err: Error) => {\n clearTimeout(timer);\n resolve({ success: false, error: err.message, output: '' });\n });\n\n proc.on('close', (code: number | null) => {\n clearTimeout(timer);\n const stdout = decodeBuffer(stdoutChunks);\n const stderr = decodeBuffer(stderrChunks);\n const output = (stdout + (stderr ? `\\n[stderr]\\n${stderr}` : '')).slice(0, 8000);\n\n if (code === 0) {\n resolve({ success: true, output, metadata: { command, cwd, exitCode: code } });\n } else {\n resolve({ success: false, error: `Exit code: ${code}`, output });\n }\n });\n });\n },\n};\n","import { spawn } from 'node:child_process';\nimport { decodeBuffer } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nconst runningProcesses = new Map<string, ReturnType<typeof spawn>>();\n\nexport const run_async: Tool = {\n name: 'run_async',\n description: '异步执行命令并等待完成 (可配合 check_status / stop_command)',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n command: { type: 'string', description: '命令和参数' },\n cwd: { type: 'string', description: '工作目录' },\n task_id: { type: 'string', description: '任务标识,用于后续查询' },\n },\n required: ['command'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const command = params.command as string;\n const cwd = (params.cwd as string) ?? process.cwd();\n const taskId = (params.task_id as string) ?? `async_${Date.now()}`;\n\n const [cmd, ...args] = command.split(/\\s+/);\n const proc = spawn(cmd, args, {\n cwd,\n shell: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n env: process.env,\n });\n\n runningProcesses.set(taskId, proc);\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n proc.stdout?.on('data', (d: Buffer) => stdoutChunks.push(d));\n proc.stderr?.on('data', (d: Buffer) => stderrChunks.push(d));\n\n try {\n await new Promise<void>((resolve, reject) => {\n proc.on('close', (code) => {\n runningProcesses.delete(taskId);\n if (code === 0) resolve();\n else reject(new Error(`进程退出码: ${code}`));\n });\n proc.on('error', reject);\n });\n } catch (e) {\n runningProcesses.delete(taskId);\n return {\n success: false,\n error: (e as Error).message,\n output: decodeBuffer(stdoutChunks) + decodeBuffer(stderrChunks),\n metadata: { taskId },\n };\n }\n\n return {\n success: true,\n output: decodeBuffer(stdoutChunks) + (stderrChunks.length ? '\\n[stderr]\\n' + decodeBuffer(stderrChunks) : '') || '(无输出)',\n metadata: { taskId, command },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nexport { runningProcesses };\n","import { runningProcesses } from './run_async.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const check_status: Tool = {\n name: 'check_status',\n description: '检查异步命令的执行状态',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n task_id: { type: 'string', description: '任务标识' },\n show_all: { type: 'boolean', description: '显示所有运行中的任务' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const taskId = params.task_id as string | undefined;\n const showAll = (params.show_all as boolean) ?? false;\n\n if (showAll || !taskId) {\n const tasks = Array.from(runningProcesses.keys());\n return {\n success: true,\n output: tasks.length > 0\n ? `运行中的任务 (${tasks.length}):\\n${tasks.map(t => ` - ${t}`).join('\\n')}`\n : '没有运行中的任务',\n metadata: { tasks },\n };\n }\n\n const proc = runningProcesses.get(taskId);\n if (!proc) {\n return { success: false, error: `任务不存在或已完成: ${taskId}`, output: '' };\n }\n\n return {\n success: true,\n output: `任务 \"${taskId}\" 正在运行 (PID: ${proc.pid ?? 'unknown'})`,\n metadata: { taskId, pid: proc.pid, running: true },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { runningProcesses } from './run_async.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const stop_command: Tool = {\n name: 'stop_command',\n description: '终止正在执行的异步命令',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n task_id: { type: 'string', description: '任务标识' },\n signal: { type: 'string', description: '终止信号: SIGTERM, SIGKILL', enum: ['SIGTERM', 'SIGKILL'] },\n },\n required: ['task_id'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const taskId = params.task_id as string;\n const signal = (params.signal as string) ?? 'SIGTERM';\n const proc = runningProcesses.get(taskId);\n\n if (!proc) {\n return { success: false, error: `任务不存在或已完成: ${taskId}`, output: '' };\n }\n\n if (signal === 'SIGKILL') {\n proc.kill('SIGKILL');\n } else {\n proc.kill('SIGTERM');\n }\n\n runningProcesses.delete(taskId);\n return { success: true, output: `已终止任务: ${taskId} (信号: ${signal})` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { exec as execCb } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport type { Tool } from '../../tool-types.js';\n\nconst execAsync = promisify(execCb);\n\nexport const pipe_commands: Tool = {\n name: 'pipe_commands',\n description: '管道串联多个命令',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n commands: {\n type: 'array',\n items: { type: 'string' },\n description: '命令列表,按顺序通过管道串联',\n },\n cwd: { type: 'string', description: '工作目录' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['commands'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const commands = params.commands as string[];\n const cwd = (params.cwd as string) ?? process.cwd();\n const timeout = (params.timeout_ms as number) ?? 30000;\n const pipeline = commands.join(' | ');\n\n const { stdout, stderr } = await execAsync(pipeline, {\n cwd,\n timeout,\n maxBuffer: 10 * 1024 * 1024,\n encoding: 'utf-8',\n shell: process.env.SHELL || process.env.ComSpec || 'cmd.exe',\n });\n\n return {\n success: true,\n output: stdout + (stderr ? `\\n[stderr]\\n${stderr}` : ''),\n metadata: { pipeline },\n };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: e.message || String(err),\n output: [e.stdout, e.stderr].filter(Boolean).join('\\n'),\n };\n }\n },\n};\n","import { readFileSync, existsSync } from 'node:fs';\nimport { exec as execCb } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nconst execAsync = promisify(execCb);\n\nexport const shell_script: Tool = {\n name: 'shell_script',\n description: '执行 Shell 脚本文件',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n script_path: { type: 'string', description: '脚本文件路径' },\n args: { type: 'array', items: { type: 'string' }, description: '脚本参数' },\n cwd: { type: 'string', description: '工作目录' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['script_path'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const scriptPath = resolve(params.script_path as string);\n const args = (params.args as string[]) ?? [];\n const cwd = (params.cwd as string) ?? process.cwd();\n const timeout = (params.timeout_ms as number) ?? 30000;\n\n if (!existsSync(scriptPath)) {\n return { success: false, error: `脚本文件不存在: ${scriptPath}`, output: '' };\n }\n\n const shell = process.platform === 'win32'\n ? process.env.ComSpec || 'cmd.exe'\n : process.env.SHELL || '/bin/sh';\n\n const cmd = process.platform === 'win32'\n ? `\"${shell}\" /c \"${scriptPath}\" ${args.join(' ')}`\n : `${shell} \"${scriptPath}\" ${args.join(' ')}`;\n\n const { stdout, stderr } = await execAsync(cmd, {\n cwd,\n timeout,\n maxBuffer: 10 * 1024 * 1024,\n encoding: 'utf-8',\n });\n\n return {\n success: true,\n output: stdout + (stderr ? `\\n[stderr]\\n${stderr}` : ''),\n metadata: { script: scriptPath },\n };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: e.message || String(err),\n output: [e.stdout, e.stderr].filter(Boolean).join('\\n'),\n };\n }\n },\n};\n","import { startBgProcess } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const background_terminal: Tool = {\n name: 'background_terminal',\n description: '在后台终端中运行持久进程 (npm run dev, 服务器等)。启动后立即返回,可用 read_terminal 查看输出、list_terminals 查看状态、kill_terminal 终止。',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n command: { type: 'string', description: '要运行的命令,如 npm run dev' },\n cwd: { type: 'string', description: '工作目录' },\n terminal_id: { type: 'string', description: '终端标识 (可选,自动生成)' },\n env: { type: 'object', description: '额外环境变量' },\n },\n required: ['command'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const command = params.command as string;\n const cwd = params.cwd as string | undefined;\n const terminalId = params.terminal_id as string | undefined;\n const env = params.env as Record<string, string> | undefined;\n\n const { terminalId: tid, pid } = startBgProcess({ command, cwd, terminalId, env });\n\n return {\n success: true,\n output: `后台终端已启动\\n ID: ${tid}\\n PID: ${pid}\\n 命令: ${command}\\n 目录: ${cwd || process.cwd()}\\n\\n启动后等待 1-2 秒即可用 read_terminal 查看输出。`,\n metadata: { terminalId: tid, pid },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { getProcess } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const send_keys: Tool = {\n name: 'send_keys',\n description: '检查后台终端是否可写入',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n terminal_id: { type: 'string', description: '终端标识' },\n },\n required: ['terminal_id'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const terminalId = params.terminal_id as string;\n const entry = getProcess(terminalId);\n if (!entry || !entry.alive) {\n return { success: false, error: `终端不可用: ${terminalId}`, output: '' };\n }\n if (!entry.proc.stdin) {\n return { success: false, error: `终端 stdin 不可写: ${terminalId}`, output: '' };\n }\n return {\n success: true,\n output: `终端 \"${terminalId}\" 就绪,可通过 send_text 发送文本`,\n metadata: { terminalId, pid: entry.proc.pid },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { sendSignal } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const send_ctrl_keys: Tool = {\n name: 'send_ctrl_keys',\n description: '向后台终端发送控制信号 (Ctrl+C=SIGINT, Ctrl+D=关闭stdin)',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n terminal_id: { type: 'string', description: '终端标识' },\n signal: { type: 'string', enum: ['ctrl_c', 'ctrl_d', 'ctrl_z'], description: 'ctrl_c=SIGINT, ctrl_d=关闭stdin, ctrl_z=SIGTSTP' },\n },\n required: ['terminal_id', 'signal'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const terminalId = params.terminal_id as string;\n const signal = params.signal as string;\n\n switch (signal) {\n case 'ctrl_c':\n sendSignal(terminalId, 'SIGINT');\n return { success: true, output: `已发送 Ctrl+C 到终端: ${terminalId}`, metadata: { terminalId }, };\n case 'ctrl_d': {\n const { getProcess } = await import('./process-pool.js');\n const entry = getProcess(terminalId);\n if (entry?.proc.stdin) { entry.proc.stdin.end(); }\n return { success: true, output: `已发送 Ctrl+D 到终端: ${terminalId}`, metadata: { terminalId }, };\n }\n case 'ctrl_z':\n sendSignal(terminalId, 'SIGTERM');\n return { success: true, output: `已发送 Ctrl+Z 到终端: ${terminalId}`, metadata: { terminalId }, };\n default:\n return { success: false, error: `未知信号: ${signal}`, output: '' };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { sendToStdin } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const send_text: Tool = {\n name: 'send_text',\n description: '向后台终端发送文本输入',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n terminal_id: { type: 'string', description: '终端标识' },\n text: { type: 'string', description: '要发送的文本' },\n },\n required: ['terminal_id', 'text'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const terminalId = params.terminal_id as string;\n const text = params.text as string;\n const ok = sendToStdin(terminalId, text);\n if (!ok) {\n return { success: false, error: `无法发送到终端: ${terminalId}`, output: '' };\n }\n return {\n success: true,\n output: `已发送文本到终端: ${terminalId}`,\n metadata: { terminalId, length: text.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const terminal_screenshot: Tool = {\n name: 'terminal_screenshot',\n description: '获取终端状态快照(文本形式)',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n terminal_id: { type: 'string', description: '终端标识' },\n },\n required: ['terminal_id'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const terminalId = params.terminal_id as string;\n return {\n success: true,\n output: `终端快照: ${terminalId}\\n(终端屏幕截图功能在 CLI 环境中以文本输出替代)`,\n metadata: { terminalId, method: 'text-snapshot' },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const terminal_resize: Tool = {\n name: 'terminal_resize',\n description: '调整终端尺寸',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n rows: { type: 'number', description: '行数' },\n cols: { type: 'number', description: '列数' },\n },\n required: ['rows', 'cols'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const rows = params.rows as number;\n const cols = params.cols as number;\n process.stdout.write(`\\x1b[8;${rows};${cols}t`);\n return {\n success: true,\n output: `终端尺寸已调整: ${cols}x${rows}`,\n metadata: { rows, cols },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { listProcesses, readOutput as poolRead } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const list_terminals: Tool = {\n name: 'list_terminals',\n description: '列出所有后台终端及最近输出',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {},\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute() {\n try {\n const entries = listProcesses();\n if (entries.length === 0) {\n return { success: true, output: '没有后台终端' };\n }\n let out = `后台终端 (${entries.length}):\\n`;\n for (const e of entries) {\n const status = e.alive ? `运行 ${e.runningSec}s` : '已结束';\n out += ` ${e.id} PID:${e.pid ?? '-'} ${e.command}\\n`;\n out += ` ${status} | 输出:${e.outputLen}B | ${e.outputTail}\\n\\n`;\n }\n return { success: true, output: out, metadata: { entries } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nexport const read_terminal: Tool = {\n name: 'read_terminal',\n description: '读取后台终端的输出内容',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n terminal_id: { type: 'string', description: '终端标识' },\n tail: { type: 'boolean', description: '仅显示末尾输出' },\n },\n required: ['terminal_id'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const terminalId = params.terminal_id as string;\n const tail = (params.tail as boolean) ?? true;\n const output = poolRead(terminalId, tail);\n if (output === null) {\n return { success: false, error: `终端不存在: ${terminalId}`, output: '' };\n }\n return { success: true, output, metadata: { terminalId, tail } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { killProcess } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const kill_terminal: Tool = {\n name: 'kill_terminal',\n description: '强制关闭后台终端',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n terminal_id: { type: 'string', description: '终端标识' },\n },\n required: ['terminal_id'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const terminalId = params.terminal_id as string;\n const ok = killProcess(terminalId);\n if (!ok) {\n return { success: false, error: `终端不存在: ${terminalId}`, output: '' };\n }\n return { success: true, output: `已关闭终端: ${terminalId}`, metadata: { terminalId } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const interactive_terminal: Tool = {\n name: 'interactive_terminal',\n description: '启动交互式终端会话(在当前 CLI 环境中限制使用)',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n command: { type: 'string', description: '要运行的交互式命令' },\n terminal_id: { type: 'string', description: '终端标识' },\n },\n required: ['command'],\n },\n dangerous: true,\n requiresApproval: true,\n async execute(params) {\n try {\n const command = params.command as string;\n const terminalId = (params.terminal_id as string) ?? `interactive_${Date.now()}`;\n\n return {\n success: true,\n output: `交互式终端请求已记录: ${terminalId}\\n命令: ${command}\\n\\n注意: 当前运行在非交互式环境,建议使用 background_terminal 运行此命令。`,\n metadata: { terminalId, command, interactive: false },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const web_fetch: Tool = {\n name: 'web_fetch',\n description: '获取网页内容并返回纯文本 / Markdown',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: '页面 URL' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n max_size: { type: 'number', description: '最大返回字节数' },\n as_markdown: { type: 'boolean', description: '是否尝试返回 Markdown 格式' },\n },\n required: ['url'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const url = params.url as string;\n const timeout = (params.timeout_ms as number) ?? 30000;\n const maxSize = (params.max_size as number) ?? 500000;\n const asMarkdown = (params.as_markdown as boolean) ?? false;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n try {\n const res = await fetch(url, {\n headers: {\n 'User-Agent': 'DeeperCode/1.0 (AI Agent)',\n 'Accept': asMarkdown ? 'text/markdown, text/html' : 'text/html',\n },\n signal: controller.signal,\n });\n\n const contentType = res.headers.get('content-type') ?? '';\n let text = await res.text();\n\n if (text.length > maxSize) {\n text = text.slice(0, maxSize) + '\\n\\n[内容已截断]';\n }\n\n if (asMarkdown || contentType.includes('html')) {\n const cheerio = await import('cheerio');\n const $ = cheerio.load(text);\n $('script, style, nav, footer, iframe, noscript').remove();\n const extracted = $('body').text().replace(/\\s+/g, ' ').trim();\n text = `# 页面内容 (${url})\\n\\nURL: ${url}\\nContent-Type: ${contentType}\\n\\n${extracted}`;\n }\n\n return {\n success: true,\n output: text,\n metadata: {\n url,\n status: res.status,\n contentType,\n length: text.length,\n },\n };\n } finally {\n clearTimeout(timer);\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const web_search: Tool = {\n name: 'web_search',\n description: '使用 Bing 搜索引擎查询,返回真实搜索结果摘要',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n query: { type: 'string', description: '搜索查询关键词' },\n count: { type: 'number', description: '返回结果数 (默认 5, 最多 10)' },\n },\n required: ['query'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const query = params.query as string;\n const count = Math.min((params.count as number) ?? 5, 10);\n const encoded = encodeURIComponent(query);\n const url = `https://www.bing.com/search?q=${encoded}&count=${count}`;\n\n const resp = await fetch(url, {\n headers: {\n 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',\n 'Accept': 'text/html,application/xhtml+xml',\n 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',\n },\n signal: AbortSignal.timeout(12000),\n });\n\n if (!resp.ok) {\n return { success: false, error: `Bing 搜索失败: HTTP ${resp.status}`, output: '' };\n }\n\n const html = await resp.text();\n const results = extractBingResults(html, count);\n\n if (results.length === 0) {\n return {\n success: true,\n output: `Bing 搜索 \"${query}\" — 未提取到结果\\n直接访问: ${url}`,\n metadata: { query, engine: 'bing', url },\n };\n }\n\n const lines = [`Bing 搜索: \"${query}\"`, ''];\n for (let i = 0; i < results.length; i++) {\n const r = results[i];\n lines.push(`${i + 1}. ${r.title}`);\n lines.push(` ${r.snippet}`);\n lines.push(` ${r.url}`);\n lines.push('');\n }\n\n return {\n success: true,\n output: lines.join('\\n'),\n metadata: { query, engine: 'bing', count: results.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\ninterface SearchResult {\n title: string;\n url: string;\n snippet: string;\n}\n\nfunction extractBingResults(html: string, maxCount: number): SearchResult[] {\n const results: SearchResult[] = [];\n\n // Bing 搜索结果在 <li class=\"b_algo\"> 或 <div class=\"b_caption\"> 中\n const algoRegex = /<li class=\"b_algo\"[^>]*>([\\s\\S]*?)<\\/li>/gi;\n const matches = html.match(algoRegex);\n\n if (matches) {\n for (const block of matches.slice(0, maxCount)) {\n const r = parseAlgoBlock(block);\n if (r) results.push(r);\n }\n }\n\n // 回退: 直接抓标题链接\n if (results.length === 0) {\n const linkRegex = /<h2[^>]*><a[^>]*href=\"(https?:\\/\\/(?!www\\.bing\\.com)[^\"]+)\"[^>]*>([\\s\\S]*?)<\\/a><\\/h2>/gi;\n let m;\n while ((m = linkRegex.exec(html)) !== null && results.length < maxCount) {\n const url = m[1]!.replace(/&/g, '&');\n const title = m[2]!.replace(/<[^>]+>/g, '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').trim();\n const snippet = extractSnippet(html, url);\n results.push({ title: title.slice(0, 120), url: url.slice(0, 200), snippet: snippet.slice(0, 200) });\n }\n }\n\n return results;\n}\n\nfunction parseAlgoBlock(block: string): SearchResult | null {\n const titleMatch = block.match(/<h2[^>]*><a[^>]*href=\"([^\"]+)\"[^>]*>([\\s\\S]*?)<\\/a><\\/h2>/i);\n if (!titleMatch) return null;\n\n const url = titleMatch[1]!.replace(/&/g, '&').slice(0, 200);\n const title = titleMatch[2]!.replace(/<[^>]+>/g, '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').trim();\n\n // 尝试多种摘要容器\n const snippetMatch = block.match(/<p[^>]*class=\"[^\"]*b_lineclamp[^\"]*\"[^>]*>([\\s\\S]*?)<\\/p>/i)\n || block.match(/<div class=\"b_caption\"[^>]*>\\s*<p[^>]*>([\\s\\S]*?)<\\/p>/i)\n || block.match(/<p[^>]*>([\\s\\S]*?)<\\/p>/i);\n\n const snippet = snippetMatch\n ? snippetMatch[1]!.replace(/<[^>]+>/g, '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').trim()\n : '';\n\n return { title: title.slice(0, 120), url, snippet: snippet.slice(0, 200) };\n}\n\nfunction extractSnippet(html: string, _url: string): string {\n // 简单回退: 找标题附近的文本\n const idx = html.indexOf(_url) + _url.length;\n const nearby = html.slice(idx, idx + 500);\n const text = nearby.replace(/<[^>]+>/g, ' ').replace(/\\s+/g, ' ').trim();\n return text.slice(0, 200);\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport const http_request: Tool = {\n name: 'http_request',\n description: '通用 HTTP 请求(支持 GET/POST/PUT/DELETE/PATCH)',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: '请求 URL' },\n method: { type: 'string', description: '请求方法', enum: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'] },\n headers: { type: 'object', description: '请求头' },\n body: { type: 'string', description: '请求体' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['url'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const url = params.url as string;\n const method = (params.method as string) ?? 'GET';\n const headers = (params.headers as Record<string, string>) ?? {};\n const body = params.body as string | undefined;\n const timeout = (params.timeout_ms as number) ?? 30000;\n\n const fetchHeaders: Record<string, string> = {\n 'User-Agent': 'DeeperCode/1.0',\n ...headers,\n };\n\n const fetchOptions: RequestInit = { method, headers: fetchHeaders };\n if (body && method !== 'GET') {\n fetchOptions.body = body;\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n try {\n const res = await fetch(url, { ...fetchOptions, signal: controller.signal });\n const text = await res.text();\n return {\n success: res.ok,\n output: text.slice(0, 50000),\n metadata: {\n status: res.status,\n statusText: res.statusText,\n contentType: res.headers.get('content-type'),\n length: text.length,\n },\n };\n } finally {\n clearTimeout(timer);\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { createWriteStream, existsSync, mkdirSync } from 'node:fs';\nimport { dirname, resolve, basename } from 'node:path';\nimport { pipeline } from 'node:stream/promises';\nimport type { Tool } from '../../tool-types.js';\n\nexport const download_file: Tool = {\n name: 'download_file',\n description: '下载文件到本地',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: '下载 URL' },\n file_path: { type: 'string', description: '保存路径' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['url', 'file_path'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const url = params.url as string;\n const filePath = resolve(params.file_path as string);\n const timeout = (params.timeout_ms as number) ?? 60000;\n\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n try {\n const res = await fetch(url, { signal: controller.signal });\n if (!res.ok) {\n return { success: false, error: `HTTP ${res.status}: ${res.statusText}`, output: '' };\n }\n if (!res.body) {\n return { success: false, error: '响应体为空', output: '' };\n }\n const ws = createWriteStream(filePath);\n await pipeline(res.body as unknown as NodeJS.ReadableStream, ws);\n const stat = await import('node:fs').then(m => m.statSync(filePath));\n return {\n success: true,\n output: `下载完成: ${filePath} (${formatSize(stat.size)})`,\n metadata: { url, path: filePath, size: stat.size },\n };\n } finally {\n clearTimeout(timer);\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)} MB`;\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport const api_call: Tool = {\n name: 'api_call',\n description: '调用 REST API 并处理响应',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: 'API URL' },\n method: { type: 'string', description: 'HTTP 方法', enum: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'] },\n headers: { type: 'object', description: '请求头' },\n body: { type: 'string', description: '请求体 (JSON)' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n auth_type: { type: 'string', description: '认证类型: none, bearer, basic, api_key', enum: ['none', 'bearer', 'basic', 'api_key'] },\n auth_value: { type: 'string', description: '认证凭据(token 或 key)' },\n },\n required: ['url'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const url = params.url as string;\n const method = (params.method as string) ?? 'GET';\n const headers = (params.headers as Record<string, string>) ?? {};\n const body = params.body as string | undefined;\n const timeout = (params.timeout_ms as number) ?? 30000;\n const authType = (params.auth_type as string) ?? 'none';\n const authValue = params.auth_value as string | undefined;\n\n const fetchHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'User-Agent': 'DeeperCode/1.0',\n ...headers,\n };\n\n if (authType === 'bearer' && authValue) {\n fetchHeaders['Authorization'] = `Bearer ${authValue}`;\n } else if (authType === 'basic' && authValue) {\n const encoded = Buffer.from(authValue).toString('base64');\n fetchHeaders['Authorization'] = `Basic ${encoded}`;\n } else if (authType === 'api_key' && authValue) {\n fetchHeaders['X-API-Key'] = authValue;\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n try {\n const res = await fetch(url, {\n method,\n headers: fetchHeaders,\n body: method !== 'GET' ? body : undefined,\n signal: controller.signal,\n });\n\n const responseText = await res.text();\n let parsed;\n try { parsed = JSON.parse(responseText); } catch { parsed = responseText; }\n const output = typeof parsed === 'string' ? parsed : JSON.stringify(parsed, null, 2);\n\n return {\n success: res.ok,\n output: output.slice(0, 50000),\n metadata: {\n status: res.status,\n statusText: res.statusText,\n contentType: res.headers.get('content-type'),\n },\n };\n } finally {\n clearTimeout(timer);\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const graphql_query: Tool = {\n name: 'graphql_query',\n description: '执行 GraphQL 查询',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: 'GraphQL 端点 URL' },\n query: { type: 'string', description: 'GraphQL 查询语句' },\n variables: { type: 'object', description: '查询变量' },\n headers: { type: 'object', description: '自定义请求头' },\n },\n required: ['url', 'query'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const url = params.url as string;\n const query = params.query as string;\n const variables = params.variables as Record<string, unknown> | undefined;\n const headers = (params.headers as Record<string, string>) ?? {};\n\n const res = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'DeeperCode/1.0',\n ...headers,\n },\n body: JSON.stringify({ query, variables: variables || undefined }),\n });\n\n const data = await res.json() as Record<string, unknown>;\n return {\n success: res.ok && !data.errors,\n output: JSON.stringify(data, null, 2).slice(0, 50000),\n metadata: { status: res.status, hasErrors: !!data.errors },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nlet activeWs: import('ws').WebSocket | null = null;\n\nexport const websocket_connect: Tool = {\n name: 'websocket_connect',\n description: '建立 WebSocket 连接',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: 'WebSocket URL (ws:// 或 wss://)' },\n message: { type: 'string', description: '要发送的消息' },\n timeout_ms: { type: 'number', description: '连接超时毫秒数' },\n },\n required: ['url'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const url = params.url as string;\n const message = params.message as string | undefined;\n const timeout = (params.timeout_ms as number) ?? 10000;\n\n const WS = await import('ws');\n const ws = new WS.WebSocket(url);\n\n const result = await new Promise<{ success: boolean; output: string }>((resolve, reject) => {\n const timer = setTimeout(() => {\n ws.close();\n reject(new Error('WebSocket 连接超时'));\n }, timeout);\n\n let response = '';\n\n ws.on('open', () => {\n response += `已连接: ${url}\\n`;\n if (message) {\n ws.send(message);\n response += `已发送: ${message}\\n`;\n }\n });\n\n ws.on('message', (data: Buffer) => {\n response += `收到: ${data.toString('utf-8')}\\n`;\n clearTimeout(timer);\n ws.close();\n resolve({ success: true, output: response });\n });\n\n ws.on('error', (err: Error) => {\n clearTimeout(timer);\n reject(err);\n });\n\n ws.on('close', () => {\n clearTimeout(timer);\n if (response) {\n resolve({ success: true, output: response + '\\n连接已关闭' });\n }\n });\n });\n\n return result;\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const check_url: Tool = {\n name: 'check_url',\n description: '检查 URL 是否可达',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: 'URL' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['url'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const url = params.url as string;\n const timeout = (params.timeout_ms as number) ?? 10000;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n try {\n const start = Date.now();\n const res = await fetch(url, {\n method: 'HEAD',\n signal: controller.signal,\n headers: { 'User-Agent': 'DeeperCode/1.0' },\n });\n const elapsed = Date.now() - start;\n\n return {\n success: true,\n output: `${url} 可达 (HTTP ${res.status}, ${elapsed}ms)`,\n metadata: {\n url,\n status: res.status,\n statusText: res.statusText,\n responseTimeMs: elapsed,\n reachable: true,\n },\n };\n } finally {\n clearTimeout(timer);\n }\n } catch (err: unknown) {\n const message = (err as Error).message;\n const unreachable = message.includes('ENOTFOUND') || message.includes('ECONNREFUSED');\n return {\n success: !unreachable,\n output: `${params.url} ${unreachable ? '不可达' : '检查失败'}: ${message}`,\n error: message,\n metadata: { reachable: false },\n };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const screenshot_page: Tool = {\n name: 'screenshot_page',\n description: '网页截图(CLI 环境下返回页面信息)',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: '网页 URL' },\n full_page: { type: 'boolean', description: '是否全页截图' },\n viewport_width: { type: 'number', description: '视口宽度' },\n viewport_height: { type: 'number', description: '视口高度' },\n },\n required: ['url'],\n },\n dangerous: true,\n requiresApproval: true,\n async execute(params) {\n try {\n const url = params.url as string;\n const fullPage = (params.full_page as boolean) ?? false;\n const width = (params.viewport_width as number) ?? 1280;\n const height = (params.viewport_height as number) ?? 800;\n\n try {\n const res = await fetch(url, {\n headers: { 'User-Agent': 'DeeperCode/1.0 Screenshot' },\n });\n const html = await res.text();\n const title = html.match(/<title>(.*?)<\\/title>/i)?.[1] ?? '无标题';\n\n return {\n success: true,\n output: [\n `网页截图请求: ${url}`,\n `标题: ${title}`,\n `视口: ${width}x${height}`,\n `全页: ${fullPage}`,\n `HTML 大小: ${html.length} bytes`,\n '',\n '注意: 当前运行在 CLI 环境,截图功能需要浏览器环境支持。',\n '建议使用 Playwright/Puppeteer 或启用 GUI 模式。',\n ].join('\\n'),\n metadata: { url, title, viewport: `${width}x${height}`, fullPage },\n };\n } catch {\n return {\n success: true,\n output: `截图功能当前不可用,请使用浏览器工具获取页面: ${url}`,\n metadata: { url, fallback: true },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import * as cheerio from 'cheerio';\nimport type { Tool } from '../../tool-types.js';\n\nexport const parse_html: Tool = {\n name: 'parse_html',\n description: '解析 HTML 内容并提取结构化信息',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n html: { type: 'string', description: 'HTML 内容' },\n url: { type: 'string', description: '从 URL 获取并解析' },\n selector: { type: 'string', description: 'CSS 选择器' },\n extract: { type: 'string', description: '提取: text, html, links, images, title, meta, headings', enum: ['text', 'html', 'links', 'images', 'title', 'meta', 'headings', 'all'] },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n let html = '';\n const url = params.url as string | undefined;\n const htmlContent = params.html as string | undefined;\n const selector = params.selector as string | undefined;\n const extract = (params.extract as string) ?? 'all';\n\n if (url) {\n const res = await fetch(url, {\n headers: { 'User-Agent': 'DeeperCode/1.0' },\n });\n html = await res.text();\n } else if (htmlContent) {\n html = htmlContent;\n } else {\n return { success: false, error: '请提供 html 或 url 参数', output: '' };\n }\n\n const $ = cheerio.load(html);\n const result: Record<string, unknown> = {};\n\n function shouldExtract(key: string): boolean {\n return extract === 'all' || extract === key;\n }\n\n if (selector) {\n const els = $(selector);\n result.matches = els.length;\n result.text = els.text().trim().slice(0, 10000);\n return { success: true, output: JSON.stringify(result, null, 2), metadata: result };\n }\n\n if (shouldExtract('title')) {\n result.title = $('title').text().trim();\n }\n if (shouldExtract('meta')) {\n const meta: Record<string, string> = {};\n $('meta[name], meta[property]').each((_, el) => {\n const name = $(el).attr('name') || $(el).attr('property');\n const content = $(el).attr('content');\n if (name && content) meta[name] = content;\n });\n result.meta = meta;\n }\n if (shouldExtract('headings')) {\n const headings: string[] = [];\n $('h1,h2,h3,h4,h5,h6').each((_, el) => {\n headings.push(`${el.tagName}: ${$(el).text().trim()}`);\n });\n result.headings = headings.slice(0, 50);\n }\n if (shouldExtract('links')) {\n const links: Record<string, string> = {};\n $('a[href]').each((_, el) => {\n const href = $(el).attr('href')!;\n const text = $(el).text().trim();\n links[href] = text || '(无文本)';\n });\n result.links = links;\n }\n if (shouldExtract('images')) {\n const images: string[] = [];\n $('img[src]').each((_, el) => {\n images.push($(el).attr('src')!);\n });\n result.images = images.slice(0, 50);\n }\n if (shouldExtract('text')) {\n result.text = $('body').text().trim().replace(/\\s+/g, ' ').slice(0, 10000);\n }\n\n return {\n success: true,\n output: JSON.stringify(result, null, 2),\n metadata: { ...result, htmlSize: html.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const browser_action: Tool = {\n name: 'browser_action',\n description: '执行浏览器操作(CLI 环境限制)',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: open, close, navigate, click, type, screenshot', enum: ['open', 'close', 'navigate', 'click', 'type', 'screenshot'] },\n url: { type: 'string', description: '页面 URL' },\n selector: { type: 'string', description: 'CSS 选择器' },\n value: { type: 'string', description: '输入值' },\n },\n required: ['action'],\n },\n dangerous: true,\n requiresApproval: true,\n async execute(params) {\n try {\n const action = params.action as string;\n const url = params.url as string | undefined;\n\n switch (action) {\n case 'open': {\n if (url) {\n const openMod = await import('open');\n await openMod.default(url);\n return { success: true, output: `已在默认浏览器打开: ${url}`, metadata: { action, url } };\n }\n return { success: false, error: '缺少 url 参数', output: '' };\n }\n case 'navigate': {\n if (url) {\n return {\n success: true,\n output: `浏览器导航请求: ${url}\\n注意: 当前为 CLI 环境,完整浏览器操作需 GUI 支持。`,\n metadata: { action, url },\n };\n }\n return { success: false, error: '缺少 url 参数', output: '' };\n }\n default:\n return {\n success: true,\n output: `浏览器操作 \"${action}\" 请求已记录。\\n当前为 CLI 环境,完整浏览器自动化需 Playwright/Puppeteer 支持。`,\n metadata: { action, url, cliMode: true },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const proxy_request: Tool = {\n name: 'proxy_request',\n description: '通过代理发送 HTTP 请求',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: '目标 URL' },\n proxy: { type: 'string', description: '代理地址,如 http://proxy:8080' },\n method: { type: 'string', description: '请求方法', enum: ['GET', 'POST'] },\n headers: { type: 'object', description: '请求头' },\n },\n required: ['url', 'proxy'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const url = params.url as string;\n const proxy = params.proxy as string;\n const method = (params.method as string) ?? 'GET';\n const headers = (params.headers as Record<string, string>) ?? {};\n\n try {\n const proxyUrl = new URL(proxy);\n const res = await fetch(url, {\n method,\n headers: {\n 'User-Agent': 'DeeperCode/1.0',\n ...headers,\n 'X-Forwarded-For': proxyUrl.hostname,\n },\n });\n const body = await res.text();\n return {\n success: true,\n output: body.slice(0, 50000),\n metadata: { status: res.status, proxy },\n };\n } catch {\n return {\n success: true,\n output: `代理请求: ${method} ${url} (通过 ${proxy})\\n系统级代理请设置环境变量 HTTP_PROXY 和 HTTPS_PROXY。`,\n metadata: { url, proxy },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const parse_ast: Tool = {\n name: 'parse_ast',\n description: '解析代码结构(简化 AST 分析)',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '源代码文件路径' },\n language: { type: 'string', description: '语言类型: typescript, javascript, python', enum: ['typescript', 'javascript', 'python'] },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const language = (params.language as string) ?? 'typescript';\n\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n\n const content = readFileSync(filePath, 'utf-8');\n const lines = content.split('\\n');\n\n const functions: string[] = [];\n const classes: string[] = [];\n const imports: string[] = [];\n const exports: string[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n const lineNum = i + 1;\n\n if (/^(export\\s+)?(async\\s+)?function\\s+(\\w+)/i.test(line)) {\n functions.push(`${lineNum}: ${line.slice(0, 120)}`);\n }\n if (/^(export\\s+)?class\\s+(\\w+)/i.test(line)) {\n classes.push(`${lineNum}: ${line.slice(0, 120)}`);\n }\n if (/^(import\\s+|from\\s+|require\\()/i.test(line)) {\n imports.push(`${lineNum}: ${line.slice(0, 120)}`);\n }\n if (/^export\\s+/.test(line)) {\n exports.push(`${lineNum}: ${line.slice(0, 120)}`);\n }\n }\n\n const output = [\n `=== 代码结构分析: ${filePath} ===`,\n `语言: ${language} | 行数: ${lines.length}`,\n '',\n `--- 函数 (${functions.length}) ---`,\n ...functions.slice(0, 50),\n '',\n `--- 类 (${classes.length}) ---`,\n ...classes.slice(0, 20),\n '',\n `--- 导入 (${imports.length}) ---`,\n ...imports.slice(0, 30),\n '',\n `--- 导出 (${exports.length}) ---`,\n ...exports.slice(0, 30),\n ].join('\\n');\n\n return {\n success: true,\n output,\n metadata: {\n functions: functions.length,\n classes: classes.length,\n imports: imports.length,\n exports: exports.length,\n lines: lines.length,\n },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const format_code: Tool = {\n name: 'format_code',\n description: '格式化代码(建议使用 prettier)',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件路径' },\n language: { type: 'string', description: '语言类型', enum: ['typescript', 'javascript', 'json', 'css', 'html', 'python'] },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const language = (params.language as string) ?? 'typescript';\n\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n\n try {\n const { execSync } = await import('node:child_process');\n const ext = filePath.split('.').pop() ?? 'ts';\n execSync(`npx prettier --write \"${filePath}\"`, {\n encoding: 'utf-8',\n timeout: 30000,\n stdio: 'pipe',\n });\n const formatted = readFileSync(filePath, 'utf-8');\n return {\n success: true,\n output: `已格式化: ${filePath}\\n\\n${formatted.slice(0, 10000)}`,\n metadata: { formatted: true, tool: 'prettier' },\n };\n } catch {\n const content = readFileSync(filePath, 'utf-8');\n return {\n success: true,\n output: `代码格式化建议 (${language}):\\n\\n` +\n '- 运行 npx prettier --write . 来批量格式化\\n' +\n '- 使用 ESLint: npx eslint --fix .\\n\\n' +\n `当前文件内容:\\n${content.slice(0, 10000)}`,\n metadata: { formatted: false, suggestion: 'prettier' },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const lint_code: Tool = {\n name: 'lint_code',\n description: '运行代码检查(ESLint)',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件或目录路径' },\n fix: { type: 'boolean', description: '是否自动修复' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = params.file_path as string | undefined;\n const fix = (params.fix as boolean) ?? false;\n\n const target = filePath ? resolve(filePath) : '.';\n\n try {\n const cmd = fix ? `npx eslint \"${target}\" --fix` : `npx eslint \"${target}\"`;\n const output = execSync(cmd, {\n encoding: 'utf-8',\n timeout: 60000,\n stdio: 'pipe',\n });\n return { success: true, output: output || '代码检查通过,无问题!', metadata: { target, fix } };\n } catch (err: unknown) {\n const e = err as { stdout?: string; stderr?: string };\n const issues = e.stdout || e.stderr || String(err);\n return {\n success: false,\n error: '代码检查发现问题',\n output: issues,\n metadata: { target, hasIssues: true },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const type_check: Tool = {\n name: 'type_check',\n description: '运行 TypeScript 类型检查',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n project: { type: 'string', description: 'tsconfig.json 路径' },\n strict: { type: 'boolean', description: '是否严格模式' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const project = params.project as string | undefined;\n const strict = (params.strict as boolean) ?? true;\n\n try {\n const args = ['tsc', '--noEmit'];\n if (project) args.push('--project', resolve(project));\n if (strict) args.push('--strict');\n\n const output = execSync(args.join(' '), {\n encoding: 'utf-8',\n timeout: 120000,\n stdio: 'pipe',\n });\n return { success: true, output: output || '类型检查通过!', metadata: { passed: true } };\n } catch (err: unknown) {\n const e = err as { stdout?: string; stderr?: string };\n return {\n success: false,\n error: '类型检查发现错误',\n output: e.stdout || e.stderr || String(err),\n metadata: { passed: false },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const generate_code: Tool = {\n name: 'generate_code',\n description: 'AI 辅助代码生成(提供代码模板和最佳实践)',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n description: { type: 'string', description: '功能描述' },\n language: { type: 'string', description: '语言类型', enum: ['typescript', 'javascript', 'python', 'java', 'go', 'rust'] },\n template: { type: 'string', description: '模板类型: function, class, component, api, test', enum: ['function', 'class', 'component', 'api', 'test'] },\n file_path: { type: 'string', description: '输出文件路径' },\n },\n required: ['description'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const description = params.description as string;\n const language = (params.language as string) ?? 'typescript';\n const template = (params.template as string) ?? 'function';\n const filePath = params.file_path as string | undefined;\n\n const output = [\n `代码生成请求: ${language}/${template}`,\n `描述: ${description}`,\n filePath ? `输出: ${filePath}` : '',\n '',\n '此工具由 AI Agent 调用。生成代码由 AI 模型在上下文中完成。',\n '以下是相关的最佳实践建议:',\n '',\n ...getBestPractices(language, template),\n ].filter(Boolean).join('\\n');\n\n return {\n success: true,\n output,\n metadata: { description, language, template, filePath },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction getBestPractices(lang: string, tmpl: string): string[] {\n const tips: string[] = [];\n if (lang === 'typescript') {\n tips.push('- 使用 strict 模式,避免 any 类型');\n tips.push('- 优先使用 interface/type 定义数据结构');\n }\n if (tmpl === 'function') {\n tips.push('- 单一职责,每个函数只做一件事');\n tips.push('- 添加类型标注和参数验证');\n }\n if (tmpl === 'class') {\n tips.push('- 使用 private/public 控制访问');\n tips.push('- 考虑使用 composition 替代 inheritance');\n }\n if (tmpl === 'component') {\n tips.push('- 拆分大组件为小组件');\n tips.push('- 使用 hooks 管理状态');\n }\n if (tmpl === 'api') {\n tips.push('- 实现输入验证和错误处理');\n tips.push('- 添加请求日志和限流');\n }\n if (tmpl === 'test') {\n tips.push('- 遵循 AAA 模式 (Arrange, Act, Assert)');\n tips.push('- 每个测试只测一个行为');\n }\n return tips;\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const refactor_code: Tool = {\n name: 'refactor_code',\n description: '提供代码重构建议和执行常见重构操作',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件路径' },\n action: { type: 'string', description: '重构操作: rename, extract, inline, move', enum: ['rename', 'extract', 'inline', 'move'] },\n target: { type: 'string', description: '目标符号名' },\n new_name: { type: 'string', description: '新名称' },\n },\n required: ['file_path', 'action'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const action = params.action as string;\n const target = params.target as string | undefined;\n const newName = params.new_name as string | undefined;\n\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n\n const content = readFileSync(filePath, 'utf-8');\n const lines = content.split('\\n');\n\n let output = `=== 代码重构: ${filePath} ===\\n操作: ${action}\\n`;\n\n switch (action) {\n case 'rename': {\n if (!target || !newName) {\n return { success: false, error: 'rename 需要 target 和 new_name 参数', output: '' };\n }\n const escaped = escapeRegex(target);\n const count = (content.match(new RegExp(`\\\\b${escaped}\\\\b`, 'g')) || []).length;\n output += `目标: ${target} → ${newName}\\n`;\n output += `找到 ${count} 处引用\\n`;\n output += '请使用 edit_file 工具执行精确替换,或使用 IDE 的重构功能。';\n break;\n }\n default:\n output += `重构操作 \"${action}\" 的分析已提供。\\n`;\n output += '建议使用 IDE (VS Code, WebStorm) 的内置重构工具以获得最佳结果。';\n }\n\n return { success: true, output, metadata: { filePath, action, target, newName } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const extract_function: Tool = {\n name: 'extract_function',\n description: '从代码中提取指定函数',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件路径' },\n function_name: { type: 'string', description: '函数名' },\n },\n required: ['file_path', 'function_name'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const funcName = params.function_name as string;\n\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n\n const content = readFileSync(filePath, 'utf-8');\n const lines = content.split('\\n');\n\n const funcRegex = new RegExp(\n `(?:function\\\\s+${escapeRegex(funcName)}|` +\n `(?:const|let|var)\\\\s+${escapeRegex(funcName)}\\\\s*=|` +\n `(?:public|private|protected|static|async\\\\s+)?${escapeRegex(funcName)}\\\\s*\\\\([^)]*\\\\)\\\\s*[\\\\{:]|` +\n `(?:export\\\\s+)?(?:async\\\\s+)?${escapeRegex(funcName)}\\\\s*\\\\([^)]*\\\\)\\\\s*[\\\\{:]|` +\n `(?:get |set )?${escapeRegex(funcName)}\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{)`,\n );\n\n let startLine = -1;\n for (let i = 0; i < lines.length; i++) {\n if (funcRegex.test(lines[i])) {\n startLine = i;\n break;\n }\n }\n\n if (startLine === -1) {\n return { success: false, error: `未找到函数: ${funcName}`, output: '' };\n }\n\n let braceCount = 0;\n let endLine = -1;\n for (let i = startLine; i < lines.length; i++) {\n for (const ch of lines[i]) {\n if (ch === '{') braceCount++;\n else if (ch === '}') {\n braceCount--;\n if (braceCount === 0) {\n endLine = i;\n break;\n }\n }\n }\n if (endLine !== -1) break;\n }\n\n if (endLine === -1) {\n endLine = Math.min(startLine + 50, lines.length - 1);\n }\n\n const extracted = lines.slice(startLine, endLine + 1).join('\\n');\n\n return {\n success: true,\n output: `提取函数 \"${funcName}\" (${filePath}:${startLine + 1}-${endLine + 1}):\\n\\n${extracted}`,\n metadata: { functionName: funcName, file: filePath, startLine: startLine + 1, endLine: endLine + 1 },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const analyze_deps: Tool = {\n name: 'analyze_deps',\n description: '分析文件依赖关系',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '入口文件路径' },\n dir_path: { type: 'string', description: '分析目录' },\n depth: { type: 'number', description: '分析深度' },\n max_files: { type: 'number', description: '最大分析文件数' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = params.file_path as string | undefined;\n const dirPath = params.dir_path as string | undefined;\n const depth = (params.depth as number) ?? 1;\n const maxFiles = (params.max_files as number) ?? 50;\n\n const fg = await import('fast-glob');\n let files: string[];\n if (filePath) {\n files = [resolve(filePath)];\n } else {\n const target = dirPath ? resolve(dirPath) : process.cwd();\n files = await fg.default('**/*.{ts,js,tsx,jsx}', {\n cwd: target,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n files = files.slice(0, maxFiles);\n }\n\n const importRegex = /from\\s+['\"]([^'\"]+)['\"]|require\\(['\"]([^'\"]+)['\"]\\)|import\\(['\"]([^'\"]+)['\"]\\)/g;\n const results: { file: string; imports: string[] }[] = [];\n\n for (const fp of files) {\n try {\n const content = readFileSync(fp, 'utf-8');\n const deps: string[] = [];\n let match;\n while ((match = importRegex.exec(content)) !== null) {\n const dep = match[1] || match[2] || match[3];\n deps.push(dep);\n }\n results.push({ file: fp, imports: [...new Set(deps)] });\n } catch { /* skip */ }\n }\n\n const output = results.map(r =>\n `--- ${r.file} ---\\n ${r.imports.length > 0 ? r.imports.join('\\n ') : '(无外部依赖)'}`\n ).join('\\n\\n');\n\n return {\n success: true,\n output: output || '未找到依赖关系',\n metadata: { files: results.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const import_organizer: Tool = {\n name: 'import_organizer',\n description: '整理和组织导入语句',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件路径' },\n group_by: { type: 'string', description: '分组方式: none, type, source', enum: ['none', 'type', 'source'] },\n sort: { type: 'boolean', description: '是否排序' },\n remove_unused: { type: 'boolean', description: '是否移除未使用导入' },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const groupBy = (params.group_by as string) ?? 'source';\n const sort = (params.sort as boolean) ?? true;\n const removeUnused = (params.remove_unused as boolean) ?? false;\n\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n\n const content = readFileSync(filePath, 'utf-8');\n const lines = content.split('\\n');\n const importLines: { index: number; line: string; isRelative: boolean }[] = [];\n const otherLines: { index: number; line: string }[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const trimmed = lines[i].trim();\n if (/^(import\\s+|require\\(|from\\s+|import\\(|import\\s*\\{)/.test(trimmed)) {\n importLines.push({\n index: i,\n line: trimmed,\n isRelative: trimmed.includes(\"'./\") || trimmed.includes(\"'../\") || trimmed.includes('\"./') || trimmed.includes('\"../'),\n });\n } else {\n otherLines.push({ index: i, line: trimmed });\n }\n }\n\n let organized: string[];\n if (groupBy === 'source') {\n const external = importLines.filter(i => !i.isRelative).map(i => i.line).sort();\n const internal = importLines.filter(i => i.isRelative).map(i => i.line).sort();\n organized = [...external, ...(external.length && internal.length ? [''] : []), ...internal];\n } else if (groupBy === 'type') {\n const typeImports = importLines.filter(i => i.line.includes('import type')).map(i => i.line).sort();\n const valueImports = importLines.filter(i => !i.line.includes('import type')).map(i => i.line).sort();\n organized = [...typeImports, ...(typeImports.length && valueImports.length ? [''] : []), ...valueImports];\n } else {\n organized = sort ? importLines.map(i => i.line).sort() : importLines.map(i => i.line);\n }\n\n const updated = [...organized, '', ...otherLines.map(l => l.line)].join('\\n');\n\n if (removeUnused) {\n return {\n success: true,\n output: `导入已整理: ${filePath}\\n\\n建议: 使用 'npx eslint --fix' 或 'organize-imports-cli' 自动移除未使用导入。\\n\\n整理后:\\n${updated.slice(0, 10000)}`,\n metadata: { filePath, importCount: organized.length, removeUnused },\n };\n }\n\n return {\n success: true,\n output: `导入已整理: ${filePath}\\n整理后:\\n${updated.slice(0, 10000)}`,\n metadata: { filePath, importCount: organized.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve, relative } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const code_metrics: Tool = {\n name: 'code_metrics',\n description: '计算代码度量指标(行数、复杂度等)',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n dir_path: { type: 'string', description: '目录路径' },\n file_path: { type: 'string', description: '文件路径' },\n glob: { type: 'string', description: '文件过滤' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const dirPath = params.dir_path as string | undefined;\n const filePath = params.file_path as string | undefined;\n const glob = (params.glob as string) ?? '**/*.{ts,js,tsx,jsx,py}';\n\n let target: string;\n let files: string[];\n\n if (filePath) {\n target = resolve(filePath);\n files = [target];\n } else {\n target = dirPath ? resolve(dirPath) : process.cwd();\n const fg = await import('fast-glob');\n files = await fg.default(glob, {\n cwd: target,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n }\n\n let totalLines = 0;\n let totalCode = 0;\n let totalComments = 0;\n let totalBlank = 0;\n let totalFiles = 0;\n const fileMetrics: Record<string, unknown>[] = [];\n\n for (const fp of files.slice(0, 200)) {\n try {\n const stat = statSync(fp);\n if (stat.size > 1048576) continue;\n const content = readFileSync(fp, 'utf-8');\n const lines = content.split('\\n');\n let code = 0, comments = 0, blank = 0;\n\n let inBlockComment = false;\n for (const line of lines) {\n if (line.trim() === '') { blank++; continue; }\n if (inBlockComment) {\n comments++;\n if (line.includes('*/')) inBlockComment = false;\n continue;\n }\n const trimmed = line.trim();\n if (trimmed.startsWith('//') || trimmed.startsWith('#')) { comments++; continue; }\n if (trimmed.startsWith('/*')) {\n comments++;\n if (!trimmed.includes('*/')) inBlockComment = true;\n continue;\n }\n code++;\n }\n\n totalLines += lines.length;\n totalCode += code;\n totalComments += comments;\n totalBlank += blank;\n totalFiles++;\n\n fileMetrics.push({\n file: relative(target, fp),\n lines: lines.length,\n code,\n comments,\n blank,\n });\n } catch { /* skip */ }\n }\n\n const summary = [\n `代码度量报告 (${totalFiles} 文件)`,\n `总行数: ${totalLines}`,\n `代码行: ${totalCode}`,\n `注释行: ${totalComments}`,\n `空行: ${totalBlank}`,\n `注释率: ${totalLines > 0 ? (totalComments / totalLines * 100).toFixed(1) : 0}%`,\n '',\n '前10文件:',\n ...fileMetrics.slice(0, 10).map(\n m => ` ${m.file}: ${m.lines} 行 (代码:${m.code} 注释:${m.comments} 空:${m.blank})`\n ),\n ];\n\n return { success: true, output: summary.join('\\n'), metadata: { totalFiles, totalLines, totalCode } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { existsSync, readFileSync, statSync } from 'node:fs';\nimport { extname, basename } from 'node:path';\n\nconst MAX_FILE_SIZE = 500_000;\n\nexport interface BugReport {\n file: string;\n line?: number;\n severity: 'error' | 'warning' | 'info';\n message: string;\n suggestion?: string;\n category: string;\n}\n\nconst LANG_CONFIGS: Record<string, { name: string; patterns: Array<{ re: RegExp; severity: BugReport['severity']; cat: string; msg: string; hint?: string }> }> = {\n '.ts': { name: 'TypeScript', patterns: [\n { re: /:\\s*any\\b/g, severity: 'warning', cat: '类型安全', msg: '使用了 `any` 类型,建议指定具体类型', hint: '将 `any` 替换为具体接口或类型' },\n { re: /console\\.(log|warn|error|debug)\\(/g, severity: 'info', cat: '调试代码', msg: '生产代码中留有 console 调用', hint: '移除此调试语句或使用 logger' },\n { re: /as\\s+[A-Z]\\w+/g, severity: 'warning', cat: '类型安全', msg: '使用 `as` 类型断言', hint: '优先使用类型守卫替代类型断言' },\n { re: /@ts-ignore/g, severity: 'warning', cat: '类型安全', msg: '使用 @ts-ignore 忽略类型检查', hint: '修复类型错误而非忽略' },\n { re: /setTimeout\\([^,)]*\\)/g, severity: 'info', cat: '可靠性', msg: 'setTimeout 缺少错误处理', hint: '考虑在回调中添加 try-catch' },\n ]},\n '.js': { name: 'JavaScript', patterns: [\n { re: /console\\.(log|warn|error|debug)\\(/g, severity: 'info', cat: '调试代码', msg: '生产代码中留有 console 调用' },\n { re: /var\\s+/g, severity: 'warning', cat: '代码风格', msg: '使用了 `var`,建议使用 `const`/`let`' },\n { re: /==(?!=)/g, severity: 'warning', cat: '逻辑错误', msg: '使用了 `==` 而非 `===`', hint: '使用 `===` 进行严格比较' },\n { re: /eval\\(/g, severity: 'error', cat: '安全', msg: '使用 eval() 存在安全风险', hint: '避免使用 eval' },\n { re: /innerHTML\\s*=/g, severity: 'warning', cat: '安全', msg: '直接修改 innerHTML 有 XSS 风险', hint: '使用 textContent 或安全 DOM 方法' },\n ]},\n '.py': { name: 'Python', patterns: [\n { re: /except\\s*:/g, severity: 'warning', cat: '错误处理', msg: '使用了裸 except 捕获所有异常' },\n { re: /except\\s+Exception\\s*:/g, severity: 'info', cat: '错误处理', msg: '捕获范围过宽', hint: '捕获更具体的异常类型' },\n { re: /:\\s*print\\(/g, severity: 'info', cat: '调试代码', msg: '生产代码中留有 print 调用' },\n { re: /input\\(/g, severity: 'info', cat: '安全', msg: '未校验用户输入' },\n { re: /exec\\(/g, severity: 'error', cat: '安全', msg: '使用 exec() 存在安全风险' },\n { re: /import\\s+\\*/g, severity: 'info', cat: '代码风格', msg: '通配符导入,建议明确导入' },\n ]},\n '.json': { name: 'JSON', patterns: [\n ]},\n '.css': { name: 'CSS', patterns: [\n { re: /!important/g, severity: 'warning', cat: 'CSS 反模式', msg: '使用 !important', hint: '通过提高选择器特异性替代' },\n { re: /position:\\s*absolute/g, severity: 'info', cat: '布局', msg: '大量 absolute 定位可能影响响应式' },\n ]},\n '.html': { name: 'HTML', patterns: [\n { re: /<script[^>]*>/, severity: 'info', cat: '安全', msg: '内联 script 标签' },\n { re: /on\\w+\\s*=/, severity: 'warning', cat: '安全', msg: '内联事件处理器 (onclick 等)', hint: '使用 addEventListener 替代' },\n ]},\n '.java': { name: 'Java', patterns: [\n { re: /System\\.out\\.print/, severity: 'info', cat: '调试代码', msg: '留有 System.out 调用', hint: '使用日志框架替代' },\n { re: /catch\\s*\\(\\s*Exception\\s+/g, severity: 'warning', cat: '错误处理', msg: '捕获范围过宽' },\n ]},\n '.go': { name: 'Go', patterns: [\n { re: /_,\\s*_\\s*:=/g, severity: 'warning', cat: '错误处理', msg: '忽略了错误返回值', hint: '应处理返回的 error' },\n { re: /panic\\(/g, severity: 'warning', cat: '错误处理', msg: '使用 panic 而非 error 返回', hint: '优先使用 error 返回值' },\n ]},\n '.rs': { name: 'Rust', patterns: [\n { re: /\\.unwrap\\(\\)/g, severity: 'warning', cat: '错误处理', msg: '使用 unwrap() 可能导致 panic', hint: '使用 ? 或 match 处理错误' },\n { re: /unsafe\\s*\\{/g, severity: 'warning', cat: '安全', msg: '使用了 unsafe 块' },\n ]},\n};\n\nexport function analyzeFile(filePath: string): BugReport[] {\n if (!existsSync(filePath)) return [];\n try { if (statSync(filePath).size > MAX_FILE_SIZE) return []; } catch { return []; }\n const reports: BugReport[] = [];\n const ext = extname(filePath).toLowerCase();\n const config = LANG_CONFIGS[ext];\n if (!config) return [];\n\n try {\n const content = readFileSync(filePath, 'utf-8');\n const lines = content.split('\\n');\n\n for (const pattern of config.patterns) {\n if (!pattern.msg) continue;\n let match;\n pattern.re.lastIndex = 0;\n while ((match = pattern.re.exec(content)) !== null) {\n if (!pattern.msg) continue;\n const lineNum = content.slice(0, match.index).split('\\n').length;\n reports.push({\n file: basename(filePath),\n line: lineNum,\n severity: pattern.severity,\n message: pattern.msg,\n suggestion: pattern.hint,\n category: pattern.cat,\n });\n }\n }\n\n // 通用检查 (跨语言)\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n\n // 超长行\n if (trimmed.length > 200 && !trimmed.startsWith('//') && !trimmed.startsWith('#')) {\n reports.push({\n file: basename(filePath), line: i + 1, severity: 'info',\n message: `行过长 (${trimmed.length} 字符)`, suggestion: '考虑拆分或格式化',\n category: '代码风格',\n });\n }\n\n // TODO/FIXME/HACK/BUG 标记\n if (/\\/\\/\\s*(TODO|FIXME|HACK|BUG|XXX)\\b/i.test(trimmed) ||\n /#\\s*(TODO|FIXME|HACK|BUG|XXX)\\b/i.test(trimmed)) {\n const tag = trimmed.match(/(?:TODO|FIXME|HACK|BUG|XXX)/i)?.[0] || '';\n reports.push({\n file: basename(filePath), line: i + 1,\n severity: tag === 'BUG' ? 'error' : tag === 'FIXME' ? 'warning' : 'info',\n message: `标记为 ${tag}`, suggestion: '建议及时处理',\n category: '代码标记',\n });\n }\n }\n } catch { return []; }\n\n return reports;\n}\n\nexport function summarizeBugs(reports: BugReport[]): string {\n if (reports.length === 0) return '';\n const errs = reports.filter(r => r.severity === 'error').length;\n const warns = reports.filter(r => r.severity === 'warning').length;\n const infos = reports.filter(r => r.severity === 'info').length;\n\n let s = `[BugScan] 检查发现 ${reports.length} 个问题`;\n if (errs > 0) s += ` · ${errs} ❌错误`;\n if (warns > 0) s += ` · ${warns} ⚠警告`;\n if (infos > 0) s += ` · ${infos} ℹ提示`;\n s += '\\n';\n\n const top = reports.slice(0, 8);\n for (const r of top) {\n const sev = r.severity === 'error' ? '❌' : r.severity === 'warning' ? '⚠' : 'ℹ';\n s += `${sev} ${r.file}:${r.line ?? '?'} [${r.category}] ${r.message}`;\n if (r.suggestion) s += ` → ${r.suggestion}`;\n s += '\\n';\n }\n\n if (reports.length > 8) s += `... 还有 ${reports.length - 8} 个问题\\n`;\n return s;\n}\n","import { statSync } from 'node:fs';\nimport { isAbsolute, join } from 'node:path';\nimport fg from 'fast-glob';\nimport { analyzeFile, summarizeBugs } from '../../../core/bugscan.js';\nimport type { Tool } from '../../tool-types.js';\nimport type { BugReport } from '../../../core/bugscan.js';\n\nconst MAX_FILES = 50;\nconst EXTENSIONS = '{ts,js,py,java,go,rs,css,html}';\nconst SEVERITY_ORDER: Record<string, number> = { error: 0, warning: 1, info: 2 };\n\nexport const bug_scan: Tool = {\n name: 'bug_scan',\n description: 'Scan source files for bugs, anti-patterns, and code quality issues. Supports TS/JS/Python/Java/Go/Rust/CSS/HTML.',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n path: { type: 'string', description: 'File or directory path to scan' },\n recursive: { type: 'boolean', description: 'Scan directory recursively' },\n severity: { type: 'string', description: 'Minimum severity level to report', enum: ['error', 'warning', 'info'] },\n },\n required: ['path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const target = params.path as string;\n const recursive = (params.recursive as boolean) ?? false;\n const minSeverity = (params.severity as string) ?? 'warning';\n\n const absPath = isAbsolute(target) ? target : join(process.cwd(), target);\n\n let isFile = false;\n try {\n isFile = statSync(absPath).isFile();\n } catch {\n return { success: false, error: `路径不存在: ${absPath}`, output: '' };\n }\n\n let files: string[];\n if (isFile) {\n files = [absPath];\n } else {\n const pattern = recursive\n ? `**/*.${EXTENSIONS}`\n : `*.${EXTENSIONS}`;\n files = await fg(pattern, {\n cwd: absPath,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n }\n\n files = files.slice(0, MAX_FILES);\n\n const allBugs: BugReport[] = [];\n for (const fp of files) {\n try {\n const bugs = analyzeFile(fp);\n allBugs.push(...bugs);\n } catch { /* skip files that fail */ }\n }\n\n const minOrder = SEVERITY_ORDER[minSeverity] ?? 1;\n const filtered = allBugs.filter(b => (SEVERITY_ORDER[b.severity] ?? 2) <= minOrder);\n\n if (filtered.length === 0) {\n return { success: true, output: 'No issues found', metadata: { filesScanned: files.length, totalBugs: allBugs.length } };\n }\n\n const output = summarizeBugs(filtered);\n return { success: true, output, metadata: { filesScanned: files.length, totalBugs: allBugs.length, filteredBugs: filtered.length } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const sql_query: Tool = {\n name: 'sql_query',\n description: '执行 SQL 查询',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n query: { type: 'string', description: 'SQL 查询语句' },\n connection: { type: 'string', description: '数据库连接字符串' },\n engine: { type: 'string', description: '数据库引擎: mysql, postgresql, sqlite, mssql', enum: ['mysql', 'postgresql', 'sqlite', 'mssql'] },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['query', 'engine'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const query = params.query as string;\n const engine = params.engine as string;\n const connection = params.connection as string | undefined;\n const timeout = (params.timeout_ms as number) ?? 30000;\n\n let cmd = '';\n switch (engine) {\n case 'sqlite':\n cmd = `sqlite3 \"${connection || 'database.db'}\" \"${query.replace(/\"/g, '\\\\\"')}\"`;\n break;\n case 'mysql':\n cmd = `mysql ${connection || ''} -e \"${query.replace(/\"/g, '\\\\\"')}\"`;\n break;\n case 'postgresql':\n cmd = `psql ${connection || ''} -c \"${query.replace(/\"/g, '\\\\\"')}\"`;\n break;\n case 'mssql':\n cmd = `sqlcmd ${connection ? connection : ''} -Q \"${query.replace(/\"/g, '\\\\\"')}\"`;\n break;\n default:\n return { success: false, error: `不支持的数据库引擎: ${engine}`, output: '' };\n }\n\n try {\n const output = execSync(cmd, { encoding: 'utf-8', timeout, maxBuffer: 50 * 1024 * 1024, stdio: 'pipe' });\n return { success: true, output, metadata: { engine } };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: `查询失败: ${e.message || String(err)}`,\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const sql_migrate: Tool = {\n name: 'sql_migrate',\n description: '执行数据库迁移',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n command: { type: 'string', description: '迁移命令或 SQL 文件路径' },\n connection: { type: 'string', description: '数据库连接字符串' },\n engine: { type: 'string', description: '数据库引擎', enum: ['mysql', 'postgresql', 'sqlite', 'mssql'] },\n },\n required: ['command'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const command = params.command as string;\n const connection = params.connection as string | undefined;\n const engine = (params.engine as string) ?? 'sqlite';\n\n let cmd = '';\n switch (engine) {\n case 'sqlite':\n cmd = `sqlite3 \"${connection || 'database.db'}\" < \"${command}\"`;\n break;\n case 'mysql':\n cmd = `mysql ${connection || ''} < \"${command}\"`;\n break;\n case 'postgresql':\n cmd = `psql ${connection || ''} -f \"${command}\"`;\n break;\n default:\n return { success: false, error: `不支持的数据库引擎: ${engine}`, output: '' };\n }\n\n try {\n const output = execSync(cmd, { encoding: 'utf-8', timeout: 60000, stdio: 'pipe' });\n return { success: true, output: output || '迁移执行成功', metadata: { engine, command } };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: `迁移失败: ${e.message || String(err)}`,\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const nosql_query: Tool = {\n name: 'nosql_query',\n description: '执行 NoSQL 数据库操作(MongoDB shell)',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n query: { type: 'string', description: '查询语句(MongoDB shell 语法)' },\n connection: { type: 'string', description: '连接字符串 mongodb://...' },\n collection: { type: 'string', description: '集合名称' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['query'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const query = params.query as string;\n const connection = (params.connection as string) ?? 'mongodb://localhost:27017';\n const collection = params.collection as string | undefined;\n const timeout = (params.timeout_ms as number) ?? 30000;\n\n const queryScript = collection\n ? `db.${collection}.${query}`\n : query;\n\n try {\n const output = execSync(\n `mongosh \"${connection}\" --eval \"${queryScript.replace(/\"/g, '\\\\\"')}\"`,\n { encoding: 'utf-8', timeout, maxBuffer: 50 * 1024 * 1024, stdio: 'pipe' }\n );\n return { success: true, output, metadata: { connection, collection } };\n } catch {\n return {\n success: true,\n output: `MongoDB 查询请求:\\n连接: ${connection}\\n集合: ${collection || '(未指定)'}\\n查询: ${queryScript}\\n\\n注意: mongosh 命令行不可用。请确保已安装 MongoDB Shell,或将查询语句直接在 mongosh 中执行。`,\n metadata: { connection, fallback: true },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const db_schema: Tool = {\n name: 'db_schema',\n description: '查看数据库表结构',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n connection: { type: 'string', description: '数据库连接字符串' },\n engine: { type: 'string', description: '数据库引擎: mysql, postgresql, sqlite, mssql', enum: ['mysql', 'postgresql', 'sqlite', 'mssql'] },\n table: { type: 'string', description: '表名(可选)' },\n },\n required: ['engine'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const engine = params.engine as string;\n const table = params.table as string | undefined;\n const connection = params.connection as string | undefined;\n\n let output = `数据库 Schema 查询\\n引擎: ${engine}\\n\\n`;\n\n switch (engine) {\n case 'sqlite': {\n if (!connection) {\n return { success: false, error: 'sqlite 需要 connection 参数(文件路径)', output: '' };\n }\n try {\n const result = execSync(`sqlite3 \"${connection}\" \".schema ${table || ''}\"`, {\n encoding: 'utf-8', timeout: 10000, stdio: 'pipe',\n });\n output += result;\n } catch {\n output += 'sqlite3 命令行不可用,请安装 sqlite3 或使用文件路径直接查看数据库。\\n';\n output += `文件: ${connection}`;\n }\n break;\n }\n case 'mysql': {\n output += table\n ? `使用: mysql -e \"DESCRIBE ${table};\" ${connection ? connection : ''}`\n : `使用: mysql -e \"SHOW TABLES;\" ${connection ? connection : ''}`;\n output += '\\n(请确保 mysql 客户端已安装)';\n break;\n }\n case 'postgresql': {\n output += table\n ? `使用: psql ${connection || ''} -c \"\\\\d ${table}\"`\n : `使用: psql ${connection || ''} -c \"\\\\dt\"`;\n output += '\\n(请确保 psql 客户端已安装)';\n break;\n }\n default:\n output += `请使用 ${engine} CLI 或 GUI 工具查看数据库 schema。`;\n }\n\n return { success: true, output, metadata: { engine, table } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const db_backup: Tool = {\n name: 'db_backup',\n description: '数据库备份',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n engine: { type: 'string', description: '数据库引擎', enum: ['mysql', 'postgresql', 'sqlite'] },\n connection: { type: 'string', description: '连接字符串/数据库名称' },\n output_file: { type: 'string', description: '备份输出文件路径' },\n tables: { type: 'array', items: { type: 'string' }, description: '指定表名列表' },\n },\n required: ['engine', 'output_file'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const engine = params.engine as string;\n const connection = params.connection as string | undefined;\n const outputFile = params.output_file as string;\n const tables = params.tables as string[] | undefined;\n\n let cmd = '';\n switch (engine) {\n case 'sqlite':\n cmd = `sqlite3 \"${connection || 'database.db'}\" .dump > \"${outputFile}\"`;\n break;\n case 'mysql':\n cmd = `mysqldump ${connection || ''} ${(tables || []).join(' ')} > \"${outputFile}\"`;\n break;\n case 'postgresql':\n cmd = `pg_dump ${connection || ''} > \"${outputFile}\"`;\n break;\n default:\n return { success: false, error: `不支持的数据库引擎: ${engine}`, output: '' };\n }\n\n try {\n execSync(cmd, { encoding: 'utf-8', timeout: 120000, stdio: 'pipe' });\n return { success: true, output: `备份完成: ${outputFile}`, metadata: { engine, outputFile } };\n } catch (err: unknown) {\n const e = err as { message?: string };\n return { success: false, error: `备份失败: ${e.message || String(err)}`, output: '' };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const db_restore: Tool = {\n name: 'db_restore',\n description: '数据库恢复',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n engine: { type: 'string', description: '数据库引擎', enum: ['mysql', 'postgresql', 'sqlite'] },\n connection: { type: 'string', description: '连接字符串' },\n backup_file: { type: 'string', description: '备份文件路径' },\n },\n required: ['engine', 'backup_file'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const engine = params.engine as string;\n const connection = params.connection as string | undefined;\n const backupFile = params.backup_file as string;\n\n let cmd = '';\n switch (engine) {\n case 'sqlite':\n cmd = `sqlite3 \"${connection || 'database.db'}\" < \"${backupFile}\"`;\n break;\n case 'mysql':\n cmd = `mysql ${connection || ''} < \"${backupFile}\"`;\n break;\n case 'postgresql':\n cmd = `psql ${connection || ''} < \"${backupFile}\"`;\n break;\n default:\n return { success: false, error: `不支持的数据库引擎: ${engine}`, output: '' };\n }\n\n try {\n const output = execSync(cmd, { encoding: 'utf-8', timeout: 120000, stdio: 'pipe' });\n return { success: true, output: `恢复完成: ${backupFile}\\n${output || ''}`, metadata: { engine, backupFile } };\n } catch (err: unknown) {\n const e = err as { message?: string };\n return { success: false, error: `恢复失败: ${e.message || String(err)}`, output: '' };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const redis_command: Tool = {\n name: 'redis_command',\n description: '执行 Redis 命令',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n host: { type: 'string', description: 'Redis 主机' },\n port: { type: 'number', description: 'Redis 端口' },\n password: { type: 'string', description: '认证密码' },\n command: { type: 'string', description: 'Redis 命令' },\n },\n required: ['command'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const host = (params.host as string) ?? 'localhost';\n const port = (params.port as number) ?? 6379;\n const password = params.password as string | undefined;\n const command = params.command as string;\n\n let cmd = `redis-cli -h ${host} -p ${port}`;\n if (password) cmd += ` -a \"${password}\"`;\n cmd += ` ${command}`;\n\n try {\n const output = execSync(cmd, { encoding: 'utf-8', timeout: 15000, stdio: 'pipe' });\n return { success: true, output, metadata: { host, port } };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: `Redis 命令失败: ${e.message || String(err)}`,\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const orm_generate: Tool = {\n name: 'orm_generate',\n description: '生成 ORM 模型代码(基于数据库 schema)',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n engine: { type: 'string', description: '数据库引擎', enum: ['mysql', 'postgresql', 'sqlite', 'mssql'] },\n connection: { type: 'string', description: '连接字符串' },\n output_dir: { type: 'string', description: '输出目录' },\n orm: { type: 'string', description: 'ORM 框架: prisma, typeorm, drizzle, sequelize', enum: ['prisma', 'typeorm', 'drizzle', 'sequelize'] },\n },\n required: ['engine', 'orm'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const engine = params.engine as string;\n const connection = params.connection as string | undefined;\n const outputDir = (params.output_dir as string) ?? './models';\n const orm = params.orm as string;\n\n const tips: Record<string, string[]> = {\n prisma: [\n `npx prisma init --datasource-provider ${engine}`,\n '将上述 schema 写入 prisma/schema.prisma',\n 'npx prisma db pull # 从数据库拉取 schema',\n 'npx prisma generate # 生成 Prisma Client',\n ],\n typeorm: [\n 'npx typeorm-model-generator -h host -d database -p port -u user -x password -e engine -o outputDir',\n '或使用: npx typeorm entity:create',\n ],\n drizzle: [\n 'npx drizzle-kit introspect:pg # PostgreSQL',\n 'npx drizzle-kit introspect:mysql # MySQL',\n 'npx drizzle-kit generate',\n ],\n sequelize: [\n 'npx sequelize-auto -h host -d database -u user -x password -p port --dialect engine -o outputDir',\n ],\n };\n\n const output = [\n `ORM 模型生成方案`,\n `数据库引擎: ${engine}`,\n `ORM 框架: ${orm}`,\n `输出目录: ${outputDir}`,\n '',\n '操作步骤:',\n ...(tips[orm] || []).map(t => ` ${t}`),\n '',\n '提示: 生成模型代码后,请根据项目需要手动调整字段类型和关联关系。',\n ].join('\\n');\n\n return { success: true, output, metadata: { engine, orm, outputDir } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const json_parse: Tool = {\n name: 'json_parse',\n description: '解析和格式化 JSON 内容',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n content: { type: 'string', description: 'JSON 字符串' },\n file_path: { type: 'string', description: 'JSON 文件路径' },\n pretty: { type: 'boolean', description: '是否美化输出' },\n query: { type: 'string', description: 'JSONPath 查询' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const content = params.content as string | undefined;\n const filePath = params.file_path as string | undefined;\n const pretty = (params.pretty as boolean) ?? true;\n const query = params.query as string | undefined;\n\n let jsonContent = '';\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n jsonContent = readFileSync(abs, 'utf-8');\n } else if (content) {\n jsonContent = content;\n } else {\n return { success: false, error: '请提供 content 或 file_path 参数', output: '' };\n }\n\n const parsed = JSON.parse(jsonContent);\n\n if (query) {\n const value = resolveJsonPath(parsed, query);\n return {\n success: true,\n output: JSON.stringify(value, null, pretty ? 2 : 0),\n metadata: { query },\n };\n }\n\n return { success: true, output: JSON.stringify(parsed, null, pretty ? 2 : 0) };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction resolveJsonPath(obj: unknown, path: string): unknown {\n const parts = path.replace(/^\\$\\.?/, '').split('.');\n let current: unknown = obj;\n for (const part of parts) {\n if (current === null || typeof current !== 'object') return undefined;\n const bracketMatch = part.match(/^(\\w+)\\[(\\d+)\\]$/);\n if (bracketMatch) {\n current = (current as Record<string, unknown>)[bracketMatch[1]];\n current = (current as unknown[])?.[parseInt(bracketMatch[2])];\n } else {\n current = (current as Record<string, unknown>)[part];\n }\n }\n return current;\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport const csv_parse: Tool = {\n name: 'csv_parse',\n description: '解析 CSV 内容',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n content: { type: 'string', description: 'CSV 字符串' },\n file_path: { type: 'string', description: 'CSV 文件路径' },\n delimiter: { type: 'string', description: '列分隔符,默认逗号' },\n has_header: { type: 'boolean', description: '是否有标题行' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n let csvContent = '';\n const filePath = params.file_path as string | undefined;\n const content = params.content as string | undefined;\n const delimiter = (params.delimiter as string) ?? ',';\n const hasHeader = (params.has_header as boolean) ?? true;\n\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n csvContent = readFileSync(abs, 'utf-8');\n } else if (content) {\n csvContent = content;\n } else {\n return { success: false, error: '请提供 content 或 file_path 参数', output: '' };\n }\n\n const { parse } = await import('csv-parse/sync');\n const records = parse(csvContent, {\n delimiter,\n columns: hasHeader,\n skip_empty_lines: true,\n trim: true,\n });\n\n return {\n success: true,\n output: JSON.stringify(records, null, 2),\n metadata: { rows: Array.isArray(records) ? records.length : 0 },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const xml_parse: Tool = {\n name: 'xml_parse',\n description: '解析 XML 内容',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n content: { type: 'string', description: 'XML 字符串' },\n file_path: { type: 'string', description: 'XML 文件路径' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n let xmlContent = '';\n const filePath = params.file_path as string | undefined;\n const content = params.content as string | undefined;\n\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n xmlContent = readFileSync(abs, 'utf-8');\n } else if (content) {\n xmlContent = content;\n } else {\n return { success: false, error: '请提供 content 或 file_path 参数', output: '' };\n }\n\n const parsed = parseXml(xmlContent);\n return { success: true, output: JSON.stringify(parsed, null, 2) };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction parseXml(xml: string): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n const tagRegex = /<([\\w:.-]+)([^>]*)>([\\s\\S]*?)<\\/\\1>/g;\n const selfClosingRegex = /<([\\w:.-]+)([^>]*)\\/>/g;\n let match;\n\n while ((match = tagRegex.exec(xml)) !== null) {\n const tagName = match[1];\n const attrs = match[2];\n const inner = match[3];\n\n const attrsObj: Record<string, string> = {};\n const attrRegex = /(\\w+)=[\"']([^\"']*)[\"']/g;\n let attrMatch;\n while ((attrMatch = attrRegex.exec(attrs)) !== null) {\n attrsObj[attrMatch[1]] = attrMatch[2];\n }\n\n if (/<[\\w]/.test(inner)) {\n result[tagName] = { ...attrsObj, ...parseXml(inner) };\n } else {\n result[tagName] = { _text: inner.trim(), ...attrsObj };\n }\n }\n\n while ((match = selfClosingRegex.exec(xml)) !== null) {\n const attrsObj: Record<string, string> = {};\n const attrRegex = /(\\w+)=[\"']([^\"']*)[\"']/g;\n let attrMatch;\n while ((attrMatch = attrRegex.exec(match[2])) !== null) {\n attrsObj[attrMatch[1]] = attrMatch[2];\n }\n result[match[1]] = attrsObj;\n }\n\n return result;\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport const yaml_parse: Tool = {\n name: 'yaml_parse',\n description: '解析 YAML 内容',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n content: { type: 'string', description: 'YAML 字符串' },\n file_path: { type: 'string', description: 'YAML 文件路径' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n let yamlContent = '';\n const filePath = params.file_path as string | undefined;\n const content = params.content as string | undefined;\n\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n yamlContent = readFileSync(abs, 'utf-8');\n } else if (content) {\n yamlContent = content;\n } else {\n return { success: false, error: '请提供 content 或 file_path 参数', output: '' };\n }\n\n const { parse } = await import('yaml');\n const parsed = parse(yamlContent);\n return { success: true, output: JSON.stringify(parsed, null, 2) };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const toml_parse: Tool = {\n name: 'toml_parse',\n description: '解析 TOML 内容',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n content: { type: 'string', description: 'TOML 字符串内容' },\n file_path: { type: 'string', description: 'TOML 文件路径' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const content = params.content as string | undefined;\n const filePath = params.file_path as string | undefined;\n\n let tomlContent = '';\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n tomlContent = readFileSync(abs, 'utf-8');\n } else if (content) {\n tomlContent = content;\n } else {\n return { success: false, error: '请提供 content 或 file_path 参数', output: '' };\n }\n\n const { parse } = await import('toml');\n const parsed = parse(tomlContent);\n return { success: true, output: JSON.stringify(parsed, null, 2) };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const data_transform: Tool = {\n name: 'data_transform',\n description: '数据格式转换(JSON/CSV/YAML/XML 互转)',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n data: { type: 'string', description: '输入数据' },\n from: { type: 'string', description: '源格式: json, csv, yaml, xml', enum: ['json', 'csv', 'yaml', 'xml'] },\n to: { type: 'string', description: '目标格式: json, csv, yaml, xml', enum: ['json', 'csv', 'yaml', 'xml'] },\n file_path: { type: 'string', description: '文件路径' },\n output: { type: 'string', description: '输出文件路径' },\n },\n required: ['from', 'to'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const from = params.from as string;\n const to = params.to as string;\n const data = params.data as string | undefined;\n const filePath = params.file_path as string | undefined;\n const output = params.output as string | undefined;\n\n let inputStr = '';\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n inputStr = readFileSync(abs, 'utf-8');\n } else if (data) {\n inputStr = data;\n } else {\n return { success: false, error: '请提供 data 或 file_path 参数', output: '' };\n }\n\n let parsed: unknown;\n switch (from) {\n case 'json': parsed = JSON.parse(inputStr); break;\n case 'yaml': { const yaml = await import('yaml'); parsed = yaml.parse(inputStr); break; }\n case 'csv': {\n const { parse } = await import('csv-parse/sync');\n parsed = parse(inputStr, { columns: true, skip_empty_lines: true });\n break;\n }\n case 'xml': parsed = inputStr; break;\n default: return { success: false, error: `不支持的源格式: ${from}`, output: '' };\n }\n\n let outputStr = '';\n switch (to) {\n case 'json': outputStr = JSON.stringify(parsed, null, 2); break;\n case 'yaml': { const yaml = await import('yaml'); outputStr = yaml.stringify(parsed); break; }\n case 'xml': outputStr = typeof parsed === 'string' ? parsed : `<root>${JSON.stringify(parsed)}</root>`; break;\n case 'csv': outputStr = JSON.stringify(parsed); break;\n default: return { success: false, error: `不支持的目标格式: ${to}`, output: '' };\n }\n\n if (output) {\n const { writeFileSync } = await import('node:fs');\n writeFileSync(output, outputStr, 'utf-8');\n return { success: true, output: `转换完成并写入: ${output}`, metadata: { from, to } };\n }\n\n return { success: true, output: outputStr, metadata: { from, to } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const data_validate: Tool = {\n name: 'data_validate',\n description: '根据 schema 验证数据',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n data: { type: 'string', description: 'JSON 数据' },\n schema: { type: 'string', description: 'JSON Schema 用于验证' },\n },\n required: ['data', 'schema'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const data = JSON.parse(params.data as string);\n const schema = JSON.parse(params.schema as string);\n\n const errors = validateAgainstSchema(data, schema);\n\n if (errors.length === 0) {\n return { success: true, output: '数据验证通过!' };\n }\n return {\n success: false,\n error: `数据验证失败 (${errors.length} 个问题)`,\n output: errors.map((e, i) => ` ${i + 1}. ${e}`).join('\\n'),\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction validateAgainstSchema(data: unknown, schema: Record<string, unknown>, path = '$'): string[] {\n const errors: string[] = [];\n\n if (schema.type) {\n const expectedType = schema.type as string;\n const actualType = Array.isArray(data) ? 'array' : typeof data;\n if (expectedType !== actualType) {\n errors.push(`${path}: 期望类型 \"${expectedType}\",实际类型 \"${actualType}\"`);\n return errors;\n }\n }\n\n if (schema.required && Array.isArray(schema.required) && data && typeof data === 'object') {\n for (const key of schema.required as string[]) {\n if (!(key in (data as Record<string, unknown>))) {\n errors.push(`${path}: 缺少必需字段 \"${key}\"`);\n }\n }\n }\n\n if (schema.properties && data && typeof data === 'object' && !Array.isArray(data)) {\n const props = schema.properties as Record<string, Record<string, unknown>>;\n for (const [key, propSchema] of Object.entries(props)) {\n if (key in data) {\n errors.push(...validateAgainstSchema((data as Record<string, unknown>)[key], propSchema, `${path}.${key}`));\n }\n }\n }\n\n if (schema.enum && Array.isArray(schema.enum)) {\n const enumValues = schema.enum;\n if (!enumValues.includes(data)) {\n errors.push(`${path}: 值 \"${data}\" 不在允许的范围: [${enumValues.join(', ')}]`);\n }\n }\n\n return errors;\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport const data_diff: Tool = {\n name: 'data_diff',\n description: '比较两个数据集的差异',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n data_a: { type: 'string', description: '数据集 A (JSON)' },\n data_b: { type: 'string', description: '数据集 B (JSON)' },\n },\n required: ['data_a', 'data_b'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const a = JSON.parse(params.data_a as string);\n const b = JSON.parse(params.data_b as string);\n\n const diff = computeDiff(a, b, '');\n const output = diff.length > 0 ? diff.join('\\n') : '两个数据集完全相同';\n\n return { success: true, output, metadata: { differences: diff.length } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction computeDiff(a: unknown, b: unknown, path: string): string[] {\n const results: string[] = [];\n\n if (a === b) return results;\n\n if (typeof a !== typeof b) {\n results.push(`${path || 'root'}: 类型不同 (${typeof a} vs ${typeof b})`);\n return results;\n }\n\n if (a === null || b === null || typeof a !== 'object') {\n if (JSON.stringify(a) !== JSON.stringify(b)) {\n results.push(`${path || 'root'}: ${JSON.stringify(a)} → ${JSON.stringify(b)}`);\n }\n return results;\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n const maxLen = Math.max(a.length, b.length);\n for (let i = 0; i < maxLen; i++) {\n results.push(...computeDiff(a[i], b[i], `${path}[${i}]`));\n }\n return results;\n }\n\n const keysA = Object.keys(a as Record<string, unknown>);\n const keysB = Object.keys(b as Record<string, unknown>);\n const allKeys = new Set([...keysA, ...keysB]);\n\n for (const key of allKeys) {\n const valA = (a as Record<string, unknown>)[key];\n const valB = (b as Record<string, unknown>)[key];\n\n if (!(key in (a as object))) {\n results.push(`${path}.${key}: 新增 → ${JSON.stringify(valB)}`);\n } else if (!(key in (b as object))) {\n results.push(`${path}.${key}: 已删除 (原值: ${JSON.stringify(valA)})`);\n } else {\n if (typeof valA === 'object' && typeof valB === 'object' && valA !== null && valB !== null) {\n results.push(...computeDiff(valA, valB, `${path}.${key}`));\n } else if (valA !== valB) {\n results.push(`${path}.${key}: ${JSON.stringify(valA)} → ${JSON.stringify(valB)}`);\n }\n }\n }\n\n return results;\n}\n","import { readFileSync, existsSync, writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const template_render: Tool = {\n name: 'template_render',\n description: '渲染模板字符串或文件',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n template: { type: 'string', description: '模板字符串,使用 {{key}} 占位' },\n file_path: { type: 'string', description: '模板文件路径' },\n values: { type: 'object', description: '模板变量值' },\n output: { type: 'string', description: '输出文件路径' },\n },\n required: ['values'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const templateStr = params.template as string | undefined;\n const filePath = params.file_path as string | undefined;\n const values = params.values as Record<string, unknown>;\n const output = params.output as string | undefined;\n\n let template = '';\n if (filePath) {\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `模板文件不存在: ${abs}`, output: '' };\n template = readFileSync(abs, 'utf-8');\n } else if (templateStr) {\n template = templateStr;\n } else {\n return { success: false, error: '请提供 template 或 file_path 参数', output: '' };\n }\n\n let rendered = template;\n for (const [key, value] of Object.entries(values)) {\n rendered = rendered.replace(new RegExp(`\\\\{\\\\{\\\\s*${escapeRegex(key)}\\\\s*\\\\}\\\\}`, 'g'), String(value));\n }\n\n if (output) {\n writeFileSync(output, rendered, 'utf-8');\n return { success: true, output: `模板已渲染并写入: ${output}`, metadata: { keys: Object.keys(values).length } };\n }\n\n return { success: true, output: rendered, metadata: { keys: Object.keys(values).length } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport const chart_generate: Tool = {\n name: 'chart_generate',\n description: '生成数据图表(输出图表描述和配置)',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n data: { type: 'string', description: 'JSON 格式的数据' },\n chart_type: { type: 'string', description: '图表类型: bar, line, pie, scatter, area', enum: ['bar', 'line', 'pie', 'scatter', 'area'] },\n x_key: { type: 'string', description: 'X 轴数据键名' },\n y_key: { type: 'string', description: 'Y 轴数据键名' },\n title: { type: 'string', description: '图表标题' },\n },\n required: ['data', 'chart_type'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const data = JSON.parse(params.data as string);\n const chartType = params.chart_type as string;\n const xKey = params.x_key as string | undefined;\n const yKey = params.y_key as string | undefined;\n const title = (params.title as string) ?? 'Chart';\n\n const config = {\n title,\n type: chartType,\n data: Array.isArray(data) ? data : [data],\n xKey,\n yKey,\n timestamp: new Date().toISOString(),\n };\n\n const output = [\n `图表配置: ${title} (${chartType})`,\n '',\n '```json',\n JSON.stringify(config, null, 2),\n '```',\n '',\n '提示: 可以使用以下工具渲染图表:',\n '- Chart.js + Canvas (Node.js)',\n '- Apache ECharts',\n '- D3.js',\n '- Matplotlib (Python)',\n '',\n '使用建议: 安装 chartjs-node-canvas 或使用 web 前端渲染。',\n ].join('\\n');\n\n return {\n success: true,\n output,\n metadata: { chartType, dataPoints: Array.isArray(data) ? data.length : 1 },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const secret_scan: Tool = {\n name: 'secret_scan',\n description: '扫描代码中的密钥和敏感信息',\n category: 'security',\n parameters: {\n type: 'object',\n properties: {\n dir_path: { type: 'string', description: '扫描目录' },\n file_path: { type: 'string', description: '扫描文件' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const dirPath = params.dir_path as string | undefined;\n const filePath = params.file_path as string | undefined;\n const maxResults = (params.max_results as number) ?? 100;\n\n const patterns: [string, RegExp][] = [\n ['API Key', /(?:api[_-]?key|apikey|api[_-]?secret)\\s*[:=]\\s*['\"]([^'\"]+)['\"]/gi],\n ['Password', /(?:password|passwd|pwd)\\s*[:=]\\s*['\"]([^'\"]+)['\"]/gi],\n ['Token', /(?:token|jwt|bearer)\\s*[:=]\\s*['\"]([^'\"]+)['\"]/gi],\n ['Secret', /(?:secret|secret[_-]key)\\s*[:=]\\s*['\"]([^'\"]+)['\"]/gi],\n ['Private Key', /-----BEGIN\\s+(?:RSA|EC|DSA|OPENSSH)\\s+PRIVATE\\s+KEY-----/g],\n ['AWS Key', /(?:AKIA[0-9A-Z]{16})/g],\n ['GitHub Token', /(?:gh[pousr]_[A-Za-z0-9_]{36,})/g],\n ];\n\n const fg = await import('fast-glob');\n let files: string[];\n if (filePath) {\n files = [resolve(filePath)];\n } else {\n const target = dirPath ? resolve(dirPath) : process.cwd();\n files = await fg.default('**/*.{ts,js,tsx,jsx,py,yml,yaml,json,env,properties,xml,toml}', {\n cwd: target,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n }\n\n const results: string[] = [];\n for (const fp of files.slice(0, 500)) {\n if (results.length >= maxResults) break;\n try {\n const stat = await import('node:fs').then(m => m.statSync(fp));\n if (stat.size > 1048576) continue;\n const content = readFileSync(fp, 'utf-8');\n for (const [type, regex] of patterns) {\n regex.lastIndex = 0;\n let match;\n while ((match = regex.exec(content)) !== null && results.length < maxResults) {\n const line = content.slice(0, match.index).split('\\n').length;\n const redacted = match[0].replace(/[:=]\\s*['\"][^'\"]+/g, '=****');\n results.push(`${fp}:${line}: [${type}] ${redacted.slice(0, 120)}`);\n }\n }\n } catch { /* skip */ }\n }\n\n const output = results.length > 0\n ? `发现 ${results.length} 个疑似敏感信息:\\n\\n${results.join('\\n')}\\n\\n建议立即处理这些信息!`\n : '未发现疑似敏感信息';\n\n return {\n success: true,\n output,\n metadata: { count: results.length, scanned: files.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const encrypt_file: Tool = {\n name: 'encrypt_file',\n description: '加密文件内容 (AES-256-CBC)',\n category: 'security',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '要加密的文件路径' },\n output: { type: 'string', description: '加密输出文件路径' },\n password: { type: 'string', description: '加密密钥' },\n algorithm: { type: 'string', description: '加密算法', enum: ['aes-256-cbc', 'aes-128-cbc'] },\n },\n required: ['file_path', 'output'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const output = resolve(params.output as string);\n const password = params.password as string | undefined;\n const algorithm = (params.algorithm as string) ?? 'aes-256-cbc';\n\n if (!existsSync(filePath)) return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n\n const crypto = await import('node:crypto');\n const content = readFileSync(filePath);\n\n const key = crypto.scryptSync(password || 'default-secret-key', 'salt', algorithm === 'aes-256-cbc' ? 32 : 16);\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv(algorithm, key, iv);\n\n const encrypted = Buffer.concat([iv, cipher.update(content), cipher.final()]);\n\n const outDir = dirname(output);\n if (!existsSync(outDir)) mkdirSync(outDir, { recursive: true });\n writeFileSync(output, encrypted);\n\n return {\n success: true,\n output: `文件已加密: ${filePath} → ${output}`,\n metadata: { algorithm, encryptedSize: encrypted.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const decrypt_file: Tool = {\n name: 'decrypt_file',\n description: '解密文件内容 (AES-256-CBC)',\n category: 'security',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '要解密的文件路径' },\n output: { type: 'string', description: '解密输出文件路径' },\n password: { type: 'string', description: '解密密钥' },\n algorithm: { type: 'string', description: '算法', enum: ['aes-256-cbc', 'aes-128-cbc'] },\n },\n required: ['file_path', 'output'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const output = resolve(params.output as string);\n const password = params.password as string | undefined;\n const algorithm = (params.algorithm as string) ?? 'aes-256-cbc';\n\n if (!existsSync(filePath)) return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n\n const crypto = await import('node:crypto');\n const encrypted = readFileSync(filePath);\n\n const iv = encrypted.subarray(0, 16);\n const data = encrypted.subarray(16);\n\n const key = crypto.scryptSync(password || 'default-secret-key', 'salt', algorithm === 'aes-256-cbc' ? 32 : 16);\n const decipher = crypto.createDecipheriv(algorithm, key, iv);\n\n const decrypted = Buffer.concat([decipher.update(data), decipher.final()]);\n\n const outDir = dirname(output);\n if (!existsSync(outDir)) mkdirSync(outDir, { recursive: true });\n writeFileSync(output, decrypted);\n\n return {\n success: true,\n output: `文件已解密: ${filePath} → ${output}`,\n metadata: { algorithm, decryptedSize: decrypted.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { createHash } from 'node:crypto';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const hash_generate: Tool = {\n name: 'hash_generate',\n description: '生成文件或字符串的哈希值',\n category: 'security',\n parameters: {\n type: 'object',\n properties: {\n content: { type: 'string', description: '要哈希的字符串' },\n file_path: { type: 'string', description: '文件路径' },\n algorithm: { type: 'string', description: '算法', enum: ['sha256', 'sha512', 'md5'] },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const content = params.content as string | undefined;\n const filePath = params.file_path as string | undefined;\n const algorithm = (params.algorithm as string) ?? 'sha256';\n\n let hash: string;\n if (filePath) {\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n const fileContent = readFileSync(abs);\n hash = createHash(algorithm).update(fileContent).digest('hex');\n } else if (content) {\n hash = createHash(algorithm).update(content, 'utf-8').digest('hex');\n } else {\n return { success: false, error: '请提供 content 或 file_path 参数', output: '' };\n }\n\n return {\n success: true,\n output: `${algorithm.toUpperCase()}: ${hash}`,\n metadata: { algorithm, hash },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const jwt_decode: Tool = {\n name: 'jwt_decode',\n description: '解码 JWT Token(不验证签名)',\n category: 'security',\n parameters: {\n type: 'object',\n properties: {\n token: { type: 'string', description: 'JWT Token 字符串' },\n },\n required: ['token'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const token = params.token as string;\n const parts = token.split('.');\n\n if (parts.length !== 3) {\n return { success: false, error: '无效的 JWT 格式(需要3部分)', output: '' };\n }\n\n const decodeBase64 = (str: string): string => {\n const base64 = str.replace(/-/g, '+').replace(/_/g, '/');\n return Buffer.from(base64, 'base64').toString('utf-8');\n };\n\n const header = JSON.parse(decodeBase64(parts[0]));\n const payload = JSON.parse(decodeBase64(parts[1]));\n\n const output = [\n '=== JWT Token 解码 ===',\n '',\n '--- Header ---',\n JSON.stringify(header, null, 2),\n '',\n '--- Payload ---',\n JSON.stringify(payload, null, 2),\n '',\n payload.exp ? `过期时间: ${new Date(payload.exp * 1000).toISOString()}${Date.now() > payload.exp * 1000 ? ' (已过期)' : ''}` : '',\n payload.iat ? `签发时间: ${new Date(payload.iat * 1000).toISOString()}` : '',\n '',\n '注意: 签名未验证,仅解码。',\n ].filter(Boolean).join('\\n');\n\n return { success: true, output, metadata: { ...header, sub: payload.sub } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const vulnerability_check: Tool = {\n name: 'vulnerability_check',\n description: '检查项目依赖漏洞 (npm audit)',\n category: 'security',\n parameters: {\n type: 'object',\n properties: {\n project_path: { type: 'string', description: '项目路径' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const projectPath = params.project_path as string | undefined;\n const cwd = projectPath ?? process.cwd();\n\n try {\n const output = execSync('npm audit --json', {\n cwd,\n encoding: 'utf-8',\n timeout: 120000,\n stdio: 'pipe',\n });\n const audit = JSON.parse(output);\n const vulns = audit.vulnerabilities || {};\n\n const summary = [\n `漏洞扫描结果:`,\n `发现 ${Object.keys(vulns).length} 个漏洞`,\n '',\n '操作建议:',\n ' npm audit fix # 自动修复(不破坏性更改)',\n ' npm audit fix --force # 强制修复(可能包含破坏性更改)',\n ' npm audit # 查看详细报告',\n ].join('\\n');\n\n return {\n success: true,\n output: summary,\n metadata: { vulnerabilityCount: Object.keys(vulns).length },\n };\n } catch (err: unknown) {\n const e = err as { stdout?: string };\n if (e.stdout) {\n try {\n const audit = JSON.parse(e.stdout);\n const vulns = audit.vulnerabilities || {};\n return {\n success: false,\n error: `发现 ${Object.keys(vulns).length} 个漏洞`,\n output: `运行 'npm audit' 查看详情,或 'npm audit fix' 自动修复。`,\n metadata: { vulnerabilityCount: Object.keys(vulns).length },\n };\n } catch { /* fall through */ }\n }\n return {\n success: false,\n error: 'npm audit 执行失败',\n output: String(err),\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const npm_manage: Tool = {\n name: 'npm_manage',\n description: '管理 npm 包(安装、更新、删除、查看)',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: install, update, remove, list, audit, init', enum: ['install', 'update', 'remove', 'list', 'audit', 'init'] },\n package: { type: 'string', description: '包名(install/remove/update 时使用)' },\n cwd: { type: 'string', description: '工作目录' },\n dev: { type: 'boolean', description: '是否安装为 devDependencies' },\n global: { type: 'boolean', description: '是否全局安装' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const action = params.action as string;\n const pkg = params.package as string | undefined;\n const cwd = (params.cwd as string) ?? process.cwd();\n const dev = (params.dev as boolean) ?? false;\n const global = (params.global as boolean) ?? false;\n\n const registry = 'https://registry.npmmirror.com';\n let cmd = '';\n\n switch (action) {\n case 'install':\n cmd = `npm install ${pkg || ''} ${dev ? '-D' : ''} ${global ? '-g' : ''} --registry ${registry}`;\n break;\n case 'update':\n cmd = `npm update ${pkg || ''} --registry ${registry}`;\n break;\n case 'remove':\n cmd = `npm uninstall ${pkg || ''}`;\n break;\n case 'list':\n cmd = `npm list --depth=0 ${pkg || ''}`;\n break;\n case 'audit':\n cmd = 'npm audit';\n break;\n case 'init':\n cmd = 'npm init -y';\n break;\n }\n\n const output = execSync(cmd, {\n cwd,\n encoding: 'utf-8',\n timeout: 120000,\n maxBuffer: 50 * 1024 * 1024,\n stdio: 'pipe',\n });\n\n return { success: true, output: output || `${action} 完成`, metadata: { action, cwd } };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: e.message || String(err),\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { existsSync, mkdirSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const project_init: Tool = {\n name: 'project_init',\n description: '初始化新项目(npm / 框架模板)',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n template: { type: 'string', description: '模板: npm, vite, next, express, react', enum: ['npm', 'vite', 'next', 'express', 'react'] },\n name: { type: 'string', description: '项目名称' },\n cwd: { type: 'string', description: '创建目录' },\n },\n required: ['template', 'name'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const template = params.template as string;\n const name = params.name as string;\n const cwd = (params.cwd as string) ?? process.cwd();\n const registry = 'https://registry.npmmirror.com';\n\n const commands: Record<string, string> = {\n npm: `npm init -y --registry ${registry}`,\n vite: `npm create vite@latest ${name} -- --template react-ts`,\n next: `npx create-next-app@latest ${name} --ts --app --no-tailwind --src-dir`,\n express: `npx express-generator ${name}`,\n react: `npx create-react-app ${name}`,\n };\n\n const cmd = commands[template] || commands.npm;\n const output = execSync(cmd, {\n cwd,\n encoding: 'utf-8',\n timeout: 120000,\n maxBuffer: 50 * 1024 * 1024,\n stdio: 'pipe',\n });\n\n return {\n success: true,\n output: `项目已创建: ${name} (${template})\\n${output.slice(0, 5000)}`,\n metadata: { template, name, cwd },\n };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: e.message || String(err),\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const build_project: Tool = {\n name: 'build_project',\n description: '构建项目',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n cwd: { type: 'string', description: '项目目录' },\n target: { type: 'string', description: '构建目标: dev, prod, dist', enum: ['dev', 'prod', 'dist'] },\n tool: { type: 'string', description: '构建工具: auto, tsup, vite, webpack', enum: ['auto', 'tsup', 'vite', 'webpack'] },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const cwd = (params.cwd as string) ?? process.cwd();\n const target = (params.target as string) ?? 'prod';\n const tool = (params.tool as string) ?? 'auto';\n\n let cmd = '';\n const pkgPath = resolve(cwd, 'package.json');\n\n if (tool === 'auto' && existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n const scripts = pkg.scripts || {};\n if (scripts.build) cmd = `npm run build`;\n else if (scripts.compile) cmd = `npm run compile`;\n else if (scripts.bundle) cmd = `npm run bundle`;\n else cmd = `npx tsup src/index.ts --format esm`;\n } else {\n switch (tool) {\n case 'tsup': cmd = 'npx tsup src/index.ts --format esm'; break;\n case 'vite': cmd = 'npx vite build'; break;\n case 'webpack': cmd = 'npx webpack --mode production'; break;\n default: cmd = 'npm run build';\n }\n }\n\n const output = execSync(cmd, {\n cwd,\n encoding: 'utf-8',\n timeout: 180000,\n maxBuffer: 50 * 1024 * 1024,\n stdio: 'pipe',\n });\n\n return {\n success: true,\n output: `构建完成\\n${output.slice(0, 10000)}`,\n metadata: { cwd, tool, command: cmd },\n };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: '构建失败: ' + (e.message || String(err)),\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const run_test: Tool = {\n name: 'run_test',\n description: '运行项目测试',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n cwd: { type: 'string', description: '项目目录' },\n test_file: { type: 'string', description: '指定测试文件' },\n runner: { type: 'string', description: '测试运行器: auto, vitest, jest, mocha', enum: ['auto', 'vitest', 'jest', 'mocha'] },\n coverage: { type: 'boolean', description: '是否生成覆盖报告' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const cwd = (params.cwd as string) ?? process.cwd();\n const testFile = params.test_file as string | undefined;\n const runner = (params.runner as string) ?? 'auto';\n const coverage = (params.coverage as boolean) ?? false;\n\n let cmd = '';\n if (runner === 'auto') {\n const pkgPath = resolve(cwd, 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n const scripts = pkg.scripts || {};\n if (scripts.test) cmd = `npm run test`;\n else if (scripts['test:watch']) cmd = `npm run test:watch`;\n else cmd = 'npx vitest run';\n } else {\n cmd = 'npx vitest run';\n }\n } else {\n switch (runner) {\n case 'vitest': cmd = 'npx vitest run'; break;\n case 'jest': cmd = 'npx jest'; break;\n case 'mocha': cmd = 'npx mocha'; break;\n }\n }\n\n if (testFile) cmd += ` \"${testFile}\"`;\n if (coverage) cmd += ' --coverage';\n\n const output = execSync(cmd, {\n cwd,\n encoding: 'utf-8',\n timeout: 180000,\n maxBuffer: 50 * 1024 * 1024,\n stdio: 'pipe',\n });\n\n return {\n success: true,\n output: `测试完成\\n${output.slice(0, 10000)}`,\n metadata: { cwd, coverage },\n };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: '测试失败',\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const coverage_report: Tool = {\n name: 'coverage_report',\n description: '生成代码覆盖报告',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n cwd: { type: 'string', description: '项目目录' },\n runner: { type: 'string', description: '测试运行器', enum: ['vitest', 'jest', 'nyc'] },\n format: { type: 'string', description: '报告格式: text, html, json, lcov', enum: ['text', 'html', 'json', 'lcov'] },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const cwd = (params.cwd as string) ?? process.cwd();\n const runner = (params.runner as string) ?? 'vitest';\n const format = (params.format as string) ?? 'text';\n\n let cmd = '';\n switch (runner) {\n case 'vitest': cmd = `npx vitest run --coverage --reporter=${format}`; break;\n case 'jest': cmd = `npx jest --coverage`; break;\n case 'nyc': cmd = `npx nyc --reporter=${format} npm test`; break;\n }\n\n try {\n const output = execSync(cmd, {\n cwd,\n encoding: 'utf-8',\n timeout: 180000,\n maxBuffer: 50 * 1024 * 1024,\n stdio: 'pipe',\n });\n return {\n success: true,\n output: `覆盖报告:\\n${output.slice(0, 10000)}`,\n metadata: { runner, format, cwd },\n };\n } catch (err: unknown) {\n const e = err as { stdout?: string; stderr?: string };\n return {\n success: false,\n error: '覆盖报告生成失败',\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const env_manage: Tool = {\n name: 'env_manage',\n description: '管理环境变量文件',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: read, set, remove, list_envs', enum: ['read', 'set', 'remove', 'list_envs'] },\n file_path: { type: 'string', description: '.env 文件路径' },\n key: { type: 'string', description: '环境变量名' },\n value: { type: 'string', description: '环境变量值' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const action = params.action as string;\n const filePath = (params.file_path as string) ?? '.env';\n const key = params.key as string | undefined;\n const value = params.value as string | undefined;\n\n const abs = resolve(filePath);\n\n if (action === 'list_envs') {\n const cwd = process.cwd();\n const envs = ['.env', '.env.local', '.env.development', '.env.production', '.env.test'];\n const found = envs.filter(f => existsSync(resolve(cwd, f)));\n return {\n success: true,\n output: found.join('\\n') || '未找到 .env 文件',\n metadata: { files: found },\n };\n }\n\n if (!existsSync(abs)) {\n if (action === 'set' && key && value !== undefined) {\n writeFileSync(abs, `${key}=${value}`, 'utf-8');\n return { success: true, output: `已创建 ${filePath} 并设置 ${key}=${value}` };\n }\n return { success: false, error: `文件不存在: ${abs}`, output: '' };\n }\n\n const content = readFileSync(abs, 'utf-8');\n const lines = content.split('\\n');\n\n if (action === 'read') {\n if (key) {\n const found = lines.find(l => l.startsWith(`${key}=`));\n return {\n success: true,\n output: found ? found.slice(key.length + 1) : `未找到 ${key}`,\n };\n }\n return { success: true, output: content };\n }\n\n if (action === 'set' && key && value !== undefined) {\n let found = false;\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith(`${key}=`) || lines[i].startsWith(`# ${key}=`)) {\n lines[i] = `${key}=${value}`;\n found = true;\n break;\n }\n }\n if (!found) lines.push(`${key}=${value}`);\n writeFileSync(abs, lines.join('\\n'), 'utf-8');\n return { success: true, output: `已设置 ${key}=${value}` };\n }\n\n if (action === 'remove' && key) {\n const filtered = lines.filter(l => !l.startsWith(`${key}=`));\n writeFileSync(abs, filtered.join('\\n'), 'utf-8');\n return { success: true, output: `已移除 ${key}` };\n }\n\n return { success: false, error: `不支持的操作: ${action}`, output: '' };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const config_manage: Tool = {\n name: 'config_manage',\n description: '管理项目配置文件',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: read, set, list, init', enum: ['read', 'set', 'list', 'init'] },\n file_path: { type: 'string', description: '配置文件路径 (.json, .yaml, .env, .toml)' },\n key: { type: 'string', description: '配置键名' },\n value: { type: 'string', description: '配置值' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const action = params.action as string;\n const filePath = params.file_path as string | undefined;\n const key = params.key as string | undefined;\n const value = params.value as string | undefined;\n\n if (action === 'list') {\n const configs = [\n '.env', '.env.local', '.env.development', '.env.production',\n 'package.json', 'tsconfig.json', '.eslintrc.json', '.prettierrc',\n ];\n const cwd = process.cwd();\n const found = configs.filter(f => existsSync(resolve(cwd, f)));\n return {\n success: true,\n output: `项目配置文件:\\n${found.map(f => ` ${f}`).join('\\n') || ' (未找到)'}`,\n metadata: { files: found },\n };\n }\n\n if (action === 'init') {\n const defaultEnv = `# DeeperCode 配置文件\\nNODE_ENV=development\\n`;\n writeFileSync(resolve(process.cwd(), '.env'), defaultEnv, 'utf-8');\n return { success: true, output: '已创建 .env 配置文件' };\n }\n\n if (!filePath) {\n return { success: false, error: '缺少 file_path 参数', output: '' };\n }\n\n const abs = resolve(filePath);\n if (!existsSync(abs)) {\n return { success: false, error: `配置文件不存在: ${abs}`, output: '' };\n }\n\n if (action === 'read') {\n const content = readFileSync(abs, 'utf-8');\n if (filePath.endsWith('.json')) {\n const parsed = JSON.parse(content);\n if (key) {\n return {\n success: true,\n output: `${key}: ${JSON.stringify((parsed as Record<string, unknown>)[key])}`,\n };\n }\n return { success: true, output: JSON.stringify(parsed, null, 2) };\n }\n return { success: true, output: content.slice(0, 10000) };\n }\n\n if (action === 'set' && key && value !== undefined) {\n if (filePath.endsWith('.json')) {\n const parsed = JSON.parse(readFileSync(abs, 'utf-8'));\n try { parsed[key] = JSON.parse(value); } catch { parsed[key] = value; }\n writeFileSync(abs, JSON.stringify(parsed, null, 2), 'utf-8');\n } else {\n const content = readFileSync(abs, 'utf-8');\n const lines = content.split('\\n');\n let found = false;\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith(`${key}=`)) {\n lines[i] = `${key}=${value}`;\n found = true;\n break;\n }\n }\n if (!found) lines.push(`${key}=${value}`);\n writeFileSync(abs, lines.join('\\n'), 'utf-8');\n }\n return { success: true, output: `已设置: ${key} = ${value}` };\n }\n\n return { success: false, error: `不支持的操作组合: ${action}`, output: '' };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const docker_manage: Tool = {\n name: 'docker_manage',\n description: 'Docker 容器管理',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: build, run, stop, ps, logs, compose_up, compose_down, pull', enum: ['build', 'run', 'stop', 'ps', 'logs', 'compose_up', 'compose_down', 'pull'] },\n image: { type: 'string', description: '镜像名' },\n container: { type: 'string', description: '容器名' },\n cwd: { type: 'string', description: '工作目录' },\n ports: { type: 'string', description: '端口映射' },\n options: { type: 'string', description: '附加选项' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const action = params.action as string;\n const image = params.image as string | undefined;\n const container = params.container as string | undefined;\n const cwd = (params.cwd as string) ?? process.cwd();\n const ports = params.ports as string | undefined;\n const options = params.options as string ?? '';\n\n let cmd = '';\n\n switch (action) {\n case 'build': {\n const dockerfile = resolve(cwd, 'Dockerfile');\n if (!existsSync(dockerfile)) {\n return { success: false, error: `Dockerfile 不存在: ${dockerfile}`, output: '' };\n }\n cmd = `docker build ${options} -t ${image || 'app'} .`;\n break;\n }\n case 'run':\n cmd = `docker run ${ports ? `-p ${ports}` : ''} ${options} ${image || 'app'}`;\n break;\n case 'stop':\n cmd = `docker stop ${container || ''}`;\n break;\n case 'ps':\n cmd = 'docker ps -a';\n break;\n case 'logs':\n cmd = `docker logs ${container || ''}`;\n break;\n case 'compose_up':\n cmd = 'docker-compose up -d';\n break;\n case 'compose_down':\n cmd = 'docker-compose down';\n break;\n case 'pull':\n cmd = `docker pull ${image || ''}`;\n break;\n default:\n return { success: false, error: `不支持的操作: ${action}`, output: '' };\n }\n\n try {\n const output = execSync(cmd, {\n cwd,\n encoding: 'utf-8',\n timeout: 120000,\n maxBuffer: 10 * 1024 * 1024,\n stdio: 'pipe',\n });\n return { success: true, output: output || `${action} 完成`, metadata: { action } };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: `Docker 操作失败: ${e.message || String(err)}`,\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const context_summarize: Tool = {\n name: 'context_summarize',\n description: '对长文本进行摘要',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n text: { type: 'string', description: '要摘要的文本' },\n file_path: { type: 'string', description: '文件路径' },\n max_length: { type: 'number', description: '摘要最大长度(字符)' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const text = params.text as string | undefined;\n const filePath = params.file_path as string | undefined;\n const maxLength = (params.max_length as number) ?? 500;\n\n let content = '';\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n content = readFileSync(abs, 'utf-8');\n } else if (text) {\n content = text;\n } else {\n return { success: false, error: '请提供 text 或 file_path 参数', output: '' };\n }\n\n const lines = content.split('\\n');\n const words = content.split(/\\s+/).filter(w => w.length > 0);\n const summary = extractSummary(content, maxLength);\n\n const output = [\n `=== 上下文摘要 ===`,\n `原文: ${lines.length} 行, ${words.length} 词, ${content.length} 字符`,\n '',\n summary,\n ].join('\\n');\n\n return {\n success: true,\n output,\n metadata: { originalLength: content.length, summaryLength: summary.length, lines: lines.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction extractSummary(text: string, maxLen: number): string {\n const sentences = text.match(/[^.!?\\n]+[.!?\\n]*/g) || [text];\n const important = sentences\n .filter(s => s.trim().length > 10)\n .slice(0, 10);\n\n if (important.join(' ').length <= maxLen) {\n return important.join(' ').trim();\n }\n\n let result = important[0];\n for (let i = 1; i < important.length; i++) {\n if (result.length + important[i].length > maxLen) break;\n result += ' ' + important[i];\n }\n\n return result.trim() + (result.length < text.length ? '...' : '');\n}\n","import type { Tool } from '../../tool-types.js';\n\nconst templates: Record<string, { template: string; description: string }> = {\n 'code-review': {\n description: '代码审查提示',\n template: '请审查以下代码的质量、安全性和可读性,并提供改进建议:\\n\\n语言: {{language}}\\n文件: {{file_path}}\\n```\\n{{code}}\\n```\\n\\n请关注: 代码风格、潜在 bug、安全问题、性能优化。',\n },\n 'commit-message': {\n description: '生成 Commit 消息',\n template: '基于以下更改生成一个规范的 commit 消息(Conventional Commits 格式):\\n\\n变更摘要: {{summary}}\\n文件变更: {{files}}\\n\\n类型选择: feat, fix, docs, style, refactor, perf, test, chore, ci',\n },\n 'generate-tests': {\n description: '生成测试用例',\n template: '为以下代码生成完整的测试用例:\\n\\n语言: {{language}}\\n框架: {{framework}}\\n\\n```\\n{{code}}\\n```\\n\\n请覆盖: 正常情况、边界情况、错误情况。',\n },\n 'explain-code': {\n description: '解释代码',\n template: '请详细解释以下代码的功能和实现原理:\\n\\n语言: {{language}}\\n用途: {{purpose}}\\n\\n```\\n{{code}}\\n```\\n\\n请说明: 整体逻辑、关键变量、函数作用、潜在问题。',\n },\n};\n\nexport const prompt_template: Tool = {\n name: 'prompt_template',\n description: '管理 AI Prompt 模板',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n template: { type: 'string', description: '模板名称', enum: [...Object.keys(templates), 'list'] },\n params: { type: 'object', description: '模板参数' },\n },\n required: ['template'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const templateName = params.template as string;\n const templateParams = params.params as Record<string, string> | undefined;\n\n if (templateName === 'list') {\n const list = Object.entries(templates).map(([name, t]) => ` ${name}: ${t.description}`);\n return {\n success: true,\n output: `可用模板 (${Object.keys(templates).length}):\\n${list.join('\\n')}`,\n metadata: { templates: Object.keys(templates) },\n };\n }\n\n const tmpl = templates[templateName];\n if (!tmpl) {\n return { success: false, error: `未知模板: ${templateName}`, output: '' };\n }\n\n let rendered = tmpl.template;\n if (templateParams) {\n for (const [key, value] of Object.entries(templateParams)) {\n rendered = rendered.replace(new RegExp(`\\\\{\\\\{\\\\s*${key}\\\\s*\\\\}\\\\}`, 'g'), value);\n }\n }\n\n return {\n success: true,\n output: rendered,\n metadata: { template: templateName, rendered: !!templateParams },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { mkdirSync, existsSync } from 'node:fs';\nimport { writeFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { DEEPER_SKILLS_DIR } from '../../../core/constants.js';\nimport type { Tool } from '../../../tools/tool-types.js';\n\nexport const skill_create: Tool = {\n name: 'skill_create',\n description: '创建新 Skill(写入 ~/.deeper/skills/<name>/skill.md)。Skill 会在后续对话中被自动加载和识别。',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Skill 名称(英文+连字符,如 \"react-expert\")' },\n description: { type: 'string', description: 'Skill 用途描述' },\n prompt: { type: 'string', description: 'Skill 的 Markdown 指令内容(包含操作步骤、最佳实践等)' },\n triggers: { type: 'array', items: { type: 'string' }, description: '触发词(如 [\"react\", \"component\"])' },\n },\n required: ['name', 'prompt'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const name = params.name as string;\n const description = (params.description as string) || `${name} 技能`;\n const prompt = params.prompt as string;\n const triggers = (params.triggers as string[]) || [];\n\n const skillDir = join(DEEPER_SKILLS_DIR, name);\n if (!existsSync(skillDir)) mkdirSync(skillDir, { recursive: true });\n\n const yaml = [\n `name: ${name}`,\n `description: ${description}`,\n `version: 1.0.0`,\n `author: DeeperCode AI`,\n triggers.length > 0 ? `triggers:\\n${triggers.map(t => ` - ${t}`).join('\\n')}` : '',\n ].filter(Boolean).join('\\n');\n\n const md = `---\\n${yaml}\\n---\\n\\n${prompt}`;\n await writeFile(join(skillDir, 'skill.md'), md, 'utf-8');\n\n return {\n success: true,\n output: `Skill \"${name}\" 已创建\\n 路径: ${skillDir}/skill.md\\n 提示: 新对话开始时生效`,\n metadata: { name, description, triggerCount: triggers.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const tool_create: Tool = {\n name: 'tool_create',\n description: 'AI 动态创建新工具(通过注册中心)',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: '工具名称' },\n description: { type: 'string', description: '工具描述' },\n command: { type: 'string', description: '工具执行的命令' },\n category: { type: 'string', description: '工具分类', enum: ['filesystem', 'search', 'shell', 'network', 'code', 'database', 'data', 'security', 'project', 'ai', 'system'] },\n parameters: { type: 'object', description: '参数 JSON Schema' },\n },\n required: ['name', 'command'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const name = params.name as string;\n const description = (params.description as string) ?? `动态工具: ${name}`;\n const command = params.command as string;\n const category = (params.category as string) ?? 'ai';\n const parameters = params.parameters as Record<string, unknown> | undefined;\n\n return {\n success: true,\n output: [\n `动态工具创建请求: ${name}`,\n `分类: ${category}`,\n `命令: ${command}`,\n '',\n '工具可以通过 run_command 或 DynamicTool.createFromCommand 注册。',\n '使用示例:',\n '```js',\n `const dynamicTool = dynamicToolRegistry.createFromCommand(`,\n ` '${name}',`,\n ` '${description}',`,\n ` '${command}',`,\n ` '${category}'`,\n ');',\n '```',\n ].join('\\n'),\n metadata: { name, category, command },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { resolve, dirname, join } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nconst MEMORY_DIR = join(process.env.HOME || process.env.USERPROFILE || process.cwd(), '.deepercode', 'memories');\n\nexport const memory_store: Tool = {\n name: 'memory_store',\n description: '持久化记忆存储',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: set, get, list, delete, search', enum: ['set', 'get', 'list', 'delete', 'search'] },\n key: { type: 'string', description: '记忆键名' },\n value: { type: 'string', description: '记忆值' },\n query: { type: 'string', description: '搜索关键词' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const action = params.action as string;\n const key = params.key as string | undefined;\n const value = params.value as string | undefined;\n const query = params.query as string | undefined;\n\n if (!existsSync(MEMORY_DIR)) {\n mkdirSync(MEMORY_DIR, { recursive: true });\n }\n\n switch (action) {\n case 'set': {\n if (!key || value === undefined) return { success: false, error: 'set 需要 key 和 value 参数', output: '' };\n const memPath = join(MEMORY_DIR, `${key}.json`);\n writeFileSync(memPath, JSON.stringify({ key, value, timestamp: Date.now() }), 'utf-8');\n return { success: true, output: `记忆已保存: ${key}` };\n }\n case 'get': {\n if (!key) return { success: false, error: 'get 需要 key 参数', output: '' };\n const memPath = join(MEMORY_DIR, `${key}.json`);\n if (!existsSync(memPath)) return { success: false, error: `记忆不存在: ${key}`, output: '' };\n const data = JSON.parse(readFileSync(memPath, 'utf-8'));\n return { success: true, output: data.value };\n }\n case 'delete': {\n if (!key) return { success: false, error: 'delete 需要 key 参数', output: '' };\n const memPath = join(MEMORY_DIR, `${key}.json`);\n if (!existsSync(memPath)) return { success: false, error: `记忆不存在: ${key}`, output: '' };\n const { unlinkSync } = await import('node:fs');\n unlinkSync(memPath);\n return { success: true, output: `记忆已删除: ${key}` };\n }\n case 'list': {\n const { readdirSync } = await import('node:fs');\n const files = readdirSync(MEMORY_DIR).filter(f => f.endsWith('.json'));\n const keys = files.map(f => f.replace('.json', ''));\n return {\n success: true,\n output: keys.join('\\n') || '(暂无记忆)',\n metadata: { count: keys.length },\n };\n }\n case 'search': {\n if (!query) return { success: false, error: 'search 需要 query 参数', output: '' };\n const { readdirSync } = await import('node:fs');\n const files = readdirSync(MEMORY_DIR).filter(f => f.endsWith('.json'));\n const matches: string[] = [];\n for (const f of files) {\n const data = JSON.parse(readFileSync(join(MEMORY_DIR, f), 'utf-8'));\n if (data.value.includes(query) || data.key.includes(query)) {\n matches.push(`${data.key}: ${data.value.slice(0, 200)}`);\n }\n }\n return { success: true, output: matches.join('\\n') || '未找到匹配记忆', metadata: { count: matches.length } };\n }\n default:\n return { success: false, error: `不支持的操作: ${action}`, output: '' };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nlet subagentRunner: ((task: string, mode: 'foreground' | 'background') => Promise<string>) | null = null;\n\nexport function setSubagentRunner(fn: (task: string, mode: 'foreground' | 'background') => Promise<string>): void {\n subagentRunner = fn;\n}\n\nexport const subagent: Tool = {\n name: 'subagent',\n description: '启动子代理处理任务。默认前台模式等待完成返回结果,mode=background 后台执行不阻塞。用于: 代码分析、文件搜索、并行构建、测试运行等。',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n task: { type: 'string', description: '分配给子代理的任务描述' },\n mode: { type: 'string', description: 'foreground(等待完成) 或 background(后台执行)', enum: ['foreground', 'background'] },\n },\n required: ['task'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n const task = params.task as string;\n const mode = (params.mode as string) === 'background' ? 'background' : 'foreground';\n if (!task || task.trim().length < 2) {\n return { success: false, error: '请提供有效的任务描述', output: '' };\n }\n if (subagentRunner) {\n try {\n const result = await subagentRunner(task, mode);\n return { success: true, output: result, metadata: { mode } };\n } catch (e: unknown) {\n return { success: false, error: (e as Error).message, output: '' };\n }\n }\n return { success: false, error: '子代理引擎未初始化', output: '' };\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const process_list: Tool = {\n name: 'process_list',\n description: '列出当前运行的进程',\n category: 'system',\n parameters: {\n type: 'object',\n properties: {\n filter: { type: 'string', description: '进程名过滤' },\n count: { type: 'number', description: '显示数量' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filter = params.filter as string | undefined;\n const count = (params.count as number) ?? 20;\n const platform = process.platform;\n\n let cmd: string;\n if (platform === 'win32') {\n cmd = 'tasklist /FO CSV /NH';\n } else {\n cmd = 'ps aux --sort=-%mem';\n }\n\n try {\n let output = execSync(cmd, { encoding: 'utf-8', timeout: 10000, stdio: 'pipe' });\n const lines = output.split('\\n');\n\n if (filter) {\n const filtered = lines.filter(l => l.toLowerCase().includes(filter.toLowerCase()));\n output = filtered.slice(0, count).join('\\n');\n } else {\n output = lines.slice(0, count).join('\\n');\n }\n\n return {\n success: true,\n output: `进程列表 (${platform}):\\n${output}`,\n metadata: { platform, filter, lines: Math.min(lines.length, count) },\n };\n } catch {\n const os = await import('node:os');\n return {\n success: true,\n output: [\n `当前进程信息:`,\n `PID: ${process.pid}`,\n `平台: ${os.platform()}`,\n `架构: ${os.arch()}`,\n `Node.js: ${process.version}`,\n `CPU 数: ${os.cpus().length}`,\n ].join('\\n'),\n metadata: { pid: process.pid },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const system_info: Tool = {\n name: 'system_info',\n description: '获取系统信息',\n category: 'system',\n parameters: {\n type: 'object',\n properties: {},\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute() {\n try {\n const os = await import('node:os');\n\n const info = {\n platform: os.platform(),\n arch: os.arch(),\n hostname: os.hostname(),\n cpus: os.cpus().length,\n totalMemory: `${(os.totalmem() / 1024 / 1024 / 1024).toFixed(1)} GB`,\n freeMemory: `${(os.freemem() / 1024 / 1024 / 1024).toFixed(1)} GB`,\n uptime: `${Math.floor(os.uptime() / 3600)}h ${Math.floor((os.uptime() % 3600) / 60)}m`,\n nodeVersion: process.version,\n homeDir: os.homedir(),\n tmpDir: os.tmpdir(),\n cwd: process.cwd(),\n };\n\n const output = Object.entries(info)\n .map(([k, v]) => `${k}: ${v}`)\n .join('\\n');\n\n return { success: true, output, metadata: info };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const resource_monitor: Tool = {\n name: 'resource_monitor',\n description: '监控系统资源使用情况',\n category: 'system',\n parameters: {\n type: 'object',\n properties: {\n interval_ms: { type: 'number', description: '采样间隔毫秒' },\n samples: { type: 'number', description: '采样次数' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const intervalMs = (params.interval_ms as number) ?? 1000;\n const samples = (params.samples as number) ?? 3;\n\n const os = await import('node:os');\n const results: Record<string, unknown>[] = [];\n\n for (let i = 0; i < samples; i++) {\n const cpus = os.cpus();\n const totalIdle = cpus.reduce((s, c) => s + c.times.idle, 0);\n const totalTick = cpus.reduce((s, c) => s + c.times.user + c.times.nice + c.times.sys + c.times.idle + c.times.irq, 0);\n const cpuUsage = totalTick > 0 ? ((1 - totalIdle / totalTick) * 100).toFixed(1) : '0';\n\n results.push({\n sample: i + 1,\n cpu: `${cpuUsage}%`,\n memory: {\n total: `${(os.totalmem() / 1024 / 1024 / 1024).toFixed(1)} GB`,\n free: `${(os.freemem() / 1024 / 1024 / 1024).toFixed(1)} GB`,\n used: `${((os.totalmem() - os.freemem()) / os.totalmem() * 100).toFixed(1)}%`,\n },\n uptime: `${Math.floor(os.uptime() / 3600)}h ${Math.floor((os.uptime() % 3600) / 60)}m`,\n loadAverage: os.loadavg().map(l => l.toFixed(2)),\n });\n\n if (i < samples - 1) {\n await new Promise(r => setTimeout(r, intervalMs));\n }\n }\n\n const latest = results[results.length - 1];\n const output = [\n `资源监控 (${samples} 采样,间隔 ${intervalMs}ms):`,\n `CPU 使用率: ${(latest as Record<string, unknown>).cpu}`,\n `内存: ${JSON.stringify((latest as Record<string, unknown>).memory)}`,\n `运行时间: ${(latest as Record<string, unknown>).uptime}`,\n `平均负载: ${JSON.stringify((latest as Record<string, unknown>).loadAverage)}`,\n ].join('\\n');\n\n return {\n success: true,\n output,\n metadata: { samples, intervalMs, latest },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const notify_user: Tool = {\n name: 'notify_user',\n description: '发送系统通知给用户',\n category: 'system',\n parameters: {\n type: 'object',\n properties: {\n title: { type: 'string', description: '通知标题' },\n message: { type: 'string', description: '通知详情' },\n level: { type: 'string', description: '通知级别: info, warn, error, success', enum: ['info', 'warn', 'error', 'success'] },\n },\n required: ['message'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const title = (params.title as string) ?? 'DeeperCode';\n const message = params.message as string;\n const level = (params.level as string) ?? 'info';\n\n const icons: Record<string, string> = {\n info: 'ℹ',\n warn: '⚠',\n error: '✗',\n success: '✓',\n };\n\n const output = `${icons[level] || ''} [${level.toUpperCase()}] ${title}: ${message}`;\n\n try {\n if (process.platform === 'win32') {\n const { execSync } = await import('node:child_process');\n execSync(`powershell -Command \"Add-Type -AssemblyName System.Windows.Forms; $notify = New-Object System.Windows.Forms.NotifyIcon; $notify.Icon = [System.Drawing.SystemIcons]::Information; $notify.Visible = $true; $notify.ShowBalloonTip(5000, '${title}', '${message}', [System.Windows.Forms.ToolTipIcon]::${level === 'error' ? 'Error' : 'Info'}); Start-Sleep -Seconds 6; $notify.Dispose()\"`, {\n timeout: 10000,\n stdio: 'ignore',\n });\n } else if (process.platform === 'darwin') {\n const { execSync } = await import('node:child_process');\n execSync(`osascript -e 'display notification \"${message}\" with title \"${title}\"'`, { stdio: 'ignore' });\n } else {\n const { execSync } = await import('node:child_process');\n execSync(`notify-send \"${title}\" \"${message}\"`, { stdio: 'ignore' });\n }\n return { success: true, output, metadata: { title, level, notified: true } };\n } catch {\n return { success: true, output, metadata: { title, level, notified: false } };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const log_viewer: Tool = {\n name: 'log_viewer',\n description: '查看和管理日志文件',\n category: 'system',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: read, tail, search, clear', enum: ['read', 'tail', 'search', 'clear'] },\n file_path: { type: 'string', description: '日志文件路径' },\n lines: { type: 'number', description: '读取行数(tail 模式)' },\n query: { type: 'string', description: '搜索关键词' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const action = params.action as string;\n const filePath = params.file_path as string | undefined;\n const lineCount = (params.lines as number) ?? 50;\n const query = params.query as string | undefined;\n\n if (action !== 'clear' && !filePath) {\n const defaultLogs = ['npm-debug.log', 'yarn-error.log', '.log', 'logs/'];\n const cwd = process.cwd();\n const found = defaultLogs.filter(f => existsSync(resolve(cwd, f)));\n return {\n success: true,\n output: `请指定 file_path。项目目录中的日志文件:\\n${found.length > 0 ? found.join('\\n') : ' (未找到)'}`,\n };\n }\n\n const abs = resolve(filePath!);\n\n if (action === 'clear') {\n const { writeFileSync } = await import('node:fs');\n writeFileSync(abs, '', 'utf-8');\n return { success: true, output: `日志已清空: ${abs}` };\n }\n\n if (!existsSync(abs)) {\n return { success: false, error: `日志文件不存在: ${abs}`, output: '' };\n }\n\n const content = readFileSync(abs, 'utf-8');\n const allLines = content.split('\\n');\n\n switch (action) {\n case 'read': {\n const sub = allLines.slice(0, lineCount).join('\\n');\n return {\n success: true,\n output: sub,\n metadata: { lines: allLines.length, shown: Math.min(lineCount, allLines.length) },\n };\n }\n case 'tail': {\n const sub = allLines.slice(-lineCount).join('\\n');\n return {\n success: true,\n output: `最后 ${Math.min(lineCount, allLines.length)} 行:\\n${sub}`,\n metadata: { totalLines: allLines.length },\n };\n }\n case 'search': {\n if (!query) return { success: false, error: 'search 需要 query 参数', output: '' };\n const matches = allLines\n .map((line, i) => line.includes(query) ? `${i + 1}:${line.trim()}` : null)\n .filter(Boolean)\n .slice(0, 200);\n return {\n success: true,\n output: matches.join('\\n') || '未找到匹配行',\n metadata: { matches: matches.length, totalLines: allLines.length },\n };\n }\n default:\n return { success: false, error: `不支持的操作: ${action}`, output: '' };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../tool-types.js';\n\nimport { read_file } from './filesystem/read_file.js';\nimport { write_file } from './filesystem/write_file.js';\nimport { edit_file } from './filesystem/edit_file.js';\nimport { delete_file } from './filesystem/delete_file.js';\nimport { list_dir } from './filesystem/list_dir.js';\nimport { glob_find } from './filesystem/glob_find.js';\nimport { move_file } from './filesystem/move_file.js';\nimport { copy_file } from './filesystem/copy_file.js';\nimport { create_dir } from './filesystem/create_dir.js';\nimport { file_info } from './filesystem/file_info.js';\nimport { watch_file } from './filesystem/watch_file.js';\nimport { batch_read } from './filesystem/batch_read.js';\nimport { batch_write } from './filesystem/batch_write.js';\nimport { diff_files } from './filesystem/diff_files.js';\nimport { merge_files } from './filesystem/merge_files.js';\n\nimport { grep_search } from './search/grep_search.js';\nimport { codebase_search } from './search/codebase_search.js';\nimport { symbol_search } from './search/symbol_search.js';\nimport { find_references } from './search/find_references.js';\nimport { find_definition } from './search/find_definition.js';\nimport { text_search } from './search/text_search.js';\nimport { fuzzy_find } from './search/fuzzy_find.js';\nimport { regex_find } from './search/regex_find.js';\nimport { search_package } from './search/search_package.js';\nimport { search_docs } from './search/search_docs.js';\n\nimport { run_command } from './shell/run_command.js';\nimport { run_async } from './shell/run_async.js';\nimport { check_status } from './shell/check_status.js';\nimport { stop_command } from './shell/stop_command.js';\nimport { pipe_commands } from './shell/pipe_commands.js';\nimport { shell_script } from './shell/shell_script.js';\nimport { background_terminal } from './shell/background_terminal.js';\nimport { send_keys } from './shell/send_keys.js';\nimport { send_ctrl_keys } from './shell/send_ctrl_keys.js';\nimport { send_text } from './shell/send_text.js';\nimport { terminal_screenshot } from './shell/terminal_screenshot.js';\nimport { terminal_resize } from './shell/terminal_resize.js';\nimport { list_terminals, read_terminal } from './shell/list_terminals.js';\nimport { kill_terminal } from './shell/kill_terminal.js';\nimport { interactive_terminal } from './shell/interactive_terminal.js';\n\nimport { web_fetch } from './network/web_fetch.js';\nimport { web_search } from './network/web_search.js';\nimport { http_request } from './network/http_request.js';\nimport { download_file } from './network/download_file.js';\nimport { api_call } from './network/api_call.js';\nimport { graphql_query } from './network/graphql_query.js';\nimport { websocket_connect } from './network/websocket_connect.js';\nimport { check_url } from './network/check_url.js';\nimport { screenshot_page } from './network/screenshot_page.js';\nimport { parse_html } from './network/parse_html.js';\nimport { browser_action } from './network/browser_action.js';\nimport { proxy_request } from './network/proxy_request.js';\n\nimport { parse_ast } from './code/parse_ast.js';\nimport { format_code } from './code/format_code.js';\nimport { lint_code } from './code/lint_code.js';\nimport { type_check } from './code/type_check.js';\nimport { generate_code } from './code/generate_code.js';\nimport { refactor_code } from './code/refactor_code.js';\nimport { extract_function } from './code/extract_function.js';\nimport { analyze_deps } from './code/analyze_deps.js';\nimport { import_organizer } from './code/import_organizer.js';\nimport { code_metrics } from './code/code_metrics.js';\nimport { bug_scan } from './code/bug_scan.js';\n\nimport { sql_query } from './database/sql_query.js';\nimport { sql_migrate } from './database/sql_migrate.js';\nimport { nosql_query } from './database/nosql_query.js';\nimport { db_schema } from './database/db_schema.js';\nimport { db_backup } from './database/db_backup.js';\nimport { db_restore } from './database/db_restore.js';\nimport { redis_command } from './database/redis_command.js';\nimport { orm_generate } from './database/orm_generate.js';\n\nimport { json_parse } from './data/json_parse.js';\nimport { csv_parse } from './data/csv_parse.js';\nimport { xml_parse } from './data/xml_parse.js';\nimport { yaml_parse } from './data/yaml_parse.js';\nimport { toml_parse } from './data/toml_parse.js';\nimport { data_transform } from './data/data_transform.js';\nimport { data_validate } from './data/data_validate.js';\nimport { data_diff } from './data/data_diff.js';\nimport { template_render } from './data/template_render.js';\nimport { chart_generate } from './data/chart_generate.js';\n\nimport { secret_scan } from './security/secret_scan.js';\nimport { encrypt_file } from './security/encrypt_file.js';\nimport { decrypt_file } from './security/decrypt_file.js';\nimport { hash_generate } from './security/hash_generate.js';\nimport { jwt_decode } from './security/jwt_decode.js';\nimport { vulnerability_check } from './security/vulnerability_check.js';\n\nimport { npm_manage } from './project/npm_manage.js';\nimport { project_init } from './project/project_init.js';\nimport { build_project } from './project/build_project.js';\nimport { run_test } from './project/run_test.js';\nimport { coverage_report } from './project/coverage_report.js';\nimport { env_manage } from './project/env_manage.js';\nimport { config_manage } from './project/config_manage.js';\nimport { docker_manage } from './project/docker_manage.js';\n\nimport { token_count } from './ai/token_count.js';\nimport { context_summarize } from './ai/context_summarize.js';\nimport { prompt_template } from './ai/prompt_template.js';\nimport { skill_create } from './ai/skill_create.js';\nimport { tool_create } from './ai/tool_create.js';\nimport { memory_store } from './ai/memory_store.js';\nimport { todo_manager } from './ai/todo_manager.js';\nimport { subagent, setSubagentRunner } from './ai/subagent.js';\n\nimport { process_list } from './system/process_list.js';\nimport { system_info } from './system/system_info.js';\nimport { resource_monitor } from './system/resource_monitor.js';\nimport { notify_user } from './system/notify_user.js';\nimport { log_viewer } from './system/log_viewer.js';\n\nexport const builtinTools: Tool[] = [\n read_file,\n write_file,\n edit_file,\n delete_file,\n list_dir,\n glob_find,\n move_file,\n copy_file,\n create_dir,\n file_info,\n watch_file,\n batch_read,\n batch_write,\n diff_files,\n merge_files,\n\n grep_search,\n codebase_search,\n symbol_search,\n find_references,\n find_definition,\n text_search,\n fuzzy_find,\n regex_find,\n search_package,\n search_docs,\n\n run_command,\n run_async,\n check_status,\n stop_command,\n pipe_commands,\n shell_script,\n background_terminal,\n send_keys,\n send_ctrl_keys,\n send_text,\n terminal_screenshot,\n terminal_resize,\n list_terminals,\n read_terminal,\n kill_terminal,\n interactive_terminal,\n\n web_fetch,\n web_search,\n http_request,\n download_file,\n api_call,\n graphql_query,\n websocket_connect,\n check_url,\n screenshot_page,\n parse_html,\n browser_action,\n proxy_request,\n\n parse_ast,\n format_code,\n lint_code,\n type_check,\n generate_code,\n refactor_code,\n extract_function,\n analyze_deps,\n import_organizer,\n code_metrics,\n bug_scan,\n\n sql_query,\n sql_migrate,\n nosql_query,\n db_schema,\n db_backup,\n db_restore,\n redis_command,\n orm_generate,\n\n json_parse,\n csv_parse,\n xml_parse,\n yaml_parse,\n toml_parse,\n data_transform,\n data_validate,\n data_diff,\n template_render,\n chart_generate,\n\n secret_scan,\n encrypt_file,\n decrypt_file,\n hash_generate,\n jwt_decode,\n vulnerability_check,\n\n npm_manage,\n project_init,\n build_project,\n run_test,\n coverage_report,\n env_manage,\n config_manage,\n docker_manage,\n\n token_count,\n context_summarize,\n prompt_template,\n skill_create,\n tool_create,\n memory_store,\n todo_manager,\n subagent,\n\n process_list,\n system_info,\n resource_monitor,\n notify_user,\n log_viewer,\n];\n\nexport { setSubagentRunner };\n","import readline from 'node:readline';\nimport process from 'node:process';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, statSync, copyFileSync, unlinkSync } from 'node:fs';\nimport { join, relative } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport { DEEPER_HOME } from '../core/constants.js';\nimport { TOOL_SAFETY_MAP } from '../tools/tool-types.js';\nimport type { Tool } from '../tools/tool-types.js';\nimport { ToolValidator } from '../tools/ToolValidator.js';\nimport { xmemory, setSessionId } from '../memory/xmemory.js';\nimport { MarkdownStreamRenderer } from '../ui/markdown.js';\nimport { getTodos, todoSummary } from '../tools/builtin/ai/todo_manager.js';\nimport { estimateTokens } from '../tools/builtin/ai/token_count.js';\nimport { SkillEngine } from '../skills/SkillEngine.js';\nimport { MCPClient } from '../mcp/MCPClient.js';\nimport { DeepSeekClient } from '../model/DeepSeekClient.js';\nimport type { ChatMessage, StreamChunk } from '../model/types.js';\nimport { O, Oflush, A, d, b, c, g, y, r, B, G, resetTimer, thinkingAnim, thinkingAnimAt } from '../ui/ansi.js';\n\nexport interface ReplOptions {\n apiKey: string; model: string; baseUrl: string;\n maxTokens: number; temperature: number;\n thinkEnabled: boolean; thinkBudget: number;\n}\n\ntype Role = 'system' | 'user' | 'assistant' | 'tool';\n\ninterface Message {\n role: Role; content: string | null;\n tool_calls?: Array<{ id: string; name: string; arguments: Record<string, unknown> }>;\n tool_call_id?: string; name?: string; reasoning_content?: string;\n}\n\ninterface ToolDef {\n type: 'function';\n function: { name: string; description: string; parameters: Record<string, unknown> };\n}\n\nconst MAX_HISTORY = 60;\nconst CONTEXT_LIMIT = 1_048_576;\nconst CTX_WARN = 786_432;\nconst TOOL_RESULT_MAX = 4000;\nconst SESSION_DIR = join(DEEPER_HOME, 'sessions');\nconst AUTOSAVE_FILE = join(SESSION_DIR, '_autosave.json');\n\nconst TOOL_TIMEOUT_MAP: Record<string, number> = {\n run_command: 120_000, run_async: 120_000, pipe_commands: 120_000,\n shell_script: 120_000, build_project: 180_000, run_test: 180_000,\n npm_manage: 120_000, docker_manage: 120_000, project_init: 120_000,\n web_fetch: 60_000, web_search: 60_000, http_request: 60_000,\n browser_action: 60_000, screenshot_page: 60_000,\n sql_query: 60_000, sql_migrate: 120_000, db_backup: 180_000, db_restore: 180_000,\n secret_scan: 60_000, vulnerability_check: 60_000,\n subagent: 180_000,\n};\nconst DEFAULT_TOOL_TIMEOUT = 30_000;\n\nlet GS = { tc: 0, api: 0, ch: 0 };\nlet skillEngine: SkillEngine | null = null;\nlet mcpClient: MCPClient | null = null;\nconst validator = new ToolValidator();\nlet currentAbortController: AbortController | null = null;\n\nconst BACKUP_DIR = join(DEEPER_HOME, 'backups');\nconst MAX_BACKUPS = 50;\nconst fileBackupStack: Array<{ path: string; backupPath: string; timestamp: number }> = [];\n\nfunction backupFile(filePath: string): void {\n if (!existsSync(filePath)) return;\n try {\n if (!existsSync(BACKUP_DIR)) mkdirSync(BACKUP_DIR, { recursive: true });\n const rel = relative(process.cwd(), filePath).replace(/[/\\\\]/g, '_');\n const ts = Date.now();\n const backupPath = join(BACKUP_DIR, `${ts}_${rel}`);\n copyFileSync(filePath, backupPath);\n fileBackupStack.push({ path: filePath, backupPath, timestamp: ts });\n if (fileBackupStack.length > MAX_BACKUPS) {\n const old = fileBackupStack.shift()!;\n try { unlinkSync(old.backupPath); } catch {}\n }\n } catch {}\n}\n\nfunction getSkillSystemPrompt(): string {\n if (!skillEngine) return '';\n return skillEngine.getSystemPrompt();\n}\n\nexport async function startRepl(opts: ReplOptions): Promise<void> {\n const tools = await loadBuiltinTools();\n const toolDefs = toolsToDefs(tools);\n\n const { setSubagentRunner } = await import('../tools/builtin/index.js');\n setSubagentRunner(async (task: string, mode: 'foreground' | 'background') => {\n const isBg = mode === 'background';\n const run = async () => {\n const lh: Message[] = [\n { role: 'system', content: `DeeperCode 子代理。用工具完成任务,完成输出摘要。cwd=${process.cwd()}` },\n { role: 'user', content: task },\n ];\n const tds = toolsToDefs(tools);\n let ce = 0, stag = 0;\n while (true) {\n const msgs = buildMsgs(lh);\n let fc = '', th = '';\n let tcs: Array<{ id: string; name: string; args: Record<string, unknown> }> = [];\n let curTc: { id: string; name: string; argsStr: string } | null = null;\n let se: string | null = null;\n try {\n const stream = await callApi(opts, msgs, tds, 131072); GS.api++; ce = 0;\n for await (const chunk of stream) {\n if (chunk.type === 'text') { fc += chunk.content || ''; }\n if (chunk.type === 'thinking') th += chunk.content || '';\n if (chunk.type === 'tool_call_start') {\n const tc = (chunk as any).tool_call;\n if (tc) curTc = { id: tc.id, name: tc.name, argsStr: '' };\n }\n if (chunk.type === 'tool_call_end' && curTc) {\n const tcData = (chunk as any).tool_call;\n try {\n const args = tcData?.arguments || JSON.parse(curTc.argsStr || '{}');\n tcs.push({ id: curTc.id, name: curTc.name, args });\n } catch { tcs.push({ id: curTc.id, name: curTc.name, args: {} }); }\n curTc = null;\n }\n if (chunk.type === 'done') break;\n if (chunk.type === 'error') { se = chunk.error || '?'; break; }\n }\n } catch (e: unknown) { se = e instanceof Error ? e.message : String(e); }\n\n if (se) { ce++; stag++; if (ce >= 2) return `子代理失败: ${se}`; await new Promise(r2 => setTimeout(r2, 1000)); continue; }\n\n if (tcs.length > 0) {\n stag = 0;\n lh.push({ role: 'assistant', content: fc || null, reasoning_content: th || undefined, tool_calls: tcs.map(t => ({ id: t.id, name: t.name, arguments: { ...t.args } })) });\n for (const tc of tcs) {\n const tool = tools.find(t => t.name === tc.name);\n if (!tool) { lh.push({ role: 'tool', content: `Error: unknown ${tc.name}`, tool_call_id: tc.id, name: tc.name }); continue; }\n const s2 = TOOL_SAFETY_MAP[tc.name] || 'safe';\n if (s2 === 'dangerous') { lh.push({ role: 'tool', content: 'Skipped', tool_call_id: tc.id, name: tc.name }); continue; }\n try {\n const ac = new AbortController();\n const timeout = TOOL_TIMEOUT_MAP[tc.name] || DEFAULT_TOOL_TIMEOUT;\n const timer = setTimeout(() => ac.abort(), timeout);\n const r = await tool.execute(tc.args, ac.signal);\n clearTimeout(timer);\n const txt = sanitize(r.output || '').slice(0, TOOL_RESULT_MAX);\n lh.push({ role: 'tool', content: r.success ? txt : `Error: ${(r as any).error}`, tool_call_id: tc.id, name: tc.name });\n GS.tc++;\n } catch (e: unknown) { lh.push({ role: 'tool', content: `Error: ${e instanceof Error ? e.message : String(e)}`, tool_call_id: tc.id, name: tc.name }); }\n }\n trimHistory(lh, 20); continue;\n }\n if (fc) { lh.push({ role: 'assistant', content: fc, reasoning_content: th || undefined }); stag = 0; }\n else { stag++; if (stag >= 3) return `停滞: 连续${stag}轮无进展`; continue; }\n const final = lh[lh.length - 1]?.content || '完成';\n return final.slice(0, 800);\n }\n };\n\n if (isBg) {\n run().then(result => {\n history.push({ role: 'system', content: `[子代理] ${task.slice(0, 50)} → ${result.slice(0, 300)}` });\n });\n return `后台子代理已启动: ${task.slice(0, 80)}`;\n } else {\n O(G(` 🟊 subagent ${task.slice(0, 60)}...\\n`));\n const result = await run();\n return result;\n }\n });\n\n const history: Message[] = [];\n if (!existsSync(SESSION_DIR)) mkdirSync(SESSION_DIR, { recursive: true });\n\n const sid = `sess_${Date.now()}`;\n setSessionId(sid);\n await xmemory.load();\n const prevCount = xmemory.totalEntries;\n const prevSummary = xmemory.getSessionSummary();\n if (prevSummary) {\n history.push({ role: 'system', content: `[跨会话记忆·已加载 ${prevCount} 条]\\n${prevSummary.slice(0, 800)}` });\n }\n\n skillEngine = new SkillEngine();\n let skillCount = 0;\n try { skillCount = await skillEngine.loadAll(); } catch { /* skills optional */ }\n\n let mcpCount = 0;\n let mcpToolCount = 0;\n try {\n mcpClient = new MCPClient();\n const { getConfig } = await import('../core/config.js');\n const cfg = getConfig();\n const servers = cfg.mcpServers || [];\n for (const srv of servers) {\n if (!srv.enabled || !srv.autoConnect) continue;\n try {\n const mcpConfig: { name: string; type: 'stdio' | 'sse'; command?: string; args?: string[]; url?: string; env?: Record<string, string> } = {\n name: srv.name,\n type: srv.url ? 'sse' : 'stdio',\n };\n if (srv.command) { mcpConfig.command = srv.command; mcpConfig.args = srv.args; }\n if (srv.url) mcpConfig.url = srv.url;\n await mcpClient.connect(mcpConfig);\n mcpCount++;\n } catch (e: unknown) {\n O(y(` MCP ${srv.name} 连接失败: ${e instanceof Error ? e.message.slice(0, 60) : String(e).slice(0, 60)}\\n`));\n }\n }\n if (mcpCount > 0) {\n const mcpTools = mcpClient.getAdaptedTools();\n mcpToolCount = mcpTools.length;\n tools.push(...mcpTools);\n }\n } catch { /* MCP optional */ }\n\n const drawHeader = (sCount = skillCount, mc = mcpCount, mt = mcpToolCount) => {\n O('\\x1b[2J\\x1b[H');\n O(b(c(' DeeperCode')) + G(' · 全栈 AI 编程代理') + '\\n');\n const modes: string[] = [`${tools.length}工具`];\n if (xmemory.totalEntries > 0) modes.push(`${xmemory.totalEntries}记忆`);\n if (sCount > 0) modes.push(`${sCount}技能`);\n if (mc > 0) modes.push(`${mc}MCP·${mt}工具`);\n O(G(` ▸ V4-Pro · ${modes.join(' · ')}`) + '\\n\\n');\n };\n drawHeader();\n\n let resizeTimer: ReturnType<typeof setTimeout> | null = null;\n const onResize = () => {\n if (resizeTimer) return;\n resizeTimer = setTimeout(() => { resizeTimer = null; Oflush(); }, 200);\n };\n process.stdout.on('resize', onResize);\n\n let resolveLine: ((v: string) => void) | null = null;\n let running = true;\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: true });\n let currentPrompt = c('❯ ');\n const showPrompt = () => { Oflush(); rl.setPrompt(currentPrompt); rl.prompt(true); };\n rl.on('line', (line: string) => { if (resolveLine) { const cb = resolveLine; resolveLine = null; cb(line); } });\n const ask = (): Promise<string> => new Promise(r => { resolveLine = r; showPrompt(); });\n const confirm = async (msg: string): Promise<boolean> => {\n const sv = resolveLine; resolveLine = null;\n O(y(`\\n ⚠ ${msg} [y/N] `));\n const a = await new Promise<string>(r2 => { resolveLine = r2; rl.prompt(true); });\n const ok = a.toLowerCase().startsWith('y');\n if (sv) resolveLine = sv; else showPrompt();\n return ok;\n };\n\n const onSigint = () => {\n if (currentAbortController) {\n currentAbortController.abort();\n currentAbortController = null;\n O(y('\\n ⚡ 已中断当前请求\\n'));\n return;\n }\n if (resolveLine) { const cb = resolveLine; resolveLine = null; cb('/quit'); return; }\n Oflush();\n process.stdout.removeListener('resize', onResize);\n process.removeListener('uncaughtException', onUCE);\n process.removeListener('unhandledRejection', onUHR);\n xmemory.save().then(() => { O('\\n' + y('再见!') + '\\n'); running = false; rl.close(); process.exit(0); });\n };\n rl.on('SIGINT', onSigint);\n const onUCE = (err: Error) => { if (!err.message?.includes('readline') && !err.message?.includes('abort')) O(r(`\\n ⚠ ${err.message}`) + '\\n'); };\n process.on('uncaughtException', onUCE);\n const onUHR = (reason: unknown) => { const m = reason instanceof Error ? reason.message : String(reason); if (!m.includes('readline') && !m.includes('Abort') && !m.includes('timeout')) O(r(`\\n ⚠ ${m}`) + '\\n'); };\n process.on('unhandledRejection', onUHR);\n\n while (running) {\n currentPrompt = c('❯ ');\n const tasks = getTodos();\n if (tasks.length > 0) {\n const active = tasks.filter(t => t.status === 'pending' || t.status === 'in_progress');\n if (active.length > 0) currentPrompt = c(`❯ [${active.length}/${tasks.length}] `);\n }\n\n const input = await ask();\n const trimmed = input.trim();\n if (!trimmed) continue;\n\n if (trimmed.startsWith('/')) {\n if (trimmed === '/') {\n O(c(' 可用命令:\\n'));\n O(G(' /help') + G(' 帮助信息') + '\\n');\n O(G(' /clear') + G(' 清空对话') + '\\n');\n O(G(' /quit') + G(' 退出') + '\\n');\n O(G(' /save') + G(' [n] 保存会话') + '\\n');\n O(G(' /load') + G(' [n] 加载会话') + '\\n');\n O(G(' /sessions') + G(' 会话列表') + '\\n');\n O(G(' /tools') + G(' [c] 工具列表') + '\\n');\n O(G(' /stats') + G(' 统计信息') + '\\n');\n O(G(' /memory') + G(' 记忆系统') + '\\n');\n O(G(' /tasks') + G(' 任务列表') + '\\n');\n O(G(' /rules') + G(' 规则管理') + '\\n');\n O(G(' /mcp') + G(' MCP服务器') + '\\n');\n O(G(' /plan') + G(' <任务> 先出方案') + '\\n');\n O(G(' /spec') + G(' <任务> 先出规格') + '\\n');\n O(G(' /review') + G(' <路径> 代码审查') + '\\n');\n O(G(' /fix') + G(' [目标] 自动修复') + '\\n');\n O(G(' /commit') + G(' 智能提交') + '\\n');\n O(G(' /analyze') + G(' [路径] 项目分析') + '\\n');\n O(G(' /diff') + G(' <文件> 变更预览') + '\\n');\n O(G(' /undo') + G(' 撤销操作') + '\\n');\n O(G(' /status') + G(' 当前状态') + '\\n');\n O(G(' /model') + G(' 模型设置') + '\\n');\n O(G(' /config') + G(' 配置管理') + '\\n');\n O(G(' /cwd') + G(' 当前目录') + '\\n');\n O(G(' /export') + G(' 导出对话') + '\\n');\n O(G(' /init') + G(' 初始化项目') + '\\n');\n O('\\n'); continue;\n }\n const [cmd, ...rest] = trimmed.split(/\\s+/);\n const arg = rest.join(' ');\n if (cmd === '/quit') break;\n if (cmd === '/clear') { history.length = 0; O('\\x1b[2J\\x1b[H' + g('已清空') + '\\n\\n'); continue; }\n if (cmd === '/save') { await saveSession(history, arg); continue; }\n if (cmd === '/load' || cmd === '/resume') {\n if (arg) await loadNamedSession(history, arg);\n else await loadLatestSession(history);\n continue;\n }\n if (cmd === '/sessions') { await listSessions(); continue; }\n if (cmd === '/tools') { if (arg) await showToolsOf(arg, tools); else await showToolsBrief(tools); continue; }\n if (cmd === '/stats') { O(B(`▸ API:${GS.api} 工具:${GS.tc} 字符:${GS.ch}`) + '\\n\\n'); continue; }\n if (cmd === '/memory') { await showMemory(); continue; }\n if (cmd === '/tasks') { await showTasks(); continue; }\n if (cmd === '/model') { O(c('模型: deepseek-v4-pro | deepseek-v4-flash\\n deeper config set model <name>\\n\\n')); continue; }\n if (cmd === '/config') { O(c('配置: deeper config list | deeper config set <key> <value>\\n\\n')); continue; }\n if (cmd === '/cwd') { O(G(` ${process.cwd()}\\n\\n`)); continue; }\n if (cmd === '/export') { await exportHistory(history); continue; }\n if (cmd === '/init') { await initProject(); continue; }\n if (cmd === '/status') { O(B(`▸ API:${GS.api} 工具:${GS.tc} 字符:${GS.ch} · 上下文:${history.length}条`) + '\\n\\n'); continue; }\n if (cmd === '/mcp') {\n if (!mcpClient) { O(y(' MCP 未初始化\\n\\n')); continue; }\n const servers = mcpClient.getConnectedServers();\n if (!servers.length) { O(G(' 无已连接的 MCP 服务器\\n 使用 deeper mcp add 添加\\n\\n')); continue; }\n O(b(c(' MCP Servers')) + G(` · ${servers.length} 个`) + '\\n');\n for (const name of servers) {\n const mcpTools = mcpClient.listTools(name);\n O(G(` 📡 ${name}`) + G(` · ${mcpTools.length} 工具`) + '\\n');\n for (const t of mcpTools.slice(0, 5)) O(G(` - ${t.name}: ${t.description.slice(0, 50)}`) + '\\n');\n if (mcpTools.length > 5) O(G(` …还有 ${mcpTools.length - 5} 个`) + '\\n');\n }\n O('\\n'); continue;\n }\n if (cmd === '/rules') {\n const projectRules = join(process.cwd(), '.deeper', 'rules.md');\n const globalRules = join(DEEPER_HOME, 'rules.md');\n O(b(c(' Rules')) + '\\n');\n const showRules = (label: string, path: string) => {\n if (existsSync(path)) {\n const content = readFileSync(path, 'utf-8');\n O(G(` ${label}: `) + c(path) + G(` (${content.split('\\n').length}行)`) + '\\n');\n const lines = content.split('\\n').slice(0, 8);\n for (const l of lines) O(G(` ${l.slice(0, 70)}`) + '\\n');\n if (content.split('\\n').length > 8) O(G(' …') + '\\n');\n } else {\n O(G(` ${label}: `) + y('未设置') + G(` (创建: ${path})`) + '\\n');\n }\n };\n showRules('项目规则', projectRules);\n showRules('全局规则', globalRules);\n O('\\n'); continue;\n }\n if (cmd === '/help') {\n O(c(' /help /clear /quit /save [name] /load|resume [name] /sessions\\n'));\n O(c(' /tools [cat] /stats /memory /tasks /model /config /cwd /export /init /mcp /rules\\n'));\n O(c(' /plan <任务> /spec <任务> /review <路径> /fix [目标]\\n'));\n O(c(' /commit /analyze [路径] /diff <文件> /undo /status\\n\\n'));\n continue;\n }\n if (cmd === '/plan') {\n if (!arg) { O(y(' 用法: /plan <任务描述>\\n\\n')); continue; }\n O(b(c(' Plan Mode')) + G(` • ${arg.slice(0, 50)}`) + '\\n\\n');\n history.push({ role: 'system', content: `[Plan Mode]\n你必须遵循以下流程,严格按步骤执行:\n1. 先输出一份详尽的实施方案(不要写代码)\n2. 方案必须包含:需求分析、技术选型、架构设计、数据流、模块划分、实施步骤\n3. 等待用户确认方案(输入 ok/继续/可以 等确认词)\n4. 用户确认后,按方案逐步实施,每完成一步更新 todo\n5. 完成后总结交付内容\n\n当前任务:${arg}` });\n history.push({ role: 'user', content: arg });\n const pfdefs = toolsToDefs(tools);\n await runLoop(opts, history, tools, pfdefs, confirm);\n continue;\n }\n if (cmd === '/spec') {\n if (!arg) { O(y(' 用法: /spec <任务描述>\\n\\n')); continue; }\n O(b(c(' Spec Mode')) + G(` • ${arg.slice(0, 50)}`) + '\\n\\n');\n history.push({ role: 'system', content: `[Spec Mode]\n你必须遵循以下流程,严格按步骤执行:\n1. 先输出一份完整的产品规格文档(不要写代码)\n2. 规格文档必须包含:需求概述、功能清单、交互设计、数据结构、API设计、组件树、非功能性需求、测试策略、里程碑\n3. 文档使用 Markdown 格式,标题用 # 层次清晰\n4. 等待用户确认规格(输入 ok/继续/可以 等确认词)\n5. 用户确认后,按规格逐步实施,每完成一步更新 todo\n6. 完成后总结交付内容\n\n当前任务:${arg}` });\n history.push({ role: 'user', content: arg });\n const sfdefs = toolsToDefs(tools);\n await runLoop(opts, history, tools, sfdefs, confirm);\n continue;\n }\n if (cmd === '/review') {\n const target = arg || '.';\n O(b(c(' Review Mode')) + G(` • ${target}`) + '\\n\\n');\n history.push({ role: 'system', content: `[Review Mode]\n你是一位资深代码审查专家。请对指定代码进行全面审查:\n\n1. 先用 read_file / glob_find / grep_search 读取相关代码\n2. 从以下维度逐项审查并评分(1-10):\n - 代码质量:可读性、命名、结构\n - 安全性:注入、XSS、密钥泄露、权限问题\n - 性能:N+1查询、内存泄漏、不必要的计算\n - 可维护性:耦合度、重复代码、测试覆盖\n - 最佳实践:设计模式、SOLID原则、错误处理\n3. 对每个问题给出:文件路径、行号范围、问题描述、修复建议、严重程度(🔴高/🟡中/🟢低)\n4. 最后给出总体评分和改进优先级列表\n\n审查目标:${target}` });\n history.push({ role: 'user', content: `审查 ${target} 的代码质量` });\n const rvdefs = toolsToDefs(tools);\n await runLoop(opts, history, tools, rvdefs, confirm);\n continue;\n }\n if (cmd === '/commit') {\n O(b(c(' Commit Mode')) + G(' • 智能提交') + '\\n\\n');\n try {\n const statusOut = execSync('git status --porcelain', { encoding: 'utf-8', timeout: 10000, cwd: process.cwd() });\n if (!statusOut.trim()) { O(y(' 没有未提交的变更\\n\\n')); continue; }\n const diffOut = execSync('git diff --stat', { encoding: 'utf-8', timeout: 15000, cwd: process.cwd() });\n const stagedOut = execSync('git diff --cached --stat', { encoding: 'utf-8', timeout: 15000, cwd: process.cwd() });\n const files = statusOut.trim().split('\\n').filter(Boolean);\n O(G(` ${files.length} 个文件变更:\\n`));\n for (const f of files.slice(0, 20)) {\n const status = f.slice(0, 2).trim();\n const path = f.slice(3);\n const icon = status === 'M' ? y('M') : status === 'A' ? g('A') : status === 'D' ? r('D') : status === '?' ? G('?') : c(status);\n O(G(` ${icon} ${path.slice(0, 60)}`) + '\\n');\n }\n if (files.length > 20) O(G(` …还有 ${files.length - 20} 个`) + '\\n');\n O('\\n');\n history.push({ role: 'system', content: `[Commit Mode]\n分析 git 变更并生成提交信息:\n1. 先用 run_command 执行 git diff 查看具体变更内容\n2. 分析变更类型和范围,生成符合 Conventional Commits 规范的提交信息\n3. 格式: type(scope): description\n - type: feat/fix/refactor/docs/style/test/chore/perf\n - scope: 可选,影响的模块\n4. 用 run_command 执行 git add 和 git commit\n5. 如果变更较多,建议分多次提交\n\n当前变更统计:\n${diffOut || stagedOut || '无staged变更'}` });\n history.push({ role: 'user', content: '分析变更并提交' });\n const cmdefs = toolsToDefs(tools);\n await runLoop(opts, history, tools, cmdefs, confirm);\n } catch (e: unknown) {\n O(r(` Git 操作失败: ${e instanceof Error ? e.message.slice(0, 80) : String(e).slice(0, 80)}\\n\\n`));\n }\n continue;\n }\n if (cmd === '/analyze') {\n const target = arg || process.cwd();\n O(b(c(' Analyze Mode')) + G(` • ${target}`) + '\\n\\n');\n history.push({ role: 'system', content: `[Analyze Mode]\n你是一位项目架构分析师。请对项目进行全面分析:\n\n1. 用 glob_find 扫描项目目录结构\n2. 用 read_file 读取 package.json / tsconfig.json / Cargo.toml 等配置\n3. 用 grep_search / codebase_search 分析代码模式\n4. 输出以下分析报告:\n - 📁 项目结构树(关键目录和文件)\n - 🛠 技术栈识别(语言、框架、库、工具链)\n - 📊 代码统计(文件数、代码行数估算、各语言占比)\n - 🏗️ 架构模式(MVC/微服务/单体/插件式等)\n - 🔗 依赖关系(核心依赖、开发依赖、版本风险)\n - ⚠️ 潜在问题(过时依赖、安全风险、代码异味)\n - 💡 改进建议(优先级排序)\n\n分析目标:${target}` });\n history.push({ role: 'user', content: `分析项目 ${target}` });\n const andefs = toolsToDefs(tools);\n await runLoop(opts, history, tools, andefs, confirm);\n continue;\n }\n if (cmd === '/fix') {\n const target = arg || '';\n O(b(c(' Fix Mode')) + G(' • 自动修复') + '\\n\\n');\n history.push({ role: 'system', content: `[Fix Mode]\n你是一位自动修复工程师。请执行以下流程:\n\n1. 先用 run_command 运行构建命令(如 npm run build, tsc --noEmit, cargo check 等)\n2. 如果构建成功,运行测试(npm test, cargo test 等)\n3. 如果有错误:\n a. 仔细分析错误信息,定位到具体文件和行号\n b. 用 read_file 读取出错文件的相关代码\n c. 理解错误根因,制定修复方案\n d. 用 edit_file 精确修复(优先用 edit 而非重写整个文件)\n e. 重新运行构建验证修复\n f. 重复直到所有错误清除\n4. 如果测试失败,同样分析并修复\n5. 最多尝试修复 5 轮,避免无限循环\n6. 每次修复后都重新验证\n\n${target ? `修复目标:${target}\\n` : '自动检测并修复所有构建/测试错误'}` });\n history.push({ role: 'user', content: target || '检测并修复项目错误' });\n const fxdefs = toolsToDefs(tools);\n await runLoop(opts, history, tools, fxdefs, confirm);\n continue;\n }\n if (cmd === '/diff') {\n if (!arg) { O(y(' 用法: /diff <文件路径>\\n 显示文件最近的变更\\n\\n')); continue; }\n const filePath = arg.startsWith('/') || arg.startsWith('\\\\') || arg.length > 2 ? arg : join(process.cwd(), arg);\n if (fileBackupStack.length === 0) { O(y(' 没有可用的备份记录\\n\\n')); continue; }\n const backups = fileBackupStack.filter(b => b.path === filePath).reverse();\n if (backups.length === 0) {\n const allBackups = [...fileBackupStack].reverse();\n O(G(' 最近的文件变更:\\n'));\n for (const b of allBackups.slice(0, 10)) {\n const rel = relative(process.cwd(), b.path);\n const time = new Date(b.timestamp).toLocaleTimeString();\n O(G(` ${time} ${rel.slice(0, 50)}`) + '\\n');\n }\n O('\\n'); continue;\n }\n const latest = backups[0];\n try {\n const currentContent = existsSync(filePath) ? readFileSync(filePath, 'utf-8') : '(文件已删除)';\n const backupContent = readFileSync(latest.backupPath, 'utf-8');\n const diffResult = computeSimpleDiff(backupContent, currentContent, filePath);\n O(b(c(' Diff')) + G(` • ${relative(process.cwd(), filePath)}`) + '\\n\\n');\n O(diffResult + '\\n\\n');\n } catch {\n O(y(' 无法读取文件进行对比\\n\\n'));\n }\n continue;\n }\n if (cmd === '/undo') {\n if (fileBackupStack.length === 0) { O(y(' 没有可撤销的操作\\n\\n')); continue; }\n const last = fileBackupStack[fileBackupStack.length - 1];\n try {\n const rel = relative(process.cwd(), last.path);\n copyFileSync(last.backupPath, last.path);\n fileBackupStack.pop();\n try { unlinkSync(last.backupPath); } catch {}\n O(g(' ✓ 已撤销') + G(` ${rel}`) + '\\n');\n O(G(' 提示: 可继续 /undo 撤销更多操作\\n\\n'));\n } catch (e: unknown) {\n O(r(` 撤销失败: ${e instanceof Error ? e.message.slice(0, 60) : String(e).slice(0, 60)}\\n\\n`));\n }\n continue;\n }\n O(G(` 未知命令: ${cmd} (输入 /help 查看帮助)\\n\\n`));\n continue;\n }\n\n const fdefs = toolsToDefs(tools);\n O('\\n');\n const um: Message = { role: 'user', content: trimmed };\n history.push(um); trimHistory(history, MAX_HISTORY);\n await runLoop(opts, history, tools, fdefs, confirm);\n }\n\n rl.close();\n Oflush();\n process.stdout.removeListener('resize', onResize);\n process.removeListener('uncaughtException', onUCE);\n process.removeListener('unhandledRejection', onUHR);\n await xmemory.save();\n if (mcpClient) mcpClient.disconnectAll();\n Oflush();\n O(y('\\n再见!\\n')); process.exit(0);\n}\n\n// ========== Core loop ==========\n\nasync function runLoop(\n opts: ReplOptions, history: Message[], tools: Tool[],\n toolDefs: ToolDef[], confirm: (msg: string) => Promise<boolean>,\n): Promise<void> {\n let ttc = 0, ce = 0, stagnation = 0;\n\n for (let iter = 0; ; iter++) {\n const ctxTokens = estimateTokens(history.map(m => m.content || '').join('\\n'));\n const toolsTokenOverhead = toolDefs.length * 80;\n const totalCtx = ctxTokens + toolsTokenOverhead;\n const nearLimit = totalCtx > CONTEXT_LIMIT * 0.95;\n\n if (totalCtx > CONTEXT_LIMIT * 0.7 && history.length > 10) {\n compressHistory(history);\n }\n\n if (stagnation >= 5) {\n O(y(`\\n 连续${stagnation}轮无进展,任务交还\\n\\n`));\n return;\n }\n\n const msgs = buildMsgs(history);\n const st = Date.now();\n let fc = '', th = '';\n let tcs: Array<{ id: string; name: string; args: Record<string, unknown> }> = [];\n let curTc: { id: string; name: string; argsStr: string } | null = null;\n let se: string | null = null;\n const amax = iter === 0 ? 131072 : nearLimit ? 32768 : 65536;\n let showingThink = false;\n\n resetTimer();\n const animLabel = () => showingThink ? '思考中' : '解析中';\n const animTick = () => { O('\\r' + thinkingAnim(animLabel())); };\n let thinkAnimIv: ReturnType<typeof setInterval> | null = null;\n animTick();\n thinkAnimIv = setInterval(animTick, 80);\n const md = new MarkdownStreamRenderer();\n\n const startStreamAnim = () => {\n if (thinkAnimIv) return;\n resetTimer();\n animTick();\n thinkAnimIv = setInterval(animTick, 80);\n };\n const stopStreamAnim = () => {\n if (thinkAnimIv) { clearInterval(thinkAnimIv); thinkAnimIv = null; }\n };\n\n currentAbortController = new AbortController();\n\n try {\n const stream = await callApi(opts, msgs, toolDefs, amax, currentAbortController.signal);\n GS.api++; ce = 0;\n\n const cols = process.stdout.columns || 80;\n\n for await (const chunk of stream) {\n if (chunk.type === 'text') {\n const t = chunk.content || '';\n fc += t;\n if (fc.length > 100_000) fc = fc.slice(-80_000);\n if (fc === t) {\n if (showingThink) { showingThink = false; stopStreamAnim(); }\n Oflush(); O('\\r' + ' '.repeat(cols) + '\\r');\n if (!fc.slice(t.length - t.length)) O(b(c('●')) + ' ');\n }\n const rendered = md.feed(t);\n if (rendered) O(rendered);\n GS.ch += t.length;\n }\n if (chunk.type === 'thinking') {\n if (!showingThink) { showingThink = true; startStreamAnim(); }\n th += chunk.content || '';\n if (th.length > 20_000) th = th.slice(-16_000);\n }\n if (chunk.type === 'tool_call_start') {\n if (showingThink) { O('\\r' + ' '.repeat(cols) + '\\r'); showingThink = false; }\n stopStreamAnim();\n const tc = (chunk as any).tool_call;\n if (tc) curTc = { id: tc.id, name: tc.name, argsStr: '' };\n }\n if (chunk.type === 'tool_call_end' && curTc) {\n const tcData = (chunk as any).tool_call;\n try {\n const args = tcData?.arguments || JSON.parse(curTc.argsStr || '{}');\n tcs.push({ id: curTc.id, name: curTc.name, args });\n } catch { tcs.push({ id: curTc.id, name: curTc.name, args: {} }); }\n curTc = null;\n }\n if (chunk.type === 'done') break;\n if (chunk.type === 'error') { se = chunk.error || '?'; break; }\n }\n } catch (e: unknown) {\n stopStreamAnim();\n const errMsg = e instanceof Error ? e.message : String(e);\n if (errMsg.includes('abort') || errMsg.includes('cancel')) {\n se = null;\n O(y('\\n ⚡ 请求已取消\\n'));\n } else {\n se = errMsg;\n }\n }\n\n currentAbortController = null;\n stopStreamAnim();\n Oflush();\n const remaining = md.flush();\n if (remaining) O(remaining);\n md.reset();\n\n if (se) {\n ce++; O(r(`\\n ✗ ${se}`));\n if (ce >= 3) { O(r('\\n 连续失败,放弃\\n\\n')); return; }\n const w = Math.min(1000 * ce, 5000); O(G(` 重试(${ce}/3)...\\n`)); await new Promise(r2 => setTimeout(r2, w)); continue;\n }\n\n const el = Date.now() - st;\n if (fc && !tcs.length) O('\\n');\n\n if (tcs.length > 0) {\n stagnation = 0;\n Oflush();\n const compactFc = fc && fc.length > 500 ? fc.replace(/\\n/g, ' ').slice(0, 300) + '…' : fc;\n history.push({ role: 'assistant', content: compactFc || null, reasoning_content: th || undefined, tool_calls: tcs.map(t => ({ id: t.id, name: t.name, arguments: { ...t.args } })) });\n fc = ''; th = '';\n let doneTools = 0;\n\n if (iter === 0) {\n const tdSummary = todoSummary();\n if (tdSummary) { Oflush(); O('\\n' + d(tdSummary.split('\\n').join('\\n ')) + '\\n'); }\n }\n\n const safe = tcs.filter(t => (TOOL_SAFETY_MAP[t.name] || 'safe') === 'safe');\n const rest = tcs.filter(t => (TOOL_SAFETY_MAP[t.name] || 'safe') !== 'safe');\n if (safe.length > 1) {\n const results = await Promise.allSettled(safe.map(async tc => { const r = await execTool(tc, tools, opts); doneTools++; return r; }));\n for (const r of results) {\n if (r.status === 'fulfilled') { history.push(r.value); ttc++; GS.tc++; }\n else { history.push({ role: 'tool', content: `Error: ${String(r.reason)}`, tool_call_id: 'parallel' }); }\n }\n } else if (safe.length === 1) {\n const r = await execTool(safe[0], tools, opts);\n history.push(r); ttc++; GS.tc++; doneTools++;\n }\n for (const tc of rest) {\n const r2 = await execTool(tc, tools, opts, confirm);\n history.push(r2); if (!r2.content?.startsWith('Error:') && !r2.content?.includes('skipped')) { ttc++; GS.tc++; }\n doneTools++;\n }\n tcs.length = 0; safe.length = 0; rest.length = 0;\n\n trimHistory(history, MAX_HISTORY); continue;\n }\n\n if (fc) { history.push({ role: 'assistant', content: fc, reasoning_content: th || undefined }); stagnation = 0; }\n else { stagnation++; }\n\n const ctxPct = ((totalCtx / CONTEXT_LIMIT) * 100).toFixed(1);\n const ctxWarn = totalCtx > CTX_WARN ? y(` ${ctxPct}%`) : G(` ${ctxPct}%`);\n O(G(` ▸ ${(el / 1000).toFixed(1)}s · ${ttc} 工具 · 上下文${ctxWarn}`) + '\\n\\n');\n trimHistory(history, MAX_HISTORY);\n\n if (fc) {\n const lu = lastUser(history);\n xmemory.storeEpisodic(`完成任务: ${lu.slice(0, 100)} → ${fc.slice(0, 200)}`, ['task', 'complete'], 5);\n xmemory.storeSemantic(`学会了关于 ${lu.slice(0, 80)} 的处理方式`, ['learning'], 4);\n }\n\n return;\n }\n}\n\nasync function execTool(\n tc: { id: string; name: string; args: Record<string, unknown> },\n tools: Tool[], opts: ReplOptions,\n confirm?: (msg: string) => Promise<boolean>,\n): Promise<Message> {\n const tool = tools.find(t => t.name === tc.name);\n if (!tool) return { role: 'tool', content: `Error: unknown tool ${tc.name}`, tool_call_id: tc.id, name: tc.name };\n\n const vResult = validator.validate(tool, tc.args);\n if (!vResult.success) {\n return { role: 'tool', content: `Error: ${vResult.error}`, tool_call_id: tc.id, name: tc.name };\n }\n\n const s = TOOL_SAFETY_MAP[tc.name] || 'safe';\n const toolName = tc.name;\n const tSyms = '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏';\n let ti = 0;\n\n if ((s === 'dangerous' || s === 'confirm') && confirm) {\n Oflush(); O('\\r' + ' '.repeat(process.stdout.columns || 80) + '\\r');\n const prefix = s === 'dangerous' ? '⛔' : '⚠';\n O(y(` ${prefix}确认? `));\n const ok = await confirm(`执行 ${toolName}?`);\n if (!ok) { O(G(' 跳过\\n')); return { role: 'tool', content: 'User skipped', tool_call_id: tc.id, name: tc.name }; }\n O('\\r' + A.d + ' ' + A.R + A.c + tSyms[0] + A.R + A.G + ' ' + toolName + A.R + ' ');\n }\n\n let execAnimIv: ReturnType<typeof setInterval> | null = null;\n const stopToolAnim = () => { if (execAnimIv) { clearInterval(execAnimIv); execAnimIv = null; } };\n try {\n const toolStart = Date.now();\n const rawWrite = (s: string) => { try { process.stdout.write(s); } catch {} };\n rawWrite('\\r' + thinkingAnimAt(toolName, toolStart));\n execAnimIv = setInterval(() => { rawWrite('\\r' + thinkingAnimAt(toolName, toolStart)); }, 80);\n\n const timeout = TOOL_TIMEOUT_MAP[tc.name] || DEFAULT_TOOL_TIMEOUT;\n const ac = new AbortController();\n const timer = setTimeout(() => ac.abort(), timeout);\n\n if (tc.name === 'write_file' || tc.name === 'edit_file') {\n const fp = (tc.args.file_path || tc.args.path || tc.args.file || '') as string;\n if (fp) backupFile(fp);\n }\n\n let result: { success: boolean; error?: string; output?: string };\n try {\n result = await tool.execute(tc.args, ac.signal) as any;\n clearTimeout(timer);\n } catch (e: unknown) {\n clearTimeout(timer);\n result = { success: false, error: (e as Error).message, output: '' };\n }\n\n stopToolAnim();\n const rawResult = result.success ? result.output || '' : `Error: ${result.error || 'failed'}`;\n const text = result.success ? sanitize(rawResult).slice(0, TOOL_RESULT_MAX) : `Error: ${result.error || 'failed'}`;\n const showPath = (p: string) => p.split(/[/\\\\]/).filter(Boolean).slice(-2).join('/').slice(-35);\n\n let brief = '';\n if (tc.name === 'write_file' || tc.name === 'edit_file') {\n const fp = (tc.args.file_path || tc.args.path || tc.args.file || '') as string;\n brief = showPath(fp);\n } else if (tc.name === 'todo_manager') {\n brief = '任务已更新';\n } else {\n brief = rawResult.replace(/\\n/g, ' ').slice(0, 60);\n }\n Oflush(); O('\\r' + ' '.repeat(process.stdout.columns || 80) + '\\r');\n if (tc.name === 'todo_manager' && result.success) {\n O(A.y + A.b + ' ▸▸ █ 任务面板' + A.R + '\\n');\n const lines = rawResult.split('\\n').filter(Boolean);\n let shown = 0; const MAX_SHOW = 16;\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n if (/^📋/.test(trimmed)) {\n O(A.b + ' ' + trimmed + A.R + '\\n');\n continue;\n }\n shown++;\n if (shown > MAX_SHOW) { O(G(' …\\n')); break; }\n const depth = line.match(/^(\\s*)/)?.[1].length ?? 0;\n const colored = trimmed\n .replace(/^✓\\s*/, g('✓ '))\n .replace(/^◉\\s*/, y('◉ '))\n .replace(/^○\\s*/, G('○ '))\n .replace(/^✗\\s*/, r('✗ '));\n if (depth >= 4) O(G(' ') + colored + '\\n');\n else if (depth >= 2) O(G(' ') + colored + '\\n');\n else O(' ' + colored + '\\n');\n }\n O('\\n');\n } else {\n O(g(' ✓') + G(` ${c(tc.name)} ${brief}\\n`));\n }\n if (result.success) {\n xmemory.storeWorking(`${tc.name}: ${brief}`, [tc.name, 'tool']);\n if (tc.name === 'write_file' || tc.name === 'edit_file' || tc.name === 'delete_file') {\n xmemory.storeEpisodic(`修改了文件: ${brief}`, ['file', 'modified'], 6);\n }\n }\n\n return { role: 'tool', content: text, tool_call_id: tc.id, name: tc.name };\n } catch (e: unknown) {\n stopToolAnim();\n const em = e instanceof Error ? e.message : String(e);\n Oflush(); O('\\r' + ' '.repeat(process.stdout.columns || 80) + '\\r');\n O(r(' ✗') + G(` ${tc.name} ${em.slice(0, 60)}\\n`));\n return { role: 'tool', content: `Error: ${em}`, tool_call_id: tc.id, name: tc.name };\n }\n}\n\n// ========== Helpers ==========\n\nfunction buildMsgs(history: Message[]): Array<Record<string, unknown>> {\n const r: Array<Record<string, unknown>> = [];\n let sysContent = `You are DeeperCode V4-Pro, an elite full-stack AI coding agent with autonomous execution capability.\n\n## Core Principles\n1. READ BEFORE WRITE — Always inspect project state before making changes.\n2. COMPLETE CODE — Write full files. Never use placeholders like \"// ...\" or \"rest of code\".\n3. ONE CALL = ONE FILE — Each write_file contains exactly one complete file. Batch independent writes.\n4. PLAN WITH TODOS — Use todo_manager for multi-step tasks. Update status as you progress.\n5. ACT OVER EXPLAIN — Keep reasoning brief. Prefer tool calls over lengthy explanations.\n6. VERIFY AFTER WRITE — After writing code, run type checks, linters, or tests to confirm correctness.\n7. FIX ERRORS PROACTIVELY — If a tool returns an error, diagnose and fix it immediately.\n8. PARALLEL WHEN POSSIBLE — Execute independent tool calls simultaneously for efficiency.\n\n## Smart Editing Strategy\n- For EXISTING files, prefer edit_file over write_file to minimize diff size.\n- For NEW files, use write_file with complete content.\n- Before editing, read the file first to understand its current state.\n- Make targeted, minimal edits rather than rewriting entire files.\n\n## Auto-Verification Loop\nAfter writing or editing code files, ALWAYS verify the changes:\n1. Run the project's build command (npm run build, tsc --noEmit, cargo check, etc.)\n2. If build fails, read the error output, fix the issues, and re-verify\n3. If tests exist, run them to confirm nothing is broken\n4. Repeat until all checks pass — do NOT leave the user with broken code\n\n## Error Recovery\n- When a tool call fails, analyze the error message carefully before retrying\n- If the same approach fails twice, try a different strategy\n- For type errors: read the file, understand the types, fix precisely\n- For runtime errors: add proper error handling and logging\n- Never give up after one failure — adapt and overcome\n\n## Execution Strategy\n- Start by reading relevant files and understanding the codebase structure.\n- Break complex tasks into small, verifiable steps.\n- After each code change, verify it compiles/passes before moving on.\n- When stuck, try a different approach rather than repeating the same failed action.\n- Use subagent for independent subtasks that can run in parallel.\n\n## Context\n- cwd=${process.cwd()} plat=${process.platform} arch=${process.arch}\n- Respond in the same language as the user's input.`;\n\n const ts = todoSummary(4);\n if (ts) sysContent += '\\n[Remaining Tasks]\\n' + ts;\n\n const lastU = history.filter(m => m.role === 'user').pop();\n if (lastU?.content) {\n const hints = xmemory.getProceduralHints(lastU.content || '', 3);\n if (hints) sysContent += '\\n' + hints;\n }\n const workCtx = xmemory.getWorkingContext(400);\n if (workCtx) sysContent += '\\n[Recent Work]\\n' + workCtx;\n\n const skillPrompt = getSkillSystemPrompt();\n if (skillPrompt) sysContent += '\\n' + skillPrompt;\n\n r.push({ role: 'system', content: sysContent });\n\n const deeperCtx = cachedRead(join(process.cwd(), 'deeper.md'));\n if (deeperCtx && deeperCtx.trim() && !deeperCtx.includes('<!-- 填写')) {\n r.push({ role: 'system', content: `[项目上下文 deeper.md]\\n${deeperCtx}` });\n }\n const projRules = cachedRead(join(process.cwd(), '.deeper', 'rules.md'));\n if (projRules && projRules.trim()) r.push({ role: 'system', content: `[项目规则 rules.md]\\n${projRules}` });\n const globalRules = cachedRead(join(DEEPER_HOME, 'rules.md'), 2000);\n if (globalRules && globalRules.trim()) r.push({ role: 'system', content: `[全局规则]\\n${globalRules}` });\n\n for (const m of history.slice(-30)) {\n const e: Record<string, unknown> = { role: m.role };\n if (m.content != null) e.content = (m.content || '').slice(0, 8000);\n if (m.reasoning_content) e.reasoning_content = (m.reasoning_content || '').slice(0, 2000);\n if (m.tool_calls) e.tool_calls = m.tool_calls.map(t => ({\n id: t.id, type: 'function', function: { name: t.name, arguments: JSON.stringify(t.arguments) },\n }));\n if (m.tool_call_id) e.tool_call_id = m.tool_call_id;\n if (m.role === 'tool') {\n e.name = m.name || 'tool';\n } else if (m.name) {\n e.name = m.name;\n }\n r.push(e);\n }\n return r;\n}\n\nfunction trimHistory(h: Message[], max: number) { while (h.length > max) h.shift(); }\n\nconst _fileCache = new Map<string, { mtime: number; content: string }>();\nfunction cachedRead(path: string, maxLen = 4000): string | null {\n if (!existsSync(path)) return null;\n try {\n const st = statSync(path);\n const cached = _fileCache.get(path);\n if (cached && cached.mtime === st.mtimeMs) return cached.content;\n const content = readFileSync(path, 'utf-8').slice(0, maxLen);\n _fileCache.set(path, { mtime: st.mtimeMs, content });\n return content;\n } catch { return null; }\n}\n\nfunction compressHistory(h: Message[]): void {\n if (h.length <= 6) return;\n const keep = 6;\n const old = h.slice(0, h.length - keep);\n const recent = h.slice(h.length - keep);\n\n const sections: string[] = [];\n let userParts: string[] = [];\n let assistantParts: string[] = [];\n let toolParts: string[] = [];\n\n const flushSection = () => {\n if (userParts.length > 0) sections.push(`[用户] ${userParts.join(' → ')}`);\n if (assistantParts.length > 0) sections.push(`[助手] ${assistantParts.join(' → ')}`);\n if (toolParts.length > 0) sections.push(`[工具] ${toolParts.join(', ')}`);\n userParts = []; assistantParts = []; toolParts = [];\n };\n\n for (const m of old) {\n if (m.role === 'system') {\n flushSection();\n continue;\n }\n if (m.role === 'user' && m.content) {\n if (assistantParts.length > 0 || toolParts.length > 0) flushSection();\n userParts.push(m.content.slice(0, 120));\n } else if (m.role === 'assistant') {\n if (m.tool_calls && m.tool_calls.length > 0) {\n const names = m.tool_calls.map(t => t.name).join(', ');\n toolParts.push(names);\n }\n if (m.content) {\n assistantParts.push(m.content.slice(0, 150));\n }\n } else if (m.role === 'tool' && m.content) {\n const isErr = m.content.startsWith('Error:');\n toolParts.push(isErr ? '❌' : '✓');\n }\n }\n flushSection();\n\n const compressed = sections.join('\\n').slice(0, 4000);\n h.length = 0;\n h.push({ role: 'system', content: `[上下文压缩·${old.length}条摘要]\\n${compressed}` });\n h.push(...recent);\n}\n\nfunction sanitize(t: string): string {\n return t.replace(/\\x1b\\[[0-9;]*[a-zA-Z]/g, '')\n .replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g, '')\n .replace(/\\n{6,}/g, '\\n\\n');\n}\n\nfunction lastUser(h: Message[]): string { for (let i = h.length - 1; i >= 0; i--) if (h[i].role === 'user' && h[i].content) return h[i].content!; return ''; }\n\nfunction computeSimpleDiff(oldText: string, newText: string, filePath: string): string {\n const oldLines = oldText.split('\\n');\n const newLines = newText.split('\\n');\n const maxLines = Math.max(oldLines.length, newLines.length);\n const result: string[] = [];\n let changeCount = 0;\n const contextLines = 3;\n\n for (let i = 0; i < maxLines; i++) {\n const oldLine = oldLines[i];\n const newLine = newLines[i];\n if (oldLine !== newLine) {\n changeCount++;\n const start = Math.max(0, i - contextLines);\n const end = Math.min(maxLines, i + contextLines + 1);\n if (result.length === 0 || result[result.length - 1] !== '...') {\n result.push(G(` @@ line ${i + 1} @@`));\n }\n for (let j = start; j < end; j++) {\n if (j === i) {\n if (oldLine !== undefined && newLine !== undefined) {\n result.push(r(` - ${oldLines[j]}`));\n result.push(g(` + ${newLines[j]}`));\n } else if (oldLine !== undefined) {\n result.push(r(` - ${oldLines[j]}`));\n } else {\n result.push(g(` + ${newLines[j]}`));\n }\n } else if (j < oldLines.length && j < newLines.length) {\n result.push(G(` ${oldLines[j]}`));\n }\n }\n result.push(G(' ...'));\n }\n }\n\n if (changeCount === 0) return G(' (无变更)');\n const rel = relative(process.cwd(), filePath);\n return `${G(`文件: ${rel} (${changeCount} 处变更)`)}\\n${result.join('\\n')}`;\n}\n\nfunction toolsToDefs(tools: Tool[]): ToolDef[] {\n return tools.map(t => ({ type: 'function' as const, function: { name: t.name, description: t.description, parameters: t.parameters as unknown as Record<string, unknown> } }));\n}\n\n// ========== Session commands ==========\n\nasync function saveSession(history: Message[], name?: string) {\n const label = name || new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);\n const file = join(SESSION_DIR, `sess_${label}.json`);\n writeFileSync(file, JSON.stringify({ savedAt: new Date().toISOString(), cwd: process.cwd(), messages: history }, null, 2), 'utf-8');\n O(g(`已保存: sess_${label}`) + '\\n\\n');\n}\n\nasync function listSessions() {\n if (!existsSync(SESSION_DIR)) { O(r('无保存的会话\\n\\n')); return; }\n const files = readdirSync(SESSION_DIR).filter(f => f.endsWith('.json') && !f.startsWith('_')).sort().reverse();\n if (!files.length) { O(r('无保存的会话\\n\\n')); return; }\n O(b(c(' Sessions')) + G(` · ${files.length} 个`) + '\\n');\n for (let i = 0; i < Math.min(files.length, 15); i++) {\n const f = files[i];\n try {\n const data = JSON.parse(readFileSync(join(SESSION_DIR, f), 'utf-8'));\n const label = f.replace(/^sess_|\\.json$/g, '');\n const msgCount = data.messages?.length || 0;\n const savedAt = data.savedAt?.slice(0, 16) || '?';\n O(G(` ${i + 1}. `) + c(label) + G(` · ${msgCount}条 · ${savedAt}`) + '\\n');\n } catch { O(G(` ${i + 1}. ${f} (损坏)\\n`)); }\n }\n O('\\n 加载: /load <name> | 恢复: /resume\\n\\n');\n}\n\nasync function loadNamedSession(history: Message[], name: string) {\n const file = join(SESSION_DIR, `sess_${name}.json`);\n if (!existsSync(file)) { O(r(`会话不存在: ${name}\\n\\n`)); return; }\n const data = JSON.parse(readFileSync(file, 'utf-8'));\n history.push({ role: 'system', content: `[已加载: ${name} (${data.messages?.length || 0} 条)]` });\n if (data.messages) for (const m of data.messages) history.push(m);\n trimHistory(history, MAX_HISTORY);\n O(g(`已加载: ${name}`) + '\\n\\n');\n}\n\nasync function loadLatestSession(history: Message[]) {\n if (!existsSync(SESSION_DIR)) { O(r('无保存的会话\\n\\n')); return; }\n const files = readdirSync(SESSION_DIR).filter(f => f.endsWith('.json') && !f.startsWith('_')).sort().reverse();\n if (!files.length) { O(r('无保存的会话\\n\\n')); return; }\n const file = join(SESSION_DIR, files[0]);\n const data = JSON.parse(readFileSync(file, 'utf-8'));\n const label = files[0].replace(/^sess_|\\.json$/g, '');\n history.push({ role: 'system', content: `[已加载: ${label} (${data.messages?.length || 0} 条)]` });\n if (data.messages) for (const m of data.messages) history.push(m);\n trimHistory(history, MAX_HISTORY);\n O(g(`已加载: ${label}`) + '\\n\\n');\n}\n\nasync function exportHistory(history: Message[]) {\n const file = join(process.cwd(), `deeper-export-${Date.now()}.json`);\n writeFileSync(file, JSON.stringify(history, null, 2), 'utf-8');\n O(g(`已导出: ${file}`) + '\\n\\n');\n}\n\nasync function initProject(): Promise<void> {\n const file = join(process.cwd(), 'deeper.md');\n if (existsSync(file)) {\n O(y(' deeper.md 已存在,跳过\\n\\n'));\n return;\n }\n const content = `# DeeperCode 项目上下文\n\n> 此文件由 \\`/init\\` 自动生成,AI 会在每次对话中自动读取。\n> 你可以手动编辑,添加项目规则、约定和背景信息。\n\n## 📁 项目名称\n\n<!-- 填写项目名称 -->\n\n## 🎯 项目目标\n\n<!-- 简要描述项目目的 -->\n\n## 🛠 技术栈\n\n<!-- 例如: React + TypeScript + Vite -->\n\n## 📐 代码规范\n\n<!-- 命名约定、文件组织等 -->\n\n## ⚙️ 常用命令\n\n<!-- npm run dev, npm test 等 -->\n\n## 📝 注意事项\n\n<!-- AI 需要注意的任何特殊要求 -->\n\n---\n\n*最后更新: ${new Date().toISOString()}*\n`;\n writeFileSync(file, content, 'utf-8');\n O(g('已创建: deeper.md') + G(' (可编辑后 AI 自动读取)') + '\\n\\n');\n}\n\n// ========== Display commands ==========\n\nasync function showTasks(): Promise<void> {\n const items = getTodos();\n if (items.length === 0) { O(G(' 任务列表为空\\n\\n')); return; }\n let total = 0, done = 0;\n for (const t of items) {\n total++; if (t.status === 'done') done++;\n if (t.subtasks) for (const st of t.subtasks) { total++; if (st.status === 'done') done++; }\n }\n O(b(c(' Tasks')) + G(` · ${done}/${total}`) + '\\n');\n let shown = 0; const MAX = 15;\n for (const t of items) {\n if (++shown > MAX) { O(G(' …\\n')); break; }\n const s = t.status === 'done' ? g('✓') : t.status === 'in_progress' ? y('◉') : t.status === 'cancelled' ? r('✗') : G('○');\n const plan = t.plan ? G(` → ${t.plan.slice(0, 30)}`) : '';\n O(` ${s} ${t.title.slice(0, 50)}${plan}\\n`);\n if (t.subtasks) for (const st of t.subtasks) {\n const ss = st.status === 'done' ? g(' ✓') : G(' ○');\n O(` ${ss} ${st.title.slice(0, 40)}\\n`);\n }\n }\n O('\\n');\n}\n\nasync function showMemory(): Promise<void> {\n const total = xmemory.totalEntries;\n const types = {\n semantic: xmemory.getByType('semantic', 3),\n procedural: xmemory.getByType('procedural', 3),\n episodic: xmemory.getByType('episodic', 3),\n working: xmemory.getWorking().slice(-3),\n };\n O(b(c(' XMemory')) + G(` · ${total} 条记忆`) + '\\n');\n for (const [t, entries] of Object.entries(types)) {\n if (entries.length === 0) continue;\n const label = t === 'semantic' ? '知识' : t === 'procedural' ? '技能' : t === 'episodic' ? '经历' : '工作';\n O(G(` [${label}]\\n`));\n for (const e of entries) { O(G(` ${e.content.slice(0, 120)}`) + '\\n'); }\n }\n O('\\n');\n}\n\nasync function showToolsBrief(tools: Tool[]): Promise<void> {\n const cats = [...new Set(tools.map(t => t.category))];\n for (const cat of cats.slice(0, 8)) {\n const ns = tools.filter(t => t.category === cat).map(t => t.name);\n O(B(`${cat}: `) + ns.join(', ') + '\\n');\n }\n O(c(`\\n /tools <category> 查看分类详情 (共 ${cats.length} 个分类)\\n\\n`));\n}\n\nasync function showToolsOf(cat: string, tools: Tool[]): Promise<void> {\n const filtered = tools.filter(t => t.category === cat);\n if (!filtered.length) { O(r(`分类不存在: ${cat}\\n\\n`)); return; }\n O(b(c(` ${cat}`)) + '\\n');\n for (const t of filtered) {\n const safe = TOOL_SAFETY_MAP[t.name] === 'dangerous' ? r('⚠') : TOOL_SAFETY_MAP[t.name] === 'confirm' ? y('?') : g('✓');\n O(` ${safe} ${c(t.name)} ${G(t.description.slice(0, 50))}\\n`);\n }\n O('\\n');\n}\n\nasync function loadBuiltinTools(): Promise<Tool[]> {\n const { builtinTools } = await import('../tools/builtin/index.js');\n return builtinTools as Tool[];\n}\n\n// ========== API (uses DeepSeekClient, no double retry) ==========\n\nasync function callApi(\n opts: ReplOptions, msgs: Array<Record<string, unknown>>,\n tools: ToolDef[], cmt = 8192, signal?: AbortSignal,\n): Promise<AsyncIterable<StreamChunk>> {\n const client = new DeepSeekClient({\n apiKey: opts.apiKey || '',\n model: opts.model || 'deepseek-chat',\n baseUrl: opts.baseUrl || 'https://api.deepseek.com',\n temperature: opts.temperature ?? 0,\n maxTokens: cmt,\n think: { enabled: true, budgetTokens: cmt },\n signal,\n });\n const chatMsgs: ChatMessage[] = msgs.map(m => ({\n role: (m.role as ChatMessage['role']) || 'user',\n content: m.content != null ? String(m.content) : null,\n tool_calls: m.tool_calls as ChatMessage['tool_calls'],\n tool_call_id: m.tool_call_id as string | undefined,\n name: m.name as string | undefined,\n reasoning_content: m.reasoning_content as string | undefined,\n thinking: m.thinking as string | undefined,\n }));\n const stream = await client.chatStream(chatMsgs, tools.map(t => ({\n name: t.function.name,\n description: t.function.description,\n category: '',\n parameters: t.function.parameters as unknown as import('../tools/tool-types.js').JSONSchema,\n })));\n return stream;\n}\n","import { getConfig, loadConfig } from '../../core/config.ts';\n\ninterface ChatOptions {\n model?: string;\n apiKey?: string;\n verbose?: boolean;\n autoRun?: string;\n}\n\nexport async function chat(opts: ChatOptions = {}): Promise<void> {\n const config = getConfig() || loadConfig();\n\n const apiKey = opts.apiKey || config.apiKey || process.env.DEEPSEEK_API_KEY || '';\n if (!apiKey) {\n console.error('❌ 未设置 API Key');\n console.error('');\n console.error(' 请运行以下命令之一:');\n console.error(' deeper config set api_key \"sk-你的密钥\"');\n console.error(' 或设置环境变量: set DEEPSEEK_API_KEY=sk-你的密钥');\n console.error('');\n console.error(' 获取密钥: https://platform.deepseek.com');\n process.exit(1);\n }\n\n const model = opts.model || config.model || 'deepseek-v4-pro';\n const baseUrl = config.baseUrl || 'https://api.deepseek.com';\n const isFlash = model.includes('flash');\n\n const { startRepl } = await import('../chat-repl.js');\n await startRepl({\n apiKey,\n model,\n baseUrl,\n maxTokens: 8192,\n temperature: config.temperature ?? (isFlash ? 0.3 : 0.7),\n thinkEnabled: config.thinkEnabled ?? !isFlash,\n thinkBudget: config.thinkBudget ?? (isFlash ? 0 : 16000),\n });\n}\n","#!/usr/bin/env node\nimport { parseArgs } from 'node:util';\nimport { DEEPER_VERSION } from '../core/constants.ts';\n\nasync function main() {\n const args = process.argv.slice(2);\n\n if (args.length === 0) {\n return startChat({});\n }\n\n const { values, positionals } = parseArgs({\n args,\n options: {\n help: { type: 'boolean', short: 'h' },\n version: { type: 'boolean', short: 'v' },\n model: { type: 'string', short: 'm' },\n 'api-key': { type: 'string', short: 'k' },\n verbose: { type: 'boolean' },\n 'auto-run': { type: 'string' },\n },\n allowPositionals: true,\n });\n\n if (values.help) {\n showHelp();\n return;\n }\n\n if (values.version) {\n console.log(`DeeperCode v${DEEPER_VERSION}`);\n return;\n }\n\n const command = positionals[0];\n const commandArgs = positionals.slice(1);\n\n const globalOpts = {\n model: values.model || process.env.DEEPER_MODEL,\n apiKey: values['api-key'] || process.env.DEEPSEEK_API_KEY,\n verbose: values.verbose,\n };\n\n switch (command) {\n case 'chat':\n case 'repl': {\n await startChat({\n ...globalOpts,\n autoRun: values['auto-run'],\n });\n break;\n }\n\n case 'run':\n case 'exec': {\n const task = commandArgs.join(' ');\n if (!task) {\n console.error('❌ 请提供任务描述');\n console.error(' 用法: deeper run \"任务描述\"');\n process.exit(1);\n }\n const { run } = await import('./commands/run.ts');\n await run(task, globalOpts);\n break;\n }\n\n case 'config': {\n const { configCommand } = await import('./commands/config.ts');\n await configCommand(commandArgs);\n break;\n }\n\n case 'skill':\n case 'skills': {\n const { skillCommand } = await import('./commands/skill.ts');\n await skillCommand(commandArgs);\n break;\n }\n\n case 'mcp': {\n const { mcpCommand } = await import('./commands/mcp.ts');\n await mcpCommand(commandArgs);\n break;\n }\n\n case 'version': {\n console.log(`DeeperCode v${DEEPER_VERSION}`);\n break;\n }\n\n default: {\n const task = positionals.join(' ').trim();\n if (task) {\n const { run } = await import('./commands/run.ts');\n await run(task, globalOpts);\n } else {\n console.error(`未知命令: ${positionals[0] || ''}`);\n console.error('使用 --help 查看帮助');\n process.exit(1);\n }\n }\n }\n}\n\nasync function startChat(opts: {\n model?: string;\n apiKey?: string;\n verbose?: boolean;\n autoRun?: string;\n}) {\n const { chat } = await import('./commands/chat.js');\n await chat(opts);\n}\n\nfunction showHelp() {\n console.log(`\n██████╗ ███████╗███████╗██████╗ ███████╗██████╗\n██╔══██╗██╔════╝██╔════╝██╔══██╗██╔════╝██╔══██╗\n██║ ██║█████╗ █████╗ ██████╔╝█████╗ ██████╔╝\n██║ ██║██╔══╝ ██╔══╝ ██╔═══╝ ██╔══╝ ██╔══██╗\n██████╔╝███████╗███████╗██║ ███████╗██║ ██║\n╚═════╝ ╚══════╝╚══════╝╚═╝ ╚══════╝╚═╝ ╚═╝\n██████╗ ██████╗ ██████╗ ███████╗\n██╔════╝██╔═══██╗██╔══██╗██╔════╝\n██║ ██║ ██║██║ ██║█████╗\n██║ ██║ ██║██║ ██║██╔══╝\n╚██████╗╚██████╔╝██████╔╝███████╗\n ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝\n\nDeeperCode v${DEEPER_VERSION} - 一句话生成完整项目的 AI Agentic CLI 工具\n\n用法:\n deeper [options] 启动交互式 REPL\n deeper chat [options] 启动聊天模式\n deeper run \"任务描述\" [options] 单次执行任务\n deeper config <subcommand> 配置管理\n deeper skill <subcommand> Skill 管理\n deeper mcp <subcommand> MCP 管理\n\n选项:\n -h, --help 显示帮助信息\n -v, --version 显示版本号\n -m, --model <model> 指定模型 (默认: deepseek-v4-pro, 可选: v4-flash)\n -k, --api-key <key> 指定 API Key\n --verbose 详细输出模式\n --auto-run <task> 自动运行任务后进入 REPL\n\n子命令:\n deeper config list 列出配置\n deeper config set <key> <value> 设置配置\n deeper config get <key> 获取配置\n deeper config reset 重置配置\n\n deeper skill list 列出 Skills\n deeper skill create <name> 创建 Skill\n\n deeper mcp list 列出 MCP 服务器\n deeper mcp add <name> ... 添加 MCP 服务器\n deeper mcp remove <name> 移除 MCP 服务器\n\n环境变量:\n DEEPSEEK_API_KEY DeepSeek API Key\n DEEPER_HOME DeeperCode 数据目录 (默认: ~/.deeper)\n DEEPER_MODEL 默认模型名称\n\n内存:\n 如遇 OOM,使用 node --max-old-space-size=4096 $(which deeper) 启动\n Windows: set NODE_OPTIONS=--max-old-space-size=4096 && deeper\n\n示例:\n deeper 启动交互式 REPL\n deeper run \"创建一个 React 应用\" 单次执行\n deeper --model deepseek-v4-pro -k sk-xxxx 指定模型和密钥\n deeper --model deepseek-v4-flash 使用快速模型\n deeper config set theme light 切换亮色主题\n\n使用 DeepSeek-V4-Pro 驱动 | 105+ 内置工具 | 强大的 Agent 系统\n`);\n}\n\nmain().catch((err) => {\n console.error('❌ 启动失败:', err instanceof Error ? err.message : String(err));\n process.exit(1);\n});\n"],"mappings":"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BAAI,CAAC,MAAO,QAAO,EAAE,SAAS,OAAO,OAAO,0CAAsB,QAAQ,GAAG;AAC7E,oBAAM,UAAU,SACb,IAAI,CAAC,MAAM,MAAM,KAAK,SAAS,KAAK,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,IAAI,EACxE,OAAO,OAAO,EACd,MAAM,GAAG,GAAG;AACf,qBAAO;AAAA,gBACL,SAAS;AAAA,gBACT,QAAQ,QAAQ,KAAK,IAAI,KAAK;AAAA,gBAC9B,UAAU,EAAE,SAAS,QAAQ,QAAQ,YAAY,SAAS,OAAO;AAAA,cACnE;AAAA,YACF;AAAA,YACA;AACE,qBAAO,EAAE,SAAS,OAAO,OAAO,yCAAW,MAAM,IAAI,QAAQ,GAAG;AAAA,UACpE;AAAA,QACF,SAAS,KAAc;AACrB,iBAAO,EAAE,SAAS,OAAO,OAAQ,IAAc,SAAS,QAAQ,GAAG;AAAA,QACrE;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACxFA;AAAA;AAAA;AAAA;AAAA;AAAA,IAyHa;AAzHb;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEO,IAAM,eAAuB;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;A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","names":["process","join","process","existsSync","mkdirSync","config_exports","KEY_ALIASES","init_config","existsSync","readFileSync","mkdirSync","writeFileSync","join","existsSync","readFileSync","existsSync","mkdirSync","readFileSync","writeFileSync","join","c","b","r","c","r","uid","c","done","total","readFileSync","existsSync","resolve","existsSync","join","existsSync","join","parseSimpleYaml","readFile","d","b","eventbus","resolve","eventbus","c","resolve","resolve","finishReason","b","existsSync","mkdirSync","join","dirname","r","process","b","A","readFileSync","existsSync","statSync","existsSync","mkdirSync","writeFile","dirname","resolve","readFileSync","writeFileSync","existsSync","resolve","existsSync","resolve","readdirSync","existsSync","resolve","join","walk","statSync","resolve","fg","existsSync","resolve","dirname","mkdirSync","existsSync","mkdirSync","resolve","dirname","mkdirSync","existsSync","resolve","existsSync","resolve","existsSync","resolve","readFileSync","existsSync","resolve","r","existsSync","mkdirSync","writeFile","resolve","dirname","readFileSync","existsSync","resolve","readFileSync","writeFileSync","existsSync","resolve","readFileSync","existsSync","statSync","resolve","searchFile","fg","pattern","readFileSync","statSync","resolve","fg","b","r","readFileSync","statSync","resolve","relative","fg","readFileSync","statSync","resolve","relative","fg","r","readFileSync","statSync","resolve","relative","escapeRegex","fg","r","readFileSync","resolve","fg","resolve","fg","r","b","readFileSync","writeFileSync","existsSync","resolve","fg","spawn","d","spawn","resolve","spawn","d","resolve","pipeline","existsSync","execCb","promisify","resolve","execAsync","getProcess","cheerio","r","existsSync","mkdirSync","dirname","resolve","formatSize","resolve","shouldExtract","readFileSync","existsSync","resolve","readFileSync","existsSync","resolve","execSync","execSync","resolve","execSync","resolve","readFileSync","existsSync","resolve","escapeRegex","readFileSync","existsSync","resolve","escapeRegex","readFileSync","resolve","fg","r","readFileSync","existsSync","resolve","readFileSync","statSync","resolve","relative","fg","existsSync","readFileSync","statSync","basename","r","statSync","join","b","execSync","execSync","execSync","execSync","execSync","execSync","backupFile","execSync","readFileSync","existsSync","resolve","readFileSync","existsSync","resolve","readFileSync","existsSync","resolve","readFileSync","existsSync","resolve","readFileSync","existsSync","resolve","readFileSync","existsSync","resolve","writeFileSync","b","readFileSync","existsSync","writeFileSync","resolve","escapeRegex","readFileSync","resolve","fg","readFileSync","writeFileSync","existsSync","mkdirSync","resolve","dirname","readFileSync","writeFileSync","existsSync","mkdirSync","resolve","dirname","readFileSync","existsSync","resolve","execSync","execSync","execSync","execSync","readFileSync","existsSync","resolve","execSync","readFileSync","existsSync","resolve","execSync","readFileSync","writeFileSync","existsSync","resolve","readFileSync","writeFileSync","existsSync","resolve","execSync","existsSync","resolve","readFileSync","existsSync","resolve","mkdirSync","existsSync","writeFile","join","readFileSync","writeFileSync","existsSync","mkdirSync","join","unlinkSync","readdirSync","execSync","c","r","execSync","readFileSync","existsSync","resolve","writeFileSync","process","existsSync","mkdirSync","readFileSync","writeFileSync","readdirSync","statSync","copyFileSync","unlinkSync","join","relative","execSync","setSubagentRunner","run","r","getConfig","b","A","s","builtinTools","startRepl","run","configCommand","skillCommand","mcpCommand","chat"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/constants.ts","../../src/core/config.ts","../../src/cli/bootstrap.ts","../../src/cli/commands/run.ts","../../src/cli/commands/config.ts","../../src/cli/commands/skill.ts","../../src/cli/commands/mcp.ts","../../src/tools/tool-types.ts","../../src/tools/ToolValidator.ts","../../src/memory/xmemory.ts","../../src/ui/markdown.ts","../../src/tools/builtin/ai/todo_manager.ts","../../src/tools/builtin/ai/token_count.ts","../../src/skills/SkillRegistry.ts","../../src/skills/SkillLoader.ts","../../src/skills/SkillExecutor.ts","../../src/skills/SkillCreator.ts","../../src/skills/SkillTrigger.ts","../../src/core/eventbus.ts","../../src/skills/SkillEngine.ts","../../src/mcp/StdioTransport.ts","../../src/mcp/SSETransport.ts","../../src/mcp/ToolAdapter.ts","../../src/mcp/ResourceAdapter.ts","../../src/mcp/MCPClient.ts","../../src/model/RetryManager.ts","../../src/model/StreamHandler.ts","../../src/core/logger.ts","../../src/model/DeepSeekClient.ts","../../src/ui/ansi.ts","../../src/tools/builtin/filesystem/read_file.ts","../../src/tools/builtin/filesystem/write_file.ts","../../src/tools/builtin/filesystem/edit_file.ts","../../src/tools/builtin/filesystem/delete_file.ts","../../src/tools/builtin/filesystem/list_dir.ts","../../src/tools/builtin/filesystem/glob_find.ts","../../src/tools/builtin/filesystem/move_file.ts","../../src/tools/builtin/filesystem/copy_file.ts","../../src/tools/builtin/filesystem/create_dir.ts","../../src/tools/builtin/filesystem/file_info.ts","../../src/tools/builtin/filesystem/watch_file.ts","../../src/tools/builtin/filesystem/batch_read.ts","../../src/tools/builtin/filesystem/batch_write.ts","../../src/tools/builtin/filesystem/diff_files.ts","../../src/tools/builtin/filesystem/merge_files.ts","../../src/tools/builtin/search/grep_search.ts","../../src/tools/builtin/search/codebase_search.ts","../../src/tools/builtin/search/symbol_search.ts","../../src/tools/builtin/search/find_references.ts","../../src/tools/builtin/search/find_definition.ts","../../src/tools/builtin/search/text_search.ts","../../src/tools/builtin/search/fuzzy_find.ts","../../src/tools/builtin/search/regex_find.ts","../../src/tools/builtin/search/search_package.ts","../../src/tools/builtin/search/search_docs.ts","../../src/tools/builtin/shell/process-pool.ts","../../src/tools/builtin/shell/run_command.ts","../../src/tools/builtin/shell/run_async.ts","../../src/tools/builtin/shell/check_status.ts","../../src/tools/builtin/shell/stop_command.ts","../../src/tools/builtin/shell/pipe_commands.ts","../../src/tools/builtin/shell/shell_script.ts","../../src/tools/builtin/shell/background_terminal.ts","../../src/tools/builtin/shell/send_keys.ts","../../src/tools/builtin/shell/send_ctrl_keys.ts","../../src/tools/builtin/shell/send_text.ts","../../src/tools/builtin/shell/terminal_screenshot.ts","../../src/tools/builtin/shell/terminal_resize.ts","../../src/tools/builtin/shell/list_terminals.ts","../../src/tools/builtin/shell/kill_terminal.ts","../../src/tools/builtin/shell/interactive_terminal.ts","../../src/tools/builtin/network/web_fetch.ts","../../src/tools/builtin/network/web_search.ts","../../src/tools/builtin/network/http_request.ts","../../src/tools/builtin/network/download_file.ts","../../src/tools/builtin/network/api_call.ts","../../src/tools/builtin/network/graphql_query.ts","../../src/tools/builtin/network/websocket_connect.ts","../../src/tools/builtin/network/check_url.ts","../../src/tools/builtin/network/screenshot_page.ts","../../src/tools/builtin/network/parse_html.ts","../../src/tools/builtin/network/browser_action.ts","../../src/tools/builtin/network/proxy_request.ts","../../src/tools/builtin/code/parse_ast.ts","../../src/tools/builtin/code/format_code.ts","../../src/tools/builtin/code/lint_code.ts","../../src/tools/builtin/code/type_check.ts","../../src/tools/builtin/code/generate_code.ts","../../src/tools/builtin/code/refactor_code.ts","../../src/tools/builtin/code/extract_function.ts","../../src/tools/builtin/code/analyze_deps.ts","../../src/tools/builtin/code/import_organizer.ts","../../src/tools/builtin/code/code_metrics.ts","../../src/core/bugscan.ts","../../src/tools/builtin/code/bug_scan.ts","../../src/tools/builtin/database/sql_query.ts","../../src/tools/builtin/database/sql_migrate.ts","../../src/tools/builtin/database/nosql_query.ts","../../src/tools/builtin/database/db_schema.ts","../../src/tools/builtin/database/db_backup.ts","../../src/tools/builtin/database/db_restore.ts","../../src/tools/builtin/database/redis_command.ts","../../src/tools/builtin/database/orm_generate.ts","../../src/tools/builtin/data/json_parse.ts","../../src/tools/builtin/data/csv_parse.ts","../../src/tools/builtin/data/xml_parse.ts","../../src/tools/builtin/data/yaml_parse.ts","../../src/tools/builtin/data/toml_parse.ts","../../src/tools/builtin/data/data_transform.ts","../../src/tools/builtin/data/data_validate.ts","../../src/tools/builtin/data/data_diff.ts","../../src/tools/builtin/data/template_render.ts","../../src/tools/builtin/data/chart_generate.ts","../../src/tools/builtin/security/secret_scan.ts","../../src/tools/builtin/security/encrypt_file.ts","../../src/tools/builtin/security/decrypt_file.ts","../../src/tools/builtin/security/hash_generate.ts","../../src/tools/builtin/security/jwt_decode.ts","../../src/tools/builtin/security/vulnerability_check.ts","../../src/tools/builtin/project/npm_manage.ts","../../src/tools/builtin/project/project_init.ts","../../src/tools/builtin/project/build_project.ts","../../src/tools/builtin/project/run_test.ts","../../src/tools/builtin/project/coverage_report.ts","../../src/tools/builtin/project/env_manage.ts","../../src/tools/builtin/project/config_manage.ts","../../src/tools/builtin/project/docker_manage.ts","../../src/tools/builtin/ai/context_summarize.ts","../../src/tools/builtin/ai/prompt_template.ts","../../src/tools/builtin/ai/skill_create.ts","../../src/tools/builtin/ai/tool_create.ts","../../src/tools/builtin/ai/memory_store.ts","../../src/tools/builtin/ai/subagent.ts","../../src/tools/builtin/system/process_list.ts","../../src/tools/builtin/system/system_info.ts","../../src/tools/builtin/system/resource_monitor.ts","../../src/tools/builtin/system/notify_user.ts","../../src/tools/builtin/system/log_viewer.ts","../../src/tools/builtin/index.ts","../../src/cli/chat-repl.ts","../../src/cli/commands/chat.ts","../../src/cli/index.ts"],"sourcesContent":["import { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport process from 'node:process';\n\nexport const DEEPER_VERSION = '1.0.0';\nexport const DEEPER_NAME = 'DeeperCode';\nexport const DEEPER_HOME = join(process.env.DEEPER_HOME || join(homedir(), '.deeper'));\nexport const DEEPER_CONFIG_FILE = join(DEEPER_HOME, 'config.json');\nexport const DEEPER_MCP_FILE = join(DEEPER_HOME, 'mcp.json');\nexport const DEEPER_SKILLS_DIR = join(DEEPER_HOME, 'skills');\nexport const DEEPER_SESSIONS_DIR = join(DEEPER_HOME, 'sessions');\nexport const DEEPER_LOGS_DIR = join(DEEPER_HOME, 'logs');\nexport const DEEPER_MEMORY_FILE = join(DEEPER_HOME, 'memory.json');\nexport const PROJECT_CONFIG_DIR = '.deeper';\nexport const PROJECT_CONFIG_FILE = join(PROJECT_CONFIG_DIR, 'config.json');\nexport const PROJECT_SKILLS_DIR = join(PROJECT_CONFIG_DIR, 'skills');\n\nexport const DEEPSEEK_BASE_URL = 'https://api.deepseek.com';\nexport const DEEPSEEK_DEFAULT_MODEL = 'deepseek-v4-pro';\nexport const DEEPSEEK_MODELS = ['deepseek-v4-pro', 'deepseek-v4-flash'] as const;\nexport type DeepSeekModel = typeof DEEPSEEK_MODELS[number];\nexport const DEEPSEEK_MAX_TOKENS = 1_048_576;\nexport const DEEPSEEK_THINK_BUDGET = 16000;\n\nexport const AGENT_MAX_SUB_AGENTS = 5;\nexport const AGENT_MAX_RECURSION_DEPTH = 2;\nexport const AGENT_SUB_AGENT_TIMEOUT_MS = 120000;\nexport const AGENT_MAX_CONCURRENT_TOOLS = 3;\n\nexport const CONTEXT_MAX_TOKENS = 1_048_576;\nexport const CONTEXT_AUTO_SUMMARIZE_THRESHOLD = 786_432;\nexport const CONTEXT_HISTORY_SIZE = 80;\nexport const CONTEXT_FILE_LIMIT = 50_000;\n\nexport const CONTEXT_COMPRESSION_STAGES = [\n { threshold: 0.7, strategy: 'light' },\n { threshold: 0.85, strategy: 'aggressive' },\n { threshold: 0.95, strategy: 'emergency' },\n] as const;\n\nexport const MCP_CONNECTION_TIMEOUT_MS = 10000;\n\nexport const TOOL_CATEGORIES = [\n 'filesystem', 'search', 'shell', 'network',\n 'code', 'database', 'data', 'security',\n 'project', 'ai', 'system',\n] as const;\n\nexport type ToolCategory = typeof TOOL_CATEGORIES[number];\n","import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport process from 'node:process';\nimport { DEEPER_CONFIG_FILE, PROJECT_CONFIG_FILE, DEEPSEEK_DEFAULT_MODEL, DEEPSEEK_BASE_URL } from './constants.js';\n\nexport interface MCPConfigEntry {\n name: string;\n command?: string;\n args?: string[];\n url?: string;\n enabled: boolean;\n autoConnect: boolean;\n}\n\nexport interface SkillConfigEntry {\n name: string;\n path: string;\n enabled: boolean;\n autoLoad: boolean;\n}\n\nexport interface DeeperConfig {\n model: string;\n apiKey: string;\n baseUrl: string;\n temperature: number;\n maxTokens: number;\n thinkEnabled: boolean;\n thinkBudget: number;\n thinkBudgetTokens: number;\n logLevel: string;\n maxRetries: number;\n timeoutMs: number;\n maxSubAgents: number;\n maxRecursionDepth: number;\n theme: 'dark' | 'light';\n locale: string;\n mcpServers: MCPConfigEntry[];\n skills: SkillConfigEntry[];\n [key: string]: unknown;\n}\n\nconst DEFAULT_CONFIG: DeeperConfig = {\n model: DEEPSEEK_DEFAULT_MODEL,\n apiKey: process.env.DEEPSEEK_API_KEY || '',\n baseUrl: DEEPSEEK_BASE_URL,\n temperature: 0.7,\n maxTokens: 8192,\n thinkEnabled: true,\n thinkBudget: 32000,\n thinkBudgetTokens: 32000,\n logLevel: 'info',\n maxRetries: 3,\n timeoutMs: 120000,\n maxSubAgents: 5,\n maxRecursionDepth: 2,\n theme: 'dark',\n locale: 'zh-CN',\n mcpServers: [],\n skills: [],\n};\n\nconst PROJECT_CONFIG_PATH = join(process.cwd(), PROJECT_CONFIG_FILE);\nconst USER_CONFIG_PATH = DEEPER_CONFIG_FILE;\n\nexport class ConfigManager {\n private defaults: DeeperConfig;\n private userConfig: Partial<DeeperConfig>;\n private projectConfig: Partial<DeeperConfig>;\n private envOverrides: Partial<DeeperConfig>;\n private cliOverrides: Partial<DeeperConfig>;\n\n constructor() {\n this.defaults = { ...DEFAULT_CONFIG };\n this.userConfig = {};\n this.projectConfig = {};\n this.envOverrides = {};\n this.cliOverrides = {};\n }\n\n load(): void {\n this.userConfig = this.readJSONFile(USER_CONFIG_PATH);\n this.projectConfig = this.readJSONFile(PROJECT_CONFIG_PATH);\n this.envOverrides = this.readEnvOverrides();\n }\n\n save(scope: 'user' | 'project'): void {\n const configPath = scope === 'user' ? USER_CONFIG_PATH : PROJECT_CONFIG_PATH;\n const currentConfig = scope === 'user' ? this.userConfig : this.projectConfig;\n const dir = dirname(configPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(configPath, JSON.stringify(currentConfig, null, 2), 'utf-8');\n }\n\n get<K extends keyof DeeperConfig>(key: K): DeeperConfig[K] {\n if (key in this.cliOverrides) {\n return this.cliOverrides[key] as DeeperConfig[K];\n }\n if (key in this.envOverrides) {\n return this.envOverrides[key] as DeeperConfig[K];\n }\n if (key in this.projectConfig) {\n return this.projectConfig[key] as DeeperConfig[K];\n }\n if (key in this.userConfig) {\n return this.userConfig[key] as DeeperConfig[K];\n }\n return this.defaults[key];\n }\n\n set<K extends keyof DeeperConfig>(key: K, value: DeeperConfig[K], scope: 'cli' | 'project' | 'user'): void {\n switch (scope) {\n case 'cli':\n this.cliOverrides[key] = value;\n break;\n case 'project':\n this.projectConfig[key] = value;\n break;\n case 'user':\n this.userConfig[key] = value;\n break;\n }\n }\n\n setCliOverrides(overrides: Partial<DeeperConfig>): void {\n this.cliOverrides = { ...overrides };\n }\n\n getAll(): DeeperConfig {\n return {\n ...this.defaults,\n ...this.userConfig,\n ...this.projectConfig,\n ...this.envOverrides,\n ...this.cliOverrides,\n };\n }\n\n private readJSONFile(path: string): Partial<DeeperConfig> {\n try {\n if (existsSync(path)) {\n const content = readFileSync(path, 'utf-8');\n return JSON.parse(content) as Partial<DeeperConfig>;\n }\n } catch {\n }\n return {};\n }\n\n private readEnvOverrides(): Partial<DeeperConfig> {\n const overrides: Partial<DeeperConfig> = {};\n const envMap: Record<string, keyof DeeperConfig> = {\n DEEPER_MODEL: 'model',\n DEEPER_API_KEY: 'apiKey',\n DEEPER_BASE_URL: 'baseUrl',\n DEEPER_TEMPERATURE: 'temperature',\n DEEPER_MAX_TOKENS: 'maxTokens',\n DEEPER_THINK_ENABLED: 'thinkEnabled',\n DEEPER_THINK_BUDGET: 'thinkBudget',\n DEEPER_LOG_LEVEL: 'logLevel',\n DEEPER_MAX_RETRIES: 'maxRetries',\n DEEPER_TIMEOUT: 'timeoutMs',\n };\n\n for (const [envKey, configKey] of Object.entries(envMap)) {\n const value = process.env[envKey];\n if (value !== undefined) {\n switch (typeof DEFAULT_CONFIG[configKey]) {\n case 'number':\n (overrides as Record<string, unknown>)[configKey] = Number(value);\n break;\n case 'boolean':\n (overrides as Record<string, unknown>)[configKey] = value.toLowerCase() === 'true' || value === '1';\n break;\n default:\n (overrides as Record<string, unknown>)[configKey] = value;\n break;\n }\n }\n }\n\n return overrides;\n }\n}\n\nlet cachedConfig: DeeperConfig | null = null;\n\nconst KEY_ALIASES: Record<string, keyof DeeperConfig> = {\n api_key: 'apiKey',\n 'api-key': 'apiKey',\n base_url: 'baseUrl',\n 'base-url': 'baseUrl',\n max_tokens: 'maxTokens',\n 'max-tokens': 'maxTokens',\n think_enabled: 'thinkEnabled',\n 'think-enabled': 'thinkEnabled',\n think_budget: 'thinkBudget',\n 'think-budget': 'thinkBudget',\n log_level: 'logLevel',\n 'log-level': 'logLevel',\n max_retries: 'maxRetries',\n 'max-retries': 'maxRetries',\n timeout_ms: 'timeoutMs',\n 'timeout-ms': 'timeoutMs',\n max_sub_agents: 'maxSubAgents',\n 'max-sub-agents': 'maxSubAgents',\n max_recursion_depth: 'maxRecursionDepth',\n 'max-recursion-depth': 'maxRecursionDepth',\n mcp_servers: 'mcpServers',\n 'mcp-servers': 'mcpServers',\n};\n\nfunction normalizeConfig(raw: Record<string, unknown>): Partial<DeeperConfig> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(raw)) {\n const canonical = KEY_ALIASES[key] || key;\n result[canonical] = value;\n }\n return result as Partial<DeeperConfig>;\n}\n\nexport function loadConfig(): DeeperConfig {\n if (cachedConfig) return cachedConfig;\n try {\n if (existsSync(DEEPER_CONFIG_FILE)) {\n const raw = readFileSync(DEEPER_CONFIG_FILE, 'utf-8');\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n cachedConfig = { ...DEFAULT_CONFIG, ...normalizeConfig(parsed) };\n } else {\n cachedConfig = { ...DEFAULT_CONFIG };\n }\n } catch {\n cachedConfig = { ...DEFAULT_CONFIG };\n }\n return cachedConfig;\n}\n\nexport function saveConfig(config?: DeeperConfig): void {\n if (config) cachedConfig = { ...config };\n if (!cachedConfig) cachedConfig = { ...DEFAULT_CONFIG };\n const dir = dirname(DEEPER_CONFIG_FILE);\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n writeFileSync(DEEPER_CONFIG_FILE, JSON.stringify(cachedConfig, null, 2), 'utf-8');\n}\n\nexport function getConfig(): DeeperConfig {\n return cachedConfig ?? loadConfig();\n}\n\nexport function updateConfig(partial: Partial<DeeperConfig>): DeeperConfig {\n const current = getConfig();\n cachedConfig = { ...current, ...partial };\n saveConfig();\n return cachedConfig;\n}\n\nexport function resetConfig(): DeeperConfig {\n cachedConfig = { ...DEFAULT_CONFIG };\n saveConfig();\n return cachedConfig;\n}\n\nexport function getConfigValue<K extends keyof DeeperConfig>(key: K): DeeperConfig[K] {\n return getConfig()[key];\n}\n\nexport function setConfigValue<K extends keyof DeeperConfig>(key: K, value: DeeperConfig[K]): void {\n updateConfig({ [key]: value } as unknown as Partial<DeeperConfig>);\n}\n\nexport function getApiKey(): string {\n return getConfig().apiKey || process.env.DEEPSEEK_API_KEY || '';\n}\n\nexport function getModel(): string {\n return getConfig().model;\n}\n\nexport function getBaseUrl(): string {\n return getConfig().baseUrl;\n}\n\nexport const configManager = { load: () => loadConfig(), save: saveConfig, get: getConfigValue, set: setConfigValue, getAll: getConfig };\n","import { existsSync, mkdirSync } from 'node:fs';\nimport { DEEPER_HOME, DEEPER_CONFIG_FILE, DEEPER_SKILLS_DIR, DEEPER_SESSIONS_DIR, DEEPER_LOGS_DIR, DEEPER_VERSION } from '../core/constants.ts';\nimport { loadConfig } from '../core/config.ts';\nimport { eventbus } from '../core/eventbus.ts';\n\nexport interface BootstrapResult {\n success: boolean;\n errors: string[];\n warnings: string[];\n config: ReturnType<typeof loadConfig>;\n}\n\nexport async function bootstrap(): Promise<BootstrapResult> {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n const nodeVersion = process.versions.node;\n const majorVersion = parseInt(nodeVersion.split('.')[0], 10);\n if (majorVersion < 20) {\n errors.push(`Node.js 版本过低: ${nodeVersion},需要 >= 20.0.0`);\n return { success: false, errors, warnings, config: loadConfig() };\n }\n\n const dirs = [\n DEEPER_HOME,\n DEEPER_SKILLS_DIR,\n DEEPER_SESSIONS_DIR,\n DEEPER_LOGS_DIR,\n ];\n\n for (const dir of dirs) {\n try {\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n } catch {\n errors.push(`无法创建目录: ${dir}`);\n }\n }\n\n let config;\n try {\n config = loadConfig();\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n errors.push(`配置加载失败: ${msg}`);\n config = loadConfig();\n }\n\n if (!config.apiKey && !process.env.DEEPSEEK_API_KEY) {\n warnings.push('未设置 API Key。请运行: deeper config set api_key \"sk-你的密钥\"');\n }\n\n if (errors.length > 0) {\n return { success: false, errors, warnings, config };\n }\n\n return { success: true, errors, warnings, config };\n}\n\nexport function checkNodeVersion(): boolean {\n const nodeVersion = process.versions.node;\n const majorVersion = parseInt(nodeVersion.split('.')[0], 10);\n return majorVersion >= 20;\n}\n\nexport function getVersionInfo(): string {\n return `DeeperCode v${DEEPER_VERSION} | Node.js ${process.versions.node} | ${process.platform} ${process.arch}`;\n}\n","import { loadConfig } from '../../core/config.ts';\nimport { bootstrap } from '../bootstrap.ts';\nimport type { DeeperConfig } from '../../core/config.ts';\n\ninterface RunOptions {\n task?: string;\n model?: string;\n apiKey?: string;\n files?: string[];\n}\n\nexport async function run(task: string, opts: RunOptions = {}): Promise<void> {\n const result = await bootstrap();\n\n if (!result.success) {\n for (const err of result.errors) {\n console.error(`❌ ${err}`);\n }\n process.exit(1);\n }\n\n if (!task) {\n console.error('❌ 请提供任务描述。用法: deeper run \"任务描述\"');\n process.exit(1);\n }\n\n const config = opts.model || opts.apiKey\n ? { ...result.config, ...(opts.model ? { model: opts.model } : {}), ...(opts.apiKey ? { apiKey: opts.apiKey } : {}) }\n : result.config;\n\n if (!config.apiKey && !process.env.DEEPSEEK_API_KEY) {\n console.error('❌ 未设置 API Key');\n console.error(' 请设置环境变量 DEEPSEEK_API_KEY 或使用 --api-key 参数');\n process.exit(1);\n }\n\n console.log(`\\n🚀 DeeperCode 执行任务\\n`);\n console.log(`📋 任务: ${task}`);\n console.log(`🤖 模型: ${config.model}`);\n console.log(`🔗 API: ${config.baseUrl}`);\n console.log();\n\n console.log('⏳ 正在连接 DeepSeek API...');\n console.log();\n\n try {\n const apiKey = config.apiKey || process.env.DEEPSEEK_API_KEY || '';\n const response = await fetch(`${config.baseUrl}/v1/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({\n model: config.model,\n messages: [\n {\n role: 'system',\n content: '你是一个强大的 AI 编程助手。请帮助用户完成任务。',\n },\n {\n role: 'user',\n content: task,\n },\n ],\n stream: true,\n max_tokens: Math.max(1, Math.min(config.maxTokens || 4096, 131072)),\n }),\n });\n\n if (!response.ok) {\n const text = await response.text();\n console.error(`❌ API 请求失败 (${response.status}): ${text}`);\n process.exit(1);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n console.error('❌ 无法读取响应流');\n process.exit(1);\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n let fullContent = '';\n let thinkingContent = '';\n\n console.log('📝 AI 响应:\\n');\n console.log('─'.repeat(60));\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed.startsWith('data: ')) continue;\n\n const data = trimmed.slice(6);\n if (data === '[DONE]') continue;\n\n try {\n const parsed = JSON.parse(data);\n const delta = parsed.choices?.[0]?.delta;\n\n if (delta?.thinking) {\n thinkingContent += delta.thinking;\n }\n\n if (delta?.content) {\n fullContent += delta.content;\n process.stdout.write(delta.content);\n }\n } catch {\n // 跳过无法解析的行\n }\n }\n }\n\n console.log('\\n' + '─'.repeat(60));\n console.log();\n\n if (thinkingContent) {\n console.log('💭 思考过程:');\n console.log('─'.repeat(60));\n console.log(thinkingContent.slice(0, 500));\n if (thinkingContent.length > 500) {\n console.log(`... (还有 ${thinkingContent.length - 500} 字符)`);\n }\n console.log('─'.repeat(60));\n }\n\n const usage = `📊 Token: ~${fullContent.length} 输出`;\n console.log(usage);\n console.log();\n\n console.log('✅ 任务执行完成!');\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(`❌ 请求失败: ${msg}`);\n process.exit(1);\n }\n}\n","import { getConfig, updateConfig, resetConfig, type DeeperConfig } from '../../core/config.ts';\nimport { loadConfig } from '../../core/config.ts';\nimport { DEEPER_CONFIG_FILE } from '../../core/constants.ts';\n\nexport async function configCommand(args: string[]): Promise<void> {\n loadConfig();\n const subcommand = args[0] || 'list';\n\n switch (subcommand) {\n case 'list':\n case 'ls': {\n const config = getConfig();\n console.log('\\n📋 DeeperCode 配置:\\n');\n const displayKeys: { key: string; value: unknown; mask?: boolean }[] = [\n { key: 'model', value: config.model },\n { key: 'baseUrl', value: config.baseUrl },\n { key: 'apiKey', value: config.apiKey || '', mask: true },\n { key: 'maxTokens', value: config.maxTokens },\n { key: 'thinkBudget', value: config.thinkBudget },\n { key: 'thinkEnabled', value: config.thinkEnabled },\n { key: 'temperature', value: config.temperature },\n { key: 'maxSubAgents', value: config.maxSubAgents },\n { key: 'maxRecursionDepth', value: config.maxRecursionDepth },\n { key: 'timeoutMs', value: config.timeoutMs },\n { key: 'theme', value: config.theme },\n { key: 'locale', value: config.locale },\n ];\n for (const { key, value, mask } of displayKeys) {\n const raw = String(value ?? '');\n const display = mask\n ? (raw ? `${raw.slice(0, 8)}...${raw.slice(-4)}` : '(未设置)')\n : JSON.stringify(value);\n console.log(` ${key.padEnd(20)} ${display}`);\n }\n console.log();\n break;\n }\n\n case 'get': {\n const rawKey = args[1];\n if (!rawKey) {\n console.error('❌ 用法: deeper config get <key>');\n process.exit(1);\n }\n const KEY_ALIASES: Record<string, string> = {\n api_key: 'apiKey', 'api-key': 'apiKey', apikey: 'apiKey', key: 'apiKey',\n };\n const key = KEY_ALIASES[rawKey.toLowerCase()] || rawKey;\n const config = getConfig();\n const value = (config as Record<string, unknown>)[key];\n if (value === undefined) {\n console.error(`❌ 未知配置项: ${rawKey}`);\n process.exit(1);\n }\n if (key === 'apiKey') {\n const str = String(value || '');\n console.log(str ? `${str.slice(0, 8)}...${str.slice(-4)}` : '(未设置)');\n } else {\n console.log(JSON.stringify(value, null, 2));\n }\n break;\n }\n\n case 'set': {\n const rawKey = args[1];\n const rawValue = args[2];\n if (!rawKey || rawValue === undefined) {\n console.error('❌ 用法: deeper config set <key> <value>');\n process.exit(1);\n }\n\n const KEY_ALIASES: Record<string, string> = {\n api_key: 'apiKey', 'api-key': 'apiKey', apikey: 'apiKey', key: 'apiKey',\n base_url: 'baseUrl', 'base-url': 'baseUrl',\n max_tokens: 'maxTokens', 'max-tokens': 'maxTokens',\n think_budget: 'thinkBudget', 'think-budget': 'thinkBudget',\n think_enabled: 'thinkEnabled', 'think-enabled': 'thinkEnabled',\n log_level: 'logLevel', 'log-level': 'logLevel',\n max_retries: 'maxRetries', 'max-retries': 'maxRetries',\n timeout_ms: 'timeoutMs', 'timeout-ms': 'timeoutMs',\n max_sub_agents: 'maxSubAgents', 'max-sub-agents': 'maxSubAgents',\n max_recursion_depth: 'maxRecursionDepth', 'max-recursion-depth': 'maxRecursionDepth',\n };\n const key = KEY_ALIASES[rawKey.toLowerCase()] || rawKey;\n\n try {\n let parsedValue: unknown = rawValue;\n if (rawValue === 'true') parsedValue = true;\n else if (rawValue === 'false') parsedValue = false;\n else if (!isNaN(Number(rawValue))) parsedValue = Number(rawValue);\n\n updateConfig({ [key]: parsedValue } as Partial<DeeperConfig>);\n console.log(`✅ 已设置 ${key} = ${JSON.stringify(parsedValue)}`);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(`❌ 设置失败: ${msg}`);\n process.exit(1);\n }\n break;\n }\n\n case 'reset': {\n const config = resetConfig();\n console.log('✅ 配置已重置为默认值');\n console.log(JSON.stringify(config, null, 2));\n break;\n }\n\n case 'path': {\n console.log(`配置文件路径: ${DEEPER_CONFIG_FILE}`);\n break;\n }\n\n default: {\n console.log(`\n📋 DeeperCode 配置管理\n\n用法:\n deeper config list 列出所有配置\n deeper config get <key> 获取配置项\n deeper config set <key> <value> 设置配置项\n deeper config reset 重置配置\n deeper config path 显示配置文件路径\n\n示例:\n deeper config set model deepseek-v4-pro\n deeper config set theme light\n deeper config get apiKey\n`);\n break;\n }\n }\n}\n","import { readdirSync, existsSync, readFileSync, mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { bootstrap } from '../bootstrap.ts';\nimport { DEEPER_SKILLS_DIR, PROJECT_SKILLS_DIR } from '../../core/constants.ts';\n\nexport async function skillCommand(args: string[]): Promise<void> {\n const result = await bootstrap();\n if (!result.success) {\n for (const err of result.errors) {\n console.error(`❌ ${err}`);\n }\n process.exit(1);\n }\n\n const subcommand = args[0] || 'list';\n\n switch (subcommand) {\n case 'list':\n case 'ls': {\n console.log('\\n🧩 DeeperCode Skills:\\n');\n\n const homeSkills = listSkills(DEEPER_SKILLS_DIR);\n console.log(`📁 全局 Skills (${DEEPER_SKILLS_DIR}):`);\n if (homeSkills.length === 0) {\n console.log(' (无)');\n } else {\n for (const skill of homeSkills) {\n console.log(` 📦 ${skill.name} - ${skill.description}`);\n }\n }\n\n const cwd = process.cwd();\n const projectSkillsDir = join(cwd, PROJECT_SKILLS_DIR);\n if (existsSync(projectSkillsDir)) {\n const projectSkills = listSkills(projectSkillsDir);\n console.log(`\\n📁 项目 Skills (${projectSkillsDir}):`);\n if (projectSkills.length === 0) {\n console.log(' (无)');\n } else {\n for (const skill of projectSkills) {\n console.log(` 📦 ${skill.name} - ${skill.description}`);\n }\n }\n }\n\n console.log();\n break;\n }\n\n case 'create': {\n const name = args[1];\n if (!name) {\n console.error('❌ 用法: deeper skill create <name>');\n process.exit(1);\n }\n\n const targetDir = join(DEEPER_SKILLS_DIR, name);\n if (existsSync(targetDir)) {\n console.error(`❌ Skill \"${name}\" 已存在`);\n process.exit(1);\n }\n\n try {\n mkdirSync(targetDir, { recursive: true });\n const skillDef = {\n name,\n version: '1.0.0',\n description: `${name} 技能`,\n triggers: [],\n steps: [],\n };\n writeFileSync(\n join(targetDir, 'skill.json'),\n JSON.stringify(skillDef, null, 2),\n 'utf-8',\n );\n console.log(`✅ Skill \"${name}\" 已创建: ${targetDir}`);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(`❌ 创建失败: ${msg}`);\n process.exit(1);\n }\n break;\n }\n\n case 'info': {\n const name = args[1];\n if (!name) {\n console.error('❌ 用法: deeper skill info <name>');\n process.exit(1);\n }\n\n const skillPath = join(DEEPER_SKILLS_DIR, name, 'skill.json');\n if (!existsSync(skillPath)) {\n console.error(`❌ Skill \"${name}\" 不存在`);\n process.exit(1);\n }\n\n try {\n const content = readFileSync(skillPath, 'utf-8');\n const skillDef = JSON.parse(content);\n console.log(JSON.stringify(skillDef, null, 2));\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(`❌ 读取失败: ${msg}`);\n process.exit(1);\n }\n break;\n }\n\n default: {\n console.log(`\n🧩 DeeperCode Skill 管理\n\n用法:\n deeper skill list 列出所有 Skills\n deeper skill create <name> 创建新 Skill\n deeper skill info <name> 查看 Skill 详情\n\n示例:\n deeper skill list\n deeper skill create my-skill\n deeper skill info my-skill\n`);\n break;\n }\n }\n}\n\nfunction listSkills(dir: string): { name: string; description: string }[] {\n try {\n if (!existsSync(dir)) return [];\n const entries = readdirSync(dir, { withFileTypes: true });\n return entries\n .filter((e) => e.isDirectory())\n .map((e) => {\n const skillFile = join(dir, e.name, 'skill.json');\n if (existsSync(skillFile)) {\n try {\n const content = readFileSync(skillFile, 'utf-8');\n const def = JSON.parse(content);\n return { name: def.name || e.name, description: def.description || '' };\n } catch {\n return { name: e.name, description: '' };\n }\n }\n return { name: e.name, description: '' };\n });\n } catch {\n return [];\n }\n}\n","import { existsSync, readFileSync } from 'node:fs';\nimport { bootstrap } from '../bootstrap.ts';\nimport { DEEPER_MCP_FILE } from '../../core/constants.ts';\nimport { getConfig, updateConfig, type MCPConfigEntry } from '../../core/config.ts';\n\nexport async function mcpCommand(args: string[]): Promise<void> {\n const result = await bootstrap();\n if (!result.success) {\n for (const err of result.errors) {\n console.error(`❌ ${err}`);\n }\n process.exit(1);\n }\n\n const subcommand = args[0] || 'list';\n\n switch (subcommand) {\n case 'list':\n case 'ls': {\n const config = getConfig();\n const servers = config.mcpServers || [];\n\n console.log('\\n🔌 MCP 服务器:\\n');\n\n if (servers.length === 0) {\n console.log(' (未配置任何 MCP 服务器)');\n console.log();\n console.log(' 使用 \"deeper mcp add\" 添加 MCP 服务器');\n } else {\n for (const server of servers) {\n const status = server.enabled ? '✅ 启用' : '⏸ 禁用';\n const type = server.url ? 'SSE/HTTP' : 'Stdio';\n console.log(` 📡 ${server.name.padEnd(20)} ${status} | ${type}`);\n if (server.command) {\n console.log(` 命令: ${server.command} ${(server.args || []).join(' ')}`);\n }\n if (server.url) {\n console.log(` URL: ${server.url}`);\n }\n if (server.autoConnect) {\n console.log(` 🔗 自动连接`);\n }\n }\n }\n console.log();\n break;\n }\n\n case 'add': {\n const name = args[1];\n const type = args[2];\n\n if (!name) {\n console.error('❌ 用法: deeper mcp add <name> stdio <command> [args...]');\n console.error(' deeper mcp add <name> sse <url>');\n process.exit(1);\n }\n\n const config = getConfig();\n const servers = [...(config.mcpServers || [])];\n\n if (servers.find((s) => s.name === name)) {\n console.error(`❌ MCP 服务器 \"${name}\" 已存在`);\n process.exit(1);\n }\n\n if (type === 'stdio') {\n const command = args[3];\n if (!command) {\n console.error('❌ 请提供命令');\n process.exit(1);\n }\n const cmdArgs = args.slice(4);\n servers.push({\n name,\n command,\n args: cmdArgs,\n enabled: true,\n autoConnect: true,\n });\n } else if (type === 'sse' || type === 'http') {\n const url = args[3];\n if (!url) {\n console.error('❌ 请提供 URL');\n process.exit(1);\n }\n servers.push({\n name,\n url,\n enabled: true,\n autoConnect: true,\n });\n } else {\n console.error('❌ 未知类型。支持: stdio, sse');\n process.exit(1);\n }\n\n updateConfig({ mcpServers: servers } as any);\n console.log(`✅ MCP 服务器 \"${name}\" 已添加`);\n break;\n }\n\n case 'remove':\n case 'rm': {\n const name = args[1];\n if (!name) {\n console.error('❌ 用法: deeper mcp remove <name>');\n process.exit(1);\n }\n\n const config = getConfig();\n const servers = (config.mcpServers || []).filter((s) => s.name !== name);\n\n if (servers.length === config.mcpServers?.length) {\n console.error(`❌ MCP 服务器 \"${name}\" 不存在`);\n process.exit(1);\n }\n\n updateConfig({ mcpServers: servers } as any);\n console.log(`✅ MCP 服务器 \"${name}\" 已移除`);\n break;\n }\n\n case 'connect': {\n const name = args[1];\n if (!name) {\n console.error('❌ 用法: deeper mcp connect <name>');\n process.exit(1);\n }\n console.log(`🔌 连接 MCP 服务器 \"${name}\"...`);\n console.log('💡 在 REPL 中使用 /mcp 查看已连接的服务器');\n break;\n }\n\n case 'config': {\n const filePath = DEEPER_MCP_FILE;\n if (existsSync(filePath)) {\n try {\n const content = readFileSync(filePath, 'utf-8');\n console.log(`📄 MCP 配置文件: ${filePath}`);\n console.log(content);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(`❌ 读取失败: ${msg}`);\n }\n } else {\n console.log(`MCP 配置文件不存在: ${filePath}`);\n }\n break;\n }\n\n default: {\n console.log(`\n🔌 DeeperCode MCP 管理\n\n用法:\n deeper mcp list 列出所有 MCP 服务器\n deeper mcp add <name> stdio <cmd> [args] 添加 Stdio MCP 服务器\n deeper mcp add <name> sse <url> 添加 SSE/HTTP MCP 服务器\n deeper mcp remove <name> 移除 MCP 服务器\n deeper mcp connect <name> 连接 MCP 服务器\n deeper mcp config 查看 MCP 配置文件\n\n示例:\n deeper mcp add filesystem stdio npx -y @modelcontextprotocol/server-filesystem\n deeper mcp add myserver sse http://localhost:3001\n deeper mcp remove myserver\n`);\n break;\n }\n }\n}\n","export interface JSONSchema {\n type: string;\n properties?: Record<string, JSONSchema>;\n required?: string[];\n description?: string;\n enum?: string[];\n items?: JSONSchema;\n additionalProperties?: boolean;\n}\n\nexport interface ToolParameter {\n name: string;\n type: string;\n description: string;\n required: boolean;\n default?: unknown;\n enum?: string[];\n}\n\nexport interface ToolDefinition {\n name: string;\n description: string;\n category: string;\n parameters: JSONSchema;\n dangerous?: boolean;\n requiresApproval?: boolean;\n}\n\nexport interface ToolResult {\n success: boolean;\n output: string;\n error?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface ToolExecutor {\n execute(params: Record<string, unknown>, signal?: AbortSignal): Promise<ToolResult>;\n}\n\nexport type Tool = ToolDefinition & ToolExecutor;\n\nexport interface ToolCall {\n id: string;\n name: string;\n arguments: Record<string, unknown>;\n index?: number;\n}\n\nexport interface ToolCallResult {\n callId: string;\n result: ToolResult;\n timestamp: number;\n}\n\nexport type ToolSafetyLevel = 'safe' | 'confirm' | 'dangerous';\n\nexport const TOOL_SAFETY_MAP: Record<string, ToolSafetyLevel> = {\n read_file: 'safe', list_dir: 'safe', glob_find: 'safe', file_info: 'safe',\n grep_search: 'safe', text_search: 'safe', fuzzy_find: 'safe', regex_find: 'safe',\n find_references: 'safe', find_definition: 'safe', symbol_search: 'safe',\n search_package: 'safe', search_docs: 'safe', codebase_search: 'safe',\n token_count: 'safe', system_info: 'safe', process_list: 'safe',\n resource_monitor: 'safe', log_viewer: 'safe', bug_scan: 'safe',\n web_fetch: 'safe', web_search: 'safe', check_url: 'safe',\n parse_html: 'safe', http_request: 'safe',\n watch_file: 'safe', batch_read: 'safe', create_dir: 'safe',\n json_parse: 'safe', csv_parse: 'safe', xml_parse: 'safe', yaml_parse: 'safe', toml_parse: 'safe',\n data_validate: 'safe', data_diff: 'safe', hash_generate: 'safe', jwt_decode: 'safe',\n coverage_report: 'safe', config_manage: 'safe', notify_user: 'safe',\n format_code: 'safe', lint_code: 'safe', type_check: 'safe', code_metrics: 'safe',\n analyze_deps: 'safe', import_organizer: 'safe', parse_ast: 'safe',\n db_schema: 'safe',\n context_summarize: 'safe', prompt_template: 'safe',\n skill_create: 'safe', tool_create: 'safe', memory_store: 'safe',\n todo_manager: 'safe', subagent: 'safe',\n background_terminal: 'safe', list_terminals: 'safe', read_terminal: 'safe',\n send_keys: 'safe', send_ctrl_keys: 'safe', send_text: 'safe', kill_terminal: 'safe',\n terminal_screenshot: 'safe', terminal_resize: 'safe', check_status: 'safe', stop_command: 'safe',\n download_file: 'safe', api_call: 'safe', graphql_query: 'safe', websocket_connect: 'safe',\n\n write_file: 'safe', edit_file: 'safe',\n delete_file: 'confirm', move_file: 'confirm', copy_file: 'confirm', batch_write: 'safe',\n merge_files: 'confirm', diff_files: 'confirm',\n run_command: 'safe', run_async: 'safe', pipe_commands: 'safe',\n shell_script: 'confirm', npm_manage: 'confirm',\n project_init: 'confirm', build_project: 'confirm', run_test: 'confirm',\n docker_manage: 'confirm', env_manage: 'confirm',\n sql_query: 'confirm', sql_migrate: 'confirm', nosql_query: 'confirm',\n db_backup: 'confirm', db_restore: 'confirm', redis_command: 'confirm',\n encrypt_file: 'confirm', decrypt_file: 'confirm',\n template_render: 'confirm', chart_generate: 'confirm',\n secret_scan: 'confirm', vulnerability_check: 'confirm',\n orm_generate: 'confirm', generate_code: 'confirm', refactor_code: 'confirm',\n extract_function: 'confirm', data_transform: 'confirm', proxy_request: 'confirm',\n\n interactive_terminal: 'confirm',\n browser_action: 'confirm', screenshot_page: 'confirm',\n};\n","import type { Tool, ToolResult, JSONSchema } from './tool-types.js';\n\nfunction getPropType(schema: JSONSchema, path: string): string {\n return schema.type ?? 'any';\n}\n\nfunction checkRequired(\n params: Record<string, unknown>,\n schema: JSONSchema,\n errors: string[]\n): void {\n const required = schema.required ?? [];\n for (const key of required) {\n if (!(key in params) || params[key] === undefined) {\n errors.push(`缺少必需参数: ${key}`);\n }\n }\n}\n\nfunction checkTypes(\n params: Record<string, unknown>,\n schema: JSONSchema,\n path: string,\n errors: string[]\n): void {\n const props = schema.properties;\n if (!props) return;\n\n for (const [key, propSchema] of Object.entries(props)) {\n const value = params[key];\n const fullPath = path ? `${path}.${key}` : key;\n\n if (value === undefined || value === null) continue;\n\n switch (propSchema.type) {\n case 'string':\n if (typeof value !== 'string') {\n errors.push(`参数 \"${fullPath}\" 应为字符串类型`);\n }\n if (propSchema.enum && !propSchema.enum.includes(value as string)) {\n errors.push(`参数 \"${fullPath}\" 值不在允许范围内: ${propSchema.enum.join(', ')}`);\n }\n break;\n case 'number':\n case 'integer':\n if (typeof value !== 'number') {\n errors.push(`参数 \"${fullPath}\" 应为数字类型`);\n }\n break;\n case 'boolean':\n if (typeof value !== 'boolean') {\n errors.push(`参数 \"${fullPath}\" 应为布尔类型`);\n }\n break;\n case 'array':\n if (!Array.isArray(value)) {\n errors.push(`参数 \"${fullPath}\" 应为数组类型`);\n } else if (propSchema.items) {\n const itemSchema = propSchema.items;\n for (let i = 0; i < value.length; i++) {\n if (itemSchema.type === 'string' && typeof value[i] !== 'string') {\n errors.push(`参数 \"${fullPath}[${i}]\" 应为字符串类型`);\n } else if (itemSchema.type === 'number' && typeof value[i] !== 'number') {\n errors.push(`参数 \"${fullPath}[${i}]\" 应为数字类型`);\n }\n }\n }\n break;\n case 'object':\n if (typeof value !== 'object' || value === null) {\n errors.push(`参数 \"${fullPath}\" 应为对象类型`);\n } else if (propSchema.properties) {\n checkTypes(value as Record<string, unknown>, propSchema, fullPath, errors);\n }\n break;\n }\n }\n}\n\nexport class ToolValidator {\n validate(tool: Tool, params: Record<string, unknown>): ToolResult {\n const errors: string[] = [];\n const schema = tool.parameters;\n\n checkRequired(params, schema, errors);\n checkTypes(params, schema, '', errors);\n\n if (errors.length > 0) {\n return {\n success: false,\n output: '',\n error: `参数验证失败:\\n${errors.map(e => ` - ${e}`).join('\\n')}`,\n metadata: { validationErrors: errors },\n };\n }\n\n return { success: true, output: '参数验证通过' };\n }\n\n validateMany(tool: Tool, calls: Record<string, unknown>[]): ToolResult[] {\n return calls.map(params => this.validate(tool, params));\n }\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { DEEPER_HOME } from '../core/constants.js';\n\nexport interface MemoryEntry {\n id: string;\n type: 'working' | 'episodic' | 'semantic' | 'procedural';\n content: string;\n tags: string[];\n importance: number; // 0-10\n accuracy: number; // 0-10, 自评置信度\n createdAt: number;\n accessedAt: number;\n accessCount: number;\n sessionId: string;\n source: string; // 'user' | 'agent' | 'tool' | 'system'\n references: string[]; // 关联条目 ID\n}\n\ninterface XMemStats {\n totalEntries: number;\n byType: Record<string, number>;\n totalTokens: number;\n lastCleanup: number;\n}\n\nconst MEM_DIR = join(DEEPER_HOME, 'xmemory');\nconst STATS_FILE = join(MEM_DIR, 'stats.json');\nconst MAX_WORKING_MEM = 50;\nconst MAX_TOTAL_MEM = 2000;\nconst CLEANUP_THRESHOLD = 1500;\n\nlet currentSessionId = '';\n\nexport function setSessionId(id: string) { currentSessionId = id; }\n\nfunction uid(): string {\n return `mem_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n}\n\nfunction ensureDir(): void {\n if (!existsSync(MEM_DIR)) mkdirSync(MEM_DIR, { recursive: true });\n if (!existsSync(STATS_FILE)) {\n writeFileSync(STATS_FILE, JSON.stringify({ totalEntries: 0, byType: {}, totalTokens: 0, lastCleanup: Date.now() }), 'utf-8');\n }\n}\n\nfunction loadStats(): XMemStats {\n try {\n return JSON.parse(readFileSync(STATS_FILE, 'utf-8')) as XMemStats;\n } catch { return { totalEntries: 0, byType: {}, totalTokens: 0, lastCleanup: 0 }; }\n}\n\nfunction saveStats(s: XMemStats): void {\n writeFileSync(STATS_FILE, JSON.stringify(s, null, 2), 'utf-8');\n}\n\nexport class XMemory {\n private working: MemoryEntry[] = [];\n private index: Map<string, MemoryEntry> = new Map();\n private dirty = false;\n\n constructor() {\n ensureDir();\n }\n\n // ============ 写入 ============\n store(\n type: MemoryEntry['type'],\n content: string,\n tags: string[] = [],\n importance = 5,\n accuracy = 7,\n source: MemoryEntry['source'] = 'agent',\n references: string[] = [],\n ): string {\n const id = uid();\n const entry: MemoryEntry = {\n id, type, content: content.slice(0, 2000), tags,\n importance: Math.min(10, Math.max(0, importance)),\n accuracy: Math.min(10, Math.max(0, accuracy)),\n createdAt: Date.now(), accessedAt: Date.now(),\n accessCount: 1, sessionId: currentSessionId,\n source, references,\n };\n\n if (type === 'working') {\n this.working.push(entry);\n if (this.working.length > MAX_WORKING_MEM) {\n this.working.shift();\n }\n }\n\n this.index.set(id, entry);\n this.dirty = true;\n\n if (this.index.size > CLEANUP_THRESHOLD) {\n this.autoCleanup();\n }\n\n return id;\n }\n\n storeEpisodic(content: string, tags: string[] = [], importance = 5): string {\n return this.store('episodic', content, tags, importance, 7, 'agent');\n }\n\n storeSemantic(content: string, tags: string[] = [], importance = 7): string {\n return this.store('semantic', content, tags, importance, 9, 'agent');\n }\n\n storeProcedural(content: string, tags: string[] = [], importance = 8): string {\n return this.store('procedural', content, tags, importance, 9, 'agent');\n }\n\n storeWorking(content: string, tags: string[] = []): string {\n return this.store('working', content, tags, 3, 5, 'agent');\n }\n\n // ============ 检索 ============\n recall(query: string, limit = 5, minImportance = 0): MemoryEntry[] {\n const keywords = query.toLowerCase().split(/[\\s,,。]+/).filter(w => w.length > 1);\n if (keywords.length === 0) return [];\n\n const scored: Array<{ entry: MemoryEntry; score: number }> = [];\n const now = Date.now();\n\n for (const entry of this.index.values()) {\n if (entry.importance < minImportance) continue;\n let score = 0;\n const c = (entry.content || '').toLowerCase();\n const t = entry.tags.join(' ').toLowerCase();\n\n for (const kw of keywords) {\n if (c.includes(kw)) score += 3;\n if (t.includes(kw)) score += 2;\n if (entry.type === 'procedural' && c.includes(kw)) score += 1;\n }\n\n // 衰减: 重要度高 + 最近访问 权重高\n const age = (now - entry.accessedAt) / (1000 * 60 * 60);\n score += entry.importance * 0.5;\n score -= Math.min(age / 24, 5); // 每 24 小时衰减 max 5\n\n if (score > 0) scored.push({ entry, score });\n }\n\n scored.sort((a, b) => b.score - a.score);\n return scored.slice(0, limit).map(s => {\n s.entry.accessedAt = now;\n s.entry.accessCount++;\n return s.entry;\n });\n }\n\n getByType(type: MemoryEntry['type'], limit = 20): MemoryEntry[] {\n const res: MemoryEntry[] = [];\n for (const entry of this.index.values()) {\n if (entry.type === type) res.push(entry);\n }\n res.sort((a, b) => b.createdAt - a.createdAt);\n return res.slice(0, limit);\n }\n\n getWorking(): MemoryEntry[] {\n return this.working;\n }\n\n getWorkingContext(maxTokens = 2000): string {\n if (this.working.length === 0) return '';\n const lines = this.working.map(e => `[工作记忆] ${e.content.slice(0, 300)}`);\n let result = '';\n for (const line of lines) {\n if ((result + line).length > maxTokens * 4) break;\n result += line + '\\n';\n }\n return result;\n }\n\n getProceduralHints(task: string, limit = 5): string {\n const recalled = this.recall(task, limit, 3);\n const proc = recalled.filter(r => r.type === 'procedural' || r.type === 'semantic');\n if (proc.length === 0) return '';\n return '[记忆提示]\\n' + proc.map(p => `- ${p.content.slice(0, 250)}`).join('\\n');\n }\n\n getSessionSummary(): string {\n const entries = [...this.index.values()].filter(e => e.sessionId === currentSessionId);\n if (entries.length === 0) return '';\n const key = entries\n .filter(e => e.importance >= 5)\n .sort((a, b) => b.importance - a.importance)\n .slice(0, 8);\n return `[XMemory·本会话]\\n` + key.map(e => {\n const t = e.type === 'semantic' ? '知识' : e.type === 'procedural' ? '技能' : e.type === 'episodic' ? '经历' : '工作';\n return `[${t}] ${e.content.slice(0, 200)}`;\n }).join('\\n');\n }\n\n // ============ 持久化 ============\n async save(): Promise<void> {\n if (!this.dirty) return;\n ensureDir();\n\n // 分批写入:每个 type 一个文件\n const byType: Record<string, MemoryEntry[]> = {};\n for (const entry of this.index.values()) {\n if (!byType[entry.type]) byType[entry.type] = [];\n byType[entry.type].push(entry);\n }\n\n for (const [type, entries] of Object.entries(byType)) {\n const file = join(MEM_DIR, `${type}.json`);\n writeFileSync(file, JSON.stringify(entries.slice(-500)), 'utf-8'); // 每个类型最多 500 条\n }\n\n const stats = loadStats();\n stats.totalEntries = this.index.size;\n stats.byType = {};\n for (const entry of this.index.values()) {\n stats.byType[entry.type] = (stats.byType[entry.type] || 0) + 1;\n }\n stats.totalTokens = [...this.index.values()].reduce((s, e) => s + e.content.length, 0);\n saveStats(stats);\n\n this.dirty = false;\n }\n\n async load(): Promise<void> {\n ensureDir();\n let total = 0;\n\n for (const type of ['working', 'episodic', 'semantic', 'procedural']) {\n const file = join(MEM_DIR, `${type}.json`);\n if (!existsSync(file)) continue;\n try {\n const entries = JSON.parse(readFileSync(file, 'utf-8')) as MemoryEntry[];\n for (const entry of entries) {\n if (total > MAX_TOTAL_MEM) break;\n this.index.set(entry.id, entry);\n if (entry.type === 'working') this.working.push(entry);\n total++;\n }\n } catch { /* skip corrupt files */ }\n }\n\n if (this.working.length > MAX_WORKING_MEM) {\n this.working = this.working.slice(-MAX_WORKING_MEM);\n }\n }\n\n // ============ 维护 ============\n private autoCleanup(): void {\n const entries = [...this.index.values()];\n entries.sort((a, b) => {\n const scoreA = a.importance * 2 + a.accessCount - (Date.now() - a.accessedAt) / (1000 * 60 * 60 * 24);\n const scoreB = b.importance * 2 + b.accessCount - (Date.now() - b.accessedAt) / (1000 * 60 * 60 * 24);\n return scoreA - scoreB;\n });\n\n const toKeep = entries.slice(-500);\n this.index.clear();\n this.working = [];\n for (const entry of toKeep) {\n this.index.set(entry.id, entry);\n if (entry.type === 'working') this.working.push(entry);\n }\n this.dirty = true;\n }\n\n get totalEntries(): number { return this.index.size; }\n get dirtyState(): boolean { return this.dirty; }\n}\n\nexport const xmemory = new XMemory();\n","const A = { R: '\\x1b[0m', b: '\\x1b[1m', d: '\\x1b[2m', i: '\\x1b[3m', u: '\\x1b[4m', g: '\\x1b[32m', inv: '\\x1b[7m' };\nfunction ansi(code: string, text: string) { return code + text + A.R; }\n\nexport class MarkdownStreamRenderer {\n private lineBuf = '';\n private inCodeBlock = false;\n private codeLang = '';\n private codeContent = '';\n private codeDropped = 0;\n private seenFirstLine = false;\n private tableRows: string[] = [];\n private inTable = false;\n private tableAligns: ('L'|'C'|'R')[] = [];\n\n private static readonly MAX_LINE = 4096;\n private static readonly MAX_CODE = 51200;\n\n feed(chunk: string): string | null {\n this.lineBuf += chunk;\n if (this.lineBuf.length > MarkdownStreamRenderer.MAX_LINE) this.lineBuf = this.lineBuf.slice(-MarkdownStreamRenderer.MAX_LINE);\n\n const idx = this.lineBuf.indexOf('\\n');\n if (idx === -1) return null;\n const line = this.lineBuf.slice(0, idx);\n this.lineBuf = this.lineBuf.slice(idx + 1);\n\n if (this.inCodeBlock) {\n if (/^```\\s*$/.test(line.trim())) {\n this.inCodeBlock = false;\n let out = this.flushCodeBlock() + '\\n';\n if (this.codeLang.toLowerCase() === 'markdown') out = '';\n return out;\n }\n if (this.codeContent.length < MarkdownStreamRenderer.MAX_CODE) {\n this.codeContent += line + '\\n';\n } else {\n this.codeDropped++;\n }\n return null;\n }\n\n if (/^```(\\w*)\\s*$/.test(line.trim())) {\n this.inCodeBlock = true;\n this.codeLang = line.trim().slice(3).trim();\n this.codeContent = '';\n if (!this.seenFirstLine) { this.seenFirstLine = true; return ansi(A.d, ` ┌ ${this.codeLang || 'code'}`) + '\\n'; }\n return `\\n` + ansi(A.d, ` ┌ ${this.codeLang || 'code'}`) + '\\n';\n }\n\n // ── Table detection ──\n const isPipeLine = /^\\|.+|\\s+\\|/.test(line) && line.includes('|');\n const isSepLine = /^\\|?[\\s\\-:]+(\\|[\\s\\-:]+)+\\|?\\s*$/.test(line.trim()) && !/[a-zA-Z\\u4e00-\\u9fff]/.test(line.trim());\n\n if (isPipeLine) {\n if (!this.inTable) {\n this.inTable = true;\n this.tableRows = [];\n this.tableAligns = [];\n }\n if (isSepLine) {\n // Parse alignment from separator row\n const cells = line.split('|').filter(c => /[\\-:]/.test(c));\n this.tableAligns = cells.map(c => {\n const t = c.trim();\n if (t.startsWith(':') && t.endsWith(':')) return 'C';\n if (t.endsWith(':')) return 'R';\n return 'L';\n });\n return null;\n }\n this.tableRows.push(line);\n return null;\n }\n\n // End of table\n if (this.inTable) {\n const out = this.renderTable();\n this.inTable = false;\n this.tableRows = [];\n this.tableAligns = [];\n this.seenFirstLine = true;\n return out + '\\n' + this.renderLine(line) + '\\n';\n }\n\n this.seenFirstLine = true;\n return this.renderLine(line) + '\\n';\n }\n\n flush(): string {\n let out = '';\n if (this.inTable) {\n out += this.renderTable();\n this.inTable = false;\n this.tableRows = [];\n }\n if (this.inCodeBlock) {\n out += this.flushCodeBlock();\n this.inCodeBlock = false;\n }\n if (this.lineBuf) {\n out += this.lineBuf;\n this.lineBuf = '';\n }\n return out;\n }\n\n reset(): void {\n this.lineBuf = ''; this.inCodeBlock = false; this.codeLang = ''; this.codeContent = ''; this.codeDropped = 0; this.seenFirstLine = false;\n this.inTable = false; this.tableRows = []; this.tableAligns = [];\n }\n\n // ── Table rendering ──\n\n private renderTable(): string {\n if (this.tableRows.length === 0) return '';\n const headerRow = this.tableRows[0];\n const dataRows = this.tableRows.slice(this.tableAligns.length === 0 ? 0 : 1);\n const headerCells = headerRow ? this.splitCells(headerRow) : [];\n const allRows: string[][] = [];\n\n if (this.tableAligns.length > 0 && headerRow) {\n allRows.push(headerCells);\n allRows.push(...dataRows.map(r => this.splitCells(r)));\n } else {\n allRows.push(...this.tableRows.map(r => this.splitCells(r)));\n }\n\n const colCount = Math.max(...allRows.map(r => r.length), 1);\n const colWidths: number[] = Array(colCount).fill(3);\n for (const row of allRows) {\n for (let i = 0; i < row.length; i++) {\n const w = this.visualLen(row[i]);\n if (w > colWidths[i]) colWidths[i] = Math.min(w, 30);\n }\n }\n\n const aligns = Array(colCount).fill('L');\n for (let i = 0; i < this.tableAligns.length && i < colCount; i++) aligns[i] = this.tableAligns[i];\n\n const F = ansi(A.d + '\\x1b[90m', '│');\n let out = '';\n\n // Top border\n out += A.d + '\\x1b[90m' + ' ┌' + colWidths.map(w => '─'.repeat(Math.max(0, w + 2))).join('┬') + '┐' + A.R + '\\n';\n\n // Header row\n if (allRows.length > 0 && colWidths.length > 0) {\n out += ` ${F} ` + allRows[0].map((c, i) => this.padCell(c, colWidths[i] || 3, 'C', true)).join(` ${F} `) + ` ${F}\\n`;\n // Separator\n out += A.d + '\\x1b[90m' + ' ├' + colWidths.map(w => '─'.repeat(Math.max(0, w + 2))).join('┼') + '┤' + A.R + '\\n';\n }\n\n // Data rows\n const maxRows = 12;\n for (let r = 1; r < allRows.length && r <= maxRows; r++) {\n out += ` ${F} ` + allRows[r].map((c, i) => this.padCell(c, colWidths[i] || 3, aligns[i] || 'L', false)).join(` ${F} `) + ` ${F}\\n`;\n }\n if (allRows.length > maxRows + 1) {\n out += ansi(A.d + '\\x1b[90m', ` ${F} ${ansi(A.d, '...')} `.padEnd(colWidths.reduce((a, w) => a + w + 3, 3))) + ` ${F}` + '\\n';\n }\n\n // Bottom border\n out += A.d + '\\x1b[90m' + ' └' + colWidths.map(w => '─'.repeat(Math.max(0, w + 2))).join('┴') + '┘' + A.R;\n return out;\n }\n\n private splitCells(line: string): string[] {\n let s = line.trim();\n if (s.startsWith('|')) s = s.slice(1);\n if (s.endsWith('|')) s = s.slice(0, -1);\n return s.split('|').map(c => c.trim());\n }\n\n private visualLen(s: string): number {\n return s.replace(/\\x1b\\[[0-9;]*[a-zA-Z]/g, '').replace(/[^\\x00-\\xff]/g, ' ').length;\n }\n\n private padCell(text: string, width: number, align: string, bold: boolean): string {\n const raw = text.replace(/\\x1b\\[[0-9;]*[a-zA-Z]/g, '');\n const visual = this.visualLen(raw);\n const pad = Math.max(0, width - visual);\n const left = align === 'R' ? pad : align === 'C' ? Math.floor(pad / 2) : 0;\n const right = Math.max(0, pad - left);\n const content = bold ? ansi(A.b, raw) : raw;\n return ' '.repeat(left) + content + ' '.repeat(right);\n }\n\n // ── Flush code ──\n\n private flushCodeBlock(): string {\n const lines = this.codeContent.split('\\n').filter(l => l || true);\n let out = '';\n const max = Math.min(lines.length, 20);\n for (let i = 0; i < max; i++) {\n out += ` ${ansi(A.d + '\\x1b[90m', String(i + 1).padStart(3, ' '))} ${ansi(A.d, '│')} ${lines[i]}\\n`;\n }\n if (lines.length > 20) out += ansi(A.d + '\\x1b[90m', ` ... (${lines.length - 20} lines omitted)\\n`);\n if (this.codeDropped > 0) out += ansi(A.d + '\\x1b[90m', ` ... (${this.codeDropped} lines dropped, code too large)\\n`);\n out += ansi(A.d, ` └ ${this.codeLang || 'code'}`);\n this.codeContent = '';\n this.codeDropped = 0;\n return out;\n }\n\n // ── Render line ──\n\n private renderLine(line: string): string {\n const t = line.trim();\n if (t === '') return '';\n\n let m: RegExpMatchArray | null;\n if ((m = line.match(/^#{4}\\s+(.+)/))) return ansi(A.b + '\\x1b[36m', ` ## ${m[1]}`);\n if ((m = line.match(/^#{3}\\s+(.+)/))) return ansi(A.b + '\\x1b[33m', ` ▸ ${m[1]}`);\n if ((m = line.match(/^#{2}\\s+(.+)/))) return ansi(A.b + '\\x1b[34m', ` ▸▸ ${m[1]}`);\n if ((m = line.match(/^#\\s+(.+)/))) return ansi(A.b + '\\x1b[35m', ` █ ${m[1]}`);\n if (line.startsWith('> ')) return ansi(A.d + '\\x1b[90m', ` │ ${line.slice(2)}`);\n if (/^[-*_]{3,}\\s*$/.test(t) && !t.includes('|')) return ansi(A.d + '\\x1b[90m', ' ──'.repeat(12));\n if ((m = line.match(/^(\\s*)(\\d+)\\.\\s+(.+)/))) { const sp = m[1].length; return ' '.repeat(Math.max(0, sp)) + ansi(A.b + '\\x1b[36m', `${m[2]}.`) + ' ' + this.inline(m[3]); }\n if ((m = line.match(/^(\\s*)[*+-]\\s+(.+)/))) { const sp = m[1].length; return ' '.repeat(Math.max(0, sp)) + ansi(A.g, '• ') + this.inline(m[2]); }\n if ((m = line.match(/^(\\s*)- \\[([ x])\\]\\s+(.+)/))) {\n const ck = m[2] === 'x' ? ansi(A.g, '✓') : ansi(A.d + '\\x1b[90m', '○');\n return ` ${ck} ${this.inline(m[3])}`;\n }\n return ' ' + this.inline(line);\n }\n\n private inline(text: string): string {\n let s = text;\n s = s.replace(/`([^`]+)`/g, (_, c) => ansi(A.inv + '\\x1b[33m', c));\n s = s.replace(/\\*\\*\\*(.+?)\\*\\*\\*/g, (_, c) => ansi(A.b + A.i, c));\n s = s.replace(/\\*\\*(.+?)\\*\\*/g, (_, c) => ansi(A.b, c));\n s = s.replace(/\\*(.+?)\\*/g, (_, c) => ansi(A.i, c));\n s = s.replace(/~~(.+?)~~/g, (_, c) => ansi(A.d + '\\x1b[9m', c));\n s = s.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_, txt, url) =>\n ansi(A.u + '\\x1b[36m', txt) + ansi(A.d + '\\x1b[90m', ` (${url.slice(0, 40)})`));\n return s;\n }\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport interface TodoItem {\n id: string;\n title: string;\n status: 'pending' | 'in_progress' | 'done' | 'cancelled';\n subtasks?: { title: string; status: 'pending' | 'done' }[];\n plan?: string;\n agent?: string;\n}\n\nexport const todos: Map<string, TodoItem[]> = new Map();\nconst MAX_TOP = 12;\n\nfunction uid() { return `t${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`; }\n\nfunction formatList(items: TodoItem[], indent = 0): string {\n const lines: string[] = [];\n for (const t of items) {\n const pf = ' '.repeat(indent);\n const s = t.status === 'done' ? '✓' : t.status === 'in_progress' ? '◉' : t.status === 'cancelled' ? '✗' : '○';\n lines.push(`${pf}${s} ${t.title.slice(0, 72)}`);\n if (t.subtasks) for (const st of t.subtasks) {\n const ss = st.status === 'done' ? '✓' : '○';\n lines.push(`${pf} ${ss} ${st.title.slice(0, 60)}`);\n }\n }\n return lines.join('\\n');\n}\n\nfunction formatChange(changes: Array<{ oldStatus: string; newStatus: string; title: string }>): string {\n if (changes.length === 0) return '无变更';\n const sMap: Record<string, string> = { pending: '○', in_progress: '◉', done: '✓', cancelled: '✗' };\n return changes.map(c => `${sMap[c.oldStatus]} → ${sMap[c.newStatus]} ${c.title.slice(0, 60)}`).join('\\n');\n}\n\nfunction findAndUpdate(items: TodoItem[], idOrTitle: string, status: string): Array<{ oldStatus: string; newStatus: string; title: string }> {\n const changes: Array<{ oldStatus: string; newStatus: string; title: string }> = [];\n for (const t of items) {\n if (t.id === idOrTitle || t.title === idOrTitle) {\n if (t.status !== status) { changes.push({ oldStatus: t.status, newStatus: status, title: t.title }); t.status = status as any; }\n break;\n }\n if (t.subtasks) for (const st of t.subtasks) {\n if (st.title === idOrTitle || st.title.includes(idOrTitle)) {\n if (st.status !== status) { changes.push({ oldStatus: st.status, newStatus: status, title: st.title }); st.status = status as any; }\n break;\n }\n }\n }\n return changes;\n}\n\nfunction countStats(items: TodoItem[]) {\n let total = 0, done = 0;\n for (const t of items) {\n total++; if (t.status === 'done') done++;\n if (t.subtasks) for (const st of t.subtasks) { total++; if (st.status === 'done') done++; }\n }\n return { total, done };\n}\n\nexport const todo_manager: Tool = {\n name: 'todo_manager',\n description: '管理任务面板。复杂任务前创建 items 列表(≤8项),过程中用 update 改变状态(title 或 task_id 定位)。',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['create', 'update', 'list', 'clear'], description: '操作' },\n task_id: { type: 'string', description: 'update 时用 id 定位任务' },\n title: { type: 'string', description: 'update 时用标题定位任务(唯一匹配)' },\n status: { type: 'string', enum: ['pending', 'in_progress', 'done', 'cancelled'], description: '更新目标状态' },\n items: { type: 'array', items: { type: 'object', properties: { title: { type: 'string' }, plan: { type: 'string' }, agent: { type: 'string' }, subtasks: { type: 'array', items: { type: 'object', properties: { title: { type: 'string' } } } } } }, description: 'create 时传入 ≤8 项' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n const action = params.action as string;\n const sessionId = 'default';\n\n if (action === 'list') {\n const items = todos.get(sessionId) || [];\n if (items.length === 0) return { success: true, output: '任务列表为空' };\n const { total, done } = countStats(items);\n return { success: true, output: `📋 ${done}/${total}\\n${formatList(items)}`, metadata: { total, done } };\n }\n\n if (action === 'clear') {\n todos.set(sessionId, []);\n return { success: true, output: '已清空' };\n }\n\n if (action === 'create') {\n const items = (params.items as any[]) || [];\n if (items.length === 0 && params.title) {\n todos.set(sessionId, [{ id: uid(), title: params.title as string, status: 'pending', plan: (params as any).plan }]);\n return { success: true, output: `📋 1 项\\n${formatList(todos.get(sessionId)!)}`, metadata: { total: 1, done: 0 } };\n }\n const top = items.slice(0, MAX_TOP);\n const mapped: TodoItem[] = top.map((t: any) => ({\n id: uid(), title: t.title, status: 'pending',\n plan: t.plan, agent: t.agent,\n subtasks: t.subtasks ? t.subtasks.slice(0, 6).map((st: any) => ({ title: st.title, status: 'pending' as const })) : undefined,\n }));\n todos.set(sessionId, mapped);\n const { total, done } = countStats(mapped);\n return { success: true, output: `📋 ${done}/${total}\\n${formatList(mapped)}`, metadata: { total, done, topLevel: mapped.length } };\n }\n\n if (action === 'update') {\n const list = todos.get(sessionId) || [];\n const tid = params.task_id as string;\n const title = params.title as string;\n const status = (params.status as string) || 'in_progress';\n let changes: Array<{ oldStatus: string; newStatus: string; title: string }> = [];\n if (tid) changes = findAndUpdate(list, tid, status);\n else if (title) changes = findAndUpdate(list, title, status);\n if (changes.length === 0 && (tid || title)) {\n return { success: false, error: `未找到: ${tid || title}`, output: '' };\n }\n todos.set(sessionId, list);\n if (changes.length === 0) {\n const { done, total } = countStats(list);\n return { success: true, output: `📋 ${done}/${total}\\n${formatList(list)}` };\n }\n const { done, total } = countStats(list);\n return { success: true, output: `${formatChange(changes)}\\n(${done}/${total})` };\n }\n\n return { success: false, error: '未知 action: ' + action, output: '' };\n },\n};\n\nexport function getTodos(): TodoItem[] {\n return todos.get('default') || [];\n}\n\nexport function todoSummary(maxItems = 8): string {\n const items = getTodos();\n if (items.length === 0) return '';\n const pending = items.filter(t => t.status !== 'done' && t.status !== 'cancelled');\n if (pending.length === 0) return '';\n let s = `[任务 ${pending.length}/${items.length}]\\n`;\n for (const t of pending.slice(0, maxItems)) {\n const sym = t.status === 'in_progress' ? '⏳' : '⬚';\n s += `${sym} ${t.title.slice(0, 50)}`;\n if (t.subtasks) {\n const subDone = t.subtasks.filter(st => st.status === 'done').length;\n s += ` (${subDone}/${t.subtasks.length})`;\n }\n s += '\\n';\n }\n return s;\n}\n","import type { Tool } from '../../tool-types.js';\n\n/**\n * DeepSeek-V3/V4 token estimator.\n *\n * DeepSeek uses a BPE tokenizer. Approximation:\n * - CJK chars (中文/日文/韩文): ~1.6 tokens each\n * - English words (common): ~1.3 tokens each\n * - Code / symbol-heavy: ~1 token per 2.5 chars\n * - Digits: ~1 token per 3 chars\n * - Newlines: ~1 token each\n * - Leading whitespace: ~1 token\n */\n\nconst CJK_RE = /[\\u4e00-\\u9fff\\u3400-\\u4dbf\\u{20000}-\\u{2a6df}\\u{2a700}-\\u{2b73f}\\u{2b740}-\\u{2b81f}\\u{2b820}-\\u{2ceaf}\\u{f900}-\\u{faff}\\u{2f800}-\\u{2fa1f}]/gu;\nconst HANGUL_RE = /[\\uac00-\\ud7af]/g;\nconst JAPANESE_RE = /[\\u3040-\\u309f\\u30a0-\\u30ff]/g;\nconst CJK_PUNCT_RE = /[\\u3000-\\u303f\\uff00-\\uffef]/g;\n\nexport function estimateTokens(text: string): number {\n if (!text) return 0;\n\n let tokens = 0;\n let remaining = text;\n\n // Count CJK characters (Chinese)\n const cjk = remaining.match(CJK_RE);\n if (cjk) tokens += Math.ceil(cjk.length * 1.6);\n\n // Count Korean Hangul\n const hangul = remaining.match(HANGUL_RE);\n if (hangul) tokens += Math.ceil(hangul.length * 1.5);\n\n // Count Japanese kana\n const jp = remaining.match(JAPANESE_RE);\n if (jp) tokens += Math.ceil(jp.length * 1.4);\n\n // Count CJK punctuation\n const cjkp = remaining.match(CJK_PUNCT_RE);\n if (cjkp) tokens += cjkp.length;\n\n // Remove all CJK-related chars to process ASCII portion\n let ascii = remaining;\n ascii = ascii.replace(CJK_RE, '');\n ascii = ascii.replace(HANGUL_RE, '');\n ascii = ascii.replace(JAPANESE_RE, '');\n ascii = ascii.replace(CJK_PUNCT_RE, '');\n\n // Count newlines\n const nls = ascii.split('\\n').length - 1;\n tokens += nls;\n\n // Count each line's content separately (better word-boundary handling)\n const lines = ascii.split('\\n');\n for (const line of lines) {\n if (!line.trim()) { tokens += 1; continue; }\n\n // Split into segments: code/symbols vs words\n // Code-like: contains lots of symbols\n const symbols = (line.match(/[{}()\\[\\];:'\"`,.<>\\/\\\\|&^~`@#$%*+=\\-!?]/g) || []).length;\n const digits = (line.match(/\\d+/g) || []).join('').length;\n const words = line.match(/[a-zA-Z_]+/g) || [];\n\n const wordTokens = words.reduce((s, w) => {\n if (w.length <= 4) return s + 1;\n return s + Math.ceil(w.length / 3.5);\n }, 0);\n\n // Whitespace and punctuation within words are usually part of the token\n const digitTokens = Math.ceil(digits / 3);\n const symbolTokens = Math.ceil(symbols / 1.8);\n\n tokens += wordTokens + digitTokens + symbolTokens;\n }\n\n // Floor + 10% safety margin for BPE overhead\n return Math.max(1, Math.floor(tokens * 1.1));\n}\n\n/**\n * Estimate tokens for an array of chat messages (DeepSeek API format).\n * Includes counting tool definitions.\n */\nexport function estimateMessageTokens(\n messages: Array<Record<string, unknown>>,\n tools?: Array<{ type: string; function: { name: string; description: string; parameters: Record<string, unknown> } }>,\n): number {\n let total = 0;\n\n // System overhead (~8 tokens per DeepSeek's API format)\n total += 8;\n\n for (const msg of messages) {\n // Role overhead\n total += 3;\n\n const content = msg.content as string | null | undefined;\n if (content) total += estimateTokens(content);\n\n const toolCalls = msg.tool_calls as Array<{ function?: { name?: string; arguments?: string } }> | undefined;\n if (toolCalls) {\n for (const tc of toolCalls) {\n total += estimateTokens(tc.function?.name || '');\n total += estimateTokens(tc.function?.arguments || '');\n total += 4; // JSON structure overhead per tool call\n }\n }\n\n const toolCallId = msg.tool_call_id as string | undefined;\n if (toolCallId) total += estimateTokens(toolCallId) + 2;\n }\n\n // Tool definitions\n if (tools) {\n for (const t of tools) {\n total += estimateTokens(t.function.name);\n total += estimateTokens(t.function.description);\n total += estimateTokens(JSON.stringify(t.function.parameters));\n total += 4; // JSON structure overhead per tool def\n }\n }\n\n return total;\n}\n\nexport const token_count: Tool = {\n name: 'token_count',\n description: '计算文本/文件/对话的 Token 数量 (DeepSeek-V3/V4 BPE 估算)。支持统计中文、英文、代码的 Token 消耗。',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n text: { type: 'string', description: '要计数的文本' },\n file_path: { type: 'string', description: '文件绝对路径' },\n messages: { type: 'string', description: 'JSON 格式的对话消息列表 (可选)' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const text = params.text as string | undefined;\n const filePath = params.file_path as string | undefined;\n const messagesJson = params.messages as string | undefined;\n\n let content = '';\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n content = readFileSync(abs, 'utf-8');\n } else if (text) {\n content = text;\n } else if (messagesJson) {\n content = messagesJson;\n } else {\n return { success: false, error: '请提供 text、file_path 或 messages 参数', output: '' };\n }\n\n const chars = content.length;\n const words = content.split(/\\s+/).filter(w => w.length > 0).length;\n const lines = content.split('\\n').length;\n const hasCJK = CJK_RE.test(content);\n\n let tokens = 0;\n let msgsEstimate = 0;\n\n if (messagesJson) {\n try {\n const msgs = JSON.parse(messagesJson) as Array<Record<string, unknown>>;\n msgsEstimate = estimateMessageTokens(msgs);\n tokens = msgsEstimate;\n } catch {\n tokens = estimateTokens(content);\n }\n } else {\n tokens = estimateTokens(content);\n }\n\n const output = [\n `Token 估算 (DeepSeek BPE):`,\n `总 Token: ${tokens.toLocaleString()}`,\n `字符数: ${chars.toLocaleString()}`,\n `单词数: ${words.toLocaleString()} ${hasCJK ? '(含中文)' : ''}`,\n `行数: ${lines.toLocaleString()}`,\n `比率: ${(chars / tokens).toFixed(1)} 字符/Token`,\n ].join('\\n');\n\n return { success: true, output, metadata: { tokens, chars, words, lines, messagesTokens: msgsEstimate } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Skill, SkillMeta } from './types.js';\n\nexport class SkillRegistry {\n private skills = new Map<string, Skill>();\n\n register(skill: Skill): void {\n if (this.skills.has(skill.meta.name)) {\n throw new Error(`Skill already registered: ${skill.meta.name}`);\n }\n this.skills.set(skill.meta.name, skill);\n }\n\n unregister(name: string): boolean {\n return this.skills.delete(name);\n }\n\n get(name: string): Skill | undefined {\n return this.skills.get(name);\n }\n\n getAll(): Skill[] {\n return Array.from(this.skills.values());\n }\n\n findByTrigger(trigger: string): Skill[] {\n const lowerTrigger = trigger.toLowerCase();\n const matches: Skill[] = [];\n\n for (const skill of this.skills.values()) {\n if (skill.meta.triggers.some((t) => lowerTrigger.includes(t.toLowerCase()))) {\n matches.push(skill);\n }\n }\n\n return matches;\n }\n\n findByTool(toolName: string): Skill[] {\n const matches: Skill[] = [];\n\n for (const skill of this.skills.values()) {\n if (skill.meta.tools.includes(toolName)) {\n matches.push(skill);\n }\n }\n\n return matches;\n }\n\n findByDependency(depName: string): Skill[] {\n const matches: Skill[] = [];\n\n for (const skill of this.skills.values()) {\n if (skill.meta.dependencies.includes(depName)) {\n matches.push(skill);\n }\n }\n\n return matches;\n }\n\n getMeta(): SkillMeta[] {\n return Array.from(this.skills.values()).map((s) => s.meta);\n }\n\n clear(): void {\n this.skills.clear();\n }\n\n get size(): number {\n return this.skills.size;\n }\n}\n","import { readFile, readdir } from 'node:fs/promises';\nimport { existsSync, watch } from 'node:fs';\nimport { join } from 'node:path';\nimport { DEEPER_SKILLS_DIR, PROJECT_SKILLS_DIR } from '../core/constants.js';\nimport type { Skill, SkillMeta, SkillLoadResult } from './types.js';\n\nfunction parseSimpleYaml(s: string): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n const lines = s.split('\\n');\n let listKey = '';\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n const listMatch = trimmed.match(/^\\s*-\\s+(.+)/);\n if (listMatch && listKey) {\n const arr = (result[listKey] as string[]) || [];\n arr.push(listMatch[1]);\n result[listKey] = arr;\n continue;\n }\n const kv = trimmed.match(/^([^:]+):\\s*(.*)/);\n if (kv) {\n listKey = kv[2] === '' ? kv[1].trim() : '';\n if (!listKey) result[kv[1].trim()] = kv[2].trim();\n }\n }\n return result;\n}\n\ninterface FrontmatterResult {\n meta: SkillMeta;\n body: string;\n}\n\nexport class SkillLoader {\n private scanDirs: string[];\n private watchers: Array<ReturnType<typeof watch>> = [];\n\n constructor(additionalDirs?: string[]) {\n this.scanDirs = [DEEPER_SKILLS_DIR, PROJECT_SKILLS_DIR];\n if (additionalDirs) {\n this.scanDirs.push(...additionalDirs);\n }\n }\n\n async loadAll(): Promise<SkillLoadResult[]> {\n const results: SkillLoadResult[] = [];\n\n for (const dir of this.scanDirs) {\n if (!existsSync(dir)) continue;\n const dirResults = await this.scanDirectory(dir);\n results.push(...dirResults);\n }\n\n return results;\n }\n\n async loadSingle(dirPath: string, skillName: string): Promise<SkillLoadResult | null> {\n const mdPath = join(dirPath, skillName, 'skill.md');\n const jsPath = join(dirPath, skillName, 'skill.js');\n\n if (!existsSync(mdPath)) return null;\n\n try {\n const mdContent = await readFile(mdPath, 'utf-8');\n const { meta, body } = this.parseFrontmatter(mdContent);\n\n let code: string | undefined;\n if (existsSync(jsPath)) {\n code = await readFile(jsPath, 'utf-8');\n }\n\n const skill: Skill = { meta, content: body, code };\n\n return {\n skill,\n source: dirPath,\n fromCodeFile: !!code,\n };\n } catch {\n return null;\n }\n }\n\n startWatching(callback: (result: SkillLoadResult) => void): void {\n for (const dir of this.scanDirs) {\n if (!existsSync(dir)) continue;\n\n try {\n const watcher = watch(dir, { recursive: true }, async (_eventType, filename) => {\n if (!filename) return;\n const parts = filename.toString().split(/[/\\\\]/);\n if (parts.length < 2) return;\n\n const skillName = parts[0];\n const result = await this.loadSingle(dir, skillName);\n if (result) {\n callback(result);\n }\n });\n this.watchers.push(watcher);\n } catch {\n continue;\n }\n }\n }\n\n stopWatching(): void {\n for (const watcher of this.watchers) {\n watcher.close();\n }\n this.watchers = [];\n }\n\n private async scanDirectory(dirPath: string): Promise<SkillLoadResult[]> {\n const results: SkillLoadResult[] = [];\n\n try {\n const entries = await readdir(dirPath, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n\n const skillDir = join(dirPath, entry.name);\n const mdFile = join(skillDir, 'skill.md');\n\n if (!existsSync(mdFile)) continue;\n\n const result = await this.loadSingle(dirPath, entry.name);\n if (result) {\n results.push(result);\n }\n }\n } catch {\n // Directory may not exist yet\n }\n\n return results;\n }\n\n private parseFrontmatter(markdown: string): FrontmatterResult {\n const frontmatterRegex = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?([\\s\\S]*)$/;\n const match = markdown.match(frontmatterRegex);\n\n if (!match) {\n return {\n meta: {\n name: 'unnamed',\n description: 'No description',\n version: '1.0.0',\n author: 'unknown',\n triggers: [],\n tools: [],\n dependencies: [],\n },\n body: markdown,\n };\n }\n\n const yamlContent = match[1];\n const body = match[2];\n\n let parsed: Record<string, unknown> = {};\n try {\n parsed = parseSimpleYaml(yamlContent) as Record<string, unknown>;\n } catch {\n // If YAML parsing fails, use defaults\n }\n\n const meta: SkillMeta = {\n name: (parsed.name as string) || 'unnamed',\n description: (parsed.description as string) || 'No description',\n version: (parsed.version as string) || '1.0.0',\n author: (parsed.author as string) || 'unknown',\n triggers: Array.isArray(parsed.triggers) ? parsed.triggers.map(String) : [],\n tools: Array.isArray(parsed.tools) ? parsed.tools.map(String) : [],\n dependencies: Array.isArray(parsed.dependencies) ? parsed.dependencies.map(String) : [],\n };\n\n return { meta, body };\n }\n}\n","import type { Skill, SkillExecutionResult } from './types.js';\n\ninterface ExecutionContext {\n skill: Skill;\n params: Record<string, unknown>;\n env: Record<string, string>;\n}\n\nexport class SkillExecutor {\n async execute(skill: Skill, context: Record<string, unknown>): Promise<SkillExecutionResult> {\n const startTime = Date.now();\n\n try {\n let output = '';\n\n if (skill.code) {\n const codeResult = await this.runCode(skill.code, {\n skill,\n params: context,\n env: process.env as Record<string, string>,\n });\n output += codeResult;\n }\n\n if (!output) {\n output = `Skill \"${skill.meta.name}\" instructions ready for AI processing.\\n`;\n output += `Description: ${skill.meta.description}\\n`;\n output += `---\\n${skill.content}\\n---`;\n }\n\n return {\n success: true,\n output,\n duration: Date.now() - startTime,\n };\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n output: '',\n error: errMsg,\n duration: Date.now() - startTime,\n };\n }\n }\n\n async runCode(code: string, ctx: ExecutionContext): Promise<string> {\n const lines: string[] = [];\n\n const sandbox = {\n console: {\n log: (...args: unknown[]) => {\n lines.push(args.map((a) => (typeof a === 'string' ? a : JSON.stringify(a))).join(' '));\n },\n warn: (...args: unknown[]) => {\n lines.push('[WARN] ' + args.map((a) => (typeof a === 'string' ? a : JSON.stringify(a))).join(' '));\n },\n error: (...args: unknown[]) => {\n lines.push('[ERROR] ' + args.map((a) => (typeof a === 'string' ? a : JSON.stringify(a))).join(' '));\n },\n },\n skill: ctx.skill,\n params: ctx.params,\n env: ctx.env,\n fetch: globalThis.fetch,\n setTimeout: globalThis.setTimeout,\n clearTimeout: globalThis.clearTimeout,\n JSON: JSON,\n Math: Math,\n Date: Date,\n Object: Object,\n Array: Array,\n String: String,\n Number: Number,\n Boolean: Boolean,\n Map: Map,\n Set: Set,\n RegExp: RegExp,\n Error: Error,\n Promise: Promise,\n };\n\n try {\n const wrappedCode = `\n return (async () => {\n ${code}\n })();\n `;\n\n const fn = new Function(\n ...Object.keys(sandbox),\n wrappedCode,\n );\n\n const result = await fn(...Object.values(sandbox));\n\n if (result !== undefined && result !== null) {\n lines.push(typeof result === 'string' ? result : JSON.stringify(result, null, 2));\n }\n\n return lines.join('\\n');\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : String(error);\n return `Code execution error: ${errMsg}\\n${lines.join('\\n')}`;\n }\n }\n}\n","import { mkdir, writeFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { DEEPER_SKILLS_DIR } from '../core/constants.js';\nimport type { Skill, SkillMeta } from './types.js';\n\nfunction parseSimpleYaml(s: string): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n const lines = s.split('\\n');\n let listKey = '';\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n const listMatch = trimmed.match(/^\\s*-\\s+(.+)/);\n if (listMatch && listKey) {\n const arr = (result[listKey] as string[]) || [];\n arr.push(listMatch[1]);\n result[listKey] = arr;\n continue;\n }\n const kv = trimmed.match(/^([^:]+):\\s*(.*)/);\n if (kv) {\n listKey = kv[2] === '' ? kv[1].trim() : '';\n if (!listKey) result[kv[1].trim()] = kv[2].trim();\n }\n }\n return result;\n}\n\nexport interface CreateSkillInput {\n meta: SkillMeta;\n content: string;\n code?: string;\n}\n\nexport class SkillCreator {\n private outputDir: string;\n\n constructor(outputDir?: string) {\n this.outputDir = outputDir || DEEPER_SKILLS_DIR;\n }\n\n async create(input: CreateSkillInput): Promise<Skill> {\n const skillDir = join(this.outputDir, input.meta.name);\n\n await mkdir(skillDir, { recursive: true });\n\n const yamlFrontmatter = this.buildYamlFrontmatter(input.meta);\n const mdContent = `---\\n${yamlFrontmatter}---\\n\\n${input.content}`;\n\n const mdPath = join(skillDir, 'skill.md');\n await writeFile(mdPath, mdContent, 'utf-8');\n\n if (input.code) {\n const jsPath = join(skillDir, 'skill.js');\n await writeFile(jsPath, input.code, 'utf-8');\n }\n\n return {\n meta: input.meta,\n content: input.content,\n code: input.code,\n };\n }\n\n async update(name: string, updates: Partial<CreateSkillInput>): Promise<Skill | null> {\n const skillDir = join(this.outputDir, name);\n const mdPath = join(skillDir, 'skill.md');\n\n if (!existsSync(mdPath)) {\n return null;\n }\n\n const { readFile } = await import('node:fs/promises');\n const existingMd = await readFile(mdPath, 'utf-8');\n\n let existingMeta: SkillMeta = {\n name,\n description: '',\n version: '1.0.0',\n author: 'unknown',\n triggers: [],\n tools: [],\n dependencies: [],\n };\n\n let existingBody = existingMd;\n\n const frontmatterRegex = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?([\\s\\S]*)$/;\n const match = existingMd.match(frontmatterRegex);\n if (match) {\n try {\n const parsed = parseSimpleYaml(match[1]) as Record<string, unknown>;\n existingMeta = {\n name: (parsed.name as string) || name,\n description: (parsed.description as string) || '',\n version: (parsed.version as string) || '1.0.0',\n author: (parsed.author as string) || 'unknown',\n triggers: Array.isArray(parsed.triggers) ? parsed.triggers.map(String) : [],\n tools: Array.isArray(parsed.tools) ? parsed.tools.map(String) : [],\n dependencies: Array.isArray(parsed.dependencies) ? parsed.dependencies.map(String) : [],\n };\n } catch {\n // Use defaults\n }\n existingBody = match[2];\n }\n\n const newMeta: SkillMeta = {\n ...existingMeta,\n ...updates.meta,\n };\n\n const newContent = updates.content || existingBody;\n\n return this.create({\n meta: newMeta,\n content: newContent,\n code: updates.code,\n });\n }\n\n private buildYamlFrontmatter(meta: SkillMeta): string {\n const lines: string[] = [];\n lines.push(`name: ${meta.name}`);\n lines.push(`description: ${meta.description}`);\n lines.push(`version: ${meta.version}`);\n lines.push(`author: ${meta.author}`);\n\n if (meta.triggers.length > 0) {\n lines.push('triggers:');\n for (const t of meta.triggers) {\n lines.push(` - ${t}`);\n }\n }\n\n if (meta.tools.length > 0) {\n lines.push('tools:');\n for (const t of meta.tools) {\n lines.push(` - ${t}`);\n }\n }\n\n if (meta.dependencies.length > 0) {\n lines.push('dependencies:');\n for (const d of meta.dependencies) {\n lines.push(` - ${d}`);\n }\n }\n\n return lines.join('\\n') + '\\n';\n }\n}\n","import type { Skill } from './types.js';\nimport type { SkillRegistry } from './SkillRegistry.js';\n\ninterface TriggerMatch {\n skill: Skill;\n score: number;\n matchedTriggers: string[];\n}\n\nexport class SkillTrigger {\n private registry: SkillRegistry;\n\n constructor(registry: SkillRegistry) {\n this.registry = registry;\n }\n\n match(input: string): Skill[] {\n const lowerInput = input.toLowerCase();\n const matches: TriggerMatch[] = [];\n\n for (const skill of this.registry.getAll()) {\n const matchedTriggers: string[] = [];\n let score = 0;\n\n for (const trigger of skill.meta.triggers) {\n const lowerTrigger = trigger.toLowerCase();\n if (lowerInput.includes(lowerTrigger)) {\n matchedTriggers.push(trigger);\n score += lowerTrigger.length;\n }\n }\n\n const nameMatch = skill.meta.name.toLowerCase();\n if (lowerInput.includes(nameMatch)) {\n matchedTriggers.push(skill.meta.name);\n score += nameMatch.length * 2;\n }\n\n const descWords = skill.meta.description.toLowerCase().split(/\\s+/);\n for (const word of descWords) {\n if (word.length > 3 && lowerInput.includes(word)) {\n score += 1;\n }\n }\n\n if (matchedTriggers.length > 0 || score > 0) {\n matches.push({ skill, score, matchedTriggers });\n }\n }\n\n matches.sort((a, b) => b.score - a.score);\n\n return matches.map((m) => m.skill);\n }\n\n getRecommendedSkills(input: string, maxResults: number = 3): Array<{\n skill: Skill;\n reason: string;\n }> {\n const matched = this.match(input).slice(0, maxResults);\n\n return matched.map((skill) => {\n const reasons: string[] = [];\n\n const lowerInput = input.toLowerCase();\n for (const trigger of skill.meta.triggers) {\n if (lowerInput.includes(trigger.toLowerCase())) {\n reasons.push(`matched trigger: \"${trigger}\"`);\n }\n }\n\n if (lowerInput.includes(skill.meta.name.toLowerCase())) {\n reasons.push(`matched name: \"${skill.meta.name}\"`);\n }\n\n return {\n skill,\n reason: reasons.length > 0 ? reasons.join(', ') : 'contextually relevant',\n };\n });\n }\n}\n","import { EventEmitter } from 'node:events';\n\nexport interface ContextUpdatedPayload {\n modelName: string;\n tokenCount: number;\n memoryUsage: number;\n uptime: number;\n}\n\nexport interface MessagePayload {\n id: string;\n role: 'user' | 'assistant' | 'system';\n content: string;\n thinking?: string;\n timestamp: number;\n}\n\nexport interface ToolCallPayload {\n id: string;\n toolName: string;\n args: Record<string, unknown>;\n status: 'pending' | 'running' | 'completed' | 'failed';\n result?: string;\n}\n\nexport interface DiffPayload {\n filePath: string;\n oldContent: string;\n newContent: string;\n}\n\nexport interface AgentPayload {\n id: string;\n name: string;\n status: 'idle' | 'running' | 'completed' | 'failed';\n parentId?: string;\n task: string;\n children?: AgentPayload[];\n}\n\nexport const Events = {\n CONTEXT_UPDATED: 'context:updated',\n MESSAGE_SEND: 'message:send',\n MESSAGE_RECEIVED: 'message:received',\n MESSAGE_STREAMING: 'message:streaming',\n TOOL_CALL_START: 'tool:call:start',\n TOOL_CALL_END: 'tool:call:end',\n FILE_DIFF: 'file:diff',\n AGENT_TREE_UPDATED: 'agent:tree:updated',\n APP_QUIT: 'app:quit',\n APP_CLEAR: 'app:clear',\n STATUS_UPDATE: 'status:update',\n CONFIG_CHANGED: 'config:changed',\n AGENT_STATUS_CHANGE: 'agent:status:change',\n AGENT_CREATED: 'agent:created',\n AGENT_THINKING: 'agent:thinking',\n AGENT_EXECUTING: 'agent:executing',\n AGENT_WAITING: 'agent:waiting',\n AGENT_COMPLETED: 'agent:completed',\n AGENT_FAILED: 'agent:failed',\n AGENT_CANCELLED: 'agent:cancelled',\n AGENT_LOOP_ITERATION: 'agent:loop:iteration',\n AGENT_LOOP_DETECTED: 'agent:loop:detected',\n AGENT_LOOP_LIMIT: 'agent:loop:limit',\n TOOL_CALL_ERROR: 'tool:call:error',\n ORCHESTRATOR_DECOMPOSE: 'orchestrator:decompose',\n ORCHESTRATOR_DISPATCH: 'orchestrator:dispatch',\n ORCHESTRATOR_AGGREGATE: 'orchestrator:aggregate',\n SUBAGENT_START: 'subagent:start',\n SUBAGENT_TIMEOUT: 'subagent:timeout',\n SUBAGENT_COMPLETE: 'subagent:complete',\n SUBAGENT_ERROR: 'subagent:error',\n POOL_ACQUIRE: 'pool:acquire',\n POOL_RELEASE: 'pool:release',\n POOL_QUEUE: 'pool:queue',\n CONTEXT_SUMMARIZED: 'context:summarized',\n CONTEXT_TOKEN_WARNING: 'context:token:warning',\n MCP_CONNECTED: 'mcp:connected',\n MCP_ERROR: 'mcp:error',\n MCP_DISCONNECTED: 'mcp:disconnected',\n MCP_TOOLS_DISCOVERED: 'mcp:tools:discovered',\n SKILL_LOADED: 'skill:loaded',\n SKILL_EXECUTED: 'skill:executed',\n SKILL_CREATED: 'skill:created',\n SKILL_TRIGGERED: 'skill:triggered',\n} as const;\n\nexport const EventBusEvents = Events;\n\nexport class EventBus extends EventEmitter {\n private static instance: EventBus;\n\n static getInstance(): EventBus {\n if (!EventBus.instance) {\n EventBus.instance = new EventBus();\n }\n return EventBus.instance;\n }\n\n onContextUpdated(handler: (payload: ContextUpdatedPayload) => void): void {\n this.on(EventBusEvents.CONTEXT_UPDATED, handler);\n }\n\n emitContextUpdated(payload: ContextUpdatedPayload): void {\n this.emit(EventBusEvents.CONTEXT_UPDATED, payload);\n }\n\n onMessageSend(handler: (payload: { content: string }) => void): void {\n this.on(EventBusEvents.MESSAGE_SEND, handler);\n }\n\n emitMessageSend(payload: { content: string }): void {\n this.emit(EventBusEvents.MESSAGE_SEND, payload);\n }\n\n onMessageReceived(handler: (payload: MessagePayload) => void): void {\n this.on(EventBusEvents.MESSAGE_RECEIVED, handler);\n }\n\n emitMessageReceived(payload: MessagePayload): void {\n this.emit(EventBusEvents.MESSAGE_RECEIVED, payload);\n }\n\n onMessageStreaming(handler: (payload: { id: string; content: string; thinking?: string }) => void): void {\n this.on(EventBusEvents.MESSAGE_STREAMING, handler);\n }\n\n emitMessageStreaming(payload: { id: string; content: string; thinking?: string }): void {\n this.emit(EventBusEvents.MESSAGE_STREAMING, payload);\n }\n\n onToolCallStart(handler: (payload: ToolCallPayload) => void): void {\n this.on(EventBusEvents.TOOL_CALL_START, handler);\n }\n\n emitToolCallStart(payload: ToolCallPayload): void {\n this.emit(EventBusEvents.TOOL_CALL_START, payload);\n }\n\n onToolCallEnd(handler: (payload: ToolCallPayload) => void): void {\n this.on(EventBusEvents.TOOL_CALL_END, handler);\n }\n\n emitToolCallEnd(payload: ToolCallPayload): void {\n this.emit(EventBusEvents.TOOL_CALL_END, payload);\n }\n\n onFileDiff(handler: (payload: DiffPayload) => void): void {\n this.on(EventBusEvents.FILE_DIFF, handler);\n }\n\n emitFileDiff(payload: DiffPayload): void {\n this.emit(EventBusEvents.FILE_DIFF, payload);\n }\n\n onAgentTreeUpdated(handler: (payload: { agents: AgentPayload[] }) => void): void {\n this.on(EventBusEvents.AGENT_TREE_UPDATED, handler);\n }\n\n emitAgentTreeUpdated(payload: { agents: AgentPayload[] }): void {\n this.emit(EventBusEvents.AGENT_TREE_UPDATED, payload);\n }\n\n onAppQuit(handler: () => void): void {\n this.on(EventBusEvents.APP_QUIT, handler);\n }\n\n emitAppQuit(): void {\n this.emit(EventBusEvents.APP_QUIT);\n }\n\n onAppClear(handler: () => void): void {\n this.on(EventBusEvents.APP_CLEAR, handler);\n }\n\n emitAppClear(): void {\n this.emit(EventBusEvents.APP_CLEAR);\n }\n\n onStatusUpdate(handler: (payload: Partial<ContextUpdatedPayload>) => void): void {\n this.on(EventBusEvents.STATUS_UPDATE, handler);\n }\n\n emitStatusUpdate(payload: Partial<ContextUpdatedPayload>): void {\n this.emit(EventBusEvents.STATUS_UPDATE, payload);\n }\n\n onConfigChanged(handler: (payload: Record<string, unknown>) => void): void {\n this.on(EventBusEvents.CONFIG_CHANGED, handler);\n }\n\n emitConfigChanged(payload: Record<string, unknown>): void {\n this.emit(EventBusEvents.CONFIG_CHANGED, payload);\n }\n\n reset(): void {\n this.removeAllListeners();\n }\n}\n\nexport const eventbus = EventBus.getInstance();\nexport const globalEventBus = eventbus;\n","import { SkillRegistry } from './SkillRegistry.js';\nimport { SkillLoader } from './SkillLoader.js';\nimport { SkillExecutor } from './SkillExecutor.js';\nimport { SkillCreator } from './SkillCreator.js';\nimport { SkillTrigger } from './SkillTrigger.js';\nimport { EventBus, Events } from '../core/eventbus.js';\nimport type { Skill, SkillExecutionResult } from './types.js';\n\nexport class SkillEngine {\n private registry: SkillRegistry;\n private loader: SkillLoader;\n private executor: SkillExecutor;\n private creator: SkillCreator;\n private trigger: SkillTrigger;\n private eventbus: EventBus;\n\n constructor(eventbus?: EventBus) {\n this.registry = new SkillRegistry();\n this.loader = new SkillLoader();\n this.executor = new SkillExecutor();\n this.creator = new SkillCreator();\n this.trigger = new SkillTrigger(this.registry);\n this.eventbus = eventbus || new EventBus();\n }\n\n getRegistry(): SkillRegistry {\n return this.registry;\n }\n\n getLoader(): SkillLoader {\n return this.loader;\n }\n\n getTrigger(): SkillTrigger {\n return this.trigger;\n }\n\n async loadAll(): Promise<number> {\n const results = await this.loader.loadAll();\n let count = 0;\n\n for (const result of results) {\n this.registry.register(result.skill);\n count++;\n this.eventbus.emit(Events.SKILL_LOADED, {\n name: result.skill.meta.name,\n source: result.source,\n hasCode: !!result.skill.code,\n });\n }\n\n return count;\n }\n\n async reload(): Promise<number> {\n this.registry.clear();\n return this.loadAll();\n }\n\n async execute(name: string, context: Record<string, unknown>): Promise<SkillExecutionResult> {\n const skill = this.registry.get(name);\n if (!skill) {\n return {\n success: false,\n output: '',\n error: `Skill not found: ${name}`,\n duration: 0,\n };\n }\n\n const startTime = Date.now();\n try {\n const result = await this.executor.execute(skill, context);\n const duration = Date.now() - startTime;\n\n this.eventbus.emit(Events.SKILL_EXECUTED, {\n name: skill.meta.name,\n success: result.success,\n duration,\n });\n\n return { ...result, duration };\n } catch (error) {\n const duration = Date.now() - startTime;\n const errMsg = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n output: '',\n error: errMsg,\n duration,\n };\n }\n }\n\n async createSkill(\n name: string,\n description: string,\n content: string,\n code?: string,\n ): Promise<Skill> {\n const skill = await this.creator.create({\n meta: {\n name,\n description,\n version: '1.0.0',\n author: 'DeeperCode AI',\n triggers: [],\n tools: [],\n dependencies: [],\n },\n content,\n code,\n });\n\n this.registry.register(skill);\n\n this.eventbus.emit(Events.SKILL_CREATED, {\n name: skill.meta.name,\n description: skill.meta.description,\n });\n\n return skill;\n }\n\n matchTriggers(input: string): Skill[] {\n const matches = this.trigger.match(input);\n for (const skill of matches) {\n this.eventbus.emit(Events.SKILL_TRIGGERED, {\n name: skill.meta.name,\n input: input.slice(0, 100),\n });\n }\n return matches;\n }\n\n getSystemPrompt(context?: Record<string, unknown>): string {\n const allSkills = this.registry.getAll();\n if (allSkills.length === 0) return '';\n\n let prompt = 'Available Skills:\\n\\n';\n for (const skill of allSkills) {\n prompt += `## ${skill.meta.name} (v${skill.meta.version})\\n`;\n prompt += `${skill.meta.description}\\n`;\n\n if (skill.meta.triggers.length > 0) {\n prompt += `Triggers: ${skill.meta.triggers.join(', ')}\\n`;\n }\n\n prompt += `---\\n${skill.content.slice(0, 1000)}\\n`;\n if (skill.content.length > 1000) {\n prompt += '...(truncated)\\n';\n }\n prompt += '\\n';\n }\n\n return prompt;\n }\n}\n","import { spawn } from 'node:child_process';\nimport type { ChildProcess } from 'node:child_process';\nimport { createInterface } from 'node:readline';\nimport type { MCPServerConfig, JSONRPCMessage, MCPTransport } from './types.js';\n\nexport class StdioTransport implements MCPTransport {\n private process: ChildProcess | null = null;\n private messageHandlers: Array<(message: JSONRPCMessage) => void> = [];\n private connected: boolean = false;\n private buffer: string = '';\n\n async connect(config: MCPServerConfig): Promise<void> {\n if (!config.command) {\n throw new Error('StdioTransport requires a command');\n }\n\n const env = {\n ...process.env,\n ...config.env,\n };\n\n this.process = spawn(config.command, config.args || [], {\n stdio: ['pipe', 'pipe', 'pipe'],\n env,\n shell: true,\n });\n\n const rl = createInterface({ input: this.process.stdout! });\n\n rl.on('line', (line: string) => {\n try {\n const message = JSON.parse(line) as JSONRPCMessage;\n for (const handler of this.messageHandlers) {\n handler(message);\n }\n } catch {\n this.buffer += line;\n }\n });\n\n this.process.stderr?.on('data', (data: Buffer) => {\n const text = data.toString();\n try {\n const message = JSON.parse(text) as JSONRPCMessage;\n for (const handler of this.messageHandlers) {\n handler(message);\n }\n } catch {\n // MCP stderr is for logging, not JSON-RPC\n }\n });\n\n this.process.on('exit', (code) => {\n this.connected = false;\n if (code !== 0 && code !== null) {\n for (const handler of this.messageHandlers) {\n handler({\n jsonrpc: '2.0',\n method: 'exit',\n params: { code },\n });\n }\n }\n });\n\n this.process.on('error', (err) => {\n this.connected = false;\n for (const handler of this.messageHandlers) {\n handler({\n jsonrpc: '2.0',\n method: 'error',\n params: { message: err.message },\n });\n }\n });\n\n this.connected = true;\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this.process || !this.connected) {\n throw new Error('StdioTransport not connected');\n }\n\n const line = JSON.stringify(message) + '\\n';\n await new Promise<void>((resolve, reject) => {\n this.process!.stdin!.write(line, (err) => {\n if (err) reject(err);\n else resolve();\n });\n });\n }\n\n onMessage(handler: (message: JSONRPCMessage) => void): () => void {\n this.messageHandlers.push(handler);\n return () => {\n const idx = this.messageHandlers.indexOf(handler);\n if (idx !== -1) {\n this.messageHandlers.splice(idx, 1);\n }\n };\n }\n\n disconnect(): void {\n if (this.process) {\n this.process.stdin?.end();\n this.process.kill();\n this.process = null;\n }\n this.connected = false;\n }\n\n isConnected(): boolean {\n return this.connected && this.process !== null && !this.process.killed;\n }\n}\n","import type { MCPServerConfig, JSONRPCMessage, MCPTransport } from './types.js';\n\nexport class SSETransport implements MCPTransport {\n private url: string = '';\n private headers: Record<string, string> = {};\n private messageHandlers: Array<(message: JSONRPCMessage) => void> = [];\n private connected: boolean = false;\n private abortController: AbortController | null = null;\n\n async connect(config: MCPServerConfig): Promise<void> {\n if (!config.url) {\n throw new Error('SSETransport requires a URL');\n }\n\n this.url = config.url;\n this.headers = config.headers || {};\n this.abortController = new AbortController();\n\n this.connected = true;\n\n this.establishSSEConnection();\n }\n\n private async establishSSEConnection(): Promise<void> {\n try {\n const response = await fetch(this.url, {\n method: 'GET',\n headers: {\n Accept: 'text/event-stream',\n ...this.headers,\n },\n signal: this.abortController!.signal,\n });\n\n if (!response.ok) {\n throw new Error(`SSE connection failed: ${response.status} ${response.statusText}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('SSE response has no readable body');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (this.connected) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n let eventData = '';\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n eventData += line.slice(6);\n } else if (line === '' && eventData) {\n try {\n const message = JSON.parse(eventData) as JSONRPCMessage;\n for (const handler of this.messageHandlers) {\n handler(message);\n }\n } catch {\n // Ignore non-JSON SSE data\n }\n eventData = '';\n }\n }\n }\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n this.connected = false;\n for (const handler of this.messageHandlers) {\n handler({\n jsonrpc: '2.0',\n method: 'error',\n params: { message: String(error) },\n });\n }\n }\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this.connected) {\n throw new Error('SSETransport not connected');\n }\n\n const response = await fetch(this.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.headers,\n },\n body: JSON.stringify(message),\n signal: this.abortController!.signal,\n });\n\n if (!response.ok) {\n throw new Error(`SSE POST failed: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json() as JSONRPCMessage;\n for (const handler of this.messageHandlers) {\n handler(data);\n }\n }\n\n onMessage(handler: (message: JSONRPCMessage) => void): () => void {\n this.messageHandlers.push(handler);\n return () => {\n const idx = this.messageHandlers.indexOf(handler);\n if (idx !== -1) {\n this.messageHandlers.splice(idx, 1);\n }\n };\n }\n\n disconnect(): void {\n this.connected = false;\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n }\n\n isConnected(): boolean {\n return this.connected;\n }\n}\n","import type { Tool, ToolResult } from '../tools/tool-types.js';\nimport type { MCPTool } from './types.js';\nimport type { MCPClient } from './MCPClient.js';\n\nexport class ToolAdapter {\n private client: MCPClient;\n\n constructor(client: MCPClient) {\n this.client = client;\n }\n\n adapt(mcpTool: MCPTool, serverName: string): Tool {\n const adaptedName = `mcp:${serverName}:${mcpTool.name}`;\n\n const tool: Tool = {\n name: adaptedName,\n description: `[MCP:${serverName}] ${mcpTool.description}`,\n category: this.inferCategory(mcpTool) as string,\n parameters: mcpTool.inputSchema,\n dangerous: false,\n requiresApproval: false,\n execute: async (params: Record<string, unknown>, signal?: AbortSignal): Promise<ToolResult> => {\n try {\n const result = await this.client.callTool(serverName, mcpTool.name, params);\n return result;\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n output: '',\n error: `MCP tool error [${serverName}/${mcpTool.name}]: ${errMsg}`,\n };\n }\n },\n };\n\n return tool;\n }\n\n adaptBatch(mcpTools: MCPTool[], serverName: string): Tool[] {\n return mcpTools.map((t) => this.adapt(t, serverName));\n }\n\n private inferCategory(mcpTool: MCPTool): string {\n const desc = (mcpTool.description + ' ' + mcpTool.name).toLowerCase();\n\n if (desc.includes('file') || desc.includes('dir') || desc.includes('path')) {\n return 'filesystem';\n }\n if (desc.includes('search') || desc.includes('find') || desc.includes('query')) {\n return 'search';\n }\n if (desc.includes('shell') || desc.includes('command') || desc.includes('exec')) {\n return 'shell';\n }\n if (desc.includes('http') || desc.includes('api') || desc.includes('fetch') || desc.includes('url')) {\n return 'network';\n }\n if (desc.includes('code') || desc.includes('lint') || desc.includes('compile')) {\n return 'code';\n }\n if (desc.includes('db') || desc.includes('sql') || desc.includes('database')) {\n return 'database';\n }\n if (desc.includes('security') || desc.includes('auth') || desc.includes('token')) {\n return 'security';\n }\n\n return 'system';\n }\n}\n","import type { Tool, ToolResult } from '../tools/tool-types.js';\nimport type { MCPResource } from './types.js';\nimport type { MCPClient } from './MCPClient.js';\n\nexport class ResourceAdapter {\n private client: MCPClient;\n\n constructor(client: MCPClient) {\n this.client = client;\n }\n\n async readResource(serverName: string, uri: string): Promise<string> {\n const content = await this.client.readResource(serverName, uri);\n return content;\n }\n\n async listResources(serverName: string): Promise<MCPResource[]> {\n return this.client.listResources(serverName);\n }\n\n createResourceTools(resources: MCPResource[], serverName: string): Tool[] {\n return resources.map((resource) => this.adaptResource(resource, serverName));\n }\n\n private adaptResource(resource: MCPResource, serverName: string): Tool {\n const adaptedName = `mcp:${serverName}:resource:${resource.name}`;\n\n return {\n name: adaptedName,\n description: `[MCP:${serverName}] Read resource: ${resource.name} (${resource.uri})`,\n category: 'system',\n parameters: {\n type: 'object',\n properties: {},\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n execute: async (_params: Record<string, unknown>, _signal?: AbortSignal): Promise<ToolResult> => {\n try {\n const content = await this.client.readResource(serverName, resource.uri);\n return {\n success: true,\n output: content,\n metadata: { uri: resource.uri, mimeType: resource.mimeType },\n };\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n output: '',\n error: `MCP resource error [${serverName}/${resource.name}]: ${errMsg}`,\n };\n }\n },\n };\n }\n}\n","import { EventBus, Events } from '../core/eventbus.js';\nimport { StdioTransport } from './StdioTransport.js';\nimport { SSETransport } from './SSETransport.js';\nimport { ToolAdapter } from './ToolAdapter.js';\nimport { ResourceAdapter } from './ResourceAdapter.js';\nimport type {\n MCPServerConfig,\n MCPTool,\n MCPResource,\n MCPTransport,\n JSONRPCMessage,\n JSONRPCResponse,\n} from './types.js';\nimport type { Tool, ToolResult } from '../tools/tool-types.js';\nimport { MCP_CONNECTION_TIMEOUT_MS } from '../core/constants.js';\n\ninterface ServerConnection {\n config: MCPServerConfig;\n transport: MCPTransport;\n tools: MCPTool[];\n resources: MCPResource[];\n connected: boolean;\n}\n\nexport class MCPClient {\n private servers = new Map<string, ServerConnection>();\n private eventbus: EventBus;\n private toolAdapter: ToolAdapter;\n private resourceAdapter: ResourceAdapter;\n private requestIdCounter = 0;\n\n constructor(eventbus?: EventBus) {\n this.eventbus = eventbus || new EventBus();\n this.toolAdapter = new ToolAdapter(this);\n this.resourceAdapter = new ResourceAdapter(this);\n }\n\n async connect(config: MCPServerConfig): Promise<void> {\n if (this.servers.has(config.name)) {\n await this.disconnect(config.name);\n }\n\n const transport: MCPTransport = config.type === 'stdio'\n ? new StdioTransport()\n : new SSETransport();\n\n const connection: ServerConnection = {\n config,\n transport,\n tools: [],\n resources: [],\n connected: false,\n };\n\n this.servers.set(config.name, connection);\n\n try {\n const connectPromise = transport.connect(config);\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error(`Connection timeout: ${config.name}`)), MCP_CONNECTION_TIMEOUT_MS);\n });\n\n await Promise.race([connectPromise, timeoutPromise]);\n\n connection.connected = true;\n\n transport.onMessage((message: JSONRPCMessage) => {\n this.handleMessage(config.name, message);\n });\n\n await this.initializeServer(config.name);\n\n this.eventbus.emit(Events.MCP_CONNECTED, {\n serverName: config.name,\n type: config.type,\n });\n } catch (error) {\n transport.disconnect();\n this.servers.delete(config.name);\n\n this.eventbus.emit(Events.MCP_ERROR, {\n serverName: config.name,\n error: error instanceof Error ? error.message : String(error),\n });\n\n throw error;\n }\n }\n\n disconnect(name: string): void {\n const connection = this.servers.get(name);\n if (!connection) return;\n\n connection.transport.disconnect();\n connection.connected = false;\n this.servers.delete(name);\n\n this.eventbus.emit(Events.MCP_DISCONNECTED, {\n serverName: name,\n });\n }\n\n disconnectAll(): void {\n for (const name of this.servers.keys()) {\n this.disconnect(name);\n }\n }\n\n listTools(serverName?: string): MCPTool[] {\n if (serverName) {\n const connection = this.servers.get(serverName);\n return connection ? [...connection.tools] : [];\n }\n\n const allTools: MCPTool[] = [];\n for (const [, conn] of this.servers) {\n allTools.push(...conn.tools);\n }\n return allTools;\n }\n\n getAdaptedTools(): Tool[] {\n const tools: Tool[] = [];\n for (const [name, conn] of this.servers) {\n tools.push(...this.toolAdapter.adaptBatch(conn.tools, name));\n }\n return tools;\n }\n\n async callTool(\n serverName: string,\n toolName: string,\n args: Record<string, unknown>,\n ): Promise<ToolResult> {\n const connection = this.servers.get(serverName);\n if (!connection) {\n return {\n success: false,\n output: '',\n error: `Server not connected: ${serverName}`,\n };\n }\n\n if (!connection.connected) {\n return {\n success: false,\n output: '',\n error: `Server disconnected: ${serverName}`,\n };\n }\n\n try {\n const requestId = ++this.requestIdCounter;\n const response = await this.sendRequest(connection, requestId, 'tools/call', {\n name: toolName,\n arguments: args,\n });\n\n const result = response.result as Record<string, unknown> | undefined;\n const content = result?.content;\n\n if (Array.isArray(content)) {\n const textParts = content\n .filter((c: unknown) => {\n const item = c as Record<string, unknown>;\n return item?.type === 'text' && typeof item?.text === 'string';\n })\n .map((c: unknown) => (c as Record<string, string>).text);\n\n return {\n success: true,\n output: textParts.join('\\n'),\n };\n }\n\n return {\n success: true,\n output: typeof content === 'string' ? content : JSON.stringify(content),\n };\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n output: '',\n error: errMsg,\n };\n }\n }\n\n async listResources(serverName: string): Promise<MCPResource[]> {\n const connection = this.servers.get(serverName);\n if (!connection) return [];\n\n try {\n const requestId = ++this.requestIdCounter;\n const response = await this.sendRequest(connection, requestId, 'resources/list', {});\n\n const result = response.result as Record<string, unknown> | undefined;\n const resources = result?.resources;\n\n if (Array.isArray(resources)) {\n return resources as MCPResource[];\n }\n\n return [];\n } catch {\n return [];\n }\n }\n\n async readResource(serverName: string, uri: string): Promise<string> {\n const connection = this.servers.get(serverName);\n if (!connection) {\n throw new Error(`Server not connected: ${serverName}`);\n }\n\n const requestId = ++this.requestIdCounter;\n const response = await this.sendRequest(connection, requestId, 'resources/read', { uri });\n\n const result = response.result as Record<string, unknown> | undefined;\n const contents = result?.contents;\n\n if (Array.isArray(contents)) {\n const textParts = contents\n .filter((c: unknown) => {\n const item = c as Record<string, unknown>;\n return typeof item?.text === 'string';\n })\n .map((c: unknown) => (c as Record<string, string>).text);\n\n return textParts.join('\\n');\n }\n\n return JSON.stringify(contents);\n }\n\n isConnected(name: string): boolean {\n const connection = this.servers.get(name);\n return connection ? connection.connected : false;\n }\n\n getConnectedServers(): string[] {\n const names: string[] = [];\n for (const [name, conn] of this.servers) {\n if (conn.connected) {\n names.push(name);\n }\n }\n return names;\n }\n\n private async initializeServer(serverName: string): Promise<void> {\n const connection = this.servers.get(serverName);\n if (!connection) return;\n\n const initRequestId = ++this.requestIdCounter;\n const initResponse = await this.sendRequest(connection, initRequestId, 'initialize', {\n protocolVersion: '2024-11-18',\n capabilities: {\n tools: {},\n resources: {},\n },\n clientInfo: {\n name: 'DeeperCode',\n version: '1.0.0',\n },\n });\n\n const notifyMessage = {\n jsonrpc: '2.0' as const,\n method: 'notifications/initialized',\n };\n await connection.transport.send(notifyMessage);\n\n const toolsRequestId = ++this.requestIdCounter;\n const toolsResponse = await this.sendRequest(connection, toolsRequestId, 'tools/list', {});\n\n const toolsResult = toolsResponse.result as Record<string, unknown> | undefined;\n if (toolsResult?.tools && Array.isArray(toolsResult.tools)) {\n connection.tools = toolsResult.tools as MCPTool[];\n }\n\n this.eventbus.emit(Events.MCP_TOOLS_DISCOVERED, {\n serverName,\n toolCount: connection.tools.length,\n tools: connection.tools.map((t) => t.name),\n });\n }\n\n private async sendRequest(\n connection: ServerConnection,\n requestId: number,\n method: string,\n params: Record<string, unknown>,\n timeoutMs: number = 30000,\n ): Promise<JSONRPCResponse> {\n const request = {\n jsonrpc: '2.0' as const,\n id: requestId,\n method,\n params,\n };\n\n const responsePromise = new Promise<JSONRPCResponse>((resolve, reject) => {\n const timeout = setTimeout(() => {\n cleanup();\n reject(new Error(`Request timeout: ${method}`));\n }, timeoutMs);\n\n const cleanup = connection.transport.onMessage((message: JSONRPCMessage) => {\n if ('id' in message && message.id === requestId) {\n clearTimeout(timeout);\n cleanup();\n resolve(message as JSONRPCResponse);\n }\n });\n });\n\n await connection.transport.send(request);\n return responsePromise;\n }\n\n private handleMessage(_serverName: string, _message: JSONRPCMessage): void {\n // Messages are handled through the request/response pattern in sendRequest\n }\n}\n","export interface RetryOptions {\n onRetry?: (error: Error, attempt: number, delayMs: number) => void;\n}\n\nexport class RetryManager {\n private maxRetries: number;\n private baseDelayMs: number;\n private maxDelayMs: number;\n\n constructor(maxRetries: number = 3, baseDelayMs: number = 1000, maxDelayMs: number = 30000) {\n this.maxRetries = maxRetries;\n this.baseDelayMs = baseDelayMs;\n this.maxDelayMs = maxDelayMs;\n }\n\n async execute<T>(\n fn: () => Promise<T>,\n shouldRetry?: (error: Error, attempt: number) => boolean,\n options?: RetryOptions,\n ): Promise<T> {\n let lastError: Error | undefined;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n if (attempt === this.maxRetries) {\n break;\n }\n\n if (shouldRetry && !shouldRetry(lastError, attempt)) {\n break;\n }\n\n if (!shouldRetry && this.isDefaultNonRetryable(lastError)) {\n break;\n }\n\n const delay = this.calculateDelay(attempt);\n\n if (options?.onRetry) {\n options.onRetry(lastError, attempt, delay);\n }\n\n await this.sleep(delay);\n }\n }\n\n throw lastError ?? new Error('Max retries exceeded');\n }\n\n withTimeout<T>(fn: () => Promise<T>, timeoutMs: number, signal?: AbortSignal): Promise<T> {\n const controller = new AbortController();\n\n return new Promise<T>((resolve, reject) => {\n const timer = setTimeout(() => {\n controller.abort();\n reject(new Error(`Request timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n\n const onAbort = (): void => {\n clearTimeout(timer);\n controller.abort();\n reject(new Error('Request was aborted'));\n };\n\n if (signal) {\n if (signal.aborted) {\n clearTimeout(timer);\n controller.abort();\n reject(new Error('Request was aborted'));\n return;\n }\n signal.addEventListener('abort', onAbort, { once: true });\n }\n\n fn()\n .then((result) => {\n clearTimeout(timer);\n if (signal) {\n signal.removeEventListener('abort', onAbort);\n }\n resolve(result);\n })\n .catch((error) => {\n clearTimeout(timer);\n if (signal) {\n signal.removeEventListener('abort', onAbort);\n }\n reject(error);\n });\n });\n }\n\n private calculateDelay(attempt: number): number {\n const exponentialDelay = this.baseDelayMs * Math.pow(2, attempt);\n const jitter = Math.random() * exponentialDelay;\n return Math.min(exponentialDelay + jitter, this.maxDelayMs);\n }\n\n private isDefaultNonRetryable(error: Error): boolean {\n const msg = error.message.toLowerCase();\n if (msg.includes('400') && !msg.includes('429')) return true;\n if (msg.includes('401') || msg.includes('unauthorized')) return true;\n if (msg.includes('403') || msg.includes('forbidden')) return true;\n if (msg.includes('404') || msg.includes('not found')) return true;\n return false;\n }\n\n private sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(resolve, ms);\n if (signal) {\n const onAbort = () => {\n clearTimeout(timer);\n reject(new Error('Retry sleep was aborted'));\n };\n if (signal.aborted) {\n clearTimeout(timer);\n reject(new Error('Retry sleep was aborted'));\n return;\n }\n signal.addEventListener('abort', onAbort, { once: true });\n }\n });\n }\n}\n","import type { ToolCall } from '../tools/tool-types.js';\nimport type { StreamChunk } from './types.js';\n\ninterface ParsedSSEEvent {\n data: string;\n event?: string;\n id?: string;\n}\n\ninterface PendingToolCall {\n id: string;\n name: string;\n argsStr: string;\n index: number;\n started: boolean;\n}\n\nexport class StreamHandler {\n private textBuffer: string;\n private thinkingBuffer: string;\n private toolCallBuffer: Map<number, PendingToolCall>;\n private finished: boolean;\n private lastYieldedIndex: number;\n\n constructor() {\n this.textBuffer = '';\n this.thinkingBuffer = '';\n this.toolCallBuffer = new Map();\n this.finished = false;\n this.lastYieldedIndex = -1;\n }\n\n reset(): void {\n this.textBuffer = '';\n this.thinkingBuffer = '';\n this.toolCallBuffer.clear();\n this.finished = false;\n this.lastYieldedIndex = -1;\n }\n\n handleEvent(event: string, data: string): StreamChunk | StreamChunk[] | null {\n if (event === 'error') {\n return { type: 'error', error: data || 'SSE error event' };\n }\n\n if (event === '[DONE]' || data === '[DONE]') {\n const results = this.finalizePendingToolCalls();\n this.finished = true;\n if (results.length > 0) {\n return [...results, { type: 'done' } as StreamChunk];\n }\n return { type: 'done' };\n }\n\n if (!data) {\n return null;\n }\n\n try {\n const parsed = JSON.parse(data) as Record<string, unknown>;\n const choices = parsed.choices as Array<Record<string, unknown>> | undefined;\n\n if (!choices || choices.length === 0) {\n return null;\n }\n\n const choice = choices[0];\n const delta = choice.delta as Record<string, unknown> | undefined;\n\n if (!delta) {\n const finishReason = choice.finish_reason as string | undefined;\n if (finishReason === 'stop' || finishReason === 'length' || finishReason === 'tool_calls') {\n const results = this.finalizePendingToolCalls();\n this.finished = true;\n if (results.length > 0) {\n return [...results, { type: 'done' } as StreamChunk];\n }\n return { type: 'done' };\n }\n return null;\n }\n\n if (delta.reasoning_content) {\n const thinkingChunk = delta.reasoning_content as string;\n this.thinkingBuffer += thinkingChunk;\n if (this.thinkingBuffer.length > 100_000) {\n this.thinkingBuffer = this.thinkingBuffer.slice(-80_000);\n }\n return {\n type: 'thinking',\n content: thinkingChunk,\n };\n }\n\n if (delta.tool_calls) {\n return this.handleToolCallsDelta(delta.tool_calls as Array<Record<string, unknown>>);\n }\n\n if (delta.content) {\n const textChunk = delta.content as string;\n this.textBuffer += textChunk;\n if (this.textBuffer.length > 500_000) {\n this.textBuffer = this.textBuffer.slice(-400_000);\n }\n return {\n type: 'text',\n content: textChunk,\n };\n }\n\n const finishReason = choice.finish_reason as string | undefined;\n if (finishReason === 'stop' || finishReason === 'length' || finishReason === 'tool_calls') {\n const results = this.finalizePendingToolCalls();\n this.finished = true;\n if (results.length > 0) {\n return [...results, { type: 'done' } as StreamChunk];\n }\n return { type: 'done' };\n }\n } catch {\n return {\n type: 'error',\n error: `Failed to parse SSE data: ${data.slice(0, 200)}`,\n };\n }\n\n return null;\n }\n\n getAccumulatedText(): string {\n return this.textBuffer;\n }\n\n getAccumulatedThinking(): string {\n return this.thinkingBuffer;\n }\n\n getToolCalls(): ToolCall[] {\n const result: ToolCall[] = [];\n const indices = [...this.toolCallBuffer.keys()].sort((a, b) => a - b);\n for (const idx of indices) {\n const pending = this.toolCallBuffer.get(idx);\n if (pending) {\n result.push({\n id: pending.id,\n name: pending.name,\n arguments: this.parseArgsStr(pending.argsStr),\n index: pending.index,\n });\n }\n }\n return result;\n }\n\n isFinished(): boolean {\n return this.finished;\n }\n\n private handleToolCallsDelta(toolCalls: Array<Record<string, unknown>>): StreamChunk[] {\n const results: StreamChunk[] = [];\n\n for (const tc of toolCalls) {\n const index = tc.index as number;\n const id = tc.id as string | undefined;\n const fn = tc.function as Record<string, unknown> | undefined;\n\n if (!this.toolCallBuffer.has(index)) {\n this.toolCallBuffer.set(index, {\n id: id ?? '',\n name: fn?.name as string ?? '',\n argsStr: '',\n index,\n started: false,\n });\n }\n\n const existing = this.toolCallBuffer.get(index)!;\n\n if (id) {\n existing.id = id;\n }\n if (fn?.name) {\n existing.name = fn.name as string;\n }\n if (fn?.arguments) {\n existing.argsStr += fn.arguments as string;\n }\n\n if (!existing.started) {\n existing.started = true;\n if (this.lastYieldedIndex >= 0) {\n const prev = this.toolCallBuffer.get(this.lastYieldedIndex);\n if (prev && prev !== existing) {\n results.push({\n type: 'tool_call_end',\n tool_call: {\n id: prev.id,\n name: prev.name,\n arguments: this.parseArgsStr(prev.argsStr),\n index: prev.index,\n },\n } as StreamChunk);\n }\n }\n this.lastYieldedIndex = index;\n results.push({\n type: 'tool_call_start',\n tool_call: { id: existing.id, name: existing.name, index: existing.index },\n } as StreamChunk);\n }\n }\n\n return results;\n }\n\n private finalizePendingToolCalls(): StreamChunk[] {\n const results: StreamChunk[] = [];\n if (this.lastYieldedIndex >= 0) {\n const last = this.toolCallBuffer.get(this.lastYieldedIndex);\n if (last) {\n results.push({\n type: 'tool_call_end',\n tool_call: {\n id: last.id,\n name: last.name,\n arguments: this.parseArgsStr(last.argsStr),\n index: last.index,\n },\n } as StreamChunk);\n }\n this.lastYieldedIndex = -1;\n }\n return results;\n }\n\n private parseArgsStr(argsStr: string): Record<string, unknown> {\n if (!argsStr) return {};\n try {\n return JSON.parse(argsStr) as Record<string, unknown>;\n } catch {\n const trimmed = argsStr.trim();\n if (trimmed.startsWith('{') && !trimmed.endsWith('}')) {\n try {\n return JSON.parse(trimmed + '}') as Record<string, unknown>;\n } catch {\n try {\n return JSON.parse(trimmed + '}}') as Record<string, unknown>;\n } catch {}\n }\n }\n return {};\n }\n }\n}\n","import { appendFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { DEEPER_LOGS_DIR } from './constants.js';\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nconst LOG_LEVEL_RANK: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\nexport class Logger {\n private level: LogLevel;\n private logDir: string;\n private currentLogFile: string;\n\n constructor(level: LogLevel = 'info', logDir?: string) {\n this.level = level;\n this.logDir = logDir ?? DEEPER_LOGS_DIR;\n this.currentLogFile = this.generateLogFileName();\n this.ensureLogDir();\n }\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n debug(message: string, data?: unknown): void {\n this.log('debug', message, data);\n }\n\n info(message: string, data?: unknown): void {\n this.log('info', message, data);\n }\n\n warn(message: string, data?: unknown): void {\n this.log('warn', message, data);\n }\n\n error(message: string, data?: unknown): void {\n this.log('error', message, data);\n }\n\n private log(level: LogLevel, message: string, data?: unknown): void {\n if (LOG_LEVEL_RANK[level] < LOG_LEVEL_RANK[this.level]) {\n return;\n }\n\n const timestamp = new Date().toISOString();\n const formatted = this.formatMessage(level, timestamp, message, data);\n\n switch (level) {\n case 'error':\n console.error(formatted);\n break;\n case 'warn':\n console.warn(formatted);\n break;\n default:\n console.log(formatted);\n break;\n }\n\n try {\n appendFileSync(this.currentLogFile, this.stripAnsi(formatted) + '\\n', 'utf-8');\n } catch {\n }\n }\n\n private formatMessage(level: LogLevel, timestamp: string, message: string, data?: unknown): string {\n const levelUpper = level.toUpperCase();\n const base = `[${timestamp}] [${levelUpper}] ${message}`;\n if (data !== undefined) {\n if (typeof data === 'string') {\n return `${base} ${data}`;\n }\n if (data instanceof Error) {\n return `${base} ${data.message}\\n${data.stack ?? ''}`;\n }\n try {\n return `${base} ${JSON.stringify(data)}`;\n } catch {\n return `${base} [Unserializable data]`;\n }\n }\n return base;\n }\n\n private stripAnsi(text: string): string {\n return text.replace(/\\x1b\\[[0-9;]*m/g, '');\n }\n\n private generateLogFileName(): string {\n const now = new Date();\n const dateStr = now.toISOString().slice(0, 10).replace(/-/g, '');\n return join(this.logDir, `deeper-${dateStr}.log`);\n }\n\n private ensureLogDir(): void {\n const dir = dirname(this.currentLogFile);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n }\n}\n\nexport const logger = new Logger();\n","import type { ChatMessage, DeepSeekConfig, StreamChunk } from './types.js';\nimport type { ToolDefinition } from '../tools/tool-types.js';\nimport { RetryManager } from './RetryManager.js';\nimport { StreamHandler } from './StreamHandler.js';\nimport { logger } from '../core/logger.js';\n\ninterface ChatCompletionRequest {\n model: string;\n messages: Array<Record<string, unknown>>;\n temperature?: number;\n max_tokens?: number;\n stream?: boolean;\n tools?: Array<Record<string, unknown>>;\n tool_choice?: string;\n}\n\ninterface ChatCompletionResponse {\n id: string;\n object: string;\n created: number;\n model: string;\n choices: Array<{\n index: number;\n message: {\n role: string;\n content: string | null;\n tool_calls?: Array<{\n id: string;\n type: string;\n function: {\n name: string;\n arguments: string;\n };\n }>;\n reasoning_content?: string;\n };\n finish_reason: string;\n }>;\n}\n\nconst DEFAULT_TIMEOUT_MS = 120000;\nconst MAX_RETRIES = 3;\n\nconst isRetryable = (error: Error, _attempt: number): boolean => {\n const msg = error.message.toLowerCase();\n if (msg.includes('429') || msg.includes('rate limit')) return true;\n if (msg.includes('500') || msg.includes('502') || msg.includes('503') || msg.includes('504')) return true;\n if (msg.includes('timeout') || msg.includes('abort')) return _attempt < 2;\n if (msg.includes('econnreset') || msg.includes('econnrefused')) return true;\n return false;\n};\n\nexport class DeepSeekClient {\n private config: DeepSeekConfig;\n private retryManager: RetryManager;\n\n constructor(config: DeepSeekConfig) {\n this.config = config;\n this.retryManager = new RetryManager(MAX_RETRIES);\n }\n\n async chat(\n messages: ChatMessage[],\n tools?: ToolDefinition[],\n overrides?: Partial<DeepSeekConfig>,\n ): Promise<ChatMessage> {\n const cfg = this.mergeConfig(overrides);\n const body = this.buildRequestBody(messages, tools, cfg, false);\n\n const response = await this.retryManager.execute(async () => {\n return this.retryManager.withTimeout(\n () => this.makeRequest(cfg, body),\n DEFAULT_TIMEOUT_MS,\n cfg.signal,\n );\n }, isRetryable);\n\n const data = (await response.json()) as ChatCompletionResponse;\n\n if (!data.choices || data.choices.length === 0) {\n throw new Error('No choices returned from API');\n }\n\n const choice = data.choices[0];\n const message = choice.message;\n\n const result: ChatMessage = {\n role: 'assistant',\n content: message.content,\n };\n\n if (message.tool_calls) {\n result.tool_calls = message.tool_calls.map((tc) => ({\n id: tc.id,\n name: tc.function.name,\n arguments: this.parseArguments(tc.function.arguments),\n }));\n }\n\n if (message.reasoning_content) {\n result.reasoning_content = message.reasoning_content;\n }\n\n return result;\n }\n\n async chatStream(\n messages: ChatMessage[],\n tools?: ToolDefinition[],\n overrides?: Partial<DeepSeekConfig>,\n ): Promise<AsyncIterable<StreamChunk>> {\n const cfg = this.mergeConfig(overrides);\n const body = this.buildRequestBody(messages, tools, cfg, true);\n\n const response = await this.retryManager.execute(async () => {\n return this.retryManager.withTimeout(\n () => this.makeRequest(cfg, body),\n DEFAULT_TIMEOUT_MS,\n cfg.signal,\n );\n }, isRetryable);\n\n if (!response.body) {\n throw new Error('Response body is empty');\n }\n\n return this.createStreamIterable(response.body);\n }\n\n private async *createStreamIterable(body: unknown): AsyncIterable<StreamChunk> {\n const handler = new StreamHandler();\n let buffer = '';\n const stream = body as AsyncIterable<Uint8Array>;\n\n for await (const chunk of stream) {\n const text = typeof chunk === 'string' ? chunk : new TextDecoder().decode(chunk);\n buffer += text;\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':')) {\n continue;\n }\n\n if (trimmed.startsWith('data: ')) {\n const data = trimmed.slice(6);\n const result = handler.handleEvent('message', data);\n if (result) {\n if (Array.isArray(result)) { for (const r of result) yield r; }\n else yield result;\n }\n } else if (trimmed === 'data: [DONE]') {\n yield { type: 'done' };\n return;\n }\n }\n }\n\n if (buffer.trim()) {\n const trimmed = buffer.trim();\n if (trimmed.startsWith('data: ')) {\n const data = trimmed.slice(6);\n const result = handler.handleEvent('message', data);\n if (result) {\n if (Array.isArray(result)) { for (const r of result) yield r; }\n else yield result;\n }\n }\n }\n\n if (!handler.isFinished()) {\n yield { type: 'done' };\n }\n }\n\n private buildRequestBody(\n messages: ChatMessage[],\n tools: ToolDefinition[] | undefined,\n config: DeepSeekConfig,\n stream: boolean,\n ): string {\n const body: ChatCompletionRequest = {\n model: config.model,\n messages: messages.map((m) => {\n const msg: Record<string, unknown> = {\n role: m.role,\n content: m.content,\n };\n if (m.tool_calls) {\n msg.tool_calls = m.tool_calls.map((tc) => ({\n id: tc.id,\n type: 'function',\n function: {\n name: tc.name,\n arguments: JSON.stringify(tc.arguments),\n },\n }));\n }\n if (m.tool_call_id) {\n msg.tool_call_id = m.tool_call_id;\n }\n if (m.role === 'tool') {\n msg.name = m.name || 'tool';\n } else if (m.name) {\n msg.name = m.name;\n }\n const rc = m.reasoning_content || m.thinking;\n if (rc) msg.reasoning_content = rc;\n return msg;\n }),\n temperature: config.temperature,\n max_tokens: config.maxTokens,\n stream,\n };\n\n if (config.think?.enabled) {\n (body as Record<string, unknown>).thinking = {\n type: 'enabled',\n budget_tokens: config.think.budgetTokens,\n };\n }\n\n if (tools && tools.length > 0) {\n body.tools = tools.map((tool) => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n }));\n body.tool_choice = 'auto';\n }\n\n return JSON.stringify(body);\n }\n\n private async makeRequest(config: DeepSeekConfig, body: string): Promise<Response> {\n const url = `${config.baseUrl}/v1/chat/completions`;\n\n logger.debug('DeepSeek API request', { url, model: config.model });\n\n const fetchOpts: RequestInit = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${config.apiKey}`,\n 'Accept': 'application/json',\n },\n body,\n };\n\n if (config.signal) {\n fetchOpts.signal = config.signal;\n }\n\n const response = await fetch(url, fetchOpts);\n\n if (!response.ok) {\n const errorBody = await response.text().catch(() => '');\n logger.error('DeepSeek API error', {\n status: response.status,\n statusText: response.statusText,\n body: errorBody.slice(0, 500),\n });\n throw new Error(`API request failed: ${response.status} ${response.statusText} - ${errorBody.slice(0, 200)}`);\n }\n\n return response;\n }\n\n private parseArguments(argsStr: string): Record<string, unknown> {\n try {\n return JSON.parse(argsStr) as Record<string, unknown>;\n } catch {\n return {};\n }\n }\n\n private mergeConfig(overrides?: Partial<DeepSeekConfig>): DeepSeekConfig {\n if (!overrides) {\n return this.config;\n }\n return {\n ...this.config,\n ...overrides,\n think: {\n ...this.config.think,\n ...(overrides.think ?? {}),\n },\n };\n }\n}\n","import process from 'node:process';\n\n// ---- output buffer ----\nlet writeBuf = '';\nlet writeTimer: ReturnType<typeof setTimeout> | null = null;\nexport const O = (s: string) => { writeBuf += s; if (!writeTimer) writeTimer = setTimeout(() => { const b = writeBuf; writeBuf = ''; writeTimer = null; if (b) process.stdout.write(b); }, 16); };\nexport function Oflush() { if (writeTimer) { clearTimeout(writeTimer); writeTimer = null; } if (writeBuf) { const b = writeBuf; writeBuf = ''; process.stdout.write(b); } }\n\n// ---- ANSI colors ----\nexport const A = {\n R: '\\x1b[0m', d: '\\x1b[2m', b: '\\x1b[1m',\n c: '\\x1b[36m', g: '\\x1b[32m', y: '\\x1b[33m',\n r: '\\x1b[31m', B: '\\x1b[34m', m: '\\x1b[35m',\n G: '\\x1b[90m',\n};\nexport function d(s: string) { return A.d + s + A.R; }\nexport function b(s: string) { return A.b + s + A.R; }\nexport function c(s: string) { return A.c + s + A.R; }\nexport function g(s: string) { return A.g + s + A.R; }\nexport function y(s: string) { return A.y + s + A.R; }\nexport function r(s: string) { return A.r + s + A.R; }\nexport function B(s: string) { return A.B + s + A.R; }\nexport function G(s: string) { return A.G + s + A.R; }\n\n// ---- thinking animation ----\nlet stepTs = Date.now();\nconst WAVE_CHARS = '▁▂▃▄▅▆▇█';\nconst BRAILLE = '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏';\n\nexport function resetTimer() { stepTs = Date.now(); }\nexport function elapsedSec() { return (Date.now() - stepTs) / 1000; }\n\nexport function thinkingAnim(label: string): string {\n return thinkingAnimAt(label, stepTs);\n}\nexport function thinkingAnimAt(label: string, start: number): string {\n const t = (Date.now() - start) / 1000;\n let wave = '';\n for (let i = 0; i < 9; i++) {\n const v = Math.sin((i / 9) * Math.PI * 2 + t * 2.5) * 0.5 + 0.5;\n const ch = WAVE_CHARS[Math.floor(v * 7)] || '█';\n if (v > 0.67) wave += A.c + ch + A.R;\n else if (v > 0.33) wave += A.m + ch + A.R;\n else wave += A.G + ch + A.R;\n }\n const spin = A.c + A.b + BRAILLE[Math.floor((t * 10) % 8)] + A.R;\n const orb = ['◜', '◝', '◞', '◟'];\n const pulse = Math.sin(t * 4) > 0 ? A.c + orb[Math.floor((t * 7) % 4)] + A.R : A.G + orb[Math.floor((t * 7) % 4)] + A.R;\n return A.d + ' ' + A.R + wave + ' ' + spin + ' ' + pulse + ' ' + A.d + label + A.R + ' ' + A.G + t.toFixed(1) + 's' + A.R;\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve, normalize } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const read_file: Tool = {\n name: 'read_file',\n description: '读取文件内容,支持指定行范围和偏移量,最大支持1万行',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件绝对路径' },\n offset: { type: 'number', description: '起始行号(从1开始)' },\n limit: { type: 'number', description: '读取行数(最大10000)' },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n const statSync = await import('node:fs').then(m => m.statSync);\n const stat = statSync(filePath);\n if (stat.isDirectory()) {\n return { success: false, error: `路径是目录,不是文件: ${filePath}`, output: '' };\n }\n const maxSize = 20 * 1024 * 1024;\n if (stat.size > maxSize) {\n return { success: false, error: `文件过大 (${(stat.size / 1024 / 1024).toFixed(1)}MB),限制 ${maxSize / 1024 / 1024}MB`, output: '' };\n }\n let raw = readFileSync(filePath, 'utf-8');\n const offset = (params.offset as number) ?? 1;\n let limit = params.limit as number | undefined;\n if (limit !== undefined) limit = Math.min(limit, 10000);\n if (offset > 1 || limit !== undefined) {\n const lines = raw.split('\\n');\n const start = Math.max(0, offset - 1);\n const end = limit !== undefined ? Math.min(start + limit, lines.length) : lines.length;\n raw = lines.slice(start, end).join('\\n');\n } else {\n const lines = raw.split('\\n');\n if (lines.length > 10000) {\n raw = lines.slice(0, 10000).join('\\n') + `\\n... (共${lines.length}行,仅显示前10000行)`;\n }\n }\n return { success: true, output: raw, metadata: { size: stat.size, path: normalize(filePath) } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { existsSync, mkdirSync } from 'node:fs';\nimport { writeFile, appendFile, readFile } from 'node:fs/promises';\nimport { dirname, resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const write_file: Tool = {\n name: 'write_file',\n description: '写入文件内容,自动创建父目录。最大 512KB。空内容会跳过写入。',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件绝对路径' },\n content: { type: 'string', description: '要写入的内容' },\n append: { type: 'boolean', description: '是否追加模式' },\n },\n required: ['file_path', 'content'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n const content = params.content as string;\n if (content.length > 524_288) {\n return { success: false, error: `内容过大 (${content.length}B, 最大 512KB)`, output: '' };\n }\n try {\n const filePath = resolve(params.file_path as string);\n const append = (params.append as boolean) ?? false;\n if (!content.trim() && !append) {\n return { success: false, error: `内容为空,跳过写入: ${filePath}`, output: '' };\n }\n const dir = dirname(filePath);\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n if (append) {\n await appendFile(filePath, content, 'utf-8');\n } else {\n await writeFile(filePath, content, 'utf-8');\n }\n const lineCount = content.split('\\n').length;\n return { success: true, output: `文件已${append ? '追加' : '写入'}: ${filePath} (${lineCount}行)` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const edit_file: Tool = {\n name: 'edit_file',\n description: '通过搜索替换编辑文件内容',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件绝对路径' },\n old_str: { type: 'string', description: '要替换的源字符串' },\n new_str: { type: 'string', description: '替换后的字符串' },\n replace_all: { type: 'boolean', description: '是否替换所有匹配项' },\n },\n required: ['file_path', 'old_str', 'new_str'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const oldStr = params.old_str as string;\n const newStr = params.new_str as string;\n const replaceAll = (params.replace_all as boolean) ?? false;\n if (!existsSync(filePath)) return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n const content = readFileSync(filePath, 'utf-8');\n const index = content.indexOf(oldStr);\n if (index === -1) return { success: false, error: '未找到匹配的字符串', output: '' };\n let replaced: string; let count: number;\n if (replaceAll) {\n const regex = new RegExp(oldStr.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g');\n const before = content;\n replaced = content.replace(regex, newStr.replace(/\\$/g, '$$$$'));\n count = (before.match(regex) || []).length;\n } else {\n replaced = content.slice(0, index) + newStr + content.slice(index + oldStr.length);\n count = 1;\n }\n writeFileSync(filePath, replaced, 'utf-8');\n return { success: true, output: `已替换 ${count} 处匹配: ${filePath}` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { unlinkSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const delete_file: Tool = {\n name: 'delete_file',\n description: '删除指定文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件绝对路径' },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n unlinkSync(filePath);\n return { success: true, output: `已删除: ${filePath}` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readdirSync, existsSync } from 'node:fs';\nimport { resolve, join } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const list_dir: Tool = {\n name: 'list_dir',\n description: '列出目录内容',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n dir_path: { type: 'string', description: '目录绝对路径' },\n recursive: { type: 'boolean', description: '是否递归列出' },\n max_depth: { type: 'number', description: '递归最大深度' },\n },\n required: ['dir_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const dirPath = resolve(params.dir_path as string);\n const recursive = (params.recursive as boolean) ?? false;\n const maxDepth = (params.max_depth as number) ?? 3;\n if (!existsSync(dirPath)) {\n return { success: false, error: `目录不存在: ${dirPath}`, output: '' };\n }\n const { statSync } = await import('node:fs');\n const lines: string[] = [];\n function walk(dir: string, depth: number, prefix: string) {\n if (depth > maxDepth) return;\n try {\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const isDir = entry.isDirectory();\n lines.push(`${prefix}${isDir ? '📁' : '📄'} ${entry.name}`);\n if (isDir && recursive) {\n walk(join(dir, entry.name), depth + 1, prefix + ' ');\n }\n }\n } catch {\n lines.push(`${prefix}权限不足`);\n }\n }\n walk(dirPath, 1, '');\n return { success: true, output: lines.join('\\n'), metadata: { path: dirPath, entries: lines.length } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const glob_find: Tool = {\n name: 'glob_find',\n description: '使用 glob 模式匹配查找文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n pattern: { type: 'string', description: 'Glob 匹配模式,如 **/*.ts' },\n cwd: { type: 'string', description: '搜索根目录' },\n ignore: { type: 'array', items: { type: 'string' }, description: '忽略模式列表' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['pattern'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const pattern = params.pattern as string;\n const cwd = (params.cwd as string) ? resolve(params.cwd as string) : process.cwd();\n const ignore = (params.ignore as string[]) ?? [];\n const maxResults = (params.max_results as number) ?? 1000;\n const fg = await import('fast-glob');\n const files = await fg.default(pattern, {\n cwd,\n ignore: ['node_modules/**', '.git/**', ...ignore],\n absolute: false,\n dot: false,\n onlyFiles: true,\n });\n const results = files.slice(0, maxResults);\n return {\n success: true,\n output: results.join('\\n'),\n metadata: { count: results.length, total: files.length, pattern },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { renameSync, existsSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const move_file: Tool = {\n name: 'move_file',\n description: '移动或重命名文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n source: { type: 'string', description: '源文件路径' },\n destination: { type: 'string', description: '目标文件路径' },\n },\n required: ['source', 'destination'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const source = resolve(params.source as string);\n const dest = resolve(params.destination as string);\n if (!existsSync(source)) {\n return { success: false, error: `源文件不存在: ${source}`, output: '' };\n }\n const destDir = dirname(dest);\n const { mkdirSync } = await import('node:fs');\n if (!existsSync(destDir)) {\n mkdirSync(destDir, { recursive: true });\n }\n renameSync(source, dest);\n return { success: true, output: `已移动: ${source} -> ${dest}` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { copyFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const copy_file: Tool = {\n name: 'copy_file',\n description: '复制文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n source: { type: 'string', description: '源文件路径' },\n destination: { type: 'string', description: '目标文件路径' },\n },\n required: ['source', 'destination'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const source = resolve(params.source as string);\n const dest = resolve(params.destination as string);\n if (!existsSync(source)) {\n return { success: false, error: `源文件不存在: ${source}`, output: '' };\n }\n const destDir = dirname(dest);\n if (!existsSync(destDir)) {\n mkdirSync(destDir, { recursive: true });\n }\n copyFileSync(source, dest);\n return { success: true, output: `已复制: ${source} -> ${dest}` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { mkdirSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const create_dir: Tool = {\n name: 'create_dir',\n description: '创建目录(递归创建父目录)',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n dir_path: { type: 'string', description: '目录绝对路径' },\n },\n required: ['dir_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const dirPath = resolve(params.dir_path as string);\n if (existsSync(dirPath)) {\n return { success: true, output: `目录已存在: ${dirPath}` };\n }\n mkdirSync(dirPath, { recursive: true });\n return { success: true, output: `目录已创建: ${dirPath}` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { statSync, existsSync } from 'node:fs';\nimport { resolve, basename } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const file_info: Tool = {\n name: 'file_info',\n description: '获取文件元信息(大小、修改时间等)',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件绝对路径' },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n const stat = statSync(filePath);\n const info = {\n name: basename(filePath),\n path: filePath,\n size: stat.size,\n sizeFormatted: formatSize(stat.size),\n isDirectory: stat.isDirectory(),\n isFile: stat.isFile(),\n isSymlink: stat.isSymbolicLink(),\n created: stat.birthtime.toISOString(),\n modified: stat.mtime.toISOString(),\n accessed: stat.atime.toISOString(),\n permissions: stat.mode.toString(8).slice(-3),\n readable: true,\n writable: true,\n };\n return { success: true, output: JSON.stringify(info, null, 2), metadata: info };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / 1024 / 1024).toFixed(1)} MB`;\n return `${(bytes / 1024 / 1024 / 1024).toFixed(1)} GB`;\n}\n","import { watch, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const watch_file: Tool = {\n name: 'watch_file',\n description: '监听文件变化并返回初始状态',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件绝对路径' },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n return {\n success: true,\n output: `监听已设置: ${filePath}(文件变化将在下次查询时反映)`,\n metadata: { watching: true, path: filePath },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const batch_read: Tool = {\n name: 'batch_read',\n description: '批量读取多个文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_paths: { type: 'array', items: { type: 'string' }, description: '文件路径列表' },\n max_size_per_file: { type: 'number', description: '单文件最大字节数' },\n },\n required: ['file_paths'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const paths = params.file_paths as string[];\n const maxSize = (params.max_size_per_file as number) ?? 1024 * 1024;\n const results: Record<string, { content: string; error?: string }> = {};\n for (const p of paths) {\n const abs = resolve(p);\n try {\n if (!existsSync(abs)) {\n results[p] = { content: '', error: '文件不存在' };\n continue;\n }\n const stat = await import('node:fs').then(m => m.statSync(abs));\n if (stat.size > maxSize) {\n results[p] = { content: '', error: `文件过大 (${stat.size} > ${maxSize})` };\n continue;\n }\n results[p] = { content: readFileSync(abs, 'utf-8') };\n } catch (e) {\n results[p] = { content: '', error: (e as Error).message };\n }\n }\n const output = Object.entries(results)\n .map(([path, r]) => {\n if (r.error) return `--- ${path} (ERROR: ${r.error}) ---`;\n return `--- ${path} ---\\n${r.content}`;\n })\n .join('\\n\\n');\n return {\n success: true,\n output,\n metadata: { files: paths.length, read: Object.values(results).filter(r => !r.error).length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { existsSync, mkdirSync } from 'node:fs';\nimport { writeFile } from 'node:fs/promises';\nimport { resolve, dirname } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const batch_write: Tool = {\n name: 'batch_write',\n description: '批量写入多个文件,自动创建父目录,跳过空内容文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n files: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n file_path: { type: 'string' },\n content: { type: 'string' },\n },\n },\n description: '文件列表 [{file_path, content}]',\n },\n },\n required: ['files'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const files = params.files as { file_path: string; content: string }[];\n if (!files || !files.length) {\n return { success: false, error: '文件列表为空', output: '' };\n }\n const results: string[] = [];\n const skipped: string[] = [];\n for (const f of files) {\n const abs = resolve(f.file_path);\n const content = f.content || '';\n if (!content.trim()) {\n skipped.push(abs);\n continue;\n }\n if (content.length > 524_288) {\n skipped.push(`${abs} (内容过大)`);\n continue;\n }\n const dir = dirname(abs);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n await writeFile(abs, content, 'utf-8');\n results.push(abs);\n }\n let output = `已写入 ${results.length} 个文件`;\n if (skipped.length > 0) output += `,跳过 ${skipped.length} 个(空内容)`;\n if (results.length > 0) output += ':\\n' + results.join('\\n');\n return {\n success: results.length > 0,\n output,\n metadata: { count: results.length, skipped: skipped.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const diff_files: Tool = {\n name: 'diff_files',\n description: '比较两个文件的差异',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_a: { type: 'string', description: '文件A路径' },\n file_b: { type: 'string', description: '文件B路径' },\n context_lines: { type: 'number', description: '上下文行数' },\n },\n required: ['file_a', 'file_b'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const fileA = resolve(params.file_a as string);\n const fileB = resolve(params.file_b as string);\n const contextLines = (params.context_lines as number) ?? 3;\n if (!existsSync(fileA)) return { success: false, error: `文件A不存在: ${fileA}`, output: '' };\n if (!existsSync(fileB)) return { success: false, error: `文件B不存在: ${fileB}`, output: '' };\n const contentA = readFileSync(fileA, 'utf-8');\n const contentB = readFileSync(fileB, 'utf-8');\n const Diff = await import('diff');\n const patch = Diff.structuredPatch(\n fileA, fileB, contentA, contentB,\n 'a', 'b',\n { context: contextLines }\n );\n let output = '';\n for (const hunk of patch.hunks) {\n output += `@@ -${hunk.oldStart},${hunk.oldLines} +${hunk.newStart},${hunk.newLines} @@\\n`;\n for (const line of hunk.lines) {\n output += line + '\\n';\n }\n }\n return { success: true, output: output || '文件内容相同' };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const merge_files: Tool = {\n name: 'merge_files',\n description: '合并多个文件内容写入目标文件',\n category: 'filesystem',\n parameters: {\n type: 'object',\n properties: {\n file_paths: { type: 'array', items: { type: 'string' }, description: '源文件路径列表' },\n output: { type: 'string', description: '输出文件路径' },\n separator: { type: 'string', description: '文件间分隔符,默认换行' },\n },\n required: ['file_paths', 'output'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const paths = params.file_paths as string[];\n const output = resolve(params.output as string);\n const sep = (params.separator as string) ?? '\\n';\n const parts: string[] = [];\n for (const p of paths) {\n const abs = resolve(p);\n if (!existsSync(abs)) {\n return { success: false, error: `文件不存在: ${abs}`, output: '' };\n }\n parts.push(readFileSync(abs, 'utf-8'));\n }\n const merged = parts.join(sep);\n writeFileSync(output, merged, 'utf-8');\n return {\n success: true,\n output: `已合并 ${paths.length} 个文件到: ${output}`,\n metadata: { count: paths.length, size: merged.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const grep_search: Tool = {\n name: 'grep_search',\n description: '使用正则表达式搜索文件内容',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n pattern: { type: 'string', description: '搜索正则表达式' },\n file_path: { type: 'string', description: '目标文件路径' },\n dir_path: { type: 'string', description: '目标目录路径' },\n case_sensitive: { type: 'boolean', description: '是否区分大小写' },\n glob: { type: 'string', description: '文件过滤模式,如 *.ts' },\n max_results: { type: 'number', description: '最大结果数' },\n context_lines: { type: 'number', description: '上下文行数' },\n },\n required: ['pattern'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const pattern = params.pattern as string;\n const filePath = params.file_path as string | undefined;\n const dirPath = params.dir_path as string | undefined;\n const caseSensitive = (params.case_sensitive as boolean) ?? false;\n const glob = params.glob as string | undefined;\n const maxResults = (params.max_results as number) ?? 100;\n const contextLines = (params.context_lines as number) ?? 0;\n\n const regex = new RegExp(pattern, caseSensitive ? 'gm' : 'gim');\n const results: string[] = [];\n const maxFileSize = 5 * 1024 * 1024;\n\n function searchFile(fp: string): void {\n if (results.length >= maxResults) return;\n try {\n const stat = statSync(fp);\n if (stat.size > maxFileSize) return;\n const content = readFileSync(fp, 'utf-8');\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length && results.length < maxResults; i++) {\n if (regex.test(lines[i])) {\n regex.lastIndex = 0;\n const lineNum = i + 1;\n if (contextLines > 0) {\n const from = Math.max(0, i - contextLines);\n const to = Math.min(lines.length, i + contextLines + 1);\n for (let j = from; j < to; j++) {\n results.push(`${fp}:${j + 1}:${lines[j]}`);\n }\n } else {\n results.push(`${fp}:${lineNum}:${lines[i]}`);\n }\n }\n }\n } catch { /* skip */ }\n }\n\n if (filePath) {\n const abs = resolve(filePath);\n if (existsSync(abs)) searchFile(abs);\n } else if (dirPath) {\n const fg = await import('fast-glob');\n const pattern = glob ? `**/${glob}` : '**/*';\n const files = await fg.default(pattern, {\n cwd: resolve(dirPath),\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n for (const f of files) {\n if (results.length >= maxResults) break;\n searchFile(f);\n }\n }\n\n return {\n success: true,\n output: results.join('\\n') || '未找到匹配结果',\n metadata: { matches: results.length, maxResults },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve, relative } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const codebase_search: Tool = {\n name: 'codebase_search',\n description: '代码库语义搜索,基于关键词进行加权评分搜索',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n query: { type: 'string', description: '搜索查询关键词' },\n cwd: { type: 'string', description: '搜索根目录' },\n glob: { type: 'string', description: '文件过滤模式' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['query'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const query = (params.query as string).toLowerCase();\n const cwd = (params.cwd as string) ? resolve(params.cwd as string) : process.cwd();\n const glob = (params.glob as string) ?? '**/*.{ts,js,tsx,jsx,py,java,go,rs}';\n const maxResults = (params.max_results as number) ?? 50;\n const keywords = query.split(/\\s+/).filter(k => k.length > 0);\n\n const fg = await import('fast-glob');\n const files = await fg.default(glob, {\n cwd,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**', '*.min.*'],\n onlyFiles: true,\n });\n\n const scored: { file: string; score: number; snippet: string }[] = [];\n const maxFileSize = 500 * 1024;\n\n for (const fp of files) {\n try {\n const stat = statSync(fp);\n if (stat.size > maxFileSize) continue;\n const content = readFileSync(fp, 'utf-8');\n const lower = content.toLowerCase();\n let score = 0;\n for (const kw of keywords) {\n const matches = lower.split(kw).length - 1;\n score += matches * 10;\n }\n const fileName = fp.split(/[/\\\\]/).pop()?.toLowerCase() ?? '';\n for (const kw of keywords) {\n if (fileName.includes(kw)) score += 50;\n }\n if (score > 0) {\n const idx = lower.indexOf(keywords[0]);\n const snippet = idx >= 0\n ? content.slice(Math.max(0, idx - 40), idx + 80).replace(/\\n/g, ' ')\n : content.slice(0, 120).replace(/\\n/g, ' ');\n scored.push({ file: relative(cwd, fp), score, snippet });\n }\n } catch { /* skip */ }\n }\n\n scored.sort((a, b) => b.score - a.score);\n const top = scored.slice(0, maxResults);\n const output = top.length > 0\n ? top.map(r => `${r.file} (score: ${r.score})\\n ${r.snippet}`).join('\\n\\n')\n : '未找到相关结果';\n\n return { success: true, output, metadata: { total: scored.length, shown: top.length } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve, relative } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const symbol_search: Tool = {\n name: 'symbol_search',\n description: '在代码库中搜索符号(函数、类、变量定义)',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: '符号名称' },\n cwd: { type: 'string', description: '搜索根目录' },\n type: { type: 'string', description: '符号类型: function, class, variable, interface, type', enum: ['function', 'class', 'variable', 'interface', 'type', 'all'] },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['name'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const name = params.name as string;\n const cwd = (params.cwd as string) ? resolve(params.cwd as string) : process.cwd();\n const symbolType = (params.type as string) ?? 'all';\n const maxResults = (params.max_results as number) ?? 50;\n\n const patterns: [string, RegExp][] = [];\n if (symbolType === 'all' || symbolType === 'function') {\n patterns.push(['function', new RegExp(`(?:function\\\\s+${name}|${name}\\\\s*[=:]\\\\s*(?:async\\\\s+)?(?:function|\\\\([^)]*\\\\)\\\\s*=>)|(?:async\\\\s+)?${name}\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{`, 'gmi')]);\n }\n if (symbolType === 'all' || symbolType === 'class') {\n patterns.push(['class', new RegExp(`class\\\\s+${name}\\\\b`, 'gmi')]);\n }\n if (symbolType === 'all' || symbolType === 'variable') {\n patterns.push(['variable', new RegExp(`(?:const|let|var)\\\\s+${name}\\\\b`, 'gmi')]);\n }\n if (symbolType === 'all' || symbolType === 'interface') {\n patterns.push(['interface', new RegExp(`interface\\\\s+${name}\\\\b`, 'gmi')]);\n }\n if (symbolType === 'all' || symbolType === 'type') {\n patterns.push(['type', new RegExp(`type\\\\s+${name}\\\\b`, 'gmi')]);\n }\n\n const fg = await import('fast-glob');\n const files = await fg.default('**/*.{ts,js,tsx,jsx}', {\n cwd,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n\n const results: string[] = [];\n const maxFileSize = 2 * 1024 * 1024;\n\n for (const fp of files) {\n if (results.length >= maxResults) break;\n try {\n const stat = statSync(fp);\n if (stat.size > maxFileSize) continue;\n const content = readFileSync(fp, 'utf-8');\n for (const [type, regex] of patterns) {\n regex.lastIndex = 0;\n let match;\n while ((match = regex.exec(content)) !== null && results.length < maxResults) {\n const line = content.slice(0, match.index).split('\\n').length;\n results.push(`${relative(cwd, fp)}:${line}: [${type}] ${match[0].trim()}`);\n }\n }\n } catch { /* skip */ }\n }\n\n return {\n success: true,\n output: results.join('\\n') || '未找到匹配符号',\n metadata: { count: results.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve, relative } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const find_references: Tool = {\n name: 'find_references',\n description: '查找指定符号的所有引用位置',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: '符号名称' },\n cwd: { type: 'string', description: '搜索根目录' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['name'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const name = params.name as string;\n const cwd = (params.cwd as string) ? resolve(params.cwd as string) : process.cwd();\n const maxResults = (params.max_results as number) ?? 100;\n\n const fg = await import('fast-glob');\n const files = await fg.default('**/*.{ts,js,tsx,jsx}', {\n cwd,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n\n const refRegex = new RegExp(`\\\\b${escapeRegex(name)}\\\\b`, 'gm');\n const defRegex = new RegExp(`(?:function\\\\s+${escapeRegex(name)}|class\\\\s+${escapeRegex(name)}|(?:const|let|var)\\\\s+${escapeRegex(name)}\\\\s*=|interface\\\\s+${escapeRegex(name)}|type\\\\s+${escapeRegex(name)}\\\\s*=)`, 'gm');\n\n const results: { file: string; line: number; text: string; type: 'definition' | 'reference' }[] = [];\n const maxFileSize = 2 * 1024 * 1024;\n\n for (const fp of files) {\n if (results.length >= maxResults) break;\n try {\n const stat = statSync(fp);\n if (stat.size > maxFileSize) continue;\n const content = readFileSync(fp, 'utf-8');\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length && results.length < maxResults; i++) {\n if (lines[i].match(refRegex)) {\n const isDef = defRegex.test(lines[i]);\n results.push({\n file: relative(cwd, fp),\n line: i + 1,\n text: lines[i].trim(),\n type: isDef ? 'definition' : 'reference',\n });\n }\n }\n } catch { /* skip */ }\n }\n\n const output = results.map(r => `${r.file}:${r.line} [${r.type}] ${r.text}`).join('\\n');\n return {\n success: true,\n output: output || '未找到引用',\n metadata: { count: results.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve, relative } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const find_definition: Tool = {\n name: 'find_definition',\n description: '查找指定符号的定义位置',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: '符号名称' },\n cwd: { type: 'string', description: '搜索根目录' },\n },\n required: ['name'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const name = params.name as string;\n const cwd = (params.cwd as string) ? resolve(params.cwd as string) : process.cwd();\n\n const fg = await import('fast-glob');\n const files = await fg.default('**/*.{ts,js,tsx,jsx}', {\n cwd,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n\n const defRegex = new RegExp(\n `(?:function\\\\s+${escapeRegex(name)}\\\\b|` +\n `class\\\\s+${escapeRegex(name)}\\\\b|` +\n `(?:const|let|var)\\\\s+${escapeRegex(name)}\\\\s*=|` +\n `interface\\\\s+${escapeRegex(name)}\\\\b|` +\n `type\\\\s+${escapeRegex(name)}\\\\s*=|` +\n `(?:export\\\\s+)?(?:async\\\\s+)?${escapeRegex(name)}\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{|` +\n `this\\\\.${escapeRegex(name)}\\\\s*=\\\\s*(?:async\\\\s+)?(?:function|\\\\(|${escapeRegex(name)})|` +\n `(?:public|private|protected|static|readonly)?\\\\s*(?:async\\\\s+)?${escapeRegex(name)}\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{` +\n `)`,\n 'gmi'\n );\n\n const results: { file: string; line: number; text: string }[] = [];\n const maxFileSize = 2 * 1024 * 1024;\n\n for (const fp of files) {\n try {\n const stat = statSync(fp);\n if (stat.size > maxFileSize) continue;\n const content = readFileSync(fp, 'utf-8');\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n if (defRegex.test(lines[i])) {\n defRegex.lastIndex = 0;\n results.push({\n file: relative(cwd, fp),\n line: i + 1,\n text: lines[i].trim(),\n });\n }\n }\n } catch { /* skip */ }\n }\n\n const output = results.length > 0\n ? results.map(r => `${r.file}:${r.line}: ${r.text}`).join('\\n')\n : `未找到 \"${name}\" 的定义`;\n\n return {\n success: true,\n output,\n metadata: { count: results.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const text_search: Tool = {\n name: 'text_search',\n description: '全文搜索,在文件内容中查找文本',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n text: { type: 'string', description: '搜索文本' },\n dir_path: { type: 'string', description: '搜索目录' },\n file_pattern: { type: 'string', description: '文件匹配模式,如 *.md' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['text', 'dir_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const text = params.text as string;\n const dirPath = resolve(params.dir_path as string);\n const filePattern = (params.file_pattern as string) ?? '**/*';\n const maxResults = (params.max_results as number) ?? 100;\n\n const fg = await import('fast-glob');\n const files = await fg.default(filePattern, {\n cwd: dirPath,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**', '*.min.*', '*.jpg', '*.png', '*.gif', '*.ico', '*.svg'],\n onlyFiles: true,\n });\n\n const results: string[] = [];\n const maxFileSize = 2 * 1024 * 1024;\n\n for (const fp of files) {\n if (results.length >= maxResults) break;\n try {\n const stat = await import('node:fs').then(m => m.statSync(fp));\n if (stat.size > maxFileSize) continue;\n const content = readFileSync(fp, 'utf-8');\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length && results.length < maxResults; i++) {\n if (lines[i].includes(text)) {\n results.push(`${fp}:${i + 1}:${lines[i].trim()}`);\n }\n }\n } catch { /* skip */ }\n }\n\n return {\n success: true,\n output: results.join('\\n') || '未找到匹配结果',\n metadata: { matches: results.length, dir: dirPath },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const fuzzy_find: Tool = {\n name: 'fuzzy_find',\n description: '模糊匹配文件名',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: '模糊文件名' },\n cwd: { type: 'string', description: '搜索目录' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['name'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const name = (params.name as string).toLowerCase();\n const cwd = (params.cwd as string) ? resolve(params.cwd as string) : process.cwd();\n const maxResults = (params.max_results as number) ?? 20;\n\n const fg = await import('fast-glob');\n const files = await fg.default('**/*', {\n cwd,\n absolute: false,\n ignore: ['node_modules/**', '.git/**'],\n onlyFiles: true,\n });\n\n const scored = files\n .map(f => ({ file: f, score: fuzzyScore(name, f.toLowerCase()) }))\n .filter(r => r.score > 0)\n .sort((a, b) => b.score - a.score)\n .slice(0, maxResults);\n\n const output = scored.length > 0\n ? scored.map(r => r.file).join('\\n')\n : '未找到匹配文件';\n\n return { success: true, output, metadata: { count: scored.length } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction fuzzyScore(needle: string, haystack: string): number {\n let p = 0;\n let prevMatch = -2;\n let score = 0;\n for (let i = 0; i < needle.length && p < haystack.length; i++) {\n const nc = needle[i];\n let found = false;\n while (p < haystack.length) {\n if (haystack[p] === nc) {\n score += 10;\n if (p === prevMatch + 1) score += 5;\n prevMatch = p;\n p++;\n found = true;\n break;\n }\n p++;\n }\n if (!found) return 0;\n }\n const fileName = haystack.split(/[/\\\\]/).pop() ?? '';\n if (fileName.includes(needle)) score += 30;\n if (fileName.startsWith(needle)) score += 20;\n return score;\n}\n","import { readFileSync, writeFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const regex_find: Tool = {\n name: 'regex_find',\n description: '使用正则表达式搜索并替换文件内容',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n pattern: { type: 'string', description: '正则表达式' },\n replacement: { type: 'string', description: '替换字符串' },\n file_path: { type: 'string', description: '文件路径' },\n dir_path: { type: 'string', description: '目录路径' },\n file_pattern: { type: 'string', description: '文件匹配模式' },\n case_sensitive: { type: 'boolean', description: '是否区分大小写' },\n dry_run: { type: 'boolean', description: '仅预览不实际修改' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: ['pattern'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const regPattern = params.pattern as string;\n const replacement = (params.replacement as string) ?? '';\n const filePath = params.file_path as string | undefined;\n const dirPath = params.dir_path as string | undefined;\n const filePattern = (params.file_pattern as string) ?? '**/*';\n const caseSensitive = (params.case_sensitive as boolean) ?? false;\n const dryRun = (params.dry_run as boolean) ?? true;\n const maxResults = (params.max_results as number) ?? 100;\n\n const regex = new RegExp(regPattern, caseSensitive ? 'gm' : 'gim');\n const results: string[] = [];\n const maxFileSize = 2 * 1024 * 1024;\n\n async function processFile(fp: string): Promise<void> {\n if (results.length >= maxResults) return;\n try {\n const stat = await import('node:fs').then(m => m.statSync(fp));\n if (stat.size > maxFileSize) return;\n let content = readFileSync(fp, 'utf-8');\n if (!regex.test(content)) return;\n regex.lastIndex = 0;\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length && results.length < maxResults; i++) {\n if (regex.test(lines[i])) {\n regex.lastIndex = 0;\n const newLine = lines[i].replace(new RegExp(regPattern, caseSensitive ? 'gm' : 'gim'), replacement.replace(/\\$/g, '$$$$'));\n results.push(`${fp}:${i + 1}: - ${lines[i].trim()}\\n + ${newLine.trim()}`);\n }\n }\n if (!dryRun) {\n regex.lastIndex = 0;\n content = content.replace(new RegExp(regPattern, caseSensitive ? 'gm' : 'gim'), replacement.replace(/\\$/g, '$$$$'));\n writeFileSync(fp, content, 'utf-8');\n }\n } catch { /* skip */ }\n }\n\n if (filePath) {\n const abs = resolve(filePath);\n if (existsSync(abs)) await processFile(abs);\n } else if (dirPath) {\n const fg = await import('fast-glob');\n const files = await fg.default(filePattern, {\n cwd: resolve(dirPath),\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n for (const f of files) {\n if (results.length >= maxResults) break;\n await processFile(f);\n }\n }\n\n const prefix = dryRun ? '[预览模式] ' : '[已修改] ';\n return {\n success: true,\n output: results.length > 0 ? prefix + `找到 ${results.length} 处匹配:\\n${results.join('\\n')}` : '未找到匹配',\n metadata: { matches: results.length, dryRun },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const search_package: Tool = {\n name: 'search_package',\n description: '搜索 npm 包',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: '包名关键词' },\n count: { type: 'number', description: '返回数量' },\n },\n required: ['name'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const name = params.name as string;\n const count = (params.count as number) ?? 10;\n const output = execSync(\n `npm search \"${name}\" --registry https://registry.npmmirror.com --json 2>&1`,\n { encoding: 'utf-8', timeout: 15000 }\n );\n const results = JSON.parse(output);\n const items = (Array.isArray(results) ? results.slice(0, count) : [results]).map(\n (pkg: Record<string, unknown>) => ({\n name: pkg.name as string,\n version: pkg.version as string,\n description: pkg.description as string,\n author: (pkg.author as Record<string, unknown> | undefined)?.name || pkg.author,\n })\n );\n return {\n success: true,\n output: items.map((i: Record<string, unknown>) =>\n `${i.name}@${i.version}\\n ${i.description}\\n Author: ${i.author}`\n ).join('\\n\\n'),\n metadata: { count: items.length },\n };\n } catch {\n return {\n success: true,\n output: `请在 npm 官网搜索: https://www.npmjs.com/search?q=${encodeURIComponent(params.name as string)}`,\n metadata: { fallback: true },\n };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const search_docs: Tool = {\n name: 'search_docs',\n description: '搜索在线文档,返回搜索建议和常用文档链接',\n category: 'search',\n parameters: {\n type: 'object',\n properties: {\n query: { type: 'string', description: '搜索关键词' },\n source: { type: 'string', description: '文档源: mdn, npm, typescript, nodejs, react, all', enum: ['mdn', 'npm', 'typescript', 'nodejs', 'react', 'all'] },\n },\n required: ['query'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const query = params.query as string;\n const source = (params.source as string) ?? 'all';\n const encoded = encodeURIComponent(query);\n\n const docLinks: Record<string, string> = {\n mdn: `https://developer.mozilla.org/zh-CN/search?q=${encoded}`,\n npm: `https://www.npmjs.com/search?q=${encoded}`,\n typescript: `https://www.typescriptlang.org/search?q=${encoded}`,\n nodejs: `https://nodejs.org/api/all.html`,\n react: `https://react.dev/`,\n };\n\n const lines: string[] = ['建议访问以下文档搜索:', ''];\n if (source === 'all') {\n for (const [name, url] of Object.entries(docLinks)) {\n lines.push(`- ${name.toUpperCase()}: ${url}`);\n }\n } else {\n lines.push(`- ${docLinks[source]}`);\n }\n\n lines.push('', `同时可以在 Stack Overflow 搜索: https://stackoverflow.com/search?q=${encoded}`);\n\n return {\n success: true,\n output: lines.join('\\n'),\n metadata: { query, source },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { spawn, type ChildProcess } from 'node:child_process';\n\nexport interface ProcessEntry {\n proc: ChildProcess;\n output: string;\n startTime: number;\n command: string;\n cwd: string;\n alive: boolean;\n}\n\nconst pool = new Map<string, ProcessEntry>();\nconst RING_SIZE = 64_000;\nconst TAIL_SIZE = 16_000;\n\nexport function decodeBuffer(bufs: Buffer[]): string {\n const buf = Buffer.concat(bufs);\n if (process.platform === 'win32') {\n try {\n const decoder = new TextDecoder('gbk', { fatal: false });\n return decoder.decode(buf);\n } catch {\n return buf.toString('utf-8');\n }\n }\n return buf.toString('utf-8');\n}\n\nfunction ringPush(entry: ProcessEntry, chunk: string): void {\n entry.output += chunk;\n if (entry.output.length > RING_SIZE) {\n entry.output = entry.output.slice(-RING_SIZE);\n }\n}\n\nexport function startBgProcess(params: {\n command: string;\n cwd?: string;\n terminalId?: string;\n env?: Record<string, string>;\n}): { terminalId: string; pid: number | undefined } {\n const cwd = params.cwd || process.cwd();\n const terminalId = params.terminalId || `bg_${Date.now()}_${Math.random().toString(36).slice(2,6)}`;\n const [cmd, ...args] = params.command.split(/\\s+/);\n\n if (pool.has(terminalId)) {\n const old = pool.get(terminalId)!;\n try { old.proc.kill(); } catch {}\n pool.delete(terminalId);\n }\n\n const proc = spawn(cmd, args, {\n cwd,\n shell: true,\n stdio: ['pipe', 'pipe', 'pipe'],\n env: params.env ? { ...process.env, ...params.env } : process.env,\n });\n\n const entry: ProcessEntry = {\n proc,\n output: '',\n startTime: Date.now(),\n command: params.command,\n cwd,\n alive: true,\n };\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n\n proc.stdout?.on('data', (d: Buffer) => stdoutChunks.push(d));\n proc.stderr?.on('data', (d: Buffer) => stderrChunks.push(d));\n\n const flushInterval = setInterval(() => {\n if (stdoutChunks.length > 0) {\n ringPush(entry, decodeBuffer(stdoutChunks.splice(0)));\n }\n if (stderrChunks.length > 0) {\n ringPush(entry, '[stderr] ' + decodeBuffer(stderrChunks.splice(0)));\n }\n }, 50);\n\n proc.on('close', (code) => {\n clearInterval(flushInterval);\n if (stdoutChunks.length > 0) ringPush(entry, decodeBuffer(stdoutChunks.splice(0)));\n if (stderrChunks.length > 0) ringPush(entry, '[stderr] ' + decodeBuffer(stderrChunks.splice(0)));\n entry.alive = false;\n ringPush(entry, `\\n[进程结束, exitCode=${code}]\\n`);\n });\n\n proc.on('error', (err) => {\n clearInterval(flushInterval);\n entry.alive = false;\n ringPush(entry, `\\n[进程错误: ${err.message}]\\n`);\n });\n\n pool.set(terminalId, entry);\n return { terminalId, pid: proc.pid ?? undefined };\n}\n\nexport function readOutput(terminalId: string, tailOnly?: boolean): string | null {\n const entry = pool.get(terminalId);\n if (!entry) return null;\n const full = entry.output || '(暂无输出)';\n if (tailOnly) {\n return full.length > TAIL_SIZE ? '...(截断)\\n' + full.slice(-TAIL_SIZE) : full;\n }\n return full.length > TAIL_SIZE * 2 ? full.slice(-TAIL_SIZE * 2) : full;\n}\n\nexport function listProcesses(): Array<{\n id: string; pid: number | undefined; command: string;\n alive: boolean; runningSec: number; outputLen: number; outputTail: string;\n}> {\n return Array.from(pool.entries()).map(([id, e]) => ({\n id,\n pid: e.proc.pid ?? undefined,\n command: e.command.slice(0, 60),\n alive: e.alive,\n runningSec: Math.round((Date.now() - e.startTime) / 1000),\n outputLen: e.output.length,\n outputTail: e.output.slice(-200).replace(/\\n/g, '↵').slice(0, 160),\n }));\n}\n\nexport function killProcess(terminalId: string): boolean {\n const entry = pool.get(terminalId);\n if (!entry) return false;\n try { entry.proc.kill('SIGKILL'); } catch {}\n pool.delete(terminalId);\n return true;\n}\n\nexport function getProcess(terminalId: string): ProcessEntry | undefined {\n return pool.get(terminalId);\n}\n\nexport function sendToStdin(terminalId: string, text: string): boolean {\n const entry = pool.get(terminalId);\n if (!entry || !entry.alive || !entry.proc.stdin) return false;\n entry.proc.stdin.write(text + '\\n');\n return true;\n}\n\nexport function sendSignal(terminalId: string, signal: 'SIGINT' | 'SIGTERM' | 'SIGKILL'): boolean {\n const entry = pool.get(terminalId);\n if (!entry || !entry.alive) return false;\n try { entry.proc.kill(signal); } catch { return false; }\n return true;\n}\n","import { spawn } from 'node:child_process';\nimport { decodeBuffer } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const run_command: Tool = {\n name: 'run_command',\n description: '执行系统命令并返回结果 (阻塞等待完成)',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n command: { type: 'string', description: '要执行的命令' },\n cwd: { type: 'string', description: '工作目录' },\n timeout_ms: { type: 'number', description: '超时毫秒数 (默认 30s)' },\n },\n required: ['command'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n return new Promise((resolve) => {\n const command = params.command as string;\n const cwd = (params.cwd as string) || process.cwd();\n const timeout = (params.timeout_ms as number) ?? 30_000;\n\n const proc = spawn(command, {\n cwd, shell: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n const timer = setTimeout(() => {\n try { proc.kill(); } catch {}\n resolve({ success: false, error: `命令超时 (${timeout}ms)`, output: '' });\n }, timeout);\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n proc.stdout?.on('data', (chunk: Buffer) => stdoutChunks.push(chunk));\n proc.stderr?.on('data', (chunk: Buffer) => stderrChunks.push(chunk));\n\n proc.on('error', (err: Error) => {\n clearTimeout(timer);\n resolve({ success: false, error: err.message, output: '' });\n });\n\n proc.on('close', (code: number | null) => {\n clearTimeout(timer);\n const stdout = decodeBuffer(stdoutChunks);\n const stderr = decodeBuffer(stderrChunks);\n const output = (stdout + (stderr ? `\\n[stderr]\\n${stderr}` : '')).slice(0, 8000);\n\n if (code === 0) {\n resolve({ success: true, output, metadata: { command, cwd, exitCode: code } });\n } else {\n resolve({ success: false, error: `Exit code: ${code}`, output });\n }\n });\n });\n },\n};\n","import { spawn } from 'node:child_process';\nimport { decodeBuffer } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nconst runningProcesses = new Map<string, ReturnType<typeof spawn>>();\n\nexport const run_async: Tool = {\n name: 'run_async',\n description: '异步执行命令并等待完成 (可配合 check_status / stop_command)',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n command: { type: 'string', description: '命令和参数' },\n cwd: { type: 'string', description: '工作目录' },\n task_id: { type: 'string', description: '任务标识,用于后续查询' },\n },\n required: ['command'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const command = params.command as string;\n const cwd = (params.cwd as string) ?? process.cwd();\n const taskId = (params.task_id as string) ?? `async_${Date.now()}`;\n\n const [cmd, ...args] = command.split(/\\s+/);\n const proc = spawn(cmd, args, {\n cwd,\n shell: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n env: process.env,\n });\n\n runningProcesses.set(taskId, proc);\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n proc.stdout?.on('data', (d: Buffer) => stdoutChunks.push(d));\n proc.stderr?.on('data', (d: Buffer) => stderrChunks.push(d));\n\n try {\n await new Promise<void>((resolve, reject) => {\n proc.on('close', (code) => {\n runningProcesses.delete(taskId);\n if (code === 0) resolve();\n else reject(new Error(`进程退出码: ${code}`));\n });\n proc.on('error', reject);\n });\n } catch (e) {\n runningProcesses.delete(taskId);\n return {\n success: false,\n error: (e as Error).message,\n output: decodeBuffer(stdoutChunks) + decodeBuffer(stderrChunks),\n metadata: { taskId },\n };\n }\n\n return {\n success: true,\n output: decodeBuffer(stdoutChunks) + (stderrChunks.length ? '\\n[stderr]\\n' + decodeBuffer(stderrChunks) : '') || '(无输出)',\n metadata: { taskId, command },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nexport { runningProcesses };\n","import { runningProcesses } from './run_async.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const check_status: Tool = {\n name: 'check_status',\n description: '检查异步命令的执行状态',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n task_id: { type: 'string', description: '任务标识' },\n show_all: { type: 'boolean', description: '显示所有运行中的任务' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const taskId = params.task_id as string | undefined;\n const showAll = (params.show_all as boolean) ?? false;\n\n if (showAll || !taskId) {\n const tasks = Array.from(runningProcesses.keys());\n return {\n success: true,\n output: tasks.length > 0\n ? `运行中的任务 (${tasks.length}):\\n${tasks.map(t => ` - ${t}`).join('\\n')}`\n : '没有运行中的任务',\n metadata: { tasks },\n };\n }\n\n const proc = runningProcesses.get(taskId);\n if (!proc) {\n return { success: false, error: `任务不存在或已完成: ${taskId}`, output: '' };\n }\n\n return {\n success: true,\n output: `任务 \"${taskId}\" 正在运行 (PID: ${proc.pid ?? 'unknown'})`,\n metadata: { taskId, pid: proc.pid, running: true },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { runningProcesses } from './run_async.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const stop_command: Tool = {\n name: 'stop_command',\n description: '终止正在执行的异步命令',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n task_id: { type: 'string', description: '任务标识' },\n signal: { type: 'string', description: '终止信号: SIGTERM, SIGKILL', enum: ['SIGTERM', 'SIGKILL'] },\n },\n required: ['task_id'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const taskId = params.task_id as string;\n const signal = (params.signal as string) ?? 'SIGTERM';\n const proc = runningProcesses.get(taskId);\n\n if (!proc) {\n return { success: false, error: `任务不存在或已完成: ${taskId}`, output: '' };\n }\n\n if (signal === 'SIGKILL') {\n proc.kill('SIGKILL');\n } else {\n proc.kill('SIGTERM');\n }\n\n runningProcesses.delete(taskId);\n return { success: true, output: `已终止任务: ${taskId} (信号: ${signal})` };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { exec as execCb } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport type { Tool } from '../../tool-types.js';\n\nconst execAsync = promisify(execCb);\n\nexport const pipe_commands: Tool = {\n name: 'pipe_commands',\n description: '管道串联多个命令',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n commands: {\n type: 'array',\n items: { type: 'string' },\n description: '命令列表,按顺序通过管道串联',\n },\n cwd: { type: 'string', description: '工作目录' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['commands'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const commands = params.commands as string[];\n const cwd = (params.cwd as string) ?? process.cwd();\n const timeout = (params.timeout_ms as number) ?? 30000;\n const pipeline = commands.join(' | ');\n\n const { stdout, stderr } = await execAsync(pipeline, {\n cwd,\n timeout,\n maxBuffer: 10 * 1024 * 1024,\n encoding: 'utf-8',\n shell: process.env.SHELL || process.env.ComSpec || 'cmd.exe',\n });\n\n return {\n success: true,\n output: stdout + (stderr ? `\\n[stderr]\\n${stderr}` : ''),\n metadata: { pipeline },\n };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: e.message || String(err),\n output: [e.stdout, e.stderr].filter(Boolean).join('\\n'),\n };\n }\n },\n};\n","import { readFileSync, existsSync } from 'node:fs';\nimport { exec as execCb } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nconst execAsync = promisify(execCb);\n\nexport const shell_script: Tool = {\n name: 'shell_script',\n description: '执行 Shell 脚本文件',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n script_path: { type: 'string', description: '脚本文件路径' },\n args: { type: 'array', items: { type: 'string' }, description: '脚本参数' },\n cwd: { type: 'string', description: '工作目录' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['script_path'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const scriptPath = resolve(params.script_path as string);\n const args = (params.args as string[]) ?? [];\n const cwd = (params.cwd as string) ?? process.cwd();\n const timeout = (params.timeout_ms as number) ?? 30000;\n\n if (!existsSync(scriptPath)) {\n return { success: false, error: `脚本文件不存在: ${scriptPath}`, output: '' };\n }\n\n const shell = process.platform === 'win32'\n ? process.env.ComSpec || 'cmd.exe'\n : process.env.SHELL || '/bin/sh';\n\n const cmd = process.platform === 'win32'\n ? `\"${shell}\" /c \"${scriptPath}\" ${args.join(' ')}`\n : `${shell} \"${scriptPath}\" ${args.join(' ')}`;\n\n const { stdout, stderr } = await execAsync(cmd, {\n cwd,\n timeout,\n maxBuffer: 10 * 1024 * 1024,\n encoding: 'utf-8',\n });\n\n return {\n success: true,\n output: stdout + (stderr ? `\\n[stderr]\\n${stderr}` : ''),\n metadata: { script: scriptPath },\n };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: e.message || String(err),\n output: [e.stdout, e.stderr].filter(Boolean).join('\\n'),\n };\n }\n },\n};\n","import { startBgProcess } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const background_terminal: Tool = {\n name: 'background_terminal',\n description: '在后台终端中运行持久进程 (npm run dev, 服务器等)。启动后立即返回,可用 read_terminal 查看输出、list_terminals 查看状态、kill_terminal 终止。',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n command: { type: 'string', description: '要运行的命令,如 npm run dev' },\n cwd: { type: 'string', description: '工作目录' },\n terminal_id: { type: 'string', description: '终端标识 (可选,自动生成)' },\n env: { type: 'object', description: '额外环境变量' },\n },\n required: ['command'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const command = params.command as string;\n const cwd = params.cwd as string | undefined;\n const terminalId = params.terminal_id as string | undefined;\n const env = params.env as Record<string, string> | undefined;\n\n const { terminalId: tid, pid } = startBgProcess({ command, cwd, terminalId, env });\n\n return {\n success: true,\n output: `后台终端已启动\\n ID: ${tid}\\n PID: ${pid}\\n 命令: ${command}\\n 目录: ${cwd || process.cwd()}\\n\\n启动后等待 1-2 秒即可用 read_terminal 查看输出。`,\n metadata: { terminalId: tid, pid },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { getProcess } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const send_keys: Tool = {\n name: 'send_keys',\n description: '检查后台终端是否可写入',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n terminal_id: { type: 'string', description: '终端标识' },\n },\n required: ['terminal_id'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const terminalId = params.terminal_id as string;\n const entry = getProcess(terminalId);\n if (!entry || !entry.alive) {\n return { success: false, error: `终端不可用: ${terminalId}`, output: '' };\n }\n if (!entry.proc.stdin) {\n return { success: false, error: `终端 stdin 不可写: ${terminalId}`, output: '' };\n }\n return {\n success: true,\n output: `终端 \"${terminalId}\" 就绪,可通过 send_text 发送文本`,\n metadata: { terminalId, pid: entry.proc.pid },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { sendSignal } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const send_ctrl_keys: Tool = {\n name: 'send_ctrl_keys',\n description: '向后台终端发送控制信号 (Ctrl+C=SIGINT, Ctrl+D=关闭stdin)',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n terminal_id: { type: 'string', description: '终端标识' },\n signal: { type: 'string', enum: ['ctrl_c', 'ctrl_d', 'ctrl_z'], description: 'ctrl_c=SIGINT, ctrl_d=关闭stdin, ctrl_z=SIGTSTP' },\n },\n required: ['terminal_id', 'signal'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const terminalId = params.terminal_id as string;\n const signal = params.signal as string;\n\n switch (signal) {\n case 'ctrl_c':\n sendSignal(terminalId, 'SIGINT');\n return { success: true, output: `已发送 Ctrl+C 到终端: ${terminalId}`, metadata: { terminalId }, };\n case 'ctrl_d': {\n const { getProcess } = await import('./process-pool.js');\n const entry = getProcess(terminalId);\n if (entry?.proc.stdin) { entry.proc.stdin.end(); }\n return { success: true, output: `已发送 Ctrl+D 到终端: ${terminalId}`, metadata: { terminalId }, };\n }\n case 'ctrl_z':\n sendSignal(terminalId, 'SIGTERM');\n return { success: true, output: `已发送 Ctrl+Z 到终端: ${terminalId}`, metadata: { terminalId }, };\n default:\n return { success: false, error: `未知信号: ${signal}`, output: '' };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { sendToStdin } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const send_text: Tool = {\n name: 'send_text',\n description: '向后台终端发送文本输入',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n terminal_id: { type: 'string', description: '终端标识' },\n text: { type: 'string', description: '要发送的文本' },\n },\n required: ['terminal_id', 'text'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const terminalId = params.terminal_id as string;\n const text = params.text as string;\n const ok = sendToStdin(terminalId, text);\n if (!ok) {\n return { success: false, error: `无法发送到终端: ${terminalId}`, output: '' };\n }\n return {\n success: true,\n output: `已发送文本到终端: ${terminalId}`,\n metadata: { terminalId, length: text.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const terminal_screenshot: Tool = {\n name: 'terminal_screenshot',\n description: '获取终端状态快照(文本形式)',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n terminal_id: { type: 'string', description: '终端标识' },\n },\n required: ['terminal_id'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const terminalId = params.terminal_id as string;\n return {\n success: true,\n output: `终端快照: ${terminalId}\\n(终端屏幕截图功能在 CLI 环境中以文本输出替代)`,\n metadata: { terminalId, method: 'text-snapshot' },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const terminal_resize: Tool = {\n name: 'terminal_resize',\n description: '调整终端尺寸',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n rows: { type: 'number', description: '行数' },\n cols: { type: 'number', description: '列数' },\n },\n required: ['rows', 'cols'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const rows = params.rows as number;\n const cols = params.cols as number;\n process.stdout.write(`\\x1b[8;${rows};${cols}t`);\n return {\n success: true,\n output: `终端尺寸已调整: ${cols}x${rows}`,\n metadata: { rows, cols },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { listProcesses, readOutput as poolRead } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const list_terminals: Tool = {\n name: 'list_terminals',\n description: '列出所有后台终端及最近输出',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {},\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute() {\n try {\n const entries = listProcesses();\n if (entries.length === 0) {\n return { success: true, output: '没有后台终端' };\n }\n let out = `后台终端 (${entries.length}):\\n`;\n for (const e of entries) {\n const status = e.alive ? `运行 ${e.runningSec}s` : '已结束';\n out += ` ${e.id} PID:${e.pid ?? '-'} ${e.command}\\n`;\n out += ` ${status} | 输出:${e.outputLen}B | ${e.outputTail}\\n\\n`;\n }\n return { success: true, output: out, metadata: { entries } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nexport const read_terminal: Tool = {\n name: 'read_terminal',\n description: '读取后台终端的输出内容',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n terminal_id: { type: 'string', description: '终端标识' },\n tail: { type: 'boolean', description: '仅显示末尾输出' },\n },\n required: ['terminal_id'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const terminalId = params.terminal_id as string;\n const tail = (params.tail as boolean) ?? true;\n const output = poolRead(terminalId, tail);\n if (output === null) {\n return { success: false, error: `终端不存在: ${terminalId}`, output: '' };\n }\n return { success: true, output, metadata: { terminalId, tail } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { killProcess } from './process-pool.js';\nimport type { Tool } from '../../tool-types.js';\n\nexport const kill_terminal: Tool = {\n name: 'kill_terminal',\n description: '强制关闭后台终端',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n terminal_id: { type: 'string', description: '终端标识' },\n },\n required: ['terminal_id'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const terminalId = params.terminal_id as string;\n const ok = killProcess(terminalId);\n if (!ok) {\n return { success: false, error: `终端不存在: ${terminalId}`, output: '' };\n }\n return { success: true, output: `已关闭终端: ${terminalId}`, metadata: { terminalId } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const interactive_terminal: Tool = {\n name: 'interactive_terminal',\n description: '启动交互式终端会话(在当前 CLI 环境中限制使用)',\n category: 'shell',\n parameters: {\n type: 'object',\n properties: {\n command: { type: 'string', description: '要运行的交互式命令' },\n terminal_id: { type: 'string', description: '终端标识' },\n },\n required: ['command'],\n },\n dangerous: true,\n requiresApproval: true,\n async execute(params) {\n try {\n const command = params.command as string;\n const terminalId = (params.terminal_id as string) ?? `interactive_${Date.now()}`;\n\n return {\n success: true,\n output: `交互式终端请求已记录: ${terminalId}\\n命令: ${command}\\n\\n注意: 当前运行在非交互式环境,建议使用 background_terminal 运行此命令。`,\n metadata: { terminalId, command, interactive: false },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const web_fetch: Tool = {\n name: 'web_fetch',\n description: '获取网页内容并返回纯文本 / Markdown',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: '页面 URL' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n max_size: { type: 'number', description: '最大返回字节数' },\n as_markdown: { type: 'boolean', description: '是否尝试返回 Markdown 格式' },\n },\n required: ['url'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const url = params.url as string;\n const timeout = (params.timeout_ms as number) ?? 30000;\n const maxSize = (params.max_size as number) ?? 500000;\n const asMarkdown = (params.as_markdown as boolean) ?? false;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n try {\n const res = await fetch(url, {\n headers: {\n 'User-Agent': 'DeeperCode/1.0 (AI Agent)',\n 'Accept': asMarkdown ? 'text/markdown, text/html' : 'text/html',\n },\n signal: controller.signal,\n });\n\n const contentType = res.headers.get('content-type') ?? '';\n let text = await res.text();\n\n if (text.length > maxSize) {\n text = text.slice(0, maxSize) + '\\n\\n[内容已截断]';\n }\n\n if (asMarkdown || contentType.includes('html')) {\n const cheerio = await import('cheerio');\n const $ = cheerio.load(text);\n $('script, style, nav, footer, iframe, noscript').remove();\n const extracted = $('body').text().replace(/\\s+/g, ' ').trim();\n text = `# 页面内容 (${url})\\n\\nURL: ${url}\\nContent-Type: ${contentType}\\n\\n${extracted}`;\n }\n\n return {\n success: true,\n output: text,\n metadata: {\n url,\n status: res.status,\n contentType,\n length: text.length,\n },\n };\n } finally {\n clearTimeout(timer);\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const web_search: Tool = {\n name: 'web_search',\n description: '使用 Bing 搜索引擎查询,返回真实搜索结果摘要',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n query: { type: 'string', description: '搜索查询关键词' },\n count: { type: 'number', description: '返回结果数 (默认 5, 最多 10)' },\n },\n required: ['query'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const query = params.query as string;\n const count = Math.min((params.count as number) ?? 5, 10);\n const encoded = encodeURIComponent(query);\n const url = `https://www.bing.com/search?q=${encoded}&count=${count}`;\n\n const resp = await fetch(url, {\n headers: {\n 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',\n 'Accept': 'text/html,application/xhtml+xml',\n 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',\n },\n signal: AbortSignal.timeout(12000),\n });\n\n if (!resp.ok) {\n return { success: false, error: `Bing 搜索失败: HTTP ${resp.status}`, output: '' };\n }\n\n const html = await resp.text();\n const results = extractBingResults(html, count);\n\n if (results.length === 0) {\n return {\n success: true,\n output: `Bing 搜索 \"${query}\" — 未提取到结果\\n直接访问: ${url}`,\n metadata: { query, engine: 'bing', url },\n };\n }\n\n const lines = [`Bing 搜索: \"${query}\"`, ''];\n for (let i = 0; i < results.length; i++) {\n const r = results[i];\n lines.push(`${i + 1}. ${r.title}`);\n lines.push(` ${r.snippet}`);\n lines.push(` ${r.url}`);\n lines.push('');\n }\n\n return {\n success: true,\n output: lines.join('\\n'),\n metadata: { query, engine: 'bing', count: results.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\ninterface SearchResult {\n title: string;\n url: string;\n snippet: string;\n}\n\nfunction extractBingResults(html: string, maxCount: number): SearchResult[] {\n const results: SearchResult[] = [];\n\n // Bing 搜索结果在 <li class=\"b_algo\"> 或 <div class=\"b_caption\"> 中\n const algoRegex = /<li class=\"b_algo\"[^>]*>([\\s\\S]*?)<\\/li>/gi;\n const matches = html.match(algoRegex);\n\n if (matches) {\n for (const block of matches.slice(0, maxCount)) {\n const r = parseAlgoBlock(block);\n if (r) results.push(r);\n }\n }\n\n // 回退: 直接抓标题链接\n if (results.length === 0) {\n const linkRegex = /<h2[^>]*><a[^>]*href=\"(https?:\\/\\/(?!www\\.bing\\.com)[^\"]+)\"[^>]*>([\\s\\S]*?)<\\/a><\\/h2>/gi;\n let m;\n while ((m = linkRegex.exec(html)) !== null && results.length < maxCount) {\n const url = m[1]!.replace(/&/g, '&');\n const title = m[2]!.replace(/<[^>]+>/g, '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').trim();\n const snippet = extractSnippet(html, url);\n results.push({ title: title.slice(0, 120), url: url.slice(0, 200), snippet: snippet.slice(0, 200) });\n }\n }\n\n return results;\n}\n\nfunction parseAlgoBlock(block: string): SearchResult | null {\n const titleMatch = block.match(/<h2[^>]*><a[^>]*href=\"([^\"]+)\"[^>]*>([\\s\\S]*?)<\\/a><\\/h2>/i);\n if (!titleMatch) return null;\n\n const url = titleMatch[1]!.replace(/&/g, '&').slice(0, 200);\n const title = titleMatch[2]!.replace(/<[^>]+>/g, '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').trim();\n\n // 尝试多种摘要容器\n const snippetMatch = block.match(/<p[^>]*class=\"[^\"]*b_lineclamp[^\"]*\"[^>]*>([\\s\\S]*?)<\\/p>/i)\n || block.match(/<div class=\"b_caption\"[^>]*>\\s*<p[^>]*>([\\s\\S]*?)<\\/p>/i)\n || block.match(/<p[^>]*>([\\s\\S]*?)<\\/p>/i);\n\n const snippet = snippetMatch\n ? snippetMatch[1]!.replace(/<[^>]+>/g, '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').trim()\n : '';\n\n return { title: title.slice(0, 120), url, snippet: snippet.slice(0, 200) };\n}\n\nfunction extractSnippet(html: string, _url: string): string {\n // 简单回退: 找标题附近的文本\n const idx = html.indexOf(_url) + _url.length;\n const nearby = html.slice(idx, idx + 500);\n const text = nearby.replace(/<[^>]+>/g, ' ').replace(/\\s+/g, ' ').trim();\n return text.slice(0, 200);\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport const http_request: Tool = {\n name: 'http_request',\n description: '通用 HTTP 请求(支持 GET/POST/PUT/DELETE/PATCH)',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: '请求 URL' },\n method: { type: 'string', description: '请求方法', enum: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'] },\n headers: { type: 'object', description: '请求头' },\n body: { type: 'string', description: '请求体' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['url'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const url = params.url as string;\n const method = (params.method as string) ?? 'GET';\n const headers = (params.headers as Record<string, string>) ?? {};\n const body = params.body as string | undefined;\n const timeout = (params.timeout_ms as number) ?? 30000;\n\n const fetchHeaders: Record<string, string> = {\n 'User-Agent': 'DeeperCode/1.0',\n ...headers,\n };\n\n const fetchOptions: RequestInit = { method, headers: fetchHeaders };\n if (body && method !== 'GET') {\n fetchOptions.body = body;\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n try {\n const res = await fetch(url, { ...fetchOptions, signal: controller.signal });\n const text = await res.text();\n return {\n success: res.ok,\n output: text.slice(0, 50000),\n metadata: {\n status: res.status,\n statusText: res.statusText,\n contentType: res.headers.get('content-type'),\n length: text.length,\n },\n };\n } finally {\n clearTimeout(timer);\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { createWriteStream, existsSync, mkdirSync } from 'node:fs';\nimport { dirname, resolve, basename } from 'node:path';\nimport { pipeline } from 'node:stream/promises';\nimport type { Tool } from '../../tool-types.js';\n\nexport const download_file: Tool = {\n name: 'download_file',\n description: '下载文件到本地',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: '下载 URL' },\n file_path: { type: 'string', description: '保存路径' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['url', 'file_path'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const url = params.url as string;\n const filePath = resolve(params.file_path as string);\n const timeout = (params.timeout_ms as number) ?? 60000;\n\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n try {\n const res = await fetch(url, { signal: controller.signal });\n if (!res.ok) {\n return { success: false, error: `HTTP ${res.status}: ${res.statusText}`, output: '' };\n }\n if (!res.body) {\n return { success: false, error: '响应体为空', output: '' };\n }\n const ws = createWriteStream(filePath);\n await pipeline(res.body as unknown as NodeJS.ReadableStream, ws);\n const stat = await import('node:fs').then(m => m.statSync(filePath));\n return {\n success: true,\n output: `下载完成: ${filePath} (${formatSize(stat.size)})`,\n metadata: { url, path: filePath, size: stat.size },\n };\n } finally {\n clearTimeout(timer);\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)} MB`;\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport const api_call: Tool = {\n name: 'api_call',\n description: '调用 REST API 并处理响应',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: 'API URL' },\n method: { type: 'string', description: 'HTTP 方法', enum: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'] },\n headers: { type: 'object', description: '请求头' },\n body: { type: 'string', description: '请求体 (JSON)' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n auth_type: { type: 'string', description: '认证类型: none, bearer, basic, api_key', enum: ['none', 'bearer', 'basic', 'api_key'] },\n auth_value: { type: 'string', description: '认证凭据(token 或 key)' },\n },\n required: ['url'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const url = params.url as string;\n const method = (params.method as string) ?? 'GET';\n const headers = (params.headers as Record<string, string>) ?? {};\n const body = params.body as string | undefined;\n const timeout = (params.timeout_ms as number) ?? 30000;\n const authType = (params.auth_type as string) ?? 'none';\n const authValue = params.auth_value as string | undefined;\n\n const fetchHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'User-Agent': 'DeeperCode/1.0',\n ...headers,\n };\n\n if (authType === 'bearer' && authValue) {\n fetchHeaders['Authorization'] = `Bearer ${authValue}`;\n } else if (authType === 'basic' && authValue) {\n const encoded = Buffer.from(authValue).toString('base64');\n fetchHeaders['Authorization'] = `Basic ${encoded}`;\n } else if (authType === 'api_key' && authValue) {\n fetchHeaders['X-API-Key'] = authValue;\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n try {\n const res = await fetch(url, {\n method,\n headers: fetchHeaders,\n body: method !== 'GET' ? body : undefined,\n signal: controller.signal,\n });\n\n const responseText = await res.text();\n let parsed;\n try { parsed = JSON.parse(responseText); } catch { parsed = responseText; }\n const output = typeof parsed === 'string' ? parsed : JSON.stringify(parsed, null, 2);\n\n return {\n success: res.ok,\n output: output.slice(0, 50000),\n metadata: {\n status: res.status,\n statusText: res.statusText,\n contentType: res.headers.get('content-type'),\n },\n };\n } finally {\n clearTimeout(timer);\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const graphql_query: Tool = {\n name: 'graphql_query',\n description: '执行 GraphQL 查询',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: 'GraphQL 端点 URL' },\n query: { type: 'string', description: 'GraphQL 查询语句' },\n variables: { type: 'object', description: '查询变量' },\n headers: { type: 'object', description: '自定义请求头' },\n },\n required: ['url', 'query'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const url = params.url as string;\n const query = params.query as string;\n const variables = params.variables as Record<string, unknown> | undefined;\n const headers = (params.headers as Record<string, string>) ?? {};\n\n const res = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'DeeperCode/1.0',\n ...headers,\n },\n body: JSON.stringify({ query, variables: variables || undefined }),\n });\n\n const data = await res.json() as Record<string, unknown>;\n return {\n success: res.ok && !data.errors,\n output: JSON.stringify(data, null, 2).slice(0, 50000),\n metadata: { status: res.status, hasErrors: !!data.errors },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nlet activeWs: import('ws').WebSocket | null = null;\n\nexport const websocket_connect: Tool = {\n name: 'websocket_connect',\n description: '建立 WebSocket 连接',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: 'WebSocket URL (ws:// 或 wss://)' },\n message: { type: 'string', description: '要发送的消息' },\n timeout_ms: { type: 'number', description: '连接超时毫秒数' },\n },\n required: ['url'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const url = params.url as string;\n const message = params.message as string | undefined;\n const timeout = (params.timeout_ms as number) ?? 10000;\n\n const WS = await import('ws');\n const ws = new WS.WebSocket(url);\n\n const result = await new Promise<{ success: boolean; output: string }>((resolve, reject) => {\n const timer = setTimeout(() => {\n ws.close();\n reject(new Error('WebSocket 连接超时'));\n }, timeout);\n\n let response = '';\n\n ws.on('open', () => {\n response += `已连接: ${url}\\n`;\n if (message) {\n ws.send(message);\n response += `已发送: ${message}\\n`;\n }\n });\n\n ws.on('message', (data: Buffer) => {\n response += `收到: ${data.toString('utf-8')}\\n`;\n clearTimeout(timer);\n ws.close();\n resolve({ success: true, output: response });\n });\n\n ws.on('error', (err: Error) => {\n clearTimeout(timer);\n reject(err);\n });\n\n ws.on('close', () => {\n clearTimeout(timer);\n if (response) {\n resolve({ success: true, output: response + '\\n连接已关闭' });\n }\n });\n });\n\n return result;\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const check_url: Tool = {\n name: 'check_url',\n description: '检查 URL 是否可达',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: 'URL' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['url'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const url = params.url as string;\n const timeout = (params.timeout_ms as number) ?? 10000;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n try {\n const start = Date.now();\n const res = await fetch(url, {\n method: 'HEAD',\n signal: controller.signal,\n headers: { 'User-Agent': 'DeeperCode/1.0' },\n });\n const elapsed = Date.now() - start;\n\n return {\n success: true,\n output: `${url} 可达 (HTTP ${res.status}, ${elapsed}ms)`,\n metadata: {\n url,\n status: res.status,\n statusText: res.statusText,\n responseTimeMs: elapsed,\n reachable: true,\n },\n };\n } finally {\n clearTimeout(timer);\n }\n } catch (err: unknown) {\n const message = (err as Error).message;\n const unreachable = message.includes('ENOTFOUND') || message.includes('ECONNREFUSED');\n return {\n success: !unreachable,\n output: `${params.url} ${unreachable ? '不可达' : '检查失败'}: ${message}`,\n error: message,\n metadata: { reachable: false },\n };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const screenshot_page: Tool = {\n name: 'screenshot_page',\n description: '网页截图(CLI 环境下返回页面信息)',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: '网页 URL' },\n full_page: { type: 'boolean', description: '是否全页截图' },\n viewport_width: { type: 'number', description: '视口宽度' },\n viewport_height: { type: 'number', description: '视口高度' },\n },\n required: ['url'],\n },\n dangerous: true,\n requiresApproval: true,\n async execute(params) {\n try {\n const url = params.url as string;\n const fullPage = (params.full_page as boolean) ?? false;\n const width = (params.viewport_width as number) ?? 1280;\n const height = (params.viewport_height as number) ?? 800;\n\n try {\n const res = await fetch(url, {\n headers: { 'User-Agent': 'DeeperCode/1.0 Screenshot' },\n });\n const html = await res.text();\n const title = html.match(/<title>(.*?)<\\/title>/i)?.[1] ?? '无标题';\n\n return {\n success: true,\n output: [\n `网页截图请求: ${url}`,\n `标题: ${title}`,\n `视口: ${width}x${height}`,\n `全页: ${fullPage}`,\n `HTML 大小: ${html.length} bytes`,\n '',\n '注意: 当前运行在 CLI 环境,截图功能需要浏览器环境支持。',\n '建议使用 Playwright/Puppeteer 或启用 GUI 模式。',\n ].join('\\n'),\n metadata: { url, title, viewport: `${width}x${height}`, fullPage },\n };\n } catch {\n return {\n success: true,\n output: `截图功能当前不可用,请使用浏览器工具获取页面: ${url}`,\n metadata: { url, fallback: true },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import * as cheerio from 'cheerio';\nimport type { Tool } from '../../tool-types.js';\n\nexport const parse_html: Tool = {\n name: 'parse_html',\n description: '解析 HTML 内容并提取结构化信息',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n html: { type: 'string', description: 'HTML 内容' },\n url: { type: 'string', description: '从 URL 获取并解析' },\n selector: { type: 'string', description: 'CSS 选择器' },\n extract: { type: 'string', description: '提取: text, html, links, images, title, meta, headings', enum: ['text', 'html', 'links', 'images', 'title', 'meta', 'headings', 'all'] },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n let html = '';\n const url = params.url as string | undefined;\n const htmlContent = params.html as string | undefined;\n const selector = params.selector as string | undefined;\n const extract = (params.extract as string) ?? 'all';\n\n if (url) {\n const res = await fetch(url, {\n headers: { 'User-Agent': 'DeeperCode/1.0' },\n });\n html = await res.text();\n } else if (htmlContent) {\n html = htmlContent;\n } else {\n return { success: false, error: '请提供 html 或 url 参数', output: '' };\n }\n\n const $ = cheerio.load(html);\n const result: Record<string, unknown> = {};\n\n function shouldExtract(key: string): boolean {\n return extract === 'all' || extract === key;\n }\n\n if (selector) {\n const els = $(selector);\n result.matches = els.length;\n result.text = els.text().trim().slice(0, 10000);\n return { success: true, output: JSON.stringify(result, null, 2), metadata: result };\n }\n\n if (shouldExtract('title')) {\n result.title = $('title').text().trim();\n }\n if (shouldExtract('meta')) {\n const meta: Record<string, string> = {};\n $('meta[name], meta[property]').each((_, el) => {\n const name = $(el).attr('name') || $(el).attr('property');\n const content = $(el).attr('content');\n if (name && content) meta[name] = content;\n });\n result.meta = meta;\n }\n if (shouldExtract('headings')) {\n const headings: string[] = [];\n $('h1,h2,h3,h4,h5,h6').each((_, el) => {\n headings.push(`${el.tagName}: ${$(el).text().trim()}`);\n });\n result.headings = headings.slice(0, 50);\n }\n if (shouldExtract('links')) {\n const links: Record<string, string> = {};\n $('a[href]').each((_, el) => {\n const href = $(el).attr('href')!;\n const text = $(el).text().trim();\n links[href] = text || '(无文本)';\n });\n result.links = links;\n }\n if (shouldExtract('images')) {\n const images: string[] = [];\n $('img[src]').each((_, el) => {\n images.push($(el).attr('src')!);\n });\n result.images = images.slice(0, 50);\n }\n if (shouldExtract('text')) {\n result.text = $('body').text().trim().replace(/\\s+/g, ' ').slice(0, 10000);\n }\n\n return {\n success: true,\n output: JSON.stringify(result, null, 2),\n metadata: { ...result, htmlSize: html.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const browser_action: Tool = {\n name: 'browser_action',\n description: '执行浏览器操作(CLI 环境限制)',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: open, close, navigate, click, type, screenshot', enum: ['open', 'close', 'navigate', 'click', 'type', 'screenshot'] },\n url: { type: 'string', description: '页面 URL' },\n selector: { type: 'string', description: 'CSS 选择器' },\n value: { type: 'string', description: '输入值' },\n },\n required: ['action'],\n },\n dangerous: true,\n requiresApproval: true,\n async execute(params) {\n try {\n const action = params.action as string;\n const url = params.url as string | undefined;\n\n switch (action) {\n case 'open': {\n if (url) {\n const openMod = await import('open');\n await openMod.default(url);\n return { success: true, output: `已在默认浏览器打开: ${url}`, metadata: { action, url } };\n }\n return { success: false, error: '缺少 url 参数', output: '' };\n }\n case 'navigate': {\n if (url) {\n return {\n success: true,\n output: `浏览器导航请求: ${url}\\n注意: 当前为 CLI 环境,完整浏览器操作需 GUI 支持。`,\n metadata: { action, url },\n };\n }\n return { success: false, error: '缺少 url 参数', output: '' };\n }\n default:\n return {\n success: true,\n output: `浏览器操作 \"${action}\" 请求已记录。\\n当前为 CLI 环境,完整浏览器自动化需 Playwright/Puppeteer 支持。`,\n metadata: { action, url, cliMode: true },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const proxy_request: Tool = {\n name: 'proxy_request',\n description: '通过代理发送 HTTP 请求',\n category: 'network',\n parameters: {\n type: 'object',\n properties: {\n url: { type: 'string', description: '目标 URL' },\n proxy: { type: 'string', description: '代理地址,如 http://proxy:8080' },\n method: { type: 'string', description: '请求方法', enum: ['GET', 'POST'] },\n headers: { type: 'object', description: '请求头' },\n },\n required: ['url', 'proxy'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const url = params.url as string;\n const proxy = params.proxy as string;\n const method = (params.method as string) ?? 'GET';\n const headers = (params.headers as Record<string, string>) ?? {};\n\n try {\n const proxyUrl = new URL(proxy);\n const res = await fetch(url, {\n method,\n headers: {\n 'User-Agent': 'DeeperCode/1.0',\n ...headers,\n 'X-Forwarded-For': proxyUrl.hostname,\n },\n });\n const body = await res.text();\n return {\n success: true,\n output: body.slice(0, 50000),\n metadata: { status: res.status, proxy },\n };\n } catch {\n return {\n success: true,\n output: `代理请求: ${method} ${url} (通过 ${proxy})\\n系统级代理请设置环境变量 HTTP_PROXY 和 HTTPS_PROXY。`,\n metadata: { url, proxy },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const parse_ast: Tool = {\n name: 'parse_ast',\n description: '解析代码结构(简化 AST 分析)',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '源代码文件路径' },\n language: { type: 'string', description: '语言类型: typescript, javascript, python', enum: ['typescript', 'javascript', 'python'] },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const language = (params.language as string) ?? 'typescript';\n\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n\n const content = readFileSync(filePath, 'utf-8');\n const lines = content.split('\\n');\n\n const functions: string[] = [];\n const classes: string[] = [];\n const imports: string[] = [];\n const exports: string[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n const lineNum = i + 1;\n\n if (/^(export\\s+)?(async\\s+)?function\\s+(\\w+)/i.test(line)) {\n functions.push(`${lineNum}: ${line.slice(0, 120)}`);\n }\n if (/^(export\\s+)?class\\s+(\\w+)/i.test(line)) {\n classes.push(`${lineNum}: ${line.slice(0, 120)}`);\n }\n if (/^(import\\s+|from\\s+|require\\()/i.test(line)) {\n imports.push(`${lineNum}: ${line.slice(0, 120)}`);\n }\n if (/^export\\s+/.test(line)) {\n exports.push(`${lineNum}: ${line.slice(0, 120)}`);\n }\n }\n\n const output = [\n `=== 代码结构分析: ${filePath} ===`,\n `语言: ${language} | 行数: ${lines.length}`,\n '',\n `--- 函数 (${functions.length}) ---`,\n ...functions.slice(0, 50),\n '',\n `--- 类 (${classes.length}) ---`,\n ...classes.slice(0, 20),\n '',\n `--- 导入 (${imports.length}) ---`,\n ...imports.slice(0, 30),\n '',\n `--- 导出 (${exports.length}) ---`,\n ...exports.slice(0, 30),\n ].join('\\n');\n\n return {\n success: true,\n output,\n metadata: {\n functions: functions.length,\n classes: classes.length,\n imports: imports.length,\n exports: exports.length,\n lines: lines.length,\n },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const format_code: Tool = {\n name: 'format_code',\n description: '格式化代码(建议使用 prettier)',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件路径' },\n language: { type: 'string', description: '语言类型', enum: ['typescript', 'javascript', 'json', 'css', 'html', 'python'] },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const language = (params.language as string) ?? 'typescript';\n\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n\n try {\n const { execSync } = await import('node:child_process');\n const ext = filePath.split('.').pop() ?? 'ts';\n execSync(`npx prettier --write \"${filePath}\"`, {\n encoding: 'utf-8',\n timeout: 30000,\n stdio: 'pipe',\n });\n const formatted = readFileSync(filePath, 'utf-8');\n return {\n success: true,\n output: `已格式化: ${filePath}\\n\\n${formatted.slice(0, 10000)}`,\n metadata: { formatted: true, tool: 'prettier' },\n };\n } catch {\n const content = readFileSync(filePath, 'utf-8');\n return {\n success: true,\n output: `代码格式化建议 (${language}):\\n\\n` +\n '- 运行 npx prettier --write . 来批量格式化\\n' +\n '- 使用 ESLint: npx eslint --fix .\\n\\n' +\n `当前文件内容:\\n${content.slice(0, 10000)}`,\n metadata: { formatted: false, suggestion: 'prettier' },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const lint_code: Tool = {\n name: 'lint_code',\n description: '运行代码检查(ESLint)',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件或目录路径' },\n fix: { type: 'boolean', description: '是否自动修复' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = params.file_path as string | undefined;\n const fix = (params.fix as boolean) ?? false;\n\n const target = filePath ? resolve(filePath) : '.';\n\n try {\n const cmd = fix ? `npx eslint \"${target}\" --fix` : `npx eslint \"${target}\"`;\n const output = execSync(cmd, {\n encoding: 'utf-8',\n timeout: 60000,\n stdio: 'pipe',\n });\n return { success: true, output: output || '代码检查通过,无问题!', metadata: { target, fix } };\n } catch (err: unknown) {\n const e = err as { stdout?: string; stderr?: string };\n const issues = e.stdout || e.stderr || String(err);\n return {\n success: false,\n error: '代码检查发现问题',\n output: issues,\n metadata: { target, hasIssues: true },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const type_check: Tool = {\n name: 'type_check',\n description: '运行 TypeScript 类型检查',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n project: { type: 'string', description: 'tsconfig.json 路径' },\n strict: { type: 'boolean', description: '是否严格模式' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const project = params.project as string | undefined;\n const strict = (params.strict as boolean) ?? true;\n\n try {\n const args = ['tsc', '--noEmit'];\n if (project) args.push('--project', resolve(project));\n if (strict) args.push('--strict');\n\n const output = execSync(args.join(' '), {\n encoding: 'utf-8',\n timeout: 120000,\n stdio: 'pipe',\n });\n return { success: true, output: output || '类型检查通过!', metadata: { passed: true } };\n } catch (err: unknown) {\n const e = err as { stdout?: string; stderr?: string };\n return {\n success: false,\n error: '类型检查发现错误',\n output: e.stdout || e.stderr || String(err),\n metadata: { passed: false },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const generate_code: Tool = {\n name: 'generate_code',\n description: 'AI 辅助代码生成(提供代码模板和最佳实践)',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n description: { type: 'string', description: '功能描述' },\n language: { type: 'string', description: '语言类型', enum: ['typescript', 'javascript', 'python', 'java', 'go', 'rust'] },\n template: { type: 'string', description: '模板类型: function, class, component, api, test', enum: ['function', 'class', 'component', 'api', 'test'] },\n file_path: { type: 'string', description: '输出文件路径' },\n },\n required: ['description'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const description = params.description as string;\n const language = (params.language as string) ?? 'typescript';\n const template = (params.template as string) ?? 'function';\n const filePath = params.file_path as string | undefined;\n\n const output = [\n `代码生成请求: ${language}/${template}`,\n `描述: ${description}`,\n filePath ? `输出: ${filePath}` : '',\n '',\n '此工具由 AI Agent 调用。生成代码由 AI 模型在上下文中完成。',\n '以下是相关的最佳实践建议:',\n '',\n ...getBestPractices(language, template),\n ].filter(Boolean).join('\\n');\n\n return {\n success: true,\n output,\n metadata: { description, language, template, filePath },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction getBestPractices(lang: string, tmpl: string): string[] {\n const tips: string[] = [];\n if (lang === 'typescript') {\n tips.push('- 使用 strict 模式,避免 any 类型');\n tips.push('- 优先使用 interface/type 定义数据结构');\n }\n if (tmpl === 'function') {\n tips.push('- 单一职责,每个函数只做一件事');\n tips.push('- 添加类型标注和参数验证');\n }\n if (tmpl === 'class') {\n tips.push('- 使用 private/public 控制访问');\n tips.push('- 考虑使用 composition 替代 inheritance');\n }\n if (tmpl === 'component') {\n tips.push('- 拆分大组件为小组件');\n tips.push('- 使用 hooks 管理状态');\n }\n if (tmpl === 'api') {\n tips.push('- 实现输入验证和错误处理');\n tips.push('- 添加请求日志和限流');\n }\n if (tmpl === 'test') {\n tips.push('- 遵循 AAA 模式 (Arrange, Act, Assert)');\n tips.push('- 每个测试只测一个行为');\n }\n return tips;\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const refactor_code: Tool = {\n name: 'refactor_code',\n description: '提供代码重构建议和执行常见重构操作',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件路径' },\n action: { type: 'string', description: '重构操作: rename, extract, inline, move', enum: ['rename', 'extract', 'inline', 'move'] },\n target: { type: 'string', description: '目标符号名' },\n new_name: { type: 'string', description: '新名称' },\n },\n required: ['file_path', 'action'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const action = params.action as string;\n const target = params.target as string | undefined;\n const newName = params.new_name as string | undefined;\n\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n\n const content = readFileSync(filePath, 'utf-8');\n const lines = content.split('\\n');\n\n let output = `=== 代码重构: ${filePath} ===\\n操作: ${action}\\n`;\n\n switch (action) {\n case 'rename': {\n if (!target || !newName) {\n return { success: false, error: 'rename 需要 target 和 new_name 参数', output: '' };\n }\n const escaped = escapeRegex(target);\n const count = (content.match(new RegExp(`\\\\b${escaped}\\\\b`, 'g')) || []).length;\n output += `目标: ${target} → ${newName}\\n`;\n output += `找到 ${count} 处引用\\n`;\n output += '请使用 edit_file 工具执行精确替换,或使用 IDE 的重构功能。';\n break;\n }\n default:\n output += `重构操作 \"${action}\" 的分析已提供。\\n`;\n output += '建议使用 IDE (VS Code, WebStorm) 的内置重构工具以获得最佳结果。';\n }\n\n return { success: true, output, metadata: { filePath, action, target, newName } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const extract_function: Tool = {\n name: 'extract_function',\n description: '从代码中提取指定函数',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件路径' },\n function_name: { type: 'string', description: '函数名' },\n },\n required: ['file_path', 'function_name'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const funcName = params.function_name as string;\n\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n\n const content = readFileSync(filePath, 'utf-8');\n const lines = content.split('\\n');\n\n const funcRegex = new RegExp(\n `(?:function\\\\s+${escapeRegex(funcName)}|` +\n `(?:const|let|var)\\\\s+${escapeRegex(funcName)}\\\\s*=|` +\n `(?:public|private|protected|static|async\\\\s+)?${escapeRegex(funcName)}\\\\s*\\\\([^)]*\\\\)\\\\s*[\\\\{:]|` +\n `(?:export\\\\s+)?(?:async\\\\s+)?${escapeRegex(funcName)}\\\\s*\\\\([^)]*\\\\)\\\\s*[\\\\{:]|` +\n `(?:get |set )?${escapeRegex(funcName)}\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{)`,\n );\n\n let startLine = -1;\n for (let i = 0; i < lines.length; i++) {\n if (funcRegex.test(lines[i])) {\n startLine = i;\n break;\n }\n }\n\n if (startLine === -1) {\n return { success: false, error: `未找到函数: ${funcName}`, output: '' };\n }\n\n let braceCount = 0;\n let endLine = -1;\n for (let i = startLine; i < lines.length; i++) {\n for (const ch of lines[i]) {\n if (ch === '{') braceCount++;\n else if (ch === '}') {\n braceCount--;\n if (braceCount === 0) {\n endLine = i;\n break;\n }\n }\n }\n if (endLine !== -1) break;\n }\n\n if (endLine === -1) {\n endLine = Math.min(startLine + 50, lines.length - 1);\n }\n\n const extracted = lines.slice(startLine, endLine + 1).join('\\n');\n\n return {\n success: true,\n output: `提取函数 \"${funcName}\" (${filePath}:${startLine + 1}-${endLine + 1}):\\n\\n${extracted}`,\n metadata: { functionName: funcName, file: filePath, startLine: startLine + 1, endLine: endLine + 1 },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const analyze_deps: Tool = {\n name: 'analyze_deps',\n description: '分析文件依赖关系',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '入口文件路径' },\n dir_path: { type: 'string', description: '分析目录' },\n depth: { type: 'number', description: '分析深度' },\n max_files: { type: 'number', description: '最大分析文件数' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filePath = params.file_path as string | undefined;\n const dirPath = params.dir_path as string | undefined;\n const depth = (params.depth as number) ?? 1;\n const maxFiles = (params.max_files as number) ?? 50;\n\n const fg = await import('fast-glob');\n let files: string[];\n if (filePath) {\n files = [resolve(filePath)];\n } else {\n const target = dirPath ? resolve(dirPath) : process.cwd();\n files = await fg.default('**/*.{ts,js,tsx,jsx}', {\n cwd: target,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n files = files.slice(0, maxFiles);\n }\n\n const importRegex = /from\\s+['\"]([^'\"]+)['\"]|require\\(['\"]([^'\"]+)['\"]\\)|import\\(['\"]([^'\"]+)['\"]\\)/g;\n const results: { file: string; imports: string[] }[] = [];\n\n for (const fp of files) {\n try {\n const content = readFileSync(fp, 'utf-8');\n const deps: string[] = [];\n let match;\n while ((match = importRegex.exec(content)) !== null) {\n const dep = match[1] || match[2] || match[3];\n deps.push(dep);\n }\n results.push({ file: fp, imports: [...new Set(deps)] });\n } catch { /* skip */ }\n }\n\n const output = results.map(r =>\n `--- ${r.file} ---\\n ${r.imports.length > 0 ? r.imports.join('\\n ') : '(无外部依赖)'}`\n ).join('\\n\\n');\n\n return {\n success: true,\n output: output || '未找到依赖关系',\n metadata: { files: results.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const import_organizer: Tool = {\n name: 'import_organizer',\n description: '整理和组织导入语句',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '文件路径' },\n group_by: { type: 'string', description: '分组方式: none, type, source', enum: ['none', 'type', 'source'] },\n sort: { type: 'boolean', description: '是否排序' },\n remove_unused: { type: 'boolean', description: '是否移除未使用导入' },\n },\n required: ['file_path'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const groupBy = (params.group_by as string) ?? 'source';\n const sort = (params.sort as boolean) ?? true;\n const removeUnused = (params.remove_unused as boolean) ?? false;\n\n if (!existsSync(filePath)) {\n return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n }\n\n const content = readFileSync(filePath, 'utf-8');\n const lines = content.split('\\n');\n const importLines: { index: number; line: string; isRelative: boolean }[] = [];\n const otherLines: { index: number; line: string }[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const trimmed = lines[i].trim();\n if (/^(import\\s+|require\\(|from\\s+|import\\(|import\\s*\\{)/.test(trimmed)) {\n importLines.push({\n index: i,\n line: trimmed,\n isRelative: trimmed.includes(\"'./\") || trimmed.includes(\"'../\") || trimmed.includes('\"./') || trimmed.includes('\"../'),\n });\n } else {\n otherLines.push({ index: i, line: trimmed });\n }\n }\n\n let organized: string[];\n if (groupBy === 'source') {\n const external = importLines.filter(i => !i.isRelative).map(i => i.line).sort();\n const internal = importLines.filter(i => i.isRelative).map(i => i.line).sort();\n organized = [...external, ...(external.length && internal.length ? [''] : []), ...internal];\n } else if (groupBy === 'type') {\n const typeImports = importLines.filter(i => i.line.includes('import type')).map(i => i.line).sort();\n const valueImports = importLines.filter(i => !i.line.includes('import type')).map(i => i.line).sort();\n organized = [...typeImports, ...(typeImports.length && valueImports.length ? [''] : []), ...valueImports];\n } else {\n organized = sort ? importLines.map(i => i.line).sort() : importLines.map(i => i.line);\n }\n\n const updated = [...organized, '', ...otherLines.map(l => l.line)].join('\\n');\n\n if (removeUnused) {\n return {\n success: true,\n output: `导入已整理: ${filePath}\\n\\n建议: 使用 'npx eslint --fix' 或 'organize-imports-cli' 自动移除未使用导入。\\n\\n整理后:\\n${updated.slice(0, 10000)}`,\n metadata: { filePath, importCount: organized.length, removeUnused },\n };\n }\n\n return {\n success: true,\n output: `导入已整理: ${filePath}\\n整理后:\\n${updated.slice(0, 10000)}`,\n metadata: { filePath, importCount: organized.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, statSync } from 'node:fs';\nimport { resolve, relative } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const code_metrics: Tool = {\n name: 'code_metrics',\n description: '计算代码度量指标(行数、复杂度等)',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n dir_path: { type: 'string', description: '目录路径' },\n file_path: { type: 'string', description: '文件路径' },\n glob: { type: 'string', description: '文件过滤' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const dirPath = params.dir_path as string | undefined;\n const filePath = params.file_path as string | undefined;\n const glob = (params.glob as string) ?? '**/*.{ts,js,tsx,jsx,py}';\n\n let target: string;\n let files: string[];\n\n if (filePath) {\n target = resolve(filePath);\n files = [target];\n } else {\n target = dirPath ? resolve(dirPath) : process.cwd();\n const fg = await import('fast-glob');\n files = await fg.default(glob, {\n cwd: target,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n }\n\n let totalLines = 0;\n let totalCode = 0;\n let totalComments = 0;\n let totalBlank = 0;\n let totalFiles = 0;\n const fileMetrics: Record<string, unknown>[] = [];\n\n for (const fp of files.slice(0, 200)) {\n try {\n const stat = statSync(fp);\n if (stat.size > 1048576) continue;\n const content = readFileSync(fp, 'utf-8');\n const lines = content.split('\\n');\n let code = 0, comments = 0, blank = 0;\n\n let inBlockComment = false;\n for (const line of lines) {\n if (line.trim() === '') { blank++; continue; }\n if (inBlockComment) {\n comments++;\n if (line.includes('*/')) inBlockComment = false;\n continue;\n }\n const trimmed = line.trim();\n if (trimmed.startsWith('//') || trimmed.startsWith('#')) { comments++; continue; }\n if (trimmed.startsWith('/*')) {\n comments++;\n if (!trimmed.includes('*/')) inBlockComment = true;\n continue;\n }\n code++;\n }\n\n totalLines += lines.length;\n totalCode += code;\n totalComments += comments;\n totalBlank += blank;\n totalFiles++;\n\n fileMetrics.push({\n file: relative(target, fp),\n lines: lines.length,\n code,\n comments,\n blank,\n });\n } catch { /* skip */ }\n }\n\n const summary = [\n `代码度量报告 (${totalFiles} 文件)`,\n `总行数: ${totalLines}`,\n `代码行: ${totalCode}`,\n `注释行: ${totalComments}`,\n `空行: ${totalBlank}`,\n `注释率: ${totalLines > 0 ? (totalComments / totalLines * 100).toFixed(1) : 0}%`,\n '',\n '前10文件:',\n ...fileMetrics.slice(0, 10).map(\n m => ` ${m.file}: ${m.lines} 行 (代码:${m.code} 注释:${m.comments} 空:${m.blank})`\n ),\n ];\n\n return { success: true, output: summary.join('\\n'), metadata: { totalFiles, totalLines, totalCode } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { existsSync, readFileSync, statSync } from 'node:fs';\nimport { extname, basename } from 'node:path';\n\nconst MAX_FILE_SIZE = 500_000;\n\nexport interface BugReport {\n file: string;\n line?: number;\n severity: 'error' | 'warning' | 'info';\n message: string;\n suggestion?: string;\n category: string;\n}\n\nconst LANG_CONFIGS: Record<string, { name: string; patterns: Array<{ re: RegExp; severity: BugReport['severity']; cat: string; msg: string; hint?: string }> }> = {\n '.ts': { name: 'TypeScript', patterns: [\n { re: /:\\s*any\\b/g, severity: 'warning', cat: '类型安全', msg: '使用了 `any` 类型,建议指定具体类型', hint: '将 `any` 替换为具体接口或类型' },\n { re: /console\\.(log|warn|error|debug)\\(/g, severity: 'info', cat: '调试代码', msg: '生产代码中留有 console 调用', hint: '移除此调试语句或使用 logger' },\n { re: /as\\s+[A-Z]\\w+/g, severity: 'warning', cat: '类型安全', msg: '使用 `as` 类型断言', hint: '优先使用类型守卫替代类型断言' },\n { re: /@ts-ignore/g, severity: 'warning', cat: '类型安全', msg: '使用 @ts-ignore 忽略类型检查', hint: '修复类型错误而非忽略' },\n { re: /setTimeout\\([^,)]*\\)/g, severity: 'info', cat: '可靠性', msg: 'setTimeout 缺少错误处理', hint: '考虑在回调中添加 try-catch' },\n ]},\n '.js': { name: 'JavaScript', patterns: [\n { re: /console\\.(log|warn|error|debug)\\(/g, severity: 'info', cat: '调试代码', msg: '生产代码中留有 console 调用' },\n { re: /var\\s+/g, severity: 'warning', cat: '代码风格', msg: '使用了 `var`,建议使用 `const`/`let`' },\n { re: /==(?!=)/g, severity: 'warning', cat: '逻辑错误', msg: '使用了 `==` 而非 `===`', hint: '使用 `===` 进行严格比较' },\n { re: /eval\\(/g, severity: 'error', cat: '安全', msg: '使用 eval() 存在安全风险', hint: '避免使用 eval' },\n { re: /innerHTML\\s*=/g, severity: 'warning', cat: '安全', msg: '直接修改 innerHTML 有 XSS 风险', hint: '使用 textContent 或安全 DOM 方法' },\n ]},\n '.py': { name: 'Python', patterns: [\n { re: /except\\s*:/g, severity: 'warning', cat: '错误处理', msg: '使用了裸 except 捕获所有异常' },\n { re: /except\\s+Exception\\s*:/g, severity: 'info', cat: '错误处理', msg: '捕获范围过宽', hint: '捕获更具体的异常类型' },\n { re: /:\\s*print\\(/g, severity: 'info', cat: '调试代码', msg: '生产代码中留有 print 调用' },\n { re: /input\\(/g, severity: 'info', cat: '安全', msg: '未校验用户输入' },\n { re: /exec\\(/g, severity: 'error', cat: '安全', msg: '使用 exec() 存在安全风险' },\n { re: /import\\s+\\*/g, severity: 'info', cat: '代码风格', msg: '通配符导入,建议明确导入' },\n ]},\n '.json': { name: 'JSON', patterns: [\n ]},\n '.css': { name: 'CSS', patterns: [\n { re: /!important/g, severity: 'warning', cat: 'CSS 反模式', msg: '使用 !important', hint: '通过提高选择器特异性替代' },\n { re: /position:\\s*absolute/g, severity: 'info', cat: '布局', msg: '大量 absolute 定位可能影响响应式' },\n ]},\n '.html': { name: 'HTML', patterns: [\n { re: /<script[^>]*>/, severity: 'info', cat: '安全', msg: '内联 script 标签' },\n { re: /on\\w+\\s*=/, severity: 'warning', cat: '安全', msg: '内联事件处理器 (onclick 等)', hint: '使用 addEventListener 替代' },\n ]},\n '.java': { name: 'Java', patterns: [\n { re: /System\\.out\\.print/, severity: 'info', cat: '调试代码', msg: '留有 System.out 调用', hint: '使用日志框架替代' },\n { re: /catch\\s*\\(\\s*Exception\\s+/g, severity: 'warning', cat: '错误处理', msg: '捕获范围过宽' },\n ]},\n '.go': { name: 'Go', patterns: [\n { re: /_,\\s*_\\s*:=/g, severity: 'warning', cat: '错误处理', msg: '忽略了错误返回值', hint: '应处理返回的 error' },\n { re: /panic\\(/g, severity: 'warning', cat: '错误处理', msg: '使用 panic 而非 error 返回', hint: '优先使用 error 返回值' },\n ]},\n '.rs': { name: 'Rust', patterns: [\n { re: /\\.unwrap\\(\\)/g, severity: 'warning', cat: '错误处理', msg: '使用 unwrap() 可能导致 panic', hint: '使用 ? 或 match 处理错误' },\n { re: /unsafe\\s*\\{/g, severity: 'warning', cat: '安全', msg: '使用了 unsafe 块' },\n ]},\n};\n\nexport function analyzeFile(filePath: string): BugReport[] {\n if (!existsSync(filePath)) return [];\n try { if (statSync(filePath).size > MAX_FILE_SIZE) return []; } catch { return []; }\n const reports: BugReport[] = [];\n const ext = extname(filePath).toLowerCase();\n const config = LANG_CONFIGS[ext];\n if (!config) return [];\n\n try {\n const content = readFileSync(filePath, 'utf-8');\n const lines = content.split('\\n');\n\n for (const pattern of config.patterns) {\n if (!pattern.msg) continue;\n let match;\n pattern.re.lastIndex = 0;\n while ((match = pattern.re.exec(content)) !== null) {\n if (!pattern.msg) continue;\n const lineNum = content.slice(0, match.index).split('\\n').length;\n reports.push({\n file: basename(filePath),\n line: lineNum,\n severity: pattern.severity,\n message: pattern.msg,\n suggestion: pattern.hint,\n category: pattern.cat,\n });\n }\n }\n\n // 通用检查 (跨语言)\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n\n // 超长行\n if (trimmed.length > 200 && !trimmed.startsWith('//') && !trimmed.startsWith('#')) {\n reports.push({\n file: basename(filePath), line: i + 1, severity: 'info',\n message: `行过长 (${trimmed.length} 字符)`, suggestion: '考虑拆分或格式化',\n category: '代码风格',\n });\n }\n\n // TODO/FIXME/HACK/BUG 标记\n if (/\\/\\/\\s*(TODO|FIXME|HACK|BUG|XXX)\\b/i.test(trimmed) ||\n /#\\s*(TODO|FIXME|HACK|BUG|XXX)\\b/i.test(trimmed)) {\n const tag = trimmed.match(/(?:TODO|FIXME|HACK|BUG|XXX)/i)?.[0] || '';\n reports.push({\n file: basename(filePath), line: i + 1,\n severity: tag === 'BUG' ? 'error' : tag === 'FIXME' ? 'warning' : 'info',\n message: `标记为 ${tag}`, suggestion: '建议及时处理',\n category: '代码标记',\n });\n }\n }\n } catch { return []; }\n\n return reports;\n}\n\nexport function summarizeBugs(reports: BugReport[]): string {\n if (reports.length === 0) return '';\n const errs = reports.filter(r => r.severity === 'error').length;\n const warns = reports.filter(r => r.severity === 'warning').length;\n const infos = reports.filter(r => r.severity === 'info').length;\n\n let s = `[BugScan] 检查发现 ${reports.length} 个问题`;\n if (errs > 0) s += ` · ${errs} ❌错误`;\n if (warns > 0) s += ` · ${warns} ⚠警告`;\n if (infos > 0) s += ` · ${infos} ℹ提示`;\n s += '\\n';\n\n const top = reports.slice(0, 8);\n for (const r of top) {\n const sev = r.severity === 'error' ? '❌' : r.severity === 'warning' ? '⚠' : 'ℹ';\n s += `${sev} ${r.file}:${r.line ?? '?'} [${r.category}] ${r.message}`;\n if (r.suggestion) s += ` → ${r.suggestion}`;\n s += '\\n';\n }\n\n if (reports.length > 8) s += `... 还有 ${reports.length - 8} 个问题\\n`;\n return s;\n}\n","import { statSync } from 'node:fs';\nimport { isAbsolute, join } from 'node:path';\nimport fg from 'fast-glob';\nimport { analyzeFile, summarizeBugs } from '../../../core/bugscan.js';\nimport type { Tool } from '../../tool-types.js';\nimport type { BugReport } from '../../../core/bugscan.js';\n\nconst MAX_FILES = 50;\nconst EXTENSIONS = '{ts,js,py,java,go,rs,css,html}';\nconst SEVERITY_ORDER: Record<string, number> = { error: 0, warning: 1, info: 2 };\n\nexport const bug_scan: Tool = {\n name: 'bug_scan',\n description: 'Scan source files for bugs, anti-patterns, and code quality issues. Supports TS/JS/Python/Java/Go/Rust/CSS/HTML.',\n category: 'code',\n parameters: {\n type: 'object',\n properties: {\n path: { type: 'string', description: 'File or directory path to scan' },\n recursive: { type: 'boolean', description: 'Scan directory recursively' },\n severity: { type: 'string', description: 'Minimum severity level to report', enum: ['error', 'warning', 'info'] },\n },\n required: ['path'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const target = params.path as string;\n const recursive = (params.recursive as boolean) ?? false;\n const minSeverity = (params.severity as string) ?? 'warning';\n\n const absPath = isAbsolute(target) ? target : join(process.cwd(), target);\n\n let isFile = false;\n try {\n isFile = statSync(absPath).isFile();\n } catch {\n return { success: false, error: `路径不存在: ${absPath}`, output: '' };\n }\n\n let files: string[];\n if (isFile) {\n files = [absPath];\n } else {\n const pattern = recursive\n ? `**/*.${EXTENSIONS}`\n : `*.${EXTENSIONS}`;\n files = await fg(pattern, {\n cwd: absPath,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n }\n\n files = files.slice(0, MAX_FILES);\n\n const allBugs: BugReport[] = [];\n for (const fp of files) {\n try {\n const bugs = analyzeFile(fp);\n allBugs.push(...bugs);\n } catch { /* skip files that fail */ }\n }\n\n const minOrder = SEVERITY_ORDER[minSeverity] ?? 1;\n const filtered = allBugs.filter(b => (SEVERITY_ORDER[b.severity] ?? 2) <= minOrder);\n\n if (filtered.length === 0) {\n return { success: true, output: 'No issues found', metadata: { filesScanned: files.length, totalBugs: allBugs.length } };\n }\n\n const output = summarizeBugs(filtered);\n return { success: true, output, metadata: { filesScanned: files.length, totalBugs: allBugs.length, filteredBugs: filtered.length } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const sql_query: Tool = {\n name: 'sql_query',\n description: '执行 SQL 查询',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n query: { type: 'string', description: 'SQL 查询语句' },\n connection: { type: 'string', description: '数据库连接字符串' },\n engine: { type: 'string', description: '数据库引擎: mysql, postgresql, sqlite, mssql', enum: ['mysql', 'postgresql', 'sqlite', 'mssql'] },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['query', 'engine'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const query = params.query as string;\n const engine = params.engine as string;\n const connection = params.connection as string | undefined;\n const timeout = (params.timeout_ms as number) ?? 30000;\n\n let cmd = '';\n switch (engine) {\n case 'sqlite':\n cmd = `sqlite3 \"${connection || 'database.db'}\" \"${query.replace(/\"/g, '\\\\\"')}\"`;\n break;\n case 'mysql':\n cmd = `mysql ${connection || ''} -e \"${query.replace(/\"/g, '\\\\\"')}\"`;\n break;\n case 'postgresql':\n cmd = `psql ${connection || ''} -c \"${query.replace(/\"/g, '\\\\\"')}\"`;\n break;\n case 'mssql':\n cmd = `sqlcmd ${connection ? connection : ''} -Q \"${query.replace(/\"/g, '\\\\\"')}\"`;\n break;\n default:\n return { success: false, error: `不支持的数据库引擎: ${engine}`, output: '' };\n }\n\n try {\n const output = execSync(cmd, { encoding: 'utf-8', timeout, maxBuffer: 50 * 1024 * 1024, stdio: 'pipe' });\n return { success: true, output, metadata: { engine } };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: `查询失败: ${e.message || String(err)}`,\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const sql_migrate: Tool = {\n name: 'sql_migrate',\n description: '执行数据库迁移',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n command: { type: 'string', description: '迁移命令或 SQL 文件路径' },\n connection: { type: 'string', description: '数据库连接字符串' },\n engine: { type: 'string', description: '数据库引擎', enum: ['mysql', 'postgresql', 'sqlite', 'mssql'] },\n },\n required: ['command'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const command = params.command as string;\n const connection = params.connection as string | undefined;\n const engine = (params.engine as string) ?? 'sqlite';\n\n let cmd = '';\n switch (engine) {\n case 'sqlite':\n cmd = `sqlite3 \"${connection || 'database.db'}\" < \"${command}\"`;\n break;\n case 'mysql':\n cmd = `mysql ${connection || ''} < \"${command}\"`;\n break;\n case 'postgresql':\n cmd = `psql ${connection || ''} -f \"${command}\"`;\n break;\n default:\n return { success: false, error: `不支持的数据库引擎: ${engine}`, output: '' };\n }\n\n try {\n const output = execSync(cmd, { encoding: 'utf-8', timeout: 60000, stdio: 'pipe' });\n return { success: true, output: output || '迁移执行成功', metadata: { engine, command } };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: `迁移失败: ${e.message || String(err)}`,\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const nosql_query: Tool = {\n name: 'nosql_query',\n description: '执行 NoSQL 数据库操作(MongoDB shell)',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n query: { type: 'string', description: '查询语句(MongoDB shell 语法)' },\n connection: { type: 'string', description: '连接字符串 mongodb://...' },\n collection: { type: 'string', description: '集合名称' },\n timeout_ms: { type: 'number', description: '超时毫秒数' },\n },\n required: ['query'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const query = params.query as string;\n const connection = (params.connection as string) ?? 'mongodb://localhost:27017';\n const collection = params.collection as string | undefined;\n const timeout = (params.timeout_ms as number) ?? 30000;\n\n const queryScript = collection\n ? `db.${collection}.${query}`\n : query;\n\n try {\n const output = execSync(\n `mongosh \"${connection}\" --eval \"${queryScript.replace(/\"/g, '\\\\\"')}\"`,\n { encoding: 'utf-8', timeout, maxBuffer: 50 * 1024 * 1024, stdio: 'pipe' }\n );\n return { success: true, output, metadata: { connection, collection } };\n } catch {\n return {\n success: true,\n output: `MongoDB 查询请求:\\n连接: ${connection}\\n集合: ${collection || '(未指定)'}\\n查询: ${queryScript}\\n\\n注意: mongosh 命令行不可用。请确保已安装 MongoDB Shell,或将查询语句直接在 mongosh 中执行。`,\n metadata: { connection, fallback: true },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const db_schema: Tool = {\n name: 'db_schema',\n description: '查看数据库表结构',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n connection: { type: 'string', description: '数据库连接字符串' },\n engine: { type: 'string', description: '数据库引擎: mysql, postgresql, sqlite, mssql', enum: ['mysql', 'postgresql', 'sqlite', 'mssql'] },\n table: { type: 'string', description: '表名(可选)' },\n },\n required: ['engine'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const engine = params.engine as string;\n const table = params.table as string | undefined;\n const connection = params.connection as string | undefined;\n\n let output = `数据库 Schema 查询\\n引擎: ${engine}\\n\\n`;\n\n switch (engine) {\n case 'sqlite': {\n if (!connection) {\n return { success: false, error: 'sqlite 需要 connection 参数(文件路径)', output: '' };\n }\n try {\n const result = execSync(`sqlite3 \"${connection}\" \".schema ${table || ''}\"`, {\n encoding: 'utf-8', timeout: 10000, stdio: 'pipe',\n });\n output += result;\n } catch {\n output += 'sqlite3 命令行不可用,请安装 sqlite3 或使用文件路径直接查看数据库。\\n';\n output += `文件: ${connection}`;\n }\n break;\n }\n case 'mysql': {\n output += table\n ? `使用: mysql -e \"DESCRIBE ${table};\" ${connection ? connection : ''}`\n : `使用: mysql -e \"SHOW TABLES;\" ${connection ? connection : ''}`;\n output += '\\n(请确保 mysql 客户端已安装)';\n break;\n }\n case 'postgresql': {\n output += table\n ? `使用: psql ${connection || ''} -c \"\\\\d ${table}\"`\n : `使用: psql ${connection || ''} -c \"\\\\dt\"`;\n output += '\\n(请确保 psql 客户端已安装)';\n break;\n }\n default:\n output += `请使用 ${engine} CLI 或 GUI 工具查看数据库 schema。`;\n }\n\n return { success: true, output, metadata: { engine, table } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const db_backup: Tool = {\n name: 'db_backup',\n description: '数据库备份',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n engine: { type: 'string', description: '数据库引擎', enum: ['mysql', 'postgresql', 'sqlite'] },\n connection: { type: 'string', description: '连接字符串/数据库名称' },\n output_file: { type: 'string', description: '备份输出文件路径' },\n tables: { type: 'array', items: { type: 'string' }, description: '指定表名列表' },\n },\n required: ['engine', 'output_file'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const engine = params.engine as string;\n const connection = params.connection as string | undefined;\n const outputFile = params.output_file as string;\n const tables = params.tables as string[] | undefined;\n\n let cmd = '';\n switch (engine) {\n case 'sqlite':\n cmd = `sqlite3 \"${connection || 'database.db'}\" .dump > \"${outputFile}\"`;\n break;\n case 'mysql':\n cmd = `mysqldump ${connection || ''} ${(tables || []).join(' ')} > \"${outputFile}\"`;\n break;\n case 'postgresql':\n cmd = `pg_dump ${connection || ''} > \"${outputFile}\"`;\n break;\n default:\n return { success: false, error: `不支持的数据库引擎: ${engine}`, output: '' };\n }\n\n try {\n execSync(cmd, { encoding: 'utf-8', timeout: 120000, stdio: 'pipe' });\n return { success: true, output: `备份完成: ${outputFile}`, metadata: { engine, outputFile } };\n } catch (err: unknown) {\n const e = err as { message?: string };\n return { success: false, error: `备份失败: ${e.message || String(err)}`, output: '' };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const db_restore: Tool = {\n name: 'db_restore',\n description: '数据库恢复',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n engine: { type: 'string', description: '数据库引擎', enum: ['mysql', 'postgresql', 'sqlite'] },\n connection: { type: 'string', description: '连接字符串' },\n backup_file: { type: 'string', description: '备份文件路径' },\n },\n required: ['engine', 'backup_file'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const engine = params.engine as string;\n const connection = params.connection as string | undefined;\n const backupFile = params.backup_file as string;\n\n let cmd = '';\n switch (engine) {\n case 'sqlite':\n cmd = `sqlite3 \"${connection || 'database.db'}\" < \"${backupFile}\"`;\n break;\n case 'mysql':\n cmd = `mysql ${connection || ''} < \"${backupFile}\"`;\n break;\n case 'postgresql':\n cmd = `psql ${connection || ''} < \"${backupFile}\"`;\n break;\n default:\n return { success: false, error: `不支持的数据库引擎: ${engine}`, output: '' };\n }\n\n try {\n const output = execSync(cmd, { encoding: 'utf-8', timeout: 120000, stdio: 'pipe' });\n return { success: true, output: `恢复完成: ${backupFile}\\n${output || ''}`, metadata: { engine, backupFile } };\n } catch (err: unknown) {\n const e = err as { message?: string };\n return { success: false, error: `恢复失败: ${e.message || String(err)}`, output: '' };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const redis_command: Tool = {\n name: 'redis_command',\n description: '执行 Redis 命令',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n host: { type: 'string', description: 'Redis 主机' },\n port: { type: 'number', description: 'Redis 端口' },\n password: { type: 'string', description: '认证密码' },\n command: { type: 'string', description: 'Redis 命令' },\n },\n required: ['command'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const host = (params.host as string) ?? 'localhost';\n const port = (params.port as number) ?? 6379;\n const password = params.password as string | undefined;\n const command = params.command as string;\n\n let cmd = `redis-cli -h ${host} -p ${port}`;\n if (password) cmd += ` -a \"${password}\"`;\n cmd += ` ${command}`;\n\n try {\n const output = execSync(cmd, { encoding: 'utf-8', timeout: 15000, stdio: 'pipe' });\n return { success: true, output, metadata: { host, port } };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: `Redis 命令失败: ${e.message || String(err)}`,\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync, writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const orm_generate: Tool = {\n name: 'orm_generate',\n description: '生成 ORM 模型代码(基于数据库 schema)',\n category: 'database',\n parameters: {\n type: 'object',\n properties: {\n engine: { type: 'string', description: '数据库引擎', enum: ['mysql', 'postgresql', 'sqlite', 'mssql'] },\n connection: { type: 'string', description: '连接字符串' },\n output_dir: { type: 'string', description: '输出目录' },\n orm: { type: 'string', description: 'ORM 框架: prisma, typeorm, drizzle, sequelize', enum: ['prisma', 'typeorm', 'drizzle', 'sequelize'] },\n },\n required: ['engine', 'orm'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const engine = params.engine as string;\n const connection = params.connection as string | undefined;\n const outputDir = (params.output_dir as string) ?? './models';\n const orm = params.orm as string;\n\n const tips: Record<string, string[]> = {\n prisma: [\n `npx prisma init --datasource-provider ${engine}`,\n '将上述 schema 写入 prisma/schema.prisma',\n 'npx prisma db pull # 从数据库拉取 schema',\n 'npx prisma generate # 生成 Prisma Client',\n ],\n typeorm: [\n 'npx typeorm-model-generator -h host -d database -p port -u user -x password -e engine -o outputDir',\n '或使用: npx typeorm entity:create',\n ],\n drizzle: [\n 'npx drizzle-kit introspect:pg # PostgreSQL',\n 'npx drizzle-kit introspect:mysql # MySQL',\n 'npx drizzle-kit generate',\n ],\n sequelize: [\n 'npx sequelize-auto -h host -d database -u user -x password -p port --dialect engine -o outputDir',\n ],\n };\n\n const output = [\n `ORM 模型生成方案`,\n `数据库引擎: ${engine}`,\n `ORM 框架: ${orm}`,\n `输出目录: ${outputDir}`,\n '',\n '操作步骤:',\n ...(tips[orm] || []).map(t => ` ${t}`),\n '',\n '提示: 生成模型代码后,请根据项目需要手动调整字段类型和关联关系。',\n ].join('\\n');\n\n return { success: true, output, metadata: { engine, orm, outputDir } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const json_parse: Tool = {\n name: 'json_parse',\n description: '解析和格式化 JSON 内容',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n content: { type: 'string', description: 'JSON 字符串' },\n file_path: { type: 'string', description: 'JSON 文件路径' },\n pretty: { type: 'boolean', description: '是否美化输出' },\n query: { type: 'string', description: 'JSONPath 查询' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const content = params.content as string | undefined;\n const filePath = params.file_path as string | undefined;\n const pretty = (params.pretty as boolean) ?? true;\n const query = params.query as string | undefined;\n\n let jsonContent = '';\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n jsonContent = readFileSync(abs, 'utf-8');\n } else if (content) {\n jsonContent = content;\n } else {\n return { success: false, error: '请提供 content 或 file_path 参数', output: '' };\n }\n\n const parsed = JSON.parse(jsonContent);\n\n if (query) {\n const value = resolveJsonPath(parsed, query);\n return {\n success: true,\n output: JSON.stringify(value, null, pretty ? 2 : 0),\n metadata: { query },\n };\n }\n\n return { success: true, output: JSON.stringify(parsed, null, pretty ? 2 : 0) };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction resolveJsonPath(obj: unknown, path: string): unknown {\n const parts = path.replace(/^\\$\\.?/, '').split('.');\n let current: unknown = obj;\n for (const part of parts) {\n if (current === null || typeof current !== 'object') return undefined;\n const bracketMatch = part.match(/^(\\w+)\\[(\\d+)\\]$/);\n if (bracketMatch) {\n current = (current as Record<string, unknown>)[bracketMatch[1]];\n current = (current as unknown[])?.[parseInt(bracketMatch[2])];\n } else {\n current = (current as Record<string, unknown>)[part];\n }\n }\n return current;\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport const csv_parse: Tool = {\n name: 'csv_parse',\n description: '解析 CSV 内容',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n content: { type: 'string', description: 'CSV 字符串' },\n file_path: { type: 'string', description: 'CSV 文件路径' },\n delimiter: { type: 'string', description: '列分隔符,默认逗号' },\n has_header: { type: 'boolean', description: '是否有标题行' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n let csvContent = '';\n const filePath = params.file_path as string | undefined;\n const content = params.content as string | undefined;\n const delimiter = (params.delimiter as string) ?? ',';\n const hasHeader = (params.has_header as boolean) ?? true;\n\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n csvContent = readFileSync(abs, 'utf-8');\n } else if (content) {\n csvContent = content;\n } else {\n return { success: false, error: '请提供 content 或 file_path 参数', output: '' };\n }\n\n const { parse } = await import('csv-parse/sync');\n const records = parse(csvContent, {\n delimiter,\n columns: hasHeader,\n skip_empty_lines: true,\n trim: true,\n });\n\n return {\n success: true,\n output: JSON.stringify(records, null, 2),\n metadata: { rows: Array.isArray(records) ? records.length : 0 },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const xml_parse: Tool = {\n name: 'xml_parse',\n description: '解析 XML 内容',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n content: { type: 'string', description: 'XML 字符串' },\n file_path: { type: 'string', description: 'XML 文件路径' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n let xmlContent = '';\n const filePath = params.file_path as string | undefined;\n const content = params.content as string | undefined;\n\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n xmlContent = readFileSync(abs, 'utf-8');\n } else if (content) {\n xmlContent = content;\n } else {\n return { success: false, error: '请提供 content 或 file_path 参数', output: '' };\n }\n\n const parsed = parseXml(xmlContent);\n return { success: true, output: JSON.stringify(parsed, null, 2) };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction parseXml(xml: string): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n const tagRegex = /<([\\w:.-]+)([^>]*)>([\\s\\S]*?)<\\/\\1>/g;\n const selfClosingRegex = /<([\\w:.-]+)([^>]*)\\/>/g;\n let match;\n\n while ((match = tagRegex.exec(xml)) !== null) {\n const tagName = match[1];\n const attrs = match[2];\n const inner = match[3];\n\n const attrsObj: Record<string, string> = {};\n const attrRegex = /(\\w+)=[\"']([^\"']*)[\"']/g;\n let attrMatch;\n while ((attrMatch = attrRegex.exec(attrs)) !== null) {\n attrsObj[attrMatch[1]] = attrMatch[2];\n }\n\n if (/<[\\w]/.test(inner)) {\n result[tagName] = { ...attrsObj, ...parseXml(inner) };\n } else {\n result[tagName] = { _text: inner.trim(), ...attrsObj };\n }\n }\n\n while ((match = selfClosingRegex.exec(xml)) !== null) {\n const attrsObj: Record<string, string> = {};\n const attrRegex = /(\\w+)=[\"']([^\"']*)[\"']/g;\n let attrMatch;\n while ((attrMatch = attrRegex.exec(match[2])) !== null) {\n attrsObj[attrMatch[1]] = attrMatch[2];\n }\n result[match[1]] = attrsObj;\n }\n\n return result;\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport const yaml_parse: Tool = {\n name: 'yaml_parse',\n description: '解析 YAML 内容',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n content: { type: 'string', description: 'YAML 字符串' },\n file_path: { type: 'string', description: 'YAML 文件路径' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n let yamlContent = '';\n const filePath = params.file_path as string | undefined;\n const content = params.content as string | undefined;\n\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n yamlContent = readFileSync(abs, 'utf-8');\n } else if (content) {\n yamlContent = content;\n } else {\n return { success: false, error: '请提供 content 或 file_path 参数', output: '' };\n }\n\n const { parse } = await import('yaml');\n const parsed = parse(yamlContent);\n return { success: true, output: JSON.stringify(parsed, null, 2) };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const toml_parse: Tool = {\n name: 'toml_parse',\n description: '解析 TOML 内容',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n content: { type: 'string', description: 'TOML 字符串内容' },\n file_path: { type: 'string', description: 'TOML 文件路径' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const content = params.content as string | undefined;\n const filePath = params.file_path as string | undefined;\n\n let tomlContent = '';\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n tomlContent = readFileSync(abs, 'utf-8');\n } else if (content) {\n tomlContent = content;\n } else {\n return { success: false, error: '请提供 content 或 file_path 参数', output: '' };\n }\n\n const { parse } = await import('toml');\n const parsed = parse(tomlContent);\n return { success: true, output: JSON.stringify(parsed, null, 2) };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const data_transform: Tool = {\n name: 'data_transform',\n description: '数据格式转换(JSON/CSV/YAML/XML 互转)',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n data: { type: 'string', description: '输入数据' },\n from: { type: 'string', description: '源格式: json, csv, yaml, xml', enum: ['json', 'csv', 'yaml', 'xml'] },\n to: { type: 'string', description: '目标格式: json, csv, yaml, xml', enum: ['json', 'csv', 'yaml', 'xml'] },\n file_path: { type: 'string', description: '文件路径' },\n output: { type: 'string', description: '输出文件路径' },\n },\n required: ['from', 'to'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const from = params.from as string;\n const to = params.to as string;\n const data = params.data as string | undefined;\n const filePath = params.file_path as string | undefined;\n const output = params.output as string | undefined;\n\n let inputStr = '';\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n inputStr = readFileSync(abs, 'utf-8');\n } else if (data) {\n inputStr = data;\n } else {\n return { success: false, error: '请提供 data 或 file_path 参数', output: '' };\n }\n\n let parsed: unknown;\n switch (from) {\n case 'json': parsed = JSON.parse(inputStr); break;\n case 'yaml': { const yaml = await import('yaml'); parsed = yaml.parse(inputStr); break; }\n case 'csv': {\n const { parse } = await import('csv-parse/sync');\n parsed = parse(inputStr, { columns: true, skip_empty_lines: true });\n break;\n }\n case 'xml': parsed = inputStr; break;\n default: return { success: false, error: `不支持的源格式: ${from}`, output: '' };\n }\n\n let outputStr = '';\n switch (to) {\n case 'json': outputStr = JSON.stringify(parsed, null, 2); break;\n case 'yaml': { const yaml = await import('yaml'); outputStr = yaml.stringify(parsed); break; }\n case 'xml': outputStr = typeof parsed === 'string' ? parsed : `<root>${JSON.stringify(parsed)}</root>`; break;\n case 'csv': outputStr = JSON.stringify(parsed); break;\n default: return { success: false, error: `不支持的目标格式: ${to}`, output: '' };\n }\n\n if (output) {\n const { writeFileSync } = await import('node:fs');\n writeFileSync(output, outputStr, 'utf-8');\n return { success: true, output: `转换完成并写入: ${output}`, metadata: { from, to } };\n }\n\n return { success: true, output: outputStr, metadata: { from, to } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const data_validate: Tool = {\n name: 'data_validate',\n description: '根据 schema 验证数据',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n data: { type: 'string', description: 'JSON 数据' },\n schema: { type: 'string', description: 'JSON Schema 用于验证' },\n },\n required: ['data', 'schema'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const data = JSON.parse(params.data as string);\n const schema = JSON.parse(params.schema as string);\n\n const errors = validateAgainstSchema(data, schema);\n\n if (errors.length === 0) {\n return { success: true, output: '数据验证通过!' };\n }\n return {\n success: false,\n error: `数据验证失败 (${errors.length} 个问题)`,\n output: errors.map((e, i) => ` ${i + 1}. ${e}`).join('\\n'),\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction validateAgainstSchema(data: unknown, schema: Record<string, unknown>, path = '$'): string[] {\n const errors: string[] = [];\n\n if (schema.type) {\n const expectedType = schema.type as string;\n const actualType = Array.isArray(data) ? 'array' : typeof data;\n if (expectedType !== actualType) {\n errors.push(`${path}: 期望类型 \"${expectedType}\",实际类型 \"${actualType}\"`);\n return errors;\n }\n }\n\n if (schema.required && Array.isArray(schema.required) && data && typeof data === 'object') {\n for (const key of schema.required as string[]) {\n if (!(key in (data as Record<string, unknown>))) {\n errors.push(`${path}: 缺少必需字段 \"${key}\"`);\n }\n }\n }\n\n if (schema.properties && data && typeof data === 'object' && !Array.isArray(data)) {\n const props = schema.properties as Record<string, Record<string, unknown>>;\n for (const [key, propSchema] of Object.entries(props)) {\n if (key in data) {\n errors.push(...validateAgainstSchema((data as Record<string, unknown>)[key], propSchema, `${path}.${key}`));\n }\n }\n }\n\n if (schema.enum && Array.isArray(schema.enum)) {\n const enumValues = schema.enum;\n if (!enumValues.includes(data)) {\n errors.push(`${path}: 值 \"${data}\" 不在允许的范围: [${enumValues.join(', ')}]`);\n }\n }\n\n return errors;\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport const data_diff: Tool = {\n name: 'data_diff',\n description: '比较两个数据集的差异',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n data_a: { type: 'string', description: '数据集 A (JSON)' },\n data_b: { type: 'string', description: '数据集 B (JSON)' },\n },\n required: ['data_a', 'data_b'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const a = JSON.parse(params.data_a as string);\n const b = JSON.parse(params.data_b as string);\n\n const diff = computeDiff(a, b, '');\n const output = diff.length > 0 ? diff.join('\\n') : '两个数据集完全相同';\n\n return { success: true, output, metadata: { differences: diff.length } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction computeDiff(a: unknown, b: unknown, path: string): string[] {\n const results: string[] = [];\n\n if (a === b) return results;\n\n if (typeof a !== typeof b) {\n results.push(`${path || 'root'}: 类型不同 (${typeof a} vs ${typeof b})`);\n return results;\n }\n\n if (a === null || b === null || typeof a !== 'object') {\n if (JSON.stringify(a) !== JSON.stringify(b)) {\n results.push(`${path || 'root'}: ${JSON.stringify(a)} → ${JSON.stringify(b)}`);\n }\n return results;\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n const maxLen = Math.max(a.length, b.length);\n for (let i = 0; i < maxLen; i++) {\n results.push(...computeDiff(a[i], b[i], `${path}[${i}]`));\n }\n return results;\n }\n\n const keysA = Object.keys(a as Record<string, unknown>);\n const keysB = Object.keys(b as Record<string, unknown>);\n const allKeys = new Set([...keysA, ...keysB]);\n\n for (const key of allKeys) {\n const valA = (a as Record<string, unknown>)[key];\n const valB = (b as Record<string, unknown>)[key];\n\n if (!(key in (a as object))) {\n results.push(`${path}.${key}: 新增 → ${JSON.stringify(valB)}`);\n } else if (!(key in (b as object))) {\n results.push(`${path}.${key}: 已删除 (原值: ${JSON.stringify(valA)})`);\n } else {\n if (typeof valA === 'object' && typeof valB === 'object' && valA !== null && valB !== null) {\n results.push(...computeDiff(valA, valB, `${path}.${key}`));\n } else if (valA !== valB) {\n results.push(`${path}.${key}: ${JSON.stringify(valA)} → ${JSON.stringify(valB)}`);\n }\n }\n }\n\n return results;\n}\n","import { readFileSync, existsSync, writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const template_render: Tool = {\n name: 'template_render',\n description: '渲染模板字符串或文件',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n template: { type: 'string', description: '模板字符串,使用 {{key}} 占位' },\n file_path: { type: 'string', description: '模板文件路径' },\n values: { type: 'object', description: '模板变量值' },\n output: { type: 'string', description: '输出文件路径' },\n },\n required: ['values'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const templateStr = params.template as string | undefined;\n const filePath = params.file_path as string | undefined;\n const values = params.values as Record<string, unknown>;\n const output = params.output as string | undefined;\n\n let template = '';\n if (filePath) {\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `模板文件不存在: ${abs}`, output: '' };\n template = readFileSync(abs, 'utf-8');\n } else if (templateStr) {\n template = templateStr;\n } else {\n return { success: false, error: '请提供 template 或 file_path 参数', output: '' };\n }\n\n let rendered = template;\n for (const [key, value] of Object.entries(values)) {\n rendered = rendered.replace(new RegExp(`\\\\{\\\\{\\\\s*${escapeRegex(key)}\\\\s*\\\\}\\\\}`, 'g'), String(value));\n }\n\n if (output) {\n writeFileSync(output, rendered, 'utf-8');\n return { success: true, output: `模板已渲染并写入: ${output}`, metadata: { keys: Object.keys(values).length } };\n }\n\n return { success: true, output: rendered, metadata: { keys: Object.keys(values).length } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import type { Tool } from '../../tool-types.js';\n\nexport const chart_generate: Tool = {\n name: 'chart_generate',\n description: '生成数据图表(输出图表描述和配置)',\n category: 'data',\n parameters: {\n type: 'object',\n properties: {\n data: { type: 'string', description: 'JSON 格式的数据' },\n chart_type: { type: 'string', description: '图表类型: bar, line, pie, scatter, area', enum: ['bar', 'line', 'pie', 'scatter', 'area'] },\n x_key: { type: 'string', description: 'X 轴数据键名' },\n y_key: { type: 'string', description: 'Y 轴数据键名' },\n title: { type: 'string', description: '图表标题' },\n },\n required: ['data', 'chart_type'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const data = JSON.parse(params.data as string);\n const chartType = params.chart_type as string;\n const xKey = params.x_key as string | undefined;\n const yKey = params.y_key as string | undefined;\n const title = (params.title as string) ?? 'Chart';\n\n const config = {\n title,\n type: chartType,\n data: Array.isArray(data) ? data : [data],\n xKey,\n yKey,\n timestamp: new Date().toISOString(),\n };\n\n const output = [\n `图表配置: ${title} (${chartType})`,\n '',\n '```json',\n JSON.stringify(config, null, 2),\n '```',\n '',\n '提示: 可以使用以下工具渲染图表:',\n '- Chart.js + Canvas (Node.js)',\n '- Apache ECharts',\n '- D3.js',\n '- Matplotlib (Python)',\n '',\n '使用建议: 安装 chartjs-node-canvas 或使用 web 前端渲染。',\n ].join('\\n');\n\n return {\n success: true,\n output,\n metadata: { chartType, dataPoints: Array.isArray(data) ? data.length : 1 },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const secret_scan: Tool = {\n name: 'secret_scan',\n description: '扫描代码中的密钥和敏感信息',\n category: 'security',\n parameters: {\n type: 'object',\n properties: {\n dir_path: { type: 'string', description: '扫描目录' },\n file_path: { type: 'string', description: '扫描文件' },\n max_results: { type: 'number', description: '最大结果数' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const dirPath = params.dir_path as string | undefined;\n const filePath = params.file_path as string | undefined;\n const maxResults = (params.max_results as number) ?? 100;\n\n const patterns: [string, RegExp][] = [\n ['API Key', /(?:api[_-]?key|apikey|api[_-]?secret)\\s*[:=]\\s*['\"]([^'\"]+)['\"]/gi],\n ['Password', /(?:password|passwd|pwd)\\s*[:=]\\s*['\"]([^'\"]+)['\"]/gi],\n ['Token', /(?:token|jwt|bearer)\\s*[:=]\\s*['\"]([^'\"]+)['\"]/gi],\n ['Secret', /(?:secret|secret[_-]key)\\s*[:=]\\s*['\"]([^'\"]+)['\"]/gi],\n ['Private Key', /-----BEGIN\\s+(?:RSA|EC|DSA|OPENSSH)\\s+PRIVATE\\s+KEY-----/g],\n ['AWS Key', /(?:AKIA[0-9A-Z]{16})/g],\n ['GitHub Token', /(?:gh[pousr]_[A-Za-z0-9_]{36,})/g],\n ];\n\n const fg = await import('fast-glob');\n let files: string[];\n if (filePath) {\n files = [resolve(filePath)];\n } else {\n const target = dirPath ? resolve(dirPath) : process.cwd();\n files = await fg.default('**/*.{ts,js,tsx,jsx,py,yml,yaml,json,env,properties,xml,toml}', {\n cwd: target,\n absolute: true,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n onlyFiles: true,\n });\n }\n\n const results: string[] = [];\n for (const fp of files.slice(0, 500)) {\n if (results.length >= maxResults) break;\n try {\n const stat = await import('node:fs').then(m => m.statSync(fp));\n if (stat.size > 1048576) continue;\n const content = readFileSync(fp, 'utf-8');\n for (const [type, regex] of patterns) {\n regex.lastIndex = 0;\n let match;\n while ((match = regex.exec(content)) !== null && results.length < maxResults) {\n const line = content.slice(0, match.index).split('\\n').length;\n const redacted = match[0].replace(/[:=]\\s*['\"][^'\"]+/g, '=****');\n results.push(`${fp}:${line}: [${type}] ${redacted.slice(0, 120)}`);\n }\n }\n } catch { /* skip */ }\n }\n\n const output = results.length > 0\n ? `发现 ${results.length} 个疑似敏感信息:\\n\\n${results.join('\\n')}\\n\\n建议立即处理这些信息!`\n : '未发现疑似敏感信息';\n\n return {\n success: true,\n output,\n metadata: { count: results.length, scanned: files.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const encrypt_file: Tool = {\n name: 'encrypt_file',\n description: '加密文件内容 (AES-256-CBC)',\n category: 'security',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '要加密的文件路径' },\n output: { type: 'string', description: '加密输出文件路径' },\n password: { type: 'string', description: '加密密钥' },\n algorithm: { type: 'string', description: '加密算法', enum: ['aes-256-cbc', 'aes-128-cbc'] },\n },\n required: ['file_path', 'output'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const output = resolve(params.output as string);\n const password = params.password as string | undefined;\n const algorithm = (params.algorithm as string) ?? 'aes-256-cbc';\n\n if (!existsSync(filePath)) return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n\n const crypto = await import('node:crypto');\n const content = readFileSync(filePath);\n\n const key = crypto.scryptSync(password || 'default-secret-key', 'salt', algorithm === 'aes-256-cbc' ? 32 : 16);\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv(algorithm, key, iv);\n\n const encrypted = Buffer.concat([iv, cipher.update(content), cipher.final()]);\n\n const outDir = dirname(output);\n if (!existsSync(outDir)) mkdirSync(outDir, { recursive: true });\n writeFileSync(output, encrypted);\n\n return {\n success: true,\n output: `文件已加密: ${filePath} → ${output}`,\n metadata: { algorithm, encryptedSize: encrypted.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const decrypt_file: Tool = {\n name: 'decrypt_file',\n description: '解密文件内容 (AES-256-CBC)',\n category: 'security',\n parameters: {\n type: 'object',\n properties: {\n file_path: { type: 'string', description: '要解密的文件路径' },\n output: { type: 'string', description: '解密输出文件路径' },\n password: { type: 'string', description: '解密密钥' },\n algorithm: { type: 'string', description: '算法', enum: ['aes-256-cbc', 'aes-128-cbc'] },\n },\n required: ['file_path', 'output'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const filePath = resolve(params.file_path as string);\n const output = resolve(params.output as string);\n const password = params.password as string | undefined;\n const algorithm = (params.algorithm as string) ?? 'aes-256-cbc';\n\n if (!existsSync(filePath)) return { success: false, error: `文件不存在: ${filePath}`, output: '' };\n\n const crypto = await import('node:crypto');\n const encrypted = readFileSync(filePath);\n\n const iv = encrypted.subarray(0, 16);\n const data = encrypted.subarray(16);\n\n const key = crypto.scryptSync(password || 'default-secret-key', 'salt', algorithm === 'aes-256-cbc' ? 32 : 16);\n const decipher = crypto.createDecipheriv(algorithm, key, iv);\n\n const decrypted = Buffer.concat([decipher.update(data), decipher.final()]);\n\n const outDir = dirname(output);\n if (!existsSync(outDir)) mkdirSync(outDir, { recursive: true });\n writeFileSync(output, decrypted);\n\n return {\n success: true,\n output: `文件已解密: ${filePath} → ${output}`,\n metadata: { algorithm, decryptedSize: decrypted.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { createHash } from 'node:crypto';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const hash_generate: Tool = {\n name: 'hash_generate',\n description: '生成文件或字符串的哈希值',\n category: 'security',\n parameters: {\n type: 'object',\n properties: {\n content: { type: 'string', description: '要哈希的字符串' },\n file_path: { type: 'string', description: '文件路径' },\n algorithm: { type: 'string', description: '算法', enum: ['sha256', 'sha512', 'md5'] },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const content = params.content as string | undefined;\n const filePath = params.file_path as string | undefined;\n const algorithm = (params.algorithm as string) ?? 'sha256';\n\n let hash: string;\n if (filePath) {\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n const fileContent = readFileSync(abs);\n hash = createHash(algorithm).update(fileContent).digest('hex');\n } else if (content) {\n hash = createHash(algorithm).update(content, 'utf-8').digest('hex');\n } else {\n return { success: false, error: '请提供 content 或 file_path 参数', output: '' };\n }\n\n return {\n success: true,\n output: `${algorithm.toUpperCase()}: ${hash}`,\n metadata: { algorithm, hash },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const jwt_decode: Tool = {\n name: 'jwt_decode',\n description: '解码 JWT Token(不验证签名)',\n category: 'security',\n parameters: {\n type: 'object',\n properties: {\n token: { type: 'string', description: 'JWT Token 字符串' },\n },\n required: ['token'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const token = params.token as string;\n const parts = token.split('.');\n\n if (parts.length !== 3) {\n return { success: false, error: '无效的 JWT 格式(需要3部分)', output: '' };\n }\n\n const decodeBase64 = (str: string): string => {\n const base64 = str.replace(/-/g, '+').replace(/_/g, '/');\n return Buffer.from(base64, 'base64').toString('utf-8');\n };\n\n const header = JSON.parse(decodeBase64(parts[0]));\n const payload = JSON.parse(decodeBase64(parts[1]));\n\n const output = [\n '=== JWT Token 解码 ===',\n '',\n '--- Header ---',\n JSON.stringify(header, null, 2),\n '',\n '--- Payload ---',\n JSON.stringify(payload, null, 2),\n '',\n payload.exp ? `过期时间: ${new Date(payload.exp * 1000).toISOString()}${Date.now() > payload.exp * 1000 ? ' (已过期)' : ''}` : '',\n payload.iat ? `签发时间: ${new Date(payload.iat * 1000).toISOString()}` : '',\n '',\n '注意: 签名未验证,仅解码。',\n ].filter(Boolean).join('\\n');\n\n return { success: true, output, metadata: { ...header, sub: payload.sub } };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const vulnerability_check: Tool = {\n name: 'vulnerability_check',\n description: '检查项目依赖漏洞 (npm audit)',\n category: 'security',\n parameters: {\n type: 'object',\n properties: {\n project_path: { type: 'string', description: '项目路径' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const projectPath = params.project_path as string | undefined;\n const cwd = projectPath ?? process.cwd();\n\n try {\n const output = execSync('npm audit --json', {\n cwd,\n encoding: 'utf-8',\n timeout: 120000,\n stdio: 'pipe',\n });\n const audit = JSON.parse(output);\n const vulns = audit.vulnerabilities || {};\n\n const summary = [\n `漏洞扫描结果:`,\n `发现 ${Object.keys(vulns).length} 个漏洞`,\n '',\n '操作建议:',\n ' npm audit fix # 自动修复(不破坏性更改)',\n ' npm audit fix --force # 强制修复(可能包含破坏性更改)',\n ' npm audit # 查看详细报告',\n ].join('\\n');\n\n return {\n success: true,\n output: summary,\n metadata: { vulnerabilityCount: Object.keys(vulns).length },\n };\n } catch (err: unknown) {\n const e = err as { stdout?: string };\n if (e.stdout) {\n try {\n const audit = JSON.parse(e.stdout);\n const vulns = audit.vulnerabilities || {};\n return {\n success: false,\n error: `发现 ${Object.keys(vulns).length} 个漏洞`,\n output: `运行 'npm audit' 查看详情,或 'npm audit fix' 自动修复。`,\n metadata: { vulnerabilityCount: Object.keys(vulns).length },\n };\n } catch { /* fall through */ }\n }\n return {\n success: false,\n error: 'npm audit 执行失败',\n output: String(err),\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const npm_manage: Tool = {\n name: 'npm_manage',\n description: '管理 npm 包(安装、更新、删除、查看)',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: install, update, remove, list, audit, init', enum: ['install', 'update', 'remove', 'list', 'audit', 'init'] },\n package: { type: 'string', description: '包名(install/remove/update 时使用)' },\n cwd: { type: 'string', description: '工作目录' },\n dev: { type: 'boolean', description: '是否安装为 devDependencies' },\n global: { type: 'boolean', description: '是否全局安装' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const action = params.action as string;\n const pkg = params.package as string | undefined;\n const cwd = (params.cwd as string) ?? process.cwd();\n const dev = (params.dev as boolean) ?? false;\n const global = (params.global as boolean) ?? false;\n\n const registry = 'https://registry.npmmirror.com';\n let cmd = '';\n\n switch (action) {\n case 'install':\n cmd = `npm install ${pkg || ''} ${dev ? '-D' : ''} ${global ? '-g' : ''} --registry ${registry}`;\n break;\n case 'update':\n cmd = `npm update ${pkg || ''} --registry ${registry}`;\n break;\n case 'remove':\n cmd = `npm uninstall ${pkg || ''}`;\n break;\n case 'list':\n cmd = `npm list --depth=0 ${pkg || ''}`;\n break;\n case 'audit':\n cmd = 'npm audit';\n break;\n case 'init':\n cmd = 'npm init -y';\n break;\n }\n\n const output = execSync(cmd, {\n cwd,\n encoding: 'utf-8',\n timeout: 120000,\n maxBuffer: 50 * 1024 * 1024,\n stdio: 'pipe',\n });\n\n return { success: true, output: output || `${action} 完成`, metadata: { action, cwd } };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: e.message || String(err),\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { existsSync, mkdirSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const project_init: Tool = {\n name: 'project_init',\n description: '初始化新项目(npm / 框架模板)',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n template: { type: 'string', description: '模板: npm, vite, next, express, react', enum: ['npm', 'vite', 'next', 'express', 'react'] },\n name: { type: 'string', description: '项目名称' },\n cwd: { type: 'string', description: '创建目录' },\n },\n required: ['template', 'name'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const template = params.template as string;\n const name = params.name as string;\n const cwd = (params.cwd as string) ?? process.cwd();\n const registry = 'https://registry.npmmirror.com';\n\n const commands: Record<string, string> = {\n npm: `npm init -y --registry ${registry}`,\n vite: `npm create vite@latest ${name} -- --template react-ts`,\n next: `npx create-next-app@latest ${name} --ts --app --no-tailwind --src-dir`,\n express: `npx express-generator ${name}`,\n react: `npx create-react-app ${name}`,\n };\n\n const cmd = commands[template] || commands.npm;\n const output = execSync(cmd, {\n cwd,\n encoding: 'utf-8',\n timeout: 120000,\n maxBuffer: 50 * 1024 * 1024,\n stdio: 'pipe',\n });\n\n return {\n success: true,\n output: `项目已创建: ${name} (${template})\\n${output.slice(0, 5000)}`,\n metadata: { template, name, cwd },\n };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: e.message || String(err),\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const build_project: Tool = {\n name: 'build_project',\n description: '构建项目',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n cwd: { type: 'string', description: '项目目录' },\n target: { type: 'string', description: '构建目标: dev, prod, dist', enum: ['dev', 'prod', 'dist'] },\n tool: { type: 'string', description: '构建工具: auto, tsup, vite, webpack', enum: ['auto', 'tsup', 'vite', 'webpack'] },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const cwd = (params.cwd as string) ?? process.cwd();\n const target = (params.target as string) ?? 'prod';\n const tool = (params.tool as string) ?? 'auto';\n\n let cmd = '';\n const pkgPath = resolve(cwd, 'package.json');\n\n if (tool === 'auto' && existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n const scripts = pkg.scripts || {};\n if (scripts.build) cmd = `npm run build`;\n else if (scripts.compile) cmd = `npm run compile`;\n else if (scripts.bundle) cmd = `npm run bundle`;\n else cmd = `npx tsup src/index.ts --format esm`;\n } else {\n switch (tool) {\n case 'tsup': cmd = 'npx tsup src/index.ts --format esm'; break;\n case 'vite': cmd = 'npx vite build'; break;\n case 'webpack': cmd = 'npx webpack --mode production'; break;\n default: cmd = 'npm run build';\n }\n }\n\n const output = execSync(cmd, {\n cwd,\n encoding: 'utf-8',\n timeout: 180000,\n maxBuffer: 50 * 1024 * 1024,\n stdio: 'pipe',\n });\n\n return {\n success: true,\n output: `构建完成\\n${output.slice(0, 10000)}`,\n metadata: { cwd, tool, command: cmd },\n };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: '构建失败: ' + (e.message || String(err)),\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const run_test: Tool = {\n name: 'run_test',\n description: '运行项目测试',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n cwd: { type: 'string', description: '项目目录' },\n test_file: { type: 'string', description: '指定测试文件' },\n runner: { type: 'string', description: '测试运行器: auto, vitest, jest, mocha', enum: ['auto', 'vitest', 'jest', 'mocha'] },\n coverage: { type: 'boolean', description: '是否生成覆盖报告' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const cwd = (params.cwd as string) ?? process.cwd();\n const testFile = params.test_file as string | undefined;\n const runner = (params.runner as string) ?? 'auto';\n const coverage = (params.coverage as boolean) ?? false;\n\n let cmd = '';\n if (runner === 'auto') {\n const pkgPath = resolve(cwd, 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n const scripts = pkg.scripts || {};\n if (scripts.test) cmd = `npm run test`;\n else if (scripts['test:watch']) cmd = `npm run test:watch`;\n else cmd = 'npx vitest run';\n } else {\n cmd = 'npx vitest run';\n }\n } else {\n switch (runner) {\n case 'vitest': cmd = 'npx vitest run'; break;\n case 'jest': cmd = 'npx jest'; break;\n case 'mocha': cmd = 'npx mocha'; break;\n }\n }\n\n if (testFile) cmd += ` \"${testFile}\"`;\n if (coverage) cmd += ' --coverage';\n\n const output = execSync(cmd, {\n cwd,\n encoding: 'utf-8',\n timeout: 180000,\n maxBuffer: 50 * 1024 * 1024,\n stdio: 'pipe',\n });\n\n return {\n success: true,\n output: `测试完成\\n${output.slice(0, 10000)}`,\n metadata: { cwd, coverage },\n };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: '测试失败',\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const coverage_report: Tool = {\n name: 'coverage_report',\n description: '生成代码覆盖报告',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n cwd: { type: 'string', description: '项目目录' },\n runner: { type: 'string', description: '测试运行器', enum: ['vitest', 'jest', 'nyc'] },\n format: { type: 'string', description: '报告格式: text, html, json, lcov', enum: ['text', 'html', 'json', 'lcov'] },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const cwd = (params.cwd as string) ?? process.cwd();\n const runner = (params.runner as string) ?? 'vitest';\n const format = (params.format as string) ?? 'text';\n\n let cmd = '';\n switch (runner) {\n case 'vitest': cmd = `npx vitest run --coverage --reporter=${format}`; break;\n case 'jest': cmd = `npx jest --coverage`; break;\n case 'nyc': cmd = `npx nyc --reporter=${format} npm test`; break;\n }\n\n try {\n const output = execSync(cmd, {\n cwd,\n encoding: 'utf-8',\n timeout: 180000,\n maxBuffer: 50 * 1024 * 1024,\n stdio: 'pipe',\n });\n return {\n success: true,\n output: `覆盖报告:\\n${output.slice(0, 10000)}`,\n metadata: { runner, format, cwd },\n };\n } catch (err: unknown) {\n const e = err as { stdout?: string; stderr?: string };\n return {\n success: false,\n error: '覆盖报告生成失败',\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const env_manage: Tool = {\n name: 'env_manage',\n description: '管理环境变量文件',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: read, set, remove, list_envs', enum: ['read', 'set', 'remove', 'list_envs'] },\n file_path: { type: 'string', description: '.env 文件路径' },\n key: { type: 'string', description: '环境变量名' },\n value: { type: 'string', description: '环境变量值' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const action = params.action as string;\n const filePath = (params.file_path as string) ?? '.env';\n const key = params.key as string | undefined;\n const value = params.value as string | undefined;\n\n const abs = resolve(filePath);\n\n if (action === 'list_envs') {\n const cwd = process.cwd();\n const envs = ['.env', '.env.local', '.env.development', '.env.production', '.env.test'];\n const found = envs.filter(f => existsSync(resolve(cwd, f)));\n return {\n success: true,\n output: found.join('\\n') || '未找到 .env 文件',\n metadata: { files: found },\n };\n }\n\n if (!existsSync(abs)) {\n if (action === 'set' && key && value !== undefined) {\n writeFileSync(abs, `${key}=${value}`, 'utf-8');\n return { success: true, output: `已创建 ${filePath} 并设置 ${key}=${value}` };\n }\n return { success: false, error: `文件不存在: ${abs}`, output: '' };\n }\n\n const content = readFileSync(abs, 'utf-8');\n const lines = content.split('\\n');\n\n if (action === 'read') {\n if (key) {\n const found = lines.find(l => l.startsWith(`${key}=`));\n return {\n success: true,\n output: found ? found.slice(key.length + 1) : `未找到 ${key}`,\n };\n }\n return { success: true, output: content };\n }\n\n if (action === 'set' && key && value !== undefined) {\n let found = false;\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith(`${key}=`) || lines[i].startsWith(`# ${key}=`)) {\n lines[i] = `${key}=${value}`;\n found = true;\n break;\n }\n }\n if (!found) lines.push(`${key}=${value}`);\n writeFileSync(abs, lines.join('\\n'), 'utf-8');\n return { success: true, output: `已设置 ${key}=${value}` };\n }\n\n if (action === 'remove' && key) {\n const filtered = lines.filter(l => !l.startsWith(`${key}=`));\n writeFileSync(abs, filtered.join('\\n'), 'utf-8');\n return { success: true, output: `已移除 ${key}` };\n }\n\n return { success: false, error: `不支持的操作: ${action}`, output: '' };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const config_manage: Tool = {\n name: 'config_manage',\n description: '管理项目配置文件',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: read, set, list, init', enum: ['read', 'set', 'list', 'init'] },\n file_path: { type: 'string', description: '配置文件路径 (.json, .yaml, .env, .toml)' },\n key: { type: 'string', description: '配置键名' },\n value: { type: 'string', description: '配置值' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const action = params.action as string;\n const filePath = params.file_path as string | undefined;\n const key = params.key as string | undefined;\n const value = params.value as string | undefined;\n\n if (action === 'list') {\n const configs = [\n '.env', '.env.local', '.env.development', '.env.production',\n 'package.json', 'tsconfig.json', '.eslintrc.json', '.prettierrc',\n ];\n const cwd = process.cwd();\n const found = configs.filter(f => existsSync(resolve(cwd, f)));\n return {\n success: true,\n output: `项目配置文件:\\n${found.map(f => ` ${f}`).join('\\n') || ' (未找到)'}`,\n metadata: { files: found },\n };\n }\n\n if (action === 'init') {\n const defaultEnv = `# DeeperCode 配置文件\\nNODE_ENV=development\\n`;\n writeFileSync(resolve(process.cwd(), '.env'), defaultEnv, 'utf-8');\n return { success: true, output: '已创建 .env 配置文件' };\n }\n\n if (!filePath) {\n return { success: false, error: '缺少 file_path 参数', output: '' };\n }\n\n const abs = resolve(filePath);\n if (!existsSync(abs)) {\n return { success: false, error: `配置文件不存在: ${abs}`, output: '' };\n }\n\n if (action === 'read') {\n const content = readFileSync(abs, 'utf-8');\n if (filePath.endsWith('.json')) {\n const parsed = JSON.parse(content);\n if (key) {\n return {\n success: true,\n output: `${key}: ${JSON.stringify((parsed as Record<string, unknown>)[key])}`,\n };\n }\n return { success: true, output: JSON.stringify(parsed, null, 2) };\n }\n return { success: true, output: content.slice(0, 10000) };\n }\n\n if (action === 'set' && key && value !== undefined) {\n if (filePath.endsWith('.json')) {\n const parsed = JSON.parse(readFileSync(abs, 'utf-8'));\n try { parsed[key] = JSON.parse(value); } catch { parsed[key] = value; }\n writeFileSync(abs, JSON.stringify(parsed, null, 2), 'utf-8');\n } else {\n const content = readFileSync(abs, 'utf-8');\n const lines = content.split('\\n');\n let found = false;\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith(`${key}=`)) {\n lines[i] = `${key}=${value}`;\n found = true;\n break;\n }\n }\n if (!found) lines.push(`${key}=${value}`);\n writeFileSync(abs, lines.join('\\n'), 'utf-8');\n }\n return { success: true, output: `已设置: ${key} = ${value}` };\n }\n\n return { success: false, error: `不支持的操作组合: ${action}`, output: '' };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { execSync } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const docker_manage: Tool = {\n name: 'docker_manage',\n description: 'Docker 容器管理',\n category: 'project',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: build, run, stop, ps, logs, compose_up, compose_down, pull', enum: ['build', 'run', 'stop', 'ps', 'logs', 'compose_up', 'compose_down', 'pull'] },\n image: { type: 'string', description: '镜像名' },\n container: { type: 'string', description: '容器名' },\n cwd: { type: 'string', description: '工作目录' },\n ports: { type: 'string', description: '端口映射' },\n options: { type: 'string', description: '附加选项' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const action = params.action as string;\n const image = params.image as string | undefined;\n const container = params.container as string | undefined;\n const cwd = (params.cwd as string) ?? process.cwd();\n const ports = params.ports as string | undefined;\n const options = params.options as string ?? '';\n\n let cmd = '';\n\n switch (action) {\n case 'build': {\n const dockerfile = resolve(cwd, 'Dockerfile');\n if (!existsSync(dockerfile)) {\n return { success: false, error: `Dockerfile 不存在: ${dockerfile}`, output: '' };\n }\n cmd = `docker build ${options} -t ${image || 'app'} .`;\n break;\n }\n case 'run':\n cmd = `docker run ${ports ? `-p ${ports}` : ''} ${options} ${image || 'app'}`;\n break;\n case 'stop':\n cmd = `docker stop ${container || ''}`;\n break;\n case 'ps':\n cmd = 'docker ps -a';\n break;\n case 'logs':\n cmd = `docker logs ${container || ''}`;\n break;\n case 'compose_up':\n cmd = 'docker-compose up -d';\n break;\n case 'compose_down':\n cmd = 'docker-compose down';\n break;\n case 'pull':\n cmd = `docker pull ${image || ''}`;\n break;\n default:\n return { success: false, error: `不支持的操作: ${action}`, output: '' };\n }\n\n try {\n const output = execSync(cmd, {\n cwd,\n encoding: 'utf-8',\n timeout: 120000,\n maxBuffer: 10 * 1024 * 1024,\n stdio: 'pipe',\n });\n return { success: true, output: output || `${action} 完成`, metadata: { action } };\n } catch (err: unknown) {\n const e = err as { message?: string; stdout?: string; stderr?: string };\n return {\n success: false,\n error: `Docker 操作失败: ${e.message || String(err)}`,\n output: (e.stdout || '') + (e.stderr || ''),\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const context_summarize: Tool = {\n name: 'context_summarize',\n description: '对长文本进行摘要',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n text: { type: 'string', description: '要摘要的文本' },\n file_path: { type: 'string', description: '文件路径' },\n max_length: { type: 'number', description: '摘要最大长度(字符)' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const text = params.text as string | undefined;\n const filePath = params.file_path as string | undefined;\n const maxLength = (params.max_length as number) ?? 500;\n\n let content = '';\n if (filePath) {\n const { readFileSync, existsSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n const abs = resolve(filePath);\n if (!existsSync(abs)) return { success: false, error: `文件不存在: ${abs}`, output: '' };\n content = readFileSync(abs, 'utf-8');\n } else if (text) {\n content = text;\n } else {\n return { success: false, error: '请提供 text 或 file_path 参数', output: '' };\n }\n\n const lines = content.split('\\n');\n const words = content.split(/\\s+/).filter(w => w.length > 0);\n const summary = extractSummary(content, maxLength);\n\n const output = [\n `=== 上下文摘要 ===`,\n `原文: ${lines.length} 行, ${words.length} 词, ${content.length} 字符`,\n '',\n summary,\n ].join('\\n');\n\n return {\n success: true,\n output,\n metadata: { originalLength: content.length, summaryLength: summary.length, lines: lines.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n\nfunction extractSummary(text: string, maxLen: number): string {\n const sentences = text.match(/[^.!?\\n]+[.!?\\n]*/g) || [text];\n const important = sentences\n .filter(s => s.trim().length > 10)\n .slice(0, 10);\n\n if (important.join(' ').length <= maxLen) {\n return important.join(' ').trim();\n }\n\n let result = important[0];\n for (let i = 1; i < important.length; i++) {\n if (result.length + important[i].length > maxLen) break;\n result += ' ' + important[i];\n }\n\n return result.trim() + (result.length < text.length ? '...' : '');\n}\n","import type { Tool } from '../../tool-types.js';\n\nconst templates: Record<string, { template: string; description: string }> = {\n 'code-review': {\n description: '代码审查提示',\n template: '请审查以下代码的质量、安全性和可读性,并提供改进建议:\\n\\n语言: {{language}}\\n文件: {{file_path}}\\n```\\n{{code}}\\n```\\n\\n请关注: 代码风格、潜在 bug、安全问题、性能优化。',\n },\n 'commit-message': {\n description: '生成 Commit 消息',\n template: '基于以下更改生成一个规范的 commit 消息(Conventional Commits 格式):\\n\\n变更摘要: {{summary}}\\n文件变更: {{files}}\\n\\n类型选择: feat, fix, docs, style, refactor, perf, test, chore, ci',\n },\n 'generate-tests': {\n description: '生成测试用例',\n template: '为以下代码生成完整的测试用例:\\n\\n语言: {{language}}\\n框架: {{framework}}\\n\\n```\\n{{code}}\\n```\\n\\n请覆盖: 正常情况、边界情况、错误情况。',\n },\n 'explain-code': {\n description: '解释代码',\n template: '请详细解释以下代码的功能和实现原理:\\n\\n语言: {{language}}\\n用途: {{purpose}}\\n\\n```\\n{{code}}\\n```\\n\\n请说明: 整体逻辑、关键变量、函数作用、潜在问题。',\n },\n};\n\nexport const prompt_template: Tool = {\n name: 'prompt_template',\n description: '管理 AI Prompt 模板',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n template: { type: 'string', description: '模板名称', enum: [...Object.keys(templates), 'list'] },\n params: { type: 'object', description: '模板参数' },\n },\n required: ['template'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const templateName = params.template as string;\n const templateParams = params.params as Record<string, string> | undefined;\n\n if (templateName === 'list') {\n const list = Object.entries(templates).map(([name, t]) => ` ${name}: ${t.description}`);\n return {\n success: true,\n output: `可用模板 (${Object.keys(templates).length}):\\n${list.join('\\n')}`,\n metadata: { templates: Object.keys(templates) },\n };\n }\n\n const tmpl = templates[templateName];\n if (!tmpl) {\n return { success: false, error: `未知模板: ${templateName}`, output: '' };\n }\n\n let rendered = tmpl.template;\n if (templateParams) {\n for (const [key, value] of Object.entries(templateParams)) {\n rendered = rendered.replace(new RegExp(`\\\\{\\\\{\\\\s*${key}\\\\s*\\\\}\\\\}`, 'g'), value);\n }\n }\n\n return {\n success: true,\n output: rendered,\n metadata: { template: templateName, rendered: !!templateParams },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { mkdirSync, existsSync } from 'node:fs';\nimport { writeFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { DEEPER_SKILLS_DIR } from '../../../core/constants.js';\nimport type { Tool } from '../../../tools/tool-types.js';\n\nexport const skill_create: Tool = {\n name: 'skill_create',\n description: '创建新 Skill(写入 ~/.deeper/skills/<name>/skill.md)。Skill 会在后续对话中被自动加载和识别。',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Skill 名称(英文+连字符,如 \"react-expert\")' },\n description: { type: 'string', description: 'Skill 用途描述' },\n prompt: { type: 'string', description: 'Skill 的 Markdown 指令内容(包含操作步骤、最佳实践等)' },\n triggers: { type: 'array', items: { type: 'string' }, description: '触发词(如 [\"react\", \"component\"])' },\n },\n required: ['name', 'prompt'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const name = params.name as string;\n const description = (params.description as string) || `${name} 技能`;\n const prompt = params.prompt as string;\n const triggers = (params.triggers as string[]) || [];\n\n const skillDir = join(DEEPER_SKILLS_DIR, name);\n if (!existsSync(skillDir)) mkdirSync(skillDir, { recursive: true });\n\n const yaml = [\n `name: ${name}`,\n `description: ${description}`,\n `version: 1.0.0`,\n `author: DeeperCode AI`,\n triggers.length > 0 ? `triggers:\\n${triggers.map(t => ` - ${t}`).join('\\n')}` : '',\n ].filter(Boolean).join('\\n');\n\n const md = `---\\n${yaml}\\n---\\n\\n${prompt}`;\n await writeFile(join(skillDir, 'skill.md'), md, 'utf-8');\n\n return {\n success: true,\n output: `Skill \"${name}\" 已创建\\n 路径: ${skillDir}/skill.md\\n 提示: 新对话开始时生效`,\n metadata: { name, description, triggerCount: triggers.length },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const tool_create: Tool = {\n name: 'tool_create',\n description: 'AI 动态创建新工具(通过注册中心)',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n name: { type: 'string', description: '工具名称' },\n description: { type: 'string', description: '工具描述' },\n command: { type: 'string', description: '工具执行的命令' },\n category: { type: 'string', description: '工具分类', enum: ['filesystem', 'search', 'shell', 'network', 'code', 'database', 'data', 'security', 'project', 'ai', 'system'] },\n parameters: { type: 'object', description: '参数 JSON Schema' },\n },\n required: ['name', 'command'],\n },\n dangerous: false,\n requiresApproval: true,\n async execute(params) {\n try {\n const name = params.name as string;\n const description = (params.description as string) ?? `动态工具: ${name}`;\n const command = params.command as string;\n const category = (params.category as string) ?? 'ai';\n const parameters = params.parameters as Record<string, unknown> | undefined;\n\n return {\n success: true,\n output: [\n `动态工具创建请求: ${name}`,\n `分类: ${category}`,\n `命令: ${command}`,\n '',\n '工具可以通过 run_command 或 DynamicTool.createFromCommand 注册。',\n '使用示例:',\n '```js',\n `const dynamicTool = dynamicToolRegistry.createFromCommand(`,\n ` '${name}',`,\n ` '${description}',`,\n ` '${command}',`,\n ` '${category}'`,\n ');',\n '```',\n ].join('\\n'),\n metadata: { name, category, command },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { resolve, dirname, join } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nconst MEMORY_DIR = join(process.env.HOME || process.env.USERPROFILE || process.cwd(), '.deepercode', 'memories');\n\nexport const memory_store: Tool = {\n name: 'memory_store',\n description: '持久化记忆存储',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: set, get, list, delete, search', enum: ['set', 'get', 'list', 'delete', 'search'] },\n key: { type: 'string', description: '记忆键名' },\n value: { type: 'string', description: '记忆值' },\n query: { type: 'string', description: '搜索关键词' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const action = params.action as string;\n const key = params.key as string | undefined;\n const value = params.value as string | undefined;\n const query = params.query as string | undefined;\n\n if (!existsSync(MEMORY_DIR)) {\n mkdirSync(MEMORY_DIR, { recursive: true });\n }\n\n switch (action) {\n case 'set': {\n if (!key || value === undefined) return { success: false, error: 'set 需要 key 和 value 参数', output: '' };\n const memPath = join(MEMORY_DIR, `${key}.json`);\n writeFileSync(memPath, JSON.stringify({ key, value, timestamp: Date.now() }), 'utf-8');\n return { success: true, output: `记忆已保存: ${key}` };\n }\n case 'get': {\n if (!key) return { success: false, error: 'get 需要 key 参数', output: '' };\n const memPath = join(MEMORY_DIR, `${key}.json`);\n if (!existsSync(memPath)) return { success: false, error: `记忆不存在: ${key}`, output: '' };\n const data = JSON.parse(readFileSync(memPath, 'utf-8'));\n return { success: true, output: data.value };\n }\n case 'delete': {\n if (!key) return { success: false, error: 'delete 需要 key 参数', output: '' };\n const memPath = join(MEMORY_DIR, `${key}.json`);\n if (!existsSync(memPath)) return { success: false, error: `记忆不存在: ${key}`, output: '' };\n const { unlinkSync } = await import('node:fs');\n unlinkSync(memPath);\n return { success: true, output: `记忆已删除: ${key}` };\n }\n case 'list': {\n const { readdirSync } = await import('node:fs');\n const files = readdirSync(MEMORY_DIR).filter(f => f.endsWith('.json'));\n const keys = files.map(f => f.replace('.json', ''));\n return {\n success: true,\n output: keys.join('\\n') || '(暂无记忆)',\n metadata: { count: keys.length },\n };\n }\n case 'search': {\n if (!query) return { success: false, error: 'search 需要 query 参数', output: '' };\n const { readdirSync } = await import('node:fs');\n const files = readdirSync(MEMORY_DIR).filter(f => f.endsWith('.json'));\n const matches: string[] = [];\n for (const f of files) {\n const data = JSON.parse(readFileSync(join(MEMORY_DIR, f), 'utf-8'));\n if (data.value.includes(query) || data.key.includes(query)) {\n matches.push(`${data.key}: ${data.value.slice(0, 200)}`);\n }\n }\n return { success: true, output: matches.join('\\n') || '未找到匹配记忆', metadata: { count: matches.length } };\n }\n default:\n return { success: false, error: `不支持的操作: ${action}`, output: '' };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nlet subagentRunner: ((task: string, mode: 'foreground' | 'background') => Promise<string>) | null = null;\n\nexport function setSubagentRunner(fn: (task: string, mode: 'foreground' | 'background') => Promise<string>): void {\n subagentRunner = fn;\n}\n\nexport const subagent: Tool = {\n name: 'subagent',\n description: '启动子代理处理任务。默认前台模式等待完成返回结果,mode=background 后台执行不阻塞。用于: 代码分析、文件搜索、并行构建、测试运行等。',\n category: 'ai',\n parameters: {\n type: 'object',\n properties: {\n task: { type: 'string', description: '分配给子代理的任务描述' },\n mode: { type: 'string', description: 'foreground(等待完成) 或 background(后台执行)', enum: ['foreground', 'background'] },\n },\n required: ['task'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n const task = params.task as string;\n const mode = (params.mode as string) === 'background' ? 'background' : 'foreground';\n if (!task || task.trim().length < 2) {\n return { success: false, error: '请提供有效的任务描述', output: '' };\n }\n if (subagentRunner) {\n try {\n const result = await subagentRunner(task, mode);\n return { success: true, output: result, metadata: { mode } };\n } catch (e: unknown) {\n return { success: false, error: (e as Error).message, output: '' };\n }\n }\n return { success: false, error: '子代理引擎未初始化', output: '' };\n },\n};\n","import { execSync } from 'node:child_process';\nimport type { Tool } from '../../tool-types.js';\n\nexport const process_list: Tool = {\n name: 'process_list',\n description: '列出当前运行的进程',\n category: 'system',\n parameters: {\n type: 'object',\n properties: {\n filter: { type: 'string', description: '进程名过滤' },\n count: { type: 'number', description: '显示数量' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const filter = params.filter as string | undefined;\n const count = (params.count as number) ?? 20;\n const platform = process.platform;\n\n let cmd: string;\n if (platform === 'win32') {\n cmd = 'tasklist /FO CSV /NH';\n } else {\n cmd = 'ps aux --sort=-%mem';\n }\n\n try {\n let output = execSync(cmd, { encoding: 'utf-8', timeout: 10000, stdio: 'pipe' });\n const lines = output.split('\\n');\n\n if (filter) {\n const filtered = lines.filter(l => l.toLowerCase().includes(filter.toLowerCase()));\n output = filtered.slice(0, count).join('\\n');\n } else {\n output = lines.slice(0, count).join('\\n');\n }\n\n return {\n success: true,\n output: `进程列表 (${platform}):\\n${output}`,\n metadata: { platform, filter, lines: Math.min(lines.length, count) },\n };\n } catch {\n const os = await import('node:os');\n return {\n success: true,\n output: [\n `当前进程信息:`,\n `PID: ${process.pid}`,\n `平台: ${os.platform()}`,\n `架构: ${os.arch()}`,\n `Node.js: ${process.version}`,\n `CPU 数: ${os.cpus().length}`,\n ].join('\\n'),\n metadata: { pid: process.pid },\n };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const system_info: Tool = {\n name: 'system_info',\n description: '获取系统信息',\n category: 'system',\n parameters: {\n type: 'object',\n properties: {},\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute() {\n try {\n const os = await import('node:os');\n\n const info = {\n platform: os.platform(),\n arch: os.arch(),\n hostname: os.hostname(),\n cpus: os.cpus().length,\n totalMemory: `${(os.totalmem() / 1024 / 1024 / 1024).toFixed(1)} GB`,\n freeMemory: `${(os.freemem() / 1024 / 1024 / 1024).toFixed(1)} GB`,\n uptime: `${Math.floor(os.uptime() / 3600)}h ${Math.floor((os.uptime() % 3600) / 60)}m`,\n nodeVersion: process.version,\n homeDir: os.homedir(),\n tmpDir: os.tmpdir(),\n cwd: process.cwd(),\n };\n\n const output = Object.entries(info)\n .map(([k, v]) => `${k}: ${v}`)\n .join('\\n');\n\n return { success: true, output, metadata: info };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const resource_monitor: Tool = {\n name: 'resource_monitor',\n description: '监控系统资源使用情况',\n category: 'system',\n parameters: {\n type: 'object',\n properties: {\n interval_ms: { type: 'number', description: '采样间隔毫秒' },\n samples: { type: 'number', description: '采样次数' },\n },\n required: [],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const intervalMs = (params.interval_ms as number) ?? 1000;\n const samples = (params.samples as number) ?? 3;\n\n const os = await import('node:os');\n const results: Record<string, unknown>[] = [];\n\n for (let i = 0; i < samples; i++) {\n const cpus = os.cpus();\n const totalIdle = cpus.reduce((s, c) => s + c.times.idle, 0);\n const totalTick = cpus.reduce((s, c) => s + c.times.user + c.times.nice + c.times.sys + c.times.idle + c.times.irq, 0);\n const cpuUsage = totalTick > 0 ? ((1 - totalIdle / totalTick) * 100).toFixed(1) : '0';\n\n results.push({\n sample: i + 1,\n cpu: `${cpuUsage}%`,\n memory: {\n total: `${(os.totalmem() / 1024 / 1024 / 1024).toFixed(1)} GB`,\n free: `${(os.freemem() / 1024 / 1024 / 1024).toFixed(1)} GB`,\n used: `${((os.totalmem() - os.freemem()) / os.totalmem() * 100).toFixed(1)}%`,\n },\n uptime: `${Math.floor(os.uptime() / 3600)}h ${Math.floor((os.uptime() % 3600) / 60)}m`,\n loadAverage: os.loadavg().map(l => l.toFixed(2)),\n });\n\n if (i < samples - 1) {\n await new Promise(r => setTimeout(r, intervalMs));\n }\n }\n\n const latest = results[results.length - 1];\n const output = [\n `资源监控 (${samples} 采样,间隔 ${intervalMs}ms):`,\n `CPU 使用率: ${(latest as Record<string, unknown>).cpu}`,\n `内存: ${JSON.stringify((latest as Record<string, unknown>).memory)}`,\n `运行时间: ${(latest as Record<string, unknown>).uptime}`,\n `平均负载: ${JSON.stringify((latest as Record<string, unknown>).loadAverage)}`,\n ].join('\\n');\n\n return {\n success: true,\n output,\n metadata: { samples, intervalMs, latest },\n };\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../../tool-types.js';\n\nexport const notify_user: Tool = {\n name: 'notify_user',\n description: '发送系统通知给用户',\n category: 'system',\n parameters: {\n type: 'object',\n properties: {\n title: { type: 'string', description: '通知标题' },\n message: { type: 'string', description: '通知详情' },\n level: { type: 'string', description: '通知级别: info, warn, error, success', enum: ['info', 'warn', 'error', 'success'] },\n },\n required: ['message'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const title = (params.title as string) ?? 'DeeperCode';\n const message = params.message as string;\n const level = (params.level as string) ?? 'info';\n\n const icons: Record<string, string> = {\n info: 'ℹ',\n warn: '⚠',\n error: '✗',\n success: '✓',\n };\n\n const output = `${icons[level] || ''} [${level.toUpperCase()}] ${title}: ${message}`;\n\n try {\n if (process.platform === 'win32') {\n const { execSync } = await import('node:child_process');\n execSync(`powershell -Command \"Add-Type -AssemblyName System.Windows.Forms; $notify = New-Object System.Windows.Forms.NotifyIcon; $notify.Icon = [System.Drawing.SystemIcons]::Information; $notify.Visible = $true; $notify.ShowBalloonTip(5000, '${title}', '${message}', [System.Windows.Forms.ToolTipIcon]::${level === 'error' ? 'Error' : 'Info'}); Start-Sleep -Seconds 6; $notify.Dispose()\"`, {\n timeout: 10000,\n stdio: 'ignore',\n });\n } else if (process.platform === 'darwin') {\n const { execSync } = await import('node:child_process');\n execSync(`osascript -e 'display notification \"${message}\" with title \"${title}\"'`, { stdio: 'ignore' });\n } else {\n const { execSync } = await import('node:child_process');\n execSync(`notify-send \"${title}\" \"${message}\"`, { stdio: 'ignore' });\n }\n return { success: true, output, metadata: { title, level, notified: true } };\n } catch {\n return { success: true, output, metadata: { title, level, notified: false } };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { Tool } from '../../tool-types.js';\n\nexport const log_viewer: Tool = {\n name: 'log_viewer',\n description: '查看和管理日志文件',\n category: 'system',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', description: '操作: read, tail, search, clear', enum: ['read', 'tail', 'search', 'clear'] },\n file_path: { type: 'string', description: '日志文件路径' },\n lines: { type: 'number', description: '读取行数(tail 模式)' },\n query: { type: 'string', description: '搜索关键词' },\n },\n required: ['action'],\n },\n dangerous: false,\n requiresApproval: false,\n async execute(params) {\n try {\n const action = params.action as string;\n const filePath = params.file_path as string | undefined;\n const lineCount = (params.lines as number) ?? 50;\n const query = params.query as string | undefined;\n\n if (action !== 'clear' && !filePath) {\n const defaultLogs = ['npm-debug.log', 'yarn-error.log', '.log', 'logs/'];\n const cwd = process.cwd();\n const found = defaultLogs.filter(f => existsSync(resolve(cwd, f)));\n return {\n success: true,\n output: `请指定 file_path。项目目录中的日志文件:\\n${found.length > 0 ? found.join('\\n') : ' (未找到)'}`,\n };\n }\n\n const abs = resolve(filePath!);\n\n if (action === 'clear') {\n const { writeFileSync } = await import('node:fs');\n writeFileSync(abs, '', 'utf-8');\n return { success: true, output: `日志已清空: ${abs}` };\n }\n\n if (!existsSync(abs)) {\n return { success: false, error: `日志文件不存在: ${abs}`, output: '' };\n }\n\n const content = readFileSync(abs, 'utf-8');\n const allLines = content.split('\\n');\n\n switch (action) {\n case 'read': {\n const sub = allLines.slice(0, lineCount).join('\\n');\n return {\n success: true,\n output: sub,\n metadata: { lines: allLines.length, shown: Math.min(lineCount, allLines.length) },\n };\n }\n case 'tail': {\n const sub = allLines.slice(-lineCount).join('\\n');\n return {\n success: true,\n output: `最后 ${Math.min(lineCount, allLines.length)} 行:\\n${sub}`,\n metadata: { totalLines: allLines.length },\n };\n }\n case 'search': {\n if (!query) return { success: false, error: 'search 需要 query 参数', output: '' };\n const matches = allLines\n .map((line, i) => line.includes(query) ? `${i + 1}:${line.trim()}` : null)\n .filter(Boolean)\n .slice(0, 200);\n return {\n success: true,\n output: matches.join('\\n') || '未找到匹配行',\n metadata: { matches: matches.length, totalLines: allLines.length },\n };\n }\n default:\n return { success: false, error: `不支持的操作: ${action}`, output: '' };\n }\n } catch (err: unknown) {\n return { success: false, error: (err as Error).message, output: '' };\n }\n },\n};\n","import type { Tool } from '../tool-types.js';\n\nimport { read_file } from './filesystem/read_file.js';\nimport { write_file } from './filesystem/write_file.js';\nimport { edit_file } from './filesystem/edit_file.js';\nimport { delete_file } from './filesystem/delete_file.js';\nimport { list_dir } from './filesystem/list_dir.js';\nimport { glob_find } from './filesystem/glob_find.js';\nimport { move_file } from './filesystem/move_file.js';\nimport { copy_file } from './filesystem/copy_file.js';\nimport { create_dir } from './filesystem/create_dir.js';\nimport { file_info } from './filesystem/file_info.js';\nimport { watch_file } from './filesystem/watch_file.js';\nimport { batch_read } from './filesystem/batch_read.js';\nimport { batch_write } from './filesystem/batch_write.js';\nimport { diff_files } from './filesystem/diff_files.js';\nimport { merge_files } from './filesystem/merge_files.js';\n\nimport { grep_search } from './search/grep_search.js';\nimport { codebase_search } from './search/codebase_search.js';\nimport { symbol_search } from './search/symbol_search.js';\nimport { find_references } from './search/find_references.js';\nimport { find_definition } from './search/find_definition.js';\nimport { text_search } from './search/text_search.js';\nimport { fuzzy_find } from './search/fuzzy_find.js';\nimport { regex_find } from './search/regex_find.js';\nimport { search_package } from './search/search_package.js';\nimport { search_docs } from './search/search_docs.js';\n\nimport { run_command } from './shell/run_command.js';\nimport { run_async } from './shell/run_async.js';\nimport { check_status } from './shell/check_status.js';\nimport { stop_command } from './shell/stop_command.js';\nimport { pipe_commands } from './shell/pipe_commands.js';\nimport { shell_script } from './shell/shell_script.js';\nimport { background_terminal } from './shell/background_terminal.js';\nimport { send_keys } from './shell/send_keys.js';\nimport { send_ctrl_keys } from './shell/send_ctrl_keys.js';\nimport { send_text } from './shell/send_text.js';\nimport { terminal_screenshot } from './shell/terminal_screenshot.js';\nimport { terminal_resize } from './shell/terminal_resize.js';\nimport { list_terminals, read_terminal } from './shell/list_terminals.js';\nimport { kill_terminal } from './shell/kill_terminal.js';\nimport { interactive_terminal } from './shell/interactive_terminal.js';\n\nimport { web_fetch } from './network/web_fetch.js';\nimport { web_search } from './network/web_search.js';\nimport { http_request } from './network/http_request.js';\nimport { download_file } from './network/download_file.js';\nimport { api_call } from './network/api_call.js';\nimport { graphql_query } from './network/graphql_query.js';\nimport { websocket_connect } from './network/websocket_connect.js';\nimport { check_url } from './network/check_url.js';\nimport { screenshot_page } from './network/screenshot_page.js';\nimport { parse_html } from './network/parse_html.js';\nimport { browser_action } from './network/browser_action.js';\nimport { proxy_request } from './network/proxy_request.js';\n\nimport { parse_ast } from './code/parse_ast.js';\nimport { format_code } from './code/format_code.js';\nimport { lint_code } from './code/lint_code.js';\nimport { type_check } from './code/type_check.js';\nimport { generate_code } from './code/generate_code.js';\nimport { refactor_code } from './code/refactor_code.js';\nimport { extract_function } from './code/extract_function.js';\nimport { analyze_deps } from './code/analyze_deps.js';\nimport { import_organizer } from './code/import_organizer.js';\nimport { code_metrics } from './code/code_metrics.js';\nimport { bug_scan } from './code/bug_scan.js';\n\nimport { sql_query } from './database/sql_query.js';\nimport { sql_migrate } from './database/sql_migrate.js';\nimport { nosql_query } from './database/nosql_query.js';\nimport { db_schema } from './database/db_schema.js';\nimport { db_backup } from './database/db_backup.js';\nimport { db_restore } from './database/db_restore.js';\nimport { redis_command } from './database/redis_command.js';\nimport { orm_generate } from './database/orm_generate.js';\n\nimport { json_parse } from './data/json_parse.js';\nimport { csv_parse } from './data/csv_parse.js';\nimport { xml_parse } from './data/xml_parse.js';\nimport { yaml_parse } from './data/yaml_parse.js';\nimport { toml_parse } from './data/toml_parse.js';\nimport { data_transform } from './data/data_transform.js';\nimport { data_validate } from './data/data_validate.js';\nimport { data_diff } from './data/data_diff.js';\nimport { template_render } from './data/template_render.js';\nimport { chart_generate } from './data/chart_generate.js';\n\nimport { secret_scan } from './security/secret_scan.js';\nimport { encrypt_file } from './security/encrypt_file.js';\nimport { decrypt_file } from './security/decrypt_file.js';\nimport { hash_generate } from './security/hash_generate.js';\nimport { jwt_decode } from './security/jwt_decode.js';\nimport { vulnerability_check } from './security/vulnerability_check.js';\n\nimport { npm_manage } from './project/npm_manage.js';\nimport { project_init } from './project/project_init.js';\nimport { build_project } from './project/build_project.js';\nimport { run_test } from './project/run_test.js';\nimport { coverage_report } from './project/coverage_report.js';\nimport { env_manage } from './project/env_manage.js';\nimport { config_manage } from './project/config_manage.js';\nimport { docker_manage } from './project/docker_manage.js';\n\nimport { token_count } from './ai/token_count.js';\nimport { context_summarize } from './ai/context_summarize.js';\nimport { prompt_template } from './ai/prompt_template.js';\nimport { skill_create } from './ai/skill_create.js';\nimport { tool_create } from './ai/tool_create.js';\nimport { memory_store } from './ai/memory_store.js';\nimport { todo_manager } from './ai/todo_manager.js';\nimport { subagent, setSubagentRunner } from './ai/subagent.js';\n\nimport { process_list } from './system/process_list.js';\nimport { system_info } from './system/system_info.js';\nimport { resource_monitor } from './system/resource_monitor.js';\nimport { notify_user } from './system/notify_user.js';\nimport { log_viewer } from './system/log_viewer.js';\n\nexport const builtinTools: Tool[] = [\n read_file,\n write_file,\n edit_file,\n delete_file,\n list_dir,\n glob_find,\n move_file,\n copy_file,\n create_dir,\n file_info,\n watch_file,\n batch_read,\n batch_write,\n diff_files,\n merge_files,\n\n grep_search,\n codebase_search,\n symbol_search,\n find_references,\n find_definition,\n text_search,\n fuzzy_find,\n regex_find,\n search_package,\n search_docs,\n\n run_command,\n run_async,\n check_status,\n stop_command,\n pipe_commands,\n shell_script,\n background_terminal,\n send_keys,\n send_ctrl_keys,\n send_text,\n terminal_screenshot,\n terminal_resize,\n list_terminals,\n read_terminal,\n kill_terminal,\n interactive_terminal,\n\n web_fetch,\n web_search,\n http_request,\n download_file,\n api_call,\n graphql_query,\n websocket_connect,\n check_url,\n screenshot_page,\n parse_html,\n browser_action,\n proxy_request,\n\n parse_ast,\n format_code,\n lint_code,\n type_check,\n generate_code,\n refactor_code,\n extract_function,\n analyze_deps,\n import_organizer,\n code_metrics,\n bug_scan,\n\n sql_query,\n sql_migrate,\n nosql_query,\n db_schema,\n db_backup,\n db_restore,\n redis_command,\n orm_generate,\n\n json_parse,\n csv_parse,\n xml_parse,\n yaml_parse,\n toml_parse,\n data_transform,\n data_validate,\n data_diff,\n template_render,\n chart_generate,\n\n secret_scan,\n encrypt_file,\n decrypt_file,\n hash_generate,\n jwt_decode,\n vulnerability_check,\n\n npm_manage,\n project_init,\n build_project,\n run_test,\n coverage_report,\n env_manage,\n config_manage,\n docker_manage,\n\n token_count,\n context_summarize,\n prompt_template,\n skill_create,\n tool_create,\n memory_store,\n todo_manager,\n subagent,\n\n process_list,\n system_info,\n resource_monitor,\n notify_user,\n log_viewer,\n];\n\nexport { setSubagentRunner };\n","import readline from 'node:readline';\nimport process from 'node:process';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, statSync, copyFileSync, unlinkSync } from 'node:fs';\nimport { join, relative } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport { DEEPER_HOME } from '../core/constants.js';\nimport { TOOL_SAFETY_MAP } from '../tools/tool-types.js';\nimport type { Tool } from '../tools/tool-types.js';\nimport { ToolValidator } from '../tools/ToolValidator.js';\nimport { xmemory, setSessionId } from '../memory/xmemory.js';\nimport { MarkdownStreamRenderer } from '../ui/markdown.js';\nimport { getTodos, todoSummary } from '../tools/builtin/ai/todo_manager.js';\nimport { estimateTokens } from '../tools/builtin/ai/token_count.js';\nimport { SkillEngine } from '../skills/SkillEngine.js';\nimport { MCPClient } from '../mcp/MCPClient.js';\nimport { DeepSeekClient } from '../model/DeepSeekClient.js';\nimport type { ChatMessage, StreamChunk } from '../model/types.js';\nimport { O, Oflush, A, d, b, c, g, y, r, B, G, resetTimer, thinkingAnim, thinkingAnimAt } from '../ui/ansi.js';\n\nexport interface ReplOptions {\n apiKey: string; model: string; baseUrl: string;\n maxTokens: number; temperature: number;\n thinkEnabled: boolean; thinkBudget: number;\n}\n\ntype Role = 'system' | 'user' | 'assistant' | 'tool';\n\ninterface Message {\n role: Role; content: string | null;\n tool_calls?: Array<{ id: string; name: string; arguments: Record<string, unknown> }>;\n tool_call_id?: string; name?: string; reasoning_content?: string;\n}\n\ninterface ToolDef {\n type: 'function';\n function: { name: string; description: string; parameters: Record<string, unknown> };\n}\n\nconst MAX_HISTORY = 60;\nconst CONTEXT_LIMIT = 1_048_576;\nconst CTX_WARN = 786_432;\nconst TOOL_RESULT_MAX = 4000;\nconst SESSION_DIR = join(DEEPER_HOME, 'sessions');\nconst AUTOSAVE_FILE = join(SESSION_DIR, '_autosave.json');\n\nconst TOOL_TIMEOUT_MAP: Record<string, number> = {\n run_command: 120_000, run_async: 120_000, pipe_commands: 120_000,\n shell_script: 120_000, build_project: 180_000, run_test: 180_000,\n npm_manage: 120_000, docker_manage: 120_000, project_init: 120_000,\n web_fetch: 60_000, web_search: 60_000, http_request: 60_000,\n browser_action: 60_000, screenshot_page: 60_000,\n sql_query: 60_000, sql_migrate: 120_000, db_backup: 180_000, db_restore: 180_000,\n secret_scan: 60_000, vulnerability_check: 60_000,\n subagent: 180_000,\n};\nconst DEFAULT_TOOL_TIMEOUT = 30_000;\n\nlet GS = { tc: 0, api: 0, ch: 0 };\nlet skillEngine: SkillEngine | null = null;\nlet mcpClient: MCPClient | null = null;\nconst validator = new ToolValidator();\nlet currentAbortController: AbortController | null = null;\n\nconst BACKUP_DIR = join(DEEPER_HOME, 'backups');\nconst MAX_BACKUPS = 50;\nconst fileBackupStack: Array<{ path: string; backupPath: string; timestamp: number }> = [];\n\nfunction backupFile(filePath: string): void {\n if (!existsSync(filePath)) return;\n try {\n if (!existsSync(BACKUP_DIR)) mkdirSync(BACKUP_DIR, { recursive: true });\n const rel = relative(process.cwd(), filePath).replace(/[/\\\\]/g, '_');\n const ts = Date.now();\n const backupPath = join(BACKUP_DIR, `${ts}_${rel}`);\n copyFileSync(filePath, backupPath);\n fileBackupStack.push({ path: filePath, backupPath, timestamp: ts });\n if (fileBackupStack.length > MAX_BACKUPS) {\n const old = fileBackupStack.shift()!;\n try { unlinkSync(old.backupPath); } catch {}\n }\n } catch {}\n}\n\nfunction getSkillSystemPrompt(): string {\n if (!skillEngine) return '';\n return skillEngine.getSystemPrompt();\n}\n\nexport async function startRepl(opts: ReplOptions): Promise<void> {\n const tools = await loadBuiltinTools();\n const toolDefs = toolsToDefs(tools);\n\n const { setSubagentRunner } = await import('../tools/builtin/index.js');\n setSubagentRunner(async (task: string, mode: 'foreground' | 'background') => {\n const isBg = mode === 'background';\n const run = async () => {\n const lh: Message[] = [\n { role: 'system', content: `DeeperCode 子代理。用工具完成任务,完成输出摘要。cwd=${process.cwd()}` },\n { role: 'user', content: task },\n ];\n const tds = toolsToDefs(tools);\n let ce = 0, stag = 0;\n while (true) {\n const msgs = buildMsgs(lh);\n let fc = '', th = '';\n let tcs: Array<{ id: string; name: string; args: Record<string, unknown> }> = [];\n let curTc: { id: string; name: string; argsStr: string } | null = null;\n let se: string | null = null;\n try {\n const stream = await callApi(opts, msgs, tds, 131072); GS.api++; ce = 0;\n for await (const chunk of stream) {\n if (chunk.type === 'text') { fc += chunk.content || ''; }\n if (chunk.type === 'thinking') th += chunk.content || '';\n if (chunk.type === 'tool_call_start') {\n const tc = (chunk as any).tool_call;\n if (tc) curTc = { id: tc.id, name: tc.name, argsStr: '' };\n }\n if (chunk.type === 'tool_call_end' && curTc) {\n const tcData = (chunk as any).tool_call;\n try {\n const args = tcData?.arguments || JSON.parse(curTc.argsStr || '{}');\n tcs.push({ id: curTc.id, name: curTc.name, args });\n } catch { tcs.push({ id: curTc.id, name: curTc.name, args: {} }); }\n curTc = null;\n }\n if (chunk.type === 'done') break;\n if (chunk.type === 'error') { se = chunk.error || '?'; break; }\n }\n } catch (e: unknown) { se = e instanceof Error ? e.message : String(e); }\n\n if (se) { ce++; stag++; if (ce >= 2) return `子代理失败: ${se}`; await new Promise(r2 => setTimeout(r2, 1000)); continue; }\n\n if (tcs.length > 0) {\n stag = 0;\n lh.push({ role: 'assistant', content: fc || null, reasoning_content: th || undefined, tool_calls: tcs.map(t => ({ id: t.id, name: t.name, arguments: { ...t.args } })) });\n for (const tc of tcs) {\n const tool = tools.find(t => t.name === tc.name);\n if (!tool) { lh.push({ role: 'tool', content: `Error: unknown ${tc.name}`, tool_call_id: tc.id, name: tc.name }); continue; }\n const s2 = TOOL_SAFETY_MAP[tc.name] || 'safe';\n if (s2 === 'dangerous') { lh.push({ role: 'tool', content: 'Skipped', tool_call_id: tc.id, name: tc.name }); continue; }\n try {\n const ac = new AbortController();\n const timeout = TOOL_TIMEOUT_MAP[tc.name] || DEFAULT_TOOL_TIMEOUT;\n const timer = setTimeout(() => ac.abort(), timeout);\n const r = await tool.execute(tc.args, ac.signal);\n clearTimeout(timer);\n const txt = sanitize(r.output || '').slice(0, TOOL_RESULT_MAX);\n lh.push({ role: 'tool', content: r.success ? txt : `Error: ${(r as any).error}`, tool_call_id: tc.id, name: tc.name });\n GS.tc++;\n } catch (e: unknown) { lh.push({ role: 'tool', content: `Error: ${e instanceof Error ? e.message : String(e)}`, tool_call_id: tc.id, name: tc.name }); }\n }\n trimHistory(lh, 20); continue;\n }\n if (fc) { lh.push({ role: 'assistant', content: fc, reasoning_content: th || undefined }); stag = 0; }\n else { stag++; if (stag >= 3) return `停滞: 连续${stag}轮无进展`; continue; }\n const final = lh[lh.length - 1]?.content || '完成';\n return final.slice(0, 800);\n }\n };\n\n if (isBg) {\n run().then(result => {\n history.push({ role: 'system', content: `[子代理] ${task.slice(0, 50)} → ${result.slice(0, 300)}` });\n });\n return `后台子代理已启动: ${task.slice(0, 80)}`;\n } else {\n O(G(` 🟊 subagent ${task.slice(0, 60)}...\\n`));\n const result = await run();\n return result;\n }\n });\n\n const history: Message[] = [];\n if (!existsSync(SESSION_DIR)) mkdirSync(SESSION_DIR, { recursive: true });\n\n const sid = `sess_${Date.now()}`;\n setSessionId(sid);\n await xmemory.load();\n const prevCount = xmemory.totalEntries;\n const prevSummary = xmemory.getSessionSummary();\n if (prevSummary) {\n history.push({ role: 'system', content: `[跨会话记忆·已加载 ${prevCount} 条]\\n${prevSummary.slice(0, 800)}` });\n }\n\n skillEngine = new SkillEngine();\n let skillCount = 0;\n try { skillCount = await skillEngine.loadAll(); } catch { /* skills optional */ }\n\n let mcpCount = 0;\n let mcpToolCount = 0;\n try {\n mcpClient = new MCPClient();\n const { getConfig } = await import('../core/config.js');\n const cfg = getConfig();\n const servers = cfg.mcpServers || [];\n for (const srv of servers) {\n if (!srv.enabled || !srv.autoConnect) continue;\n try {\n const mcpConfig: { name: string; type: 'stdio' | 'sse'; command?: string; args?: string[]; url?: string; env?: Record<string, string> } = {\n name: srv.name,\n type: srv.url ? 'sse' : 'stdio',\n };\n if (srv.command) { mcpConfig.command = srv.command; mcpConfig.args = srv.args; }\n if (srv.url) mcpConfig.url = srv.url;\n await mcpClient.connect(mcpConfig);\n mcpCount++;\n } catch (e: unknown) {\n O(y(` MCP ${srv.name} 连接失败: ${e instanceof Error ? e.message.slice(0, 60) : String(e).slice(0, 60)}\\n`));\n }\n }\n if (mcpCount > 0) {\n const mcpTools = mcpClient.getAdaptedTools();\n mcpToolCount = mcpTools.length;\n tools.push(...mcpTools);\n }\n } catch { /* MCP optional */ }\n\n const drawHeader = (sCount = skillCount, mc = mcpCount, mt = mcpToolCount) => {\n O('\\x1b[2J\\x1b[H');\n O(b(c(' DeeperCode')) + G(' · 全栈 AI 编程代理') + '\\n');\n const modes: string[] = [`${tools.length}工具`];\n if (xmemory.totalEntries > 0) modes.push(`${xmemory.totalEntries}记忆`);\n if (sCount > 0) modes.push(`${sCount}技能`);\n if (mc > 0) modes.push(`${mc}MCP·${mt}工具`);\n O(G(` ▸ V4-Pro · ${modes.join(' · ')}`) + '\\n\\n');\n };\n drawHeader();\n\n let resizeTimer: ReturnType<typeof setTimeout> | null = null;\n const onResize = () => {\n if (resizeTimer) return;\n resizeTimer = setTimeout(() => { resizeTimer = null; Oflush(); }, 200);\n };\n process.stdout.on('resize', onResize);\n\n let resolveLine: ((v: string) => void) | null = null;\n let running = true;\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: true });\n let currentPrompt = c('❯ ');\n const showPrompt = () => { Oflush(); rl.setPrompt(currentPrompt); rl.prompt(true); };\n rl.on('line', (line: string) => { if (resolveLine) { const cb = resolveLine; resolveLine = null; cb(line); } });\n const ask = (): Promise<string> => new Promise(r => { resolveLine = r; showPrompt(); });\n const confirm = async (msg: string): Promise<boolean> => {\n const sv = resolveLine; resolveLine = null;\n O(y(`\\n ⚠ ${msg} [y/N] `));\n const a = await new Promise<string>(r2 => { resolveLine = r2; rl.prompt(true); });\n const ok = a.toLowerCase().startsWith('y');\n if (sv) resolveLine = sv; else showPrompt();\n return ok;\n };\n\n const onSigint = () => {\n if (currentAbortController) {\n currentAbortController.abort();\n currentAbortController = null;\n O(y('\\n ⚡ 已中断当前请求\\n'));\n return;\n }\n if (resolveLine) { const cb = resolveLine; resolveLine = null; cb('/quit'); return; }\n Oflush();\n process.stdout.removeListener('resize', onResize);\n process.removeListener('uncaughtException', onUCE);\n process.removeListener('unhandledRejection', onUHR);\n xmemory.save().then(() => { O('\\n' + y('再见!') + '\\n'); running = false; rl.close(); process.exit(0); });\n };\n rl.on('SIGINT', onSigint);\n const onUCE = (err: Error) => { if (!err.message?.includes('readline') && !err.message?.includes('abort')) O(r(`\\n ⚠ ${err.message}`) + '\\n'); };\n process.on('uncaughtException', onUCE);\n const onUHR = (reason: unknown) => { const m = reason instanceof Error ? reason.message : String(reason); if (!m.includes('readline') && !m.includes('Abort') && !m.includes('timeout')) O(r(`\\n ⚠ ${m}`) + '\\n'); };\n process.on('unhandledRejection', onUHR);\n\n while (running) {\n currentPrompt = c('❯ ');\n const tasks = getTodos();\n if (tasks.length > 0) {\n const active = tasks.filter(t => t.status === 'pending' || t.status === 'in_progress');\n if (active.length > 0) currentPrompt = c(`❯ [${active.length}/${tasks.length}] `);\n }\n\n const input = await ask();\n const trimmed = input.trim();\n if (!trimmed) continue;\n\n if (trimmed.startsWith('/')) {\n if (trimmed === '/') {\n O(c(' 可用命令:\\n'));\n O(G(' /help') + G(' 帮助信息') + '\\n');\n O(G(' /clear') + G(' 清空对话') + '\\n');\n O(G(' /quit') + G(' 退出') + '\\n');\n O(G(' /save') + G(' [n] 保存会话') + '\\n');\n O(G(' /load') + G(' [n] 加载会话') + '\\n');\n O(G(' /sessions') + G(' 会话列表') + '\\n');\n O(G(' /tools') + G(' [c] 工具列表') + '\\n');\n O(G(' /stats') + G(' 统计信息') + '\\n');\n O(G(' /memory') + G(' 记忆系统') + '\\n');\n O(G(' /tasks') + G(' 任务列表') + '\\n');\n O(G(' /rules') + G(' 规则管理') + '\\n');\n O(G(' /mcp') + G(' MCP服务器') + '\\n');\n O(G(' /plan') + G(' <任务> 先出方案') + '\\n');\n O(G(' /spec') + G(' <任务> 先出规格') + '\\n');\n O(G(' /review') + G(' <路径> 代码审查') + '\\n');\n O(G(' /fix') + G(' [目标] 自动修复') + '\\n');\n O(G(' /commit') + G(' 智能提交') + '\\n');\n O(G(' /analyze') + G(' [路径] 项目分析') + '\\n');\n O(G(' /diff') + G(' <文件> 变更预览') + '\\n');\n O(G(' /undo') + G(' 撤销操作') + '\\n');\n O(G(' /status') + G(' 当前状态') + '\\n');\n O(G(' /model') + G(' 模型设置') + '\\n');\n O(G(' /config') + G(' 配置管理') + '\\n');\n O(G(' /cwd') + G(' 当前目录') + '\\n');\n O(G(' /export') + G(' 导出对话') + '\\n');\n O(G(' /init') + G(' 初始化项目') + '\\n');\n O('\\n'); continue;\n }\n const [cmd, ...rest] = trimmed.split(/\\s+/);\n const arg = rest.join(' ');\n if (cmd === '/quit') break;\n if (cmd === '/clear') { history.length = 0; O('\\x1b[2J\\x1b[H' + g('已清空') + '\\n\\n'); continue; }\n if (cmd === '/save') { await saveSession(history, arg); continue; }\n if (cmd === '/load' || cmd === '/resume') {\n if (arg) await loadNamedSession(history, arg);\n else await loadLatestSession(history);\n continue;\n }\n if (cmd === '/sessions') { await listSessions(); continue; }\n if (cmd === '/tools') { if (arg) await showToolsOf(arg, tools); else await showToolsBrief(tools); continue; }\n if (cmd === '/stats') { O(B(`▸ API:${GS.api} 工具:${GS.tc} 字符:${GS.ch}`) + '\\n\\n'); continue; }\n if (cmd === '/memory') { await showMemory(); continue; }\n if (cmd === '/tasks') { await showTasks(); continue; }\n if (cmd === '/model') { O(c('模型: deepseek-v4-pro | deepseek-v4-flash\\n deeper config set model <name>\\n\\n')); continue; }\n if (cmd === '/config') { O(c('配置: deeper config list | deeper config set <key> <value>\\n\\n')); continue; }\n if (cmd === '/cwd') { O(G(` ${process.cwd()}\\n\\n`)); continue; }\n if (cmd === '/export') { await exportHistory(history); continue; }\n if (cmd === '/init') { await initProject(); continue; }\n if (cmd === '/status') { O(B(`▸ API:${GS.api} 工具:${GS.tc} 字符:${GS.ch} · 上下文:${history.length}条`) + '\\n\\n'); continue; }\n if (cmd === '/mcp') {\n if (!mcpClient) { O(y(' MCP 未初始化\\n\\n')); continue; }\n const servers = mcpClient.getConnectedServers();\n if (!servers.length) { O(G(' 无已连接的 MCP 服务器\\n 使用 deeper mcp add 添加\\n\\n')); continue; }\n O(b(c(' MCP Servers')) + G(` · ${servers.length} 个`) + '\\n');\n for (const name of servers) {\n const mcpTools = mcpClient.listTools(name);\n O(G(` 📡 ${name}`) + G(` · ${mcpTools.length} 工具`) + '\\n');\n for (const t of mcpTools.slice(0, 5)) O(G(` - ${t.name}: ${t.description.slice(0, 50)}`) + '\\n');\n if (mcpTools.length > 5) O(G(` …还有 ${mcpTools.length - 5} 个`) + '\\n');\n }\n O('\\n'); continue;\n }\n if (cmd === '/rules') {\n const projectRules = join(process.cwd(), '.deeper', 'rules.md');\n const globalRules = join(DEEPER_HOME, 'rules.md');\n O(b(c(' Rules')) + '\\n');\n const showRules = (label: string, path: string) => {\n if (existsSync(path)) {\n const content = readFileSync(path, 'utf-8');\n O(G(` ${label}: `) + c(path) + G(` (${content.split('\\n').length}行)`) + '\\n');\n const lines = content.split('\\n').slice(0, 8);\n for (const l of lines) O(G(` ${l.slice(0, 70)}`) + '\\n');\n if (content.split('\\n').length > 8) O(G(' …') + '\\n');\n } else {\n O(G(` ${label}: `) + y('未设置') + G(` (创建: ${path})`) + '\\n');\n }\n };\n showRules('项目规则', projectRules);\n showRules('全局规则', globalRules);\n O('\\n'); continue;\n }\n if (cmd === '/help') {\n O(c(' /help /clear /quit /save [name] /load|resume [name] /sessions\\n'));\n O(c(' /tools [cat] /stats /memory /tasks /model /config /cwd /export /init /mcp /rules\\n'));\n O(c(' /plan <任务> /spec <任务> /review <路径> /fix [目标]\\n'));\n O(c(' /commit /analyze [路径] /diff <文件> /undo /status\\n\\n'));\n continue;\n }\n if (cmd === '/plan') {\n if (!arg) { O(y(' 用法: /plan <任务描述>\\n\\n')); continue; }\n O(b(c(' Plan Mode')) + G(` • ${arg.slice(0, 50)}`) + '\\n\\n');\n history.push({ role: 'system', content: `[Plan Mode]\n你必须遵循以下流程,严格按步骤执行:\n1. 先输出一份详尽的实施方案(不要写代码)\n2. 方案必须包含:需求分析、技术选型、架构设计、数据流、模块划分、实施步骤\n3. 等待用户确认方案(输入 ok/继续/可以 等确认词)\n4. 用户确认后,按方案逐步实施,每完成一步更新 todo\n5. 完成后总结交付内容\n\n当前任务:${arg}` });\n history.push({ role: 'user', content: arg });\n const pfdefs = toolsToDefs(tools);\n await runLoop(opts, history, tools, pfdefs, confirm);\n continue;\n }\n if (cmd === '/spec') {\n if (!arg) { O(y(' 用法: /spec <任务描述>\\n\\n')); continue; }\n O(b(c(' Spec Mode')) + G(` • ${arg.slice(0, 50)}`) + '\\n\\n');\n history.push({ role: 'system', content: `[Spec Mode]\n你必须遵循以下流程,严格按步骤执行:\n1. 先输出一份完整的产品规格文档(不要写代码)\n2. 规格文档必须包含:需求概述、功能清单、交互设计、数据结构、API设计、组件树、非功能性需求、测试策略、里程碑\n3. 文档使用 Markdown 格式,标题用 # 层次清晰\n4. 等待用户确认规格(输入 ok/继续/可以 等确认词)\n5. 用户确认后,按规格逐步实施,每完成一步更新 todo\n6. 完成后总结交付内容\n\n当前任务:${arg}` });\n history.push({ role: 'user', content: arg });\n const sfdefs = toolsToDefs(tools);\n await runLoop(opts, history, tools, sfdefs, confirm);\n continue;\n }\n if (cmd === '/review') {\n const target = arg || '.';\n O(b(c(' Review Mode')) + G(` • ${target}`) + '\\n\\n');\n history.push({ role: 'system', content: `[Review Mode]\n你是一位资深代码审查专家。请对指定代码进行全面审查:\n\n1. 先用 read_file / glob_find / grep_search 读取相关代码\n2. 从以下维度逐项审查并评分(1-10):\n - 代码质量:可读性、命名、结构\n - 安全性:注入、XSS、密钥泄露、权限问题\n - 性能:N+1查询、内存泄漏、不必要的计算\n - 可维护性:耦合度、重复代码、测试覆盖\n - 最佳实践:设计模式、SOLID原则、错误处理\n3. 对每个问题给出:文件路径、行号范围、问题描述、修复建议、严重程度(🔴高/🟡中/🟢低)\n4. 最后给出总体评分和改进优先级列表\n\n审查目标:${target}` });\n history.push({ role: 'user', content: `审查 ${target} 的代码质量` });\n const rvdefs = toolsToDefs(tools);\n await runLoop(opts, history, tools, rvdefs, confirm);\n continue;\n }\n if (cmd === '/commit') {\n O(b(c(' Commit Mode')) + G(' • 智能提交') + '\\n\\n');\n try {\n const statusOut = execSync('git status --porcelain', { encoding: 'utf-8', timeout: 10000, cwd: process.cwd() });\n if (!statusOut.trim()) { O(y(' 没有未提交的变更\\n\\n')); continue; }\n const diffOut = execSync('git diff --stat', { encoding: 'utf-8', timeout: 15000, cwd: process.cwd() });\n const stagedOut = execSync('git diff --cached --stat', { encoding: 'utf-8', timeout: 15000, cwd: process.cwd() });\n const files = statusOut.trim().split('\\n').filter(Boolean);\n O(G(` ${files.length} 个文件变更:\\n`));\n for (const f of files.slice(0, 20)) {\n const status = f.slice(0, 2).trim();\n const path = f.slice(3);\n const icon = status === 'M' ? y('M') : status === 'A' ? g('A') : status === 'D' ? r('D') : status === '?' ? G('?') : c(status);\n O(G(` ${icon} ${path.slice(0, 60)}`) + '\\n');\n }\n if (files.length > 20) O(G(` …还有 ${files.length - 20} 个`) + '\\n');\n O('\\n');\n history.push({ role: 'system', content: `[Commit Mode]\n分析 git 变更并生成提交信息:\n1. 先用 run_command 执行 git diff 查看具体变更内容\n2. 分析变更类型和范围,生成符合 Conventional Commits 规范的提交信息\n3. 格式: type(scope): description\n - type: feat/fix/refactor/docs/style/test/chore/perf\n - scope: 可选,影响的模块\n4. 用 run_command 执行 git add 和 git commit\n5. 如果变更较多,建议分多次提交\n\n当前变更统计:\n${diffOut || stagedOut || '无staged变更'}` });\n history.push({ role: 'user', content: '分析变更并提交' });\n const cmdefs = toolsToDefs(tools);\n await runLoop(opts, history, tools, cmdefs, confirm);\n } catch (e: unknown) {\n O(r(` Git 操作失败: ${e instanceof Error ? e.message.slice(0, 80) : String(e).slice(0, 80)}\\n\\n`));\n }\n continue;\n }\n if (cmd === '/analyze') {\n const target = arg || process.cwd();\n O(b(c(' Analyze Mode')) + G(` • ${target}`) + '\\n\\n');\n history.push({ role: 'system', content: `[Analyze Mode]\n你是一位项目架构分析师。请对项目进行全面分析:\n\n1. 用 glob_find 扫描项目目录结构\n2. 用 read_file 读取 package.json / tsconfig.json / Cargo.toml 等配置\n3. 用 grep_search / codebase_search 分析代码模式\n4. 输出以下分析报告:\n - 📁 项目结构树(关键目录和文件)\n - 🛠 技术栈识别(语言、框架、库、工具链)\n - 📊 代码统计(文件数、代码行数估算、各语言占比)\n - 🏗️ 架构模式(MVC/微服务/单体/插件式等)\n - 🔗 依赖关系(核心依赖、开发依赖、版本风险)\n - ⚠️ 潜在问题(过时依赖、安全风险、代码异味)\n - 💡 改进建议(优先级排序)\n\n分析目标:${target}` });\n history.push({ role: 'user', content: `分析项目 ${target}` });\n const andefs = toolsToDefs(tools);\n await runLoop(opts, history, tools, andefs, confirm);\n continue;\n }\n if (cmd === '/fix') {\n const target = arg || '';\n O(b(c(' Fix Mode')) + G(' • 自动修复') + '\\n\\n');\n history.push({ role: 'system', content: `[Fix Mode]\n你是一位自动修复工程师。请执行以下流程:\n\n1. 先用 run_command 运行构建命令(如 npm run build, tsc --noEmit, cargo check 等)\n2. 如果构建成功,运行测试(npm test, cargo test 等)\n3. 如果有错误:\n a. 仔细分析错误信息,定位到具体文件和行号\n b. 用 read_file 读取出错文件的相关代码\n c. 理解错误根因,制定修复方案\n d. 用 edit_file 精确修复(优先用 edit 而非重写整个文件)\n e. 重新运行构建验证修复\n f. 重复直到所有错误清除\n4. 如果测试失败,同样分析并修复\n5. 最多尝试修复 5 轮,避免无限循环\n6. 每次修复后都重新验证\n\n${target ? `修复目标:${target}\\n` : '自动检测并修复所有构建/测试错误'}` });\n history.push({ role: 'user', content: target || '检测并修复项目错误' });\n const fxdefs = toolsToDefs(tools);\n await runLoop(opts, history, tools, fxdefs, confirm);\n continue;\n }\n if (cmd === '/diff') {\n if (!arg) { O(y(' 用法: /diff <文件路径>\\n 显示文件最近的变更\\n\\n')); continue; }\n const filePath = arg.startsWith('/') || arg.startsWith('\\\\') || arg.length > 2 ? arg : join(process.cwd(), arg);\n if (fileBackupStack.length === 0) { O(y(' 没有可用的备份记录\\n\\n')); continue; }\n const backups = fileBackupStack.filter(b => b.path === filePath).reverse();\n if (backups.length === 0) {\n const allBackups = [...fileBackupStack].reverse();\n O(G(' 最近的文件变更:\\n'));\n for (const b of allBackups.slice(0, 10)) {\n const rel = relative(process.cwd(), b.path);\n const time = new Date(b.timestamp).toLocaleTimeString();\n O(G(` ${time} ${rel.slice(0, 50)}`) + '\\n');\n }\n O('\\n'); continue;\n }\n const latest = backups[0];\n try {\n const currentContent = existsSync(filePath) ? readFileSync(filePath, 'utf-8') : '(文件已删除)';\n const backupContent = readFileSync(latest.backupPath, 'utf-8');\n const diffResult = computeSimpleDiff(backupContent, currentContent, filePath);\n O(b(c(' Diff')) + G(` • ${relative(process.cwd(), filePath)}`) + '\\n\\n');\n O(diffResult + '\\n\\n');\n } catch {\n O(y(' 无法读取文件进行对比\\n\\n'));\n }\n continue;\n }\n if (cmd === '/undo') {\n if (fileBackupStack.length === 0) { O(y(' 没有可撤销的操作\\n\\n')); continue; }\n const last = fileBackupStack[fileBackupStack.length - 1];\n try {\n const rel = relative(process.cwd(), last.path);\n copyFileSync(last.backupPath, last.path);\n fileBackupStack.pop();\n try { unlinkSync(last.backupPath); } catch {}\n O(g(' ✓ 已撤销') + G(` ${rel}`) + '\\n');\n O(G(' 提示: 可继续 /undo 撤销更多操作\\n\\n'));\n } catch (e: unknown) {\n O(r(` 撤销失败: ${e instanceof Error ? e.message.slice(0, 60) : String(e).slice(0, 60)}\\n\\n`));\n }\n continue;\n }\n O(G(` 未知命令: ${cmd} (输入 /help 查看帮助)\\n\\n`));\n continue;\n }\n\n const fdefs = toolsToDefs(tools);\n O('\\n');\n const um: Message = { role: 'user', content: trimmed };\n history.push(um); trimHistory(history, MAX_HISTORY);\n await runLoop(opts, history, tools, fdefs, confirm);\n }\n\n rl.close();\n Oflush();\n process.stdout.removeListener('resize', onResize);\n process.removeListener('uncaughtException', onUCE);\n process.removeListener('unhandledRejection', onUHR);\n await xmemory.save();\n if (mcpClient) mcpClient.disconnectAll();\n Oflush();\n O(y('\\n再见!\\n')); process.exit(0);\n}\n\n// ========== Core loop ==========\n\nasync function runLoop(\n opts: ReplOptions, history: Message[], tools: Tool[],\n toolDefs: ToolDef[], confirm: (msg: string) => Promise<boolean>,\n): Promise<void> {\n let ttc = 0, ce = 0, stagnation = 0;\n\n for (let iter = 0; ; iter++) {\n const ctxTokens = estimateTokens(history.map(m => m.content || '').join('\\n'));\n const toolsTokenOverhead = toolDefs.length * 80;\n const totalCtx = ctxTokens + toolsTokenOverhead;\n const nearLimit = totalCtx > CONTEXT_LIMIT * 0.95;\n\n if (totalCtx > CONTEXT_LIMIT * 0.7 && history.length > 10) {\n compressHistory(history);\n }\n\n if (stagnation >= 5) {\n O(y(`\\n 连续${stagnation}轮无进展,任务交还\\n\\n`));\n return;\n }\n\n const msgs = buildMsgs(history);\n const st = Date.now();\n let fc = '', th = '';\n let tcs: Array<{ id: string; name: string; args: Record<string, unknown> }> = [];\n let curTc: { id: string; name: string; argsStr: string } | null = null;\n let se: string | null = null;\n const amax = iter === 0 ? 131072 : nearLimit ? 32768 : 65536;\n let showingThink = false;\n\n resetTimer();\n const animLabel = () => showingThink ? '思考中' : '解析中';\n const animTick = () => { O('\\r' + thinkingAnim(animLabel())); };\n let thinkAnimIv: ReturnType<typeof setInterval> | null = null;\n animTick();\n thinkAnimIv = setInterval(animTick, 80);\n const md = new MarkdownStreamRenderer();\n\n const startStreamAnim = () => {\n if (thinkAnimIv) return;\n resetTimer();\n animTick();\n thinkAnimIv = setInterval(animTick, 80);\n };\n const stopStreamAnim = () => {\n if (thinkAnimIv) { clearInterval(thinkAnimIv); thinkAnimIv = null; }\n };\n\n currentAbortController = new AbortController();\n\n try {\n const stream = await callApi(opts, msgs, toolDefs, amax, currentAbortController.signal);\n GS.api++; ce = 0;\n\n const cols = process.stdout.columns || 80;\n\n for await (const chunk of stream) {\n if (chunk.type === 'text') {\n const t = chunk.content || '';\n fc += t;\n if (fc.length > 100_000) fc = fc.slice(-80_000);\n if (fc === t) {\n if (showingThink) { showingThink = false; stopStreamAnim(); }\n Oflush(); O('\\r' + ' '.repeat(cols) + '\\r');\n if (!fc.slice(t.length - t.length)) O(b(c('●')) + ' ');\n }\n const rendered = md.feed(t);\n if (rendered) O(rendered);\n GS.ch += t.length;\n }\n if (chunk.type === 'thinking') {\n if (!showingThink) { showingThink = true; startStreamAnim(); }\n th += chunk.content || '';\n if (th.length > 20_000) th = th.slice(-16_000);\n }\n if (chunk.type === 'tool_call_start') {\n if (showingThink) { O('\\r' + ' '.repeat(cols) + '\\r'); showingThink = false; }\n stopStreamAnim();\n const tc = (chunk as any).tool_call;\n if (tc) curTc = { id: tc.id, name: tc.name, argsStr: '' };\n }\n if (chunk.type === 'tool_call_end' && curTc) {\n const tcData = (chunk as any).tool_call;\n try {\n const args = tcData?.arguments || JSON.parse(curTc.argsStr || '{}');\n tcs.push({ id: curTc.id, name: curTc.name, args });\n } catch { tcs.push({ id: curTc.id, name: curTc.name, args: {} }); }\n curTc = null;\n }\n if (chunk.type === 'done') break;\n if (chunk.type === 'error') { se = chunk.error || '?'; break; }\n }\n } catch (e: unknown) {\n stopStreamAnim();\n const errMsg = e instanceof Error ? e.message : String(e);\n if (errMsg.includes('abort') || errMsg.includes('cancel')) {\n se = null;\n O(y('\\n ⚡ 请求已取消\\n'));\n } else {\n se = errMsg;\n }\n }\n\n currentAbortController = null;\n stopStreamAnim();\n Oflush();\n const remaining = md.flush();\n if (remaining) O(remaining);\n md.reset();\n\n if (se) {\n ce++; O(r(`\\n ✗ ${se}`));\n if (ce >= 3) { O(r('\\n 连续失败,放弃\\n\\n')); return; }\n const w = Math.min(1000 * ce, 5000); O(G(` 重试(${ce}/3)...\\n`)); await new Promise(r2 => setTimeout(r2, w)); continue;\n }\n\n const el = Date.now() - st;\n if (fc && !tcs.length) O('\\n');\n\n if (tcs.length > 0) {\n stagnation = 0;\n Oflush();\n const compactFc = fc && fc.length > 500 ? fc.replace(/\\n/g, ' ').slice(0, 300) + '…' : fc;\n history.push({ role: 'assistant', content: compactFc || null, reasoning_content: th || undefined, tool_calls: tcs.map(t => ({ id: t.id, name: t.name, arguments: { ...t.args } })) });\n fc = ''; th = '';\n let doneTools = 0;\n\n if (iter === 0) {\n const tdSummary = todoSummary();\n if (tdSummary) { Oflush(); O('\\n' + d(tdSummary.split('\\n').join('\\n ')) + '\\n'); }\n }\n\n const safe = tcs.filter(t => (TOOL_SAFETY_MAP[t.name] || 'safe') === 'safe');\n const rest = tcs.filter(t => (TOOL_SAFETY_MAP[t.name] || 'safe') !== 'safe');\n if (safe.length > 1) {\n const results = await Promise.allSettled(safe.map(async tc => { const r = await execTool(tc, tools, opts); doneTools++; return r; }));\n for (const r of results) {\n if (r.status === 'fulfilled') { history.push(r.value); ttc++; GS.tc++; }\n else { history.push({ role: 'tool', content: `Error: ${String(r.reason)}`, tool_call_id: 'parallel', name: 'parallel' }); }\n }\n } else if (safe.length === 1) {\n const r = await execTool(safe[0], tools, opts);\n history.push(r); ttc++; GS.tc++; doneTools++;\n }\n for (const tc of rest) {\n const r2 = await execTool(tc, tools, opts, confirm);\n history.push(r2); if (!r2.content?.startsWith('Error:') && !r2.content?.includes('skipped')) { ttc++; GS.tc++; }\n doneTools++;\n }\n tcs.length = 0; safe.length = 0; rest.length = 0;\n\n trimHistory(history, MAX_HISTORY); continue;\n }\n\n if (fc) { history.push({ role: 'assistant', content: fc, reasoning_content: th || undefined }); stagnation = 0; }\n else { stagnation++; }\n\n const ctxPct = ((totalCtx / CONTEXT_LIMIT) * 100).toFixed(1);\n const ctxWarn = totalCtx > CTX_WARN ? y(` ${ctxPct}%`) : G(` ${ctxPct}%`);\n O(G(` ▸ ${(el / 1000).toFixed(1)}s · ${ttc} 工具 · 上下文${ctxWarn}`) + '\\n\\n');\n trimHistory(history, MAX_HISTORY);\n\n if (fc) {\n const lu = lastUser(history);\n xmemory.storeEpisodic(`完成任务: ${lu.slice(0, 100)} → ${fc.slice(0, 200)}`, ['task', 'complete'], 5);\n xmemory.storeSemantic(`学会了关于 ${lu.slice(0, 80)} 的处理方式`, ['learning'], 4);\n }\n\n return;\n }\n}\n\nasync function execTool(\n tc: { id: string; name: string; args: Record<string, unknown> },\n tools: Tool[], opts: ReplOptions,\n confirm?: (msg: string) => Promise<boolean>,\n): Promise<Message> {\n const tool = tools.find(t => t.name === tc.name);\n if (!tool) return { role: 'tool', content: `Error: unknown tool ${tc.name}`, tool_call_id: tc.id, name: tc.name };\n\n const vResult = validator.validate(tool, tc.args);\n if (!vResult.success) {\n return { role: 'tool', content: `Error: ${vResult.error}`, tool_call_id: tc.id, name: tc.name };\n }\n\n const s = TOOL_SAFETY_MAP[tc.name] || 'safe';\n const toolName = tc.name;\n const tSyms = '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏';\n let ti = 0;\n\n if ((s === 'dangerous' || s === 'confirm') && confirm) {\n Oflush(); O('\\r' + ' '.repeat(process.stdout.columns || 80) + '\\r');\n const prefix = s === 'dangerous' ? '⛔' : '⚠';\n O(y(` ${prefix}确认? `));\n const ok = await confirm(`执行 ${toolName}?`);\n if (!ok) { O(G(' 跳过\\n')); return { role: 'tool', content: 'User skipped', tool_call_id: tc.id, name: tc.name }; }\n O('\\r' + A.d + ' ' + A.R + A.c + tSyms[0] + A.R + A.G + ' ' + toolName + A.R + ' ');\n }\n\n let execAnimIv: ReturnType<typeof setInterval> | null = null;\n const stopToolAnim = () => { if (execAnimIv) { clearInterval(execAnimIv); execAnimIv = null; } };\n try {\n const toolStart = Date.now();\n const rawWrite = (s: string) => { try { process.stdout.write(s); } catch {} };\n rawWrite('\\r' + thinkingAnimAt(toolName, toolStart));\n execAnimIv = setInterval(() => { rawWrite('\\r' + thinkingAnimAt(toolName, toolStart)); }, 80);\n\n const timeout = TOOL_TIMEOUT_MAP[tc.name] || DEFAULT_TOOL_TIMEOUT;\n const ac = new AbortController();\n const timer = setTimeout(() => ac.abort(), timeout);\n\n if (tc.name === 'write_file' || tc.name === 'edit_file') {\n const fp = (tc.args.file_path || tc.args.path || tc.args.file || '') as string;\n if (fp) backupFile(fp);\n }\n\n let result: { success: boolean; error?: string; output?: string };\n try {\n result = await tool.execute(tc.args, ac.signal) as any;\n clearTimeout(timer);\n } catch (e: unknown) {\n clearTimeout(timer);\n result = { success: false, error: (e as Error).message, output: '' };\n }\n\n stopToolAnim();\n const rawResult = result.success ? result.output || '' : `Error: ${result.error || 'failed'}`;\n const text = result.success ? sanitize(rawResult).slice(0, TOOL_RESULT_MAX) : `Error: ${result.error || 'failed'}`;\n const showPath = (p: string) => p.split(/[/\\\\]/).filter(Boolean).slice(-2).join('/').slice(-35);\n\n let brief = '';\n if (tc.name === 'write_file' || tc.name === 'edit_file') {\n const fp = (tc.args.file_path || tc.args.path || tc.args.file || '') as string;\n brief = showPath(fp);\n } else if (tc.name === 'todo_manager') {\n brief = '任务已更新';\n } else {\n brief = rawResult.replace(/\\n/g, ' ').slice(0, 60);\n }\n Oflush(); O('\\r' + ' '.repeat(process.stdout.columns || 80) + '\\r');\n if (tc.name === 'todo_manager' && result.success) {\n O(A.y + A.b + ' ▸▸ █ 任务面板' + A.R + '\\n');\n const lines = rawResult.split('\\n').filter(Boolean);\n let shown = 0; const MAX_SHOW = 16;\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n if (/^📋/.test(trimmed)) {\n O(A.b + ' ' + trimmed + A.R + '\\n');\n continue;\n }\n shown++;\n if (shown > MAX_SHOW) { O(G(' …\\n')); break; }\n const depth = line.match(/^(\\s*)/)?.[1].length ?? 0;\n const colored = trimmed\n .replace(/^✓\\s*/, g('✓ '))\n .replace(/^◉\\s*/, y('◉ '))\n .replace(/^○\\s*/, G('○ '))\n .replace(/^✗\\s*/, r('✗ '));\n if (depth >= 4) O(G(' ') + colored + '\\n');\n else if (depth >= 2) O(G(' ') + colored + '\\n');\n else O(' ' + colored + '\\n');\n }\n O('\\n');\n } else {\n O(g(' ✓') + G(` ${c(tc.name)} ${brief}\\n`));\n }\n if (result.success) {\n xmemory.storeWorking(`${tc.name}: ${brief}`, [tc.name, 'tool']);\n if (tc.name === 'write_file' || tc.name === 'edit_file' || tc.name === 'delete_file') {\n xmemory.storeEpisodic(`修改了文件: ${brief}`, ['file', 'modified'], 6);\n }\n }\n\n return { role: 'tool', content: text, tool_call_id: tc.id, name: tc.name };\n } catch (e: unknown) {\n stopToolAnim();\n const em = e instanceof Error ? e.message : String(e);\n Oflush(); O('\\r' + ' '.repeat(process.stdout.columns || 80) + '\\r');\n O(r(' ✗') + G(` ${tc.name} ${em.slice(0, 60)}\\n`));\n return { role: 'tool', content: `Error: ${em}`, tool_call_id: tc.id, name: tc.name };\n }\n}\n\n// ========== Helpers ==========\n\nfunction buildMsgs(history: Message[]): Array<Record<string, unknown>> {\n const r: Array<Record<string, unknown>> = [];\n let sysContent = `You are DeeperCode V4-Pro, an elite full-stack AI coding agent with autonomous execution capability.\n\n## Core Principles\n1. READ BEFORE WRITE — Always inspect project state before making changes.\n2. COMPLETE CODE — Write full files. Never use placeholders like \"// ...\" or \"rest of code\".\n3. ONE CALL = ONE FILE — Each write_file contains exactly one complete file. Batch independent writes.\n4. PLAN WITH TODOS — Use todo_manager for multi-step tasks. Update status as you progress.\n5. ACT OVER EXPLAIN — Keep reasoning brief. Prefer tool calls over lengthy explanations.\n6. VERIFY AFTER WRITE — After writing code, run type checks, linters, or tests to confirm correctness.\n7. FIX ERRORS PROACTIVELY — If a tool returns an error, diagnose and fix it immediately.\n8. PARALLEL WHEN POSSIBLE — Execute independent tool calls simultaneously for efficiency.\n\n## Smart Editing Strategy\n- For EXISTING files, prefer edit_file over write_file to minimize diff size.\n- For NEW files, use write_file with complete content.\n- Before editing, read the file first to understand its current state.\n- Make targeted, minimal edits rather than rewriting entire files.\n\n## Auto-Verification Loop\nAfter writing or editing code files, ALWAYS verify the changes:\n1. Run the project's build command (npm run build, tsc --noEmit, cargo check, etc.)\n2. If build fails, read the error output, fix the issues, and re-verify\n3. If tests exist, run them to confirm nothing is broken\n4. Repeat until all checks pass — do NOT leave the user with broken code\n\n## Error Recovery\n- When a tool call fails, analyze the error message carefully before retrying\n- If the same approach fails twice, try a different strategy\n- For type errors: read the file, understand the types, fix precisely\n- For runtime errors: add proper error handling and logging\n- Never give up after one failure — adapt and overcome\n\n## Execution Strategy\n- Start by reading relevant files and understanding the codebase structure.\n- Break complex tasks into small, verifiable steps.\n- After each code change, verify it compiles/passes before moving on.\n- When stuck, try a different approach rather than repeating the same failed action.\n- Use subagent for independent subtasks that can run in parallel.\n\n## Context\n- cwd=${process.cwd()} plat=${process.platform} arch=${process.arch}\n- Respond in the same language as the user's input.`;\n\n const ts = todoSummary(4);\n if (ts) sysContent += '\\n[Remaining Tasks]\\n' + ts;\n\n const lastU = history.filter(m => m.role === 'user').pop();\n if (lastU?.content) {\n const hints = xmemory.getProceduralHints(lastU.content || '', 3);\n if (hints) sysContent += '\\n' + hints;\n }\n const workCtx = xmemory.getWorkingContext(400);\n if (workCtx) sysContent += '\\n[Recent Work]\\n' + workCtx;\n\n const skillPrompt = getSkillSystemPrompt();\n if (skillPrompt) sysContent += '\\n' + skillPrompt;\n\n r.push({ role: 'system', content: sysContent });\n\n const deeperCtx = cachedRead(join(process.cwd(), 'deeper.md'));\n if (deeperCtx && deeperCtx.trim() && !deeperCtx.includes('<!-- 填写')) {\n r.push({ role: 'system', content: `[项目上下文 deeper.md]\\n${deeperCtx}` });\n }\n const projRules = cachedRead(join(process.cwd(), '.deeper', 'rules.md'));\n if (projRules && projRules.trim()) r.push({ role: 'system', content: `[项目规则 rules.md]\\n${projRules}` });\n const globalRules = cachedRead(join(DEEPER_HOME, 'rules.md'), 2000);\n if (globalRules && globalRules.trim()) r.push({ role: 'system', content: `[全局规则]\\n${globalRules}` });\n\n for (const m of history.slice(-30)) {\n const e: Record<string, unknown> = { role: m.role };\n if (m.content != null) e.content = (m.content || '').slice(0, 8000);\n if (m.reasoning_content) e.reasoning_content = (m.reasoning_content || '').slice(0, 2000);\n if (m.tool_calls) e.tool_calls = m.tool_calls.map(t => ({\n id: t.id, type: 'function', function: { name: t.name, arguments: JSON.stringify(t.arguments) },\n }));\n if (m.tool_call_id) e.tool_call_id = m.tool_call_id;\n if (m.role === 'tool') {\n e.name = m.name || 'tool';\n } else if (m.name) {\n e.name = m.name;\n }\n r.push(e);\n }\n return r;\n}\n\nfunction trimHistory(h: Message[], max: number) { while (h.length > max) h.shift(); }\n\nconst _fileCache = new Map<string, { mtime: number; content: string }>();\nfunction cachedRead(path: string, maxLen = 4000): string | null {\n if (!existsSync(path)) return null;\n try {\n const st = statSync(path);\n const cached = _fileCache.get(path);\n if (cached && cached.mtime === st.mtimeMs) return cached.content;\n const content = readFileSync(path, 'utf-8').slice(0, maxLen);\n _fileCache.set(path, { mtime: st.mtimeMs, content });\n return content;\n } catch { return null; }\n}\n\nfunction compressHistory(h: Message[]): void {\n if (h.length <= 6) return;\n const keep = 6;\n const old = h.slice(0, h.length - keep);\n const recent = h.slice(h.length - keep);\n\n const sections: string[] = [];\n let userParts: string[] = [];\n let assistantParts: string[] = [];\n let toolParts: string[] = [];\n\n const flushSection = () => {\n if (userParts.length > 0) sections.push(`[用户] ${userParts.join(' → ')}`);\n if (assistantParts.length > 0) sections.push(`[助手] ${assistantParts.join(' → ')}`);\n if (toolParts.length > 0) sections.push(`[工具] ${toolParts.join(', ')}`);\n userParts = []; assistantParts = []; toolParts = [];\n };\n\n for (const m of old) {\n if (m.role === 'system') {\n flushSection();\n continue;\n }\n if (m.role === 'user' && m.content) {\n if (assistantParts.length > 0 || toolParts.length > 0) flushSection();\n userParts.push(m.content.slice(0, 120));\n } else if (m.role === 'assistant') {\n if (m.tool_calls && m.tool_calls.length > 0) {\n const names = m.tool_calls.map(t => t.name).join(', ');\n toolParts.push(names);\n }\n if (m.content) {\n assistantParts.push(m.content.slice(0, 150));\n }\n } else if (m.role === 'tool' && m.content) {\n const isErr = m.content.startsWith('Error:');\n toolParts.push(isErr ? '❌' : '✓');\n }\n }\n flushSection();\n\n const compressed = sections.join('\\n').slice(0, 4000);\n h.length = 0;\n h.push({ role: 'system', content: `[上下文压缩·${old.length}条摘要]\\n${compressed}` });\n h.push(...recent);\n}\n\nfunction sanitize(t: string): string {\n return t.replace(/\\x1b\\[[0-9;]*[a-zA-Z]/g, '')\n .replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g, '')\n .replace(/\\n{6,}/g, '\\n\\n');\n}\n\nfunction lastUser(h: Message[]): string { for (let i = h.length - 1; i >= 0; i--) if (h[i].role === 'user' && h[i].content) return h[i].content!; return ''; }\n\nfunction computeSimpleDiff(oldText: string, newText: string, filePath: string): string {\n const oldLines = oldText.split('\\n');\n const newLines = newText.split('\\n');\n const maxLines = Math.max(oldLines.length, newLines.length);\n const result: string[] = [];\n let changeCount = 0;\n const contextLines = 3;\n\n for (let i = 0; i < maxLines; i++) {\n const oldLine = oldLines[i];\n const newLine = newLines[i];\n if (oldLine !== newLine) {\n changeCount++;\n const start = Math.max(0, i - contextLines);\n const end = Math.min(maxLines, i + contextLines + 1);\n if (result.length === 0 || result[result.length - 1] !== '...') {\n result.push(G(` @@ line ${i + 1} @@`));\n }\n for (let j = start; j < end; j++) {\n if (j === i) {\n if (oldLine !== undefined && newLine !== undefined) {\n result.push(r(` - ${oldLines[j]}`));\n result.push(g(` + ${newLines[j]}`));\n } else if (oldLine !== undefined) {\n result.push(r(` - ${oldLines[j]}`));\n } else {\n result.push(g(` + ${newLines[j]}`));\n }\n } else if (j < oldLines.length && j < newLines.length) {\n result.push(G(` ${oldLines[j]}`));\n }\n }\n result.push(G(' ...'));\n }\n }\n\n if (changeCount === 0) return G(' (无变更)');\n const rel = relative(process.cwd(), filePath);\n return `${G(`文件: ${rel} (${changeCount} 处变更)`)}\\n${result.join('\\n')}`;\n}\n\nfunction toolsToDefs(tools: Tool[]): ToolDef[] {\n return tools.map(t => ({ type: 'function' as const, function: { name: t.name, description: t.description, parameters: t.parameters as unknown as Record<string, unknown> } }));\n}\n\n// ========== Session commands ==========\n\nasync function saveSession(history: Message[], name?: string) {\n const label = name || new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);\n const file = join(SESSION_DIR, `sess_${label}.json`);\n writeFileSync(file, JSON.stringify({ savedAt: new Date().toISOString(), cwd: process.cwd(), messages: history }, null, 2), 'utf-8');\n O(g(`已保存: sess_${label}`) + '\\n\\n');\n}\n\nasync function listSessions() {\n if (!existsSync(SESSION_DIR)) { O(r('无保存的会话\\n\\n')); return; }\n const files = readdirSync(SESSION_DIR).filter(f => f.endsWith('.json') && !f.startsWith('_')).sort().reverse();\n if (!files.length) { O(r('无保存的会话\\n\\n')); return; }\n O(b(c(' Sessions')) + G(` · ${files.length} 个`) + '\\n');\n for (let i = 0; i < Math.min(files.length, 15); i++) {\n const f = files[i];\n try {\n const data = JSON.parse(readFileSync(join(SESSION_DIR, f), 'utf-8'));\n const label = f.replace(/^sess_|\\.json$/g, '');\n const msgCount = data.messages?.length || 0;\n const savedAt = data.savedAt?.slice(0, 16) || '?';\n O(G(` ${i + 1}. `) + c(label) + G(` · ${msgCount}条 · ${savedAt}`) + '\\n');\n } catch { O(G(` ${i + 1}. ${f} (损坏)\\n`)); }\n }\n O('\\n 加载: /load <name> | 恢复: /resume\\n\\n');\n}\n\nasync function loadNamedSession(history: Message[], name: string) {\n const file = join(SESSION_DIR, `sess_${name}.json`);\n if (!existsSync(file)) { O(r(`会话不存在: ${name}\\n\\n`)); return; }\n const data = JSON.parse(readFileSync(file, 'utf-8'));\n history.push({ role: 'system', content: `[已加载: ${name} (${data.messages?.length || 0} 条)]` });\n if (data.messages) for (const m of data.messages) history.push(m);\n trimHistory(history, MAX_HISTORY);\n O(g(`已加载: ${name}`) + '\\n\\n');\n}\n\nasync function loadLatestSession(history: Message[]) {\n if (!existsSync(SESSION_DIR)) { O(r('无保存的会话\\n\\n')); return; }\n const files = readdirSync(SESSION_DIR).filter(f => f.endsWith('.json') && !f.startsWith('_')).sort().reverse();\n if (!files.length) { O(r('无保存的会话\\n\\n')); return; }\n const file = join(SESSION_DIR, files[0]);\n const data = JSON.parse(readFileSync(file, 'utf-8'));\n const label = files[0].replace(/^sess_|\\.json$/g, '');\n history.push({ role: 'system', content: `[已加载: ${label} (${data.messages?.length || 0} 条)]` });\n if (data.messages) for (const m of data.messages) history.push(m);\n trimHistory(history, MAX_HISTORY);\n O(g(`已加载: ${label}`) + '\\n\\n');\n}\n\nasync function exportHistory(history: Message[]) {\n const file = join(process.cwd(), `deeper-export-${Date.now()}.json`);\n writeFileSync(file, JSON.stringify(history, null, 2), 'utf-8');\n O(g(`已导出: ${file}`) + '\\n\\n');\n}\n\nasync function initProject(): Promise<void> {\n const file = join(process.cwd(), 'deeper.md');\n if (existsSync(file)) {\n O(y(' deeper.md 已存在,跳过\\n\\n'));\n return;\n }\n const content = `# DeeperCode 项目上下文\n\n> 此文件由 \\`/init\\` 自动生成,AI 会在每次对话中自动读取。\n> 你可以手动编辑,添加项目规则、约定和背景信息。\n\n## 📁 项目名称\n\n<!-- 填写项目名称 -->\n\n## 🎯 项目目标\n\n<!-- 简要描述项目目的 -->\n\n## 🛠 技术栈\n\n<!-- 例如: React + TypeScript + Vite -->\n\n## 📐 代码规范\n\n<!-- 命名约定、文件组织等 -->\n\n## ⚙️ 常用命令\n\n<!-- npm run dev, npm test 等 -->\n\n## 📝 注意事项\n\n<!-- AI 需要注意的任何特殊要求 -->\n\n---\n\n*最后更新: ${new Date().toISOString()}*\n`;\n writeFileSync(file, content, 'utf-8');\n O(g('已创建: deeper.md') + G(' (可编辑后 AI 自动读取)') + '\\n\\n');\n}\n\n// ========== Display commands ==========\n\nasync function showTasks(): Promise<void> {\n const items = getTodos();\n if (items.length === 0) { O(G(' 任务列表为空\\n\\n')); return; }\n let total = 0, done = 0;\n for (const t of items) {\n total++; if (t.status === 'done') done++;\n if (t.subtasks) for (const st of t.subtasks) { total++; if (st.status === 'done') done++; }\n }\n O(b(c(' Tasks')) + G(` · ${done}/${total}`) + '\\n');\n let shown = 0; const MAX = 15;\n for (const t of items) {\n if (++shown > MAX) { O(G(' …\\n')); break; }\n const s = t.status === 'done' ? g('✓') : t.status === 'in_progress' ? y('◉') : t.status === 'cancelled' ? r('✗') : G('○');\n const plan = t.plan ? G(` → ${t.plan.slice(0, 30)}`) : '';\n O(` ${s} ${t.title.slice(0, 50)}${plan}\\n`);\n if (t.subtasks) for (const st of t.subtasks) {\n const ss = st.status === 'done' ? g(' ✓') : G(' ○');\n O(` ${ss} ${st.title.slice(0, 40)}\\n`);\n }\n }\n O('\\n');\n}\n\nasync function showMemory(): Promise<void> {\n const total = xmemory.totalEntries;\n const types = {\n semantic: xmemory.getByType('semantic', 3),\n procedural: xmemory.getByType('procedural', 3),\n episodic: xmemory.getByType('episodic', 3),\n working: xmemory.getWorking().slice(-3),\n };\n O(b(c(' XMemory')) + G(` · ${total} 条记忆`) + '\\n');\n for (const [t, entries] of Object.entries(types)) {\n if (entries.length === 0) continue;\n const label = t === 'semantic' ? '知识' : t === 'procedural' ? '技能' : t === 'episodic' ? '经历' : '工作';\n O(G(` [${label}]\\n`));\n for (const e of entries) { O(G(` ${e.content.slice(0, 120)}`) + '\\n'); }\n }\n O('\\n');\n}\n\nasync function showToolsBrief(tools: Tool[]): Promise<void> {\n const cats = [...new Set(tools.map(t => t.category))];\n for (const cat of cats.slice(0, 8)) {\n const ns = tools.filter(t => t.category === cat).map(t => t.name);\n O(B(`${cat}: `) + ns.join(', ') + '\\n');\n }\n O(c(`\\n /tools <category> 查看分类详情 (共 ${cats.length} 个分类)\\n\\n`));\n}\n\nasync function showToolsOf(cat: string, tools: Tool[]): Promise<void> {\n const filtered = tools.filter(t => t.category === cat);\n if (!filtered.length) { O(r(`分类不存在: ${cat}\\n\\n`)); return; }\n O(b(c(` ${cat}`)) + '\\n');\n for (const t of filtered) {\n const safe = TOOL_SAFETY_MAP[t.name] === 'dangerous' ? r('⚠') : TOOL_SAFETY_MAP[t.name] === 'confirm' ? y('?') : g('✓');\n O(` ${safe} ${c(t.name)} ${G(t.description.slice(0, 50))}\\n`);\n }\n O('\\n');\n}\n\nasync function loadBuiltinTools(): Promise<Tool[]> {\n const { builtinTools } = await import('../tools/builtin/index.js');\n return builtinTools as Tool[];\n}\n\n// ========== API (uses DeepSeekClient, no double retry) ==========\n\nasync function callApi(\n opts: ReplOptions, msgs: Array<Record<string, unknown>>,\n tools: ToolDef[], cmt = 8192, signal?: AbortSignal,\n): Promise<AsyncIterable<StreamChunk>> {\n const client = new DeepSeekClient({\n apiKey: opts.apiKey || '',\n model: opts.model || 'deepseek-chat',\n baseUrl: opts.baseUrl || 'https://api.deepseek.com',\n temperature: opts.temperature ?? 0,\n maxTokens: cmt,\n think: { enabled: true, budgetTokens: cmt },\n signal,\n });\n const chatMsgs: ChatMessage[] = msgs.map(m => ({\n role: (m.role as ChatMessage['role']) || 'user',\n content: m.content != null ? String(m.content) : null,\n tool_calls: m.tool_calls as ChatMessage['tool_calls'],\n tool_call_id: m.tool_call_id as string | undefined,\n name: m.name as string | undefined,\n reasoning_content: m.reasoning_content as string | undefined,\n thinking: m.thinking as string | undefined,\n }));\n const stream = await client.chatStream(chatMsgs, tools.map(t => ({\n name: t.function.name,\n description: t.function.description,\n category: '',\n parameters: t.function.parameters as unknown as import('../tools/tool-types.js').JSONSchema,\n })));\n return stream;\n}\n","import { getConfig, loadConfig } from '../../core/config.ts';\n\ninterface ChatOptions {\n model?: string;\n apiKey?: string;\n verbose?: boolean;\n autoRun?: string;\n}\n\nexport async function chat(opts: ChatOptions = {}): Promise<void> {\n const config = getConfig() || loadConfig();\n\n const apiKey = opts.apiKey || config.apiKey || process.env.DEEPSEEK_API_KEY || '';\n if (!apiKey) {\n console.error('❌ 未设置 API Key');\n console.error('');\n console.error(' 请运行以下命令之一:');\n console.error(' deeper config set api_key \"sk-你的密钥\"');\n console.error(' 或设置环境变量: set DEEPSEEK_API_KEY=sk-你的密钥');\n console.error('');\n console.error(' 获取密钥: https://platform.deepseek.com');\n process.exit(1);\n }\n\n const model = opts.model || config.model || 'deepseek-v4-pro';\n const baseUrl = config.baseUrl || 'https://api.deepseek.com';\n const isFlash = model.includes('flash');\n\n const { startRepl } = await import('../chat-repl.js');\n await startRepl({\n apiKey,\n model,\n baseUrl,\n maxTokens: 8192,\n temperature: config.temperature ?? (isFlash ? 0.3 : 0.7),\n thinkEnabled: config.thinkEnabled ?? !isFlash,\n thinkBudget: config.thinkBudget ?? (isFlash ? 0 : 16000),\n });\n}\n","#!/usr/bin/env node\nimport { parseArgs } from 'node:util';\nimport { DEEPER_VERSION } from '../core/constants.ts';\n\nasync function main() {\n const args = process.argv.slice(2);\n\n if (args.length === 0) {\n return startChat({});\n }\n\n const { values, positionals } = parseArgs({\n args,\n options: {\n help: { type: 'boolean', short: 'h' },\n version: { type: 'boolean', short: 'v' },\n model: { type: 'string', short: 'm' },\n 'api-key': { type: 'string', short: 'k' },\n verbose: { type: 'boolean' },\n 'auto-run': { type: 'string' },\n },\n allowPositionals: true,\n });\n\n if (values.help) {\n showHelp();\n return;\n }\n\n if (values.version) {\n console.log(`DeeperCode v${DEEPER_VERSION}`);\n return;\n }\n\n const command = positionals[0];\n const commandArgs = positionals.slice(1);\n\n const globalOpts = {\n model: values.model || process.env.DEEPER_MODEL,\n apiKey: values['api-key'] || process.env.DEEPSEEK_API_KEY,\n verbose: values.verbose,\n };\n\n switch (command) {\n case 'chat':\n case 'repl': {\n await startChat({\n ...globalOpts,\n autoRun: values['auto-run'],\n });\n break;\n }\n\n case 'run':\n case 'exec': {\n const task = commandArgs.join(' ');\n if (!task) {\n console.error('❌ 请提供任务描述');\n console.error(' 用法: deeper run \"任务描述\"');\n process.exit(1);\n }\n const { run } = await import('./commands/run.ts');\n await run(task, globalOpts);\n break;\n }\n\n case 'config': {\n const { configCommand } = await import('./commands/config.ts');\n await configCommand(commandArgs);\n break;\n }\n\n case 'skill':\n case 'skills': {\n const { skillCommand } = await import('./commands/skill.ts');\n await skillCommand(commandArgs);\n break;\n }\n\n case 'mcp': {\n const { mcpCommand } = await import('./commands/mcp.ts');\n await mcpCommand(commandArgs);\n break;\n }\n\n case 'version': {\n console.log(`DeeperCode v${DEEPER_VERSION}`);\n break;\n }\n\n default: {\n const task = positionals.join(' ').trim();\n if (task) {\n const { run } = await import('./commands/run.ts');\n await run(task, globalOpts);\n } else {\n console.error(`未知命令: ${positionals[0] || ''}`);\n console.error('使用 --help 查看帮助');\n process.exit(1);\n }\n }\n }\n}\n\nasync function startChat(opts: {\n model?: string;\n apiKey?: string;\n verbose?: boolean;\n autoRun?: string;\n}) {\n const { chat } = await import('./commands/chat.js');\n await chat(opts);\n}\n\nfunction showHelp() {\n console.log(`\n██████╗ ███████╗███████╗██████╗ ███████╗██████╗\n██╔══██╗██╔════╝██╔════╝██╔══██╗██╔════╝██╔══██╗\n██║ ██║█████╗ █████╗ ██████╔╝█████╗ ██████╔╝\n██║ ██║██╔══╝ ██╔══╝ ██╔═══╝ ██╔══╝ ██╔══██╗\n██████╔╝███████╗███████╗██║ ███████╗██║ ██║\n╚═════╝ ╚══════╝╚══════╝╚═╝ ╚══════╝╚═╝ ╚═╝\n██████╗ ██████╗ ██████╗ ███████╗\n██╔════╝██╔═══██╗██╔══██╗██╔════╝\n██║ ██║ ██║██║ ██║█████╗\n██║ ██║ ██║██║ ██║██╔══╝\n╚██████╗╚██████╔╝██████╔╝███████╗\n ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝\n\nDeeperCode v${DEEPER_VERSION} - 一句话生成完整项目的 AI Agentic CLI 工具\n\n用法:\n deeper [options] 启动交互式 REPL\n deeper chat [options] 启动聊天模式\n deeper run \"任务描述\" [options] 单次执行任务\n deeper config <subcommand> 配置管理\n deeper skill <subcommand> Skill 管理\n deeper mcp <subcommand> MCP 管理\n\n选项:\n -h, --help 显示帮助信息\n -v, --version 显示版本号\n -m, --model <model> 指定模型 (默认: deepseek-v4-pro, 可选: v4-flash)\n -k, --api-key <key> 指定 API Key\n --verbose 详细输出模式\n --auto-run <task> 自动运行任务后进入 REPL\n\n子命令:\n deeper config list 列出配置\n deeper config set <key> <value> 设置配置\n deeper config get <key> 获取配置\n deeper config reset 重置配置\n\n deeper skill list 列出 Skills\n deeper skill create <name> 创建 Skill\n\n deeper mcp list 列出 MCP 服务器\n deeper mcp add <name> ... 添加 MCP 服务器\n deeper mcp remove <name> 移除 MCP 服务器\n\n环境变量:\n DEEPSEEK_API_KEY DeepSeek API Key\n DEEPER_HOME DeeperCode 数据目录 (默认: ~/.deeper)\n DEEPER_MODEL 默认模型名称\n\n内存:\n 如遇 OOM,使用 node --max-old-space-size=4096 $(which deeper) 启动\n Windows: set NODE_OPTIONS=--max-old-space-size=4096 && deeper\n\n示例:\n deeper 启动交互式 REPL\n deeper run \"创建一个 React 应用\" 单次执行\n deeper --model deepseek-v4-pro -k sk-xxxx 指定模型和密钥\n deeper --model deepseek-v4-flash 使用快速模型\n deeper config set theme light 切换亮色主题\n\n使用 DeepSeek-V4-Pro 驱动 | 105+ 内置工具 | 强大的 Agent 系统\n`);\n}\n\nmain().catch((err) => {\n console.error('❌ 启动失败:', err instanceof Error ? err.message : String(err));\n process.exit(1);\n});\n"],"mappings":"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BAAI,CAAC,MAAO,QAAO,EAAE,SAAS,OAAO,OAAO,0CAAsB,QAAQ,GAAG;AAC7E,oBAAM,UAAU,SACb,IAAI,CAAC,MAAM,MAAM,KAAK,SAAS,KAAK,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,IAAI,EACxE,OAAO,OAAO,EACd,MAAM,GAAG,GAAG;AACf,qBAAO;AAAA,gBACL,SAAS;AAAA,gBACT,QAAQ,QAAQ,KAAK,IAAI,KAAK;AAAA,gBAC9B,UAAU,EAAE,SAAS,QAAQ,QAAQ,YAAY,SAAS,OAAO;AAAA,cACnE;AAAA,YACF;AAAA,YACA;AACE,qBAAO,EAAE,SAAS,OAAO,OAAO,yCAAW,MAAM,IAAI,QAAQ,GAAG;AAAA,UACpE;AAAA,QACF,SAAS,KAAc;AACrB,iBAAO,EAAE,SAAS,OAAO,OAAQ,IAAc,SAAS,QAAQ,GAAG;AAAA,QACrE;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACxFA;AAAA;AAAA;AAAA;AAAA;AAAA,IAyHa;AAzHb;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEO,IAAM,eAAuB;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;A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","names":["process","join","process","existsSync","mkdirSync","config_exports","KEY_ALIASES","init_config","existsSync","readFileSync","mkdirSync","writeFileSync","join","existsSync","readFileSync","existsSync","mkdirSync","readFileSync","writeFileSync","join","c","b","r","c","r","uid","c","done","total","readFileSync","existsSync","resolve","existsSync","join","existsSync","join","parseSimpleYaml","readFile","d","b","eventbus","resolve","eventbus","c","resolve","resolve","finishReason","b","existsSync","mkdirSync","join","dirname","r","process","b","A","readFileSync","existsSync","statSync","existsSync","mkdirSync","writeFile","dirname","resolve","readFileSync","writeFileSync","existsSync","resolve","existsSync","resolve","readdirSync","existsSync","resolve","join","walk","statSync","resolve","fg","existsSync","resolve","dirname","mkdirSync","existsSync","mkdirSync","resolve","dirname","mkdirSync","existsSync","resolve","existsSync","resolve","existsSync","resolve","readFileSync","existsSync","resolve","r","existsSync","mkdirSync","writeFile","resolve","dirname","readFileSync","existsSync","resolve","readFileSync","writeFileSync","existsSync","resolve","readFileSync","existsSync","statSync","resolve","searchFile","fg","pattern","readFileSync","statSync","resolve","fg","b","r","readFileSync","statSync","resolve","relative","fg","readFileSync","statSync","resolve","relative","fg","r","readFileSync","statSync","resolve","relative","escapeRegex","fg","r","readFileSync","resolve","fg","resolve","fg","r","b","readFileSync","writeFileSync","existsSync","resolve","fg","spawn","d","spawn","resolve","spawn","d","resolve","pipeline","existsSync","execCb","promisify","resolve","execAsync","getProcess","cheerio","r","existsSync","mkdirSync","dirname","resolve","formatSize","resolve","shouldExtract","readFileSync","existsSync","resolve","readFileSync","existsSync","resolve","execSync","execSync","resolve","execSync","resolve","readFileSync","existsSync","resolve","escapeRegex","readFileSync","existsSync","resolve","escapeRegex","readFileSync","resolve","fg","r","readFileSync","existsSync","resolve","readFileSync","statSync","resolve","relative","fg","existsSync","readFileSync","statSync","basename","r","statSync","join","b","execSync","execSync","execSync","execSync","execSync","execSync","backupFile","execSync","readFileSync","existsSync","resolve","readFileSync","existsSync","resolve","readFileSync","existsSync","resolve","readFileSync","existsSync","resolve","readFileSync","existsSync","resolve","readFileSync","existsSync","resolve","writeFileSync","b","readFileSync","existsSync","writeFileSync","resolve","escapeRegex","readFileSync","resolve","fg","readFileSync","writeFileSync","existsSync","mkdirSync","resolve","dirname","readFileSync","writeFileSync","existsSync","mkdirSync","resolve","dirname","readFileSync","existsSync","resolve","execSync","execSync","execSync","execSync","readFileSync","existsSync","resolve","execSync","readFileSync","existsSync","resolve","execSync","readFileSync","writeFileSync","existsSync","resolve","readFileSync","writeFileSync","existsSync","resolve","execSync","existsSync","resolve","readFileSync","existsSync","resolve","mkdirSync","existsSync","writeFile","join","readFileSync","writeFileSync","existsSync","mkdirSync","join","unlinkSync","readdirSync","execSync","c","r","execSync","readFileSync","existsSync","resolve","writeFileSync","process","existsSync","mkdirSync","readFileSync","writeFileSync","readdirSync","statSync","copyFileSync","unlinkSync","join","relative","execSync","setSubagentRunner","run","r","getConfig","b","A","s","builtinTools","startRepl","run","configCommand","skillCommand","mcpCommand","chat"]}
|