@aiready/cli 0.12.14 → 0.12.16

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,6 +1,6 @@
1
1
 
2
2
  
3
- > @aiready/cli@0.12.13 build /Users/pengcao/projects/aiready/packages/cli
3
+ > @aiready/cli@0.12.15 build /Users/pengcao/projects/aiready/packages/cli
4
4
  > tsup src/index.ts src/cli.ts --format cjs,esm
5
5
 
6
6
  CLI Building entry: src/cli.ts, src/index.ts
@@ -10,7 +10,7 @@
10
10
  CJS Build start
11
11
  ESM Build start
12
12
 
13
-  WARN  ▲ [WARNING] "import.meta" is not available with the "cjs" output format and will be empty [empty-import-meta] 8:49:23 pm
13
+ [12:05:08 am]  WARN  ▲ [WARNING] "import.meta" is not available with the "cjs" output format and will be empty [empty-import-meta]
14
14
 
15
15
  src/cli.ts:25:31:
16
16
   25 │ return dirname(fileURLToPath(import.meta.url));
@@ -20,10 +20,10 @@
20
20
 
21
21
 
22
22
 
23
- CJS dist/cli.js 69.48 KB
24
- CJS dist/index.js 10.58 KB
25
- CJS ⚡️ Build success in 26ms
26
- ESM dist/cli.mjs 56.89 KB
27
- ESM dist/chunk-2QOU5KKW.mjs 9.48 KB
28
23
  ESM dist/index.mjs 170.00 B
24
+ ESM dist/chunk-VOKP7FGM.mjs 9.52 KB
25
+ ESM dist/cli.mjs 56.89 KB
29
26
  ESM ⚡️ Build success in 26ms
27
+ CJS dist/index.js 10.62 KB
28
+ CJS dist/cli.js 69.52 KB
29
+ CJS ⚡️ Build success in 26ms
@@ -1,92 +1,110 @@
1
1
 
2
2
  
3
- > @aiready/cli@0.12.13 test /Users/pengcao/projects/aiready/packages/cli
3
+ > @aiready/cli@0.12.15 test /Users/pengcao/projects/aiready/packages/cli
4
4
  > vitest run
5
5
 
6
6
  [?25l
7
7
   RUN  v4.0.18 /Users/pengcao/projects/aiready/packages/cli
8
8
 
9
9
  stdout | src/__tests__/config-shape.test.ts
10
- [ToolRegistry#0.9033815218908418] Registering tool: pattern-detect (patterns, duplicates, duplication)
10
+ [ToolRegistry#0.36469398534514474] Registering tool: pattern-detect (patterns, duplicates, duplication)
11
11
 
12
12
  stdout | src/__tests__/cli.test.ts
13
- [ToolRegistry#0.9221699210349066] Registering tool: pattern-detect (patterns, duplicates, duplication)
14
-
15
- stdout | src/__tests__/config-shape.test.ts
16
- [ToolRegistry#0.9033815218908418] Registering tool: context-analyzer (context, fragmentation, budget)
13
+ [ToolRegistry#0.630029442852271] Registering tool: pattern-detect (patterns, duplicates, duplication)
17
14
 
18
15
  stdout | src/__tests__/cli.test.ts
19
- [ToolRegistry#0.9221699210349066] Registering tool: context-analyzer (context, fragmentation, budget)
16
+ [ToolRegistry#0.630029442852271] Registering tool: context-analyzer (context, fragmentation, budget)
20
17
 
21
18
  stdout | src/__tests__/config-shape.test.ts
22
- [ToolRegistry#0.9033815218908418] Registering tool: naming-consistency (consistency, naming, standards)
23
-
24
- stdout | src/__tests__/cli.test.ts
25
- [ToolRegistry#0.9221699210349066] Registering tool: naming-consistency (consistency, naming, standards)
19
+ [ToolRegistry#0.36469398534514474] Registering tool: context-analyzer (context, fragmentation, budget)
26
20
 
27
21
  stdout | src/__tests__/cli.test.ts
28
- [ToolRegistry#0.9221699210349066] Registering tool: ai-signal-clarity (ai-signal, clarity, hallucination)
22
+ [ToolRegistry#0.630029442852271] Registering tool: naming-consistency (consistency, naming, standards)
29
23
 
30
24
  stdout | src/__tests__/config-shape.test.ts
31
- [ToolRegistry#0.9033815218908418] Registering tool: ai-signal-clarity (ai-signal, clarity, hallucination)
25
+ [ToolRegistry#0.36469398534514474] Registering tool: naming-consistency (consistency, naming, standards)
32
26
 
33
27
  stdout | src/__tests__/config-shape.test.ts
34
- [ToolRegistry#0.9033815218908418] Registering tool: agent-grounding (agent-grounding, grounding, navigation)
28
+ [ToolRegistry#0.36469398534514474] Registering tool: ai-signal-clarity (ai-signal, clarity, hallucination)
35
29
 
36
30
  stdout | src/__tests__/cli.test.ts
37
- [ToolRegistry#0.9221699210349066] Registering tool: agent-grounding (agent-grounding, grounding, navigation)
31
+ [ToolRegistry#0.630029442852271] Registering tool: ai-signal-clarity (ai-signal, clarity, hallucination)
32
+
33
+ stdout | src/__tests__/config-shape.test.ts
34
+ [ToolRegistry#0.36469398534514474] Registering tool: agent-grounding (agent-grounding, grounding, navigation)
38
35
 
39
36
  stdout | src/__tests__/cli.test.ts
40
- [ToolRegistry#0.9221699210349066] Registering tool: testability-index (testability, tests, verification)
37
+ [ToolRegistry#0.630029442852271] Registering tool: agent-grounding (agent-grounding, grounding, navigation)
41
38
 
42
39
  stdout | src/__tests__/config-shape.test.ts
43
- [ToolRegistry#0.9033815218908418] Registering tool: testability-index (testability, tests, verification)
40
+ [ToolRegistry#0.36469398534514474] Registering tool: testability-index (testability, tests, verification)
41
+
42
+ stdout | src/__tests__/cli.test.ts
43
+ [ToolRegistry#0.630029442852271] Registering tool: testability-index (testability, tests, verification)
44
44
 
45
45
  stdout | src/__tests__/config-shape.test.ts
46
- [ToolRegistry#0.9033815218908418] Registering tool: doc-drift (doc-drift, docs, jsdoc)
46
+ [ToolRegistry#0.36469398534514474] Registering tool: doc-drift (doc-drift, docs, jsdoc)
47
47
 
48
48
  stdout | src/__tests__/cli.test.ts
49
- [ToolRegistry#0.9221699210349066] Registering tool: doc-drift (doc-drift, docs, jsdoc)
49
+ [ToolRegistry#0.630029442852271] Registering tool: doc-drift (doc-drift, docs, jsdoc)
50
50
 
51
51
  stdout | src/__tests__/config-shape.test.ts
52
- [ToolRegistry#0.9033815218908418] Registering tool: dependency-health (deps, deps-health, packages)
52
+ [ToolRegistry#0.36469398534514474] Registering tool: dependency-health (deps, deps-health, packages)
53
53
 
54
54
  stdout | src/__tests__/cli.test.ts
55
- [ToolRegistry#0.9221699210349066] Registering tool: dependency-health (deps, deps-health, packages)
55
+ [ToolRegistry#0.630029442852271] Registering tool: dependency-health (deps, deps-health, packages)
56
56
 
57
57
  stdout | src/__tests__/config-shape.test.ts
58
- [ToolRegistry#0.9033815218908418] Registering tool: change-amplification (change-amp, change-amplification, coupling)
58
+ [ToolRegistry#0.36469398534514474] Registering tool: change-amplification (change-amp, change-amplification, coupling)
59
59
 
60
60
  stdout | src/__tests__/cli.test.ts
61
- [ToolRegistry#0.9221699210349066] Registering tool: change-amplification (change-amp, change-amplification, coupling)
61
+ [ToolRegistry#0.630029442852271] Registering tool: change-amplification (change-amp, change-amplification, coupling)
62
+
63
+ stdout | src/__tests__/config-shape.test.ts > CLI Configuration Shape > should generate a strictly portable AIReadyConfig in summary
64
+ [ToolRegistry#0.36469398534514474] Registering tool: pattern-detect (patterns)
62
65
 
63
66
  stdout | src/__tests__/cli.test.ts > CLI Unified Analysis > should run unified analysis with both tools
64
- [ToolRegistry#0.9221699210349066] Registering tool: pattern-detect (patterns)
65
- [ToolRegistry#0.9221699210349066] Registering tool: context-analyzer (context)
67
+ [ToolRegistry#0.630029442852271] Registering tool: pattern-detect (patterns)
68
+ [ToolRegistry#0.630029442852271] Registering tool: context-analyzer (context)
66
69
 
67
- stdout | src/__tests__/config-shape.test.ts > CLI Configuration Shape > should generate a strictly portable AIReadyConfig in summary
68
- [ToolRegistry#0.9033815218908418] Registering tool: pattern-detect (patterns)
70
+ stderr | src/__tests__/config-shape.test.ts > CLI Configuration Shape > should generate a strictly portable AIReadyConfig in summary
71
+ Python WASM not found in common locations, attempting fallback regex parser
72
+
73
+ stderr | src/__tests__/cli.test.ts > CLI Unified Analysis > should run unified analysis with both tools
74
+ Python WASM not found in common locations, attempting fallback regex parser
69
75
 
70
76
  stdout | src/__tests__/cli.test.ts > CLI Unified Analysis > should run analysis with only patterns tool
71
- [ToolRegistry#0.9221699210349066] Registering tool: pattern-detect (patterns)
72
- [ToolRegistry#0.9221699210349066] Registering tool: context-analyzer (context)
77
+ [ToolRegistry#0.630029442852271] Registering tool: pattern-detect (patterns)
78
+ [ToolRegistry#0.630029442852271] Registering tool: context-analyzer (context)
79
+
80
+ stderr | src/__tests__/cli.test.ts > CLI Unified Analysis > should run analysis with only patterns tool
81
+ Python WASM not found in common locations, attempting fallback regex parser
73
82
 
74
83
  stdout | src/__tests__/cli.test.ts > CLI Unified Analysis > should run analysis with only context tool
75
- [ToolRegistry#0.9221699210349066] Registering tool: pattern-detect (patterns)
76
- [ToolRegistry#0.9221699210349066] Registering tool: context-analyzer (context)
84
+ [ToolRegistry#0.630029442852271] Registering tool: pattern-detect (patterns)
85
+ [ToolRegistry#0.630029442852271] Registering tool: context-analyzer (context)
77
86
 
78
87
  stdout | src/__tests__/config-shape.test.ts > CLI Configuration Shape > should strip internal keys like useSmartDefaults and batchSize
79
- [ToolRegistry#0.9033815218908418] Registering tool: pattern-detect (patterns)
88
+ [ToolRegistry#0.36469398534514474] Registering tool: pattern-detect (patterns)
89
+
90
+ stderr | src/__tests__/cli.test.ts > CLI Unified Analysis > should run analysis with only context tool
91
+ Python WASM not found in common locations, attempting fallback regex parser
92
+
93
+ stderr | src/__tests__/config-shape.test.ts > CLI Configuration Shape > should strip internal keys like useSmartDefaults and batchSize
94
+ Python WASM not found in common locations, attempting fallback regex parser
80
95
 
81
96
  stdout | src/__tests__/config-shape.test.ts > CLI Configuration Shape > should produce a config that is compatible with tool specific collection
82
- [ToolRegistry#0.9033815218908418] Registering tool: pattern-detect (patterns)
97
+ [ToolRegistry#0.36469398534514474] Registering tool: pattern-detect (patterns)
98
+
99
+ stderr | src/__tests__/config-shape.test.ts > CLI Configuration Shape > should produce a config that is compatible with tool specific collection
100
+ Python WASM not found in common locations, attempting fallback regex parser
83
101
 
84
- ✓ src/__tests__/cli.test.ts (3 tests) 3ms
85
- ✓ src/__tests__/config-shape.test.ts (3 tests) 3ms
102
+ ✓ src/__tests__/cli.test.ts (3 tests) 7ms
103
+ ✓ src/__tests__/config-shape.test.ts (3 tests) 7ms
86
104
 
87
105
   Test Files  2 passed (2)
88
106
   Tests  6 passed (6)
89
-  Start at  20:49:43
90
-  Duration  460ms (transform 241ms, setup 0ms, import 659ms, tests 6ms, environment 0ms)
107
+  Start at  00:05:20
108
+  Duration  456ms (transform 229ms, setup 0ms, import 664ms, tests 14ms, environment 0ms)
91
109
 
92
110
  [?25h
@@ -0,0 +1,303 @@
1
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
+ }) : x)(function(x) {
4
+ if (typeof require !== "undefined") return require.apply(this, arguments);
5
+ throw Error('Dynamic require of "' + x + '" is not supported');
6
+ });
7
+
8
+ // src/index.ts
9
+ import {
10
+ ToolRegistry,
11
+ ToolName,
12
+ calculateOverallScore,
13
+ calculateTokenBudget,
14
+ GLOBAL_INFRA_OPTIONS,
15
+ COMMON_FINE_TUNING_OPTIONS,
16
+ initializeParsers
17
+ } from "@aiready/core";
18
+ import "@aiready/pattern-detect";
19
+ import "@aiready/context-analyzer";
20
+ import "@aiready/consistency";
21
+ import "@aiready/ai-signal-clarity";
22
+ import "@aiready/agent-grounding";
23
+ import "@aiready/testability";
24
+ import "@aiready/doc-drift";
25
+ import "@aiready/deps";
26
+ import "@aiready/change-amplification";
27
+ var TOOL_PACKAGE_MAP = {
28
+ [ToolName.PatternDetect]: "@aiready/pattern-detect",
29
+ [ToolName.ContextAnalyzer]: "@aiready/context-analyzer",
30
+ [ToolName.NamingConsistency]: "@aiready/consistency",
31
+ [ToolName.AiSignalClarity]: "@aiready/ai-signal-clarity",
32
+ [ToolName.AgentGrounding]: "@aiready/agent-grounding",
33
+ [ToolName.TestabilityIndex]: "@aiready/testability",
34
+ [ToolName.DocDrift]: "@aiready/doc-drift",
35
+ [ToolName.DependencyHealth]: "@aiready/deps",
36
+ [ToolName.ChangeAmplification]: "@aiready/change-amplification",
37
+ // Aliases handled by registry
38
+ patterns: "@aiready/pattern-detect",
39
+ duplicates: "@aiready/pattern-detect",
40
+ context: "@aiready/context-analyzer",
41
+ fragmentation: "@aiready/context-analyzer",
42
+ consistency: "@aiready/consistency",
43
+ "ai-signal": "@aiready/ai-signal-clarity",
44
+ grounding: "@aiready/agent-grounding",
45
+ testability: "@aiready/testability",
46
+ "deps-health": "@aiready/deps",
47
+ "change-amp": "@aiready/change-amplification"
48
+ };
49
+ function sanitizeConfigRecursive(obj) {
50
+ if (!obj || typeof obj !== "object" || Array.isArray(obj)) return obj;
51
+ const sanitized = {};
52
+ const infraToStrip = [
53
+ "rootDir",
54
+ "onProgress",
55
+ "progressCallback",
56
+ "streamResults",
57
+ "batchSize",
58
+ "useSmartDefaults"
59
+ ];
60
+ for (const [key, value] of Object.entries(obj)) {
61
+ if (infraToStrip.includes(key)) continue;
62
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
63
+ sanitized[key] = sanitizeConfigRecursive(value);
64
+ } else {
65
+ sanitized[key] = value;
66
+ }
67
+ }
68
+ return sanitized;
69
+ }
70
+ function sanitizeToolConfig(config) {
71
+ return sanitizeConfigRecursive(config);
72
+ }
73
+ async function analyzeUnified(options) {
74
+ await initializeParsers();
75
+ const startTime = Date.now();
76
+ const requestedTools = options.tools || [
77
+ "patterns",
78
+ "context",
79
+ "consistency"
80
+ ];
81
+ const result = {
82
+ summary: {
83
+ totalIssues: 0,
84
+ criticalIssues: 0,
85
+ // Added as per instruction
86
+ majorIssues: 0,
87
+ // Added as per instruction
88
+ totalFiles: 0,
89
+ toolsRun: [],
90
+ executionTime: 0,
91
+ config: options,
92
+ toolConfigs: {}
93
+ }
94
+ };
95
+ for (const toolName of requestedTools) {
96
+ let provider = ToolRegistry.find(toolName);
97
+ if (!provider) {
98
+ const packageName = TOOL_PACKAGE_MAP[toolName] || (toolName.startsWith("@aiready/") ? toolName : `@aiready/${toolName}`);
99
+ try {
100
+ await import(packageName);
101
+ provider = ToolRegistry.find(toolName);
102
+ if (provider) {
103
+ console.log(
104
+ `\u2705 Successfully loaded tool provider: ${toolName} from ${packageName}`
105
+ );
106
+ } else {
107
+ console.log(
108
+ `\u26A0\uFE0F Loaded ${packageName} but provider ${toolName} still not found in registry.`
109
+ );
110
+ }
111
+ } catch (err) {
112
+ console.log(
113
+ `\u274C Failed to dynamically load tool ${toolName} (${packageName}):`,
114
+ err.message
115
+ );
116
+ }
117
+ }
118
+ if (!provider) {
119
+ console.warn(
120
+ `\u26A0\uFE0F Warning: Tool provider for '${toolName}' not found. Skipping.`
121
+ );
122
+ continue;
123
+ }
124
+ try {
125
+ const sanitizedOptions = { ...options };
126
+ delete sanitizedOptions.onProgress;
127
+ delete sanitizedOptions.progressCallback;
128
+ const toolOptions = {
129
+ rootDir: options.rootDir
130
+ // Always include rootDir
131
+ };
132
+ [...GLOBAL_INFRA_OPTIONS, ...COMMON_FINE_TUNING_OPTIONS].forEach(
133
+ (key) => {
134
+ if (key in options && key !== "toolConfigs" && key !== "tools") {
135
+ toolOptions[key] = options[key];
136
+ }
137
+ }
138
+ );
139
+ if (options.toolConfigs?.[provider.id]) {
140
+ Object.assign(toolOptions, options.toolConfigs[provider.id]);
141
+ } else if (options.tools && !Array.isArray(options.tools) && typeof options.tools === "object" && options.tools[provider.id]) {
142
+ Object.assign(toolOptions, options.tools[provider.id]);
143
+ } else if (options[provider.id]) {
144
+ Object.assign(toolOptions, options[provider.id]);
145
+ }
146
+ toolOptions.onProgress = (processed, total, message) => {
147
+ if (options.progressCallback) {
148
+ options.progressCallback({
149
+ tool: provider.id,
150
+ processed,
151
+ total,
152
+ message
153
+ });
154
+ }
155
+ };
156
+ const output = await provider.analyze(toolOptions);
157
+ if (output.metadata) {
158
+ output.metadata.config = sanitizeToolConfig(toolOptions);
159
+ }
160
+ if (options.progressCallback) {
161
+ options.progressCallback({ tool: provider.id, data: output });
162
+ }
163
+ result[provider.id] = output;
164
+ result.summary.toolsRun.push(provider.id);
165
+ if (output.summary?.config) {
166
+ result.summary.toolConfigs[provider.id] = sanitizeToolConfig(
167
+ output.summary.config
168
+ );
169
+ } else if (output.metadata?.config) {
170
+ result.summary.toolConfigs[provider.id] = sanitizeToolConfig(
171
+ output.metadata.config
172
+ );
173
+ } else {
174
+ result.summary.toolConfigs[provider.id] = sanitizeToolConfig(toolOptions);
175
+ }
176
+ const toolFiles = output.summary?.totalFiles || output.summary?.filesAnalyzed || 0;
177
+ if (toolFiles > result.summary.totalFiles) {
178
+ result.summary.totalFiles = toolFiles;
179
+ }
180
+ const issueCount = output.results.reduce(
181
+ (sum, file) => sum + (file.issues?.length || 0),
182
+ 0
183
+ );
184
+ result.summary.totalIssues += issueCount;
185
+ if (provider.alias && Array.isArray(provider.alias)) {
186
+ for (const alias of provider.alias) {
187
+ if (!result[alias]) {
188
+ result[alias] = output;
189
+ }
190
+ }
191
+ }
192
+ const camelCaseId = provider.id.replace(
193
+ /-([a-z])/g,
194
+ (g) => g[1].toUpperCase()
195
+ );
196
+ if (camelCaseId !== provider.id && !result[camelCaseId]) {
197
+ result[camelCaseId] = output;
198
+ }
199
+ } catch (err) {
200
+ console.error(`\u274C Error running tool '${provider.id}':`, err);
201
+ }
202
+ }
203
+ result.summary.config = sanitizeConfigRecursive({
204
+ scan: {
205
+ tools: requestedTools,
206
+ include: options.include,
207
+ exclude: options.exclude
208
+ },
209
+ // Use 'tools' for tool-specific configurations to match AIReadyConfig
210
+ tools: result.summary.toolConfigs
211
+ });
212
+ result.summary.executionTime = Date.now() - startTime;
213
+ return result;
214
+ }
215
+ async function scoreUnified(results, options) {
216
+ const toolScores = /* @__PURE__ */ new Map();
217
+ for (const toolId of results.summary.toolsRun) {
218
+ const provider = ToolRegistry.get(toolId);
219
+ if (!provider) continue;
220
+ const output = results[toolId];
221
+ if (!output) continue;
222
+ try {
223
+ const toolScore = provider.score(output, options);
224
+ if (!toolScore.tokenBudget) {
225
+ if (toolId === ToolName.PatternDetect && output.duplicates) {
226
+ const wastedTokens = output.duplicates.reduce(
227
+ (sum, d) => sum + (d.tokenCost || 0),
228
+ 0
229
+ );
230
+ toolScore.tokenBudget = calculateTokenBudget({
231
+ totalContextTokens: wastedTokens * 2,
232
+ wastedTokens: {
233
+ duplication: wastedTokens,
234
+ fragmentation: 0,
235
+ chattiness: 0
236
+ }
237
+ });
238
+ } else if (toolId === ToolName.ContextAnalyzer && output.summary) {
239
+ toolScore.tokenBudget = calculateTokenBudget({
240
+ totalContextTokens: output.summary.totalTokens,
241
+ wastedTokens: {
242
+ duplication: 0,
243
+ fragmentation: output.summary.totalPotentialSavings || 0,
244
+ chattiness: 0
245
+ }
246
+ });
247
+ }
248
+ }
249
+ toolScores.set(toolId, toolScore);
250
+ } catch (err) {
251
+ console.error(`\u274C Error scoring tool '${toolId}':`, err);
252
+ }
253
+ }
254
+ if (toolScores.size === 0) {
255
+ return {
256
+ overall: 0,
257
+ rating: "Critical",
258
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
259
+ toolsUsed: [],
260
+ breakdown: [],
261
+ calculation: {
262
+ formula: "0 / 0 = 0",
263
+ weights: {},
264
+ normalized: "0 / 0 = 0"
265
+ }
266
+ };
267
+ }
268
+ return calculateOverallScore(toolScores, options, void 0);
269
+ }
270
+ function generateUnifiedSummary(result) {
271
+ const { summary } = result;
272
+ let output = `\u{1F680} AIReady Analysis Complete
273
+
274
+ `;
275
+ output += `\u{1F4CA} Summary:
276
+ `;
277
+ output += ` Tools run: ${summary.toolsRun.join(", ")}
278
+ `;
279
+ output += ` Total issues found: ${summary.totalIssues}
280
+ `;
281
+ output += ` Execution time: ${(summary.executionTime / 1e3).toFixed(2)}s
282
+
283
+ `;
284
+ for (const provider of ToolRegistry.getAll()) {
285
+ const toolResult = result[provider.id];
286
+ if (toolResult) {
287
+ const issueCount = toolResult.results.reduce(
288
+ (sum, r) => sum + (r.issues?.length || 0),
289
+ 0
290
+ );
291
+ output += `\u2022 ${provider.id}: ${issueCount} issues
292
+ `;
293
+ }
294
+ }
295
+ return output;
296
+ }
297
+
298
+ export {
299
+ __require,
300
+ analyzeUnified,
301
+ scoreUnified,
302
+ generateUnifiedSummary
303
+ };
package/dist/cli.js CHANGED
@@ -93,6 +93,7 @@ function sanitizeToolConfig(config) {
93
93
  return sanitizeConfigRecursive(config);
94
94
  }
95
95
  async function analyzeUnified(options) {
96
+ await (0, import_core.initializeParsers)();
96
97
  const startTime = Date.now();
97
98
  const requestedTools = options.tools || [
98
99
  "patterns",
package/dist/cli.mjs CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  __require,
4
4
  analyzeUnified,
5
5
  scoreUnified
6
- } from "./chunk-2QOU5KKW.mjs";
6
+ } from "./chunk-VOKP7FGM.mjs";
7
7
 
8
8
  // src/cli.ts
9
9
  import { Command } from "commander";
package/dist/index.js CHANGED
@@ -82,6 +82,7 @@ function sanitizeToolConfig(config) {
82
82
  return sanitizeConfigRecursive(config);
83
83
  }
84
84
  async function analyzeUnified(options) {
85
+ await (0, import_core.initializeParsers)();
85
86
  const startTime = Date.now();
86
87
  const requestedTools = options.tools || [
87
88
  "patterns",
package/dist/index.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  analyzeUnified,
3
3
  generateUnifiedSummary,
4
4
  scoreUnified
5
- } from "./chunk-2QOU5KKW.mjs";
5
+ } from "./chunk-VOKP7FGM.mjs";
6
6
  export {
7
7
  analyzeUnified,
8
8
  generateUnifiedSummary,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiready/cli",
3
- "version": "0.12.14",
3
+ "version": "0.12.16",
4
4
  "description": "Unified CLI for AIReady analysis tools",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -11,17 +11,17 @@
11
11
  "dependencies": {
12
12
  "chalk": "^5.3.0",
13
13
  "commander": "^14.0.0",
14
- "@aiready/agent-grounding": "0.11.13",
15
- "@aiready/consistency": "0.18.13",
16
- "@aiready/context-analyzer": "0.19.13",
17
- "@aiready/deps": "0.11.13",
18
- "@aiready/core": "0.21.13",
19
- "@aiready/doc-drift": "0.11.13",
20
- "@aiready/ai-signal-clarity": "0.11.13",
21
- "@aiready/visualizer": "0.4.13",
22
- "@aiready/change-amplification": "0.11.13",
23
- "@aiready/pattern-detect": "0.14.13",
24
- "@aiready/testability": "0.4.13"
14
+ "@aiready/agent-grounding": "0.11.14",
15
+ "@aiready/consistency": "0.18.14",
16
+ "@aiready/context-analyzer": "0.19.14",
17
+ "@aiready/deps": "0.11.14",
18
+ "@aiready/doc-drift": "0.11.14",
19
+ "@aiready/change-amplification": "0.11.14",
20
+ "@aiready/pattern-detect": "0.14.14",
21
+ "@aiready/visualizer": "0.4.15",
22
+ "@aiready/ai-signal-clarity": "0.11.14",
23
+ "@aiready/testability": "0.4.14",
24
+ "@aiready/core": "0.21.14"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^24.0.0",
package/src/index.ts CHANGED
@@ -6,6 +6,7 @@ import {
6
6
  GLOBAL_SCAN_OPTIONS,
7
7
  GLOBAL_INFRA_OPTIONS,
8
8
  COMMON_FINE_TUNING_OPTIONS,
9
+ initializeParsers,
9
10
  } from '@aiready/core';
10
11
  import type {
11
12
  AnalysisResult,
@@ -137,6 +138,9 @@ function sanitizeToolConfig(config: any): any {
137
138
  export async function analyzeUnified(
138
139
  options: UnifiedAnalysisOptions
139
140
  ): Promise<UnifiedAnalysisResult> {
141
+ // Initialize language parsers
142
+ await initializeParsers();
143
+
140
144
  const startTime = Date.now();
141
145
  const requestedTools = options.tools || [
142
146
  'patterns',