NovaCode 终端:编辑 README.md 前弹出确认,选项是允许、本次模式不再询问、拒绝

终端 AI 编码助手

NovaCode

运行在终端中的 AI 编程助手,通过自然语言读写代码、执行命令,并管理权限与长会话。

  • Python
  • Textual
  • MCP
  • OS Sandbox
01 / 05 · OVERVIEW

项目概览

NovaCode 是一个终端 AI 编程助手。用户用自然语言提出任务,Agent 读取代码、选择工具、申请必要权限并执行修改或命令;同一套运行逻辑提供 Textual TUI、命令行 Print 和浏览器 Remote 三种入口。

项目重点不是聊天框,而是怎样把模型输出接到可控制、可取消、可恢复的执行过程。模型文本和工具事件需要关联,工具副作用需要授权,长对话需要压缩,多 Agent 还需要独立生命周期。

使用场景与交互入口

入口适合的工作方式共用的核心能力
Textual TUI在终端连续阅读结果、审阅工具调用并调整任务Agent 循环、权限、上下文与会话
Print从脚本提交任务,消费文本或流式 JSON同一套工具与授权执行路径
Remote在浏览器查看流式输出、工具记录与审批事件归一化及运行身份关联

三种界面分别解决交互方式,真正的执行规则应保持一致。一个文件修改在 TUI 中需要审批,不能因为换成浏览器或后台 Worker 就失去路径约束。非交互入口还必须明确无法等待人工响应时如何处理 ask。

典型任务包括阅读项目结构、定位函数、修改少量代码、执行检查,以及先生成只读方案再进入实现。Agent 可以根据工具结果继续调整步骤,但错误结果、拒绝和取消都应成为可解释事件,而不是被界面吞掉。

一轮任务如何完成

flowchart TD
  A[用户任务] --> B[模型事件归一化]
  B --> C[完整工具参数]
  C --> D[权限与执行管线]
  D --> E[工具结果与上下文预算]
  E --> B
  B --> F[完成或取消]

工具参数完整到达后,可以在模型仍流式输出时启动已获准的工具;需要用户确认的调用延后处理。退出、异常和取消都要回收已经创建的工具任务。

运行时的主要组成

flowchart TD
  UI[TUI / Print / Remote] --> A[Agent 事件循环]
  A --> C[模型协议适配]
  A --> P[授权与工具执行管线]
  P --> T[文件、搜索与命令工具]
  A --> M[上下文预算与会话]
  A --> R[RuntimeSupervisor]
  R --> W[独立 Worker 子进程]
  E[MCP、Skill 与 Hook] --> A

模型适配负责把文本、工具参数和终止原因统一起来;工具管线负责解析工具、授权、参数校验和结果回传;上下文层控制历史体积;Supervisor 管理额外执行进程。把这些职责分开,能分别排查“模型没有请求工具”“权限拒绝工具”和“工具运行后失败”。

多 Agent 的价值在于独立上下文和可管理的执行生命周期,而不是简单多开几个终端窗口。每个 Worker 持续保留自己的 conversation,主运行时持有它的身份、当前轮次、审批与关闭状态,终端视图只负责展示事件。

浏览器里的演示

本站提取项目源码中真实的 Remote HTML,保留流式文本、可展开工具记录、权限对话框、方案选择和斜杠菜单。可以直接输入任务,也可以使用“分析项目”“修改文档”“制定计划”“并行审查”场景。

修改文档会请求一次写入审批;拒绝后虚拟文件保持原样,允许后能在后续读取中看到变化。“停止”取消当前轮,过期审批不能作用于新轮。输入 /help、/status、/plan、/compact、/clear 可以查看命令、切换只读规划、模拟压缩或清空会话。

演示对话和虚拟 README 保存在当前浏览器,刷新会重放已完成的消息。刷新中的运行不会在后台继续;这与真实运行时的进程生命周期不同。

演示边界

这是 WebSocket 事件的本地模拟,回答和工具结果来自明确的演示场景,没有模型调用,不读写真实项目,不执行终端命令,也没有启动 Worker 子进程或 OS 沙箱。并行场景展示两条模拟工具记录,不代表真实多 Agent 已在浏览器启动。

/compact 在演示中仅截短本地记录;真实项目用模型摘要、保留原文尾部,并维护工具调用与结果配对,原理见上下文与扩展。

技术栈

Python / asyncio 承载运行时,Textual 提供终端界面,Anthropic / OpenAI SDK 接入模型,MCP 接入外部工具。当前多 Agent 执行已经收敛到 Supervisor 管理的 Worker 子进程;旧的 mailbox 或 tmux 作为执行器的描述已不适用。

设计取舍

工具执行越早开始,越有机会与模型输出重叠,但越需要保证参数完整、审批有效和退出清理。上下文压缩可以延长会话,却会引入信息丢失与恢复成本。独立 Worker 隔离对话和进程生命周期,但不自动隔离共享文件,必要时仍需要独立 worktree。

项目因此把这些能力描述成明确的运行时机制,而不是“模型自主处理一切”。当前原生 Windows transport、真实 macOS 平台验收和部分存储统一仍有边界,浏览器演示也不包含真实模型、终端与 OS 沙箱。