Fix subagent verbose leak: force verboseLevel off + strip tool summaries
This commit is contained in:
parent
c6cdbb630c
commit
297be11adf
@ -289,10 +289,33 @@ export function deriveChannel(params: {
|
||||
}
|
||||
|
||||
export function stripToolMessages(messages: unknown[]): unknown[] {
|
||||
const looksLikeToolSummary = (text: string) => {
|
||||
const trimmed = text.trimStart();
|
||||
if (!trimmed) return false;
|
||||
|
||||
// Common transcript leak formats.
|
||||
if (/^Tool:\s*/i.test(trimmed)) return true;
|
||||
|
||||
// Emoji + label prefix, e.g. "🔧 Tool: ...", "🛠 Sessions: ...", "📎 Attachments: ...".
|
||||
// We intentionally keep this somewhat strict to avoid stripping legitimate assistant text.
|
||||
if (/^[\p{Extended_Pictographic}]\s*[A-Za-z][A-Za-z0-9 _/-]{0,60}:\s+/u.test(trimmed)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
return messages.filter((msg) => {
|
||||
if (!msg || typeof msg !== "object") return true;
|
||||
const role = (msg as { role?: unknown }).role;
|
||||
return role !== "toolResult";
|
||||
if (role === "toolResult") return false;
|
||||
|
||||
if (role === "assistant") {
|
||||
const text = extractAssistantText(msg);
|
||||
if (text && looksLikeToolSummary(text)) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -156,6 +156,14 @@ export function createSessionsSpawnTool(opts?: {
|
||||
}
|
||||
}
|
||||
const childSessionKey = `agent:${targetAgentId}:subagent:${crypto.randomUUID()}`;
|
||||
|
||||
// Ensure subagent runs never inherit verbose settings from the requester.
|
||||
await callGateway({
|
||||
method: "sessions.patch",
|
||||
params: { key: childSessionKey, verboseLevel: "off" },
|
||||
timeoutMs: 10_000,
|
||||
});
|
||||
|
||||
const spawnedByKey = requesterInternalKey;
|
||||
const targetAgentConfig = resolveAgentConfig(cfg, targetAgentId);
|
||||
const resolvedModel =
|
||||
|
||||
Loading…
Reference in New Issue
Block a user