项目概览
NovaCode 是一个终端 AI 编程助手。用户用自然语言提出任务,Agent 读取代码、选择工具、申请必要权限并执行修改或命令;同一套运行逻辑提供 Textual TUI、命令行 Print 和浏览器 Remote 三种入口。
项目重点不是聊天框,而是怎样把模型输出接到可控制、可取消、可恢复的执行过程。模型文本和工具事件需要关联,工具副作用需要授权,长对话需要压缩,多 Agent 还需要独立生命周期。
使用场景与交互入口
| 入口 | 适合的工作方式 | 共用的核心能力 |
|---|---|---|
| Textual TUI | 在终端连续阅读结果、审阅工具调用并调整任务 | Agent 循环、权限、上下文与会话 |
| 从脚本提交任务,消费文本或流式 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 沙箱。
