lifeos 1.1.1 → 1.1.2

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 (36) hide show
  1. package/README.en.md +208 -0
  2. package/README.md +113 -114
  3. package/assets/lifeos-rules.en.md +1 -1
  4. package/assets/lifeos-rules.zh.md +1 -1
  5. package/assets/skills/archive/SKILL.en.md +1 -1
  6. package/assets/skills/archive/SKILL.zh.md +1 -1
  7. package/assets/skills/ask/SKILL.en.md +1 -1
  8. package/assets/skills/ask/SKILL.zh.md +1 -1
  9. package/assets/skills/brainstorm/SKILL.en.md +1 -1
  10. package/assets/skills/brainstorm/SKILL.zh.md +1 -1
  11. package/assets/skills/digest/SKILL.en.md +1 -1
  12. package/assets/skills/digest/SKILL.zh.md +1 -1
  13. package/assets/skills/digest/references/__pycache__/rss-arxiv-script.cpython-312.pyc +0 -0
  14. package/assets/skills/knowledge/SKILL.en.md +1 -1
  15. package/assets/skills/knowledge/SKILL.zh.md +1 -1
  16. package/assets/skills/project/SKILL.en.md +1 -1
  17. package/assets/skills/project/SKILL.zh.md +1 -1
  18. package/assets/skills/read-pdf/SKILL.en.md +1 -1
  19. package/assets/skills/read-pdf/SKILL.zh.md +1 -1
  20. package/assets/skills/research/SKILL.en.md +1 -1
  21. package/assets/skills/research/SKILL.zh.md +1 -1
  22. package/assets/skills/revise/SKILL.en.md +1 -1
  23. package/assets/skills/revise/SKILL.zh.md +1 -1
  24. package/assets/skills/today/SKILL.en.md +1 -1
  25. package/assets/skills/today/SKILL.zh.md +1 -1
  26. package/dist/index.d.ts +1 -1
  27. package/dist/index.js +1 -1
  28. package/dist/server.js +1 -1
  29. package/dist/services/startup.js +3 -1
  30. package/dist/services/startup.js.map +1 -1
  31. package/dist/types.d.ts +1 -0
  32. package/dist/utils/vault-indexer.d.ts +1 -0
  33. package/dist/utils/vault-indexer.js +54 -1
  34. package/dist/utils/vault-indexer.js.map +1 -1
  35. package/package.json +1 -1
  36. package/README.zh.md +0 -207
package/README.en.md ADDED
@@ -0,0 +1,208 @@
1
+ # LifeOS
2
+ ![LifeOS Example](./example.png)
3
+ [中文](./README.md) | [English](./README.en.md)
4
+
5
+ LifeOS helps you grow scattered ideas into structured knowledge and truly master it, from quick captures, to brainstorming and deep research, to systematic project planning and knowledge notes, to spaced review and mastery tracking. The goal is not just building a knowledge base, but helping you understand, internalize, and command complex knowledge.
6
+
7
+ ## Why Build LifeOS?
8
+
9
+ LifeOS started from a simple goal: package learning workflows, skills, templates, prompts, and a memory system into one complete setup you can use immediately. Instead of assembling your own toolchain from scratch or jumping between disconnected tools, you can initialize once, start working right away, and keep accumulating knowledge, process, and preferences as you go.
10
+
11
+ ## Core Features
12
+
13
+ ### Memory System
14
+
15
+ > The memory system is LifeOS's core capability. It works in a directory-scoped, skill-bound way, continuously preserving the context, preferences, and decisions that emerge during learning so long-term learning becomes more continuous, more traceable, and easier to build on.
16
+
17
+ #### Cross-session continuity
18
+
19
+ Session bridges and active-document context persist, so agents do not depend only on the current conversation.
20
+
21
+ #### Project-scoped and skill-bound
22
+
23
+ The memory system runs around the current LifeOS project in the vault, activates only inside workflows such as `today`, `project`, `research`, `knowledge`, `revise`, `digest`, and `archive`, and keeps accumulating preferences, decisions, and context.
24
+
25
+ #### More controllable than global memory
26
+
27
+ Compared with a memory model that mixes cross-directory content and global conversations together, a project-scoped, skill-bound memory system reduces irrelevant noise and keeps retrieval and follow-up decisions closer to the current LifeOS workflow.
28
+
29
+ ### Directory Customization
30
+
31
+ LifeOS does not lock you into fixed directory names. Run `lifeos rename [path]` and the CLI will interactively list the directories that can be adjusted in the current vault, then guide you through choosing one and entering a new name.
32
+
33
+ It updates `lifeos.yaml`, renames the actual directory, and batch-replaces all related wikilinks across the vault. That lets you adapt directory names to your own workflow, language preference, and project structure while keeping configuration and links consistent.
34
+
35
+ ### Learning Workflows
36
+
37
+ LifeOS provides a set of Agent skills designed around the learning process, connecting "input -> understanding -> output -> reinforcement" into a continuous workflow:
38
+
39
+ - `/today`, `/brainstorm`, `/ask`: organize the day's focus, clarify questions, and quickly expand ideas
40
+ - `/project`, `/research`, `/knowledge`: turn a topic into a project, a research report, and structured knowledge notes
41
+ - `/digest`: subscribe to topic updates and generate structured weekly digests from paper sources, RSS, and web search
42
+ - `/read-pdf`, `/revise`, `/archive`: move from source extraction, to review and reinforcement, to periodic archiving
43
+
44
+ ## Core Components
45
+
46
+ - **Memory system** — Project-scoped and skill-bound, providing vault indexing, session memory, and context assembly for AI agents
47
+ - **CLI scaffold** — install globally, then use `lifeos init` to bootstrap a complete workspace
48
+ - **Skill system** — 10 Agent skills covering daily planning, projects, research, weekly digests, knowledge curation, review, and more
49
+ - **Templates + Schema** — 8 structured templates + Frontmatter schema for consistent notes
50
+
51
+ ## Quick Start
52
+
53
+ LifeOS has been verified to work properly with Claude Code TUI / Codex TUI / OpenCode TUI on macOS, and with OpenCode GUI on Windows. Other desktop GUI apps or platform/client combinations have not been validated yet and may require additional testing.
54
+
55
+ ### Prerequisites
56
+
57
+ Before starting, make sure Obsidian and at least one of Claude Code TUI / Codex TUI / OpenCode TUI / OpenCode GUI are installed locally.
58
+
59
+ | Dependency | Required | Purpose |
60
+ |---|---|---|
61
+ | **Node.js 24.14.1+ (LTS)** | Required | Runtime for MCP server and CLI |
62
+ | **Python 3** | Required | PDF extraction (`/read-pdf`) and digest fetch helpers (`/digest`) |
63
+
64
+ `lifeos init` checks all prerequisites before creating the workspace.
65
+
66
+ ### Installation and Initialization
67
+
68
+ ```bash
69
+ # Step 1: install the CLI globally
70
+ npm install -g lifeos
71
+
72
+ # Step 2: create a new LifeOS workspace (auto-detects language from system locale)
73
+ lifeos init ./my-vault
74
+
75
+ # Or specify language explicitly
76
+ lifeos init ./my-vault --lang zh # Chinese
77
+ lifeos init ./my-vault --lang en # English
78
+ ```
79
+
80
+ After init, MCP server configs are automatically registered for:
81
+
82
+ | Tool | Config file |
83
+ |---|---|
84
+ | **Claude Code** | `.mcp.json` |
85
+ | **Codex** | `.codex/config.toml` |
86
+ | **OpenCode** | `opencode.json` |
87
+
88
+ Launch any of these tools in the vault directory to use all skills.
89
+
90
+ If you want version control for the vault, initialize and manage Git yourself. LifeOS does not create or manage Git metadata for you.
91
+
92
+ ## CLI Commands
93
+
94
+ ```bash
95
+ lifeos init [path] [--lang zh|en] [--no-mcp] # Create a new vault
96
+ lifeos upgrade [path] [--lang zh|en] [--override] # Upgrade and restore assets/scaffold
97
+ lifeos doctor [path] # Health check
98
+ lifeos rename [path] # Interactive directory rename
99
+ lifeos --help # Show help
100
+ lifeos --version # Show version
101
+ ```
102
+
103
+ ### init
104
+
105
+ Creates a complete LifeOS workspace:
106
+
107
+ - 10 top-level directories plus nested subdirectories
108
+ - 8 Markdown templates
109
+ - Frontmatter schema
110
+ - 10 AI skills with language-aware assets
111
+ - `CLAUDE.md` agent behavior spec
112
+ - `lifeos.yaml` config
113
+ - MCP server registration (Claude Code / Codex / OpenCode)
114
+
115
+ ### upgrade
116
+
117
+ Upgrades and re-syncs an initialized vault:
118
+
119
+ - **Smart merge**: update unmodified templates, schema files, built-in prompts, and skill files; skip modified ones with a warning
120
+ - **Restore missing scaffold**: bring back missing directories and managed files such as the memory directory, `.claude/skills`, `CLAUDE.md`, `AGENTS.md`, and MCP config entries
121
+ - **Preserve user changes**: built-in files already customized by the user are not force-overwritten
122
+ - **`--override` force-refreshes resources**: overwrite templates, schema, prompts, skills, `CLAUDE.md`, `AGENTS.md`, and MCP config entries without deleting user notes, resources, `memory.db`, memory-system data, or custom directory/memory settings in `lifeos.yaml`
123
+
124
+ By default, `lifeos upgrade` tries to preserve resource files you have already modified, while updating untouched content and restoring anything missing. If you want to explicitly replace those resources with the current built-in templates, skills, schema files, and MCP config entries, use `--override`:
125
+
126
+ ```bash
127
+ lifeos upgrade ./my-vault --override
128
+ ```
129
+
130
+ ### doctor
131
+
132
+ Checks vault integrity: directory structure, templates, schema, skills, config, Node.js version, and asset version.
133
+
134
+ ### rename: Directory Customization
135
+
136
+ No extra flags are required. Run `lifeos rename [path]` and the CLI will show the directories available in the current vault, then guide you step by step to choose one and enter a new name. It updates `lifeos.yaml`, renames the actual directory, and batch-replaces related wikilinks across the vault.
137
+
138
+ This means LifeOS does not lock you into fixed directory names. You can freely adapt directory names to your own workflow, language preference, and project structure while keeping configuration and links consistent.
139
+
140
+ ## Skills
141
+
142
+ | Skill | Description |
143
+ |---|---|
144
+ | `/today` | Morning planning: review yesterday, plan today |
145
+ | `/project` | Idea -> structured project |
146
+ | `/research` | Topic -> deep research report |
147
+ | `/digest` | Topic subscription -> structured weekly digest |
148
+ | `/knowledge` | Book/paper -> knowledge note |
149
+ | `/revise` | Generate quizzes, grade, and track mastery |
150
+ | `/read-pdf` | PDF -> structured notes |
151
+ | `/ask` | Quick Q&A |
152
+ | `/brainstorm` | Interactive brainstorming |
153
+ | `/archive` | Archive completed projects, processed drafts, completed plans, and diary entries older than the most recent 7 days |
154
+
155
+ ## Custom Expert Prompts
156
+
157
+ The `/research` skill automatically scans the Prompts directory in your vault for expert prompt files. LifeOS ships with built-in expert prompts for AI/LLM, Math, Art, and History, and you can add your own to extend research capabilities to any domain.
158
+
159
+ ### How It Works
160
+
161
+ When you invoke `/research`, the Planning Agent:
162
+
163
+ 1. Lists all `.md` files in `{system directory}/Prompts/`
164
+ 2. Reads each file's frontmatter and **Domain Coverage** section
165
+ 3. Matches the research topic to the best-fit expert prompt
166
+ 4. Applies the matched prompt's analytical framework and output format to the research report
167
+
168
+ ### Adding Custom Expert Prompts
169
+
170
+ Create a `.md` file in your vault's Prompts directory (`{system directory}/Prompts/`). The Planning Agent will pick it up automatically on the next `/research` invocation, with no restart or re-init required. Use the built-in prompts in the same directory as a reference for structure.
171
+
172
+ ## Tech Stack
173
+
174
+ - **Runtime:** TypeScript + Node.js 24.14.1+ (LTS)
175
+ - **Database:** SQLite + FTS5 (full-text search)
176
+ - **Segmentation:** @node-rs/jieba (Chinese tokenization)
177
+ - **Protocol:** MCP (Model Context Protocol)
178
+ - **Vault:** Obsidian (plain Markdown + Frontmatter)
179
+
180
+ ## Milestones
181
+
182
+ - ✅ LifeOS 1.0 is now basically usable
183
+ - ✅ The CLI supports directory customization
184
+ - ✅ The CLI `upgrade` command supports smart updates
185
+ - ✅ Claude Code TUI / Codex TUI / OpenCode TUI on macOS and OpenCode GUI on Windows have been tested
186
+ - ✅ The `/digest` skill supports multilingual weekly digests with multi-source paper fetching
187
+ - ☐ Improve memory-system precision
188
+ - ☐ Support custom skills
189
+ - ☐ Support custom workflows
190
+
191
+ ## Development
192
+
193
+ ```bash
194
+ git clone git@github.com:luneth90/lifeos.git
195
+ cd lifeos
196
+ npm install
197
+ npm run build # Compile TypeScript
198
+ npm test # Run tests (431 tests)
199
+ npm run dev # Dev mode (hot reload)
200
+ ```
201
+
202
+ ## License
203
+
204
+ [MIT](LICENSE)
205
+
206
+ ## Acknowledgements
207
+
208
+ This project was inspired by [MarsWang42/OrbitOS](https://github.com/MarsWang42/OrbitOS).
package/README.md CHANGED
@@ -1,127 +1,126 @@
1
1
  # LifeOS
2
- ![LifeOS Example](./example.png)
3
- [中文](./README.zh.md) | English
2
+ ![LifeOS 示例](./example.png)
3
+ [English](./README.en.md) | 中文
4
4
 
5
- LifeOS helps you grow scattered ideas into structured knowledge and truly master it, from quick captures, to brainstorming and deep research, to systematic project planning and knowledge notes, to spaced review and mastery tracking. The goal is not just building a knowledge base, but helping you understand, internalize, and command complex knowledge.
5
+ LifeOS 帮助你将碎片灵感发展为结构化知识,并真正掌握它,从随手捕获的想法,到头脑风暴与深度研究,到体系化的项目规划与知识笔记,再到间隔复习与掌握度追踪。目标不只是建立知识库,而是帮你理解、内化和驾驭复杂知识。
6
6
 
7
- ## Why Build LifeOS?
7
+ ## 为什么开发 LifeOS
8
8
 
9
- LifeOS started from a simple goal: package learning workflows, skills, templates, prompts, and a memory system into one complete setup you can use immediately. Instead of assembling your own toolchain from scratch or jumping between disconnected tools, you can initialize once, start working right away, and keep accumulating knowledge, process, and preferences as you go.
9
+ LifeOS 的出发点很直接:把学习工作流、技能、模板、提示词和记忆系统整合成一套可以直接落地的完整方案。你不需要自己从零拼装工具链,也不必在不同工具之间来回切换,初始化后即可开箱即用,并在真实使用中持续沉淀知识、流程与偏好。
10
10
 
11
- ## Core Features
11
+ ## 核心功能
12
12
 
13
- ### Memory System
13
+ ### 记忆系统
14
14
 
15
- > The memory system is LifeOS's core capability. It works in a directory-scoped, skill-bound way, continuously preserving the context, preferences, and decisions that emerge during learning so long-term learning becomes more continuous, more traceable, and easier to build on.
15
+ > 记忆系统是 LifeOS 的核心能力,它以目录级、技能绑定的方式工作,把学习过程中的上下文、偏好与决策持续沉淀下来,让长期学习更连贯、更可追踪,也更容易形成积累。
16
16
 
17
- #### Cross-session continuity
17
+ #### 跨会话连续性
18
18
 
19
- Session bridges and active-document context persist, so agents do not depend only on the current conversation.
19
+ 会话桥接和活跃文档上下文会持续沉淀,Agent 不只依赖当前对话。
20
20
 
21
- #### Project-scoped and skill-bound
21
+ #### 项目级、技能绑定
22
22
 
23
- The memory system runs around the current LifeOS project in the vault, activates only inside workflows such as `today`, `project`, `research`, `knowledge`, `revise`, `digest`, and `archive`, and keeps accumulating preferences, decisions, and context.
23
+ 记忆系统围绕当前 Vault 中的 LifeOS 项目运行,只在 `today`、`project`、`research`、`knowledge`、`revise`、`digest`、`archive` 等技能工作流里激活,并持续积累偏好、决策和上下文。
24
24
 
25
- #### More controllable than global memory
25
+ #### 比全局记忆更可控
26
26
 
27
- Compared with a memory model that mixes cross-directory content and global conversations together, a project-scoped, skill-bound memory system reduces irrelevant noise and keeps retrieval and follow-up decisions closer to the current LifeOS workflow.
27
+ 相较于把跨目录内容和全局会话混在一起的记忆方式,项目级、技能绑定的记忆系统能减少无关噪声,让检索结果与后续决策更贴近当前 LifeOS 工作流。
28
28
 
29
- ### Directory Customization
29
+ ### 目录自定义
30
30
 
31
- LifeOS does not lock you into fixed directory names. Run `lifeos rename [path]` and the CLI will interactively list the directories that can be adjusted in the current vault, then guide you through choosing one and entering a new name.
31
+ LifeOS 不把目录命名固定死。执行 `lifeos rename [path]` 后,CLI 会交互式列出当前 Vault 中可调整的目录,引导你选择目录并输入新名称。
32
32
 
33
- It updates `lifeos.yaml`, renames the actual directory, and batch-replaces all related wikilinks across the vault. That lets you adapt directory names to your own workflow, language preference, and project structure while keeping configuration and links consistent.
33
+ 它会同步更新 `lifeos.yaml`、重命名实际目录,并批量替换 Vault 中所有相关的 wikilink。你可以根据自己的工作流、语言习惯和项目结构自由调整目录名称,同时保持配置和链接关系一致。
34
34
 
35
- ### Learning Workflows
35
+ ### 学习工作流
36
36
 
37
- LifeOS provides a set of Agent skills designed around the learning process, connecting "input -> understanding -> output -> reinforcement" into a continuous workflow:
37
+ LifeOS 提供一组围绕学习过程设计的 Agent 技能,把“输入 -> 理解 -> 产出 -> 巩固”串成连续工作流:
38
38
 
39
- - `/today`, `/brainstorm`, `/ask`: organize the day's focus, clarify questions, and quickly expand ideas
40
- - `/project`, `/research`, `/knowledge`: turn a topic into a project, a research report, and structured knowledge notes
41
- - `/digest`: subscribe to topic updates and generate structured weekly digests from paper sources, RSS, and web search
42
- - `/read-pdf`, `/revise`, `/archive`: move from source extraction, to review and reinforcement, to periodic archiving
39
+ - `/today`、`/brainstorm`、`/ask`:整理当天重点、澄清问题、快速展开想法
40
+ - `/project`、`/research`、`/knowledge`:把主题推进成项目、研究报告和知识笔记
41
+ - `/digest`:按主题订阅论文、RSS Web 更新,自动生成结构化信息周报
42
+ - `/read-pdf`、`/revise`、`/archive`:从资料提取、复习巩固,到定期归档收束
43
43
 
44
- ## Core Components
44
+ ## 核心组件
45
45
 
46
- - **Memory system** Project-scoped and skill-bound, providing vault indexing, session memory, and context assembly for AI agents
47
- - **CLI scaffold** — install globally, then use `lifeos init` to bootstrap a complete workspace
48
- - **Skill system** — 10 Agent skills covering daily planning, projects, research, weekly digests, knowledge curation, review, and more
49
- - **Templates + Schema** — 8 structured templates + Frontmatter schema for consistent notes
46
+ - **记忆系统**:项目级、技能绑定,为 AI Agent 提供 Vault 索引、会话记忆、上下文组装
47
+ - **CLI 脚手架**:全局安装后使用 `lifeos init` 一键创建工作空间
48
+ - **技能系统**:10 Agent 技能覆盖日记、项目、研究、信息周报、知识整理、复习等工作流
49
+ - **模板 + 规范**:8 个结构化模板 + Frontmatter 规范,确保笔记一致性
50
50
 
51
- ## Quick Start
51
+ ## 快速开始
52
52
 
53
- LifeOS has been verified to work properly with Claude Code TUI / Codex TUI / OpenCode TUI on macOS, and with OpenCode GUI on Windows. Other desktop GUI apps or platform/client combinations have not been validated yet and may require additional testing.
53
+ 目前已确认 macOS 上的 Claude Code TUI / Codex TUI / OpenCode TUI,以及 Windows OpenCode GUI 可以正常使用。其他 GUI 桌面端或平台/客户端组合尚未完成验证,实际兼容性仍需进一步测试。
54
54
 
55
- ### Prerequisites
55
+ ### 前置要求
56
56
 
57
- Before starting, make sure Obsidian and at least one of Claude Code TUI / Codex TUI / OpenCode TUI / OpenCode GUI are installed locally.
57
+ 开始前,请确保本机已安装 Obsidian,以及 Claude Code TUI / Codex TUI / OpenCode TUI / OpenCode GUI 中至少一种。
58
58
 
59
- | Dependency | Required | Purpose |
59
+ | 依赖 | 必须 | 用途 |
60
60
  |---|---|---|
61
- | **Node.js 24.14.1+ (LTS)** | Required | Runtime for MCP server and CLI |
62
- | **Python 3** | Required | PDF extraction (`/read-pdf`) and digest fetch helpers (`/digest`) |
61
+ | **Node.js 24.14.1+ (LTS)** | 必须 | MCP Server CLI 运行环境 |
62
+ | **Python 3** | 必须 | PDF 提取(`/read-pdf`)和信息周报抓取脚本(`/digest`) |
63
63
 
64
- `lifeos init` checks all prerequisites before creating the workspace.
64
+ `lifeos init` 会在创建工作空间前自动检查所有前置依赖。
65
65
 
66
- ### Installation and Initialization
66
+ ### 安装与初始化
67
67
 
68
68
  ```bash
69
- # Step 1: install the CLI globally
69
+ # 第一步:全局安装 CLI
70
70
  npm install -g lifeos
71
71
 
72
- # Step 2: create a new LifeOS workspace (auto-detects language from system locale)
72
+ # 第二步:创建新的 LifeOS 工作空间(根据系统 locale 自动检测语言)
73
73
  lifeos init ./my-vault
74
74
 
75
- # Or specify language explicitly
76
- lifeos init ./my-vault --lang zh # Chinese
77
- lifeos init ./my-vault --lang en # English
75
+ # 或显式指定语言
76
+ lifeos init ./my-vault --lang zh # 中文
77
+ lifeos init ./my-vault --lang en # 英文
78
78
  ```
79
79
 
80
- After init, MCP server configs are automatically registered for:
80
+ 安装完成后,MCP server 配置会自动注册到以下工具:
81
81
 
82
- | Tool | Config file |
82
+ | 工具 | 配置文件 |
83
83
  |---|---|
84
84
  | **Claude Code** | `.mcp.json` |
85
85
  | **Codex** | `.codex/config.toml` |
86
86
  | **OpenCode** | `opencode.json` |
87
87
 
88
- Launch any of these tools in the vault directory to use all skills.
88
+ Vault 目录下启动任一工具即可使用所有技能。
89
89
 
90
- If you want version control for the vault, initialize and manage Git yourself. LifeOS does not create or manage Git metadata for you.
91
-
92
- ## CLI Commands
90
+ ## CLI 命令
93
91
 
94
92
  ```bash
95
- lifeos init [path] [--lang zh|en] [--no-mcp] # Create a new vault
96
- lifeos upgrade [path] [--lang zh|en] [--override] # Upgrade and restore assets/scaffold
97
- lifeos doctor [path] # Health check
98
- lifeos rename [path] # Interactive directory rename
99
- lifeos --help # Show help
100
- lifeos --version # Show version
93
+ lifeos init [path] [--lang zh|en] [--no-mcp] # 创建新 Vault
94
+ lifeos upgrade [path] [--lang zh|en] [--override] # 升级并补齐资产与脚手架
95
+ lifeos doctor [path] # 健康检查
96
+ lifeos rename [path] # 交互式重命名目录
97
+ lifeos --help # 查看帮助
98
+ lifeos --version # 查看版本
101
99
  ```
102
100
 
103
101
  ### init
104
102
 
105
- Creates a complete LifeOS workspace:
103
+ 创建完整的 LifeOS 工作空间:
106
104
 
107
- - 10 top-level directories plus nested subdirectories
108
- - 8 Markdown templates
109
- - Frontmatter schema
110
- - 10 AI skills with language-aware assets
111
- - `CLAUDE.md` agent behavior spec
112
- - `lifeos.yaml` config
113
- - MCP server registration (Claude Code / Codex / OpenCode)
105
+ - 10 个顶层目录 + 嵌套子目录
106
+ - 8 Markdown 模板
107
+ - Frontmatter 规范
108
+ - 10 AI 技能(按语言自动切换)
109
+ - `CLAUDE.md` Agent 行为规范
110
+ - `lifeos.yaml` 配置文件
111
+ - Git 初始化 + `.gitignore`
112
+ - MCP Server 注册(Claude Code / Codex / OpenCode)
114
113
 
115
114
  ### upgrade
116
115
 
117
- Upgrades and re-syncs an initialized vault:
116
+ 对已初始化的 Vault 执行升级与补全:
118
117
 
119
- - **Smart merge**: update unmodified templates, schema files, built-in prompts, and skill files; skip modified ones with a warning
120
- - **Restore missing scaffold**: bring back missing directories and managed files such as the memory directory, `.claude/skills`, `CLAUDE.md`, `AGENTS.md`, and MCP config entries
121
- - **Preserve user changes**: built-in files already customized by the user are not force-overwritten
122
- - **`--override` force-refreshes resources**: overwrite templates, schema, prompts, skills, `CLAUDE.md`, `AGENTS.md`, and MCP config entries without deleting user notes, resources, `memory.db`, memory-system data, or custom directory/memory settings in `lifeos.yaml`
118
+ - **智能合并**:模板、规范、内置提示词、技能文件未修改则更新,已修改则跳过并警告
119
+ - **缺失补全**:缺失的目录和脚手架文件会补回,例如记忆目录、`.claude/skills`、`CLAUDE.md`、`AGENTS.md`、`.gitignore`、`.git`、MCP 配置
120
+ - **保留用户修改**:已存在且被用户改过的内置文件不会被强制覆盖
121
+ - **`--override` 强制刷新资源**:覆盖模板、规范、提示词、技能、`CLAUDE.md`、`AGENTS.md` 以及 MCP 配置,但不会删除用户笔记、资源、`memory.db`、记忆系统数据,也不会改写 `lifeos.yaml` 里的目录和记忆配置
123
122
 
124
- By default, `lifeos upgrade` tries to preserve resource files you have already modified, while updating untouched content and restoring anything missing. If you want to explicitly replace those resources with the current built-in templates, skills, schema files, and MCP config entries, use `--override`:
123
+ 默认执行 `lifeos upgrade` 时,会尽量保留你已经改过的资源文件,只更新未修改内容并补齐缺失项。如果你希望直接用当前版本的内置模板、技能、规范和 MCP 配置重新覆盖这些资源,可以显式加上 `--override`:
125
124
 
126
125
  ```bash
127
126
  lifeos upgrade ./my-vault --override
@@ -129,80 +128,80 @@ lifeos upgrade ./my-vault --override
129
128
 
130
129
  ### doctor
131
130
 
132
- Checks vault integrity: directory structure, templates, schema, skills, config, Node.js version, and asset version.
131
+ 检查 Vault 完整性:目录结构、模板、规范、技能、配置文件、Node.js 版本、资产版本。
133
132
 
134
- ### rename: Directory Customization
133
+ ### rename:目录可自定义化
135
134
 
136
- No extra flags are required. Run `lifeos rename [path]` and the CLI will show the directories available in the current vault, then guide you step by step to choose one and enter a new name. It updates `lifeos.yaml`, renames the actual directory, and batch-replaces related wikilinks across the vault.
135
+ 无需额外参数,直接执行 `lifeos rename [path]` 后,CLI 会列出当前 Vault 中可调整的目录,并通过交互引导你选择目录和输入新名称。它会同步更新 `lifeos.yaml`、重命名实际目录,并批量替换 Vault 中所有相关的 wikilink。
137
136
 
138
- This means LifeOS does not lock you into fixed directory names. You can freely adapt directory names to your own workflow, language preference, and project structure while keeping configuration and links consistent.
137
+ 这意味着 LifeOS 的目录命名不是固定死的。你可以根据自己的工作流、语言习惯和项目结构,自由调整各个目录的名称,同时保持配置和链接关系一致,获得最大的使用自由度。
139
138
 
140
- ## Skills
139
+ ## 技能一览
141
140
 
142
- | Skill | Description |
141
+ | 技能 | 功能 |
143
142
  |---|---|
144
- | `/today` | Morning planning: review yesterday, plan today |
145
- | `/project` | Idea -> structured project |
146
- | `/research` | Topic -> deep research report |
147
- | `/digest` | Topic subscription -> structured weekly digest |
148
- | `/knowledge` | Book/paper -> knowledge note |
149
- | `/revise` | Generate quizzes, grade, and track mastery |
150
- | `/read-pdf` | PDF -> structured notes |
151
- | `/ask` | Quick Q&A |
152
- | `/brainstorm` | Interactive brainstorming |
153
- | `/archive` | Archive completed projects, processed drafts, completed plans, and diary entries older than the most recent 7 days |
143
+ | `/today` | 晨间规划:回顾昨日、规划今日 |
144
+ | `/project` | 想法 结构化项目 |
145
+ | `/research` | 主题 深度研究报告 |
146
+ | `/digest` | 主题订阅 结构化信息周报 |
147
+ | `/knowledge` | 书籍/论文 知识笔记 |
148
+ | `/revise` | 生成复习题、批改、追踪掌握度 |
149
+ | `/read-pdf` | PDF 结构化笔记 |
150
+ | `/ask` | 快速问答 |
151
+ | `/brainstorm` | 交互式头脑风暴 |
152
+ | `/archive` | 归档已完成的项目、已处理的草稿、已完成的计划,以及超过最近 7 天的日记 |
154
153
 
155
- ## Custom Expert Prompts
154
+ ## 自定义专家提示词
156
155
 
157
- The `/research` skill automatically scans the Prompts directory in your vault for expert prompt files. LifeOS ships with built-in expert prompts for AI/LLM, Math, Art, and History, and you can add your own to extend research capabilities to any domain.
156
+ `/research` 技能会自动扫描 Vault 中提示词目录下的所有专家人格文件。LifeOS 内置了 AI/LLM、数学、艺术、历史等领域的专家人格,你可以添加自己的提示词来扩展研究能力到任何领域。
158
157
 
159
- ### How It Works
158
+ ### 工作原理
160
159
 
161
- When you invoke `/research`, the Planning Agent:
160
+ 调用 `/research` 时,Planning Agent 会:
162
161
 
163
- 1. Lists all `.md` files in `{system directory}/Prompts/`
164
- 2. Reads each file's frontmatter and **Domain Coverage** section
165
- 3. Matches the research topic to the best-fit expert prompt
166
- 4. Applies the matched prompt's analytical framework and output format to the research report
162
+ 1. 列出 `{系统目录}/提示词/` 下所有 `.md` 文件
163
+ 2. 读取每个文件的 frontmatter 和**领域覆盖**章节
164
+ 3. 将研究主题与最匹配的专家提示词进行比对
165
+ 4. 将匹配的专家提示词的分析框架和输出格式应用到研究报告中
167
166
 
168
- ### Adding Custom Expert Prompts
167
+ ### 添加自定义专家提示词
169
168
 
170
- Create a `.md` file in your vault's Prompts directory (`{system directory}/Prompts/`). The Planning Agent will pick it up automatically on the next `/research` invocation, with no restart or re-init required. Use the built-in prompts in the same directory as a reference for structure.
169
+ Vault 的提示词目录(`{系统目录}/提示词/`)下创建 `.md` 文件即可。Planning Agent 在下次 `/research` 调用时会自动发现,无需重启或重新初始化。文件结构参照同目录下的预设提示词即可。
171
170
 
172
- ## Tech Stack
171
+ ## 技术栈
173
172
 
174
- - **Runtime:** TypeScript + Node.js 24.14.1+ (LTS)
175
- - **Database:** SQLite + FTS5 (full-text search)
176
- - **Segmentation:** @node-rs/jieba (Chinese tokenization)
173
+ - **Runtime:** TypeScript + Node.js 18+
174
+ - **Database:** SQLite + FTS5(全文搜索)
175
+ - **Segmentation:** @node-rs/jieba(中文分词)
177
176
  - **Protocol:** MCP (Model Context Protocol)
178
- - **Vault:** Obsidian (plain Markdown + Frontmatter)
177
+ - **Vault:** Obsidian(纯 Markdown + Frontmatter
179
178
 
180
- ## Milestones
179
+ ## 里程碑
181
180
 
182
- - ✅ LifeOS 1.0 is now basically usable
183
- - ✅ The CLI supports directory customization
184
- - ✅ The CLI `upgrade` command supports smart updates
185
- - ✅ Claude Code TUI / Codex TUI / OpenCode TUI on macOS and OpenCode GUI on Windows have been tested
186
- - ✅ The `/digest` skill supports multilingual weekly digests with multi-source paper fetching
187
- - ☐ Improve memory-system precision
188
- - ☐ Support custom skills
189
- - ☐ Support custom workflows
181
+ - ✅ LifeOS 1.0 版本已初步可用
182
+ - ✅ CLI 支持目录自定义
183
+ - ✅ CLI upgrade 支持智能更新
184
+ - ✅ 已完成 macOS 上 Claude Code TUI / Codex TUI / OpenCode TUI Windows OpenCode GUI 的验证
185
+ - ✅ `/digest` 技能已支持中英双语信息周报与多来源论文抓取
186
+ - ☐ 强化记忆系统精准性
187
+ - ☐ 支持自定义技能
188
+ - ☐ 支持自定义工作流
190
189
 
191
- ## Development
190
+ ## 开发
192
191
 
193
192
  ```bash
194
193
  git clone git@github.com:luneth90/lifeos.git
195
194
  cd lifeos
196
195
  npm install
197
- npm run build # Compile TypeScript
198
- npm test # Run tests (431 tests)
199
- npm run dev # Dev mode (hot reload)
196
+ npm run build # 编译 TypeScript
197
+ npm test # 运行测试(431 个)
198
+ npm run dev # 开发模式(热重载)
200
199
  ```
201
200
 
202
201
  ## License
203
202
 
204
203
  [MIT](LICENSE)
205
204
 
206
- ## Acknowledgements
205
+ ## 致谢
207
206
 
208
- This project was inspired by [MarsWang42/OrbitOS](https://github.com/MarsWang42/OrbitOS).
207
+ 本项目的灵感来源于 [MarsWang42/OrbitOS](https://github.com/MarsWang42/OrbitOS)
@@ -6,7 +6,7 @@
6
6
  > The default directory names below come from presets; actual names follow the user's `lifeos.yaml` configuration.
7
7
 
8
8
  # Agent Behavior Guidelines — LifeOS
9
- `v1.1.1`
9
+ `v1.1.2`
10
10
 
11
11
  You are the user's lifelong learning partner. Through **LifeOS**, help the user develop fragmented inspirations into structured knowledge and truly master it — from casually captured ideas, through brainstorming and deep research, to systematic project planning and knowledge notes, then spaced review and mastery tracking. The goal is not just building a knowledge base, but helping the user understand, internalize, and command complex knowledge.
12
12
 
@@ -6,7 +6,7 @@
6
6
  > 以下默认目录名来自 preset,实际名称以用户 Vault 中的 `lifeos.yaml` 为准。
7
7
 
8
8
  # Agent 行为规范 — LifeOS
9
- `v1.1.1`
9
+ `v1.1.2`
10
10
 
11
11
  你是用户的终身学习伙伴。通过 **LifeOS**,帮助用户将碎片灵感发展为结构化知识,并真正掌握它——从随手捕获的想法,到头脑风暴与深度研究,到体系化的项目规划与知识笔记,再到间隔复习与掌握度追踪。目标不只是建立知识库,而是帮用户理解、内化和驾驭复杂知识。
12
12
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: archive
3
3
  description: "Scan and archive completed projects (status:done), consumed drafts (status:researched/projected/knowledged), completed plans (status: done), and diary entries older than the most recent 7 days, moving them into the unified archive structure and updating frontmatter. Never touches pending drafts, active plans, or the most recent 7 days of diary entries. Use this skill when the user wants to clean up the Vault, archive completed work, tidy up, or says '/archive'."
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates: []
7
7
  prompts: []
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: archive
3
3
  description: '扫描并归档已完成的项目(status:done)、已消化的草稿(status:researched/projected/knowledged)、已完成的计划(status: done)以及超过最近 7 天的日记,按归档规则移入统一归档目录并更新 frontmatter。不会触碰 pending 草稿、active 计划或最近 7 天的日记。当用户想清理 Vault、归档已完成的工作、整理库、或说"/archive"时使用此技能。'
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates: []
7
7
  prompts: []
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: ask
3
3
  description: Quickly answer user questions, retrieving existing Vault notes as needed. Suitable for concept explanations, usage queries, Vault content lookups, PDF page-specific questions, and other single-turn Q&A scenarios. Complex questions will suggest upgrading to /brainstorm or /research.
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates:
7
7
  - path: "{system directory}/{templates subdirectory}/Draft_Template.md"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: ask
3
3
  description: 快速回答用户问题,按需检索 Vault 已有笔记辅助作答。适用于概念解释、用法查询、Vault 内容检索、PDF 指定页面提问等单轮问答场景。当用户提出任何直接问题或说"/ask"时使用此技能。复杂问题会建议升级到 /brainstorm 或 /research。
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates:
7
7
  - path: "{系统目录}/{模板子目录}/Draft_Template.md"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: brainstorm
3
3
  description: Explore and deepen user ideas through multi-turn interactive dialogue, using techniques like 5 Whys, What if, and Devil's Advocate to guide divergent thinking. Upon conclusion, the user can choose to create a project (invoke /project), organize wiki notes, or save as a draft. Suitable when the user wants to discuss an immature idea, needs divergent thinking, or wants to explore the feasibility of a direction.
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates:
7
7
  - path: "{system directory}/{templates subdirectory}/Wiki_Template.md"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: brainstorm
3
3
  description: 通过多轮交互式对话探索和深化用户的想法,使用 5 Whys、What if、Devil's Advocate 等思维技巧引导发散。结束后可选择创建项目(调用 /project)、整理为百科笔记、或保存为草稿。当用户想聊一个还不成熟的想法、需要发散思维、探索某个方向的可行性、或说"/brainstorm"时使用此技能。
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates:
7
7
  - path: "{系统目录}/{模板子目录}/Wiki_Template.md"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: digest
3
3
  description: "A general weekly digest skill: on first use, guide the user through creating a topic config note (Paper Sources, RSS, Web search, and more), then automatically fetch updates and write a structured weekly digest into the drafts directory. Supports multiple topics with separate configs and separate outputs. Trigger when the user says '/digest', 'digest', or asks for a weekly digest."
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates: []
7
7
  prompts: []
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: digest
3
3
  description: '通用信息周报技能:首次使用通过对话生成主题配置(Paper Sources、RSS、Web 搜索等),后续按配置自动抓取并产出结构化周报到草稿目录。支持多主题,每个主题独立配置和独立产出。当用户说"/digest"、"信息周报"、"周报"、"digest"时触发。'
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates: []
7
7
  prompts: []
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: knowledge
3
3
  description: "Distill structured knowledge notes and wiki concepts from book chapters or papers (output to {knowledge directory}/). Requires three inputs: project file (required), source content (required), draft notes (optional fusion). Produces main notes (template-structured) and wiki concepts (Wiki entries), establishing bidirectional Wikilinks. Use this skill when the user wants to organize chapter knowledge, extract wiki concepts, structure source text into notes, or says '/knowledge'. Will prompt to use /project first if no project file exists."
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates:
7
7
  - path: "{system directory}/{templates subdirectory}/Knowledge_Template.md"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: knowledge
3
3
  description: 从书籍章节或论文中蒸馏结构化知识笔记和百科概念(产出到 {知识目录}/)。需要三类输入:项目文件(必须)、原文内容(必须)、草稿笔记(可选融合)。产出主笔记(按模板结构化)和百科概念(Wiki 条目),并建立双向 Wikilinks。当用户想整理某章知识点、提取百科概念、把原文结构化为笔记、或说"/knowledge"时使用此技能。若无项目文件会提示先用 /project 创建。
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates:
7
7
  - path: "{系统目录}/{模板子目录}/Knowledge_Template.md"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: project
3
3
  description: "Transform ideas, drafts, or learning resources into structured project files (output to {projects directory}/). Uses dual-Agent workflow: the Planning Agent creates a `type: plan, status: active` plan file for review, then the Execution Agent creates the formal project after confirmation and updates the plan to `status: done`. Supports four project types: learning (chapter-based planning), development (single main project + docs directory), creative (milestone-based), general. Use this skill when the user wants to create a project, plan a book's study, formalize a draft idea, or says '/project'."
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates:
7
7
  - path: "{system directory}/{templates subdirectory}/Project_Template.md"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: project
3
3
  description: '将想法、草稿或学习资源转化为结构化的项目文件(产出到 {项目目录}/)。使用双 Agent 工作流:规划 Agent 生成 `type: plan, status: active` 的计划文件供用户审核,确认后执行 Agent 创建正式项目并将计划更新为 `status: done`。支持四种项目类型:学习(章节式规划)、开发(单主项目+文档目录)、创作(里程碑式)、通用。当用户想创建项目、规划一本书的学习、把草稿想法正式化、或说"/project"时使用此技能。'
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates:
7
7
  - path: "{系统目录}/{模板子目录}/Project_Template.md"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: read-pdf
3
3
  description: "Extract text, charts (Vision analysis), math formulas (to LaTeX), and tables (to Markdown) from PDF files, producing JSON intermediate data for /knowledge, /ask, /revise and other skills to consume. Supports page ranges and chapter name positioning. Use this skill when the user needs to read PDF content, extract specific pages, parse book chapters, or says '/read-pdf'. Also called internally by other skills."
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates: []
7
7
  prompts: []
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: read-pdf
3
3
  description: 从 PDF 文件中提取文字、图表(Vision 分析)、数学公式(转 LaTeX)和表格(转 Markdown),产出 JSON 中间数据供 /knowledge、/ask、/revise 等技能消费。支持页码范围和章节名定位。当用户需要读取 PDF 内容、提取特定页面、解析书籍章节、或说"/read-pdf"时使用此技能。也会被其他技能内部自动调用。
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates: []
7
7
  prompts: []
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: research
3
3
  description: "Conduct deep research on a specified topic or draft, producing structured research reports to {research directory}/. Uses dual-Agent workflow: the Planning Agent scans local drafts, matches expert personas, and creates a `type: plan, status: active` research plan; the Execution Agent combines local drafts with WebSearch external sources to write the report and updates the plan to `status: done`. Supports topic mode (direct topic) and file mode (draft as anchor). Use this skill when the user wants to deeply understand a topic, needs systematic research, wants to expand a draft into a full report, or says '/research'."
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates: []
7
7
  prompts:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: research
3
3
  description: '对指定主题或草稿进行深度研究,产出结构化研究报告到 {研究目录}/。使用双 Agent 工作流:规划 Agent 扫描本地草稿、匹配专家人格、生成 `type: plan, status: active` 的研究计划;执行 Agent 结合本地草稿与 WebSearch 外部资料撰写报告,并将计划更新为 `status: done`。支持主题模式(直接给主题)和文件模式(以草稿为锚点展开)。当用户想深入了解某个主题、需要系统性调研、想把草稿扩展为完整报告、或说"/research"时使用此技能。'
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates: []
7
7
  prompts:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: revise
3
3
  description: "Conduct active recall review of existing knowledge notes. Generates review files (.md) for the user to answer, then triggers grading upon completion, automatically updating note status (draft\u2192review\u2192mastered) and project mastery levels. Supports three modes: quiz mode (application questions), Feynman mode (explain concepts in own words), blind spot scan (self-assess mastery). Use this skill when the user wants to review, test mastery, or says '/revise'. Triggers grading flow when user says 'grade' or 'mark my review'."
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates:
7
7
  - path: "{system directory}/{templates subdirectory}/Revise_Template.md"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: revise
3
3
  description: 对已有知识笔记进行主动回忆复习。生成复习文件(.md),用户在文件中作答后触发批改,自动更新笔记 status(draft→revise→mastered)和项目掌握度。支持三种模式:提问模式(应用题)、费曼模式(用自己的话解释概念)、盲点扫描(自评掌握程度)。当用户想复习、测验掌握程度、说"/revise"时使用此技能。用户说"批改"或"改卷"时触发批改流程。
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates:
7
7
  - path: "{系统目录}/{模板子目录}/Revise_Template.md"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: today
3
3
  description: "Daily planning entry point: review yesterday's progress and incomplete tasks, scan active projects and notes pending review, collect the user's goals and new ideas for today, and generate today's diary file. Automatically suggests follow-up skills (/review, /research, /project, etc.)."
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates:
7
7
  - path: "{system directory}/{templates subdirectory}/Daily_Template.md"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: today
3
3
  description: 每日规划入口:回顾昨日进展和未完成任务、扫描活跃项目与待复习笔记、收集用户今日目标和新想法、生成今日日记文件。当用户开始新的一天、问"今天做什么"、说"早安"、想规划当日任务、或说"/today"时使用此技能。会自动提示后续可用的技能(/revise、/research、/project 等)。
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  dependencies:
6
6
  templates:
7
7
  - path: "{系统目录}/{模板子目录}/Daily_Template.md"
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export declare const VERSION = "1.1.1";
1
+ export declare const VERSION = "1.1.2";
2
2
  export * from './core.js';
3
3
  export { VaultConfig } from './config.js';
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // lifeos — LifeOS MCP Server
2
- export const VERSION = '1.1.1';
2
+ export const VERSION = '1.1.2';
3
3
  export * from './core.js';
4
4
  export { VaultConfig } from './config.js';
5
5
  //# sourceMappingURL=index.js.map
package/dist/server.js CHANGED
@@ -41,7 +41,7 @@ coreFn) {
41
41
  // ─── Server instance ──────────────────────────────────────────────────────────
42
42
  const server = new McpServer({
43
43
  name: 'lifeos',
44
- version: '1.1.1',
44
+ version: '1.1.2',
45
45
  });
46
46
  // ─── Tool registrations ───────────────────────────────────────────────────────
47
47
  // 1. memory_startup
@@ -71,10 +71,12 @@ export function runStartup(db, vaultRoot, resolvedSessionId, now) {
71
71
  }
72
72
  // 5. Full vault scan — vault-indexer opens its own DB connection via dbPath
73
73
  let scanIndexed = 0;
74
+ let scanRemoved = 0;
74
75
  try {
75
76
  const dbPath = db.name; // better-sqlite3 exposes .name as the db file path
76
77
  const scanResult = fullScan(vaultRoot, dbPath);
77
78
  scanIndexed = scanResult.indexed;
79
+ scanRemoved = scanResult.removed;
78
80
  }
79
81
  catch (e) {
80
82
  console.warn('[lifeos] vault scan failed:', e);
@@ -100,7 +102,7 @@ export function runStartup(db, vaultRoot, resolvedSessionId, now) {
100
102
  const enhanceQueueSize = countRows(db, 'enhance_queue', "status = 'pending'");
101
103
  return {
102
104
  layer0_summary: buildLayer0Summary(vaultRoot, policy, bridgeText),
103
- vault_stats: { total_files: totalFiles, updated_since_last: scanIndexed },
105
+ vault_stats: { total_files: totalFiles, updated_since_last: scanIndexed, removed: scanRemoved },
104
106
  enhance_queue_size: enhanceQueueSize,
105
107
  enhanced_files: enhanceResult.processed,
106
108
  last_session_bridge: bridgeText,
@@ -1 +1 @@
1
- {"version":3,"file":"startup.js","sourceRoot":"","sources":["../../src/services/startup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"startup.js","sourceRoot":"","sources":["../../src/services/startup.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -91,6 +91,7 @@ export interface StartupResult {
91
91
  vault_stats: {
92
92
  total_files: number;
93
93
  updated_since_last: number;
94
+ removed: number;
94
95
  };
95
96
  enhance_queue_size: number;
96
97
  enhanced_files: number;
@@ -24,6 +24,7 @@ export interface ParsedMarkdown {
24
24
  export interface ScanResult {
25
25
  indexed: number;
26
26
  skipped: number;
27
+ removed: number;
27
28
  }
28
29
  export interface IndexResult {
29
30
  status: 'indexed' | 'skipped' | 'removed';
@@ -128,6 +128,43 @@ function upsertIndex(db, filePath, parsed, fileSize, createdAt, modifiedAt) {
128
128
  function removeIndexEntry(db, filePath) {
129
129
  db.prepare('DELETE FROM vault_index WHERE file_path = ?').run(filePath);
130
130
  }
131
+ /** Return true only when statSync fails with ENOENT (file confirmed deleted).
132
+ * Any other error (EACCES, EIO, etc.) returns false to avoid purging live rows. */
133
+ function isConfirmedMissing(absPath) {
134
+ try {
135
+ statSync(absPath);
136
+ return false;
137
+ }
138
+ catch (err) {
139
+ return err.code === 'ENOENT';
140
+ }
141
+ }
142
+ /** Check that the vault looks genuine before allowing pruning.
143
+ * The root must be readable AND at least one configured scan-prefix directory
144
+ * must exist on disk. This prevents mass-deletion when the vault root points
145
+ * at an empty/stale mountpoint that is technically readable but has none of
146
+ * the vault's actual content. */
147
+ function isVaultIntact(vaultRoot, cfg) {
148
+ try {
149
+ readdirSync(vaultRoot);
150
+ }
151
+ catch {
152
+ return false;
153
+ }
154
+ // At least one scan-prefix dir must exist (e.g. "00_草稿/", "20_项目/")
155
+ for (const prefix of cfg.scanPrefixes()) {
156
+ // prefix has trailing slash (e.g. "00_草稿/"), strip it for the dir check
157
+ const dir = join(vaultRoot, prefix.replace(/\/$/, ''));
158
+ try {
159
+ statSync(dir);
160
+ return true;
161
+ }
162
+ catch {
163
+ // try next prefix
164
+ }
165
+ }
166
+ return false;
167
+ }
131
168
  // ─── Recursive file walk ──────────────────────────────────────────────────────
132
169
  function* walkMdFiles(dir) {
133
170
  let entries;
@@ -167,8 +204,10 @@ export function fullScan(vaultRoot, dbPath, config) {
167
204
  try {
168
205
  let indexed = 0;
169
206
  let skipped = 0;
207
+ const seenPaths = new Set();
170
208
  for (const absPath of walkMdFiles(vaultRoot)) {
171
209
  const relPath = relative(vaultRoot, absPath).replace(/\\/g, '/');
210
+ seenPaths.add(relPath);
172
211
  if (!shouldIndex(relPath, cfg)) {
173
212
  skipped++;
174
213
  continue;
@@ -193,7 +232,21 @@ export function fullScan(vaultRoot, dbPath, config) {
193
232
  upsertIndex(db, relPath, parsed, fileSize, createdAt, modifiedAt);
194
233
  indexed++;
195
234
  }
196
- return { indexed, skipped };
235
+ // Remove stale entries for files confirmed deleted from disk.
236
+ // Safety: only prune when the vault looks genuine — root is readable
237
+ // and at least one scan-prefix directory exists. This prevents
238
+ // mass-deletion on unmounted volumes or empty mountpoints.
239
+ let removed = 0;
240
+ if (isVaultIntact(vaultRoot, cfg)) {
241
+ const rows = db.prepare('SELECT file_path FROM vault_index').all();
242
+ for (const { file_path } of rows) {
243
+ if (!seenPaths.has(file_path) && isConfirmedMissing(join(vaultRoot, file_path))) {
244
+ removeIndexEntry(db, file_path);
245
+ removed++;
246
+ }
247
+ }
248
+ }
249
+ return { indexed, skipped, removed };
197
250
  }
198
251
  finally {
199
252
  db.close();
@@ -1 +1 @@
1
- {"version":3,"file":"vault-indexer.js","sourceRoot":"","sources":["../../src/utils/vault-indexer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vault-indexer.js","sourceRoot":"","sources":["../../src/utils/vault-indexer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lifeos",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "LifeOS — AI-native knowledge OS runtime, CLI scaffold, and MCP memory server",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/README.zh.md DELETED
@@ -1,207 +0,0 @@
1
- # LifeOS
2
- ![LifeOS 示例](./example.png)
3
- [English](./README.md) | 中文
4
-
5
- LifeOS 帮助你将碎片灵感发展为结构化知识,并真正掌握它,从随手捕获的想法,到头脑风暴与深度研究,到体系化的项目规划与知识笔记,再到间隔复习与掌握度追踪。目标不只是建立知识库,而是帮你理解、内化和驾驭复杂知识。
6
-
7
- ## 为什么开发 LifeOS?
8
-
9
- LifeOS 的出发点很直接:把学习工作流、技能、模板、提示词和记忆系统整合成一套可以直接落地的完整方案。你不需要自己从零拼装工具链,也不必在不同工具之间来回切换,初始化后即可开箱即用,并在真实使用中持续沉淀知识、流程与偏好。
10
-
11
- ## 核心功能
12
-
13
- ### 记忆系统
14
-
15
- > 记忆系统是 LifeOS 的核心能力,它以目录级、技能绑定的方式工作,把学习过程中的上下文、偏好与决策持续沉淀下来,让长期学习更连贯、更可追踪,也更容易形成积累。
16
-
17
- #### 跨会话连续性
18
-
19
- 会话桥接和活跃文档上下文会持续沉淀,Agent 不只依赖当前对话。
20
-
21
- #### 项目级、技能绑定
22
-
23
- 记忆系统围绕当前 Vault 中的 LifeOS 项目运行,只在 `today`、`project`、`research`、`knowledge`、`revise`、`digest`、`archive` 等技能工作流里激活,并持续积累偏好、决策和上下文。
24
-
25
- #### 比全局记忆更可控
26
-
27
- 相较于把跨目录内容和全局会话混在一起的记忆方式,项目级、技能绑定的记忆系统能减少无关噪声,让检索结果与后续决策更贴近当前 LifeOS 工作流。
28
-
29
- ### 目录自定义
30
-
31
- LifeOS 不把目录命名固定死。执行 `lifeos rename [path]` 后,CLI 会交互式列出当前 Vault 中可调整的目录,引导你选择目录并输入新名称。
32
-
33
- 它会同步更新 `lifeos.yaml`、重命名实际目录,并批量替换 Vault 中所有相关的 wikilink。你可以根据自己的工作流、语言习惯和项目结构自由调整目录名称,同时保持配置和链接关系一致。
34
-
35
- ### 学习工作流
36
-
37
- LifeOS 提供一组围绕学习过程设计的 Agent 技能,把“输入 -> 理解 -> 产出 -> 巩固”串成连续工作流:
38
-
39
- - `/today`、`/brainstorm`、`/ask`:整理当天重点、澄清问题、快速展开想法
40
- - `/project`、`/research`、`/knowledge`:把主题推进成项目、研究报告和知识笔记
41
- - `/digest`:按主题订阅论文、RSS 与 Web 更新,自动生成结构化信息周报
42
- - `/read-pdf`、`/revise`、`/archive`:从资料提取、复习巩固,到定期归档收束
43
-
44
- ## 核心组件
45
-
46
- - **记忆系统**:项目级、技能绑定,为 AI Agent 提供 Vault 索引、会话记忆、上下文组装
47
- - **CLI 脚手架**:全局安装后使用 `lifeos init` 一键创建工作空间
48
- - **技能系统**:10 个 Agent 技能覆盖日记、项目、研究、信息周报、知识整理、复习等工作流
49
- - **模板 + 规范**:8 个结构化模板 + Frontmatter 规范,确保笔记一致性
50
-
51
- ## 快速开始
52
-
53
- 目前已确认 macOS 上的 Claude Code TUI / Codex TUI / OpenCode TUI,以及 Windows 上 OpenCode GUI 可以正常使用。其他 GUI 桌面端或平台/客户端组合尚未完成验证,实际兼容性仍需进一步测试。
54
-
55
- ### 前置要求
56
-
57
- 开始前,请确保本机已安装 Obsidian,以及 Claude Code TUI / Codex TUI / OpenCode TUI / OpenCode GUI 中至少一种。
58
-
59
- | 依赖 | 必须 | 用途 |
60
- |---|---|---|
61
- | **Node.js 24.14.1+ (LTS)** | 必须 | MCP Server 和 CLI 运行环境 |
62
- | **Python 3** | 必须 | PDF 提取(`/read-pdf`)和信息周报抓取脚本(`/digest`) |
63
-
64
- `lifeos init` 会在创建工作空间前自动检查所有前置依赖。
65
-
66
- ### 安装与初始化
67
-
68
- ```bash
69
- # 第一步:全局安装 CLI
70
- npm install -g lifeos
71
-
72
- # 第二步:创建新的 LifeOS 工作空间(根据系统 locale 自动检测语言)
73
- lifeos init ./my-vault
74
-
75
- # 或显式指定语言
76
- lifeos init ./my-vault --lang zh # 中文
77
- lifeos init ./my-vault --lang en # 英文
78
- ```
79
-
80
- 安装完成后,MCP server 配置会自动注册到以下工具:
81
-
82
- | 工具 | 配置文件 |
83
- |---|---|
84
- | **Claude Code** | `.mcp.json` |
85
- | **Codex** | `.codex/config.toml` |
86
- | **OpenCode** | `opencode.json` |
87
-
88
- 在 Vault 目录下启动任一工具即可使用所有技能。
89
-
90
- ## CLI 命令
91
-
92
- ```bash
93
- lifeos init [path] [--lang zh|en] [--no-mcp] # 创建新 Vault
94
- lifeos upgrade [path] [--lang zh|en] [--override] # 升级并补齐资产与脚手架
95
- lifeos doctor [path] # 健康检查
96
- lifeos rename [path] # 交互式重命名目录
97
- lifeos --help # 查看帮助
98
- lifeos --version # 查看版本
99
- ```
100
-
101
- ### init
102
-
103
- 创建完整的 LifeOS 工作空间:
104
-
105
- - 10 个顶层目录 + 嵌套子目录
106
- - 8 个 Markdown 模板
107
- - Frontmatter 规范
108
- - 10 个 AI 技能(按语言自动切换)
109
- - `CLAUDE.md` Agent 行为规范
110
- - `lifeos.yaml` 配置文件
111
- - Git 初始化 + `.gitignore`
112
- - MCP Server 注册(Claude Code / Codex / OpenCode)
113
-
114
- ### upgrade
115
-
116
- 对已初始化的 Vault 执行升级与补全:
117
-
118
- - **智能合并**:模板、规范、内置提示词、技能文件未修改则更新,已修改则跳过并警告
119
- - **缺失补全**:缺失的目录和脚手架文件会补回,例如记忆目录、`.claude/skills`、`CLAUDE.md`、`AGENTS.md`、`.gitignore`、`.git`、MCP 配置
120
- - **保留用户修改**:已存在且被用户改过的内置文件不会被强制覆盖
121
- - **`--override` 强制刷新资源**:覆盖模板、规范、提示词、技能、`CLAUDE.md`、`AGENTS.md` 以及 MCP 配置,但不会删除用户笔记、资源、`memory.db`、记忆系统数据,也不会改写 `lifeos.yaml` 里的目录和记忆配置
122
-
123
- 默认执行 `lifeos upgrade` 时,会尽量保留你已经改过的资源文件,只更新未修改内容并补齐缺失项。如果你希望直接用当前版本的内置模板、技能、规范和 MCP 配置重新覆盖这些资源,可以显式加上 `--override`:
124
-
125
- ```bash
126
- lifeos upgrade ./my-vault --override
127
- ```
128
-
129
- ### doctor
130
-
131
- 检查 Vault 完整性:目录结构、模板、规范、技能、配置文件、Node.js 版本、资产版本。
132
-
133
- ### rename:目录可自定义化
134
-
135
- 无需额外参数,直接执行 `lifeos rename [path]` 后,CLI 会列出当前 Vault 中可调整的目录,并通过交互引导你选择目录和输入新名称。它会同步更新 `lifeos.yaml`、重命名实际目录,并批量替换 Vault 中所有相关的 wikilink。
136
-
137
- 这意味着 LifeOS 的目录命名不是固定死的。你可以根据自己的工作流、语言习惯和项目结构,自由调整各个目录的名称,同时保持配置和链接关系一致,获得最大的使用自由度。
138
-
139
- ## 技能一览
140
-
141
- | 技能 | 功能 |
142
- |---|---|
143
- | `/today` | 晨间规划:回顾昨日、规划今日 |
144
- | `/project` | 想法 → 结构化项目 |
145
- | `/research` | 主题 → 深度研究报告 |
146
- | `/digest` | 主题订阅 → 结构化信息周报 |
147
- | `/knowledge` | 书籍/论文 → 知识笔记 |
148
- | `/revise` | 生成复习题、批改、追踪掌握度 |
149
- | `/read-pdf` | PDF → 结构化笔记 |
150
- | `/ask` | 快速问答 |
151
- | `/brainstorm` | 交互式头脑风暴 |
152
- | `/archive` | 归档已完成的项目、已处理的草稿、已完成的计划,以及超过最近 7 天的日记 |
153
-
154
- ## 自定义专家提示词
155
-
156
- `/research` 技能会自动扫描 Vault 中提示词目录下的所有专家人格文件。LifeOS 内置了 AI/LLM、数学、艺术、历史等领域的专家人格,你可以添加自己的提示词来扩展研究能力到任何领域。
157
-
158
- ### 工作原理
159
-
160
- 调用 `/research` 时,Planning Agent 会:
161
-
162
- 1. 列出 `{系统目录}/提示词/` 下所有 `.md` 文件
163
- 2. 读取每个文件的 frontmatter 和**领域覆盖**章节
164
- 3. 将研究主题与最匹配的专家提示词进行比对
165
- 4. 将匹配的专家提示词的分析框架和输出格式应用到研究报告中
166
-
167
- ### 添加自定义专家提示词
168
-
169
- 在 Vault 的提示词目录(`{系统目录}/提示词/`)下创建 `.md` 文件即可。Planning Agent 在下次 `/research` 调用时会自动发现,无需重启或重新初始化。文件结构参照同目录下的预设提示词即可。
170
-
171
- ## 技术栈
172
-
173
- - **Runtime:** TypeScript + Node.js 18+
174
- - **Database:** SQLite + FTS5(全文搜索)
175
- - **Segmentation:** @node-rs/jieba(中文分词)
176
- - **Protocol:** MCP (Model Context Protocol)
177
- - **Vault:** Obsidian(纯 Markdown + Frontmatter)
178
-
179
- ## 里程碑
180
-
181
- - ✅ LifeOS 1.0 版本已初步可用
182
- - ✅ CLI 支持目录自定义
183
- - ✅ CLI upgrade 支持智能更新
184
- - ✅ 已完成 macOS 上 Claude Code TUI / Codex TUI / OpenCode TUI 与 Windows 上 OpenCode GUI 的验证
185
- - ✅ `/digest` 技能已支持中英双语信息周报与多来源论文抓取
186
- - ☐ 强化记忆系统精准性
187
- - ☐ 支持自定义技能
188
- - ☐ 支持自定义工作流
189
-
190
- ## 开发
191
-
192
- ```bash
193
- git clone git@github.com:luneth90/lifeos.git
194
- cd lifeos
195
- npm install
196
- npm run build # 编译 TypeScript
197
- npm test # 运行测试(431 个)
198
- npm run dev # 开发模式(热重载)
199
- ```
200
-
201
- ## License
202
-
203
- [MIT](LICENSE)
204
-
205
- ## 致谢
206
-
207
- 本项目的灵感来源于 [MarsWang42/OrbitOS](https://github.com/MarsWang42/OrbitOS)。