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.
- package/README.md +4 -4
- package/package.json +1 -1
- 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
//
|
|
657
|
-
//
|
|
658
|
-
//
|
|
659
|
-
//
|
|
660
|
-
//
|
|
661
|
-
//
|
|
662
|
-
//
|
|
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.
|
|
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.
|
|
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.
|
|
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,
|
|
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 " +
|