记在这里的债都是有意欠的,不是忘了。每条写清:是什么、为什么先欠着、 什么条件下该还。
question="1",API 由序号映射到原候选",
而当前前端提交的是选项全部内容拼接的文本(公司名 + 信用代码 + 状态 + 负责人)。status: found)的流程,
选中一家,确认返回的是选定公司后的结果而不是又弹候选列表。
若循环,两条路:①改回提交序号(序号取自当前显示顺序);②后端扩语义识别全字段文本。provider_failure,status: found 一次都没出现过,因此从未验证。answer.text 与 summary.text 首句重复answer.text(渲染在消息正文)又放进 summary.text 的开头,
实测两者首句逐字相同,用户会看到同一段话出现两次。{thread_id, question} 两个字段,多一个返回 422,
旧协议的 transmission.files / file_pos 发不出去。harness/docs/reference/legacy/API.md(旧协议快照,仅供理解原实现)Question.message 字段未被渲染QuestionCard 的 Question 接口里定义了 message 字段,
但模板从未渲染它 —— 适配层写的提示文案一直不可见。wss://qingpu-data-api.metamaker.cn/common/asr_hub
(引擎 aliyun_dashscope),且鉴权 token 与 appKey 都硬编码在源码里
(src/three-libs/asr/index.ts 的 token:iss: human-large-screen,exp 2034-12-29,入库可见)。../reference/current-api-call-sites.md 的「ASR 协议契约」,
实现方照着就能写自建网关,前端一行都不用改(只把 VITE_ASR 指向新地址)。index.html 里写死的 globalThis.isXF = false
改成环境变量开关 —— 这样万一厂商出问题,改配置就能切到讯飞分支,不必改代码重新发版。height: 100dvh 没有 100vh 兜底(BusinessAssistantMobile.vue)——
dvh 是较新的单位(Chrome 108+ / Safari 15.4+),国产浏览器内核多基于更老的版本
→ 该声明被整条丢弃 → 容器高度塌陷,而外层是 overflow: hidden → 内容被裁掉text-size-adjust: 100% —— 移动端浏览器会按各自策略自动放大文字,
各家不同 → 同一份文案在不同手机上长度不同(也是"不同浏览器不一样"的直接来源)width: max-content 决定「单行省略 vs 换行」:
updateMaxWidthReached() 用 getBoundingClientRect() 比卡片与父容器宽度。
而字体首选 "HarmonyOS Sans SC"(手机多无此字体 → 回退到系统字体)→ 字宽不同
→ 测量结果不同 → 该换行时判成"没撑满" → 单行 nowrap 撑出屏幕chrome://inspect
最省事)—— 没有这个只能猜dvh 加 vh 兜底、全局 text-size-adjust: 100%、
给 flex 链补 min-width: 0is-max-width-reached
与 width: max-content。现在这套先天不稳定(字体/时机/内核都会影响测量)browserslist;
项目当前没有任何 browserslist / postcss 降级配置,而代码里用了
dvh(4) / gap(151) / inset(22) / backdrop-filter(24) 等较新特性dvh 仍无 vh 兜底、
仍无 text-size-adjust、思考卡片仍靠 JS 测量切样式,padding-bottom: 180px 也仍是写死的)。
换台手机、或用户调大系统字号,仍可能变样;方案 A/B/C 依然有效,等用户决定要不要做。/dms-api/ 代理,token 由代理服务端注入
(dev 是 vite.config.ts,生产计划是 nginx 同款转发)。这个 token 不区分调用者 ——
任何能打开站点的人,在浏览器 devtools 里对 /dms-api/content/selectContentList 发任意查询,
就能读到 DMS 的全部数据:1887 会话、1888 企业工商信息、1889 问答记录,
包括别家企业的。代理只做「补 /dms 前缀 + 注入 token」,不做任何鉴权。.env.production 没配 VITE_DMS_API)。
dev 环境无所谓(本机、只有自己)。docs/plans/active/dms-api-replacement.md 里"前端直连还是后端转发"
那道待拍板的问题是同一件事,这里给出了必须选后端的理由;c_credit_code 只放真实信用代码」后,访客行也带着
对话提到的那家公司的代码;而 fetchDmsSessions(读「我的会话」)按 c_credit_code 查、
且只在登录后调用 → 那家公司登录后会看到陌生访客的会话。fetchDmsSessions 增加一道过滤 —— 排除「明确是访客」的行
(c_is_login === "0")。只排除显式访客行(c_is_login 缺失的历史行照旧返回),
因此可见范围与改造前完全一致。c_is_login === "1")不再允许访客对话改写
它的公司字段 —— 否则退登后再问到别的公司,会把这行改到那家公司名下、而 c_is_login
仍是 "1",既串台又会被读侧当登录行返回。verify-dms-chat-storage.mjs 打真实 DMS,两个方向都断言(访客行查不到 /
登录行查得到),且实测「拿掉过滤该断言立刻失败」——是真守卫。token-streaming.md:「完整校验后绑定真实链接,随最终替换出现」;
「answer_end 无论 status 是 completed 还是 fallback,均用 text 覆盖已有内容……
不能只停止光标而保留草稿」### 高新技术企业认定… → ### 一、高新技术企业认定…)、
把纯文本渠道换成了 markdown 链接(- 国家高新技术企业认定管理工作网先行注册… →
- [查看办事指南](https://zwdt.sh.gov.cn/…))。链接只在最终校验后才绑定,草稿必然没有。status: fallback 那一类更直接:草稿被判不可用 → 换成降级答复
(「已查到相关资料,但这次未能完成答复整理。您可以查看下方原文资料,或稍后重试。」)/api/chat 原始载荷,比对 concat(answer_delta) 与 answer_end.text
的公共前缀长度(harness/tools/probe-answer-tail-timing.mjs 可改造成此用途)。