whatileaked 0.5.1 → 0.5.2

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 +3 -1
  2. package/dist/cli.js +16 -5
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -206,7 +206,7 @@ npx whatileaked scan || echo "found something"
206
206
  | Agent | Folder |
207
207
  | --- | --- |
208
208
  | Claude Code | `~/.claude/projects/` · `~/.claude/history.jsonl` · `~/.claude/paste-cache/` · `~/.claude/CLAUDE.md` |
209
- | Codex | `~/.codex/sessions/` · `~/.codex/archived_sessions/` · `~/.codex/history.jsonl` · `~/.codex/AGENTS.md` |
209
+ | Codex | `~/.codex/sessions/` · `~/.codex/archived_sessions/` · `~/.codex/history.jsonl` · `~/.codex/AGENTS.md` · `~/.codex/AGENTS.override.md` |
210
210
  | Cursor | `~/.cursor/projects/*/agent-transcripts/` |
211
211
  | opencode | `~/.local/share/opencode/opencode.db` |
212
212
 
@@ -220,6 +220,8 @@ opencode, and rotate.
220
220
  Cursor keeps its older Ask-mode chats in SQLite as well, and those are not
221
221
  scanned yet. Agent transcripts are covered; Ask history is not.
222
222
 
223
+ Claude Code transcripts it set aside (`*.jsonl.superseded-*`) are scanned too.
224
+
223
225
  Transcripts record credentials that were already sent. So does prompt history,
224
226
  which keeps every prompt you typed and every long paste after the session itself
225
227
  has been cleaned up. Instruction and memory files are worse: they are read again
package/dist/cli.js CHANGED
@@ -2431,7 +2431,16 @@ var FileExtension = {
2431
2431
  database: ".db"
2432
2432
  };
2433
2433
  function isJsonl(path) {
2434
- return path.endsWith(FileExtension.jsonl);
2434
+ return path.endsWith(FileExtension.jsonl) || supersededJsonl.test(path);
2435
+ }
2436
+ var supersededJsonl = /\.jsonl\.superseded-[^/\\]+$/;
2437
+ async function listJsonl(dir) {
2438
+ try {
2439
+ const entries = await readdir(dir, { withFileTypes: true });
2440
+ return entries.filter((entry) => entry.isFile() && isJsonl(entry.name)).map((entry) => entry.name);
2441
+ } catch {
2442
+ return [];
2443
+ }
2435
2444
  }
2436
2445
  async function listFiles(dir, extension) {
2437
2446
  try {
@@ -2638,7 +2647,7 @@ var ClaudeCodeSource = class {
2638
2647
  const dir = join2(root, slug);
2639
2648
  let project = slug;
2640
2649
  for (const nested of await walkDirectories(dir)) {
2641
- for (const file of await listFiles(nested, FileExtension.jsonl)) {
2650
+ for (const file of await listJsonl(nested)) {
2642
2651
  const path = join2(nested, file);
2643
2652
  const cwd = await firstCwd(path);
2644
2653
  if (cwd !== null) project = basename(cwd);
@@ -2682,9 +2691,11 @@ var CodexSource = class {
2682
2691
  this.#home = home2;
2683
2692
  }
2684
2693
  async *discover() {
2685
- const instructions = await resolveFile(join3(this.#home, ".codex", "AGENTS.md"));
2686
- if (instructions !== null) {
2687
- yield { source: this.name, kind: FileKind.memory, path: instructions, project: this.name };
2694
+ for (const name of ["AGENTS.override.md", "AGENTS.md"]) {
2695
+ const instructions = await resolveFile(join3(this.#home, ".codex", name));
2696
+ if (instructions !== null) {
2697
+ yield { source: this.name, kind: FileKind.memory, path: instructions, project: this.name };
2698
+ }
2688
2699
  }
2689
2700
  const history = await resolveFile(join3(this.#home, ".codex", "history.jsonl"));
2690
2701
  if (history !== null) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "whatileaked",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
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": {