@geminilight/mindos 0.6.28 → 0.6.29

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.
Files changed (64) hide show
  1. package/app/app/api/a2a/agents/route.ts +9 -0
  2. package/app/app/api/a2a/delegations/route.ts +9 -0
  3. package/app/app/api/a2a/discover/route.ts +2 -0
  4. package/app/app/api/a2a/route.ts +6 -6
  5. package/app/app/api/acp/detect/route.ts +91 -0
  6. package/app/app/api/acp/registry/route.ts +31 -0
  7. package/app/app/api/acp/session/route.ts +55 -0
  8. package/app/app/layout.tsx +2 -0
  9. package/app/components/DirView.tsx +64 -2
  10. package/app/components/FileTree.tsx +19 -0
  11. package/app/components/GuideCard.tsx +7 -17
  12. package/app/components/MarkdownView.tsx +2 -0
  13. package/app/components/SearchModal.tsx +234 -80
  14. package/app/components/agents/AgentDetailContent.tsx +3 -5
  15. package/app/components/agents/AgentsContentPage.tsx +21 -6
  16. package/app/components/agents/AgentsPanelA2aTab.tsx +445 -0
  17. package/app/components/agents/SkillDetailPopover.tsx +4 -9
  18. package/app/components/agents/agents-content-model.ts +2 -2
  19. package/app/components/help/HelpContent.tsx +9 -9
  20. package/app/components/panels/AgentsPanel.tsx +1 -0
  21. package/app/components/panels/AgentsPanelAgentDetail.tsx +5 -8
  22. package/app/components/panels/AgentsPanelHubNav.tsx +8 -1
  23. package/app/components/panels/EchoPanel.tsx +5 -1
  24. package/app/components/panels/EchoSidebarStats.tsx +136 -0
  25. package/app/components/settings/KnowledgeTab.tsx +3 -6
  26. package/app/components/settings/McpSkillsSection.tsx +4 -5
  27. package/app/components/settings/McpTab.tsx +6 -8
  28. package/app/components/setup/StepSecurity.tsx +4 -5
  29. package/app/components/setup/index.tsx +5 -11
  30. package/app/components/ui/Toaster.tsx +39 -0
  31. package/app/hooks/useA2aRegistry.ts +6 -1
  32. package/app/hooks/useAcpDetection.ts +65 -0
  33. package/app/hooks/useAcpRegistry.ts +51 -0
  34. package/app/hooks/useDelegationHistory.ts +49 -0
  35. package/app/lib/a2a/client.ts +49 -5
  36. package/app/lib/a2a/orchestrator.ts +0 -1
  37. package/app/lib/a2a/task-handler.ts +4 -4
  38. package/app/lib/a2a/types.ts +15 -0
  39. package/app/lib/acp/acp-tools.ts +93 -0
  40. package/app/lib/acp/bridge.ts +138 -0
  41. package/app/lib/acp/index.ts +24 -0
  42. package/app/lib/acp/registry.ts +135 -0
  43. package/app/lib/acp/session.ts +264 -0
  44. package/app/lib/acp/subprocess.ts +209 -0
  45. package/app/lib/acp/types.ts +136 -0
  46. package/app/lib/agent/tools.ts +2 -1
  47. package/app/lib/i18n/_core.ts +22 -0
  48. package/app/lib/i18n/index.ts +35 -0
  49. package/app/lib/i18n/modules/ai-chat.ts +215 -0
  50. package/app/lib/i18n/modules/common.ts +71 -0
  51. package/app/lib/i18n/modules/features.ts +153 -0
  52. package/app/lib/i18n/modules/knowledge.ts +425 -0
  53. package/app/lib/i18n/modules/navigation.ts +151 -0
  54. package/app/lib/i18n/modules/onboarding.ts +523 -0
  55. package/app/lib/i18n/modules/panels.ts +1052 -0
  56. package/app/lib/i18n/modules/settings.ts +585 -0
  57. package/app/lib/i18n-en.ts +2 -1518
  58. package/app/lib/i18n-zh.ts +2 -1542
  59. package/app/lib/i18n.ts +3 -6
  60. package/app/lib/toast.ts +79 -0
  61. package/bin/cli.js +25 -25
  62. package/bin/commands/file.js +29 -2
  63. package/bin/commands/space.js +249 -91
  64. package/package.json +1 -1
@@ -0,0 +1,585 @@
1
+ // settings
2
+
3
+ export const settingsEn = {
4
+ settings: {
5
+ title: 'Settings',
6
+ tabs: { ai: 'AI', appearance: 'Appearance', knowledge: 'General', sync: 'Sync', mcp: 'MCP & Skills', plugins: 'Plugins', shortcuts: 'Shortcuts', monitoring: 'Monitoring', agents: 'Agents', update: 'Update', uninstall: 'Uninstall' },
7
+ ai: {
8
+ provider: 'Provider',
9
+ model: 'Model',
10
+ apiKey: 'API Key',
11
+ baseUrl: 'Base URL',
12
+ baseUrlHint: 'Optional. Use for proxies or OpenAI-compatible APIs.',
13
+ keyHint: 'Stored locally in ~/.mindos/config.json',
14
+ envHint: 'Fields marked env have a value from environment variables. You can override them here, or restore all to env defaults.',
15
+ envFieldNote: (key: string) => `Env var ${key} is set. Clear this field to fall back to it.`,
16
+ resetToEnv: 'Reset to env value',
17
+ restoreFromEnv: 'Restore from env',
18
+ noApiKey: 'API key is not set. AI features will be unavailable until you add one.',
19
+ testKey: 'Test',
20
+ testKeyTesting: 'Testing...',
21
+ testKeyOk: (ms: number) => `\u2713 ${ms}ms`,
22
+ testKeyAuthError: 'Invalid API key',
23
+ testKeyModelNotFound: 'Model not found',
24
+ testKeyRateLimited: 'Rate limited, try again later',
25
+ testKeyNetworkError: 'Network error',
26
+ testKeyNoKey: 'No API key configured',
27
+ testKeyUnknown: 'Test failed',
28
+ listModels: 'Browse',
29
+ noModelsFound: 'No models found',
30
+ },
31
+ agent: {
32
+ title: 'Agent Behavior',
33
+ maxSteps: 'Max Steps',
34
+ maxStepsHint: 'Maximum tool call steps per request (1-30)',
35
+ contextStrategy: 'Context Strategy',
36
+ contextStrategyHint: 'Auto: summarize early messages when context fills up. Off: no summarization (emergency pruning still applies).',
37
+ contextStrategyAuto: 'Auto (compact + prune)',
38
+ contextStrategyOff: 'Off',
39
+ thinking: 'Extended Thinking',
40
+ thinkingHint: "Show Claude's reasoning process (uses more tokens)",
41
+ thinkingBudget: 'Thinking Budget',
42
+ thinkingBudgetHint: 'Max tokens for reasoning (1000-50000)',
43
+ reconnectRetries: 'Auto Reconnect',
44
+ reconnectRetriesHint: 'When connection drops, automatically retry this many times before giving up (0 = disabled)',
45
+ },
46
+ appearance: {
47
+ readingFont: 'Reading font',
48
+ contentWidth: 'Content width',
49
+ colorTheme: 'Color theme',
50
+ system: 'System',
51
+ dark: 'Dark',
52
+ light: 'Light',
53
+ language: 'Language',
54
+ browserNote: 'Appearance settings are saved in your browser.',
55
+ fontPreview: 'The quick brown fox jumps over the lazy dog.',
56
+ },
57
+ knowledge: {
58
+ sopRoot: 'Knowledge base root',
59
+ sopRootHint: 'Absolute path to your notes directory. Requires server restart to take effect.',
60
+ sopRootEnvHint: (key: string) => `MIND_ROOT env var is set to "${key}". Fill in above to override it.`,
61
+ envNote: 'MIND_ROOT env var is set. Fill in above to override it — your value takes priority.',
62
+ webPassword: 'Web UI password',
63
+ webPasswordHint: 'Protect the browser UI with a password. Leave empty to disable. Changes take effect on next page load.',
64
+ webPasswordClear: 'Clear password',
65
+ authToken: 'MCP / API auth token',
66
+ authTokenHint: 'Bearer token for Agent and MCP clients. Not required for browser access.',
67
+ authTokenNone: 'No token set — API is open to all requests.',
68
+ authTokenCopy: 'Copy',
69
+ authTokenCopied: 'Copied!',
70
+ authTokenReset: 'Regenerate',
71
+ authTokenClear: 'Clear token',
72
+ authTokenResetConfirm: 'Regenerate token? All existing MCP clients will need to update their config.',
73
+ authTokenMcpPort: 'MCP port',
74
+ restartWalkthrough: 'Restart walkthrough',
75
+ showHiddenFiles: 'Show hidden files',
76
+ showHiddenFilesHint: 'Display dot-prefixed folders (.agents, .claude, .mindos, etc.) in the file tree.',
77
+ cleanupExamples: 'Clean up example files',
78
+ cleanupExamplesHint: 'Remove all template example files (🧪_example_*) from your knowledge base.',
79
+ cleanupExamplesButton: 'Clean up',
80
+ cleanupExamplesNone: 'No example files found',
81
+ cleanupExamplesConfirm: (n: number) => `Delete ${n} example file${n > 1 ? 's' : ''}? This cannot be undone.`,
82
+ cleanupExamplesDone: (n: number) => `Removed ${n} example file${n > 1 ? 's' : ''}`,
83
+ cleanupExamplesScanning: 'Scanning...',
84
+ },
85
+ sync: {
86
+ emptyTitle: 'Cross-device Sync',
87
+ emptyDesc: 'Automatically sync your knowledge base across devices via Git.',
88
+ featureAutoCommit: 'Auto-commit on save',
89
+ featureAutoPull: 'Auto-pull from remote',
90
+ featureConflict: 'Conflict detection',
91
+ featureMultiDevice: 'Works across devices',
92
+ remoteUrl: 'Git Remote URL',
93
+ invalidUrl: 'Invalid Git URL — use HTTPS (https://...) or SSH (git@...)',
94
+ sshHint: 'SSH URLs require SSH key configured on this machine. HTTPS with token recommended.',
95
+ accessToken: 'Access Token',
96
+ optional: '(optional, for private repos)',
97
+ tokenHint: 'GitHub: Settings → Developer settings → Personal access tokens → repo scope',
98
+ branchLabel: 'Branch',
99
+ connectButton: 'Connect & Start Sync',
100
+ connecting: 'Connecting...',
101
+ },
102
+ plugins: {
103
+ title: 'Installed Renderers',
104
+ builtinBadge: 'built-in',
105
+ enabled: 'Enabled',
106
+ disabled: 'Disabled',
107
+ matchHint: 'Auto-activates on',
108
+ coreHint: 'Core renderer — always enabled',
109
+ noPlugins: 'No renderers installed.',
110
+ comingSoon: 'Plugin marketplace coming soon.',
111
+ },
112
+ mcp: {
113
+ serverTitle: 'MindOS MCP Server',
114
+ status: 'Status',
115
+ running: 'Running',
116
+ stopped: 'Stopped',
117
+ transport: 'Transport',
118
+ endpoint: 'Endpoint',
119
+ tools: 'Tools',
120
+ toolsRegistered: (n: number) => `${n} registered`,
121
+ auth: 'Auth',
122
+ authSet: 'Token set',
123
+ authNotSet: 'No token',
124
+ copyEndpoint: 'Copy Endpoint',
125
+ copyConfig: 'Copy Config',
126
+ copied: 'Copied!',
127
+ agentsTitle: 'Agent Configuration',
128
+ agent: 'Agent',
129
+ scope: 'Scope',
130
+ project: 'Project',
131
+ global: 'Global',
132
+ installed: 'Installed',
133
+ notInstalled: 'Not installed',
134
+ detected: 'Detected',
135
+ notFound: 'Not found',
136
+ transportStdio: 'stdio (recommended)',
137
+ transportHttp: 'http',
138
+ transportAuto: 'auto (recommended)',
139
+ httpUrl: 'MCP URL',
140
+ httpToken: 'Auth Token',
141
+ installSelected: 'Install Selected',
142
+ installing: 'Installing...',
143
+ installSuccess: (n: number) => `${n} agent(s) configured`,
144
+ installFailed: 'Install failed',
145
+ portLabel: 'MCP Port',
146
+ portHint: 'Changes require server restart',
147
+ skillsTitle: 'Skills',
148
+ skillAutoLoaded: 'Auto-loaded on every request',
149
+ skillSource: 'Source',
150
+ skillBuiltin: 'Built-in',
151
+ skillUser: 'Custom',
152
+ addSkill: '+ Add Skill',
153
+ cliInstallHint: 'Install via CLI:',
154
+ skillPathHint: 'Skill files installed at:',
155
+ deleteSkill: 'Delete',
156
+ editSkill: 'Edit',
157
+ saveSkill: 'Save',
158
+ cancelSkill: 'Cancel',
159
+ skillName: 'Name',
160
+ skillDesc: 'Description',
161
+ skillContent: 'Content',
162
+ skillNameConflict: 'A skill with this name already exists',
163
+ skillDeleteConfirm: (name: string) => `Delete skill "${name}"? This cannot be undone.`,
164
+ skillLanguage: 'Skill Language',
165
+ skillLangEn: 'English',
166
+ skillLangZh: '中文',
167
+ searchSkills: 'Search skills...',
168
+ customGroup: 'Custom',
169
+ builtinGroup: 'Built-in',
170
+ noSkillsMatch: (query: string) => `No skills match "${query}"`,
171
+ skillTemplate: 'Template',
172
+ skillTemplateGeneral: 'General',
173
+ skillTemplateToolUse: 'Tool-use',
174
+ skillTemplateWorkflow: 'Workflow',
175
+ selectDetected: 'Select Detected',
176
+ clearSelection: 'Clear',
177
+ quickSetup: 'Quick Setup',
178
+ configureFor: 'Configure for',
179
+ configPath: 'Config path',
180
+ transportLocal: 'Local',
181
+ transportRemote: 'Remote',
182
+ transportLocalHint: 'Local — same machine as MindOS server',
183
+ transportRemoteHint: 'Remote — connect from another device via HTTP',
184
+ remoteDetectedHint: 'Using your current remote IP.',
185
+ remoteManualHint: 'Replace 127.0.0.1 with your server\'s public or LAN IP.',
186
+ remoteSteps: 'To connect from another device: ① Open port {port} in firewall/security group ② Use the config below in your Agent ③ For public networks, consider SSH tunnel for encryption.',
187
+ noAuthWarning: '⚠ No auth token — set one in Settings → General before enabling remote access.',
188
+ showJson: 'Show JSON',
189
+ hideJson: 'Hide JSON',
190
+ },
191
+ monitoring: {
192
+ system: 'System',
193
+ heapMemory: 'Heap Memory',
194
+ rss: 'RSS',
195
+ uptime: 'Uptime',
196
+ nodeVersion: 'Node',
197
+ application: 'Application',
198
+ requests: 'Requests',
199
+ toolCalls: 'Tool Calls',
200
+ avgResponse: 'Avg Response',
201
+ tokens: 'Tokens',
202
+ errors: 'Errors',
203
+ knowledgeBase: 'Knowledge Base',
204
+ files: 'Files',
205
+ totalSize: 'Total Size',
206
+ rootPath: 'Root',
207
+ mcpStatus: 'Status',
208
+ mcpRunning: 'Running',
209
+ mcpStopped: 'Stopped',
210
+ mcpPort: 'Port',
211
+ autoRefresh: 'Auto-refresh every 5s',
212
+ fetchError: 'Failed to load monitoring data',
213
+ },
214
+ agents: {
215
+ mcpServer: 'MCP Server',
216
+ running: 'Running',
217
+ stopped: 'Not running',
218
+ restarting: 'Restarting...',
219
+ restart: 'Restart',
220
+ onPort: (port: number) => `on :${port}`,
221
+ refresh: 'Refresh',
222
+ refreshing: 'Refreshing...',
223
+ connected: 'Connected',
224
+ connectedCount: (n: number) => `Connected (${n})`,
225
+ detectedNotConfigured: 'Detected but not configured',
226
+ detectedCount: (n: number) => `Detected but not configured (${n})`,
227
+ notDetected: 'Not Detected',
228
+ notDetectedCount: (n: number) => `Not Detected (${n})`,
229
+ showAll: 'Show all',
230
+ hideAll: 'Hide',
231
+ connect: 'Connect',
232
+ noAgents: 'No agents detected on this machine.',
233
+ fetchError: 'Failed to load agent data',
234
+ autoRefresh: 'Auto-refresh every 30s',
235
+ },
236
+ save: 'Save',
237
+ saved: 'Saved',
238
+ saveFailed: 'Save failed',
239
+ reconfigure: 'Reconfigure',
240
+ askDisplayMode: {
241
+ label: 'Display Mode',
242
+ hint: 'Side panel stays docked on the right. Popup opens a floating dialog.',
243
+ panel: 'Side Panel',
244
+ popup: 'Popup',
245
+ },
246
+ update: {
247
+ checking: 'Checking for updates...',
248
+ upToDate: "You're up to date",
249
+ available: (current: string, latest: string) => `Update available: v${current} → v${latest}`,
250
+ updating: 'Updating MindOS... The server will restart shortly.',
251
+ updatingHint: 'This may take 1–3 minutes. Do not close this page.',
252
+ serverRestarting: 'Server is restarting, please wait...',
253
+ updated: 'Updated successfully! Reloading...',
254
+ timeout: 'Update may still be in progress.',
255
+ timeoutHint: 'The server may need more time to rebuild. Try refreshing.',
256
+ refreshButton: 'Refresh Page',
257
+ retryButton: 'Retry Update',
258
+ error: 'Failed to check for updates. Check your network connection.',
259
+ checkButton: 'Check for Updates',
260
+ updateButton: (version: string) => `Update to v${version}`,
261
+ releaseNotes: 'View release notes',
262
+ hint: 'Updates are installed via npm. Equivalent to running',
263
+ inTerminal: 'in your terminal.',
264
+ desktopDownloading: 'Downloading update...',
265
+ desktopReady: 'Update downloaded. Restart to apply.',
266
+ desktopRestart: 'Restart Now',
267
+ desktopHint: 'Updates are delivered through the Desktop app auto-updater.',
268
+ },
269
+ uninstall: {
270
+ title: 'Uninstall MindOS',
271
+ descCli: 'Remove MindOS CLI, background services, and configuration files from this machine.',
272
+ descDesktop: 'Remove MindOS Desktop, background services, and configuration files from this machine.',
273
+ warning: 'Select what to clean up. Your knowledge base files are always kept safe.',
274
+ stopServices: 'Stop services & remove daemon',
275
+ stopServicesDesc: 'Stop all running MindOS processes and remove the background daemon.',
276
+ removeConfig: 'Remove configuration',
277
+ removeConfigDesc: 'Delete ~/.mindos/ directory (config, logs, PID files).',
278
+ removeNpm: 'Uninstall CLI package',
279
+ removeNpmDesc: 'Run npm uninstall -g @geminilight/mindos.',
280
+ removeApp: 'Move Desktop app to Trash',
281
+ removeAppDesc: 'Move MindOS.app to Trash. You can restore it later if needed.',
282
+ confirmTitle: 'Confirm Uninstall',
283
+ confirmButton: 'Uninstall',
284
+ cancelButton: 'Cancel',
285
+ running: 'Uninstalling...',
286
+ success: 'MindOS has been uninstalled.',
287
+ successDesktop: 'MindOS has been uninstalled. The app will quit now.',
288
+ error: 'Uninstall failed. You can run `mindos uninstall` in terminal manually.',
289
+ nothingSelected: 'Select at least one item to uninstall.',
290
+ kbSafe: 'Your knowledge base files are always safe — they are never deleted by this action.',
291
+ },
292
+ },
293
+ } as const;
294
+
295
+ export const settingsZh = {
296
+ settings: {
297
+ title: '设置',
298
+ tabs: { ai: 'AI', appearance: '外观', knowledge: '通用', sync: '同步', mcp: 'MCP & Skills', plugins: '插件', shortcuts: '快捷键', monitoring: '监控', agents: 'Agents', update: '更新', uninstall: '卸载' },
299
+ ai: {
300
+ provider: '服务商',
301
+ model: '模型',
302
+ apiKey: 'API 密钥',
303
+ baseUrl: '接口地址',
304
+ baseUrlHint: '可选。用于代理或 OpenAI 兼容 API。',
305
+ keyHint: '本地存储于 ~/.mindos/config.json',
306
+ envHint: '标有 env 的字段存在环境变量值。你可以在此覆盖,或一键恢复为环境变量默认值。',
307
+ envFieldNote: (key: string) => `环境变量 ${key} 已设置。清空此字段将回退到环境变量值。`,
308
+ resetToEnv: '恢复为环境变量',
309
+ restoreFromEnv: '从环境变量恢复',
310
+ noApiKey: 'API 密钥未设置,AI 功能暂不可用,请在此填写。',
311
+ testKey: '测试',
312
+ testKeyTesting: '测试中...',
313
+ testKeyOk: (ms: number) => `\u2713 ${ms}ms`,
314
+ testKeyAuthError: 'API Key 无效',
315
+ testKeyModelNotFound: '模型不存在',
316
+ testKeyRateLimited: '请求频率限制,稍后重试',
317
+ testKeyNetworkError: '网络错误',
318
+ testKeyNoKey: '未配置 API Key',
319
+ testKeyUnknown: '测试失败',
320
+ listModels: '选择模型',
321
+ noModelsFound: '未找到可用模型',
322
+ },
323
+ agent: {
324
+ title: 'Agent 行为',
325
+ maxSteps: '最大步数',
326
+ maxStepsHint: '每次请求的最大工具调用步数(1-30)',
327
+ contextStrategy: '上下文策略',
328
+ contextStrategyHint: '自动:上下文填满时摘要早期消息。关闭:不进行摘要(紧急裁剪仍会生效)。',
329
+ contextStrategyAuto: '自动(压缩 + 裁剪)',
330
+ contextStrategyOff: '关闭',
331
+ thinking: '深度思考',
332
+ thinkingHint: '显示 Claude 的推理过程(消耗更多 token)',
333
+ thinkingBudget: '思考预算',
334
+ thinkingBudgetHint: '推理最大 token 数(1000-50000)',
335
+ reconnectRetries: '自动重连',
336
+ reconnectRetriesHint: '连接断开时自动重试次数,重试耗尽后停止(0 = 关闭)',
337
+ },
338
+ appearance: {
339
+ readingFont: '正文字体',
340
+ contentWidth: '内容宽度',
341
+ colorTheme: '颜色主题',
342
+ system: '系统',
343
+ dark: '深色',
344
+ light: '浅色',
345
+ language: '语言',
346
+ browserNote: '外观设置保存在浏览器本地。',
347
+ fontPreview: '人之初,性本善;性相近,习相远。',
348
+ },
349
+ knowledge: {
350
+ sopRoot: '知识库根目录',
351
+ sopRootHint: '笔记目录的绝对路径,修改后需要重启服务器。',
352
+ sopRootEnvHint: (key: string) => `MIND_ROOT 环境变量已设置为 "${key}",填写上方路径可覆盖它。`,
353
+ envNote: 'MIND_ROOT 环境变量已设置。填写上方路径后,你的值优先生效。',
354
+ webPassword: '网页访问密码',
355
+ webPasswordHint: '设置后访问浏览器 UI 需要登录,留空则关闭密码保护。下次刷新页面后生效。',
356
+ webPasswordClear: '清除密码',
357
+ authToken: 'MCP / API 访问令牌',
358
+ authTokenHint: 'Agent 和 MCP 客户端使用的 Bearer Token,浏览器访问无需此项。',
359
+ authTokenNone: '未设置令牌 — API 对所有请求开放。',
360
+ authTokenCopy: '复制',
361
+ authTokenCopied: '已复制!',
362
+ authTokenReset: '重新生成',
363
+ authTokenClear: '清除令牌',
364
+ authTokenResetConfirm: '重新生成令牌?所有 MCP 客户端配置都需要更新。',
365
+ authTokenMcpPort: 'MCP 端口',
366
+ restartWalkthrough: '重新开始引导',
367
+ showHiddenFiles: '显示隐藏文件',
368
+ showHiddenFilesHint: '在文件树中显示以 . 开头的文件夹(.agents、.claude、.mindos 等)。',
369
+ cleanupExamples: '清理示例文件',
370
+ cleanupExamplesHint: '移除知识库中所有模板示例文件(🧪_example_*)。',
371
+ cleanupExamplesButton: '清理',
372
+ cleanupExamplesNone: '没有找到示例文件',
373
+ cleanupExamplesConfirm: (n: number) => `删除 ${n} 个示例文件?此操作不可撤销。`,
374
+ cleanupExamplesDone: (n: number) => `已移除 ${n} 个示例文件`,
375
+ cleanupExamplesScanning: '扫描中...',
376
+ },
377
+ sync: {
378
+ emptyTitle: '跨设备同步',
379
+ emptyDesc: '通过 Git 自动同步知识库到所有设备。',
380
+ featureAutoCommit: '保存时自动提交',
381
+ featureAutoPull: '自动拉取远程更新',
382
+ featureConflict: '冲突检测',
383
+ featureMultiDevice: '多设备同步',
384
+ remoteUrl: 'Git 远程仓库 URL',
385
+ invalidUrl: '无效的 Git URL — 请使用 HTTPS (https://...) 或 SSH (git@...) 格式',
386
+ sshHint: 'SSH URL 需要在本机配置 SSH 密钥。推荐使用 HTTPS + Token。',
387
+ accessToken: '访问令牌',
388
+ optional: '(可选,私有仓库需要)',
389
+ tokenHint: 'GitHub: Settings → Developer settings → Personal access tokens → repo scope',
390
+ branchLabel: '分支',
391
+ connectButton: '连接并开始同步',
392
+ connecting: '连接中...',
393
+ },
394
+ plugins: {
395
+ title: '已安装渲染器',
396
+ builtinBadge: '内置',
397
+ enabled: '已启用',
398
+ disabled: '已禁用',
399
+ matchHint: '自动匹配',
400
+ coreHint: '核心渲染器 — 始终启用',
401
+ noPlugins: '暂无渲染器。',
402
+ comingSoon: '插件市场即将上线。',
403
+ },
404
+ mcp: {
405
+ serverTitle: 'MindOS MCP 服务',
406
+ status: '状态',
407
+ running: '运行中',
408
+ stopped: '已停止',
409
+ transport: '传输方式',
410
+ endpoint: '端点',
411
+ tools: '工具',
412
+ toolsRegistered: (n: number) => `已注册 ${n} 个`,
413
+ auth: '认证',
414
+ authSet: '已设置 Token',
415
+ authNotSet: '未设置',
416
+ copyEndpoint: '复制端点',
417
+ copyConfig: '复制配置',
418
+ copied: '已复制!',
419
+ agentsTitle: 'Agent 配置',
420
+ agent: 'Agent',
421
+ scope: '范围',
422
+ project: '项目',
423
+ global: '全局',
424
+ installed: '已安装',
425
+ notInstalled: '未安装',
426
+ detected: '已检测',
427
+ notFound: '未找到',
428
+ transportStdio: 'stdio(推荐)',
429
+ transportHttp: 'http',
430
+ transportAuto: '自动(推荐)',
431
+ httpUrl: 'MCP URL',
432
+ httpToken: '认证 Token',
433
+ installSelected: '安装选中',
434
+ installing: '安装中...',
435
+ installSuccess: (n: number) => `已配置 ${n} 个 agent`,
436
+ installFailed: '安装失败',
437
+ portLabel: 'MCP 端口',
438
+ portHint: '修改后需重启服务',
439
+ skillsTitle: 'Skills',
440
+ skillAutoLoaded: '每次请求自动加载',
441
+ skillSource: '来源',
442
+ skillBuiltin: '内置',
443
+ skillUser: '自定义',
444
+ addSkill: '+ 添加 Skill',
445
+ cliInstallHint: '通过命令行安装:',
446
+ skillPathHint: 'Skill 文件安装路径:',
447
+ deleteSkill: '删除',
448
+ editSkill: '编辑',
449
+ saveSkill: '保存',
450
+ cancelSkill: '取消',
451
+ skillName: '名称',
452
+ skillDesc: '描述',
453
+ skillContent: '内容',
454
+ skillNameConflict: '同名 skill 已存在',
455
+ skillDeleteConfirm: (name: string) => `确定删除「${name}」?此操作不可撤销。`,
456
+ skillLanguage: 'Skill 语言',
457
+ skillLangEn: 'English',
458
+ skillLangZh: '中文',
459
+ searchSkills: '搜索 Skill...',
460
+ customGroup: '自定义',
461
+ builtinGroup: '内置',
462
+ noSkillsMatch: (query: string) => `没有匹配「${query}」的 Skill`,
463
+ skillTemplate: '模板',
464
+ skillTemplateGeneral: '通用',
465
+ skillTemplateToolUse: '工具调用',
466
+ skillTemplateWorkflow: '工作流',
467
+ selectDetected: '选择已检测',
468
+ clearSelection: '清除',
469
+ quickSetup: '快速配置',
470
+ configureFor: '配置目标',
471
+ configPath: '配置路径',
472
+ transportLocal: '本地',
473
+ transportRemote: '远程',
474
+ transportLocalHint: '本地 — 与 MindOS 服务在同一台机器上',
475
+ transportRemoteHint: '远程 — 从其他设备通过 HTTP 连接',
476
+ remoteDetectedHint: '使用当前远程 IP。',
477
+ remoteManualHint: '将 127.0.0.1 替换为服务器的公网或局域网 IP。',
478
+ remoteSteps: '从其他设备连接:① 在防火墙/安全组中开放端口 {port} ② 将下方配置粘贴到 Agent 中 ③ 公网环境建议使用 SSH 隧道加密传输。',
479
+ noAuthWarning: '⚠ 未设置认证令牌 — 请先在 设置 → 通用 中配置,再启用远程访问。',
480
+ showJson: '显示 JSON',
481
+ hideJson: '隐藏 JSON',
482
+ },
483
+ monitoring: {
484
+ system: '系统',
485
+ heapMemory: '堆内存',
486
+ rss: 'RSS',
487
+ uptime: '运行时间',
488
+ nodeVersion: 'Node',
489
+ application: '应用',
490
+ requests: '请求数',
491
+ toolCalls: '工具调用',
492
+ avgResponse: '平均响应',
493
+ tokens: 'Token',
494
+ errors: '错误',
495
+ knowledgeBase: '知识库',
496
+ files: '文件数',
497
+ totalSize: '总大小',
498
+ rootPath: '根目录',
499
+ mcpStatus: '状态',
500
+ mcpRunning: '运行中',
501
+ mcpStopped: '已停止',
502
+ mcpPort: '端口',
503
+ autoRefresh: '每 5 秒自动刷新',
504
+ fetchError: '加载监控数据失败',
505
+ },
506
+ agents: {
507
+ mcpServer: 'MCP 服务器',
508
+ running: '运行中',
509
+ stopped: '未运行',
510
+ restarting: '重启中...',
511
+ restart: '重启',
512
+ onPort: (port: number) => `端口 :${port}`,
513
+ refresh: '刷新',
514
+ refreshing: '刷新中...',
515
+ connected: '已连接',
516
+ connectedCount: (n: number) => `已连接 (${n})`,
517
+ detectedNotConfigured: '已检测未配置',
518
+ detectedCount: (n: number) => `已检测未配置 (${n})`,
519
+ notDetected: '未检测到',
520
+ notDetectedCount: (n: number) => `未检测到 (${n})`,
521
+ showAll: '显示全部',
522
+ hideAll: '收起',
523
+ connect: '连接',
524
+ noAgents: '本机未检测到任何 Agent。',
525
+ fetchError: '加载 Agent 数据失败',
526
+ autoRefresh: '每 30 秒自动刷新',
527
+ },
528
+ save: '保存',
529
+ saved: '已保存',
530
+ saveFailed: '保存失败',
531
+ reconfigure: '重新配置',
532
+ askDisplayMode: {
533
+ label: '显示模式',
534
+ hint: '侧面板固定在右侧;弹窗以浮动对话框形式打开。',
535
+ panel: '侧面板',
536
+ popup: '弹窗',
537
+ },
538
+ update: {
539
+ checking: '正在检查更新...',
540
+ upToDate: '已是最新版本',
541
+ available: (current: string, latest: string) => `有新版本可用:v${current} → v${latest}`,
542
+ updating: '正在更新 MindOS,服务器即将重启...',
543
+ updatingHint: '预计 1–3 分钟,请勿关闭此页面。',
544
+ serverRestarting: '服务正在重启,请稍候...',
545
+ updated: '更新成功!正在刷新...',
546
+ timeout: '更新可能仍在进行中。',
547
+ timeoutHint: '服务器可能需要更多时间重新构建,请尝试刷新页面。',
548
+ refreshButton: '刷新页面',
549
+ retryButton: '重试更新',
550
+ error: '检查更新失败,请检查网络连接。',
551
+ checkButton: '检查更新',
552
+ updateButton: (version: string) => `更新到 v${version}`,
553
+ releaseNotes: '查看更新日志',
554
+ hint: '更新通过 npm 安装,等同于在终端运行',
555
+ inTerminal: '。',
556
+ desktopDownloading: '正在下载更新...',
557
+ desktopReady: '更新已下载,重启后生效。',
558
+ desktopRestart: '立即重启',
559
+ desktopHint: '更新通过桌面端自动更新推送。',
560
+ },
561
+ uninstall: {
562
+ title: '卸载 MindOS',
563
+ descCli: '从本机移除 MindOS CLI、后台服务和配置文件。',
564
+ descDesktop: '从本机移除 MindOS Desktop、后台服务和配置文件。',
565
+ warning: '选择要清理的内容。你的知识库文件始终是安全的。',
566
+ stopServices: '停止服务并移除守护进程',
567
+ stopServicesDesc: '停止所有运行中的 MindOS 进程并移除后台守护进程。',
568
+ removeConfig: '移除配置',
569
+ removeConfigDesc: '删除 ~/.mindos/ 目录(配置、日志、PID 文件)。',
570
+ removeNpm: '卸载 CLI 包',
571
+ removeNpmDesc: '执行 npm uninstall -g @geminilight/mindos。',
572
+ removeApp: '将 Desktop 移入废纸篓',
573
+ removeAppDesc: '将 MindOS.app 移入废纸篓,之后可以恢复。',
574
+ confirmTitle: '确认卸载',
575
+ confirmButton: '卸载',
576
+ cancelButton: '取消',
577
+ running: '正在卸载...',
578
+ success: 'MindOS 已卸载。',
579
+ successDesktop: 'MindOS 已卸载,应用即将退出。',
580
+ error: '卸载失败,可在终端手动运行 `mindos uninstall`。',
581
+ nothingSelected: '请至少选择一项要卸载的内容。',
582
+ kbSafe: '你的知识库文件始终是安全的——此操作绝不会删除它们。',
583
+ },
584
+ },
585
+ };