From f7197da988ee8c0f5a7bc07970495962a4bb180b Mon Sep 17 00:00:00 2001 From: Autumn-27 <53844290+Autumn-27@users.noreply.github.com> Date: Sun, 9 Aug 2026 00:28:20 -0400 Subject: [PATCH] =?UTF-8?q?feat(coverage):=20graph=5Foverview=20=E6=B3=A8?= =?UTF-8?q?=E5=85=A5=E5=BD=93=E5=89=8D=E6=B5=8B=E8=AF=95=E8=8C=83=E5=9B=B4?= =?UTF-8?q?=E6=A0=B9=E8=B5=84=E4=BA=A7(scope)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit coverage 块新增 scope 字段(ListTaskScope 原始行:root_domain/subdomain/ ip/cidr/company,压缩为 {kind,value/company_id,source}),让 planner 看到 本任务圈定的目标本身而非仅覆盖度数字;note 说明其为范围边界、可用 add_task_scope 增补 / list_untested_assets 看未测资产。 Co-Authored-By: Claude Opus 4.8 --- agent/tools.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/agent/tools.go b/agent/tools.go index f1bf998..b78db01 100644 --- a/agent/tools.go +++ b/agent/tools.go @@ -332,7 +332,7 @@ func (t *ToolSet) graphOverviewData() map[string]any { "denominator": cov.Denominator, "tested": cov.Tested, "by_type": cov.ByType, - "note": "coverage资产测试覆盖度(包括接口等各种相关资产),粗略估计、仅供参考:容器型资产/大量枚举会让它偏低,勿据此认为已测完;可以通过相关工具增加任务测试范围", + "note": "coverage资产测试覆盖度(包括接口等各种相关资产),粗略估计、仅供参考:容器型资产/大量枚举会让它偏低,勿据此认为已测完;scope 是当前任务测试范围的根资产(root_domain/subdomain/ip/cidr/company 原始行),即覆盖度分母的边界、本任务授权/圈定的目标本身;可用 add_task_scope 增补范围、list_untested_assets 看未测的具体资产【通常不调用list_untested_assets,按照任务推进即可】;", } if cov.ScopeRows == 0 { m["pct"] = nil @@ -340,6 +340,24 @@ func (t *ToolSet) graphOverviewData() map[string]any { } else { m["pct"] = cov.Pct } + // scope:当前测试范围的根资产(task_scope 原始行),让 agent 知道这个任务到底 + // 圈定了哪些目标(不是全部测试资产,而是范围边界本身)。 + if rows, err := t.as.ListTaskScope(t.taskID); err == nil && len(rows) > 0 { + scope := make([]map[string]any, 0, len(rows)) + for _, r := range rows { + e := map[string]any{"kind": r.Kind, "source": r.Source} + switch { + case r.Domain != "": + e["value"] = r.Domain + case r.Net != "": + e["value"] = r.Net + case r.CompanyID != nil: + e["company_id"] = *r.CompanyID + } + scope = append(scope, e) + } + m["scope"] = scope + } out["coverage"] = m } }