ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

gbrain 0.17 迁移指南:`gbrain dream` 一键夜间维护周期与统一 `runCycle` 原语

gbrain 0.17 迁移指南:`gbrain dream` 一键夜间维护周期与统一 `runCycle` 原语 人工智能RAGAgent 记忆MCP 服务知识管理【免费下载链接】gbrainGarrys Opinionated OpenClaw/Hermes Agent Brain项目地址https://gitcode.com/gh_mirrors/gb/gbrain点击查看免费下载导读gbrain 的 README 承诺agent 在你睡觉时运行dream 周期扫描每一段对话、补齐缺失实体、修复坏引用、整合记忆而 v0.17.0 让这一承诺变成了第一等公民命令gbrain dream。本文以官方迁移文档 skills/migrations/v0.17.0.md 为主线结合源码讲解新命令的用法、六个阶段维护周期的构成、gbrain_cycle_locks数据库锁表的设计动机以及升级后的验证步骤与退出策略。读完你不仅能立即用上0 2 * * * gbrain dream --json这样的 cron 定时维护还能理解这条命令背后一个周期、两套 CLI、同一原语的架构收敛逻辑。适用前提本文面向从 v0.16.x 升级到 v0.17.0 的 agent 与人类用户。官方迁移文档明确指出本次升级没有机械迁移步骤——schema 迁移v16 cycle-lock 表与行为变化都会在gbrain upgrade时自动生效本文是信息性文档。一、新命令gbrain dreamgbrain dream是品牌承诺一句话版本运行一个完整的 brain 维护周期然后退出天生为 cron 设计。它的实现位于 src/commands/dream.ts文件头注释直接引用了 README 的品牌承诺the agent runs while I sleep, the dream cycle ... I wake up and the brain is smarter.我睡觉时 agent 运行dream 周期运行……醒来后 brain 更聪明了并定位为runCyclesrc/core/cycle.ts的薄封装thin alias。基本用法官方迁移文档给出的命令矩阵如下gbrain dream # 完整 6 阶段周期 gbrain dream --dry-run --json # 预览agent 可读 gbrain dream --phase lint # 单阶段快速、有针对性 gbrain dream --pull # 同步前先 git pull 0 2 * * * gbrain dream --json # 每晚 cron完整 flag 参考见gbrain dream --help。源码里printHelp()src/commands/dream.ts给出的完整选项包括选项作用备注--dry-run预览所有修复而不写入注意synthesize 阶段仍会跑低成本打分 triage缓存结论只是跳过合成子 agentdry-run 不代表零 LLM 调用--json以 JSON 输出 CycleReport供 agent/脚本读取--phase name只运行指定阶段可重复#4493每个命名阶段都按规范周期顺序执行--once对某个--phase强制运行一次绕过该阶段自身dream.phase.enabled/cycle.phase.enabled配置门且永不读写 config崩溃不会留下全局状态卡住要求显式--phase--pull同步前对 brain 仓库执行 git pull默认不拉取--dir path指定 brain 目录在无本地 checkout 的 postgres/远程 brain 上文件系统阶段lint、backlinks、sync、synthesize、extract、patterns以no_brain_dir跳过DB-only 阶段照常运行--source id/--source-id id将周期限定到单一 source完成时写last_full_cycle_at让 doctor 的cycle_freshness检查保持新鲜--input file合成指定 transcript 文件隐含--phase synthesize绕过语料目录扫描--date/--from/--to按日期合成/回填格式YYYY-MM-DD--from不得晚于--to--drain/--window seconds有界 backlog 排空仅--phase extract_atoms默认窗口 300 秒backlog 未清空时以退出码 3 结束便于 cron 知道要再跑--unsafe-bypass-dream-guard禁用 self-consumption guard每次运行都会发出响亮的 stderr 警告与成本提醒--help,-h显示帮助IRON RULE--help在任何 engine 工作之前短路gbrain dream --help --source whatever必打帮助并以 0 退出源码中的parseArgssrc/commands/dream.ts有几个值得注意的健壮性设计均被测试锁定重复--phase全部生效#4493旧实现只读第一个--phase--phase a --phase b --phase c会静默只跑 a 并以 0 退出新实现收集每次出现、保持顺序、去重相同值折叠--phase lint --phase orphans会真的跑两个阶段见 test/dream.test.ts。参数错误显式退出--phase缺值、未知阶段名、--once无显式--phase、--input与日期范围混用、--source与--source-id值冲突等全部exit(2)并给出用法提示绝不静默降级。--once契约issue #2860只针对一个显式键入的--phase由--input/--drain隐含出来的阶段不算数否则--once会静默无效测试 test/dream.test.ts 专门钉死了这条边界。单阶段运行的典型场景官方迁移文档给了gbrain dream --phase lint快速、针对性的例子。结合源码单阶段能力非常精细# 只跑 lint 阶段文件系统写入不碰 DB gbrain dream --phase lint # 只做孤儿页扫描只读报告 gbrain dream --phase orphans # 强制跑一次默认关闭的 patterns 阶段仅本次不改配置 gbrain dream --phase patterns --once # 单文件合成隐含 --phase synthesize gbrain dream --phase synthesize --input ~/transcripts/2026-04-25.txt # 日期区间回填合成 gbrain dream --phase synthesize --from 2026-04-01 --to 2026-04-25二、统一维护周期原语src/core/cycle.ts的runCycle一个周期三个调用方v0.17 的核心架构收敛是三个调用方现在全部委托给同一个runCycle(engine, opts)成为夜间发生了什么的唯一事实来源src/core/cycle.tsdream CLI一次性 cron 周期——src/commands/dream.ts在runDream中调用runCyclesrc/commands/dream.tsautopilot 内联路径daemon 内联 fallback——src/commands/autopilot.ts 在无 Minion worker 时动态 importrunCycle跑 inline cycleautopilot-cycle Minions handler持久队列、重试 可观测性——src/commands/jobs.ts中通过yieldBetweenPhases钩子让 worker 在阶段之间续约任务锁src/commands/jobs.ts。从源码结构看这意味着你在 cron 里gbrain dream、daemon 里的 autopilot 周期、以及 Minions 队列里的autopilot-cycle作业最终执行的是同一段逻辑——不会再出现CLI 修好了文件daemon 却不知道之类的漂移。阶段顺序先修文件再建索引runCycle文档注释src/core/cycle.ts明确了阶段排序的语义动机——先修文件再让 DB 拾取变化┌───────────────────────────────────────────────────────────┐ │ Phase 1: lint --fix (文件系统写入不碰 DB) │ │ Phase 2: backlinks --fix (文件系统写入不碰 DB) │ │ Phase 3: sync (DB 拾取阶段 12 的变更) │ │ Phase 4: synthesize (v0.23: 对话记录 → 页面) │ │ Phase 5: extract (DB 拾取 syncsynthesize 的链接)│ │ Phase 6: patterns (v0.23: 跨会话主题必须晚于 │ │ extract 保证图状态新鲜) │ │ Phase 7: recompute_emotional_weight (v0.29: DB 写入) │ │ Phase 8: embed --stale (DB 写入) │ │ Phase 9: orphans (DB 只读仅报告) │ └───────────────────────────────────────────────────────────┘v0.17 迁移文档所描述的 6 阶段lint → backlinks → sync → extract → embed → orphans是当时的核心子集当前仓库的ALL_PHASESsrc/core/cycle.ts已经随着后续版本扩展为 20 阶段新增了synthesize、patterns、extract_facts、resolve_symbol_edges、extract_atoms、synthesize_concepts、consolidate、takes 三件套、drift、skillopt、schema-suggest、purge等。这一演进恰好印证了 v0.17 选择单一原语 可扩展阶段表的架构价值新阶段只需要追加进ALL_PHASES并在runCycle的 dispatch 块里注册三个调用方自动获得。每个阶段还有**作用域scope**分类PHASE_SCOPE见 src/core/cycle/phase-scope.tssource可 per-source 扇出、mixed、globalbrain 级读全局输入。resolveCyclePhasessrc/core/cycle.ts决定实际执行列表无sourceId或default时跑ALL_PHASES命名非默认 source 的隐式周期只跑确定性 freshness 子集显式--phase则原样照办。周期报告CycleReportrunCycle返回CycleReportsrc/core/cycle.ts采用加性 schemaschema_version: 1包含statusclean成功且零修复、ok成功且有工作、partial部分阶段警告/失败、skipped锁被他人持有如cycle_already_running、failed拿到锁但所有阶段失败phases每个阶段的PhaseResult阶段名、状态、耗时、摘要、错误对象totalslint_fixes、backlinks_added、pages_synced、pages_extracted、pages_embedded、orphans_found等聚合计数。这也是gbrain jobs get id报告结构变丰富的根源——后续版本继续在此 schema 上加字段如stamp_write_failed、reaped_dead_holder_locks但表面 API 保持稳定。三、Autopilot 现在会跑 lint 孤儿清扫gbrain autopilot --install的用户升级后daemon 的周期会比之前多两个阶段lint --fix自动修复 LLM 产物、占位日期、brain 里的坏引用会修改磁盘上的文件orphan sweep只读报告没有入站 wikilink 的页面在每个autopilot-cycle作业的gbrain jobs list输出中可见。无需任何操作——新阶段在 daemon 原有间隔上自动运行。源码佐证autopilot 的帮助文案明确列出(lint backlinks sync extract embed orphans)src/commands/autopilot.tsinline 路径的汇总输出也打印lint… backlinks… synced… extracted… embedded… orphans…src/commands/autopilot.ts。需要提醒的是v0.17 的 autopilot 扇出模型是按 source 提交autopilot-cycle作业src/commands/autopilot.ts队列边界的 phase 规范化normalizeQueuedSourcePhasessrc/core/cycle.ts确保 legacy payload 不会在升级后把混合/后台阶段按 source 重跑 N 遍。四、周期协调DB 锁表gbrain_cycle_locks为什么需要新锁v0.15.4 的 PgBouncer-transaction-pooler 修复悄悄破坏了 session-scoped 的pg_try_advisory_locksession 级 advisory lock 在事务池模式下不跨 session 存活。v0.17 用一张新表gbrain_cycle_locksmigration v16取代它。表结构见 src/schema.sqlCREATE TABLE IF NOT EXISTS gbrain_cycle_locks ( id TEXT PRIMARY KEY, holder_pid INT NOT NULL, holder_host TEXT, acquired_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), ttl_expires_at TIMESTAMPTZ NOT NULL, last_refreshed_at TIMESTAMPTZ -- v0.41.13.0 起每次 refresh 都会 bump ); CREATE INDEX IF NOT EXISTS idx_cycle_locks_ttl ON gbrain_cycle_locks(ttl_expires_at); ALTER TABLE gbrain_cycle_locks ADD COLUMN IF NOT EXISTS acquisition_token UUID NOT NULL DEFAULT gen_random_uuid();TTL 语义与自动释放行自带TTL30 分钟默认常量在 src/core/db-lock.tsDEFAULT_TTL_MINUTES 30持有者在阶段之间刷新TTLyieldBetweenPhases钩子src/core/cycle.ts 起在各阶段之间safeYield源码注释明说 every refresh() tick bumps both ttl_expires_at AND last_refreshed_atsrc/core/db-lock.ts崩溃的持有者自动释放进程死了就没人刷新ttl_expires_at过期后其他调用方可通过INSERT ... ON CONFLICT (id) ... WHERE ttl_expires_at NOW()原子夺取src/core/db-lock.ts索引idx_cycle_locks_ttl支撑过期扫描。谁需要锁不是所有阶段都抢锁。NEEDS_LOCK_PHASESsrc/core/cycle.ts只包含会写 DB 的阶段sync、extract、embed、purge、consolidate、takes 三件套、skillopt 等只读的orphans明确跳过锁。文件系统-only 或只读的 phase 选择lint、backlinks、orphans整体跳过锁这意味着你可以放心地高频跑gbrain dream --phase orphans。锁还有分层 fallbackPostgres 用gbrain_cycle_locks表PGLite / enginenull 时用~/.gbrain/cycle.lock文件锁记录 PID mtime同样 30 分钟 TTL 语义见 src/core/cycle.ts。这与 autopilot 的 daemon 单例锁文件~/.gbrain/autopilot.lock是两个不同的关注点见下文未变化项。五、升级后验证官方迁移文档给出了 4 步验证清单# 1. Dream 命令存在 gbrain dream --help # 2. 跑一次干跑周期安全无写入 gbrain dream --dry-run --json # 3. 如果你装了 autopilot --install gbrain jobs list --status complete | head -5 # 每个 autopilot-cycle 条目现在报告 6 个阶段而不是 4 个。 # 用 gbrain jobs get id 查看最近一条。 # 4. Schema 迁移已落地 gbrain doctor # 应显示没有待处理迁移健康 brain 上gbrain dream --dry-run的预期输出Brain is healthy. 6 phase(s) checked in 1.3s.或加--json{ schema_version: 1, status: clean, phases: [...], totals: { lint_fixes: 0, backlinks_added: 0, ... } }源码层面Brain is healthy 正是printHuman对clean状态的人类可读输出src/commands/dream.ts且--dry-run --json模式下只输出 JSON有测试专门钉死即使 embed 有 stale chunks--dry-run --json也只发 JSONtest/dream.test.ts。注意--dry-run不会改变skipped状态若锁被占用输出Skipped: another cycle is already running. (locked)。六、Autopilot 安装用户的退出策略Opt-out迁移文档明确如果你不希望 autopilot 的 daemon 修改文件lint backlinks 阶段会写盘有三种选择方案一在 cron-dream 里禁用这些阶段但保留 autopilot 运行。dream 是独立命令可以从 cron 只跑你想要的阶段完全不碰 autopilot# 例如每晚只 re-embed orphan-sweep跳过文件变更 0 2 * * * gbrain dream --phase orphans方案二卸载 autopilot只用 cron-dream。gbrain autopilot --uninstall # 然后加入 crontab 0 2 * * * gbrain dream --pull方案三接受默认。新阶段很保守lint 只修已知安全的产物em dash、占位日期绝不破坏性操作back-link 填充是加性的。即使出问题gbrain dream --dry-run也总是会在真实运行前告诉你将要改变什么。这里再强调一个官方文档点明的取舍干跑 ≠ 零 LLM 调用src/commands/dream.ts 帮助文本——synthesize 阶段的便宜打分 triage 在干跑中仍会跑并缓存结论只是跳过昂贵的合成子 agent 与 takes 相关步骤。预算敏感的用户应留意这一点。七、故障排查官方迁移文档列出的三个典型问题及处理1. dream 输出中出现cycle_already_running另一个周期很可能是 autopilot 的 daemon正持有锁。这是预期行为——dream 为避免与 daemon 竞争而跳过daemon 的下一个间隔会接管这些工作。源码里runCycle返回status: skippedreason: cycle_already_runningprintHuman对应输出Skipped: another cycle is already running. (locked)src/commands/dream.ts。2.gbrain dream --dry-run在你预期无变化时报告有变更跑gbrain doctor检查漂移lint 问题、过期 embedding、缺失 back-link。Dream 的 dry-run 正是 autopilot daemon 下一周期会做什么的诚实预览。3. 升级后 Minionautopilot-cycle作业失败带着gbrain jobs get id的输出开一个 issue。新的 runCycle-backed handler 保留了部分失败语义一个阶段失败不阻塞后续周期但具体阶段可能浮现新的错误类别。从源码看这符合CycleStatus的partial状态设计部分阶段 warn/fail其余照跑。八、什么没有变What did NOT change迁移文档特意澄清了三件未受影响的事源码可以逐一印证gbrain autopilot --install机制launchd / systemd / crontab 生成器——现有安装继续工作~/.gbrain/autopilot.lockdaemon 单例锁文件——与新的 per-cycle 锁gbrain_cycle_locks表 /~/.gbrain/cycle.lock是分离的关注点gbrain jobs接口——gbrain jobs get id现在显示更丰富的报告结构schema_version:1但表面 API 稳定。这与CycleReport的加性 schema 设计一致旧消费者忽略新字段即可无需改动。结语v0.17.0 的迁移核心不是加了一条命令而是把夜间维护收敛为单一原语gbrain dreamcron 一次性、gbrain autopilotdaemon 定时、Minionsautopilot-cycle持久队列三者共用src/core/cycle.ts的runCycle用带 30 分钟 TTL、阶段间刷新、崩溃自动释放的gbrain_cycle_locks表解决并发协调。官方迁移文档一句话收尾This migration file is informational only. No mechanical step is required — all changes apply automatically ongbrain upgrade.本迁移文件仅为信息性说明无需机械步骤——所有变更在gbrain upgrade时自动生效。按此文档你的升级动作只有一个gbrain upgrade然后gbrain dream --dry-run --json确认一次剩下的交给夜间。赞分享人工智能RAGAgent 记忆MCP 服务知识管理【免费下载链接】gbrainGarrys Opinionated OpenClaw/Hermes Agent Brain项目地址https://gitcode.com/gh_mirrors/gb/gbrain点击查看免费下载相关推荐gbrain 大脑健康维护实战指南从健康检查、Dream 合成周期到自动修复闭环gbrain 大脑健康维护实战指南从健康检查、Dream 合成周期到自动修复闭环 导读 本文以 gbrain 仓库内置的 maintain 技能 plug人工智能RAGAgent 记忆MCP 服务知识管理gbrain v0.46.3 迁移指南ZeroEntropy 停服前的嵌入与重排迁移gbrain migrate embeddings 实战gbrain v0.46.3 迁移指南ZeroEntropy 停服前的嵌入与重排迁移gbrain migrate embeddings 实战 ZeroEn人工智能RAGAgent 记忆MCP 服务知识管理gbrain 类型统一schema-unify从 94 种页面类型迁移到 gbrain-base-v2 的 15 类规范分类法gbrain 类型统一schema unify从 94 种页面类型迁移到 gbrain base v2 的 15 类规范分类法 本文是 gbrain 官方人工智能RAGAgent 记忆MCP 服务知识管理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表