fallow 3.32.0 → 3.33.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.
- package/capabilities.json +155 -17
- package/package.json +10 -10
- package/schema.json +5 -0
- package/scripts/lazy-verify.js +14 -2
- package/scripts/lazy-verify.test.js +6 -4
- package/scripts/run-binary.js +7 -1
- package/scripts/run-binary.test.js +71 -12
- package/skills/fallow/SKILL.md +7 -3
- package/skills/fallow/references/cli-reference.md +82 -16
- package/skills/fallow/references/gotchas.md +1 -1
- package/skills/fallow/references/mcp.md +2 -1
- package/skills/fallow/references/node-bindings.md +1 -1
- package/skills/fallow/references/patterns.md +6 -3
- package/skills/fallow-setup/references/ci-gate.md +1 -1
- package/types/output-contract.d.ts +1021 -32
|
@@ -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`, `trace-error`, `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`, `doctor`, `type-aware-status`, `similar-code`, `similar-code-inspect`, `similar-code-review`. 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`, `trace-error`, `review-envelope`, `review-reconcile`, `coverage-setup`, `coverage-analyze`, `list-boundaries`, `list-workspaces`, `health`, `dupes`, `dead-code-grouped`, `architecture-grouped`, `impact`, `impact-cross-repo`, `security`, `security-survivors`, `security-blind-spots`, `dead-code`, `architecture`, `combined`, `feature-flags`, `audit-brief`, `decision-surface`, `review-walkthrough-guide`, `review-walkthrough-validation`, `suppression-inventory`, `doctor`, `type-aware-status`, `similar-code`, `similar-code-inspect`, `similar-code-review`, `similar-code-status`, `similar-code-cache-clear`. 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
|
/**
|
|
@@ -72,6 +72,8 @@ kind: "health"
|
|
|
72
72
|
kind: "dupes"
|
|
73
73
|
}) | (CheckGroupedOutput & {
|
|
74
74
|
kind: "dead-code-grouped"
|
|
75
|
+
}) | (ArchitectureGroupedOutput & {
|
|
76
|
+
kind: "architecture-grouped"
|
|
75
77
|
}) | ((ImpactReport | SemanticSymbolImpact) & {
|
|
76
78
|
kind: "impact"
|
|
77
79
|
}) | (CrossRepoImpactReport & {
|
|
@@ -84,6 +86,8 @@ kind: "security-survivors"
|
|
|
84
86
|
kind: "security-blind-spots"
|
|
85
87
|
}) | (CheckOutput & {
|
|
86
88
|
kind: "dead-code"
|
|
89
|
+
}) | (ArchitectureOutput & {
|
|
90
|
+
kind: "architecture"
|
|
87
91
|
}) | (CombinedOutput & {
|
|
88
92
|
kind: "combined"
|
|
89
93
|
}) | (FeatureFlagsOutput & {
|
|
@@ -108,6 +112,10 @@ kind: "similar-code"
|
|
|
108
112
|
kind: "similar-code-inspect"
|
|
109
113
|
}) | (SimilarCodeReviewOutput & {
|
|
110
114
|
kind: "similar-code-review"
|
|
115
|
+
}) | (SimilarCodeStatusOutput & {
|
|
116
|
+
kind: "similar-code-status"
|
|
117
|
+
}) | (SimilarCodeCacheClearOutput & {
|
|
118
|
+
kind: "similar-code-cache-clear"
|
|
111
119
|
}))
|
|
112
120
|
/**
|
|
113
121
|
* Schema projection for the audit envelope's exact version.
|
|
@@ -1121,6 +1129,21 @@ export type InspectSectionStatus = ("ok" | "partial" | "unavailable" | "error")
|
|
|
1121
1129
|
* Granularity an [`InspectEvidenceSection`] payload covers.
|
|
1122
1130
|
*/
|
|
1123
1131
|
export type InspectEvidenceScope = ("symbol" | "file" | "project_filtered_to_file")
|
|
1132
|
+
/**
|
|
1133
|
+
* Wire-shape version of the [`DependencyUsage`] object.
|
|
1134
|
+
*
|
|
1135
|
+
* The object has its own version, because it is an optional part of the
|
|
1136
|
+
* `DependencyTrace` envelope.
|
|
1137
|
+
*/
|
|
1138
|
+
export type DependencyUsageSchemaVersion = "1"
|
|
1139
|
+
/**
|
|
1140
|
+
* How the usage was found.
|
|
1141
|
+
*/
|
|
1142
|
+
export type UsageConfidence = "syntactic"
|
|
1143
|
+
/**
|
|
1144
|
+
* The shape of a project wrapper.
|
|
1145
|
+
*/
|
|
1146
|
+
export type WrapperShape = ("call" | "alias")
|
|
1124
1147
|
/**
|
|
1125
1148
|
* Wire-version discriminator for [`ImportPathTrace`]. Independent from the
|
|
1126
1149
|
* global `SchemaVersion`: the import-path payload versions on its own cadence,
|
|
@@ -1241,6 +1264,13 @@ export type GroupTrendStatus = ("compared" | "new_group" | "no_group_baseline")
|
|
|
1241
1264
|
* version lineages.
|
|
1242
1265
|
*/
|
|
1243
1266
|
export type DupesSchemaVersion = (4 | 10)
|
|
1267
|
+
/**
|
|
1268
|
+
* Schema projection for the architecture envelope's exact version.
|
|
1269
|
+
*
|
|
1270
|
+
* The schema emitter registers this type by name and points the
|
|
1271
|
+
* `ArchitectureOutput` and `ArchitectureGroupedOutput` definitions at it.
|
|
1272
|
+
*/
|
|
1273
|
+
export type ArchitectureSchemaVersion = 1
|
|
1244
1274
|
/**
|
|
1245
1275
|
* Wire-version discriminator for [`ImpactReport`]. Independent from the global
|
|
1246
1276
|
* `SchemaVersion` (the impact report versions on its own cadence) and from the
|
|
@@ -1562,6 +1592,14 @@ export type SimilarCodeDomainOutcome = ("same-responsibility" | "related-but-dis
|
|
|
1562
1592
|
* How review matched an external verdict to the current candidate.
|
|
1563
1593
|
*/
|
|
1564
1594
|
export type SimilarCodeVerdictMatch = ("candidate-id" | "review-key" | "unverified" | "ambiguous-review-key")
|
|
1595
|
+
/**
|
|
1596
|
+
* Version singleton for local-provider status output.
|
|
1597
|
+
*/
|
|
1598
|
+
export type SimilarCodeStatusSchemaVersion = "1"
|
|
1599
|
+
/**
|
|
1600
|
+
* Version singleton for vector-cache clear output.
|
|
1601
|
+
*/
|
|
1602
|
+
export type SimilarCodeCacheClearSchemaVersion = "1"
|
|
1565
1603
|
/**
|
|
1566
1604
|
* Discriminator value for [`CodeClimateIssue::kind`].
|
|
1567
1605
|
*/
|
|
@@ -3098,6 +3136,16 @@ thin_wrappers?: ThinWrapperFinding[]
|
|
|
3098
3136
|
* enables it.
|
|
3099
3137
|
*/
|
|
3100
3138
|
duplicate_prop_shapes?: DuplicatePropShapeFinding[]
|
|
3139
|
+
/**
|
|
3140
|
+
* Number of `unused_exports`, `unused_types`, `unused_class_members` and
|
|
3141
|
+
* `unused_enum_members` findings that this run did not report because
|
|
3142
|
+
* their file is an unused file. Deleting the file removes them, so they
|
|
3143
|
+
* add no information. `--show-cascade` or the `showCascade` config key
|
|
3144
|
+
* keeps them in the report, and then this count is zero. The count is
|
|
3145
|
+
* taken after the scope and the rules and before a baseline. Serialized
|
|
3146
|
+
* only when not zero, so a run without such findings keeps its JSON.
|
|
3147
|
+
*/
|
|
3148
|
+
cascade_hidden?: number
|
|
3101
3149
|
/**
|
|
3102
3150
|
* Count deltas against the matched baseline, in baseline runs.
|
|
3103
3151
|
*/
|
|
@@ -6722,11 +6770,12 @@ unrecognised_format?: boolean
|
|
|
6722
6770
|
*/
|
|
6723
6771
|
saved_by?: string
|
|
6724
6772
|
/**
|
|
6725
|
-
* `legacy` when the loaded
|
|
6726
|
-
*
|
|
6727
|
-
*
|
|
6728
|
-
*
|
|
6729
|
-
*
|
|
6773
|
+
* `legacy` when the loaded baseline uses an old key form. For dead-code,
|
|
6774
|
+
* the file has no `identity`, so some entries hold a line. For `dupes`,
|
|
6775
|
+
* some entries use the clone key that older versions shared between
|
|
6776
|
+
* unrelated groups whose code did not parse on its own. The run still
|
|
6777
|
+
* applies the file. `--save-baseline` rewrites it with current keys.
|
|
6778
|
+
* Absent for a current baseline and on `health`. The value set is OPEN.
|
|
6730
6779
|
*/
|
|
6731
6780
|
format?: string
|
|
6732
6781
|
/**
|
|
@@ -7620,7 +7669,9 @@ threshold_source?: (ThresholdSource | null)
|
|
|
7620
7669
|
actions: HealthFindingAction[]
|
|
7621
7670
|
/**
|
|
7622
7671
|
* Audit-mode flag indicating whether the finding is new versus the base
|
|
7623
|
-
* snapshot.
|
|
7672
|
+
* snapshot. A complexity finding is new when no base finding has the same
|
|
7673
|
+
* path and function name, or when a metric that it exceeds has a higher
|
|
7674
|
+
* value than in that base finding.
|
|
7624
7675
|
*/
|
|
7625
7676
|
introduced?: (boolean | null)
|
|
7626
7677
|
}
|
|
@@ -11641,11 +11692,12 @@ export interface DependencyTrace {
|
|
|
11641
11692
|
*/
|
|
11642
11693
|
package_name: string
|
|
11643
11694
|
/**
|
|
11644
|
-
* Files that import this dependency.
|
|
11695
|
+
* Files that import this dependency, each listed once.
|
|
11645
11696
|
*/
|
|
11646
11697
|
imported_by: string[]
|
|
11647
11698
|
/**
|
|
11648
|
-
* Files
|
|
11699
|
+
* Files whose every import of this dependency is type-only, each listed
|
|
11700
|
+
* once.
|
|
11649
11701
|
*/
|
|
11650
11702
|
type_only_imported_by: string[]
|
|
11651
11703
|
/**
|
|
@@ -11659,7 +11711,7 @@ used_in_scripts: boolean
|
|
|
11659
11711
|
*/
|
|
11660
11712
|
is_used: boolean
|
|
11661
11713
|
/**
|
|
11662
|
-
*
|
|
11714
|
+
* Number of files that import this dependency.
|
|
11663
11715
|
*/
|
|
11664
11716
|
import_count: number
|
|
11665
11717
|
/**
|
|
@@ -11691,6 +11743,14 @@ tooling_credit?: (ToolingCredit | null)
|
|
|
11691
11743
|
* manifest is flagged.
|
|
11692
11744
|
*/
|
|
11693
11745
|
unused_in?: string[]
|
|
11746
|
+
/**
|
|
11747
|
+
* How the code uses each imported name of the dependency. Present on
|
|
11748
|
+
* `fallow trace --dependency`, and on the MCP `trace_dependency` tool
|
|
11749
|
+
* when a usage parameter is set. Absent on
|
|
11750
|
+
* `fallow dead-code --trace-dependency`. The object has its own
|
|
11751
|
+
* `schema_version`.
|
|
11752
|
+
*/
|
|
11753
|
+
usage?: (DependencyUsage | null)
|
|
11694
11754
|
}
|
|
11695
11755
|
/**
|
|
11696
11756
|
* Why the unused devDependency check counts a dependency as used tooling
|
|
@@ -11729,6 +11789,253 @@ config?: (string | null)
|
|
|
11729
11789
|
*/
|
|
11730
11790
|
reference?: (string | null)
|
|
11731
11791
|
}
|
|
11792
|
+
/**
|
|
11793
|
+
* How the code uses each imported name of a dependency.
|
|
11794
|
+
*/
|
|
11795
|
+
export interface DependencyUsage {
|
|
11796
|
+
schema_version: DependencyUsageSchemaVersion
|
|
11797
|
+
confidence: UsageConfidence
|
|
11798
|
+
/**
|
|
11799
|
+
* One entry per imported name, sorted by `name` in byte order. With a
|
|
11800
|
+
* specifier filter, only the selected names, each present even when no
|
|
11801
|
+
* file imports it.
|
|
11802
|
+
*/
|
|
11803
|
+
specifiers: SpecifierUsage[]
|
|
11804
|
+
unresolved: FileLevelUnresolved
|
|
11805
|
+
/**
|
|
11806
|
+
* One page of usage sites. Absent unless sites were requested.
|
|
11807
|
+
*/
|
|
11808
|
+
sites?: (UsageSitePage | null)
|
|
11809
|
+
/**
|
|
11810
|
+
* The files that import the users of the dependency. Absent unless a
|
|
11811
|
+
* closure depth was requested.
|
|
11812
|
+
*/
|
|
11813
|
+
closure?: (ConsumerClosure | null)
|
|
11814
|
+
}
|
|
11815
|
+
/**
|
|
11816
|
+
* The usage of one imported name.
|
|
11817
|
+
*/
|
|
11818
|
+
export interface SpecifierUsage {
|
|
11819
|
+
/**
|
|
11820
|
+
* The imported name: `default` for a default import, the first member for
|
|
11821
|
+
* a namespace member, and `*` for a bare namespace use.
|
|
11822
|
+
*/
|
|
11823
|
+
name: string
|
|
11824
|
+
/**
|
|
11825
|
+
* Files with a static import binding of the name, a namespace member use
|
|
11826
|
+
* of it, or a re-export of it from the package.
|
|
11827
|
+
*/
|
|
11828
|
+
file_count: number
|
|
11829
|
+
/**
|
|
11830
|
+
* The files in `file_count` where every binding of the name is type-only:
|
|
11831
|
+
* an `import type`, or a value import that the file reads only in type
|
|
11832
|
+
* positions.
|
|
11833
|
+
*/
|
|
11834
|
+
type_only_file_count: number
|
|
11835
|
+
/**
|
|
11836
|
+
* Direct calls of the name, not through a project wrapper. The
|
|
11837
|
+
* initializer of a call wrapper (`useSelector.withTypes()`) is a direct
|
|
11838
|
+
* call and counts here.
|
|
11839
|
+
*/
|
|
11840
|
+
call_site_count: number
|
|
11841
|
+
unresolved: SpecifierUnresolved
|
|
11842
|
+
/**
|
|
11843
|
+
* Project wrappers of the name, sorted by `file`, then `export`.
|
|
11844
|
+
*/
|
|
11845
|
+
wrappers: UsageWrapper[]
|
|
11846
|
+
}
|
|
11847
|
+
/**
|
|
11848
|
+
* Uses of one imported name that the trace cannot resolve to a call. The key
|
|
11849
|
+
* set is closed in schema version 1.
|
|
11850
|
+
*/
|
|
11851
|
+
export interface SpecifierUnresolved {
|
|
11852
|
+
/**
|
|
11853
|
+
* The name is the whole initializer of a declarator that is not a
|
|
11854
|
+
* wrapper: `const s = useSelector`.
|
|
11855
|
+
*/
|
|
11856
|
+
value_alias: number
|
|
11857
|
+
/**
|
|
11858
|
+
* Any other value use that is not a call: an argument, an array
|
|
11859
|
+
* element, a property value or an optional call.
|
|
11860
|
+
*/
|
|
11861
|
+
non_call_reference: number
|
|
11862
|
+
/**
|
|
11863
|
+
* The name is a JSX element: `<Provider>`.
|
|
11864
|
+
*/
|
|
11865
|
+
jsx_element: number
|
|
11866
|
+
/**
|
|
11867
|
+
* The file re-exports the name from the package, or re-exports a
|
|
11868
|
+
* project wrapper of the name. The trace does not follow the consumers
|
|
11869
|
+
* of the re-export.
|
|
11870
|
+
*/
|
|
11871
|
+
re_export: number
|
|
11872
|
+
/**
|
|
11873
|
+
* A wrapper consumer that exports the wrapper again. The trace does not
|
|
11874
|
+
* follow the second hop.
|
|
11875
|
+
*/
|
|
11876
|
+
nested_wrapper: number
|
|
11877
|
+
/**
|
|
11878
|
+
* Files with a runtime binding of the name and no usage site, for
|
|
11879
|
+
* example a use in a Vue, Svelte or Astro template.
|
|
11880
|
+
*/
|
|
11881
|
+
binding_without_site: number
|
|
11882
|
+
}
|
|
11883
|
+
/**
|
|
11884
|
+
* A top-level exported declarator that wraps an imported name. The trace
|
|
11885
|
+
* follows one hop from the wrapper to its consumers.
|
|
11886
|
+
*/
|
|
11887
|
+
export interface UsageWrapper {
|
|
11888
|
+
/**
|
|
11889
|
+
* The file that declares the wrapper, root-relative.
|
|
11890
|
+
*/
|
|
11891
|
+
file: string
|
|
11892
|
+
/**
|
|
11893
|
+
* The exported name of the wrapper.
|
|
11894
|
+
*/
|
|
11895
|
+
export: string
|
|
11896
|
+
shape: WrapperShape
|
|
11897
|
+
/**
|
|
11898
|
+
* 1-based line of the wrapper initializer.
|
|
11899
|
+
*/
|
|
11900
|
+
line: number
|
|
11901
|
+
/**
|
|
11902
|
+
* Distinct files with a call of the wrapper, the file of the wrapper
|
|
11903
|
+
* included.
|
|
11904
|
+
*/
|
|
11905
|
+
consumer_file_count: number
|
|
11906
|
+
/**
|
|
11907
|
+
* Calls of the wrapper itself. A call of a member of the value that a
|
|
11908
|
+
* call wrapper returns (`store.dispatch()`) is a `non_call_reference`.
|
|
11909
|
+
*/
|
|
11910
|
+
call_site_count: number
|
|
11911
|
+
}
|
|
11912
|
+
/**
|
|
11913
|
+
* Uses that hide which names a file reads. The key set is closed in schema
|
|
11914
|
+
* version 1.
|
|
11915
|
+
*/
|
|
11916
|
+
export interface FileLevelUnresolved {
|
|
11917
|
+
/**
|
|
11918
|
+
* `import("package")` expressions.
|
|
11919
|
+
*/
|
|
11920
|
+
dynamic_import: number
|
|
11921
|
+
/**
|
|
11922
|
+
* `require("package")` calls.
|
|
11923
|
+
*/
|
|
11924
|
+
require: number
|
|
11925
|
+
/**
|
|
11926
|
+
* `import "package"` statements.
|
|
11927
|
+
*/
|
|
11928
|
+
side_effect_import: number
|
|
11929
|
+
/**
|
|
11930
|
+
* `export * from "package"` statements.
|
|
11931
|
+
*/
|
|
11932
|
+
star_re_export: number
|
|
11933
|
+
/**
|
|
11934
|
+
* Files that import the package through a specifier that does not name
|
|
11935
|
+
* the package, for example a path alias.
|
|
11936
|
+
*/
|
|
11937
|
+
unattributed_file: number
|
|
11938
|
+
}
|
|
11939
|
+
/**
|
|
11940
|
+
* One page of usage sites.
|
|
11941
|
+
*/
|
|
11942
|
+
export interface UsageSitePage {
|
|
11943
|
+
/**
|
|
11944
|
+
* The sites on this page, sorted by `file`, `line`, `col`, kind,
|
|
11945
|
+
* `specifier`, then `via`.
|
|
11946
|
+
*/
|
|
11947
|
+
items: UsageSite[]
|
|
11948
|
+
/**
|
|
11949
|
+
* The number of sites on all pages.
|
|
11950
|
+
*/
|
|
11951
|
+
total: number
|
|
11952
|
+
/**
|
|
11953
|
+
* The largest number of items on a page.
|
|
11954
|
+
*/
|
|
11955
|
+
limit: number
|
|
11956
|
+
/**
|
|
11957
|
+
* An opaque token for the next page. Absent on the last page.
|
|
11958
|
+
*/
|
|
11959
|
+
next_cursor?: (string | null)
|
|
11960
|
+
}
|
|
11961
|
+
/**
|
|
11962
|
+
* One use of the dependency in the code.
|
|
11963
|
+
*/
|
|
11964
|
+
export interface UsageSite {
|
|
11965
|
+
/**
|
|
11966
|
+
* The file, root-relative.
|
|
11967
|
+
*/
|
|
11968
|
+
file: string
|
|
11969
|
+
/**
|
|
11970
|
+
* 1-based line.
|
|
11971
|
+
*/
|
|
11972
|
+
line: number
|
|
11973
|
+
/**
|
|
11974
|
+
* 0-based byte column.
|
|
11975
|
+
*/
|
|
11976
|
+
col: number
|
|
11977
|
+
/**
|
|
11978
|
+
* The imported name. Absent on file-level kinds.
|
|
11979
|
+
*/
|
|
11980
|
+
specifier?: (string | null)
|
|
11981
|
+
/**
|
|
11982
|
+
* The local binding that the code uses. Absent on file-level kinds.
|
|
11983
|
+
*/
|
|
11984
|
+
local_name?: (string | null)
|
|
11985
|
+
/**
|
|
11986
|
+
* The static member after the imported name, for example `withTypes`.
|
|
11987
|
+
*/
|
|
11988
|
+
member?: (string | null)
|
|
11989
|
+
/**
|
|
11990
|
+
* How the code uses the dependency at this site. The known values are
|
|
11991
|
+
* `call`, `wrapper_definition`, `value_alias`, `non_call_reference`,
|
|
11992
|
+
* `jsx_element`, `re_export`, `nested_wrapper`, `dynamic_import`,
|
|
11993
|
+
* `require`, `side_effect_import` and `star_re_export`. The set is open:
|
|
11994
|
+
* read an unknown kind as an unresolved site.
|
|
11995
|
+
*/
|
|
11996
|
+
kind: string
|
|
11997
|
+
/**
|
|
11998
|
+
* The wrapper that the site goes through, as `FILE:EXPORT`.
|
|
11999
|
+
*/
|
|
12000
|
+
via?: (string | null)
|
|
12001
|
+
}
|
|
12002
|
+
/**
|
|
12003
|
+
* The files that import the users of the dependency, found by a reverse walk
|
|
12004
|
+
* of the import graph.
|
|
12005
|
+
*/
|
|
12006
|
+
export interface ConsumerClosure {
|
|
12007
|
+
/**
|
|
12008
|
+
* The largest depth of the walk.
|
|
12009
|
+
*/
|
|
12010
|
+
depth: number
|
|
12011
|
+
/**
|
|
12012
|
+
* The number of files in `files`.
|
|
12013
|
+
*/
|
|
12014
|
+
file_count: number
|
|
12015
|
+
/**
|
|
12016
|
+
* The files, sorted by `depth`, then `file`. The seed files are not
|
|
12017
|
+
* listed.
|
|
12018
|
+
*/
|
|
12019
|
+
files: ClosureFile[]
|
|
12020
|
+
/**
|
|
12021
|
+
* Whether a file at the largest depth has an importer that the walk did
|
|
12022
|
+
* not visit.
|
|
12023
|
+
*/
|
|
12024
|
+
truncated: boolean
|
|
12025
|
+
}
|
|
12026
|
+
/**
|
|
12027
|
+
* One file of a [`ConsumerClosure`].
|
|
12028
|
+
*/
|
|
12029
|
+
export interface ClosureFile {
|
|
12030
|
+
/**
|
|
12031
|
+
* The file, root-relative.
|
|
12032
|
+
*/
|
|
12033
|
+
file: string
|
|
12034
|
+
/**
|
|
12035
|
+
* The number of import edges from the nearest seed file.
|
|
12036
|
+
*/
|
|
12037
|
+
depth: number
|
|
12038
|
+
}
|
|
11732
12039
|
/**
|
|
11733
12040
|
* Result of tracing a clone: all groups containing the code at a source
|
|
11734
12041
|
* location or addressed by a stable clone fingerprint.
|
|
@@ -13305,6 +13612,13 @@ groups: CheckGroupedEntry[]
|
|
|
13305
13612
|
* only when `true`, like the flat `CheckOutput` field.
|
|
13306
13613
|
*/
|
|
13307
13614
|
unused_load_data_keys_global_abstain?: boolean
|
|
13615
|
+
/**
|
|
13616
|
+
* Number of export and member findings that the run hid because their
|
|
13617
|
+
* file is an unused file. The count covers the whole run, so it is on
|
|
13618
|
+
* the root and not in a group. Serialized only when not zero, like the
|
|
13619
|
+
* flat `CheckOutput` field.
|
|
13620
|
+
*/
|
|
13621
|
+
cascade_hidden?: number
|
|
13308
13622
|
/**
|
|
13309
13623
|
* This run's view of the loaded baseline, present only in baseline runs.
|
|
13310
13624
|
* Carries the staleness counts, the advisory verdict and `gate_trips`, the
|
|
@@ -13726,6 +14040,106 @@ thin_wrappers?: ThinWrapperFinding[]
|
|
|
13726
14040
|
* enables it.
|
|
13727
14041
|
*/
|
|
13728
14042
|
duplicate_prop_shapes?: DuplicatePropShapeFinding[]
|
|
14043
|
+
/**
|
|
14044
|
+
* Number of `unused_exports`, `unused_types`, `unused_class_members` and
|
|
14045
|
+
* `unused_enum_members` findings that this run did not report because
|
|
14046
|
+
* their file is an unused file. Deleting the file removes them, so they
|
|
14047
|
+
* add no information. `--show-cascade` or the `showCascade` config key
|
|
14048
|
+
* keeps them in the report, and then this count is zero. The count is
|
|
14049
|
+
* taken after the scope and the rules and before a baseline. Serialized
|
|
14050
|
+
* only when not zero, so a run without such findings keeps its JSON.
|
|
14051
|
+
*/
|
|
14052
|
+
cascade_hidden?: number
|
|
14053
|
+
}
|
|
14054
|
+
/**
|
|
14055
|
+
* Envelope emitted by `fallow architecture --group-by ... --format json`.
|
|
14056
|
+
*
|
|
14057
|
+
* The body is the `CheckGroupedOutput` body of `fallow dead-code`: issues are partitioned into resolver buckets (CODEOWNERS team, directory prefix, workspace package, or GitLab CODEOWNERS section), and each bucket carries the same issue-array shape as `ArchitectureOutput`, plus per-group `key` / `owners` / `total_issues`.
|
|
14058
|
+
*/
|
|
14059
|
+
export interface ArchitectureGroupedOutput {
|
|
14060
|
+
schema_version: ArchitectureSchemaVersion
|
|
14061
|
+
version: ToolVersion
|
|
14062
|
+
elapsed_ms: ElapsedMs
|
|
14063
|
+
grouped_by: GroupByMode
|
|
14064
|
+
/**
|
|
14065
|
+
* Total findings across all groups.
|
|
14066
|
+
*/
|
|
14067
|
+
total_issues: number
|
|
14068
|
+
/**
|
|
14069
|
+
* One bucket per resolver key.
|
|
14070
|
+
*/
|
|
14071
|
+
groups: CheckGroupedEntry[]
|
|
14072
|
+
/**
|
|
14073
|
+
* `true` when the `unused-load-data-key` detector abstained for the whole
|
|
14074
|
+
* project. The abstain has no file, so it is on the root and not in a
|
|
14075
|
+
* group. An empty `unused_load_data_keys` with this flag set does not
|
|
14076
|
+
* mean the project is clean: the rule could not run safely. Serialized
|
|
14077
|
+
* only when `true`, like the flat `CheckOutput` field.
|
|
14078
|
+
*/
|
|
14079
|
+
unused_load_data_keys_global_abstain?: boolean
|
|
14080
|
+
/**
|
|
14081
|
+
* Number of export and member findings that the run hid because their
|
|
14082
|
+
* file is an unused file. The count covers the whole run, so it is on
|
|
14083
|
+
* the root and not in a group. Serialized only when not zero, like the
|
|
14084
|
+
* flat `CheckOutput` field.
|
|
14085
|
+
*/
|
|
14086
|
+
cascade_hidden?: number
|
|
14087
|
+
/**
|
|
14088
|
+
* This run's view of the loaded baseline, present only in baseline runs.
|
|
14089
|
+
* Carries the staleness counts, the advisory verdict and `gate_trips`, the
|
|
14090
|
+
* same boolean `--fail-on-stale-baseline` exits on, so a CI integration
|
|
14091
|
+
* reads one field instead of restating the rule. Read `change_scoped`
|
|
14092
|
+
* before dividing `matched_entries` by `baseline_entries`: a narrowed run
|
|
14093
|
+
* can report `matched_entries: 0` on a healthy baseline.
|
|
14094
|
+
*/
|
|
14095
|
+
baseline_staleness?: (BaselineStaleness | null)
|
|
14096
|
+
/**
|
|
14097
|
+
* The answer to `--finding-id`, present only when the run received one
|
|
14098
|
+
* or more `--finding-id` values. The report then holds only the
|
|
14099
|
+
* requested findings. Read `missing` as resolved only when `conclusive`
|
|
14100
|
+
* is true; a scope, a baseline or a filter can hide a finding that still
|
|
14101
|
+
* exists. See [`crate::FindingIdQuery`].
|
|
14102
|
+
*/
|
|
14103
|
+
finding_id_query?: (FindingIdQuery | null)
|
|
14104
|
+
/**
|
|
14105
|
+
* The verdict of every gate this run evaluated, keyed by name. The CLI
|
|
14106
|
+
* always emits it, with the command's default exit rule in it also when
|
|
14107
|
+
* no flag armed a gate, so a CI integration reads the verdict instead of
|
|
14108
|
+
* guessing from a process status it usually cannot see. A gate fails the
|
|
14109
|
+
* build when `status` is `fail` AND `enforced` is true. The typed
|
|
14110
|
+
* programmatic API runs no CLI gate and leaves it absent. See
|
|
14111
|
+
* [`crate::GateOutcomes`].
|
|
14112
|
+
*/
|
|
14113
|
+
gate_outcomes?: (GateOutcomes | null)
|
|
14114
|
+
/**
|
|
14115
|
+
* Every narrowing or shaping request this run RECEIVED, keyed by name,
|
|
14116
|
+
* absent when it was asked for nothing. An entry whose `status` is not
|
|
14117
|
+
* `applied` means the run could not do what it was asked and reported
|
|
14118
|
+
* something WIDER instead, so what follows is a valid report of a scope
|
|
14119
|
+
* nobody requested. Honoured requests are published too, with
|
|
14120
|
+
* `status: "applied"`, so an absent object means "nothing was asked for",
|
|
14121
|
+
* never "nothing failed". See [`crate::RequestOutcomes`].
|
|
14122
|
+
*/
|
|
14123
|
+
request_outcomes?: (RequestOutcomes | null)
|
|
14124
|
+
/**
|
|
14125
|
+
* Applied package Git refs, omitted outside package-baseline runs.
|
|
14126
|
+
*/
|
|
14127
|
+
package_baselines?: PackageBaselineStatus[]
|
|
14128
|
+
/**
|
|
14129
|
+
* `_meta` block with docs and rule definitions, when `--explain` was
|
|
14130
|
+
* passed.
|
|
14131
|
+
*/
|
|
14132
|
+
_meta?: (Meta | null)
|
|
14133
|
+
/**
|
|
14134
|
+
* Diagnostics collected for the full analysis before issue grouping.
|
|
14135
|
+
* See [`CheckOutput::workspace_diagnostics`] for the contract.
|
|
14136
|
+
*/
|
|
14137
|
+
workspace_diagnostics?: WorkspaceDiagnostic[]
|
|
14138
|
+
/**
|
|
14139
|
+
* Read-only follow-up commands computed from the full (ungrouped) findings.
|
|
14140
|
+
* See [`CheckOutput::next_steps`] for the contract.
|
|
14141
|
+
*/
|
|
14142
|
+
next_steps?: NextStep[]
|
|
13729
14143
|
}
|
|
13730
14144
|
/**
|
|
13731
14145
|
* The rendered impact report, derived purely from the store.
|
|
@@ -14974,34 +15388,527 @@ path: string
|
|
|
14974
15388
|
sampled_count: number
|
|
14975
15389
|
}
|
|
14976
15390
|
/**
|
|
14977
|
-
*
|
|
15391
|
+
* Envelope emitted by `fallow architecture --format json`.
|
|
15392
|
+
*
|
|
15393
|
+
* The body is the `CheckOutput` body of `fallow dead-code`: the same issue arrays, `summary`, `entry_points`, actions and `gate_outcomes`. The architecture arrays (`circular_dependencies`, `re_export_cycles`, `package_cycles`, `boundary_violations`, `boundary_coverage_violations`, `boundary_call_violations`, `policy_violations`) carry the findings. The combined and audit envelopes do not use this envelope; their `check` block stays `CheckOutput`.
|
|
14978
15394
|
*/
|
|
14979
|
-
export interface
|
|
14980
|
-
schema_version:
|
|
15395
|
+
export interface ArchitectureOutput {
|
|
15396
|
+
schema_version: ArchitectureSchemaVersion
|
|
14981
15397
|
version: ToolVersion
|
|
14982
15398
|
elapsed_ms: ElapsedMs
|
|
14983
15399
|
/**
|
|
14984
|
-
*
|
|
14985
|
-
* always emits it, with the default exit rule of each section that ran
|
|
14986
|
-
* (`error-severity-findings`, `health-findings`). Without
|
|
14987
|
-
* `--fail-on-issues` or `--ci`, the machine formats of the combined run
|
|
14988
|
-
* exit 0 for findings, so most entries have `enforced: false`. With one of
|
|
14989
|
-
* these flags, the findings rules and `duplication-threshold` are
|
|
14990
|
-
* `enforced`, the dupes section adds an enforced `duplication-findings`
|
|
14991
|
-
* entry, and every format exits 1 when one fails. For the default
|
|
14992
|
-
* exit rules (`error-severity-findings`,
|
|
14993
|
-
* `health-findings`), `status` gives the verdict of the human run. An
|
|
14994
|
-
* advisory entry can report `fail` without a failure of the human run: an
|
|
14995
|
-
* example is a `stale-baseline` entry that `--fail-on-stale-baseline` did
|
|
14996
|
-
* not arm. A gate fails the build when `status` is `fail` AND `enforced`
|
|
14997
|
-
* is true. The typed
|
|
14998
|
-
* programmatic API leaves it absent. See [`crate::GateOutcomes`].
|
|
15400
|
+
* Total findings across all issue arrays; excludes `next_steps`.
|
|
14999
15401
|
*/
|
|
15000
|
-
|
|
15402
|
+
total_issues: number
|
|
15001
15403
|
/**
|
|
15002
|
-
*
|
|
15003
|
-
|
|
15004
|
-
|
|
15404
|
+
* Entry-point totals per source, when the analysis recorded them.
|
|
15405
|
+
*/
|
|
15406
|
+
entry_points?: (EntryPoints | null)
|
|
15407
|
+
summary: CheckSummary
|
|
15408
|
+
/**
|
|
15409
|
+
* Files not reachable from any entry point. Wrapped in
|
|
15410
|
+
* [`UnusedFileFinding`] so each entry carries a typed `actions` array
|
|
15411
|
+
* natively, replacing the pre-2.76 post-pass injection.
|
|
15412
|
+
*/
|
|
15413
|
+
unused_files: UnusedFileFinding[]
|
|
15414
|
+
/**
|
|
15415
|
+
* Exports never imported by other modules. Wrapped in
|
|
15416
|
+
* [`UnusedExportFinding`] so each entry carries a typed `actions`
|
|
15417
|
+
* array natively.
|
|
15418
|
+
*/
|
|
15419
|
+
unused_exports: UnusedExportFinding[]
|
|
15420
|
+
/**
|
|
15421
|
+
* Type exports never imported by other modules. Wrapped in
|
|
15422
|
+
* [`UnusedTypeFinding`]: the inner [`UnusedExport`] struct is shared
|
|
15423
|
+
* with `unused_exports` but the wrapper emits a type-targeted fix
|
|
15424
|
+
* description.
|
|
15425
|
+
*/
|
|
15426
|
+
unused_types: UnusedTypeFinding[]
|
|
15427
|
+
/**
|
|
15428
|
+
* Exported symbols whose public signature references same-file private
|
|
15429
|
+
* types. Wrapped in [`PrivateTypeLeakFinding`] so each entry carries a
|
|
15430
|
+
* typed `actions` array natively.
|
|
15431
|
+
*/
|
|
15432
|
+
private_type_leaks: PrivateTypeLeakFinding[]
|
|
15433
|
+
/**
|
|
15434
|
+
* Exports marked `@deprecated` that still have at least one consumer in
|
|
15435
|
+
* a reachable file. Wrapped in [`DeprecatedExportInUseFinding`]. Opt-in: the
|
|
15436
|
+
* `deprecated-exports-in-use` rule defaults to `off`.
|
|
15437
|
+
*/
|
|
15438
|
+
deprecated_exports_in_use?: DeprecatedExportInUseFinding[]
|
|
15439
|
+
/**
|
|
15440
|
+
* Dependencies listed in package.json but never imported. Wrapped in
|
|
15441
|
+
* [`UnusedDependencyFinding`] so each entry carries a typed `actions`
|
|
15442
|
+
* array natively. The fix action swaps from `remove-dependency` to
|
|
15443
|
+
* `move-dependency` when `used_in_workspaces` is non-empty.
|
|
15444
|
+
*/
|
|
15445
|
+
unused_dependencies: UnusedDependencyFinding[]
|
|
15446
|
+
/**
|
|
15447
|
+
* Dev dependencies listed in package.json but never imported. Wrapped
|
|
15448
|
+
* in [`UnusedDevDependencyFinding`]: same bare struct as
|
|
15449
|
+
* `unused_dependencies` with a `devDependencies`-targeted fix
|
|
15450
|
+
* description.
|
|
15451
|
+
*/
|
|
15452
|
+
unused_dev_dependencies: UnusedDevDependencyFinding[]
|
|
15453
|
+
/**
|
|
15454
|
+
* Optional dependencies listed in package.json but never imported.
|
|
15455
|
+
* Wrapped in [`UnusedOptionalDependencyFinding`] with an
|
|
15456
|
+
* `optionalDependencies`-targeted fix description.
|
|
15457
|
+
*/
|
|
15458
|
+
unused_optional_dependencies: UnusedOptionalDependencyFinding[]
|
|
15459
|
+
/**
|
|
15460
|
+
* Enum members never accessed. Wrapped in
|
|
15461
|
+
* [`UnusedEnumMemberFinding`] so each entry carries a typed `actions`
|
|
15462
|
+
* array natively.
|
|
15463
|
+
*/
|
|
15464
|
+
unused_enum_members: UnusedEnumMemberFinding[]
|
|
15465
|
+
/**
|
|
15466
|
+
* Class members never accessed. Wrapped in
|
|
15467
|
+
* [`UnusedClassMemberFinding`]: same inner [`UnusedMember`] struct as
|
|
15468
|
+
* `unused_enum_members`, with a class-targeted fix description and the
|
|
15469
|
+
* `auto_fixable: false` default to reflect dependency-injection
|
|
15470
|
+
* patterns.
|
|
15471
|
+
*/
|
|
15472
|
+
unused_class_members: UnusedClassMemberFinding[]
|
|
15473
|
+
/**
|
|
15474
|
+
* Store members (Pinia `state` / `getters` / `actions` key, or a
|
|
15475
|
+
* setup-store returned key) declared but never accessed by any consumer
|
|
15476
|
+
* project-wide. Wrapped in [`UnusedStoreMemberFinding`]: same inner
|
|
15477
|
+
* [`UnusedMember`] struct as `unused_class_members`, with a
|
|
15478
|
+
* store-targeted fix description. Cross-graph: the store binding is
|
|
15479
|
+
* imported (the module is reachable) yet a specific member is dead.
|
|
15480
|
+
*/
|
|
15481
|
+
unused_store_members?: UnusedStoreMemberFinding[]
|
|
15482
|
+
/**
|
|
15483
|
+
* Import specifiers that could not be resolved. Wrapped in
|
|
15484
|
+
* [`UnresolvedImportFinding`] so each entry carries a typed `actions`
|
|
15485
|
+
* array natively.
|
|
15486
|
+
*/
|
|
15487
|
+
unresolved_imports: UnresolvedImportFinding[]
|
|
15488
|
+
/**
|
|
15489
|
+
* Dependencies used in code but not listed in package.json. Wrapped in
|
|
15490
|
+
* [`UnlistedDependencyFinding`].
|
|
15491
|
+
*/
|
|
15492
|
+
unlisted_dependencies: UnlistedDependencyFinding[]
|
|
15493
|
+
/**
|
|
15494
|
+
* Exports with the same name across multiple modules. Wrapped in
|
|
15495
|
+
* [`DuplicateExportFinding`] so each entry carries a typed `actions`
|
|
15496
|
+
* array natively, with the position-0 `add-to-config` `ignoreExports`
|
|
15497
|
+
* snippet wired in at wrapper construction.
|
|
15498
|
+
*/
|
|
15499
|
+
duplicate_exports: DuplicateExportFinding[]
|
|
15500
|
+
/**
|
|
15501
|
+
* Production dependencies only used via type-only imports (could be
|
|
15502
|
+
* devDependencies). Only populated in production mode. Wrapped in
|
|
15503
|
+
* [`TypeOnlyDependencyFinding`].
|
|
15504
|
+
*/
|
|
15505
|
+
type_only_dependencies: TypeOnlyDependencyFinding[]
|
|
15506
|
+
/**
|
|
15507
|
+
* Production dependencies only imported by test files (could be
|
|
15508
|
+
* devDependencies). Wrapped in [`TestOnlyDependencyFinding`].
|
|
15509
|
+
*/
|
|
15510
|
+
test_only_dependencies?: TestOnlyDependencyFinding[]
|
|
15511
|
+
/**
|
|
15512
|
+
* devDependencies imported by production (non-test, non-config) source code
|
|
15513
|
+
* via a runtime/value import; they should be promoted to dependencies.
|
|
15514
|
+
* The promote-side mirror of [`TestOnlyDependencyFinding`]. Wrapped in
|
|
15515
|
+
* [`DevDependencyInProductionFinding`].
|
|
15516
|
+
*/
|
|
15517
|
+
dev_dependencies_in_production?: DevDependencyInProductionFinding[]
|
|
15518
|
+
/**
|
|
15519
|
+
* Circular dependency chains detected in the module graph. Wrapped in
|
|
15520
|
+
* [`CircularDependencyFinding`] so each entry carries a typed `actions`
|
|
15521
|
+
* array natively.
|
|
15522
|
+
*/
|
|
15523
|
+
circular_dependencies: CircularDependencyFinding[]
|
|
15524
|
+
/**
|
|
15525
|
+
* Cycles or self-loops in the re-export edge subgraph (barrel files
|
|
15526
|
+
* re-exporting from each other in a loop). Wrapped in
|
|
15527
|
+
* [`ReExportCycleFinding`] so each entry carries a typed `actions`
|
|
15528
|
+
* array natively (a `refactor-re-export-cycle` informational primary
|
|
15529
|
+
* plus a `suppress-file` secondary; cycles are file-scoped so a single
|
|
15530
|
+
* suppression breaks the cycle).
|
|
15531
|
+
*/
|
|
15532
|
+
re_export_cycles?: ReExportCycleFinding[]
|
|
15533
|
+
/**
|
|
15534
|
+
* Dependency cycles between workspace packages, built from resolved
|
|
15535
|
+
* cross-package imports. Wrapped in [`PackageCycleFinding`] so each
|
|
15536
|
+
* entry carries a typed `actions` array natively.
|
|
15537
|
+
*/
|
|
15538
|
+
package_cycles?: PackageCycleFinding[]
|
|
15539
|
+
/**
|
|
15540
|
+
* Imports that cross architecture boundary rules. Wrapped in
|
|
15541
|
+
* [`BoundaryViolationFinding`] so each entry carries a typed `actions`
|
|
15542
|
+
* array natively.
|
|
15543
|
+
*/
|
|
15544
|
+
boundary_violations?: BoundaryViolationFinding[]
|
|
15545
|
+
/**
|
|
15546
|
+
* Files that matched no architecture boundary zone while
|
|
15547
|
+
* `boundaries.coverage.requireAllFiles` was enabled.
|
|
15548
|
+
*/
|
|
15549
|
+
boundary_coverage_violations?: BoundaryCoverageViolationFinding[]
|
|
15550
|
+
/**
|
|
15551
|
+
* Calls from zoned files to callees forbidden for that zone via
|
|
15552
|
+
* `boundaries.calls.forbidden`. Wrapped in
|
|
15553
|
+
* [`BoundaryCallViolationFinding`] so each entry carries a typed
|
|
15554
|
+
* `actions` array natively.
|
|
15555
|
+
*/
|
|
15556
|
+
boundary_call_violations?: BoundaryCallViolationFinding[]
|
|
15557
|
+
/**
|
|
15558
|
+
* Banned calls, imports, and catalogue-derived effects matched by
|
|
15559
|
+
* declarative rule packs
|
|
15560
|
+
* (`rulePacks` config). Wrapped in [`PolicyViolationFinding`] so each
|
|
15561
|
+
* entry carries a typed `actions` array natively. Each finding carries
|
|
15562
|
+
* its effective per-rule severity.
|
|
15563
|
+
*/
|
|
15564
|
+
policy_violations?: PolicyViolationFinding[]
|
|
15565
|
+
/**
|
|
15566
|
+
* Suppression comments or JSDoc tags that no longer match any issue.
|
|
15567
|
+
*/
|
|
15568
|
+
stale_suppressions?: StaleSuppression[]
|
|
15569
|
+
/**
|
|
15570
|
+
* Entries in package manager catalog sections not referenced by any
|
|
15571
|
+
* workspace package via the catalog: protocol. Supports
|
|
15572
|
+
* `pnpm-workspace.yaml` catalogs and Bun root `package.json` catalogs.
|
|
15573
|
+
* Wrapped in [`UnusedCatalogEntryFinding`] so each entry carries a typed
|
|
15574
|
+
* `actions` array natively, with per-instance `auto_fixable` derived
|
|
15575
|
+
* from `hardcoded_consumers` and the catalog source file.
|
|
15576
|
+
*/
|
|
15577
|
+
unused_catalog_entries?: UnusedCatalogEntryFinding[]
|
|
15578
|
+
/**
|
|
15579
|
+
* Named groups under package manager catalogs sections that declare no
|
|
15580
|
+
* package entries. The top-level catalog: map is not reported. Wrapped in
|
|
15581
|
+
* [`EmptyCatalogGroupFinding`].
|
|
15582
|
+
*/
|
|
15583
|
+
empty_catalog_groups?: EmptyCatalogGroupFinding[]
|
|
15584
|
+
/**
|
|
15585
|
+
* Workspace package.json references to catalogs (`catalog:` or
|
|
15586
|
+
* `catalog:<name>`) that do not declare the consumed package. The package
|
|
15587
|
+
* manager install will error until the named catalog grows to include the
|
|
15588
|
+
* package or the reference is switched / removed. Wrapped in
|
|
15589
|
+
* [`UnresolvedCatalogReferenceFinding`] with the discriminated
|
|
15590
|
+
* `add-catalog-entry` / `update-catalog-reference` primary at position 0.
|
|
15591
|
+
*/
|
|
15592
|
+
unresolved_catalog_references?: UnresolvedCatalogReferenceFinding[]
|
|
15593
|
+
/**
|
|
15594
|
+
* Entries in pnpm-workspace.yaml's overrides section, package.json's
|
|
15595
|
+
* pnpm.overrides block, npm or Bun's top-level overrides object, or Bun's
|
|
15596
|
+
* top-level resolutions object,
|
|
15597
|
+
* whose target package is not declared by any workspace package and is
|
|
15598
|
+
* not present in pnpm-lock.yaml, package-lock.json, npm-shrinkwrap.json,
|
|
15599
|
+
* or bun.lock. Default severity is warn because projects without a
|
|
15600
|
+
* readable lockfile fall back to manifest-only checks; the hint field
|
|
15601
|
+
* flags those conservative cases. When the only lockfile is bun's binary
|
|
15602
|
+
* bun.lockb, resolution cannot be read and the check emits nothing.
|
|
15603
|
+
* Wrapped in [`UnusedDependencyOverrideFinding`].
|
|
15604
|
+
*/
|
|
15605
|
+
unused_dependency_overrides?: UnusedDependencyOverrideFinding[]
|
|
15606
|
+
/**
|
|
15607
|
+
* Package-manager override or resolution entries whose key or value does
|
|
15608
|
+
* not parse in the declaration source's grammar (empty key, empty value,
|
|
15609
|
+
* malformed selector, unbalanced parent matcher). The package manager may
|
|
15610
|
+
* reject or ignore these at install time. Default severity is error. Wrapped in
|
|
15611
|
+
* [`MisconfiguredDependencyOverrideFinding`].
|
|
15612
|
+
*/
|
|
15613
|
+
misconfigured_dependency_overrides?: MisconfiguredDependencyOverrideFinding[]
|
|
15614
|
+
/**
|
|
15615
|
+
* `"use client"` files that export a Next.js server-only / route-segment
|
|
15616
|
+
* config name (e.g. `metadata`, `revalidate`, `GET`). Next.js rejects this
|
|
15617
|
+
* at build time. Wrapped in [`InvalidClientExportFinding`] so each entry
|
|
15618
|
+
* carries a typed `actions` array natively. Default severity is `warn`.
|
|
15619
|
+
*/
|
|
15620
|
+
invalid_client_exports?: InvalidClientExportFinding[]
|
|
15621
|
+
/**
|
|
15622
|
+
* Barrel files that re-export BOTH a `"use client"` origin module AND a
|
|
15623
|
+
* server-only origin module (the Next.js App Router footgun). Wrapped in
|
|
15624
|
+
* [`MixedClientServerBarrelFinding`] so each entry carries a typed
|
|
15625
|
+
* `actions` array natively. Default severity is `warn`.
|
|
15626
|
+
*/
|
|
15627
|
+
mixed_client_server_barrels?: MixedClientServerBarrelFinding[]
|
|
15628
|
+
/**
|
|
15629
|
+
* `"use client"` / `"use server"` directives written as expression
|
|
15630
|
+
* statements after a non-directive statement, so the RSC bundler parses
|
|
15631
|
+
* them as ordinary strings and silently ignores them. Wrapped in
|
|
15632
|
+
* [`MisplacedDirectiveFinding`] so each entry carries a typed `actions`
|
|
15633
|
+
* array natively. Default severity is `warn`.
|
|
15634
|
+
*/
|
|
15635
|
+
misplaced_directives?: MisplacedDirectiveFinding[]
|
|
15636
|
+
/**
|
|
15637
|
+
* Vue `inject(KEY)` / Svelte `getContext(KEY)` calls whose symbol KEY is
|
|
15638
|
+
* provided nowhere in the project (the injected-never-provided dead-half).
|
|
15639
|
+
* Wrapped in [`UnprovidedInjectFinding`] so each entry carries a typed
|
|
15640
|
+
* `actions` array natively. Default severity is `warn`.
|
|
15641
|
+
*/
|
|
15642
|
+
unprovided_injects?: UnprovidedInjectFinding[]
|
|
15643
|
+
/**
|
|
15644
|
+
* Vue/Svelte single-file components that are reachable but rendered nowhere
|
|
15645
|
+
* (the imported-but-never-rendered dead-half). Wrapped in
|
|
15646
|
+
* [`UnrenderedComponentFinding`] so each entry carries a typed `actions`
|
|
15647
|
+
* array natively. Default severity is `warn`.
|
|
15648
|
+
*/
|
|
15649
|
+
unrendered_components?: UnrenderedComponentFinding[]
|
|
15650
|
+
/**
|
|
15651
|
+
* Next.js App Router route files that resolve to the same URL within one
|
|
15652
|
+
* app-root (a guaranteed `next build` failure). Wrapped in
|
|
15653
|
+
* [`RouteCollisionFinding`] so each entry carries a typed `actions` array
|
|
15654
|
+
* natively. One finding per colliding file. Default severity is `warn`.
|
|
15655
|
+
*/
|
|
15656
|
+
route_collisions?: RouteCollisionFinding[]
|
|
15657
|
+
/**
|
|
15658
|
+
* Sibling Next.js dynamic route segments at one tree position using
|
|
15659
|
+
* different param spellings (a dev / runtime error; `next build` does NOT
|
|
15660
|
+
* catch it). Wrapped in [`DynamicSegmentNameConflictFinding`] so each entry
|
|
15661
|
+
* carries a typed `actions` array natively. Default severity is `warn`.
|
|
15662
|
+
*/
|
|
15663
|
+
dynamic_segment_name_conflicts?: DynamicSegmentNameConflictFinding[]
|
|
15664
|
+
/**
|
|
15665
|
+
* Vue `<script setup>` `defineProps`, Svelte 5 `$props()`, and React props
|
|
15666
|
+
* referenced nowhere in their own component. Wrapped in
|
|
15667
|
+
* [`UnusedComponentPropFinding`] so each entry carries a typed `actions`
|
|
15668
|
+
* array natively. Default severity is `warn`.
|
|
15669
|
+
*/
|
|
15670
|
+
unused_component_props?: UnusedComponentPropFinding[]
|
|
15671
|
+
/**
|
|
15672
|
+
* Used optional component inputs absent from inspected reachable callers. Off by default.
|
|
15673
|
+
*/
|
|
15674
|
+
absent_component_props?: AbsentComponentPropFinding[]
|
|
15675
|
+
/**
|
|
15676
|
+
* Vue `<script setup>` `defineEmits` events emitted nowhere in their own SFC
|
|
15677
|
+
* (no `emit('<name>')` call). Wrapped in [`UnusedComponentEmitFinding`] so
|
|
15678
|
+
* each entry carries a typed `actions` array natively. Default severity is
|
|
15679
|
+
* `warn`.
|
|
15680
|
+
*/
|
|
15681
|
+
unused_component_emits?: UnusedComponentEmitFinding[]
|
|
15682
|
+
/**
|
|
15683
|
+
* Angular `@Input()` / signal `input()` / `model()` inputs read nowhere in
|
|
15684
|
+
* their own component (neither the template nor the class body). Wrapped in
|
|
15685
|
+
* [`UnusedComponentInputFinding`] so each entry carries a typed `actions`
|
|
15686
|
+
* array natively. Default severity is `warn`.
|
|
15687
|
+
*/
|
|
15688
|
+
unused_component_inputs?: UnusedComponentInputFinding[]
|
|
15689
|
+
/**
|
|
15690
|
+
* Angular `@Output()` / signal `output()` outputs emitted nowhere in their
|
|
15691
|
+
* own component (no `this.<output>.emit(...)`). Wrapped in
|
|
15692
|
+
* [`UnusedComponentOutputFinding`] so each entry carries a typed `actions`
|
|
15693
|
+
* array natively. Default severity is `warn`.
|
|
15694
|
+
*/
|
|
15695
|
+
unused_component_outputs?: UnusedComponentOutputFinding[]
|
|
15696
|
+
/**
|
|
15697
|
+
* Svelte components dispatching a custom event via `createEventDispatcher()`
|
|
15698
|
+
* whose event name is listened to nowhere project-wide (cross-file
|
|
15699
|
+
* dead-output direction). Wrapped in [`UnusedSvelteEventFinding`] so each
|
|
15700
|
+
* entry carries a typed `actions` array natively. Default severity is
|
|
15701
|
+
* `warn`.
|
|
15702
|
+
*/
|
|
15703
|
+
unused_svelte_events?: UnusedSvelteEventFinding[]
|
|
15704
|
+
/**
|
|
15705
|
+
* Next.js Server Actions (exports of `"use server"` files) that no code in
|
|
15706
|
+
* the project references. Reclassified out of `unused_exports` for
|
|
15707
|
+
* `"use server"` files. Wrapped in [`UnusedServerActionFinding`] so each
|
|
15708
|
+
* entry carries a typed `actions` array natively. Default severity is
|
|
15709
|
+
* `warn`.
|
|
15710
|
+
*/
|
|
15711
|
+
unused_server_actions?: UnusedServerActionFinding[]
|
|
15712
|
+
/**
|
|
15713
|
+
* SvelteKit `+page.{ts,server.ts,js,server.js}` `load()` return-object keys
|
|
15714
|
+
* read by no consumer. Wrapped in [`UnusedLoadDataKeyFinding`] so each entry
|
|
15715
|
+
* carries a typed `actions` array natively. Default severity is `warn`.
|
|
15716
|
+
*/
|
|
15717
|
+
unused_load_data_keys?: UnusedLoadDataKeyFinding[]
|
|
15718
|
+
/**
|
|
15719
|
+
* `true` when the `unused-load-data-key` detector abstained project-wide
|
|
15720
|
+
* because a whole-object use of `page.data` / `$page.data` was seen
|
|
15721
|
+
* somewhere (S1 observability: an empty `unused_load_data_keys` with this
|
|
15722
|
+
* flag set is NOT a clean bill, it means the rule could not run safely).
|
|
15723
|
+
* Serialized only when `true` so the default JSON contract is unchanged.
|
|
15724
|
+
*/
|
|
15725
|
+
unused_load_data_keys_global_abstain?: boolean
|
|
15726
|
+
/**
|
|
15727
|
+
* React/Preact props forwarded unchanged through `>= N` intermediate
|
|
15728
|
+
* pass-through components until a consumer (located per-chain records).
|
|
15729
|
+
* Wrapped in [`PropDrillingChainFinding`] so each entry carries a typed
|
|
15730
|
+
* `actions` array natively. Health signal: the rule defaults to `off`
|
|
15731
|
+
* (opt-in), so this is dormant and populated ONLY when the user enables it.
|
|
15732
|
+
*/
|
|
15733
|
+
prop_drilling_chains?: PropDrillingChainFinding[]
|
|
15734
|
+
/**
|
|
15735
|
+
* React/Preact components whose entire body is a single spread-forwarded
|
|
15736
|
+
* child render (`return <Child {...props}/>`): pure structural indirection,
|
|
15737
|
+
* a candidate for inlining at call sites. Wrapped in [`ThinWrapperFinding`]
|
|
15738
|
+
* so each entry carries a typed `actions` array natively. Health signal: the
|
|
15739
|
+
* rule defaults to `off` (opt-in), so this is dormant and populated ONLY
|
|
15740
|
+
* when the user enables it.
|
|
15741
|
+
*/
|
|
15742
|
+
thin_wrappers?: ThinWrapperFinding[]
|
|
15743
|
+
/**
|
|
15744
|
+
* React/Preact components that participate in a duplicate-prop-shape group:
|
|
15745
|
+
* three or more components across two or more files whose statically-known
|
|
15746
|
+
* prop NAME set is identical after stripping ubiquitous DOM / passthrough
|
|
15747
|
+
* names (a missing shared `Props` type / base component). Wrapped in
|
|
15748
|
+
* [`DuplicatePropShapeFinding`] so each entry carries a typed `actions`
|
|
15749
|
+
* array and its sibling roster natively. Health signal: the rule defaults to
|
|
15750
|
+
* `off` (opt-in), so this is dormant and populated ONLY when the user
|
|
15751
|
+
* enables it.
|
|
15752
|
+
*/
|
|
15753
|
+
duplicate_prop_shapes?: DuplicatePropShapeFinding[]
|
|
15754
|
+
/**
|
|
15755
|
+
* Number of `unused_exports`, `unused_types`, `unused_class_members` and
|
|
15756
|
+
* `unused_enum_members` findings that this run did not report because
|
|
15757
|
+
* their file is an unused file. Deleting the file removes them, so they
|
|
15758
|
+
* add no information. `--show-cascade` or the `showCascade` config key
|
|
15759
|
+
* keeps them in the report, and then this count is zero. The count is
|
|
15760
|
+
* taken after the scope and the rules and before a baseline. Serialized
|
|
15761
|
+
* only when not zero, so a run without such findings keeps its JSON.
|
|
15762
|
+
*/
|
|
15763
|
+
cascade_hidden?: number
|
|
15764
|
+
/**
|
|
15765
|
+
* Count deltas against the matched baseline, in baseline runs.
|
|
15766
|
+
*/
|
|
15767
|
+
baseline_deltas?: (BaselineDeltas | null)
|
|
15768
|
+
/**
|
|
15769
|
+
* Which baseline snapshot was matched, in baseline runs.
|
|
15770
|
+
*/
|
|
15771
|
+
baseline?: (BaselineMatch | null)
|
|
15772
|
+
/**
|
|
15773
|
+
* This run's view of the loaded baseline, present only in baseline runs.
|
|
15774
|
+
* Carries the staleness counts, the advisory verdict and `gate_trips`, the
|
|
15775
|
+
* same boolean `--fail-on-stale-baseline` exits on, so a CI integration
|
|
15776
|
+
* reads one field instead of restating the rule. Read `change_scoped`
|
|
15777
|
+
* before dividing `matched_entries` by `baseline_entries`: a narrowed run
|
|
15778
|
+
* can report `matched_entries: 0` on a healthy baseline.
|
|
15779
|
+
*/
|
|
15780
|
+
baseline_staleness?: (BaselineStaleness | null)
|
|
15781
|
+
/**
|
|
15782
|
+
* The answer to `--finding-id`, present only when the run received one
|
|
15783
|
+
* or more `--finding-id` values. The report then holds only the
|
|
15784
|
+
* requested findings. Read `missing` as resolved only when `conclusive`
|
|
15785
|
+
* is true; a scope, a baseline or a filter can hide a finding that still
|
|
15786
|
+
* exists. See [`crate::FindingIdQuery`].
|
|
15787
|
+
*/
|
|
15788
|
+
finding_id_query?: (FindingIdQuery | null)
|
|
15789
|
+
/**
|
|
15790
|
+
* Regression verdict against the baseline, in `--fail-on-regression` runs.
|
|
15791
|
+
*/
|
|
15792
|
+
regression?: (RegressionResult | null)
|
|
15793
|
+
/**
|
|
15794
|
+
* The verdict of every gate this run evaluated, keyed by name. The CLI
|
|
15795
|
+
* always emits it, with the command's default exit rule in it also when
|
|
15796
|
+
* no flag armed a gate, so a CI integration reads the verdict instead of
|
|
15797
|
+
* guessing from a process status it usually cannot see. A gate fails the
|
|
15798
|
+
* build when `status` is `fail` AND `enforced` is true. The typed
|
|
15799
|
+
* programmatic API runs no CLI gate and leaves it absent. See
|
|
15800
|
+
* [`crate::GateOutcomes`].
|
|
15801
|
+
*/
|
|
15802
|
+
gate_outcomes?: (GateOutcomes | null)
|
|
15803
|
+
/**
|
|
15804
|
+
* Every narrowing or shaping request this run RECEIVED, keyed by name,
|
|
15805
|
+
* absent when it was asked for nothing. An entry whose `status` is not
|
|
15806
|
+
* `applied` means the run could not do what it was asked and reported
|
|
15807
|
+
* something WIDER instead, so what follows is a valid report of a scope
|
|
15808
|
+
* nobody requested. Honoured requests are published too, with
|
|
15809
|
+
* `status: "applied"`, so an absent object means "nothing was asked for",
|
|
15810
|
+
* never "nothing failed". See [`crate::RequestOutcomes`].
|
|
15811
|
+
*/
|
|
15812
|
+
request_outcomes?: (RequestOutcomes | null)
|
|
15813
|
+
/**
|
|
15814
|
+
* Applied Git refs for exact workspace packages. Absent when no package
|
|
15815
|
+
* baselines were selected, including runs with a global changed-since ref.
|
|
15816
|
+
*/
|
|
15817
|
+
package_baselines?: PackageBaselineStatus[]
|
|
15818
|
+
/**
|
|
15819
|
+
* `_meta` block with docs and rule definitions, when `--explain` was
|
|
15820
|
+
* passed.
|
|
15821
|
+
*/
|
|
15822
|
+
_meta?: (Meta | null)
|
|
15823
|
+
/**
|
|
15824
|
+
* Non-fatal diagnostics about the project itself, from all three stages
|
|
15825
|
+
* that record them (issue #473):
|
|
15826
|
+
*
|
|
15827
|
+
* - workspace discovery, at config load: `undeclared-workspace`,
|
|
15828
|
+
* `malformed-package-json`, `glob-matched-no-package-json`,
|
|
15829
|
+
* `malformed-tsconfig`, `tsconfig-reference-dir-missing`;
|
|
15830
|
+
* - source discovery, during the file walk: `skipped-large-file`,
|
|
15831
|
+
* `skipped-minified-file`, `skipped-source-dotdir`,
|
|
15832
|
+
* `excluded-by-default-ignore`, `source-read-failure`,
|
|
15833
|
+
* `source-parse-degraded`;
|
|
15834
|
+
* - dead-code analysis, from the dependency-catalog and override
|
|
15835
|
+
* detectors: `malformed-pnpm-workspace-yaml`,
|
|
15836
|
+
* `bun-lockb-override-resolution-skipped`;
|
|
15837
|
+
* - framework plugins, while they read their own build configs:
|
|
15838
|
+
* `plugin-config-unreadable`, `plugin-effect-not-modeled`;
|
|
15839
|
+
* - the dead-code result, for config patterns that matched nothing:
|
|
15840
|
+
* `ignore-dependencies-glob-unmatched`,
|
|
15841
|
+
* `ignore-findings-pattern-unmatched`.
|
|
15842
|
+
*
|
|
15843
|
+
* Analysis-stage and plugin-stage kinds therefore reach only the envelopes
|
|
15844
|
+
* whose run includes a dead-code analyze pass, never a standalone
|
|
15845
|
+
* `fallow dupes --format json`. `path` is project-root-relative with
|
|
15846
|
+
* forward slashes; the array is omitted when empty. The same list is
|
|
15847
|
+
* repeated on each top-level command's envelope so single-command
|
|
15848
|
+
* consumers see it without having to look at a separate top-level field.
|
|
15849
|
+
*
|
|
15850
|
+
* A diagnostic here is advisory and never withholds a finding. Where an
|
|
15851
|
+
* entry reports a source file this run never fully analyzed
|
|
15852
|
+
* (`source-parse-degraded`, `source-read-failure`, `skipped-large-file`,
|
|
15853
|
+
* `skipped-minified-file`, `skipped-source-dotdir`) it can distort a
|
|
15854
|
+
* verdict, so the affected `unused_files[]`, `unused_exports[]`, and
|
|
15855
|
+
* dependency entries additionally carry the caveat themselves in their own
|
|
15856
|
+
* optional `reachability_caveats[]` array, and a reader who never scrolls
|
|
15857
|
+
* back up to this list still sees it. `fallow fix` reads the same array
|
|
15858
|
+
* and withholds the removal while a caveat stands.
|
|
15859
|
+
*
|
|
15860
|
+
* `excluded-by-default-ignore` is the one source-discovery kind that
|
|
15861
|
+
* reports unseen files WITHOUT raising a caveat. It names a built-in
|
|
15862
|
+
* ignore pattern (`** /dist/**`, `** /build/**`, `** /coverage/**`, or one
|
|
15863
|
+
* of the four minified-bundle globs) that removed candidate source files
|
|
15864
|
+
* from the walk, which is designed behavior on generated output rather
|
|
15865
|
+
* than a degraded run, so it is advisory only and no finding inherits it.
|
|
15866
|
+
* One entry per pattern, never per file, so the array stays bounded on a
|
|
15867
|
+
* project of any size. Gitignored trees are pruned before the walk sees
|
|
15868
|
+
* them and count zero, and `** /node_modules/**` is never reported:
|
|
15869
|
+
* installed dependencies are not the first-party source the kind is
|
|
15870
|
+
* about.
|
|
15871
|
+
*/
|
|
15872
|
+
workspace_diagnostics?: WorkspaceDiagnostic[]
|
|
15873
|
+
/**
|
|
15874
|
+
* Read-only follow-up commands computed from this run's findings, emitted
|
|
15875
|
+
* at the JSON root so an agent acting on the output is pointed at fallow's
|
|
15876
|
+
* adjacent verification capabilities (trace, complexity breakdown, audit,
|
|
15877
|
+
* workspace scoping). Each command is runnable as-is and never mutating;
|
|
15878
|
+
* see [`NextStep`] for both contracts. Omitted when empty or when
|
|
15879
|
+
* `FALLOW_SUGGESTIONS=off`; does NOT contribute to `total_issues`.
|
|
15880
|
+
*/
|
|
15881
|
+
next_steps?: NextStep[]
|
|
15882
|
+
}
|
|
15883
|
+
/**
|
|
15884
|
+
* Bare `fallow --format json` envelope.
|
|
15885
|
+
*/
|
|
15886
|
+
export interface CombinedOutput {
|
|
15887
|
+
schema_version: CombinedSchemaVersion
|
|
15888
|
+
version: ToolVersion
|
|
15889
|
+
elapsed_ms: ElapsedMs
|
|
15890
|
+
/**
|
|
15891
|
+
* The verdict of every gate this run evaluated, keyed by name. The CLI
|
|
15892
|
+
* always emits it, with the default exit rule of each section that ran
|
|
15893
|
+
* (`error-severity-findings`, `health-findings`). Without
|
|
15894
|
+
* `--fail-on-issues` or `--ci`, the machine formats of the combined run
|
|
15895
|
+
* exit 0 for findings, so most entries have `enforced: false`. With one of
|
|
15896
|
+
* these flags, the findings rules and `duplication-threshold` are
|
|
15897
|
+
* `enforced`, the dupes section adds an enforced `duplication-findings`
|
|
15898
|
+
* entry, and every format exits 1 when one fails. For the default
|
|
15899
|
+
* exit rules (`error-severity-findings`,
|
|
15900
|
+
* `health-findings`), `status` gives the verdict of the human run. An
|
|
15901
|
+
* advisory entry can report `fail` without a failure of the human run: an
|
|
15902
|
+
* example is a `stale-baseline` entry that `--fail-on-stale-baseline` did
|
|
15903
|
+
* not arm. A gate fails the build when `status` is `fail` AND `enforced`
|
|
15904
|
+
* is true. The typed
|
|
15905
|
+
* programmatic API leaves it absent. See [`crate::GateOutcomes`].
|
|
15906
|
+
*/
|
|
15907
|
+
gate_outcomes?: (GateOutcomes | null)
|
|
15908
|
+
/**
|
|
15909
|
+
* Every narrowing or shaping request this run RECEIVED, keyed by name,
|
|
15910
|
+
* absent when it was asked for nothing. An entry whose `status` is not
|
|
15911
|
+
* `applied` means the run could not do what it was asked and reported
|
|
15005
15912
|
* something WIDER instead, so what follows is a valid report of a scope
|
|
15006
15913
|
* nobody requested. Honoured requests are published too, with
|
|
15007
15914
|
* `status: "applied"`, so an absent object means "nothing was asked for",
|
|
@@ -17667,6 +18574,88 @@ outcome: SimilarCodeDomainOutcome
|
|
|
17667
18574
|
*/
|
|
17668
18575
|
rationale: string
|
|
17669
18576
|
}
|
|
18577
|
+
/**
|
|
18578
|
+
* Machine-readable readiness of the exact local companion and pinned model.
|
|
18579
|
+
*/
|
|
18580
|
+
export interface SimilarCodeStatusOutput {
|
|
18581
|
+
schema_version: SimilarCodeStatusSchemaVersion
|
|
18582
|
+
version: ToolVersion
|
|
18583
|
+
/**
|
|
18584
|
+
* Companion protocol version.
|
|
18585
|
+
*/
|
|
18586
|
+
protocol_version: number
|
|
18587
|
+
/**
|
|
18588
|
+
* Embedding calculation semantics implemented by the companion.
|
|
18589
|
+
*/
|
|
18590
|
+
embedding_semantics_version: number
|
|
18591
|
+
/**
|
|
18592
|
+
* Exact companion package version.
|
|
18593
|
+
*/
|
|
18594
|
+
companion_version: string
|
|
18595
|
+
/**
|
|
18596
|
+
* Whether every pinned model artifact is ready and verified.
|
|
18597
|
+
*/
|
|
18598
|
+
model_ready: boolean
|
|
18599
|
+
/**
|
|
18600
|
+
* Immutable model identifier.
|
|
18601
|
+
*/
|
|
18602
|
+
model_id: string
|
|
18603
|
+
/**
|
|
18604
|
+
* Immutable model revision.
|
|
18605
|
+
*/
|
|
18606
|
+
model_revision: string
|
|
18607
|
+
/**
|
|
18608
|
+
* Embedding width.
|
|
18609
|
+
*/
|
|
18610
|
+
dimensions: number
|
|
18611
|
+
/**
|
|
18612
|
+
* Maximum tokenizer length.
|
|
18613
|
+
*/
|
|
18614
|
+
max_tokens: number
|
|
18615
|
+
/**
|
|
18616
|
+
* Model license identifier.
|
|
18617
|
+
*/
|
|
18618
|
+
license: string
|
|
18619
|
+
/**
|
|
18620
|
+
* Local model cache directory.
|
|
18621
|
+
*/
|
|
18622
|
+
cache_dir: string
|
|
18623
|
+
/**
|
|
18624
|
+
* Expected download size for all pinned artifacts.
|
|
18625
|
+
*/
|
|
18626
|
+
download_bytes: number
|
|
18627
|
+
/**
|
|
18628
|
+
* Whether source analysis stays local and offline.
|
|
18629
|
+
*/
|
|
18630
|
+
analysis_offline: boolean
|
|
18631
|
+
/**
|
|
18632
|
+
* Whether all installed artifacts passed integrity validation.
|
|
18633
|
+
*/
|
|
18634
|
+
integrity_verified: boolean
|
|
18635
|
+
/**
|
|
18636
|
+
* Actionable readiness problem when the model is unavailable.
|
|
18637
|
+
*/
|
|
18638
|
+
problem?: (string | null)
|
|
18639
|
+
/**
|
|
18640
|
+
* Whether this setup invocation downloaded new bytes.
|
|
18641
|
+
*/
|
|
18642
|
+
downloaded?: (boolean | null)
|
|
18643
|
+
}
|
|
18644
|
+
/**
|
|
18645
|
+
* Result of explicitly clearing the derived project-namespaced vector cache.
|
|
18646
|
+
*/
|
|
18647
|
+
export interface SimilarCodeCacheClearOutput {
|
|
18648
|
+
schema_version: SimilarCodeCacheClearSchemaVersion
|
|
18649
|
+
version: ToolVersion
|
|
18650
|
+
/**
|
|
18651
|
+
* Whether an existing vector cache was removed.
|
|
18652
|
+
*/
|
|
18653
|
+
removed: boolean
|
|
18654
|
+
/**
|
|
18655
|
+
* Whether model artifacts were removed. Version 1 always emits false.
|
|
18656
|
+
*/
|
|
18657
|
+
model_removed: boolean
|
|
18658
|
+
}
|
|
17670
18659
|
/**
|
|
17671
18660
|
* Single CodeClimate-compatible issue inside [`CodeClimateOutput`].
|
|
17672
18661
|
*/
|