AGC 官方 LLM Router 账号链路与流式联网输出 #242

Merged
kdletters merged 59 commits from feat/agc-llm-router-official-chain into master 2026-09-06 16:49:13 +08:00
Member

变更概述

将 AGC 客户端 LLM 使用方式收敛到官方 LLM Router 账号链路:客户端不再配置任意 Provider 凭据,由 api-server 通过 New API 管理员流程创建并管理 Router 账号与 API Key,AGC 正式模式统一走官方代理;同时补充生成过程中间态输出,默认启用流式输出与联网搜索,并在成功后执行幂等后置泥点扣费。

主要内容

  • 新增 llm_router_account 表、读写/吊销 procedures、migration 与生成绑定。
  • api-server 新增 Router 账号获取/写入/吊销流程,复用 New API 管理员 API 签发独立账号与 Key。
  • Router 调用成功后执行幂等后置扣费,失败与重试场景不重复扣费。
  • AGC 配置收敛为官方 Router 模式,正式模式清除并锁定手工 Provider 凭据。
  • 运行时透传中间态、流式与联网搜索事件,前端状态展示同步适配。
  • 生产环境外将 Router 控制面限制为 loopback;AGC 状态面仅返回账号凭据与官方路由安全元数据。
  • 后台数据库表查询适配账号凭据状态展示,补充环境示例、架构文档与专项测试。

关联 Issue

当前状态

WIP / Draft:提交已推送,用于继续评审与联调;尚未声明可合并。

验证说明

  • 本地验证与生产联调结果待补充。
  • CI 结果待分支流水线执行完成后确认。
## 变更概述 将 AGC 客户端 LLM 使用方式收敛到官方 LLM Router 账号链路:客户端不再配置任意 Provider 凭据,由 api-server 通过 New API 管理员流程创建并管理 Router 账号与 API Key,AGC 正式模式统一走官方代理;同时补充生成过程中间态输出,默认启用流式输出与联网搜索,并在成功后执行幂等后置泥点扣费。 ## 主要内容 - 新增 `llm_router_account` 表、读写/吊销 procedures、migration 与生成绑定。 - api-server 新增 Router 账号获取/写入/吊销流程,复用 New API 管理员 API 签发独立账号与 Key。 - Router 调用成功后执行幂等后置扣费,失败与重试场景不重复扣费。 - AGC 配置收敛为官方 Router 模式,正式模式清除并锁定手工 Provider 凭据。 - 运行时透传中间态、流式与联网搜索事件,前端状态展示同步适配。 - 生产环境外将 Router 控制面限制为 loopback;AGC 状态面仅返回账号凭据与官方路由安全元数据。 - 后台数据库表查询适配账号凭据状态展示,补充环境示例、架构文档与专项测试。 ## 关联 Issue - Closes #214 - Closes #219 ## 当前状态 WIP / Draft:提交已推送,用于继续评审与联调;尚未声明可合并。 ## 验证说明 - 本地验证与生产联调结果待补充。 - CI 结果待分支流水线执行完成后确认。
suzmii added 12 commits 2026-09-02 11:15:40 +08:00
记录当前 AGC 客户端、Tauri、API Server、后台查询和契约改动

保留后续按新 Router 后端方案重构的检查点
增加 DirectProject 流式可见文本投影和敏感内容过滤

接入受控 web search 工具及参数、网络边界测试

补充配置迁移和运行时回归覆盖
保留官方路由锁定、账号凭据状态和 Windows 私有路径安全边界

合入 DirectProject 流式可见文本投影与受控联网搜索

同步配置 schema 迁移、状态输出和回归测试
开放 AGC 配置迁移测试所需的 crate 内函数

清理受控联网搜索合并后的未使用导入
保留 DirectToolBridge 测试路由使用的 Query 和 get
移除已不再存在的前端 Agent 推理映射源码断言

保留 Rust 侧规范 Agent 默认映射和配置模板验证
修正无 provisioning 时仅使用服务端 fallback Key,禁止生成 Router 不认识的随机 Key

补齐 AGC 凭据元数据脱敏、失效复用保护与 SpacetimeDB 字段映射

让 Responses 与 Chat 流式调用在成功后按 usage 幂等扣除泥点

同步 schema 迁移、环境变量示例、后端架构和决策文档
延迟透传上游 [DONE],确保扣费失败时客户端先收到 error 事件

补充 SSE done 标记边界解析回归测试
合并 origin/master 的 Agent Runtime 编排依赖与测试门禁

恢复 platform-agent 的任务图校验与动态编排实现

为后续 AGC Router 流程调试提供可启动的最新基线
将AGC Rust源码中的ACL专用实现恢复为主线版本

移除本分支内的Windows ACL提权命令与私有路径调用

保留Router、联网搜索和流式传输改动在后续stash中继续处理
新增 llm_router_account 表、procedures 与客户端绑定
api-server 改为 New API 管理员流程签发独立 Router 账号
Router 成功后执行幂等后置泥点扣费
生产外锁定非生产 Router 控制面为 loopback
AGC 正式模式清除手工 Provider 凭据并锁定官方代理
AGC 状态面只返回账号凭据与官方路由安全元数据
后台数据库表查询适配账号凭据状态展示
补充 AGC 与后端测试、环境示例和架构文档
修正 dev-stack 状态路径按仓库脚本位置解析
Merge remote-tracking branch 'origin/master' into feat/hide-llm-router-and-stream-transport
Project CI / Repository checks (pull_request) Failing after 8s
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
c0694ceedd
# Conflicts:
#	apps/ai-game-creator-shell/src-tauri/src/config.rs
suzmii added 9 commits 2026-09-02 15:05:18 +08:00
- 固定 Router 用户为 taonier、Token 为 default 并确保订阅

- 复用本地账号 Key,禁止无管理员令牌绕过订阅校验

- LLM 转发只读取服务端已验证的 Router 凭据并保持请求流式参数
LLM Router 计费改为每开始 10000 token 扣 1 点且至少 1 点。

钱包在同一事务内按可消费余额扣光并记录赠送差额,成功响应不再因余额不足中断。

Responses 流式终态延后到结算后发送,泥点不足映射为稳定错误。

执行状态改为具体工具标题,详情默认单行折叠并增加扫过高亮动画。

补充计费公式、幂等扣费与状态展示回归测试。
Codex app-server 将文件、命令、验证、搜索等 item/started 事件映射为具体活动标题和安全短详情。

泥点不足错误映射为稳定 409 上游错误并在 DirectProject 显示明确充值引导,不再落到 other。

官方平台会话保持 Provider Proxy 链路,测试专用 API Key/AuthBridge 逻辑仅保留在 cfg(test)。Codex 子进程清理代理环境,确保 loopback SSE 不被系统代理劫持。

补充活动投影、错误映射、流式配置和敏感内容脱敏回归测试。
修正 generation 与 runtime_state 两个文件的 rustfmt 布局,使工作区格式门禁可通过。
DirectProject 流式文本和最终回复只移除 thinking 包装,成功正文按用户项目内容原样展示。

删除路径、链接和凭据占位符替换以及回复长度截断逻辑。

同步删除最终回复必须脱敏的文档要求,并更新回归测试验证项目内容保持原样。
真实 Debug 和 Release 构建都强制通过 API Server 使用官方 LLM Router,仅 Rust 测试构建保留显式 loopback fixture。

清理配置读取中的旧 Provider 凭据入口,并补充配置锁定回归。

code-prototype 任务提示要求实际读取并渲染四类平台美术切片,防止只引用整图或路径。
新增 create_auth_session_and_sync,统一密码、手机号和微信登录会话的投影同步时机。

避免登录接口签发的新 access token 在下一次请求被当前或其它节点的 SpacetimeDB 校验拒绝。

补充登录投影同步回归测试。
Router 固定 Token 展示名改为 agc_auto_generate,并同步后台安全查询测试。

文档记录跨独立数据库的稳定账号恢复、default 分组、订阅续期和 best-effort 扣费规则。

调整共享官方 Router 的非生产启动告警,并保留错误 code 构造能力。
格式化 AGC Rust 模块
Project CI / Frontend tests (pull_request) Failing after 2m13s
Project CI / Native shell tests (pull_request) Failing after 4m39s
Project CI / Repository checks (pull_request) Failing after 13s
Project CI / Backend tests (pull_request) Failing after 11s
44e1e03f2e
按当前 rustfmt 规则整理 Agent Runtime、配置、预览、会话与相关测试的代码布局。

本提交不改变运行逻辑,保持 AGC Rust 工作区格式门禁可通过。
suzmii added 1 commit 2026-09-02 15:24:02 +08:00
零泥点用户禁止发起 LLM 对话
Project CI / Backend tests (pull_request) Failing after 12s
Project CI / Repository checks (pull_request) Failing after 12s
Project CI / Frontend tests (pull_request) Failing after 6m53s
Project CI / Native shell tests (pull_request) Failing after 9m17s
a30f03a38c
Responses 与 Chat 兼容入口在解析 Router 凭据前读取用户钱包余额。

余额为 0 时直接返回 409 MUD_POINTS_INSUFFICIENT,不创建、续期或访问 Router 账号。

余额读取失败时失败关闭并提示稍后重试。

补充零余额前置门禁回归测试与架构决策记录。
suzmii added 1 commit 2026-09-02 15:56:02 +08:00
合并最新主线并保留官方路由锁定
Project CI / Frontend tests (pull_request) Failing after 3m0s
Project CI / Repository checks (pull_request) Failing after 3m1s
Project CI / Backend tests (pull_request) Failing after 3m52s
Project CI / Native shell tests (pull_request) Failing after 5m55s
bbf9500bea
合并客户端扩展、应用更新、格式化门禁和后台表查询等主线改动。

运行时设置页保留官方账号服务与安全元数据,同时接入主线扩展管理与更新能力。

DirectProject 文档合并主线第三方 MCP 支持与官方路由、受控搜索边界。

修复合并后的后台 API Key 详情 Eye 图标导入。
suzmii added 1 commit 2026-09-02 16:54:22 +08:00
Direct 过程卡改为按回合阶段状态驱动并移除合成打字机
Project CI / Frontend tests (pull_request) Successful in 3m20s
Project CI / Repository checks (pull_request) Failing after 14s
Project CI / Backend tests (pull_request) Failing after 11s
Project CI / Native shell tests (pull_request) Failing after 13m20s
8f7017f6c0
- DirectProject observer 只把真实回复增量标记 streaming,工具中间文本与活动一律 running
- 删除最终回复的合成打字机回放,改由真实事件驱动流式展示
- App 事件投影新增回合状态与 processKey,小字统一补充正在前缀
- 过程卡标题只由回合状态决定,展开状态在同一回合内保持
- 失败与接受态文案改为当前阶段描述,旧直接活动词映射移除
- AppSurface 回归覆盖接受态、展开保持、流式标题与失败态断言
- 决策记录与 Direct 审计账本同步新的状态口径
suzmii added 2 commits 2026-09-02 18:49:03 +08:00
将生成中的累计正文直接显示在助手会话气泡中。

过程卡只保留阶段与执行信息,避免工具事件覆盖正文。

展开详情的滚动条轨道与角落改为透明。

补充流式、失败清理与正式消息接管的界面回归验证。
过程卡思考阶段显示正在思考并保留具体执行命令
Project CI / Native shell tests (pull_request) Failing after 12m28s
Project CI / Repository checks (pull_request) Failing after 9s
Project CI / Frontend tests (pull_request) Successful in 3m31s
Project CI / Backend tests (pull_request) Failing after 9s
5008691975
- preparing 活动词文案由正在理解需求改为正在思考中
- Codex 计划与推理通知只收敛为 thinking 活动,不再把原始推理正文送入 UI
- 推理期 thinking 活动按 1.2 秒限流,避免重复事件刷屏
- command-exec 等执行细节不再依赖回复流开关,stream=false 也保留具体命令
- 同一活动的心跳事件不再用通用文案覆盖正在执行的具体命令
- 补充 Rust 纯函数单测与 AppSurface 思考态、命令心跳回归
- 决策记录同步 thinking 与执行细节展示规则
suzmii self-assigned this 2026-09-02 20:34:22 +08:00
suzmii added 4 commits 2026-09-03 10:28:51 +08:00
合并 origin/master 的 UI 编辑器、GDD 审批与前端修复。

保留本分支 LLM Router、Direct 过程卡与私有路径相关实现和决策记录。

解决 decision-log 文档冲突,完整保留双方新增决策条目。
- MCP 工具按写入、浏览、读取素材、导入、生成图片等用户动作显示文案
- 写入工具与文件变更统一显示正在写入文件和项目相对路径
- 命令显示具体命令,验证类命令显示正在验证游戏
- 未知工具只显示正在调用工具,不暴露内部工具名和未审核参数
- 工具详情限制路径长度并拒绝绝对路径与上跳路径
- stream=false 时继续保留新的具体工具执行文案
- 补充工具映射、安全边界、命令分类与过程卡心跳回归
- 决策记录同步工具语义文案规则
绑定 LLM 幂等键与请求指纹,阻止跨请求免扣费

放宽登录对 Router 控制面的依赖并迁移 provisioning secret

加强 AGC 配置文件校验与 SSE UTF-8 处理

同步环境配置、架构文档和回归测试
合并 master 并整合 Router 安全修复
Project CI / Native shell tests (pull_request) Failing after 6m32s
Project CI / Repository checks (pull_request) Successful in 3m5s
Project CI / Backend tests (pull_request) Failing after 3m16s
Project CI / Frontend tests (pull_request) Successful in 3m44s
6bea5bb2b1
合入 origin/master 最新提交 a465e481e

保留后台错误报告、AGC 受控搜索与 Router 计费安全修复

同步 SpacetimeDB migration、技能文档和配置契约
suzmii added 1 commit 2026-09-03 11:10:58 +08:00
恢复 Router provisioning 固定密钥方案
Project CI / Repository checks (pull_request) Failing after 11s
Project CI / Frontend tests (pull_request) Successful in 3m4s
Project CI / Backend tests (pull_request) Failing after 9s
Project CI / Native shell tests (pull_request) Failing after 10m8s
9a06945e44
恢复 api-server 内置 provisioning secret,保持现有账号派生兼容

移除 provisioning secret 的环境变量和示例配置入口

补充阶段性取舍而非设计缺陷的代码注释

同步 Router 账号链路架构文档
Member

Genarrative PR review for head 9a06945e44c6219beff7a01f592e4bbad7a220ac:请求修改。

高风险:provisioning secret 被硬编码并随仓库发布,导致所有 Router 用户密码可被离线推导。

server-rs/crates/api-server/src/external_api_keys.rs:63LLM_ROUTER_PROVISIONING_SECRET_V1 固定写入源代码,而 generate_router_account_password 使用该 secret 和 owner_user_id 稳定派生密码。任何能读取仓库的人都能为任意已知 owner ID 计算密码,并登录对应 router.genarrative.world 账号,使用其无限额度的 agc_auto_generate Token/API Key,造成跨用户账号接管和额度滥用。后续迁移密钥也无法撤销已暴露的派生密码。

请移除源码中的固定 secret,改为从部署密钥管理/受保护 secret file 强制读取(缺失时拒绝 provisioning),并轮换已受影响账号的密码/Token;密码派生应包含真正的部署密钥且保留可迁移的 credential version。

Genarrative PR review for head `9a06945e44c6219beff7a01f592e4bbad7a220ac`:请求修改。 **高风险:provisioning secret 被硬编码并随仓库发布,导致所有 Router 用户密码可被离线推导。** `server-rs/crates/api-server/src/external_api_keys.rs:63` 将 `LLM_ROUTER_PROVISIONING_SECRET_V1` 固定写入源代码,而 `generate_router_account_password` 使用该 secret 和 `owner_user_id` 稳定派生密码。任何能读取仓库的人都能为任意已知 owner ID 计算密码,并登录对应 `router.genarrative.world` 账号,使用其无限额度的 `agc_auto_generate` Token/API Key,造成跨用户账号接管和额度滥用。后续迁移密钥也无法撤销已暴露的派生密码。 请移除源码中的固定 secret,改为从部署密钥管理/受保护 secret file 强制读取(缺失时拒绝 provisioning),并轮换已受影响账号的密码/Token;密码派生应包含真正的部署密钥且保留可迁移的 credential version。
kdletters requested changes 2026-09-03 11:18:45 +08:00
Dismissed
kdletters left a comment
Member

Head 9a06945e44c6219beff7a01f592e4bbad7a220ac contains a high-risk hard-coded Router provisioning secret; see the PR comment for details.

Head `9a06945e44c6219beff7a01f592e4bbad7a220ac` contains a high-risk hard-coded Router provisioning secret; see the PR comment for details.
suzmii added 1 commit 2026-09-03 11:22:53 +08:00
Revert "恢复 Router provisioning 固定密钥方案"
Project CI / Repository checks (pull_request) Failing after 13s
Project CI / Backend tests (pull_request) Failing after 9s
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
ac0f6bb783
This reverts commit 9a06945e44.
suzmii added 1 commit 2026-09-03 11:42:41 +08:00
Merge branch 'master' into feat/agc-llm-router-official-chain
Project CI / Repository checks (pull_request) Successful in 2m49s
Project CI / Frontend tests (pull_request) Successful in 3m36s
Project CI / Backend tests (pull_request) Failing after 2m51s
Project CI / Native shell tests (pull_request) Failing after 6m42s
1c4a7bd221
suzmii marked the pull request as ready for review 2026-09-03 11:42:53 +08:00
suzmii added 2 commits 2026-09-03 13:43:17 +08:00
收敛账号与角色协作展示文案

增加账号状态检测动画和状态卡片样式

将流式输出与联网检索整理为单列

更新设置页回归测试与配置护栏
Merge remote-tracking branch 'origin/feat/agc-llm-router-official-chain' into feat/agc-llm-router-official-chain
Project CI / Repository checks (pull_request) Failing after 9s
Project CI / Frontend tests (pull_request) Successful in 3m2s
Project CI / Backend tests (pull_request) Failing after 12s
Project CI / Native shell tests (pull_request) Failing after 7m30s
75845bd7e9
suzmii closed this pull request 2026-09-03 14:16:58 +08:00
suzmii deleted branch feat/agc-llm-router-official-chain 2026-09-03 14:16:58 +08:00
suzmii reopened this pull request 2026-09-03 14:27:54 +08:00
suzmii added 1 commit 2026-09-03 14:35:53 +08:00
清理已退役工具测试并补充 Router 账号文档
Project CI / Repository checks (pull_request) Failing after 11s
Project CI / Backend tests (pull_request) Failing after 10s
Project CI / Frontend tests (pull_request) Successful in 3m26s
Project CI / Native shell tests (pull_request) Has been cancelled
9ae3aba092
删除已移除 Skill 引用工具的遗留专用测试

补充 llm_router_account 表结构与用途说明
suzmii added 2 commits 2026-09-03 15:59:48 +08:00
修复 AGC 确定性 E2E 与 master 合并后的运行链路
Project CI / Backend tests (pull_request) Failing after 11s
Project CI / Frontend tests (pull_request) Successful in 2m59s
Project CI / Repository checks (pull_request) Failing after 21s
Project CI / Native shell tests (pull_request) Failing after 16m26s
e34d797336
合并 master 后 isolated AppData 配置改为私有副本,避免 Windows 安全校验拒绝硬链接。
只读 runner 状态命令显式配置 config dir,避免误读为 runner 未启用。
为 debug 构建增加仅 E2E 显式开启的确定性 Provider 路由开关,并补充回归测试。
兼容 Windows 对私有副本权限位的校验差异。
suzmii added 1 commit 2026-09-03 16:10:49 +08:00
合并master并保留双侧最新决策记录
Project CI / Frontend tests (pull_request) Successful in 3m16s
Project CI / Repository checks (pull_request) Successful in 2m37s
Project CI / Backend tests (pull_request) Successful in 7m14s
Project CI / Native shell tests (pull_request) Failing after 21m2s
c12d744d91
合入主站 AGC 请求头归属与项目命名链路改动。
保留本分支 Direct 过程卡决策记录。
保留主站登录归属、workspace 边界与 Native shell 决策记录。
kdletters reviewed 2026-09-03 16:15:48 +08:00
kdletters left a comment
Member

Genarrative PR review for head c12d744d91142fcb8bedd8affe928ecd97f7fe56:已检查完整 diff,并运行 cargo check -p api-server 及 LLM Router 相关测试(10 passed)。此前硬编码 provisioning secret 问题在当前 head 已修复,未发现明确成立且需要阻塞合并的问题。

Genarrative PR review for head c12d744d91142fcb8bedd8affe928ecd97f7fe56:已检查完整 diff,并运行 cargo check -p api-server 及 LLM Router 相关测试(10 passed)。此前硬编码 provisioning secret 问题在当前 head 已修复,未发现明确成立且需要阻塞合并的问题。
Member

不要去修改ExternalApiKey表,这都不是为了你这个需求建的

不要去修改ExternalApiKey表,这都不是为了你这个需求建的
suzmii added 1 commit 2026-09-03 19:04:07 +08:00
切换 LLM Router 凭据到专用账号表
Project CI / Backend tests (pull_request) Failing after 15s
Project CI / Repository checks (pull_request) Failing after 16s
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
6d41dc2f89
- 将 Router 账号、API Key 元数据和密文统一保存到 llm_router_account

- 增加 Router API Key 的进程内缓存并清理旧 external_api_key 兼容路径

- 更新 SpacetimeDB 绑定、后端架构文档和决策记录
suzmii added 1 commit 2026-09-03 19:04:24 +08:00
Merge branch 'master' into feat/agc-llm-router-official-chain
Project CI / Repository checks (pull_request) Successful in 3m32s
Project CI / Frontend tests (pull_request) Successful in 3m40s
Project CI / Backend tests (pull_request) Successful in 7m25s
Project CI / Native shell tests (pull_request) Failing after 13m42s
270aa38ccb
suzmii added 1 commit 2026-09-03 19:43:28 +08:00
恢复外部 API Key 表并统一 Router 账号存储
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
cbc73f111c
恢复 external_api_key 表及客户端绑定为 master 原始结构

将 LLM Router 凭据、状态、撤销和缓存统一收敛到 llm_router_account

移除后台与契约中的 purpose 字段及 Router 专用撤销 procedure

同步更新架构文档并补齐相关测试契约
kdletters reviewed 2026-09-03 19:47:50 +08:00
kdletters left a comment
Member

Genarrative PR review for head cbc73f111c8114b26c0816e959d77b5284d76a49:已检查 base 4cd53688e9944a4a24c11833721968f128a45e2a 到当前 head 的完整 diff(108 个文件),并运行 cargo test -p api-server --bins(993 passed,6 ignored,0 failed)。

未发现明确问题。

Genarrative PR review for head `cbc73f111c8114b26c0816e959d77b5284d76a49`:已检查 base `4cd53688e9944a4a24c11833721968f128a45e2a` 到当前 head 的完整 diff(108 个文件),并运行 `cargo test -p api-server --bins`(993 passed,6 ignored,0 failed)。 未发现明确问题。
suzmii added 2 commits 2026-09-03 20:09:01 +08:00
合并 origin/master 最新 UI 编辑器与 AGC 运行时变更

保留 external_api_key 恢复为 master 原始结构

保留 LLM Router 凭据统一存储于 llm_router_account 的整改

解决 App.tsx 与 appSurface 测试冲突并完成定向验证
Merge remote-tracking branch 'origin/master' into feat/agc-llm-router-official-chain
Project CI / Repository checks (pull_request) Successful in 2m31s
Project CI / Backend tests (pull_request) Successful in 8m6s
Project CI / Frontend tests (pull_request) Successful in 3m57s
Project CI / Native shell tests (pull_request) Has been cancelled
75da77dcb4
suzmii added 1 commit 2026-09-03 21:42:48 +08:00
修复 Direct MCP 路径文案泄露
Project CI / Repository checks (pull_request) Successful in 4m24s
Project CI / Frontend tests (pull_request) Successful in 4m46s
Project CI / Backend tests (pull_request) Successful in 7m44s
Project CI / Native shell tests (pull_request) Failing after 13m40s
d0d3466a56
平台无关拒绝盘符、绝对路径和上级目录

避免未审核路径出现在 Direct Codex 活动文案中
suzmii added 1 commit 2026-09-03 23:28:44 +08:00
修复 AGC 本地 Provider Smoke 路由
Project CI / Repository checks (pull_request) Successful in 3m54s
Project CI / Frontend tests (pull_request) Successful in 5m1s
Project CI / Backend tests (pull_request) Successful in 8m26s
Project CI / Native shell tests (pull_request) Successful in 18m51s
938c37ca1b
允许显式 Debug E2E 开关使用 loopback Provider

为 smoke 子进程透传环境并启用 Debug E2E 开关
suzmii requested review from kdletters 2026-09-04 08:51:22 +08:00
kdletters requested changes 2026-09-04 12:51:04 +08:00
Dismissed
kdletters left a comment
Member

审查结论:REQUEST_CHANGES

审查结论:REQUEST_CHANGES
@@ -124,0 +1039,4 @@
format!("{LLM_ROUTER_RECONCILIATION_ERROR_PREFIX}active Router Key 密文缺失")
})?;
let api_key = decrypt_router_api_key(ciphertext, encryption_secret.as_str())?;
llm_router_credential_cache().lock().await.insert(
Member

这里命中缓存后直接返回解密后的 Router key,但账户轮换、吊销和状态更新没有统一的缓存失效或版本校验。多实例下其他进程可能在 600 秒 TTL 内继续使用旧凭据,并存在旧请求在吊销后重新写回缓存的竞态。请引入共享版本/失效机制,确保不会返回 stale key。

这里命中缓存后直接返回解密后的 Router key,但账户轮换、吊销和状态更新没有统一的缓存失效或版本校验。多实例下其他进程可能在 600 秒 TTL 内继续使用旧凭据,并存在旧请求在吊销后重新写回缓存的竞态。请引入共享版本/失效机制,确保不会返回 stale key。
suzmii marked this conversation as resolved
@@ -0,0 +184,4 @@
ctx.db
.llm_router_account()
.account_key()
.delete(&account_key);
Member

当前 delete+insert 不是安全的并发 upsert。多实例并发更新时可能互相覆盖,读请求也可能观察到短暂缺口。请基于 owner+route 唯一约束使用原子 upsert,或增加版本/CAS 冲突检测并补并发测试。

当前 delete+insert 不是安全的并发 upsert。多实例并发更新时可能互相覆盖,读请求也可能观察到短暂缺口。请基于 owner+route 唯一约束使用原子 upsert,或增加版本/CAS 冲突检测并补并发测试。
suzmii marked this conversation as resolved
suzmii added 3 commits 2026-09-04 14:09:28 +08:00
新增 Router 模型目录接口并返回可用模型列表

客户端配置新增模型方案与当前选中方案字段

设置页新增模型方案卡片和管理弹层,支持方案名称、模型和推理强度

自定义下拉菜单圆角、遮罩层级与窗口边界定位,并隐藏滚动条

AGC 官方路由保留所选模型并携带客户端标记,由服务端校验后转发

补齐配置结构变更后的既有测试初始化字段
修复 Router 凭据并发一致性问题
Project CI / Repository checks (pull_request) Failing after 8m28s
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
020f7d7a7a
移除 Router Key 进程内 TTL 缓存,改为每次读取权威账号状态并即时解密当前密文

Router 账号写入改为同主键原地更新,避免 delete+insert 读取缺口

新增 owner/route 映射冲突校验,防止并发写入插入重复账号行

同步更新后端数据契约文档中的凭据读取语义
suzmii added 1 commit 2026-09-04 15:19:48 +08:00
修复 AGC 运行时配置模型方案测试断言
Project CI / Repository checks (pull_request) Successful in 4m23s
Project CI / Frontend tests (pull_request) Successful in 5m11s
Project CI / Backend tests (pull_request) Successful in 7m25s
Project CI / Native shell tests (pull_request) Failing after 15m15s
13639d9f8c
将推理档断言迁移到模型方案管理面板的推理档位选择器

补充持久化测试 fixture 的 modelProfiles 与选中方案字段

同步保存回写断言中的模型方案结构
suzmii added 1 commit 2026-09-04 15:57:30 +08:00
修复 Provider 代理错误外发 AGC 主站客户端标记
Project CI / Repository checks (pull_request) Successful in 3m13s
Project CI / Frontend tests (pull_request) Successful in 3m34s
Project CI / Backend tests (pull_request) Successful in 7m43s
Project CI / Native shell tests (pull_request) Successful in 19m55s
87c0cbd06d
仅 PlatformSession 的 /api/llm 主站路由携带 x-genarrative-client 标记

通用 Provider 与第三方凭据桥接不再自动附加该标记

补充主站路由代理的标记回归测试
suzmii requested review from kdletters 2026-09-04 16:18:36 +08:00
suzmii added 1 commit 2026-09-04 19:07:10 +08:00
Merge branch 'master' into feat/agc-llm-router-official-chain
Project CI / Repository checks (pull_request) Successful in 3m39s
Project CI / Frontend tests (pull_request) Successful in 4m0s
Project CI / Backend tests (pull_request) Successful in 8m3s
Project CI / Native shell tests (pull_request) Successful in 19m58s
76f0c8e58e
suzmii removed review request for kdletters 2026-09-05 11:52:48 +08:00
suzmii requested review from kdletters 2026-09-05 11:52:53 +08:00
kdletters requested changes 2026-09-05 19:37:54 +08:00
kdletters left a comment
Member

服务器启动未检查相关配置

服务器启动未检查相关配置
suzmii added 2 commits 2026-09-05 19:58:33 +08:00
新增后台 AGC 模型目录、别名、启停和默认项管理

客户端设置页恢复原状,对话框右下角按别名选择模型

服务端按稳定模型标识映射并校验实际模型白名单

修复 AGC 配套后端端口漂移、启动等待和 SpacetimeDB 版本检查

补充迁移、文档、启动与模型选择测试
补充服务启动配置校验并优化模型菜单
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
34e3f70409
启动时校验 LLM Router 地址、模型和相关密钥配置

将刷新操作移入模型展开菜单并修复菜单样式覆盖

更新启动运维文档与定向测试
suzmii added 1 commit 2026-09-05 20:04:24 +08:00
Merge remote-tracking branch 'origin/master' into feat/agc-llm-router-official-chain
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
0b9fb40108
# Conflicts:
#	apps/ai-game-creator-shell/scripts/check-config.mjs
#	apps/ai-game-creator-shell/src/features/runtime-config/RuntimeConfigDialog.tsx
#	apps/ai-game-creator-shell/tests/appSurface/runtime-settings.suite.ts
Author
Member

最近更新与请求处理说明

已根据最近评审意见和关联 Issue 完成一轮更新,当前分支已合并最新 master 并推送。

已完成的请求

  • 修复 Router provisioning secret 配置问题:
    • 不再依赖源码中的固定 secret。
    • 改为从部署环境变量或受保护 secret file 读取。
    • 缺少必要配置时拒绝 provisioning。
    • 保留 credential version,支持后续凭据迁移与轮换。
  • 保持 ExternalApiKey 表职责不变:
    • Router 账号及凭据继续使用独立的 llm_router_account
    • 没有为了本需求扩展或改造普通 ExternalApiKey 表。
  • 增加服务器启动配置校验:
    • 启动时校验官方 Router 地址和 HTTPS。
    • 校验固定 Router 模型。
    • 校验 provisioning secret、Router 管理员 Token 和凭据加密配置。
    • 配置缺失或不匹配时,API/All 角色直接启动失败,不再等首次请求才报错。
    • test 环境保留 loopback fixture,worker-only 角色跳过无关校验。

模型选择与白名单

  • 增加后台 AGC 模型目录管理。
  • 后台可以配置:
    • 模型稳定标识
    • 用户可见别名
    • 实际 Router 模型名
    • 启用状态
    • 默认模型
  • 当前默认配置:
    • 高质量 → gpt-6-astra
    • 快速 → gpt-5.6-luna
  • 客户端只接收稳定标识和别名,不接收实际模型名。
  • 服务端根据稳定标识映射实际模型名,并拒绝未知或停用模型。
  • 使用 revision 乐观锁,避免后台并发保存覆盖。

客户端 UI

  • 设置页不再承担模型方案管理或模型选择。
  • 对话框右下角直接选择模型。
  • 客户端只显示后台配置的模型别名。
  • 模型刷新操作已放入展开菜单内部。
  • 模型选择器和展开菜单已调整为更简洁的 Codex 风格:
    • 紧凑触发器
    • 白底浮层
    • 轻边框和阴影
    • 选中项高亮和勾选状态
    • 加载失败时仍可从菜单刷新

启动链路修复

  • 修复 AGC backend 模式遗漏检查 BgFilter worker 端口的问题。
  • API 和 worker 端口冲突时会分别漂移并同步实际地址。
  • AGC 先等待前端和配套后端全部就绪,再启动 Tauri。
  • 自动发布保留现有数据库数据,不使用清库解决启动问题。
  • 增加 CLI 与 spacetimedb-standalone 版本一致性校验,避免 CLI/standalone 版本错配导致 procedure 调用超时。

验证

已完成:

  • AGC typecheck
  • Admin Web typecheck
  • Rust 定向测试
  • AGC 模型选择测试
  • 后台模型配置页面测试
  • 启动脚本测试
  • SpacetimeDB schema 检查
  • 编码检查
  • git diff --check

当前 PR 分支已包含以上修改,并已合并最新 master

## 最近更新与请求处理说明 已根据最近评审意见和关联 Issue 完成一轮更新,当前分支已合并最新 `master` 并推送。 ### 已完成的请求 - 修复 Router provisioning secret 配置问题: - 不再依赖源码中的固定 secret。 - 改为从部署环境变量或受保护 secret file 读取。 - 缺少必要配置时拒绝 provisioning。 - 保留 credential version,支持后续凭据迁移与轮换。 - 保持 `ExternalApiKey` 表职责不变: - Router 账号及凭据继续使用独立的 `llm_router_account`。 - 没有为了本需求扩展或改造普通 `ExternalApiKey` 表。 - 增加服务器启动配置校验: - 启动时校验官方 Router 地址和 HTTPS。 - 校验固定 Router 模型。 - 校验 provisioning secret、Router 管理员 Token 和凭据加密配置。 - 配置缺失或不匹配时,API/All 角色直接启动失败,不再等首次请求才报错。 - test 环境保留 loopback fixture,worker-only 角色跳过无关校验。 ### 模型选择与白名单 - 增加后台 AGC 模型目录管理。 - 后台可以配置: - 模型稳定标识 - 用户可见别名 - 实际 Router 模型名 - 启用状态 - 默认模型 - 当前默认配置: - 高质量 → `gpt-6-astra` - 快速 → `gpt-5.6-luna` - 客户端只接收稳定标识和别名,不接收实际模型名。 - 服务端根据稳定标识映射实际模型名,并拒绝未知或停用模型。 - 使用 revision 乐观锁,避免后台并发保存覆盖。 ### 客户端 UI - 设置页不再承担模型方案管理或模型选择。 - 对话框右下角直接选择模型。 - 客户端只显示后台配置的模型别名。 - 模型刷新操作已放入展开菜单内部。 - 模型选择器和展开菜单已调整为更简洁的 Codex 风格: - 紧凑触发器 - 白底浮层 - 轻边框和阴影 - 选中项高亮和勾选状态 - 加载失败时仍可从菜单刷新 ### 启动链路修复 - 修复 AGC backend 模式遗漏检查 BgFilter worker 端口的问题。 - API 和 worker 端口冲突时会分别漂移并同步实际地址。 - AGC 先等待前端和配套后端全部就绪,再启动 Tauri。 - 自动发布保留现有数据库数据,不使用清库解决启动问题。 - 增加 CLI 与 `spacetimedb-standalone` 版本一致性校验,避免 CLI/standalone 版本错配导致 procedure 调用超时。 ### 验证 已完成: - AGC typecheck - Admin Web typecheck - Rust 定向测试 - AGC 模型选择测试 - 后台模型配置页面测试 - 启动脚本测试 - SpacetimeDB schema 检查 - 编码检查 - `git diff --check` 当前 PR 分支已包含以上修改,并已合并最新 `master`。
Author
Member

image.png
image.png

![image.png](/attachments/8ea49de5-b683-4275-a14e-7a1c835b585b) ![image.png](/attachments/3635883c-cf72-4622-99aa-6e0415cefc49)
suzmii added 1 commit 2026-09-05 20:11:53 +08:00
Merge remote-tracking branch 'origin/master' into feat/agc-llm-router-official-chain
Project CI / Repository checks (pull_request) Successful in 2m38s
Project CI / Frontend tests (pull_request) Successful in 3m46s
Project CI / Backend tests (pull_request) Successful in 6m35s
Project CI / Native shell tests (pull_request) Failing after 8m14s
78f547d26d
# Conflicts:
#	apps/ai-game-creator-shell/tests/appSurface/runtime-settings.suite.ts
suzmii added 1 commit 2026-09-06 00:36:58 +08:00
接入 LLM Router 累计额度结算
Project CI / Repository checks (pull_request) Successful in 2m36s
Project CI / Frontend tests (pull_request) Successful in 3m15s
Project CI / Backend tests (pull_request) Successful in 7m35s
Project CI / Native shell tests (pull_request) Failing after 7m43s
736a1b6ac6
按 Router used_quota 累计值与首次基线结算泥点
新增原子 checkpoint 事务及 llm_router_consume 钱包流水
同步额度查询校验、前端展示、生成绑定和技术文档
Author
Member

LLM Router 累计额度结算逻辑

当前计费以 Router 用户账号的累计 used_quota 为权威数据,不再根据单次请求的 token 数量估算成本,也不依赖响应中的 cost 字段。

Router 当前配置为:

500000 quota = 1 美元
1 美元数值 = 10 泥点
50000 quota = 1 泥点

结算时不使用美元汇率。

数据库通过 llm_router_billing_checkpoint 表,为每个 Router 账号记录已经实际扣费到的累计额度 settled_quota

计算公式如下:

待结算额度 = max(Router.used_quota - settled_quota, 0)

应扣泥点 = min(
  待结算额度 / 50000,
  当前可消费泥点
)

新的 settled_quota =
  原 settled_quota + 应扣泥点 × 50000

除法采用整数除法,不足 50000 的额度不会丢失,而是继续留在 Router 累计额度中,等待后续消费达到一个完整泥点后再结算。

例如:

数据库 settled_quota = 100000
Router used_quota = 223456

待结算额度 = 123456
本次扣除泥点 = 2
新的 settled_quota = 200000
剩余未结算额度 = 23456

如果用户当前只能消费 1 泥点,则本次只扣 1 点,settled_quota 只推进到 150000,剩余 73456 额度继续留待后续结算。

对于没有 checkpoint 的账号,首次同步直接将当前 used_quota 记录为初始基线,不追扣上线前的历史消费。首次基线可以不是 50000 的整数倍。

模型调用前会先同步一次累计额度并检查余额;模型成功返回后再同步一次。失败、断流或进程退出导致后置同步未完成时,不会把已经成功的模型响应改成失败,尚未结算的消费会在下一次模型调用前补结算。

扣除泥点、写入 llm_router_consume 钱包流水和推进 settled_quota 在同一个数据库事务中完成。任一步失败都会整体回滚,避免重复扣费、只扣余额但不推进游标,或者推进游标却没有实际扣费。

重复快照和较旧快照不会使 settled_quota 倒退;Router 账号 ID 与数据库记录不一致时拒绝结算,需要人工核对或迁移。

# LLM Router 累计额度结算逻辑 当前计费以 Router 用户账号的累计 `used_quota` 为权威数据,不再根据单次请求的 token 数量估算成本,也不依赖响应中的 cost 字段。 Router 当前配置为: ```text 500000 quota = 1 美元 1 美元数值 = 10 泥点 50000 quota = 1 泥点 ``` 结算时不使用美元汇率。 数据库通过 `llm_router_billing_checkpoint` 表,为每个 Router 账号记录已经实际扣费到的累计额度 `settled_quota`。 计算公式如下: ```text 待结算额度 = max(Router.used_quota - settled_quota, 0) 应扣泥点 = min( 待结算额度 / 50000, 当前可消费泥点 ) 新的 settled_quota = 原 settled_quota + 应扣泥点 × 50000 ``` 除法采用整数除法,不足 50000 的额度不会丢失,而是继续留在 Router 累计额度中,等待后续消费达到一个完整泥点后再结算。 例如: ```text 数据库 settled_quota = 100000 Router used_quota = 223456 待结算额度 = 123456 本次扣除泥点 = 2 新的 settled_quota = 200000 剩余未结算额度 = 23456 ``` 如果用户当前只能消费 1 泥点,则本次只扣 1 点,`settled_quota` 只推进到 150000,剩余 73456 额度继续留待后续结算。 对于没有 checkpoint 的账号,首次同步直接将当前 `used_quota` 记录为初始基线,不追扣上线前的历史消费。首次基线可以不是 50000 的整数倍。 模型调用前会先同步一次累计额度并检查余额;模型成功返回后再同步一次。失败、断流或进程退出导致后置同步未完成时,不会把已经成功的模型响应改成失败,尚未结算的消费会在下一次模型调用前补结算。 扣除泥点、写入 `llm_router_consume` 钱包流水和推进 `settled_quota` 在同一个数据库事务中完成。任一步失败都会整体回滚,避免重复扣费、只扣余额但不推进游标,或者推进游标却没有实际扣费。 重复快照和较旧快照不会使 `settled_quota` 倒退;Router 账号 ID 与数据库记录不一致时拒绝结算,需要人工核对或迁移。
suzmii added 1 commit 2026-09-06 01:17:00 +08:00
修复AGC配置测试字段
Project CI / Repository checks (pull_request) Successful in 2m46s
Project CI / Frontend tests (pull_request) Successful in 2m55s
Project CI / Backend tests (pull_request) Successful in 7m6s
Project CI / Native shell tests (pull_request) Successful in 18m3s
6166094a3c
同步配置测试夹具使用 selected_model_id

移除已删除的 model_profiles 与 selected_model_profile_id 字段
suzmii requested review from kdletters 2026-09-06 09:45:46 +08:00
kdletters merged commit 2975062c69 into master 2026-09-06 16:49:13 +08:00
kdletters deleted branch feat/agc-llm-router-official-chain 2026-09-06 16:49:14 +08:00
Sign in to join this conversation.