@geminilight/mindos 0.5.27 → 0.5.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.
- package/app/app/api/update/route.ts +41 -0
- package/app/app/explore/page.tsx +12 -0
- package/app/components/ActivityBar.tsx +14 -7
- package/app/components/GuideCard.tsx +21 -7
- package/app/components/HomeContent.tsx +12 -1
- package/app/components/KeyboardShortcuts.tsx +102 -0
- package/app/components/Panel.tsx +12 -7
- package/app/components/SidebarLayout.tsx +18 -1
- package/app/components/UpdateBanner.tsx +19 -21
- package/app/components/explore/ExploreContent.tsx +100 -0
- package/app/components/explore/UseCaseCard.tsx +50 -0
- package/app/components/explore/use-cases.ts +30 -0
- package/app/components/panels/AgentsPanel.tsx +86 -95
- package/app/components/panels/PluginsPanel.tsx +9 -6
- package/app/components/settings/AiTab.tsx +5 -3
- package/app/components/settings/McpServerStatus.tsx +12 -6
- package/app/components/settings/SettingsContent.tsx +5 -2
- package/app/components/settings/UpdateTab.tsx +195 -0
- package/app/components/settings/types.ts +1 -1
- package/app/components/walkthrough/WalkthroughOverlay.tsx +224 -0
- package/app/components/walkthrough/WalkthroughProvider.tsx +133 -0
- package/app/components/walkthrough/WalkthroughTooltip.tsx +129 -0
- package/app/components/walkthrough/index.ts +3 -0
- package/app/components/walkthrough/steps.ts +21 -0
- package/app/lib/i18n-en.ts +168 -8
- package/app/lib/i18n-zh.ts +167 -7
- package/app/lib/settings.ts +4 -0
- package/app/next.config.ts +1 -1
- package/app/package.json +1 -0
- package/bin/lib/mcp-spawn.js +13 -2
- package/mcp/src/index.ts +3 -2
- package/package.json +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Walkthrough step anchors — these data-walkthrough attributes are added to target components */
|
|
2
|
+
export type WalkthroughAnchor =
|
|
3
|
+
| 'activity-bar'
|
|
4
|
+
| 'files-panel'
|
|
5
|
+
| 'ask-button'
|
|
6
|
+
| 'search-button'
|
|
7
|
+
| 'settings-button';
|
|
8
|
+
|
|
9
|
+
export interface WalkthroughStep {
|
|
10
|
+
anchor: WalkthroughAnchor;
|
|
11
|
+
/** Preferred tooltip position relative to anchor */
|
|
12
|
+
position: 'right' | 'bottom';
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const walkthroughSteps: WalkthroughStep[] = [
|
|
16
|
+
{ anchor: 'activity-bar', position: 'right' },
|
|
17
|
+
{ anchor: 'files-panel', position: 'right' },
|
|
18
|
+
{ anchor: 'ask-button', position: 'right' },
|
|
19
|
+
{ anchor: 'search-button', position: 'right' },
|
|
20
|
+
{ anchor: 'settings-button', position: 'right' },
|
|
21
|
+
];
|
package/app/lib/i18n-en.ts
CHANGED
|
@@ -29,11 +29,18 @@ export const en = {
|
|
|
29
29
|
},
|
|
30
30
|
},
|
|
31
31
|
sidebar: {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
files: 'Files',
|
|
33
|
+
search: 'Search',
|
|
34
|
+
searchTitle: 'Search',
|
|
35
|
+
askTitle: 'MindOS Agent',
|
|
36
|
+
settingsTitle: 'Settings',
|
|
37
|
+
plugins: 'Plugins',
|
|
38
|
+
agents: 'Agents',
|
|
39
|
+
syncLabel: 'Sync',
|
|
35
40
|
collapseTitle: 'Collapse sidebar',
|
|
36
41
|
expandTitle: 'Expand sidebar',
|
|
42
|
+
collapseLevel: 'Collapse one level',
|
|
43
|
+
expandLevel: 'Expand one level',
|
|
37
44
|
sync: {
|
|
38
45
|
synced: 'Synced',
|
|
39
46
|
unpushed: 'awaiting push',
|
|
@@ -81,6 +88,48 @@ export const en = {
|
|
|
81
88
|
'Find related notes on this topic',
|
|
82
89
|
],
|
|
83
90
|
},
|
|
91
|
+
panels: {
|
|
92
|
+
agents: {
|
|
93
|
+
title: 'Agents',
|
|
94
|
+
connected: 'connected',
|
|
95
|
+
refresh: 'Refresh agent status',
|
|
96
|
+
retry: 'Retry',
|
|
97
|
+
failedToLoad: 'Failed to load agents',
|
|
98
|
+
mcpServer: 'MCP Server',
|
|
99
|
+
stopped: 'Stopped',
|
|
100
|
+
sectionConnected: 'Connected',
|
|
101
|
+
sectionDetected: 'Detected',
|
|
102
|
+
sectionNotDetected: 'Not Detected',
|
|
103
|
+
noAgents: 'No agents detected.',
|
|
104
|
+
autoRefresh: 'Auto-refresh every 30s',
|
|
105
|
+
connect: 'Connect',
|
|
106
|
+
installing: 'Installing...',
|
|
107
|
+
install: (name: string) => `Install ${name}`,
|
|
108
|
+
},
|
|
109
|
+
plugins: {
|
|
110
|
+
title: 'Plugins',
|
|
111
|
+
active: 'active',
|
|
112
|
+
noPlugins: 'No plugins registered',
|
|
113
|
+
core: 'Core',
|
|
114
|
+
coreDisabled: 'Core plugin — cannot be disabled',
|
|
115
|
+
footer: 'Plugins customize how files render. Core plugins cannot be disabled.',
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
shortcutPanel: {
|
|
119
|
+
title: 'Keyboard Shortcuts',
|
|
120
|
+
navigation: 'Navigation',
|
|
121
|
+
panelsSection: 'Panels',
|
|
122
|
+
editor: 'Editor',
|
|
123
|
+
toggleSearch: 'Toggle Search',
|
|
124
|
+
toggleAskAI: 'Toggle Ask AI',
|
|
125
|
+
openSettings: 'Open Settings',
|
|
126
|
+
keyboardShortcuts: 'Keyboard Shortcuts',
|
|
127
|
+
closePanel: 'Close panel / Exit maximize',
|
|
128
|
+
saveFile: 'Save file',
|
|
129
|
+
undo: 'Undo',
|
|
130
|
+
redo: 'Redo',
|
|
131
|
+
toggleHint: 'to toggle this panel',
|
|
132
|
+
},
|
|
84
133
|
fileTree: {
|
|
85
134
|
newFileTitle: 'New file in this directory',
|
|
86
135
|
rename: 'Rename',
|
|
@@ -104,7 +153,7 @@ export const en = {
|
|
|
104
153
|
},
|
|
105
154
|
settings: {
|
|
106
155
|
title: 'Settings',
|
|
107
|
-
tabs: { ai: 'AI', appearance: 'Appearance', knowledge: 'General', sync: 'Sync', mcp: 'MCP & Skills', plugins: 'Plugins', shortcuts: 'Shortcuts', monitoring: 'Monitoring', agents: 'Agents' },
|
|
156
|
+
tabs: { ai: 'AI', appearance: 'Appearance', knowledge: 'General', sync: 'Sync', mcp: 'MCP & Skills', plugins: 'Plugins', shortcuts: 'Shortcuts', monitoring: 'Monitoring', agents: 'Agents', update: 'Update' },
|
|
108
157
|
ai: {
|
|
109
158
|
provider: 'Provider',
|
|
110
159
|
model: 'Model',
|
|
@@ -265,9 +314,10 @@ export const en = {
|
|
|
265
314
|
transportRemote: 'Remote',
|
|
266
315
|
transportLocalHint: 'Local — same machine as MindOS server',
|
|
267
316
|
transportRemoteHint: 'Remote — connect from another device via HTTP',
|
|
268
|
-
remoteDetectedHint: '
|
|
269
|
-
remoteManualHint: '
|
|
270
|
-
|
|
317
|
+
remoteDetectedHint: 'Using your current remote IP.',
|
|
318
|
+
remoteManualHint: 'Replace 127.0.0.1 with your server\'s public or LAN IP.',
|
|
319
|
+
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.',
|
|
320
|
+
noAuthWarning: '⚠ No auth token — set one in Settings → General before enabling remote access.',
|
|
271
321
|
showJson: 'Show JSON',
|
|
272
322
|
hideJson: 'Hide JSON',
|
|
273
323
|
},
|
|
@@ -318,6 +368,28 @@ export const en = {
|
|
|
318
368
|
saved: 'Saved',
|
|
319
369
|
saveFailed: 'Save failed',
|
|
320
370
|
reconfigure: 'Reconfigure',
|
|
371
|
+
askDisplayMode: {
|
|
372
|
+
label: 'Display Mode',
|
|
373
|
+
hint: 'Side panel stays docked on the right. Popup opens a floating dialog.',
|
|
374
|
+
panel: 'Side Panel',
|
|
375
|
+
popup: 'Popup',
|
|
376
|
+
},
|
|
377
|
+
update: {
|
|
378
|
+
checking: 'Checking for updates...',
|
|
379
|
+
upToDate: "You're up to date",
|
|
380
|
+
available: (current: string, latest: string) => `Update available: v${current} → v${latest}`,
|
|
381
|
+
updating: 'Updating MindOS... The server will restart shortly.',
|
|
382
|
+
updatingHint: 'This may take 1–3 minutes. Do not close this page.',
|
|
383
|
+
updated: 'Updated successfully! Reloading...',
|
|
384
|
+
timeout: 'Update may still be in progress.',
|
|
385
|
+
timeoutHint: 'Check your terminal:',
|
|
386
|
+
error: 'Failed to check for updates. Check your network connection.',
|
|
387
|
+
checkButton: 'Check for Updates',
|
|
388
|
+
updateButton: (version: string) => `Update to v${version}`,
|
|
389
|
+
releaseNotes: 'View release notes',
|
|
390
|
+
hint: 'Updates are installed via npm. Equivalent to running',
|
|
391
|
+
inTerminal: 'in your terminal.',
|
|
392
|
+
},
|
|
321
393
|
},
|
|
322
394
|
onboarding: {
|
|
323
395
|
subtitle: 'Your knowledge base is empty. Pick a starter template to get going.',
|
|
@@ -359,9 +431,10 @@ export const en = {
|
|
|
359
431
|
},
|
|
360
432
|
updateBanner: {
|
|
361
433
|
newVersion: (latest: string, current: string) => `MindOS v${latest} available (current: v${current})`,
|
|
434
|
+
updateNow: 'Update',
|
|
362
435
|
runUpdate: 'Run',
|
|
363
436
|
orSee: 'or',
|
|
364
|
-
releaseNotes: '
|
|
437
|
+
releaseNotes: 'release notes',
|
|
365
438
|
},
|
|
366
439
|
setup: {
|
|
367
440
|
stepTitles: ['Knowledge Base', 'AI Provider', 'Ports', 'Security', 'Agent Tools', 'Review'],
|
|
@@ -529,4 +602,91 @@ export const en = {
|
|
|
529
602
|
],
|
|
530
603
|
},
|
|
531
604
|
},
|
|
605
|
+
explore: {
|
|
606
|
+
title: 'Explore Use Cases',
|
|
607
|
+
subtitle: 'Discover what you can do with MindOS — pick a scenario and try it now.',
|
|
608
|
+
tryIt: 'Try it',
|
|
609
|
+
categories: {
|
|
610
|
+
'getting-started': 'Getting Started',
|
|
611
|
+
'cross-agent': 'Cross-Agent',
|
|
612
|
+
'knowledge-evolution': 'Knowledge Evolution',
|
|
613
|
+
'advanced': 'Advanced',
|
|
614
|
+
},
|
|
615
|
+
all: 'All',
|
|
616
|
+
c1: {
|
|
617
|
+
title: 'Inject Your Identity',
|
|
618
|
+
desc: 'Tell all AI agents who you are — preferences, tech stack, communication style — in one shot.',
|
|
619
|
+
prompt: 'Read my MindOS knowledge base and help me write a self-introduction into Profile.',
|
|
620
|
+
},
|
|
621
|
+
c2: {
|
|
622
|
+
title: 'Save Information',
|
|
623
|
+
desc: 'Archive articles, meeting notes, or web pages into your knowledge base with one prompt.',
|
|
624
|
+
prompt: 'Help me save the key points from this article into MindOS.',
|
|
625
|
+
},
|
|
626
|
+
c3: {
|
|
627
|
+
title: 'Cross-Agent Handoff',
|
|
628
|
+
desc: 'Start a plan in MindOS, continue coding in Claude Code, refine in Cursor — zero context loss.',
|
|
629
|
+
prompt: 'Help me start coding based on the plan in MindOS.',
|
|
630
|
+
},
|
|
631
|
+
c4: {
|
|
632
|
+
title: 'Experience → SOP',
|
|
633
|
+
desc: 'Turn hard-won debugging sessions into reusable workflows that prevent future mistakes.',
|
|
634
|
+
prompt: 'Help me distill this conversation into a reusable workflow in MindOS.',
|
|
635
|
+
},
|
|
636
|
+
c5: {
|
|
637
|
+
title: 'Capture Ideas on the Go',
|
|
638
|
+
desc: 'Jot down an inspiration on your phone — MindOS archives, decomposes, and assigns to agents.',
|
|
639
|
+
prompt: 'Help me organize this idea into MindOS and break it into actionable sub-tasks.',
|
|
640
|
+
},
|
|
641
|
+
c6: {
|
|
642
|
+
title: 'Project Cold Start',
|
|
643
|
+
desc: 'Spin up a new project in 4 minutes — your profile and SOPs guide the scaffolding automatically.',
|
|
644
|
+
prompt: 'Help me start a new project following the Startup SOP in MindOS.',
|
|
645
|
+
},
|
|
646
|
+
c7: {
|
|
647
|
+
title: 'Research & Archive',
|
|
648
|
+
desc: 'Let agents research competitors or topics for you, then file structured results in your KB.',
|
|
649
|
+
prompt: 'Help me research X, Y, Z products and save results to the MindOS product library.',
|
|
650
|
+
},
|
|
651
|
+
c8: {
|
|
652
|
+
title: 'Network Management',
|
|
653
|
+
desc: 'Log conversations with contacts, auto-generate follow-up TODOs, and keep full context.',
|
|
654
|
+
prompt: 'I met with someone today — update MindOS Connections and create follow-up TODOs.',
|
|
655
|
+
},
|
|
656
|
+
c9: {
|
|
657
|
+
title: 'Audit & Correct',
|
|
658
|
+
desc: 'Review what agents know about you, fix mistakes in one place, and all agents update instantly.',
|
|
659
|
+
prompt: 'Check my MindOS Profile for accuracy and correct any errors.',
|
|
660
|
+
},
|
|
661
|
+
},
|
|
662
|
+
walkthrough: {
|
|
663
|
+
step: (current: number, total: number) => `${current} of ${total}`,
|
|
664
|
+
next: 'Next',
|
|
665
|
+
back: 'Back',
|
|
666
|
+
skip: 'Skip tour',
|
|
667
|
+
done: 'Done',
|
|
668
|
+
exploreCta: 'Explore what you can do →',
|
|
669
|
+
steps: [
|
|
670
|
+
{
|
|
671
|
+
title: 'Navigation',
|
|
672
|
+
body: 'This is your Activity Bar — switch between Files, Search, Plugins, and Agents from here.',
|
|
673
|
+
},
|
|
674
|
+
{
|
|
675
|
+
title: 'Your Knowledge Base',
|
|
676
|
+
body: 'Browse and organize your notes, profiles, and projects in the file panel.',
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
title: 'Ask AI',
|
|
680
|
+
body: 'Chat with an AI that knows your entire knowledge base. Press ⌘/ anytime.',
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
title: 'Quick Search',
|
|
684
|
+
body: 'Find any file instantly with ⌘K — search across all your notes.',
|
|
685
|
+
},
|
|
686
|
+
{
|
|
687
|
+
title: 'Settings',
|
|
688
|
+
body: 'Configure AI providers, MCP connections, sync, and appearance here.',
|
|
689
|
+
},
|
|
690
|
+
],
|
|
691
|
+
},
|
|
532
692
|
} as const;
|
package/app/lib/i18n-zh.ts
CHANGED
|
@@ -54,11 +54,18 @@ export const zh = {
|
|
|
54
54
|
},
|
|
55
55
|
},
|
|
56
56
|
sidebar: {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
files: '文件',
|
|
58
|
+
search: '搜索',
|
|
59
|
+
searchTitle: '搜索',
|
|
60
|
+
askTitle: 'MindOS Agent',
|
|
61
|
+
settingsTitle: '设置',
|
|
62
|
+
plugins: '插件',
|
|
63
|
+
agents: '智能体',
|
|
64
|
+
syncLabel: '同步',
|
|
60
65
|
collapseTitle: '收起侧栏',
|
|
61
66
|
expandTitle: '展开侧栏',
|
|
67
|
+
collapseLevel: '折叠一级',
|
|
68
|
+
expandLevel: '展开一级',
|
|
62
69
|
sync: {
|
|
63
70
|
synced: '已同步',
|
|
64
71
|
unpushed: '待推送',
|
|
@@ -106,6 +113,48 @@ export const zh = {
|
|
|
106
113
|
'查找与这个主题相关的笔记',
|
|
107
114
|
],
|
|
108
115
|
},
|
|
116
|
+
panels: {
|
|
117
|
+
agents: {
|
|
118
|
+
title: '智能体',
|
|
119
|
+
connected: '已连接',
|
|
120
|
+
refresh: '刷新智能体状态',
|
|
121
|
+
retry: '重试',
|
|
122
|
+
failedToLoad: '加载智能体失败',
|
|
123
|
+
mcpServer: 'MCP 服务器',
|
|
124
|
+
stopped: '已停止',
|
|
125
|
+
sectionConnected: '已连接',
|
|
126
|
+
sectionDetected: '已检测',
|
|
127
|
+
sectionNotDetected: '未检测到',
|
|
128
|
+
noAgents: '未检测到智能体。',
|
|
129
|
+
autoRefresh: '每 30 秒自动刷新',
|
|
130
|
+
connect: '连接',
|
|
131
|
+
installing: '安装中...',
|
|
132
|
+
install: (name: string) => `安装 ${name}`,
|
|
133
|
+
},
|
|
134
|
+
plugins: {
|
|
135
|
+
title: '插件',
|
|
136
|
+
active: '已启用',
|
|
137
|
+
noPlugins: '暂无插件',
|
|
138
|
+
core: '核心',
|
|
139
|
+
coreDisabled: '核心插件 — 不可禁用',
|
|
140
|
+
footer: '插件用于自定义文件渲染方式。核心插件不可禁用。',
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
shortcutPanel: {
|
|
144
|
+
title: '快捷键',
|
|
145
|
+
navigation: '导航',
|
|
146
|
+
panelsSection: '面板',
|
|
147
|
+
editor: '编辑器',
|
|
148
|
+
toggleSearch: '切换搜索',
|
|
149
|
+
toggleAskAI: '切换 Ask AI',
|
|
150
|
+
openSettings: '打开设置',
|
|
151
|
+
keyboardShortcuts: '快捷键',
|
|
152
|
+
closePanel: '关闭面板 / 退出最大化',
|
|
153
|
+
saveFile: '保存文件',
|
|
154
|
+
undo: '撤销',
|
|
155
|
+
redo: '重做',
|
|
156
|
+
toggleHint: '切换此面板',
|
|
157
|
+
},
|
|
109
158
|
fileTree: {
|
|
110
159
|
newFileTitle: '在此目录新建文件',
|
|
111
160
|
rename: '重命名',
|
|
@@ -129,7 +178,7 @@ export const zh = {
|
|
|
129
178
|
},
|
|
130
179
|
settings: {
|
|
131
180
|
title: '设置',
|
|
132
|
-
tabs: { ai: 'AI', appearance: '外观', knowledge: '通用', sync: '同步', mcp: 'MCP & Skills', plugins: '插件', shortcuts: '快捷键', monitoring: '监控', agents: 'Agents' },
|
|
181
|
+
tabs: { ai: 'AI', appearance: '外观', knowledge: '通用', sync: '同步', mcp: 'MCP & Skills', plugins: '插件', shortcuts: '快捷键', monitoring: '监控', agents: 'Agents', update: '更新' },
|
|
133
182
|
ai: {
|
|
134
183
|
provider: '服务商',
|
|
135
184
|
model: '模型',
|
|
@@ -290,9 +339,10 @@ export const zh = {
|
|
|
290
339
|
transportRemote: '远程',
|
|
291
340
|
transportLocalHint: '本地 — 与 MindOS 服务在同一台机器上',
|
|
292
341
|
transportRemoteHint: '远程 — 从其他设备通过 HTTP 连接',
|
|
293
|
-
remoteDetectedHint: '使用当前远程 IP
|
|
294
|
-
remoteManualHint: '
|
|
295
|
-
|
|
342
|
+
remoteDetectedHint: '使用当前远程 IP。',
|
|
343
|
+
remoteManualHint: '将 127.0.0.1 替换为服务器的公网或局域网 IP。',
|
|
344
|
+
remoteSteps: '从其他设备连接:① 在防火墙/安全组中开放端口 {port} ② 将下方配置粘贴到 Agent 中 ③ 公网环境建议使用 SSH 隧道加密传输。',
|
|
345
|
+
noAuthWarning: '⚠ 未设置认证令牌 — 请先在 设置 → 通用 中配置,再启用远程访问。',
|
|
296
346
|
showJson: '显示 JSON',
|
|
297
347
|
hideJson: '隐藏 JSON',
|
|
298
348
|
},
|
|
@@ -343,6 +393,28 @@ export const zh = {
|
|
|
343
393
|
saved: '已保存',
|
|
344
394
|
saveFailed: '保存失败',
|
|
345
395
|
reconfigure: '重新配置',
|
|
396
|
+
askDisplayMode: {
|
|
397
|
+
label: '显示模式',
|
|
398
|
+
hint: '侧面板固定在右侧;弹窗以浮动对话框形式打开。',
|
|
399
|
+
panel: '侧面板',
|
|
400
|
+
popup: '弹窗',
|
|
401
|
+
},
|
|
402
|
+
update: {
|
|
403
|
+
checking: '正在检查更新...',
|
|
404
|
+
upToDate: '已是最新版本',
|
|
405
|
+
available: (current: string, latest: string) => `有新版本可用:v${current} → v${latest}`,
|
|
406
|
+
updating: '正在更新 MindOS,服务器即将重启...',
|
|
407
|
+
updatingHint: '预计 1–3 分钟,请勿关闭此页面。',
|
|
408
|
+
updated: '更新成功!正在刷新...',
|
|
409
|
+
timeout: '更新可能仍在进行中。',
|
|
410
|
+
timeoutHint: '请在终端查看:',
|
|
411
|
+
error: '检查更新失败,请检查网络连接。',
|
|
412
|
+
checkButton: '检查更新',
|
|
413
|
+
updateButton: (version: string) => `更新到 v${version}`,
|
|
414
|
+
releaseNotes: '查看更新日志',
|
|
415
|
+
hint: '更新通过 npm 安装,等同于在终端运行',
|
|
416
|
+
inTerminal: '。',
|
|
417
|
+
},
|
|
346
418
|
},
|
|
347
419
|
onboarding: {
|
|
348
420
|
subtitle: '知识库为空,选择一个模板快速开始。',
|
|
@@ -384,6 +456,7 @@ export const zh = {
|
|
|
384
456
|
},
|
|
385
457
|
updateBanner: {
|
|
386
458
|
newVersion: (latest: string, current: string) => `MindOS v${latest} 可用(当前 v${current})`,
|
|
459
|
+
updateNow: '更新',
|
|
387
460
|
runUpdate: '终端运行',
|
|
388
461
|
orSee: '或',
|
|
389
462
|
releaseNotes: '查看更新说明',
|
|
@@ -554,4 +627,91 @@ export const zh = {
|
|
|
554
627
|
],
|
|
555
628
|
},
|
|
556
629
|
},
|
|
630
|
+
explore: {
|
|
631
|
+
title: '探索使用场景',
|
|
632
|
+
subtitle: '发现 MindOS 能帮你做什么 — 选一个场景,立即体验。',
|
|
633
|
+
tryIt: '试一试',
|
|
634
|
+
categories: {
|
|
635
|
+
'getting-started': '快速上手',
|
|
636
|
+
'cross-agent': '跨 Agent',
|
|
637
|
+
'knowledge-evolution': '知识演进',
|
|
638
|
+
'advanced': '高级',
|
|
639
|
+
},
|
|
640
|
+
all: '全部',
|
|
641
|
+
c1: {
|
|
642
|
+
title: '注入身份',
|
|
643
|
+
desc: '让所有 AI Agent 一次认识你 — 偏好、技术栈、沟通风格。',
|
|
644
|
+
prompt: '读一下我的 MindOS 知识库,帮我把自我介绍写进 Profile。',
|
|
645
|
+
},
|
|
646
|
+
c2: {
|
|
647
|
+
title: '注入信息',
|
|
648
|
+
desc: '一句话归档文章、会议纪要或网页到知识库,全局可搜。',
|
|
649
|
+
prompt: '帮我把这篇文章的要点整理到 MindOS 里。',
|
|
650
|
+
},
|
|
651
|
+
c3: {
|
|
652
|
+
title: '跨 Agent 切换',
|
|
653
|
+
desc: '在 MindOS 写方案,在 Claude Code 写代码,在 Cursor 优化 — 零重复。',
|
|
654
|
+
prompt: '帮我按 MindOS 里的 XXX 方案开始写代码。',
|
|
655
|
+
},
|
|
656
|
+
c4: {
|
|
657
|
+
title: '经验→SOP',
|
|
658
|
+
desc: '把踩坑经验沉淀为可复用的工作流,下次 3 分钟搞定。',
|
|
659
|
+
prompt: '帮我把这次对话的经验沉淀到 MindOS,形成可复用的工作流。',
|
|
660
|
+
},
|
|
661
|
+
c5: {
|
|
662
|
+
title: '手机记灵感',
|
|
663
|
+
desc: '随手记下灵感,MindOS 自动归档、拆任务、多 Agent 接力执行。',
|
|
664
|
+
prompt: '帮我把这个想法整理到 MindOS,拆解成可执行的子任务。',
|
|
665
|
+
},
|
|
666
|
+
c6: {
|
|
667
|
+
title: '项目冷启动',
|
|
668
|
+
desc: '4 分钟搭建新项目 — Profile 和 SOP 自动引导脚手架。',
|
|
669
|
+
prompt: '帮我按 MindOS 里的 Startup SOP 启动一个新项目。',
|
|
670
|
+
},
|
|
671
|
+
c7: {
|
|
672
|
+
title: '调研入库',
|
|
673
|
+
desc: '让 Agent 替你跑腿调研竞品或话题,结果结构化入库。',
|
|
674
|
+
prompt: '帮我调研 X、Y、Z 这几个产品,结果写入 MindOS 产品库。',
|
|
675
|
+
},
|
|
676
|
+
c8: {
|
|
677
|
+
title: '人脉管理',
|
|
678
|
+
desc: '记录对话、自动生成跟进待办,每个联系人都有完整上下文。',
|
|
679
|
+
prompt: '我今天和 XXX 聊了这些内容,帮我更新到 MindOS 并生成跟进待办。',
|
|
680
|
+
},
|
|
681
|
+
c9: {
|
|
682
|
+
title: '审计纠偏',
|
|
683
|
+
desc: '审查 Agent 记了什么,一处修正,全局生效。',
|
|
684
|
+
prompt: '帮我检查 MindOS Profile 里的技术栈偏好是否正确,有错误帮我修正。',
|
|
685
|
+
},
|
|
686
|
+
},
|
|
687
|
+
walkthrough: {
|
|
688
|
+
step: (current: number, total: number) => `${current} / ${total}`,
|
|
689
|
+
next: '下一步',
|
|
690
|
+
back: '上一步',
|
|
691
|
+
skip: '跳过引导',
|
|
692
|
+
done: '完成',
|
|
693
|
+
exploreCta: '探索更多用法 →',
|
|
694
|
+
steps: [
|
|
695
|
+
{
|
|
696
|
+
title: '导航栏',
|
|
697
|
+
body: '这是你的 Activity Bar — 在这里切换文件、搜索、插件和 Agent。',
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
title: '你的知识库',
|
|
701
|
+
body: '在文件面板中浏览和管理你的笔记、画像和项目。',
|
|
702
|
+
},
|
|
703
|
+
{
|
|
704
|
+
title: 'AI 对话',
|
|
705
|
+
body: '和了解你整个知识库的 AI 对话。随时按 ⌘/ 启动。',
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
title: '快速搜索',
|
|
709
|
+
body: '按 ⌘K 即可搜索所有笔记,瞬间找到任何文件。',
|
|
710
|
+
},
|
|
711
|
+
{
|
|
712
|
+
title: '设置',
|
|
713
|
+
body: '在这里配置 AI 服务商、MCP 连接、同步和外观。',
|
|
714
|
+
},
|
|
715
|
+
],
|
|
716
|
+
},
|
|
557
717
|
} as const satisfies Widen<typeof en>;
|
package/app/lib/settings.ts
CHANGED
|
@@ -32,6 +32,8 @@ export interface GuideState {
|
|
|
32
32
|
step1Done: boolean; // 至少浏览过 1 个文件
|
|
33
33
|
askedAI: boolean; // 至少发过 1 条 AI 消息
|
|
34
34
|
nextStepIndex: number; // 0=C2, 1=C3, 2=C4, 3=全部完成
|
|
35
|
+
walkthroughStep?: number; // -1=not started, 0-4=current step, 5=completed
|
|
36
|
+
walkthroughDismissed?: boolean; // user skipped walkthrough
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
export interface ServerSettings {
|
|
@@ -143,6 +145,8 @@ function parseGuideState(raw: unknown): GuideState | undefined {
|
|
|
143
145
|
step1Done: obj.step1Done === true,
|
|
144
146
|
askedAI: obj.askedAI === true,
|
|
145
147
|
nextStepIndex: typeof obj.nextStepIndex === 'number' ? obj.nextStepIndex : 0,
|
|
148
|
+
walkthroughStep: typeof obj.walkthroughStep === 'number' ? obj.walkthroughStep : undefined,
|
|
149
|
+
walkthroughDismissed: obj.walkthroughDismissed === true ? true : undefined,
|
|
146
150
|
};
|
|
147
151
|
}
|
|
148
152
|
|
package/app/next.config.ts
CHANGED
|
@@ -3,7 +3,7 @@ import path from "path";
|
|
|
3
3
|
|
|
4
4
|
const nextConfig: NextConfig = {
|
|
5
5
|
transpilePackages: ['github-slugger'],
|
|
6
|
-
serverExternalPackages: ['
|
|
6
|
+
serverExternalPackages: ['chokidar', 'openai', '@mariozechner/pi-ai', '@mariozechner/pi-agent-core'],
|
|
7
7
|
outputFileTracingRoot: path.join(__dirname),
|
|
8
8
|
turbopack: {
|
|
9
9
|
root: path.join(__dirname),
|
package/app/package.json
CHANGED
package/bin/lib/mcp-spawn.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { execSync, spawn } from 'node:child_process';
|
|
2
|
-
import { existsSync } from 'node:fs';
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
3
|
import { resolve } from 'node:path';
|
|
4
|
-
import { ROOT } from './constants.js';
|
|
4
|
+
import { ROOT, CONFIG_PATH } from './constants.js';
|
|
5
5
|
import { bold, red, yellow } from './colors.js';
|
|
6
6
|
import { npmInstall } from './utils.js';
|
|
7
7
|
|
|
@@ -14,10 +14,21 @@ export function spawnMcp(verbose = false) {
|
|
|
14
14
|
console.log(yellow('Installing MCP dependencies (first run)...\n'));
|
|
15
15
|
npmInstall(resolve(ROOT, 'mcp'), '--no-workspaces');
|
|
16
16
|
}
|
|
17
|
+
|
|
18
|
+
// Read AUTH_TOKEN directly from config to avoid stale system env overriding
|
|
19
|
+
// the user's configured token. Config is the source of truth for auth.
|
|
20
|
+
let configAuthToken;
|
|
21
|
+
try {
|
|
22
|
+
const cfg = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
|
|
23
|
+
configAuthToken = cfg.authToken;
|
|
24
|
+
} catch { /* config may not exist yet */ }
|
|
25
|
+
|
|
17
26
|
const env = {
|
|
18
27
|
...process.env,
|
|
19
28
|
MCP_PORT: mcpPort,
|
|
29
|
+
MCP_HOST: process.env.MCP_HOST || '0.0.0.0',
|
|
20
30
|
MINDOS_URL: process.env.MINDOS_URL || `http://127.0.0.1:${webPort}`,
|
|
31
|
+
...(configAuthToken ? { AUTH_TOKEN: configAuthToken } : {}),
|
|
21
32
|
...(verbose ? { MCP_VERBOSE: '1' } : {}),
|
|
22
33
|
};
|
|
23
34
|
const child = spawn('npx', ['tsx', 'src/index.ts'], {
|
package/mcp/src/index.ts
CHANGED
|
@@ -25,7 +25,7 @@ import { z } from "zod";
|
|
|
25
25
|
const BASE_URL = process.env.MINDOS_URL ?? "http://localhost:3456";
|
|
26
26
|
const AUTH_TOKEN = process.env.AUTH_TOKEN;
|
|
27
27
|
const MCP_TRANSPORT = process.env.MCP_TRANSPORT ?? "http"; // "http" | "stdio"
|
|
28
|
-
const MCP_HOST = process.env.MCP_HOST ?? "
|
|
28
|
+
const MCP_HOST = process.env.MCP_HOST ?? "0.0.0.0";
|
|
29
29
|
const MCP_PORT = parseInt(process.env.MCP_PORT ?? "8781", 10);
|
|
30
30
|
const MCP_ENDPOINT = process.env.MCP_ENDPOINT ?? "/mcp";
|
|
31
31
|
const CHARACTER_LIMIT = 25_000;
|
|
@@ -510,7 +510,8 @@ async function main() {
|
|
|
510
510
|
|
|
511
511
|
const httpServer = createServer(expressApp as Parameters<typeof createServer>[1]);
|
|
512
512
|
httpServer.listen(MCP_PORT, MCP_HOST, () => {
|
|
513
|
-
|
|
513
|
+
const displayHost = MCP_HOST === '0.0.0.0' ? '127.0.0.1' : MCP_HOST;
|
|
514
|
+
console.error(`MindOS MCP server (HTTP) listening on http://${displayHost}:${MCP_PORT}${MCP_ENDPOINT}`);
|
|
514
515
|
console.error(`API backend: ${BASE_URL}`);
|
|
515
516
|
});
|
|
516
517
|
} else {
|
package/package.json
CHANGED