feat(skill): add capture-project-knowledge molecule and atoms

This commit is contained in:
Research Assistant 2026-05-19 14:54:05 +08:00
parent 6c458fb02a
commit 9109fa3fa3
6 changed files with 577 additions and 5 deletions

View file

@ -1,3 +1,108 @@
# extract-methodology-card
Extract a structured methodology card from a paper.
从项目日志中提取可复用的方法论,生成方法论卡片。
---
## 前置条件
- bootstrap 已完成(有 `$VAULT`、`$PYTHON`
- 已知 project 名称
- 目标项目有至少一条 `type: "session_summary"``type: "note"` 的日志
---
## 步骤
### Step 1: 读取项目日志
```bash
$PYTHON -m paperforge --vault "$VAULT" project-log --list --project "<project>" --json
```
从返回的日志条目中筛选包含可复用方法论的内容(`reusable` 字段非空的条目)。
### Step 2: 识别可复用模式
逐条分析日志,找出:
- 重复出现的解决策略
- 用户纠正的常见错误
- 被多次验证有效的流程
### Step 3: 读取方法论卡片模板
`references/method-card-template.md` 读取模板:
```bash
cat "$VAULT/System/PaperForge/references/method-card-template.md"
```
### Step 4: 填充模板生成卡片
按模板格式填充:
```markdown
---
id: <kebab-case-id>
tags: [<tag1>, <tag2>]
source_project: <project-name>
status: active
---
# <卡片标题简短可搜索>
## Use when
<!-- 什么时候应该用 -->
## Procedure
1. <步骤 1>
2. <步骤 2>
3. <步骤 3>
## Watch-outs
- <常见陷阱>
- <注意事项>
## Example
来自 `<project>` 项目的具体例子(附 project-log 来源)
---
```
### Step 5: 确认写入
```
即将创建方法论卡片到 System/PaperForge/methodology/archive/<id>.md:
标题: dc-parameter-audit
来源: 综述写作
步骤:
1. 列出所有参数窗断言
2. 逐句追溯文献来源
3. 区分"文献说了什么"和"我推断什么"
确认写入?(y/n)
```
### Step 6: 写入
```bash
cat > "$VAULT/System/PaperForge/methodology/archive/<id>.md" << 'EOF'
<卡片内容>
EOF
```
写入后确认文件已创建。
---
## 禁止
- 不要在没有 project-log 的情况下凭空创建卡片
- 不要创建单次使用的方法——必须是可跨项目复用的模式
- 不要使用与已有卡片重复的 id
---
## 参考
模板文件:`references/method-card-template.md`

View file

@ -1,3 +1,68 @@
# retrieval-routing
Route between vector and memory retrievers based on query type.
## 1. Authority principles
- **bootstrap** provides convenience capability fields only; it is not the runtime truth source
- **runtime-health** is the runtime truth source; always check it before making retrieval decisions
- **Semantic/vector retrieval is optional and supplementary** -- metadata and fulltext search are the primary retrieval path
## 2. Retrieval ladders
### Ladder A -- Paper Discovery (for discover-papers molecule)
1. Use `paperforge search` (metadata FTS) to find candidate papers
2. Enrich top hits with `paperforge paper-context`
3. Show candidate list to user
### Ladder B -- Evidence Retrieval with rg
1. Generate metadata candidates via `paperforge search`
2. Narrow to papers with OCR/fulltext available (check runtime-health or paper-context)
3. Run `rg` over resolved fulltext set to locate exact evidence
4. Verify top hits with `paperforge paper-context` and local snippet reads
### Ladder C -- Evidence Retrieval without rg
1. Same metadata generation as Ladder B
2. Fallback to `grep` / `findstr` / system search
3. If agent environment supports, try installing rg (not assumed by default)
4. If no fulltext search tool is available, degrade to metadata-only evidence
### Ladder D -- Semantic Candidate Expansion (if `semantic_enabled` && `semantic_ready`)
1. Use `paperforge retrieve <query>` to expand candidate set
2. Never treat semantic hits as final evidence
3. Verify every semantic hit with rg / fulltext / paper-context before use
## 3. Fallback behavior when no OCR/fulltext exists
When runtime-health indicates no papers have OCR or fulltext available:
> Exact evidence verification is limited -- degrading to metadata-level support
Present a candidate paper list only; no snippet verification is performed.
## 4. Recommended default limits
- Metadata candidate set: top 10-20 papers
- Fulltext/snippet verification: top 3-5 papers
## 5. Semantic degradation rule
```text
If semantic_enabled=false or semantic_ready=false:
- Do not call retrieve as primary path
- Fall back to metadata + rg/grep + paper-context
If semantic is available:
- Use only for candidate expansion
- Every semantic hit must be verified by rg/fulltext/paper-context before use
```
## 6. Commit convention
```
feat(skill): add retrieval-routing atom
```

View file

@ -1,3 +1,131 @@
# write-project-log
Write a general project log entry.
记录会话/项目日志到 `project-log.jsonl`,包含决策、弯路、待办等。
---
## 前置条件
- bootstrap 已完成(有 `$VAULT`、`$PYTHON`
- 已知 project 名称
- 对话上下文中已有会话内容可回顾
---
## Schema
```json
{
"id": "plog_20260519_001",
"project": "综述写作",
"date": "2026-05-19",
"type": "session_summary",
"title": "DC 段参数窗审计",
"decisions": ["做了 X因为 Y"],
"detours": [
{
"wrong": "错误方向",
"correction": "用户如何纠正",
"resolution": "最终方案"
}
],
"reusable": ["可复用的方法论或教训"],
"todos": [
{"content": "待办事项", "done": false}
],
"related_papers": ["ABC12345"],
"tags": ["DC", "参数窗", "审计"],
"agent": "opencode"
}
```
| 字段 | 必填 | 说明 |
|------|------|------|
| `id` | 是 | 自动生成 `plog_YYYYMMDD_NNN` |
| `project` | 是 | 项目名 |
| `date` | 是 | YYYY-MM-DD |
| `type` | 是 | `session_summary` / `decision` / `correction` / `milestone` / `note` |
| `title` | 是 | 简短标题 |
| `decisions` | 否 | 核心决策列表 |
| `detours` | 否 | 弯路与修正记录 |
| `reusable` | 否 | 可复用方法论 |
| `todos` | 否 | 待办事项 |
| `related_papers` | 否 | 相关 Zotero keys |
| `tags` | 否 | 分类标签 |
| `agent` | 否 | 记录者 |
---
## 步骤
### Step 1: 确定 project 和 type
从上下文获取。如果用户未指定 project询问。
type 参考:
| type | 使用场景 |
|------|---------|
| `session_summary` | 会话结束时的总结 |
| `decision` | 单独记录一个重要决策 |
| `correction` | 用户纠正了某个方向 |
| `milestone` | 项目里程碑 |
| `note` | 一般研究笔记 |
### Step 2: 回顾本次会话
提取以下内容:
- **做了什么**(核心决策及其原因)
- **用户纠正了什么**(弯路与修正)
- **有什么可复用的发现**
- **待办事项**
### Step 3: 展示确认
```
即将记录:
日期: 2026-05-19
类型: session_summary
标题: DC 段参数窗审计完成
决策:
- 限定参数窗为 100Hz-1kHz
弯路:
- 把推断当文献事实 → 用户要求逐句审计 → 5 处修正
可复用:
- 写完必须逐句过 source
确认写入?(y/n)
```
### Step 4: 写入
```bash
$PYTHON -m paperforge --vault "$VAULT" project-log --write \
--project "<project>" \
--payload '<payload>'
```
payload 为完整 JSON 对象(单行序列化)。
返回 `ok: true` → 写入成功;`ok: false` → 报错重试。
### Step 5: 确认渲染
```bash
$PYTHON -m paperforge --vault "$VAULT" project-log --render --project "<project>"
```
输出到 `Resources/Projects/<project>/project-log.md`
---
## 禁止
- 不要在用户确认前写入
- 不要只写"做了什么"而没有"弯路"和"可复用"部分
---
## 参考
详情请看 `workflows/project-log.md`

View file

@ -1,3 +1,98 @@
# write-project-reading-log
Write a formatted reading log entry to the project README.
将叙述性证据直接写入 `Resources/Projects/<project>/reading-log.md`
**定位:丰富内容层**——完整段落、写作素材、按 claim 组织的叙述性记录。
---
## 核心原则
**由 Agent 直接写入 markdown不从 JSONL 渲染,不自动生成。**
这是给你(人类作者)看的文档,不是给机器解析的数据。因此应该用自然段落写作,按论点和 claim 组织,而非逐条粘贴 JSON。
---
## 前置条件
- bootstrap 已完成(有 `$VAULT`、`$PYTHON`
- 已知 `project` 名称
- 目标文件路径:`$VAULT/Resources/Projects/<project>/reading-log.md`
---
## 步骤
### Step 1: 确认项目
从上下文获取 project 名称。如果未指定,询问用户。
### Step 2: 组织叙述内容
按 claim/论点组织写作素材,而非按论文。每段包含:
- **Claim 标题**`##` 级别)
- **来源论文**(标题 + 年份 + 作者)
- **关键证据**(原文引用 + 你的解读)
- **与其他证据的关系**(支持/矛盾/补充)
### Step 3: 展示确认
```
即将写入 Resources/Projects/综述写作/reading-log.md:
# PEMF 对 GAG 合成的影响
## PEMF 促进软骨基质合成
Smith 2024 在体外软骨细胞实验中报告PEMF 暴露后 GAG 含量增加 40%(原文:...)。
这与 Jones 2023 的结果一致......
确认写入?(y/n)
```
### Step 4: 写入文件
```bash
# 方法一:直接附加到文件
cat >> "$VAULT/Resources/Projects/<project>/reading-log.md" << 'EOF'
## <Claim 标题>
<内容...>
---
EOF
```
```bash
# 方法二:如果文件不存在,先创建
New-Item -Force -ItemType File -Path "$VAULT/Resources/Projects/<project>/reading-log.md"
```
### Step 5: 确认写入成功
读取目标文件最后几行,确认内容已正确追加。
---
## 与 JSONL 的关系
| | JSONL | Project reading-log |
|---|-------|-------------------|
| 粒度 | 单句/单点 | 段落/claim 级 |
| 格式 | JSON 对象 | Markdown 叙述 |
| 使用者 | 机器搜索/渲染 | 人类阅读/写作 |
| 生成方式 | atom 写 | Agent 直接写 |
| 频率 | 高频 | 低频(仅在材料累积到可成段时) |
两者互补——JSONL 是索引project reading-log 是内容。
---
## 禁止
- 不要从 JSONL 自动渲染——这是人工写作区域
- 不要只粘贴 JSON——这是给人看的文档
- 不要用单句代替完整段落
- 不要在用户确认前写入

View file

@ -1,3 +1,108 @@
# write-reading-log-jsonl
Append a structured reading entry to the JSONL reading log.
`reading-log.jsonl` 追加单条结构化阅读条目。
**定位:结构化索引层**——简短、可搜索、机器可解析。每条条文对应论文中的一句引用/发现。
---
## 前置条件
- bootstrap 已完成(有 `$VAULT`、`$PYTHON`
- 已知 `paper_id`zotero_key
- 上下文中有待记录的 excerpt 和相关信息
---
## Schema
```json
{
"id": "rln_20260519_001",
"paper_id": "ABC12345",
"project": "综述写作",
"section": "Results Fig.3",
"excerpt": "原文关键句(逐字引用)",
"context": "包含 excerpt 的完整段落",
"usage": "这个信息在写作中的用途",
"note": "注意事项 / 待核查",
"tags": ["PEMF", "dose-response"],
"verified": false
}
```
| 字段 | 必填 | 说明 |
|------|------|------|
| `id` | 是 | 自动生成 `rln_YYYYMMDD_NNN` |
| `paper_id` | 是 | Zotero key8位大写 |
| `project` | 否 | 关联的研究项目 |
| `section` | 是 | 文献位置 |
| `excerpt` | 是 | 逐字引用原文 |
| `context` | 是 | 完整段落供复核定位 |
| `usage` | 是 | 在写作中的用途 |
| `note` | 否 | 待核查事项 |
| `tags` | 否 | 分类标签 |
| `verified` | 否 | 默认 false |
---
## 步骤
### Step 1: 收集必填字段
从对话上下文提取:`paper_id`、`section`、`excerpt`、`context`、`usage`。
### Step 2: 生成 id
格式:`rln_<YYYYMMDD>_<3位序号>`(序号从上下文已存在的条数推断)
### Step 3: 展示确认
```
即将记录:
文献: ABC12345 | Smith 2024
位置: Results Fig.3
原文: "..."
用途: 支撑 PEMF 基质合成的论证
项目: 综述写作
标签: PEMF, GAG
确认写入?(y/n)
```
### Step 4: 写入
```bash
$PYTHON -m paperforge --vault "$VAULT" reading-log --write <paper_id> \
--section "<section>" \
--excerpt "<excerpt>" \
--context "<context>" \
--usage "<usage>" \
--note "<note>" \
--project "<project>" \
--tags "<tag1>,<tag2>"
```
返回 `ok: true` → 写入成功;`ok: false` → 报错重试一次。
### Step 5: 触发渲染
```bash
$PYTHON -m paperforge --vault "$VAULT" reading-log --render --project "<project>"
```
输出到 `Resources/Projects/<project>/reading-log.md`
---
## 禁止
- 不要在用户确认前写入
- `excerpt` 必须是原文逐字引用,不能是推断或改写
- `context` 不能为空
---
## 参考
详情请看 `workflows/reading-log.md`

View file

@ -1,3 +1,77 @@
# capture-project-knowledge
Capture and persist knowledge gained from reading into project memory.
捕获和持久化从阅读中获得的知识到项目记忆。
---
## 触发模式
### 1. 直意模式Direct intent
用户直接说"记一下"、"保存"、"记录这条"——不管从哪个上下文来,都路由到这里。
### 2. 后置模式Post-action
在其他分子(`read-known-paper`、`find-supporting-evidence`)产出结果后,用户要求保存其中一部分内容。
---
## 捕获类型
| 类型 | 描述 | 对应 Atom |
|------|------|-----------|
| **Lightweight JSONL** | 单条结构化阅读笔记,可搜索、可机器解析 | `atoms/write-reading-log-jsonl.md` |
| **Rich reading-log** | 叙述性段落,直接写入项目 markdown写作素材 | `atoms/write-project-reading-log.md` |
| **Session/project log** | 会话总结、决策记录、弯路修正、待办事项 | `atoms/write-project-log.md` |
| **Methodology card** | 从项目日志中提取可复用的方法论 | `atoms/extract-methodology-card.md` |
---
## 步骤
### Step 1: 确定用户意图
从对话上下文中判断用户要保存哪类内容:
- 用户提到单条论文片段 / 引用 → **Lightweight JSONL**(最快、最轻量)
- 用户说"写一段总结" / "记录到这个项目" → **Rich reading-log**
- 用户说"记一下今天的进展" / "记录决策" → **Session/project log**
- 用户说"这个方法值得复用" / "提取方法论" → **Methodology card**
- 不确定时:列出四个选项让用户选
### Step 2: 调用对应 Atom
| 意图 | Atom |
|------|------|
| 单条阅读笔记 | `atoms/write-reading-log-jsonl.md` |
| 项目阅读记录 | `atoms/write-project-reading-log.md` |
| 会话/项目日志 | `atoms/write-project-log.md` |
| 方法论提取 | `atoms/extract-methodology-card.md` |
### Step 3: 写入前确认
**必须**在写入前以交互方式展示给用户确认。
格式参考对应 workflow`workflows/reading-log.md`、`workflows/project-log.md`)中的确认模板。
### Step 4: 写入后反馈
确认写入成功后,告知用户写入位置和主要内容摘要。
---
## 过渡路由
| 来源 | 路由方式 |
|------|---------|
| `read-known-paper` 保存讨论 | 用户说"保存" → Step 1 |
| `find-supporting-evidence` 保存证据 | 用户选择证据保存 → Step 1 |
| 用户直接说"记一下" | 直意触发 → Step 1 |
---
## 禁止
- 不要在用户未要求时自动保存内容
- 不要绕过确认步骤直接写入
- 不要用 project-reading-log 替代 lightweight JSONL它们是不同粒度的记录