修复 DirectProject 对话状态条时机与被挤扁、Markdown 代码块换行与围栏解析 #511
Reference in New Issue
Block a user
Delete Branch "fix/recover-100ms"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
本次 PR 覆盖 AGC DirectProject 对话区的一批问题(按反馈分四次追加),共 4 个提交。
1. 状态条读秒 1 秒一跳、样式退化
DirectTurnElapsed改用对话侧共享时钟useLiveNow(100ms):耗时文案不足一分钟保留一位小数,秒级 tick 会让小数位一秒才动一格。min-height: 78px/gap: 9px),状态点与扫光走--platform-accent,标题提到--platform-text-strong,耗时加等宽数字。…message-list > …)与只服务已不存在的<p>的样式。2. 窗口变矮时状态条被挤扁
状态条带
overflow: hidden,按 flex 规范该项自动最小尺寸归零,于是成了.project-chat-conversation这条 flex 列里唯一还能被压缩的项(实测 300px 高挤到 33px、240px 时 24px,文字被裁)。补flex: 0 0 auto,压缩全部交给消息列表;同一选择器的两条规则合并成一条。3. 状态条要等第一个 token 才出现
卡片原先只认原生
turnRunning,而turn.started要等宿主的应答返回才 append(模型首 token 之前,实测约 10 秒),这段窗口里界面完全没有「正在处理」的交代。改为读DirectProjectTurnStatus.displayBusy(本地命令在飞 ∪ 原生已确认在跑),并把计时起点放宽到最新一个未结束回合——awaiting-start也有用户发送时间。这更正了 2026-09-22「卡片口径取保守」那条决策,理由与后续影响已写入decision-log.md。4. 代码块不换行,把消息宽度拉宽
pre与块内code分别写过white-space,两处都补whitespace-pre-wrap+break-words:窄面板里长行改为自动换行,不再顶出横向滚动条。5. 围栏粘在正文行里导致代码块解析错位
模型常把
直接粘在上一行末尾(`…实现细节(game.js):js、… }````),而 CommonMark 只认整行围栏:粘着的退化成正文,于是正文被当成代码渲染、或代码块一直不闭合把后面所有内容一起吞掉。新增 `normalizeMarkdownFences`:把「围栏前是非空白字符、围栏到行尾只剩语言标识」的行拆开。整行围栏、缩进围栏、行内代码(单个反引号与 ``文本x``)、代码里出现的(const s = "```";)以及引用块 / 列表项开头的合法围栏(> ```js、- ```js)都不受影响。review 收口
文本 ```x```的末尾那截拆开,凭空造出一个开场围栏、把后面的正文全变成代码;补「同一行出现第二段围栏串就跳过」判据 + 用例。useDirectProjectTurnStatus的注释仍在写「卡片只读nativeRunning」,与现状相反,已更正。decision-log.md新增 2026-09-24 条:记录卡片口径翻转(更正 2026-09-22 那条),并处置那条里「若窗口期也显示卡片,running在渲染层就没有消费者」的预言——投影三态仍有消费者(DirectProjectTurn的否定式 / 肯定式判断、状态条的起点),故不压缩成布尔。验证
18.0秒走到18.6秒;900 → 220px 高度全程 36px、无裁剪;prefers-reduced-motion: reduce下动画关闭。horizontalOverflow: false(换行生效);粘住的开场 / 收场围栏都渲染成正确结构,围栏之后的文字回到正文。directProjectProcessStatus.test.tsx、ChatMarkdownMessage.test.tsx(换行契约 + 五类围栏场景)、appSurface/chat-composer.suite.ts(turn.started未到时空窗里卡片已出现且已计时)、appSurface/project-development.suite.ts(卡片几何契约)。npx vitest run apps/ai-game-creator-shell/tests:186 passed / 1 skipped,1860 passed / 14 skipped(当前 head 的 CI run 2902 conclusion=success);AGCtsc --noEmit、npm run check:encoding、npm run check:doc-index、git diff --check通过。修复窗口变矮时 DirectProject 对话状态条被挤扁to 修复 DirectProject 对话状态条时机与被挤扁、Markdown 代码块换行与围栏解析