diff --git a/src/commands/tasks-audit-system.ts b/src/commands/tasks-audit-system.ts index 8300e367253b..a31e1399c3d6 100644 --- a/src/commands/tasks-audit-system.ts +++ b/src/commands/tasks-audit-system.ts @@ -103,3 +103,40 @@ export function buildTaskSystemAuditFindings(params: { }, }; } + +type TaskSystemAuditResult = ReturnType; + +export function buildTaskSystemAuditJsonPayload( + result: TaskSystemAuditResult, + params: { + severityFilter?: TaskSystemAuditSeverity; + codeFilter?: TaskSystemAuditCode; + limit?: number; + }, +) { + const { allFindings, filteredFindings, taskFindings, summary } = result; + const limit = typeof params.limit === "number" && params.limit > 0 ? params.limit : undefined; + const displayed = limit ? filteredFindings.slice(0, limit) : filteredFindings; + // Preserve the legacy task-only summary while adding combined task-flow counts. + const legacySummary = summarizeTaskAuditFindings(taskFindings); + return { + count: allFindings.length, + filteredCount: filteredFindings.length, + displayed: displayed.length, + filters: { + severity: params.severityFilter ?? null, + code: params.codeFilter ?? null, + limit: limit ?? null, + }, + summary: { + ...legacySummary, + taskFlows: summary.taskFlows, + combined: { + total: summary.total, + errors: summary.errors, + warnings: summary.warnings, + }, + }, + findings: displayed, + }; +} diff --git a/src/commands/tasks-json.ts b/src/commands/tasks-json.ts index 2a02d6da455d..18e6e877271b 100644 --- a/src/commands/tasks-json.ts +++ b/src/commands/tasks-json.ts @@ -6,9 +6,10 @@ import { writeRuntimeJson } from "../runtime.js"; import { listTaskRecords } from "../tasks/runtime-internal.js"; import { listTaskFlowAuditFindings } from "../tasks/task-flow-registry.audit.js"; import { listTaskFlowRecords } from "../tasks/task-flow-runtime-internal.js"; -import { listTaskAuditFindings, summarizeTaskAuditFindings } from "../tasks/task-registry.audit.js"; +import { listTaskAuditFindings } from "../tasks/task-registry.audit.js"; import type { TaskRecord } from "../tasks/task-registry.types.js"; import { + buildTaskSystemAuditJsonPayload, buildTaskSystemAuditFindings, type TaskSystemAuditCode, type TaskSystemAuditSeverity, @@ -73,34 +74,15 @@ function buildTasksListJsonPayload(opts: TasksListJsonArgs) { function buildTasksAuditJsonPayload(opts: TasksAuditJsonArgs) { const severityFilter = opts.severity?.trim() as TaskSystemAuditSeverity | undefined; const codeFilter = opts.code?.trim() as TaskSystemAuditCode | undefined; - const { allFindings, filteredFindings, taskFindings, summary } = toSystemAuditFindings({ + const result = toSystemAuditFindings({ severityFilter, codeFilter, }); - const limit = typeof opts.limit === "number" && opts.limit > 0 ? opts.limit : undefined; - const displayed = limit ? filteredFindings.slice(0, limit) : filteredFindings; - // Preserve the legacy task-only summary while adding combined task-flow counts. - const legacySummary = summarizeTaskAuditFindings(taskFindings); - return { - count: allFindings.length, - filteredCount: filteredFindings.length, - displayed: displayed.length, - filters: { - severity: severityFilter ?? null, - code: codeFilter ?? null, - limit: limit ?? null, - }, - summary: { - ...legacySummary, - taskFlows: summary.taskFlows, - combined: { - total: summary.total, - errors: summary.errors, - warnings: summary.warnings, - }, - }, - findings: displayed, - }; + return buildTaskSystemAuditJsonPayload(result, { + severityFilter, + codeFilter, + limit: opts.limit, + }); } /** Writes task list JSON without triggering task maintenance. */ diff --git a/src/commands/tasks.ts b/src/commands/tasks.ts index 86af1e43812e..578a6a9f0d79 100644 --- a/src/commands/tasks.ts +++ b/src/commands/tasks.ts @@ -24,7 +24,6 @@ import { import { listTaskAuditFindings, summarizeRetainedLostTaskAuditFindings, - summarizeTaskAuditFindings, } from "../tasks/task-registry.audit.js"; import { getInspectableTaskAuditSummary, @@ -41,6 +40,7 @@ import { import { summarizeTaskRecords } from "../tasks/task-registry.summary.js"; import type { TaskNotifyPolicy, TaskRecord } from "../tasks/task-registry.types.js"; import { + buildTaskSystemAuditJsonPayload, buildTaskSystemAuditFindings, type TaskSystemAuditCode, type TaskSystemAuditFinding, @@ -499,37 +499,22 @@ export async function tasksAuditCommand( configureTaskMaintenanceFromConfig(); const severityFilter = opts.severity?.trim() as TaskSystemAuditSeverity | undefined; const codeFilter = opts.code?.trim() as TaskSystemAuditCode | undefined; - const { allFindings, filteredFindings, taskFindings, summary } = toSystemAuditFindings({ + const auditResult = toSystemAuditFindings({ severityFilter, codeFilter, }); + const { filteredFindings, summary } = auditResult; const limit = typeof opts.limit === "number" && opts.limit > 0 ? opts.limit : undefined; const displayed = limit ? filteredFindings.slice(0, limit) : filteredFindings; if (opts.json) { - const legacySummary = summarizeTaskAuditFindings(taskFindings); runtime.log( JSON.stringify( - { - count: allFindings.length, - filteredCount: filteredFindings.length, - displayed: displayed.length, - filters: { - severity: severityFilter ?? null, - code: codeFilter ?? null, - limit: limit ?? null, - }, - summary: { - ...legacySummary, - taskFlows: summary.taskFlows, - combined: { - total: summary.total, - errors: summary.errors, - warnings: summary.warnings, - }, - }, - findings: displayed, - }, + buildTaskSystemAuditJsonPayload(auditResult, { + severityFilter, + codeFilter, + limit: opts.limit, + }), null, 2, ),