agentic-loop 3.1.1 → 3.1.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"check-dry-violations.d.ts","sourceRoot":"","sources":["../../src/checks/check-dry-violations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,mBAAmB,CAAC;AAoBvE,eAAO,MAAM,kBAAkB,EAAE,IAmEhC,CAAC"}
1
+ {"version":3,"file":"check-dry-violations.d.ts","sourceRoot":"","sources":["../../src/checks/check-dry-violations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,mBAAmB,CAAC;AA6CvE,eAAO,MAAM,kBAAkB,EAAE,IAoFhC,CAAC"}
@@ -1,12 +1,15 @@
1
1
  /**
2
2
  * Check for DRY (Don't Repeat Yourself) violations - duplicated code blocks
3
3
  */
4
+ import { shouldIgnoreLine } from '../utils/types.js';
4
5
  // Minimum number of similar lines to consider a duplicate
5
- const MIN_DUPLICATE_LINES = 5;
6
+ const MIN_DUPLICATE_LINES = 8;
6
7
  // Minimum similarity threshold (0-1)
7
- const SIMILARITY_THRESHOLD = 0.85;
8
- // Paths that indicate frontend component files (skip these - too many false positives)
9
- const FRONTEND_PATH_PATTERNS = [
8
+ const SIMILARITY_THRESHOLD = 0.90;
9
+ // Max duplicates to report per file (prevent noise)
10
+ const MAX_DUPLICATES_PER_FILE = 5;
11
+ // Paths to skip (too many false positives)
12
+ const SKIP_PATH_PATTERNS = [
10
13
  /\/components\//i,
11
14
  /\/pages\//i,
12
15
  /\/views\//i,
@@ -15,7 +18,27 @@ const FRONTEND_PATH_PATTERNS = [
15
18
  /\.styled\./i,
16
19
  /\.styles\./i,
17
20
  /styleguide/i,
21
+ /\.test\./i,
22
+ /\.spec\./i,
23
+ /\/__tests__\//i,
24
+ /\/test\//i,
25
+ /\/tests\//i,
26
+ /\/fixtures?\//i,
18
27
  ];
28
+ // Keywords that should NOT be normalized (keep them distinct)
29
+ const KEYWORDS = new Set([
30
+ // JS/TS
31
+ 'const', 'let', 'var', 'function', 'class', 'return', 'if', 'else', 'for', 'while',
32
+ 'switch', 'case', 'break', 'continue', 'try', 'catch', 'finally', 'throw', 'new',
33
+ 'this', 'super', 'import', 'export', 'default', 'from', 'as', 'async', 'await',
34
+ 'typeof', 'instanceof', 'in', 'of', 'true', 'false', 'null', 'undefined',
35
+ 'interface', 'type', 'enum', 'extends', 'implements', 'public', 'private', 'protected',
36
+ // Python
37
+ 'def', 'class', 'return', 'if', 'elif', 'else', 'for', 'while', 'try', 'except',
38
+ 'finally', 'raise', 'import', 'from', 'as', 'with', 'lambda', 'pass', 'True', 'False', 'None',
39
+ // Common test functions
40
+ 'describe', 'it', 'test', 'expect', 'beforeAll', 'afterAll', 'beforeEach', 'afterEach',
41
+ ]);
19
42
  export const checkDryViolations = {
20
43
  id: 'dry',
21
44
  name: 'Check DRY Violations',
@@ -25,8 +48,8 @@ export const checkDryViolations = {
25
48
  fileTypes: ['js', 'ts', 'mjs', 'cjs', 'py'],
26
49
  check(context) {
27
50
  const results = [];
28
- // Skip frontend component files
29
- if (FRONTEND_PATH_PATTERNS.some((pattern) => pattern.test(context.filePath))) {
51
+ // Skip files that tend to have false positives
52
+ if (SKIP_PATH_PATTERNS.some((pattern) => pattern.test(context.filePath))) {
30
53
  return results;
31
54
  }
32
55
  const lines = context.content.split('\n');
@@ -37,24 +60,39 @@ export const checkDryViolations = {
37
60
  lineNum: index + 1,
38
61
  }));
39
62
  // Filter out empty/trivial lines
40
- const significantLines = normalizedLines.filter((l) => l.normalized.length > 10 && !isTrivialLine(l.normalized));
63
+ const significantLines = normalizedLines.filter((l) => l.normalized.length > 15 && !isTrivialLine(l.normalized));
64
+ // Need enough significant lines to compare
65
+ if (significantLines.length < MIN_DUPLICATE_LINES * 2) {
66
+ return results;
67
+ }
41
68
  // Find duplicate blocks using a sliding window approach
42
69
  const reportedBlocks = new Set();
43
70
  for (let i = 0; i < significantLines.length - MIN_DUPLICATE_LINES; i++) {
71
+ // Stop if we've reported enough
72
+ if (results.length >= MAX_DUPLICATES_PER_FILE)
73
+ break;
44
74
  // Create a "fingerprint" of the next N lines
45
75
  const block1 = significantLines.slice(i, i + MIN_DUPLICATE_LINES);
46
76
  const fingerprint1 = block1.map((l) => l.normalized).join('\n');
47
77
  // Look for similar blocks later in the file
48
78
  for (let j = i + MIN_DUPLICATE_LINES; j < significantLines.length - MIN_DUPLICATE_LINES; j++) {
79
+ if (results.length >= MAX_DUPLICATES_PER_FILE)
80
+ break;
49
81
  const block2 = significantLines.slice(j, j + MIN_DUPLICATE_LINES);
50
82
  const fingerprint2 = block2.map((l) => l.normalized).join('\n');
51
83
  // Check similarity
52
84
  const similarity = calculateSimilarity(fingerprint1, fingerprint2);
53
85
  if (similarity >= SIMILARITY_THRESHOLD) {
54
- // Create a unique key for this duplicate pair
55
- const blockKey = `${block1[0].lineNum}-${block2[0].lineNum}`;
86
+ // Create a unique key for this duplicate pair (sorted to avoid A-B and B-A)
87
+ const key1 = Math.min(block1[0].lineNum, block2[0].lineNum);
88
+ const key2 = Math.max(block1[0].lineNum, block2[0].lineNum);
89
+ const blockKey = `${key1}-${key2}`;
56
90
  if (!reportedBlocks.has(blockKey)) {
57
91
  reportedBlocks.add(blockKey);
92
+ // Check if the block is suppressed with noqa
93
+ if (shouldIgnoreLine(block1[0].original, 'dry')) {
94
+ continue;
95
+ }
58
96
  results.push({
59
97
  line: block1[0].lineNum,
60
98
  column: 0,
@@ -80,13 +118,22 @@ function normalizeLine(line, extension) {
80
118
  }
81
119
  // Normalize whitespace
82
120
  normalized = normalized.replace(/\s+/g, ' ').trim();
83
- // Replace variable names with placeholders (simplified)
84
- // This helps match similar code with different variable names
121
+ // Replace strings and numbers first
85
122
  normalized = normalized
86
- .replace(/\b[a-z][a-zA-Z0-9]*\b/g, 'VAR')
87
123
  .replace(/"[^"]*"/g, 'STR')
88
124
  .replace(/'[^']*'/g, 'STR')
89
- .replace(/\d+/g, 'NUM');
125
+ .replace(/`[^`]*`/g, 'STR')
126
+ .replace(/\b\d+\.?\d*\b/g, 'NUM');
127
+ // Replace variable/function names with placeholders, but preserve keywords
128
+ // Only replace identifiers that look like user-defined names (camelCase, snake_case)
129
+ normalized = normalized.replace(/\b([a-z][a-zA-Z0-9_]*)\b/g, (match) => {
130
+ // Keep keywords as-is
131
+ if (KEYWORDS.has(match)) {
132
+ return match;
133
+ }
134
+ // Replace user-defined identifiers
135
+ return 'VAR';
136
+ });
90
137
  return normalized;
91
138
  }
92
139
  function isTrivialLine(normalized) {
@@ -1 +1 @@
1
- {"version":3,"file":"check-dry-violations.js","sourceRoot":"","sources":["../../src/checks/check-dry-violations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check-dry-violations.js","sourceRoot":"","sources":["../../src/checks/check-dry-violations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,0DAA0D;AAC1D,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,qCAAqC;AACrC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC,oDAAoD;AACpD,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAElC,2CAA2C;AAC3C,MAAM,kBAAkB,GAAG;IACzB,iBAAiB;IACjB,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,SAAS;IACT,aAAa;IACb,aAAa;IACb,aAAa;IACb,WAAW;IACX,WAAW;IACX,gBAAgB;IAChB,WAAW;IACX,YAAY;IACZ,gBAAgB;CACjB,CAAC;AAEF,8DAA8D;AAC9D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACvB,QAAQ;IACR,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAClF,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK;IAChF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAC9E,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW;IACxE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW;IACtF,SAAS;IACT,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ;IAC/E,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAC7F,wBAAwB;IACxB,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW;CACvF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAS;IACtC,EAAE,EAAE,KAAK;IACT,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,wDAAwD;IACrE,QAAQ,EAAE,SAAS;IACnB,0EAA0E;IAC1E,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;IAE3C,KAAK,CAAC,OAAoB;QACxB,MAAM,OAAO,GAAiB,EAAE,CAAC;QAEjC,+CAA+C;QAC/C,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzE,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE1C,+DAA+D;QAC/D,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAClD,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC;YAClD,OAAO,EAAE,KAAK,GAAG,CAAC;SACnB,CAAC,CAAC,CAAC;QAEJ,iCAAiC;QACjC,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAChE,CAAC;QAEF,2CAA2C;QAC3C,IAAI,gBAAgB,CAAC,MAAM,GAAG,mBAAmB,GAAG,CAAC,EAAE,CAAC;YACtD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,wDAAwD;QACxD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC;YACvE,gCAAgC;YAChC,IAAI,OAAO,CAAC,MAAM,IAAI,uBAAuB;gBAAE,MAAM;YAErD,6CAA6C;YAC7C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC;YAClE,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEhE,4CAA4C;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,mBAAmB,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7F,IAAI,OAAO,CAAC,MAAM,IAAI,uBAAuB;oBAAE,MAAM;gBAErD,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC;gBAClE,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEhE,mBAAmB;gBACnB,MAAM,UAAU,GAAG,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBAEnE,IAAI,UAAU,IAAI,oBAAoB,EAAE,CAAC;oBACvC,4EAA4E;oBAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC5D,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;oBAEnC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAClC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBAE7B,6CAA6C;wBAC7C,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;4BAChD,SAAS;wBACX,CAAC;wBAED,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;4BACvB,MAAM,EAAE,CAAC;4BACT,OAAO,EAAE,oCAAoC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,sCAAsC;4BACpG,QAAQ,EAAE,SAAS;4BACnB,MAAM,EAAE,qBAAqB;yBAC9B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC;AAEF,SAAS,aAAa,CAAC,IAAY,EAAE,SAAiB;IACpD,IAAI,UAAU,GAAG,IAAI,CAAC;IAEtB,kBAAkB;IAClB,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjE,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;SAAM,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,uBAAuB;IACvB,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAEpD,oCAAoC;IACpC,UAAU,GAAG,UAAU;SACpB,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IAEpC,2EAA2E;IAC3E,qFAAqF;IACrF,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC,KAAK,EAAE,EAAE;QACrE,sBAAsB;QACtB,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,mCAAmC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,aAAa,CAAC,UAAkB;IACvC,yDAAyD;IACzD,MAAM,eAAe,GAAG;QACtB,iBAAiB,EAAsB,4BAA4B;QACnE,oCAAoC,EAAG,kBAAkB;QACzD,+BAA+B,EAAQ,qBAAqB;QAC5D,mCAAmC,EAAI,wBAAwB;QAC/D,WAAW,EAA6B,oCAAoC;QAC5E,WAAW,EAA6B,oBAAoB;KAC7D,CAAC;IAEF,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,IAAY;IACrD,uDAAuD;IACvD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,CAAS,EAAe,EAAE;QAClD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAE9B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC;IACvD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC"}
@@ -29,6 +29,15 @@ function getLanguage(ext) {
29
29
  return 'python';
30
30
  return 'unknown';
31
31
  }
32
+ function createTooLongResult(funcLine, funcName, length) {
33
+ return {
34
+ line: funcLine,
35
+ column: 0,
36
+ message: `Function "${funcName}" is ${length} lines (max: ${MAX_FUNCTION_LENGTH}) - consider refactoring`,
37
+ severity: 'warning',
38
+ ruleId: 'function-length/too-long',
39
+ };
40
+ }
32
41
  function checkJavaScriptFunctions(content) {
33
42
  const results = [];
34
43
  const lines = content.split('\n');
@@ -68,13 +77,7 @@ function checkJavaScriptFunctions(content) {
68
77
  const func = functionStarts[j];
69
78
  const length = lineNum - func.line + 1;
70
79
  if (length > MAX_FUNCTION_LENGTH) {
71
- results.push({
72
- line: func.line,
73
- column: 0,
74
- message: `Function "${func.name}" is ${length} lines (max: ${MAX_FUNCTION_LENGTH}) - consider refactoring`,
75
- severity: 'warning',
76
- ruleId: 'function-length/too-long',
77
- });
80
+ results.push(createTooLongResult(func.line, func.name, length));
78
81
  }
79
82
  functionStarts.splice(j, 1);
80
83
  }
@@ -102,13 +105,7 @@ function checkPythonFunctions(content) {
102
105
  const func = functionStarts.pop();
103
106
  const length = lineNum - func.line;
104
107
  if (length > MAX_FUNCTION_LENGTH) {
105
- results.push({
106
- line: func.line,
107
- column: 0,
108
- message: `Function "${func.name}" is ${length} lines (max: ${MAX_FUNCTION_LENGTH}) - consider refactoring`,
109
- severity: 'warning',
110
- ruleId: 'function-length/too-long',
111
- });
108
+ results.push(createTooLongResult(func.line, func.name, length));
112
109
  }
113
110
  }
114
111
  functionStarts.push({ line: lineNum, name, indent });
@@ -123,13 +120,7 @@ function checkPythonFunctions(content) {
123
120
  const func = functionStarts.pop();
124
121
  const length = i - func.line; // Previous line was the end
125
122
  if (length > MAX_FUNCTION_LENGTH) {
126
- results.push({
127
- line: func.line,
128
- column: 0,
129
- message: `Function "${func.name}" is ${length} lines (max: ${MAX_FUNCTION_LENGTH}) - consider refactoring`,
130
- severity: 'warning',
131
- ruleId: 'function-length/too-long',
132
- });
123
+ results.push(createTooLongResult(func.line, func.name, length));
133
124
  }
134
125
  }
135
126
  }
@@ -1 +1 @@
1
- {"version":3,"file":"check-function-length.js","sourceRoot":"","sources":["../../src/checks/check-function-length.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check-function-length.js","sourceRoot":"","sources":["../../src/checks/check-function-length.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-loop",
3
- "version": "3.1.1",
3
+ "version": "3.1.3",
4
4
  "description": "Autonomous AI coding loop - PRD-driven development with Claude Code",
5
5
  "author": "Allie Jones <allie@allthrive.ai>",
6
6
  "license": "MIT",
package/ralph/loop.sh CHANGED
@@ -265,6 +265,7 @@ run_loop() {
265
265
  local failure_context=""
266
266
  if [[ -f "$RALPH_DIR/last_failure.txt" ]]; then
267
267
  failure_context=$(cat "$RALPH_DIR/last_failure.txt")
268
+ echo " (Passing failure context: $(echo "$failure_context" | wc -l | tr -d ' ') lines)"
268
269
  fi
269
270
 
270
271
  # Temporarily disable errexit to capture build_prompt errors
package/ralph/verify.sh CHANGED
@@ -188,6 +188,11 @@ run_verification() {
188
188
  return 0
189
189
  else
190
190
  print_error "=== Verification failed ==="
191
+ # Debug: Show which failure logs exist
192
+ echo "Saving failure context..."
193
+ [[ -f "$RALPH_DIR/last_lint_failure.log" ]] && echo " - Found lint failure log"
194
+ [[ -f "$RALPH_DIR/last_test_failure.log" ]] && echo " - Found test failure log"
195
+ [[ -f "$RALPH_DIR/last_typescript_failure.log" ]] && echo " - Found typescript failure log"
191
196
  # Save failure context for next iteration
192
197
  save_failure_context "$story"
193
198
  return 1