codex-plugin-doctor 1.14.0 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/core/review-bundle.d.ts +7 -1
- package/dist/core/review-bundle.js +24 -4
- package/dist/run-cli.js +3 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -358,9 +358,9 @@ jobs:
|
|
|
358
358
|
runs-on: ubuntu-latest
|
|
359
359
|
steps:
|
|
360
360
|
- uses: actions/checkout@v5
|
|
361
|
-
- uses: Esquetta/CodexPluginDoctor@v1.
|
|
361
|
+
- uses: Esquetta/CodexPluginDoctor@v1.16.0
|
|
362
362
|
with:
|
|
363
|
-
version: "1.
|
|
363
|
+
version: "1.16.0"
|
|
364
364
|
path: .
|
|
365
365
|
runtime: "true"
|
|
366
366
|
policy: codex-publish
|
|
@@ -71,6 +71,10 @@ export interface DoctorReviewBundleVerificationReport {
|
|
|
71
71
|
status: "pass" | "fail";
|
|
72
72
|
message: string;
|
|
73
73
|
}>;
|
|
74
|
+
failedChecks: Array<{
|
|
75
|
+
id: string;
|
|
76
|
+
message: string;
|
|
77
|
+
}>;
|
|
74
78
|
attestation: DoctorAttestationVerificationReport | null;
|
|
75
79
|
releaseEvidence: DoctorReleaseEvidenceVerificationReport | null;
|
|
76
80
|
}
|
|
@@ -121,7 +125,9 @@ export declare function verifyDoctorReviewBundle(bundleDirectory: string, option
|
|
|
121
125
|
targetPath: string;
|
|
122
126
|
}): Promise<DoctorReviewBundleVerificationReport>;
|
|
123
127
|
export declare function renderDoctorReviewBundleVerificationJson(report: DoctorReviewBundleVerificationReport): string;
|
|
124
|
-
export declare function renderDoctorReviewBundleVerification(report: DoctorReviewBundleVerificationReport
|
|
128
|
+
export declare function renderDoctorReviewBundleVerification(report: DoctorReviewBundleVerificationReport, options?: {
|
|
129
|
+
failuresOnly?: boolean;
|
|
130
|
+
}): string;
|
|
125
131
|
export declare function renderDoctorReviewBundleDiffJson(report: DoctorReviewBundleDiffReport): string;
|
|
126
132
|
export declare function renderDoctorReviewBundleDiff(report: DoctorReviewBundleDiffReport): string;
|
|
127
133
|
export declare function renderDoctorReviewBundle(bundle: DoctorReviewBundle): string;
|
|
@@ -697,7 +697,12 @@ export async function verifyDoctorReviewBundle(bundleDirectory, options) {
|
|
|
697
697
|
message: "The bundled release evidence could not be verified."
|
|
698
698
|
});
|
|
699
699
|
}
|
|
700
|
-
const failedChecks = checks
|
|
700
|
+
const failedChecks = checks
|
|
701
|
+
.filter((check) => check.status === "fail")
|
|
702
|
+
.map((check) => ({
|
|
703
|
+
id: check.id,
|
|
704
|
+
message: check.message
|
|
705
|
+
}));
|
|
701
706
|
const fileChecks = checks.filter((check) => check.id.startsWith("review_bundle.file."));
|
|
702
707
|
const manifestStatus = checks.find((check) => check.id === "review_bundle.manifest.valid")?.status ?? "fail";
|
|
703
708
|
return {
|
|
@@ -717,6 +722,7 @@ export async function verifyDoctorReviewBundle(bundleDirectory, options) {
|
|
|
717
722
|
releaseEvidence: releaseEvidence?.status ?? "fail"
|
|
718
723
|
},
|
|
719
724
|
checks,
|
|
725
|
+
failedChecks,
|
|
720
726
|
attestation,
|
|
721
727
|
releaseEvidence
|
|
722
728
|
};
|
|
@@ -724,7 +730,7 @@ export async function verifyDoctorReviewBundle(bundleDirectory, options) {
|
|
|
724
730
|
export function renderDoctorReviewBundleVerificationJson(report) {
|
|
725
731
|
return JSON.stringify(report, null, 2);
|
|
726
732
|
}
|
|
727
|
-
export function renderDoctorReviewBundleVerification(report) {
|
|
733
|
+
export function renderDoctorReviewBundleVerification(report, options = {}) {
|
|
728
734
|
const lines = [
|
|
729
735
|
"Doctor Review Bundle Verification",
|
|
730
736
|
"=================================",
|
|
@@ -737,10 +743,24 @@ export function renderDoctorReviewBundleVerification(report) {
|
|
|
737
743
|
`Runtime policy: ${report.summary.runtimePolicy.toUpperCase()}`,
|
|
738
744
|
`Attestation: ${report.summary.attestation.toUpperCase()}`,
|
|
739
745
|
`Release evidence: ${report.summary.releaseEvidence.toUpperCase()}`,
|
|
746
|
+
`Failed checks: ${report.failedChecks.length}`,
|
|
740
747
|
"",
|
|
741
|
-
"Checks",
|
|
742
|
-
"
|
|
748
|
+
"Failed Checks",
|
|
749
|
+
"-------------"
|
|
743
750
|
];
|
|
751
|
+
if (report.failedChecks.length === 0) {
|
|
752
|
+
lines.push("None.");
|
|
753
|
+
}
|
|
754
|
+
else {
|
|
755
|
+
for (const check of report.failedChecks) {
|
|
756
|
+
lines.push(`FAIL ${check.id}`);
|
|
757
|
+
lines.push(` ${check.message}`);
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
if (options.failuresOnly) {
|
|
761
|
+
return lines.join("\n");
|
|
762
|
+
}
|
|
763
|
+
lines.push("", "Checks", "------");
|
|
744
764
|
for (const check of report.checks) {
|
|
745
765
|
lines.push(`${check.status === "pass" ? "PASS" : "FAIL"} ${check.id}`);
|
|
746
766
|
lines.push(` ${check.message}`);
|
package/dist/run-cli.js
CHANGED
|
@@ -73,7 +73,7 @@ const defaultIo = {
|
|
|
73
73
|
}
|
|
74
74
|
};
|
|
75
75
|
function printUsage(io) {
|
|
76
|
-
io.writeStderr("Usage: codex-plugin-doctor check <path|--installed> [filter] [--policy codex-publish|mcp-strict|security] [--compat] [--json|--markdown|--badge-json|--badge-markdown] [--output <path>] [--history <path>] [--runtime] [--require-runtime-approval --runtime-approval-digest <digest>] [--verbose-runtime] [--explain] [--no-animations] [--ascii]\n codex-plugin-doctor audit --installed [filter] [--policy codex-publish|mcp-strict|security] [--security] [--compat] [--json] [--output <path>] [--cache] [--changed]\n codex-plugin-doctor mcp <path> [--json] [--output <path>]\n codex-plugin-doctor security <path> [--policy security] [--json|--scorecard]\n codex-plugin-doctor compat <path> [--all|--client <client>] [--json] [--scorecard] [--output <path>] [--install-preview|--apply --backup]\n codex-plugin-doctor fix <path> (--dry-run|--interactive --backup|--apply --backup)\n codex-plugin-doctor history <history.jsonl> [--json] [--fail-on-regression]\n codex-plugin-doctor doctor [npm <package>|contract|corpus|runtime-plan <path> [--json|--markdown] [--output <path>]|runtime-policy <path> [--json] [--output <path>]|review-bundle <path> --output <dir> --sign-key-env NAME [--json] [--allow-dirty] [--allow-untagged]|review-bundle verify <bundle-dir> --target <path> --sign-key-env NAME [--json] [--output <path>]|review-bundle diff --before <dir> --after <dir> [--json]|attest <path> [--sign-key-env NAME]|attest verify <attestation.json> --target <path> --sign-key-env NAME|release-evidence <path> --sign-key-env NAME [--allow-dirty] [--allow-untagged] [--require-runtime-approval --runtime-approval-digest <digest>]|release-evidence verify <evidence.json> --target <path> --sign-key-env NAME|release-evidence asset <path> --tag <tag> --output <evidence.json> --sign-key-env NAME [--upload]|mcp <path>|inspector <path>|diff --before <path> --after <path>|recommend <path>|trust <path>|perf <path> [--max-total-ms <ms>] [--max-stage-ms stage=ms]|export --bundle <path>|snapshot|clients|--json|--update-check]\n codex-plugin-doctor init [path] [--template skill-only|mcp-stdio|mcp-http|full-runtime]\n codex-plugin-doctor init-ci [path]\n codex-plugin-doctor self-test\n codex-plugin-doctor list --installed\n codex-plugin-doctor explain <finding-id>\n codex-plugin-doctor --version\n\nFirst run:\n codex-plugin-doctor doctor\n codex-plugin-doctor self-test\n codex-plugin-doctor init my-plugin\n codex-plugin-doctor check . --runtime --explain");
|
|
76
|
+
io.writeStderr("Usage: codex-plugin-doctor check <path|--installed> [filter] [--policy codex-publish|mcp-strict|security] [--compat] [--json|--markdown|--badge-json|--badge-markdown] [--output <path>] [--history <path>] [--runtime] [--require-runtime-approval --runtime-approval-digest <digest>] [--verbose-runtime] [--explain] [--no-animations] [--ascii]\n codex-plugin-doctor audit --installed [filter] [--policy codex-publish|mcp-strict|security] [--security] [--compat] [--json] [--output <path>] [--cache] [--changed]\n codex-plugin-doctor mcp <path> [--json] [--output <path>]\n codex-plugin-doctor security <path> [--policy security] [--json|--scorecard]\n codex-plugin-doctor compat <path> [--all|--client <client>] [--json] [--scorecard] [--output <path>] [--install-preview|--apply --backup]\n codex-plugin-doctor fix <path> (--dry-run|--interactive --backup|--apply --backup)\n codex-plugin-doctor history <history.jsonl> [--json] [--fail-on-regression]\n codex-plugin-doctor doctor [npm <package>|contract|corpus|runtime-plan <path> [--json|--markdown] [--output <path>]|runtime-policy <path> [--json] [--output <path>]|review-bundle <path> --output <dir> --sign-key-env NAME [--json] [--allow-dirty] [--allow-untagged]|review-bundle verify <bundle-dir> --target <path> --sign-key-env NAME [--json] [--output <path>] [--failures-only]|review-bundle diff --before <dir> --after <dir> [--json]|attest <path> [--sign-key-env NAME]|attest verify <attestation.json> --target <path> --sign-key-env NAME|release-evidence <path> --sign-key-env NAME [--allow-dirty] [--allow-untagged] [--require-runtime-approval --runtime-approval-digest <digest>]|release-evidence verify <evidence.json> --target <path> --sign-key-env NAME|release-evidence asset <path> --tag <tag> --output <evidence.json> --sign-key-env NAME [--upload]|mcp <path>|inspector <path>|diff --before <path> --after <path>|recommend <path>|trust <path>|perf <path> [--max-total-ms <ms>] [--max-stage-ms stage=ms]|export --bundle <path>|snapshot|clients|--json|--update-check]\n codex-plugin-doctor init [path] [--template skill-only|mcp-stdio|mcp-http|full-runtime]\n codex-plugin-doctor init-ci [path]\n codex-plugin-doctor self-test\n codex-plugin-doctor list --installed\n codex-plugin-doctor explain <finding-id>\n codex-plugin-doctor --version\n\nFirst run:\n codex-plugin-doctor doctor\n codex-plugin-doctor self-test\n codex-plugin-doctor init my-plugin\n codex-plugin-doctor check . --runtime --explain");
|
|
77
77
|
}
|
|
78
78
|
const performanceStageNames = new Set([
|
|
79
79
|
"validation",
|
|
@@ -449,6 +449,7 @@ export async function runCli(args, io = defaultIo, options = {}) {
|
|
|
449
449
|
: null;
|
|
450
450
|
const verifyFlags = bundleDirectory ? remainingArgs.slice(2) : remainingArgs.slice(1);
|
|
451
451
|
const jsonOutput = verifyFlags.includes("--json");
|
|
452
|
+
const failuresOnly = verifyFlags.includes("--failures-only");
|
|
452
453
|
const outputIndex = verifyFlags.indexOf("--output");
|
|
453
454
|
const outputPath = outputIndex === -1 ? null : verifyFlags[outputIndex + 1];
|
|
454
455
|
const targetIndex = verifyFlags.indexOf("--target");
|
|
@@ -490,7 +491,7 @@ export async function runCli(args, io = defaultIo, options = {}) {
|
|
|
490
491
|
});
|
|
491
492
|
const renderedReport = jsonOutput
|
|
492
493
|
? renderDoctorReviewBundleVerificationJson(report)
|
|
493
|
-
: renderDoctorReviewBundleVerification(report);
|
|
494
|
+
: renderDoctorReviewBundleVerification(report, { failuresOnly });
|
|
494
495
|
if (outputPath) {
|
|
495
496
|
await writeFile(outputPath, renderedReport, "utf8");
|
|
496
497
|
}
|
package/package.json
CHANGED