import test from "node:test"; import assert from "node:assert/strict"; import { MASTER_CODEX_NODE_OUTPUT_LEAKED, sanitizeSensitiveTaskFailureDetailForLog, sanitizeSensitiveTaskFailureDetailForTransport, shouldBlockSensitiveMasterAgentOutput, } from "../local-agent/master-task-output-sanitizer.mjs"; const leakedPrompt = [ "管理员全局主提示词:", "你是 Boss 控制台的主 Agent。", "默认只说和当前问题直接相关的判断、动作和风险。", "", "用户私有主提示词:", "默认中文回复。", "", "当前对话附加提示词:", "同步项目目标和版本记录后记得告诉我。", "", "当前消息:", "同步完成记得要和我说,以后也是这样。", ].join("\n"); test("local-agent 会阻断包含执行提示词片段的主 Agent 输出", () => { assert.equal(shouldBlockSensitiveMasterAgentOutput(leakedPrompt), true); assert.equal( sanitizeSensitiveTaskFailureDetailForTransport(leakedPrompt), MASTER_CODEX_NODE_OUTPUT_LEAKED, ); assert.match( sanitizeSensitiveTaskFailureDetailForLog(leakedPrompt) ?? "", /已拦截内部执行日志|原始内容不再展示/, ); }); test("local-agent 会保留普通失败信息", () => { const error = "THREAD_BINDING_REQUIRED"; assert.equal(shouldBlockSensitiveMasterAgentOutput(error), false); assert.equal(sanitizeSensitiveTaskFailureDetailForTransport(error), error); assert.equal(sanitizeSensitiveTaskFailureDetailForLog(error), error); });