@geminilight/mindos 0.5.52 → 0.5.55

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 (32) hide show
  1. package/README.md +7 -7
  2. package/README_zh.md +5 -5
  3. package/app/app/echo/[segment]/page.tsx +15 -0
  4. package/app/app/echo/page.tsx +6 -0
  5. package/app/components/ActivityBar.tsx +3 -2
  6. package/app/components/Panel.tsx +1 -0
  7. package/app/components/RightAgentDetailPanel.tsx +121 -0
  8. package/app/components/RightAskPanel.tsx +14 -11
  9. package/app/components/SidebarLayout.tsx +69 -5
  10. package/app/components/ask/AskContent.tsx +10 -2
  11. package/app/components/echo/EchoHero.tsx +55 -0
  12. package/app/components/echo/EchoInsightCollapsible.tsx +184 -0
  13. package/app/components/echo/EchoPageSections.tsx +86 -0
  14. package/app/components/echo/EchoSegmentNav.tsx +58 -0
  15. package/app/components/echo/EchoSegmentPageClient.tsx +265 -0
  16. package/app/components/panels/AgentsPanel.tsx +156 -178
  17. package/app/components/panels/AgentsPanelAgentDetail.tsx +193 -0
  18. package/app/components/panels/AgentsPanelAgentGroups.tsx +116 -0
  19. package/app/components/panels/AgentsPanelAgentListRow.tsx +101 -0
  20. package/app/components/panels/AgentsPanelHubNav.tsx +48 -0
  21. package/app/components/panels/DiscoverPanel.tsx +6 -46
  22. package/app/components/panels/EchoPanel.tsx +49 -0
  23. package/app/components/panels/PanelNavRow.tsx +68 -0
  24. package/app/components/panels/agents-panel-resolve-status.ts +13 -0
  25. package/app/hooks/useSettingsAiAvailable.ts +29 -0
  26. package/app/lib/echo-insight-prompt.ts +44 -0
  27. package/app/lib/echo-segments.ts +27 -0
  28. package/app/lib/i18n-en.ts +62 -2
  29. package/app/lib/i18n-zh.ts +59 -2
  30. package/app/lib/settings-ai-client.ts +26 -0
  31. package/app/next-env.d.ts +1 -1
  32. package/package.json +1 -1
@@ -59,6 +59,7 @@ export const en = {
59
59
  settingsTitle: 'Settings',
60
60
  plugins: 'Plugins',
61
61
  agents: 'Agents',
62
+ echo: 'Echo',
62
63
  discover: 'Discover',
63
64
  help: 'Help',
64
65
  syncLabel: 'Sync',
@@ -148,6 +149,18 @@ export const en = {
148
149
  newSkill: '+ New',
149
150
  // Footer
150
151
  advancedConfig: 'Advanced Config →',
152
+ // Hub nav (aligned with Discover panel rows)
153
+ navOverview: 'Overview',
154
+ navMcp: 'MCP',
155
+ navSkills: 'Skills',
156
+ rosterLabel: 'Your setup',
157
+ notFoundDetail: 'This agent app was not detected on this machine. Install it, then refresh the list.',
158
+ skillsEmptyHint: 'Enable and edit skills in MCP & Skills settings.',
159
+ backToList: 'Back',
160
+ closeAgentDetail: 'Close',
161
+ agentDetailPanelAria: 'Agent connection configuration',
162
+ agentDetailTransport: 'Transport',
163
+ agentDetailSnippet: 'Config snippet',
151
164
  },
152
165
  plugins: {
153
166
  title: 'Plugins',
@@ -161,6 +174,14 @@ export const en = {
161
174
  noFile: 'Entry file not found',
162
175
  createFile: 'Create {file} to activate',
163
176
  },
177
+ echo: {
178
+ title: 'Echo',
179
+ aboutYouTitle: 'Tied to you',
180
+ continuedTitle: 'Still open',
181
+ dailyEchoTitle: 'Daily echo',
182
+ pastYouTitle: 'Who you were',
183
+ intentGrowthTitle: 'Heart & growth',
184
+ },
164
185
  discover: {
165
186
  title: 'Discover',
166
187
  useCases: 'Use Cases',
@@ -176,6 +197,45 @@ export const en = {
176
197
  tryIt: 'Try',
177
198
  },
178
199
  },
200
+ echoPages: {
201
+ breadcrumbNav: 'Breadcrumb',
202
+ parent: 'Echo',
203
+ heroKicker: 'Echo',
204
+ segmentNavAria: 'Echo sections',
205
+ snapshotBadge: 'Local · private',
206
+ factsHeading: 'Snapshot',
207
+ emptyFactsTitle: 'Nothing here yet',
208
+ emptyFactsBody:
209
+ 'Structured clues from your library will appear here when indexing is enabled. Data stays on your device.',
210
+ insightTitle: 'Insight',
211
+ insightShow: 'Show insight',
212
+ insightHide: 'Hide insight',
213
+ insightHint:
214
+ 'When enabled, only the items listed above are sent as context. There is no full-library upload by default.',
215
+ generateInsight: 'Generate insight',
216
+ generateInsightNoAi: 'Add an API key under Settings → AI (or set env vars), then refresh this page.',
217
+ insightGenerating: 'Generating…',
218
+ insightErrorPrefix: 'Something went wrong:',
219
+ insightRetry: 'Try again',
220
+ continueAgent: 'Continue in MindOS Agent',
221
+ continuedDrafts: 'Drafts',
222
+ continuedTodos: 'Open loops',
223
+ subEmptyHint: 'No items in this group yet.',
224
+ dailyLineLabel: 'A line for today',
225
+ dailyLinePlaceholder: 'Write one quiet line…',
226
+ dailyAskPrefill: (line: string) =>
227
+ `Echo / Daily — reflect on this line:\n\n${line.trim() || '(empty line)'}`,
228
+ pastYouAnother: 'Draw another moment',
229
+ pastYouDisabledHint: 'Random sampling arrives in a later update.',
230
+ growthIntentLabel: 'What you are steering toward',
231
+ growthIntentPlaceholder: 'Write your current intent…',
232
+ growthSavedNote: 'Saved on this device.',
233
+ aboutYouLead: 'Paths and links in your library that curve back to your name.',
234
+ continuedLead: 'Pick up where you left off.',
235
+ dailyLead: 'One quiet line for today — no need to open a full chat.',
236
+ pastYouLead: 'Choices and moods you set down at another point on the timeline.',
237
+ growthLead: 'What you are steering toward, and how it slowly shifts.',
238
+ },
179
239
  shortcutPanel: {
180
240
  title: 'Keyboard Shortcuts',
181
241
  navigation: 'Navigation',
@@ -702,7 +762,7 @@ export const en = {
702
762
  c1: {
703
763
  title: 'Inject Your Identity',
704
764
  desc: 'Tell all AI agents who you are — preferences, tech stack, communication style — in one shot.',
705
- prompt: 'Read my MindOS knowledge base and help me write a self-introduction into Profile.',
765
+ prompt: "Here's my resume, read it and organize my info into MindOS.",
706
766
  },
707
767
  c2: {
708
768
  title: 'Save Information',
@@ -805,7 +865,7 @@ export const en = {
805
865
  title: 'Using MindOS with AI Agents',
806
866
  intro: 'Once you connect an agent (Claude Code, Cursor, Windsurf, etc.) via MCP, just talk to it naturally. The agent can read and write your knowledge base directly — no special commands needed. Here are the most common scenarios:',
807
867
  scenarios: [
808
- { emoji: '🪪', title: 'Inject Your Identity', desc: 'Tell all AI agents who you are — preferences, tech stack, communication style — in one shot.', prompt: '"Here is my resume, read it and organize my identity, skills, and preferences into MindOS Profile."' },
868
+ { emoji: '🪪', title: 'Inject Your Identity', desc: 'Tell all AI agents who you are — preferences, tech stack, communication style — in one shot.', prompt: "\"Here's my resume, read it and organize my info into MindOS.\"" },
809
869
  { emoji: '🔄', title: 'Cross-Agent Handoff', desc: 'Brainstorm ideas in GPT, then execute in Claude Code — zero context loss.', prompt: '"Save this conversation to MindOS."\n"Read the plan in MindOS and help me start coding."' },
810
870
  { emoji: '📋', title: 'Experience → SOP', desc: 'Turn hard-won debugging sessions into reusable workflows that prevent future mistakes.', prompt: '"Help me distill this conversation into a reusable workflow in MindOS."' },
811
871
  { emoji: '🚀', title: 'Project Cold Start', desc: 'Spin up a new project in minutes — your profile and SOPs guide the scaffolding automatically.', prompt: '"Help me start a new project following the Startup SOP in MindOS."' },
@@ -84,6 +84,7 @@ export const zh = {
84
84
  settingsTitle: '设置',
85
85
  plugins: '插件',
86
86
  agents: '智能体',
87
+ echo: '回响',
87
88
  discover: '探索',
88
89
  help: '帮助',
89
90
  syncLabel: '同步',
@@ -173,6 +174,17 @@ export const zh = {
173
174
  newSkill: '+ 新建',
174
175
  // Footer
175
176
  advancedConfig: '高级配置 →',
177
+ navOverview: '总览',
178
+ navMcp: 'MCP',
179
+ navSkills: '技能',
180
+ rosterLabel: '当前环境',
181
+ notFoundDetail: '本机未检测到该智能体客户端。请安装后刷新列表。',
182
+ skillsEmptyHint: '请在「MCP 与技能」设置中启用或编辑 Skills。',
183
+ backToList: '返回',
184
+ closeAgentDetail: '关闭',
185
+ agentDetailPanelAria: '智能体连接配置',
186
+ agentDetailTransport: '传输方式',
187
+ agentDetailSnippet: '配置片段',
176
188
  },
177
189
  plugins: {
178
190
  title: '插件',
@@ -186,6 +198,14 @@ export const zh = {
186
198
  noFile: '入口文件不存在',
187
199
  createFile: '创建 {file} 以激活',
188
200
  },
201
+ echo: {
202
+ title: '回响',
203
+ aboutYouTitle: '与你有关',
204
+ continuedTitle: '未完待续',
205
+ dailyEchoTitle: '每日回响',
206
+ pastYouTitle: '历史的你',
207
+ intentGrowthTitle: '心向生长',
208
+ },
189
209
  discover: {
190
210
  title: '探索',
191
211
  useCases: '使用案例',
@@ -201,6 +221,43 @@ export const zh = {
201
221
  tryIt: '试试',
202
222
  },
203
223
  },
224
+ echoPages: {
225
+ breadcrumbNav: '面包屑导航',
226
+ parent: '回响',
227
+ heroKicker: '回响',
228
+ segmentNavAria: '回响模块',
229
+ snapshotBadge: '本地 · 私密',
230
+ factsHeading: '所见',
231
+ emptyFactsTitle: '尚无内容',
232
+ emptyFactsBody: '开启索引后,笔记库中的结构化线索会出现在此。数据仅保存在本机。',
233
+ insightTitle: '见解',
234
+ insightShow: '展开见解',
235
+ insightHide: '收起见解',
236
+ insightHint: '启用后,仅将上方列表作为上下文发送;默认不会整库上传。',
237
+ generateInsight: '生成见解',
238
+ generateInsightNoAi: '请在 设置 → AI 中填写 API Key(或配置环境变量)后刷新本页。',
239
+ insightGenerating: '生成中…',
240
+ insightErrorPrefix: '生成失败:',
241
+ insightRetry: '重试',
242
+ continueAgent: '在 MindOS Agent 中继续',
243
+ continuedDrafts: '草稿',
244
+ continuedTodos: '未收口',
245
+ subEmptyHint: '这一组里还没有条目。',
246
+ dailyLineLabel: '今日一行',
247
+ dailyLinePlaceholder: '写下一行轻量的文字…',
248
+ dailyAskPrefill: (line: string) =>
249
+ `回响 / 每日 — 围绕这一行帮我展开:\n\n${line.trim() || '(空行)'}`,
250
+ pastYouAnother: '再抽一笔',
251
+ pastYouDisabledHint: '随机抽样将在后续版本提供。',
252
+ growthIntentLabel: '当前意图',
253
+ growthIntentPlaceholder: '写下你正在推进的方向…',
254
+ growthSavedNote: '已保存在本机。',
255
+ aboutYouLead: '路径与链接里,绕回你名下的那几笔。',
256
+ continuedLead: '接上上次停下的地方。',
257
+ dailyLead: '给今天留一行空白;轻到不必为此开一场对话。',
258
+ pastYouLead: '在另一个时间刻度上,你写下的选择与心情。',
259
+ growthLead: '你在推的方向,以及它怎样慢慢偏转。',
260
+ },
204
261
  shortcutPanel: {
205
262
  title: '快捷键',
206
263
  navigation: '导航',
@@ -727,7 +784,7 @@ export const zh = {
727
784
  c1: {
728
785
  title: '注入身份',
729
786
  desc: '让所有 AI Agent 一次认识你 — 偏好、技术栈、沟通风格。',
730
- prompt: '读一下我的 MindOS 知识库,帮我把自我介绍写进 Profile。',
787
+ prompt: '这是我的简历,读一下,把我的信息整理到 MindOS 里。',
731
788
  },
732
789
  c2: {
733
790
  title: '注入信息',
@@ -830,7 +887,7 @@ export const zh = {
830
887
  title: '在 AI Agent 中使用 MindOS',
831
888
  intro: '通过 MCP 连接 Agent(Claude Code、Cursor、Windsurf 等)后,直接用自然语言对话即可。Agent 能自动读写你的知识库,不需要特殊指令。以下是最常见的使用场景:',
832
889
  scenarios: [
833
- { emoji: '🪪', title: '注入身份', desc: '让所有 AI Agent 一次认识你——偏好、技术栈、沟通风格。', prompt: '"这是我的简历,读一下,帮我把身份、技能和偏好整理到 MindOS Profile 里。"' },
890
+ { emoji: '🪪', title: '注入身份', desc: '让所有 AI Agent 一次认识你——偏好、技术栈、沟通风格。', prompt: '"这是我的简历,读一下,把我的信息整理到 MindOS 里。"' },
834
891
  { emoji: '🔄', title: '跨 Agent 切换', desc: '在 GPT 里聊想法,到 Claude Code 去执行——上下文零丢失。', prompt: '"帮我把刚才的对话整理到 MindOS。"\n"读一下 MindOS 里的方案,帮我开始写代码。"' },
835
892
  { emoji: '📋', title: '经验→SOP', desc: '把踩坑经验沉淀为可复用的工作流,下次 3 分钟搞定。', prompt: '"帮我把这次对话的经验沉淀到 MindOS,形成可复用的工作流。"' },
836
893
  { emoji: '🚀', title: '项目冷启动', desc: '几分钟搭建新项目——Profile 和 SOP 自动引导脚手架。', prompt: '"帮我按 MindOS 里的 Startup SOP 启动一个新项目。"' },
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Client-side mirror of "can /api/ask run?" using GET /api/settings payload.
3
+ * Must stay aligned with server `effectiveAiConfig()` provider + key resolution.
4
+ */
5
+
6
+ export type SettingsJsonForAi = {
7
+ ai?: {
8
+ provider?: string;
9
+ providers?: {
10
+ anthropic?: { apiKey?: string };
11
+ openai?: { apiKey?: string };
12
+ };
13
+ };
14
+ envOverrides?: Partial<Record<'ANTHROPIC_API_KEY' | 'OPENAI_API_KEY', boolean>>;
15
+ };
16
+
17
+ export function isAiConfiguredForAsk(data: SettingsJsonForAi): boolean {
18
+ const prov = data.ai?.provider === 'openai' ? 'openai' : 'anthropic';
19
+ const env = data.envOverrides ?? {};
20
+ if (prov === 'openai') {
21
+ const k = data.ai?.providers?.openai?.apiKey;
22
+ return (typeof k === 'string' && k.length > 0) || !!env.OPENAI_API_KEY;
23
+ }
24
+ const k = data.ai?.providers?.anthropic?.apiKey;
25
+ return (typeof k === 'string' && k.length > 0) || !!env.ANTHROPIC_API_KEY;
26
+ }
package/app/next-env.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /// <reference types="next" />
2
2
  /// <reference types="next/image-types/global" />
3
- import "./.next/dev/types/routes.d.ts";
3
+ import "./.next/types/routes.d.ts";
4
4
 
5
5
  // NOTE: This file should not be edited
6
6
  // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geminilight/mindos",
3
- "version": "0.5.52",
3
+ "version": "0.5.55",
4
4
  "description": "MindOS — Human-Agent Collaborative Mind System. Local-first knowledge base that syncs your mind to all AI Agents via MCP.",
5
5
  "keywords": [
6
6
  "mindos",