@shakecodeslikecray/whiterose 1.0.12 → 2.0.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/dist/index.d.ts CHANGED
@@ -647,6 +647,141 @@ declare const CodebaseUnderstanding: z.ZodObject<{
647
647
  };
648
648
  }>;
649
649
  type CodebaseUnderstanding = z.infer<typeof CodebaseUnderstanding>;
650
+ declare const DomainType: z.ZodString;
651
+ type DomainType = z.infer<typeof DomainType>;
652
+ declare const RiskLevel: z.ZodEnum<["critical", "high", "medium"]>;
653
+ type RiskLevel = z.infer<typeof RiskLevel>;
654
+ declare const HotPath: z.ZodObject<{
655
+ file: z.ZodString;
656
+ reason: z.ZodString;
657
+ riskLevel: z.ZodEnum<["critical", "high", "medium"]>;
658
+ }, "strip", z.ZodTypeAny, {
659
+ file: string;
660
+ reason: string;
661
+ riskLevel: "critical" | "high" | "medium";
662
+ }, {
663
+ file: string;
664
+ reason: string;
665
+ riskLevel: "critical" | "high" | "medium";
666
+ }>;
667
+ type HotPath = z.infer<typeof HotPath>;
668
+ declare const CustomPassConfig: z.ZodObject<{
669
+ id: z.ZodString;
670
+ phase: z.ZodEnum<["unit", "integration", "e2e"]>;
671
+ category: z.ZodString;
672
+ description: z.ZodString;
673
+ }, "strip", z.ZodTypeAny, {
674
+ id: string;
675
+ description: string;
676
+ category: string;
677
+ phase: "unit" | "integration" | "e2e";
678
+ }, {
679
+ id: string;
680
+ description: string;
681
+ category: string;
682
+ phase: "unit" | "integration" | "e2e";
683
+ }>;
684
+ type CustomPassConfig = z.infer<typeof CustomPassConfig>;
685
+ declare const SkipReason: z.ZodObject<{
686
+ passName: z.ZodString;
687
+ reason: z.ZodString;
688
+ }, "strip", z.ZodTypeAny, {
689
+ passName: string;
690
+ reason: string;
691
+ }, {
692
+ passName: string;
693
+ reason: string;
694
+ }>;
695
+ type SkipReason = z.infer<typeof SkipReason>;
696
+ declare const RiskProfile: z.ZodObject<{
697
+ version: z.ZodString;
698
+ generatedAt: z.ZodString;
699
+ domains: z.ZodArray<z.ZodString, "many">;
700
+ sensitiveDataTypes: z.ZodArray<z.ZodString, "many">;
701
+ externalDependencies: z.ZodArray<z.ZodString, "many">;
702
+ hotPaths: z.ZodArray<z.ZodObject<{
703
+ file: z.ZodString;
704
+ reason: z.ZodString;
705
+ riskLevel: z.ZodEnum<["critical", "high", "medium"]>;
706
+ }, "strip", z.ZodTypeAny, {
707
+ file: string;
708
+ reason: string;
709
+ riskLevel: "critical" | "high" | "medium";
710
+ }, {
711
+ file: string;
712
+ reason: string;
713
+ riskLevel: "critical" | "high" | "medium";
714
+ }>, "many">;
715
+ customPasses: z.ZodArray<z.ZodObject<{
716
+ id: z.ZodString;
717
+ phase: z.ZodEnum<["unit", "integration", "e2e"]>;
718
+ category: z.ZodString;
719
+ description: z.ZodString;
720
+ }, "strip", z.ZodTypeAny, {
721
+ id: string;
722
+ description: string;
723
+ category: string;
724
+ phase: "unit" | "integration" | "e2e";
725
+ }, {
726
+ id: string;
727
+ description: string;
728
+ category: string;
729
+ phase: "unit" | "integration" | "e2e";
730
+ }>, "many">;
731
+ skippedPasses: z.ZodArray<z.ZodObject<{
732
+ passName: z.ZodString;
733
+ reason: z.ZodString;
734
+ }, "strip", z.ZodTypeAny, {
735
+ passName: string;
736
+ reason: string;
737
+ }, {
738
+ passName: string;
739
+ reason: string;
740
+ }>, "many">;
741
+ }, "strip", z.ZodTypeAny, {
742
+ version: string;
743
+ generatedAt: string;
744
+ domains: string[];
745
+ sensitiveDataTypes: string[];
746
+ externalDependencies: string[];
747
+ hotPaths: {
748
+ file: string;
749
+ reason: string;
750
+ riskLevel: "critical" | "high" | "medium";
751
+ }[];
752
+ customPasses: {
753
+ id: string;
754
+ description: string;
755
+ category: string;
756
+ phase: "unit" | "integration" | "e2e";
757
+ }[];
758
+ skippedPasses: {
759
+ passName: string;
760
+ reason: string;
761
+ }[];
762
+ }, {
763
+ version: string;
764
+ generatedAt: string;
765
+ domains: string[];
766
+ sensitiveDataTypes: string[];
767
+ externalDependencies: string[];
768
+ hotPaths: {
769
+ file: string;
770
+ reason: string;
771
+ riskLevel: "critical" | "high" | "medium";
772
+ }[];
773
+ customPasses: {
774
+ id: string;
775
+ description: string;
776
+ category: string;
777
+ phase: "unit" | "integration" | "e2e";
778
+ }[];
779
+ skippedPasses: {
780
+ passName: string;
781
+ reason: string;
782
+ }[];
783
+ }>;
784
+ type RiskProfile = z.infer<typeof RiskProfile>;
650
785
  declare const FileHash: z.ZodObject<{
651
786
  path: z.ZodString;
652
787
  hash: z.ZodString;
@@ -1249,6 +1384,7 @@ interface ScanContext {
1249
1384
  understanding: CodebaseUnderstanding;
1250
1385
  staticResults: StaticFinding[];
1251
1386
  config?: WhiteroseConfig;
1387
+ riskProfile?: RiskProfile;
1252
1388
  }
1253
1389
  interface ScanProgress {
1254
1390
  onPhaseStart?: (phase: string, passCount: number) => void;
@@ -1317,6 +1453,14 @@ declare class CoreScanner {
1317
1453
  * Build E2E pass jobs - these see static + unit + integration findings
1318
1454
  */
1319
1455
  private buildE2EPassJobs;
1456
+ /**
1457
+ * Build custom pass jobs from risk profile
1458
+ */
1459
+ private buildCustomPassJobs;
1460
+ /**
1461
+ * Boost confidence for custom pass findings (targeted = higher signal-to-noise)
1462
+ */
1463
+ private boostCustomPassConfidence;
1320
1464
  private buildQuickScanPrompt;
1321
1465
  private parseResponse;
1322
1466
  private parseBugData;
@@ -1636,4 +1780,4 @@ declare function analyzeSmells(cwd: string): Promise<CodeSmell[]>;
1636
1780
  */
1637
1781
  declare function getSmellsSummary(cwd: string): Promise<string>;
1638
1782
 
1639
- export { type AdversarialResult, BehavioralContract, Bug, BugCategory, BugSeverity, BugStatus, CacheState, CodePathStep, CodebaseUnderstanding, ConfidenceLevel, ConfidenceScore, CoreScanner, FeatureIntent, FileHash, FindingKind, type GitStatus, MonorepoConfig, type MonorepoInfo, type Package, PackageConfig, PriorityLevel, type PromptExecutor, type PromptOptions, type PromptResult, ProviderType, ScanMeta, ScanResult, ScanSummary, SeverityBreakdown, type StaticAnalysisResult, WhiteroseConfig, analyzeContracts, analyzeCrossFile, analyzeSmells, applyFix, batchFix, buildDependencyGraph, commitFix, createFixBranch, dependsOn, detectMonorepo, detectProvider, findCircularDependencies, generateIntentDocument, getAvailableExecutors, getChangedFiles, getCommandEffectsSummary, getContractSummary, getCrossPackageDependencies, getCurrentBranch, getDependentFiles, getDiff, getExecutor, getFileAtHead, getGitStatus, getImportsOf, getPackageFiles, getPackageForFile, getSmellsSummary, getStagedDiff, groupFilesByPackage, hasUncommittedChanges, isGitRepo, isProviderAvailable, loadConfig, loadUnderstanding, mergeIntentWithUnderstanding, outputMarkdown, outputSarif, parseIntentDocument, popStash, resetFile, runStaticAnalysis, saveConfig, scanCodebase, stashChanges };
1783
+ export { type AdversarialResult, BehavioralContract, Bug, BugCategory, BugSeverity, BugStatus, CacheState, CodePathStep, CodebaseUnderstanding, ConfidenceLevel, ConfidenceScore, CoreScanner, CustomPassConfig, DomainType, FeatureIntent, FileHash, FindingKind, type GitStatus, HotPath, MonorepoConfig, type MonorepoInfo, type Package, PackageConfig, PriorityLevel, type PromptExecutor, type PromptOptions, type PromptResult, ProviderType, RiskLevel, RiskProfile, ScanMeta, ScanResult, ScanSummary, SeverityBreakdown, SkipReason, type StaticAnalysisResult, WhiteroseConfig, analyzeContracts, analyzeCrossFile, analyzeSmells, applyFix, batchFix, buildDependencyGraph, commitFix, createFixBranch, dependsOn, detectMonorepo, detectProvider, findCircularDependencies, generateIntentDocument, getAvailableExecutors, getChangedFiles, getCommandEffectsSummary, getContractSummary, getCrossPackageDependencies, getCurrentBranch, getDependentFiles, getDiff, getExecutor, getFileAtHead, getGitStatus, getImportsOf, getPackageFiles, getPackageForFile, getSmellsSummary, getStagedDiff, groupFilesByPackage, hasUncommittedChanges, isGitRepo, isProviderAvailable, loadConfig, loadUnderstanding, mergeIntentWithUnderstanding, outputMarkdown, outputSarif, parseIntentDocument, popStash, resetFile, runStaticAnalysis, saveConfig, scanCodebase, stashChanges };
package/dist/index.js CHANGED
@@ -191,6 +191,33 @@ var CodebaseUnderstanding = z.object({
191
191
  packages: z.array(z.string()).optional()
192
192
  })
193
193
  });
194
+ var DomainType = z.string();
195
+ var RiskLevel = z.enum(["critical", "high", "medium"]);
196
+ var HotPath = z.object({
197
+ file: z.string(),
198
+ reason: z.string(),
199
+ riskLevel: RiskLevel
200
+ });
201
+ var CustomPassConfig = z.object({
202
+ id: z.string(),
203
+ phase: z.enum(["unit", "integration", "e2e"]),
204
+ category: z.string(),
205
+ description: z.string()
206
+ });
207
+ var SkipReason = z.object({
208
+ passName: z.string(),
209
+ reason: z.string()
210
+ });
211
+ var RiskProfile = z.object({
212
+ version: z.string(),
213
+ generatedAt: z.string().datetime(),
214
+ domains: z.array(DomainType),
215
+ sensitiveDataTypes: z.array(z.string()),
216
+ externalDependencies: z.array(z.string()),
217
+ hotPaths: z.array(HotPath),
218
+ customPasses: z.array(CustomPassConfig),
219
+ skippedPasses: z.array(SkipReason)
220
+ });
194
221
  var FileHash = z.object({
195
222
  path: z.string(),
196
223
  hash: z.string(),
@@ -1675,6 +1702,67 @@ IMPORTANT:
1675
1702
  - If unsure, report it with confidence="low"
1676
1703
  - Aim for thoroughness - finding 10 potential issues is better than finding 0 confirmed bugs`;
1677
1704
  }
1705
+ function buildCustomPassPrompt(customPass, ctx) {
1706
+ const { projectType, framework, language, totalFiles } = ctx;
1707
+ const staticSection = ctx.staticFindings?.length ? `
1708
+ ## STATIC ANALYSIS SIGNALS
1709
+ ${ctx.staticFindings.slice(0, 15).map((f) => `- ${f.tool}: ${f.file}:${f.line} - ${f.message}`).join("\n")}
1710
+ ` : "";
1711
+ return `You are a security specialist performing a TARGETED analysis: ${customPass.id.toUpperCase()}.
1712
+
1713
+ ## YOUR SINGLE MISSION
1714
+ ${customPass.description}
1715
+
1716
+ ## PROJECT CONTEXT
1717
+ - Type: ${projectType}
1718
+ - Framework: ${framework || "Unknown"}
1719
+ - Language: ${language}
1720
+ - Size: ${totalFiles} files
1721
+ ${staticSection}
1722
+ ## METHODOLOGY
1723
+
1724
+ 1. Search the codebase for patterns relevant to: ${customPass.category}
1725
+ 2. Read files that match and analyze for the specific issues described above
1726
+ 3. Trace data flow to confirm the issue is real
1727
+ 4. Report all confirmed and suspected issues
1728
+
1729
+ ## REPORTING FORMAT
1730
+
1731
+ When you find an issue:
1732
+
1733
+ <json>
1734
+ {
1735
+ "type": "bug",
1736
+ "data": {
1737
+ "file": "src/path/to/file.ts",
1738
+ "line": 42,
1739
+ "endLine": 45,
1740
+ "title": "Short description of the issue",
1741
+ "description": "Explanation of why this is problematic and potential impact.",
1742
+ "kind": "bug|smell",
1743
+ "category": "${customPass.category}",
1744
+ "severity": "critical|high|medium|low",
1745
+ "confidence": "high|medium|low",
1746
+ "evidence": [
1747
+ "Evidence point 1",
1748
+ "Evidence point 2"
1749
+ ],
1750
+ "suggestedFix": "Optional: how to fix it"
1751
+ }
1752
+ }
1753
+ </json>
1754
+
1755
+ Progress updates:
1756
+ ###SCANNING:path/to/file.ts
1757
+
1758
+ When done:
1759
+ ###COMPLETE
1760
+
1761
+ ## BEGIN
1762
+
1763
+ Search for ${customPass.id} patterns. Read files that match. Report issues as you find them.
1764
+ This is a TARGETED pass - focus exclusively on: ${customPass.description}`;
1765
+ }
1678
1766
 
1679
1767
  // src/providers/prompts/constants.ts
1680
1768
  var PROJECT_TYPES_PROMPT = `PROJECT TYPE OPTIONS (pick the best fit):
@@ -2640,38 +2728,68 @@ var CoreScanner = class {
2640
2728
  const startTime = Date.now();
2641
2729
  this.passErrors = [];
2642
2730
  const pipeline = getFullAnalysisPipeline();
2643
- const unitPasses = pipeline[0].passes;
2644
- const integrationPasses = pipeline[1].passes;
2645
- const e2ePasses = pipeline[2].passes;
2646
- const totalPasses = unitPasses.length + integrationPasses.length + e2ePasses.length;
2731
+ let unitPasses = pipeline[0].passes;
2732
+ let integrationPasses = pipeline[1].passes;
2733
+ let e2ePasses = pipeline[2].passes;
2734
+ const rp = context.riskProfile;
2735
+ const skippedNames = new Set(rp?.skippedPasses.map((s) => s.passName) || []);
2736
+ const customUnitPasses = rp?.customPasses.filter((p) => p.phase === "unit") || [];
2737
+ const customIntegrationPasses = rp?.customPasses.filter((p) => p.phase === "integration") || [];
2738
+ const customE2EPasses = rp?.customPasses.filter((p) => p.phase === "e2e") || [];
2739
+ if (skippedNames.size > 0) {
2740
+ unitPasses = unitPasses.filter((p) => !skippedNames.has(p));
2741
+ integrationPasses = integrationPasses.filter((p) => !skippedNames.has(p));
2742
+ e2ePasses = e2ePasses.filter((p) => !skippedNames.has(p));
2743
+ }
2744
+ const totalStandard = unitPasses.length + integrationPasses.length + e2ePasses.length;
2745
+ const totalCustom = customUnitPasses.length + customIntegrationPasses.length + customE2EPasses.length;
2746
+ const totalPasses = totalStandard + totalCustom;
2647
2747
  this.report(`
2648
2748
  \u2550\u2550\u2550\u2550 CORE SCANNER (PIPELINE MODE) \u2550\u2550\u2550\u2550`);
2649
2749
  this.report(` Provider: ${this.executor.name}`);
2650
- this.report(` Passes: ${totalPasses} (${unitPasses.length} unit \u2192 ${integrationPasses.length} integration \u2192 ${e2ePasses.length} E2E)`);
2750
+ this.report(` Passes: ${totalPasses} (${unitPasses.length + customUnitPasses.length} unit \u2192 ${integrationPasses.length + customIntegrationPasses.length} integration \u2192 ${e2ePasses.length + customE2EPasses.length} E2E)`);
2751
+ if (totalCustom > 0) {
2752
+ this.report(` Risk profile: ${totalCustom} custom passes, ${skippedNames.size} skipped`);
2753
+ }
2651
2754
  this.report(` Findings flow: Unit \u2192 Integration \u2192 E2E`);
2652
2755
  let globalBugIndex = 0;
2653
2756
  this.report(`
2654
2757
  \u2550\u2550\u2550\u2550 PHASE 1: UNIT ANALYSIS \u2550\u2550\u2550\u2550`);
2655
2758
  this.report(` Looking for: injection, null refs, auth bypass, etc.`);
2759
+ const customUnitJobs = this.buildCustomPassJobs(context, customUnitPasses);
2760
+ const customUnitFindings = await this.runPassBatch(customUnitJobs, cwd, context.files, globalBugIndex);
2761
+ this.boostCustomPassConfidence(customUnitFindings);
2762
+ globalBugIndex += customUnitFindings.length;
2656
2763
  const unitJobs = this.buildUnitPassJobs(context, unitPasses);
2657
- const unitFindings = await this.runPassBatch(unitJobs, cwd, context.files, globalBugIndex);
2658
- globalBugIndex += unitFindings.length;
2764
+ const standardUnitFindings = await this.runPassBatch(unitJobs, cwd, context.files, globalBugIndex);
2765
+ globalBugIndex += standardUnitFindings.length;
2766
+ const unitFindings = [...customUnitFindings, ...standardUnitFindings];
2659
2767
  this.report(` Phase 1 complete: ${unitFindings.length} findings`);
2660
2768
  this.report(`
2661
2769
  \u2550\u2550\u2550\u2550 PHASE 2: INTEGRATION ANALYSIS \u2550\u2550\u2550\u2550`);
2662
2770
  this.report(` Building on ${unitFindings.length} unit findings`);
2663
2771
  this.report(` Looking for: auth flows, data flows, trust boundaries`);
2772
+ const customIntJobs = this.buildCustomPassJobs(context, customIntegrationPasses);
2773
+ const customIntFindings = await this.runPassBatch(customIntJobs, cwd, context.files, globalBugIndex);
2774
+ this.boostCustomPassConfidence(customIntFindings);
2775
+ globalBugIndex += customIntFindings.length;
2664
2776
  const integrationJobs = this.buildIntegrationPassJobs(context, integrationPasses, unitFindings);
2665
- const integrationFindings = await this.runPassBatch(integrationJobs, cwd, context.files, globalBugIndex);
2666
- globalBugIndex += integrationFindings.length;
2777
+ const standardIntFindings = await this.runPassBatch(integrationJobs, cwd, context.files, globalBugIndex);
2778
+ globalBugIndex += standardIntFindings.length;
2779
+ const integrationFindings = [...customIntFindings, ...standardIntFindings];
2667
2780
  this.report(` Phase 2 complete: ${integrationFindings.length} findings`);
2668
2781
  this.report(`
2669
2782
  \u2550\u2550\u2550\u2550 PHASE 3: E2E ANALYSIS \u2550\u2550\u2550\u2550`);
2670
2783
  this.report(` Building on ${unitFindings.length} unit + ${integrationFindings.length} integration findings`);
2671
2784
  this.report(` Looking for: attack chains, privilege escalation, session bugs`);
2785
+ const customE2EJobs = this.buildCustomPassJobs(context, customE2EPasses);
2786
+ const customE2EFindings = await this.runPassBatch(customE2EJobs, cwd, context.files, globalBugIndex);
2787
+ this.boostCustomPassConfidence(customE2EFindings);
2788
+ globalBugIndex += customE2EFindings.length;
2672
2789
  const allPreviousFindings = [...unitFindings, ...integrationFindings];
2673
2790
  const e2eJobs = this.buildE2EPassJobs(context, e2ePasses, allPreviousFindings);
2674
- const e2eFindings = await this.runPassBatch(e2eJobs, cwd, context.files, globalBugIndex);
2791
+ const standardE2EFindings = await this.runPassBatch(e2eJobs, cwd, context.files, globalBugIndex);
2792
+ const e2eFindings = [...customE2EFindings, ...standardE2EFindings];
2675
2793
  this.report(` Phase 3 complete: ${e2eFindings.length} findings`);
2676
2794
  this.report(`
2677
2795
  \u2550\u2550\u2550\u2550 POST-PROCESSING \u2550\u2550\u2550\u2550`);
@@ -2977,6 +3095,37 @@ var CoreScanner = class {
2977
3095
  }
2978
3096
  return jobs;
2979
3097
  }
3098
+ /**
3099
+ * Build custom pass jobs from risk profile
3100
+ */
3101
+ buildCustomPassJobs(context, customPasses) {
3102
+ const jobs = [];
3103
+ const { understanding, staticResults } = context;
3104
+ for (const customPass of customPasses) {
3105
+ jobs.push({
3106
+ name: customPass.id,
3107
+ prompt: buildCustomPassPrompt(customPass, {
3108
+ pass: { name: customPass.id, category: customPass.category, description: customPass.description},
3109
+ projectType: understanding.summary.type,
3110
+ framework: understanding.summary.framework || "",
3111
+ language: understanding.summary.language,
3112
+ totalFiles: understanding.structure.totalFiles,
3113
+ staticFindings: staticResults
3114
+ })
3115
+ });
3116
+ }
3117
+ return jobs;
3118
+ }
3119
+ /**
3120
+ * Boost confidence for custom pass findings (targeted = higher signal-to-noise)
3121
+ */
3122
+ boostCustomPassConfidence(bugs) {
3123
+ for (const bug of bugs) {
3124
+ if (bug.confidence.overall === "medium") {
3125
+ bug.confidence.overall = "high";
3126
+ }
3127
+ }
3128
+ }
2980
3129
  buildQuickScanPrompt(context) {
2981
3130
  const { understanding, staticResults, files } = context;
2982
3131
  const staticSignals = staticResults.length > 0 ? `
@@ -5556,6 +5705,6 @@ async function getSmellsSummary(cwd) {
5556
5705
  return lines.join("\n");
5557
5706
  }
5558
5707
 
5559
- export { BehavioralContract, Bug, BugCategory, BugSeverity, BugStatus, CacheState, CodePathStep, CodebaseUnderstanding, ConfidenceLevel, ConfidenceScore, CoreScanner, FeatureIntent, FileHash, FindingKind, MonorepoConfig, PackageConfig, PriorityLevel, ProviderType, ScanMeta, ScanResult, ScanSummary, SeverityBreakdown, WhiteroseConfig, analyzeContracts, analyzeCrossFile, analyzeSmells, applyFix, batchFix, buildDependencyGraph, commitFix, createFixBranch, dependsOn, detectMonorepo, detectProvider, findCircularDependencies, generateIntentDocument, getAvailableExecutors, getChangedFiles, getCommandEffectsSummary, getContractSummary, getCrossPackageDependencies, getCurrentBranch, getDependentFiles2 as getDependentFiles, getDiff, getExecutor, getFileAtHead, getGitStatus, getImportsOf, getPackageFiles, getPackageForFile, getSmellsSummary, getStagedDiff, groupFilesByPackage, hasUncommittedChanges, isGitRepo, isProviderAvailable, loadConfig, loadUnderstanding, mergeIntentWithUnderstanding, outputMarkdown, outputSarif, parseIntentDocument, popStash, resetFile, runStaticAnalysis, saveConfig, scanCodebase, stashChanges };
5708
+ export { BehavioralContract, Bug, BugCategory, BugSeverity, BugStatus, CacheState, CodePathStep, CodebaseUnderstanding, ConfidenceLevel, ConfidenceScore, CoreScanner, CustomPassConfig, DomainType, FeatureIntent, FileHash, FindingKind, HotPath, MonorepoConfig, PackageConfig, PriorityLevel, ProviderType, RiskLevel, RiskProfile, ScanMeta, ScanResult, ScanSummary, SeverityBreakdown, SkipReason, WhiteroseConfig, analyzeContracts, analyzeCrossFile, analyzeSmells, applyFix, batchFix, buildDependencyGraph, commitFix, createFixBranch, dependsOn, detectMonorepo, detectProvider, findCircularDependencies, generateIntentDocument, getAvailableExecutors, getChangedFiles, getCommandEffectsSummary, getContractSummary, getCrossPackageDependencies, getCurrentBranch, getDependentFiles2 as getDependentFiles, getDiff, getExecutor, getFileAtHead, getGitStatus, getImportsOf, getPackageFiles, getPackageForFile, getSmellsSummary, getStagedDiff, groupFilesByPackage, hasUncommittedChanges, isGitRepo, isProviderAvailable, loadConfig, loadUnderstanding, mergeIntentWithUnderstanding, outputMarkdown, outputSarif, parseIntentDocument, popStash, resetFile, runStaticAnalysis, saveConfig, scanCodebase, stashChanges };
5560
5709
  //# sourceMappingURL=index.js.map
5561
5710
  //# sourceMappingURL=index.js.map