codex-plugin-doctor 1.41.0 → 1.43.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 CHANGED
@@ -234,12 +234,12 @@ codex-plugin-doctor audit --installed
234
234
  codex-plugin-doctor audit --installed --security --compat
235
235
  codex-plugin-doctor audit --installed --security --compat --json --output local-audit.json
236
236
  codex-plugin-doctor audit --installed --security --compat --cache
237
- codex-plugin-doctor audit --installed --changed --cache
238
- codex-plugin-doctor audit deps .
239
- codex-plugin-doctor audit deps . --json --output dependency-audit.json
240
- codex-plugin-doctor audit deps . --recommend
241
- codex-plugin-doctor audit deps . --recommend --json --output dependency-remediation.json
242
- codex-plugin-doctor watch .
237
+ codex-plugin-doctor audit --installed --changed --cache
238
+ codex-plugin-doctor audit deps .
239
+ codex-plugin-doctor audit deps . --json --output dependency-audit.json
240
+ codex-plugin-doctor audit deps . --recommend
241
+ codex-plugin-doctor audit deps . --recommend --json --output dependency-remediation.json
242
+ codex-plugin-doctor watch .
243
243
  codex-plugin-doctor watch . --json --output watch-latest.json --debounce-ms 500
244
244
  codex-plugin-doctor init-git-hooks .
245
245
  codex-plugin-doctor init-git-hooks . --json
@@ -304,7 +304,7 @@ codex-plugin-doctor check . --json --runtime --verbose-runtime
304
304
 
305
305
  `audit --installed` runs a local ecosystem audit against every discovered Codex plugin in the installed plugin cache. Add `--security` to include security scorecards, `--compat` to include the all-client compatibility matrix, and `--json --output local-audit.json` when you want a shareable machine-readable report. Add `--cache` to reuse unchanged plugin results between runs; add `--changed` to only report plugins whose fingerprint changed since the last cached audit. Use `--cache-file path/to/audit-cache.json` when CI or scripted runs need an explicit cache location.
306
306
 
307
- `audit deps <path>` runs `npm audit --json` for the target package and normalizes dependency vulnerability results into a stable `schemaVersion: "1.0.0"` report. Use `--json --output dependency-audit.json` when CI needs machine-readable status, vulnerability counts, and the raw npm audit payload. Add `--recommend` to include prioritized remediation actions for direct upgrades, direct no-fix packages, transitive parent updates, and manual transitive review.
307
+ `audit deps <path>` runs `npm audit --json` for the target package and normalizes dependency vulnerability results into a stable `schemaVersion: "1.0.0"` report. Use `--json --output dependency-audit.json` when CI needs machine-readable status, vulnerability counts, and the raw npm audit payload. Add `--recommend` to include prioritized remediation actions for direct upgrades, direct no-fix packages, transitive parent updates, and manual transitive review.
308
308
 
309
309
  `watch <path>` continuously validates a plugin package after file changes. Use `--debounce-ms <ms>` to tune noisy repositories, `--runtime` when runtime probes are required, and `--json --output watch-latest.json` when another process should consume the latest validation snapshot.
310
310
 
@@ -330,7 +330,7 @@ codex-plugin-doctor check . --json --runtime --verbose-runtime
330
330
 
331
331
  `check --profile ci|strict|publish` applies named validation policies. `ci` keeps default behavior, `strict` fails on warnings, and `publish` fails on warnings while enabling runtime probing by default.
332
332
 
333
- `check --explain` adds a deduplicated `Next Actions` summary plus inline rule catalog context to text reports, including the problem summary, rule category, why a finding matters, a more detailed fix path, a compact example, and the matching `codex-plugin-doctor explain <finding-id>` follow-up command.
333
+ `check --explain` adds a deduplicated `Next Actions` summary plus inline rule catalog context to text reports, including the problem summary, rule category, why a finding matters, a more detailed fix path, a compact example, and the matching `codex-plugin-doctor explain <finding-id>` follow-up command.
334
334
 
335
335
  `check --badge-json` emits Shields endpoint-compatible JSON such as `{"schemaVersion":1,"label":"doctor","message":"PASS","color":"brightgreen"}`. `check --badge-markdown` emits a static shields.io Markdown badge for README or release notes. Badge output is intentionally limited to single package checks, not `check --installed`.
336
336
 
@@ -402,9 +402,9 @@ jobs:
402
402
  runs-on: ubuntu-latest
403
403
  steps:
404
404
  - uses: actions/checkout@v5
405
- - uses: Esquetta/CodexPluginDoctor@v1.41.0
406
- with:
407
- version: "1.41.0"
405
+ - uses: Esquetta/CodexPluginDoctor@v1.43.0
406
+ with:
407
+ version: "1.43.0"
408
408
  path: .
409
409
  runtime: "true"
410
410
  policy: codex-publish
@@ -459,7 +459,7 @@ npm run prepare-release
459
459
  npm run release-check
460
460
  ```
461
461
 
462
- `prepare-release` runs tests, builds the TypeScript output, and performs `npm pack --dry-run`. `release-check` adds release preflight checks for a clean git tree, existing npm versions, existing version tags, tests, build, pack dry-run, fresh temp install audit, and publish dry-run.
462
+ `prepare-release` runs tests, builds the TypeScript output, and performs `npm pack --dry-run`. `release-check` adds release preflight checks for a clean git tree, existing npm versions, existing version tags, tests, build, pack dry-run, fresh temp install audit, and publish dry-run.
463
463
 
464
464
  Related docs:
465
465
 
@@ -0,0 +1,2 @@
1
+ import type { CheckResult } from "../domain/types.js";
2
+ export declare function buildRecommendedCommands(result: CheckResult): string[];
@@ -0,0 +1,17 @@
1
+ function quoteCliArg(value) {
2
+ return JSON.stringify(value);
3
+ }
4
+ export function buildRecommendedCommands(result) {
5
+ if (result.findings.length === 0) {
6
+ return [];
7
+ }
8
+ const target = quoteCliArg(result.targetPath);
9
+ const commands = [
10
+ `codex-plugin-doctor doctor recommend ${target}`,
11
+ `codex-plugin-doctor fix ${target} --dry-run`
12
+ ];
13
+ if (result.findings.some((finding) => finding.fingerprint)) {
14
+ commands.push(`codex-plugin-doctor suppress add ${target}`);
15
+ }
16
+ return commands;
17
+ }
@@ -1,5 +1,6 @@
1
1
  import { formatFindingEvidenceLine } from "./format-finding-evidence.js";
2
2
  import { formatFindingFingerprintLine } from "./finding-fingerprint.js";
3
+ import { buildRecommendedCommands } from "./recommended-commands.js";
3
4
  export function buildMarkdownReport(result, options) {
4
5
  const failCount = result.findings.filter((finding) => finding.severity === "fail").length;
5
6
  const warnCount = result.findings.filter((finding) => finding.severity === "warn").length;
@@ -37,6 +38,13 @@ export function buildMarkdownReport(result, options) {
37
38
  lines.push(`| prompts/get | ${result.runtimeScorecard.promptGet.toUpperCase()} |`);
38
39
  }
39
40
  if (result.findings.length > 0) {
41
+ const nextActions = Array.from(new Set(result.findings.map((finding) => finding.suggestedFix))).slice(0, 5);
42
+ if (nextActions.length > 0) {
43
+ lines.push("", "## Next Actions", "");
44
+ for (const [index, action] of nextActions.entries()) {
45
+ lines.push(`${index + 1}. ${action}`);
46
+ }
47
+ }
40
48
  lines.push("", "## Findings", "");
41
49
  for (const finding of result.findings) {
42
50
  lines.push(`### ${finding.severity.toUpperCase()} \`${finding.id}\``);
@@ -70,5 +78,12 @@ export function buildMarkdownReport(result, options) {
70
78
  lines.push("");
71
79
  }
72
80
  }
81
+ const recommendedCommands = buildRecommendedCommands(result);
82
+ if (recommendedCommands.length > 0) {
83
+ lines.push("", "## Recommended Commands", "");
84
+ for (const command of recommendedCommands) {
85
+ lines.push(`- \`${command}\``);
86
+ }
87
+ }
73
88
  return lines.join("\n");
74
89
  }
@@ -1,6 +1,7 @@
1
1
  import { findRuleDefinition } from "../rules/rule-catalog.js";
2
2
  import { formatFindingEvidenceLine } from "./format-finding-evidence.js";
3
3
  import { formatFindingFingerprintLine } from "./finding-fingerprint.js";
4
+ import { buildRecommendedCommands } from "./recommended-commands.js";
4
5
  function getCounts(result) {
5
6
  const failCount = result.findings.filter((finding) => finding.severity === "fail").length;
6
7
  const warnCount = result.findings.filter((finding) => finding.severity === "warn").length;
@@ -118,5 +119,12 @@ export function renderTextReport(result, options = {}) {
118
119
  lines.push(`prompts/list: ${result.runtimeScorecard.promptsList}`);
119
120
  lines.push(`prompts/get: ${result.runtimeScorecard.promptGet}`);
120
121
  }
122
+ const recommendedCommands = buildRecommendedCommands(result);
123
+ if (recommendedCommands.length > 0) {
124
+ lines.push("", "Recommended Commands", "--------------------");
125
+ for (const command of recommendedCommands) {
126
+ lines.push(`- ${command}`);
127
+ }
128
+ }
121
129
  return lines.join("\n");
122
130
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-plugin-doctor",
3
- "version": "1.41.0",
3
+ "version": "1.43.0",
4
4
  "description": "CLI-first validator for Codex plugins, skills, and MCP package surfaces with runtime MCP protocol validation.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",