residoo 0.4.9 → 0.4.10

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 +13 -13
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.9 · find secrets your AI coding agent left
198
+ scanning starts (`residoo v0.4.10 · 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.9 · scanned 2026-01-01 12:00`; `--json`
201
+ it was run with (`residoo v0.4.10 · 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.9
432
+ - uses: dandovdub/residoo@v0.4.10
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.9
440
+ rev: v0.4.10
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.9",
3
+ "version": "0.4.10",
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
@@ -653,30 +653,30 @@ async function scan({ sources, includeNoisy = false, includeSuppressed = false,
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
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.
656
+ // Went through two earlier shapes, each missing what mattered: first a
657
+ // bare vendor+count ("AWS 2", which credential?), then vendor+endpoint
658
+ // +count ("AWS sts:get-caller-identity 2", still no way to tell WHICH
659
+ // two). What answers "which needs to be handled" is the same redacted
660
+ // preview (first/last 4 characters) already shown for that finding
661
+ // everywhere else in the report reusing redact() on the same raw
662
+ // value record() was called with, not a second display convention.
663
+ // One line per vendor+endpoint header, one indented line per credential.
663
664
  const rows = [];
664
665
  if (pendingAwsVerifications.size > 0 && awsAvailable) {
665
- rows.push(["AWS", "sts:get-caller-identity", pendingAwsVerifications.size]);
666
+ rows.push(["AWS", "sts:get-caller-identity", [...pendingAwsVerifications.keys()].map(redact)]);
666
667
  }
667
668
  if (pendingPlanetScaleVerifications.size > 0) {
668
- rows.push(["PlanetScale", "organizations endpoint", pendingPlanetScaleVerifications.size]);
669
+ rows.push(["PlanetScale", "organizations endpoint", [...pendingPlanetScaleVerifications.keys()].map(redact)]);
669
670
  }
670
671
  for (const [ruleId, byValue] of pendingSimpleVerifications) {
671
672
  if (byValue.size === 0) continue;
672
673
  const [vendor, endpoint] = SIMPLE_VERIFY_VENDOR_LABEL[ruleId].split("'s ");
673
- rows.push([vendor, endpoint, byValue.size]);
674
+ rows.push([vendor, endpoint, [...byValue.keys()].map(redact)]);
674
675
  }
675
676
  if (rows.length > 0) {
676
- const vendorWidth = Math.max(...rows.map(([vendor]) => vendor.length));
677
- const endpointWidth = Math.max(...rows.map(([, endpoint]) => endpoint.length));
678
677
  const table = rows
679
- .map(([vendor, endpoint, count]) => ` ${vendor.padEnd(vendorWidth)} ${endpoint.padEnd(endpointWidth)} ${count}`)
678
+ .map(([vendor, endpoint, previews]) =>
679
+ ` ${vendor} · ${endpoint}\n` + previews.map((p) => ` ${p}`).join("\n"))
680
680
  .join("\n");
681
681
  process.stderr.write(
682
682
  "residoo --verify: checking whether these credentials are still active. Real network " +