Skip to content

fix(diagnostics): 诊断包恒报券商「已连接、1 个账户」,与是否登录无关 - #246

Open
wxrbyte wants to merge 1 commit into
helsome:mainfrom
wxrbyte:codex/fix-diagnostics-broker-account-facts
Open

wxrbyte wants to merge 1 commit into
helsome:mainfrom
wxrbyte:codex/fix-diagnostics-broker-account-facts

Conversation

@wxrbyte

@wxrbyte wxrbyte commented Sep 28, 2026

Copy link
Copy Markdown
Contributor

Closes #245

问题

诊断包里 broker 的两个字段是常量,与真实登录状态无关:

brokerConnected: providerSummaries.some((p) => p.id === 'longbridge-broker'),
brokerAccountCount: providerSummaries.some((p) => p.id === 'longbridge-broker') ? 1 : 0,

providerSummaries 来自 listFinancialProviders() → providerRouter.list(),即所有已注册的 provider;broker 在构造函数里无条件注册(kernelHost.ts:341),所以 some(...) 恒为 true,账户数还是字面量 1。未登录任何券商时,导出的诊断包依然写 { connected: true, accountCount: 1 }。

改动

apps/electron/src/main/kernelHost.ts

  • 新增 brokerAccountFacts():按 kind === 'broker-account' 取到 broker provider(不再重复硬编码 'longbridge-broker' 字面量),调用 accounts() 得到真实账户数;ok && data.length > 0 才算已连接,探测抛错按未连接处理(诊断包不能因为探测失败而失败)。
  • collectDiagnostics 用它的返回值替换原来的两个常量表达式。

这条路径与 Connections 界面的 entryFor(kernelHost.ts:1741-1753)同源 —— 那里也调用 provider.accounts();LongbridgeBrokerAccountProvider.accounts() 未登录时返回 { ok: false, error: { code: 'AUTH_EXPIRED' } }(providers/longbridge/broker.ts:72-92),登录后返回 1 条。

apps/electron/src/main/kernelHost.test.ts

  • 把 mock 的 ProviderRouter.list 从常量 [] 改为可控的 routerProviderList(beforeEach 重置),使「provider 已注册但未登录」这一状态可在单测里构造。
  • 补上 electron mock 缺失的 app.getVersion / app.isPackaged(原来只有 getPath),否则 collectDiagnostics 在本进程内不可调用。
  • 新增两条用例:无账户 → { connected: false, accountCount: 0 };有 1 个账户 → { connected: true, accountCount: 1 }。

验证

bun test apps/electron/src/main/kernelHost.test.ts
  • 修复前:12 pass / 1 fail
    • 新增用例收到 { "accountCount": 1, "connected": true },期望 { "accountCount": 0, "connected": false }
  • 修复后:13 pass / 0 fail
  • bun run typecheck:@finagent/core、@finagent/i18n、@finagent/shared、@finagent/ui、@finagent/electron 全部 Exited with code 0

重叠披露

apps/electron/src/main/kernelHost.ts 同时被 5 个 open PR 触及(#97、#64、#56、#53、#4)。已逐个拉取各 PR 的 patch 与改动块标题比对:没有一处改动 collectDiagnostics 的 broker 字段或新增 brokerAccountFacts;最接近的是 #4 的 @@ -2101,6 +2135,9 @@(另一个方法的 env 构造块),与本次改动不相交。kernelHost.test.ts 侧本 PR 只改 mock 的两个字段与 beforeEach,其余 PR 在该文件上的改动块分别是 @@ -1,11、@@ -224、@@ -254、@@ -337、@@ -457 附近,也未重叠。

若上述任一 PR 先合入,本分支按需 rebase。

collectDiagnostics 用 providerSummaries.some(id === 'longbridge-broker') 判断
券商是否连接,但 providerSummaries 只是「已注册 provider」列表,而 broker 在构造
函数里被无条件注册 —— 该表达式恒为 true,账户数还是写死的字面量 1,从未查询过
真实账户。改为按 kind === 'broker-account' 找到 broker 并调用 accounts(),与
entryFor(Connections 界面)同源:未登录时 accounts() 返回 ok:false,据实上报
未连接、0 个账户。

修复前 12 pass / 1 fail → 修复后 13 pass / 0 fail。

Closes helsome#245
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.

fix(diagnostics): 诊断包恒报券商「已连接、1 个账户」,与是否登录无关

1 participant