diff --git a/scripts/src/cli.ts b/scripts/src/cli.ts index 30033c3..e3f6308 100644 --- a/scripts/src/cli.ts +++ b/scripts/src/cli.ts @@ -683,7 +683,7 @@ function summarizeMutationBody(body: JsonRecord): JsonRecord { function summarizeQueueStats(record: JsonRecord | null): JsonRecord | null { if (!record) return null; - return { + return withoutFullRecordBytes({ queue: stringValue(record.queue), total: numberValue(record.total), maxVersion: numberValue(record.maxVersion), @@ -693,7 +693,7 @@ function summarizeQueueStats(record: JsonRecord | null): JsonRecord | null { generatedAt: stringValue(record.generatedAt), fullRecordBytes: jsonByteLength(record), valuesPrinted: false, - }; + }); } function summarizeQueueTaskWithAttempt(record: JsonRecord | null, fallbackTaskId: string): JsonRecord { @@ -728,15 +728,15 @@ function sessionEventDrillDownCommands(kind: "trace" | "output", sessionId: stri } function summarizeQueueTaskRecord(record: JsonRecord | null, fallbackTaskId: string): JsonRecord { - return compactRecord(record, { + return withoutFullRecordBytes(compactRecord(record, { fallback: { id: fallbackTaskId }, keys: ["id", "state", "queue", "lane", "title", "priority", "backendProfile", "providerId", "sessionPath", "version", "updatedAt", "cancelledAt", "cancelReason", "readerId", "attentionState", "unread", "active"], - }); + })); } function summarizeAttemptRecord(record: JsonRecord | null): JsonRecord | null { if (!record) return null; - return compactRecord(record, { keys: ["attemptId", "state", "runId", "commandId", "runnerJobId", "sessionId", "sessionPath"] }); + return withoutFullRecordBytes(compactRecord(record, { keys: ["attemptId", "state", "runId", "commandId", "runnerJobId", "sessionId", "sessionPath"] })); } function summarizeSupervisorRecord(record: JsonRecord | null): JsonRecord | null { diff --git a/src/selftest/cases/15-cli-events-summary.ts b/src/selftest/cases/15-cli-events-summary.ts index ef57cda..ff0a3ab 100644 --- a/src/selftest/cases/15-cli-events-summary.ts +++ b/src/selftest/cases/15-cli-events-summary.ts @@ -126,6 +126,7 @@ export default function selfTest(_context: SelfTestContext): SelfTestResult { assert.equal(commanderSummary.sourceCount, 2); assert.equal(commanderSummary.displayedCount, 1); assert.equal(JSON.stringify(commanderSummary).includes("runner trace line"), false); + assert.equal(JSON.stringify(commanderSummary).includes("fullRecordBytes"), false); assert.equal((((commanderSummary.items as JsonRecord[])[0]?.latestAttempt as JsonRecord).sessionId), "sess_noisy"); assert.equal(String(((commanderSummary.drillDownCommands as JsonRecord).full)).includes("--full"), true); assertNoSecretLeak(commanderSummary); @@ -133,11 +134,13 @@ export default function selfTest(_context: SelfTestContext): SelfTestResult { const listSummary = summarizeQueueTaskListResult({ items: [noisyTask], nextCursor: "9" }, { limit: 20 }); assert.equal(listSummary.action, "queue-list-summary"); assert.equal(JSON.stringify(listSummary).includes("runner trace line"), false); + assert.equal(JSON.stringify(listSummary).includes("fullRecordBytes"), false); assert.equal(String(((listSummary.drillDownCommands as JsonRecord).next)).includes("--cursor 9"), true); assertNoSecretLeak(listSummary); const showSummary = summarizeQueueTaskShowResult(noisyTask, "qt_noisy"); assert.equal(showSummary.action, "queue-show-summary"); + assert.equal(JSON.stringify(showSummary).includes("fullRecordBytes"), false); assert.equal(JSON.stringify(showSummary).includes("runner trace line"), false); assert.ok(Number(showSummary.payloadBytes) > 10_000); assert.equal(String(((showSummary.pollCommands as JsonRecord).trace)).includes("sess_noisy"), true); diff --git a/src/selftest/cases/55-timeout-liveness.ts b/src/selftest/cases/55-timeout-liveness.ts index d891e90..fea079e 100644 --- a/src/selftest/cases/55-timeout-liveness.ts +++ b/src/selftest/cases/55-timeout-liveness.ts @@ -65,7 +65,7 @@ const selfTest: SelfTestCase = async (context: SelfTestContext) => { const summaryItem = ((commanderSummary.items as JsonRecord[]) ?? []).find((item) => item.id === task.id) as JsonRecord; assert.equal(((summaryItem.supervisor as JsonRecord).phase), "terminal"); assert.equal(JSON.stringify(commanderSummary).includes("hwpod workspace apply-patch"), false, "commander summary must stay compact and avoid dumping command bodies"); - assert.equal(JSON.stringify(summaryItem.supervisor).includes("fullRecordBytes"), false, "commander supervisor must not add bookkeeping noise"); + assert.equal(JSON.stringify(summaryItem).includes("fullRecordBytes"), false, "commander item must not add bookkeeping noise"); assertNoSecretLeak({ toolResult, assistantLive, inactiveLive, terminalResult, session, commanderSummary }); return { name: "timeout-liveness", tests: ["tool-in-flight-liveness", "assistant-progress-liveness", "stdio-inactive-timeout-budget", "terminal-timeout-recovery", "queue-commander-supervisor"] };