Skip to content

Latest commit

 

History

History
94 lines (66 loc) · 3.83 KB

File metadata and controls

94 lines (66 loc) · 3.83 KB

jcode-cli 开发计划

本计划基于 DESIGN.md,将设计拆解为可执行、可勾选的任务。 原则:严格按里程碑顺序推进,每个里程碑结束需通过「验收标准」才进入下一阶段。


M0 — 最小闭环(无 TUI)

目标:命令行读 stdin → eino ReactAgent → 流式打印输出,跑通 Agent 循环与工具调用。

  • 初始化 go.mod,引入 eino、eino-ext 依赖
  • 搭建项目骨架目录(cmd/internal/agent/internal/tools/internal/llm/)
  • 接入一个 ChatModel(OpenAI 兼容,读环境变量配 API key/base_url)
  • utils.NewTool 实现一个假工具 get_time
  • react.NewAgent 组装 Agent,挂上假工具
  • 实现 stdin 读取 → agent.Stream()StreamReader.Recv() 循环打印
  • 验收:输入「现在几点」,模型能调用 get_time 并基于结果回答

M1 — 真实工具集

目标:实现四个核心工具,Agent 能真实操作文件与系统(隔离目录测试)。

  • read_file:读取文件内容
  • write_file / edit_file:创建与编辑文件
  • run_shell:执行 shell 命令并捕获 stdout/stderr/exit code
  • http_request:发起 HTTP 请求(用于联网/API)
  • 统一工具的入参 schema(JSON Schema)与错误返回格式
  • 验收:在隔离临时目录,让 Agent 完成「创建文件→写内容→shell 验证」的连续任务

M2 — 权限网关

目标:危险工具(shell、写文件)执行前需授权,先用命令行 y/n 验证。

  • 设计权限三态:自动允许 / 单次确认 / 拒绝
  • 在工具执行前插入「权限网关」拦截层
  • 区分工具风险等级(只读工具默认放行,写/执行类需确认)
  • 命令行实现 y/n 交互确认
  • 拒绝时把「用户拒绝」结果回传给 Agent,使其能调整策略
  • 验收:run_shell 触发确认弹窗;拒绝后 Agent 不执行且能继续对话

M3 — TUI 接入(最复杂)

目标:bubbletea 替换命令行交互,实现流式渲染与工具确认弹窗。

  • 搭建 bubbletea Model(输入框 + 消息流视图)
  • 设计 Agent→TUI 的事件 channel(文本片段/工具调用/工具结果)
  • tea.Cmd 从 channel 读事件并转 tea.Msg
  • 实现流式打字机渲染效果
  • 实现工具确认弹窗,替换 M2 的命令行 y/n
  • 解决工具确认阻塞:工具持「请求授权 channel」+「接收结果 channel」,排查死锁
  • 验收:完整对话在 TUI 中流式呈现;工具确认通过弹窗交互,无卡死

M4 — 多模型 + 配置

目标:配置文件驱动,支持运行时切换模型 provider。

  • 设计配置文件(provider、API key、base_url、工具开关)
  • 抽象 provider 工厂:openai / ark(豆包)/ claude / ollama
  • 按模型差异配置 StreamToolCallChecker(Claude 先吐文本)
  • 运行时切换模型的命令/快捷键
  • 引入 MessageRewriter 做长对话上下文压缩
  • 验收:同一会话切换两个不同 provider 均能正常工具调用与流式输出

M5 — MCP 扩展

目标:接入 MCP 客户端,支持挂载外部工具。

  • 引入 eino-ext 的 MCP 工具适配
  • 实现 MCP server 连接配置(stdio / SSE)
  • 把 MCP server 暴露的工具桥接为 eino tool 并注册进 Agent
  • MCP 工具同样纳入 M2 权限网关
  • 验收:配置一个外部 MCP server,其工具能被 Agent 正常发现并调用

风险清单(贯穿全程)

风险 触发阶段 缓解
TUI 与流式异步桥接复杂 M3 M0/M1 完全不碰 TUI,孤立到 M3 处理
工具确认阻塞导致死锁 M3 双 channel 模式,严格测试拒绝/超时路径
多模型 tool call 流式差异 M4 逐 provider 配置 StreamToolCallChecker
长对话上下文超限 M4+ MessageRewriter 压缩