|
2 | 2 |
|
3 | 3 | > 基于 Go + Bubble Tea 的本地 Coding Agent |
4 | 4 |
|
5 | | -NeoCode 是一个在终端中运行的 AI 编码助手,采用 ReAct(Reason-Act-Observe)循环模式,能够自主推理、调用工具并完成任务。 |
| 5 | +## NeoCode 是什么 |
6 | 6 |
|
7 | | -## 核心特性 |
| 7 | +NeoCode 是一个在终端中运行的 AI 编码助手,采用 ReAct(Reason-Act-Observe)循环模式,围绕以下主链路工作: |
8 | 8 |
|
9 | | -- **流式输出** — 实时展示模型思考过程 |
10 | | -- **工具系统** — 文件操作、代码执行、搜索等内置工具 |
11 | | -- **内建 Provider 支持** — OpenAI、Gemini、OpenLL、Qiniu,模型列表支持动态发现与缓存 |
12 | | -- **终端原生体验** — 基于 Bubble Tea 的现代化 TUI |
| 9 | +`用户输入 -> Agent 推理 -> 调用工具 -> 获取结果 -> 继续推理 -> UI 展示` |
13 | 10 |
|
14 | | -## 一键安装 |
| 11 | +它适合希望在本地工作流中完成代码理解、修改、调试与自动化操作的开发者。 |
15 | 12 |
|
16 | | -NeoCode 提供了跨平台的一键安装脚本。无论你是哪种操作系统,只需在终端执行以下命令,脚本将自动探测系统架构、拉取最新 Release 产物并配置好环境变量: |
| 13 | +## 有什么能力 |
17 | 14 |
|
18 | | -### 🍎 macOS / Linux |
19 | | -打开终端(Terminal)并运行: |
20 | | -```bash |
21 | | -curl -fsSL https://raw.githubusercontent.com/1024XEngineer/neo-code/main/scripts/install.sh | bash |
22 | | -``` |
| 15 | +- 终端原生 TUI 交互体验(Bubble Tea) |
| 16 | +- Agent 可调用内置工具完成文件与命令相关任务 |
| 17 | +- 支持 Provider/Model 切换(内建 `openai`、`gemini`、`openll`、`qiniu`) |
| 18 | +- 支持上下文压缩(`/compact`),帮助长会话保持可用 |
| 19 | +- 支持工作区隔离(`--workdir`、`/cwd`) |
| 20 | +- 会话持久化与恢复,降低重复沟通成本 |
23 | 21 |
|
24 | | -### Windows |
| 22 | +## 怎么用(快速开始) |
25 | 23 |
|
26 | | -打开 PowerShell 并运行: |
| 24 | +### 1) 环境要求 |
27 | 25 |
|
| 26 | +- Go `1.25+` |
| 27 | +- 可用的 API Key(如 OpenAI、Gemini、OpenLL、Qiniu) |
28 | 28 |
|
| 29 | +### 2) 一键安装 |
29 | 30 |
|
30 | | -```PowerShell |
31 | | -irm https://raw.githubusercontent.com/1024XEngineer/neo-code/main/scripts/install.ps1 | iex |
32 | | -``` |
33 | | - |
| 31 | +macOS / Linux: |
34 | 32 |
|
| 33 | +```bash |
| 34 | +curl -fsSL https://raw.githubusercontent.com/1024XEngineer/neo-code/main/scripts/install.sh | bash |
| 35 | +``` |
35 | 36 |
|
36 | | -## 快速开始 |
37 | | - |
38 | | -### 环境要求 |
| 37 | +Windows PowerShell: |
39 | 38 |
|
40 | | -- Go 1.21+ |
41 | | -- API Key(OpenAI 或 Google Gemini) |
| 39 | +```powershell |
| 40 | +irm https://raw.githubusercontent.com/1024XEngineer/neo-code/main/scripts/install.ps1 | iex |
| 41 | +``` |
42 | 42 |
|
43 | | -### 安装与运行 |
| 43 | +### 3) 从源码运行 |
44 | 44 |
|
45 | 45 | ```bash |
46 | | -# 克隆仓库 |
47 | 46 | git clone https://github.com/1024XEngineer/neo-code.git |
48 | | -cd neocode |
49 | | - |
50 | | -# 设置 API Key |
51 | | -export OPENAI_API_KEY=your_key_here |
52 | | - |
53 | | -# 运行 |
| 47 | +cd neo-code |
54 | 48 | go run ./cmd/neocode |
55 | 49 | ``` |
56 | 50 |
|
57 | | -### 基本使用 |
| 51 | +设置 API Key 示例(按你使用的 provider 选择): |
58 | 52 |
|
59 | | -在 TUI 中输入自然语言指令,例如: |
60 | | - |
61 | | -``` |
62 | | -帮我看看当前项目的目录结构 |
63 | | -创建一个 HTTP 服务器,监听 8080 端口 |
64 | | -分析 runtime.go 的主要逻辑 |
| 53 | +```bash |
| 54 | +export OPENAI_API_KEY="your_key_here" |
| 55 | +export GEMINI_API_KEY="your_key_here" |
| 56 | +export AI_API_KEY="your_key_here" |
| 57 | +export QINIU_API_KEY="your_key_here" |
65 | 58 | ``` |
66 | 59 |
|
67 | | -使用 slash 命令快速切换配置: |
| 60 | +Windows PowerShell: |
68 | 61 |
|
69 | | -- `/provider` — 切换内建模型提供商 |
70 | | -- `/model` — 切换模型 |
71 | | - |
72 | | -## 架构概览 |
73 | | - |
74 | | -``` |
75 | | -┌─────────────────────────────────────────┐ |
76 | | -│ TUI (Bubble Tea) │ |
77 | | -└────────────────┬────────────────────────┘ |
78 | | - │ Events |
79 | | -┌────────────────▼────────────────────────┐ |
80 | | -│ Runtime (ReAct Loop) │ |
81 | | -└────────┬───────────────────┬────────────┘ |
82 | | - │ │ |
83 | | - ┌────▼─────┐ ┌────▼──────┐ |
84 | | - │ Provider │ │ Tools │ |
85 | | - │ (LLM) │ │ Registry │ |
86 | | - └──────────┘ └───────────┘ |
| 62 | +```powershell |
| 63 | +$env:OPENAI_API_KEY = "your_key_here" |
| 64 | +$env:GEMINI_API_KEY = "your_key_here" |
| 65 | +$env:AI_API_KEY = "your_key_here" |
| 66 | +$env:QINIU_API_KEY = "your_key_here" |
87 | 67 | ``` |
88 | 68 |
|
89 | | -核心模块职责: |
90 | | - |
91 | | -- **`internal/config`** — 配置管理、环境变量、YAML 加载 |
92 | | -- **`internal/context`** — system prompt、消息裁剪与上下文构建 |
93 | | -- **`internal/provider`** — Provider 契约、驱动注册与通用领域类型 |
94 | | -- **`internal/provider/openaicompat`** — OpenAI-compatible 协议入口、discovery 与 `api_style` 分流 |
95 | | -- **`internal/provider/openaicompat/chatcompletions`** — `/chat/completions` 请求组装、SSE 解析与 tool-call 增量处理 |
96 | | -- **`internal/provider/catalog`** — 模型发现、catalog 缓存与后台刷新 |
97 | | -- **`internal/provider/builtin`** — 内建 driver 注册 |
98 | | -- **`internal/runtime`** — ReAct 主循环与事件流编排(不直接承载会话存储实现;不再导出会话模型与存储类型) |
99 | | -- **`internal/session`** — 会话模型、会话存储抽象与 JSON 持久化实现(统一对外暴露 `Session` / `Summary` / `Store`) |
100 | | -- **`internal/tools`** — 工具注册表与具体工具实现 |
101 | | -- **`internal/tui`** — 终端 UI、交互体验、事件桥接 |
102 | | -- **`internal/app`** — 应用装配与依赖注入 |
103 | | - |
104 | | -## 目录结构 |
| 69 | +按工作区启动(仅当前进程生效): |
105 | 70 |
|
106 | | -```text |
107 | | -. |
108 | | -├── cmd/neocode # CLI 入口 |
109 | | -├── docs # 架构与设计文档 |
110 | | -│ ├── guides # 使用指南 |
111 | | -│ └── *.md # 设计文档 |
112 | | -├── internal |
113 | | -│ ├── app # 应用装配 |
114 | | -│ ├── config # 配置管理 |
115 | | -│ ├── context # 上下文构建 |
116 | | -│ ├── provider # Provider 契约与驱动注册 |
117 | | -│ │ ├── builtin # 内建 driver 注册 |
118 | | -│ │ ├── catalog # 模型发现与缓存 |
119 | | -│ │ └── openaicompat # OpenAI-compatible 协议入口与子协议实现 |
120 | | -│ ├── runtime # ReAct 循环与事件流 |
121 | | -│ ├── session # 会话模型与持久化 |
122 | | -│ ├── tools # 工具系统 |
123 | | -│ └── tui # 终端 UI |
124 | | -└── README.md |
| 71 | +```bash |
| 72 | +go run ./cmd/neocode --workdir /path/to/workspace |
125 | 73 | ``` |
126 | 74 |
|
127 | | -## 文档 |
| 75 | +### 4) 首次使用与常用命令 |
128 | 76 |
|
129 | | -- **[配置指南](docs/guides/configuration.md)** — Provider 策略、配置文件、环境变量 |
130 | | -- **[扩展 Provider](docs/guides/adding-providers.md)** — 如何添加新的模型提供商 |
131 | | -- **[架构设计](docs/neocode-coding-agent-mvp-architecture.md)** — 整体架构与设计理念 |
132 | | -- **[事件流](docs/runtime-provider-event-flow.md)** — Runtime 与 Provider 的事件交互 |
133 | | -- **[Session 持久化](docs/session-persistence-design.md)** — 会话 JSON 存储、token 累计与工作区隔离 |
134 | | - |
135 | | -## 开发 |
136 | | - |
137 | | -```bash |
138 | | -# 格式化代码 |
139 | | -gofmt -w ./cmd ./internal |
| 77 | +- `/help`:查看命令帮助 |
| 78 | +- `/provider`:打开 provider 选择器 |
| 79 | +- `/model`:打开 model 选择器 |
| 80 | +- `/compact`:压缩当前会话上下文 |
| 81 | +- `/status`:查看当前会话与运行状态 |
| 82 | +- `/cwd [path]`:查看或设置当前会话工作区 |
| 83 | +- `/memo`:查看记忆索引 |
| 84 | +- `/remember <text>`:保存记忆 |
| 85 | +- `/forget <keyword>`:按关键词删除记忆 |
| 86 | +- `& <command>`:在当前工作区执行本地命令 |
140 | 87 |
|
141 | | -# 运行测试 |
142 | | -go test ./... |
| 88 | +示例输入: |
143 | 89 |
|
144 | | -# 编译 |
145 | | -go build ./... |
| 90 | +```text |
| 91 | +请先阅读当前项目目录结构并给出模块职责摘要 |
| 92 | +帮我在 internal/runtime 下定位与 tool result 回灌相关逻辑 |
146 | 93 | ``` |
147 | 94 |
|
148 | | -## 当前状态 |
149 | | - |
150 | | -NeoCode 正处于 MVP 阶段,核心闭环已可用: |
151 | | - |
152 | | -✅ 用户输入 → Agent 推理 → 工具调用 → 结果返回 → UI 展示 |
| 95 | +## 配置入口 |
153 | 96 |
|
154 | | -正在持续迭代中,重点关注: |
| 97 | +- 主配置文件:`~/.neocode/config.yaml` |
| 98 | +- 自定义 Provider:`~/.neocode/providers/<provider-name>/provider.yaml` |
155 | 99 |
|
156 | | -- 📚 文档完善 |
157 | | -- 🧪 测试覆盖率 |
158 | | -- 🛠️ 工具能力扩展 |
159 | | -- 🔧 稳定性与性能 |
| 100 | +配置原则(用户侧重点): |
160 | 101 |
|
| 102 | +- API Key 通过环境变量注入,不写入 `config.yaml` |
| 103 | +- `--workdir` 只影响当前运行,不会回写到配置文件 |
161 | 104 |
|
| 105 | +详细配置请参考:[docs/guides/configuration.md](docs/guides/configuration.md) |
162 | 106 |
|
163 | | -## 自动化发版指南 |
| 107 | +## 文档导航 |
164 | 108 |
|
165 | | -NeoCode 已经集成了 GoReleaser 与 GitHub Actions 的全自动化 CI/CD 流水线。 |
| 109 | +- [配置指南](docs/guides/configuration.md) |
| 110 | +- [扩展 Provider](docs/guides/adding-providers.md) |
| 111 | +- [Runtime/Provider 事件流](docs/runtime-provider-event-flow.md) |
| 112 | +- [Session 持久化设计](docs/session-persistence-design.md) |
| 113 | +- [Context Compact 说明](docs/context-compact.md) |
| 114 | +- [Tools 与 TUI 集成](docs/tools-and-tui-integration.md) |
| 115 | +- [MCP 配置指南](docs/guides/mcp-configuration.md) |
166 | 116 |
|
167 | | -**作为项目维护者,发布新版本时绝对不需要在本地手动编译或打包二进制文件。** 只需要通过 Git 打一个语义化版本标签(Tag)即可触发全自动构建: |
| 117 | +## 如何参与 |
168 | 118 |
|
169 | | -1. **确保主分支代码已就绪**:所有新特性和 Bug 修复均已合并至 `main` 分支。 |
| 119 | +欢迎通过 Issue 和 PR 参与共建。 |
170 | 120 |
|
171 | | -2. **在本地打上版本标签**(版本号必须以 `v` 开头,如 `v0.1.0`): |
| 121 | +1. 在 [Issues](https://github.com/1024XEngineer/neo-code/issues) 先沟通问题或需求。 |
| 122 | +2. Fork 仓库并创建功能分支。 |
| 123 | +3. 完成开发并确保改动聚焦、边界清晰。 |
| 124 | +4. 本地自检: |
172 | 125 |
|
173 | | - ```Bash |
174 | | - git tag v0.1.0 |
| 126 | + ```bash |
| 127 | + gofmt -w ./cmd ./internal |
| 128 | + go test ./... |
| 129 | + go build ./... |
175 | 130 | ``` |
176 | 131 |
|
177 | | -3. **将标签推送到远程仓库**: |
178 | | - |
179 | | - ```Bash |
180 | | - git push origin v0.1.0 |
181 | | - ``` |
| 132 | +5. 提交 PR 到主仓库并说明变更目的、影响范围和验证方式。 |
182 | 133 |
|
183 | | -**发布流水线说明:** 推送到远程后,GitHub Actions 会自动接管,整个过程通常耗时 1~2 分钟: |
| 134 | +提交前请确认: |
184 | 135 |
|
185 | | -- 自动读取 `.goreleaser.yaml` 配置。 |
186 | | -- 执行跨平台(Windows/macOS/Linux)与多架构(amd64/arm64)的静态交叉编译。 |
187 | | -- 自动将编译产物打包压缩(`.tar.gz` 和 `.zip`),并计算 SHA256 校验和。 |
188 | | -- 自动在项目的 Releases 页面创建一个全新的发版记录,并将所有压缩包作为资产(Assets)挂载上去。 |
| 136 | +- 不提交明文密钥、个人配置或会话数据 |
| 137 | +- 不提交无关改动与临时文件 |
189 | 138 |
|
190 | 139 | ## License |
191 | 140 |
|
192 | 141 | MIT |
193 | | - |
194 | | -## Manual Compact |
195 | | - |
196 | | -NeoCode 支持通过 `/compact` 手动压缩当前会话上下文。配置项见 `docs/guides/configuration.md`,流程和摘要约定见 `docs/context-compact.md`。 |
197 | | - |
198 | | -## CLI Workdir |
199 | | - |
200 | | -NeoCode 现在支持通过 CLI 启动参数覆盖本次运行工作区: |
201 | | - |
202 | | -```bash |
203 | | -go run ./cmd/neocode --workdir /path/to/workspace |
204 | | -``` |
205 | | - |
206 | | -说明: |
207 | | - |
208 | | -- `--workdir` 只影响当前进程,不会写回 `config.yaml` |
209 | | -- 当前工作区会同时用于工具执行根目录与 session 存储分桶 |
210 | | -- session 历史现在按工作区隔离存储,不同工作区默认互不可见 |
211 | | - |
212 | | -[](https://github.com/1024XEngineer/neo-code/graphs/contributors) |
0 commit comments