lifeos 1.0.2 → 1.0.3

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 (46) hide show
  1. package/README.md +15 -9
  2. package/README.zh.md +15 -9
  3. package/assets/lifeos-rules.en.md +1 -1
  4. package/assets/lifeos-rules.zh.md +1 -1
  5. package/assets/lifeos.yaml +1 -0
  6. package/assets/skills/archive/SKILL.en.md +1 -1
  7. package/assets/skills/archive/SKILL.zh.md +1 -1
  8. package/assets/skills/ask/SKILL.en.md +1 -1
  9. package/assets/skills/ask/SKILL.zh.md +1 -1
  10. package/assets/skills/brainstorm/SKILL.en.md +1 -1
  11. package/assets/skills/brainstorm/SKILL.zh.md +1 -1
  12. package/assets/skills/digest/SKILL.en.md +212 -0
  13. package/assets/skills/digest/SKILL.zh.md +207 -0
  14. package/assets/skills/digest/references/__pycache__/rss-arxiv-script.cpython-312.pyc +0 -0
  15. package/assets/skills/digest/references/config-parser.en.md +179 -0
  16. package/assets/skills/digest/references/config-parser.zh.md +177 -0
  17. package/assets/skills/digest/references/rss-arxiv-script.py +1549 -0
  18. package/assets/skills/digest/references/run-pipeline.en.md +236 -0
  19. package/assets/skills/digest/references/run-pipeline.zh.md +235 -0
  20. package/assets/skills/digest/references/setup-guide.en.md +192 -0
  21. package/assets/skills/digest/references/setup-guide.zh.md +188 -0
  22. package/assets/skills/knowledge/SKILL.en.md +1 -1
  23. package/assets/skills/knowledge/SKILL.zh.md +1 -1
  24. package/assets/skills/project/SKILL.en.md +1 -1
  25. package/assets/skills/project/SKILL.zh.md +1 -1
  26. package/assets/skills/read-pdf/SKILL.en.md +1 -1
  27. package/assets/skills/read-pdf/SKILL.zh.md +1 -1
  28. package/assets/skills/research/SKILL.en.md +1 -1
  29. package/assets/skills/research/SKILL.zh.md +1 -1
  30. package/assets/skills/revise/SKILL.en.md +1 -1
  31. package/assets/skills/revise/SKILL.zh.md +1 -1
  32. package/assets/skills/today/SKILL.en.md +1 -1
  33. package/assets/skills/today/SKILL.zh.md +1 -1
  34. package/dist/cli/commands/doctor.js +9 -9
  35. package/dist/cli/commands/doctor.js.map +1 -1
  36. package/dist/cli/commands/upgrade.js +20 -2
  37. package/dist/cli/commands/upgrade.js.map +1 -1
  38. package/dist/cli/utils/install-assets.js +6 -2
  39. package/dist/cli/utils/install-assets.js.map +1 -1
  40. package/dist/config.d.ts +1 -0
  41. package/dist/config.js +2 -0
  42. package/dist/config.js.map +1 -1
  43. package/dist/index.d.ts +1 -1
  44. package/dist/index.js +1 -1
  45. package/dist/server.js +1 -1
  46. package/package.json +1 -1
@@ -0,0 +1,207 @@
1
+ ---
2
+ name: digest
3
+ description: '通用信息周报技能:首次使用通过对话生成主题配置(Paper Sources、RSS、Web 搜索等),后续按配置自动抓取并产出结构化周报到草稿目录。支持多主题,每个主题独立配置和独立产出。当用户说"/digest"、"信息周报"、"周报"、"digest"时触发。'
4
+ version: 1.0.3
5
+ dependencies:
6
+ templates: []
7
+ prompts: []
8
+ schemas:
9
+ - path: "{系统目录}/{规范子目录}/Frontmatter_Schema.md"
10
+ agents: []
11
+ ---
12
+
13
+ > [!config]
14
+ > 本技能中的路径引用使用逻辑名(如 `{草稿目录}`)。
15
+ > Orchestrator 从 `lifeos.yaml` 解析实际路径后注入上下文。
16
+ > 路径映射:
17
+ > - `{草稿目录}` → directories.drafts
18
+ > - `{系统目录}` → directories.system
19
+ > - `{信息子目录}` → subdirectories.system.digest
20
+ > - `{规范子目录}` → subdirectories.system.schema
21
+
22
+ 你是 LifeOS 的信息汇总助手,帮助用户定期收集特定领域的最新进展,产出结构化周报。
23
+
24
+ **语言规则**:所有回复、配置笔记和周报都必须为中文。
25
+
26
+ # 工作流概述
27
+
28
+ 本技能有两种运行模式:
29
+
30
+ | 模式 | 触发条件 | 行为 |
31
+ |------|----------|------|
32
+ | **Setup 模式** | `{系统目录}/{信息子目录}/` 下无配置文件,或用户指定 `setup` | 对话式引导,生成主题配置笔记 |
33
+ | **Run 模式** | 配置文件已存在 | 读取配置,执行信息抓取,产出周报 |
34
+
35
+ # 入口路由
36
+
37
+ 根据用户输入决定模式:
38
+
39
+ ```text
40
+ /digest → 扫描 {系统目录}/{信息子目录}/ 下所有 .md 配置,逐个执行 Run 模式
41
+ 若目录为空或不存在 → 自动进入 Setup 模式
42
+ /digest <主题名> → 只执行指定主题的 Run 模式(匹配文件名)
43
+ 若文件不存在 → 自动进入 Setup 模式,以该主题名开始引导
44
+ /digest setup → 进入 Setup 模式,创建新主题配置
45
+ /digest setup <主题> → 进入 Setup 模式,以指定主题名开始引导
46
+ ```
47
+
48
+ # Setup 模式
49
+
50
+ 按 `references/setup-guide.md` 执行对话式引导:
51
+
52
+ 1. **确定主题**:询问用户想追踪的领域和子方向
53
+ 2. **了解偏好**:学术 vs 行业、必读来源、关注重点
54
+ 3. **生成配置**:根据主题推荐信息源,生成完整配置笔记
55
+ 4. **用户确认**:写入 `{系统目录}/{信息子目录}/<TopicName>.md`,提示用户在 Obsidian 中检查和裁剪
56
+
57
+ 配置笔记使用 Markdown 表格 + checkbox 开关,用户在 Obsidian 中可直接编辑:
58
+
59
+ - checkbox 勾选/取消 → 启用或禁用信息源模块
60
+ - 表格增删行 → 增删具体信息源,包括 `Paper Sources`
61
+ - 分类表格 → 调整周报结构
62
+
63
+ 配置笔记结构详见 `references/config-parser.md`。
64
+
65
+ # Run 模式
66
+
67
+ 按 `references/run-pipeline.md` 执行信息抓取管线。
68
+
69
+ ### 前置检查
70
+
71
+ 1. 验证 Python 3 可用:`python3 --version`
72
+ 2. 读取并解析配置笔记(按 `references/config-parser.md` 规范)
73
+
74
+ ### 执行管线
75
+
76
+ ```text
77
+ Phase 1: 解析配置 → 结构化数据
78
+ Phase 2: 并行抓取
79
+ ├─ Task A: RSS + paper sources → Python 脚本(references/rss-arxiv-script.py)
80
+ ├─ Task B: Web 搜索 → WebSearch 工具
81
+ ├─ Task C: HuggingFace 热门 → WebFetch
82
+ └─ Task D: GitHub Trending → WebFetch(可选)
83
+ Phase 3: 合并去重 → 按分类体系归类
84
+ Phase 4: 写入周报 → {草稿目录}/<TopicName>-MMDD-MMDD.md
85
+ ```
86
+
87
+ ### Python 脚本调用
88
+
89
+ RSS + paper source 抓取通过参数化 Python 脚本执行。技能先解析配置,构造 JSON 输入,通过 stdin 传入脚本。
90
+
91
+ `Paper Sources` 模型现在支持:
92
+
93
+ - `arXiv`、`bioRxiv`、`medRxiv`、`ChemRxiv`、`SocArXiv`、`SSRN`
94
+ - 每一行包含 `Source Type`、`Query`、`Scope`、`Notes`
95
+ - 脚本会为每个来源使用独立 adapter 归一化结果,并返回结构化错误,不会因为单个来源失败就中断整个流程
96
+ - 旧版 `### arXiv Search` 配置块仍然兼容,系统会把它转换成 `arXiv` 来源继续执行
97
+ - `SocArXiv` 结果在源站托管为 `OSF` 页面时,可以归一化为 `osf.io` 落地页
98
+ - 所有论文来源 adapter 都保持低请求预算:每个来源一次主请求,瞬时错误有限 retry,不做分页补全
99
+
100
+ 其中 arXiv 模块有三个关键约束:
101
+
102
+ - arXiv 查询必须使用英文
103
+ - 脚本会先按类别抓最近论文,再在本地过滤
104
+ - 若官方 arXiv 路径失败,可回退到 OpenAlex,但只保留能映射回 arXiv 的论文
105
+
106
+ 调用方式:
107
+
108
+ ```bash
109
+ echo '<json_input>' | python3 .agents/skills/digest/references/rss-arxiv-script.py
110
+ ```
111
+
112
+ JSON 输入格式:
113
+
114
+ ```json
115
+ {
116
+ "language": "zh",
117
+ "rss": {
118
+ "enabled": true,
119
+ "feeds": [{"name": "源名称", "url": "https://..."}]
120
+ },
121
+ "papers": {
122
+ "enabled": true,
123
+ "sources": [
124
+ {
125
+ "source_type": "arXiv",
126
+ "query": "\"llm agent\"",
127
+ "scope": "cs.AI",
128
+ "notes": "核心技术论文"
129
+ },
130
+ {
131
+ "source_type": "bioRxiv",
132
+ "query": "single-cell",
133
+ "scope": "Neuroscience",
134
+ "notes": "生物医学预印本"
135
+ }
136
+ ]
137
+ },
138
+ "days": 7
139
+ }
140
+ ```
141
+
142
+ 脚本会返回 `rss_articles`、归一化后的论文结果、`stats` 和结构化的 `errors`。
143
+
144
+ ### 周报产出
145
+
146
+ 写入 `{草稿目录}/<TopicName>-MMDD-MMDD.md`:
147
+
148
+ ```yaml
149
+ ---
150
+ title: "{主题} 周报 · YYYY-MM-DD ~ YYYY-MM-DD"
151
+ type: draft
152
+ created: "YYYY-MM-DD"
153
+ status: pending
154
+ tags: [digest, {topic-tag}, weekly-digest]
155
+ aliases: []
156
+ ---
157
+ ```
158
+
159
+ 正文按配置的分类体系组织,每条信息用 1-2 句中文摘要 + 原文链接。空分类不输出。末尾附信息来源清单。
160
+
161
+ # 文件路径
162
+
163
+ | 内容 | 路径 |
164
+ |------|------|
165
+ | 主题配置文件 | `{系统目录}/{信息子目录}/<TopicName>.md` |
166
+ | 周报产出 | `{草稿目录}/<TopicName>-MMDD-MMDD.md` |
167
+ | 解析规范 | `references/config-parser.md` |
168
+ | Setup 引导 | `references/setup-guide.md` |
169
+ | Run 管线 | `references/run-pipeline.md` |
170
+ | Python 脚本 | `references/rss-arxiv-script.py` |
171
+
172
+ # 记忆系统集成
173
+
174
+ > 通用协议(文件变更通知、技能完成、会话收尾)见 `_shared/memory-protocol.md`。以下仅列出本技能特有的行为。
175
+
176
+ ### 文件变更通知
177
+
178
+ 周报文件写入 Vault 后,立即调用:
179
+
180
+ ```text
181
+ memory_notify(file_path="{草稿目录}/<TopicName>-MMDD-MMDD.md")
182
+ ```
183
+
184
+ ### 技能完成
185
+
186
+ ```text
187
+ memory_skill_complete(
188
+ skill_name="digest",
189
+ summary="生成 {主题} 周报 MMDD-MMDD",
190
+ related_files=["{草稿目录}/<TopicName>-MMDD-MMDD.md"],
191
+ scope="digest",
192
+ refresh_targets=["TaskBoard", "UserProfile"]
193
+ )
194
+ ```
195
+
196
+ ### Setup 模式完成时
197
+
198
+ 配置文件创建后,额外记录一条决策:
199
+
200
+ ```text
201
+ memory_log(
202
+ entry_type="decision",
203
+ summary="创建 {主题} 信息订阅配置",
204
+ importance=2,
205
+ scope="digest"
206
+ )
207
+ ```
@@ -0,0 +1,179 @@
1
+ # Config Note Parsing Rules
2
+
3
+ This document defines how the `/digest` skill parses config notes stored at `{system directory}/{digest subdirectory}/<TopicName>.md`.
4
+
5
+ ## File Structure
6
+
7
+ The config note contains the following fixed sections, identified by second-level and third-level headings:
8
+
9
+ ```text
10
+ # <TopicName> Digest ← title only, not parsed
11
+ ## Basic Info ← key-value table
12
+ ## Sources ← container heading, not parsed
13
+ ### RSS Feeds ← module: checkbox + table
14
+ ### Paper Sources ← module: checkbox + table
15
+ ### arXiv Search ← legacy module: checkbox + table (still accepted)
16
+ ### Web Search ← module: checkbox + table + supplemental sites table
17
+ ### HuggingFace Papers ← module: checkbox + keyword line
18
+ ### GitHub Trending ← module: checkbox + keyword line
19
+ ## Categories ← category table
20
+ ## Source List ← not parsed, generated into the digest output
21
+ ```
22
+
23
+ ## Parsing Rules
24
+
25
+ ### 1. Basic Info
26
+
27
+ Locate `## Basic Info` and parse the two-column table (`Field | Value`):
28
+
29
+ | Field | Purpose | Required |
30
+ |-------|---------|----------|
31
+ | Topic | topic name used in digest title and filename | yes |
32
+ | Cadence | `Weekly` / `Biweekly` / `Monthly`, used to determine lookback window | yes |
33
+ | Language | digest output language | yes |
34
+
35
+ **Cadence mapping:**
36
+
37
+ - `Weekly` → 7 days
38
+ - `Biweekly` → 14 days
39
+ - `Monthly` → 30 days
40
+
41
+ ### 2. Module Enabled State
42
+
43
+ The first checkbox after each `###` heading controls whether that module is enabled:
44
+
45
+ ```markdown
46
+ ### RSS Feeds
47
+
48
+ - [x] Enabled
49
+ ```
50
+
51
+ ```markdown
52
+ ### GitHub Trending
53
+
54
+ - [ ] Enabled
55
+ ```
56
+
57
+ **Parsing logic:**
58
+
59
+ 1. find the `###` heading
60
+ 2. scan downward to the first line matching `- \[[ x]\]`
61
+ 3. `[x]` means enabled, `[ ]` means disabled
62
+
63
+ ### 3. Module Data
64
+
65
+ #### RSS Feeds
66
+
67
+ Table schema: `Name | URL | Focus`
68
+
69
+ ```json
70
+ {
71
+ "enabled": true,
72
+ "feeds": [
73
+ {"name": "Import AI", "url": "https://importai.substack.com", "description": "Frontier AI research commentary"}
74
+ ]
75
+ }
76
+ ```
77
+
78
+ **URL handling:**
79
+
80
+ - prepend `https://` when the URL does not start with `http`
81
+ - if the URL has no `/feed` or `/rss`, optionally try appending `/feed`
82
+
83
+ #### Paper Sources
84
+
85
+ Table schema: `Source Type | Query | Scope | Notes`
86
+
87
+ ```json
88
+ {
89
+ "enabled": true,
90
+ "sources": [
91
+ {
92
+ "source_type": "arXiv",
93
+ "query": "\"LLM agent\"",
94
+ "scope": "cs.AI, cs.CL",
95
+ "notes": "Core technical papers"
96
+ },
97
+ {
98
+ "source_type": "bioRxiv",
99
+ "query": "single-cell",
100
+ "scope": "Neuroscience",
101
+ "notes": "Biomedical preprints"
102
+ }
103
+ ]
104
+ }
105
+ ```
106
+
107
+ **Supported source types:** `arXiv`, `bioRxiv`, `medRxiv`, `ChemRxiv`, `SocArXiv`, `SSRN`.
108
+ **Source semantics:** `Query` is the search term or keyword phrase; `Scope` is the category,
109
+ collection, or journal filter used by that source; `Notes` is free-form guidance for the helper.
110
+ **Normalization:** the helper converts each row into a source adapter input and deduplicates papers
111
+ across sources.
112
+ **Source-link rules:** `SocArXiv` may normalize to `osf.io` or `socarxiv.com`; `SSRN` must
113
+ normalize to `papers.ssrn.com`, `ssrn.com`, or an SSRN DOI.
114
+ **Budget rule:** keep one primary request per source and do not paginate.
115
+ **Compatibility:** this is the preferred model for new notes.
116
+
117
+ #### arXiv Search
118
+
119
+ Table schema: `Keyword | Categories`
120
+
121
+ ```json
122
+ {
123
+ "enabled": true,
124
+ "keywords": ["\"LLM agent\"", "\"tool use\" language model"],
125
+ "categories": ["cs.AI", "cs.CL", "cs.IR"],
126
+ "max_results": 200
127
+ }
128
+ ```
129
+
130
+ **Legacy compatibility:** the parser still accepts `### arXiv Search` and normalizes it into an
131
+ `arXiv` paper source so older notes continue to work.
132
+ **Keyword language:** keywords must be English terms or English quoted phrases. Treat non-English
133
+ keywords as a config error for the arXiv source.
134
+ **Category deduplication:** combine all categories from every row and deduplicate them.
135
+ **Primary fetch behavior:** categories drive the official arXiv feed; keyword filtering happens
136
+ locally against title and abstract.
137
+ **Fallback behavior:** when categories are missing or the official arXiv path fails, the helper may
138
+ fall back to OpenAlex, but only keep papers that map back to arXiv.
139
+ **max_results:** fixed at 200 and not exposed in the note.
140
+
141
+ #### Web Search
142
+
143
+ Two tables:
144
+
145
+ 1. **Query Template** (`Query Template | Coverage`)
146
+ 2. **Supplemental Sites** (`Name | URL | Focus`)
147
+
148
+ Replace `{date range}` at runtime with the actual date span. Supplemental sites are used to build additional `site:` queries.
149
+
150
+ #### HuggingFace Papers
151
+
152
+ Locate the `**Filter keywords:**` line and split keywords by commas.
153
+
154
+ #### GitHub Trending
155
+
156
+ Same parsing rule as HuggingFace.
157
+
158
+ ### 4. Categories
159
+
160
+ Locate `## Categories` and parse the table `Category | Coverage`:
161
+
162
+ ```json
163
+ {
164
+ "categories": [
165
+ {"name": "Key Papers / Key Articles", "scope": "The 3-5 most important papers or articles this week"},
166
+ {"name": "Frameworks and Tooling", "scope": "Agent frameworks, tooling, SDK updates"}
167
+ ]
168
+ }
169
+ ```
170
+
171
+ ## Tolerance Rules
172
+
173
+ | Problem | Handling |
174
+ |---------|----------|
175
+ | unrecognized module heading | ignore that section |
176
+ | missing checkbox | treat as enabled |
177
+ | mismatched table columns | parse the available cells and fill missing values with empty strings |
178
+ | missing required Basic Info field | raise an error and ask the user to complete the note |
179
+ | empty or malformed config note | raise an error and suggest running `/digest setup` |
@@ -0,0 +1,177 @@
1
+ # 配置笔记解析规范
2
+
3
+ 本文档定义 `/digest` 技能如何解析 `{系统目录}/{信息子目录}/<TopicName>.md` 配置笔记。
4
+
5
+ ## 文件结构
6
+
7
+ 配置笔记由以下固定 section 组成,按二级/三级标题识别:
8
+
9
+ ```text
10
+ # <主题名> 信息 ← 标题(不解析)
11
+ ## 基本信息 ← 键值表格
12
+ ## 信息源 ← 容器标题(不解析)
13
+ ### RSS 订阅 ← 模块:checkbox + 表格
14
+ ### Paper Sources ← 模块:checkbox + 表格
15
+ ### arXiv 搜索 ← 旧版模块:checkbox + 表格(仍兼容)
16
+ ### Web 搜索 ← 模块:checkbox + 表格 + 补充站点表格
17
+ ### HuggingFace 热门论文 ← 模块:checkbox + 关键词行
18
+ ### GitHub Trending ← 模块:checkbox + 关键词行
19
+ ## 分类体系 ← 分类表格
20
+ ## 信息来源清单 ← 不解析,周报生成时自动填充
21
+ ```
22
+
23
+ ## 解析规则
24
+
25
+ ### 1. 基本信息
26
+
27
+ 定位 `## 基本信息`,解析其下的两列表格(`字段 | 值`):
28
+
29
+ | 字段 | 用途 | 必填 |
30
+ |------|------|------|
31
+ | 主题 | 主题名,用于周报标题和文件命名 | 是 |
32
+ | 周期 | `每周` / `每两周` / `每月`,决定回溯天数 | 是 |
33
+ | 语言 | 周报输出语言 | 是 |
34
+
35
+ **周期映射:**
36
+
37
+ - `每周` → 7 天
38
+ - `每两周` → 14 天
39
+ - `每月` → 30 天
40
+
41
+ ### 2. 模块启用状态
42
+
43
+ 每个三级标题(`###`)后的第一个 checkbox 决定启用状态:
44
+
45
+ ```markdown
46
+ ### RSS 订阅
47
+
48
+ - [x] 启用
49
+ ```
50
+
51
+ ```markdown
52
+ ### GitHub Trending
53
+
54
+ - [ ] 启用
55
+ ```
56
+
57
+ **解析逻辑:**
58
+
59
+ 1. 找到 `###` 标题行
60
+ 2. 向下扫描,找到第一个匹配 `- \[[ x]\]` 的行
61
+ 3. `[x]` 视为启用,`[ ]` 视为禁用
62
+
63
+ ### 3. 模块数据解析
64
+
65
+ #### RSS 订阅
66
+
67
+ 表格 schema:`名称 | URL | 方向`
68
+
69
+ ```json
70
+ {
71
+ "enabled": true,
72
+ "feeds": [
73
+ {"name": "Import AI", "url": "https://importai.substack.com", "description": "AI 前沿研究综述"}
74
+ ]
75
+ }
76
+ ```
77
+
78
+ **URL 处理:**
79
+
80
+ - 若 URL 不以 `http` 开头,自动补全 `https://`
81
+ - 若 URL 不含 `/feed` 或 `/rss`,可尝试在末尾追加 `/feed` 作为 RSS 地址
82
+
83
+ #### Paper Sources
84
+
85
+ 表格 schema:`Source Type | Query | Scope | Notes`
86
+
87
+ ```json
88
+ {
89
+ "enabled": true,
90
+ "sources": [
91
+ {
92
+ "source_type": "arXiv",
93
+ "query": "\"LLM agent\"",
94
+ "scope": "cs.AI, cs.CL",
95
+ "notes": "核心技术论文"
96
+ },
97
+ {
98
+ "source_type": "bioRxiv",
99
+ "query": "single-cell",
100
+ "scope": "Neuroscience",
101
+ "notes": "生物医学预印本"
102
+ }
103
+ ]
104
+ }
105
+ ```
106
+
107
+ **支持的来源类型:** `arXiv`、`bioRxiv`、`medRxiv`、`ChemRxiv`、`SocArXiv`、`SSRN`。
108
+ **字段含义:** `Query` 是检索词或关键词短语;`Scope` 是该来源使用的类别、集合或期刊
109
+ 过滤;`Notes` 是给 helper 的自由说明。
110
+ **归一化:** helper 会把每一行转换成独立来源 adapter 输入,并在不同来源之间去重。
111
+ **来源链接规则:** `SocArXiv` 可以归一化到 `osf.io` 或 `socarxiv.com`;`SSRN`
112
+ 必须归一化到 `papers.ssrn.com`、`ssrn.com` 或 SSRN DOI。
113
+ **预算规则:** 每个来源只发一次主请求,不做分页。
114
+ **兼容策略:** 新配置优先使用这个模型。
115
+
116
+ #### arXiv 搜索
117
+
118
+ 表格 schema:`关键词 | 类别`
119
+
120
+ ```json
121
+ {
122
+ "enabled": true,
123
+ "keywords": ["\"LLM agent\"", "\"tool use\" language model"],
124
+ "categories": ["cs.AI", "cs.CL", "cs.IR"],
125
+ "max_results": 200
126
+ }
127
+ ```
128
+
129
+ **旧版兼容:** 解析器仍然接受 `### arXiv 搜索`,并将其归一化为一个 `arXiv` 论文来源,
130
+ 确保旧配置继续可用。
131
+ **关键词语言:** 关键词必须是英文词或英文引号短语。若出现中文关键词,则将 arXiv
132
+ 来源视为配置错误。
133
+ **类别去重:** 合并所有行的类别列,去重后作为搜索范围。
134
+ **主抓取行为:** 类别用于官方 arXiv feed 抓取,关键词只在本地对标题和摘要做过滤。
135
+ **fallback 行为:** 若类别缺失,或官方 arXiv 路径失败,可回退到 OpenAlex,但只保留能映射回
136
+ arXiv 的论文。
137
+ **max_results:** 固定 200,不在配置中暴露。
138
+
139
+ #### Web 搜索
140
+
141
+ 两张表格:
142
+
143
+ 1. **搜索查询模板**(`搜索查询模板 | 目标覆盖`)
144
+ 2. **补充站点**(`名称 | URL | 方向`)
145
+
146
+ 查询模板中的 `{日期范围}` 在运行时替换为实际日期。补充站点用于额外构造 `site:` 查询。
147
+
148
+ #### HuggingFace 热门论文
149
+
150
+ 定位 `**筛选关键词:**` 行,按逗号分割提取关键词列表。
151
+
152
+ #### GitHub Trending
153
+
154
+ 同 HuggingFace,定位 `**筛选关键词:**` 行。
155
+
156
+ ### 4. 分类体系
157
+
158
+ 定位 `## 分类体系`,解析表格 `分类 | 覆盖范围`:
159
+
160
+ ```json
161
+ {
162
+ "categories": [
163
+ {"name": "重要论文", "scope": "本周影响力最大的 3-5 篇论文"},
164
+ {"name": "框架与工具", "scope": "Agent 框架、开发工具、SDK 更新"}
165
+ ]
166
+ }
167
+ ```
168
+
169
+ ## 容错规则
170
+
171
+ | 异常 | 处理 |
172
+ |------|------|
173
+ | 模块标题不在枚举中 | 忽略该 section |
174
+ | 模块无 checkbox | 视为启用 |
175
+ | 表格列数不匹配 | 按已有列解析,缺失列填空 |
176
+ | 基本信息缺少必填字段 | 报错并提示用户补全 |
177
+ | 配置文件为空或格式错误 | 报错并建议运行 `/digest setup` |