projscan 4.6.0 → 4.7.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.
Files changed (176) hide show
  1. package/README.md +24 -11
  2. package/dist/cli/_shared.js +12 -44
  3. package/dist/cli/_shared.js.map +1 -1
  4. package/dist/cli/changedOnly.d.ts +16 -0
  5. package/dist/cli/changedOnly.js +28 -0
  6. package/dist/cli/changedOnly.js.map +1 -0
  7. package/dist/cli/formatOptions.d.ts +4 -0
  8. package/dist/cli/formatOptions.js +30 -0
  9. package/dist/cli/formatOptions.js.map +1 -0
  10. package/dist/core/agentBrief.js +6 -1
  11. package/dist/core/agentBrief.js.map +1 -1
  12. package/dist/core/astBodySignals.js +2 -3
  13. package/dist/core/astBodySignals.js.map +1 -1
  14. package/dist/core/astMembers.d.ts +1 -0
  15. package/dist/core/astMembers.js +38 -9
  16. package/dist/core/astMembers.js.map +1 -1
  17. package/dist/core/bugHunt.js +2 -142
  18. package/dist/core/bugHunt.js.map +1 -1
  19. package/dist/core/bugHuntHotspotFindings.d.ts +2 -0
  20. package/dist/core/bugHuntHotspotFindings.js +68 -0
  21. package/dist/core/bugHuntHotspotFindings.js.map +1 -0
  22. package/dist/core/bugHuntPreflightFindings.d.ts +3 -0
  23. package/dist/core/bugHuntPreflightFindings.js +115 -0
  24. package/dist/core/bugHuntPreflightFindings.js.map +1 -0
  25. package/dist/core/codeGraph.d.ts +1 -8
  26. package/dist/core/codeGraph.js +4 -30
  27. package/dist/core/codeGraph.js.map +1 -1
  28. package/dist/core/codeGraphFileSelection.d.ts +7 -0
  29. package/dist/core/codeGraphFileSelection.js +19 -0
  30. package/dist/core/codeGraphFileSelection.js.map +1 -0
  31. package/dist/core/codeGraphQueries.d.ts +9 -0
  32. package/dist/core/codeGraphQueries.js +25 -0
  33. package/dist/core/codeGraphQueries.js.map +1 -0
  34. package/dist/core/dataflow.js +3 -338
  35. package/dist/core/dataflow.js.map +1 -1
  36. package/dist/core/dataflowDatabaseSinks.d.ts +8 -0
  37. package/dist/core/dataflowDatabaseSinks.js +78 -0
  38. package/dist/core/dataflowDatabaseSinks.js.map +1 -0
  39. package/dist/core/dataflowRiskAssembly.d.ts +11 -0
  40. package/dist/core/dataflowRiskAssembly.js +117 -0
  41. package/dist/core/dataflowRiskAssembly.js.map +1 -0
  42. package/dist/core/dataflowTraversal.d.ts +25 -0
  43. package/dist/core/dataflowTraversal.js +200 -0
  44. package/dist/core/dataflowTraversal.js.map +1 -0
  45. package/dist/core/fileInspectionReport.d.ts +13 -0
  46. package/dist/core/fileInspectionReport.js +49 -0
  47. package/dist/core/fileInspectionReport.js.map +1 -0
  48. package/dist/core/fileInspector.d.ts +3 -11
  49. package/dist/core/fileInspector.js +2 -46
  50. package/dist/core/fileInspector.js.map +1 -1
  51. package/dist/core/fixSuggest.d.ts +1 -9
  52. package/dist/core/fixSuggest.js +2 -58
  53. package/dist/core/fixSuggest.js.map +1 -1
  54. package/dist/core/fixSuggestDependencyNames.d.ts +1 -0
  55. package/dist/core/fixSuggestDependencyNames.js +9 -0
  56. package/dist/core/fixSuggestDependencyNames.js.map +1 -0
  57. package/dist/core/fixSuggestPreview.d.ts +10 -0
  58. package/dist/core/fixSuggestPreview.js +87 -0
  59. package/dist/core/fixSuggestPreview.js.map +1 -0
  60. package/dist/core/frameworkHonoSources.js +7 -0
  61. package/dist/core/frameworkHonoSources.js.map +1 -1
  62. package/dist/core/frameworkNextRouteSources.d.ts +6 -1
  63. package/dist/core/frameworkNextRouteSources.js +31 -1
  64. package/dist/core/frameworkNextRouteSources.js.map +1 -1
  65. package/dist/core/frameworkRemixSources.d.ts +2 -0
  66. package/dist/core/frameworkRemixSources.js +63 -0
  67. package/dist/core/frameworkRemixSources.js.map +1 -0
  68. package/dist/core/frameworkSources.d.ts +15 -3
  69. package/dist/core/frameworkSources.js +41 -10
  70. package/dist/core/frameworkSources.js.map +1 -1
  71. package/dist/core/intentRouter.d.ts +4 -14
  72. package/dist/core/intentRouter.js +4 -29
  73. package/dist/core/intentRouter.js.map +1 -1
  74. package/dist/core/intentRouterCatalog.js +17 -0
  75. package/dist/core/intentRouterCatalog.js.map +1 -1
  76. package/dist/core/intentRouterKeywordWeights.js +13 -0
  77. package/dist/core/intentRouterKeywordWeights.js.map +1 -1
  78. package/dist/core/intentRouterReleaseSignals.js +119 -39
  79. package/dist/core/intentRouterReleaseSignals.js.map +1 -1
  80. package/dist/core/intentRouterResult.d.ts +16 -0
  81. package/dist/core/intentRouterResult.js +34 -0
  82. package/dist/core/intentRouterResult.js.map +1 -0
  83. package/dist/core/intentRouterWorkSignals.js +18 -0
  84. package/dist/core/intentRouterWorkSignals.js.map +1 -1
  85. package/dist/core/languages/pythonLockfiles.d.ts +4 -0
  86. package/dist/core/languages/pythonLockfiles.js +6 -2
  87. package/dist/core/languages/pythonLockfiles.js.map +1 -1
  88. package/dist/core/languages/pythonManifests.js +5 -5
  89. package/dist/core/languages/pythonManifests.js.map +1 -1
  90. package/dist/core/languages/pythonProjectEvidence.js +1 -1
  91. package/dist/core/languages/pythonProjectEvidence.js.map +1 -1
  92. package/dist/core/languages/pythonRequirements.js +144 -18
  93. package/dist/core/languages/pythonRequirements.js.map +1 -1
  94. package/dist/core/pluginManifestValidation.d.ts +41 -0
  95. package/dist/core/pluginManifestValidation.js +179 -0
  96. package/dist/core/pluginManifestValidation.js.map +1 -0
  97. package/dist/core/plugins.d.ts +3 -41
  98. package/dist/core/plugins.js +2 -129
  99. package/dist/core/plugins.js.map +1 -1
  100. package/dist/core/regressionPlan.d.ts +2 -1
  101. package/dist/core/regressionPlan.js +7 -1
  102. package/dist/core/regressionPlan.js.map +1 -1
  103. package/dist/core/releaseEvidence.js +6 -120
  104. package/dist/core/releaseEvidence.js.map +1 -1
  105. package/dist/core/releaseEvidenceArtifacts.d.ts +3 -0
  106. package/dist/core/releaseEvidenceArtifacts.js +65 -0
  107. package/dist/core/releaseEvidenceArtifacts.js.map +1 -0
  108. package/dist/core/releaseEvidenceVerdict.d.ts +6 -0
  109. package/dist/core/releaseEvidenceVerdict.js +54 -0
  110. package/dist/core/releaseEvidenceVerdict.js.map +1 -0
  111. package/dist/core/reportPathRedaction.d.ts +4 -0
  112. package/dist/core/reportPathRedaction.js +64 -0
  113. package/dist/core/reportPathRedaction.js.map +1 -0
  114. package/dist/core/reportScope.js +2 -163
  115. package/dist/core/reportScope.js.map +1 -1
  116. package/dist/core/reportScopeFiltering.d.ts +9 -0
  117. package/dist/core/reportScopeFiltering.js +102 -0
  118. package/dist/core/reportScopeFiltering.js.map +1 -0
  119. package/dist/core/searchIndex.d.ts +2 -14
  120. package/dist/core/searchIndex.js +4 -227
  121. package/dist/core/searchIndex.js.map +1 -1
  122. package/dist/core/searchIndexFiles.d.ts +1 -0
  123. package/dist/core/searchIndexFiles.js +26 -0
  124. package/dist/core/searchIndexFiles.js.map +1 -0
  125. package/dist/core/searchIndexText.d.ts +15 -0
  126. package/dist/core/searchIndexText.js +204 -0
  127. package/dist/core/searchIndexText.js.map +1 -0
  128. package/dist/core/start.js +5 -46
  129. package/dist/core/start.js.map +1 -1
  130. package/dist/core/startEvidence.d.ts +1 -1
  131. package/dist/core/startEvidence.js +16 -1
  132. package/dist/core/startEvidence.js.map +1 -1
  133. package/dist/core/startInputs.d.ts +1 -0
  134. package/dist/core/startInputs.js +4 -1
  135. package/dist/core/startInputs.js.map +1 -1
  136. package/dist/core/startMissionPolicy.js +10 -0
  137. package/dist/core/startMissionPolicy.js.map +1 -1
  138. package/dist/core/startReportBuilder.d.ts +1 -0
  139. package/dist/core/startReportBuilder.js +1 -0
  140. package/dist/core/startReportBuilder.js.map +1 -1
  141. package/dist/core/startReportContext.d.ts +23 -0
  142. package/dist/core/startReportContext.js +51 -0
  143. package/dist/core/startReportContext.js.map +1 -0
  144. package/dist/core/startRoadmapPreview.d.ts +2 -0
  145. package/dist/core/startRoadmapPreview.js +31 -0
  146. package/dist/core/startRoadmapPreview.js.map +1 -0
  147. package/dist/core/taint.d.ts +2 -67
  148. package/dist/core/taint.js +41 -164
  149. package/dist/core/taint.js.map +1 -1
  150. package/dist/core/taintIndex.d.ts +20 -0
  151. package/dist/core/taintIndex.js +81 -0
  152. package/dist/core/taintIndex.js.map +1 -0
  153. package/dist/core/taintTraversal.d.ts +8 -0
  154. package/dist/core/taintTraversal.js +113 -0
  155. package/dist/core/taintTraversal.js.map +1 -0
  156. package/dist/core/taintTypes.d.ts +67 -0
  157. package/dist/core/taintTypes.js +2 -0
  158. package/dist/core/taintTypes.js.map +1 -0
  159. package/dist/core/telemetry.js +36 -30
  160. package/dist/core/telemetry.js.map +1 -1
  161. package/dist/core/upgradePreviewPython.js +1 -1
  162. package/dist/core/upgradePreviewPython.js.map +1 -1
  163. package/dist/mcp/tools.js +11 -12
  164. package/dist/mcp/tools.js.map +1 -1
  165. package/dist/projscan-sbom.cdx.json +6 -6
  166. package/dist/reporters/consoleFixReporter.d.ts +3 -0
  167. package/dist/reporters/consoleFixReporter.js +41 -0
  168. package/dist/reporters/consoleFixReporter.js.map +1 -0
  169. package/dist/reporters/consoleReporter.d.ts +1 -3
  170. package/dist/reporters/consoleReporter.js +1 -42
  171. package/dist/reporters/consoleReporter.js.map +1 -1
  172. package/dist/tool-manifest.json +2 -2
  173. package/dist/types/start.d.ts +14 -0
  174. package/docs/GUIDE.md +1 -1
  175. package/docs/ROADMAP.md +16 -5
  176. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"startEvidence.js","sourceRoot":"","sources":["../../src/core/startEvidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"startEvidence.js","sourceRoot":"","sources":["../../src/core/startEvidence.ts"],"names":[],"mappings":"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"}
@@ -28,4 +28,5 @@ export declare function loadStartInputs(rootPath: string, options: ComputeStartO
28
28
  };
29
29
  missionOutcome: import("../types.js").MissionOutcome | undefined;
30
30
  harnessHints: import("../types.js").SessionCoordinationHint[];
31
+ roadmapPreview: import("../types.js").StartRoadmapPreview | undefined;
31
32
  }>;
@@ -4,8 +4,9 @@ import { computeWorkplan } from './workplan.js';
4
4
  import { loadMissionOutcome } from './missionOutcome.js';
5
5
  import { detectStartHarnessHints } from './startHarness.js';
6
6
  import { buildStartRiskSources } from './startEvidence.js';
7
+ import { buildStartRoadmapPreview } from './startRoadmapPreview.js';
7
8
  export async function loadStartInputs(rootPath, options, config) {
8
- const [setup, workplan, quality, riskSources, missionOutcome, harnessHints] = await Promise.all([
9
+ const [setup, workplan, quality, riskSources, missionOutcome, harnessHints, roadmapPreview,] = await Promise.all([
9
10
  computeFirstRunDiagnostics(rootPath),
10
11
  computeWorkplan(rootPath, { mode: config.mode, maxTasks: config.maxTasks }),
11
12
  computeQualityScorecard(rootPath, { maxRisks: config.maxRisks }),
@@ -14,6 +15,7 @@ export async function loadStartInputs(rootPath, options, config) {
14
15
  ? loadMissionOutcome(rootPath, options.missionDir)
15
16
  : Promise.resolve(undefined),
16
17
  detectStartHarnessHints(rootPath),
18
+ config.mode === 'release' ? buildStartRoadmapPreview(rootPath) : Promise.resolve(undefined),
17
19
  ]);
18
20
  return {
19
21
  setup,
@@ -22,6 +24,7 @@ export async function loadStartInputs(rootPath, options, config) {
22
24
  riskSources,
23
25
  missionOutcome,
24
26
  harnessHints,
27
+ roadmapPreview,
25
28
  };
26
29
  }
27
30
  //# sourceMappingURL=startInputs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"startInputs.js","sourceRoot":"","sources":["../../src/core/startInputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAU3D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAgB,EAChB,OAA4B,EAC5B,MAAwB;IAExB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9F,0BAA0B,CAAC,QAAQ,CAAC;QACpC,eAAe,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3E,uBAAuB,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChE,qBAAqB,CAAC,QAAQ,CAAC;QAC/B,OAAO,CAAC,UAAU;YAChB,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;YAClD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;QAC9B,uBAAuB,CAAC,QAAQ,CAAC;KAClC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,QAAQ;QACR,OAAO;QACP,WAAW;QACX,cAAc;QACd,YAAY;KACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"startInputs.js","sourceRoot":"","sources":["../../src/core/startInputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAUpE,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAgB,EAChB,OAA4B,EAC5B,MAAwB;IAExB,MAAM,CACJ,KAAK,EACL,QAAQ,EACR,OAAO,EACP,WAAW,EACX,cAAc,EACd,YAAY,EACZ,cAAc,EACf,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpB,0BAA0B,CAAC,QAAQ,CAAC;QACpC,eAAe,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3E,uBAAuB,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChE,qBAAqB,CAAC,QAAQ,CAAC;QAC/B,OAAO,CAAC,UAAU;YAChB,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;YAClD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;QAC9B,uBAAuB,CAAC,QAAQ,CAAC;QACjC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;KAC5F,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,QAAQ;QACR,OAAO;QACP,WAAW;QACX,cAAc;QACd,YAAY;QACZ,cAAc;KACf,CAAC;AACJ,CAAC"}
@@ -31,6 +31,16 @@ export function missionStatus(setupOverall, verdict, adoptionGaps) {
31
31
  return 'ready';
32
32
  }
33
33
  export function missionActionPlan(mode, intent, route, fixFirst, workplan, workflow) {
34
+ if (route?.tool === 'projscan_release_train' && mode !== 'release') {
35
+ return [
36
+ {
37
+ label: `Use projscan_workplan for ${intent ?? mode}`,
38
+ command: `projscan workplan --mode ${mode} --format json`,
39
+ tool: 'projscan_workplan',
40
+ args: { mode },
41
+ },
42
+ ];
43
+ }
34
44
  if (route && intent)
35
45
  return actionPlanFromRoute(mode, intent, route);
36
46
  const fallback = actionFromFixFirst(fixFirst) ?? actionFromWorkplan(workplan) ?? actionFromWorkflow(workflow);
@@ -1 +1 @@
1
- {"version":3,"file":"startMissionPolicy.js","sourceRoot":"","sources":["../../src/core/startMissionPolicy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"startMissionPolicy.js","sourceRoot":"","sources":["../../src/core/startMissionPolicy.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ export interface BuildStartReportInput {
11
11
  workplan: WorkplanReport;
12
12
  quality: QualityScorecardReport;
13
13
  riskSources: StartReport['evidence']['riskSources'];
14
+ roadmapPreview?: StartReport['evidence']['roadmapPreview'];
14
15
  workflow: StartReport['recommendedWorkflow'];
15
16
  firstTenMinutes: StartReport['firstTenMinutes'];
16
17
  missionControl: StartReport['missionControl'];
@@ -25,6 +25,7 @@ export function buildStartReport(input) {
25
25
  healthScore: input.quality.health.score,
26
26
  mcpReady: mcpReady(input.setup),
27
27
  riskSources: input.riskSources,
28
+ ...(input.roadmapPreview ? { roadmapPreview: input.roadmapPreview } : {}),
28
29
  },
29
30
  topRisks: input.topRisks,
30
31
  ...(input.fixFirst ? { fixFirst: input.fixFirst } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"startReportBuilder.js","sourceRoot":"","sources":["../../src/core/startReportBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AA0BrD,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,SAAS,CAChB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAC7B,KAAK,CAAC,YAAY,CAAC,MAAM,EACzB,KAAK,CAAC,QAAQ,EAAE,KAAK,CACtB;QACD,KAAK,EAAE;YACL,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;YAC5B,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW;SACrC;QACD,mBAAmB,EAAE,KAAK,CAAC,QAAQ;QACnC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,QAAQ,EAAE;YACR,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO;YACvC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO;YACvC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;YACrC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;YACrC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;YACvC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YAC/B,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B;QACD,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAqB;IACrC,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AACpG,CAAC;AAED,SAAS,WAAW,CAAC,QAAwB,EAAE,OAA+B;IAC5E,OAAO,QAAQ,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"startReportBuilder.js","sourceRoot":"","sources":["../../src/core/startReportBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AA2BrD,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,SAAS,CAChB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAC7B,KAAK,CAAC,YAAY,CAAC,MAAM,EACzB,KAAK,CAAC,QAAQ,EAAE,KAAK,CACtB;QACD,KAAK,EAAE;YACL,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;YAC5B,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW;SACrC;QACD,mBAAmB,EAAE,KAAK,CAAC,QAAQ;QACnC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,QAAQ,EAAE;YACR,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO;YACvC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO;YACvC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;YACrC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;YACrC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;YACvC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YAC/B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E;QACD,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAqB;IACrC,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AACpG,CAAC;AAED,SAAS,WAAW,CAAC,QAAwB,EAAE,OAA+B;IAC5E,OAAO,QAAQ,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC;AACnE,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { loadStartInputs } from './startInputs.js';
2
+ import type { StartReport } from '../types/start.js';
3
+ import type { WorkplanMode } from '../types/workplan.js';
4
+ type LoadedStartInputs = Awaited<ReturnType<typeof loadStartInputs>>;
5
+ export interface BuildStartReportContextInput extends LoadedStartInputs {
6
+ mode: WorkplanMode;
7
+ intent?: string;
8
+ maxRisks: number;
9
+ }
10
+ export interface StartReportContext {
11
+ workflow: StartReport['recommendedWorkflow'];
12
+ firstTenMinutes: StartReport['firstTenMinutes'];
13
+ missionControl: StartReport['missionControl'];
14
+ coordinationHints: StartReport['coordinationHints'];
15
+ topRisks: StartReport['topRisks'];
16
+ fixFirst: StartReport['fixFirst'];
17
+ adoptionGaps: StartReport['adoptionGaps'];
18
+ adoptionLoop: NonNullable<StartReport['adoptionLoop']>;
19
+ nextActions: StartReport['nextActions'];
20
+ roadmapPreview?: StartReport['evidence']['roadmapPreview'];
21
+ }
22
+ export declare function buildStartReportContext(input: BuildStartReportContextInput): StartReportContext;
23
+ export {};
@@ -0,0 +1,51 @@
1
+ import { getWorkflowRecipes } from './adoption.js';
2
+ import { fixFirstFromStartRisk } from './fixFirst.js';
3
+ import { buildFirstTenMinutes } from './onboarding.js';
4
+ import { buildAdoptionLoop } from './startAdoptionLoop.js';
5
+ import { buildStartAdoptionGaps } from './startAdoptionGaps.js';
6
+ import { buildStartCoordinationHints } from './startEvidence.js';
7
+ import { buildMissionControl } from './startMissionControl.js';
8
+ import { chooseWorkflow, combineRisks } from './startMissionPolicy.js';
9
+ import { buildStartNextActions } from './startNextActions.js';
10
+ export function buildStartReportContext(input) {
11
+ const workflow = chooseWorkflow(input.mode, getWorkflowRecipes().recipes);
12
+ const topRisks = combineRisks(input.workplan, input.quality.topRisks, input.maxRisks);
13
+ const fixFirst = input.workplan.fixFirst ?? fixFirstFromStartRisk(topRisks[0]);
14
+ const adoptionGaps = buildStartAdoptionGaps(input.setup.diagnostics);
15
+ const adoptionLoop = buildAdoptionLoop();
16
+ const firstTenMinutes = buildFirstTenMinutes(input.mode);
17
+ const coordinationHints = buildStartCoordinationHints(input.riskSources, input.mode, input.harnessHints, input.intent);
18
+ const missionControl = buildMissionControl({
19
+ mode: input.mode,
20
+ intent: input.intent,
21
+ setupOverall: input.setup.overall,
22
+ workplan: input.workplan,
23
+ workflow,
24
+ fixFirst,
25
+ adoptionGaps,
26
+ coordinationHints,
27
+ riskSources: input.riskSources,
28
+ missionOutcome: input.missionOutcome,
29
+ });
30
+ const nextActions = buildStartNextActions({
31
+ missionControl,
32
+ firstTenMinutes,
33
+ workflow,
34
+ adoptionLoop,
35
+ workplan: input.workplan,
36
+ quality: input.quality,
37
+ });
38
+ return {
39
+ workflow,
40
+ firstTenMinutes,
41
+ missionControl,
42
+ coordinationHints,
43
+ topRisks,
44
+ fixFirst,
45
+ adoptionGaps,
46
+ adoptionLoop,
47
+ nextActions,
48
+ roadmapPreview: input.mode === 'release' ? input.roadmapPreview : undefined,
49
+ };
50
+ }
51
+ //# sourceMappingURL=startReportContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startReportContext.js","sourceRoot":"","sources":["../../src/core/startReportContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAyB9D,MAAM,UAAU,uBAAuB,CAAC,KAAmC;IACzE,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,EAAE,CAAC,OAAO,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,iBAAiB,EAAE,CAAC;IACzC,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,iBAAiB,GAAG,2BAA2B,CACnD,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,MAAM,CACb,CAAC;IACF,MAAM,cAAc,GAAG,mBAAmB,CAAC;QACzC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;QACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,iBAAiB;QACjB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,cAAc,EAAE,KAAK,CAAC,cAAc;KACrC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,qBAAqB,CAAC;QACxC,cAAc;QACd,eAAe;QACf,QAAQ;QACR,YAAY;QACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC;IACH,OAAO;QACL,QAAQ;QACR,eAAe;QACf,cAAc;QACd,iBAAiB;QACjB,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,cAAc,EAAE,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;KAC5E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { StartRoadmapPreview } from '../types/start.js';
2
+ export declare function buildStartRoadmapPreview(rootPath: string): Promise<StartRoadmapPreview | undefined>;
@@ -0,0 +1,31 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { defaultRoadmapLinesForVersion, roadmapTasksForLine, } from './roadmapCatalog.js';
4
+ export async function buildStartRoadmapPreview(rootPath) {
5
+ const lines = defaultRoadmapLinesForVersion(await readPackageVersion(rootPath));
6
+ if (!lines || lines.length === 0)
7
+ return undefined;
8
+ return {
9
+ policy: 'product-readiness-plan',
10
+ readOnly: true,
11
+ lines,
12
+ workstreams: lines.flatMap((line) => roadmapTasksForLine(line).map((task) => ({
13
+ id: task.id,
14
+ title: task.title,
15
+ priority: task.priority,
16
+ track: task.track,
17
+ verificationCommand: task.verification.commands[0],
18
+ }))),
19
+ };
20
+ }
21
+ async function readPackageVersion(rootPath) {
22
+ try {
23
+ const raw = await fs.readFile(path.join(rootPath, 'package.json'), 'utf-8');
24
+ const pkg = JSON.parse(raw);
25
+ return typeof pkg.version === 'string' ? pkg.version : null;
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ //# sourceMappingURL=startRoadmapPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startRoadmapPreview.js","sourceRoot":"","sources":["../../src/core/startRoadmapPreview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAAgB;IAEhB,MAAM,KAAK,GAAG,6BAA6B,CAAC,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChF,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAEnD,OAAO;QACL,MAAM,EAAE,wBAAwB;QAChC,QAAQ,EAAE,IAAI;QACd,KAAK;QACL,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAClC,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;SACnD,CAAC,CAAC,CACJ;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;QACrD,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import type { CodeGraph } from './codeGraph.js';
2
+ import type { TaintConfig, TaintReport } from './taintTypes.js';
3
+ export type { TaintConfig, TaintFlow, TaintReport } from './taintTypes.js';
2
4
  /**
3
5
  * Lightweight taint flow analysis (1.6+).
4
6
  *
@@ -29,75 +31,8 @@ import type { CodeGraph } from './codeGraph.js';
29
31
  * variable-level dataflow, no AST inspection beyond what callSites
30
32
  * already gives us. If this drifts toward "general dataflow" cut it.
31
33
  */
32
- export interface TaintConfig {
33
- /**
34
- * Bare callee names treated as taint sources. Examples:
35
- * "process.env" — environment variables (read sensitive config)
36
- * "req.body" — HTTP request body
37
- * "readFileSync" — disk read (could be user-controlled paths)
38
- *
39
- * Match is by bare name (the rightmost identifier in a member-access
40
- * chain). "process.env.SECRET" → "env"; "req.body.userId" → "body".
41
- * The default list captures the most common JS / Python / Go sources;
42
- * users override via .projscanrc taint.sources.
43
- */
44
- sources: string[];
45
- /**
46
- * Bare callee names treated as taint sinks. Examples:
47
- * "exec" — child_process.exec
48
- * "spawn" — child_process.spawn
49
- * "writeFile" — fs.writeFile
50
- * "query" — raw SQL (db.query("SELECT...${user}"))
51
- * "eval" — JS eval / Python eval / etc.
52
- */
53
- sinks: string[];
54
- }
55
34
  export declare const DEFAULT_TAINT_SOURCES: ReadonlyArray<string>;
56
35
  export declare const DEFAULT_TAINT_SINKS: ReadonlyArray<string>;
57
- export interface TaintFlow {
58
- /** Bare function name where the source was called. */
59
- sourceFn: string;
60
- /** Bare function name where the sink was called. */
61
- sinkFn: string;
62
- /** The source identifier (e.g. "env"). */
63
- source: string;
64
- /** The sink identifier (e.g. "exec"). */
65
- sink: string;
66
- /**
67
- * Sequence of fully-qualified function names from sourceFn to sinkFn,
68
- * inclusive at both ends. Length 1 means the same function reads the
69
- * source and calls the sink (the most direct flow).
70
- */
71
- path: string[];
72
- /** Files touched by the path (in order, deduped). */
73
- files: string[];
74
- }
75
- export interface TaintReport {
76
- available: boolean;
77
- reason?: string;
78
- flowCount: number;
79
- flows: TaintFlow[];
80
- /** The effective sources/sinks list used for this run (after merging defaults + config). */
81
- effectiveSources: string[];
82
- effectiveSinks: string[];
83
- /**
84
- * 1.8+ — true when the BFS hit MAX_DEPTH for at least one source with
85
- * a non-empty frontier still pending. When set, the agent should know
86
- * that flows deeper than MAX_DEPTH may exist but weren't reported.
87
- * Pairs with `truncatedSources` so a follow-up scan can re-target.
88
- */
89
- truncated?: boolean;
90
- /**
91
- * 1.8+ — function names whose BFS exited at MAX_DEPTH with the
92
- * frontier non-empty. Empty when no truncation occurred.
93
- */
94
- truncatedSources?: string[];
95
- /**
96
- * 1.8+ — the depth cap actually used. Surfacing this lets agents
97
- * notice when projscan's defaults shift between releases.
98
- */
99
- maxDepth?: number;
100
- }
101
36
  /**
102
37
  * Compute taint flows over the given code graph. Per-function callSites
103
38
  * are required (1.5+ ships these for every adapter); functions without
@@ -1,5 +1,36 @@
1
- import { FRAMEWORK_REQUEST_SOURCES, frameworkRequestSourceForFunction, } from './frameworkSources.js';
2
- import { isDefaultChildProcessEnvPassthrough, pickSinkHit, pickSourceHit, } from './taintMatching.js';
1
+ import { FRAMEWORK_REQUEST_SOURCES } from './frameworkSources.js';
2
+ import { buildTaintFunctionIndex } from './taintIndex.js';
3
+ import { findTaintFlows } from './taintTraversal.js';
4
+ /**
5
+ * Lightweight taint flow analysis (1.6+).
6
+ *
7
+ * Source-to-sink reachability over the existing per-function call
8
+ * graph. Sources and sinks are *declared* by name (config-driven);
9
+ * anything in between is treated as a function that might propagate
10
+ * taint. We do NOT do general dataflow — we only ask "does some
11
+ * call chain reach from a function that calls a source to a function
12
+ * that calls a sink?"
13
+ *
14
+ * That heuristic catches the common case: a route handler reads
15
+ * `process.env.SECRET` (source) and somewhere downstream it ends up
16
+ * in `child_process.spawn` (sink). It misses any flow that goes
17
+ * through code we can't see (eval'd strings, plugin loaders), and it
18
+ * over-reports when functions read sources but launder them safely
19
+ * before reaching sinks. Both are documented limitations.
20
+ *
21
+ * Legacy taint algorithm gap (1.6+): the "bridge-helper" pattern is missed —
22
+ * `function bridge() { const v = getSecret(); runDangerous(v); }` where
23
+ * `getSecret` reads the source and `runDangerous` is the sink. The BFS
24
+ * walks DOWN from source-fns, but `bridge` has neither source nor sink
25
+ * directly; both are its callees. 3.0's `computeDataflow` /
26
+ * `projscan_dataflow` runs that second algorithm and review surfaces it
27
+ * as `newDataflowRisks`. Keep this legacy function as the compatibility
28
+ * source-to-sink reachability report.
29
+ *
30
+ * Strict scope discipline (per ROADMAP 1.6 guardrail): no CFG, no
31
+ * variable-level dataflow, no AST inspection beyond what callSites
32
+ * already gives us. If this drifts toward "general dataflow" cut it.
33
+ */
3
34
  export const DEFAULT_TAINT_SOURCES = [
4
35
  'env', // process.env.X
5
36
  'argv', // process.argv
@@ -55,50 +86,8 @@ export function computeTaint(graph, config) {
55
86
  const sinks = new Set([...DEFAULT_TAINT_SINKS, ...config.sinks]);
56
87
  const customSources = new Set(config.sources);
57
88
  const customSinks = new Set(config.sinks);
58
- const fnByQual = new Map();
59
- const fnsByBareName = new Map();
60
- let totalCallSites = 0;
61
- for (const [file, gf] of graph.files) {
62
- if (!gf.functions)
63
- continue;
64
- for (const fn of gf.functions) {
65
- const callees = fn.callSites ?? [];
66
- const directCallSites = fn.directCallSites ?? [];
67
- const memberCallSites = fn.memberCallSites ?? [];
68
- const memberReferences = fn.memberReferences ?? [];
69
- const memberAliases = fn.memberAliases ?? [];
70
- const references = fn.references ?? [];
71
- totalCallSites += callees.length;
72
- // Default sources mostly match property/reference reads; custom sources
73
- // may still be call-shaped. Sinks are call-shaped, so callSites only.
74
- const sourceHit = frameworkRequestSourceForFunction(file, fn.name, memberCallSites, memberReferences, fn.parameters ?? [], sources, references, fn.contextualCallSite, gf.imports) ?? pickSourceHit(callees, references, sources, customSources);
75
- const sinkHit = pickSinkHit(callees, directCallSites, memberCallSites, memberAliases, sinks, customSinks, file, gf);
76
- const hasSource = sourceHit !== null &&
77
- !isDefaultChildProcessEnvPassthrough(sourceHit, sinkHit, memberReferences, customSources, customSinks);
78
- const hasSink = sinkHit !== null;
79
- const node = {
80
- id: `${file}::${fn.name}@${fn.line}`,
81
- qualName: fn.name,
82
- bareName: bareName(fn.name),
83
- file,
84
- callees,
85
- references,
86
- memberReferences,
87
- sourceHit,
88
- sinkHit,
89
- hasSource,
90
- hasSink,
91
- };
92
- fnByQual.set(node.id, node);
93
- let list = fnsByBareName.get(node.bareName);
94
- if (!list) {
95
- list = [];
96
- fnsByBareName.set(node.bareName, list);
97
- }
98
- list.push(node);
99
- }
100
- }
101
- if (fnByQual.size === 0 || totalCallSites === 0) {
89
+ const index = buildTaintFunctionIndex(graph, sources, sinks, customSources, customSinks);
90
+ if (index.fnByQual.size === 0 || index.totalCallSites === 0) {
102
91
  return {
103
92
  available: false,
104
93
  reason: 'No functions with callSites in the graph. Taint requires per-function callSites (1.5+).',
@@ -108,128 +97,16 @@ export function computeTaint(graph, config) {
108
97
  effectiveSinks: [...sinks],
109
98
  };
110
99
  }
111
- const flows = [];
112
- const seen = new Set(); // dedupe key: sourceFnId::sinkFnId
113
- // 1.8+ — track which source functions hit MAX_DEPTH with frontier
114
- // still non-empty. The agent gets these in `truncatedSources` so it
115
- // knows where the analysis was clipped.
116
- const truncatedSources = [];
117
- // 1.8+ — raised from 8 → 12. The original 8 was a conservative pick
118
- // when the algorithm was new; six months of dogfood data show real
119
- // user repos averaging 10–11 hops between an HTTP handler and a
120
- // shell-exec sink. 12 catches those without exploding fan-out
121
- // memory in the BFS frontier.
122
- const MAX_DEPTH = 12;
123
- // 1.10+ — per-step frontier cap. MAX_DEPTH bounds path length, but
124
- // wide-fan-out graphs (Java/TS with prevalent get/set/toString bare-name
125
- // collisions) can balloon the frontier exponentially: each step
126
- // resolves every bare-name callee to every same-named function in the
127
- // graph. Once a single step would push past this cap, we abort the
128
- // remaining BFS for this source and surface it in `truncatedSources`,
129
- // matching how MAX_DEPTH truncation is reported.
130
- const MAX_FRONTIER_PER_STEP = 5000;
131
- for (const sourceFn of fnByQual.values()) {
132
- if (!sourceFn.hasSource)
133
- continue;
134
- // Same-function shortcut.
135
- if (sourceFn.hasSink) {
136
- const key = `${sourceFn.id}::${sourceFn.id}`;
137
- if (!seen.has(key)) {
138
- seen.add(key);
139
- flows.push({
140
- sourceFn: sourceFn.qualName,
141
- sinkFn: sourceFn.qualName,
142
- source: sourceFn.sourceHit,
143
- sink: sourceFn.sinkHit,
144
- path: [sourceFn.qualName],
145
- files: [sourceFn.file],
146
- });
147
- }
148
- }
149
- // BFS through callees.
150
- const visited = new Set([sourceFn.id]);
151
- let frontier = [{ node: sourceFn, path: [sourceFn] }];
152
- let depth = 0;
153
- let frontierCapped = false;
154
- while (frontier.length > 0 && depth < MAX_DEPTH) {
155
- depth += 1;
156
- const next = [];
157
- let aborted = false;
158
- for (const entry of frontier) {
159
- if (aborted)
160
- break;
161
- for (const calleeName of entry.node.callees) {
162
- const candidates = fnsByBareName.get(calleeName) ?? [];
163
- for (const candidate of candidates) {
164
- if (visited.has(candidate.id))
165
- continue;
166
- visited.add(candidate.id);
167
- const newPath = [...entry.path, candidate];
168
- if (candidate.hasSink) {
169
- const flowKey = `${sourceFn.id}::${candidate.id}`;
170
- if (!seen.has(flowKey)) {
171
- seen.add(flowKey);
172
- const filesInPath = [];
173
- for (const n of newPath) {
174
- if (filesInPath[filesInPath.length - 1] !== n.file)
175
- filesInPath.push(n.file);
176
- }
177
- flows.push({
178
- sourceFn: sourceFn.qualName,
179
- sinkFn: candidate.qualName,
180
- source: sourceFn.sourceHit,
181
- sink: candidate.sinkHit,
182
- path: newPath.map((n) => n.qualName),
183
- files: filesInPath,
184
- });
185
- }
186
- // Don't continue past a sink — the flow is reported.
187
- continue;
188
- }
189
- next.push({ node: candidate, path: newPath });
190
- if (next.length >= MAX_FRONTIER_PER_STEP) {
191
- // 1.10+ — per-step frontier cap reached. Abort this source's
192
- // BFS and surface it as truncated. Continuing would just
193
- // multiply: each entry in `next` will spawn its own bare-name
194
- // resolutions on the following step.
195
- frontierCapped = true;
196
- aborted = true;
197
- break;
198
- }
199
- }
200
- if (aborted)
201
- break;
202
- }
203
- }
204
- frontier = next;
205
- }
206
- // If the BFS exited because of MAX_DEPTH or the per-step frontier cap
207
- // (not because the frontier emptied), record the source so the caller
208
- // knows flows beyond that point weren't explored.
209
- if (frontier.length > 0 || frontierCapped) {
210
- truncatedSources.push(sourceFn.qualName);
211
- }
212
- }
213
- flows.sort((a, b) => {
214
- if (a.sourceFn !== b.sourceFn)
215
- return a.sourceFn.localeCompare(b.sourceFn);
216
- return a.sinkFn.localeCompare(b.sinkFn);
217
- });
100
+ const traversal = findTaintFlows(index);
218
101
  return {
219
102
  available: true,
220
- flowCount: flows.length,
221
- flows,
103
+ flowCount: traversal.flows.length,
104
+ flows: traversal.flows,
222
105
  effectiveSources: [...sources].sort(),
223
106
  effectiveSinks: [...sinks].sort(),
224
- truncated: truncatedSources.length > 0,
225
- truncatedSources: [...new Set(truncatedSources)].sort(),
226
- maxDepth: MAX_DEPTH,
107
+ truncated: traversal.truncatedSources.length > 0,
108
+ truncatedSources: traversal.truncatedSources,
109
+ maxDepth: traversal.maxDepth,
227
110
  };
228
111
  }
229
- function bareName(qualified) {
230
- const dot = qualified.lastIndexOf('.');
231
- if (dot < 0)
232
- return qualified;
233
- return qualified.slice(dot + 1);
234
- }
235
112
  //# sourceMappingURL=taint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"taint.js","sourceRoot":"","sources":["../../src/core/taint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taint.js","sourceRoot":"","sources":["../../src/core/taint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAA0B;IAC1D,KAAK,EAAE,gBAAgB;IACvB,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,4EAA4E;IACrF,QAAQ,EAAE,aAAa;IACvB,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,cAAc;IACzB,UAAU,EAAE,wBAAwB;IACpC,cAAc;IACd,OAAO,EAAE,gBAAgB;IACzB,UAAU,EAAE,wBAAwB;IACpC,GAAG,yBAAyB;CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAA0B;IACxD,MAAM,EAAE,qBAAqB;IAC7B,UAAU;IACV,OAAO,EAAE,sBAAsB;IAC/B,WAAW;IACX,MAAM,EAAE,cAAc;IACtB,UAAU,EAAE,yCAAyC;IACrD,WAAW,EAAE,6BAA6B;IAC1C,eAAe;IACf,QAAQ,EAAE,gCAAgC;IAC1C,QAAQ;IACR,IAAI;IACJ,OAAO,EAAE,uBAAuB;IAChC,SAAS,EAAE,yBAAyB;IACpC,QAAQ,EAAE,sBAAsB;IAChC,WAAW;IACX,YAAY,EAAE,2BAA2B;IACzC,WAAW,EAAE,wDAAwD;IACrE,kFAAkF;CACnF,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAAC,KAAgB,EAAE,MAAmB;IAChE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,qBAAqB,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,mBAAmB,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAEzF,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EACJ,yFAAyF;YAC3F,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,EAAE;YACT,gBAAgB,EAAE,CAAC,GAAG,OAAO,CAAC;YAC9B,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC;SAC3B,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAExC,OAAO;QACL,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;QACjC,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,gBAAgB,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE;QACrC,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE;QACjC,SAAS,EAAE,SAAS,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;QAChD,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;QAC5C,QAAQ,EAAE,SAAS,CAAC,QAAQ;KAC7B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { CodeGraph } from './codeGraph.js';
2
+ export interface TaintFunctionNode {
3
+ id: string;
4
+ qualName: string;
5
+ bareName: string;
6
+ file: string;
7
+ callees: string[];
8
+ references: string[];
9
+ memberReferences: string[];
10
+ sourceHit: string | null;
11
+ sinkHit: string | null;
12
+ hasSource: boolean;
13
+ hasSink: boolean;
14
+ }
15
+ export interface TaintFunctionIndex {
16
+ fnByQual: Map<string, TaintFunctionNode>;
17
+ fnsByBareName: Map<string, TaintFunctionNode[]>;
18
+ totalCallSites: number;
19
+ }
20
+ export declare function buildTaintFunctionIndex(graph: CodeGraph, sources: Set<string>, sinks: Set<string>, customSources: Set<string>, customSinks: Set<string>): TaintFunctionIndex;