ARTICLE DETAIL

资讯详情

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

abtop扩展实战:5步实现AgentCollector trait,为你的AI编码Agent新增监控支持

abtop扩展实战:5步实现AgentCollector trait,为你的AI编码Agent新增监控支持 abtop扩展实战5步实现AgentCollector trait为你的AI编码Agent新增监控支持【免费下载链接】abtopLike htop, but for AI coding agents. Monitor Claude Code Codex CLI sessions, tokens, context window, rate limits, and ports in real-time.项目地址: https://gitcode.com/gh_mirrors/ab/abtopabtop 是一款类 htop 的终端 AI 编码 Agent 监控工具能实时查看 Claude Code、Codex CLI、OpenCode 会话的 Token 用量、上下文窗口、速率限制与端口占用。如果你日常使用其他 AI 编码 Agent想让它也出现在同一块仪表板上本文就用5 步带你实现核心扩展点AgentCollectortrait为 abtop 新增监控支持。为什么 abtop 适合二次扩展abtop 的设计是一个 Agent 一个收集器主循环每 2 秒执行一次 tick把所有已注册的收集器统一调度汇总后渲染到终端面板。这意味着新增一个 Agent 监控不需要改动任何 UI 代码只需提供一个新的收集器实现并注册进去。整体协作流程如下MultiCollector ──每tick── 各 AgentCollector.collect(shared) │ │ └── SharedProcessData进程/子进程/端口全局只采集一次统一调度入口MultiCollector共享进程数据避免重复执行ps/lsofSharedProcessData三个官方参考实现claude.rs、codex.rs、opencode.rs先获取源码仓库开始动手git clone https://gitcode.com/gh_mirrors/ab/abtop第1步读懂数据模型 AgentSessioncollect()的返回值是VecAgentSession它就是 abtop 渲染所有面板的通用货币。读懂它就完成了一半。AgentSession定义在 src/model/session.rs核心字段一览字段含义必填程度agent_cliAgent 标识如claude、codex静态字符串必填pidAgent 主进程 PID0 表示进程不可用必填session_id/cwd/project_name会话 ID、工作目录、项目名必填status状态Thinking/Executing/Waiting/Done等必填context_percent/context_window上下文窗口占用百分比与窗口大小建议填total_input_tokens/total_output_tokensToken 累计值建议填current_tasks/mem_mb/children当前任务、内存、子进程含端口可选 小技巧字段很多但参考最精简的 OpenCodeCollector 就能看到一个合格答案长什么样——填不准的字段用0、空字符串或空Vec占位即可。第2步定位进程发现你的 Agent 会话监控的前提是找到正在运行的 Agent 进程。好消息是ps结果已经通过SharedProcessData共享给你了不要自己去再跑一遍ps。典型做法参考 OpenCodeCollector::find_opencode_pidslet my_agent_pids shared.process_info .iter() .filter(|(_, info)| process::cmd_has_binary(info.command, my-agent)) .map(|(pid, _)| *pid) .collect::Vec_();然后从 Agent 自己的本地状态配置文件、日志、SQLite 数据库等中读取会话详情用 PID 与工作目录做匹配把活的进程和会话记录对应起来。abtop 对数据源的原则是只读本地文件 进程信息不发任何网络请求。第3步填充 AgentSession 关键字段拿到会话数据后按 AgentSession 的字段逐一对应填入。几个高频要点状态判断可参考 SessionStatus 的注释——进程存活且最近有活动 →Thinking/Executing长时间无活动 →Waiting进程已退出 →DoneDone的会话会被自动过滤。上下文窗口数据源里通常没有现成数值可用现成的 context_window_for_model 按模型名推算窗口大小200K/1M再计算百分比。安全清洗显示到 TUI 的文本建议过一遍 sanitize_terminal_text 与 redact_secrets避免控制字符和密钥泄漏进界面。第4步实现 AgentCollector trait 并注册到 MultiCollector扩展点只有 15 行一个必选方法 两个可选方法方法必需作用collect(mut self, shared: SharedProcessData) - VecAgentSession✅每个 tick 返回该 Agent 的存活会话列表live_rate_limit(self) - OptionRateLimitInfo❌提供账户级速率限制配额面板展示discovered_config_dirs(self) - VecPathBuf❌上报发现的配置目录供跨目录查询限额最小骨架可对照 OpenCodeCollector 的 implpub struct MyAgentCollector { /* 缓存字段放这里 */ } impl AgentCollector for MyAgentCollector { fn collect(mut self, shared: SharedProcessData) - VecAgentSession { // 第2~3步的成果在这里返回 } // 不需要配额面板两个可选方法留默认实现即可 }最后一步是注册在 with_hidden_and_claude_config_dirs 的collectors列表中加入Box::new(MyAgentCollector::new())。注意agent_cli标识如my-agent会参与hidden_agents配置的大小写不敏感匹配——用户可在~/.config/abtop/config.toml中通过hidden_agents [my-agent]隐藏你的收集器请保持一致。⚡ 性能约定昂贵的发现操作扫磁盘、读/proc放到shared.slow_tick true时执行约每 10 秒一次快速 tick 复用缓存。参考 OpenCodeCollector 的缓存策略。第5步构建、运行与测试验证cargo build # 编译通过 cargo test # 建议为你的收集器补上单元测试可参考各 collector 文件底部 #[cfg(test)] cargo run -- --once # 单帧快照快速验证会话是否出现 cargo run # 启动 TUI观察你的 Agent 是否进入 sessions 面板验证清单✅--once输出中出现你的 Agent 会话行✅ sessions 面板中状态Thinking/Waiting随实际活动切换✅ 子进程与端口正确归属到会话端口面板无重复✅ 杀掉 Agent 进程后会话消失Done自动过滤✅ 10 秒级慢 tick 下不卡顿昂贵 I/O 已缓存在 fast tick参考资料扩展入口 traitAgentCollector会话数据模型src/model/session.rs最简实现范本SQLite 数据源 缓存src/collector/opencode.rs复杂实现范本大文件增量解析src/collector/claude.rs速率限制读取src/collector/rate_limit.rs项目架构与数据源说明AGENTS.md按照以上 5 步你就完成了 abtop 的 Agent 监控扩展。从读懂数据模型到注册收集器核心代码量不过百行——现在让你的 AI 编码 Agent 也登上这块实时监控仪表板吧 【免费下载链接】abtopLike htop, but for AI coding agents. Monitor Claude Code Codex CLI sessions, tokens, context window, rate limits, and ports in real-time.项目地址: https://gitcode.com/gh_mirrors/ab/abtop创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表