refactor(tasks): share audit JSON payload formatting

This commit is contained in:
Vincent Koc
2026-06-22 22:55:53 +08:00
parent e66aa357f8
commit 8fe181c2b0
3 changed files with 53 additions and 49 deletions
+37
View File
@@ -103,3 +103,40 @@ export function buildTaskSystemAuditFindings(params: {
},
};
}
type TaskSystemAuditResult = ReturnType<typeof buildTaskSystemAuditFindings>;
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,
};
}
+8 -26
View File
@@ -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. */
+8 -23
View File
@@ -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,
),