@aiready/cli 0.10.2 → 0.10.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.
package/dist/cli.js CHANGED
@@ -144,10 +144,11 @@ async function analyzeUnified(options) {
144
144
  options.progressCallback({ tool: "doc-drift", data: report });
145
145
  }
146
146
  result.docDrift = {
147
- results: report.results || [],
147
+ results: report.results || report.issues || [],
148
148
  summary: report.summary || {}
149
149
  };
150
- result.summary.totalIssues += report.issues?.length || 0;
150
+ const issueCount = report.issues?.length || (report.results ? report.results.length : 0);
151
+ result.summary.totalIssues += issueCount;
151
152
  }
152
153
  if (tools.includes("deps-health")) {
153
154
  const { analyzeDeps } = await import("@aiready/deps");
@@ -161,10 +162,11 @@ async function analyzeUnified(options) {
161
162
  options.progressCallback({ tool: "deps-health", data: report });
162
163
  }
163
164
  result.dependencyHealth = {
164
- results: report.results || [],
165
+ results: report.results || report.issues || [],
165
166
  summary: report.summary || {}
166
167
  };
167
- result.summary.totalIssues += report.issues?.length || 0;
168
+ const issueCount = report.issues?.length || (report.results ? report.results.length : 0);
169
+ result.summary.totalIssues += issueCount;
168
170
  }
169
171
  if (tools.includes("ai-signal-clarity")) {
170
172
  const { analyzeAiSignalClarity } = await import("@aiready/ai-signal-clarity");
@@ -179,11 +181,11 @@ async function analyzeUnified(options) {
179
181
  }
180
182
  result.aiSignalClarity = {
181
183
  ...report,
182
- results: report.results || [],
184
+ results: report.results || report.issues || [],
183
185
  summary: report.summary || {}
184
186
  };
185
- result.summary.totalIssues += report.results?.reduce(
186
- (sum, r) => sum + (r.issues?.length || 0),
187
+ result.summary.totalIssues += (report.results || report.issues)?.reduce(
188
+ (sum, r) => sum + (r.issues?.length || 1),
187
189
  0
188
190
  ) || 0;
189
191
  }
@@ -200,10 +202,10 @@ async function analyzeUnified(options) {
200
202
  }
201
203
  result.agentGrounding = {
202
204
  ...report,
203
- results: report.results || [],
205
+ results: report.results || report.issues || [],
204
206
  summary: report.summary || {}
205
207
  };
206
- result.summary.totalIssues += report.issues?.length || 0;
208
+ result.summary.totalIssues += (report.issues || report.results || []).length;
207
209
  }
208
210
  if (tools.includes("testability")) {
209
211
  const { analyzeTestability } = await import("@aiready/testability");
@@ -218,10 +220,10 @@ async function analyzeUnified(options) {
218
220
  }
219
221
  result.testability = {
220
222
  ...report,
221
- results: report.results || [],
223
+ results: report.results || report.issues || [],
222
224
  summary: report.summary || {}
223
225
  };
224
- result.summary.totalIssues += report.issues?.length || 0;
226
+ result.summary.totalIssues += (report.issues || report.results || []).length;
225
227
  }
226
228
  if (tools.includes("change-amplification")) {
227
229
  const { analyzeChangeAmplification } = await import("@aiready/change-amplification");
@@ -526,7 +528,9 @@ async function uploadAction(file, options) {
526
528
  )
527
529
  );
528
530
  console.log(
529
- import_chalk2.default.dim(" Get an API key from https://getaiready.dev/dashboard")
531
+ import_chalk2.default.dim(
532
+ " Get an API key from https://platform.getaiready.dev/dashboard"
533
+ )
530
534
  );
531
535
  process.exit(1);
532
536
  }
@@ -884,18 +888,18 @@ async function scanAction(directory, options) {
884
888
  topFiles.forEach(([file, issues], idx) => {
885
889
  const counts = issues.reduce(
886
890
  (acc, it) => {
887
- const s = (it.severity || "info").toLowerCase();
891
+ const s = (it.severity || import_core3.Severity.Info).toLowerCase();
888
892
  acc[s] = (acc[s] || 0) + 1;
889
893
  return acc;
890
894
  },
891
895
  {}
892
896
  );
893
897
  const sample = issues.find(
894
- (it) => it.severity === "critical" || it.severity === "major"
898
+ (it) => it.severity === import_core3.Severity.Critical || it.severity === import_core3.Severity.Major
895
899
  ) || issues[0];
896
900
  const sampleMsg = sample ? ` \u2014 ${sample.message}` : "";
897
901
  console.log(
898
- ` ${idx + 1}. ${file} \u2014 ${issues.length} issue(s) (critical:${counts.critical || 0} major:${counts.major || 0} minor:${counts.minor || 0} info:${counts.info || 0})${sampleMsg}`
902
+ ` ${idx + 1}. ${file} \u2014 ${issues.length} issue(s) (critical:${counts[import_core3.Severity.Critical] || 0} major:${counts[import_core3.Severity.Major] || 0} minor:${counts[import_core3.Severity.Minor] || 0} info:${counts[import_core3.Severity.Info] || 0})${sampleMsg}`
899
903
  );
900
904
  });
901
905
  const remaining = files.length - topFiles.length;
@@ -1128,6 +1132,78 @@ async function scanAction(directory, options) {
1128
1132
  }
1129
1133
  }
1130
1134
  }
1135
+ const mapToUnifiedReport = (res, scoring) => {
1136
+ const allResults = [];
1137
+ let totalFilesSet = /* @__PURE__ */ new Set();
1138
+ let criticalCount = 0;
1139
+ let majorCount = 0;
1140
+ const collect = (spokeRes, defaultType = import_core3.IssueType.AiSignalClarity) => {
1141
+ if (!spokeRes || !spokeRes.results) return;
1142
+ spokeRes.results.forEach((r) => {
1143
+ const fileName = r.fileName || r.file || "unknown";
1144
+ totalFilesSet.add(fileName);
1145
+ const normalizedResult = {
1146
+ fileName,
1147
+ issues: [],
1148
+ metrics: r.metrics || { tokenCost: r.tokenCost || 0 }
1149
+ };
1150
+ if (r.issues && Array.isArray(r.issues)) {
1151
+ r.issues.forEach((i) => {
1152
+ const normalizedIssue = typeof i === "string" ? {
1153
+ type: defaultType,
1154
+ severity: r.severity || import_core3.Severity.Info,
1155
+ message: i,
1156
+ location: { file: fileName, line: 1 }
1157
+ } : {
1158
+ type: i.type || defaultType,
1159
+ severity: i.severity || r.severity || import_core3.Severity.Info,
1160
+ message: i.message || String(i),
1161
+ location: i.location || { file: fileName, line: 1 },
1162
+ suggestion: i.suggestion
1163
+ };
1164
+ if (normalizedIssue.severity === import_core3.Severity.Critical || normalizedIssue.severity === "critical")
1165
+ criticalCount++;
1166
+ if (normalizedIssue.severity === import_core3.Severity.Major || normalizedIssue.severity === "major")
1167
+ majorCount++;
1168
+ normalizedResult.issues.push(normalizedIssue);
1169
+ });
1170
+ } else if (r.severity) {
1171
+ const normalizedIssue = {
1172
+ type: defaultType,
1173
+ severity: r.severity,
1174
+ message: r.message || "General issue",
1175
+ location: { file: fileName, line: 1 }
1176
+ };
1177
+ if (normalizedIssue.severity === import_core3.Severity.Critical || normalizedIssue.severity === "critical")
1178
+ criticalCount++;
1179
+ if (normalizedIssue.severity === import_core3.Severity.Major || normalizedIssue.severity === "major")
1180
+ majorCount++;
1181
+ normalizedResult.issues.push(normalizedIssue);
1182
+ }
1183
+ allResults.push(normalizedResult);
1184
+ });
1185
+ };
1186
+ collect(res.patternDetect, import_core3.IssueType.DuplicatePattern);
1187
+ collect(res.contextAnalyzer, import_core3.IssueType.ContextFragmentation);
1188
+ collect(res.consistency, import_core3.IssueType.NamingInconsistency);
1189
+ collect(res.docDrift, import_core3.IssueType.DocDrift);
1190
+ collect(res.dependencyHealth, import_core3.IssueType.DependencyHealth);
1191
+ collect(res.aiSignalClarity, import_core3.IssueType.AiSignalClarity);
1192
+ collect(res.agentGrounding, import_core3.IssueType.AgentNavigationFailure);
1193
+ collect(res.testability, import_core3.IssueType.LowTestability);
1194
+ collect(res.changeAmplification, import_core3.IssueType.ChangeAmplification);
1195
+ return {
1196
+ ...res,
1197
+ results: allResults,
1198
+ summary: {
1199
+ ...res.summary,
1200
+ totalFiles: totalFilesSet.size,
1201
+ criticalIssues: criticalCount,
1202
+ majorIssues: majorCount
1203
+ },
1204
+ scoring
1205
+ };
1206
+ };
1131
1207
  const outputFormat = options.output || finalOptions.output?.format || "console";
1132
1208
  const userOutputFile = options.outputFile || finalOptions.output?.file;
1133
1209
  if (outputFormat === "json") {
@@ -1139,8 +1215,7 @@ async function scanAction(directory, options) {
1139
1215
  resolvedDir
1140
1216
  );
1141
1217
  const outputData = {
1142
- ...results,
1143
- scoring: scoringResult,
1218
+ ...mapToUnifiedReport(results, scoringResult),
1144
1219
  repository: repoMetadata
1145
1220
  };
1146
1221
  (0, import_core3.handleJSONOutput)(
@@ -1165,8 +1240,7 @@ async function scanAction(directory, options) {
1165
1240
  resolvedDir
1166
1241
  );
1167
1242
  const outputData = {
1168
- ...results,
1169
- scoring: scoringResult,
1243
+ ...mapToUnifiedReport(results, scoringResult),
1170
1244
  repository: repoMetadata
1171
1245
  };
1172
1246
  try {
@@ -1209,7 +1283,7 @@ async function scanAction(directory, options) {
1209
1283
  }
1210
1284
  if (results.patternDetect) {
1211
1285
  const criticalPatterns = results.patternDetect.results.flatMap(
1212
- (p) => p.issues.filter((i) => i.severity === "critical")
1286
+ (p) => p.issues.filter((i) => i.severity === import_core3.Severity.Critical)
1213
1287
  );
1214
1288
  criticalPatterns.slice(0, 10).forEach((issue) => {
1215
1289
  console.log(
@@ -1232,22 +1306,22 @@ async function scanAction(directory, options) {
1232
1306
  if (results.patternDetect) {
1233
1307
  results.patternDetect.results.forEach((p) => {
1234
1308
  p.issues.forEach((i) => {
1235
- if (i.severity === "critical") criticalCount++;
1236
- if (i.severity === "major") majorCount++;
1309
+ if (i.severity === import_core3.Severity.Critical) criticalCount++;
1310
+ if (i.severity === import_core3.Severity.Major) majorCount++;
1237
1311
  });
1238
1312
  });
1239
1313
  }
1240
1314
  if (results.contextAnalyzer) {
1241
1315
  results.contextAnalyzer.results.forEach((c) => {
1242
- if (c.severity === "critical") criticalCount++;
1243
- if (c.severity === "major") majorCount++;
1316
+ if (c.severity === import_core3.Severity.Critical) criticalCount++;
1317
+ if (c.severity === import_core3.Severity.Major) majorCount++;
1244
1318
  });
1245
1319
  }
1246
1320
  if (results.consistency) {
1247
1321
  results.consistency.results.forEach((r) => {
1248
1322
  r.issues?.forEach((i) => {
1249
- if (i.severity === "critical") criticalCount++;
1250
- if (i.severity === "major") majorCount++;
1323
+ if (i.severity === import_core3.Severity.Critical) criticalCount++;
1324
+ if (i.severity === import_core3.Severity.Major) majorCount++;
1251
1325
  });
1252
1326
  });
1253
1327
  }
package/dist/cli.mjs CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  __require,
4
4
  analyzeUnified,
5
5
  scoreUnified
6
- } from "./chunk-VUCNUYI7.mjs";
6
+ } from "./chunk-R3O7QPKD.mjs";
7
7
 
8
8
  // src/cli.ts
9
9
  import { Command } from "commander";
@@ -28,7 +28,9 @@ import {
28
28
  getModelPreset,
29
29
  getRating,
30
30
  getRatingDisplay,
31
- getRepoMetadata
31
+ getRepoMetadata,
32
+ Severity,
33
+ IssueType
32
34
  } from "@aiready/core";
33
35
 
34
36
  // src/utils/helpers.ts
@@ -173,7 +175,9 @@ async function uploadAction(file, options) {
173
175
  )
174
176
  );
175
177
  console.log(
176
- chalk2.dim(" Get an API key from https://getaiready.dev/dashboard")
178
+ chalk2.dim(
179
+ " Get an API key from https://platform.getaiready.dev/dashboard"
180
+ )
177
181
  );
178
182
  process.exit(1);
179
183
  }
@@ -531,18 +535,18 @@ async function scanAction(directory, options) {
531
535
  topFiles.forEach(([file, issues], idx) => {
532
536
  const counts = issues.reduce(
533
537
  (acc, it) => {
534
- const s = (it.severity || "info").toLowerCase();
538
+ const s = (it.severity || Severity.Info).toLowerCase();
535
539
  acc[s] = (acc[s] || 0) + 1;
536
540
  return acc;
537
541
  },
538
542
  {}
539
543
  );
540
544
  const sample = issues.find(
541
- (it) => it.severity === "critical" || it.severity === "major"
545
+ (it) => it.severity === Severity.Critical || it.severity === Severity.Major
542
546
  ) || issues[0];
543
547
  const sampleMsg = sample ? ` \u2014 ${sample.message}` : "";
544
548
  console.log(
545
- ` ${idx + 1}. ${file} \u2014 ${issues.length} issue(s) (critical:${counts.critical || 0} major:${counts.major || 0} minor:${counts.minor || 0} info:${counts.info || 0})${sampleMsg}`
549
+ ` ${idx + 1}. ${file} \u2014 ${issues.length} issue(s) (critical:${counts[Severity.Critical] || 0} major:${counts[Severity.Major] || 0} minor:${counts[Severity.Minor] || 0} info:${counts[Severity.Info] || 0})${sampleMsg}`
546
550
  );
547
551
  });
548
552
  const remaining = files.length - topFiles.length;
@@ -775,6 +779,78 @@ async function scanAction(directory, options) {
775
779
  }
776
780
  }
777
781
  }
782
+ const mapToUnifiedReport = (res, scoring) => {
783
+ const allResults = [];
784
+ let totalFilesSet = /* @__PURE__ */ new Set();
785
+ let criticalCount = 0;
786
+ let majorCount = 0;
787
+ const collect = (spokeRes, defaultType = IssueType.AiSignalClarity) => {
788
+ if (!spokeRes || !spokeRes.results) return;
789
+ spokeRes.results.forEach((r) => {
790
+ const fileName = r.fileName || r.file || "unknown";
791
+ totalFilesSet.add(fileName);
792
+ const normalizedResult = {
793
+ fileName,
794
+ issues: [],
795
+ metrics: r.metrics || { tokenCost: r.tokenCost || 0 }
796
+ };
797
+ if (r.issues && Array.isArray(r.issues)) {
798
+ r.issues.forEach((i) => {
799
+ const normalizedIssue = typeof i === "string" ? {
800
+ type: defaultType,
801
+ severity: r.severity || Severity.Info,
802
+ message: i,
803
+ location: { file: fileName, line: 1 }
804
+ } : {
805
+ type: i.type || defaultType,
806
+ severity: i.severity || r.severity || Severity.Info,
807
+ message: i.message || String(i),
808
+ location: i.location || { file: fileName, line: 1 },
809
+ suggestion: i.suggestion
810
+ };
811
+ if (normalizedIssue.severity === Severity.Critical || normalizedIssue.severity === "critical")
812
+ criticalCount++;
813
+ if (normalizedIssue.severity === Severity.Major || normalizedIssue.severity === "major")
814
+ majorCount++;
815
+ normalizedResult.issues.push(normalizedIssue);
816
+ });
817
+ } else if (r.severity) {
818
+ const normalizedIssue = {
819
+ type: defaultType,
820
+ severity: r.severity,
821
+ message: r.message || "General issue",
822
+ location: { file: fileName, line: 1 }
823
+ };
824
+ if (normalizedIssue.severity === Severity.Critical || normalizedIssue.severity === "critical")
825
+ criticalCount++;
826
+ if (normalizedIssue.severity === Severity.Major || normalizedIssue.severity === "major")
827
+ majorCount++;
828
+ normalizedResult.issues.push(normalizedIssue);
829
+ }
830
+ allResults.push(normalizedResult);
831
+ });
832
+ };
833
+ collect(res.patternDetect, IssueType.DuplicatePattern);
834
+ collect(res.contextAnalyzer, IssueType.ContextFragmentation);
835
+ collect(res.consistency, IssueType.NamingInconsistency);
836
+ collect(res.docDrift, IssueType.DocDrift);
837
+ collect(res.dependencyHealth, IssueType.DependencyHealth);
838
+ collect(res.aiSignalClarity, IssueType.AiSignalClarity);
839
+ collect(res.agentGrounding, IssueType.AgentNavigationFailure);
840
+ collect(res.testability, IssueType.LowTestability);
841
+ collect(res.changeAmplification, IssueType.ChangeAmplification);
842
+ return {
843
+ ...res,
844
+ results: allResults,
845
+ summary: {
846
+ ...res.summary,
847
+ totalFiles: totalFilesSet.size,
848
+ criticalIssues: criticalCount,
849
+ majorIssues: majorCount
850
+ },
851
+ scoring
852
+ };
853
+ };
778
854
  const outputFormat = options.output || finalOptions.output?.format || "console";
779
855
  const userOutputFile = options.outputFile || finalOptions.output?.file;
780
856
  if (outputFormat === "json") {
@@ -786,8 +862,7 @@ async function scanAction(directory, options) {
786
862
  resolvedDir
787
863
  );
788
864
  const outputData = {
789
- ...results,
790
- scoring: scoringResult,
865
+ ...mapToUnifiedReport(results, scoringResult),
791
866
  repository: repoMetadata
792
867
  };
793
868
  handleJSONOutput(
@@ -812,8 +887,7 @@ async function scanAction(directory, options) {
812
887
  resolvedDir
813
888
  );
814
889
  const outputData = {
815
- ...results,
816
- scoring: scoringResult,
890
+ ...mapToUnifiedReport(results, scoringResult),
817
891
  repository: repoMetadata
818
892
  };
819
893
  try {
@@ -856,7 +930,7 @@ async function scanAction(directory, options) {
856
930
  }
857
931
  if (results.patternDetect) {
858
932
  const criticalPatterns = results.patternDetect.results.flatMap(
859
- (p) => p.issues.filter((i) => i.severity === "critical")
933
+ (p) => p.issues.filter((i) => i.severity === Severity.Critical)
860
934
  );
861
935
  criticalPatterns.slice(0, 10).forEach((issue) => {
862
936
  console.log(
@@ -879,22 +953,22 @@ async function scanAction(directory, options) {
879
953
  if (results.patternDetect) {
880
954
  results.patternDetect.results.forEach((p) => {
881
955
  p.issues.forEach((i) => {
882
- if (i.severity === "critical") criticalCount++;
883
- if (i.severity === "major") majorCount++;
956
+ if (i.severity === Severity.Critical) criticalCount++;
957
+ if (i.severity === Severity.Major) majorCount++;
884
958
  });
885
959
  });
886
960
  }
887
961
  if (results.contextAnalyzer) {
888
962
  results.contextAnalyzer.results.forEach((c) => {
889
- if (c.severity === "critical") criticalCount++;
890
- if (c.severity === "major") majorCount++;
963
+ if (c.severity === Severity.Critical) criticalCount++;
964
+ if (c.severity === Severity.Major) majorCount++;
891
965
  });
892
966
  }
893
967
  if (results.consistency) {
894
968
  results.consistency.results.forEach((r) => {
895
969
  r.issues?.forEach((i) => {
896
- if (i.severity === "critical") criticalCount++;
897
- if (i.severity === "major") majorCount++;
970
+ if (i.severity === Severity.Critical) criticalCount++;
971
+ if (i.severity === Severity.Major) majorCount++;
898
972
  });
899
973
  });
900
974
  }
package/dist/index.js CHANGED
@@ -143,10 +143,11 @@ async function analyzeUnified(options) {
143
143
  options.progressCallback({ tool: "doc-drift", data: report });
144
144
  }
145
145
  result.docDrift = {
146
- results: report.results || [],
146
+ results: report.results || report.issues || [],
147
147
  summary: report.summary || {}
148
148
  };
149
- result.summary.totalIssues += report.issues?.length || 0;
149
+ const issueCount = report.issues?.length || (report.results ? report.results.length : 0);
150
+ result.summary.totalIssues += issueCount;
150
151
  }
151
152
  if (tools.includes("deps-health")) {
152
153
  const { analyzeDeps } = await import("@aiready/deps");
@@ -160,10 +161,11 @@ async function analyzeUnified(options) {
160
161
  options.progressCallback({ tool: "deps-health", data: report });
161
162
  }
162
163
  result.dependencyHealth = {
163
- results: report.results || [],
164
+ results: report.results || report.issues || [],
164
165
  summary: report.summary || {}
165
166
  };
166
- result.summary.totalIssues += report.issues?.length || 0;
167
+ const issueCount = report.issues?.length || (report.results ? report.results.length : 0);
168
+ result.summary.totalIssues += issueCount;
167
169
  }
168
170
  if (tools.includes("ai-signal-clarity")) {
169
171
  const { analyzeAiSignalClarity } = await import("@aiready/ai-signal-clarity");
@@ -178,11 +180,11 @@ async function analyzeUnified(options) {
178
180
  }
179
181
  result.aiSignalClarity = {
180
182
  ...report,
181
- results: report.results || [],
183
+ results: report.results || report.issues || [],
182
184
  summary: report.summary || {}
183
185
  };
184
- result.summary.totalIssues += report.results?.reduce(
185
- (sum, r) => sum + (r.issues?.length || 0),
186
+ result.summary.totalIssues += (report.results || report.issues)?.reduce(
187
+ (sum, r) => sum + (r.issues?.length || 1),
186
188
  0
187
189
  ) || 0;
188
190
  }
@@ -199,10 +201,10 @@ async function analyzeUnified(options) {
199
201
  }
200
202
  result.agentGrounding = {
201
203
  ...report,
202
- results: report.results || [],
204
+ results: report.results || report.issues || [],
203
205
  summary: report.summary || {}
204
206
  };
205
- result.summary.totalIssues += report.issues?.length || 0;
207
+ result.summary.totalIssues += (report.issues || report.results || []).length;
206
208
  }
207
209
  if (tools.includes("testability")) {
208
210
  const { analyzeTestability } = await import("@aiready/testability");
@@ -217,10 +219,10 @@ async function analyzeUnified(options) {
217
219
  }
218
220
  result.testability = {
219
221
  ...report,
220
- results: report.results || [],
222
+ results: report.results || report.issues || [],
221
223
  summary: report.summary || {}
222
224
  };
223
- result.summary.totalIssues += report.issues?.length || 0;
225
+ result.summary.totalIssues += (report.issues || report.results || []).length;
224
226
  }
225
227
  if (tools.includes("change-amplification")) {
226
228
  const { analyzeChangeAmplification } = await import("@aiready/change-amplification");
package/dist/index.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  analyzeUnified,
3
3
  generateUnifiedSummary,
4
4
  scoreUnified
5
- } from "./chunk-VUCNUYI7.mjs";
5
+ } from "./chunk-R3O7QPKD.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.10.2",
3
+ "version": "0.10.4",
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/context-analyzer": "0.17.2",
15
- "@aiready/agent-grounding": "0.9.2",
16
- "@aiready/core": "0.19.2",
17
- "@aiready/deps": "0.9.2",
18
- "@aiready/doc-drift": "0.9.2",
19
- "@aiready/consistency": "0.16.2",
20
- "@aiready/change-amplification": "0.9.2",
21
- "@aiready/testability": "0.2.2",
22
- "@aiready/ai-signal-clarity": "0.9.2",
23
- "@aiready/pattern-detect": "0.12.2",
24
- "@aiready/visualizer": "0.2.2"
14
+ "@aiready/core": "0.19.3",
15
+ "@aiready/agent-grounding": "0.9.3",
16
+ "@aiready/consistency": "0.16.3",
17
+ "@aiready/change-amplification": "0.9.3",
18
+ "@aiready/context-analyzer": "0.17.3",
19
+ "@aiready/deps": "0.9.3",
20
+ "@aiready/visualizer": "0.2.4",
21
+ "@aiready/pattern-detect": "0.12.3",
22
+ "@aiready/ai-signal-clarity": "0.9.3",
23
+ "@aiready/testability": "0.2.3",
24
+ "@aiready/doc-drift": "0.9.3"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^24.0.0",