@geminilight/mindos 0.5.20 → 0.5.21
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/app/app/api/ask/route.ts +308 -172
- package/app/components/SettingsModal.tsx +52 -58
- package/app/components/settings/AiTab.tsx +4 -25
- package/app/components/settings/AppearanceTab.tsx +31 -13
- package/app/components/settings/KnowledgeTab.tsx +13 -28
- package/app/components/settings/McpAgentInstall.tsx +227 -0
- package/app/components/settings/McpServerStatus.tsx +172 -0
- package/app/components/settings/McpSkillsSection.tsx +583 -0
- package/app/components/settings/McpTab.tsx +17 -959
- package/app/components/settings/PluginsTab.tsx +4 -27
- package/app/components/settings/Primitives.tsx +69 -0
- package/app/components/settings/ShortcutsTab.tsx +2 -4
- package/app/components/settings/SyncTab.tsx +8 -24
- package/app/components/settings/types.ts +116 -2
- package/app/lib/agent/context.ts +151 -87
- package/app/lib/agent/index.ts +4 -3
- package/app/lib/agent/model.ts +76 -10
- package/app/lib/agent/stream-consumer.ts +73 -77
- package/app/lib/agent/to-agent-messages.ts +106 -0
- package/app/lib/agent/tools.ts +260 -266
- package/app/lib/i18n-en.ts +480 -0
- package/app/lib/i18n-zh.ts +505 -0
- package/app/lib/i18n.ts +4 -963
- package/app/next-env.d.ts +1 -1
- package/app/package-lock.json +3258 -3093
- package/app/package.json +6 -3
- package/bin/cli.js +7 -4
- package/package.json +4 -1
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
export const en = {
|
|
2
|
+
common: {
|
|
3
|
+
relatedFiles: 'Related Files',
|
|
4
|
+
},
|
|
5
|
+
app: {
|
|
6
|
+
tagline: 'Personal knowledge OS — browse, edit, and query your second brain.',
|
|
7
|
+
footer: 'MindOS · personal knowledge OS',
|
|
8
|
+
},
|
|
9
|
+
home: {
|
|
10
|
+
recentlyModified: 'Recently Modified',
|
|
11
|
+
continueEditing: 'Continue editing',
|
|
12
|
+
newNote: 'New Notes',
|
|
13
|
+
plugins: 'Plugins',
|
|
14
|
+
showMore: 'Show more',
|
|
15
|
+
showLess: 'Show less',
|
|
16
|
+
createToActivate: 'Create {file} to activate',
|
|
17
|
+
shortcuts: {
|
|
18
|
+
searchFiles: 'Search files',
|
|
19
|
+
askAI: 'Ask AI',
|
|
20
|
+
editFile: 'Edit file',
|
|
21
|
+
save: 'Save',
|
|
22
|
+
settings: 'Settings',
|
|
23
|
+
},
|
|
24
|
+
relativeTime: {
|
|
25
|
+
justNow: 'just now',
|
|
26
|
+
minutesAgo: (n: number) => `${n}m ago`,
|
|
27
|
+
hoursAgo: (n: number) => `${n}h ago`,
|
|
28
|
+
daysAgo: (n: number) => `${n}d ago`,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
sidebar: {
|
|
32
|
+
searchTitle: 'Search (⌘K)',
|
|
33
|
+
askTitle: 'Ask AI (⌘/)',
|
|
34
|
+
settingsTitle: 'Settings (⌘,)',
|
|
35
|
+
collapseTitle: 'Collapse sidebar',
|
|
36
|
+
expandTitle: 'Expand sidebar',
|
|
37
|
+
sync: {
|
|
38
|
+
synced: 'Synced',
|
|
39
|
+
unpushed: 'awaiting push',
|
|
40
|
+
unpushedHint: 'commit(s) not yet pushed to remote — will sync automatically',
|
|
41
|
+
conflicts: 'conflicts',
|
|
42
|
+
conflictsHint: 'file(s) have merge conflicts — open Settings > Sync to resolve',
|
|
43
|
+
syncError: 'Sync error',
|
|
44
|
+
syncOff: 'Sync off',
|
|
45
|
+
syncing: 'Syncing...',
|
|
46
|
+
syncNow: 'Sync now',
|
|
47
|
+
syncDone: 'Sync complete',
|
|
48
|
+
syncFailed: 'Sync failed',
|
|
49
|
+
syncRestored: 'Sync restored',
|
|
50
|
+
enableSync: 'Enable sync',
|
|
51
|
+
enableHint: 'Set up cross-device sync',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
search: {
|
|
55
|
+
placeholder: 'Search files...',
|
|
56
|
+
noResults: 'No results found',
|
|
57
|
+
prompt: 'Type to search across all files',
|
|
58
|
+
navigate: 'navigate',
|
|
59
|
+
open: 'open',
|
|
60
|
+
close: 'close',
|
|
61
|
+
},
|
|
62
|
+
ask: {
|
|
63
|
+
title: 'MindOS Agent',
|
|
64
|
+
placeholder: 'Ask a question... or type @ to attach a file',
|
|
65
|
+
emptyPrompt: 'Ask anything about your knowledge base',
|
|
66
|
+
send: 'send',
|
|
67
|
+
attachFile: 'attach file',
|
|
68
|
+
attachCurrent: 'attach current file',
|
|
69
|
+
stopTitle: 'Stop',
|
|
70
|
+
connecting: 'Thinking with your mind...',
|
|
71
|
+
thinking: 'Thinking...',
|
|
72
|
+
thinkingLabel: 'Thinking',
|
|
73
|
+
searching: 'Searching knowledge base...',
|
|
74
|
+
generating: 'Generating response...',
|
|
75
|
+
stopped: 'Generation stopped.',
|
|
76
|
+
errorNoResponse: 'No response from AI. Please check your API key and provider settings.',
|
|
77
|
+
suggestions: [
|
|
78
|
+
'Summarize this document',
|
|
79
|
+
'List all action items and TODOs',
|
|
80
|
+
'What are the key points?',
|
|
81
|
+
'Find related notes on this topic',
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
fileTree: {
|
|
85
|
+
newFileTitle: 'New file in this directory',
|
|
86
|
+
rename: 'Rename',
|
|
87
|
+
delete: 'Delete',
|
|
88
|
+
create: 'Create',
|
|
89
|
+
enterFileName: 'Enter a file name',
|
|
90
|
+
failed: 'Failed',
|
|
91
|
+
confirmDelete: (name: string) => `Delete "${name}"? This cannot be undone.`,
|
|
92
|
+
},
|
|
93
|
+
dirView: {
|
|
94
|
+
gridView: 'Grid view',
|
|
95
|
+
listView: 'List view',
|
|
96
|
+
emptyFolder: 'This folder is empty.',
|
|
97
|
+
fileCount: (n: number) => `${n} files`,
|
|
98
|
+
newFile: 'New file',
|
|
99
|
+
},
|
|
100
|
+
findInPage: {
|
|
101
|
+
placeholder: 'Find in document…',
|
|
102
|
+
matchCount: (current: number, total: number) => `${current} of ${total}`,
|
|
103
|
+
noResults: 'No results',
|
|
104
|
+
},
|
|
105
|
+
settings: {
|
|
106
|
+
title: 'Settings',
|
|
107
|
+
tabs: { ai: 'AI', appearance: 'Appearance', knowledge: 'Knowledge Base', sync: 'Sync', mcp: 'MCP', plugins: 'Plugins', shortcuts: 'Shortcuts' },
|
|
108
|
+
ai: {
|
|
109
|
+
provider: 'Provider',
|
|
110
|
+
model: 'Model',
|
|
111
|
+
apiKey: 'API Key',
|
|
112
|
+
baseUrl: 'Base URL',
|
|
113
|
+
baseUrlHint: 'Optional. Use for proxies or OpenAI-compatible APIs.',
|
|
114
|
+
keyHint: 'Stored locally in ~/.mindos/config.json',
|
|
115
|
+
envHint: 'Fields marked env have a value from environment variables. You can override them here, or restore all to env defaults.',
|
|
116
|
+
envFieldNote: (key: string) => `Env var ${key} is set. Clear this field to fall back to it.`,
|
|
117
|
+
resetToEnv: 'Reset to env value',
|
|
118
|
+
restoreFromEnv: 'Restore from env',
|
|
119
|
+
noApiKey: 'API key is not set. AI features will be unavailable until you add one.',
|
|
120
|
+
testKey: 'Test',
|
|
121
|
+
testKeyTesting: 'Testing...',
|
|
122
|
+
testKeyOk: (ms: number) => `\u2713 ${ms}ms`,
|
|
123
|
+
testKeyAuthError: 'Invalid API key',
|
|
124
|
+
testKeyModelNotFound: 'Model not found',
|
|
125
|
+
testKeyRateLimited: 'Rate limited, try again later',
|
|
126
|
+
testKeyNetworkError: 'Network error',
|
|
127
|
+
testKeyNoKey: 'No API key configured',
|
|
128
|
+
testKeyUnknown: 'Test failed',
|
|
129
|
+
},
|
|
130
|
+
agent: {
|
|
131
|
+
title: 'Agent Behavior',
|
|
132
|
+
maxSteps: 'Max Steps',
|
|
133
|
+
maxStepsHint: 'Maximum tool call steps per request (1-30)',
|
|
134
|
+
contextStrategy: 'Context Strategy',
|
|
135
|
+
contextStrategyHint: 'Auto: summarize early messages when context fills up. Off: no summarization (emergency pruning still applies).',
|
|
136
|
+
contextStrategyAuto: 'Auto (compact + prune)',
|
|
137
|
+
contextStrategyOff: 'Off',
|
|
138
|
+
thinking: 'Extended Thinking',
|
|
139
|
+
thinkingHint: "Show Claude's reasoning process (uses more tokens)",
|
|
140
|
+
thinkingBudget: 'Thinking Budget',
|
|
141
|
+
thinkingBudgetHint: 'Max tokens for reasoning (1000-50000)',
|
|
142
|
+
},
|
|
143
|
+
appearance: {
|
|
144
|
+
readingFont: 'Reading font',
|
|
145
|
+
contentWidth: 'Content width',
|
|
146
|
+
colorTheme: 'Color theme',
|
|
147
|
+
dark: 'Dark',
|
|
148
|
+
light: 'Light',
|
|
149
|
+
language: 'Language',
|
|
150
|
+
browserNote: 'Appearance settings are saved in your browser.',
|
|
151
|
+
fontPreview: 'The quick brown fox jumps over the lazy dog.',
|
|
152
|
+
},
|
|
153
|
+
knowledge: {
|
|
154
|
+
sopRoot: 'Knowledge base root',
|
|
155
|
+
sopRootHint: 'Absolute path to your notes directory. Requires server restart to take effect.',
|
|
156
|
+
sopRootEnvHint: (key: string) => `MIND_ROOT env var is set to "${key}". Fill in above to override it.`,
|
|
157
|
+
envNote: 'MIND_ROOT env var is set. Fill in above to override it — your value takes priority.',
|
|
158
|
+
webPassword: 'Web UI password',
|
|
159
|
+
webPasswordHint: 'Protect the browser UI with a password. Leave empty to disable. Changes take effect on next page load.',
|
|
160
|
+
webPasswordClear: 'Clear password',
|
|
161
|
+
authToken: 'MCP / API auth token',
|
|
162
|
+
authTokenHint: 'Bearer token for Agent and MCP clients. Not required for browser access.',
|
|
163
|
+
authTokenNone: 'No token set — API is open to all requests.',
|
|
164
|
+
authTokenCopy: 'Copy',
|
|
165
|
+
authTokenCopied: 'Copied!',
|
|
166
|
+
authTokenReset: 'Regenerate',
|
|
167
|
+
authTokenClear: 'Clear token',
|
|
168
|
+
authTokenResetConfirm: 'Regenerate token? All existing MCP clients will need to update their config.',
|
|
169
|
+
authTokenMcpPort: 'MCP port',
|
|
170
|
+
},
|
|
171
|
+
sync: {
|
|
172
|
+
emptyTitle: 'Cross-device Sync',
|
|
173
|
+
emptyDesc: 'Automatically sync your knowledge base across devices via Git.',
|
|
174
|
+
featureAutoCommit: 'Auto-commit on save',
|
|
175
|
+
featureAutoPull: 'Auto-pull from remote',
|
|
176
|
+
featureConflict: 'Conflict detection',
|
|
177
|
+
featureMultiDevice: 'Works across devices',
|
|
178
|
+
remoteUrl: 'Git Remote URL',
|
|
179
|
+
invalidUrl: 'Invalid Git URL — use HTTPS (https://...) or SSH (git@...)',
|
|
180
|
+
sshHint: 'SSH URLs require SSH key configured on this machine. HTTPS with token recommended.',
|
|
181
|
+
accessToken: 'Access Token',
|
|
182
|
+
optional: '(optional, for private repos)',
|
|
183
|
+
tokenHint: 'GitHub: Settings → Developer settings → Personal access tokens → repo scope',
|
|
184
|
+
branchLabel: 'Branch',
|
|
185
|
+
connectButton: 'Connect & Start Sync',
|
|
186
|
+
connecting: 'Connecting...',
|
|
187
|
+
},
|
|
188
|
+
plugins: {
|
|
189
|
+
title: 'Installed Renderers',
|
|
190
|
+
builtinBadge: 'built-in',
|
|
191
|
+
enabled: 'Enabled',
|
|
192
|
+
disabled: 'Disabled',
|
|
193
|
+
matchHint: 'Auto-activates on',
|
|
194
|
+
coreHint: 'Core renderer — always enabled',
|
|
195
|
+
noPlugins: 'No renderers installed.',
|
|
196
|
+
comingSoon: 'Plugin marketplace coming soon.',
|
|
197
|
+
},
|
|
198
|
+
mcp: {
|
|
199
|
+
serverTitle: 'MindOS MCP Server',
|
|
200
|
+
status: 'Status',
|
|
201
|
+
running: 'Running',
|
|
202
|
+
stopped: 'Stopped',
|
|
203
|
+
transport: 'Transport',
|
|
204
|
+
endpoint: 'Endpoint',
|
|
205
|
+
tools: 'Tools',
|
|
206
|
+
toolsRegistered: (n: number) => `${n} registered`,
|
|
207
|
+
auth: 'Auth',
|
|
208
|
+
authSet: 'Token set',
|
|
209
|
+
authNotSet: 'No token',
|
|
210
|
+
copyEndpoint: 'Copy Endpoint',
|
|
211
|
+
copyConfig: 'Copy Config',
|
|
212
|
+
copied: 'Copied!',
|
|
213
|
+
agentsTitle: 'Agent Configuration',
|
|
214
|
+
agent: 'Agent',
|
|
215
|
+
scope: 'Scope',
|
|
216
|
+
project: 'Project',
|
|
217
|
+
global: 'Global',
|
|
218
|
+
installed: 'Installed',
|
|
219
|
+
notInstalled: 'Not installed',
|
|
220
|
+
detected: 'Detected',
|
|
221
|
+
notFound: 'Not found',
|
|
222
|
+
transportStdio: 'stdio (recommended)',
|
|
223
|
+
transportHttp: 'http',
|
|
224
|
+
transportAuto: 'auto (recommended)',
|
|
225
|
+
httpUrl: 'MCP URL',
|
|
226
|
+
httpToken: 'Auth Token',
|
|
227
|
+
installSelected: 'Install Selected',
|
|
228
|
+
installing: 'Installing...',
|
|
229
|
+
installSuccess: (n: number) => `${n} agent(s) configured`,
|
|
230
|
+
installFailed: 'Install failed',
|
|
231
|
+
portLabel: 'MCP Port',
|
|
232
|
+
portHint: 'Changes require server restart',
|
|
233
|
+
skillsTitle: 'Skills',
|
|
234
|
+
skillAutoLoaded: 'Auto-loaded on every request',
|
|
235
|
+
skillSource: 'Source',
|
|
236
|
+
skillBuiltin: 'Built-in',
|
|
237
|
+
skillUser: 'Custom',
|
|
238
|
+
addSkill: '+ Add Skill',
|
|
239
|
+
deleteSkill: 'Delete',
|
|
240
|
+
editSkill: 'Edit',
|
|
241
|
+
saveSkill: 'Save',
|
|
242
|
+
cancelSkill: 'Cancel',
|
|
243
|
+
skillName: 'Name',
|
|
244
|
+
skillDesc: 'Description',
|
|
245
|
+
skillContent: 'Content',
|
|
246
|
+
skillNameConflict: 'A skill with this name already exists',
|
|
247
|
+
skillDeleteConfirm: (name: string) => `Delete skill "${name}"? This cannot be undone.`,
|
|
248
|
+
skillLanguage: 'Skill Language',
|
|
249
|
+
skillLangEn: 'English',
|
|
250
|
+
skillLangZh: '中文',
|
|
251
|
+
searchSkills: 'Search skills...',
|
|
252
|
+
customGroup: 'Custom',
|
|
253
|
+
builtinGroup: 'Built-in',
|
|
254
|
+
noSkillsMatch: (query: string) => `No skills match "${query}"`,
|
|
255
|
+
skillTemplate: 'Template',
|
|
256
|
+
skillTemplateGeneral: 'General',
|
|
257
|
+
skillTemplateToolUse: 'Tool-use',
|
|
258
|
+
skillTemplateWorkflow: 'Workflow',
|
|
259
|
+
selectDetected: 'Select Detected',
|
|
260
|
+
clearSelection: 'Clear',
|
|
261
|
+
quickSetup: 'Quick Setup',
|
|
262
|
+
configureFor: 'Configure for',
|
|
263
|
+
configPath: 'Config path',
|
|
264
|
+
},
|
|
265
|
+
save: 'Save',
|
|
266
|
+
saved: 'Saved',
|
|
267
|
+
saveFailed: 'Save failed',
|
|
268
|
+
reconfigure: 'Reconfigure',
|
|
269
|
+
},
|
|
270
|
+
onboarding: {
|
|
271
|
+
subtitle: 'Your knowledge base is empty. Pick a starter template to get going.',
|
|
272
|
+
templates: {
|
|
273
|
+
en: { title: 'English', desc: 'Pre-built structure with Profile, Notes, Projects, and more.' },
|
|
274
|
+
zh: { title: '中文', desc: '预置画像、笔记、项目等中文目录结构。' },
|
|
275
|
+
empty: { title: 'Empty', desc: 'Just the essentials — README, CONFIG, and INSTRUCTION.' },
|
|
276
|
+
},
|
|
277
|
+
importHint: 'Already have notes? Set MIND_ROOT to your existing directory in Settings.',
|
|
278
|
+
syncHint: 'Want cross-device sync? Run',
|
|
279
|
+
syncHintSuffix: 'in the terminal after setup.',
|
|
280
|
+
},
|
|
281
|
+
shortcuts: [
|
|
282
|
+
{ keys: ['⌘', 'K'], description: 'Search' },
|
|
283
|
+
{ keys: ['⌘', '/'], description: 'Ask AI' },
|
|
284
|
+
{ keys: ['⌘', ','], description: 'Settings' },
|
|
285
|
+
{ keys: ['E'], description: 'Edit current file' },
|
|
286
|
+
{ keys: ['⌘', 'S'], description: 'Save' },
|
|
287
|
+
{ keys: ['Esc'], description: 'Cancel edit / close modal' },
|
|
288
|
+
{ keys: ['@'], description: 'Attach file in Ask AI' },
|
|
289
|
+
],
|
|
290
|
+
login: {
|
|
291
|
+
tagline: 'You think here, Agents act there.',
|
|
292
|
+
subtitle: 'Enter your password to continue',
|
|
293
|
+
passwordLabel: 'Password',
|
|
294
|
+
passwordPlaceholder: 'Enter password',
|
|
295
|
+
signIn: 'Sign in',
|
|
296
|
+
signingIn: 'Signing in…',
|
|
297
|
+
incorrectPassword: 'Incorrect password. Please try again.',
|
|
298
|
+
connectionError: 'Connection error. Please try again.',
|
|
299
|
+
},
|
|
300
|
+
notFound: {
|
|
301
|
+
title: 'File not found',
|
|
302
|
+
description: 'This file does not exist in your knowledge base.',
|
|
303
|
+
createButton: 'Create this file',
|
|
304
|
+
creating: 'Creating...',
|
|
305
|
+
goToParent: 'Go to parent folder',
|
|
306
|
+
goHome: 'Home',
|
|
307
|
+
},
|
|
308
|
+
updateBanner: {
|
|
309
|
+
newVersion: (latest: string, current: string) => `MindOS v${latest} available (current: v${current})`,
|
|
310
|
+
runUpdate: 'Run',
|
|
311
|
+
orSee: 'or',
|
|
312
|
+
releaseNotes: 'view release notes',
|
|
313
|
+
},
|
|
314
|
+
setup: {
|
|
315
|
+
stepTitles: ['Knowledge Base', 'AI Provider', 'Ports', 'Security', 'Agent Tools', 'Review'],
|
|
316
|
+
// Step 1
|
|
317
|
+
kbPath: 'Knowledge base path',
|
|
318
|
+
kbPathHint: 'Absolute path to your notes directory.',
|
|
319
|
+
kbPathDefault: '~/MindOS/mind',
|
|
320
|
+
kbPathUseDefault: (path: string) => `Use ${path}`,
|
|
321
|
+
kbPathHasFiles: (n: number) => `This directory already contains ${n} file${n > 1 ? 's' : ''}. You can skip the template or merge (existing files won't be overwritten).`,
|
|
322
|
+
kbTemplateSkip: 'Skip template',
|
|
323
|
+
kbTemplateMerge: 'Choose a template to merge',
|
|
324
|
+
template: 'Starter template',
|
|
325
|
+
templateSkip: 'Skip (directory already has files)',
|
|
326
|
+
// Step 2
|
|
327
|
+
aiProvider: 'AI Provider',
|
|
328
|
+
aiProviderHint: 'Choose your preferred AI service.',
|
|
329
|
+
aiSkip: 'Skip — configure later',
|
|
330
|
+
apiKey: 'API Key',
|
|
331
|
+
apiKeyExisting: 'Existing key configured. Leave blank to keep it.',
|
|
332
|
+
model: 'Model',
|
|
333
|
+
baseUrl: 'Base URL',
|
|
334
|
+
baseUrlHint: 'Optional. For proxies or OpenAI-compatible APIs.',
|
|
335
|
+
// Step 3
|
|
336
|
+
webPort: 'Web UI port',
|
|
337
|
+
mcpPort: 'MCP server port',
|
|
338
|
+
portHint: 'Valid range: 1024–65535',
|
|
339
|
+
portRestartWarning: 'The service will start on these ports after setup completes.',
|
|
340
|
+
portInUse: (p: number) => `Port ${p} is already in use.`,
|
|
341
|
+
portSuggest: (p: number) => `Use ${p}`,
|
|
342
|
+
portChecking: 'Checking…',
|
|
343
|
+
portSelf: 'Current port',
|
|
344
|
+
portConflict: 'Web UI and MCP ports must be different.',
|
|
345
|
+
portVerifyHint: 'Click outside each field to verify, or wait for auto-check.',
|
|
346
|
+
// Step 4
|
|
347
|
+
authToken: 'Auth Token',
|
|
348
|
+
authTokenHint: 'Bearer token for MCP / API clients. Auto-generated.',
|
|
349
|
+
authTokenUsage: 'Used for MCP connections and API clients. When configuring an Agent, this token is written automatically — no manual steps needed.',
|
|
350
|
+
authTokenUsageWhat: 'What is this?',
|
|
351
|
+
authTokenSeed: 'Custom seed (optional)',
|
|
352
|
+
authTokenSeedHint: 'Enter a passphrase to derive a deterministic token.',
|
|
353
|
+
generateToken: 'Generate',
|
|
354
|
+
copyToken: 'Copy',
|
|
355
|
+
copiedToken: 'Copied!',
|
|
356
|
+
webPassword: 'Web UI Password',
|
|
357
|
+
webPasswordHint: 'Optional. Protect browser access with a password.',
|
|
358
|
+
// Step 5 — Agent Tools
|
|
359
|
+
agentToolsTitle: 'Agent Tools',
|
|
360
|
+
agentToolsHint: 'Select AI agents to configure with MindOS MCP. Agents marked "not installed" can be configured now — they will work once you install the app.',
|
|
361
|
+
agentTransport: 'Transport',
|
|
362
|
+
agentScope: 'Scope',
|
|
363
|
+
agentToolsLoading: 'Loading agents…',
|
|
364
|
+
agentToolsEmpty: 'No supported agents detected.',
|
|
365
|
+
agentNoneSelected: 'No agents selected — you can configure later in Settings → MCP.',
|
|
366
|
+
agentSkipLater: 'Skip — install agents later in Settings > MCP',
|
|
367
|
+
agentSelectDetected: 'Select detected agents',
|
|
368
|
+
agentNoneDetected: 'No agents detected on your system.',
|
|
369
|
+
agentShowMore: (n: number) => `Show ${n} more agents`,
|
|
370
|
+
agentAdvanced: 'Advanced options',
|
|
371
|
+
agentScopeGlobal: 'Install for all projects',
|
|
372
|
+
agentScopeProject: 'This project only',
|
|
373
|
+
badgeInstalled: 'Installed',
|
|
374
|
+
badgeDetected: 'Detected',
|
|
375
|
+
badgeNotFound: 'Not found',
|
|
376
|
+
agentNotInstalled: 'not installed',
|
|
377
|
+
agentDetected: 'detected',
|
|
378
|
+
agentNotFound: 'not found',
|
|
379
|
+
agentStatusOk: 'configured',
|
|
380
|
+
agentStatusError: 'failed',
|
|
381
|
+
agentInstalling: 'Configuring…',
|
|
382
|
+
agentTransportAuto: 'Auto (recommended)',
|
|
383
|
+
agentTransportLabel: 'Transport',
|
|
384
|
+
agentVerified: 'verified',
|
|
385
|
+
agentUnverified: 'unverified',
|
|
386
|
+
agentVerifyNote: 'stdio agents are verified after restart',
|
|
387
|
+
// Skill auto-install
|
|
388
|
+
skillWhat: 'Skills teach AI agents how to use your knowledge base — like instructions for reading, writing, and organizing your notes.',
|
|
389
|
+
skillAutoHint: (name: string) => `Based on your template, the "${name}" skill will be installed to selected agents.`,
|
|
390
|
+
skillLabel: 'Skill',
|
|
391
|
+
skillInstalling: 'Installing skill…',
|
|
392
|
+
skillInstalled: 'Skill installed',
|
|
393
|
+
skillFailed: 'Skill install failed',
|
|
394
|
+
// Step 2 — AI skip card
|
|
395
|
+
aiSkipTitle: 'Skip for now',
|
|
396
|
+
aiSkipDesc: 'You can add an API key later in Settings → AI.',
|
|
397
|
+
// Step 6 — Review
|
|
398
|
+
reviewHint: 'Verify your settings, then press Complete Setup.',
|
|
399
|
+
reviewInstallResults: 'Agent configuration results:',
|
|
400
|
+
phaseSaving: 'Saving configuration…',
|
|
401
|
+
phaseAgents: 'Configuring agents…',
|
|
402
|
+
phaseSkill: 'Installing skill…',
|
|
403
|
+
phaseDone: 'Setup complete!',
|
|
404
|
+
retryAgent: 'Retry',
|
|
405
|
+
agentFailedCount: (n: number) => `${n} agent${n > 1 ? 's' : ''} failed`,
|
|
406
|
+
agentCountSummary: (n: number) => `${n} agent${n > 1 ? 's' : ''}`,
|
|
407
|
+
agentFailureNote: 'Agent failures are non-blocking — you can enter MindOS and retry from Settings → MCP.',
|
|
408
|
+
portAvailable: 'Available',
|
|
409
|
+
portChanged: 'Port changed — please restart the server for it to take effect.',
|
|
410
|
+
restartRequired: 'Server restart required for these changes to take effect.',
|
|
411
|
+
restartNow: 'Restart now',
|
|
412
|
+
restarting: 'Restarting…',
|
|
413
|
+
restartDone: 'Server is restarting. Redirecting shortly…',
|
|
414
|
+
restartManual: 'Restart manually:',
|
|
415
|
+
// Buttons
|
|
416
|
+
back: 'Back',
|
|
417
|
+
next: 'Next',
|
|
418
|
+
complete: 'Complete Setup',
|
|
419
|
+
skip: 'Skip',
|
|
420
|
+
// Status
|
|
421
|
+
completing: 'Saving...',
|
|
422
|
+
completeDone: 'Setup complete!',
|
|
423
|
+
completeFailed: 'Setup failed. Please try again.',
|
|
424
|
+
// Welcome banner (shown after first onboard)
|
|
425
|
+
welcomeTitle: 'Welcome to MindOS!',
|
|
426
|
+
welcomeDesc: 'Setup is complete. Start by asking AI a question, browsing your knowledge base, or configuring MCP agents.',
|
|
427
|
+
welcomeLinkReconfigure: 'Reconfigure',
|
|
428
|
+
welcomeLinkAskAI: 'Ask AI',
|
|
429
|
+
welcomeLinkMCP: 'MCP Settings',
|
|
430
|
+
},
|
|
431
|
+
guide: {
|
|
432
|
+
title: 'Get Started with MindOS',
|
|
433
|
+
showGuide: 'Show getting started guide',
|
|
434
|
+
close: 'Close',
|
|
435
|
+
skip: 'Skip',
|
|
436
|
+
kb: {
|
|
437
|
+
title: 'Explore your knowledge base',
|
|
438
|
+
cta: 'Start',
|
|
439
|
+
fullDesc: 'Your knowledge base has 6 areas — try clicking one:',
|
|
440
|
+
dirs: {
|
|
441
|
+
profile: 'Who you are, preferences, goals',
|
|
442
|
+
notes: 'Daily capture: ideas, meetings, todos',
|
|
443
|
+
connections: 'Your network of people',
|
|
444
|
+
workflows: 'Reusable process SOPs',
|
|
445
|
+
resources: 'Structured data: product lists, tool lists',
|
|
446
|
+
projects: 'Project plans and progress',
|
|
447
|
+
},
|
|
448
|
+
instructionHint: 'Click INSTRUCTION.md to see how AI agents behave.',
|
|
449
|
+
emptyDesc: 'Your knowledge base has 3 core files:',
|
|
450
|
+
emptyFiles: {
|
|
451
|
+
instruction: 'INSTRUCTION.md — Rules that all AI agents follow',
|
|
452
|
+
readme: 'README.md — Directory index and navigation',
|
|
453
|
+
config: 'CONFIG.json — Machine-readable preferences',
|
|
454
|
+
},
|
|
455
|
+
emptyHint: 'Create your own folder structure anytime.',
|
|
456
|
+
progress: (n: number) => `Browsed ${n}/1 file`,
|
|
457
|
+
done: 'Done',
|
|
458
|
+
},
|
|
459
|
+
ai: {
|
|
460
|
+
title: 'Chat with AI',
|
|
461
|
+
cta: 'Start',
|
|
462
|
+
prompt: 'Read my knowledge base and help me write a self-introduction into Profile.',
|
|
463
|
+
promptEmpty: 'Help me design a knowledge base folder structure that fits my needs',
|
|
464
|
+
},
|
|
465
|
+
sync: {
|
|
466
|
+
title: 'Set up sync',
|
|
467
|
+
optional: 'Optional',
|
|
468
|
+
cta: 'Configure',
|
|
469
|
+
},
|
|
470
|
+
done: {
|
|
471
|
+
title: "You're all set!",
|
|
472
|
+
titleFinal: "You've mastered MindOS essentials!",
|
|
473
|
+
steps: [
|
|
474
|
+
{ hint: 'Next: try saving an article →', prompt: 'Help me save the key points from this article into MindOS.' },
|
|
475
|
+
{ hint: 'Next: try using your KB in another Agent →', prompt: 'Help me start coding based on the plan in MindOS.' },
|
|
476
|
+
{ hint: 'Next: try turning experience into a reusable SOP →', prompt: 'Help me distill this conversation into a reusable workflow in MindOS.' },
|
|
477
|
+
],
|
|
478
|
+
},
|
|
479
|
+
},
|
|
480
|
+
} as const;
|