fix: 收敛 session 输出渐进披露与 stdin 输入 (#136)

Co-authored-by: Codex <codex@pikas.tech>
This commit is contained in:
Lyon
2026-06-10 09:34:22 +08:00
committed by GitHub
parent a4b83abe46
commit ecbe1368ba
3 changed files with 206 additions and 47 deletions
+37 -15
View File
@@ -34,30 +34,52 @@ export default function selfTest(_context: SelfTestContext): SelfTestResult {
const sessionSummary = summarizeSessionEventPage({
sessionId: "sess_noise",
runId: "run_noise",
items: [{
seq: 266,
type: "backend_status",
payload: {
phase: "turn/cancelled",
status: "cancelled",
commandId: "cmd_noise",
runnerTrace: { raw: hugeRunnerTrace },
rawEvent: { nested: hugeRunnerTrace },
items: [
{ id: "evt_tool", seq: 265, type: "tool_call", payload: { itemId: "tool_noise", method: "commandExecution", status: "completed", command: "printf hidden", outputSummary: "tool completed" } },
{ id: "evt_output", seq: 266, type: "command_output", payload: { itemId: "tool_noise", text: hugeRunnerTrace, outputSummary: "large stdout", outputBytes: 100_000, outputTruncated: true } },
{
id: "evt_status",
seq: 267,
type: "backend_status",
payload: {
phase: "turn/cancelled",
status: "cancelled",
commandId: "cmd_noise",
runnerTrace: { raw: hugeRunnerTrace },
rawEvent: { nested: hugeRunnerTrace },
},
},
}],
count: 1,
],
count: 3,
cursor: "266",
}, { kind: "trace", sessionId: "sess_noise", afterSeq: 250, limit: 100, runId: null, tail: null, summaryChars: 80 });
}, { kind: "trace", sessionId: "sess_noise", afterSeq: 250, limit: 100, runId: null, tail: null, summaryChars: 80, includeOutput: false });
const sessionItems = sessionSummary.items as JsonRecord[];
assert.equal(sessionSummary.action, "session-trace-summary");
assert.equal(sessionSummary.nextAfterSeq, 266);
assert.equal(sessionItems[0]?.hasRunnerTrace, true);
assert.ok(Number(sessionItems[0]?.runnerTraceBytes) > 10_000);
assert.equal(sessionSummary.sourceCount, 3);
assert.equal(sessionSummary.displayedCount, 1);
assert.equal(sessionSummary.nextAfterSeq, 267);
assert.equal((sessionSummary.suppressedEvents as JsonRecord).count, 2);
assert.equal(((sessionSummary.suppressedEvents as JsonRecord).byType as JsonRecord).command_output, 1);
assert.equal(((sessionSummary.suppressedEvents as JsonRecord).byType as JsonRecord).backend_status, 1);
assert.deepEqual(sessionItems.map((item) => item.type), ["tool_call"]);
assert.equal(((sessionItems[0]?.detailCommands as JsonRecord).item as string).includes("--item-id tool_noise"), true);
assert.equal(((sessionItems[0]?.detailCommands as JsonRecord).seq as string).includes("--seq 265"), true);
assert.ok(Number((sessionSummary.suppressedEvents as JsonRecord).outputBytes) > 0);
assert.equal(JSON.stringify(sessionSummary).includes("runner trace line"), false);
assert.equal(String((sessionSummary.drillDownCommands as JsonRecord).full).includes("--full"), true);
assert.equal(String((sessionSummary.drillDownCommands as JsonRecord).raw).includes("--raw"), true);
assertNoSecretLeak(sessionSummary);
const sessionOutputIncluded = summarizeSessionEventPage({
sessionId: "sess_noise",
runId: "run_noise",
items: [{ id: "evt_output", seq: 266, type: "command_output", payload: { itemId: "tool_noise", text: hugeRunnerTrace, outputSummary: "large stdout", outputBytes: 100_000, outputTruncated: true } }],
count: 1,
cursor: "266",
}, { kind: "output", sessionId: "sess_noise", afterSeq: 250, limit: 100, runId: "run_noise", tail: null, summaryChars: 80, includeOutput: true });
assert.equal(((sessionOutputIncluded.items as JsonRecord[])[0]?.detailCommands as JsonRecord).seq, "./scripts/agentrun sessions output sess_noise --seq 266 --run-id run_noise --full");
assert.equal(JSON.stringify(sessionOutputIncluded).includes("runner trace line"), false);
const queueSummary = summarizeQueueDispatchResult({
action: "queue-dispatch",
mutation: true,