用途:把 wiki 变成可自动生长的知识库,叠加在 wiki-builder 与 wiki-query 之上,用广度优先研究循环抓取资料、提取主张、去重并编译成页面。
循环语义:seed-queue(pending) → next-seed → 通过插件抓取来源(web|arxiv|github) → 提取 claims → 与索引去重(FTS5) → 编译新页或修订现有页 → upsert 页面(自动 FTS 索引) → 入队后续种子(受 max-depth 限制) → 标记种子完成 → 满足预算/收敛/终止开关则停止。
停止条件(任一触发):budget_usd 超限;达到 max_pages_per_run;所有活跃分支达到 max_depth;连续 3 页新增 claims 少于 5%(收敛);存在 ~/.pro-workflow/STOP 文件;wiki.config.md 中 auto_research.enabled: false;wiki private: true 且选择了非本地抓取器。
主要能力:内置 web.js、arxiv.js、github.js 抓取器,接口含 name、match、estimateCost、fetch(RawDoc[])。种子队列由 SQLite wiki_seeds 表支持,按 (depth ASC, created_at ASC) 广度优先弹出。预算在执行前预估、执行后跟踪 token,可用 WIKI_LOOP_BUDGET_USD 等环境变量覆盖。收敛检测基于 claim 文本 token 的 Jaccard 重叠。
命令示例:node $SKILL_ROOT/scripts/research-loop.js run <slug> [--max-pages N] [--max-depth N] [--budget-usd 0.50] [--fetchers web,arxiv,github];另有 seed、seeds、cancel、status 子命令。插件会话中调用 providers MCP 服务器的 run_provider_task,task 为 "research"。
限制:向量去重、LLM 判定新颖性、cron 与响应式触发仍在后续阶段,当前去重为 Jaccard。每次运行输出日志与结构化统计到 wiki 根目录下 logs 与 derived。遵循隐私保护,private wiki 拒绝非本地抓取器;GitHub token 仅来自显式配置。