From c2354f855f34d7a5c56db5f2ed63977d2b486656 Mon Sep 17 00:00:00 2001 From: suzmii Date: Tue, 1 Sep 2026 12:03:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E6=95=9B=20AGC=20=E5=AE=98=E6=96=B9?= =?UTF-8?q?=20LLM=20Router=20=E8=B4=A6=E5=8F=B7=E9=93=BE=E8=B7=AF=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=20llm=5Frouter=5Faccount=20=E8=A1=A8?= =?UTF-8?q?=E3=80=81procedures=20=E4=B8=8E=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=20api-server=20=E6=94=B9=E4=B8=BA=20New=20AP?= =?UTF-8?q?I=20=E7=AE=A1=E7=90=86=E5=91=98=E6=B5=81=E7=A8=8B=E7=AD=BE?= =?UTF-8?q?=E5=8F=91=E7=8B=AC=E7=AB=8B=20Router=20=E8=B4=A6=E5=8F=B7=20Rou?= =?UTF-8?q?ter=20=E6=88=90=E5=8A=9F=E5=90=8E=E6=89=A7=E8=A1=8C=E5=B9=82?= =?UTF-8?q?=E7=AD=89=E5=90=8E=E7=BD=AE=E6=B3=A5=E7=82=B9=E6=89=A3=E8=B4=B9?= =?UTF-8?q?=20=E7=94=9F=E4=BA=A7=E5=A4=96=E9=94=81=E5=AE=9A=E9=9D=9E?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=20Router=20=E6=8E=A7=E5=88=B6=E9=9D=A2?= =?UTF-8?q?=E4=B8=BA=20loopback=20AGC=20=E6=AD=A3=E5=BC=8F=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E6=B8=85=E9=99=A4=E6=89=8B=E5=B7=A5=20Provider=20?= =?UTF-8?q?=E5=87=AD=E6=8D=AE=E5=B9=B6=E9=94=81=E5=AE=9A=E5=AE=98=E6=96=B9?= =?UTF-8?q?=E4=BB=A3=E7=90=86=20AGC=20=E7=8A=B6=E6=80=81=E9=9D=A2=E5=8F=AA?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E8=B4=A6=E5=8F=B7=E5=87=AD=E6=8D=AE=E4=B8=8E?= =?UTF-8?q?=E5=AE=98=E6=96=B9=E8=B7=AF=E7=94=B1=E5=AE=89=E5=85=A8=E5=85=83?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=20=E5=90=8E=E5=8F=B0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E8=A1=A8=E6=9F=A5=E8=AF=A2=E9=80=82=E9=85=8D=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E5=87=AD=E6=8D=AE=E7=8A=B6=E6=80=81=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=20=E8=A1=A5=E5=85=85=20AGC=20=E4=B8=8E=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E3=80=81=E7=8E=AF=E5=A2=83=E7=A4=BA=E4=BE=8B?= =?UTF-8?q?=E5=92=8C=E6=9E=B6=E6=9E=84=E6=96=87=E6=A1=A3=20=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=20dev-stack=20=E7=8A=B6=E6=80=81=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E6=8C=89=E4=BB=93=E5=BA=93=E8=84=9A=E6=9C=AC=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/admin-web/src/api/adminApiTypes.ts | 2 +- .../pages/AdminDatabaseTablesPage.test.tsx | 4 +- .../src/pages/AdminDatabaseTablesPage.tsx | 4 +- .../scripts/check-config.mjs | 2 +- .../src-tauri/src/agent/codex_app_server.rs | 81 +- .../src-tauri/src/agent/direct_runtime.rs | 170 +- .../src-tauri/src/agent/direct_tool_bridge.rs | 156 +- .../src-tauri/src/agent/direct_tools_mcp.rs | 99 +- .../src-tauri/src/cli.rs | 62 +- .../src-tauri/src/config.rs | 253 +- .../src-tauri/src/main.rs | 30 +- .../src-tauri/src/tests/configuration.rs | 214 +- apps/ai-game-creator-shell/src/App.tsx | 22 +- apps/ai-game-creator-shell/src/app/types.ts | 6 - .../src/features/agent-runtime/model.ts | 22 +- .../app-shell/developerAgentControls.ts | 2 +- .../app-shell/useDeveloperAgentPanel.ts | 32 +- .../project-summary/agentPresentation.ts | 157 +- .../projectGuidanceSummaries.ts | 2 +- .../projectPlanningSummaries.ts | 2 +- .../projectSummaryConstants.ts | 2 +- .../runtime-config/RuntimeConfigDialog.tsx | 103 +- .../tests/agentRuntimeModel.test.ts | 18 +- .../developer-agent-window.suite.ts | 6 +- .../tests/appSurface/home.suite.ts | 12 +- .../appSurface/project-commands.suite.ts | 30 +- .../appSurface/project-conversation.suite.ts | 4 +- .../assert-planning-and-status-shortcuts.ts | 2 +- .../assert-playtest-and-release-shortcuts.ts | 4 +- .../assert-project-and-design-shortcuts.ts | 20 +- .../appSurface/runtime-settings.suite.ts | 152 +- deploy/env/api-server.env.example | 4 + .../shared-memory/decision-log.md | 19 +- ...】server-rs与SpacetimeDB数据契约-2026-05-15.md | 5 +- ...构】外部OpenAPI与APIKey接入方案-2026-06-19.md | 12 +- scripts/dev.mjs | 11 +- server-rs/crates/api-server/src/admin.rs | 18 +- server-rs/crates/api-server/src/config.rs | 181 +- .../api-server/src/external_api_keys.rs | 2065 ++++++++++++++--- server-rs/crates/api-server/src/llm/mod.rs | 499 ++-- server-rs/crates/api-server/src/main.rs | 51 +- .../crates/api-server/src/modules/profile.rs | 6 +- .../crates/api-server/src/password_entry.rs | 28 +- .../api-server/src/password_management.rs | 23 + server-rs/crates/api-server/src/phone_auth.rs | 38 +- .../crates/api-server/src/wechat/auth.rs | 112 +- .../crates/shared-contracts/src/admin.rs | 49 + .../crates/spacetime-client/src/active.rs | 1 + .../spacetime-client/src/active/mapper.rs | 3 + .../src/active/mapper/llm_router_account.rs | 103 + .../spacetime-client/src/external_api_key.rs | 25 + server-rs/crates/spacetime-client/src/lib.rs | 2 + .../src/llm_router_account.rs | 52 + .../spacetime-client/src/module_bindings.rs | 39 + ...llm_router_account_and_return_procedure.rs | 59 + .../llm_router_account_get_input_type.rs | 16 + ...lm_router_account_procedure_result_type.rs | 19 + .../llm_router_account_snapshot_type.rs | 30 + .../llm_router_account_table.rs | 228 ++ .../llm_router_account_type.rs | 103 + .../llm_router_account_upsert_input_type.rs | 29 + ...llm_router_api_key_and_return_procedure.rs | 59 + ...llm_router_account_and_return_procedure.rs | 59 + .../crates/spacetime-module/src/active.rs | 3 + .../src/external_api_key_storage.rs | 38 +- server-rs/crates/spacetime-module/src/lib.rs | 3 + .../src/llm_router_account.rs | 230 ++ .../crates/spacetime-module/src/migration.rs | 2 + 68 files changed, 4653 insertions(+), 1246 deletions(-) create mode 100644 server-rs/crates/spacetime-client/src/active/mapper/llm_router_account.rs create mode 100644 server-rs/crates/spacetime-client/src/llm_router_account.rs create mode 100644 server-rs/crates/spacetime-client/src/module_bindings/get_llm_router_account_and_return_procedure.rs create mode 100644 server-rs/crates/spacetime-client/src/module_bindings/llm_router_account_get_input_type.rs create mode 100644 server-rs/crates/spacetime-client/src/module_bindings/llm_router_account_procedure_result_type.rs create mode 100644 server-rs/crates/spacetime-client/src/module_bindings/llm_router_account_snapshot_type.rs create mode 100644 server-rs/crates/spacetime-client/src/module_bindings/llm_router_account_table.rs create mode 100644 server-rs/crates/spacetime-client/src/module_bindings/llm_router_account_type.rs create mode 100644 server-rs/crates/spacetime-client/src/module_bindings/llm_router_account_upsert_input_type.rs create mode 100644 server-rs/crates/spacetime-client/src/module_bindings/revoke_llm_router_api_key_and_return_procedure.rs create mode 100644 server-rs/crates/spacetime-client/src/module_bindings/upsert_llm_router_account_and_return_procedure.rs create mode 100644 server-rs/crates/spacetime-module/src/llm_router_account.rs diff --git a/apps/admin-web/src/api/adminApiTypes.ts b/apps/admin-web/src/api/adminApiTypes.ts index 765278ed7..0a09be7ca 100644 --- a/apps/admin-web/src/api/adminApiTypes.ts +++ b/apps/admin-web/src/api/adminApiTypes.ts @@ -252,7 +252,7 @@ export interface AdminExternalApiKeyListQuery { createdAfter?: string; createdBefore?: string; status?: 'active' | 'revoked'; - purpose?: 'external-editor' | 'agc-llm'; + purpose?: 'external-editor' | 'llm-router'; limit?: number; offset?: number; sortColumn?: diff --git a/apps/admin-web/src/pages/AdminDatabaseTablesPage.test.tsx b/apps/admin-web/src/pages/AdminDatabaseTablesPage.test.tsx index 89561b438..ad00e8110 100644 --- a/apps/admin-web/src/pages/AdminDatabaseTablesPage.test.tsx +++ b/apps/admin-web/src/pages/AdminDatabaseTablesPage.test.tsx @@ -105,9 +105,9 @@ test('external_api_key 使用专用安全查询且详情不展示原始 JSON', a { keyId: 'external-api-key-1', ownerUserId: 'user-1', - name: '陶泥儿 AGC 官方 LLM(本机)', + name: '陶泥儿 LLM Router 官方账号(服务端)', keyPrefix: 'tnr_sk_fixture', - purpose: 'agc-llm', + purpose: 'llm-router', scopes: ['llm:responses'], createdAt: '2026-08-29T00:00:00Z', lastUsedAt: null, diff --git a/apps/admin-web/src/pages/AdminDatabaseTablesPage.tsx b/apps/admin-web/src/pages/AdminDatabaseTablesPage.tsx index 0629b4f27..9895ccf63 100644 --- a/apps/admin-web/src/pages/AdminDatabaseTablesPage.tsx +++ b/apps/admin-web/src/pages/AdminDatabaseTablesPage.tsx @@ -686,7 +686,7 @@ function AdminExternalApiKeysPanel({ const [createdAfter, setCreatedAfter] = useState(''); const [createdBefore, setCreatedBefore] = useState(''); const [status, setStatus] = useState<'' | 'active' | 'revoked'>(''); - const [purpose, setPurpose] = useState<'' | 'external-editor' | 'agc-llm'>( + const [purpose, setPurpose] = useState<'' | 'external-editor' | 'llm-router'>( '', ); const [limit, setLimit] = useState('100'); @@ -836,7 +836,7 @@ function AdminExternalApiKeysPanel({ > - +