projscan 4.14.0 → 4.16.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/README.md +103 -21
- package/dist/cli/commands/assess.js +36 -2
- package/dist/cli/commands/assess.js.map +1 -1
- package/dist/cli/commands/evidencePack.js +2 -0
- package/dist/cli/commands/evidencePack.js.map +1 -1
- package/dist/cli/commands/prove.js +172 -23
- package/dist/cli/commands/prove.js.map +1 -1
- package/dist/cli/commands/startConsole.d.ts +2 -2
- package/dist/cli/commands/startConsole.js +2 -260
- package/dist/cli/commands/startConsole.js.map +1 -1
- package/dist/cli/commands/startConsoleExecution.d.ts +5 -0
- package/dist/cli/commands/startConsoleExecution.js +108 -0
- package/dist/cli/commands/startConsoleExecution.js.map +1 -0
- package/dist/cli/commands/startConsoleMission.d.ts +6 -0
- package/dist/cli/commands/startConsoleMission.js +157 -0
- package/dist/cli/commands/startConsoleMission.js.map +1 -0
- package/dist/cli/commands/startMissionBundle.js +24 -27
- package/dist/cli/commands/startMissionBundle.js.map +1 -1
- package/dist/core/adoption.d.ts +8 -81
- package/dist/core/adoption.js +4 -549
- package/dist/core/adoption.js.map +1 -1
- package/dist/core/adoptionFirstRunDiagnostics.d.ts +20 -0
- package/dist/core/adoptionFirstRunDiagnostics.js +240 -0
- package/dist/core/adoptionFirstRunDiagnostics.js.map +1 -0
- package/dist/core/adoptionMcpConfig.d.ts +27 -0
- package/dist/core/adoptionMcpConfig.js +123 -0
- package/dist/core/adoptionMcpConfig.js.map +1 -0
- package/dist/core/adoptionMcpDoctor.d.ts +23 -0
- package/dist/core/adoptionMcpDoctor.js +87 -0
- package/dist/core/adoptionMcpDoctor.js.map +1 -0
- package/dist/core/adoptionWorkflowRecipes.d.ts +14 -0
- package/dist/core/adoptionWorkflowRecipes.js +110 -0
- package/dist/core/adoptionWorkflowRecipes.js.map +1 -0
- package/dist/core/baseframeAssessment.d.ts +9 -0
- package/dist/core/baseframeAssessment.js +471 -0
- package/dist/core/baseframeAssessment.js.map +1 -0
- package/dist/core/bugHunt.js +26 -255
- package/dist/core/bugHunt.js.map +1 -1
- package/dist/core/bugHuntPreflightFindings.d.ts +2 -1
- package/dist/core/bugHuntPreflightFindings.js +20 -0
- package/dist/core/bugHuntPreflightFindings.js.map +1 -1
- package/dist/core/bugHuntReportAssembly.d.ts +20 -0
- package/dist/core/bugHuntReportAssembly.js +179 -0
- package/dist/core/bugHuntReportAssembly.js.map +1 -0
- package/dist/core/bugHuntSourceFindings.d.ts +3 -0
- package/dist/core/bugHuntSourceFindings.js +61 -0
- package/dist/core/bugHuntSourceFindings.js.map +1 -0
- package/dist/core/dogfood.js +4 -393
- package/dist/core/dogfood.js.map +1 -1
- package/dist/core/dogfoodMarketValidation.d.ts +5 -0
- package/dist/core/dogfoodMarketValidation.js +265 -0
- package/dist/core/dogfoodMarketValidation.js.map +1 -0
- package/dist/core/dogfoodRepoEvaluation.d.ts +4 -0
- package/dist/core/dogfoodRepoEvaluation.js +137 -0
- package/dist/core/dogfoodRepoEvaluation.js.map +1 -0
- package/dist/core/evidenceComment.js +50 -13
- package/dist/core/evidenceComment.js.map +1 -1
- package/dist/core/feedback.js +2 -252
- package/dist/core/feedback.js.map +1 -1
- package/dist/core/feedbackIntakeClassifier.d.ts +2 -0
- package/dist/core/feedbackIntakeClassifier.js +255 -0
- package/dist/core/feedbackIntakeClassifier.js.map +1 -0
- package/dist/core/intentRouterKeywordToolGuards.js +1 -55
- package/dist/core/intentRouterKeywordToolGuards.js.map +1 -1
- package/dist/core/intentRouterKeywordWeights.js +13 -28
- package/dist/core/intentRouterKeywordWeights.js.map +1 -1
- package/dist/core/intentRouterProductGuardSignals.d.ts +3 -0
- package/dist/core/intentRouterProductGuardSignals.js +59 -0
- package/dist/core/intentRouterProductGuardSignals.js.map +1 -0
- package/dist/core/markdownSafety.d.ts +3 -0
- package/dist/core/markdownSafety.js +14 -0
- package/dist/core/markdownSafety.js.map +1 -0
- package/dist/core/preflight.d.ts +2 -0
- package/dist/core/preflight.js.map +1 -1
- package/dist/core/preflightChangedFiles.d.ts +2 -0
- package/dist/core/preflightChangedFiles.js +1 -1
- package/dist/core/preflightChangedFiles.js.map +1 -1
- package/dist/core/preflightInputs.d.ts +2 -0
- package/dist/core/preflightInputs.js +5 -2
- package/dist/core/preflightInputs.js.map +1 -1
- package/dist/core/proofLedger.d.ts +5 -1
- package/dist/core/proofLedger.js +161 -12
- package/dist/core/proofLedger.js.map +1 -1
- package/dist/core/proofReplay.d.ts +9 -0
- package/dist/core/proofReplay.js +164 -0
- package/dist/core/proofReplay.js.map +1 -0
- package/dist/core/proofSufficiency.d.ts +19 -0
- package/dist/core/proofSufficiency.js +425 -0
- package/dist/core/proofSufficiency.js.map +1 -0
- package/dist/core/prove.d.ts +6 -0
- package/dist/core/prove.js +277 -87
- package/dist/core/prove.js.map +1 -1
- package/dist/core/qualityScorecard.js +8 -238
- package/dist/core/qualityScorecard.js.map +1 -1
- package/dist/core/qualityScorecardDimensions.d.ts +14 -0
- package/dist/core/qualityScorecardDimensions.js +99 -0
- package/dist/core/qualityScorecardDimensions.js.map +1 -0
- package/dist/core/qualityScorecardRisks.d.ts +8 -0
- package/dist/core/qualityScorecardRisks.js +107 -0
- package/dist/core/qualityScorecardRisks.js.map +1 -0
- package/dist/core/qualityScorecardSignals.d.ts +20 -0
- package/dist/core/qualityScorecardSignals.js +59 -0
- package/dist/core/qualityScorecardSignals.js.map +1 -0
- package/dist/core/releaseEvidence.d.ts +1 -0
- package/dist/core/releaseEvidence.js +15 -40
- package/dist/core/releaseEvidence.js.map +1 -1
- package/dist/core/releaseEvidenceBaseline.js +4 -1
- package/dist/core/releaseEvidenceBaseline.js.map +1 -1
- package/dist/core/releaseEvidenceProofReceipt.d.ts +6 -0
- package/dist/core/releaseEvidenceProofReceipt.js +140 -0
- package/dist/core/releaseEvidenceProofReceipt.js.map +1 -0
- package/dist/core/releaseEvidenceVerdict.d.ts +5 -2
- package/dist/core/releaseEvidenceVerdict.js +39 -1
- package/dist/core/releaseEvidenceVerdict.js.map +1 -1
- package/dist/core/repositoryScanner.d.ts +1 -0
- package/dist/core/repositoryScanner.js +5 -4
- package/dist/core/repositoryScanner.js.map +1 -1
- package/dist/core/sessionResources.d.ts +14 -2
- package/dist/core/sessionResources.js +3 -3
- package/dist/core/sessionResources.js.map +1 -1
- package/dist/core/startInputs.d.ts +1 -1
- package/dist/core/startIntentTargets.d.ts +1 -1
- package/dist/core/startIntentTargets.js +1 -16
- package/dist/core/startIntentTargets.js.map +1 -1
- package/dist/core/startMissionInputStatusPolicy.d.ts +7 -0
- package/dist/core/startMissionInputStatusPolicy.js +74 -0
- package/dist/core/startMissionInputStatusPolicy.js.map +1 -0
- package/dist/core/startMissionPolicy.d.ts +6 -15
- package/dist/core/startMissionPolicy.js +4 -305
- package/dist/core/startMissionPolicy.js.map +1 -1
- package/dist/core/startMissionProofPolicy.d.ts +6 -0
- package/dist/core/startMissionProofPolicy.js +84 -0
- package/dist/core/startMissionProofPolicy.js.map +1 -0
- package/dist/core/startMissionRiskPolicy.d.ts +4 -0
- package/dist/core/startMissionRiskPolicy.js +85 -0
- package/dist/core/startMissionRiskPolicy.js.map +1 -0
- package/dist/core/startMissionRoutingPolicy.d.ts +6 -0
- package/dist/core/startMissionRoutingPolicy.js +67 -0
- package/dist/core/startMissionRoutingPolicy.js.map +1 -0
- package/dist/core/startMode.d.ts +1 -2
- package/dist/core/startMode.js +4 -151
- package/dist/core/startMode.js.map +1 -1
- package/dist/core/startModeIntentPolicy.d.ts +12 -0
- package/dist/core/startModeIntentPolicy.js +41 -0
- package/dist/core/startModeIntentPolicy.js.map +1 -0
- package/dist/core/startModeRoutingPolicy.d.ts +4 -0
- package/dist/core/startModeRoutingPolicy.js +117 -0
- package/dist/core/startModeRoutingPolicy.js.map +1 -0
- package/dist/core/startSearchQueryTargets.d.ts +1 -0
- package/dist/core/startSearchQueryTargets.js +17 -0
- package/dist/core/startSearchQueryTargets.js.map +1 -0
- package/dist/core/workplan.d.ts +3 -2
- package/dist/core/workplan.js +11 -585
- package/dist/core/workplan.js.map +1 -1
- package/dist/core/workplanCoordinationTasks.d.ts +3 -0
- package/dist/core/workplanCoordinationTasks.js +82 -0
- package/dist/core/workplanCoordinationTasks.js.map +1 -0
- package/dist/core/workplanModeTasks.d.ts +2 -0
- package/dist/core/workplanModeTasks.js +192 -0
- package/dist/core/workplanModeTasks.js.map +1 -0
- package/dist/core/workplanPreflightTasks.d.ts +2 -0
- package/dist/core/workplanPreflightTasks.js +126 -0
- package/dist/core/workplanPreflightTasks.js.map +1 -0
- package/dist/core/workplanQualitySignals.d.ts +7 -0
- package/dist/core/workplanQualitySignals.js +63 -0
- package/dist/core/workplanQualitySignals.js.map +1 -0
- package/dist/core/workplanReport.d.ts +4 -0
- package/dist/core/workplanReport.js +79 -0
- package/dist/core/workplanReport.js.map +1 -0
- package/dist/core/workplanRiskOwnership.d.ts +5 -0
- package/dist/core/workplanRiskOwnership.js +97 -0
- package/dist/core/workplanRiskOwnership.js.map +1 -0
- package/dist/core/workplanSuggestedActions.d.ts +2 -0
- package/dist/core/workplanSuggestedActions.js +43 -0
- package/dist/core/workplanSuggestedActions.js.map +1 -0
- package/dist/mcp/tools/prove.js +23 -17
- package/dist/mcp/tools/prove.js.map +1 -1
- package/dist/projscan-sbom.cdx.json +6 -6
- package/dist/publicCore.d.ts +1 -0
- package/dist/publicCore.js +1 -0
- package/dist/publicCore.js.map +1 -1
- package/dist/tool-manifest.json +2 -2
- package/dist/types/baseframe.d.ts +75 -0
- package/dist/types/baseframe.js +2 -0
- package/dist/types/baseframe.js.map +1 -0
- package/dist/types/config.d.ts +15 -0
- package/dist/types/evidencePack.d.ts +21 -0
- package/dist/types/prove.d.ts +79 -0
- package/dist/types.d.ts +1 -0
- package/dist/utils/changedFiles.js +57 -16
- package/dist/utils/changedFiles.js.map +1 -1
- package/dist/utils/config.js +2 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/configProofRecipes.d.ts +2 -0
- package/dist/utils/configProofRecipes.js +91 -0
- package/dist/utils/configProofRecipes.js.map +1 -0
- package/docs/GUIDE.md +120 -19
- package/docs/integrations/baseframe-suite-v1.md +163 -0
- package/package.json +2 -1
package/dist/types/prove.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AssessConfidence, AssessEvidenceStrengthLevel, RiskDeltaSnapshot } from './assess.js';
|
|
2
|
+
import type { ProofRecipeConfig } from './config.js';
|
|
2
3
|
import type { ProofLedgerRecord } from './proofLedger.js';
|
|
3
4
|
export type ProveMode = 'intent' | 'changed' | 'record' | 'run';
|
|
4
5
|
export type ProveVerdict = 'ready' | 'needs-review' | 'blocked';
|
|
@@ -7,6 +8,11 @@ export type ProveProofStatus = 'not-run' | 'missing' | 'partial' | 'passed' | 'f
|
|
|
7
8
|
export type ProveRiskDeltaDirection = 'improved' | 'worse' | 'flat';
|
|
8
9
|
export type ProveReviewerDecision = 'safe-to-review' | 'needs-focused-review' | 'stop';
|
|
9
10
|
export type ProveProofCommandStatus = 'passed' | 'failed' | 'missing' | 'stale';
|
|
11
|
+
export type ProveProofReplayStatus = 'verified' | 'needs-proof' | 'stale' | 'failed' | 'drifted';
|
|
12
|
+
export type ProveProofReplayEventKind = 'contract' | 'change-set' | 'proof-command' | 'proof-sufficiency' | 'receipt';
|
|
13
|
+
export type ProveProofReplayEventStatus = 'passed' | 'missing' | 'missing-contract' | 'stale' | 'failed' | 'drifted' | 'strong' | 'adequate' | 'weak' | ProveProofReplayStatus;
|
|
14
|
+
export type ProveRiskSurface = 'production' | 'test' | 'documentation' | 'config' | 'security' | 'public-api' | 'cli' | 'mcp' | 'dependency' | 'generated' | 'custom' | 'unknown';
|
|
15
|
+
export type ProveProofSufficiencyStatus = 'strong' | 'adequate' | 'weak' | 'missing' | 'stale' | 'failed';
|
|
10
16
|
export type ProveChangedFileKind = 'allowed-production' | 'expected-test' | 'documentation' | 'config' | 'security-sensitive' | 'generated' | 'forbidden' | 'unexpected-production' | 'unexpected-test' | 'unknown';
|
|
11
17
|
export interface ProveTrustMemorySummary {
|
|
12
18
|
status: string;
|
|
@@ -25,6 +31,7 @@ export interface ProveVerifiedWorkflow {
|
|
|
25
31
|
staleProof: boolean;
|
|
26
32
|
missingProof: boolean;
|
|
27
33
|
failedProof: boolean;
|
|
34
|
+
proofSufficiencyStatus?: ProveProofSufficiencyStatus;
|
|
28
35
|
}
|
|
29
36
|
export interface ProveChangedFileClassification {
|
|
30
37
|
file: string;
|
|
@@ -42,6 +49,8 @@ export interface ProveContract {
|
|
|
42
49
|
likelyTests: string[];
|
|
43
50
|
missingRegressionTests: string[];
|
|
44
51
|
proofCommands: string[];
|
|
52
|
+
proofRequirements?: ProveProofRequirement[];
|
|
53
|
+
teamProofRecipes?: ProveMatchedProofRecipe[];
|
|
45
54
|
safeChangeShape: string;
|
|
46
55
|
rollbackPlan: string;
|
|
47
56
|
confidence: AssessConfidence;
|
|
@@ -58,6 +67,24 @@ export interface ProveContract {
|
|
|
58
67
|
riskDelta: RiskDeltaSnapshot;
|
|
59
68
|
verifiedWorkflow: ProveVerifiedWorkflow;
|
|
60
69
|
}
|
|
70
|
+
export interface ProveProofRequirement {
|
|
71
|
+
id: string;
|
|
72
|
+
surface: ProveRiskSurface;
|
|
73
|
+
files: string[];
|
|
74
|
+
requiredCommands: string[];
|
|
75
|
+
requiredReview: string;
|
|
76
|
+
reason: string;
|
|
77
|
+
source?: 'inferred' | 'recipe';
|
|
78
|
+
recipeId?: string;
|
|
79
|
+
requiredReviewers?: string[];
|
|
80
|
+
}
|
|
81
|
+
export interface ProveMatchedProofRecipe extends ProofRecipeConfig {
|
|
82
|
+
matchedFiles: string[];
|
|
83
|
+
forbiddenTouched?: string[];
|
|
84
|
+
missingCommands?: string[];
|
|
85
|
+
failedCommands?: string[];
|
|
86
|
+
staleCommands?: string[];
|
|
87
|
+
}
|
|
61
88
|
export interface ProveReceiptScope {
|
|
62
89
|
status: ProveScopeStatus;
|
|
63
90
|
changedFiles: string[];
|
|
@@ -88,18 +115,46 @@ export interface ProveProofCommandEvidence {
|
|
|
88
115
|
command: string;
|
|
89
116
|
status: ProveProofCommandStatus;
|
|
90
117
|
fresh: boolean;
|
|
118
|
+
source?: ProofLedgerRecord['source'];
|
|
91
119
|
exitCode?: number;
|
|
92
120
|
durationMs?: number;
|
|
93
121
|
completedAt?: string;
|
|
122
|
+
recordedChangedFiles?: string[];
|
|
123
|
+
recordedChangedFileFingerprint?: string;
|
|
94
124
|
outputSummary?: string;
|
|
95
125
|
logPath?: string;
|
|
96
126
|
staleReason?: string;
|
|
97
127
|
}
|
|
128
|
+
export interface ProveProofReplay {
|
|
129
|
+
status: ProveProofReplayStatus;
|
|
130
|
+
summary: string;
|
|
131
|
+
events: ProveProofReplayEvent[];
|
|
132
|
+
changedAfterProof: string[];
|
|
133
|
+
replayCommand: string;
|
|
134
|
+
receiptFingerprint: string;
|
|
135
|
+
}
|
|
136
|
+
export interface ProveProofReplayEvent {
|
|
137
|
+
kind: ProveProofReplayEventKind;
|
|
138
|
+
status: ProveProofReplayEventStatus;
|
|
139
|
+
summary: string;
|
|
140
|
+
command?: string;
|
|
141
|
+
completedAt?: string;
|
|
142
|
+
changedFiles?: string[];
|
|
143
|
+
changedAfterProof?: string[];
|
|
144
|
+
source?: ProofLedgerRecord['source'];
|
|
145
|
+
}
|
|
98
146
|
export interface ProveReceipt {
|
|
99
147
|
summary: string;
|
|
100
148
|
commitReadiness: ProveVerdict;
|
|
101
149
|
scope: ProveReceiptScope;
|
|
102
150
|
proofStatus: ProveReceiptProofStatus;
|
|
151
|
+
proofSufficiency?: ProveProofSufficiency;
|
|
152
|
+
proofReplay?: ProveProofReplay;
|
|
153
|
+
teamProofRecipes?: ProveMatchedProofRecipe[];
|
|
154
|
+
requiredReviewers?: string[];
|
|
155
|
+
recipeForbiddenTouched?: string[];
|
|
156
|
+
recipeDrift?: string[];
|
|
157
|
+
recipeGaps?: string[];
|
|
103
158
|
riskDelta: RiskDeltaSnapshot;
|
|
104
159
|
riskDeltaDirection: ProveRiskDeltaDirection;
|
|
105
160
|
reviewerDecision: ProveReviewerDecision;
|
|
@@ -108,6 +163,30 @@ export interface ProveReceipt {
|
|
|
108
163
|
reviewerGuidance: string;
|
|
109
164
|
verifiedWorkflow: ProveVerifiedWorkflow;
|
|
110
165
|
}
|
|
166
|
+
export interface ProveProofSufficiency {
|
|
167
|
+
status: ProveProofSufficiencyStatus;
|
|
168
|
+
summary: string;
|
|
169
|
+
requirements: ProveProofRequirementResult[];
|
|
170
|
+
gaps: string[];
|
|
171
|
+
weakRequirements: string[];
|
|
172
|
+
missingRequirements: string[];
|
|
173
|
+
staleRequirements: string[];
|
|
174
|
+
failedRequirements: string[];
|
|
175
|
+
}
|
|
176
|
+
export interface ProveProofRequirementResult {
|
|
177
|
+
id: string;
|
|
178
|
+
surface: ProveRiskSurface;
|
|
179
|
+
status: ProveProofSufficiencyStatus;
|
|
180
|
+
files: string[];
|
|
181
|
+
requiredCommands: string[];
|
|
182
|
+
matchedCommands: string[];
|
|
183
|
+
requiredReview: string;
|
|
184
|
+
reason: string;
|
|
185
|
+
gaps: string[];
|
|
186
|
+
source?: 'inferred' | 'recipe';
|
|
187
|
+
recipeId?: string;
|
|
188
|
+
requiredReviewers?: string[];
|
|
189
|
+
}
|
|
111
190
|
export interface ProveReport {
|
|
112
191
|
schemaVersion: 1;
|
|
113
192
|
mode: ProveMode;
|
package/dist/types.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export type * from './types/trial.js';
|
|
|
25
25
|
export type * from './types/understand.js';
|
|
26
26
|
export type * from './types/qualityScorecard.js';
|
|
27
27
|
export type * from './types/assess.js';
|
|
28
|
+
export type * from './types/baseframe.js';
|
|
28
29
|
export type * from './types/simulate.js';
|
|
29
30
|
export type * from './types/prove.js';
|
|
30
31
|
export type * from './types/proofLedger.js';
|
|
@@ -21,6 +21,7 @@ export async function getChangedFiles(rootPath, explicitBaseRef) {
|
|
|
21
21
|
uncommittedFiles: [],
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
+
const explicit = Boolean(explicitBaseRef);
|
|
24
25
|
const candidates = explicitBaseRef ? [explicitBaseRef] : [...DEFAULT_BASE_REFS, 'HEAD~1'];
|
|
25
26
|
let lastError = null;
|
|
26
27
|
for (const ref of candidates) {
|
|
@@ -29,6 +30,21 @@ export async function getChangedFiles(rootPath, explicitBaseRef) {
|
|
|
29
30
|
lastError = `ref not found: ${ref}`;
|
|
30
31
|
continue;
|
|
31
32
|
}
|
|
33
|
+
const resolvesToHead = await refResolvesToHead(rootPath, ref);
|
|
34
|
+
if (resolvesToHead) {
|
|
35
|
+
const reason = `base ref "${ref}" resolves to HEAD and would hide committed changes`;
|
|
36
|
+
if (explicit) {
|
|
37
|
+
return {
|
|
38
|
+
available: false,
|
|
39
|
+
reason,
|
|
40
|
+
baseRef: null,
|
|
41
|
+
files: [],
|
|
42
|
+
uncommittedFiles: [],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
lastError = reason;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
32
48
|
try {
|
|
33
49
|
const { files, uncommittedFiles } = await diffNames(rootPath, ref);
|
|
34
50
|
return { available: true, baseRef: ref, files, uncommittedFiles };
|
|
@@ -71,6 +87,24 @@ export async function getChangedFiles(rootPath, explicitBaseRef) {
|
|
|
71
87
|
uncommittedFiles: [],
|
|
72
88
|
};
|
|
73
89
|
}
|
|
90
|
+
async function refResolvesToHead(rootPath, ref) {
|
|
91
|
+
try {
|
|
92
|
+
const [head, candidate] = await Promise.all([
|
|
93
|
+
resolveRef(rootPath, 'HEAD'),
|
|
94
|
+
resolveRef(rootPath, ref),
|
|
95
|
+
]);
|
|
96
|
+
return head === candidate;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async function resolveRef(rootPath, ref) {
|
|
103
|
+
const { stdout } = await execFileAsync('git', ['rev-parse', '--verify', ref], {
|
|
104
|
+
cwd: rootPath,
|
|
105
|
+
});
|
|
106
|
+
return stdout.trim();
|
|
107
|
+
}
|
|
74
108
|
async function isGitRepo(rootPath) {
|
|
75
109
|
try {
|
|
76
110
|
await execFileAsync('git', ['rev-parse', '--git-dir'], { cwd: rootPath });
|
|
@@ -90,7 +124,7 @@ async function refExists(rootPath, ref) {
|
|
|
90
124
|
}
|
|
91
125
|
}
|
|
92
126
|
async function diffNames(rootPath, baseRef) {
|
|
93
|
-
const { stdout } = await execFileAsync('git', ['diff', '
|
|
127
|
+
const { stdout } = await execFileAsync('git', ['diff', '-z', '--name-only', `${baseRef}...HEAD`], { cwd: rootPath, encoding: 'buffer', maxBuffer: 10 * 1024 * 1024 });
|
|
94
128
|
// Also include uncommitted changes so PR-style runs cover work-in-progress edits.
|
|
95
129
|
let uncommitted = [];
|
|
96
130
|
try {
|
|
@@ -100,32 +134,39 @@ async function diffNames(rootPath, baseRef) {
|
|
|
100
134
|
// ignore
|
|
101
135
|
}
|
|
102
136
|
const set = new Set();
|
|
103
|
-
for (const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
set.add(normalizePath(line));
|
|
137
|
+
for (const file of parseNulList(stdout)) {
|
|
138
|
+
if (file)
|
|
139
|
+
set.add(normalizePath(file));
|
|
107
140
|
}
|
|
108
141
|
for (const f of uncommitted)
|
|
109
142
|
set.add(f);
|
|
110
143
|
return { files: [...set].sort(), uncommittedFiles: uncommitted };
|
|
111
144
|
}
|
|
112
145
|
async function statusNames(rootPath) {
|
|
113
|
-
const { stdout } = await execFileAsync('git', ['status', '--porcelain', '--untracked-files=all'], { cwd: rootPath, maxBuffer: 10 * 1024 * 1024 });
|
|
146
|
+
const { stdout } = await execFileAsync('git', ['status', '--porcelain=v1', '-z', '--untracked-files=all'], { cwd: rootPath, encoding: 'buffer', maxBuffer: 10 * 1024 * 1024 });
|
|
114
147
|
const out = new Set();
|
|
115
|
-
|
|
116
|
-
|
|
148
|
+
const entries = parseNulList(stdout);
|
|
149
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
150
|
+
const raw = entries[index];
|
|
151
|
+
if (!raw)
|
|
152
|
+
continue;
|
|
153
|
+
const status = raw.slice(0, 2);
|
|
154
|
+
const file = raw.slice(3);
|
|
155
|
+
if (!file)
|
|
117
156
|
continue;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const withoutStatus = raw.replace(/^..\s+/, '').trim();
|
|
122
|
-
const renamed = withoutStatus.includes(' -> ')
|
|
123
|
-
? withoutStatus.split(' -> ').pop()
|
|
124
|
-
: withoutStatus;
|
|
125
|
-
out.add(normalizePath(renamed));
|
|
157
|
+
out.add(normalizePath(file));
|
|
158
|
+
if (isRenameOrCopyStatus(status))
|
|
159
|
+
index += 1;
|
|
126
160
|
}
|
|
127
161
|
return [...out];
|
|
128
162
|
}
|
|
163
|
+
function parseNulList(stdout) {
|
|
164
|
+
const value = Buffer.isBuffer(stdout) ? stdout.toString('utf-8') : stdout;
|
|
165
|
+
return value.split('\0').filter((entry) => entry.length > 0);
|
|
166
|
+
}
|
|
167
|
+
function isRenameOrCopyStatus(status) {
|
|
168
|
+
return status.includes('R') || status.includes('C');
|
|
169
|
+
}
|
|
129
170
|
function normalizePath(p) {
|
|
130
171
|
return p.split(path.sep).join('/');
|
|
131
172
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changedFiles.js","sourceRoot":"","sources":["../../src/utils/changedFiles.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"changedFiles.js","sourceRoot":"","sources":["../../src/utils/changedFiles.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/config.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { applyBaseRef, applyDisableRules, applyFailOn, applyIgnore, applyMinScore, applySuppress, } from './configBasics.js';
|
|
2
2
|
import { applyHotspots } from './configHotspots.js';
|
|
3
3
|
import { applyMonorepo } from './configMonorepo.js';
|
|
4
|
+
import { applyProofRecipes } from './configProofRecipes.js';
|
|
4
5
|
import { applyReportPolicies } from './configReportPolicies.js';
|
|
5
6
|
import { applyScan } from './configScan.js';
|
|
6
7
|
import { applySeverityOverrides } from './configSeverity.js';
|
|
@@ -28,6 +29,7 @@ function normalize(input) {
|
|
|
28
29
|
applySuppress(obj, out);
|
|
29
30
|
applySeverityOverrides(obj, out);
|
|
30
31
|
applyReportPolicies(obj, out);
|
|
32
|
+
applyProofRecipes(obj, out);
|
|
31
33
|
applyMonorepo(obj, out);
|
|
32
34
|
applyTaint(obj, out);
|
|
33
35
|
return out;
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,YAAqB;IACtE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvB,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpB,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,YAAqB;IACtE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvB,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpB,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
const MAX_RECIPES = 50;
|
|
2
|
+
const MAX_LIST_ITEMS = 50;
|
|
3
|
+
const MAX_STRING_LENGTH = 300;
|
|
4
|
+
const ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,99}$/;
|
|
5
|
+
const REVIEWER_PATTERN = /^[@A-Za-z0-9][A-Za-z0-9._/-]{0,99}$/;
|
|
6
|
+
export function applyProofRecipes(obj, out) {
|
|
7
|
+
if (!Array.isArray(obj.proofRecipes))
|
|
8
|
+
return;
|
|
9
|
+
const seenIds = new Set();
|
|
10
|
+
const recipes = [];
|
|
11
|
+
for (const recipe of obj.proofRecipes.slice(0, MAX_RECIPES)) {
|
|
12
|
+
const normalized = normalizeProofRecipe(recipe);
|
|
13
|
+
if (!normalized || seenIds.has(normalized.id))
|
|
14
|
+
continue;
|
|
15
|
+
seenIds.add(normalized.id);
|
|
16
|
+
recipes.push(normalized);
|
|
17
|
+
}
|
|
18
|
+
if (recipes.length > 0)
|
|
19
|
+
out.proofRecipes = recipes;
|
|
20
|
+
}
|
|
21
|
+
function normalizeProofRecipe(raw) {
|
|
22
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
23
|
+
return null;
|
|
24
|
+
const obj = raw;
|
|
25
|
+
const id = cleanRecipeId(obj.id);
|
|
26
|
+
const matches = cleanPatternList(obj.matches);
|
|
27
|
+
const requiredCommands = cleanCommandList(obj.requiredCommands);
|
|
28
|
+
if (!id || matches.length === 0 || requiredCommands.length === 0)
|
|
29
|
+
return null;
|
|
30
|
+
const recipe = {
|
|
31
|
+
id,
|
|
32
|
+
matches,
|
|
33
|
+
requiredCommands,
|
|
34
|
+
};
|
|
35
|
+
const requiredReviewers = cleanReviewerList(obj.requiredReviewers);
|
|
36
|
+
const forbiddenFiles = cleanPatternList(obj.forbiddenFiles);
|
|
37
|
+
const riskSurface = cleanString(obj.riskSurface);
|
|
38
|
+
const reason = cleanString(obj.reason);
|
|
39
|
+
if (requiredReviewers.length > 0)
|
|
40
|
+
recipe.requiredReviewers = requiredReviewers;
|
|
41
|
+
if (forbiddenFiles.length > 0)
|
|
42
|
+
recipe.forbiddenFiles = forbiddenFiles;
|
|
43
|
+
if (riskSurface)
|
|
44
|
+
recipe.riskSurface = riskSurface;
|
|
45
|
+
if (reason)
|
|
46
|
+
recipe.reason = reason;
|
|
47
|
+
return recipe;
|
|
48
|
+
}
|
|
49
|
+
function cleanCommandList(value) {
|
|
50
|
+
if (!Array.isArray(value))
|
|
51
|
+
return [];
|
|
52
|
+
return unique(value
|
|
53
|
+
.slice(0, MAX_LIST_ITEMS)
|
|
54
|
+
.filter((entry) => typeof entry === 'string' && !entry.includes('\0') && !/[\r\n]/.test(entry))
|
|
55
|
+
.map(cleanString)
|
|
56
|
+
.filter((entry) => Boolean(entry)));
|
|
57
|
+
}
|
|
58
|
+
function cleanPatternList(value) {
|
|
59
|
+
if (!Array.isArray(value))
|
|
60
|
+
return [];
|
|
61
|
+
return unique(value
|
|
62
|
+
.slice(0, MAX_LIST_ITEMS)
|
|
63
|
+
.map(cleanString)
|
|
64
|
+
.filter((entry) => typeof entry === 'string' && !/[`<>]/.test(entry)));
|
|
65
|
+
}
|
|
66
|
+
function cleanReviewerList(value) {
|
|
67
|
+
if (!Array.isArray(value))
|
|
68
|
+
return [];
|
|
69
|
+
return unique(value
|
|
70
|
+
.slice(0, MAX_LIST_ITEMS)
|
|
71
|
+
.map(cleanString)
|
|
72
|
+
.filter((entry) => typeof entry === 'string' && REVIEWER_PATTERN.test(entry)));
|
|
73
|
+
}
|
|
74
|
+
function cleanRecipeId(value) {
|
|
75
|
+
const id = cleanString(value);
|
|
76
|
+
return id && ID_PATTERN.test(id) ? id : undefined;
|
|
77
|
+
}
|
|
78
|
+
function cleanString(value) {
|
|
79
|
+
if (typeof value !== 'string')
|
|
80
|
+
return undefined;
|
|
81
|
+
if (/[\0\r\n\t]/.test(value))
|
|
82
|
+
return undefined;
|
|
83
|
+
const trimmed = value.trim().replace(/\s+/g, ' ');
|
|
84
|
+
if (!trimmed || trimmed.length > MAX_STRING_LENGTH)
|
|
85
|
+
return undefined;
|
|
86
|
+
return trimmed;
|
|
87
|
+
}
|
|
88
|
+
function unique(values) {
|
|
89
|
+
return [...new Set(values)];
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=configProofRecipes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configProofRecipes.js","sourceRoot":"","sources":["../../src/utils/configProofRecipes.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,UAAU,GAAG,oCAAoC,CAAC;AACxD,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AAE/D,MAAM,UAAU,iBAAiB,CAAC,GAA4B,EAAE,GAAmB;IACjF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,OAAO;IAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;QAC5D,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAAE,SAAS;QACxD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC;AACrD,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAY;IACxC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvE,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAChE,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9E,MAAM,MAAM,GAAsB;QAChC,EAAE;QACF,OAAO;QACP,gBAAgB;KACjB,CAAC;IACF,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnE,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC/E,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC;IACtE,IAAI,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;IAClD,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,MAAM,CACX,KAAK;SACF,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC;SACxB,MAAM,CACL,CAAC,KAAK,EAAmB,EAAE,CACzB,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAC9E;SACA,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,MAAM,CACX,KAAK;SACF,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC;SACxB,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACzF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,MAAM,CACX,KAAK;SACF,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC;SACxB,GAAG,CAAC,WAAW,CAAC;SAChB,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACjG,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,iBAAiB;QAAE,OAAO,SAAS,CAAC;IACrE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,MAAM,CAAI,MAAW;IAC5B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9B,CAAC"}
|