residoo 0.4.8 → 0.4.9

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.
Files changed (3) hide show
  1. package/README.md +4 -4
  2. package/package.json +1 -1
  3. package/src/scan.js +19 -12
package/README.md CHANGED
@@ -195,10 +195,10 @@ won't be built into the tool that writes it.
195
195
  preview, never the real value, including in `--json` mode. A decoded or
196
196
  rejoined secret is redacted exactly like a plain one.
197
197
  - On an interactive terminal, prints who it is and where it lives before
198
- scanning starts (`residoo v0.4.8 · find secrets your AI coding agent left
198
+ scanning starts (`residoo v0.4.9 · find secrets your AI coding agent left
199
199
  on disk` plus the repo URL), then a live spinner naming the current file
200
200
  as it scans. Every report also opens with the exact version and timestamp
201
- it was run with (`residoo v0.4.8 · scanned 2026-01-01 12:00`; `--json`
201
+ it was run with (`residoo v0.4.9 · scanned 2026-01-01 12:00`; `--json`
202
202
  carries the same as `residooVersion`/`scannedAt`), so a report pasted or
203
203
  screenshotted later never leaves you guessing which build produced it.
204
204
  When there are findings, the report closes with a "Next steps" pointer to
@@ -429,7 +429,7 @@ As a GitHub Action (this repository doubles as a composite action):
429
429
  ```yaml
430
430
  steps:
431
431
  - uses: actions/checkout@v4
432
- - uses: dandovdub/residoo@v0.4.8
432
+ - uses: dandovdub/residoo@v0.4.9
433
433
  ```
434
434
 
435
435
  As a pre-commit hook:
@@ -437,7 +437,7 @@ As a pre-commit hook:
437
437
  ```yaml
438
438
  repos:
439
439
  - repo: https://github.com/dandovdub/residoo
440
- rev: v0.4.8
440
+ rev: v0.4.9
441
441
  hooks:
442
442
  - id: residoo
443
443
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "residoo",
3
- "version": "0.4.8",
3
+ "version": "0.4.9",
4
4
  "description": "Find secrets leaking through your AI coding agent's session history. Zero network calls in the scan path, zero dependencies.",
5
5
  "license": "MIT",
6
6
  "author": "CloudRoam (https://cloudroam.io)",
package/src/scan.js CHANGED
@@ -652,29 +652,36 @@ async function scan({ sources, includeNoisy = false, includeSuppressed = false,
652
652
  // needs saying once; per-vendor detail becomes a compact count table.
653
653
  // Deliberately not gated on isTTY like the scan spinner: a script
654
654
  // piping through a pager or into a log still needs this disclosure.
655
+ //
656
+ // Three columns, not two: an earlier version of this table showed only
657
+ // the vendor name ("AWS 2"), which answers "how many" but drops the
658
+ // one thing a security-conscious user actually wants to check before
659
+ // agreeing to real outbound calls, namely WHICH endpoint each vendor's
660
+ // credential gets sent to. Every vendor's own SIMPLE_VERIFY_VENDOR_LABEL
661
+ // is already written "<Vendor>'s <endpoint>", so split it into the two
662
+ // columns rather than maintaining a second, parallel description.
655
663
  const rows = [];
656
664
  if (pendingAwsVerifications.size > 0 && awsAvailable) {
657
- rows.push(["AWS", pendingAwsVerifications.size]);
665
+ rows.push(["AWS", "sts:get-caller-identity", pendingAwsVerifications.size]);
658
666
  }
659
667
  if (pendingPlanetScaleVerifications.size > 0) {
660
- rows.push(["PlanetScale", pendingPlanetScaleVerifications.size]);
668
+ rows.push(["PlanetScale", "organizations endpoint", pendingPlanetScaleVerifications.size]);
661
669
  }
662
670
  for (const [ruleId, byValue] of pendingSimpleVerifications) {
663
671
  if (byValue.size === 0) continue;
664
- // Vendor labels are consistently written "<Vendor>'s <endpoint
665
- // description>" (see SIMPLE_VERIFY_VENDOR_LABEL above); take the
666
- // part before "'s" rather than maintaining a second, parallel map
667
- // of the same names.
668
- const vendor = SIMPLE_VERIFY_VENDOR_LABEL[ruleId].split("'s ")[0];
669
- rows.push([vendor, byValue.size]);
672
+ const [vendor, endpoint] = SIMPLE_VERIFY_VENDOR_LABEL[ruleId].split("'s ");
673
+ rows.push([vendor, endpoint, byValue.size]);
670
674
  }
671
675
  if (rows.length > 0) {
672
- const width = Math.max(...rows.map(([label]) => label.length));
673
- const table = rows.map(([label, count]) => ` ${label.padEnd(width)} ${count}`).join("\n");
676
+ const vendorWidth = Math.max(...rows.map(([vendor]) => vendor.length));
677
+ const endpointWidth = Math.max(...rows.map(([, endpoint]) => endpoint.length));
678
+ const table = rows
679
+ .map(([vendor, endpoint, count]) => ` ${vendor.padEnd(vendorWidth)} ${endpoint.padEnd(endpointWidth)} ${count}`)
680
+ .join("\n");
674
681
  process.stderr.write(
675
682
  "residoo --verify: checking whether these credentials are still active. Real network " +
676
- "calls, one per vendor's own API, using the exact value found in your transcript, one at " +
677
- "a time. Nothing is cached or sent anywhere but the vendor that issued it.\n\n" +
683
+ "calls, using the exact value found in your transcript, one at a time. Nothing is cached " +
684
+ "or sent anywhere but the endpoint listed below.\n\n" +
678
685
  table + "\n\n"
679
686
  );
680
687
  }