@downcity/city 1.1.39 → 1.1.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -9
- package/bin/cli/Index.js +2 -0
- package/bin/cli/Index.js.map +1 -1
- package/bin/cli/agent/AgentChat.d.ts +2 -1
- package/bin/cli/agent/AgentChat.d.ts.map +1 -1
- package/bin/cli/agent/AgentChat.js +93 -214
- package/bin/cli/agent/AgentChat.js.map +1 -1
- package/bin/cli/agent/AgentChatTypes.d.ts +8 -12
- package/bin/cli/agent/AgentChatTypes.d.ts.map +1 -1
- package/bin/cli/agent/AgentHistory.js +2 -2
- package/bin/cli/agent/AgentHistory.js.map +1 -1
- package/bin/cli/agent/AgentManager.d.ts.map +1 -1
- package/bin/cli/agent/AgentManager.js +26 -27
- package/bin/cli/agent/AgentManager.js.map +1 -1
- package/bin/cli/agent/AgentManagerTypes.d.ts +2 -2
- package/bin/cli/agent/AgentManagerTypes.d.ts.map +1 -1
- package/bin/cli/agent/AgentReset.js +4 -4
- package/bin/cli/agent/AgentReset.js.map +1 -1
- package/bin/cli/agent/AgentSelection.js +6 -6
- package/bin/cli/agent/AgentSelection.js.map +1 -1
- package/bin/cli/agent/AgentSelectionTypes.d.ts +1 -1
- package/bin/cli/agent/AgentSelectionTypes.d.ts.map +1 -1
- package/bin/cli/agent/Init.js +10 -10
- package/bin/cli/agent/Init.js.map +1 -1
- package/bin/cli/agent/Restart.js +2 -2
- package/bin/cli/agent/Restart.js.map +1 -1
- package/bin/cli/agent/Run.d.ts +1 -1
- package/bin/cli/agent/Run.d.ts.map +1 -1
- package/bin/cli/agent/Run.js +37 -17
- package/bin/cli/agent/Run.js.map +1 -1
- package/bin/cli/agent/Start.js +2 -2
- package/bin/cli/agent/Start.js.map +1 -1
- package/bin/cli/agent/Stop.js +2 -2
- package/bin/cli/agent/Stop.js.map +1 -1
- package/bin/cli/control-plane/ControlPlaneProcess.js +5 -5
- package/bin/cli/control-plane/ControlPlaneProcess.js.map +1 -1
- package/bin/cli/model/ModelCreateCommand.js +1 -1
- package/bin/cli/model/ModelCreateCommand.js.map +1 -1
- package/bin/cli/model/ModelManageCommand.d.ts.map +1 -1
- package/bin/cli/model/ModelManageCommand.js +5 -3
- package/bin/cli/model/ModelManageCommand.js.map +1 -1
- package/bin/cli/model/ModelManager.js +3 -3
- package/bin/cli/model/ModelManager.js.map +1 -1
- package/bin/cli/model/ModelSupport.d.ts +0 -1
- package/bin/cli/model/ModelSupport.d.ts.map +1 -1
- package/bin/cli/model/ModelSupport.js +2 -11
- package/bin/cli/model/ModelSupport.js.map +1 -1
- package/bin/cli/shared/CliReporterTypes.d.ts +1 -1
- package/bin/cli/shared/Config.js +2 -2
- package/bin/cli/shared/Config.js.map +1 -1
- package/bin/cli/shared/Env.d.ts +1 -1
- package/bin/cli/shared/Env.d.ts.map +1 -1
- package/bin/cli/shared/Env.js +18 -149
- package/bin/cli/shared/Env.js.map +1 -1
- package/bin/cli/shared/IndexAgentCommand.d.ts.map +1 -1
- package/bin/cli/shared/IndexAgentCommand.js +3 -3
- package/bin/cli/shared/IndexAgentCommand.js.map +1 -1
- package/bin/cli/shared/IndexSupport.d.ts +3 -3
- package/bin/cli/shared/IndexSupport.d.ts.map +1 -1
- package/bin/cli/shared/IndexSupport.js +14 -8
- package/bin/cli/shared/IndexSupport.js.map +1 -1
- package/bin/cli/shared/ManagedPluginActionCommands.d.ts.map +1 -1
- package/bin/cli/shared/ManagedPluginActionCommands.js +5 -4
- package/bin/cli/shared/ManagedPluginActionCommands.js.map +1 -1
- package/bin/cli/shared/ManagedPluginRemote.d.ts.map +1 -1
- package/bin/cli/shared/ManagedPluginRemote.js +4 -4
- package/bin/cli/shared/ManagedPluginRemote.js.map +1 -1
- package/bin/cli/shared/PluginTargetSupport.d.ts +2 -2
- package/bin/cli/shared/PluginTargetSupport.d.ts.map +1 -1
- package/bin/cli/shared/PluginTargetSupport.js +19 -19
- package/bin/cli/shared/PluginTargetSupport.js.map +1 -1
- package/bin/cli/shared/Plugins.js +10 -10
- package/bin/cli/shared/Plugins.js.map +1 -1
- package/bin/cli/shared/PublicHostEnv.d.ts +1 -1
- package/bin/cli/shared/PublicHostEnv.js +2 -2
- package/bin/cli/shared/PublicHostEnv.js.map +1 -1
- package/bin/cli/shared/Terminal.d.ts +13 -0
- package/bin/cli/shared/Terminal.d.ts.map +1 -0
- package/bin/cli/shared/Terminal.js +22 -0
- package/bin/cli/shared/Terminal.js.map +1 -0
- package/bin/config/DowncitySchema.d.ts.map +1 -1
- package/bin/config/DowncitySchema.js +3 -111
- package/bin/config/DowncitySchema.js.map +1 -1
- package/bin/config/Paths.d.ts +0 -56
- package/bin/config/Paths.d.ts.map +1 -1
- package/bin/config/Paths.js +9 -51
- package/bin/config/Paths.js.map +1 -1
- package/bin/control/ControlGateway.js +1 -1
- package/bin/control/ControlGateway.js.map +1 -1
- package/bin/control/EnvApiRoutes.d.ts +1 -1
- package/bin/control/EnvApiRoutes.d.ts.map +1 -1
- package/bin/control/EnvApiRoutes.js +7 -79
- package/bin/control/EnvApiRoutes.js.map +1 -1
- package/bin/control/PlatformApiRoutes.d.ts +2 -2
- package/bin/control/PlatformApiRoutes.d.ts.map +1 -1
- package/bin/control/PlatformApiRoutes.js +2 -2
- package/bin/control/PlatformApiRoutes.js.map +1 -1
- package/bin/control/gateway/AgentActions.d.ts +2 -2
- package/bin/control/gateway/AgentActions.d.ts.map +1 -1
- package/bin/control/gateway/AgentActions.js +7 -7
- package/bin/control/gateway/AgentActions.js.map +1 -1
- package/bin/control/gateway/AgentCatalog.d.ts +3 -6
- package/bin/control/gateway/AgentCatalog.d.ts.map +1 -1
- package/bin/control/gateway/AgentCatalog.js +16 -18
- package/bin/control/gateway/AgentCatalog.js.map +1 -1
- package/bin/control/instant/InstantSessionRunner.d.ts.map +1 -1
- package/bin/control/instant/InstantSessionRunner.js +3 -1
- package/bin/control/instant/InstantSessionRunner.js.map +1 -1
- package/bin/env/ProcessEnv.d.ts +24 -0
- package/bin/env/ProcessEnv.d.ts.map +1 -0
- package/bin/env/ProcessEnv.js +41 -0
- package/bin/env/ProcessEnv.js.map +1 -0
- package/bin/http/auth/AuthEnv.d.ts +1 -1
- package/bin/http/auth/AuthEnv.js +1 -1
- package/bin/model/runtime/CreateRuntimeModel.d.ts +8 -0
- package/bin/model/runtime/CreateRuntimeModel.d.ts.map +1 -1
- package/bin/model/runtime/CreateRuntimeModel.js +43 -37
- package/bin/model/runtime/CreateRuntimeModel.js.map +1 -1
- package/bin/model/service/ModelPoolService.d.ts +1 -1
- package/bin/model/service/ModelPoolService.d.ts.map +1 -1
- package/bin/model/service/ModelPoolService.js +8 -6
- package/bin/model/service/ModelPoolService.js.map +1 -1
- package/bin/platform/store/StoreEnvRepository.d.ts +5 -49
- package/bin/platform/store/StoreEnvRepository.d.ts.map +1 -1
- package/bin/platform/store/StoreEnvRepository.js +31 -178
- package/bin/platform/store/StoreEnvRepository.js.map +1 -1
- package/bin/platform/store/StoreSchema.js +3 -44
- package/bin/platform/store/StoreSchema.js.map +1 -1
- package/bin/platform/store/index.d.ts +9 -45
- package/bin/platform/store/index.d.ts.map +1 -1
- package/bin/platform/store/index.js +12 -62
- package/bin/platform/store/index.js.map +1 -1
- package/bin/platform/store/schema.d.ts +2 -2
- package/bin/platform/store/schema.js +2 -2
- package/bin/process/daemon/Api.d.ts +1 -1
- package/bin/process/daemon/CliArgs.d.ts +1 -0
- package/bin/process/daemon/CliArgs.d.ts.map +1 -1
- package/bin/process/daemon/CliArgs.js +20 -1
- package/bin/process/daemon/CliArgs.js.map +1 -1
- package/bin/process/daemon/Client.d.ts +18 -2
- package/bin/process/daemon/Client.d.ts.map +1 -1
- package/bin/process/daemon/Client.js +70 -20
- package/bin/process/daemon/Client.js.map +1 -1
- package/bin/process/daemon/Manager.d.ts.map +1 -1
- package/bin/process/daemon/Manager.js +2 -1
- package/bin/process/daemon/Manager.js.map +1 -1
- package/bin/terminal/admin/auth-error.d.ts +34 -0
- package/bin/terminal/admin/auth-error.d.ts.map +1 -0
- package/bin/terminal/admin/auth-error.js +51 -0
- package/bin/terminal/admin/auth-error.js.map +1 -0
- package/bin/terminal/admin/commands/accounts.d.ts +6 -0
- package/bin/terminal/admin/commands/accounts.d.ts.map +1 -0
- package/bin/terminal/admin/commands/accounts.js +44 -0
- package/bin/terminal/admin/commands/accounts.js.map +1 -0
- package/bin/terminal/admin/commands/balance.d.ts +6 -0
- package/bin/terminal/admin/commands/balance.d.ts.map +1 -0
- package/bin/terminal/admin/commands/balance.js +153 -0
- package/bin/terminal/admin/commands/balance.js.map +1 -0
- package/bin/terminal/admin/commands/config.d.ts +10 -0
- package/bin/terminal/admin/commands/config.d.ts.map +1 -0
- package/bin/terminal/admin/commands/config.js +11 -0
- package/bin/terminal/admin/commands/config.js.map +1 -0
- package/bin/terminal/admin/commands/custom.d.ts +6 -0
- package/bin/terminal/admin/commands/custom.d.ts.map +1 -0
- package/bin/terminal/admin/commands/custom.js +47 -0
- package/bin/terminal/admin/commands/custom.js.map +1 -0
- package/bin/terminal/admin/commands/instruction.d.ts +9 -0
- package/bin/terminal/admin/commands/instruction.d.ts.map +1 -0
- package/bin/terminal/admin/commands/instruction.js +10 -0
- package/bin/terminal/admin/commands/instruction.js.map +1 -0
- package/bin/terminal/admin/commands/models.d.ts +14 -0
- package/bin/terminal/admin/commands/models.d.ts.map +1 -0
- package/bin/terminal/admin/commands/models.js +61 -0
- package/bin/terminal/admin/commands/models.js.map +1 -0
- package/bin/terminal/admin/commands/payment.d.ts +6 -0
- package/bin/terminal/admin/commands/payment.d.ts.map +1 -0
- package/bin/terminal/admin/commands/payment.js +59 -0
- package/bin/terminal/admin/commands/payment.js.map +1 -0
- package/bin/terminal/admin/commands/products.d.ts +6 -0
- package/bin/terminal/admin/commands/products.d.ts.map +1 -0
- package/bin/terminal/admin/commands/products.js +80 -0
- package/bin/terminal/admin/commands/products.js.map +1 -0
- package/bin/terminal/admin/commands/service-env.d.ts +11 -0
- package/bin/terminal/admin/commands/service-env.d.ts.map +1 -0
- package/bin/terminal/admin/commands/service-env.js +248 -0
- package/bin/terminal/admin/commands/service-env.js.map +1 -0
- package/bin/terminal/admin/commands/usage.d.ts +6 -0
- package/bin/terminal/admin/commands/usage.d.ts.map +1 -0
- package/bin/terminal/admin/commands/usage.js +44 -0
- package/bin/terminal/admin/commands/usage.js.map +1 -0
- package/bin/terminal/admin/loop.d.ts +6 -0
- package/bin/terminal/admin/loop.d.ts.map +1 -0
- package/bin/terminal/admin/loop.js +70 -0
- package/bin/terminal/admin/loop.js.map +1 -0
- package/bin/terminal/agent/pi-agent.d.ts +15 -0
- package/bin/terminal/agent/pi-agent.d.ts.map +1 -0
- package/bin/terminal/agent/pi-agent.js +136 -0
- package/bin/terminal/agent/pi-agent.js.map +1 -0
- package/bin/terminal/app.d.ts +13 -0
- package/bin/terminal/app.d.ts.map +1 -0
- package/bin/terminal/app.js +123 -0
- package/bin/terminal/app.js.map +1 -0
- package/bin/terminal/auth/admin.d.ts +8 -0
- package/bin/terminal/auth/admin.d.ts.map +1 -0
- package/bin/terminal/auth/admin.js +18 -0
- package/bin/terminal/auth/admin.js.map +1 -0
- package/bin/terminal/auth/mode-select.d.ts +11 -0
- package/bin/terminal/auth/mode-select.d.ts.map +1 -0
- package/bin/terminal/auth/mode-select.js +33 -0
- package/bin/terminal/auth/mode-select.js.map +1 -0
- package/bin/terminal/auth/server-switch.d.ts +22 -0
- package/bin/terminal/auth/server-switch.d.ts.map +1 -0
- package/bin/terminal/auth/server-switch.js +241 -0
- package/bin/terminal/auth/server-switch.js.map +1 -0
- package/bin/terminal/auth/user.d.ts +19 -0
- package/bin/terminal/auth/user.d.ts.map +1 -0
- package/bin/terminal/auth/user.js +261 -0
- package/bin/terminal/auth/user.js.map +1 -0
- package/bin/terminal/core/browser.d.ts +12 -0
- package/bin/terminal/core/browser.d.ts.map +1 -0
- package/bin/terminal/core/browser.js +29 -0
- package/bin/terminal/core/browser.js.map +1 -0
- package/bin/terminal/core/env.d.ts +15 -0
- package/bin/terminal/core/env.d.ts.map +1 -0
- package/bin/terminal/core/env.js +67 -0
- package/bin/terminal/core/env.js.map +1 -0
- package/bin/terminal/core/session.d.ts +97 -0
- package/bin/terminal/core/session.d.ts.map +1 -0
- package/bin/terminal/core/session.js +342 -0
- package/bin/terminal/core/session.js.map +1 -0
- package/bin/terminal/core/stripe.d.ts +26 -0
- package/bin/terminal/core/stripe.d.ts.map +1 -0
- package/bin/terminal/core/stripe.js +22 -0
- package/bin/terminal/core/stripe.js.map +1 -0
- package/bin/terminal/core/ui.d.ts +29 -0
- package/bin/terminal/core/ui.d.ts.map +1 -0
- package/bin/terminal/core/ui.js +60 -0
- package/bin/terminal/core/ui.js.map +1 -0
- package/bin/terminal/core/update.d.ts +20 -0
- package/bin/terminal/core/update.d.ts.map +1 -0
- package/bin/terminal/core/update.js +193 -0
- package/bin/terminal/core/update.js.map +1 -0
- package/bin/terminal/user/balance.d.ts +31 -0
- package/bin/terminal/user/balance.d.ts.map +1 -0
- package/bin/terminal/user/balance.js +131 -0
- package/bin/terminal/user/balance.js.map +1 -0
- package/bin/terminal/user/chat.d.ts +12 -0
- package/bin/terminal/user/chat.d.ts.map +1 -0
- package/bin/terminal/user/chat.js +70 -0
- package/bin/terminal/user/chat.js.map +1 -0
- package/bin/terminal/user/loop.d.ts +13 -0
- package/bin/terminal/user/loop.d.ts.map +1 -0
- package/bin/terminal/user/loop.js +93 -0
- package/bin/terminal/user/loop.js.map +1 -0
- package/bin/terminal/user/models.d.ts +10 -0
- package/bin/terminal/user/models.d.ts.map +1 -0
- package/bin/terminal/user/models.js +39 -0
- package/bin/terminal/user/models.js.map +1 -0
- package/bin/utils/storage.d.ts +0 -1
- package/bin/utils/storage.d.ts.map +1 -1
- package/bin/utils/storage.js +0 -6
- package/bin/utils/storage.js.map +1 -1
- package/package.json +7 -3
- package/public/app.js +3 -3
- package/src/cli/Index.ts +2 -0
- package/src/cli/agent/AgentChat.ts +113 -289
- package/src/cli/agent/AgentChatTypes.ts +8 -12
- package/src/cli/agent/AgentHistory.ts +2 -2
- package/src/cli/agent/AgentManager.ts +27 -28
- package/src/cli/agent/AgentManagerTypes.ts +2 -2
- package/src/cli/agent/AgentReset.ts +4 -4
- package/src/cli/agent/AgentSelection.ts +6 -6
- package/src/cli/agent/AgentSelectionTypes.ts +1 -1
- package/src/cli/agent/Init.ts +13 -13
- package/src/cli/agent/Restart.ts +2 -2
- package/src/cli/agent/Run.ts +38 -17
- package/src/cli/agent/Start.ts +2 -2
- package/src/cli/agent/Stop.ts +2 -2
- package/src/cli/control-plane/ControlPlaneProcess.ts +5 -5
- package/src/cli/model/ModelCreateCommand.ts +1 -1
- package/src/cli/model/ModelManageCommand.ts +5 -3
- package/src/cli/model/ModelManager.ts +3 -3
- package/src/cli/model/ModelSupport.ts +2 -10
- package/src/cli/shared/CliReporterTypes.ts +1 -1
- package/src/cli/shared/Config.ts +2 -2
- package/src/cli/shared/Env.ts +22 -230
- package/src/cli/shared/IndexAgentCommand.ts +3 -4
- package/src/cli/shared/IndexSupport.ts +16 -10
- package/src/cli/shared/ManagedPluginActionCommands.ts +4 -4
- package/src/cli/shared/ManagedPluginRemote.ts +4 -4
- package/src/cli/shared/PluginTargetSupport.ts +19 -19
- package/src/cli/shared/Plugins.ts +10 -10
- package/src/cli/shared/PublicHostEnv.ts +2 -2
- package/src/cli/shared/Terminal.ts +24 -0
- package/src/config/DowncitySchema.ts +3 -113
- package/src/config/Paths.ts +9 -90
- package/src/control/ControlGateway.ts +3 -3
- package/src/control/EnvApiRoutes.ts +7 -91
- package/src/control/PlatformApiRoutes.ts +6 -6
- package/src/control/gateway/AgentActions.ts +10 -10
- package/src/control/gateway/AgentCatalog.ts +17 -21
- package/src/control/instant/InstantSessionRunner.ts +3 -1
- package/src/env/ProcessEnv.ts +43 -0
- package/src/http/auth/AuthEnv.ts +1 -1
- package/src/model/runtime/CreateRuntimeModel.ts +54 -37
- package/src/model/service/ModelPoolService.ts +13 -11
- package/src/platform/store/StoreEnvRepository.ts +31 -234
- package/src/platform/store/StoreSchema.ts +3 -49
- package/src/platform/store/index.ts +11 -80
- package/src/platform/store/schema.ts +2 -2
- package/src/process/daemon/Api.ts +1 -1
- package/src/process/daemon/CliArgs.ts +24 -1
- package/src/process/daemon/Client.ts +90 -22
- package/src/process/daemon/Manager.ts +2 -1
- package/src/terminal/admin/auth-error.ts +62 -0
- package/src/terminal/admin/commands/accounts.ts +44 -0
- package/src/terminal/admin/commands/balance.ts +160 -0
- package/src/terminal/admin/commands/config.ts +13 -0
- package/src/terminal/admin/commands/custom.ts +46 -0
- package/src/terminal/admin/commands/instruction.ts +12 -0
- package/src/terminal/admin/commands/models.ts +64 -0
- package/src/terminal/admin/commands/payment.ts +94 -0
- package/src/terminal/admin/commands/products.ts +72 -0
- package/src/terminal/admin/commands/service-env.ts +256 -0
- package/src/terminal/admin/commands/usage.ts +44 -0
- package/src/terminal/admin/loop.ts +69 -0
- package/src/terminal/agent/pi-agent.ts +180 -0
- package/src/terminal/app.ts +120 -0
- package/src/terminal/auth/admin.ts +21 -0
- package/src/terminal/auth/mode-select.ts +38 -0
- package/src/terminal/auth/server-switch.ts +275 -0
- package/src/terminal/auth/user.ts +351 -0
- package/src/terminal/core/browser.ts +31 -0
- package/src/terminal/core/env.ts +71 -0
- package/src/terminal/core/session.ts +450 -0
- package/src/terminal/core/stripe.ts +37 -0
- package/src/terminal/core/ui.ts +84 -0
- package/src/terminal/core/update.ts +230 -0
- package/src/terminal/user/balance.ts +215 -0
- package/src/terminal/user/chat.ts +80 -0
- package/src/terminal/user/loop.ts +112 -0
- package/src/terminal/user/models.ts +43 -0
- package/src/utils/storage.ts +0 -7
- package/bin/process/rpc/Client.d.ts +0 -13
- package/bin/process/rpc/Client.d.ts.map +0 -1
- package/bin/process/rpc/Client.js +0 -98
- package/bin/process/rpc/Client.js.map +0 -1
- package/bin/process/rpc/Paths.d.ts +0 -14
- package/bin/process/rpc/Paths.d.ts.map +0 -1
- package/bin/process/rpc/Paths.js +0 -36
- package/bin/process/rpc/Paths.js.map +0 -1
- package/src/process/rpc/Client.ts +0 -113
- package/src/process/rpc/Paths.ts +0 -43
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 平台环境变量管理路由。
|
|
3
3
|
*
|
|
4
4
|
* 关键点(中文)
|
|
5
|
-
* -
|
|
5
|
+
* - 当前只提供平台全局 env 的统一读写接口。
|
|
6
6
|
* - 所有 value 在 DB 中以密文存储,这里的接口只负责明文读写与删除。
|
|
7
7
|
*/
|
|
8
8
|
|
|
@@ -10,14 +10,6 @@ import dotenv from "dotenv";
|
|
|
10
10
|
import type { Hono } from "hono";
|
|
11
11
|
import { PlatformStore } from "@/platform/store/index.js";
|
|
12
12
|
|
|
13
|
-
type EnvScope = "global" | "agent";
|
|
14
|
-
|
|
15
|
-
function normalizeScope(input: string | undefined): EnvScope {
|
|
16
|
-
const value = String(input || "").trim().toLowerCase();
|
|
17
|
-
if (value === "agent") return "agent";
|
|
18
|
-
return "global";
|
|
19
|
-
}
|
|
20
|
-
|
|
21
13
|
function normalizeNonEmptyText(value: unknown, fieldName: string): string {
|
|
22
14
|
const text = String(value || "").trim();
|
|
23
15
|
if (!text) {
|
|
@@ -74,32 +66,9 @@ export function registerPlatformEnvRoutes(params: {
|
|
|
74
66
|
const app = params.app;
|
|
75
67
|
|
|
76
68
|
app.get("/api/ui/env", async (c) => {
|
|
77
|
-
const scope = normalizeScope(c.req.query("scope"));
|
|
78
|
-
const agentIdRaw = c.req.query("agent");
|
|
79
69
|
const store = new PlatformStore();
|
|
80
70
|
try {
|
|
81
|
-
|
|
82
|
-
const agentId = String(agentIdRaw || "").trim();
|
|
83
|
-
const rows = agentId
|
|
84
|
-
? await store.listAgentEnvEntries(agentId)
|
|
85
|
-
: await store.listAllAgentEnvEntries();
|
|
86
|
-
return c.json({
|
|
87
|
-
success: true,
|
|
88
|
-
scope,
|
|
89
|
-
agentId: agentId || undefined,
|
|
90
|
-
items: rows.map((item) => ({
|
|
91
|
-
scope: "agent" as const,
|
|
92
|
-
agentId: item.agentId,
|
|
93
|
-
key: item.key,
|
|
94
|
-
description: item.description,
|
|
95
|
-
value: item.value,
|
|
96
|
-
createdAt: item.createdAt,
|
|
97
|
-
updatedAt: item.updatedAt,
|
|
98
|
-
})),
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const rows = await store.listGlobalEnvEntries();
|
|
71
|
+
const rows = await store.listEnvEntries();
|
|
103
72
|
return c.json({
|
|
104
73
|
success: true,
|
|
105
74
|
scope: "global",
|
|
@@ -122,35 +91,17 @@ export function registerPlatformEnvRoutes(params: {
|
|
|
122
91
|
app.post("/api/ui/env/upsert", async (c) => {
|
|
123
92
|
try {
|
|
124
93
|
const body = (await c.req.json().catch(() => ({}))) as {
|
|
125
|
-
scope?: string;
|
|
126
|
-
agentId?: string;
|
|
127
94
|
key?: string;
|
|
128
95
|
description?: string;
|
|
129
96
|
value?: string;
|
|
130
97
|
};
|
|
131
|
-
const scope = normalizeScope(body.scope);
|
|
132
98
|
const key = normalizeNonEmptyText(body.key, "env key");
|
|
133
99
|
const description = String(body.description || "").trim();
|
|
134
100
|
const value = String(body.value ?? "");
|
|
135
101
|
const store = new PlatformStore();
|
|
136
102
|
try {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
await store.upsertAgentEnvEntry({
|
|
140
|
-
agentId,
|
|
141
|
-
key,
|
|
142
|
-
description,
|
|
143
|
-
value,
|
|
144
|
-
});
|
|
145
|
-
return c.json({
|
|
146
|
-
success: true,
|
|
147
|
-
scope,
|
|
148
|
-
agentId,
|
|
149
|
-
key,
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
await store.upsertGlobalEnvEntry({
|
|
103
|
+
await store.upsertEnvEntry({
|
|
104
|
+
scope: "global",
|
|
154
105
|
key,
|
|
155
106
|
description,
|
|
156
107
|
value,
|
|
@@ -171,26 +122,12 @@ export function registerPlatformEnvRoutes(params: {
|
|
|
171
122
|
app.post("/api/ui/env/remove", async (c) => {
|
|
172
123
|
try {
|
|
173
124
|
const body = (await c.req.json().catch(() => ({}))) as {
|
|
174
|
-
scope?: string;
|
|
175
|
-
agentId?: string;
|
|
176
125
|
key?: string;
|
|
177
126
|
};
|
|
178
|
-
const scope = normalizeScope(body.scope);
|
|
179
127
|
const key = normalizeNonEmptyText(body.key, "env key");
|
|
180
128
|
const store = new PlatformStore();
|
|
181
129
|
try {
|
|
182
|
-
|
|
183
|
-
const agentId = normalizeNonEmptyText(body.agentId, "agentId");
|
|
184
|
-
store.removeAgentEnvEntry(agentId, key);
|
|
185
|
-
return c.json({
|
|
186
|
-
success: true,
|
|
187
|
-
scope,
|
|
188
|
-
agentId,
|
|
189
|
-
key,
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
store.removeGlobalEnvEntry(key);
|
|
130
|
+
store.removeEnvEntry(key);
|
|
194
131
|
return c.json({
|
|
195
132
|
success: true,
|
|
196
133
|
scope: "global",
|
|
@@ -207,35 +144,14 @@ export function registerPlatformEnvRoutes(params: {
|
|
|
207
144
|
app.post("/api/ui/env/import", async (c) => {
|
|
208
145
|
try {
|
|
209
146
|
const body = (await c.req.json().catch(() => ({}))) as {
|
|
210
|
-
scope?: string;
|
|
211
|
-
agentId?: string;
|
|
212
147
|
raw?: string;
|
|
213
148
|
};
|
|
214
|
-
const scope = normalizeScope(body.scope);
|
|
215
149
|
const entries = parseDotenvEntries(body.raw);
|
|
216
150
|
const store = new PlatformStore();
|
|
217
151
|
try {
|
|
218
|
-
if (scope === "agent") {
|
|
219
|
-
const agentId = normalizeNonEmptyText(body.agentId, "agentId");
|
|
220
|
-
for (const entry of entries) {
|
|
221
|
-
await store.upsertAgentEnvEntry({
|
|
222
|
-
agentId,
|
|
223
|
-
key: entry.key,
|
|
224
|
-
description: "",
|
|
225
|
-
value: entry.value,
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
return c.json({
|
|
229
|
-
success: true,
|
|
230
|
-
scope,
|
|
231
|
-
agentId,
|
|
232
|
-
count: entries.length,
|
|
233
|
-
keys: entries.map((entry) => entry.key),
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
|
|
237
152
|
for (const entry of entries) {
|
|
238
|
-
await store.
|
|
153
|
+
await store.upsertEnvEntry({
|
|
154
|
+
scope: "global",
|
|
239
155
|
key: entry.key,
|
|
240
156
|
description: "",
|
|
241
157
|
value: entry.value,
|
|
@@ -34,7 +34,7 @@ export interface PlatformApiRouteHandlers {
|
|
|
34
34
|
buildAgentsResponse(requestedAgentId: string): Promise<PlatformAgentsResponse>;
|
|
35
35
|
/** 初始化 agent 项目骨架。 */
|
|
36
36
|
initializeAgentProject(projectRoot: string, initialization: {
|
|
37
|
-
|
|
37
|
+
id?: unknown;
|
|
38
38
|
modelId?: unknown;
|
|
39
39
|
forceOverwriteShipJson?: unknown;
|
|
40
40
|
}): Promise<AgentProjectInitializationResult>;
|
|
@@ -42,7 +42,7 @@ export interface PlatformApiRouteHandlers {
|
|
|
42
42
|
startAgentByProjectRoot(projectRoot: string, options?: {
|
|
43
43
|
initializeIfNeeded?: boolean;
|
|
44
44
|
initialization?: {
|
|
45
|
-
|
|
45
|
+
id?: unknown;
|
|
46
46
|
modelId?: unknown;
|
|
47
47
|
localModel?: unknown;
|
|
48
48
|
agentType?: unknown;
|
|
@@ -174,7 +174,7 @@ export function registerPlatformApiRoutes(params: {
|
|
|
174
174
|
projectRoot?: unknown;
|
|
175
175
|
initializeIfNeeded?: unknown;
|
|
176
176
|
initialization?: {
|
|
177
|
-
|
|
177
|
+
id?: unknown;
|
|
178
178
|
modelId?: unknown;
|
|
179
179
|
forceOverwriteShipJson?: unknown;
|
|
180
180
|
};
|
|
@@ -197,7 +197,7 @@ export function registerPlatformApiRoutes(params: {
|
|
|
197
197
|
try {
|
|
198
198
|
const body = (await c.req.json().catch(() => ({}))) as {
|
|
199
199
|
projectRoot?: unknown;
|
|
200
|
-
|
|
200
|
+
id?: unknown;
|
|
201
201
|
modelId?: unknown;
|
|
202
202
|
autoStart?: unknown;
|
|
203
203
|
forceOverwriteShipJson?: unknown;
|
|
@@ -207,7 +207,7 @@ export function registerPlatformApiRoutes(params: {
|
|
|
207
207
|
return c.json({ success: false, error: "projectRoot is required" }, 400);
|
|
208
208
|
}
|
|
209
209
|
const initResult = await handlers.initializeAgentProject(rawProject, {
|
|
210
|
-
|
|
210
|
+
id: body.id,
|
|
211
211
|
modelId: body.modelId,
|
|
212
212
|
forceOverwriteShipJson: body.forceOverwriteShipJson,
|
|
213
213
|
});
|
|
@@ -217,7 +217,7 @@ export function registerPlatformApiRoutes(params: {
|
|
|
217
217
|
created: true,
|
|
218
218
|
started: false,
|
|
219
219
|
projectRoot: initResult.projectRoot,
|
|
220
|
-
|
|
220
|
+
id: initResult.id,
|
|
221
221
|
message: "created",
|
|
222
222
|
});
|
|
223
223
|
}
|
|
@@ -50,14 +50,14 @@ function resolveExecutionInput(params: {
|
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
function
|
|
53
|
+
function resolveManagedAgentIdFromProjectRoot(projectRoot: string): string {
|
|
54
54
|
const normalizedRoot = path.resolve(String(projectRoot || "").trim() || ".");
|
|
55
55
|
const fallback = path.basename(normalizedRoot);
|
|
56
56
|
const configPath = getDowncityJsonPath(normalizedRoot);
|
|
57
57
|
try {
|
|
58
|
-
const raw = fs.readJsonSync(configPath) as {
|
|
59
|
-
const
|
|
60
|
-
return
|
|
58
|
+
const raw = fs.readJsonSync(configPath) as { id?: unknown };
|
|
59
|
+
const agentId = typeof raw.id === "string" ? raw.id.trim() : "";
|
|
60
|
+
return agentId || fallback;
|
|
61
61
|
} catch {
|
|
62
62
|
return fallback;
|
|
63
63
|
}
|
|
@@ -68,7 +68,7 @@ function resolveManagedAgentNameFromProjectRoot(projectRoot: string): string {
|
|
|
68
68
|
*/
|
|
69
69
|
export async function initializePlatformAgentProject(params: {
|
|
70
70
|
projectRoot: string;
|
|
71
|
-
|
|
71
|
+
id?: unknown;
|
|
72
72
|
modelId?: unknown;
|
|
73
73
|
forceOverwriteShipJson?: unknown;
|
|
74
74
|
}): Promise<AgentProjectInitializationResult> {
|
|
@@ -79,7 +79,7 @@ export async function initializePlatformAgentProject(params: {
|
|
|
79
79
|
return initializeAgentProject(
|
|
80
80
|
{
|
|
81
81
|
projectRoot: params.projectRoot,
|
|
82
|
-
|
|
82
|
+
id: String(params.id || "").trim() || undefined,
|
|
83
83
|
execution,
|
|
84
84
|
forceOverwriteShipJson: params.forceOverwriteShipJson === true,
|
|
85
85
|
},
|
|
@@ -242,7 +242,7 @@ export async function startManagedAgentByProjectRoot(params: {
|
|
|
242
242
|
cliPath: string;
|
|
243
243
|
initializeIfNeeded?: boolean;
|
|
244
244
|
initialization?: {
|
|
245
|
-
|
|
245
|
+
id?: unknown;
|
|
246
246
|
modelId?: unknown;
|
|
247
247
|
forceOverwriteShipJson?: unknown;
|
|
248
248
|
};
|
|
@@ -281,7 +281,7 @@ export async function startManagedAgentByProjectRoot(params: {
|
|
|
281
281
|
await initializeAgentProject(
|
|
282
282
|
{
|
|
283
283
|
projectRoot: normalizedRoot,
|
|
284
|
-
|
|
284
|
+
id: String(params.initialization?.id || "").trim() || undefined,
|
|
285
285
|
execution,
|
|
286
286
|
forceOverwriteShipJson: params.initialization?.forceOverwriteShipJson === true,
|
|
287
287
|
},
|
|
@@ -330,8 +330,8 @@ export async function inspectManagedAgentRestartSafety(params: {
|
|
|
330
330
|
const targetAgent = knownAgents.find(
|
|
331
331
|
(item) => path.resolve(String(item.projectRoot || "")) === normalizedRoot,
|
|
332
332
|
);
|
|
333
|
-
const agentId = String(targetAgent?.
|
|
334
|
-
||
|
|
333
|
+
const agentId = String(targetAgent?.agentId || "").trim()
|
|
334
|
+
|| resolveManagedAgentIdFromProjectRoot(normalizedRoot);
|
|
335
335
|
|
|
336
336
|
const sessionRootDir = getDowncitySessionRootDirPath(normalizedRoot, agentId);
|
|
337
337
|
if (await fs.pathExists(sessionRootDir)) {
|
|
@@ -184,14 +184,14 @@ async function buildAgentOption(
|
|
|
184
184
|
const running = Boolean(daemonPid && isProcessAlive(daemonPid));
|
|
185
185
|
const endpoint = await resolveRuntimeEndpoint(projectRoot);
|
|
186
186
|
|
|
187
|
-
let
|
|
187
|
+
let agentId = basename(projectRoot);
|
|
188
188
|
let ship: PlatformAgentShipJson | null = null;
|
|
189
189
|
try {
|
|
190
190
|
const shipPath = getDowncityJsonPath(projectRoot);
|
|
191
191
|
if (await fs.pathExists(shipPath)) {
|
|
192
192
|
ship = (await fs.readJson(shipPath)) as PlatformAgentShipJson;
|
|
193
|
-
const
|
|
194
|
-
if (
|
|
193
|
+
const configuredAgentId = String(ship?.id || "").trim();
|
|
194
|
+
if (configuredAgentId) agentId = configuredAgentId;
|
|
195
195
|
}
|
|
196
196
|
} catch {
|
|
197
197
|
// ignore
|
|
@@ -205,7 +205,7 @@ async function buildAgentOption(
|
|
|
205
205
|
|
|
206
206
|
return {
|
|
207
207
|
id: projectRoot,
|
|
208
|
-
|
|
208
|
+
agentId,
|
|
209
209
|
projectRoot,
|
|
210
210
|
running,
|
|
211
211
|
host: running ? endpoint.host : undefined,
|
|
@@ -245,7 +245,7 @@ export async function listKnownPlatformAgents(): Promise<PlatformAgentOption[]>
|
|
|
245
245
|
const runningA = a.running === true ? 1 : 0;
|
|
246
246
|
const runningB = b.running === true ? 1 : 0;
|
|
247
247
|
if (runningA !== runningB) return runningB - runningA;
|
|
248
|
-
return a.
|
|
248
|
+
return a.agentId.localeCompare(b.agentId);
|
|
249
249
|
});
|
|
250
250
|
}
|
|
251
251
|
|
|
@@ -325,18 +325,18 @@ export async function inspectPlatformAgentDirectory(
|
|
|
325
325
|
const knownAgents = await listKnownPlatformAgents();
|
|
326
326
|
const matched = knownAgents.find((item) => item.projectRoot === normalizedRoot) || null;
|
|
327
327
|
|
|
328
|
-
let
|
|
328
|
+
let agentId = basename(normalizedRoot);
|
|
329
329
|
let modelId = "";
|
|
330
330
|
if (hasShipJson) {
|
|
331
331
|
try {
|
|
332
332
|
const ship = (await fs.readJson(shipPath)) as PlatformAgentShipJson;
|
|
333
|
-
|
|
333
|
+
agentId = String(ship?.id || "").trim() || agentId;
|
|
334
334
|
modelId = String(ship?.execution?.modelId || "").trim();
|
|
335
335
|
} catch {
|
|
336
336
|
// ignore parse failures
|
|
337
337
|
}
|
|
338
|
-
} else if (matched?.
|
|
339
|
-
|
|
338
|
+
} else if (matched?.agentId) {
|
|
339
|
+
agentId = matched.agentId;
|
|
340
340
|
}
|
|
341
341
|
|
|
342
342
|
return {
|
|
@@ -346,21 +346,17 @@ export async function inspectPlatformAgentDirectory(
|
|
|
346
346
|
hasProfileMd,
|
|
347
347
|
knownAgent: matched !== null,
|
|
348
348
|
running: matched?.running === true,
|
|
349
|
-
|
|
350
|
-
|
|
349
|
+
...(agentId ? { agentId } : {}),
|
|
350
|
+
...(modelId ? { modelId } : {}),
|
|
351
351
|
};
|
|
352
352
|
}
|
|
353
353
|
|
|
354
354
|
/**
|
|
355
|
-
*
|
|
355
|
+
* 构建 Global Model 面板响应。
|
|
356
356
|
*
|
|
357
357
|
* 关键点(中文)
|
|
358
|
-
* -
|
|
359
|
-
* -
|
|
360
|
-
*/
|
|
361
|
-
|
|
362
|
-
/**
|
|
363
|
-
* 构建 Global Model 面板响应。
|
|
358
|
+
* - 读取当前选中 agent 的 `execution.modelId`,再去平台模型池里补全 provider/model 信息。
|
|
359
|
+
* - 这里只返回全局模型池视图,不解析项目内本地模型目录。
|
|
364
360
|
*/
|
|
365
361
|
export async function buildPlatformModelResponse(params: {
|
|
366
362
|
requestedAgentId: string;
|
|
@@ -605,7 +601,7 @@ export async function buildPlatformConfigStatusResponse(params: {
|
|
|
605
601
|
return {
|
|
606
602
|
success: true,
|
|
607
603
|
selectedAgentId: selectedAgent?.id || "",
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
604
|
+
selectedAgentProjectId: selectedAgent?.agentId || "",
|
|
605
|
+
items: [...platformChecks, ...agentChecks],
|
|
606
|
+
};
|
|
611
607
|
}
|
|
@@ -32,6 +32,7 @@ import type {
|
|
|
32
32
|
} from "@downcity/agent";
|
|
33
33
|
import { InstantSystemComposer } from "@/control/instant/InstantSystemComposer.js";
|
|
34
34
|
import { createRuntimeModel } from "@/model/runtime/CreateRuntimeModel.js";
|
|
35
|
+
import { mergeProcessEnvWithPlatformGlobalEnv } from "@/env/ProcessEnv.js";
|
|
35
36
|
import type { Logger as AgentLogger } from "@downcity/agent";
|
|
36
37
|
|
|
37
38
|
type InstantSessionRunnerOptions = {
|
|
@@ -232,13 +233,14 @@ export class InstantSessionRunner implements PlatformInlineInstantRunner {
|
|
|
232
233
|
});
|
|
233
234
|
const model = await createRuntimeModel({
|
|
234
235
|
config: {
|
|
235
|
-
|
|
236
|
+
id: "console_inline_instant_model",
|
|
236
237
|
version: "1.0.0",
|
|
237
238
|
execution: {
|
|
238
239
|
type: "api",
|
|
239
240
|
modelId,
|
|
240
241
|
},
|
|
241
242
|
},
|
|
243
|
+
env: mergeProcessEnvWithPlatformGlobalEnv(process.env),
|
|
242
244
|
});
|
|
243
245
|
const compactionComposer = new JsonlSessionCompactionComposer();
|
|
244
246
|
const systemComposer = new InstantSystemComposer({
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 平台全局环境变量读取与合并模块。
|
|
3
|
+
*
|
|
4
|
+
* 职责说明(中文)
|
|
5
|
+
* - 从平台 store 读取 global env。
|
|
6
|
+
* - 为 city 宿主提供显式 env 合并能力,避免让 `@downcity/agent` 直接依赖 `process.env`。
|
|
7
|
+
*
|
|
8
|
+
* 边界说明(中文)
|
|
9
|
+
* - 这里只处理 global env,不处理项目 `.env`。
|
|
10
|
+
* - 不负责 session 级运行时元信息(例如 `DC_SESSION_ID`)。
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { PlatformStore } from "@/platform/store/index.js";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* 读取平台 global env 映射。
|
|
17
|
+
*/
|
|
18
|
+
export function readPlatformGlobalEnv(): Record<string, string> {
|
|
19
|
+
const store = new PlatformStore();
|
|
20
|
+
try {
|
|
21
|
+
return store.getEnvMapSync();
|
|
22
|
+
} catch {
|
|
23
|
+
return {};
|
|
24
|
+
} finally {
|
|
25
|
+
store.close();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* 合并平台 global env 到目标环境变量映射。
|
|
31
|
+
*
|
|
32
|
+
* 关键点(中文)
|
|
33
|
+
* - 平台 global env 视为宿主层统一真相,应覆盖基础进程环境中的同名键。
|
|
34
|
+
* - 返回新对象,不直接修改传入参数。
|
|
35
|
+
*/
|
|
36
|
+
export function mergeProcessEnvWithPlatformGlobalEnv(
|
|
37
|
+
baseEnv: NodeJS.ProcessEnv = process.env,
|
|
38
|
+
): NodeJS.ProcessEnv {
|
|
39
|
+
return {
|
|
40
|
+
...baseEnv,
|
|
41
|
+
...readPlatformGlobalEnv(),
|
|
42
|
+
};
|
|
43
|
+
}
|
package/src/http/auth/AuthEnv.ts
CHANGED
|
@@ -55,7 +55,7 @@ export function resolveInvocationToken(params: {
|
|
|
55
55
|
*
|
|
56
56
|
* 关键点(中文)
|
|
57
57
|
* - shell / task script / ACP 等通用执行面不应默认继承任何 HTTP 鉴权信息。
|
|
58
|
-
* -
|
|
58
|
+
* - 这样可以避免这些链路因为环境变量而隐式带上本地/远程 HTTP 鉴权。
|
|
59
59
|
*/
|
|
60
60
|
export function stripInvocationAuthEnv(targetEnv: NodeJS.ProcessEnv): void {
|
|
61
61
|
delete targetEnv[CLI_AUTH_TOKEN_ENV_KEY];
|
|
@@ -54,8 +54,30 @@ type RuntimeModelFactoryInput = {
|
|
|
54
54
|
* - 仅用于把 sessionId 透传到 LLM 请求日志元数据。
|
|
55
55
|
*/
|
|
56
56
|
getSessionRunScope?: () => ModelLogContext | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* 宿主显式注入的运行时 env。
|
|
59
|
+
*
|
|
60
|
+
* 关键点(中文)
|
|
61
|
+
* - 这里只作为 provider apiKey 的回退来源。
|
|
62
|
+
* - 不再从 `downcity.json` 或 provider 配置里解析 `${ENV_KEY}` 占位符。
|
|
63
|
+
*/
|
|
64
|
+
env?: Record<string, string> | NodeJS.ProcessEnv;
|
|
57
65
|
};
|
|
58
66
|
|
|
67
|
+
function normalizeRuntimeEnv(
|
|
68
|
+
env: Record<string, string> | NodeJS.ProcessEnv | undefined,
|
|
69
|
+
): Record<string, string> {
|
|
70
|
+
const resolved: Record<string, string> = {};
|
|
71
|
+
if (!env) return resolved;
|
|
72
|
+
for (const [key, value] of Object.entries(env)) {
|
|
73
|
+
const normalizedKey = String(key || "").trim();
|
|
74
|
+
if (!normalizedKey) continue;
|
|
75
|
+
if (value === undefined || value === null) continue;
|
|
76
|
+
resolved[normalizedKey] = String(value);
|
|
77
|
+
}
|
|
78
|
+
return resolved;
|
|
79
|
+
}
|
|
80
|
+
|
|
59
81
|
function readProjectExecutionBinding(
|
|
60
82
|
config: DowncityConfig,
|
|
61
83
|
): { type: "api"; modelId: string } | null {
|
|
@@ -98,63 +120,58 @@ function resolveProviderDefaultBaseUrl(
|
|
|
98
120
|
return undefined;
|
|
99
121
|
}
|
|
100
122
|
|
|
101
|
-
function
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
return value;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
function resolveApiKeyFallback(providerType: LlmProviderType): string | undefined {
|
|
123
|
+
function resolveApiKeyFallback(
|
|
124
|
+
providerType: LlmProviderType,
|
|
125
|
+
env: Record<string, string> | undefined,
|
|
126
|
+
): string | undefined {
|
|
127
|
+
const runtimeEnv = env || {};
|
|
111
128
|
if (providerType === "gemini") {
|
|
112
129
|
return (
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
130
|
+
runtimeEnv.GEMINI_API_KEY ||
|
|
131
|
+
runtimeEnv.GOOGLE_API_KEY ||
|
|
132
|
+
runtimeEnv.GOOGLE_GENERATIVE_AI_API_KEY ||
|
|
133
|
+
runtimeEnv.API_KEY
|
|
117
134
|
);
|
|
118
135
|
}
|
|
119
136
|
if (providerType === "anthropic") {
|
|
120
|
-
return
|
|
137
|
+
return runtimeEnv.ANTHROPIC_API_KEY || runtimeEnv.API_KEY;
|
|
121
138
|
}
|
|
122
139
|
if (providerType === "deepseek") {
|
|
123
140
|
return (
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
141
|
+
runtimeEnv.DEEPSEEK_API_KEY ||
|
|
142
|
+
runtimeEnv.OPENAI_API_KEY ||
|
|
143
|
+
runtimeEnv.API_KEY
|
|
127
144
|
);
|
|
128
145
|
}
|
|
129
146
|
if (providerType === "xai") {
|
|
130
|
-
return
|
|
147
|
+
return runtimeEnv.XAI_API_KEY || runtimeEnv.API_KEY;
|
|
131
148
|
}
|
|
132
149
|
if (providerType === "huggingface") {
|
|
133
150
|
return (
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
151
|
+
runtimeEnv.HUGGINGFACE_API_KEY ||
|
|
152
|
+
runtimeEnv.HF_TOKEN ||
|
|
153
|
+
runtimeEnv.API_KEY
|
|
137
154
|
);
|
|
138
155
|
}
|
|
139
156
|
if (providerType === "openrouter") {
|
|
140
|
-
return
|
|
157
|
+
return runtimeEnv.OPENROUTER_API_KEY || runtimeEnv.API_KEY;
|
|
141
158
|
}
|
|
142
159
|
if (providerType === "moonshot-cn" || providerType === "moonshot-ai") {
|
|
143
160
|
return (
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
161
|
+
runtimeEnv.MOONSHOT_API_KEY ||
|
|
162
|
+
runtimeEnv.KIMI_API_KEY ||
|
|
163
|
+
runtimeEnv.API_KEY
|
|
147
164
|
);
|
|
148
165
|
}
|
|
149
166
|
if (providerType === "kimi-code") {
|
|
150
167
|
return (
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
168
|
+
runtimeEnv.KIMI_CODE_API_KEY ||
|
|
169
|
+
runtimeEnv.KIMI_API_KEY ||
|
|
170
|
+
runtimeEnv.MOONSHOT_API_KEY ||
|
|
171
|
+
runtimeEnv.API_KEY
|
|
155
172
|
);
|
|
156
173
|
}
|
|
157
|
-
return
|
|
174
|
+
return runtimeEnv.OPENAI_API_KEY || runtimeEnv.API_KEY;
|
|
158
175
|
}
|
|
159
176
|
|
|
160
177
|
function normalizeProviderType(value: unknown): LlmProviderType | null {
|
|
@@ -262,6 +279,7 @@ export async function createRuntimeModel(
|
|
|
262
279
|
input: RuntimeModelFactoryInput,
|
|
263
280
|
): Promise<LanguageModel> {
|
|
264
281
|
const logger = getLogger();
|
|
282
|
+
const runtimeEnv = normalizeRuntimeEnv(input.env);
|
|
265
283
|
const execution = readProjectExecutionBinding(input.config);
|
|
266
284
|
if (!execution) {
|
|
267
285
|
await logger.log("warn", "No agent execution configured");
|
|
@@ -300,20 +318,19 @@ export async function createRuntimeModel(
|
|
|
300
318
|
throw new Error(`Unsupported LLM provider type: ${providerConfig.type}`);
|
|
301
319
|
}
|
|
302
320
|
|
|
303
|
-
const resolvedModel =
|
|
304
|
-
if (!resolvedModel
|
|
321
|
+
const resolvedModel = String(modelConfig.name || "").trim();
|
|
322
|
+
if (!resolvedModel) {
|
|
305
323
|
await logger.log("warn", "No LLM model name configured");
|
|
306
324
|
throw new Error("No LLM model name configured");
|
|
307
325
|
}
|
|
308
326
|
|
|
309
327
|
const resolvedBaseUrl = normalizeOptionalBaseUrl(
|
|
310
|
-
|
|
311
|
-
resolveProviderDefaultBaseUrl(providerType),
|
|
328
|
+
providerConfig.baseUrl || resolveProviderDefaultBaseUrl(providerType),
|
|
312
329
|
);
|
|
313
330
|
|
|
314
|
-
let resolvedApiKey =
|
|
331
|
+
let resolvedApiKey = String(providerConfig.apiKey || "").trim() || undefined;
|
|
315
332
|
if (!resolvedApiKey) {
|
|
316
|
-
resolvedApiKey = resolveApiKeyFallback(providerType);
|
|
333
|
+
resolvedApiKey = resolveApiKeyFallback(providerType, runtimeEnv);
|
|
317
334
|
}
|
|
318
335
|
if (!resolvedApiKey) {
|
|
319
336
|
await logger.log("warn", "No API Key configured, will use simulation mode");
|