Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
184 commits
Select commit Hold shift + click to select a range
08321a8
<docs>:新增flow完成方案和todo优化方案
phantom5099 Mar 25, 2026
1bc8751
Merge remote-tracking branch 'upstream/main'
phantom5099 Mar 27, 2026
589d6d2
pref:优化TUI界面和热键绑定
phantom5099 Mar 28, 2026
262b069
feat(provider): narrow MVP provider support surface
creatang Mar 28, 2026
4a946ae
ci: skip codecov upload when token is unavailable
creatang Mar 28, 2026
34db085
ci: make codecov upload non-blocking
creatang Mar 28, 2026
f7bf1c7
feat(config): add provider presets
creatang Mar 28, 2026
b4da678
Merge pull request #1 from creatang/codex/provider-mvp-support-surface
creatang Mar 28, 2026
aafe13a
Merge remote-tracking branch 'txl/main'
phantom5099 Mar 28, 2026
5c0918c
pref:修正TUI界面的背景色错误
phantom5099 Mar 28, 2026
72322f2
pref:优化provide模块
phantom5099 Mar 28, 2026
a429bc4
docs:去除冗余文档
phantom5099 Mar 28, 2026
a8c21c4
Merge branch 'main' into main
phantom5099 Mar 28, 2026
b6e1599
<fix>:修改config/model.go合并后的变量名错误
phantom5099 Mar 28, 2026
30a8bad
fix:修复合并错误
phantom5099 Mar 28, 2026
afd2cea
Merge remote-tracking branch 'origin/main'
phantom5099 Mar 28, 2026
98760c5
Merge remote-tracking branch 'upstream/main'
phantom5099 Mar 28, 2026
6a13a35
fix:修复url来源错误问题
phantom5099 Mar 28, 2026
5692d0b
pref:为TUI层增加中止思考入口
phantom5099 Mar 28, 2026
e941f63
fix:修复测试断言有误问题
phantom5099 Mar 28, 2026
1285e6c
test:补充openll测试文件
phantom5099 Mar 28, 2026
a7f8179
Merge pull request #79 from phantom5099/main
minorcell Mar 28, 2026
13cad6c
添加安装脚本以及系统管理包的功能,同时解决了冲突
pionxe Mar 29, 2026
6998e04
fix:修复 goroutine 泄漏、简化装配层依赖、补全工具调用流式事件
phantom5099 Mar 29, 2026
233108c
test:补充测试文件
phantom5099 Mar 29, 2026
4b6d407
docs:优化readme.md,新增guides指导使用文档
phantom5099 Mar 30, 2026
9523d69
Merge pull request #83 from phantom5099/main
minorcell Mar 30, 2026
30fbf3b
Merge branch 'main' into feat-install
pionxe Mar 30, 2026
debde9f
chore: 删除了包管理器分发
pionxe Mar 30, 2026
c4ba58f
Merge pull request #81 from pionxe/feat-install
minorcell Mar 30, 2026
d33802c
feat: 增加工具统一输出截断与错误格式助手
Cai-Tang-www Mar 30, 2026
0f3dcf4
feat: 统一工具注册表错误输出格式
Cai-Tang-www Mar 30, 2026
ea592a6
feat: 调整工具注册表错误断言
Cai-Tang-www Mar 30, 2026
ab75710
feat: bash 工具统一错误输出与截断标记
Cai-Tang-www Mar 30, 2026
7e20c2e
feat: read_file 增加输出限制与统一错误格式
Cai-Tang-www Mar 30, 2026
0e2cfe5
feat: write_file 统一错误输出格式
Cai-Tang-www Mar 30, 2026
b1aedbd
feat: edit 工具统一错误输出格式
Cai-Tang-www Mar 30, 2026
7f1bd7f
feat: grep 输出截断与统一错误格式
Cai-Tang-www Mar 30, 2026
f889613
feat: glob 输出截断与统一错误格式
Cai-Tang-www Mar 30, 2026
69e286f
feat: webfetch 统一错误输出格式
Cai-Tang-www Mar 30, 2026
991297c
feat: 更新 webfetch 错误输出测试
Cai-Tang-www Mar 30, 2026
b56a1ef
pref(provider):优化provider架构
phantom5099 Mar 30, 2026
78bd2d0
test: 补齐工具与内置 provider 覆盖率
Cai-Tang-www Mar 30, 2026
46b9364
test: 补齐工具 patch 覆盖率
Cai-Tang-www Mar 30, 2026
84cc47e
feat:实现了多行输入
Mar 31, 2026
2fa603b
docs(guides):重新编辑两份provider指导文档
phantom5099 Mar 31, 2026
08d04ef
Merge pull request #93 from phantom5099/main
minorcell Mar 31, 2026
a489ccc
Merge pull request #90 from Cai-Tang-www/main
minorcell Mar 31, 2026
a6f83ae
fix(runtime):修复切换模型失败问题
phantom5099 Mar 31, 2026
4c60d1c
fix(runtime):修复切换模型失败问题
phantom5099 Mar 31, 2026
5df0216
Merge remote-tracking branch 'origin/main'
phantom5099 Mar 31, 2026
f70e0f9
fix:改成Enter发送,ctrl+j换行了
Mar 31, 2026
11798ef
feat:实现了多行输入
Mar 31, 2026
858dda9
fix:改成Enter发送,ctrl+j换行了
Mar 31, 2026
def862e
Merge branch 'feat' of https://github.com/Yumiue/neo-code into feat
Mar 31, 2026
ac28f24
fix:修复test
Mar 31, 2026
ad72566
Merge pull request #95 from Yumiue/feat
minorcell Mar 31, 2026
949077b
Merge remote-tracking branch 'upstream/main'
phantom5099 Mar 31, 2026
55863ff
Merge pull request #97 from phantom5099/main
minorcell Mar 31, 2026
a64d8f9
refactor(runtime): extract context builder from runtime
Apr 1, 2026
9410a55
refactor(provider): centralize message role constants
Apr 1, 2026
ef85b5f
docs(runtime): restore dropped runtime comments
Apr 1, 2026
3b0ba3e
pref:增加错误时重试功能
phantom5099 Apr 1, 2026
4782eb0
Merge pull request #102 from Yumiue/codex/issue-101-context-builder
minorcell Apr 1, 2026
b7c186a
feat: expand slash commands in the tui
creatang Apr 1, 2026
c9b674f
test: raise tui slash coverage
creatang Apr 1, 2026
f393ee5
Merge branch 'main' into main
phantom5099 Apr 1, 2026
8dcf11a
fix:删掉残留冲突部分
phantom5099 Apr 1, 2026
a81a921
Merge remote-tracking branch 'refs/remotes/upstream/main'
phantom5099 Apr 1, 2026
b88e67b
fix:删掉残留冲突部分
phantom5099 Apr 1, 2026
94cbf56
Merge pull request #108 from phantom5099/main
minorcell Apr 1, 2026
df6905a
feat: 引入权限引擎与统一动作模型
Cai-Tang-www Apr 1, 2026
15d15c7
feat: 接入工具管理器安全执行链
Cai-Tang-www Apr 1, 2026
5836373
feat: 补齐权限执行链测试覆盖
Cai-Tang-www Apr 1, 2026
81357e3
Merge remote-tracking branch 'refs/remotes/upstream/main'
phantom5099 Apr 1, 2026
b2e65f8
docs: 在README中补充安装脚本命令与自动发布指南
pionxe Apr 1, 2026
bcfc4d4
fix: refine tui command flow and stabilize layout
creatang Apr 1, 2026
b7bbbe1
test: cover tui command helpers
creatang Apr 1, 2026
8f65ebe
fix: 修复 provider 重试回退测试抖动失败
Cai-Tang-www Apr 1, 2026
22823f3
feat(context): inject project rules and system state
Apr 1, 2026
d898001
fix(context): harden explicit context sources
Apr 1, 2026
e3042d3
test(context): avoid hardcoded provider metadata
Apr 1, 2026
e91761b
Merge pull request #107 from 1024XEngineer/codex/issue-85-slash-impro…
minorcell Apr 1, 2026
519ad04
Merge pull request #110 from pionxe/main
minorcell Apr 1, 2026
e6caa9e
Merge pull request #109 from Cai-Tang-www/main
minorcell Apr 1, 2026
4b440e3
Merge pull request #112 from Yumiue/codex/issue-111-context-sources
minorcell Apr 1, 2026
68de740
app:新增 workspace sandbox 工具权限控制
Cai-Tang-www Apr 2, 2026
0e8b670
app:在 bootstrap 中启用 workspace sandbox
Cai-Tang-www Apr 2, 2026
7fcf0d4
重构 system prompt section 组装
Apr 2, 2026
12a71cb
fix(tui): separate activity from transcript
creatang Apr 2, 2026
2e02fda
test(tui): cover activity preview and mouse scroll
creatang Apr 2, 2026
3d76ec0
feat: 补齐 workspace sandbox 分支测试覆盖
Cai-Tang-www Apr 2, 2026
3d5c57c
Merge remote-tracking branch 'upstream/main' into discover-model
phantom5099 Apr 2, 2026
688b5df
feat(tui): 接入可控 Markdown 渲染并补齐测试覆盖
creatang Apr 2, 2026
3176e90
refactor(tui): 移除消息渲染旧回退逻辑
creatang Apr 2, 2026
830520b
fix(tui): 统一 UTF-8 控制台编码并补中文渲染测试
creatang Apr 2, 2026
9fbd9b9
refactor(app): 合并控制台编码逻辑与测试到 bootstrap
creatang Apr 2, 2026
23575a6
fix(tui): 修复用户消息与标签右对齐偏移
creatang Apr 2, 2026
04d4e78
feat(tui): 为输出代码块增加点击复制按钮
creatang Apr 2, 2026
38ced9a
fix(tui): 统一输出底板右边缘避免锯齿
creatang Apr 2, 2026
e724ec6
feat(provider):增加主动获取模型和预留模型元数据
phantom5099 Apr 2, 2026
e7ce934
feat(tui): 将代码复制按钮贴到代码块右侧
creatang Apr 2, 2026
4cda675
fix(tui): 复制按钮置顶并恢复 markdown 与代码块渲染
creatang Apr 2, 2026
1bdd8ec
fix(tui): 仅在左键点击时触发代码复制
creatang Apr 2, 2026
1277613
fix(tui): 支持缩进代码块显示复制按钮
creatang Apr 2, 2026
43c8ff6
处理 review 中的 prompt 细节问题
Apr 2, 2026
2bf2721
fix(tui): 复制改为点击释放触发并兼容终端事件
creatang Apr 2, 2026
d6ea040
Merge pull request #115 from Yumiue/feat
minorcell Apr 2, 2026
e22f13e
app:新增 workspace sandbox 工具权限控制
Cai-Tang-www Apr 2, 2026
03b52a8
app:在 bootstrap 中启用 workspace sandbox
Cai-Tang-www Apr 2, 2026
76043c6
feat: 补齐 workspace sandbox 分支测试覆盖
Cai-Tang-www Apr 2, 2026
3dd734e
Merge branch '1024XEngineer:main' into main
Cai-Tang-www Apr 2, 2026
4d0cad0
Merge branch 'main' of github.com:Cai-Tang-www/neo-code
Cai-Tang-www Apr 2, 2026
4a7dfc9
feat: 补强 workspace sandbox 边界校验与文档说明
Cai-Tang-www Apr 2, 2026
82ba4b5
Merge remote-tracking branch 'upstream/main'
phantom5099 Apr 2, 2026
401c524
feat: 优化 workspace sandbox 根路径缓存与解析性能
Cai-Tang-www Apr 2, 2026
03ef5a4
Merge pull request #116 from Cai-Tang-www/main
minorcell Apr 2, 2026
84eac50
Merge pull request #117 from creatang/codex/issue-99-tui-activity-scroll
minorcell Apr 2, 2026
077ce6a
Merge remote-tracking branch 'refs/remotes/upstream/main'
phantom5099 Apr 2, 2026
3ff7113
refactor(provider):删去接收的无用provider元数据
phantom5099 Apr 2, 2026
5c0e4d9
fix:修复测试错误
phantom5099 Apr 2, 2026
cba03b1
refactor:优化一些冗余代码
phantom5099 Apr 2, 2026
1f0e7ae
Revert "refactor:优化一些冗余代码"
minorcell Apr 2, 2026
b2672c5
fix: 修复 Release 流水线鉴权丢失与 Go 版本声明不一致问题
pionxe Apr 3, 2026
4124cbd
Merge pull request #126 from pionxe/main
minorcell Apr 3, 2026
606ede5
fix(tui): 修复输入区粘贴发送与滚动交互
creatang Apr 3, 2026
0f5d8a2
merge: 同步 upstream/main 并解决 TUI 冲突
creatang Apr 3, 2026
6fc015f
refactor:优化当前provider分层,让职责更清晰
phantom5099 Apr 3, 2026
ae42606
Merge pull request #128 from creatang/codex/issue-99-tui-activity-scroll
minorcell Apr 3, 2026
6142195
Merge branch 'main' into main
phantom5099 Apr 3, 2026
071e759
fix(app):修复默认配置来源错误
phantom5099 Apr 3, 2026
d25bd39
feat: 拆分 default_workdir 与 session workdir 并接入会话级切换
Cai-Tang-www Apr 3, 2026
124f10e
Merge pull request #130 from phantom5099/main
minorcell Apr 3, 2026
2178e26
feat: 移除 legacy workdir 兼容并强制 default_workdir
Cai-Tang-www Apr 3, 2026
fb93f7e
feat(context,runtime): 落地 manual compact 与 transcript 持久化
Apr 3, 2026
ba7e26b
feat(config,tui): 接入 manual compact 配置、事件与 /compact
Apr 3, 2026
9229313
fix(context): 修复 compact rune 计数与规则发现错误处理
Apr 3, 2026
c374624
test(docs): 补齐 manual compact 覆盖并同步文档
Apr 3, 2026
13d9d85
test: 补齐 P0-3 工作目录分支覆盖率
Cai-Tang-www Apr 3, 2026
6955c22
fix(tui): 拦截空会话的 compact 请求
Apr 3, 2026
d8da168
feat: 移除 workdir 配置持久化并改为会话内存态
Cai-Tang-www Apr 3, 2026
4408951
feat: slash命令仅保留cwd并移除workspace
Cai-Tang-www Apr 3, 2026
25f28b5
test: 补齐runtime与cwd命令分支覆盖
Cai-Tang-www Apr 3, 2026
572c8c6
test: 修复runtime测试环境变量并行竞态
Cai-Tang-www Apr 3, 2026
5d9706f
Merge branch 'main' into P0-3
Cai-Tang-www Apr 3, 2026
59f5134
test: 修复合并后runtime测试配置入口引用
Cai-Tang-www Apr 3, 2026
4bc5ddc
Refine compact prompt ownership and session model binding
Apr 3, 2026
1c26c0f
docs: 更新 AGENTS.md 规则并移除重复的 agents.md
Apr 3, 2026
b486d8d
refactor: centralize context compact constants
Apr 3, 2026
fc78692
Merge pull request #131 from Cai-Tang-www/P0-3
minorcell Apr 3, 2026
42f089e
fix:修复了实现的不规范问题,并更新了文档说明
Apr 3, 2026
b86206e
feat(context,runtime): 落地 manual compact 与 transcript 持久化
Apr 3, 2026
85c0d55
feat(config,tui): 接入 manual compact 配置、事件与 /compact
Apr 3, 2026
add5caa
fix(context): 修复 compact rune 计数与规则发现错误处理
Apr 3, 2026
5be2e7d
test(docs): 补齐 manual compact 覆盖并同步文档
Apr 3, 2026
4000a6b
fix(tui): 拦截空会话的 compact 请求
Apr 3, 2026
a8c305d
Refine compact prompt ownership and session model binding
Apr 3, 2026
331d513
docs: 更新 AGENTS.md 规则并移除重复的 agents.md
Apr 3, 2026
e552ca0
refactor: centralize context compact constants
Apr 3, 2026
733529a
fix:修复了实现的不规范问题,并更新了文档说明
Apr 3, 2026
b935fa4
pref:事件流信息缺口与废弃函数清理
phantom5099 Apr 3, 2026
edf5c4e
Merge remote-tracking branch 'origin/main'
phantom5099 Apr 3, 2026
3d37bbb
Merge branch 'rebasetest' of https://github.com/Yumiue/neo-code into …
Apr 3, 2026
04cb507
Merge remote-tracking branch 'upstream/main'
phantom5099 Apr 3, 2026
9c336e3
test(provider):补全测试分支
phantom5099 Apr 3, 2026
75d616a
test:添加测试
Apr 3, 2026
a180d94
docs(README):修正下载链接
Apr 3, 2026
25fc2ad
Merge pull request #135 from phantom5099/main
minorcell Apr 3, 2026
1e24012
refactor: 收敛 compact 结构与文档说明
Apr 4, 2026
afeaeee
docs:加入过时的声明
Apr 4, 2026
f6d1479
docs:把过时文档的更改给撤销了
Apr 4, 2026
b4e1cba
feat: 引入执行期WorkspacePlan并绑定file/bash执行链
Cai-Tang-www Apr 4, 2026
0160998
test: 补齐TOCTOU执行期替换场景与计划绑定覆盖
Cai-Tang-www Apr 4, 2026
75f52cd
test: 提升P0-4补丁覆盖并补齐执行期校验分支
Cai-Tang-www Apr 4, 2026
a72dd79
Merge pull request #133 from Yumiue/new_Feat-manual
minorcell Apr 4, 2026
545a447
Merge pull request #138 from Cai-Tang-www/codex/p0-4-toctou
minorcell Apr 4, 2026
241c0e4
feat(context): 支持 reactive compact 模式
Apr 4, 2026
3bbe533
refactor(tui): componentize command menu/activity/filepicker/progress
creatang Apr 4, 2026
0362e8b
Merge remote-tracking branch 'upstream/main' into codex/issue-99-tui-…
creatang Apr 4, 2026
61fef7b
test(tui): raise patch coverage for componentized paths
creatang Apr 4, 2026
d4e63ca
Merge pull request #147 from Yumiue/new_Feat-manual
minorcell Apr 4, 2026
1e19e32
pref(provider):拆解切换模型逻辑到config层
phantom5099 Apr 4, 2026
dc772c7
Merge pull request #150 from phantom5099/main
minorcell Apr 4, 2026
678e3b0
Merge remote-tracking branch 'upstream/main' into codex/issue-99-tui-…
creatang Apr 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# 统一仓库内常见文本文件为 LF,避免 Windows 下出现无意义的换行警告
*.go text eol=lf
*.md text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
go.mod text eol=lf
go.sum text eol=lf
.gitignore text eol=lf
.gitattributes text eol=lf

# 强制 scripts 目录下的 Shell 脚本始终使用 LF 换行符
scripts/*.sh text eol=lf
3 changes: 2 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,11 @@ jobs:
run: go test ./... -covermode=atomic -coverprofile=coverage.out

- name: Upload coverage to Codecov
continue-on-error: true
uses: codecov/codecov-action@v5
with:
files: ./coverage.out
flags: unittests
fail_ci_if_error: true
fail_ci_if_error: false
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.22' # 替换为 NeoCode 实际使用的 Go 版本
go-version-file: 'go.mod' # 💡 修复点 1:让 Action 自动跟随项目真实的 Go 版本

- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v5
Expand All @@ -34,5 +34,5 @@ jobs:
version: '~> v2'
args: release --clean
env:
# GitHub Actions 自动注入的 Token,用于发布 Release
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # 💡 修复点 2:补回本仓库的内置鉴权令牌
TAP_GITHUB_TOKEN: ${{ secrets.TAP_GITHUB_TOKEN }}
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ config.local.yaml

# Local data
data/
.cache/
.neocode/projects/**/.transcripts/

# Editor/IDE
.idea/
Expand Down
4 changes: 3 additions & 1 deletion .goreleaser.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# .goreleaser.yaml
project_name: neocode
version: 2 # 必须声明为 v2 语法

before:
Expand Down Expand Up @@ -44,4 +45,5 @@ changelog:
filters:
exclude:
- '^docs:'
- '^test:'
- '^test:'

4 changes: 4 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,12 @@
- 导出标识符使用 `PascalCase`,未导出使用 `camelCase`。
- 使用制表符缩进,尽量将单行控制在约 120 字符内。
- 核心抽象上的导出类型、函数、接口应补充清晰注释,尤其是 `provider`、`runtime`、`tools`。
- 在非测试文件中新增函数时,必须紧邻函数定义补充便于解读的注释,注释内容使用中文并以 UTF-8 编码保存;注释应说明函数职责、关键行为或上下文,避免空泛的模板化表述。
- 避免硬编码路径、URL、模型名、超时、输出长度限制和环境差异项,优先通过配置、参数或具名常量注入。
- 避免硬编码业务语义字符串或状态值(例如消息角色、事件类型、协议字段值);如需复用,优先收敛到共享常量、类型或统一定义处。
- 优先写清晰、可替换的实现,不要为了“未来可能需要”提前引入复杂泛化。
- 不要擅自删除、改写或遗漏原有注释;若注释需要调整,应在理解原意后做等价更新,而不是直接移除。
- 如果文件内容疑似乱码或编码异常,先尝试用其他编码方式查看和确认原文,再决定是否修改;未确认前不要擅自删除或重写相关内容。

## 7. 配置与安全规则
- 配置文件默认路径为 `~/.neocode/config.yaml`。
Expand Down
209 changes: 170 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,61 +1,192 @@
# NeoCode
NeoCode 是一个基于 Go 和 Bubble Tea 构建的本地 Coding Agent MVP。它把 Provider 防腐层、工具调用闭环、本地会话持久化和沉浸式瀑布流 TUI 组合在一起,用于日常代码理解、修改和终端内协作。

## 功能特性
- 基于防腐层的 Provider 架构,当前支持 OpenAI 兼容流式接口,并为 Anthropic、Gemini 预留了扩展位置。
- ReAct 风格的 runtime 主循环,能够读取模型输出、执行工具调用、回灌结果并继续推理。
- 瀑布流终端界面,支持流式 transcript、内联工具事件、Slash Command 和会话侧边栏。
- 本地 YAML 配置、`.env` 加载与并发安全的热更新能力。
- 本地 JSON 会话持久化,不依赖远端服务即可恢复历史上下文。
- 文件系统高级工具:读取、写入、搜索、Glob 探测和精准替换。
> 基于 Go + Bubble Tea 的本地 Coding Agent

## 环境要求
- Go 1.21 及以上
- 至少一个可用的模型 Provider API Key,例如 `OPENAI_API_KEY`
NeoCode 是一个在终端中运行的 AI 编码助手,采用 ReAct(Reason-Act-Observe)循环模式,能够自主推理、调用工具并完成任务。

## 快速开始
1. 克隆仓库。
2. 准备 Provider 的 API Key,可以通过环境变量或 NeoCode 托管的 `.env` 文件提供。
3. 运行应用:
## 核心特性

- **流式输出** — 实时展示模型思考过程
- **工具系统** — 文件操作、代码执行、搜索等内置工具
- **内建 Provider 支持** — OpenAI、Gemini、OpenLL、Qiniu,模型列表支持动态发现与缓存
- **终端原生体验** — 基于 Bubble Tea 的现代化 TUI

## 一键安装

NeoCode 提供了跨平台的一键安装脚本。无论你是哪种操作系统,只需在终端执行以下命令,脚本将自动探测系统架构、拉取最新 Release 产物并配置好环境变量:

### 🍎 macOS / Linux
打开终端(Terminal)并运行:
```bash
go run ./cmd/neocode
curl -fsSL https://raw.githubusercontent.com/1024XEngineer/neo-code/main/scripts/install.sh | bash
```

### Windows

打开 PowerShell 并运行:



```PowerShell
irm https://raw.githubusercontent.com/pionxe/neo-code/main/scripts/install.ps1 | iex
```

首次启动时,NeoCode 会在当前用户主目录下创建自己的托管目录、默认配置和会话存储结构。

## Slash Command
- `/set url <url>`:更新当前选中 Provider 的 Base URL。
- `/set key <key>`:将当前 Provider 的密钥写入托管 `.env` 并立即重新加载。
- `/model`:打开交互式模型选择列表。

## 开发与验证
在提交 Pull Request 前建议至少执行以下命令:
## 快速开始

### 环境要求

- Go 1.21+
- API Key(OpenAI 或 Google Gemini)

### 安装与运行

```bash
gofmt -w ./cmd ./internal
go test ./...
# 克隆仓库
git clone https://github.com/yourusername/neocode.git
cd neocode

# 设置 API Key
export OPENAI_API_KEY=your_key_here

# 运行
go run ./cmd/neocode
```

### 基本使用

在 TUI 中输入自然语言指令,例如:

```
帮我看看当前项目的目录结构
创建一个 HTTP 服务器,监听 8080 端口
分析 runtime.go 的主要逻辑
```

使用 slash 命令快速切换配置:

- `/provider` — 切换内建模型提供商
- `/model` — 切换模型

## 架构概览
- `internal/config`:负责 YAML 加载、`.env` 集成、默认值管理和并发安全更新。
- `internal/provider`:将厂商特定的请求和流式响应抹平成统一领域模型。
- `internal/runtime`:负责事件总线、ReAct loop、Provider 动态构建和会话持久化。
- `internal/tools`:提供工具注册表以及各类具体工具实现。
- `internal/tui`:负责终端交互体验,以及 runtime 事件到 Bubble Tea 消息的桥接。

```
┌─────────────────────────────────────────┐
│ TUI (Bubble Tea) │
└────────────────┬────────────────────────┘
│ Events
┌────────────────▼────────────────────────┐
│ Runtime (ReAct Loop) │
└────────┬───────────────────┬────────────┘
│ │
┌────▼─────┐ ┌────▼──────┐
│ Provider │ │ Tools │
│ (LLM) │ │ Registry │
└──────────┘ └───────────┘
```

核心模块职责:

- **`internal/config`** — 配置管理、环境变量、YAML 加载
- **`internal/context`** — system prompt、消息裁剪与上下文构建
- **`internal/provider`** — Provider 契约、驱动注册与通用领域类型
- **`internal/provider/catalog`** — 模型发现、catalog 缓存与后台刷新
- **`internal/provider/selection`** — provider/model 选择与配置同步
- **`internal/provider/builtin`** — 内建 driver 注册
- **`internal/runtime`** — ReAct 主循环、事件流、会话管理
- **`internal/tools`** — 工具注册表与具体工具实现
- **`internal/tui`** — 终端 UI、交互体验、事件桥接
- **`internal/app`** — 应用装配与依赖注入

## 目录结构

```text
.
|-- cmd/neocode
|-- docs
|-- internal/app
|-- internal/config
|-- internal/provider
|-- internal/runtime
|-- internal/tools
`-- internal/tui
├── cmd/neocode # CLI 入口
├── docs # 架构与设计文档
│ ├── guides # 使用指南
│ └── *.md # 设计文档
├── internal
│ ├── app # 应用装配
│ ├── config # 配置管理
│ ├── context # 上下文构建
│ ├── provider # Provider 契约与驱动注册
│ │ ├── builtin # 内建 driver 注册
│ │ ├── catalog # 模型发现与缓存
│ │ └── selection # provider/model 选择服务
│ ├── runtime # ReAct 循环与事件流
│ ├── tools # 工具系统
│ └── tui # 终端 UI
└── README.md
```

## 文档

- **[配置指南](docs/guides/configuration.md)** — Provider 策略、配置文件、环境变量
- **[扩展 Provider](docs/guides/adding-providers.md)** — 如何添加新的模型提供商
- **[架构设计](docs/neocode-coding-agent-mvp-architecture.md)** — 整体架构与设计理念
- **[事件流](docs/runtime-provider-event-flow.md)** — Runtime 与 Provider 的事件交互

## 开发

```bash
# 格式化代码
gofmt -w ./cmd ./internal

# 运行测试
go test ./...

# 编译
go build ./...
```

## 当前状态
NeoCode 目前聚焦于 MVP 闭环:本地对话、工具调用、Session 持久化和终端交互体验。当前版本正在继续向“高质量开源项目”标准收敛,重点补强文档、测试覆盖率和工具能力。

NeoCode 正处于 MVP 阶段,核心闭环已可用:

✅ 用户输入 → Agent 推理 → 工具调用 → 结果返回 → UI 展示

正在持续迭代中,重点关注:

- 📚 文档完善
- 🧪 测试覆盖率
- 🛠️ 工具能力扩展
- 🔧 稳定性与性能



## 自动化发版指南

NeoCode 已经集成了 GoReleaser 与 GitHub Actions 的全自动化 CI/CD 流水线。

**作为项目维护者,发布新版本时绝对不需要在本地手动编译或打包二进制文件。** 只需要通过 Git 打一个语义化版本标签(Tag)即可触发全自动构建:

1. **确保主分支代码已就绪**:所有新特性和 Bug 修复均已合并至 `main` 分支。

2. **在本地打上版本标签**(版本号必须以 `v` 开头,如 `v0.1.0`):

```Bash
git tag v0.1.0
```

3. **将标签推送到远程仓库**:

```Bash
git push origin v0.1.0
```

**发布流水线说明:** 推送到远程后,GitHub Actions 会自动接管,整个过程通常耗时 1~2 分钟:

- 自动读取 `.goreleaser.yaml` 配置。
- 执行跨平台(Windows/macOS/Linux)与多架构(amd64/arm64)的静态交叉编译。
- 自动将编译产物打包压缩(`.tar.gz` 和 `.zip`),并计算 SHA256 校验和。
- 自动在项目的 Releases 页面创建一个全新的发版记录,并将所有压缩包作为资产(Assets)挂载上去。

## License

MIT

## Manual Compact

NeoCode 支持通过 `/compact` 手动压缩当前会话上下文。配置项见 `docs/guides/configuration.md`,流程和摘要约定见 `docs/context-compact.md`。
2 changes: 1 addition & 1 deletion cmd/neocode/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"fmt"
"os"

"github.com/dust/neo-code/internal/app"
"neo-code/internal/app"
)

func main() {
Expand Down
17 changes: 9 additions & 8 deletions docs/config-management-detail-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,26 @@
- 向运行中的系统提供并发安全的配置读写能力

## 核心类型
- `Config`:顶层应用配置,包含 Provider 列表、当前选中 Provider、当前模型、工作目录、Shell 和循环限制等信息
- `ProviderConfig`:单个 Provider 的配置项,包括 Base URL、默认模型和 API Key 环境变量名
- `Config`:顶层应用配置,运行时包含 Provider 列表、当前选中 Provider、当前模型、工作目录、Shell 和循环限制等信息
- `ProviderConfig`:单个 Provider 的内建定义,包括 Base URL、默认模型、实例级模型列表和 API Key 环境变量名
- `Manager`:使用 `sync.RWMutex` 保护的配置访问器与修改器
- `Loader`:对 YAML 文件和托管 `.env` 文件的文件系统封装

## 环境变量策略
- YAML 只保存 `api_key_env`,不保存真实密钥。
- YAML 不保存 `api_key_env`,只保存 `selected_provider`、`current_model` 和通用运行配置。
- `Loader.LoadEnvironment` 会尝试加载当前工作目录下的 `.env` 和 NeoCode 托管目录中的 `.env`。
- `ProviderConfig.ResolveAPIKey` 在真正发起请求前通过 `os.Getenv` 读取密钥。

## 运行时更新
- TUI 只能通过 `ConfigManager.Update` 修改配置。
- 修改 Base URL 时只更新当前选中 Provider,并立即持久化。
- 修改 API Key 时写入托管 `.env`,然后重新加载环境变量并刷新配置快照。
- 修改模型时,同时更新 `current_model` 和当前 Provider 的 `model` 字段,保持状态一致。
- TUI 只负责切换当前 Provider 和当前模型,不直接修改 Provider 元数据。
- `base_url`、`api_key_env`、`driver` 和 `models` 由代码内建定义提供,不从 YAML 读写。
- 修改模型时,只更新 `current_model`;当前 Provider 的 `model` 仍表示默认模型,`models` 负责描述该实例可选模型列表。

## 默认值治理
- 默认 Provider 名称、URL、模型和环境变量名统一定义在 `internal/config/model.go` 中。
- 内建模型目录也收口在 `config` 包中,避免 TUI 自己维护一套零散的临时常量。
- 默认 Provider 名称、URL、默认模型、模型列表和环境变量名统一由内建 Provider 定义提供。
- `Loader` 在加载旧配置时会丢弃 `providers` / `provider_overrides`,重新回到“YAML 只保存选择状态”的最小结构。
- Provider 的可选模型目录属于实例配置,进入运行时 `Config` 后再提供给 TUI 和 runtime,避免 TUI 或 driver 自己维护一套零散常量。

## 安全约束
- 读操作统一走 `Get`,并返回拷贝后的配置快照。
Expand Down
Loading
Loading