Repository navigation
fix(presentation): preserve parentheses in Markdown links - #5942
huangruiteng merged 2 commits into
Conversation
Signed-off-by: mika <211269698+mikamikasuki@users.noreply.github.com>
Signed-off-by: mika <211269698+mikamikasuki@users.noreply.github.com>
5a0d308 to
0ef11d2
Compare
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=xhigh
动机
在 LoopX 对话或报告中打开资料链接的用户。 用户打开 Reference_(mathematics) 资料:旧版 Topic 的地址少了末尾括号,候选保留完整地址,并把后面的普通 URL 显示为独立链接。 真实生产渲染器对照复现旧版截断;候选的简单、成对及嵌套括号、粗体、表格和相邻链接正确,打包对话纠正并重载后仍读回完整地址。 不声称支持完整 CommonMark、真实模型采用、本机安装升级或外部网站可达性,也不更改执行权限、调度或持久化协议。
改动思路
复用现有 MarkdownText 和 bare-URL renderer,只在同一模块内替换命名链接边界识别;没有引入另一套 Markdown 框架、状态或权限 owner。 当前 PR 只修复 HTTP(S) 命名链接目的地址中的成对括号,并保留代码、HTML 和相邻链接的既有边界;不扩展为完整 CommonMark 或新的运行配置。 旧正则在第一个右括号停止;简单贪婪匹配又可能吞掉后一个链接。局部深度计数解决这一个实际错误,随后仍按最早出现的位置选择代码、粗体或命名链接;plain URL 继续由既有 linkify-it 处理。来源文本仍由真实 Chat store 保存,页面只生成 React 节点,没有额外网络请求或权限决策。
具体改动
精确 head 0ef11d2ca799e48e8deb0b4972f94a6c9478c327,不可变实际基线 a1890a37f4f759bc2e39823074bbe78f78e49fdb;完整四文件 +63/-8,生产模块 +53/-8,薄 smoke +10,另有两张公开合成插图。没有预先书面规定此命名链接括号语法的规范或关联 issue;本结论依据独立复现的目的地址错误与现有安全渲染调用者,不把作者自述当成已接受规范。
关键代码讲解
nextMarkdownLink:47:识别非空、最多120字且无换行的 label,目的地址必须 HTTP(S),遇空白停止;内部左右括号计数,到深度为零的外层关闭位置返回完整 span。renderInline:82:与原代码/粗体 token 比较起点,早到的 token 优先;链接去掉外层分隔符生成 anchor,粗体递归,后续正文继续安全渲染。代码中的链接不会激活。renderPlainText:28:原有 bare URL、中文标点与完整 userinfo 判断不变;命名 literal URL 与自动识别目的地具有不同边界,合并成一条贪婪规则反而失去输入含义。
共享调用者包含管家/Goal 对话、timeline、答案报告、team artifact 及 attention detail;没有闲置新 API。两项新增 smoke 分别检查相邻 URL 与嵌套括号。公开 PNG 是合成说明,本评审另外构建并走了真实打包对话。
对主干的风险
独立同输入生产渲染器 oracle 共12组:基线7通过、5组有意暴露截断,候选12通过;覆盖简单/相邻/嵌套、粗体、表格、代码/fence、中文标点、raw HTML、非HTTP协议及长userinfo。候选没有吞掉相邻链接,也没有改变自动userinfo截断防护。
真实隔离 Chat HTTP/store 加脚本模型响应中,普通请求读回完整 Topic 地址;键盘发送嵌套纠正、打开完整对话、重载并检查390px手机视图,原消息和纠正链接仍存在。模型选择、已安装 App、外部网站访问未验证。全视口保留目标、对话来源、顺序与下一步,没有增加必须重填的信息或确认。
team-report、类型检查/desktop build、Chat bundle build、完整语义词汇检查通过;standard premerge3项直接及11项选定检查通过,无失败、skip、timeout、manual hold或tracked副作用。Vite大chunk提示仍保留。最初私有SSR输出无法解析React,明确补足依赖路径后同模块/同断言两端执行成功;先前读取脚本缺少Path导入也已另行完成,不宣称这些初次工具失败通过。未查询或等待CI。
支持范围仍是现有轻量Markdown子集,不承诺完整CommonMark的转义、title或image语法。未增加opt-in/default-off配置或actor生命周期;本次默认改变是已披露的目的地址修复。解析深度是本地临时值,没有新共享词汇、持久化状态或授权语义。
我的整体评价
APPROVE,goal_achieved:所选链接修复通过实际生产路径和基线反例,user_experience improved、long_horizon preserved。原消息保存和后续纠正/重载保持,机制与错误范围相称。未来变更整理已考虑复用自动URL parser,但命名语法边界不同;现有模块内局部helper足够,无需新框架。复用现有 MarkdownText 和 bare-URL renderer,只在同一模块内替换命名链接边界识别;没有引入另一套 Markdown 框架、状态或权限 owner。 当前 PR 只修复 HTTP(S) 命名链接目的地址中的成对括号,并保留代码、HTML 和相邻链接的既有边界;不扩展为完整 CommonMark 或新的运行配置。 完整CommonMark与真实模型/安装采用仍不在本轮证据内,产品代码由维护者合并。
English verdict: APPROVE - 0ef11d2. Independent production-renderer baseline/head cases reproduce the old truncation and validate full balanced destinations, adjacent URLs and retained safety semantics. Packaged isolated Chat correction/reload and mobile readback passed with a scripted model; native builds and risk checks passed. Full CommonMark, live model adoption and installation are not claimed.
Goal And Delivered Outcome
Author Declaration
Implemented against
Scope And Continuation
Validation
Frontend / Visual Evidence
Type of Change
LoopX Area
Technical Direction
Shared-authority RFC fixture impact
Boundary Checklist