轻量级 AI 编码助手 · Bun + SolidJS + OpenTUI
NutCode 是一个桌面级 TUI 的终端 AI 编码代理:可点击的弹窗、鼠标拖动滚动条、焦点路由、键位映射系统 —— 全部由 OpenTUI 的 Zig 原生核心驱动。
- 列表项、弹窗、超链接的命中测试(clickable)
- 滚动条、文本选区的鼠标拖拽
- SolidJS 声明式 JSX 渲染
- 一行命令编译成单文件可执行:
bun build --compile
cd E:\project\nutcode
bun install
# 设置凭据
export NUT_BASE_URL="https://token-plan-cn.xiaomimimo.com/v1"
export NUT_API_KEY="..."
export NUT_MODEL="mimo-v2.5"
# 直接运行 TUI(bunfig preload 已配置 JSX 实时转换,无需 build)
bun run dev
# 文件改动自动重启
bun run dev:hot
# 或编译成单文件 exe
bun run compile # → nutcode.exe首次运行会写入 ~/.nutcode/config.json(兼容旧 ~/.nutcli/config.json)。TUI 路径需要真实 TTY;管道输入会自动回退到 REPL。
| 模块 | 职责 |
|---|---|
src/llm/ |
OpenAI 兼容 HTTP + SSE 客户端(零外部依赖) |
src/provider/ |
适配器模式:openai(通用)+ mimo(thinking) |
src/agent/ |
事件流 Agent,多轮 ReAct,工具调用按 index 合并 |
src/tools/ |
14 个工具(文件 × 6、shell、web × 2、git × 4、ask_user)+ 注册表 + 权限 |
src/config/ |
~/.nutcode/config.json + 环境变量合并 |
src/i18n/ |
zh-CN / en-US,自动检测系统语言 |
src/plugins/ |
插件注册表(mcp / skill)扫描 |
src/index.tsx |
TTY → OpenTUI JSX 渲染器;非 TTY → stdin REPL |
cd E:\project\nutcode
# 真实 LLM 模式(需要 NUT_API_KEY / NUT_BASE_URL / NUT_MODEL)
bun run dev
# 离线 TUI 演示 —— 无需 API key
bun run demo # 交互式 TUI(在 TTY 里跑)
bun run demo:auto # 自动播放预设对话
bun run demo:text # 纯文本快照(headless 看效果)| 命令 | 作用 |
|---|---|
/exit / /quit |
退出(Ctrl+C 同效,会清屏打印 session epilog) |
/clear |
清空对话(Ctrl+L 同效) |
/help |
弹出帮助对话框 |
/lang zh-CN 或 en-US |
切换界面语言(同时切换 AI 回复语言) |
esc |
busy 时取消当前操作;非 busy 时打开/关闭帮助 |
| 单击页面任意位置 | 把焦点收回到输入框 |
bun run smoke-client.ts # SSE 解析
bun run smoke-agent.ts # Agent 事件流:chunk | tool_call | tool_result | done
bun run smoke-file.ts # 6 个文件工具 + 路径保护
bun run smoke-shell-web.ts # shell + web_fetch + web_search + ask_user(真实网络)
bun run smoke-git.ts # 4 个 git 工具在临时仓库中验证
bun run smoke-glob.ts # glob 跨目录
bun run smoke-agent-react.ts # ReAct:tool_call → tool_result → 第二轮
bun run smoke-all-tools.ts # 14 工具全注册 + 端到端
bun run build # JSX → JS bundle
bun run scripts/run-jsx.ts smoke-tui-jsx.tsx # TUI JSX snapshot
bun run demo:text # Headless TUI 文本快照- Phase 1 ✅ 输入 → 流式 → 渲染
- Phase 2 ✅ 14 工具、完整 ReAct 循环、注册表 + 权限 + 超时
- Phase 3 ✅ JSX(
@opentui/solid/bun-plugin)、弹窗、scrollbox、帮助、slash 命令路由
- Phase 4 — 命令面板、鼠标交互(hit-testing)、session 持久化、主题切换