devrage 0.5.7 → 0.6.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.
Files changed (36) hide show
  1. package/dist/cli.js +527 -55
  2. package/dist/cli.js.map +4 -4
  3. package/dist/lib/adapters/amp.d.ts.map +1 -1
  4. package/dist/lib/adapters/amp.js +2 -1
  5. package/dist/lib/adapters/amp.js.map +1 -1
  6. package/dist/lib/adapters/claude.d.ts.map +1 -1
  7. package/dist/lib/adapters/claude.js +25 -10
  8. package/dist/lib/adapters/claude.js.map +1 -1
  9. package/dist/lib/adapters/cline.d.ts.map +1 -1
  10. package/dist/lib/adapters/cline.js +2 -1
  11. package/dist/lib/adapters/cline.js.map +1 -1
  12. package/dist/lib/adapters/codex.d.ts.map +1 -1
  13. package/dist/lib/adapters/codex.js +62 -19
  14. package/dist/lib/adapters/codex.js.map +1 -1
  15. package/dist/lib/adapters/cursor.js +17 -12
  16. package/dist/lib/adapters/cursor.js.map +1 -1
  17. package/dist/lib/adapters/index.d.ts +3 -1
  18. package/dist/lib/adapters/index.d.ts.map +1 -1
  19. package/dist/lib/adapters/index.js.map +1 -1
  20. package/dist/lib/adapters/opencode.js +7 -7
  21. package/dist/lib/adapters/opencode.js.map +1 -1
  22. package/dist/lib/adapters/pi.js +7 -2
  23. package/dist/lib/adapters/pi.js.map +1 -1
  24. package/dist/lib/adapters/t3code.js +4 -4
  25. package/dist/lib/adapters/t3code.js.map +1 -1
  26. package/dist/lib/adapters/zed.js +6 -5
  27. package/dist/lib/adapters/zed.js.map +1 -1
  28. package/dist/lib/index.d.ts +2 -1
  29. package/dist/lib/index.d.ts.map +1 -1
  30. package/dist/lib/index.js +1 -0
  31. package/dist/lib/index.js.map +1 -1
  32. package/dist/lib/slop/index.d.ts +19 -0
  33. package/dist/lib/slop/index.d.ts.map +1 -0
  34. package/dist/lib/slop/index.js +291 -0
  35. package/dist/lib/slop/index.js.map +1 -0
  36. package/package.json +2 -2
@@ -0,0 +1,291 @@
1
+ /**
2
+ * This list favors phrases developers specifically call out in coding-agent
3
+ * output over generic lists of formal words. Primary research:
4
+ *
5
+ * - https://x.com/jerols/status/2085488576251219973
6
+ * - https://x.com/Voxyz_ai/status/2078857039116156978
7
+ * - https://x.com/kylefox/status/2075280984430514557
8
+ * - https://x.com/ICooper/status/2081740252864008343
9
+ * - https://x.com/rubenhassid/status/2080608944981237799
10
+ * - https://github.com/anthropics/claude-code/issues/53454
11
+ * - https://github.com/anthropics/claude-code/issues/50087
12
+ * - https://jola.dev/posts/how-to-stop-claude-from-saying-load-bearing
13
+ *
14
+ * Ordinary engineering words such as "robust", "harness", "seam", and
15
+ * "leverage" are intentionally not signals on their own.
16
+ */
17
+ const SLOP_SIGNALS = [
18
+ // Claude's especially recognizable coding-agent voice.
19
+ {
20
+ tell: "load-bearing",
21
+ category: "claude-ism",
22
+ pattern: /\bload(?:[-‐‑‒–—\s]+)bearing\b/giu,
23
+ },
24
+ {
25
+ tell: "honest take",
26
+ category: "claude-ism",
27
+ pattern: /\bhonest\s+(?:take|evaluation|assessment)\b/giu,
28
+ },
29
+ {
30
+ tell: "precise mechanism",
31
+ category: "claude-ism",
32
+ pattern: /\b(?:the\s+)?precise\s+mechanism\b/giu,
33
+ },
34
+ {
35
+ tell: "and that matters",
36
+ category: "claude-ism",
37
+ pattern: /\band\s+that\s+matters\b/giu,
38
+ },
39
+ {
40
+ tell: "key insight",
41
+ category: "claude-ism",
42
+ pattern: /\b(?:the\s+)?key\s+insight\b/giu,
43
+ },
44
+ {
45
+ tell: "without ceremony",
46
+ category: "claude-ism",
47
+ pattern: /\b(?:without|with\s+no|needs?\s+no|requires?\s+no|no)\s+(?:additional\s+)?ceremony\b/giu,
48
+ },
49
+ {
50
+ tell: "earns its keep",
51
+ category: "claude-ism",
52
+ pattern: /\bearn(?:s|ed|ing)?\s+(?:its|their|the)\s+keep\b/giu,
53
+ },
54
+ {
55
+ tell: "keeps X honest",
56
+ category: "claude-ism",
57
+ pattern: /\b(?:keep|keeps|keeping|kept)\s+(?:(?:this|that|us|me|things?)|(?:the|our|your|my)\s+[\w-]+(?:\s+[\w-]+){0,2})\s+honest\b/giu,
58
+ },
59
+ {
60
+ tell: "belt-and-suspenders",
61
+ category: "claude-ism",
62
+ pattern: /\bbelt(?:[-‐‑‒–—\s]+)and(?:[-‐‑‒–—\s]+)suspenders\b/giu,
63
+ },
64
+ {
65
+ tell: "soup to nuts",
66
+ category: "claude-ism",
67
+ pattern: /\b(?:from\s+)?soup(?:[-‐‑‒–—\s]+)to(?:[-‐‑‒–—\s]+)nuts\b/giu,
68
+ },
69
+ {
70
+ tell: "architectural seam",
71
+ category: "claude-ism",
72
+ pattern: /\b(?:(?:clean|natural|architectural|implementation|integration)\s+seam|(?:at|across)\s+the\s+seam\s+between)\b/giu,
73
+ },
74
+ // The apology/validation loop developers see after correcting an agent.
75
+ {
76
+ tell: "you're absolutely right",
77
+ category: "sycophancy",
78
+ pattern: /\byou(?:['’]re|\s+are)\s+absolutely\s+right\b/giu,
79
+ },
80
+ {
81
+ tell: "you're right to call that out",
82
+ category: "sycophancy",
83
+ pattern: /\byou(?:['’]re|\s+are)\s+right\s+to\s+(?:call|point|flag)\s+(?:me|that|this)\s+out\b/giu,
84
+ },
85
+ {
86
+ tell: "good question",
87
+ category: "sycophancy",
88
+ pattern: /\b(?:(?:that(?:['’]s|\s+is)|this\s+is)\s+)?(?:a\s+)?(?:good|great|excellent)\s+question\b/giu,
89
+ },
90
+ {
91
+ tell: "good catch",
92
+ category: "sycophancy",
93
+ pattern: /\b(?:(?:that(?:['’]s|\s+is)|this\s+is)\s+)?(?:a\s+)?(?:good|great|excellent)\s+catch\b/giu,
94
+ },
95
+ {
96
+ tell: "real gap",
97
+ category: "sycophancy",
98
+ pattern: /\b(?:a\s+)?real\s+gap\b/giu,
99
+ },
100
+ {
101
+ tell: "error in my framing",
102
+ category: "sycophancy",
103
+ pattern: /\b(?:a\s+)?real\s+error\s+in\s+(?:my|the)\s+framing\b/giu,
104
+ },
105
+ {
106
+ tell: "I was wrong",
107
+ category: "sycophancy",
108
+ pattern: /\bi\s+was\s+wrong\b/giu,
109
+ },
110
+ {
111
+ tell: "I overcomplicated it",
112
+ category: "sycophancy",
113
+ pattern: /\bi\s+(?:overcomplicated|over-engineered|overthought)\s+(?:this|that|it)\b/giu,
114
+ },
115
+ // Cross-model corporate/chatbot prose, constrained where a raw word is technical.
116
+ { tell: "delve", category: "stock prose", pattern: /\b(?:delve(?:d|s)?|delving)\b/giu },
117
+ { tell: "crucial", category: "stock prose", pattern: /\bcrucial\b/giu },
118
+ { tell: "pivotal", category: "stock prose", pattern: /\bpivotal\b/giu },
119
+ { tell: "tapestry", category: "stock prose", pattern: /\btapestr(?:y|ies)\b/giu },
120
+ {
121
+ tell: "here's the thing",
122
+ category: "stock prose",
123
+ pattern: /\bhere(?:['’]s|\s+is)\s+the\s+thing\b/giu,
124
+ },
125
+ {
126
+ tell: "hope this helps",
127
+ category: "stock prose",
128
+ pattern: /\bhope\s+(?:this|that)\s+helps\b/giu,
129
+ },
130
+ {
131
+ tell: "after careful consideration",
132
+ category: "stock prose",
133
+ pattern: /\bafter\s+careful\s+consideration\b/giu,
134
+ },
135
+ {
136
+ tell: "quick update",
137
+ category: "stock prose",
138
+ pattern: /\bto\s+provide\s+(?:you\s+with\s+)?a\s+quick\s+update\b/giu,
139
+ },
140
+ {
141
+ tell: "robust and reliable",
142
+ category: "stock prose",
143
+ pattern: /\brobust(?:\s+and|,)\s+reliable\b/giu,
144
+ },
145
+ { tell: "seamless", category: "stock prose", pattern: /\bseamless(?:ly)?\b/giu },
146
+ {
147
+ tell: "in the realm of",
148
+ category: "stock prose",
149
+ pattern: /\b(?:in|within)\s+the\s+realm\s+of\b/giu,
150
+ },
151
+ {
152
+ tell: "important to note",
153
+ category: "stock prose",
154
+ pattern: /\b(?:(?:it\s+is|it(?:['’]s))\s+)?important\s+to\s+note\b/giu,
155
+ },
156
+ {
157
+ tell: "worth noting",
158
+ category: "stock prose",
159
+ pattern: /\b(?:(?:it\s+is|it(?:['’]s))\s+)?worth\s+noting\b/giu,
160
+ },
161
+ {
162
+ tell: "let me break this down",
163
+ category: "stock prose",
164
+ pattern: /\blet\s+(?:me|us)\s+break\s+(?:this|it)\s+down\b/giu,
165
+ },
166
+ {
167
+ tell: "let's dive in",
168
+ category: "stock prose",
169
+ pattern: /\blet(?:['’]s|\s+us)\s+dive\s+(?:in|into)\b/giu,
170
+ },
171
+ {
172
+ tell: "let's unpack this",
173
+ category: "stock prose",
174
+ pattern: /\blet(?:['’]s|\s+us)\s+unpack\s+(?:this|that|it)\b/giu,
175
+ },
176
+ { tell: "at its core", category: "stock prose", pattern: /\bat\s+its\s+core\b/giu },
177
+ {
178
+ tell: "comprehensive",
179
+ category: "stock prose",
180
+ pattern: /\bcomprehensive\s+(?:analysis|approach|coverage|error\s+handling|guide|implementation|overview|solution|suite)\b/giu,
181
+ },
182
+ {
183
+ tell: "successfully implemented",
184
+ category: "stock prose",
185
+ pattern: /\bsuccessfully\s+(?:added|completed|created|fixed|implemented|resolved|updated)\b/giu,
186
+ },
187
+ {
188
+ tell: "Certainly.",
189
+ category: "stock prose",
190
+ pattern: /(?:^|\n)[\t ]*certainly\b/gimu,
191
+ },
192
+ {
193
+ tell: "I'd be happy to",
194
+ category: "stock prose",
195
+ pattern: /\bi(?:['’]d|\s+would)\s+be\s+happy\s+to\b/giu,
196
+ },
197
+ // Corrective juxtaposition and fake-deep contrast templates.
198
+ {
199
+ tell: "it's not X, it's Y",
200
+ category: "rhetorical template",
201
+ pattern: /\b(?:it|this|that)(?:['’]s|\s+is)\s+not\s+[^.!?\n]{1,100}?(?:,|;|—)\s*(?:it|this|that)(?:['’]s|\s+is)\s+[^.!?\n]{1,100}/giu,
202
+ },
203
+ {
204
+ tell: "it's not X, it's Y",
205
+ category: "rhetorical template",
206
+ pattern: /\b(?:it|this|that)\s+isn(?:['’]t)\s+[^.!?\n]{1,100}[.!;—]\s*(?:it|this|that)(?:['’]s|\s+is)\s+[^.!?\n]{1,100}/giu,
207
+ },
208
+ {
209
+ tell: "not just X, but Y",
210
+ category: "rhetorical template",
211
+ pattern: /\bnot\s+just\s+[^.!?\n]{1,100}?,?\s+(?:but(?:\s+also)?|(?:it|this|that)(?:['’]s|\s+is))\s+[^.!?\n]{1,100}/giu,
212
+ },
213
+ ];
214
+ /** Detect common coding-agent AI-isms in prose while ignoring Markdown code. */
215
+ export function detectSlop(text) {
216
+ const prose = maskMarkdownCode(text);
217
+ const candidates = SLOP_SIGNALS.flatMap((signal) => findSignalMatches(prose, signal));
218
+ addCheckmarkWall(prose, candidates);
219
+ const matches = longestNonOverlapping(candidates).map(({ end: _end, ...match }) => match);
220
+ return { count: matches.length, matches };
221
+ }
222
+ function findSignalMatches(text, signal) {
223
+ const matches = [];
224
+ signal.pattern.lastIndex = 0;
225
+ let match;
226
+ while ((match = signal.pattern.exec(text)) !== null) {
227
+ const bounds = trimmedBounds(match[0]);
228
+ if (bounds.text) {
229
+ const index = match.index + bounds.start;
230
+ matches.push({
231
+ tell: signal.tell,
232
+ text: bounds.text,
233
+ index,
234
+ end: index + bounds.text.length,
235
+ category: signal.category,
236
+ });
237
+ }
238
+ if (match[0].length === 0) {
239
+ signal.pattern.lastIndex++;
240
+ }
241
+ }
242
+ return matches;
243
+ }
244
+ function trimmedBounds(value) {
245
+ const start = value.search(/\S/u);
246
+ if (start === -1) {
247
+ return { text: "", start: 0 };
248
+ }
249
+ return { text: value.trim(), start };
250
+ }
251
+ function maskMarkdownCode(text) {
252
+ return text
253
+ .replace(/(?:```|~~~)[\s\S]*?(?:(?:```|~~~)|$)/gu, preserveNewlines)
254
+ .replace(/`[^`\n]+`/gu, preserveNewlines);
255
+ }
256
+ function preserveNewlines(value) {
257
+ return value.replace(/[^\n]/gu, " ");
258
+ }
259
+ function addCheckmarkWall(text, candidates) {
260
+ const checkmarks = Array.from(text.matchAll(/^[\t ]*(?:[-*]\s*)?[✅✓]\s+/gmu));
261
+ if (checkmarks.length < 3) {
262
+ return;
263
+ }
264
+ const first = checkmarks[0];
265
+ if (!first) {
266
+ return;
267
+ }
268
+ const offset = first[0].search(/[✅✓]/u);
269
+ const index = first.index + Math.max(offset, 0);
270
+ candidates.push({
271
+ tell: "checkmark wall",
272
+ text: `✅ ×${checkmarks.length}`,
273
+ index,
274
+ end: index + 2,
275
+ category: "formatting",
276
+ });
277
+ }
278
+ function longestNonOverlapping(candidates) {
279
+ const longestFirst = [...candidates].sort((left, right) => right.end - right.index - (left.end - left.index) ||
280
+ left.index - right.index ||
281
+ left.tell.localeCompare(right.tell));
282
+ const accepted = [];
283
+ for (const candidate of longestFirst) {
284
+ const overlaps = accepted.some((match) => candidate.index < match.end && candidate.end > match.index);
285
+ if (!overlaps) {
286
+ accepted.push(candidate);
287
+ }
288
+ }
289
+ return accepted.sort((left, right) => left.index - right.index);
290
+ }
291
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/slop/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "devrage",
3
- "version": "0.5.7",
4
- "description": "Count how many times you swear at your coding agents",
3
+ "version": "0.6.0",
4
+ "description": "Measure rage, token costs, and AI slop in coding-agent sessions",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "devrage": "dist/cli.js"