devrager 0.0.4

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 (43) hide show
  1. package/dist/cli.js +988 -0
  2. package/dist/cli.js.map +7 -0
  3. package/dist/lib/adapters/amp.d.ts +3 -0
  4. package/dist/lib/adapters/amp.d.ts.map +1 -0
  5. package/dist/lib/adapters/amp.js +74 -0
  6. package/dist/lib/adapters/amp.js.map +1 -0
  7. package/dist/lib/adapters/claude.d.ts +3 -0
  8. package/dist/lib/adapters/claude.d.ts.map +1 -0
  9. package/dist/lib/adapters/claude.js +137 -0
  10. package/dist/lib/adapters/claude.js.map +1 -0
  11. package/dist/lib/adapters/cline.d.ts +3 -0
  12. package/dist/lib/adapters/cline.d.ts.map +1 -0
  13. package/dist/lib/adapters/cline.js +122 -0
  14. package/dist/lib/adapters/cline.js.map +1 -0
  15. package/dist/lib/adapters/codex.d.ts +3 -0
  16. package/dist/lib/adapters/codex.d.ts.map +1 -0
  17. package/dist/lib/adapters/codex.js +99 -0
  18. package/dist/lib/adapters/codex.js.map +1 -0
  19. package/dist/lib/adapters/index.d.ts +17 -0
  20. package/dist/lib/adapters/index.d.ts.map +1 -0
  21. package/dist/lib/adapters/index.js +27 -0
  22. package/dist/lib/adapters/index.js.map +1 -0
  23. package/dist/lib/adapters/opencode.d.ts +3 -0
  24. package/dist/lib/adapters/opencode.d.ts.map +1 -0
  25. package/dist/lib/adapters/opencode.js +86 -0
  26. package/dist/lib/adapters/opencode.js.map +1 -0
  27. package/dist/lib/adapters/pi.d.ts +3 -0
  28. package/dist/lib/adapters/pi.d.ts.map +1 -0
  29. package/dist/lib/adapters/pi.js +112 -0
  30. package/dist/lib/adapters/pi.js.map +1 -0
  31. package/dist/lib/adapters/zed.d.ts +3 -0
  32. package/dist/lib/adapters/zed.d.ts.map +1 -0
  33. package/dist/lib/adapters/zed.js +156 -0
  34. package/dist/lib/adapters/zed.js.map +1 -0
  35. package/dist/lib/detector/index.d.ts +32 -0
  36. package/dist/lib/detector/index.d.ts.map +1 -0
  37. package/dist/lib/detector/index.js +224 -0
  38. package/dist/lib/detector/index.js.map +1 -0
  39. package/dist/lib/index.d.ts +3 -0
  40. package/dist/lib/index.d.ts.map +1 -0
  41. package/dist/lib/index.js +3 -0
  42. package/dist/lib/index.js.map +1 -0
  43. package/package.json +40 -0
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Core wordlist: canonical forms, conjugations, compound words, and common typos.
3
+ * Grouped by root word for reporting rollup.
4
+ *
5
+ * Sources:
6
+ * - swearjar npm (en_US.json) for compound words
7
+ * - Manual typo variants based on common keyboard transpositions
8
+ */
9
+ const WORDLIST = [
10
+ // === FUCK family (strong) ===
11
+ // Canonical forms
12
+ { word: "fuck", severity: "strong", group: "fuck" },
13
+ { word: "fucking", severity: "strong", group: "fuck" },
14
+ { word: "fucked", severity: "strong", group: "fuck" },
15
+ { word: "fucker", severity: "strong", group: "fuck" },
16
+ { word: "fuckin", severity: "strong", group: "fuck" },
17
+ { word: "fucks", severity: "strong", group: "fuck" },
18
+ // Compound words
19
+ { word: "motherfucker", severity: "strong", group: "fuck" },
20
+ { word: "motherfucking", severity: "strong", group: "fuck" },
21
+ { word: "mothafucka", severity: "strong", group: "fuck" },
22
+ { word: "fuckup", severity: "strong", group: "fuck" },
23
+ { word: "fuckoff", severity: "strong", group: "fuck" },
24
+ { word: "clusterfuck", severity: "strong", group: "fuck" },
25
+ { word: "fuckwit", severity: "strong", group: "fuck" },
26
+ { word: "fucktard", severity: "strong", group: "fuck" },
27
+ { word: "fuckface", severity: "strong", group: "fuck" },
28
+ { word: "fuckhead", severity: "strong", group: "fuck" },
29
+ // Typos — transpositions
30
+ { word: "fukc", severity: "strong", group: "fuck" },
31
+ { word: "fukcing", severity: "strong", group: "fuck" },
32
+ { word: "fukced", severity: "strong", group: "fuck" },
33
+ { word: "fukcer", severity: "strong", group: "fuck" },
34
+ { word: "fcuk", severity: "strong", group: "fuck" },
35
+ { word: "fcuking", severity: "strong", group: "fuck" },
36
+ { word: "fcuked", severity: "strong", group: "fuck" },
37
+ { word: "fuk", severity: "strong", group: "fuck" },
38
+ { word: "fuking", severity: "strong", group: "fuck" },
39
+ { word: "fuked", severity: "strong", group: "fuck" },
40
+ { word: "fuker", severity: "strong", group: "fuck" },
41
+ { word: "fuxk", severity: "strong", group: "fuck" },
42
+ { word: "fuxking", severity: "strong", group: "fuck" },
43
+ // === SHIT family (strong) ===
44
+ { word: "shit", severity: "strong", group: "shit" },
45
+ { word: "shitty", severity: "strong", group: "shit" },
46
+ { word: "shitting", severity: "strong", group: "shit" },
47
+ { word: "shits", severity: "strong", group: "shit" },
48
+ { word: "shitted", severity: "strong", group: "shit" },
49
+ // Compound words
50
+ { word: "bullshit", severity: "strong", group: "shit" },
51
+ { word: "horseshit", severity: "strong", group: "shit" },
52
+ { word: "dipshit", severity: "strong", group: "shit" },
53
+ { word: "shitshow", severity: "strong", group: "shit" },
54
+ { word: "shithead", severity: "strong", group: "shit" },
55
+ { word: "shithole", severity: "strong", group: "shit" },
56
+ { word: "shitface", severity: "strong", group: "shit" },
57
+ { word: "shitfaced", severity: "strong", group: "shit" },
58
+ { word: "shitstain", severity: "strong", group: "shit" },
59
+ { word: "shitbag", severity: "strong", group: "shit" },
60
+ // Typos
61
+ { word: "hsit", severity: "strong", group: "shit" },
62
+ { word: "siht", severity: "strong", group: "shit" },
63
+ { word: "shti", severity: "strong", group: "shit" },
64
+ { word: "sjit", severity: "strong", group: "shit" },
65
+ { word: "shjt", severity: "strong", group: "shit" },
66
+ { word: "bulshit", severity: "strong", group: "shit" },
67
+ { word: "bullsht", severity: "strong", group: "shit" },
68
+ // === ASS family (moderate) ===
69
+ { word: "ass", severity: "moderate", group: "ass" },
70
+ { word: "asses", severity: "moderate", group: "ass" },
71
+ // Compound words (these are strong)
72
+ { word: "asshole", severity: "strong", group: "ass" },
73
+ { word: "assholes", severity: "strong", group: "ass" },
74
+ { word: "jackass", severity: "strong", group: "ass" },
75
+ { word: "dumbass", severity: "strong", group: "ass" },
76
+ { word: "fatass", severity: "moderate", group: "ass" },
77
+ { word: "asshat", severity: "strong", group: "ass" },
78
+ { word: "asswipe", severity: "strong", group: "ass" },
79
+ { word: "badass", severity: "mild", group: "ass" },
80
+ // === DAMN family (moderate) ===
81
+ { word: "damn", severity: "moderate", group: "damn" },
82
+ { word: "damned", severity: "moderate", group: "damn" },
83
+ { word: "damnit", severity: "moderate", group: "damn" },
84
+ { word: "dammit", severity: "moderate", group: "damn" },
85
+ { word: "goddamn", severity: "moderate", group: "damn" },
86
+ { word: "goddamnit", severity: "moderate", group: "damn" },
87
+ { word: "goddammit", severity: "moderate", group: "damn" },
88
+ // === BITCH family (strong) ===
89
+ { word: "bitch", severity: "strong", group: "bitch" },
90
+ { word: "bitches", severity: "strong", group: "bitch" },
91
+ { word: "bitching", severity: "strong", group: "bitch" },
92
+ { word: "bitchy", severity: "strong", group: "bitch" },
93
+ { word: "bitchass", severity: "strong", group: "bitch" },
94
+ // === BASTARD (strong) ===
95
+ { word: "bastard", severity: "strong", group: "bastard" },
96
+ { word: "bastards", severity: "strong", group: "bastard" },
97
+ // === PISS family (moderate) ===
98
+ { word: "piss", severity: "moderate", group: "piss" },
99
+ { word: "pissed", severity: "moderate", group: "piss" },
100
+ { word: "pissing", severity: "moderate", group: "piss" },
101
+ { word: "pissoff", severity: "moderate", group: "piss" },
102
+ // === DICK (moderate) ===
103
+ { word: "dick", severity: "moderate", group: "dick" },
104
+ { word: "dickhead", severity: "strong", group: "dick" },
105
+ // === CRAP (moderate) ===
106
+ { word: "crap", severity: "moderate", group: "crap" },
107
+ { word: "crappy", severity: "moderate", group: "crap" },
108
+ { word: "crapping", severity: "moderate", group: "crap" },
109
+ // === HELL (mild) ===
110
+ { word: "hell", severity: "mild", group: "hell" },
111
+ // === Abbreviations (mild) ===
112
+ { word: "wtf", severity: "mild", group: "wtf" },
113
+ { word: "stfu", severity: "mild", group: "stfu" },
114
+ { word: "lmfao", severity: "mild", group: "lmfao" },
115
+ { word: "lmao", severity: "mild", group: "lmao" },
116
+ // === CUNT (strong) ===
117
+ { word: "cunt", severity: "strong", group: "cunt" },
118
+ { word: "cunts", severity: "strong", group: "cunt" },
119
+ ];
120
+ /**
121
+ * Normalize text before matching:
122
+ * 1. Collapse repeated characters (3+ of the same char → 2)
123
+ * e.g. "fuuuuck" → "fuuck", "shiiiiit" → "shiit"
124
+ * This lets "fuuuuck" match against "fuck" after the regex runs,
125
+ * because the pattern also includes "fuuck" style intermediates.
126
+ *
127
+ * Actually — better approach: collapse ALL runs of 2+ to 1 for matching
128
+ * purposes, while keeping the original text for position tracking.
129
+ * e.g. "fuuuuck" → "fuck", "shiiiit" → "shit"
130
+ * This directly normalizes to the root word.
131
+ */
132
+ function collapseRepeats(text) {
133
+ return text.replace(/(.)\1+/g, "$1");
134
+ }
135
+ /**
136
+ * Build the detection regex from the wordlist.
137
+ * Sort longer words first so "motherfucker" matches before "fuck".
138
+ */
139
+ function buildPattern(words) {
140
+ const sorted = [...words].sort((a, b) => b.word.length - a.word.length);
141
+ const pattern = sorted.map((w) => w.word).join("|");
142
+ return new RegExp(`\\b(${pattern})\\b`, "gi");
143
+ }
144
+ const DEFAULT_PATTERN = buildPattern(WORDLIST);
145
+ const WORD_MAP = new Map(WORDLIST.map((w) => [w.word.toLowerCase(), w]));
146
+ /**
147
+ * Detect profanity in a string.
148
+ *
149
+ * Runs detection in two passes:
150
+ * 1. Direct match on original text (preserves positions)
151
+ * 2. Match on repeat-collapsed text (catches fuuuuck, shiiiiit, etc.)
152
+ */
153
+ export function detect(text) {
154
+ const matches = [];
155
+ const seen = new Set(); // track original-text positions we've already matched
156
+ // Pass 1: direct match on original (lowercase) text
157
+ runPattern(text, text.toLowerCase(), matches, seen);
158
+ // Pass 2: match on collapsed text to catch repeated chars
159
+ const collapsed = collapseRepeats(text.toLowerCase());
160
+ if (collapsed !== text.toLowerCase()) {
161
+ runPattern(text, collapsed, matches, seen);
162
+ }
163
+ return { count: matches.length, matches };
164
+ }
165
+ function runPattern(_originalText, searchText, matches, seen) {
166
+ DEFAULT_PATTERN.lastIndex = 0;
167
+ let match;
168
+ while ((match = DEFAULT_PATTERN.exec(searchText)) !== null) {
169
+ if (seen.has(match.index))
170
+ continue;
171
+ const word = match[0].toLowerCase();
172
+ const entry = WORD_MAP.get(word);
173
+ if (!entry)
174
+ continue;
175
+ seen.add(match.index);
176
+ matches.push({
177
+ word,
178
+ index: match.index,
179
+ severity: entry.severity,
180
+ group: entry.group,
181
+ });
182
+ }
183
+ }
184
+ /**
185
+ * Create a custom detector with additional words.
186
+ */
187
+ export function createDetector(extraWords) {
188
+ const allWords = extraWords ? [...WORDLIST, ...extraWords] : WORDLIST;
189
+ const pattern = buildPattern(allWords);
190
+ const wordMap = new Map(allWords.map((w) => [w.word.toLowerCase(), w]));
191
+ return (text) => {
192
+ const matches = [];
193
+ const seen = new Set();
194
+ const lower = text.toLowerCase();
195
+ pattern.lastIndex = 0;
196
+ let match;
197
+ while ((match = pattern.exec(lower)) !== null) {
198
+ if (seen.has(match.index))
199
+ continue;
200
+ const word = match[0].toLowerCase();
201
+ const entry = wordMap.get(word);
202
+ if (!entry)
203
+ continue;
204
+ seen.add(match.index);
205
+ matches.push({ word, index: match.index, severity: entry.severity, group: entry.group });
206
+ }
207
+ const collapsed = collapseRepeats(lower);
208
+ if (collapsed !== lower) {
209
+ pattern.lastIndex = 0;
210
+ while ((match = pattern.exec(collapsed)) !== null) {
211
+ if (seen.has(match.index))
212
+ continue;
213
+ const word = match[0].toLowerCase();
214
+ const entry = wordMap.get(word);
215
+ if (!entry)
216
+ continue;
217
+ seen.add(match.index);
218
+ matches.push({ word, index: match.index, severity: entry.severity, group: entry.group });
219
+ }
220
+ }
221
+ return { count: matches.length, matches };
222
+ };
223
+ }
224
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/detector/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { detect, createDetector, type DetectionResult, type Match, type Severity, type WordEntry, } from "./detector/index";
2
+ export { createAdapter, allAdapters, type Adapter, type Message } from "./adapters/index";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,KAAK,SAAS,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { detect, createDetector, } from "./detector/index";
2
+ export { createAdapter, allAdapters } from "./adapters/index";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,cAAc,GAKf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,WAAW,EAA8B,MAAM,kBAAkB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "devrager",
3
+ "version": "0.0.4",
4
+ "description": "Count how many times you swear at your coding agents",
5
+ "type": "module",
6
+ "bin": {
7
+ "devrager": "./dist/cli.js"
8
+ },
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/lib/index.d.ts",
12
+ "import": "./dist/lib/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "start": "node dist/cli.js",
20
+ "build": "node build.js",
21
+ "dev": "node build.js --watch",
22
+ "typecheck": "tsc --noEmit",
23
+ "lint": "oxlint src/",
24
+ "format": "oxfmt --check src/"
25
+ },
26
+ "engines": {
27
+ "node": ">=20"
28
+ },
29
+ "license": "MIT",
30
+ "devDependencies": {
31
+ "@types/better-sqlite3": "^7.6.13",
32
+ "@types/node": "^25.6.1",
33
+ "esbuild": "^0.25.0",
34
+ "oxlint": "^0.16.0",
35
+ "typescript": "^5.8.0"
36
+ },
37
+ "optionalDependencies": {
38
+ "better-sqlite3": "^11.0.0"
39
+ }
40
+ }