mcpField
W
wiki-stage-commit

wiki-stage-commit

github.com/ar9av生产力3.6k1.6k 次安装1 天前更新
代码仓库

关于 wiki-stage-commit

wiki-stage-commit 用于审核 Obsidian wiki 暂存区中由 LLM 编写的页面,再将其加入正式 wiki。它支持逐项审核或批量处理,并通过版本校验发现并发更改。

主要功能

  1. 01列出暂存文件及摘要
  2. 02交互式接受或拒绝审核
  3. 03批量接受或拒绝模式
  4. 04提升前进行版本校验
  5. 05手动合并补丁文件

适用场景

  1. 01页面进入正式 wiki 前进行审核
  2. 02批量接受或拒绝暂存文件
  3. 03合并暂存补丁而不覆盖目标页面

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ar9av/obsidian-wiki --skill wiki-stage-commit

安装后在 Claude Code 中输入/wiki-stage-commit确认已加载。

详细介绍

Wiki 阶段提交 — 将暂存内容提升为正式内容

你正在审核由 LLM 撰写、暂存在 _staging/ 中、等待人工批准后再加入正式 Wiki 的页面。只有当库配置中的 WIKI_STAGED_WRITES=true 时,这项技能才有用。

开始之前

  1. 解析配置 — 按照 llm-wiki/SKILL.md 中的 Config Resolution Protocol 操作。这样可以获取 OBSIDIAN_VAULT_PATH 和 WIKI_STAGED_WRITES。
  2. 如果未设置 WIKI_STAGED_WRITES 或其值为 false,请告知用户:"暂存写入模式未启用。请在 .env 中设置 WIKI_STAGED_WRITES=true 以使用此功能。"然后停止。
  3. 读取 _staging/ 目录清单。

调用形式

/wiki-stage-commit               # interactive review: show each file and ask accept/reject
/wiki-stage-commit --all         # accept all staged files without per-file review
/wiki-stage-commit --reject-all  # reject all staged files (move to _raw/ for manual editing)
/wiki-stage-commit --list        # list staged files with summary, no changes

步骤 1:清点暂存文件

清单由 CLI 负责;不要自行遍历 _staging/:

obsidian-wiki staging list --json

每个条目包含:

字段含义
staged_path暂存文件相对于库的路径
live_path文件将被放置的位置(.patch.md 指向以其命名的页面)
kindnew、update 或 patch
staged_revision暂存文件当前内容的哈希值
live_revision正式页面内容的哈希值;如果尚无正式页面,则为 null
staged_mtime暂存时间

对于向用户展示的每个文件,都要保留 staged_revision 和 live_revision。 这些值能确保步骤 3 拒绝覆盖 Agent 的并发写入,而不是悄悄将其覆盖。

报告清单:

Staged files: 4 new pages, 2 updates

New pages:
  _staging/concepts/attention-mechanism.md        (staged 2026-09-08)
  _staging/entities/andrej-karpathy.md            (staged 2026-09-08)

Updates:
  _staging/concepts/transformer-architecture.md   (target: concepts/transformer-architecture.md)

Patches:
  _staging/skills/prompt-engineering.patch.md     (target: skills/prompt-engineering.md)

如果列表为空,请报告:"没有暂存内容。所有写入均已提交,或尚未生成暂存写入内容。"

步骤 2:逐个文件审核(交互模式)

依次处理每个暂存文件(先处理新页面,再处理更新):

对于新页面:

显示摘要:

--- New page: concepts/attention-mechanism.md ---
Title:    Attention Mechanism
Tags:     #ml #architecture
Summary:  Core building block of transformers — computes weighted sum of values based on query-key similarity.
Tier:     supporting
Confidence: 0.72
Sources:  papers/attention.pdf

[Preview first 20 lines of body]
...

Accept [a], Reject [r], Skip [s], Preview full [p]?
对于补丁文件:

显示结构化差异:

--- Update: concepts/transformer-architecture.md ---
Source: _staging/concepts/transformer-architecture.patch.md

Proposed additions (+):
+ Transformers outperform RNNs on tasks requiring long-range dependencies. ^[inferred]
+ New source: papers/survey-2026.pdf

Proposed deletions (-):
- The attention mechanism was first described in [Bahdanau 2015].  (to be replaced by updated claim)

⚠️  Conflict check: live_revision no longer matches what was staged against. Review carefully.

Accept [a], Reject [r], Skip [s], Preview full diff [p]?

如果设置了 --all 标志,则跳过询问并接受每个文件。 如果设置了 --reject-all 标志,则跳过询问并拒绝每个文件。 如果设置了 --list 标志,则在打印清单后停止(步骤 1)。

步骤 3:执行决定

移动操作均为机械操作,由 CLI 原子性地完成。传入步骤 1 中的版本号,以便在决定基于过时信息时明确报错。

接受新页面
obsidian-wiki staging promote <staged_path> \
  --expect-staged <staged_revision> --expect-new

如果自你列出文件后出现了正式页面,--expect-new 会拒绝操作——其他人抢先创建了该页面。

接受更新
obsidian-wiki staging promote <staged_path> \
  --expect-staged <staged_revision> --expect-live <live_revision>
拒绝文件
obsidian-wiki staging discard <staged_path>

文件会被移至 _raw/rejected-<category>-<page>.md,供人工编辑。同一页面先前遭拒的文件绝不会被覆盖;第二个文件会改用 -2 后缀。

接受补丁

promote 会拒绝 .patch.md 文件,因为将易读的差异合并到周边文本可能已发生变化的页面中,需要判断,而不是简单重命名。请自行处理:

  1. 阅读目标页面和补丁。
  2. 以合并方式应用 + 新增内容和 - 删除内容——绝不要整体覆盖页面。
  3. 更新目标页面 frontmatter 中的 updated 字段。
  4. 运行 obsidian-wiki staging discard <patch staged_path>,将补丁从队列中移除。
CLI 报告冲突时

如果退出代码为 9,且 stderr 中显示 conflict: ...,表示暂存文件或正式文件在你列出清单后发生了变化。没有任何文件被移动。不要盲目使用最新版本号重试——重新运行 staging list,向用户展示发生的变化,然后再次询问。此项检查的目的正是确保:用户批准的内容已不再是即将写入的内容。

index.md 会由暂存页面的摄取操作更新,因此提升操作不会修改它。每次调用都会由 CLI 向 log.md 写入一条 STAGE_COMMIT 记录。

步骤 4:更新跟踪文件

CLI 会自行向 log.md 追加 STAGE_COMMIT 记录。处理完所有暂存文件后,更新索引和热缓存,确保已提升的页面显示出来:

obsidian-wiki memory sync --takeaways "Committed N staged pages; rejected M."

(不使用 --verb:日志记录已由 staging promote 写入。)绝不要手动编辑 index.md、log.md 或 hot.md——该命令会加锁,防止并行写入者丢失你的更新。

步骤 5:报告

Stage commit complete.

✅  Accepted (N):
  concepts/attention-mechanism.md     → now live
  entities/andrej-karpathy.md         → now live
  concepts/transformer-architecture.md → updated (patch applied)

❌  Rejected (M):
  skills/fine-tuning-llms.md          → moved to _raw/rejected-skills-fine-tuning-llms.md

⏭️  Skipped (K):
  references/attention-is-all-you-need.md → still in _staging/

Staging queue: K files remaining

备注

  • 暂存文件使用与正式页面相同的页面模板——它们已准备好合并,只待批准
  • 补丁文件使用便于人阅读的差异格式:以 + 开头的行表示新增内容,以 - 开头的行表示删除内容。staging promote 会拒绝处理这些文件——请自行合并(步骤 3)
  • index.md 和 log.md 在导入时始终会立即更新(它们是低风险的跟踪文件)——只有分类页面会经过暂存
  • 文件移动由 obsidian_wiki/staging.py 负责;此技能提供判断,而非文件处理
  • Obsidian 的关系图视图不会跟踪 _staging/ 目录——页面只有在提升后才会出现在知识库中

评论

支持 Markdown