whatileaked 0.5.0 → 0.5.1

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 +2 -2
  2. package/dist/cli.js +16 -11
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -58,7 +58,7 @@ is all — no network connection is made at any point.
58
58
  ### When it finds nothing
59
59
 
60
60
  ```
61
- scanned 561 transcripts · 197,016 messages
61
+ scanned 561 transcripts · 197,016 messages · 3 memory files
62
62
 
63
63
  No credentials found.
64
64
  ```
@@ -68,7 +68,7 @@ Nothing to do. This is the good outcome.
68
68
  ### When it finds something
69
69
 
70
70
  ```
71
- scanned 561 transcripts · 196,986 messages
71
+ scanned 561 transcripts · 196,986 messages · 3 memory files
72
72
 
73
73
  * aws-access-token 2 secrets
74
74
  f0b93847 billing-api sent 25 times
package/dist/cli.js CHANGED
@@ -161,8 +161,7 @@ var TerminalReporter = class {
161
161
  if (totals.length === 0) {
162
162
  this.#write(green("No credentials found."));
163
163
  this.#write("");
164
- this.#unread(stats);
165
- if (stats.unread.length > 0) this.#write("");
164
+ if (this.#notScanned(stats)) this.#write("");
166
165
  this.#write(dim(DISCLOSURE));
167
166
  this.#share(sent, stats);
168
167
  return;
@@ -188,12 +187,7 @@ var TerminalReporter = class {
188
187
  red("Remove them there as well as rotating, or the next session sends them again.")
189
188
  );
190
189
  }
191
- if (stats.unscannable > 0) {
192
- this.#write(
193
- yellow(`${plural(stats.unscannable, "message")} could not be scanned and are not counted.`)
194
- );
195
- }
196
- this.#unread(stats);
190
+ this.#notScanned(stats);
197
191
  this.#write("");
198
192
  this.#write(dim("The 8-character code is a fingerprint, never the secret: a truncated"));
199
193
  this.#write(dim("SHA-256, so one credential shows the same code everywhere it leaked."));
@@ -202,12 +196,23 @@ var TerminalReporter = class {
202
196
  this.#write(dim(DISCLOSURE));
203
197
  this.#share(sent, stats);
204
198
  }
205
- /** One plain line per file found and not read. Printed under a clean result
206
- * too, which is exactly where leaving it out would mislead. */
207
- #unread(stats) {
199
+ /**
200
+ * Everything that was found and not looked at: refused messages, then one
201
+ * plain line per file not read. Printed under a clean result too, which is
202
+ * exactly where leaving it out would mislead — a clean scan once returned
203
+ * before the refused count, so a partial scan read as a clean one. Answers
204
+ * whether it wrote anything.
205
+ */
206
+ #notScanned(stats) {
207
+ if (stats.unscannable > 0) {
208
+ this.#write(
209
+ yellow(`${plural(stats.unscannable, "message")} could not be scanned and are not counted.`)
210
+ );
211
+ }
208
212
  for (const file of stats.unread) {
209
213
  this.#write(yellow(`Found ${shorten(file.path)} but did not scan it: ${file.reason}.`));
210
214
  }
215
+ return stats.unscannable > 0 || stats.unread.length > 0;
211
216
  }
212
217
  /**
213
218
  * The one line meant to be pasted somewhere public. Everything above it names
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "whatileaked",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "Scan your local Claude Code, Codex, Cursor and opencode transcripts for credentials you already sent to a model provider.",
5
5
  "type": "module",
6
6
  "imports": {