1. 评审范围与依据
本指南基于以下内容交叉评审并整理:
README.md / README.en.md
www/guide/*.md(安装、日常使用、Slash 指令、工具权限、MCP、Skills、排障、HTTP 唤醒)
internal/tui/**(TUI 交互实现)
internal/cli/root.go(启动参数)
同时执行了 TUI 相关测试:
go test ./internal/tui/...
结果:全部通过(2026-04-30)。
2. 评审发现(需重点关注)
P1 文档与真实行为不一致:/clear
- 文档写法(
www/guide/slash-commands.md):/clear 仅清空当前输入草稿,不影响会话历史。
- 实际行为(
internal/tui/core/app/update.go:4608):/clear 执行 startDraftSession(),会切到 Draft 并清空当前会话展示内容。
- 风险:演示时用户可能误以为只是清空输入框,导致“会话不见了”的误解。
P1 文档与真实行为不一致:Ctrl+O
- 文档写法(
www/guide/daily-use.md):Ctrl+O 打开工作区选择。
- 实际行为(
internal/tui/core/app/command_menu.go:360 + update.go:2068):Ctrl+O 打开文件浏览器,用于插入 @文件引用 或添加图片附件,不是切换工作区。
- 风险:演示人员会按错预期路径,造成“功能异常”错觉。
P2 文档残留过时命令:/cwd
- 文档写法(
www/guide/tools-permissions.md)仍提示可用 /cwd 查看工作区。
- 代码侧已移除该命令(
internal/tui/core/utils/view_helpers.go 注释明确 /cwd 移除)。
- 风险:用户按文档操作会收到未知命令错误。
3. 用户故事(用于演示主线)
角色
- 角色:项目开发者(首次接触项目,需快速理解并完成一个小修复)。
- 目标:在 TUI 中完成“读代码 -> 规划 -> 修改 -> 测试 -> 总结”,并验证权限与会话能力可控。
故事
作为一名开发者,我希望在 NeoCode 的 TUI 里:
- 能快速启动并指定工作区;
- 能通过自然语言让 Agent 先分析再实施;
- 在写文件和命令执行时可清晰审批;
- 能管理会话、记忆、技能、模型与 Provider;
- 在长对话中通过
/compact 维持质量;
- 遇到中断/误操作可恢复,并最终得到可验证结果。
验收标准:
- 能完整跑通一次“分析 + 修改 + 测试 +收尾”任务;
- Slash 命令、快捷键、审批流、会话切换、文件/图片引用均可操作;
- 行为符合本指南“预期结果”。
4. 测试准备
4.1 环境准备
- 安装并可执行
neocode。
- 至少配置一个可用 Provider 的 API Key(如
OPENAI_API_KEY)。
- 准备一个可写测试仓库(建议本仓库)。
4.2 启动命令
neocode --workdir /path/to/project
Windows PowerShell 示例:
neocode --workdir C:\repo\neo-code
4.3 建议演示任务
请先阅读 internal/config 下配置加载相关代码,给出最小修复方案,暂时不要改文件。
5. 全流程测试用例(覆盖所有主要操作)
说明:每条用例都包含“操作步骤 + 预期结果”。按顺序执行可覆盖完整演示路径。
A. 启动与基础交互
-
启动 TUI:
操作:neocode --workdir ...
预期:进入 TUI,状态为 Ready,可输入自然语言。
-
首次发送消息:
操作:输入一句自然语言并按 Enter。
预期:开始运行(Thinking),出现流式响应或工具活动。
-
输入换行:
操作:输入多行内容,使用 Ctrl+J 换行。
预期:不触发发送,输入框增加新行。
-
取消当前任务:
操作:运行中按 Ctrl+W。
预期:状态出现 Canceling / Canceled,任务停止。
-
忙时排队干预:
操作:任务运行时再次输入并回车。
预期:新输入进入 queued intervention;当前任务取消后自动执行排队输入。
B. Slash 命令(完整覆盖)
-
/help:
操作:输入 /help 或按 Ctrl+Q。
预期:打开 Slash 命令帮助选择器。
-
/exit:
操作:输入 /exit(或 Ctrl+U)。
预期:退出程序。
-
/clear:
操作:在已有会话输入 /clear。
预期:切到 Draft(不是仅清空输入框),会话展示清空。
-
/compact 成功路径:
前置:已有活跃会话且不在运行中。
操作:输入 /compact。
预期:状态变为 Compacting,完成后出现 compact 结果消息。
-
/compact 异常路径:
操作:无活跃会话时执行,或写成 /compact now。
预期:出现 usage/前置条件错误提示。
-
/session:
操作:输入 /session,在选择器中切换到其他会话。
预期:会话内容、标题、上下文随会话切换。
-
/memo:
操作:输入 /memo。
预期:显示记忆列表(或空列表提示)。
-
/remember <text>:
操作:输入 /remember 本项目测试命令是 go test ./...。
预期:提示保存成功。
-
/forget <keyword>:
操作:输入 /forget 测试命令。
预期:提示删除匹配记忆。
-
/skills:
操作:输入 /skills。
预期:显示可用技能列表及 active 标记。
-
/skill use <id>:
前置:存在该 skill,且会话已激活(至少发过一条消息)。
操作:/skill use xxx。
预期:提示 Skill activated。
-
/skill off <id>:
操作:/skill off xxx。
预期:提示 Skill deactivated。
-
/skill active:
操作:输入 /skill active。
预期:显示当前会话已启用技能。
-
/provider:
操作:输入 /provider。
预期:打开 Provider 选择器,可上下选择并回车确认。
-
/model:
操作:输入 /model。
预期:打开模型选择器,切换后状态更新。
-
/provider add:
操作:输入 /provider add。
预期:进入新增 Provider 表单,可 Tab/Shift+Tab 切字段、Enter 提交、Esc 取消。
-
未知 slash 命令:
操作:输入 /unknown。
预期:返回 unknown command 或本地命令错误。
C. 选择器与导航操作
-
选择器过滤:
操作:在 /help、/provider、/model 中输入筛选关键字。
预期:列表动态过滤,光标可上下移动。
-
Esc 关闭选择器:
操作:任何 picker 中按 Esc。
预期:关闭 picker,焦点回输入区。
-
面板焦点切换:
操作:Tab / Shift+Tab。
预期:在 Transcript 与 Composer(及有 Todo 时)间循环切换。
-
聚焦输入区:
操作:按 Esc(非 picker 场景)。
预期:焦点回输入框。
D. 文件/图片引用与剪贴板
-
@ 文件引用建议:
操作:输入 @ 或 @inte...。
预期:出现文件建议列表,Tab/Enter 可应用建议。
-
Ctrl+O 文件浏览器:
操作:按 Ctrl+O,选中文件。
预期:文本文件插入 @相对路径;图片文件添加为附件。
-
@image:<path> 引用:
操作:输入 @image:/abs/path/to/a.png 后发送。
预期:图片加入附件,消息发送成功。
-
Ctrl+V 粘贴图片:
前置:剪贴板中是图片。
操作:在输入框按 Ctrl+V。
预期:图片附件增加,状态提示 added image from clipboard。
-
Ctrl+V 粘贴文件路径:
前置:剪贴板是一个或多个文件路径。
操作:按 Ctrl+V。
预期:非图片路径转成 @file 引用;图片路径转附件。
-
Ctrl+V 粘贴长文本:
操作:粘贴超长文本。
预期:输入区可见粘贴处理过程,必要时触发折叠/摘要,不应卡死。
-
附件上限:
操作:连续添加超过 3 张图片。
预期:第 4 张时报错 maximum 3 image attachments allowed。
E. 权限审批与 Full Access
-
手动审批(Allow once):
操作:触发写文件或高风险命令,权限弹窗选 y。
预期:本次请求通过,继续执行。
-
手动审批(Allow session):
操作:在权限弹窗选 a。
预期:当前会话同类请求减少重复确认。
-
手动审批(Reject):
操作:选 n。
预期:请求被拒绝,运行给出拒绝相关反馈。
-
Full Access 开启:
操作:按 Ctrl+F,在风险提示中选 Yes(y)。
预期:进入 Full Access,后续权限自动通过。
-
Full Access 关闭:
操作:再次按 Ctrl+F。
预期:Full Access 关闭,恢复正常审批流程。
F. 会话、上下文与工作区行为
-
新建会话:
操作:按 Ctrl+N。
预期:进入 Draft 新会话。
-
会话切换限制(忙时):
操作:任务运行中执行 /session。
预期:报错 cannot switch sessions while run or compact is active。
-
--session 接管:
操作:neocode --session <session_id> 启动。
预期:加载目标会话历史;若会话内 workdir 丢失,显示告警并保留当前目录。
-
上下文压缩后续接:
操作:/compact 后立刻给出“继续目标”说明。
预期:模型能按新目标继续,不显著引用无关旧上下文。
G. 日志、滚动与复制
-
日志视图开关:
操作:Ctrl+L 打开,Ctrl+L 或 Esc 关闭。
预期:日志面板可正常开关。
-
视图滚动:
操作:在 transcript/log 中用 Up/Down、PgUp/PgDn、Home/End、g/G。
预期:滚动行为符合按键定义,无异常跳动。
-
文本选择复制:
操作:鼠标在 transcript 拖拽选中,按 Ctrl+C。
预期:状态提示 Copied selected text,剪贴板内容正确。
H. Todo 面板(事件驱动)
-
Todo 面板显示:
前置:任务触发 todo 事件(如代理规划型任务)。
预期:出现 Todo 面板,显示状态、优先级、owner、更新时间。
-
Todo 操作:
操作:Up/Down 移动、Enter 看详情、c 折叠/展开。
预期:行为与状态提示一致(collapsed/expanded/opened)。
I. HTTP URL 唤醒(可选但建议演示)
-
run 首次唤醒:
操作:neocode daemon encode run ... 生成链接并点击。
预期:返回 session_id,自动拉起并执行一次提交。
-
review 首次唤醒:
操作:neocode daemon encode review ...。
预期:按 review 语义发起审查任务。
-
session_id 复用唤醒:
操作:点击 reusable_url。
预期:只接管会话,不重复发送首次提示词。
6. 建议后续动作(文档修正)
为避免用户误操作,建议尽快统一文档口径:
- 将
/clear 描述改为“切到 Draft/清空当前会话展示”。
- 将
Ctrl+O 描述改为“打开文件浏览器(插入文件引用/图片)”。
- 移除或更正
/cwd 相关文案。
1. 评审范围与依据
本指南基于以下内容交叉评审并整理:
README.md/README.en.mdwww/guide/*.md(安装、日常使用、Slash 指令、工具权限、MCP、Skills、排障、HTTP 唤醒)internal/tui/**(TUI 交互实现)internal/cli/root.go(启动参数)同时执行了 TUI 相关测试:
go test ./internal/tui/...结果:全部通过(2026-04-30)。
2. 评审发现(需重点关注)
P1 文档与真实行为不一致:
/clearwww/guide/slash-commands.md):/clear仅清空当前输入草稿,不影响会话历史。internal/tui/core/app/update.go:4608):/clear执行startDraftSession(),会切到 Draft 并清空当前会话展示内容。P1 文档与真实行为不一致:
Ctrl+Owww/guide/daily-use.md):Ctrl+O打开工作区选择。internal/tui/core/app/command_menu.go:360+update.go:2068):Ctrl+O打开文件浏览器,用于插入@文件引用或添加图片附件,不是切换工作区。P2 文档残留过时命令:
/cwdwww/guide/tools-permissions.md)仍提示可用/cwd查看工作区。internal/tui/core/utils/view_helpers.go注释明确/cwd移除)。3. 用户故事(用于演示主线)
角色
故事
作为一名开发者,我希望在 NeoCode 的 TUI 里:
/compact维持质量;验收标准:
4. 测试准备
4.1 环境准备
neocode。OPENAI_API_KEY)。4.2 启动命令
Windows PowerShell 示例:
4.3 建议演示任务
5. 全流程测试用例(覆盖所有主要操作)
说明:每条用例都包含“操作步骤 + 预期结果”。按顺序执行可覆盖完整演示路径。
A. 启动与基础交互
启动 TUI:
操作:
neocode --workdir ...预期:进入 TUI,状态为 Ready,可输入自然语言。
首次发送消息:
操作:输入一句自然语言并按
Enter。预期:开始运行(Thinking),出现流式响应或工具活动。
输入换行:
操作:输入多行内容,使用
Ctrl+J换行。预期:不触发发送,输入框增加新行。
取消当前任务:
操作:运行中按
Ctrl+W。预期:状态出现 Canceling / Canceled,任务停止。
忙时排队干预:
操作:任务运行时再次输入并回车。
预期:新输入进入 queued intervention;当前任务取消后自动执行排队输入。
B. Slash 命令(完整覆盖)
/help:操作:输入
/help或按Ctrl+Q。预期:打开 Slash 命令帮助选择器。
/exit:操作:输入
/exit(或Ctrl+U)。预期:退出程序。
/clear:操作:在已有会话输入
/clear。预期:切到 Draft(不是仅清空输入框),会话展示清空。
/compact成功路径:前置:已有活跃会话且不在运行中。
操作:输入
/compact。预期:状态变为 Compacting,完成后出现 compact 结果消息。
/compact异常路径:操作:无活跃会话时执行,或写成
/compact now。预期:出现 usage/前置条件错误提示。
/session:操作:输入
/session,在选择器中切换到其他会话。预期:会话内容、标题、上下文随会话切换。
/memo:操作:输入
/memo。预期:显示记忆列表(或空列表提示)。
/remember <text>:操作:输入
/remember 本项目测试命令是 go test ./...。预期:提示保存成功。
/forget <keyword>:操作:输入
/forget 测试命令。预期:提示删除匹配记忆。
/skills:操作:输入
/skills。预期:显示可用技能列表及 active 标记。
/skill use <id>:前置:存在该 skill,且会话已激活(至少发过一条消息)。
操作:
/skill use xxx。预期:提示 Skill activated。
/skill off <id>:操作:
/skill off xxx。预期:提示 Skill deactivated。
/skill active:操作:输入
/skill active。预期:显示当前会话已启用技能。
/provider:操作:输入
/provider。预期:打开 Provider 选择器,可上下选择并回车确认。
/model:操作:输入
/model。预期:打开模型选择器,切换后状态更新。
/provider add:操作:输入
/provider add。预期:进入新增 Provider 表单,可 Tab/Shift+Tab 切字段、Enter 提交、Esc 取消。
未知 slash 命令:
操作:输入
/unknown。预期:返回 unknown command 或本地命令错误。
C. 选择器与导航操作
选择器过滤:
操作:在
/help、/provider、/model中输入筛选关键字。预期:列表动态过滤,光标可上下移动。
Esc 关闭选择器:
操作:任何 picker 中按
Esc。预期:关闭 picker,焦点回输入区。
面板焦点切换:
操作:
Tab/Shift+Tab。预期:在 Transcript 与 Composer(及有 Todo 时)间循环切换。
聚焦输入区:
操作:按
Esc(非 picker 场景)。预期:焦点回输入框。
D. 文件/图片引用与剪贴板
@文件引用建议:操作:输入
@或@inte...。预期:出现文件建议列表,Tab/Enter 可应用建议。
Ctrl+O文件浏览器:操作:按
Ctrl+O,选中文件。预期:文本文件插入
@相对路径;图片文件添加为附件。@image:<path>引用:操作:输入
@image:/abs/path/to/a.png后发送。预期:图片加入附件,消息发送成功。
Ctrl+V粘贴图片:前置:剪贴板中是图片。
操作:在输入框按
Ctrl+V。预期:图片附件增加,状态提示 added image from clipboard。
Ctrl+V粘贴文件路径:前置:剪贴板是一个或多个文件路径。
操作:按
Ctrl+V。预期:非图片路径转成
@file引用;图片路径转附件。Ctrl+V粘贴长文本:操作:粘贴超长文本。
预期:输入区可见粘贴处理过程,必要时触发折叠/摘要,不应卡死。
附件上限:
操作:连续添加超过 3 张图片。
预期:第 4 张时报错
maximum 3 image attachments allowed。E. 权限审批与 Full Access
手动审批(Allow once):
操作:触发写文件或高风险命令,权限弹窗选
y。预期:本次请求通过,继续执行。
手动审批(Allow session):
操作:在权限弹窗选
a。预期:当前会话同类请求减少重复确认。
手动审批(Reject):
操作:选
n。预期:请求被拒绝,运行给出拒绝相关反馈。
Full Access 开启:
操作:按
Ctrl+F,在风险提示中选 Yes(y)。预期:进入 Full Access,后续权限自动通过。
Full Access 关闭:
操作:再次按
Ctrl+F。预期:Full Access 关闭,恢复正常审批流程。
F. 会话、上下文与工作区行为
新建会话:
操作:按
Ctrl+N。预期:进入 Draft 新会话。
会话切换限制(忙时):
操作:任务运行中执行
/session。预期:报错
cannot switch sessions while run or compact is active。--session接管:操作:
neocode --session <session_id>启动。预期:加载目标会话历史;若会话内 workdir 丢失,显示告警并保留当前目录。
上下文压缩后续接:
操作:
/compact后立刻给出“继续目标”说明。预期:模型能按新目标继续,不显著引用无关旧上下文。
G. 日志、滚动与复制
日志视图开关:
操作:
Ctrl+L打开,Ctrl+L或Esc关闭。预期:日志面板可正常开关。
视图滚动:
操作:在 transcript/log 中用
Up/Down、PgUp/PgDn、Home/End、g/G。预期:滚动行为符合按键定义,无异常跳动。
文本选择复制:
操作:鼠标在 transcript 拖拽选中,按
Ctrl+C。预期:状态提示
Copied selected text,剪贴板内容正确。H. Todo 面板(事件驱动)
Todo 面板显示:
前置:任务触发 todo 事件(如代理规划型任务)。
预期:出现 Todo 面板,显示状态、优先级、owner、更新时间。
Todo 操作:
操作:
Up/Down移动、Enter看详情、c折叠/展开。预期:行为与状态提示一致(collapsed/expanded/opened)。
I. HTTP URL 唤醒(可选但建议演示)
run首次唤醒:操作:
neocode daemon encode run ...生成链接并点击。预期:返回
session_id,自动拉起并执行一次提交。review首次唤醒:操作:
neocode daemon encode review ...。预期:按 review 语义发起审查任务。
session_id复用唤醒:操作:点击 reusable_url。
预期:只接管会话,不重复发送首次提示词。
6. 建议后续动作(文档修正)
为避免用户误操作,建议尽快统一文档口径:
/clear描述改为“切到 Draft/清空当前会话展示”。Ctrl+O描述改为“打开文件浏览器(插入文件引用/图片)”。/cwd相关文案。