feat: add CLI Command Node and Prompt Node components for orchestrator

- Implemented CliCommandNode component for executing CLI tools with AI models.
- Implemented PromptNode component for constructing AI prompts with context.
- Added styling for mode and tool badges in both components.
- Enhanced user experience with command and argument previews, execution status, and error handling.

test: add comprehensive tests for ask_question tool

- Created direct test for ask_question tool execution.
- Developed end-to-end tests to validate ask_question tool integration with WebSocket and A2UI surfaces.
- Implemented simple and integrated WebSocket tests to ensure proper message handling and surface reception.
- Added tool registration test to verify ask_question tool is correctly registered.

chore: add WebSocket listener and simulation tests

- Added WebSocket listener for A2UI surfaces to facilitate testing.
- Implemented frontend simulation test to validate complete flow from backend to frontend.
- Created various test scripts to ensure robust testing of ask_question tool functionality.
This commit is contained in:
catlog22
2026-02-03 23:10:36 +08:00
parent a806d70d9b
commit c6093ef741
134 changed files with 6392 additions and 634 deletions

View File

@@ -61,29 +61,126 @@
"updatedAt": "Updated",
"solutions": "{count, plural, one {solution} other {solutions}}"
},
"detail": {
"title": "Issue Details",
"tabs": {
"overview": "Overview",
"solutions": "Solutions",
"history": "History",
"json": "JSON"
},
"overview": {
"title": "Title",
"status": "Status",
"priority": "Priority",
"createdAt": "Created At",
"updatedAt": "Updated At",
"context": "Context",
"labels": "Labels",
"assignee": "Assignee"
},
"solutions": {
"title": "Solutions",
"empty": "No solutions yet",
"addSolution": "Add Solution",
"boundSolution": "Bound Solution"
},
"history": {
"title": "History",
"empty": "No history yet"
}
},
"queue": {
"title": "Queue",
"pageTitle": "Issue Queue",
"description": "Manage issue execution queue with execution groups",
"status": {
"pending": "Pending",
"ready": "Ready",
"executing": "Executing",
"completed": "Completed",
"failed": "Failed",
"blocked": "Blocked",
"active": "Active",
"inactive": "Inactive"
},
"stats": {
"totalItems": "Total Items",
"groups": "Groups",
"tasks": "Tasks",
"solutions": "Solutions"
"solutions": "Solutions",
"items": "Items",
"executionGroups": "Execution Groups"
},
"actions": {
"activate": "Activate",
"deactivate": "Deactivate",
"delete": "Delete",
"merge": "Merge",
"split": "Split",
"confirmDelete": "Are you sure you want to delete this queue?"
},
"executionGroup": "Execution Group",
"executionGroups": "Execution Groups",
"parallelGroup": "Parallel Group",
"sequentialGroup": "Sequential Group",
"items": "items",
"itemCount": "{count} items",
"groups": "groups",
"parallel": "Parallel",
"sequential": "Sequential",
"emptyState": "No queue data available",
"empty": "No data",
"conflicts": "Conflicts detected in queue",
"noQueueData": "No queue data"
"noQueueData": "No queue data",
"error": {
"title": "Load Failed",
"message": "Unable to load queue data, please try again later"
},
"conflicts": {
"title": "Queue Conflicts",
"description": "conflicts"
},
"deleteDialog": {
"title": "Delete Queue",
"description": "Are you sure you want to delete this queue? This action cannot be undone."
},
"mergeDialog": {
"title": "Merge Queues",
"targetQueueLabel": "Target Queue ID",
"targetQueuePlaceholder": "Enter the queue ID to merge into"
},
"splitDialog": {
"title": "Split Queue",
"selected": "{count}/{total} selected",
"selectAll": "Select All",
"clearAll": "Clear All",
"noSelection": "Please select items to split",
"cannotSplitAll": "Cannot split all items, source queue must retain at least one item"
}
},
"solution": {
"issue": "Issue",
"solution": "Solution",
"shortIssue": "Issue",
"shortSolution": "Sol",
"tabs": {
"overview": "Overview",
"tasks": "Tasks",
"json": "JSON"
},
"overview": {
"executionInfo": "Execution Info",
"executionOrder": "Execution Order",
"semanticPriority": "Semantic Priority",
"group": "Execution Group",
"taskCount": "Task Count",
"dependencies": "Dependencies",
"filesTouched": "Files Touched"
},
"tasks": {
"comingSoon": "Task list coming soon"
}
},
"discovery": {
"title": "Discovery",

View File

@@ -0,0 +1,196 @@
{
"title": "Issues",
"description": "Track and manage issues",
"status": {
"open": "Open",
"inProgress": "In Progress",
"resolved": "Resolved",
"closed": "Closed",
"completed": "Completed"
},
"priority": {
"low": "Low",
"medium": "Medium",
"high": "High",
"critical": "Critical"
},
"actions": {
"create": "New Issue",
"edit": "Edit",
"delete": "Delete",
"viewDetails": "View Details",
"changeStatus": "Change Status",
"changePriority": "Change Priority",
"startProgress": "Start Progress",
"markResolved": "Mark Resolved",
"github": "Pull from GitHub"
},
"filters": {
"all": "All",
"open": "Open",
"inProgress": "In Progress",
"resolved": "Resolved",
"closed": "Closed",
"byPriority": "By Priority"
},
"emptyState": {
"title": "No Issues Found",
"message": "No issues match your current filter.",
"createFirst": "Create your first issue to get started"
},
"createDialog": {
"title": "Create New Issue",
"labels": {
"title": "Title",
"context": "Context",
"priority": "Priority"
},
"placeholders": {
"title": "Enter issue title...",
"context": "Describe the issue context..."
},
"buttons": {
"create": "Create",
"cancel": "Cancel",
"creating": "Creating..."
}
},
"card": {
"id": "ID",
"createdAt": "Created",
"updatedAt": "Updated",
"solutions": "{count, plural, one {solution} other {solutions}}"
},
"queue": {
"title": "Queue",
"pageTitle": "Issue Queue",
"description": "Manage issue execution queue with execution groups",
"stats": {
"totalItems": "Total Items",
"groups": "Groups",
"tasks": "Tasks",
"solutions": "Solutions"
},
"actions": {
"activate": "Activate",
"deactivate": "Deactivate",
"delete": "Delete",
"merge": "Merge",
"confirmDelete": "Are you sure you want to delete this queue?"
},
"executionGroup": "Execution Group",
"parallel": "Parallel",
"sequential": "Sequential",
"emptyState": "No queue data available",
"conflicts": "Conflicts detected in queue",
"noQueueData": "No queue data"
},
"discovery": {
"title": "Discovery",
"pageTitle": "Issue Discovery",
"description": "View and manage issue discovery sessions",
"totalSessions": "Total Sessions",
"completedSessions": "Completed",
"runningSessions": "Running",
"totalFindings": "Findings",
"sessionList": "Session List",
"noSessions": "No sessions found",
"noSessionsDescription": "Start a new discovery session to begin",
"findingsDetail": "Findings Detail",
"selectSession": "Select a session to view findings",
"sessionId": "Session ID",
"name": "Name",
"status": "Status",
"createdAt": "Created At",
"completedAt": "Completed At",
"progress": "Progress",
"findingsCount": "Findings Count",
"export": "Export JSON",
"exportSelected": "Export Selected ({count})",
"exporting": "Exporting...",
"exportAsIssues": "Export as Issues",
"severityBreakdown": "Severity Breakdown",
"typeBreakdown": "Type Breakdown",
"tabFindings": "Findings",
"tabProgress": "Progress",
"tabInfo": "Session Info",
"stats": {
"totalSessions": "Total Sessions",
"completed": "Completed",
"running": "Running",
"findings": "Findings"
},
"session": {
"status": {
"running": "Running",
"completed": "Completed",
"failed": "Failed"
},
"findings": "{count} findings",
"startedAt": "Started"
},
"findings": {
"title": "Findings",
"filters": {
"severity": "Severity",
"type": "Type",
"search": "Search findings..."
},
"severity": {
"all": "All Severities",
"critical": "Critical",
"high": "High",
"medium": "Medium",
"low": "Low"
},
"type": {
"all": "All Types"
},
"exportedStatus": {
"all": "All Export Status",
"exported": "Exported",
"notExported": "Not Exported"
},
"issueStatus": {
"all": "All Issue Status",
"hasIssue": "Has Issue",
"noIssue": "No Issue"
},
"noFindings": "No findings found",
"noFindingsDescription": "No matching findings found",
"searchPlaceholder": "Search findings...",
"filterBySeverity": "Filter by severity",
"filterByType": "Filter by type",
"filterByExported": "Filter by export status",
"filterByIssue": "Filter by issue link",
"allSeverities": "All severities",
"allTypes": "All types",
"showingCount": "Showing {count} findings",
"exported": "Exported",
"hasIssue": "Linked",
"export": "Export",
"selectAll": "Select All",
"deselectAll": "Deselect All"
},
"tabs": {
"findings": "Findings",
"progress": "Progress",
"info": "Session Info"
},
"emptyState": "No discovery sessions found",
"noSessionSelected": "Select a session to view findings",
"actions": {
"export": "Export Findings",
"refresh": "Refresh"
}
},
"hub": {
"title": "Issue Hub",
"description": "Unified management for issues, queues, and discoveries",
"tabs": {
"issues": "Issues",
"queue": "Queue",
"discovery": "Discovery"
}
}
}

View File

@@ -1,6 +1,11 @@
{
"title": "MCP Servers",
"description": "Manage Model Context Protocol (MCP) servers for cross-CLI integration",
"tabs": {
"templates": "Templates",
"servers": "Servers",
"crossCli": "Cross-CLI"
},
"mode": {
"claude": "Claude",
"codex": "Codex"
@@ -25,7 +30,26 @@
"codex": {
"configPath": "Config Path",
"readOnly": "Read-only",
"readOnlyNotice": "Codex MCP servers are managed via config.toml and cannot be edited here."
"readOnlyNotice": "Codex MCP servers are managed via config.toml and cannot be edited here.",
"editable": "Editable",
"editableNotice": "This server can be edited. Changes will be saved to config.toml.",
"deleteConfirm": {
"title": "Remove Server \"{name}\"?",
"description": "This will remove \"{name}\" from your Codex config.toml file. This action cannot be undone.",
"confirm": "Remove Server",
"cancel": "Cancel",
"deleting": "Removing..."
}
},
"windows": {
"title": "Windows Compatibility",
"description": "Some MCP server commands require Windows-specific configuration for proper execution.",
"missingCount": "{count} missing command(s)",
"checking": "Checking Windows compatibility...",
"fixing": "Applying Windows compatibility fix...",
"autoFix": "Auto-Fix Commands",
"autoFixHint": "This will wrap commands with 'cmd /c' prefix for Windows compatibility.",
"install": "Download"
},
"filters": {
"all": "All",
@@ -126,5 +150,148 @@
"saveConfig": "Save Configuration",
"saving": "Saving..."
}
},
"recommended": {
"title": "Recommended Servers",
"description": "Quickly install popular MCP servers with one click",
"servers": {
"ace": {
"name": "ACE Tool",
"description": "Advanced code search and context engine for intelligent code discovery",
"command": "mcp__ace-tool__search_context",
"install": "Install ACE",
"installing": "Installing..."
},
"chrome": {
"name": "Chrome DevTools",
"description": "Browser automation and debugging tools for web development",
"command": "mcp__chrome-devtools",
"install": "Install Chrome",
"installing": "Installing..."
},
"exa": {
"name": "Exa Search",
"description": "AI-powered web search with real-time crawling capabilities",
"command": "mcp__exa__search",
"install": "Install Exa",
"installing": "Installing..."
}
},
"actions": {
"install": "Install",
"installing": "Installing...",
"installed": "Installed",
"viewAll": "View All Servers"
}
},
"configType": {
"label": "Config Format",
"mcpJson": ".mcp.json",
"claudeJson": ".claude.json",
"switchWarning": "Switching config format will not migrate existing servers. You'll need to reconfigure servers in the new format.",
"switchConfirm": "Switch Config Format",
"switchCancel": "Keep Current"
},
"templates": {
"title": "Templates",
"description": "Reusable MCP server configuration templates",
"searchPlaceholder": "Search templates by name or description...",
"filter": {
"allCategories": "All Categories"
},
"actions": {
"install": "Install Template",
"delete": "Delete Template",
"saveAsTemplate": "Save as Template"
},
"loading": "Loading templates...",
"empty": {
"title": "No Templates Found",
"message": "Create your first template or install templates from the community",
"createFirst": "Create Your First Template"
},
"saveDialog": {
"title": "Save as Template",
"name": "Template Name",
"namePlaceholder": "e.g., My Python MCP Server",
"category": "Category",
"categoryPlaceholder": "Select a category",
"description": "Description",
"descriptionPlaceholder": "Brief description of what this template does...",
"validation": {
"nameRequired": "Template name is required"
},
"save": "Save Template",
"cancel": "Cancel"
},
"deleteDialog": {
"title": "Delete Template",
"message": "Are you sure you want to delete the template \"{name}\"? This action cannot be undone.",
"delete": "Delete",
"deleting": "Deleting...",
"cancel": "Cancel"
},
"categories": {
"stdio": "STDIO",
"sse": "SSE",
"language": "Language",
"official": "Official",
"custom": "Custom"
},
"feedback": {
"installSuccess": "Template installed successfully",
"installError": "Failed to install template",
"deleteSuccess": "Template deleted successfully",
"deleteError": "Failed to delete template",
"saveSuccess": "Template saved successfully",
"saveError": "Failed to save template"
}
},
"crossCli": {
"button": "Cross-CLI Copy",
"title": "Copy MCP Servers Between CLIs",
"selectServers": "Select servers to copy from {source}",
"selectServersHint": "Choose servers to copy. Configuration will be transformed for the target CLI format.",
"noServers": "No servers available in current configuration",
"selectedCount": "{count} server(s) selected",
"copying": "Copying...",
"copyButton": "Copy to {target}"
},
"allProjects": {
"title": "All Projects",
"name": "Project Name",
"servers": "Servers",
"lastModified": "Last Modified",
"actions": "Actions",
"current": "Current",
"openNewWindow": "Open in new window",
"empty": "No projects found",
"summary": "Showing {count} project(s)"
},
"otherProjects": {
"title": "Other Projects",
"description": "Discover and import MCP servers from your other projects",
"selectProject": "Select a project",
"selectProjectPlaceholder": "Choose a project...",
"noProjects": "No other projects available",
"noServers": "No MCP servers found in {project}",
"import": "Import",
"hint": "Imported servers will be added to your current project configuration"
},
"installCmd": {
"title": "Installation Command",
"cliCommand": "CLI Command",
"cliCommandHint": "Run this command in your terminal to install the server",
"jsonConfig": "JSON Configuration",
"jsonConfigHint": "Add this to your {filename} file",
"envVars": "Environment Variables",
"steps": "Installation Steps",
"step1": "Run the CLI command above in your terminal",
"step2": "Or manually add the JSON config to your configuration file",
"step3": "Restart your CLI to load the new server"
},
"enterprise": {
"label": "Enterprise",
"tooltip": "Enterprise MCP server"
}
}

View File

@@ -143,6 +143,18 @@
"empty": "No nodes available",
"clear": "Clear all"
},
"contextAssembler": {
"title": "Context Template",
"helpTitle": "Context Assembly Syntax",
"helpSyntax1": "Reference node output: {{node:node-id}}",
"helpSyntax2": "Reference variable: {{var:variableName}}",
"helpSyntax3": "Combine multiple sources in custom format",
"addNode": "Add Node Reference",
"selectNode": "Select a node...",
"addVariable": "Add Variable Reference",
"selectVariable": "Select a variable...",
"manualEdit": "Custom Template (use {{node:id}} or {{var:name}})"
},
"propertyPanel": {
"title": "Properties",
"open": "Open properties panel",
@@ -160,7 +172,9 @@
"variableName": "variableName",
"condition": "e.g., result.success === true",
"trueLabel": "True",
"falseLabel": "False"
"falseLabel": "False",
"contextTemplate": "Template with {variable} placeholders",
"promptText": "Enter your prompt here..."
},
"labels": {
"label": "Label",
@@ -179,7 +193,13 @@
"trueLabel": "True Label",
"falseLabel": "False Label",
"joinMode": "Join Mode",
"failFast": "Fail fast (stop all branches on first error)"
"failFast": "Fail fast (stop all branches on first error)",
"tool": "CLI Tool",
"mode": "Mode",
"promptType": "Prompt Type",
"sourceNodes": "Source Nodes",
"contextTemplate": "Context Template",
"promptText": "Prompt Text"
},
"options": {
"modeMainprocess": "Main Process",
@@ -195,7 +215,18 @@
"operationMove": "Move",
"joinModeAll": "Wait for all branches",
"joinModeAny": "Complete when any branch finishes",
"joinModeNone": "No synchronization"
"joinModeNone": "No synchronization",
"toolGemini": "Gemini",
"toolQwen": "Qwen",
"toolCodex": "Codex",
"modeAnalysis": "Analysis",
"modeWrite": "Write",
"modeReview": "Review",
"promptTypeOrganize": "Organize",
"promptTypeRefine": "Refine",
"promptTypeSummarize": "Summarize",
"promptTypeTransform": "Transform",
"promptTypeCustom": "Custom"
}
}
}

View File

@@ -1,6 +1,11 @@
{
"title": "MCP 服务器",
"description": "管理模型上下文协议 (MCP) 服务器以实现跨 CLI 集成",
"tabs": {
"templates": "模板",
"servers": "服务器",
"crossCli": "跨 CLI"
},
"mode": {
"claude": "Claude",
"codex": "Codex"
@@ -25,7 +30,26 @@
"codex": {
"configPath": "配置路径",
"readOnly": "只读",
"readOnlyNotice": "Codex MCP 服务器通过 config.toml 管理,无法在此处编辑。"
"readOnlyNotice": "Codex MCP 服务器通过 config.toml 管理,无法在此处编辑。",
"editable": "可编辑",
"editableNotice": "此服务器可以编辑。更改将保存到 config.toml。",
"deleteConfirm": {
"title": "删除服务器 \"{name}\"",
"description": "这将从您的 Codex config.toml 文件中删除 \"{name}\"。此操作无法撤销。",
"confirm": "删除服务器",
"cancel": "取消",
"deleting": "删除中..."
}
},
"windows": {
"title": "Windows 兼容性",
"description": "某些 MCP 服务器命令需要 Windows 特定配置才能正确执行。",
"missingCount": "缺少 {count} 个命令",
"checking": "正在检查 Windows 兼容性...",
"fixing": "正在应用 Windows 兼容性修复...",
"autoFix": "自动修复命令",
"autoFixHint": "这将在命令前添加 'cmd /c' 前缀以提高 Windows 兼容性。",
"install": "下载"
},
"filters": {
"all": "全部",
@@ -126,5 +150,148 @@
"saveConfig": "保存配置",
"saving": "保存中..."
}
},
"recommended": {
"title": "推荐服务器",
"description": "一键快速安装热门 MCP 服务器",
"servers": {
"ace": {
"name": "ACE 工具",
"description": "高级代码搜索和上下文引擎,用于智能代码发现",
"command": "mcp__ace-tool__search_context",
"install": "安装 ACE",
"installing": "安装中..."
},
"chrome": {
"name": "Chrome 开发者工具",
"description": "浏览器自动化和调试工具,用于 Web 开发",
"command": "mcp__chrome-devtools",
"install": "安装 Chrome",
"installing": "安装中..."
},
"exa": {
"name": "Exa 搜索",
"description": "AI 驱动的网络搜索,支持实时抓取",
"command": "mcp__exa__search",
"install": "安装 Exa",
"installing": "安装中..."
}
},
"actions": {
"install": "安装",
"installing": "安装中...",
"installed": "已安装",
"viewAll": "查看全部服务器"
}
},
"configType": {
"label": "配置格式",
"mcpJson": ".mcp.json",
"claudeJson": ".claude.json",
"switchWarning": "切换配置格式不会迁移现有服务器。您需要在新格式中重新配置服务器。",
"switchConfirm": "切换配置格式",
"switchCancel": "保持当前格式"
},
"templates": {
"title": "模板",
"description": "可重用的 MCP 服务器配置模板",
"searchPlaceholder": "按名称或描述搜索模板...",
"filter": {
"allCategories": "所有类别"
},
"actions": {
"install": "安装模板",
"delete": "删除模板",
"saveAsTemplate": "保存为模板"
},
"loading": "正在加载模板...",
"empty": {
"title": "未找到模板",
"message": "创建您的第一个模板或从社区安装模板",
"createFirst": "创建第一个模板"
},
"saveDialog": {
"title": "保存为模板",
"name": "模板名称",
"namePlaceholder": "例如:我的 Python MCP 服务器",
"category": "类别",
"categoryPlaceholder": "选择一个类别",
"description": "描述",
"descriptionPlaceholder": "简要描述此模板的用途...",
"validation": {
"nameRequired": "模板名称不能为空"
},
"save": "保存模板",
"cancel": "取消"
},
"deleteDialog": {
"title": "删除模板",
"message": "确定要删除模板 \"{name}\" 吗?此操作无法撤销。",
"delete": "删除",
"deleting": "删除中...",
"cancel": "取消"
},
"categories": {
"stdio": "STDIO",
"sse": "SSE",
"language": "语言",
"official": "官方",
"custom": "自定义"
},
"feedback": {
"installSuccess": "模板安装成功",
"installError": "模板安装失败",
"deleteSuccess": "模板删除成功",
"deleteError": "模板删除失败",
"saveSuccess": "模板保存成功",
"saveError": "模板保存失败"
}
},
"crossCli": {
"button": "跨 CLI 复制",
"title": "在 CLI 之间复制 MCP 服务器",
"selectServers": "选择要从 {source} 复制的服务器",
"selectServersHint": "选择要复制的服务器。配置将转换为目标 CLI 格式。",
"noServers": "当前配置中没有可用的服务器",
"selectedCount": "已选择 {count} 个服务器",
"copying": "复制中...",
"copyButton": "复制到 {target}"
},
"allProjects": {
"title": "所有项目",
"name": "项目名称",
"servers": "服务器",
"lastModified": "最后修改",
"actions": "操作",
"current": "当前",
"openNewWindow": "在新窗口中打开",
"empty": "未找到项目",
"summary": "显示 {count} 个项目"
},
"otherProjects": {
"title": "其他项目",
"description": "从您的其他项目发现并导入 MCP 服务器",
"selectProject": "选择一个项目",
"selectProjectPlaceholder": "选择一个项目...",
"noProjects": "没有其他可用的项目",
"noServers": "在 {project} 中未找到 MCP 服务器",
"import": "导入",
"hint": "导入的服务器将添加到您的当前项目配置中"
},
"installCmd": {
"title": "安装命令",
"cliCommand": "CLI 命令",
"cliCommandHint": "在终端中运行此命令以安装服务器",
"jsonConfig": "JSON 配置",
"jsonConfigHint": "将此添加到您的 {filename} 文件中",
"envVars": "环境变量",
"steps": "安装步骤",
"step1": "在您的终端中运行上面的 CLI 命令",
"step2": "或将 JSON 配置手动添加到您的配置文件中",
"step3": "重启您的 CLI 以加载新服务器"
},
"enterprise": {
"label": "企业版",
"tooltip": "企业版 MCP 服务器"
}
}

View File

@@ -142,6 +142,18 @@
"empty": "没有可用的节点",
"clear": "清除全部"
},
"contextAssembler": {
"title": "上下文模板",
"helpTitle": "上下文组装语法",
"helpSyntax1": "引用节点输出: {{node:节点ID}}",
"helpSyntax2": "引用变量: {{var:变量名}}",
"helpSyntax3": "以自定义格式组合多个来源",
"addNode": "添加节点引用",
"selectNode": "选择节点...",
"addVariable": "添加变量引用",
"selectVariable": "选择变量...",
"manualEdit": "自定义模板 (使用 {{node:id}} 或 {{var:name}})"
},
"propertyPanel": {
"title": "属性",
"open": "打开属性面板",
@@ -159,7 +171,9 @@
"variableName": "变量名称",
"condition": "例如: result.success === true",
"trueLabel": "真",
"falseLabel": "假"
"falseLabel": "假",
"contextTemplate": "带有 {variable} 占位符的模板",
"promptText": "在此输入您的提示词..."
},
"labels": {
"label": "标签",
@@ -178,7 +192,13 @@
"trueLabel": "真标签",
"falseLabel": "假标签",
"joinMode": "加入模式",
"failFast": "快速失败 (首次错误时停止所有分支)"
"failFast": "快速失败 (首次错误时停止所有分支)",
"tool": "CLI 工具",
"mode": "模式",
"promptType": "提示词类型",
"sourceNodes": "源节点",
"contextTemplate": "上下文模板",
"promptText": "提示词文本"
},
"options": {
"modeMainprocess": "主进程",
@@ -194,7 +214,18 @@
"operationMove": "移动",
"joinModeAll": "等待所有分支",
"joinModeAny": "任一分支完成时完成",
"joinModeNone": "无同步"
"joinModeNone": "无同步",
"toolGemini": "Gemini",
"toolQwen": "Qwen",
"toolCodex": "Codex",
"modeAnalysis": "分析",
"modeWrite": "写入",
"modeReview": "审查",
"promptTypeOrganize": "组织",
"promptTypeRefine": "精炼",
"promptTypeSummarize": "总结",
"promptTypeTransform": "转换",
"promptTypeCustom": "自定义"
}
}
}