@claude-flow/cli 3.10.9 → 3.10.11

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 (48) hide show
  1. package/dist/src/commands/hooks.d.ts.map +1 -1
  2. package/dist/src/commands/hooks.js +10 -8
  3. package/dist/src/commands/hooks.js.map +1 -1
  4. package/dist/src/commands/mcp.d.ts.map +1 -1
  5. package/dist/src/commands/mcp.js +14 -0
  6. package/dist/src/commands/mcp.js.map +1 -1
  7. package/dist/src/init/settings-generator.js +1 -1
  8. package/dist/src/init/statusline-generator.js +2 -2
  9. package/dist/src/mcp-tools/agent-execute-core.d.ts +2 -2
  10. package/dist/src/mcp-tools/agent-execute-core.d.ts.map +1 -1
  11. package/dist/src/mcp-tools/agent-execute-core.js +15 -6
  12. package/dist/src/mcp-tools/agent-execute-core.js.map +1 -1
  13. package/dist/src/mcp-tools/agent-tools.js +14 -14
  14. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  15. package/dist/src/mcp-tools/hooks-tools.d.ts +11 -0
  16. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  17. package/dist/src/mcp-tools/hooks-tools.js +216 -13
  18. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  19. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
  20. package/dist/src/mcp-tools/system-tools.js +5 -2
  21. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  22. package/dist/src/mcp-tools/tool-loop-guardrail.d.ts +31 -0
  23. package/dist/src/mcp-tools/tool-loop-guardrail.d.ts.map +1 -0
  24. package/dist/src/mcp-tools/tool-loop-guardrail.js +71 -0
  25. package/dist/src/mcp-tools/tool-loop-guardrail.js.map +1 -0
  26. package/dist/src/runtime/parent-death-watchdog.d.ts +42 -0
  27. package/dist/src/runtime/parent-death-watchdog.d.ts.map +1 -0
  28. package/dist/src/runtime/parent-death-watchdog.js +70 -0
  29. package/dist/src/runtime/parent-death-watchdog.js.map +1 -0
  30. package/dist/src/ruvector/codemods/engine.d.ts +45 -0
  31. package/dist/src/ruvector/codemods/engine.d.ts.map +1 -0
  32. package/dist/src/ruvector/codemods/engine.js +291 -0
  33. package/dist/src/ruvector/codemods/engine.js.map +1 -0
  34. package/dist/src/ruvector/codemods/scope-analysis.d.ts +29 -0
  35. package/dist/src/ruvector/codemods/scope-analysis.d.ts.map +1 -0
  36. package/dist/src/ruvector/codemods/scope-analysis.js +162 -0
  37. package/dist/src/ruvector/codemods/scope-analysis.js.map +1 -0
  38. package/dist/src/ruvector/enhanced-model-router.d.ts +29 -8
  39. package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -1
  40. package/dist/src/ruvector/enhanced-model-router.js +104 -81
  41. package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
  42. package/dist/src/ruvector/q-learning-router.d.ts +14 -1
  43. package/dist/src/ruvector/q-learning-router.d.ts.map +1 -1
  44. package/dist/src/ruvector/q-learning-router.js +36 -8
  45. package/dist/src/ruvector/q-learning-router.js.map +1 -1
  46. package/dist/tsconfig.tsbuildinfo +1 -1
  47. package/package.json +1 -1
  48. package/scripts/benchmark-codemods.mjs +127 -0
@@ -0,0 +1,291 @@
1
+ /**
2
+ * Deterministic Codemod Engine (ADR-143)
3
+ *
4
+ * Truly $0, no-LLM Tier-1 code transforms. Uses the TypeScript compiler API to
5
+ * locate exact AST nodes, then applies formatting-preserving text-range edits to
6
+ * the original source string (we never re-print the whole file, so comments and
7
+ * formatting survive).
8
+ *
9
+ * Only intents that can be transformed *deterministically and safely* live here.
10
+ * Intents that need inference or judgement (add-types, add-error-handling,
11
+ * async-await) are intentionally NOT codemods — they route to a model. See
12
+ * ADR-143 for the rationale.
13
+ *
14
+ * @module ruvector/codemods/engine
15
+ */
16
+ import ts from 'typescript';
17
+ import { buildReassignmentResolver } from './scope-analysis.js';
18
+ /** Intents this engine can apply deterministically with $0 cost. */
19
+ export const DETERMINISTIC_CODEMOD_INTENTS = [
20
+ 'var-to-const',
21
+ 'remove-console',
22
+ 'add-logging',
23
+ ];
24
+ /** Intents recognised by the router but NOT safe as deterministic codemods. */
25
+ export const MODEL_ROUTED_INTENTS = [
26
+ 'add-types',
27
+ 'add-error-handling',
28
+ 'async-await',
29
+ ];
30
+ export function isDeterministicCodemod(intent) {
31
+ return DETERMINISTIC_CODEMOD_INTENTS.includes(intent);
32
+ }
33
+ // ============================================================================
34
+ // Parsing & edit application
35
+ // ============================================================================
36
+ function scriptKind(language) {
37
+ switch (language) {
38
+ case 'typescript':
39
+ return ts.ScriptKind.TS;
40
+ case 'tsx':
41
+ return ts.ScriptKind.TSX;
42
+ case 'jsx':
43
+ return ts.ScriptKind.JSX;
44
+ default:
45
+ return ts.ScriptKind.JS;
46
+ }
47
+ }
48
+ function parse(code, language) {
49
+ return ts.createSourceFile(`codemod-input.${language}`, code, ts.ScriptTarget.Latest,
50
+ /* setParentNodes */ true, scriptKind(language));
51
+ }
52
+ function parseDiagnosticCount(sf) {
53
+ // parseDiagnostics is internal but stable; guard so a missing field never throws.
54
+ return sf.parseDiagnostics?.length ?? 0;
55
+ }
56
+ /** Apply edits to the original source, right-to-left so offsets stay valid. */
57
+ function applyEdits(code, edits) {
58
+ const sorted = [...edits].sort((a, b) => b.start - a.start);
59
+ let out = code;
60
+ for (const e of sorted) {
61
+ out = out.slice(0, e.start) + e.replacement + out.slice(e.end);
62
+ }
63
+ return out;
64
+ }
65
+ function lineStartOffset(code, pos) {
66
+ let i = pos;
67
+ while (i > 0 && code[i - 1] !== '\n')
68
+ i--;
69
+ return i;
70
+ }
71
+ function leadingIndent(code, lineStart) {
72
+ let i = lineStart;
73
+ while (i < code.length && (code[i] === ' ' || code[i] === '\t'))
74
+ i++;
75
+ return code.slice(lineStart, i);
76
+ }
77
+ // ============================================================================
78
+ // var-to-const (scope-aware reassignment analysis — see scope-analysis.ts)
79
+ // ============================================================================
80
+ function isVarList(list) {
81
+ return !(list.flags & (ts.NodeFlags.Let | ts.NodeFlags.Const));
82
+ }
83
+ function collectBindingNames(name, out) {
84
+ if (ts.isIdentifier(name)) {
85
+ out.add(name.text);
86
+ return;
87
+ }
88
+ for (const el of name.elements) {
89
+ if (ts.isBindingElement(el))
90
+ collectBindingNames(el.name, out);
91
+ }
92
+ }
93
+ function varToConstEdits(code, sf) {
94
+ const resolver = buildReassignmentResolver(sf);
95
+ const edits = [];
96
+ const visit = (node) => {
97
+ if (ts.isVariableDeclarationList(node) && isVarList(node)) {
98
+ const names = new Set();
99
+ for (const decl of node.declarations)
100
+ collectBindingNames(decl.name, names);
101
+ // `const` only when no declared binding is reassigned *within its own scope*.
102
+ const anyReassigned = [...names].some((n) => resolver.isReassigned(n, node));
103
+ const keyword = anyReassigned ? 'let' : 'const';
104
+ // The `var` keyword is the first token of the declaration list.
105
+ const start = node.getStart(sf);
106
+ // Only rewrite when the literal text really is `var` (guards against odd trivia).
107
+ if (code.slice(start, start + 3) === 'var') {
108
+ edits.push({ start, end: start + 3, replacement: keyword });
109
+ }
110
+ }
111
+ ts.forEachChild(node, visit);
112
+ };
113
+ visit(sf);
114
+ return edits;
115
+ }
116
+ // ============================================================================
117
+ // remove-console
118
+ // ============================================================================
119
+ function rootIdentifier(expr) {
120
+ let cur = expr;
121
+ while (ts.isPropertyAccessExpression(cur) || ts.isElementAccessExpression(cur)) {
122
+ cur = cur.expression;
123
+ }
124
+ return ts.isIdentifier(cur) ? cur : undefined;
125
+ }
126
+ function isConsoleCallStatement(stmt) {
127
+ if (!ts.isExpressionStatement(stmt))
128
+ return false;
129
+ let expr = stmt.expression;
130
+ // unwrap `void console.log(x)` and awaited/comma forms defensively
131
+ if (ts.isCallExpression(expr)) {
132
+ const root = rootIdentifier(expr.expression);
133
+ return !!root && root.text === 'console';
134
+ }
135
+ return false;
136
+ }
137
+ function removeConsoleEdits(code, sf) {
138
+ const edits = [];
139
+ const visit = (node) => {
140
+ if (isConsoleCallStatement(node)) {
141
+ const stmt = node;
142
+ const start = stmt.getStart(sf);
143
+ const end = stmt.getEnd();
144
+ const ls = lineStartOffset(code, start);
145
+ const beforeIsBlank = code.slice(ls, start).trim() === '';
146
+ // Is the rest of the line after the statement only whitespace?
147
+ let lineEnd = end;
148
+ while (lineEnd < code.length && code[lineEnd] !== '\n')
149
+ lineEnd++;
150
+ const afterIsBlank = code.slice(end, lineEnd).trim() === '';
151
+ if (beforeIsBlank && afterIsBlank) {
152
+ // Statement owns its line(s): drop the whole line incl. trailing newline.
153
+ const dropEnd = lineEnd < code.length ? lineEnd + 1 : lineEnd;
154
+ edits.push({ start: ls, end: dropEnd, replacement: '' });
155
+ }
156
+ else {
157
+ // Inline with other code: remove just the statement, tidy one trailing space.
158
+ let e = end;
159
+ if (code[e] === ' ')
160
+ e++;
161
+ edits.push({ start, end: e, replacement: '' });
162
+ }
163
+ }
164
+ ts.forEachChild(node, visit);
165
+ };
166
+ visit(sf);
167
+ return edits;
168
+ }
169
+ function isFunctionLikeWithBlock(node) {
170
+ return ((ts.isFunctionDeclaration(node) ||
171
+ ts.isFunctionExpression(node) ||
172
+ ts.isArrowFunction(node) ||
173
+ ts.isMethodDeclaration(node) ||
174
+ ts.isConstructorDeclaration(node) ||
175
+ ts.isGetAccessor(node) ||
176
+ ts.isSetAccessor(node)) &&
177
+ !!node.body &&
178
+ ts.isBlock(node.body));
179
+ }
180
+ function functionName(node) {
181
+ if (ts.isConstructorDeclaration(node))
182
+ return 'constructor';
183
+ if ((ts.isFunctionDeclaration(node) ||
184
+ ts.isFunctionExpression(node) ||
185
+ ts.isMethodDeclaration(node) ||
186
+ ts.isGetAccessor(node) ||
187
+ ts.isSetAccessor(node)) &&
188
+ node.name &&
189
+ (ts.isIdentifier(node.name) || ts.isStringLiteral(node.name))) {
190
+ return node.name.text;
191
+ }
192
+ // function expression / arrow assigned to a variable or property
193
+ const parent = node.parent;
194
+ if (parent && ts.isVariableDeclaration(parent) && ts.isIdentifier(parent.name))
195
+ return parent.name.text;
196
+ if (parent && ts.isPropertyAssignment(parent) && ts.isIdentifier(parent.name))
197
+ return parent.name.text;
198
+ return 'anonymous';
199
+ }
200
+ function alreadyLogsEntry(body, name) {
201
+ const first = body.statements[0];
202
+ if (!first || !isConsoleCallStatement(first))
203
+ return false;
204
+ const text = first.getText();
205
+ return text.includes(`'${name} called'`) || text.includes(`"${name} called"`);
206
+ }
207
+ function addLoggingEdits(code, sf) {
208
+ const edits = [];
209
+ const visit = (node) => {
210
+ if (isFunctionLikeWithBlock(node)) {
211
+ const body = node.body;
212
+ const name = functionName(node);
213
+ if (!alreadyLogsEntry(body, name)) {
214
+ const braceOffset = body.getStart(sf); // position of '{'
215
+ const headerLineStart = lineStartOffset(code, node.getStart(sf));
216
+ const indent = leadingIndent(code, headerLineStart);
217
+ const bodyIndent = indent + ' ';
218
+ const insertion = `\n${bodyIndent}console.log(${JSON.stringify(`${name} called`)});`;
219
+ edits.push({ start: braceOffset + 1, end: braceOffset + 1, replacement: insertion });
220
+ }
221
+ }
222
+ ts.forEachChild(node, visit);
223
+ };
224
+ visit(sf);
225
+ return edits;
226
+ }
227
+ // ============================================================================
228
+ // Public API
229
+ // ============================================================================
230
+ const TRANSFORMS = {
231
+ 'var-to-const': varToConstEdits,
232
+ 'remove-console': removeConsoleEdits,
233
+ 'add-logging': addLoggingEdits,
234
+ };
235
+ /**
236
+ * Apply a deterministic codemod to a source string.
237
+ *
238
+ * Returns the transformed source plus metadata. Never throws on malformed input
239
+ * — it reports `success: false` with a reason instead. Guarantees the output
240
+ * does not introduce new parse errors (otherwise it returns the input unchanged).
241
+ */
242
+ export function applyCodemod(intent, code, opts = {}) {
243
+ const language = opts.language ?? 'typescript';
244
+ if (!isDeterministicCodemod(intent)) {
245
+ return {
246
+ intent: intent,
247
+ success: false,
248
+ changed: false,
249
+ output: code,
250
+ edits: 0,
251
+ language,
252
+ reason: `"${intent}" is not a deterministic codemod — route it to a model (Tier 2/3).`,
253
+ };
254
+ }
255
+ let sf;
256
+ try {
257
+ sf = parse(code, language);
258
+ }
259
+ catch (err) {
260
+ return {
261
+ intent,
262
+ success: false,
263
+ changed: false,
264
+ output: code,
265
+ edits: 0,
266
+ language,
267
+ reason: `parse failed: ${err.message}`,
268
+ };
269
+ }
270
+ const beforeDiagnostics = parseDiagnosticCount(sf);
271
+ const edits = TRANSFORMS[intent](code, sf);
272
+ if (edits.length === 0) {
273
+ return { intent, success: true, changed: false, output: code, edits: 0, language };
274
+ }
275
+ const output = applyEdits(code, edits);
276
+ // Safety net: never hand back source that parses worse than the input.
277
+ const afterDiagnostics = parseDiagnosticCount(parse(output, language));
278
+ if (afterDiagnostics > beforeDiagnostics) {
279
+ return {
280
+ intent,
281
+ success: false,
282
+ changed: false,
283
+ output: code,
284
+ edits: 0,
285
+ language,
286
+ reason: 'transform would introduce parse errors — aborted (input returned unchanged).',
287
+ };
288
+ }
289
+ return { intent, success: true, changed: true, output, edits: edits.length, language };
290
+ }
291
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../src/ruvector/codemods/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAIhE,oEAAoE;AACpE,MAAM,CAAC,MAAM,6BAA6B,GAA6B;IACrE,cAAc;IACd,gBAAgB;IAChB,aAAa;CACL,CAAC;AAEX,+EAA+E;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,WAAW;IACX,oBAAoB;IACpB,aAAa;CACL,CAAC;AAsBX,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,OAAQ,6BAAmD,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC/E,CAAC;AAED,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;AAE/E,SAAS,UAAU,CAAC,QAAyB;IAC3C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,KAAK,KAAK;YACR,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAC3B,KAAK,KAAK;YACR,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAC3B;YACE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,IAAY,EAAE,QAAyB;IACpD,OAAO,EAAE,CAAC,gBAAgB,CACxB,iBAAiB,QAAQ,EAAE,EAC3B,IAAI,EACJ,EAAE,CAAC,YAAY,CAAC,MAAM;IACtB,oBAAoB,CAAC,IAAI,EACzB,UAAU,CAAC,QAAQ,CAAC,CACrB,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAiB;IAC7C,kFAAkF;IAClF,OAAQ,EAAkD,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC,CAAC;AAC3F,CAAC;AAED,+EAA+E;AAC/E,SAAS,UAAU,CAAC,IAAY,EAAE,KAAiB;IACjD,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,GAAW;IAChD,IAAI,CAAC,GAAG,GAAG,CAAC;IACZ,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI;QAAE,CAAC,EAAE,CAAC;IAC1C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,SAAiB;IACpD,IAAI,CAAC,GAAG,SAAS,CAAC;IAClB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QAAE,CAAC,EAAE,CAAC;IACrE,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,+EAA+E;AAC/E,4EAA4E;AAC5E,+EAA+E;AAE/E,SAAS,SAAS,CAAC,IAAgC;IACjD,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAoB,EAAE,GAAgB;IACjE,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO;IACT,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAAE,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,EAAiB;IACtD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,IAAI,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;YAChC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY;gBAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC5E,8EAA8E;YAC9E,MAAM,aAAa,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC7E,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YAEhD,gEAAgE;YAChE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAChC,kFAAkF;YAClF,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,SAAS,cAAc,CAAC,IAAmB;IACzC,IAAI,GAAG,GAAkB,IAAI,CAAC;IAC9B,OAAO,EAAE,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/E,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAkB;IAChD,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,IAAI,GAAkB,IAAI,CAAC,UAAU,CAAC;IAC1C,mEAAmE;IACnE,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,EAAiB;IACzD,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,IAAI,sBAAsB,CAAC,IAAoB,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,IAAoB,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAE1D,+DAA+D;YAC/D,IAAI,OAAO,GAAG,GAAG,CAAC;YAClB,OAAO,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI;gBAAE,OAAO,EAAE,CAAC;YAClE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAE5D,IAAI,aAAa,IAAI,YAAY,EAAE,CAAC;gBAClC,0EAA0E;gBAC1E,MAAM,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC9D,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,8EAA8E;gBAC9E,IAAI,CAAC,GAAG,GAAG,CAAC;gBACZ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;oBAAE,CAAC,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,OAAO,KAAK,CAAC;AACf,CAAC;AAeD,SAAS,uBAAuB,CAAC,IAAa;IAC5C,OAAO,CACL,CAAC,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAC7B,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAC7B,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;QACxB,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC5B,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC;QACjC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;QACtB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC,CAAC,IAAI,CAAC,IAAI;QACX,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CACtB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAkB;IACtC,IAAI,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC;IAC5D,IACE,CAAC,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAC7B,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAC7B,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC5B,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;QACtB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI;QACT,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAC7D,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IACD,iEAAiE;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,MAAM,IAAI,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACxG,IAAI,MAAM,IAAI,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACvG,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAc,EAAE,IAAY;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,EAAiB;IACtD,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,IAAI,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAgB,CAAC;YACnC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB;gBACzD,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjE,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBACpD,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;gBACjC,MAAM,SAAS,GAAG,KAAK,UAAU,eAAe,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC;gBACrF,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,MAAM,UAAU,GAA2E;IACzF,cAAc,EAAE,eAAe;IAC/B,gBAAgB,EAAE,kBAAkB;IACpC,aAAa,EAAE,eAAe;CAC/B,CAAC;AAMF;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAc,EACd,IAAY,EACZ,OAA4B,EAAE;IAE9B,MAAM,QAAQ,GAAoB,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC;IAEhE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,MAAM,EAAE,MAAuB;YAC/B,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,CAAC;YACR,QAAQ;YACR,MAAM,EAAE,IAAI,MAAM,oEAAoE;SACvF,CAAC;IACJ,CAAC;IAED,IAAI,EAAiB,CAAC;IACtB,IAAI,CAAC;QACH,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,MAAM;YACN,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,CAAC;YACR,QAAQ;YACR,MAAM,EAAE,iBAAkB,GAAa,CAAC,OAAO,EAAE;SAClD,CAAC;IACJ,CAAC;IAED,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAE3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IACrF,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEvC,uEAAuE;IACvE,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvE,IAAI,gBAAgB,GAAG,iBAAiB,EAAE,CAAC;QACzC,OAAO;YACL,MAAM;YACN,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,CAAC;YACR,QAAQ;YACR,MAAM,EAAE,8EAA8E;SACvF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;AACzF,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Scope-aware reassignment analysis for the `var-to-const` codemod (ADR-143).
3
+ *
4
+ * The naive version marks a `var` as reassigned if its name is assigned to
5
+ * *anywhere* in the file. That is correct but over-conservative: a `var x` in
6
+ * one function is forced to `let` just because an unrelated function also has
7
+ * an `x = …`. This module resolves each assignment to the binding it actually
8
+ * mutates (function-scope hoisting semantics), so a `var` becomes `const`
9
+ * unless *its own* binding is reassigned.
10
+ *
11
+ * Soundness: resolution only ever attributes a reassignment to a scope that
12
+ * actually hoists the name (i.e. genuinely declares that binding). It therefore
13
+ * never marks a truly-reassigned binding as un-reassigned — so a `var` is only
14
+ * promoted to `const` when it is provably never reassigned. Block-scoped
15
+ * shadowing (let/const) is ignored for resolution, which can only make us *more*
16
+ * conservative (fall back to `let`), never wrong.
17
+ *
18
+ * @module ruvector/codemods/scope-analysis
19
+ */
20
+ import ts from 'typescript';
21
+ export interface ReassignmentResolver {
22
+ /** True if the `var` binding declared by `declarationList` (for `name`) is reassigned within its scope. */
23
+ isReassigned(name: string, declarationList: ts.VariableDeclarationList): boolean;
24
+ }
25
+ /**
26
+ * Build a scope-aware resolver: which `var` bindings are actually reassigned.
27
+ */
28
+ export declare function buildReassignmentResolver(sf: ts.SourceFile): ReassignmentResolver;
29
+ //# sourceMappingURL=scope-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-analysis.d.ts","sourceRoot":"","sources":["../../../../src/ruvector/codemods/scope-analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAuD5B,MAAM,WAAW,oBAAoB;IACnC,2GAA2G;IAC3G,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,GAAG,OAAO,CAAC;CAClF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,GAAG,oBAAoB,CAoFjF"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Scope-aware reassignment analysis for the `var-to-const` codemod (ADR-143).
3
+ *
4
+ * The naive version marks a `var` as reassigned if its name is assigned to
5
+ * *anywhere* in the file. That is correct but over-conservative: a `var x` in
6
+ * one function is forced to `let` just because an unrelated function also has
7
+ * an `x = …`. This module resolves each assignment to the binding it actually
8
+ * mutates (function-scope hoisting semantics), so a `var` becomes `const`
9
+ * unless *its own* binding is reassigned.
10
+ *
11
+ * Soundness: resolution only ever attributes a reassignment to a scope that
12
+ * actually hoists the name (i.e. genuinely declares that binding). It therefore
13
+ * never marks a truly-reassigned binding as un-reassigned — so a `var` is only
14
+ * promoted to `const` when it is provably never reassigned. Block-scoped
15
+ * shadowing (let/const) is ignored for resolution, which can only make us *more*
16
+ * conservative (fall back to `let`), never wrong.
17
+ *
18
+ * @module ruvector/codemods/scope-analysis
19
+ */
20
+ import ts from 'typescript';
21
+ /** A scope is a function-like node or the SourceFile (the var-hoist boundaries). */
22
+ function isScopeNode(node) {
23
+ return (ts.isSourceFile(node) ||
24
+ ts.isFunctionDeclaration(node) ||
25
+ ts.isFunctionExpression(node) ||
26
+ ts.isArrowFunction(node) ||
27
+ ts.isMethodDeclaration(node) ||
28
+ ts.isConstructorDeclaration(node) ||
29
+ ts.isGetAccessorDeclaration(node) ||
30
+ ts.isSetAccessorDeclaration(node));
31
+ }
32
+ function enclosingScope(node) {
33
+ let cur = node.parent;
34
+ while (cur && !isScopeNode(cur))
35
+ cur = cur.parent;
36
+ return cur ?? node.getSourceFile();
37
+ }
38
+ function parentScope(scope) {
39
+ if (ts.isSourceFile(scope))
40
+ return undefined;
41
+ return enclosingScope(scope);
42
+ }
43
+ function collectIdentifierNames(target, out) {
44
+ if (ts.isIdentifier(target)) {
45
+ out(target.text);
46
+ return;
47
+ }
48
+ // Destructuring assignment target (object/array literal on the LHS of `=`).
49
+ ts.forEachChild(target, (child) => collectIdentifierNames(child, out));
50
+ }
51
+ const ASSIGNMENT_OPERATORS = new Set([
52
+ ts.SyntaxKind.EqualsToken,
53
+ ts.SyntaxKind.PlusEqualsToken,
54
+ ts.SyntaxKind.MinusEqualsToken,
55
+ ts.SyntaxKind.AsteriskEqualsToken,
56
+ ts.SyntaxKind.AsteriskAsteriskEqualsToken,
57
+ ts.SyntaxKind.SlashEqualsToken,
58
+ ts.SyntaxKind.PercentEqualsToken,
59
+ ts.SyntaxKind.LessThanLessThanEqualsToken,
60
+ ts.SyntaxKind.GreaterThanGreaterThanEqualsToken,
61
+ ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,
62
+ ts.SyntaxKind.AmpersandEqualsToken,
63
+ ts.SyntaxKind.BarEqualsToken,
64
+ ts.SyntaxKind.CaretEqualsToken,
65
+ ts.SyntaxKind.BarBarEqualsToken,
66
+ ts.SyntaxKind.AmpersandAmpersandEqualsToken,
67
+ ts.SyntaxKind.QuestionQuestionEqualsToken,
68
+ ]);
69
+ /**
70
+ * Build a scope-aware resolver: which `var` bindings are actually reassigned.
71
+ */
72
+ export function buildReassignmentResolver(sf) {
73
+ // Names hoisted into each scope: var-declared names, function declarations,
74
+ // and parameters. (Collected per scope, not crossing nested function scopes.)
75
+ const hoisted = new Map();
76
+ const ensure = (scope) => {
77
+ let s = hoisted.get(scope);
78
+ if (!s) {
79
+ s = new Set();
80
+ hoisted.set(scope, s);
81
+ }
82
+ return s;
83
+ };
84
+ ensure(sf);
85
+ const addBinding = (name, scope) => {
86
+ if (ts.isIdentifier(name)) {
87
+ ensure(scope).add(name.text);
88
+ }
89
+ else {
90
+ for (const el of name.elements) {
91
+ if (ts.isBindingElement(el))
92
+ addBinding(el.name, scope);
93
+ }
94
+ }
95
+ };
96
+ // Pass 1 — record hoisted names per scope.
97
+ const collectHoisted = (node) => {
98
+ if (isScopeNode(node) && !ts.isSourceFile(node)) {
99
+ ensure(node);
100
+ // Parameters belong to the function's own scope.
101
+ const params = node.parameters;
102
+ if (params)
103
+ for (const p of params)
104
+ addBinding(p.name, node);
105
+ }
106
+ if (ts.isVariableDeclarationList(node) && !(node.flags & (ts.NodeFlags.Let | ts.NodeFlags.Const))) {
107
+ const scope = enclosingScope(node); // var hoists to the nearest function/source scope
108
+ for (const decl of node.declarations)
109
+ addBinding(decl.name, scope);
110
+ }
111
+ if (ts.isFunctionDeclaration(node) && node.name) {
112
+ ensure(enclosingScope(node)).add(node.name.text);
113
+ }
114
+ ts.forEachChild(node, collectHoisted);
115
+ };
116
+ collectHoisted(sf);
117
+ const resolveScope = (name, from) => {
118
+ let scope = from;
119
+ while (scope) {
120
+ if (hoisted.get(scope)?.has(name))
121
+ return scope;
122
+ scope = parentScope(scope);
123
+ }
124
+ return undefined;
125
+ };
126
+ // Pass 2 — attribute each reassignment to the binding (scope) it mutates.
127
+ const reassigned = new Set(); // key: `${scopeId}::${name}`
128
+ const scopeIds = new Map();
129
+ let nextId = 0;
130
+ const scopeId = (scope) => {
131
+ let id = scopeIds.get(scope);
132
+ if (id === undefined) {
133
+ id = nextId++;
134
+ scopeIds.set(scope, id);
135
+ }
136
+ return id;
137
+ };
138
+ const markReassigned = (name, at) => {
139
+ const declScope = resolveScope(name, enclosingScope(at));
140
+ if (declScope)
141
+ reassigned.add(`${scopeId(declScope)}::${name}`);
142
+ };
143
+ const collectReassignments = (node) => {
144
+ if (ts.isBinaryExpression(node) && ASSIGNMENT_OPERATORS.has(node.operatorToken.kind)) {
145
+ collectIdentifierNames(node.left, (n) => markReassigned(n, node));
146
+ }
147
+ else if ((ts.isPostfixUnaryExpression(node) || ts.isPrefixUnaryExpression(node)) &&
148
+ (node.operator === ts.SyntaxKind.PlusPlusToken || node.operator === ts.SyntaxKind.MinusMinusToken) &&
149
+ ts.isIdentifier(node.operand)) {
150
+ markReassigned(node.operand.text, node);
151
+ }
152
+ ts.forEachChild(node, collectReassignments);
153
+ };
154
+ collectReassignments(sf);
155
+ return {
156
+ isReassigned(name, declarationList) {
157
+ const declScope = enclosingScope(declarationList);
158
+ return reassigned.has(`${scopeId(declScope)}::${name}`);
159
+ },
160
+ };
161
+ }
162
+ //# sourceMappingURL=scope-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-analysis.js","sourceRoot":"","sources":["../../../../src/ruvector/codemods/scope-analysis.ts"],"names":[],"mappings":"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"}
@@ -28,12 +28,20 @@ export interface EditIntent {
28
28
  */
29
29
  export interface EnhancedRouteResult {
30
30
  tier: 1 | 2 | 3;
31
- handler: 'agent-booster' | 'haiku' | 'sonnet' | 'opus';
31
+ handler: 'codemod' | 'agent-booster' | 'haiku' | 'sonnet' | 'opus';
32
32
  model?: ClaudeModel;
33
33
  confidence: number;
34
34
  complexity?: number;
35
35
  reasoning: string;
36
+ /** The detected edit intent (Tier 1 only). */
37
+ codemodIntent?: EditIntent;
38
+ /**
39
+ * Back-compat alias for {@link codemodIntent}. Older callers read this field.
40
+ * @deprecated use {@link codemodIntent}
41
+ */
36
42
  agentBoosterIntent?: EditIntent;
43
+ /** true when a deterministic, $0 codemod can fully apply this edit (no LLM). */
44
+ deterministic?: boolean;
37
45
  canSkipLLM?: boolean;
38
46
  estimatedLatencyMs: number;
39
47
  estimatedCost: number;
@@ -93,8 +101,11 @@ export declare class EnhancedModelRouter {
93
101
  */
94
102
  private analyzeASTComplexity;
95
103
  /**
96
- * Execute task using the appropriate tier
97
- * Returns the result and routing information
104
+ * Execute task using the appropriate tier.
105
+ *
106
+ * For Tier-1 deterministic intents this applies the codemod directly (writing
107
+ * the file back when a path is given) — $0, no LLM. Otherwise it returns the
108
+ * routing result and the caller invokes the recommended model.
98
109
  */
99
110
  execute(task: string, context?: {
100
111
  filePath?: string;
@@ -102,14 +113,19 @@ export declare class EnhancedModelRouter {
102
113
  }): Promise<{
103
114
  result: string | {
104
115
  applied: boolean;
105
- confidence: number;
116
+ changed: boolean;
117
+ edits: number;
106
118
  };
107
119
  routeResult: EnhancedRouteResult;
108
120
  }>;
109
121
  /**
110
- * Try to apply edit using Agent Booster
122
+ * Apply a deterministic codemod to the intent's target file.
123
+ *
124
+ * This is the real Tier-1 execution path (ADR-143). It uses the in-process
125
+ * TypeScript-compiler codemod engine — no `agent-booster` import, no subprocess,
126
+ * no LLM. Writes the transformed source back to disk when it changes.
111
127
  */
112
- private tryAgentBooster;
128
+ private tryCodemod;
113
129
  /**
114
130
  * Get router statistics
115
131
  */
@@ -137,10 +153,15 @@ export declare function enhancedRouteToModel(task: string, context?: {
137
153
  filePath?: string;
138
154
  }): Promise<EnhancedRouteResult>;
139
155
  /**
140
- * Detect if a task can be handled by Agent Booster
156
+ * Detect if a task can be applied by a deterministic, $0 codemod (ADR-143).
157
+ * Only the deterministic intents qualify — others need a model.
141
158
  */
142
- export declare function canUseAgentBooster(task: string): {
159
+ export declare function canUseCodemod(task: string): {
143
160
  canUse: boolean;
144
161
  intent?: EditIntent;
145
162
  };
163
+ /**
164
+ * @deprecated Agent Booster never performed these transforms. Use {@link canUseCodemod}.
165
+ */
166
+ export declare const canUseAgentBooster: typeof canUseCodemod;
146
167
  //# sourceMappingURL=enhanced-model-router.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"enhanced-model-router.d.ts","sourceRoot":"","sources":["../../../src/ruvector/enhanced-model-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enhanced-model-router.d.ts","sourceRoot":"","sources":["../../../src/ruvector/enhanced-model-router.ts"],"names":[],"mappings":"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"}