fix(scheduler)!: 撤掉“优先级=可配置策略表”的错误设计,回归内核内部属性

用户指正:**优先级是内核内部属性**,不是配置项,更不该由插件声明。
我此前把它建模成“策略表 + 字符串解析”,甚至准备接配置中心
(core.agent.priority.<channel>)——方向性错误,故整体撤销。

撤销:
- 删除 ParseLevel(字符串解析只服务于“外部可配”这个错误前提)
- 删除 AgentConfig.PriorityLookup / Agent.priorityLookup 及 taskLevel 中的查表分支;
  taskLevel 回归为纯内核内部规则(cli/webui/http→L3,system/_consolidation_→L1,
  其余 L1),注释明确“不对外暴露、不做运维可调项”
- 设计稿 §3.2 改写为“内核内部属性,不做成配置项”,并删除 §15 里
  “ChannelDef.Priority / InjectOptions.Priority 进公开 SDK”这一方向(同属外化)
- 未触碰配置中心(registry.go/main.go 的优先级配置一行未加)

同时落地 D6(与本撤销无关、此前遗漏的承诺):
- AgentConfig.MaxToolTurns + runTaskSteps 在发起新一轮 LLM 前按 f.Turn 收尾;
  0 = 不限;cmd/homed/main.go 从既有 core.agent.max_tool_turns 取值
- 新增 task_test.go 2 项:上限 3 时恰好跑 3 批工具/3 次 LLM 并收尾;
  0 = 不限(跑完脚本)

验收:agent 全量 + -race;全仓 build/vet 通过
This commit is contained in:
JianFeeeee
2026-09-13 06:17:49 +08:00
parent 98d67559d1
commit 8372f5bd8f
6 changed files with 121 additions and 25 deletions

View File

@ -95,15 +95,20 @@ Step枚举顺序执行步与步之间是安全点
- **默认级 = `L1`**:未显式声明一律最低级("显式才是特权",避免新插件默认获得抢占权)。
- **取值域仅这四档**,不引入任意整数,避免"9 级比 4 级大但没人知道怎么排"。
### 3.2 优先级从哪来(v1内核策略表
### 3.2 优先级从哪来(内核内部属性,**不做成配置项**
v1 **不**在公开 SDK 上加字段,来源有三,按优先级取:
优先级是**内核内部属性**:内核预定义四级,并按**内核自己的规则**为任务与中断定级。
1. 内核策略表:`core.agent.priority.<channel>`(新增 ConfigDef`L1..L4`
2. `ChannelDef` 的内核侧扩展(仅 `internal/sdk` 可用,内置插件可声明);
3. 未命中 → `L1`
-**不是运维可调项**。不引入 `core.agent.priority.<channel>` 这类配置键,
也不把 `PriorityLookup` 做成可注入的策略表——那等于把内核的调度内部属性
外化成配置,与“谁能打断谁”的内部语义相反
- ❌ 也不暴露给插件声明(这个方向曾写入 v2 计划,已删除)。
- ✅ v1 的内部缺省规则(仅为实现缺省值,语义上是内核自己的事):
`cli`/`webui`/`http``L3``system` / `_consolidation_``L1`;其余 → `L1`(默认级)。
- 定级规则可随内核演进调整,但**始终不对外暴露**。
> v2 再把 `ChannelDef.Priority` / `InjectOptions.Priority` 加入公开 SDK纯追加见 §13。
> 具体“哪类工作算哪一级”的完整规则由内核定义;本稿只固定四级语义与定级位置
> `(*Agent).taskLevel`),不承诺配置面。
### 3.3 抢占判据
@ -475,7 +480,9 @@ go test -race -count=1 ./internal/agent/... ./internal/plugin/... ./internal/sdk
## 15. 开放问题(后续版本)
1. 异步 step + `tool.cancel`(真正让工具可抢占)。
2. `ChannelDef.Priority` / `InjectOptions.Priority` 进入公开 SDK
3. 帧落盘(跨进程/崩溃恢复)
4. 多 agent 并行调度
5. 与 `plan.md` §13.7 的 `RuntimeManager + 分组 worker` 合并(本设计是其前置)。
2. 帧落盘(跨进程/崩溃恢复)
3. 多 agent 并行调度
4. 与 `plan.md` §13.7 的 `RuntimeManager + 分组 worker` 合并(本设计是其前置)
> 已删除:“`ChannelDef.Priority` / `InjectOptions.Priority` 进入公开 SDK”——
> 优先级是内核内部属性§3.2),不应由插件声明。