aslopcleaner 1.0.8 → 1.1.0

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 CHANGED
@@ -6,6 +6,7 @@ High-performance CLI to normalize common LLM/AI Unicode punctuation and symbols
6
6
 
7
7
  - Recursively scans the current directory.
8
8
  - Uses `fast-glob` to skip expensive third-party/build/cache directories early.
9
+ - Reads `.agentsignore` (if present) for additional glob patterns to skip.
9
10
  - Never opens `.env*`, SSH keys, certificate/key material, or password database files.
10
11
  - Skips files larger than **125 KiB**.
11
12
  - Uses a jump-sampled binary heuristic before reading as UTF-8.
@@ -21,6 +22,18 @@ pnpx aslopcleaner # pnpm
21
22
  yarn dlx aslopcleaner # Yarn
22
23
  ```
23
24
 
25
+ ## `.agentsignore`
26
+
27
+ Create a `.agentsignore` file in the directory you run `aslopcleaner` from. Each line is a glob pattern (same syntax as `.gitignore`). Blank lines and lines starting with `#` are comments.
28
+
29
+ ```gitignore
30
+ # skip all markdown files
31
+ **/*.md
32
+
33
+ # skip a specific directory
34
+ generated/**
35
+ ```
36
+
24
37
  ## Default replacements
25
38
 
26
39
  ### Dashes / hyphens
@@ -368,6 +381,7 @@ import {
368
381
  scanDirectory,
369
382
  isProbablyBinary,
370
383
  shouldSkipSensitivePath,
384
+ loadAgentsIgnore,
371
385
  REPLACEMENT_RULES,
372
386
  REPLACEMENT_RULE_MAP,
373
387
  } from "aslopcleaner";
package/dist/cli.mjs CHANGED
@@ -3,7 +3,7 @@ import path from 'node:path';
3
3
  import process from 'node:process';
4
4
  import { readFile, writeFile } from 'node:fs/promises';
5
5
  import * as readline from 'node:readline/promises';
6
- import { R as REPLACEMENT_RULES, s as scanDirectory, d as shouldSkipSensitivePath, b as applyOccurrences, c as countByMatch, a as REPLACEMENT_RULE_MAP } from './scanner-DAmuBcau.mjs';
6
+ import { R as REPLACEMENT_RULES, s as scanDirectory, d as shouldSkipSensitivePath, b as applyOccurrences, c as countByMatch, a as REPLACEMENT_RULE_MAP } from './scanner-CwP7wqm4.mjs';
7
7
  import 'fast-glob';
8
8
 
9
9
  function parseArgs(argv) {
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- export { F as FAST_GLOB_IGNORE_PATTERNS, M as MAX_FILE_SIZE_BYTES, R as REPLACEMENT_RULES, a as REPLACEMENT_RULE_MAP, b as applyOccurrences, c as countByMatch, f as findOccurrences, i as isProbablyBinary, n as normalizeGlobPath, s as scanDirectory, d as shouldSkipSensitivePath } from './scanner-DAmuBcau.mjs';
2
+ export { F as FAST_GLOB_IGNORE_PATTERNS, M as MAX_FILE_SIZE_BYTES, R as REPLACEMENT_RULES, a as REPLACEMENT_RULE_MAP, b as applyOccurrences, c as countByMatch, f as findOccurrences, i as isProbablyBinary, l as loadAgentsIgnore, n as normalizeGlobPath, s as scanDirectory, d as shouldSkipSensitivePath } from './scanner-CwP7wqm4.mjs';
3
3
  import 'fast-glob';
4
4
  import 'node:path';
5
5
  import 'node:fs/promises';
@@ -1,6 +1,6 @@
1
1
  import fg from 'fast-glob';
2
2
  import path from 'node:path';
3
- import { open, stat, readFile } from 'node:fs/promises';
3
+ import { readFile, open, stat } from 'node:fs/promises';
4
4
 
5
5
  const SKIPPED_DIRECTORIES = [
6
6
  ".git",
@@ -119,6 +119,14 @@ function shouldSkipSensitivePath(filePath) {
119
119
  function normalizeGlobPath(filePath) {
120
120
  return filePath.split(path.sep).join("/");
121
121
  }
122
+ async function loadAgentsIgnore(cwd) {
123
+ try {
124
+ const content = await readFile(path.join(cwd, ".agentsignore"), "utf8");
125
+ return content.split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith("#"));
126
+ } catch {
127
+ return [];
128
+ }
129
+ }
122
130
 
123
131
  function findOccurrences(content, rules) {
124
132
  const matches = [];
@@ -897,13 +905,14 @@ async function scanDirectory(cwd) {
897
905
  let skippedBySensitivePattern = 0;
898
906
  let skippedBySize = 0;
899
907
  let skippedByBinary = 0;
908
+ const agentsIgnorePatterns = await loadAgentsIgnore(cwd);
900
909
  const stream = fg.stream("**/*", {
901
910
  cwd,
902
911
  onlyFiles: true,
903
912
  dot: true,
904
913
  followSymbolicLinks: false,
905
914
  unique: true,
906
- ignore: [...FAST_GLOB_IGNORE_PATTERNS]
915
+ ignore: [...FAST_GLOB_IGNORE_PATTERNS, ...agentsIgnorePatterns]
907
916
  });
908
917
  const inFlight = /* @__PURE__ */ new Set();
909
918
  const schedule = async (relativePath) => {
@@ -945,4 +954,4 @@ async function scanDirectory(cwd) {
945
954
  };
946
955
  }
947
956
 
948
- export { FAST_GLOB_IGNORE_PATTERNS as F, MAX_FILE_SIZE_BYTES as M, REPLACEMENT_RULES as R, REPLACEMENT_RULE_MAP as a, applyOccurrences as b, countByMatch as c, shouldSkipSensitivePath as d, findOccurrences as f, isProbablyBinary as i, normalizeGlobPath as n, scanDirectory as s };
957
+ export { FAST_GLOB_IGNORE_PATTERNS as F, MAX_FILE_SIZE_BYTES as M, REPLACEMENT_RULES as R, REPLACEMENT_RULE_MAP as a, applyOccurrences as b, countByMatch as c, shouldSkipSensitivePath as d, findOccurrences as f, isProbablyBinary as i, loadAgentsIgnore as l, normalizeGlobPath as n, scanDirectory as s };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aslopcleaner",
3
- "version": "1.0.8",
3
+ "version": "1.1.0",
4
4
  "description": "High-performance CLI to replace common LLM/AI Unicode punctuation and symbols with ASCII equivalents.",
5
5
  "type": "module",
6
6
  "bin": {