feat(agent): add controlled task execution
This commit is contained in:
+20
-2
@@ -45,16 +45,18 @@ const envSchema = z
|
||||
// HTTP 服务监听端口。
|
||||
PORT: z.coerce.number().int().positive().default(8787),
|
||||
// HTTP 服务监听地址。
|
||||
HOST: z.string().default("0.0.0.0"),
|
||||
HOST: z.string().default("127.0.0.1"),
|
||||
// Product Server base URL used to verify browser identity and project scope.
|
||||
TJWATER_SERVER_BASE_URL: z.string().url().default("http://127.0.0.1:8000"),
|
||||
// 工况任务调用 Server 的最长等待时间,必须短于两次租约心跳之间的间隔。
|
||||
TJWATER_SERVER_TIMEOUT_MS: z.coerce.number().int().positive().max(30_000).default(10_000),
|
||||
// Pino 日志级别。
|
||||
LOG_LEVEL: z.string().default("info"),
|
||||
// LLM 工具/技能调用审计日志路径。
|
||||
LLM_REQUEST_AUDIT_LOG_PATH: z
|
||||
.string()
|
||||
.default("./logs/llm-request-audit.log"),
|
||||
// 内部工具桥调用本服务时使用的鉴权 token;未显式配置时启动阶段会自动生成。
|
||||
// 内部工具桥鉴权 token;embedded 可自动生成,client 模式必须与外部 OpenCode 显式共享。
|
||||
AGENT_INTERNAL_TOKEN: optionalString(),
|
||||
// opencode 运行模式:embedded 会启动本地 CLI 子进程;client 只连接现有 server。
|
||||
OPENCODE_MODE: z.enum(["embedded", "client"]).default("embedded"),
|
||||
@@ -66,6 +68,8 @@ const envSchema = z
|
||||
OPENCODE_TIMEOUT_MS: z.coerce.number().int().positive().default(5000),
|
||||
// 默认使用的 opencode 模型标识。
|
||||
OPENCODE_MODEL: z.string().default("deepseek/deepseek-v4-flash"),
|
||||
// 后台工况任务首选模型;缺省沿用 OPENCODE_MODEL,运行时会从实际可用模型中选择回退。
|
||||
OPERATIONAL_TASK_MODEL: optionalString(),
|
||||
// 聊天 UI 和 /stream 允许选择的 opencode 模型完整配置,JSON 数组。
|
||||
OPENCODE_MODEL_OPTIONS: z.string().default(defaultAgentModelOptionsJson),
|
||||
// 平滑 token 输出,避免上游模型大块/抖动 token 直接传到前端。
|
||||
@@ -143,6 +147,13 @@ const envSchema = z
|
||||
message: "OPENCODE_CLIENT_BASE_URL is required when OPENCODE_MODE=client",
|
||||
});
|
||||
}
|
||||
if (env.OPENCODE_MODE === "client" && !env.AGENT_INTERNAL_TOKEN) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["AGENT_INTERNAL_TOKEN"],
|
||||
message: "AGENT_INTERNAL_TOKEN is required in client mode and must also be configured on the external OpenCode process",
|
||||
});
|
||||
}
|
||||
let modelOptions;
|
||||
try {
|
||||
modelOptions = parseAgentModelOptions(env.OPENCODE_MODEL_OPTIONS);
|
||||
@@ -169,6 +180,13 @@ const envSchema = z
|
||||
message: "OPENCODE_MODEL must be included in OPENCODE_MODEL_OPTIONS",
|
||||
});
|
||||
}
|
||||
if (env.OPERATIONAL_TASK_MODEL && !supportedModels.includes(env.OPERATIONAL_TASK_MODEL)) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["OPERATIONAL_TASK_MODEL"],
|
||||
message: "OPERATIONAL_TASK_MODEL must be included in OPENCODE_MODEL_OPTIONS",
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
export type AppConfig = z.infer<typeof envSchema>;
|
||||
|
||||
Reference in New Issue
Block a user