supply-chain-guard 5.25.4 → 5.25.5

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
@@ -131,7 +131,7 @@ Run the scanner as a [pre-commit](https://pre-commit.com) hook (Python-ecosystem
131
131
  ```yaml
132
132
  repos:
133
133
  - repo: https://github.com/homeofe/supply-chain-guard
134
- rev: v5.25.4
134
+ rev: v5.25.5
135
135
  hooks:
136
136
  - id: supply-chain-guard
137
137
  ```
package/action.yml CHANGED
@@ -66,7 +66,7 @@ runs:
66
66
 
67
67
  - name: Install supply-chain-guard
68
68
  shell: bash
69
- run: npm install -g supply-chain-guard@5.25.4 --ignore-scripts --no-audit --no-fund
69
+ run: npm install -g supply-chain-guard@5.25.5 --ignore-scripts --no-audit --no-fund
70
70
 
71
71
  - name: Run scan
72
72
  id: scan
@@ -417,10 +417,17 @@ runs:
417
417
  // Treat every scanner-rendered line as inert code. Even the Markdown
418
418
  // formatter contains package-controlled text, which must not create
419
419
  // links, images, headings, mentions, or other active PR content.
420
+ // Guard on the SOURCE, not the indented result. Indenting an empty
421
+ // report yields ' ', which is truthy, so every `if (reportForComment)`
422
+ // below would fire and the clean-scan fallback would be unreachable -
423
+ // a run that recovered to clean would replace a stale warning comment
424
+ // with a blank indented line instead of saying so.
420
425
  let reportForComment = escapedReport
421
- .split(/\r?\n/)
422
- .map((line) => ` ${line}`)
423
- .join('\n');
426
+ ? escapedReport
427
+ .split(/\r?\n/)
428
+ .map((line) => ` ${line}`)
429
+ .join('\n')
430
+ : '';
424
431
  if (reportReadTruncated && reportForComment) {
425
432
  reportForComment += '\n\n> Report excerpt truncated before comment construction.';
426
433
  }
package/dist/cli.js CHANGED
@@ -187,7 +187,7 @@ function assertDistinctOutputPaths(options) {
187
187
  program
188
188
  .name("supply-chain-guard")
189
189
  .description("Open-source supply-chain security scanner. Detects GlassWorm and similar malware campaigns in npm packages, PyPI packages, code repos, VS Code extensions, and project dependencies.")
190
- .version("5.25.4");
190
+ .version("5.25.5");
191
191
  // ── scan command ────────────────────────────────────────────────────
192
192
  program
193
193
  .command("scan")
@@ -49,7 +49,7 @@ const path = __importStar(require("node:path"));
49
49
  const https = __importStar(require("node:https"));
50
50
  const types_js_1 = require("./types.js");
51
51
  const pattern_scanner_js_1 = require("./pattern-scanner.js");
52
- const TOOL_VERSION = "5.25.4";
52
+ const TOOL_VERSION = "5.25.5";
53
53
  const NPM_REGISTRY = "https://registry.npmjs.org";
54
54
  const NPM_DOWNLOADS_API = "https://api.npmjs.org/downloads/point/last-week";
55
55
  const PYPI_REGISTRY = "https://pypi.org/pypi";
@@ -61,7 +61,7 @@ const extracted_file_walker_js_1 = require("./extracted-file-walker.js");
61
61
  const threat_intel_js_1 = require("./threat-intel.js");
62
62
  const install_guard_js_1 = require("./install-guard.js");
63
63
  const remote_download_js_1 = require("./remote-download.js");
64
- const TOOL_VERSION = "5.25.4";
64
+ const TOOL_VERSION = "5.25.5";
65
65
  const NPM_REGISTRY = "https://registry.npmjs.org";
66
66
  const NPM_REGISTRY_HOST = "registry.npmjs.org";
67
67
  const RAW_GITHUB_HOST = "raw.githubusercontent.com";
@@ -56,7 +56,7 @@ const patterns_js_1 = require("./patterns.js");
56
56
  const pattern_scanner_js_1 = require("./pattern-scanner.js");
57
57
  const extracted_file_walker_js_1 = require("./extracted-file-walker.js");
58
58
  const remote_download_js_1 = require("./remote-download.js");
59
- const TOOL_VERSION = "5.25.4";
59
+ const TOOL_VERSION = "5.25.5";
60
60
  const PYPI_API = "https://pypi.org/pypi";
61
61
  const PYPI_METADATA_HOST = "pypi.org";
62
62
  const PYPI_ARTIFACT_HOST = "files.pythonhosted.org";
package/dist/reporter.js CHANGED
@@ -111,7 +111,7 @@ function formatJson(report) {
111
111
  function formatText(report) {
112
112
  const lines = [];
113
113
  // ── layout constants ───────────────────────────────────────────────────────
114
- const VERSION = "5.25.4";
114
+ const VERSION = "5.25.5";
115
115
  const W = 76; // visible chars between "│ " and " │" (total line = 80)
116
116
  // ── ANSI helpers ───────────────────────────────────────────────────────────
117
117
  const stripAnsi = (s) => s.replace(/\x1b\[[0-9;]*m/g, "");
@@ -564,7 +564,7 @@ function formatSarif(report) {
564
564
  tool: {
565
565
  driver: {
566
566
  name: "supply-chain-guard",
567
- version: "5.25.4",
567
+ version: "5.25.5",
568
568
  informationUri: "https://github.com/homeofe/supply-chain-guard",
569
569
  rules,
570
570
  },
@@ -654,7 +654,7 @@ function formatSbom(report) {
654
654
  timestamp: report.timestamp,
655
655
  tools: {
656
656
  components: [
657
- { type: "application", name: "supply-chain-guard", version: "5.25.4" },
657
+ { type: "application", name: "supply-chain-guard", version: "5.25.5" },
658
658
  ],
659
659
  },
660
660
  component: {
@@ -777,7 +777,7 @@ function formatGitlab(report) {
777
777
  name: "supply-chain-guard",
778
778
  url: "https://github.com/homeofe/supply-chain-guard",
779
779
  vendor: { name: "supply-chain-guard" },
780
- version: "5.25.4",
780
+ version: "5.25.5",
781
781
  };
782
782
  const vulnerabilities = report.findings
783
783
  .filter((f) => !f.suppressed)
@@ -1019,7 +1019,7 @@ footer{text-align:center;padding:24px;color:#94a3b8;font-size:13px}
1019
1019
  ` : ""}
1020
1020
 
1021
1021
  <footer>
1022
- Generated by <a href="https://github.com/homeofe/supply-chain-guard">supply-chain-guard</a> v5.25.4
1022
+ Generated by <a href="https://github.com/homeofe/supply-chain-guard">supply-chain-guard</a> v5.25.5
1023
1023
  </footer>
1024
1024
  </div>
1025
1025
  <script>
@@ -45,7 +45,7 @@ exports.generateSbomDocument = generateSbomDocument;
45
45
  const fs = __importStar(require("node:fs"));
46
46
  const path = __importStar(require("node:path"));
47
47
  const node_crypto_1 = require("node:crypto");
48
- const TOOL_VERSION = "5.25.4";
48
+ const TOOL_VERSION = "5.25.5";
49
49
  /**
50
50
  * Build a Package URL (purl) for an npm package.
51
51
  */
package/dist/scanner.js CHANGED
@@ -95,7 +95,7 @@ const slsa_verifier_js_1 = require("./slsa-verifier.js");
95
95
  const dependency_confusion_js_1 = require("./dependency-confusion.js");
96
96
  const mcp_scanner_js_1 = require("./mcp-scanner.js");
97
97
  const skills_scanner_js_1 = require("./skills-scanner.js");
98
- const TOOL_VERSION = "5.25.4";
98
+ const TOOL_VERSION = "5.25.5";
99
99
  /**
100
100
  * Exact files that contain this package's own inert detector definitions or
101
101
  * regression fixtures.
@@ -55,7 +55,7 @@ const patterns_js_1 = require("./patterns.js");
55
55
  const pattern_scanner_js_1 = require("./pattern-scanner.js");
56
56
  const extracted_file_walker_js_1 = require("./extracted-file-walker.js");
57
57
  const remote_download_js_1 = require("./remote-download.js");
58
- const TOOL_VERSION = "5.25.4";
58
+ const TOOL_VERSION = "5.25.5";
59
59
  /** Public and testable acquisition bounds for extension registry data. */
60
60
  exports.VSCODE_REMOTE_LIMITS = Object.freeze({
61
61
  metadataBytes: 2 * 1024 * 1024,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "supply-chain-guard",
3
- "version": "5.25.4",
3
+ "version": "5.25.5",
4
4
  "mcpName": "io.github.homeofe/supply-chain-guard",
5
5
  "description": "Open-source supply-chain security scanner for npm, PyPI, Cargo, Go, RubyGems, Composer, NuGet, Docker, VS Code extensions, GitHub Actions, IaC and Solana C2. Detects GlassWorm, Shai-Hulud, PPE attacks, dependency confusion and 350+ threat indicators across all major lockfile formats (npm, pnpm, yarn, bun). Generates CycloneDX 1.6 SBOMs, grades SLSA provenance (in-toto/DSSE structural validation), and correlates findings into attack-chain incidents.",
6
6
  "main": "dist/index.js",
@@ -15,8 +15,8 @@
15
15
  "test:watch": "vitest",
16
16
  "lint": "tsc --noEmit",
17
17
  "check:aahp": "npx --no-install aahp check .",
18
- "check:handoff": "node scripts/aahp-dashboard.mjs --check",
19
- "handoff:refresh": "node scripts/aahp-dashboard.mjs",
18
+ "check:handoff": "node scripts/scg-handoff-docs.mjs --check",
19
+ "handoff:refresh": "node scripts/scg-handoff-docs.mjs",
20
20
  "feed:generate": "node scripts/generate-feed.mjs",
21
21
  "feed:import": "node scripts/import-threat-feed.mjs",
22
22
  "check:feed": "node scripts/generate-feed.mjs --check",
@@ -72,7 +72,7 @@
72
72
  },
73
73
  "devDependencies": {
74
74
  "@babel/parser": "^7.29.7",
75
- "@elvatis_com/aahp": "3.9.1",
75
+ "@elvatis_com/aahp": "3.9.2",
76
76
  "@types/node": "^26.1.2",
77
77
  "@vitest/coverage-v8": "^4.1.10",
78
78
  "typescript": "^7.0.2",