ARTICLE DETAIL

资讯详情

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

oh-my-pi Vibe Mode 完全指南:用持久化 Worker 实现多路并行编码

oh-my-pi Vibe Mode 完全指南:用持久化 Worker 实现多路并行编码 oh-my-pi Vibe Mode 完全指南用持久化 Worker 实现多路并行编码【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-piVibe Mode 是 oh-my-pi⌥ Coding agent交互式 TUI 中的一种并行工作模式它将顶层会话从亲自改代码的干员降级为一名指挥长director只负责分配任务、审核结果而把搜索、编辑、运行、构建等工作全部交给可常驻的后台 Worker 子代理去并行执行。读完本篇你将掌握/vibe模式的进入/退出机制、fast/good双层级 Worker 的选择策略、vibe_spawn/vibe_send/vibe_wait/vibe_kill/vibe_list五个指挥工具的完整语义以及支撑它们的持久化生命周期设计。Vibe Mode 是什么顶层会话从干员变为指挥长进入 Vibe Mode 后顶层交互会话的工具集会被削减为三类read只读校验可选的、归属于父会话的todo五个 Worker 控制工具vibe_spawn/vibe_send/vibe_wait/vibe_kill/vibe_list指挥长不再直接编辑文件或执行命令所有这类动手工作都由 Worker 完成Worker 交回结果后指挥长通过read实际读取被改动的文件来验证其声称而不是轻信 Worker 的汇报。当todo可用时它只属于父指挥长Worker 不拥有这份记账。从源码实现看这一设计被完整落到了packages/coding-agent/src/vibe/runtime.ts的VibeSessionRegistry与packages/coding-agent/src/tools/vibe.ts的createVibeTools中——模式激活时动态安装这五个 ephemeral 工具同时通过packages/coding-agent/src/prompts/system/vibe-mode-active.md注入指挥长指令NEVER edit, run, grep, or build yourself。启用与禁用/vibe斜杠命令/vibe是交互式 TUI 命令定义在packages/coding-agent/src/slash-commands/builtin-modes.tsname 为vibe、icon 为wave、允许携带参数其 toggle 语义如下/vibe # 进入 vibe mode /vibe fix the flaky test in packages/tui # 进入并把该指令作为首条工作指示提交 /vibe # 再次运行则退出进入模式的完整动作激活一个 parent-session 级的 Worker 作用域安装 Vibe 工具集把活动工具集缩减为read、可选的父级todo与 Vibe 工具注入指挥长指令。带内联提示的/vibe prompt会在进入模式的同时把该提示作为第一条 directive 提交给首个 Worker。退出模式时的动作则强调彻底恢复进入前的工具集取消所有在途 Worker turn杀掉作用域内每一个 Worker 会话持久化 terminal 生命周期记录——Worker 永远不会比一次有意退出活得更久。互斥性方面Vibe Mode 与处于激活或暂停状态的 plan/goal 模式互斥需先退出这些模式。模式激活期间对会话的启动starting、分叉forking、迁移moving与交接handoff都会被拒绝。状态栏在模式开启时会显示Vibe指示符命令的 autocomplete 提示也会随runtime.ctx.vibeModeEnabled状态在 Vibe: on / blocked by plan mode / blocked by goal mode / off 之间切换。持久化与恢复模式和 Worker 生命周期事件随父会话一起持久化。恢复一个当前模式为vibe的会话时已完成的 Worker 会被重建为 idle/parked 会话并携带其子会话 transcript因进程重启而中断的 turn不会自动恢复。被显式 kill 或随模式退出而终止的 Worker 保持 terminal终结状态。两个 Worker 层级fast与good每个 Worker 都是一个真实、keep-alive 的任务执行子代理拥有正常的完整编码工具面edit、bash、grep 等和独立的持久化子会话 transcript。spawn 时二选一TierBundled agent默认角色适用场景fastsonicsmol机械执行、草稿、高吞吐量工作goodtasktask设计、判断类工作以及复核fast的输出关键实现事实来自packages/coding-agent/src/vibe/runtime.ts的VIBE_CLI_AGENT映射tier 始终选中内置的sonic或task定义而不会选中同名但由用户发现的自定义 agent。模型解析路径与 task-agent 路由完全一致task.agentModelOverrides.sonic/.task优先于 bundled agent 模型角色别名通过modelRoles解析回退到父会话的 active/default 模型——对应#resolveWorker中调用resolveAgentModelSelection的逻辑从packages/coding-agent/src/config/model-resolver导入。通俗理解fast 低延迟模型干明确、机械的活good 强模型干需要设计判断的难活。指挥长的标准打法是用fast起草、用good复核与攻坚。五个 Worker 控制工具五个工具的 Schema类型定义、描述与校验集中在packages/coding-agent/src/tools/vibe.ts工具输入与行为vibe_spawn{ cli: fast \| good, prompt, name? }。启动一个空白 Worker 并给出完整自包含的首条 brief。name会被清洗name.replace(/[^A-Za-z0-9_-]/g, ).slice(0, 48)并截断到 48 字符省略时自动生成 id内部使用generateTaskName()。vibe_send{ session, message }。在流式 turn 的下一步进行 steering中途转向若已有 turn 但不可转向则自动排队为下一 turn若 Worker 空闲/已停车idle/parked立即启动下一 turn。vibe_wait{ sessions?, timeout? }。等待第一个被监视的 turn 落地省略时等待所有在途 Worker默认 30 秒。会向 job manager 确认已落地任务避免结果被投递两次。vibe_kill{ session }。取消在途 turn、清空排队消息、释放 Worker并保留任何已初始化的 transcript 于history://id。vibe_list{}。按 spawn 顺序列出会话及其 tier、状态、turn/队列数量、解析到的模型与最近活动。几个值得强调的源码级细节spawn/send 立即返回。每个 Worker turn 的结果通过异步 job manager自我投递进指挥长对话长响应文本在投递处有预览上限RESPONSE_PREVIEW_MAX 6000字符见 runtime.ts完整输出可在agent://id查看。vibe_wait可中断。工具实现中wait是interruptible true并会以 500ms 间隔推送 TV-wall 进度帧超时的 wait 可以直接重发。TUI 渲染风格spawn/send 会绘制一个迷你命令行指挥长正在输入的消息wait/list 则绘制电视墙TV wall——每个 Worker 一块实时屏幕堆叠显示其工具调用与流式文本见packages/coding-agent/src/tools/vibe.ts的tvScreen渲染器。并发是常态让fast和goodWorker 在相互独立的工作流上并行运行是指挥长的标准形态。作用域与失败行为Worker id 的作用域绑定到属主 agent 父会话来自其他作用域的 Worker 会被报告为 unknown 且无法控制#record通过scopeKey与matchesScope双重校验作用域键由parentSessionId parentSessionFile ownerId id组成。spawn 需要会话的异步 job manager否则抛出 Vibe sessions require async execution 错误。失败路径的设计同样细致spawn 失败会拆除部分记录置 killed/dead 状态、写spawn-failedtombstone、删除记录后重新抛出turn 失败会作为失败 job 结果自我投递VibeTurnError可恢复的 keep-alive Worker失败后回到idle等待下一次vibe_send注册的子会话无法再解析的 Worker 变为dead#finishTurn中判断 agent ref 不再是 idle/parked 后置 dead 并写unrecoverabletombstone。指挥长工作流七步并行驱动法docs/vibe-mode.md给出的完整工作流如下结合提示词文件packages/coding-agent/src/prompts/system/vibe-mode-active.md的Direction节可互相印证切分把请求拆成相互独立的工作流——每个工作流一个持久化 Worker使每个 Worker 都能累积有意义的会话上下文spawn调用vibe_spawn提交自包含 brief涉及文件、约束、可观测的验收标准。Worker 从空白开始永远看不到指挥长的对话持续指挥turn 在途时继续指挥其他 Worker只有在被阻塞时才用vibe_wait超时可重发自然纠偏用vibe_send进行修正与下一步指示。中途 send 能转向就转向否则自动成为 Worker 的下一 turn验证结果到达后用read读取被触碰的文件、在预览不足时查看agent://id完整输出通过可选的父级todo来对账已核实的工作按难度路由先用fast起草机械执行卡壳或需要判断时升级到good收尾对已完成/卡住的 Worker 使用vibe_kill退出模式会杀掉整个剩余作用域。docs/vibe-mode.md最后一句是这条工作流的责任边界指挥长始终对最终结果负责——Worker 完成只意味着其 turn 已落地并不意味着其声称是正确的。持久化与生命周期Worker 不会比一次退出活得更久Vibe 的生命周期词汇表定义在packages/coding-agent/src/vibe/lifecycle.ts持久化 custom-entry 类型标签为vibe-session-lifecycleschema 版本为 1事件类型包括spawn、turn-started/turn-settled、tombstone原因有explicit-kill/mode-exit/spawn-failed/unrecoverable与tombstone-revokedparseLifecycleEvent对所有字段做严格校验版本、id、ownerId、parentSessionId、turn 序号为正整数、cli 仅允许fast/good外来或畸形数据一律返回undefinedpersistedVibeChildIds会被内部 URL 解析路径registry/persisted-agents消费用于从不可信的持久化 JSON 中安全识别子会话 id。运行时runtime.ts围绕这份词汇表实现了三层保障rehydrate恢复会话时从父会话 journal 中重建可恢复有 turn 且未被 tombstone的 Worker 为 idle/parked 记录被 tombstone 的保持 terminalmode-exit的 tombstone 可被tombstone-revoked撤销例如重新进入模式时activateScope会从#terminatedScopes中移除该作用域重新开放 spawn 准入killAll模式退出时先原子地持久化全部mode-exittombstone通过appendEntriesAtomically再逐个#killRecord取消在途 job、释放 agent ref、标记 terminal并写入none模式变更宽限期所有 teardown 都有VIBE_TEARDOWN_GRACE_MS 5_000ms的等待窗口超时后仍会继续在后台清理#continueKilledCleanup/#continueSuspendedCleanup保证即使持久化或 job 清理滞后记录也不会泄漏。状态机与 TV-wall 快照Worker 会话对外暴露四种状态VibeSessionStatestartingspawn 后首 turn 启动前→runningturn 在途→idleturn 结束、可接收下一 send→deadkilled / 不可恢复 / suspended。TUI 侧将starting/running显示为运行中accent 色idle为成功色dead为静默色muted。VibeScreenSnapshotruntime.ts为每个 Worker 提供一屏直播数据id、cli、state、解析模型、turn 数、排队数、在途 turn 的开始时间与消息、当前工具及其参数、最近意图、已完成工具调用 trace尾部 6 条展开态最多显示 6 行 trace 与 3 行输出、流式文本尾部与最近活动时间。所有字符串都在注册表侧完成单行清洗渲染器可直接原样打印。TV-wall 按spawn 顺序稳定排序而不是按活动时间——保证指挥长看到的墙始终是稳定的编号墙。值得一提的细节当指挥长空闲而 Worker 在流式生成时状态栏的 tok/s 徽标会通过aggregateVibeWorkerTokensPerSecondruntime.ts 末尾聚合所有在流 Worker 的速率避免显示陈旧值——这说明 Vibe Mode 甚至把指挥长自己没在跑模型也考虑进了 UI 体验。参考资料模式总览docs/vibe-mode.md指挥长注入指令packages/coding-agent/src/prompts/system/vibe-mode-active.md工具实现与 TUI 渲染器packages/coding-agent/src/tools/vibe.ts运行时与状态机packages/coding-agent/src/vibe/runtime.ts生命周期词汇表packages/coding-agent/src/vibe/lifecycle.ts/vibe命令注册packages/coding-agent/src/slash-commands/builtin-modes.ts工具提示词vibe-spawn.md、vibe-send / vibe-wait / vibe-kill / vibe-list 同目录【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表