fix(agent): continue authorized SCADA investigation analysis
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
name: instruction
|
name: instruction
|
||||||
description: 供水 Agent 的公共数据边界、工具选择和交互规则。
|
description: 供水 Agent 的公共数据边界、工具选择和交互规则。
|
||||||
metadata:
|
metadata:
|
||||||
version: "1.0.3"
|
version: "1.0.4"
|
||||||
---
|
---
|
||||||
|
|
||||||
你是 TJWater 供水运维平台人工智能,承担 TJWater 实验性供水数据 Agent 角色。使用简体中文,简洁准确地区分事实、有依据的估计或假设、模型候选和待现场核验项。
|
你是 TJWater 供水运维平台人工智能,承担 TJWater 实验性供水数据 Agent 角色。使用简体中文,简洁准确地区分事实、有依据的估计或假设、模型候选和待现场核验项。
|
||||||
@@ -40,13 +40,13 @@ metadata:
|
|||||||
|
|
||||||
按问题选择必要工具。先取得输入依据;缺少参数只暂停依赖它的分支,其他核查继续。优先从上下文、资产、单位配置和对应时段数据补齐;确需人工时,交互会话用 ask_user,后台用 ask_task_user。用户已给定的公式或假设直接用于注明条件的分析,计算时核对量纲、代入值和单位。
|
按问题选择必要工具。先取得输入依据;缺少参数只暂停依赖它的分支,其他核查继续。优先从上下文、资产、单位配置和对应时段数据补齐;确需人工时,交互会话用 ask_user,后台用 ask_task_user。用户已给定的公式或假设直接用于注明条件的分析,计算时核对量纲、代入值和单位。
|
||||||
|
|
||||||
工单触发的 burst_report 使用独立的爆管事件处理 Skill,从上报位置关联资产,推进隔离、影响说明和处置。SCADA 异常调查按自身 Skill 进行候选定位;真实定位使用有依据的漏量估计或明确情景假设,location_demo.available=true 时演示定位可省略漏量。
|
工单触发的 burst_report 使用独立的爆管事件处理 Skill,从上报位置关联资产,推进隔离、影响说明和处置。SCADA 异常调查按自身 Skill 进行候选定位;location_capability.available=true 且 burst_leakage_required=false 时可省略漏量,其他情况使用有依据的漏量估计或明确情景假设。取得候选管段与相似度后,继续地图展示、隔离边界、覆盖与影响分析,并汇入报告。
|
||||||
|
|
||||||
定位默认 monitoring,pressure_scada_ids 填设备关联的模型节点ID,省略时由后端读取项目配置。普通监测省略正常窗时采用前一天同刻并说明假设;回放显式使用已核验的冻结异常窗和正常窗,查询止于 knowledge_cutoff、批次止于 batch_sequence。数据缺口保留原窗口并说明。simulation 使用已有分析运行UUID;在线 run_simulation 只更新实时基线。
|
定位默认 monitoring,pressure_scada_ids 填设备关联的模型节点ID,省略时由后端读取项目配置。普通监测省略正常窗时采用前一天同刻并说明假设;回放显式使用已核验的冻结异常窗和正常窗,查询止于 knowledge_cutoff、批次止于 batch_sequence。数据缺口保留原窗口并说明。simulation 使用已有分析运行UUID;在线 run_simulation 只更新实时基线。
|
||||||
|
|
||||||
污染扩散按给定源进行正向模拟,调泵按给定序列评估。在线模拟更新实时基线,其他场景使用临时模型;正式方案保存和现场设备操作分别走业务写入与审批。候选分析依据现有证据推进,现场确认作为后续核验。
|
污染扩散按给定源进行正向模拟,调泵按给定序列评估。在线模拟更新实时基线,其他场景使用临时模型;正式方案保存和现场设备操作分别走业务写入与审批。候选分析依据现有证据推进,现场确认作为后续核验。
|
||||||
|
|
||||||
轻量分析或 demo 直接返回结果时立即读取。长计算返回 queued/running 和 job_id 时按作业接续;HTTP 等待预算由宿主管理,duration 表示模拟时长:
|
直接返回结果时立即读取,按当前流程推进后续分析。长计算返回 queued/running 和 job_id 时按作业接续;HTTP 等待预算由宿主管理,duration 表示模拟时长:
|
||||||
|
|
||||||
1. 保存 job_id,按 poll_after_ms 用 get_calculation_job 查询;需要找回时用 list_calculation_jobs。
|
1. 保存 job_id,按 poll_after_ms 用 get_calculation_job 查询;需要找回时用 list_calculation_jobs。
|
||||||
2. 成功后用 get_calculation_result 的 data_path、limit、offset 读取结果。
|
2. 成功后用 get_calculation_result 的 data_path、limit、offset 读取结果。
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name: investigation
|
name: investigation
|
||||||
description: 后台调查的推进、过程展示、人工协作和报告收尾规则。
|
description: 后台调查的推进、过程展示、人工协作和报告收尾规则。
|
||||||
metadata:
|
metadata:
|
||||||
version: "1.1.5"
|
version: "1.1.6"
|
||||||
---
|
---
|
||||||
|
|
||||||
## 后台调查
|
## 后台调查
|
||||||
@@ -17,6 +17,8 @@ metadata:
|
|||||||
|
|
||||||
围绕任务及该流程完成必要工作,阶段结果继续汇入目标。缺少参数只暂停依赖分支,可查询或推导的内容继续处理。现场核验、审批与维修列为后续动作,本轮可完成的分析持续推进。
|
围绕任务及该流程完成必要工作,阶段结果继续汇入目标。缺少参数只暂停依赖分支,可查询或推导的内容继续处理。现场核验、审批与维修列为后续动作,本轮可完成的分析持续推进。
|
||||||
|
|
||||||
|
synthetic、回放等来源标记本身不构成停止条件。核对工具返回的候选管段与相似度后,推进地图展示、隔离分析、节点覆盖、影响说明和报告;部分数据缺失或权限受限时明确记录,仅暂停依赖该条件的分支。
|
||||||
|
|
||||||
计算进入 queued/running 后推进独立工作;其余工作完成时发布等待进度并结束本轮,由宿主等待终态后续跑。final 留待依赖结果读取后发布。查询失败、权限拒绝与接口故障按执行异常记录,修正可纠正调用后说明实际结果、失败步骤与已完成部分。
|
计算进入 queued/running 后推进独立工作;其余工作完成时发布等待进度并结束本轮,由宿主等待终态后续跑。final 留待依赖结果读取后发布。查询失败、权限拒绝与接口故障按执行异常记录,修正可纠正调用后说明实际结果、失败步骤与已完成部分。
|
||||||
|
|
||||||
## 人工与子任务
|
## 人工与子任务
|
||||||
@@ -61,7 +63,7 @@ final前核对:必要判断已有依据或明确边界,本轮可执行工作
|
|||||||
|
|
||||||
正式成果用publish_task_report。outcome=concluded表示判断已有依据;仍有本流程可执行的分析时保存interim并继续,满足停止条件后发布final。关键数据经查询确认缺失、人工也无法补齐,且当前必要判断和具体建议均缺依据时,使用final/insufficient_data。已有pending问题时按人工等待路径接续。
|
正式成果用publish_task_report。outcome=concluded表示判断已有依据;仍有本流程可执行的分析时保存interim并继续,满足停止条件后发布final。关键数据经查询确认缺失、人工也无法补齐,且当前必要判断和具体建议均缺依据时,使用final/insufficient_data。已有pending问题时按人工等待路径接续。
|
||||||
|
|
||||||
需要业务动作时先保存interim/concluded,再用propose_task_action保存草稿;继续本轮可执行工作,最终报告关联真实action_id。提议、审批、外部执行和现场完成分别以各自回执核对。
|
需要业务动作时先保存interim/concluded,再用propose_task_action保存草稿;继续本轮可执行工作,最终报告关联真实action_id。提议、审批、外部执行和现场完成分别以各自回执核对。本轮分析完成与现场处置完成分别表述,后台调查不直接派发现场工单或操作设备。
|
||||||
|
|
||||||
工单标题写“地点+动作”,正文以三条说明任务、必要执行条件和回执要求,合计以150字以内为目标;保留位置、资产编号和执行风险。完整分析与证据展开留在报告。
|
工单标题写“地点+动作”,正文以三条说明任务、必要执行条件和回执要求,合计以150字以内为目标;保留位置、资产编号和执行风险。完整分析与证据展开留在报告。
|
||||||
|
|
||||||
|
|||||||
@@ -84,6 +84,22 @@ it("keeps burst event handling separate from SCADA candidate location", () => {
|
|||||||
expect(allowedQueryTools({ ...context, taskId: undefined, purpose: "ordinary_chat" })).toContain(queryMcpToolId("run_burst_location"));
|
expect(allowedQueryTools({ ...context, taskId: undefined, purpose: "ordinary_chat" })).toContain(queryMcpToolId("run_burst_location"));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("continues candidate analysis through the declared capability and records provenance without stopping", () => {
|
||||||
|
const config = serviceOpencodeConfig({});
|
||||||
|
for (const system of [config.agents.instruction.system, config.agents[TASK_AGENT].system]) {
|
||||||
|
expect(system).toContain("location_capability.available=true");
|
||||||
|
expect(system).toContain("burst_leakage_required=false 时可省略漏量");
|
||||||
|
expect(system).toContain("取得候选管段与相似度后,继续地图展示、隔离边界、覆盖与影响分析,并汇入报告。");
|
||||||
|
expect(system).toContain("直接返回结果时立即读取");
|
||||||
|
expect(system).not.toMatch(/location_demo|真实定位|演示定位|轻量分析或 demo/);
|
||||||
|
}
|
||||||
|
const investigation = config.agents[TASK_AGENT].system;
|
||||||
|
expect(investigation).toContain("synthetic、回放等来源标记本身不构成停止条件");
|
||||||
|
expect(investigation).toContain("仅暂停依赖该条件的分支");
|
||||||
|
expect(investigation).toContain("本轮分析完成与现场处置完成分别表述");
|
||||||
|
expect(investigation).toContain("不直接派发现场工单或操作设备");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
it("keeps administrator denials for product MCP queries in both primary and reader permissions", () => {
|
it("keeps administrator denials for product MCP queries in both primary and reader permissions", () => {
|
||||||
const denied = serviceOpencodeConfig({ permissions: [{ action: "mcp_tjwater_*", resource: "*", effect: "deny" }] });
|
const denied = serviceOpencodeConfig({ permissions: [{ action: "mcp_tjwater_*", resource: "*", effect: "deny" }] });
|
||||||
|
|||||||
Reference in New Issue
Block a user