chore: rebuild release package

This commit is contained in:
shiyue
2026-07-16 18:04:37 +08:00
parent 614e222f14
commit 5c3401292d
18 changed files with 1032 additions and 64 deletions

View File

@@ -0,0 +1,42 @@
# 调研记录
## 用户现象
- 输入形如 `/report/mcps?search` 的文件或路径文本时,界面显示“未知指令”,并阻止消息发送。
- `/` 快捷选择目前只在输入框第一个字符生效,而 `@`、`$` 可在输入中间生效。
## 预期
- 未知 `/` 文本可以继续提示,但发送动作应继续完成。
- `/` 在与 `@`、`$` 相同的合理 token 边界上可触发快捷选择。
## 仓库工作流
- Trellis 要求先建立并启动独立任务,再进入实现和质量检查阶段。
- 当前前端组件与质量规范仍是占位文档,没有额外项目级实现约束;本次以现有代码风格和回归测试为准。
- 前端交互应保持克制:沿用现有提示样式,只修正触发与发送语义,不增加新的界面层级。
- Trellis 已为本次修复创建独立任务 `07-16-composer-slash-trigger`,不会混入原有 bootstrap 或子代理卡片任务。
- `codebase-memory-mcp` 项目 `home-cc-web` 索引状态为 `ready`,包含 3191 个节点、7729 条边,可直接用于实现定位。
## 初步代码定位
- 服务端 `handleSlashCommand` 当前对所有以 `/` 开头的输入进入 `switch`;默认分支只发送“未知指令”系统消息并要求前端恢复草稿,因此原文本不会进入正常消息处理链路。
- 前端 `sendMessage` 存在显式 `text.startsWith('/')` 分支,并为失败响应保存/恢复 slash 草稿;现有回归测试把未知 slash 视为“失败且恢复草稿”,正是用户所述的发送拦截行为。
- 需要把“是否为内置 slash 命令”的判断与普通 `/路径` 文本分开:内置命令仍走命令处理,未知 slash 可提示后继续正常消息链路。
- 快捷触发的具体解析函数尚待继续定位,需重点查看 `composer_suggestions` 请求生成以及光标前 token 匹配逻辑。
## 快捷触发根因
- `findActiveComposerToken` 对 `/` 使用独立特判:要求整段输入 `value.startsWith('/')` 且没有换行,因此只允许首字符触发。
- 同一函数对 `@`、`$` 使用 `/(^|\s)([@$])([^\s]*)$/`,允许行首或空白后触发;这解释了三种触发符行为不一致。
- 最小一致性修复应统一 token 边界解析:`/`、`@`、`$` 都允许行首或空白后触发,token 到光标前不能含空白。这样普通路径中的内部 `/`(如 `src/foo`)不会误开菜单,而“请看 /report”能触发。
- `sendMessage` 仍用 `text.startsWith('/')` 判定命令,需新增明确的内置命令识别;未知 `/路径` 应走普通 `submitUserMessage`,服务端再提供提示或明确的非阻断反馈。
## 最终实现与验证
- 前端 `isKnownSlashCommandText` 按第一 token、忽略大小写精确匹配 8 个内置命令;未知 `/路径` 进入普通消息/附件流程。
- `findActiveComposerToken` 统一使用行首或空白后的 `[/@$]` token 规则,并通过光标、LF、CRLF、路径内部斜杠用例。
- 服务端 `handleSlashCommand` 返回是否已处理;未知命令发送无 `preserveComposerDraft` 的提示后,以 `unknownSlash` 标志进入普通 `handleMessage`,旧客户端与 Codex App 运行中 steer 也能正确放行。
- 独立质量审查自动比较前后端完整命令集合,并确保每个服务端命令都有显式 `case`。
- 主线程复验:定向回归、完整回归、三份 JS 语法检查及 `git diff --check` 全部通过;完整回归约 30 秒。
- 并发中的“统一子代理卡片样式”任务也修改了 `public/app.js`、`scripts/regression.js`,最终总 diff 含其内容;本任务未回退或改写该部分,只按精确函数/断言范围核验 slash 改动。

View File

@@ -0,0 +1,20 @@
# 进度日志
- 2026-07-16:读取仓库指令及 planning-with-files、todo-list-csv、frontend-skill。
- 2026-07-16:确认工作区已有 `.planning/subagent-card-metadata/` 的无关改动,将保持不触碰。
- 2026-07-16:建立本任务独立计划与调研记录。
- 2026-07-16:独立计划审查已通过。
- 2026-07-16:读取 Trellis 工作流与前端规范,确认需要建立 Trellis 任务并按阶段推进。
- 2026-07-16:创建并启动 Trellis 任务 `07-16-composer-slash-trigger`。
- 2026-07-16:确认 `home-cc-web` 代码索引就绪,无需重新全量索引。
- 2026-07-16:定位到服务端 `handleSlashCommand`、前端 `sendMessage` 与 slash 草稿恢复回归契约,确认发送拦截来自“所有 `/` 前缀都按命令处理”。
- 2026-07-16:定位 `findActiveComposerToken`,确认 `/` 被首字符特判,而 `@`、`$` 支持行首/空白 token 边界。
- 2026-07-16:补齐 Trellis PRD、调研文档以及 implement/check 上下文,明确未知 slash“提示并继续普通发送”的验收标准。
- 2026-07-16:Trellis 任务上下文校验通过;定位阶段完成,进入失败回归测试阶段。
- 2026-07-16:未知 slash 放行失败回归已先红后绿,覆盖系统提示、普通消息持久化和附件保留。
- 2026-07-16:快捷触发回归覆盖 `/` 的行首、空白后、换行后触发,以及 `src/foo` 不误触发,并保持 `@`、`$` 行为。
- 2026-07-16:完成三处最小实现:前端已知命令判定、统一 token 解析、服务端未知 slash 提示后回落正常消息链路。
- 2026-07-16:Trellis 独立质量审查通过,并补强命令集合一致性、CRLF/光标、Codex App 运行中 steer 回归。
- 2026-07-16:主线程复验定向回归、完整回归、语法检查和 diff 检查均通过。
- 2026-07-16:完成最终差异核对;未调用服务重启,未触碰并发会话的子代理卡片改动。
- 2026-07-16:Trellis 当前任务指针被并发会话切回其他任务,为避免误结束其任务,未运行无参数的 `task.py finish`。

View File

@@ -0,0 +1,31 @@
# 输入框快捷指令修复计划
## 目标
修复输入框中未知 `/` 文本阻止发送的问题,并让 `/` 与 `@`、`$` 一样能在输入中的合理位置触发快捷选择,同时补齐回归测试。
## 阶段
1. [complete] 初始化 Trellis 与代码索引并定位输入解析、快捷选择和发送拦截实现
2. [complete] 补充未知斜杠文本仍可发送的失败回归测试
3. [complete] 补充斜杠可在非首字符位置触发的失败回归测试
4. [complete] 修复发送拦截和斜杠触发边界实现
5. [complete] 运行相关测试、类型检查和静态检查
6. [complete] 审查差异、记录结果并清理临时清单
## 约束
- 保留“未知指令”提示,但提示不能阻止普通文本发送。
- `/` 的触发位置语义与现有 `@`、`$` 保持一致,并避免路径内容误触发。
- 不扩大到 composer 快捷指令体系之外的 UI 改版。
- 保护工作区内与本任务无关的既有改动。
## 错误记录
| 错误 | 尝试 | 处理 |
|---|---:|---|
| Trellis 新任务未自动生成 `prd.md` | 1 | 按工作流手动创建 PRD,并补齐 research/context 文件 |
| `rg` 传入不存在的 `test`、`tests` 路径导致非零退出 | 1 | 已确认本项目回归入口是 `scripts/regression.js`,后续收敛到存在路径 |
| 独立审查首次完整回归命中并发中的 `subAgentActivity` 断言失败 | 1 | 未越界修改;等待对应会话收敛后复跑通过,主线程也再次完整复验通过 |
| 更新调研文档时使用了不存在的 `## 风险` 锚点 | 1 | 读取文件尾部后改用实际存在的末段锚点追加 |
| 收尾时 Trellis 当前任务已被并发会话切回 `07-11-subagent-card-metadata` | 1 | 为避免误结束其他任务,未执行只作用于当前指针的 `task.py finish`;本任务计划与验证已独立闭环 |