fallow 3.9.1 → 3.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -24,7 +24,7 @@
24
24
 
25
25
 
26
26
  /**
27
- * Schemas for the JSON output of fallow commands. Object-shaped envelopes covered by the `FallowOutput` contract carry a top-level `kind` discriminator. Current kind values: `audit`, `explain`, `inspect_target`, `trace`, `review-envelope`, `review-reconcile`, `coverage-setup`, `coverage-analyze`, `list-boundaries`, `list-workspaces`, `health`, `dupes`, `dead-code-grouped`, `impact`, `impact-cross-repo`, `security`, `security-survivors`, `security-blind-spots`, `dead-code`, `combined`, `feature-flags`, `audit-brief`, `decision-surface`, `review-walkthrough-guide`, `review-walkthrough-validation`, `suppression-inventory`. Consumers should branch on `kind` instead of probing for unique field presence. `CodeClimateOutput` is a bare JSON array (per the Code Climate / GitLab Code Quality spec) and stays a sibling root branch discriminated by checking whether the document root is an array. `ErrorOutput` is the `--format json` failure document, emitted on stdout with a non-zero exit; it carries no `kind` and is discriminated by the `error: true` field.
27
+ * Schemas for the JSON output of fallow commands. Object-shaped envelopes covered by the `FallowOutput` contract carry a top-level `kind` discriminator. Current kind values: `audit`, `explain`, `inspect_target`, `trace`, `review-envelope`, `review-reconcile`, `coverage-setup`, `coverage-analyze`, `list-boundaries`, `list-workspaces`, `health`, `dupes`, `dead-code-grouped`, `impact`, `impact-cross-repo`, `security`, `security-survivors`, `security-blind-spots`, `dead-code`, `combined`, `feature-flags`, `audit-brief`, `decision-surface`, `review-walkthrough-guide`, `review-walkthrough-validation`, `suppression-inventory`, `type-aware-status`. Consumers should branch on `kind` instead of probing for unique field presence. `CodeClimateOutput` is a bare JSON array (per the Code Climate / GitLab Code Quality spec) and stays a sibling root branch discriminated by checking whether the document root is an array. `ErrorOutput` is the `--format json` failure document, emitted on stdout with a non-zero exit; it carries no `kind` and is discriminated by the `error: true` field.
28
28
  */
29
29
  export type FallowJsonOutput = (FallowOutput | CodeClimateOutput | ErrorOutput)
30
30
  /**
@@ -50,7 +50,7 @@ kind: "audit"
50
50
  kind: "explain"
51
51
  }) | (InspectOutput & {
52
52
  kind: "inspect_target"
53
- }) | (SymbolChainTrace & {
53
+ }) | ((ExportTrace | ClassMemberTrace | FileTrace | DependencyTrace | CloneTrace | ImpactClosureTrace | SymbolChainTrace | SemanticSymbolTrace) & {
54
54
  kind: "trace"
55
55
  }) | (ReviewEnvelopeOutput & {
56
56
  kind: "review-envelope"
@@ -70,7 +70,7 @@ kind: "health"
70
70
  kind: "dupes"
71
71
  }) | (CheckGroupedOutput & {
72
72
  kind: "dead-code-grouped"
73
- }) | (ImpactReport & {
73
+ }) | ((ImpactReport | SemanticSymbolImpact) & {
74
74
  kind: "impact"
75
75
  }) | (CrossRepoImpactReport & {
76
76
  kind: "impact-cross-repo"
@@ -96,6 +96,8 @@ kind: "review-walkthrough-guide"
96
96
  kind: "review-walkthrough-validation"
97
97
  }) | (SuppressionInventoryOutput & {
98
98
  kind: "suppression-inventory"
99
+ }) | (TypeAwareStatusOutput & {
100
+ kind: "type-aware-status"
99
101
  }))
100
102
  /**
101
103
  * Schema version for this output format (independent of tool version). Bump
@@ -138,6 +140,62 @@ export type AuditVerdict = ("pass" | "warn" | "fail")
138
140
  */
139
141
  export type ElapsedMs = number
140
142
  export type AuditGate = ("new-only" | "all")
143
+ /**
144
+ * Analysis mode stored with baselines, snapshots, audit sides, and impact data.
145
+ */
146
+ export type SemanticAnalysisMode = ("syntactic" | "type-aware")
147
+ /**
148
+ * Semantic capabilities that can share one TypeScript Program session.
149
+ */
150
+ export type SemanticCapability = ("symbol-use" | "symbol-trace" | "api-surface" | "symbol-impact" | "type-coupling")
151
+ /**
152
+ * Whether the semantic backend answered every requested query safely.
153
+ */
154
+ export type SemanticCompleteness = ("complete" | "partial" | "unavailable")
155
+ /**
156
+ * Effective policy applied when semantic evidence is incomplete.
157
+ */
158
+ export type SemanticCompletenessRequirement = ("best-effort" | "complete")
159
+ /**
160
+ * Stable reason why semantic evidence is partial or unavailable.
161
+ */
162
+ export type SemanticGapReason = ("no-project" | "ambiguous-project" | "blocking-diagnostics" | "unknown-symbol" | "unknown-entry-point" | "evidence-limit" | "dynamic-behavior" | "virtual-dispatch" | "dynamic-member-access" | "decorated-declaration" | "optional-contract" | "accessor-pair" | "overload-set" | "attached-comment" | "abstract-declaration" | "incomplete-project-coverage" | "framework-contract-provenance" | "capacity" | "unsupported-syntax")
163
+ /**
164
+ * Value or type namespace for one exact declaration or reference.
165
+ */
166
+ export type SemanticNamespace = ("value" | "type")
167
+ /**
168
+ * Conservative outcome for one existing Fallow dead-code candidate.
169
+ */
170
+ export type SemanticCandidateDecisionKind = ("confirmed-used" | "contract-preserved" | "confirmed-no-static-references" | "retained-abstained" | "retained-unresolved")
171
+ /**
172
+ * How a class member participates in an inherited or implemented relation.
173
+ */
174
+ export type SemanticContractRelation = ("interface-implementation" | "abstract-implementation" | "override" | "optional-contract")
175
+ /**
176
+ * Heritage relation used by a framework-owned class-member contract.
177
+ */
178
+ export type SemanticFrameworkRelation = ("extends" | "implements")
179
+ /**
180
+ * Confidence of exact-symbol impact analysis after known dynamic gaps.
181
+ */
182
+ export type SemanticImpactConfidence = ("high" | "bounded" | "unavailable")
183
+ /**
184
+ * How a TypeScript project was selected for semantic refinement.
185
+ */
186
+ export type TypeAwareProjectSource = ("auto" | "explicit")
187
+ /**
188
+ * Outcome of semantic refinement for one TypeScript project.
189
+ */
190
+ export type TypeAwareProjectStatus = ("refined" | "abstained" | "complete" | "unavailable")
191
+ /**
192
+ * How a persistent semantic snapshot was refreshed.
193
+ */
194
+ export type TypeAwareInvalidationKind = ("full" | "incremental" | "none")
195
+ /**
196
+ * Closed set of reasons for retaining a candidate without semantic scanning.
197
+ */
198
+ export type TypeAwareAbstentionReason = ("no-project" | "ambiguous-project" | "blocking-diagnostics")
141
199
  /**
142
200
  * A suggested action attached to a finding in the JSON output. Each finding
143
201
  * carries an `actions` array; consumers (agents, IDE clients, CI bots) can
@@ -651,7 +709,7 @@ export_name: string
651
709
  type: "symbol"
652
710
  })
653
711
  export type InspectIdentity = (InspectFileIdentity | InspectSymbolIdentity)
654
- export type InspectSectionStatus = ("ok" | "unavailable" | "error")
712
+ export type InspectSectionStatus = ("ok" | "partial" | "unavailable" | "error")
655
713
  export type InspectEvidenceScope = ("symbol" | "file" | "project_filtered_to_file")
656
714
  /**
657
715
  * Best-effort classification of why a callee did not resolve to an edge.
@@ -935,78 +993,906 @@ dead_code?: (CheckOutput | null)
935
993
  duplication?: (DupesReportPayload | null)
936
994
  complexity?: (HealthReport | null)
937
995
  /**
938
- * Read-only follow-up commands computed from this run's findings. See
939
- * `CheckOutput::next_steps` for the contract.
996
+ * Read-only follow-up commands computed from this run's findings. See
997
+ * `CheckOutput::next_steps` for the contract.
998
+ */
999
+ next_steps?: NextStep[]
1000
+ }
1001
+ /**
1002
+ * Per-category summary counts for the audit result.
1003
+ */
1004
+ export interface AuditSummary {
1005
+ dead_code_issues: number
1006
+ dead_code_has_errors: boolean
1007
+ complexity_findings: number
1008
+ max_cyclomatic?: (number | null)
1009
+ duplication_clone_groups: number
1010
+ }
1011
+ /**
1012
+ * New-vs-inherited issue counts for audit.
1013
+ */
1014
+ export interface AuditAttribution {
1015
+ gate: AuditGate
1016
+ dead_code_introduced: number
1017
+ dead_code_inherited: number
1018
+ complexity_introduced: number
1019
+ complexity_inherited: number
1020
+ duplication_introduced: number
1021
+ duplication_inherited: number
1022
+ styling_introduced: number
1023
+ styling_inherited: number
1024
+ }
1025
+ /**
1026
+ * Metric and rule definitions emitted under `_meta` when `--explain` is
1027
+ * passed (always present in MCP responses). Helps AI agents and CI systems
1028
+ * interpret metric values without re-reading the docs site.
1029
+ */
1030
+ export interface Meta {
1031
+ /**
1032
+ * URL to the documentation page for this command.
1033
+ */
1034
+ docs?: (string | null)
1035
+ /**
1036
+ * Local telemetry correlation metadata for agent follow-up runs.
1037
+ */
1038
+ telemetry?: (TelemetryMeta | null)
1039
+ /**
1040
+ * Provenance for the opt-in TypeScript semantic analysis pass.
1041
+ */
1042
+ type_aware?: (TypeAwareMeta | null)
1043
+ /**
1044
+ * Per-field definitions for envelope fields and action payload fields.
1045
+ */
1046
+ field_definitions?: {
1047
+ [k: string]: string
1048
+ }
1049
+ /**
1050
+ * Per-metric definitions: name, description, range, interpretation.
1051
+ */
1052
+ metrics?: {
1053
+ [k: string]: MetaMetric
1054
+ }
1055
+ /**
1056
+ * Per-rule definitions for check command output.
1057
+ */
1058
+ rules?: {
1059
+ [k: string]: MetaRule
1060
+ }
1061
+ }
1062
+ /**
1063
+ * Privacy-safe local run metadata emitted for JSON consumers.
1064
+ */
1065
+ export interface TelemetryMeta {
1066
+ /**
1067
+ * Ephemeral local token that may be passed to the hidden `--parent-run`
1068
+ * flag on a later command. It is not derived from repository, path, user,
1069
+ * machine, project, or cloud data.
1070
+ */
1071
+ analysis_run_id?: (string | null)
1072
+ }
1073
+ /**
1074
+ * Bounded provenance emitted when the opt-in type-aware pass runs.
1075
+ */
1076
+ export interface TypeAwareMeta {
1077
+ /**
1078
+ * Compatibility identity used by audit, baselines, snapshots, and stores.
1079
+ */
1080
+ identity?: (SemanticAnalysisIdentity | null)
1081
+ /**
1082
+ * Effective CLI or repository policy for incomplete semantic evidence.
1083
+ */
1084
+ required_completeness?: (SemanticCompletenessRequirement | null)
1085
+ /**
1086
+ * Compact status for every requested semantic query.
1087
+ */
1088
+ queries?: SemanticQuerySummary[]
1089
+ /**
1090
+ * Bounded decision and evidence for each semantic dead-code candidate.
1091
+ */
1092
+ candidate_decisions?: SemanticCandidateDecision[]
1093
+ /**
1094
+ * Checker-backed trace evidence requested by focused symbol queries.
1095
+ */
1096
+ symbol_traces?: SemanticSymbolTrace[]
1097
+ /**
1098
+ * Package-public surface and confirmed private type leaks.
1099
+ */
1100
+ api_surface?: (ApiSurfaceResult | null)
1101
+ /**
1102
+ * Exact-symbol blast radius and targeted-test recommendations.
1103
+ */
1104
+ symbol_impacts?: SemanticSymbolImpact[]
1105
+ /**
1106
+ * Advisory project-local public-signature coupling.
1107
+ */
1108
+ type_coupling?: (TypeCouplingReport | null)
1109
+ /**
1110
+ * Whether the semantic companion executed at least one query.
1111
+ */
1112
+ executed: boolean
1113
+ /**
1114
+ * Version of Fallow's backend-neutral sidecar protocol.
1115
+ */
1116
+ protocol_version: number
1117
+ /**
1118
+ * Version of the sidecar package that executed the query.
1119
+ */
1120
+ sidecar_version?: (string | null)
1121
+ /**
1122
+ * Semantic backend capability identifier.
1123
+ */
1124
+ backend: string
1125
+ /**
1126
+ * Backend compiler or engine version that executed the query.
1127
+ */
1128
+ backend_version?: (string | null)
1129
+ /**
1130
+ * TypeScript project configs selected for candidate files.
1131
+ */
1132
+ selected_tsconfigs: string[]
1133
+ /**
1134
+ * Number of candidate findings sent to the sidecar.
1135
+ */
1136
+ candidate_count: number
1137
+ /**
1138
+ * Number of candidates confirmed as used and removed.
1139
+ */
1140
+ confirmed_used_count: number
1141
+ /**
1142
+ * Number of candidates preserved because they implement or override a contract.
1143
+ */
1144
+ contract_preserved_count: number
1145
+ /**
1146
+ * Number of candidates with complete, closed-world no-static-reference evidence.
1147
+ */
1148
+ no_static_references_count: number
1149
+ /**
1150
+ * Number of retained class members eligible for a guarded type-aware fix.
1151
+ */
1152
+ fix_eligible_count: number
1153
+ /**
1154
+ * Number of candidates retained because semantic use was unresolved.
1155
+ */
1156
+ unresolved_count: number
1157
+ /**
1158
+ * Number of candidates retained because semantic analysis abstained.
1159
+ */
1160
+ abstained_count: number
1161
+ abstention_reasons: TypeAwareAbstentionCounts
1162
+ /**
1163
+ * Per-project semantic refinement status and evidence.
1164
+ */
1165
+ projects: TypeAwareProjectMeta[]
1166
+ /**
1167
+ * Number of bounded warnings returned by the sidecar.
1168
+ */
1169
+ warning_count: number
1170
+ /**
1171
+ * Bounded semantic warnings. Findings mentioned here were retained.
1172
+ */
1173
+ warnings: string[]
1174
+ /**
1175
+ * Semantic pass duration as reported by the sidecar.
1176
+ */
1177
+ elapsed_ms: number
1178
+ phase_timings_ms: TypeAwarePhaseTimings
1179
+ }
1180
+ /**
1181
+ * Compatibility identity for comparing two analysis results.
1182
+ */
1183
+ export interface SemanticAnalysisIdentity {
1184
+ mode: SemanticAnalysisMode
1185
+ /**
1186
+ * Version of the semantic result schema, independent of tool versions.
1187
+ */
1188
+ semantic_schema_version: number
1189
+ /**
1190
+ * Sorted capability set requested for the analysis.
1191
+ */
1192
+ capabilities: SemanticCapability[]
1193
+ /**
1194
+ * Hash of normalized project ownership and compiler configuration.
1195
+ */
1196
+ project_config_hash: string
1197
+ /**
1198
+ * Backend family, such as `typescript-go`.
1199
+ */
1200
+ backend_family: string
1201
+ completeness: SemanticCompleteness
1202
+ }
1203
+ /**
1204
+ * Compact per-query status embedded in run metadata.
1205
+ */
1206
+ export interface SemanticQuerySummary {
1207
+ /**
1208
+ * Stable query identifier within this analysis run.
1209
+ */
1210
+ query_id: number
1211
+ capability: SemanticCapability
1212
+ /**
1213
+ * Operation-specific assertion, never a generic compiler verdict.
1214
+ */
1215
+ assertion: string
1216
+ status: SemanticCompleteness
1217
+ /**
1218
+ * Stable primary gap reason when partial or unavailable.
1219
+ */
1220
+ reason_code?: (SemanticGapReason | null)
1221
+ /**
1222
+ * Evidence count before bounding.
1223
+ */
1224
+ total_evidence_count: number
1225
+ /**
1226
+ * Whether evidence or payload arrays were truncated.
1227
+ */
1228
+ truncated: boolean
1229
+ /**
1230
+ * Counted omissions.
1231
+ */
1232
+ omissions?: SemanticOmission[]
1233
+ /**
1234
+ * Plain next actions.
1235
+ */
1236
+ actions?: string[]
1237
+ }
1238
+ /**
1239
+ * Counted omission attached to a partial or unavailable result.
1240
+ */
1241
+ export interface SemanticOmission {
1242
+ reason_code: SemanticGapReason
1243
+ /**
1244
+ * Number of omitted items or relations.
1245
+ */
1246
+ count: number
1247
+ }
1248
+ /**
1249
+ * Bounded, inspectable decision record for one semantic dead-code candidate.
1250
+ */
1251
+ export interface SemanticCandidateDecision {
1252
+ /**
1253
+ * Query identifier used to correlate low-level query metadata.
1254
+ */
1255
+ query_id: number
1256
+ subject: SemanticSymbol
1257
+ decision: SemanticCandidateDecisionKind
1258
+ status: SemanticCompleteness
1259
+ /**
1260
+ * Every selected TypeScript project that owns the declaration.
1261
+ */
1262
+ owning_projects: string[]
1263
+ /**
1264
+ * Bounded checker-resolved reference or uncertainty evidence.
1265
+ */
1266
+ evidence?: SemanticReference[]
1267
+ /**
1268
+ * Inherited contract evidence, when present.
1269
+ */
1270
+ contract?: (SemanticContractEvidence | null)
1271
+ /**
1272
+ * Framework-owned contract evidence, distinct from TypeScript contracts.
1273
+ */
1274
+ framework_contract?: (SemanticFrameworkContractEvidence | null)
1275
+ /**
1276
+ * Whether this exact decision may enable a guarded class-member fix.
1277
+ */
1278
+ closed_world_eligible: boolean
1279
+ /**
1280
+ * Exact declaration guard required before a source edit.
1281
+ */
1282
+ edit_guard?: (SemanticEditGuard | null)
1283
+ /**
1284
+ * Primary reason when the candidate remains unresolved or abstained.
1285
+ */
1286
+ reason_code?: (SemanticGapReason | null)
1287
+ /**
1288
+ * Concise explanation suitable for dry-run and agent output.
1289
+ */
1290
+ explanation: string
1291
+ /**
1292
+ * Plain next actions.
1293
+ */
1294
+ actions?: string[]
1295
+ /**
1296
+ * Evidence count before bounding.
1297
+ */
1298
+ total_evidence_count: number
1299
+ /**
1300
+ * Whether evidence was truncated.
1301
+ */
1302
+ truncated: boolean
1303
+ /**
1304
+ * Counted omissions.
1305
+ */
1306
+ omissions?: SemanticOmission[]
1307
+ }
1308
+ /**
1309
+ * Stable identity for a declaration sent to or returned by the backend.
1310
+ */
1311
+ export interface SemanticSymbol {
1312
+ /**
1313
+ * Project-root-relative declaration path.
1314
+ */
1315
+ path: string
1316
+ namespace: SemanticNamespace
1317
+ /**
1318
+ * Stable declaration kind, such as `function` or `class-method`.
1319
+ */
1320
+ declaration_kind: string
1321
+ /**
1322
+ * Name exposed to consumers.
1323
+ */
1324
+ exported_name: string
1325
+ /**
1326
+ * Local declaration name.
1327
+ */
1328
+ local_name: string
1329
+ /**
1330
+ * Optional owning class or namespace.
1331
+ */
1332
+ owner?: (string | null)
1333
+ /**
1334
+ * One-based declaration line.
1335
+ */
1336
+ line: number
1337
+ /**
1338
+ * Zero-based UTF-8 byte column.
1339
+ */
1340
+ col: number
1341
+ }
1342
+ /**
1343
+ * Located semantic reference evidence.
1344
+ */
1345
+ export interface SemanticReference {
1346
+ /**
1347
+ * Project-root-relative reference path.
1348
+ */
1349
+ path: string
1350
+ /**
1351
+ * One-based source line.
1352
+ */
1353
+ line: number
1354
+ /**
1355
+ * Zero-based UTF-8 byte column.
1356
+ */
1357
+ col: number
1358
+ /**
1359
+ * Reference role, such as `read`, `type`, `alias`, or `re-export`.
1360
+ */
1361
+ role: string
1362
+ namespace: SemanticNamespace
1363
+ /**
1364
+ * Alias and re-export hops between the reference and declaration.
1365
+ */
1366
+ via?: SemanticAliasHop[]
1367
+ }
1368
+ /**
1369
+ * One alias or re-export hop in semantic provenance.
1370
+ */
1371
+ export interface SemanticAliasHop {
1372
+ /**
1373
+ * Project-root-relative hop path.
1374
+ */
1375
+ path: string
1376
+ /**
1377
+ * Name before this hop.
1378
+ */
1379
+ from_name: string
1380
+ /**
1381
+ * Name exposed after this hop.
1382
+ */
1383
+ to_name: string
1384
+ /**
1385
+ * Relation, such as `import-alias` or `re-export`.
1386
+ */
1387
+ relation: string
1388
+ }
1389
+ /**
1390
+ * Exact declaration evidence for an inherited or implemented class-member relation.
1391
+ */
1392
+ export interface SemanticContractEvidence {
1393
+ relation: SemanticContractRelation
1394
+ declaration: SemanticSymbol
1395
+ /**
1396
+ * Whether the source contract marks this member optional.
1397
+ */
1398
+ optional: boolean
1399
+ }
1400
+ /**
1401
+ * Checker-validated evidence that a framework contract preserves a member.
1402
+ */
1403
+ export interface SemanticFrameworkContractEvidence {
1404
+ /**
1405
+ * Fallow plugin that supplied the contract.
1406
+ */
1407
+ framework: string
1408
+ /**
1409
+ * Exact package that owns the heritage declaration.
1410
+ */
1411
+ package: string
1412
+ relation: SemanticFrameworkRelation
1413
+ declaration: SemanticSymbol
1414
+ }
1415
+ /**
1416
+ * Exact source span and content hash used to guard semantic source edits.
1417
+ */
1418
+ export interface SemanticEditGuard {
1419
+ /**
1420
+ * Zero-based UTF-8 byte offset where the declaration starts.
1421
+ */
1422
+ start: number
1423
+ /**
1424
+ * Exclusive zero-based UTF-8 byte offset where the declaration ends.
1425
+ */
1426
+ end: number
1427
+ /**
1428
+ * Lowercase SHA-256 digest of the exact declaration text.
1429
+ */
1430
+ declaration_sha256: string
1431
+ }
1432
+ /**
1433
+ * Typed semantic trace attached to an existing syntactic trace.
1434
+ */
1435
+ export interface SemanticSymbolTrace {
1436
+ target: SemanticSymbol
1437
+ identity: SemanticAnalysisIdentity
1438
+ /**
1439
+ * TypeScript project selected for this symbol.
1440
+ */
1441
+ selected_project: string
1442
+ /**
1443
+ * Concrete assertion, such as `references-found`.
1444
+ */
1445
+ assertion: string
1446
+ status: SemanticCompleteness
1447
+ /**
1448
+ * Bounded reference evidence.
1449
+ */
1450
+ references: SemanticReference[]
1451
+ /**
1452
+ * Count before evidence bounding.
1453
+ */
1454
+ total_reference_count: number
1455
+ /**
1456
+ * Exact reference locations found by the TypeScript checker.
1457
+ */
1458
+ checker_evidence_count: number
1459
+ /**
1460
+ * Alias and re-export hops derived from the semantic graph.
1461
+ */
1462
+ graph_evidence_count: number
1463
+ /**
1464
+ * Whether reference evidence was truncated.
1465
+ */
1466
+ truncated: boolean
1467
+ /**
1468
+ * Counted omissions.
1469
+ */
1470
+ omissions?: SemanticOmission[]
1471
+ /**
1472
+ * Plain next actions for a user or automation consumer.
1473
+ */
1474
+ actions?: string[]
1475
+ }
1476
+ /**
1477
+ * Package API surface result shared by inspect and private-leak analysis.
1478
+ */
1479
+ export interface ApiSurfaceResult {
1480
+ /**
1481
+ * Concrete assertion, such as `leak-confirmed`.
1482
+ */
1483
+ assertion: string
1484
+ status: SemanticCompleteness
1485
+ /**
1486
+ * Public API entries.
1487
+ */
1488
+ entries: ApiSurfaceEntry[]
1489
+ /**
1490
+ * Confirmed private type leaks.
1491
+ */
1492
+ private_type_leaks: SemanticPrivateTypeLeak[]
1493
+ /**
1494
+ * Counted omissions.
1495
+ */
1496
+ omissions?: SemanticOmission[]
1497
+ /**
1498
+ * Plain next actions.
1499
+ */
1500
+ actions?: string[]
1501
+ }
1502
+ /**
1503
+ * One package-public API entry described by the semantic backend.
1504
+ */
1505
+ export interface ApiSurfaceEntry {
1506
+ exposed: SemanticSymbol
1507
+ origin: SemanticSymbol
1508
+ /**
1509
+ * Stable normalized signature fingerprint.
1510
+ */
1511
+ signature_fingerprint: string
1512
+ /**
1513
+ * Project-local types referenced by the signature.
1514
+ */
1515
+ referenced_types: PublicTypeReference[]
1516
+ }
1517
+ /**
1518
+ * One project-local type referenced by a public signature.
1519
+ */
1520
+ export interface PublicTypeReference {
1521
+ declaration: SemanticSymbol
1522
+ /**
1523
+ * Signature relation, such as return type or generic constraint.
1524
+ */
1525
+ relation: string
1526
+ }
1527
+ /**
1528
+ * Exact semantic evidence for a private type leak.
1529
+ */
1530
+ export interface SemanticPrivateTypeLeak {
1531
+ exposed: SemanticSymbol
1532
+ private_declaration: SemanticSymbol
1533
+ /**
1534
+ * Signature relation through which the type is exposed.
1535
+ */
1536
+ relation: string
1537
+ /**
1538
+ * Stable TypeScript diagnostic code used as supporting evidence.
1539
+ */
1540
+ diagnostic_code?: (number | null)
1541
+ }
1542
+ /**
1543
+ * Exact-symbol impact and targeted-test recommendation.
1544
+ */
1545
+ export interface SemanticSymbolImpact {
1546
+ target: SemanticSymbol
1547
+ identity: SemanticAnalysisIdentity
1548
+ /**
1549
+ * TypeScript project selected for this symbol.
1550
+ */
1551
+ selected_project: string
1552
+ /**
1553
+ * Concrete assertion, such as `consumers-found`.
1554
+ */
1555
+ assertion: string
1556
+ status: SemanticCompleteness
1557
+ /**
1558
+ * Files that reference the exact symbol directly.
1559
+ */
1560
+ direct_consumers: SemanticImpactPath[]
1561
+ /**
1562
+ * Direct consumer count before evidence bounding.
1563
+ */
1564
+ total_direct_consumer_count: number
1565
+ /**
1566
+ * Transitively affected production files.
1567
+ */
1568
+ affected_files: SemanticImpactPath[]
1569
+ /**
1570
+ * Transitive affected-file count before evidence bounding.
1571
+ */
1572
+ total_affected_file_count: number
1573
+ /**
1574
+ * Directly relevant test entry points.
1575
+ */
1576
+ targeted_tests: SemanticImpactPath[]
1577
+ /**
1578
+ * Targeted-test count before evidence bounding.
1579
+ */
1580
+ total_targeted_test_count: number
1581
+ confidence: SemanticImpactConfidence
1582
+ /**
1583
+ * Counted omissions, including dynamic behavior.
1584
+ */
1585
+ omissions?: SemanticOmission[]
1586
+ /**
1587
+ * Plain next actions.
1588
+ */
1589
+ actions?: string[]
1590
+ }
1591
+ /**
1592
+ * One production file or test reached by exact-symbol impact analysis.
1593
+ */
1594
+ export interface SemanticImpactPath {
1595
+ /**
1596
+ * Project-root-relative affected path.
1597
+ */
1598
+ path: string
1599
+ /**
1600
+ * Relation to the target, such as `direct-value-consumer`.
1601
+ */
1602
+ relation: string
1603
+ /**
1604
+ * Shortest graph distance from the target.
1605
+ */
1606
+ distance: number
1607
+ /**
1608
+ * Located provenance path.
1609
+ */
1610
+ via?: string[]
1611
+ }
1612
+ /**
1613
+ * Advisory project-local public-signature coupling report.
1614
+ */
1615
+ export interface TypeCouplingReport {
1616
+ identity: SemanticAnalysisIdentity
1617
+ /**
1618
+ * Concrete assertion, such as `coupling-found`.
1619
+ */
1620
+ assertion: string
1621
+ status: SemanticCompleteness
1622
+ /**
1623
+ * Project summary. Absent when analysis is unavailable, never a fake zero.
1624
+ */
1625
+ summary?: (TypeCouplingSummary | null)
1626
+ /**
1627
+ * Per-file coupling details.
1628
+ */
1629
+ files: TypeCouplingFile[]
1630
+ /**
1631
+ * Highest-degree files contributing to project coupling.
1632
+ */
1633
+ top_contributors?: TypeCouplingFile[]
1634
+ /**
1635
+ * Located project-local type cycles.
1636
+ */
1637
+ cycles?: TypeCouplingCycle[]
1638
+ /**
1639
+ * Counted omissions.
1640
+ */
1641
+ omissions?: SemanticOmission[]
1642
+ /**
1643
+ * Plain next actions.
1644
+ */
1645
+ actions?: string[]
1646
+ }
1647
+ /**
1648
+ * Project summary for advisory type coupling.
1649
+ */
1650
+ export interface TypeCouplingSummary {
1651
+ /**
1652
+ * Measurement boundary, currently project-local public signatures.
1653
+ */
1654
+ scope: string
1655
+ /**
1656
+ * Edge direction, currently directed.
1657
+ */
1658
+ direction: string
1659
+ /**
1660
+ * Distinct project files in the selected TypeScript projects.
1661
+ */
1662
+ project_size: number
1663
+ /**
1664
+ * Distinct project files included in the denominator.
1665
+ */
1666
+ files_analyzed: number
1667
+ /**
1668
+ * Files participating in at least one project-local type edge.
1669
+ */
1670
+ distinct_coupled_files: number
1671
+ /**
1672
+ * Project-local public-signature edge count before evidence bounding.
1673
+ */
1674
+ edge_count: number
1675
+ /**
1676
+ * Percentage of analyzed files participating in a type edge.
1677
+ */
1678
+ coupled_file_pct: number
1679
+ /**
1680
+ * Median distinct-file type connections.
1681
+ */
1682
+ p50_distinct_connections: number
1683
+ /**
1684
+ * P90 distinct-file type connections.
1685
+ */
1686
+ p90_distinct_connections: number
1687
+ /**
1688
+ * P95 incoming distinct-file type coupling.
1689
+ */
1690
+ p95_public_types_used_by: number
1691
+ /**
1692
+ * P95 outgoing distinct-file type coupling.
1693
+ */
1694
+ p95_public_api_depends_on: number
1695
+ /**
1696
+ * Percentage of files above the adaptive high-coupling threshold.
1697
+ */
1698
+ high_coupling_pct: number
1699
+ /**
1700
+ * Share of edge endpoints represented by the top contributors.
1701
+ */
1702
+ concentration: number
1703
+ /**
1704
+ * Number of project-local public-signature cycles.
1705
+ */
1706
+ cycle_count: number
1707
+ }
1708
+ /**
1709
+ * Per-file project-local public-signature coupling.
1710
+ */
1711
+ export interface TypeCouplingFile {
1712
+ /**
1713
+ * Project-root-relative file path.
1714
+ */
1715
+ path: string
1716
+ /**
1717
+ * Distinct files this file's public API depends on.
1718
+ */
1719
+ public_api_depends_on: number
1720
+ /**
1721
+ * Located project files this file's public API depends on.
1722
+ */
1723
+ public_api_depends_on_files?: string[]
1724
+ /**
1725
+ * Distinct files whose public types use this file.
1726
+ */
1727
+ public_types_used_by: number
1728
+ /**
1729
+ * Located project files whose public types use this file.
1730
+ */
1731
+ public_types_used_by_files?: string[]
1732
+ /**
1733
+ * Located public-signature edges.
1734
+ */
1735
+ edges: TypeCouplingEdge[]
1736
+ }
1737
+ /**
1738
+ * One project-local public-signature type edge.
1739
+ */
1740
+ export interface TypeCouplingEdge {
1741
+ source: SemanticSymbol
1742
+ target: SemanticSymbol
1743
+ /**
1744
+ * Signature relation.
1745
+ */
1746
+ relation: string
1747
+ evidence: SemanticSourceLocation
1748
+ /**
1749
+ * Scope, such as `module-export` or `package-public`.
1750
+ */
1751
+ scope: string
1752
+ }
1753
+ /**
1754
+ * One project-root-relative source location used as semantic evidence.
1755
+ */
1756
+ export interface SemanticSourceLocation {
1757
+ /**
1758
+ * Project-root-relative source path.
1759
+ */
1760
+ path: string
1761
+ /**
1762
+ * One-based source line.
1763
+ */
1764
+ line: number
1765
+ /**
1766
+ * Zero-based UTF-8 byte column.
1767
+ */
1768
+ col: number
1769
+ }
1770
+ /**
1771
+ * One project-local cycle through public-signature type dependencies.
1772
+ */
1773
+ export interface TypeCouplingCycle {
1774
+ /**
1775
+ * Ordered project-root-relative files, ending at the start file.
1776
+ */
1777
+ files: string[]
1778
+ }
1779
+ /**
1780
+ * Closed abstention reason counts for stable machine consumption.
1781
+ */
1782
+ export interface TypeAwareAbstentionCounts {
1783
+ /**
1784
+ * Candidates not contained by a selected TypeScript project.
1785
+ */
1786
+ no_project: number
1787
+ /**
1788
+ * Candidates contained by more than one explicit TypeScript project.
1789
+ */
1790
+ ambiguous_project: number
1791
+ /**
1792
+ * Candidates retained because structural diagnostics block scanning.
1793
+ */
1794
+ blocking_diagnostics: number
1795
+ /**
1796
+ * Candidates whose exact declaration identity could not be resolved.
1797
+ */
1798
+ unknown_symbol: number
1799
+ /**
1800
+ * Candidates using declaration syntax unsupported by the semantic backend.
1801
+ */
1802
+ unsupported_syntax: number
1803
+ /**
1804
+ * Candidates retained because the bounded semantic request reached capacity.
1805
+ */
1806
+ capacity: number
1807
+ }
1808
+ /**
1809
+ * Bounded provenance for one TypeScript project handled by the sidecar.
1810
+ */
1811
+ export interface TypeAwareProjectMeta {
1812
+ /**
1813
+ * Project config relative to the analysis root, or `<inferred>`.
1814
+ */
1815
+ config: string
1816
+ source: TypeAwareProjectSource
1817
+ status: TypeAwareProjectStatus
1818
+ /**
1819
+ * Candidates assigned to this project.
1820
+ */
1821
+ candidate_count: number
1822
+ /**
1823
+ * Candidates confirmed as used and removed.
1824
+ */
1825
+ confirmed_used_count: number
1826
+ /**
1827
+ * Candidates retained because they implement or override a contract.
1828
+ */
1829
+ contract_preserved_count: number
1830
+ /**
1831
+ * Candidates with complete no-static-reference evidence.
1832
+ */
1833
+ no_static_references_count: number
1834
+ /**
1835
+ * Candidates eligible for a guarded class-member fix.
1836
+ */
1837
+ fix_eligible_count: number
1838
+ /**
1839
+ * Candidates whose exact semantic outcome remained unresolved.
1840
+ */
1841
+ unresolved_count: number
1842
+ /**
1843
+ * Candidates retained without scanning because the project was unsafe.
1844
+ */
1845
+ abstained_count: number
1846
+ /**
1847
+ * Config, program, syntactic, and bind diagnostics that block scanning.
940
1848
  */
941
- next_steps?: NextStep[]
942
- }
1849
+ blocking_diagnostic_count: number
943
1850
  /**
944
- * Per-category summary counts for the audit result.
1851
+ * Source files loaded into this TypeScript program.
945
1852
  */
946
- export interface AuditSummary {
947
- dead_code_issues: number
948
- dead_code_has_errors: boolean
949
- complexity_findings: number
950
- max_cyclomatic?: (number | null)
951
- duplication_clone_groups: number
952
- }
1853
+ source_file_count: number
953
1854
  /**
954
- * New-vs-inherited issue counts for audit.
1855
+ * Whether this Program served more than one semantic query in the batch.
955
1856
  */
956
- export interface AuditAttribution {
957
- gate: AuditGate
958
- dead_code_introduced: number
959
- dead_code_inherited: number
960
- complexity_introduced: number
961
- complexity_inherited: number
962
- duplication_introduced: number
963
- duplication_inherited: number
964
- styling_introduced: number
965
- styling_inherited: number
966
- }
1857
+ program_reused?: (boolean | null)
967
1858
  /**
968
- * Metric and rule definitions emitted under `_meta` when `--explain` is
969
- * passed (always present in MCP responses). Helps AI agents and CI systems
970
- * interpret metric values without re-reading the docs site.
1859
+ * Whether this Program served more than one query in the current batch.
971
1860
  */
972
- export interface Meta {
1861
+ program_shared_across_queries?: (boolean | null)
973
1862
  /**
974
- * URL to the documentation page for this command.
1863
+ * Whether the root-bound semantic session reused the prior snapshot.
975
1864
  */
976
- docs?: (string | null)
1865
+ program_reused_from_previous_snapshot?: (boolean | null)
977
1866
  /**
978
- * Local telemetry correlation metadata for agent follow-up runs.
1867
+ * Monotonic revision within the root-bound semantic session.
979
1868
  */
980
- telemetry?: (TelemetryMeta | null)
1869
+ snapshot_revision?: (number | null)
981
1870
  /**
982
- * Per-field definitions for envelope fields and action payload fields.
1871
+ * Full, incremental, or no invalidation before this query.
983
1872
  */
984
- field_definitions?: {
985
- [k: string]: string
986
- }
1873
+ invalidation_kind?: (TypeAwareInvalidationKind | null)
987
1874
  /**
988
- * Per-metric definitions: name, description, range, interpretation.
1875
+ * Stable project-level gap reason.
989
1876
  */
990
- metrics?: {
991
- [k: string]: MetaMetric
1877
+ reason_code?: (SemanticGapReason | null)
1878
+ abstain_reason?: TypeAwareAbstentionReason
992
1879
  }
993
1880
  /**
994
- * Per-rule definitions for check command output.
1881
+ * Semantic sidecar timings, separated from Fallow's syntactic pipeline.
995
1882
  */
996
- rules?: {
997
- [k: string]: MetaRule
998
- }
999
- }
1883
+ export interface TypeAwarePhaseTimings {
1000
1884
  /**
1001
- * Privacy-safe local run metadata emitted for JSON consumers.
1885
+ * TypeScript API construction and project snapshot selection.
1002
1886
  */
1003
- export interface TelemetryMeta {
1887
+ project_setup: number
1004
1888
  /**
1005
- * Ephemeral local token that may be passed to the hidden `--parent-run`
1006
- * flag on a later command. It is not derived from repository, path, user,
1007
- * machine, project, or cloud data.
1889
+ * TypeScript diagnostics collected before any candidate refinement.
1008
1890
  */
1009
- analysis_run_id?: (string | null)
1891
+ diagnostics: number
1892
+ /**
1893
+ * Batched symbol lookup and exact declaration matching.
1894
+ */
1895
+ symbol_scan: number
1010
1896
  }
1011
1897
  /**
1012
1898
  * Single-metric definition inside [`Meta::metrics`].
@@ -1821,6 +2707,10 @@ is_re_export: boolean
1821
2707
  * forward-compat).
1822
2708
  */
1823
2709
  actions: IssueAction[]
2710
+ /**
2711
+ * Type-aware evidence for this exact candidate when requested.
2712
+ */
2713
+ semantic?: (SemanticCandidateDecision | null)
1824
2714
  /**
1825
2715
  * Set by the audit pass when this finding is introduced relative to
1826
2716
  * the merge-base.
@@ -1867,6 +2757,10 @@ is_re_export: boolean
1867
2757
  * forward-compat).
1868
2758
  */
1869
2759
  actions: IssueAction[]
2760
+ /**
2761
+ * Type-aware evidence for this exact candidate when requested.
2762
+ */
2763
+ semantic?: (SemanticCandidateDecision | null)
1870
2764
  /**
1871
2765
  * Set by the audit pass when this finding is introduced relative to
1872
2766
  * the merge-base.
@@ -1903,6 +2797,11 @@ col: number
1903
2797
  * Byte offset of the type reference.
1904
2798
  */
1905
2799
  span_start: number
2800
+ /**
2801
+ * Exact checker-backed provenance when type-aware analysis confirmed the
2802
+ * package-public leak across files or re-exports.
2803
+ */
2804
+ semantic?: (SemanticPrivateTypeLeak | null)
1906
2805
  /**
1907
2806
  * Suggested next steps. Always emitted (possibly empty for
1908
2807
  * forward-compat).
@@ -2095,6 +2994,10 @@ col: number
2095
2994
  * forward-compat).
2096
2995
  */
2097
2996
  actions: IssueAction[]
2997
+ /**
2998
+ * Type-aware evidence for this exact candidate when requested.
2999
+ */
3000
+ semantic?: (SemanticCandidateDecision | null)
2098
3001
  /**
2099
3002
  * Set by the audit pass when this finding is introduced relative to
2100
3003
  * the merge-base.
@@ -7187,6 +8090,7 @@ target: InspectTargetDescriptor
7187
8090
  identity: InspectIdentity
7188
8091
  evidence: InspectEvidence
7189
8092
  warnings: string[]
8093
+ _meta?: (Meta | null)
7190
8094
  }
7191
8095
  export interface InspectFileIdentity {
7192
8096
  file: string
@@ -7224,6 +8128,26 @@ churn?: (InspectEvidenceSection | null)
7224
8128
  * best-effort and not part of the trusted ranked evidence.
7225
8129
  */
7226
8130
  symbol_chain?: (InspectEvidenceSection | null)
8131
+ /**
8132
+ * Checker-backed declaration, alias, re-export, and use-site evidence.
8133
+ * Present only for a symbol target in type-aware mode.
8134
+ */
8135
+ semantic_trace?: (InspectEvidenceSection | null)
8136
+ /**
8137
+ * Package-public TypeScript surface and private-type reachability.
8138
+ * Present only for a symbol target in type-aware mode.
8139
+ */
8140
+ api_surface?: (InspectEvidenceSection | null)
8141
+ /**
8142
+ * Exact-symbol consumers and transitive affected files.
8143
+ * Present only for a symbol target in type-aware mode.
8144
+ */
8145
+ symbol_impact?: (InspectEvidenceSection | null)
8146
+ /**
8147
+ * Test entry points reachable from the exact symbol, with provenance.
8148
+ * Present only for a symbol target in type-aware mode.
8149
+ */
8150
+ targeted_tests?: (InspectEvidenceSection | null)
7227
8151
  }
7228
8152
  export interface InspectEvidenceSection {
7229
8153
  status: InspectSectionStatus
@@ -7231,6 +8155,318 @@ scope: InspectEvidenceScope
7231
8155
  message?: (string | null)
7232
8156
  data?: unknown
7233
8157
  }
8158
+ /**
8159
+ * Result of tracing an export: why it is considered used or unused.
8160
+ */
8161
+ export interface ExportTrace {
8162
+ /**
8163
+ * The file containing the export.
8164
+ */
8165
+ file: string
8166
+ /**
8167
+ * The export name being traced.
8168
+ */
8169
+ export_name: string
8170
+ /**
8171
+ * Whether the file is reachable from an entry point.
8172
+ */
8173
+ file_reachable: boolean
8174
+ /**
8175
+ * Whether the file is an entry point.
8176
+ */
8177
+ is_entry_point: boolean
8178
+ /**
8179
+ * Whether the export is considered used.
8180
+ */
8181
+ is_used: boolean
8182
+ /**
8183
+ * Files that reference this export directly.
8184
+ */
8185
+ direct_references: ExportReference[]
8186
+ /**
8187
+ * Re-export chains that pass through this export.
8188
+ */
8189
+ re_export_chains: ReExportChain[]
8190
+ /**
8191
+ * Human-readable reason summary.
8192
+ */
8193
+ reason: string
8194
+ /**
8195
+ * Exact checker-backed references when type-aware tracing is enabled.
8196
+ */
8197
+ semantic?: (SemanticSymbolTrace | null)
8198
+ }
8199
+ /**
8200
+ * A direct reference to an export.
8201
+ */
8202
+ export interface ExportReference {
8203
+ /**
8204
+ * File that contains the reference.
8205
+ */
8206
+ from_file: string
8207
+ /**
8208
+ * Reference kind, such as named import, default import, or re-export.
8209
+ */
8210
+ kind: string
8211
+ }
8212
+ /**
8213
+ * A re-export chain showing how an export is propagated.
8214
+ */
8215
+ export interface ReExportChain {
8216
+ /**
8217
+ * The barrel file that re-exports this symbol.
8218
+ */
8219
+ barrel_file: string
8220
+ /**
8221
+ * The name it is re-exported as.
8222
+ */
8223
+ exported_as: string
8224
+ /**
8225
+ * Number of references on the barrel's re-exported symbol.
8226
+ */
8227
+ reference_count: number
8228
+ }
8229
+ /**
8230
+ * Result of tracing a class / enum / store MEMBER: the `--trace FILE:NAME`
8231
+ * fallback when `NAME` is not a top-level export but a member declared on one
8232
+ * (issue #1744). The trace runs on the module graph only, so it reports the
8233
+ * OWNING export's reachability and usage (the gating precondition for
8234
+ * member-level crediting) plus a pointer to the right `--unused-*-members`
8235
+ * command, rather than per-member crediting provenance.
8236
+ */
8237
+ export interface ClassMemberTrace {
8238
+ /**
8239
+ * The file containing the member.
8240
+ */
8241
+ file: string
8242
+ /**
8243
+ * The member name being traced.
8244
+ */
8245
+ member_name: string
8246
+ /**
8247
+ * The member kind: `class-method`, `class-property`, `enum-member`,
8248
+ * `store-member`, or `namespace-member`.
8249
+ */
8250
+ member_kind: string
8251
+ /**
8252
+ * The export that declares this member (the class / enum / store name).
8253
+ */
8254
+ owner_export: string
8255
+ /**
8256
+ * Whether the owning export is considered used.
8257
+ */
8258
+ owner_is_used: boolean
8259
+ /**
8260
+ * Whether the file is reachable from an entry point.
8261
+ */
8262
+ owner_file_reachable: boolean
8263
+ /**
8264
+ * Whether the file is an entry point.
8265
+ */
8266
+ owner_is_entry_point: boolean
8267
+ /**
8268
+ * Files that reference the owning export directly.
8269
+ */
8270
+ owner_direct_references: ExportReference[]
8271
+ /**
8272
+ * Re-export chains through which the owning export is reachable. Populated
8273
+ * so a machine consumer can tell "used via a barrel" (empty direct refs but
8274
+ * non-empty chains) from "genuinely unreferenced".
8275
+ */
8276
+ owner_re_export_chains: ReExportChain[]
8277
+ /**
8278
+ * Human-readable reason summary plus the follow-up command to inspect the
8279
+ * member finding.
8280
+ */
8281
+ reason: string
8282
+ /**
8283
+ * Exact checker-backed member references when type-aware tracing is enabled.
8284
+ */
8285
+ semantic?: (SemanticSymbolTrace | null)
8286
+ }
8287
+ /**
8288
+ * Result of tracing all edges for a file.
8289
+ */
8290
+ export interface FileTrace {
8291
+ /**
8292
+ * The traced file.
8293
+ */
8294
+ file: string
8295
+ /**
8296
+ * Whether this file is reachable from entry points.
8297
+ */
8298
+ is_reachable: boolean
8299
+ /**
8300
+ * Whether this file is an entry point.
8301
+ */
8302
+ is_entry_point: boolean
8303
+ /**
8304
+ * Exports declared by this file.
8305
+ */
8306
+ exports: TracedExport[]
8307
+ /**
8308
+ * Files that this file imports from.
8309
+ */
8310
+ imports_from: string[]
8311
+ /**
8312
+ * Files that import from this file.
8313
+ */
8314
+ imported_by: string[]
8315
+ /**
8316
+ * Re-exports declared by this file.
8317
+ */
8318
+ re_exports: TracedReExport[]
8319
+ }
8320
+ /**
8321
+ * An export with usage information.
8322
+ */
8323
+ export interface TracedExport {
8324
+ /**
8325
+ * Export name.
8326
+ */
8327
+ name: string
8328
+ /**
8329
+ * Whether the export is type-only.
8330
+ */
8331
+ is_type_only: boolean
8332
+ /**
8333
+ * Number of references to this export.
8334
+ */
8335
+ reference_count: number
8336
+ /**
8337
+ * Files that reference this export.
8338
+ */
8339
+ referenced_by: ExportReference[]
8340
+ }
8341
+ /**
8342
+ * A re-export with source information.
8343
+ */
8344
+ export interface TracedReExport {
8345
+ /**
8346
+ * Source file being re-exported from.
8347
+ */
8348
+ source_file: string
8349
+ /**
8350
+ * Imported symbol name.
8351
+ */
8352
+ imported_name: string
8353
+ /**
8354
+ * Exported symbol name.
8355
+ */
8356
+ exported_name: string
8357
+ }
8358
+ /**
8359
+ * Result of tracing a dependency: where it is used.
8360
+ */
8361
+ export interface DependencyTrace {
8362
+ /**
8363
+ * The dependency name being traced.
8364
+ */
8365
+ package_name: string
8366
+ /**
8367
+ * Files that import this dependency.
8368
+ */
8369
+ imported_by: string[]
8370
+ /**
8371
+ * Files that import this dependency with type-only imports.
8372
+ */
8373
+ type_only_imported_by: string[]
8374
+ /**
8375
+ * Whether the dependency is invoked from package.json scripts or CI configs.
8376
+ */
8377
+ used_in_scripts: boolean
8378
+ /**
8379
+ * Whether the dependency is used at all.
8380
+ */
8381
+ is_used: boolean
8382
+ /**
8383
+ * Total import count.
8384
+ */
8385
+ import_count: number
8386
+ }
8387
+ /**
8388
+ * Result of tracing a clone: all groups containing the code at a source
8389
+ * location or addressed by a stable clone fingerprint.
8390
+ */
8391
+ export interface CloneTrace {
8392
+ /**
8393
+ * File passed to the trace request, root-relative when a group matches.
8394
+ */
8395
+ file: string
8396
+ /**
8397
+ * 1-based line passed to the trace request or representative group line.
8398
+ */
8399
+ line: number
8400
+ /**
8401
+ * The matched clone instance, if one exists.
8402
+ */
8403
+ matched_instance?: (CloneInstance | null)
8404
+ /**
8405
+ * Clone groups matched by the trace request.
8406
+ */
8407
+ clone_groups: TracedCloneGroup[]
8408
+ }
8409
+ /**
8410
+ * One clone group returned from a clone trace request.
8411
+ */
8412
+ export interface TracedCloneGroup {
8413
+ /**
8414
+ * Stable content fingerprint, usually `dup:<8hex>` and widened on rare
8415
+ * report collisions.
8416
+ */
8417
+ fingerprint: string
8418
+ /**
8419
+ * Number of tokens in the duplicated block.
8420
+ */
8421
+ token_count: number
8422
+ /**
8423
+ * Number of lines in the duplicated block.
8424
+ */
8425
+ line_count: number
8426
+ /**
8427
+ * Root-relative clone instances in this group.
8428
+ */
8429
+ instances: CloneInstance[]
8430
+ suggestion: RefactoringSuggestion
8431
+ /**
8432
+ * Best-effort name for the extracted function. Advisory only.
8433
+ */
8434
+ suggested_name?: (string | null)
8435
+ }
8436
+ /**
8437
+ * Result of computing the impact closure for a single file as the seed.
8438
+ */
8439
+ export interface ImpactClosureTrace {
8440
+ /**
8441
+ * The seed file, root-relative.
8442
+ */
8443
+ seed: string
8444
+ /**
8445
+ * Root-relative paths transitively affected by the seed.
8446
+ */
8447
+ affected_not_shown: string[]
8448
+ /**
8449
+ * Coordination gaps between the seed and consumers.
8450
+ */
8451
+ coordination_gap: ImpactClosureGap[]
8452
+ }
8453
+ /**
8454
+ * One coordination-gap entry in an [`ImpactClosureTrace`].
8455
+ */
8456
+ export interface ImpactClosureGap {
8457
+ /**
8458
+ * Root-relative path of the consumer module.
8459
+ */
8460
+ consumer_file: string
8461
+ /**
8462
+ * Exported symbol names the consumer references.
8463
+ */
8464
+ consumed_symbols: string[]
8465
+ /**
8466
+ * Scope note for the syntactic trace.
8467
+ */
8468
+ note: string
8469
+ }
7234
8470
  /**
7235
8471
  * The result of a symbol-level call-chain trace. Its own surface (`kind:
7236
8472
  * "trace"`), NOT folded into the ranked brief.
@@ -10352,6 +11588,25 @@ reason?: (string | null)
10352
11588
  */
10353
11589
  reason_present: boolean
10354
11590
  }
11591
+ /**
11592
+ * Envelope emitted by `fallow type-aware status --format json`.
11593
+ */
11594
+ export interface TypeAwareStatusOutput {
11595
+ schema_version: SchemaVersion
11596
+ version: ToolVersion
11597
+ available: boolean
11598
+ discovery_source?: (string | null)
11599
+ /**
11600
+ * Root-relative companion path, or only the executable name when the
11601
+ * companion lives outside the analyzed project.
11602
+ */
11603
+ companion_path?: (string | null)
11604
+ package_version?: (string | null)
11605
+ protocol_version: number
11606
+ backend_family?: (string | null)
11607
+ backend_version?: (string | null)
11608
+ remediation?: (string | null)
11609
+ }
10355
11610
  /**
10356
11611
  * Single CodeClimate-compatible issue inside [`CodeClimateOutput`].
10357
11612
  */