尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

oh-my-opencode-slim 桌面伴侣 Companion:浮动 Agent 状态叠加层配置、安装与自更新机制全解

发布时间:2026/9/25 6:10:55

资讯中心
01
ARTICLE

oh-my-opencode-slim 桌面伴侣 Companion:浮动 Agent 状态叠加层配置、安装与自更新机制全解

oh-my-opencode-slim 桌面伴侣 Companion:浮动 Agent 状态叠加层配置、安装与自更新机制全解
人工智能AI AgentAgent 编排AI 技能【免费下载链接】oh-my-opencode-slimLean, fine tuned Opencode multi agent suite · Mix any models · Auto delegate tasks项目地址https://gitcode.com/gh_mirrors/oh/oh-my-opencode-slim点击查看免费下载导读Companion 是 oh-my-opencode-slim 内置的可选桌面伴侣它以浮动窗口叠加在桌面上用 GIF 动画实时可视化 OpenCode 各会话中 Orchestrator、Fixer 等 Agent 的忙碌/空闲/等待输入状态。读完本文你将掌握companion配置块的每一个参数及其取值范围、通过安装器含--companionyes/no参数安装原生二进制、在 niri 等 Wayland 合成器下配置悬浮窗口规则以及理解运行时自更新与发布流程的底层实现。一、Companion 是什么一次会话一个可视化状态窗口Companion 是一个独立于 OpenCode 核心编排之外的视觉叠加层。它监听 OpenCode 的会话生命周期事件把每个会话中正在运行的 Agent 活动orchestrator、fixer、explorer 等最多同时显示 9 个同步到本地状态文件再由一个原生 Rust 二进制渲染成悬浮在桌面上的动画窗口。它不参与模型调度、任务分配等核心逻辑因此即使 Companion 未安装或启动失败也不会影响插件主体功能——这也是它在架构上被刻意设计为可选、尽力而为的原因。从 src/companion/codemap.md 的模块职责描述看整套系统遵循经典的生产者-消费者模式生产者src/companion/manager.tsCompanionManager类监听session.status/session.deleted事件维护每个会话的活跃 Agent 集合把状态写入companion-state.json并在启用时 spawn 原生 Companion 进程消费者src/companion/updater.ts负责从 GitHub Releases 下载对应平台的原生二进制、校验 SHA-256 校验和、管理安装元数据与版本跟踪、执行自动更新。两个组件通过状态文件 PID 文件解耦这也是后面所有配置项和行为细节的底层背景。二、如何启用companion配置块启用 Companion 只需在设置配置文件中加入companion段。配置文件位于~/.config/opencode/oh-my-opencode-slim.json或项目级.opencode/oh-my-opencode-slim.json完整示例含全部可选参数及其默认值{ companion: { enabled: true, binaryPath: /path/to/oh-my-opencode-slim-companion, position: bottom-right, size: medium, gifPack: default, loopStyle: classic, speed: 1, debug: false } }配置模式定义在 src/config/schema.tsCompanionConfigSchema基于 Zod并作为顶层RawPluginConfigSchema的可选键挂载同文件 L791字段均为可选缺失时使用默认值。支持的取值一览配置项可选值默认值说明companion.positionbottom-right/bottom-left/top-right/top-leftbottom-right无自定义窗口位置时使用的屏幕角落companion.sizesmall(80px) /medium(120px) /large(160px)medium动画窗口尺寸companion.gifPackdefaultdefault内置动画包由companion/VIDEOS/中的 MP4 源生成companion.loopStyleclassic/smoothclassicclassic正向播放后跳回第一帧smooth乒乓式播放到末尾反向过渡更平滑companion.speed0.254数值1动画播放速度倍率1 加快1 减慢companion.debugtrue/falsefalse开启原生 Companion 的详细调试日志companion.binaryPath任意可执行文件路径未设置使用默认安装路径自定义二进制路径设置后运行时启动该二进制其中speed的0.254边界与position/size/gifPack/loopStyle的枚举值都直接对应 src/config/schema.ts 中 Zod 的.min(0.25).max(4)与.enum([...])校验配置不合法时会在加载阶段被拒绝。动画包与 GIF 生成companion.gifPack当前只提供default一个内置包。该包对应的精灵图sprite sheet由仓库中的 MP4 源视频生成源与运行时动画的映射关系记录在 companion/VIDEOS/README.mdMP4 源运行时动画对应状态idle.mp4intro.jpg空闲/默认question.mp4question.jpginput等待用户输入unknown.mp4unknown.jpg未知/自定义 Agent其余name.mp4同名name.jpg对应命名 Agent 的动画每张精灵图取视频前 3 秒、24 FPS共 72 个200x200方形帧以12x6网格拼成一张2400x1200的 JPEGcompanion/animations/目录下的图片即这些成品。如需重新生成可在仓库根目录用 FFmpeg 一键处理for video in companion/VIDEOS/*.mp4; do name$(basename $video .mp4) output_name$name if [ $name idle ]; then output_nameintro fi ffmpeg -hide_banner -loglevel error -y \ -i $video \ -vf trimduration3,setptsPTS-STARTPTS,fps24,scale200:200,setsar1,tile12x6 \ -frames:v 1 -q:v 2 \ companion/animations/$output_name.jpg done注意运行时不会直接解码 MP4发布版二进制内嵌的是上述 JPEG 精灵图因此替换动画只需重生成 JPG 并重建二进制即可。三、状态机与窗口行为会话事件如何驱动动画从事件到状态文件的映射CompanionManager的驱动源是 OpenCode 的session.status事件——之所以不用工具调用生命周期是因为后台 Task 启动会立即返回而 Agent 仍在子会话中继续运行只有会话级事件才能准确反映谁还在忙。核心状态更新逻辑src/companion/manager.tsbusy把该会话的 Agent 名加入active_agents数组通过sessionAgentMap完成会话 ID → Agent 名解析idle从active_agents移除对应会话即使 Agent 名未知也会按会话 ID 删除避免完成的任务卡在屏幕上waiting-input会话进入等待用户输入状态input-resolved根据active_agents是否为空回到busy或idle。一个值得注意的细节orchestrator 会话 idle 并不会清空其他 Agent。因为在后台编排模式下orchestrator 空闲时其派发的子 Agent 可能仍在运行子 Agent 只能由各自的 idle/deleted 事件移除。另外Herdr 子 Agent经opencode attach派生常常缺失agent字段此时会用会话 ID 兜底展示保证事件不丢失。activeAgents()src/companion/manager.ts决定当前显示的动画内容有活跃 Agent 时取最多 9 个每个 Agent 实例一个格子例如两个 fixer 显示两格否则按状态回退为input等待输入、orchestrator忙碌或intro空闲。状态文件与进程守护状态文件路径为~/.local/share/opencode/storage/oh-my-opencode-slim/companion-state.jsonXDG_DATA_HOME已设置且为绝对路径时以其为准逻辑见 src/companion/manager.ts 的stateFilePath()。文件内容为{ version: 1, sessions: [...], window_positions?, config? }结构每次写入采用临时文件 原子 renamewriteState()同文件 L189-L206并借助companion-state.json.lock目录锁防止并发写坏。进程侧则采用PID 文件 双层防重复机制只有获得companion.pid锁、且确认没有存活的既有实例时才会 spawn 新的 Companion 进程spawnIfAvailable()同文件 L459-L537。spawn 时以detached: true脱离父进程并注入两个环境变量OH_MY_OPENCODE_SLIM_COMPANION_SESSION_ID当前会话 IDOH_MY_OPENCODE_SLIM_COMPANION_DEBUG当config.debug true时置为1。此外manager 采用模块级activeManagers集合 单一process.on(exit)监听器去重避免插件因config.update()重建实例而泄漏 exit 监听器src/companion/manager.ts。记住窗口位置Companion 窗口支持鼠标拖拽到任意位置。插件会在状态文件的window_positions中按项目记录最后一次拖拽位置下次打开该项目时自动恢复若某项目没有自定义位置则回落到配置的companion.position角落。恢复时位置会被夹取clamp到当前屏幕范围内因此显示器分辨率变化后窗口也不会跑到屏幕外。调试日志位置当companion.debug: true时原生 Companion 的详细日志写入$XDG_DATA_HOME/opencode/log/若未设置则回落到~/.local/share/opencode/log/。排查窗口/会话行为异常时开启该选项配合 src/utils/logger.ts 输出的[companion]前缀日志即可定位问题。四、安装与卸载交互式安装器与--companion参数Companion 是可选项安装器默认不装。交互式安装过程中会询问是否下载并启用原生 Companion 二进制默认回答no直接按 Enter 跳过非 TTY 环境下则自动跳过并提示使用--companionyes见 src/cli/install.ts。自动化安装/跳过# 安装插件的同时下载并启用 Companion bunx oh-my-opencode-slim install --companionyes # 跳过 Companion不下载二进制、不写入 companion 配置块 bunx oh-my-opencode-slim install --companionno安装器会根据当前系统的 OS/架构选择匹配的归档getCompanionTarget()src/companion/updater.ts从companion-v0.1.3release 下载、解压到运行时二进制路径并写入companion配置块。安装失败时打印警告后继续完成核心插件安装Companion 不启用不会中断主流程——这是installCompanionsrc/cli/companion.ts与handleOptionalCompanionResultsrc/cli/install.ts共同保证的尽力而为语义。安装期校验安装前会确认平台支持macOS arm64/x64、Linux x64/arm64、Windows x64其余平台直接返回Unsupported platform/architecture错误src/cli/companion.ts。支持--dry-run预览将要下载的归档与安装目标便于 CI 或演示场景使用。五、预期二进制路径与自动更新机制运行时查找顺序resolveCompanionBinaryPath()src/companion/manager.ts按以下顺序解析要启动的二进制若配置了companion.binaryPath且文件存在使用该路径否则使用默认安装路径$XDG_DATA_HOME/opencode/storage/oh-my-opencode-slim/bin/oh-my-opencode-slim-companionXDG_DATA_HOME未设置时回落到~/.local/share/opencode/storage/oh-my-opencode-slim/bin/oh-my-opencode-slim-companionWindows 下文件名带.exe后缀见 src/companion/updater.ts二进制不存在时记录警告并跳过启动不崩溃插件。自动更新与安装元数据当 Companion 启用且使用默认安装路径时插件会让原生二进制与随插件包分发的 Companion 版本保持对齐ensureCompanionVersion()src/companion/updater.ts每次启动会先做版本检查读取二进制旁的安装元数据binary.json含version/tag/target/installedAt/archiveName/checksum与 manifest 版本做语义化比较compareSemver已是最新则直接返回current跳过下载需要更新时下载对应归档 → 计算 SHA-256 与 manifest 中的期望值比对 → 解压Unix 用tarWindows 用 src/utils/zip-extractor.ts→ 拷贝到安装目录并赋予 0755 权限 → 写入安装元数据下载超时 30 秒、安装锁等待超时 2 秒、5 分钟未更新的锁视为陈旧锁自动清理常量见 src/companion/updater.ts。这些检查都在 Companion spawn 之前进行但使用了短超时不会因为网络慢而阻塞 OpenCode 启动插件自动更新后也会尝试同步更新 Companion 二进制若下载失败插件更新仍然成功Companion 更新会在下次 OpenCode 重启时重试。更新器用锁binary.lock防止多个 OpenCode 进程同时替换同一二进制崩溃残留的陈旧锁会被自动清除。两个重要的边界行为自定义二进制不受更新影响设置了companion.binaryPath后ensureCompanionVersion直接返回skipped: custom-binarysrc/companion/updater.ts自定义二进制由用户自己管理永远不会被自动更新覆盖v0.1.2 原地迁移FIRST_METADATA_VERSION 0.1.2对早于元数据机制的companion-v0.1.2已安装二进制检测到文件存在且无元数据时直接补写元数据同版本下不重新下载实现原地迁移。六、niriWayland下的悬浮窗口配置companion-v0.1.3原生二进制已在 niri 上验证可用并提供稳定的 Wayland app-id/titleoh-my-opencode-slim-companion。由于 niri 默认会像普通 xdg-toplevel 窗口一样平铺tileCompanion想让它表现为覆盖层需要在 niri 配置中加入窗口规则window-rule { match app-idr^oh-my-opencode-slim-companion$ match titler^oh-my-opencode-slim-companion$ open-floating true open-focused false default-floating-position x16 y16 relative-tobottom-right }要点说明该规则可选但缺少open-floating true时 niri 可能把 Companion 当普通窗口平铺open-focused false让 Companion 出现时不抢焦点避免打断输入default-floating-position的x/y间隙与relative-to角落可按喜好调整例如relative-totop-left配合合适的x/y放到左上角若已启用 Companion 且窗口行为异常先跑oh-my-opencode-slim doctor做诊断。七、发布策略独立版本、manifest 校验与手动发布流程分发与版本解耦Companion 二进制与插件使用独立版本号因此插件可以频繁发布 beta 更新而不必每次重建原生二进制。发布走 V2 分发计划GitHub Release Assets二进制上传到companion-v0.1.3release独立版本Companion 自己的版本号当前为0.1.3OS/Arch 检测--companionyes时安装器按当前目标选择归档Manifest 校验和插件内置 src/companion/companion-manifest.json记录了 release 版本、tag 与每个支持归档的 SHA-256不需要 R2GitHub Releases 是事实来源source of truth下载量大时可再考虑加 R2 镜像。当前 release 资产命名oh-my-opencode-slim-companion-v0.1.3-aarch64-apple-darwin.tar.gz oh-my-opencode-slim-companion-v0.1.3-x86_64-apple-darwin.tar.gz oh-my-opencode-slim-companion-v0.1.3-x86_64-unknown-linux-gnu.tar.gz oh-my-opencode-slim-companion-v0.1.3-aarch64-unknown-linux-gnu.tar.gz oh-my-opencode-slim-companion-v0.1.3-x86_64-pc-windows-msvc.zip支持目标与安装器识别名平台目标三元组target归档格式macOS arm64aarch64-apple-darwin.tar.gzmacOS x64x86_64-apple-darwin.tar.gzLinux x64x86_64-unknown-linux-gnu.tar.gzLinux arm64aarch64-unknown-linux-gnu.tar.gzWindows x64x86_64-pc-windows-msvc.zip值得一提的是manifest 的 JSON 内容与 src/companion/updater.ts 中的COMPANION_MANIFEST常量是一一对应的并且有专门测试断言两者保持同步见 src/companion/updater.test.ts防止发布时校验和漂移。维护者发布流程手动触发Companion 二进制不会随每次插件 beta 自动构建——发布工作流是workflow_dispatch手动触发以控制 GitHub runner 用量。只有当 Rust Companion 本身有改动、或插件期望的状态协议有变化时才需要发版。流程如下1. 选定版本。首个 Companion 版本为0.1.2对应 GitHub release tagcompanion-v0.1.3当前安装器即从该 tag 下载。2. 手动触发目标构建。只构建你愿意付费的目标测试阶段建议只选当前平台# 单目标 gh workflow run companion-release.yml \ -f version0.1.3 \ -f targetsmacos-arm64 # 多目标逗号分隔 gh workflow run companion-release.yml \ -f version0.1.3 \ -f targetsmacos-arm64,macos-x64,linux-x64,linux-arm64,windows-x64支持的工作流目标名macos-arm64、macos-x64、linux-x64、linux-arm64、windows-x64。工作流会创建或更新companion-vversionrelease 并上传所选归档。3. 校验发布资产gh release view companion-v0.1.3确认归档名与安装器期望一致后用companion-v0.1.3的 release 资产元数据更新 src/companion/companion-manifest.json 中的 version、tag 与各资产 SHA-256。GitHub release 资产元数据里的digest: sha256:hash可直接去掉sha256:前缀填入 manifest。4. 让用户通过插件安装器安装bunx oh-my-opencode-slimbeta install --companionyes安装器检测 OS/架构、从companion-v0.1.3下载匹配归档、安装到运行时二进制路径并写入 companion 配置块失败时继续核心插件安装。成本控制工作流仅允许workflow_dispatch绝不因 push/PR/tag 自动触发测试时只构建单目标一个 Companion release 可以跨多个插件 beta 复用只有准备支持对应平台用户时才增加目标。八、排障速查症状排查方向启用后无窗口确认二进制存在于默认路径或已设binaryPath查看[companion] enabled but companion binary not found日志窗口位置异常/跑出屏幕检查window_positions是否被夹取删掉状态文件中的位置记录后回落角落配置多个项目同时打开只出现一个窗口这是 PID 文件防重复机制的预期行为最后一个 spawner 持有进程更新失败但插件正常下载失败不影响插件下次重启自动重试检查网络与companion.pid.lock陈旧锁自定义二进制被更新不可能发生binaryPath配置会让更新器直接返回skipped: custom-binaryniri 下被平铺补上open-floating true窗口规则必要时oh-my-opencode-slim doctor以上全部行为均可在 src/companion/manager.ts、src/companion/updater.ts、src/cli/companion.ts 与 src/companion/companion-manifest.json 中逐行核对Companion 的配套测试src/companion/manager.test.ts、src/companion/updater.test.ts覆盖了状态更新、并发锁与校验和校验等关键路径。赞分享人工智能AI AgentAgent 编排AI 技能【免费下载链接】oh-my-opencode-slimLean, fine tuned Opencode multi agent suite · Mix any models · Auto delegate tasks项目地址https://gitcode.com/gh_mirrors/oh/oh-my-opencode-slim点击查看免费下载相关推荐快速无损合并B站缓存视频m4s-converter终极解决方案指南快速无损合并B站缓存视频m4s converter终极解决方案指南 当您收藏的B站视频突然下架那些精心缓存的m4s文件变成无法播放的碎片时是不是感到无比沮人工智能AI AgentAgent 编排AI 技能amis Remark 提示标记组件详解从基础用法到源码实现amis Remark 提示标记组件详解从基础用法到源码实现 导读 Remark 是 amis 前端低代码框架中用于「展示提示文本」的轻量级组件它默认渲染为人工智能AI AgentAgent 编排AI 技能告别臃肿右键菜单用ContextMenuManager一步到位完成Windows右键菜单终极清理告别臃肿右键菜单用ContextMenuManager一步到位完成Windows右键菜单终极清理 上个月帮朋友装了几款日常软件一周后他的右键菜单就长成了小人工智能AI AgentAgent 编排AI 技能上一篇STIT时间缝合技术基于GAN的视频面部编辑终极指南下一篇推荐项目EditorConfig for Visual Studio Code创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。