@mergesignal/shared 0.2.6 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actionsStepSummary.d.ts.map +1 -1
- package/dist/actionsStepSummary.js +2 -29
- package/dist/collectNarrativeWhyBullets.d.ts +12 -0
- package/dist/collectNarrativeWhyBullets.d.ts.map +1 -0
- package/dist/collectNarrativeWhyBullets.js +104 -0
- package/dist/deriveScanNarrative.d.ts +10 -0
- package/dist/deriveScanNarrative.d.ts.map +1 -0
- package/dist/deriveScanNarrative.js +370 -0
- package/dist/deriveScanNarrative.test.d.ts +2 -0
- package/dist/deriveScanNarrative.test.d.ts.map +1 -0
- package/dist/deriveScanNarrative.test.js +164 -0
- package/dist/extractRepositoryContextFacts.d.ts +16 -0
- package/dist/extractRepositoryContextFacts.d.ts.map +1 -0
- package/dist/extractRepositoryContextFacts.js +71 -0
- package/dist/fixtures/repoIntelligenceFixtures.d.ts +10 -0
- package/dist/fixtures/repoIntelligenceFixtures.d.ts.map +1 -0
- package/dist/fixtures/repoIntelligenceFixtures.js +93 -0
- package/dist/formatInsight.d.ts +2 -2
- package/dist/formatInsight.d.ts.map +1 -1
- package/dist/formatInsight.js +2 -7
- package/dist/formatInsight.test.js +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/narrativeParity.test.d.ts +2 -0
- package/dist/narrativeParity.test.d.ts.map +1 -0
- package/dist/narrativeParity.test.js +64 -0
- package/dist/narrativePresentation.d.ts +50 -0
- package/dist/narrativePresentation.d.ts.map +1 -0
- package/dist/narrativePresentation.js +180 -0
- package/dist/narrativePresentation.test.d.ts +2 -0
- package/dist/narrativePresentation.test.d.ts.map +1 -0
- package/dist/narrativePresentation.test.js +53 -0
- package/dist/normalizeGeneratedText.d.ts +8 -0
- package/dist/normalizeGeneratedText.d.ts.map +1 -0
- package/dist/normalizeGeneratedText.js +31 -0
- package/dist/normalizeGeneratedText.test.d.ts +2 -0
- package/dist/normalizeGeneratedText.test.d.ts.map +1 -0
- package/dist/normalizeGeneratedText.test.js +18 -0
- package/dist/prCheckRunPresentation.d.ts +4 -3
- package/dist/prCheckRunPresentation.d.ts.map +1 -1
- package/dist/prCheckRunPresentation.js +56 -51
- package/dist/prCheckRunPresentation.test.js +2 -2
- package/dist/presentGitHubPrComment.d.ts +9 -0
- package/dist/presentGitHubPrComment.d.ts.map +1 -0
- package/dist/presentGitHubPrComment.js +80 -0
- package/dist/presentScanCardSummary.d.ts +16 -0
- package/dist/presentScanCardSummary.d.ts.map +1 -0
- package/dist/presentScanCardSummary.js +212 -0
- package/dist/productMessaging.d.ts +1 -1
- package/dist/productMessaging.js +1 -1
- package/dist/repoIntelligenceSchema.d.ts +123 -0
- package/dist/repoIntelligenceSchema.d.ts.map +1 -0
- package/dist/repoIntelligenceSchema.js +174 -0
- package/dist/riskVocabulary.js +1 -1
- package/dist/scanCardSummary.d.ts +21 -3
- package/dist/scanCardSummary.d.ts.map +1 -1
- package/dist/scanCardSummary.js +17 -58
- package/dist/scanCardSummary.test.js +25 -8
- package/dist/scanDetailViewModel.d.ts +22 -0
- package/dist/scanDetailViewModel.d.ts.map +1 -1
- package/dist/scanDetailViewModel.js +247 -31
- package/dist/scanDetailViewModel.test.js +29 -3
- package/dist/scanNarrativeFacts.d.ts +92 -0
- package/dist/scanNarrativeFacts.d.ts.map +1 -0
- package/dist/scanNarrativeFacts.js +24 -0
- package/dist/scanSurfaceCopy.d.ts +49 -23
- package/dist/scanSurfaceCopy.d.ts.map +1 -1
- package/dist/scanSurfaceCopy.js +49 -23
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ScanCardSummary, type ScanPipelineStatus } from "./scanCardSummary.js";
|
|
2
|
+
import type { ScanNarrativeFacts } from "./scanNarrativeFacts.js";
|
|
3
|
+
import { type CardExposureDisplay } from "./formatCardExposureDisplay.js";
|
|
4
|
+
import { type MergePosture } from "./riskVocabulary.js";
|
|
5
|
+
import type { ScanResult } from "./types.js";
|
|
6
|
+
export type PresentScanCardSummaryOptions = {
|
|
7
|
+
pipelineStatus?: ScanPipelineStatus;
|
|
8
|
+
findings?: ScanResult["findings"];
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Dashboard card presentation DTO from consumer-agnostic facts.
|
|
12
|
+
*/
|
|
13
|
+
export declare function presentScanCardSummary(facts: ScanNarrativeFacts, options?: PresentScanCardSummaryOptions): ScanCardSummary;
|
|
14
|
+
export type { CardExposureDisplay, MergePosture };
|
|
15
|
+
export declare function exposureFromFacts(facts: ScanNarrativeFacts): CardExposureDisplay | null;
|
|
16
|
+
//# sourceMappingURL=presentScanCardSummary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentScanCardSummary.d.ts","sourceRoot":"","sources":["../src/presentScanCardSummary.ts"],"names":[],"mappings":"AAKA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,gCAAgC,CAAC;AAkBxC,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,6BAA6B,GAAG;IAC1C,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;CACnC,CAAC;AA2HF;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,6BAAkC,GAC1C,eAAe,CA8HjB;AAED,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC;AAElD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,kBAAkB,GACxB,mBAAmB,GAAG,IAAI,CAE5B"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { isCatalogPhrase, phraseForFamily, } from "./cardObservationCatalog.js";
|
|
2
|
+
import { aggregateFindingCounts, deriveRiskIndexBand, SCAN_CARD_SCANNING_SUMMARY, } from "./scanCardSummary.js";
|
|
3
|
+
import { deriveCardExposureDisplay, } from "./formatCardExposureDisplay.js";
|
|
4
|
+
import { formatCardAreaLabels } from "./formatCardAreaLabels.js";
|
|
5
|
+
import { composeContextLineFromFacts, composeVerificationPrompt, formatBlastRadiusDetailLine, formatChangedPackagesShort, formatFrameworksSummary, formatUsageSummaryLine, labelBlastRadiusLevel, labelReachabilityKind, labelRuntimeSurface, } from "./narrativePresentation.js";
|
|
6
|
+
import { normalizeGeneratedText, normalizeGeneratedTextNullable, } from "./normalizeGeneratedText.js";
|
|
7
|
+
import { MERGE_POSTURE_LABEL } from "./riskVocabulary.js";
|
|
8
|
+
import { scanSurfaceCopy } from "./scanSurfaceCopy.js";
|
|
9
|
+
function formatAffectedAreaLabels(facts) {
|
|
10
|
+
const ordered = [];
|
|
11
|
+
for (const area of facts.affectedAreas) {
|
|
12
|
+
const formatted = formatCardAreaLabels([area.label], 1);
|
|
13
|
+
if (formatted[0])
|
|
14
|
+
ordered.push(formatted[0]);
|
|
15
|
+
if (ordered.length >= 2)
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
return ordered;
|
|
19
|
+
}
|
|
20
|
+
function selectPrimaryInsight(facts) {
|
|
21
|
+
const changedGuidance = facts.reviewerGuidance.find((g) => g.scope === "changed" && g.message.trim());
|
|
22
|
+
if (changedGuidance)
|
|
23
|
+
return changedGuidance.message.trim();
|
|
24
|
+
const insight = facts.reviewerGuidance.find((g) => g.kind === "insight" && g.message.trim());
|
|
25
|
+
if (insight)
|
|
26
|
+
return insight.message.trim();
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
function selectSecondaryLines(facts, exclude) {
|
|
30
|
+
const lines = [];
|
|
31
|
+
for (const g of facts.reviewerGuidance) {
|
|
32
|
+
const msg = g.message.trim();
|
|
33
|
+
if (!msg || msg === exclude)
|
|
34
|
+
continue;
|
|
35
|
+
lines.push(msg);
|
|
36
|
+
if (lines.length >= 2)
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
return lines;
|
|
40
|
+
}
|
|
41
|
+
function repositoryContextPhrases(facts, max) {
|
|
42
|
+
const phrases = [];
|
|
43
|
+
const seen = new Set();
|
|
44
|
+
for (const ctx of facts.repositoryContext) {
|
|
45
|
+
const phrase = phraseForFamily(ctx.family);
|
|
46
|
+
if (seen.has(phrase))
|
|
47
|
+
continue;
|
|
48
|
+
seen.add(phrase);
|
|
49
|
+
phrases.push(phrase);
|
|
50
|
+
if (phrases.length >= max)
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
return phrases;
|
|
54
|
+
}
|
|
55
|
+
function buildLegacyObservations(facts, primaryInsight, repoPhraseCap) {
|
|
56
|
+
const repoPhrases = repositoryContextPhrases(facts, repoPhraseCap);
|
|
57
|
+
const secondary = selectSecondaryLines(facts, primaryInsight);
|
|
58
|
+
if (primaryInsight) {
|
|
59
|
+
return {
|
|
60
|
+
operationalObservations: repoPhrases.slice(0, 1),
|
|
61
|
+
supportingLine: repoPhrases[0] && repoPhrases[0] !== primaryInsight
|
|
62
|
+
? repoPhrases[0]
|
|
63
|
+
: (secondary[0] ?? null),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (repoPhrases.length === 0) {
|
|
67
|
+
return { operationalObservations: [], supportingLine: null };
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
operationalObservations: repoPhrases.slice(0, repoPhraseCap),
|
|
71
|
+
supportingLine: repoPhrases.length === 1 ? (secondary[0] ?? null) : null,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function normalizeCardSummary(summary) {
|
|
75
|
+
return {
|
|
76
|
+
...summary,
|
|
77
|
+
headline: normalizeGeneratedText(summary.headline),
|
|
78
|
+
summaryLine: normalizeGeneratedTextNullable(summary.summaryLine),
|
|
79
|
+
supportingLine: normalizeGeneratedTextNullable(summary.supportingLine),
|
|
80
|
+
changedPackagesDisplay: normalizeGeneratedTextNullable(summary.changedPackagesDisplay),
|
|
81
|
+
runtimeSurfaceLabel: normalizeGeneratedTextNullable(summary.runtimeSurfaceLabel),
|
|
82
|
+
reachabilityLabel: normalizeGeneratedTextNullable(summary.reachabilityLabel),
|
|
83
|
+
blastRadiusLabel: normalizeGeneratedTextNullable(summary.blastRadiusLabel),
|
|
84
|
+
primaryInsight: normalizeGeneratedTextNullable(summary.primaryInsight),
|
|
85
|
+
structuralOnlyDisclaimer: normalizeGeneratedTextNullable(summary.structuralOnlyDisclaimer),
|
|
86
|
+
usageSummary: normalizeGeneratedTextNullable(summary.usageSummary),
|
|
87
|
+
verificationLine: normalizeGeneratedTextNullable(summary.verificationLine),
|
|
88
|
+
blastRadiusDetail: normalizeGeneratedTextNullable(summary.blastRadiusDetail),
|
|
89
|
+
frameworksSummary: normalizeGeneratedTextNullable(summary.frameworksSummary),
|
|
90
|
+
affectedAreas: summary.affectedAreas.map((a) => normalizeGeneratedText(a)),
|
|
91
|
+
topAffectedAreas: summary.topAffectedAreas.map((a) => normalizeGeneratedText(a)),
|
|
92
|
+
operationalObservations: summary.operationalObservations.map((p) => {
|
|
93
|
+
const normalized = normalizeGeneratedText(p);
|
|
94
|
+
return isCatalogPhrase(normalized) ? normalized : p;
|
|
95
|
+
}),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Dashboard card presentation DTO from consumer-agnostic facts.
|
|
100
|
+
*/
|
|
101
|
+
export function presentScanCardSummary(facts, options = {}) {
|
|
102
|
+
const pipelineStatus = options.pipelineStatus ?? "done";
|
|
103
|
+
const emptyPresentationFields = {
|
|
104
|
+
narrativeMode: facts.availability.mode,
|
|
105
|
+
codeIntelligenceAvailable: facts.availability.codeIntelligenceAvailable,
|
|
106
|
+
changedPackagesDisplay: null,
|
|
107
|
+
runtimeSurfaceLabel: null,
|
|
108
|
+
reachabilityLabel: null,
|
|
109
|
+
blastRadiusLabel: null,
|
|
110
|
+
affectedAreas: [],
|
|
111
|
+
primaryInsight: null,
|
|
112
|
+
structuralOnlyDisclaimer: null,
|
|
113
|
+
usageSummary: null,
|
|
114
|
+
verificationLine: null,
|
|
115
|
+
blastRadiusDetail: null,
|
|
116
|
+
frameworksSummary: null,
|
|
117
|
+
};
|
|
118
|
+
if (pipelineStatus === "queued" || pipelineStatus === "running") {
|
|
119
|
+
return normalizeCardSummary({
|
|
120
|
+
mergePosture: null,
|
|
121
|
+
riskIndex: null,
|
|
122
|
+
riskIndexBand: null,
|
|
123
|
+
headline: scanSurfaceCopy.pipeline.scanRunning,
|
|
124
|
+
summaryLine: SCAN_CARD_SCANNING_SUMMARY,
|
|
125
|
+
findingCounts: null,
|
|
126
|
+
topAffectedAreas: [],
|
|
127
|
+
operationalObservations: [],
|
|
128
|
+
supportingLine: null,
|
|
129
|
+
...emptyPresentationFields,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
if (pipelineStatus === "failed") {
|
|
133
|
+
return normalizeCardSummary({
|
|
134
|
+
mergePosture: null,
|
|
135
|
+
riskIndex: null,
|
|
136
|
+
riskIndexBand: null,
|
|
137
|
+
headline: scanSurfaceCopy.pipeline.analysisIncomplete,
|
|
138
|
+
summaryLine: null,
|
|
139
|
+
findingCounts: null,
|
|
140
|
+
topAffectedAreas: [],
|
|
141
|
+
operationalObservations: [],
|
|
142
|
+
supportingLine: null,
|
|
143
|
+
...emptyPresentationFields,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
const posture = facts.mergePosture;
|
|
147
|
+
const riskIndex = facts.riskIndex;
|
|
148
|
+
const riskIndexBand = deriveRiskIndexBand(riskIndex);
|
|
149
|
+
const headline = posture
|
|
150
|
+
? MERGE_POSTURE_LABEL[posture]
|
|
151
|
+
: scanSurfaceCopy.checkRun.mergePostureUnavailable;
|
|
152
|
+
const findingCounts = options.findings
|
|
153
|
+
? aggregateFindingCounts(options.findings)
|
|
154
|
+
: null;
|
|
155
|
+
const prIntelligence = facts.availability.mode === "pr_intelligence" ||
|
|
156
|
+
facts.availability.tiersPresent.tier1;
|
|
157
|
+
const changedPackagesDisplay = formatChangedPackagesShort(facts, 2);
|
|
158
|
+
const runtimeSurfaceLabel = labelRuntimeSurface(facts);
|
|
159
|
+
const reachabilityLabel = labelReachabilityKind(facts);
|
|
160
|
+
const blastRadiusLabel = labelBlastRadiusLevel(facts);
|
|
161
|
+
const affectedAreas = formatAffectedAreaLabels(facts);
|
|
162
|
+
const contextLine = composeContextLineFromFacts(facts, {
|
|
163
|
+
includePathSample: prIntelligence,
|
|
164
|
+
maxAreas: 2,
|
|
165
|
+
});
|
|
166
|
+
const structuralOnlyDisclaimer = facts.availability.mode === "graph_fallback" &&
|
|
167
|
+
!facts.availability.tiersPresent.tier1
|
|
168
|
+
? scanSurfaceCopy.narrativeCard.structuralOnlyDisclaimer
|
|
169
|
+
: null;
|
|
170
|
+
const insightMessage = selectPrimaryInsight(facts);
|
|
171
|
+
const primaryInsight = insightMessage ??
|
|
172
|
+
(facts.availability.mode !== "graph_fallback" ? contextLine : null);
|
|
173
|
+
const usageSummary = prIntelligence ? formatUsageSummaryLine(facts, 1) : null;
|
|
174
|
+
const verificationLine = prIntelligence
|
|
175
|
+
? composeVerificationPrompt(facts)
|
|
176
|
+
: null;
|
|
177
|
+
const blastRadiusDetail = prIntelligence
|
|
178
|
+
? formatBlastRadiusDetailLine(facts, 1)
|
|
179
|
+
: null;
|
|
180
|
+
const frameworksSummary = prIntelligence
|
|
181
|
+
? formatFrameworksSummary(facts, 2)
|
|
182
|
+
: null;
|
|
183
|
+
const repoPhraseCap = prIntelligence ? 0 : 3;
|
|
184
|
+
const { operationalObservations, supportingLine } = buildLegacyObservations(facts, primaryInsight, repoPhraseCap);
|
|
185
|
+
return normalizeCardSummary({
|
|
186
|
+
mergePosture: posture,
|
|
187
|
+
riskIndex,
|
|
188
|
+
riskIndexBand,
|
|
189
|
+
headline,
|
|
190
|
+
summaryLine: null,
|
|
191
|
+
findingCounts,
|
|
192
|
+
topAffectedAreas: affectedAreas,
|
|
193
|
+
operationalObservations,
|
|
194
|
+
supportingLine,
|
|
195
|
+
narrativeMode: facts.availability.mode,
|
|
196
|
+
codeIntelligenceAvailable: facts.availability.codeIntelligenceAvailable,
|
|
197
|
+
changedPackagesDisplay,
|
|
198
|
+
runtimeSurfaceLabel,
|
|
199
|
+
reachabilityLabel,
|
|
200
|
+
blastRadiusLabel,
|
|
201
|
+
affectedAreas,
|
|
202
|
+
primaryInsight,
|
|
203
|
+
structuralOnlyDisclaimer,
|
|
204
|
+
usageSummary,
|
|
205
|
+
verificationLine,
|
|
206
|
+
blastRadiusDetail,
|
|
207
|
+
frameworksSummary,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
export function exposureFromFacts(facts) {
|
|
211
|
+
return deriveCardExposureDisplay(facts.riskIndex) ?? null;
|
|
212
|
+
}
|
|
@@ -71,7 +71,7 @@ export declare const productMessaging: {
|
|
|
71
71
|
readonly exposure: "Exposure indicates how broadly the upgrade touches runtime-relevant application areas.";
|
|
72
72
|
readonly exposureCategoriesLead: "On each scanned card, exposure reads as one of:";
|
|
73
73
|
readonly exposureCategories: readonly string[];
|
|
74
|
-
readonly cardBody: "Below the verdict, scanned cards
|
|
74
|
+
readonly cardBody: "Below the verdict, scanned cards lead with the changed package, runtime surface, reachability, blast radius, and affected areas when code intelligence is available; repository-wide graph signals appear only as supporting context.";
|
|
75
75
|
};
|
|
76
76
|
};
|
|
77
77
|
/** Illustrative scan-card example for homepage proof band and getting-started. */
|
package/dist/productMessaging.js
CHANGED
|
@@ -86,7 +86,7 @@ export const productMessaging = {
|
|
|
86
86
|
exposure: "Exposure indicates how broadly the upgrade touches runtime-relevant application areas.",
|
|
87
87
|
exposureCategoriesLead: "On each scanned card, exposure reads as one of:",
|
|
88
88
|
exposureCategories: CARD_EXPOSURE_CATEGORY_LABELS,
|
|
89
|
-
cardBody: "Below the verdict, scanned cards
|
|
89
|
+
cardBody: "Below the verdict, scanned cards lead with the changed package, runtime surface, reachability, blast radius, and affected areas when code intelligence is available; repository-wide graph signals appear only as supporting context.",
|
|
90
90
|
},
|
|
91
91
|
};
|
|
92
92
|
/** Illustrative scan-card example for homepage proof band and getting-started. */
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { BlastRadiusLevel, ReachabilityKind, RuntimeSurfaceKind } from "./scanNarrativeFacts.js";
|
|
3
|
+
declare const looseSurfaceSchema: z.ZodUnion<readonly [z.ZodEnum<{
|
|
4
|
+
unknown: "unknown";
|
|
5
|
+
runtime: "runtime";
|
|
6
|
+
build: "build";
|
|
7
|
+
test: "test";
|
|
8
|
+
}>, z.ZodString, z.ZodObject<{
|
|
9
|
+
kind: z.ZodString;
|
|
10
|
+
}, z.core.$loose>]>;
|
|
11
|
+
declare const looseReachabilitySchema: z.ZodUnion<readonly [z.ZodEnum<{
|
|
12
|
+
unknown: "unknown";
|
|
13
|
+
on_runtime_paths: "on_runtime_paths";
|
|
14
|
+
build_only: "build_only";
|
|
15
|
+
test_only: "test_only";
|
|
16
|
+
unreachable: "unreachable";
|
|
17
|
+
}>, z.ZodString, z.ZodObject<{
|
|
18
|
+
kind: z.ZodString;
|
|
19
|
+
}, z.core.$loose>]>;
|
|
20
|
+
export declare const repoIntelligenceSchema: z.ZodObject<{
|
|
21
|
+
packages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
22
|
+
runtimeSurface: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
23
|
+
unknown: "unknown";
|
|
24
|
+
runtime: "runtime";
|
|
25
|
+
build: "build";
|
|
26
|
+
test: "test";
|
|
27
|
+
}>, z.ZodString, z.ZodObject<{
|
|
28
|
+
kind: z.ZodString;
|
|
29
|
+
}, z.core.$loose>]>>;
|
|
30
|
+
reachability: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
31
|
+
unknown: "unknown";
|
|
32
|
+
on_runtime_paths: "on_runtime_paths";
|
|
33
|
+
build_only: "build_only";
|
|
34
|
+
test_only: "test_only";
|
|
35
|
+
unreachable: "unreachable";
|
|
36
|
+
}>, z.ZodString, z.ZodObject<{
|
|
37
|
+
kind: z.ZodString;
|
|
38
|
+
}, z.core.$loose>]>>;
|
|
39
|
+
packageUsage: z.ZodOptional<z.ZodObject<{
|
|
40
|
+
packageName: z.ZodOptional<z.ZodString>;
|
|
41
|
+
package: z.ZodOptional<z.ZodString>;
|
|
42
|
+
files: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
43
|
+
paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
44
|
+
criticalPaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
45
|
+
areas: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
46
|
+
}, z.core.$loose>>;
|
|
47
|
+
usage: z.ZodOptional<z.ZodObject<{
|
|
48
|
+
packageName: z.ZodOptional<z.ZodString>;
|
|
49
|
+
package: z.ZodOptional<z.ZodString>;
|
|
50
|
+
files: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
51
|
+
paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
52
|
+
criticalPaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
53
|
+
areas: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
54
|
+
}, z.core.$loose>>;
|
|
55
|
+
areas: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
56
|
+
hotspots: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
57
|
+
packageName: z.ZodOptional<z.ZodString>;
|
|
58
|
+
paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
59
|
+
depth: z.ZodOptional<z.ZodNumber>;
|
|
60
|
+
}, z.core.$loose>>>;
|
|
61
|
+
}, z.core.$loose>>>;
|
|
62
|
+
packageUsage: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
63
|
+
packageName: z.ZodOptional<z.ZodString>;
|
|
64
|
+
package: z.ZodOptional<z.ZodString>;
|
|
65
|
+
files: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
66
|
+
paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
67
|
+
criticalPaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
68
|
+
areas: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
69
|
+
}, z.core.$loose>>>;
|
|
70
|
+
blastRadius: z.ZodOptional<z.ZodObject<{
|
|
71
|
+
level: z.ZodOptional<z.ZodEnum<{
|
|
72
|
+
moderate: "moderate";
|
|
73
|
+
narrow: "narrow";
|
|
74
|
+
wide: "wide";
|
|
75
|
+
}>>;
|
|
76
|
+
factors: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
77
|
+
changedPackageCount: z.ZodOptional<z.ZodNumber>;
|
|
78
|
+
}, z.core.$loose>>;
|
|
79
|
+
runtimeSurface: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
80
|
+
unknown: "unknown";
|
|
81
|
+
runtime: "runtime";
|
|
82
|
+
build: "build";
|
|
83
|
+
test: "test";
|
|
84
|
+
}>, z.ZodString, z.ZodObject<{
|
|
85
|
+
kind: z.ZodString;
|
|
86
|
+
}, z.core.$loose>]>>;
|
|
87
|
+
reachability: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
88
|
+
unknown: "unknown";
|
|
89
|
+
on_runtime_paths: "on_runtime_paths";
|
|
90
|
+
build_only: "build_only";
|
|
91
|
+
test_only: "test_only";
|
|
92
|
+
unreachable: "unreachable";
|
|
93
|
+
}>, z.ZodString, z.ZodObject<{
|
|
94
|
+
kind: z.ZodString;
|
|
95
|
+
}, z.core.$loose>]>>;
|
|
96
|
+
applicationAreas: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
97
|
+
id: z.ZodString;
|
|
98
|
+
label: z.ZodString;
|
|
99
|
+
}, z.core.$loose>>>;
|
|
100
|
+
affectedAreas: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
101
|
+
id: z.ZodString;
|
|
102
|
+
label: z.ZodString;
|
|
103
|
+
}, z.core.$loose>>>;
|
|
104
|
+
hotspots: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
105
|
+
packageName: z.ZodString;
|
|
106
|
+
source: z.ZodOptional<z.ZodEnum<{
|
|
107
|
+
code: "code";
|
|
108
|
+
graph: "graph";
|
|
109
|
+
}>>;
|
|
110
|
+
depth: z.ZodOptional<z.ZodNumber>;
|
|
111
|
+
paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
112
|
+
}, z.core.$loose>>>;
|
|
113
|
+
frameworks: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
114
|
+
}, z.core.$loose>;
|
|
115
|
+
export type RepoIntelligence = z.infer<typeof repoIntelligenceSchema>;
|
|
116
|
+
export declare function parseRepoIntelligence(raw: unknown): RepoIntelligence | null;
|
|
117
|
+
export declare function normalizeRuntimeSurfaceKind(raw: string | undefined): RuntimeSurfaceKind;
|
|
118
|
+
export declare function normalizeReachabilityKind(raw: string | undefined): ReachabilityKind;
|
|
119
|
+
export declare function readSurfaceFromLoose(value: z.infer<typeof looseSurfaceSchema> | undefined): RuntimeSurfaceKind | null;
|
|
120
|
+
export declare function readReachabilityFromLoose(value: z.infer<typeof looseReachabilitySchema> | undefined): ReachabilityKind | null;
|
|
121
|
+
export declare function readBlastLevel(level: BlastRadiusLevel | undefined): BlastRadiusLevel | null;
|
|
122
|
+
export {};
|
|
123
|
+
//# sourceMappingURL=repoIntelligenceSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repoIntelligenceSchema.d.ts","sourceRoot":"","sources":["../src/repoIntelligenceSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAcjC,QAAA,MAAM,kBAAkB;;;;;;;mBAItB,CAAC;AAEH,QAAA,MAAM,uBAAuB;;;;;;;;mBAI3B,CAAC;AAyCH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8BnB,CAAC;AAEjB,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAc3E;AAuBD,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,kBAAkB,CAUpB;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,gBAAgB,CAgBlB;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GAAG,SAAS,GACpD,kBAAkB,GAAG,IAAI,CAO3B;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAAG,SAAS,GACzD,gBAAgB,GAAG,IAAI,CAOzB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,gBAAgB,GAAG,SAAS,GAClC,gBAAgB,GAAG,IAAI,CAKzB"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const surfaceKindSchema = z.enum(["runtime", "build", "test", "unknown"]);
|
|
3
|
+
const reachabilityKindSchema = z.enum([
|
|
4
|
+
"on_runtime_paths",
|
|
5
|
+
"build_only",
|
|
6
|
+
"test_only",
|
|
7
|
+
"unreachable",
|
|
8
|
+
"unknown",
|
|
9
|
+
]);
|
|
10
|
+
const blastLevelSchema = z.enum(["narrow", "moderate", "wide"]);
|
|
11
|
+
const looseSurfaceSchema = z.union([
|
|
12
|
+
surfaceKindSchema,
|
|
13
|
+
z.string(),
|
|
14
|
+
z.object({ kind: z.string() }).passthrough(),
|
|
15
|
+
]);
|
|
16
|
+
const looseReachabilitySchema = z.union([
|
|
17
|
+
reachabilityKindSchema,
|
|
18
|
+
z.string(),
|
|
19
|
+
z.object({ kind: z.string() }).passthrough(),
|
|
20
|
+
]);
|
|
21
|
+
const packageUsageEntrySchema = z
|
|
22
|
+
.object({
|
|
23
|
+
packageName: z.string().optional(),
|
|
24
|
+
package: z.string().optional(),
|
|
25
|
+
files: z.array(z.string()).optional(),
|
|
26
|
+
paths: z.array(z.string()).optional(),
|
|
27
|
+
criticalPaths: z.array(z.string()).optional(),
|
|
28
|
+
areas: z.array(z.string()).optional(),
|
|
29
|
+
})
|
|
30
|
+
.passthrough();
|
|
31
|
+
const packageIntelSchema = z
|
|
32
|
+
.object({
|
|
33
|
+
runtimeSurface: looseSurfaceSchema.optional(),
|
|
34
|
+
reachability: looseReachabilitySchema.optional(),
|
|
35
|
+
packageUsage: packageUsageEntrySchema.optional(),
|
|
36
|
+
usage: packageUsageEntrySchema.optional(),
|
|
37
|
+
areas: z.array(z.string()).optional(),
|
|
38
|
+
hotspots: z
|
|
39
|
+
.array(z
|
|
40
|
+
.object({
|
|
41
|
+
packageName: z.string().optional(),
|
|
42
|
+
paths: z.array(z.string()).optional(),
|
|
43
|
+
depth: z.number().optional(),
|
|
44
|
+
})
|
|
45
|
+
.passthrough())
|
|
46
|
+
.optional(),
|
|
47
|
+
})
|
|
48
|
+
.passthrough();
|
|
49
|
+
const areaSchema = z
|
|
50
|
+
.object({
|
|
51
|
+
id: z.string(),
|
|
52
|
+
label: z.string(),
|
|
53
|
+
})
|
|
54
|
+
.passthrough();
|
|
55
|
+
export const repoIntelligenceSchema = z
|
|
56
|
+
.object({
|
|
57
|
+
packages: z.record(z.string(), packageIntelSchema).optional(),
|
|
58
|
+
packageUsage: z.array(packageUsageEntrySchema).optional(),
|
|
59
|
+
blastRadius: z
|
|
60
|
+
.object({
|
|
61
|
+
level: blastLevelSchema.optional(),
|
|
62
|
+
factors: z.array(z.string()).optional(),
|
|
63
|
+
changedPackageCount: z.number().optional(),
|
|
64
|
+
})
|
|
65
|
+
.passthrough()
|
|
66
|
+
.optional(),
|
|
67
|
+
runtimeSurface: looseSurfaceSchema.optional(),
|
|
68
|
+
reachability: looseReachabilitySchema.optional(),
|
|
69
|
+
applicationAreas: z.array(areaSchema).optional(),
|
|
70
|
+
affectedAreas: z.array(areaSchema).optional(),
|
|
71
|
+
hotspots: z
|
|
72
|
+
.array(z
|
|
73
|
+
.object({
|
|
74
|
+
packageName: z.string(),
|
|
75
|
+
source: z.enum(["code", "graph"]).optional(),
|
|
76
|
+
depth: z.number().optional(),
|
|
77
|
+
paths: z.array(z.string()).optional(),
|
|
78
|
+
})
|
|
79
|
+
.passthrough())
|
|
80
|
+
.optional(),
|
|
81
|
+
frameworks: z.array(z.string()).optional(),
|
|
82
|
+
})
|
|
83
|
+
.passthrough();
|
|
84
|
+
export function parseRepoIntelligence(raw) {
|
|
85
|
+
if (raw == null || typeof raw !== "object")
|
|
86
|
+
return null;
|
|
87
|
+
const parsed = repoIntelligenceSchema.safeParse(raw);
|
|
88
|
+
if (!parsed.success)
|
|
89
|
+
return null;
|
|
90
|
+
const value = parsed.data;
|
|
91
|
+
if (Object.keys(value).length === 0)
|
|
92
|
+
return null;
|
|
93
|
+
if (Object.keys(value).length === 1 &&
|
|
94
|
+
value.packages &&
|
|
95
|
+
Object.keys(value.packages).length === 0) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
return value;
|
|
99
|
+
}
|
|
100
|
+
const RUNTIME_SURFACE_ALIASES = [
|
|
101
|
+
[/\bruntime\b/i, "runtime"],
|
|
102
|
+
[/\bproduction\b/i, "runtime"],
|
|
103
|
+
[/\bapi\b/i, "runtime"],
|
|
104
|
+
[/\bbuild\b/i, "build"],
|
|
105
|
+
[/\bdev(?:elopment)?\b/i, "build"],
|
|
106
|
+
[/\btypescript\b/i, "build"],
|
|
107
|
+
[/\btest\b/i, "test"],
|
|
108
|
+
[/\bvitest\b/i, "test"],
|
|
109
|
+
[/\bjest\b/i, "test"],
|
|
110
|
+
];
|
|
111
|
+
const REACHABILITY_ALIASES = [
|
|
112
|
+
[/\bon[_\s-]?runtime/i, "on_runtime_paths"],
|
|
113
|
+
[/\bruntime[_\s-]?path/i, "on_runtime_paths"],
|
|
114
|
+
[/\bdirect\b/i, "on_runtime_paths"],
|
|
115
|
+
[/\bbuild[_\s-]?only/i, "build_only"],
|
|
116
|
+
[/\btest[_\s-]?only/i, "test_only"],
|
|
117
|
+
[/\bunreachable\b/i, "unreachable"],
|
|
118
|
+
];
|
|
119
|
+
export function normalizeRuntimeSurfaceKind(raw) {
|
|
120
|
+
if (!raw?.trim())
|
|
121
|
+
return "unknown";
|
|
122
|
+
const t = raw.trim().toLowerCase();
|
|
123
|
+
if (t === "runtime" || t === "build" || t === "test" || t === "unknown") {
|
|
124
|
+
return t;
|
|
125
|
+
}
|
|
126
|
+
for (const [re, kind] of RUNTIME_SURFACE_ALIASES) {
|
|
127
|
+
if (re.test(t))
|
|
128
|
+
return kind;
|
|
129
|
+
}
|
|
130
|
+
return "unknown";
|
|
131
|
+
}
|
|
132
|
+
export function normalizeReachabilityKind(raw) {
|
|
133
|
+
if (!raw?.trim())
|
|
134
|
+
return "unknown";
|
|
135
|
+
const t = raw.trim().toLowerCase();
|
|
136
|
+
if (t === "on_runtime_paths" ||
|
|
137
|
+
t === "build_only" ||
|
|
138
|
+
t === "test_only" ||
|
|
139
|
+
t === "unreachable" ||
|
|
140
|
+
t === "unknown") {
|
|
141
|
+
return t;
|
|
142
|
+
}
|
|
143
|
+
for (const [re, kind] of REACHABILITY_ALIASES) {
|
|
144
|
+
if (re.test(t))
|
|
145
|
+
return kind;
|
|
146
|
+
}
|
|
147
|
+
return "unknown";
|
|
148
|
+
}
|
|
149
|
+
export function readSurfaceFromLoose(value) {
|
|
150
|
+
if (value == null)
|
|
151
|
+
return null;
|
|
152
|
+
if (typeof value === "string")
|
|
153
|
+
return normalizeRuntimeSurfaceKind(value);
|
|
154
|
+
if (typeof value === "object" && "kind" in value) {
|
|
155
|
+
return normalizeRuntimeSurfaceKind(String(value.kind));
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
export function readReachabilityFromLoose(value) {
|
|
160
|
+
if (value == null)
|
|
161
|
+
return null;
|
|
162
|
+
if (typeof value === "string")
|
|
163
|
+
return normalizeReachabilityKind(value);
|
|
164
|
+
if (typeof value === "object" && "kind" in value) {
|
|
165
|
+
return normalizeReachabilityKind(String(value.kind));
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
export function readBlastLevel(level) {
|
|
170
|
+
if (level === "narrow" || level === "moderate" || level === "wide") {
|
|
171
|
+
return level;
|
|
172
|
+
}
|
|
173
|
+
return null;
|
|
174
|
+
}
|
package/dist/riskVocabulary.js
CHANGED
|
@@ -34,7 +34,7 @@ export function mergePostureFromDecision(decision) {
|
|
|
34
34
|
return null;
|
|
35
35
|
}
|
|
36
36
|
/** Returns the display label for a decision, or a fallback string. */
|
|
37
|
-
export function mergePostureLabel(decision, fallback = "
|
|
37
|
+
export function mergePostureLabel(decision, fallback = "-") {
|
|
38
38
|
const posture = mergePostureFromDecision(decision);
|
|
39
39
|
return posture ? MERGE_POSTURE_LABEL[posture] : fallback;
|
|
40
40
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CatalogPhrase } from "./cardObservationCatalog.js";
|
|
2
|
+
import type { NarrativeAvailabilityMode } from "./scanNarrativeFacts.js";
|
|
2
3
|
import { type MergePosture } from "./riskVocabulary.js";
|
|
3
4
|
import type { Finding, ScanResult } from "./types.js";
|
|
4
5
|
export type ScanPipelineStatus = "queued" | "running" | "done" | "failed";
|
|
@@ -18,14 +19,31 @@ export type ScanCardSummary = {
|
|
|
18
19
|
/** @deprecated Use operationalObservations */
|
|
19
20
|
summaryLine: string | null;
|
|
20
21
|
findingCounts: FindingCountSummary | null;
|
|
21
|
-
/** @deprecated Use
|
|
22
|
+
/** @deprecated Use affectedAreas */
|
|
22
23
|
topAffectedAreas: string[];
|
|
23
|
-
/** Catalog-mapped topology observations (0–3). */
|
|
24
|
+
/** Catalog-mapped topology observations (0–3). Tier 3 repo context — legacy wire field. */
|
|
24
25
|
operationalObservations: CatalogPhrase[];
|
|
25
26
|
/** Optional quiet subline when exactly one observation is shown. */
|
|
26
27
|
supportingLine: string | null;
|
|
28
|
+
narrativeMode: NarrativeAvailabilityMode;
|
|
29
|
+
codeIntelligenceAvailable: boolean;
|
|
30
|
+
changedPackagesDisplay: string | null;
|
|
31
|
+
runtimeSurfaceLabel: string | null;
|
|
32
|
+
reachabilityLabel: string | null;
|
|
33
|
+
blastRadiusLabel: string | null;
|
|
34
|
+
affectedAreas: string[];
|
|
35
|
+
primaryInsight: string | null;
|
|
36
|
+
structuralOnlyDisclaimer: string | null;
|
|
37
|
+
/** One-line usage hint from packageUsage paths or areas. */
|
|
38
|
+
usageSummary: string | null;
|
|
39
|
+
/** Single verification prompt from changed-scope guidance or usage. */
|
|
40
|
+
verificationLine: string | null;
|
|
41
|
+
/** Optional blast factor subline when factors exist. */
|
|
42
|
+
blastRadiusDetail: string | null;
|
|
43
|
+
/** Short framework list (max 2 on card). */
|
|
44
|
+
frameworksSummary: string | null;
|
|
27
45
|
};
|
|
28
|
-
export declare const SCAN_CARD_SCANNING_SUMMARY = "Waiting for results
|
|
46
|
+
export declare const SCAN_CARD_SCANNING_SUMMARY = "Waiting for results...";
|
|
29
47
|
export type PipelineCompletionEvidence = {
|
|
30
48
|
scannedAt?: string | null;
|
|
31
49
|
decision?: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanCardSummary.d.ts","sourceRoot":"","sources":["../src/scanCardSummary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scanCardSummary.d.ts","sourceRoot":"","sources":["../src/scanCardSummary.ts"],"names":[],"mappings":"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"}
|