@geminilight/mindos 0.5.22 → 0.5.24

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 (45) hide show
  1. package/app/app/api/ask/route.ts +7 -14
  2. package/app/app/api/bootstrap/route.ts +1 -0
  3. package/app/app/globals.css +14 -0
  4. package/app/app/setup/page.tsx +3 -2
  5. package/app/components/ActivityBar.tsx +183 -0
  6. package/app/components/AskFab.tsx +39 -97
  7. package/app/components/AskModal.tsx +13 -371
  8. package/app/components/Breadcrumb.tsx +4 -4
  9. package/app/components/FileTree.tsx +21 -4
  10. package/app/components/Logo.tsx +39 -0
  11. package/app/components/Panel.tsx +152 -0
  12. package/app/components/RightAskPanel.tsx +72 -0
  13. package/app/components/SettingsModal.tsx +9 -241
  14. package/app/components/SidebarLayout.tsx +426 -12
  15. package/app/components/SyncStatusBar.tsx +74 -53
  16. package/app/components/TableOfContents.tsx +4 -2
  17. package/app/components/ask/AskContent.tsx +418 -0
  18. package/app/components/ask/MessageList.tsx +2 -2
  19. package/app/components/panels/AgentsPanel.tsx +231 -0
  20. package/app/components/panels/PanelHeader.tsx +35 -0
  21. package/app/components/panels/PluginsPanel.tsx +106 -0
  22. package/app/components/panels/SearchPanel.tsx +178 -0
  23. package/app/components/panels/SyncPopover.tsx +105 -0
  24. package/app/components/renderers/csv/TableView.tsx +4 -4
  25. package/app/components/settings/AiTab.tsx +39 -1
  26. package/app/components/settings/KnowledgeTab.tsx +116 -2
  27. package/app/components/settings/McpTab.tsx +6 -6
  28. package/app/components/settings/SettingsContent.tsx +343 -0
  29. package/app/components/settings/types.ts +1 -1
  30. package/app/components/setup/index.tsx +2 -23
  31. package/app/hooks/useResizeDrag.ts +78 -0
  32. package/app/lib/agent/index.ts +0 -1
  33. package/app/lib/agent/model.ts +33 -10
  34. package/app/lib/format.ts +19 -0
  35. package/app/lib/i18n-en.ts +6 -6
  36. package/app/lib/i18n-zh.ts +5 -5
  37. package/app/next-env.d.ts +1 -1
  38. package/app/next.config.ts +1 -1
  39. package/bin/cli.js +27 -97
  40. package/package.json +4 -2
  41. package/scripts/setup.js +2 -12
  42. package/skills/mindos/SKILL.md +226 -8
  43. package/skills/mindos-zh/SKILL.md +226 -8
  44. package/app/lib/agent/skill-rules.ts +0 -70
  45. package/app/package-lock.json +0 -15736
@@ -12,13 +12,231 @@ description: >
12
12
 
13
13
  # MindOS Skill
14
14
 
15
- 从知识库加载操作规则,然后执行用户任务。
15
+ 按以下规则执行用户任务。
16
+ 用户个性化规则(`user-skill-rules.md`)在 bootstrap 上下文中自动包含(若文件存在)。
17
+ 用户规则在冲突时覆盖默认规则。
16
18
 
17
- ## 协议
19
+ ---
20
+
21
+ <!-- version: 1.0.0 -->
22
+ # MindOS 操作规则
23
+
24
+ ## 核心原则
25
+
26
+ - 以仓库当前状态为唯一依据。
27
+ - **bootstrap 加载的目录树是一等语义资产。** 目录名、文件名及其层级结构编码了用户存了什么、如何组织思维。在调用搜索之前,先从这个结构推断内容位置——它往往不需要任何工具调用就能告诉你答案。
28
+ - 写入前先读取。
29
+ - 优先最小化、精确化修改。
30
+ - 变更结果应易于审阅与追踪。
31
+
32
+ ## 启动协议
33
+
34
+ 在进行实质编辑前执行以下流程:
35
+
36
+ 1. 加载根级规则。
37
+ - 优先调用 `mindos_bootstrap`。
38
+ - 若不可用,直接读取根 `INSTRUCTION.md` 与根 `README.md`。
39
+
40
+ 2. 动态发现当前结构。
41
+ - 使用 `mindos_list_files` 与按需 `mindos_search_notes`。
42
+ - 不假设固定一级目录名。
43
+
44
+ 3. 加载目标路径附近的局部规则。
45
+ - 若存在,读取就近 `README.md` / `INSTRUCTION.md`。
46
+ - 优先遵循局部约定,而非全局假设。
47
+
48
+ 4. 再执行编辑。
49
+
50
+ 若关键上下文缺失,按最佳努力继续,并明确写出假设。
51
+
52
+ ## 动态结构规则
53
+
54
+ - 不硬编码"标准目录树"。
55
+ - 创建或重写内容前,先从相邻文件推断约定。
56
+ - 命名、标题结构、CSV 字段顺序、引用格式均优先复用现有模式。
57
+ - 新建文件优先跟随同级风格,不引入新标准。
58
+ - **除非用户明确要求,不在根目录下创建文件或子目录。** 根目录仅保留顶层治理文件(README、INSTRUCTION、CONFIG)。新内容应放在语义最匹配的现有子目录下,从上下文中的目录树推断合适位置。
59
+ - 创建新文件或目录时,先根据现有结构确定最佳父目录。若没有明显匹配的目录,提出 1-2 个候选位置并询问用户后再创建。
60
+ - **文件增删/移动/重命名后,必须同步更新受影响的 README 文件。** README 是目录的索引与导航入口,任何改变目录内容的操作都应自动检查并更新对应目录及其父目录的 README。
61
+
62
+ ## 写前检查清单
63
+
64
+ 在任何非 trivial 写入前,确认以下检查项:
65
+
66
+ 1. 目标文件或路径已确认,且存在或应当创建。
67
+ 2. **目标位置在合适的子目录下,而非根目录。** 若不确定哪个目录最合适,先提出候选并询问用户。
68
+ 3. 现有内容已读取,或已明确确认不存在。
69
+ 4. 已考虑目标路径附近的治理文档。
70
+ 5. 修改范围最小化,且与用户意图一致。
71
+ 6. 路径变更带来的引用/反链影响已评估。
72
+
73
+ ## 工具选型指南
74
+
75
+ ### 发现
76
+
77
+ - `mindos_bootstrap`:加载启动上下文。
78
+ - `mindos_list_files`:查看文件树。
79
+ - `mindos_search_notes`:按关键词/范围/类型/日期定位文件。**搜索时,第一次就应并行发起多个关键词搜索**——同义词、缩写、中英文变体、更宽/更窄的表述。单一关键词很脆弱,一开始就撒网能避免多轮空搜。
80
+ - `mindos_get_recent`:查看近期活动。
81
+ - `mindos_get_backlinks`:重命名/移动/删除前评估影响。
82
+
83
+ ### 读写
84
+
85
+ - `mindos_read_file`:读取文件内容。
86
+ - `mindos_write_file`:仅在确需整文件替换时使用。
87
+ - `mindos_create_file`:创建 `.md`/`.csv` 文件。
88
+ - `mindos_delete_file`:仅在用户明确意图下删除。
89
+ - `mindos_rename_file`、`mindos_move_file`:结构变更后补做引用检查。
90
+
91
+ ### 精确编辑
92
+
93
+ - `mindos_read_lines`:定位精确行。
94
+ - `mindos_insert_lines`:按索引插入。
95
+ - `mindos_update_lines`:替换指定行区间。
96
+ - `mindos_append_to_file`:文件末尾追加。
97
+ - `mindos_insert_after_heading`:标题后插入。
98
+ - `mindos_update_section`:替换单个 Markdown 章节。
99
+
100
+ ### 历史与表格
101
+
102
+ - `mindos_get_history`、`mindos_get_file_at_version`:追踪/回溯历史。
103
+ - `mindos_append_csv`:读表头校验后追加单行。
104
+
105
+ ## 回退规则
106
+
107
+ - 若部分 `mindos_*` 工具不可用,使用可用等效工具,但保持同样安全纪律。
108
+ - 若 `mindos_bootstrap` 不可用,改为手动读取启动文件。
109
+ - 若缺少行级/章节级工具,用"读取 + 受限重写"方式模拟最小化修改。
110
+ - 若 `mindos_search_notes` 无结果,不要放弃。bootstrap 时加载的目录树已经在你的上下文中。逐步升级:
111
+ 1. 先回顾上下文中已有的目录结构,根据命名、层级与主题相关性推断哪些目录和文件最可能相关。
112
+ 2. 直接读取最可能的候选文件确认内容。
113
+ 3. 若候选不明确,对特定子目录调用 `mindos_list_files` 获取更细粒度结构。
114
+ 4. 同时尝试替代关键词(同义词、更宽/更窄范围、中英文变体)作为并行策略。
115
+
116
+ ## 安全规则
117
+
118
+ - 默认将根级 `INSTRUCTION.md`、根级 `README.md` 和其他目录下的 `INSTRUCTION.md` 治理文档视为高敏感,先确认再改。
119
+ - 执行高影响动作前先确认(批量删除、大规模重命名/移动、目录大重构、跨文件批量重写)。
120
+ - **当操作涉及多个文件时,必须先向用户展示完整的变更计划。** 列出每个目标文件、将做什么修改、为什么。等用户确认后再执行。
121
+ - 不写入密钥、Token、密码。
122
+ - 不执行超出用户意图的删除或覆写。
123
+
124
+ ## 质量闸门
125
+
126
+ 在结束任何操作前确认:
127
+
128
+ 1. 结果直接回应用户意图。
129
+ 2. 新增或修改内容符合局部风格与结构。
130
+ 3. 结构调整后引用/链接仍有效。
131
+ 4. 未引入敏感信息。
132
+ 5. 给用户的总结足够具体,便于快速审计。
133
+
134
+ ## 偏好捕获
135
+
136
+ 当用户在操作过程中表达偏好修正(如"以后不要…""下次记得…""这个应该放在…而不是…"),将偏好以结构化规则追加到知识库根目录的 `user-skill-rules.md` 的对应分区。追加后告知用户"已记录偏好"。
137
+
138
+ ---
139
+
140
+ # 执行模式
141
+
142
+ 选择匹配的模式。所有模式共享统一纪律:搜索 → 读取 → 最小化编辑 → 验证 → 总结。
143
+
144
+ ## 核心模式(高频)
145
+
146
+ ### 记录或更新笔记
147
+ 搜索 → 读取目标 + 局部规则 → 最小化修改 → 路径变化时保持引用一致。
148
+
149
+ ### 基于上下文的问答
150
+ 从目录树推断 → 读取相关文件 → 基于存储内容回答并注明来源 → 信息缺失时明确告知。
151
+
152
+ ### 结构感知的多文件联动更新
153
+ 处理非结构化输入(会议纪要、braindump、聊天记录)分属多文件的场景:
154
+ 1. 将输入解析为语义单元(事实、决策、行动项、想法等)。
155
+ 2. 为每个单元搜索 + 读取候选目标文件。
156
+ 3. **写入前向用户展示路由计划(表格:信息 → 目标文件 → 写入位置)并请求确认。**
157
+ 4. 执行最小化编辑。仅当无匹配文件时才新建。
158
+ 5. 汇总所有变更供审计。
159
+
160
+ ### 对话复盘与自适应更新
161
+ 1. 先让用户确认复盘范围。
162
+ 2. 抽取可复用资产:决策、理由、踩坑、下一步动作。
163
+ 3. 路由到最合适的现有文件(或在相邻位置新建)。
164
+ 4. 补变更说明。路由置信度低时先问用户。
165
+
166
+ ## 结构变更模式(文件增删/移动/重命名后必须执行)
167
+
168
+ - **重命名/移动**:`get_backlinks` → 报告影响 → 确认 → 执行 → 更新所有引用 → 验证无孤链。
169
+ - **同步 README**:任何结构变更后,自动更新受影响目录及父目录的 README。无需用户单独请求。
170
+
171
+ ## 参考模式(任务匹配时使用)
172
+
173
+ | 模式 | 关键步骤 |
174
+ |------|----------|
175
+ | CSV 操作 | 读表头 → 校验字段 → 追加行 |
176
+ | TODO/任务管理 | 定位列表 → 读取格式 → 最小化编辑保持约定 |
177
+ | SOP/工作流执行 | 完整读取 → 分步执行 → 仅更新过时章节 |
178
+ | 跨 Agent 接力 | 读任务状态+决策 → 无需重复探索直接接续 → 回写进度 |
179
+ | 知识冲突联动 | 多关键词搜索旧信息 → 列出受影响文件 → 展示变更计划 → 确认后更新 |
180
+ | 经验提炼 SOP | 提取步骤 → 泛化 → 在 Workflows/ 下创建含前置条件、步骤、踩坑的 SOP |
181
+ | 周期性回顾 | `get_recent`/`get_history` → 读变动文件 → 分类 → 结构化总结 |
182
+ | 交接文档合成 | 识别来源 → 读取 → 合成(背景、决策、状态、待办)→ 放项目目录 |
183
+ | 关系维护与跟进 | 从纪要提取更新 → 更新联系人记录 → 生成跟进策略 |
184
+ | 信息收集与外联 | 定位来源 → 读外联文档 → 按画像个性化 → 回写结果 |
185
+ | 项目启动 | 读偏好/技术栈 → 脚手架对齐标准 → 记录决策 |
186
+ | 代码审查 | 读审查规范 → 检查命名/安全/性能 → 输出可执行建议 |
187
+ | 沉淀跨 Agent 讨论 | 与用户确认决策 → 结构化为问题/决策/理由/下一步 → 最小化写回 |
188
+
189
+ ## 交互规则
190
+
191
+ - **当请求模糊或范围过大时(如"帮我整理一下"),先问清楚再动手。** 基于知识库现状(近期变动、目录结构)提出具体选项,但不要在理解用户意图和范围之前就开始重组或重写。
192
+ - 展示搜索结果或选项时,优先简洁和相关性,最可能的匹配排前面。
193
+ - 从存储内容回答问题时,始终注明来源文件路径,便于用户验证。
194
+
195
+ ---
196
+
197
+ # 任务后 Hooks
198
+
199
+ 任务完成后检查以下条件。命中则用一句话提议,不命中则安静结束。
200
+
201
+ ## 纪律
202
+
203
+ 1. 简单操作(改标题、追加一行、读取查询)完成后不提议
204
+ 2. 每次最多 1 个提议,选优先级最高的
205
+ 3. 一句话 + 具体目标。用户说"好"再展开
206
+ 4. 检查 user-skill-rules.md 抑制区域,命中则跳过
207
+
208
+ ## 默认 Hooks
209
+
210
+ ### 经验沉淀(优先级:高)
211
+ - 条件:任务涉及调试、排错、踩坑,或找了多轮才解决
212
+ - 提议:"要把这个经验记到 {相关经验文件} 吗?"
213
+ - 执行:问题 → 原因 → 解决 → 规则
214
+
215
+ ### 一致性同步(优先级:高)
216
+ - 条件:编辑了文件 A,A 被其他文件引用(通过 get_backlinks 检查)
217
+ - 提议:"{B} 引用了刚改的内容,要同步更新吗?"
218
+
219
+ ### 联动更新(优先级:中)
220
+ - 条件:修改了 CSV/TODO 条目状态,存在关联文档
221
+ - 提议:"{关联文档} 的对应信息要同步吗?"
222
+
223
+ ### 结构归类(优先级:中)
224
+ - 条件:创建了新文件在临时位置或收件箱
225
+ - 提议:"要归类到 {推荐目录} 吗?"
226
+
227
+ ### 模式提炼(优先级:低)
228
+ - 条件:当前会话中 3+ 次结构相似的操作
229
+ - 提议:"这个操作重复了多次,要整理成 SOP 吗?"
230
+
231
+ ### 对话复盘(优先级:低)
232
+ - 条件:会话 >10 轮且涉及决策、权衡或经验教训
233
+ - 提议:"这段对话有些决策值得沉淀,要做个复盘吗?"
234
+
235
+ ## 用户自定义 Hooks
18
236
 
19
- 1. 读取 `.agents/skills/mindos-zh/skill-rules.md` — 操作规则。
20
- - 若文件不存在:退化到 `mindos_bootstrap`(或手动读取根 INSTRUCTION.md
21
- + README.md)。提示用户:"运行 `mindos init-skills` 启用完整 skill 规则。"
22
- 2. `.agents/skills/mindos-zh/user-rules.md` 存在且非空:
23
- 读取。用户规则在冲突时覆盖默认规则。
24
- 3. 按加载的规则执行任务。完成后评估任务后 hooks。
237
+ <!-- 在此追加你自己的 hooks,格式同上 -->
238
+ <!-- 示例:
239
+ ### 周报素材收集(优先级:中)
240
+ - 条件:更新了 Project 相关文件
241
+ - 提议:"要把这个变更记到本周周报素材吗?"
242
+ -->
@@ -1,70 +0,0 @@
1
- /**
2
- * Load skill-rules.md and user-rules.md from the user's knowledge base.
3
- *
4
- * Files are located at: {mindRoot}/.agents/skills/{skillName}/skill-rules.md
5
- * These are part of the progressive skill loading system (v4).
6
- *
7
- * Designed to be called from route.ts during system prompt assembly.
8
- * All errors are caught — missing files are normal (not all users have skill rules).
9
- */
10
- import fs from 'fs';
11
- import path from 'path';
12
- import { truncate } from './tools';
13
-
14
- export interface SkillRuleFile {
15
- ok: boolean;
16
- content: string;
17
- truncated: boolean;
18
- empty: boolean;
19
- error?: string;
20
- }
21
-
22
- export interface SkillRulesResult {
23
- skillRules: SkillRuleFile;
24
- userRules: SkillRuleFile;
25
- }
26
-
27
- const MAX_SKILL_CHARS = 20_000;
28
-
29
- function readSkillFile(absPath: string): SkillRuleFile {
30
- try {
31
- const raw = fs.readFileSync(absPath, 'utf-8');
32
- const isEmpty = raw.trim().length === 0;
33
- if (raw.length > MAX_SKILL_CHARS) {
34
- return {
35
- ok: true,
36
- content: truncate(raw),
37
- truncated: true,
38
- empty: false,
39
- };
40
- }
41
- return {
42
- ok: true,
43
- content: raw,
44
- truncated: false,
45
- empty: isEmpty,
46
- };
47
- } catch (err) {
48
- return {
49
- ok: false,
50
- content: '',
51
- truncated: false,
52
- empty: true,
53
- error: err instanceof Error ? err.message : String(err),
54
- };
55
- }
56
- }
57
-
58
- /**
59
- * Load skill-rules.md and user-rules.md from {mindRoot}/.agents/skills/{skillName}/
60
- *
61
- * @param mindRoot - Absolute path to the knowledge base root
62
- * @param skillName - 'mindos' or 'mindos-zh'
63
- */
64
- export function loadSkillRules(mindRoot: string, skillName: string): SkillRulesResult {
65
- const skillDir = path.join(mindRoot, '.agents', 'skills', skillName);
66
- return {
67
- skillRules: readSkillFile(path.join(skillDir, 'skill-rules.md')),
68
- userRules: readSkillFile(path.join(skillDir, 'user-rules.md')),
69
- };
70
- }