feat(insert_assets): 资产可标记是否与当前任务相关(related)

insert_assets 每条资产新增 related 入参(默认 true):仅在任务开启资产
覆盖度功能时生效——true 才自动纳入覆盖度(测试范围分母),false 则只入
共享资产库、不计入本任务覆盖度(如顺带发现的旁站/无关资产)。

- Call 内部按 related + coverageDisabled 双重 gate 决定是否 AddAutoScope
- 覆盖度关闭时 related 无意义,经 StripCoverageParams 从最终工具 schema
  剔除(必须在 ToolResolve 的 DB schema 覆盖之后做,故在装配链末端处理)
- 旧库经 refreshBuiltinToolSchemas(flag v6) 刷新 insert_assets schema,
  否则首插入only 的 seed 收不到新参数
- 补 StripCoverageParams 回归测试(开启保留/关闭隐藏/不改原始 schema)

Claude-Session: https://claude.ai/code/session_01Jm87Gr5fq5aso6SfLyguhx
This commit is contained in:
Autumn-27 committed 2026-08-22 10:26:11 -04:00
1 parent eb3f278711
commit 22ae280584
6 files changed
+126 -6

No files matched your search

+8 -4
View File
@@ -462,7 +462,7 @@ func (s *Server) seedOrchestrationTools() {
// reaches an old DB otherwise. Preserves each tool's agent binding + enabled flag.
// Bump the flag whenever these tools' schemas/descriptions change in code.
func (s *Server) refreshBuiltinToolSchemas() {
const flag = "tool_schema_refresh_v5_spawn_seed_intent"
const flag = "tool_schema_refresh_v6_insert_assets_related"
if v, _, _ := s.m.pg.GetSetting(flag); v == "true" {
return
}
@@ -473,10 +473,14 @@ func (s *Server) refreshBuiltinToolSchemas() {
log.Printf("[tools] refresh %s schema failed: %v", t.Name(), err)
}
}
// 同时把 planner 的 goal_met 描述刷成代码默认:旧库 seed 的描述带“结束本轮规划”的
// 误导,会让 planner 把 goal_met 当成“结束空轮”的手段、刚开跑就误判整个任务完成。
// 同时把部分内置 agent 工具刷成代码默认:
// - goal_met:旧库 seed 的描述带“结束本轮规划”的误导,会让 planner 把它当成
// “结束空轮”的手段、刚开跑就误判整个任务完成。
// - insert_assets:新增 related 入参(标记资产是否与当前任务相关、决定是否入覆盖度),
// SeedTool 首插入only,旧库已 seed 的 schema 否则收不到这个新参数。
refreshBuiltin := map[string]bool{"goal_met": true, "insert_assets": true}
for _, sd := range agent.BuiltinToolSeeds() {
if sd.Key != "goal_met" {
if !refreshBuiltin[sd.Key] {
continue
}
schema, _ := json.Marshal(sd.Schema)