Skip to content

feat(copilot): 来源检查器补全非金融来源与状态标记(#30 Part 2) - #322

Open
yu1128-L wants to merge 1 commit into
helsome:mainfrom
yu1128-L:feat/issue30-part2-source-provenance
Open

yu1128-L wants to merge 1 commit into
helsome:mainfrom
yu1128-L:feat/issue30-part2-source-provenance

Conversation

@yu1128-L

Copy link
Copy Markdown
Contributor

改了什么

  • 非金融来源展示完整来源信息:SourceInspector 之前只对金融证据信封渲染来源详情,新闻/文档/工具来源只显示一句 "no structured envelope"。现在会展示标题、类型、工具名、工具参数、抓取时间,以及可点击的外部链接(target="_blank" rel="noreferrer")。
  • 补齐未被展示的契约字段:CitationSource.url 之前被 extractUrl 采集但从未渲染;现在工具结果里的 url/title 会一并提取并展示。
  • 状态标记补全:来源列表与详情区新增 delayed(延时数据)与 reconciliation(多提供方对账,含 providers + method)标记,与既有的 stale / fallback 并列。
  • 来源列表键盘可达:列表改为 listbox/option 语义 + roving tabIndex,支持 ArrowUp / ArrowDown / Home / End 移动选中项并把焦点带到新的行。
  • 中英文文案:新增 key 同时补齐 en-US 与 zh-CN,i18n:check 通过。

为什么

#30 的验收标准要求"从行内引用到证据的完整路径"。Part 1 已合入标注契约与来源检查器骨架,但非金融来源与状态标记仍然缺失,来源检查器实际只能证明金融信封这一条路径。本 PR 补上剩余部分。

Issue

Refs #30(Part 2)。验收标准里的"真实混合来源 Copilot 回答录制"仍未完成,见下方未完成项。

验证

环境:Windows(Asia/Shanghai),Bun 1.4.2。

bun test packages/core/src/citations.test.ts packages/ui/src/lib/citations.test.ts \
  packages/ui/src/components/chat/SourceInspector.test.tsx \
  packages/ui/src/components/chat/AnswerContent.test.tsx
→ 34 pass / 0 fail / 109 expect() calls

bun run typecheck
→ @finagent/core, @finagent/i18n, @finagent/shared, @finagent/ui, @finagent/electron 全部 Exited with code 0

bun run i18n:check
→ ✓ key parity: en-US 1499 keys ≡ zh-CN 1499 keys (0 issues)

新增用例覆盖:非金融来源标题/链接/工具参数渲染、delayed + reconciliation 展示、方向键与 Home/End roving focus、collectCitationSources 对新增字段的透传。

全量 bun test --isolate:1779 pass / 8 skip / 1 fail。唯一失败是 ExperimentService.runExperiment > creates + updates the experiment and persists runs and results,断言 experiment.metadata.gitSha 为 string。该用例需要 .git 目录读取 git SHA,而本次验证用的是一份 GitHub tarball 解压树,没有 .git,因此与本次改动无关,@finagent/shared 也未被本 PR 触碰。

未完成项

  • [Copilot Evidence] Add unified inline citations and a source inspector #30 验收标准中"真实录制的混合 web + 金融 API 来源回答"需要可用的真实模型凭据(ANTHROPIC_API_KEY),当前环境只有非 Anthropic 的 key,无法录制,故本 PR 使用 Refs #30 而非 Closes,该条验收仍留在 issue 上。
  • 本 PR 无截图:改动位于来源检查器内部,需要跑起 Electron 应用才能截取;上述单测覆盖了 DOM 行为与 a11y 属性,但没有真实应用截图。

- 闈為噾铻嶆潵婧愶紙鏂伴椈/鏂囨。/宸ュ叿锛夊睍绀烘爣棰樸€佺被鍨嬨€佹彁渚涙柟銆佸伐鍏峰弬鏁颁笌鎶撳彇鏃堕棿
- 宸ュ叿缁撴灉涓殑 url 娓叉煋涓哄彲鐐瑰嚮鐨勫閮ㄩ摼鎺ワ紝琛ラ綈鏃㈡湁濂戠害閲屾湭琚睍绀虹殑瀛楁
- 鐘舵€佸尯鏂板寤舵椂鏁版嵁涓庡鎻愪緵鏂瑰璐︽爣璁帮紝鏉ユ簮鍒楄〃鍚屾灞曠ず
- 鏉ユ簮鍒楄〃鏀逛负 listbox/option 璇箟骞舵敮鎸佹柟鍚戦敭銆丠ome/End 绉诲姩鐒︾偣
- 琛ュ厖涓嫳鏂囨枃妗堜笌 SourceInspector/citations 鍗曟祴

@helsome helsome left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

暂不合入,发现以下新增问题:

  1. packages/ui/src/components/agent/SourceInspector.tsx:193–204 将工具结果 source.url 直接作为可点击 href;collectCitationSources 仅检查 string,没有协议约束。请限制为 http/https,并使用仓库受控 external-open 路径,补充 file:/data:/自定义协议不会打开及正常 https 可打开的回归。本结论来自源码审查,不声称已执行协议攻击。
  2. 同文件新增三处 toLocaleString() 会跟随系统语言,而非应用语言。请复用统一日期格式化接口,并覆盖系统与应用语言不同的情况。

另 #30 的完整真实 Copilot 混合数据源/citation 打开录屏验收仍需补齐,不能凭此次部分实现关闭父 Issue。

helsome commented Oct 18, 2026

Copy link
Copy Markdown
Owner

同步最新 main:#353 已合入(038f20cf2d87e3575ffbe5469967bdf6ef960dc8),现在已有免 API key 的 Yahoo Finance 备用数据源。请同步 main 后复用现有 provider router / market-data 接口,不再把支持范围内的行情验收统一卡在 Longbridge/Massive 凭证上。

支持范围是美股延迟报价、日/周 K 线和简要公司资料;不支持券商账户/持仓、财报、新闻、期权及分钟行情。保留实际 provider、时间与 delayed 标记,不能用缺失数据冒充 0 或“没有事件”。文档明确它是非官方、个人使用范围的接口,可能限流。

针对本 PR:请用 Yahoo 金融来源核对 Inspector 的实际来源与 delayed/fallback 标记。混合来源录屏仍需满足原有模型及网页/文档条件,原链接安全审查要求保持。

参考:接入说明 · 适配器。请区分 fixture 与真实联网结果;连接卡显示 connected 本身不证明实际取数成功。此评论同步新基线,不替代原有 review 或验收结论。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants