feat(agent): 触发后处理可配置(运行模式/合并模式/并发上限) + 修复抽屉内下拉误关
每个自定义 agent 可配置触发后如何调度运行: - 运行模式 serial|parallel:串行排队一次一个 / 每次触发各自并发一个会话 - 合并模式 by_task|all|none(仅 serial):同任务合并 / 全部合并成一条 / 不合并 - parallel 带每 agent 最大并发上限(0=不限),超限排队等空位 实现: - DB: agents 加 trigger_run_mode/trigger_merge_mode/trigger_max_parallel 三列 (schema + 幂等 ALTER 迁移,已发版补旧库);Agent 结构/scan/SetAgentTriggerBehavior - 调度重构: triggerRun bool → triggerActive 计数 + triggerCfg 缓存; StartTriggeredRun 走 pumpLocked/runAndPump 统一泵模型,nextTriggerRun 按合并模式 取(新增 mergeAllRuns);并发安全(session 按 conv-id 隔离,已确认) - config 接口暴露/接收三字段;max_turns 改可选指针,避免触发 tab 部分 patch 清零 - 前端: 触发 tab 顶部加运行/合并模式下拉 + 最大并发输入,改动即存 修复: 抽屉(Sheet)内 Select 下拉 portal 到抽屉外,点选项/点别处被当成点击外部 误关抽屉。SelectContent 改 position=popper,并给 SheetContent 加 onInteractOutside 守卫(按 e.detail.originalEvent.target 判定弹层内点击则不关)。 Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
1 parent
f9716269ea
commit
6d8fa5bc48
10 files changed
+374
-98
No files matched your search
+12
-2
@@ -315,8 +315,18 @@ export const api = {
|
||||
updateTrigger: (id: number, t: Omit<AgentTrigger, "id" | "agent_key" | "last_fire">) =>
|
||||
patch<{ ok: boolean }>(`/triggers/${id}`, t),
|
||||
deleteTrigger: (id: number) => del<{ deleted: number }>(`/triggers/${id}`),
|
||||
saveAgentConfig: (key: string, patch: { max_turns: number; run_seconds?: number; web_search?: boolean; interactive_shell?: boolean }) =>
|
||||
put<{ ok: boolean }>(`/agents/${key}/config`, patch),
|
||||
saveAgentConfig: (
|
||||
key: string,
|
||||
patch: {
|
||||
max_turns?: number;
|
||||
run_seconds?: number;
|
||||
web_search?: boolean;
|
||||
interactive_shell?: boolean;
|
||||
trigger_run_mode?: "serial" | "parallel";
|
||||
trigger_merge_mode?: "by_task" | "all" | "none";
|
||||
trigger_max_parallel?: number;
|
||||
},
|
||||
) => put<{ ok: boolean }>(`/agents/${key}/config`, patch),
|
||||
agentPromptVersions: (key: string) => get<{ versions: PromptVersion[] }>(`/agents/${key}/prompts`).then((r) => arr(r.versions)),
|
||||
agentVariables: (key: string) => get<{ variables: PromptVar[] }>(`/agents/${key}/variables`).then((r) => arr(r.variables)),
|
||||
previewAgentPrompt: (key: string, template: string, sample?: Record<string, string>) =>
|
||||
|
||||
@@ -387,6 +387,10 @@ export interface Agent {
|
||||
run_seconds?: number; // worker 单次运行墙钟上限(秒);0 = 无限制
|
||||
web_search?: boolean; // 是否启用网络搜索(受系统全局开关门控)
|
||||
interactive_shell?: boolean; // 是否启用交互式 shell(持久 PTY 会话工具族)
|
||||
// P3 触发后处理策略(仅自定义 agent 有意义)
|
||||
trigger_run_mode?: "serial" | "parallel"; // 串行排队 / 每次触发各自并发一个会话
|
||||
trigger_merge_mode?: "by_task" | "all" | "none"; // 仅 serial:同任务合并 / 全部合并 / 不合并
|
||||
trigger_max_parallel?: number; // 仅 parallel:每 agent 并发上限;0=不限
|
||||
// 绑定数量(仅列表接口返回):可见 MCP / 可见 Skill / 绑定工具
|
||||
mcp_count?: number;
|
||||
skill_count?: number;
|
||||
|
||||
Reference in new issue
Block a user