projscan 4.14.0 → 4.15.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 (186) hide show
  1. package/README.md +71 -21
  2. package/dist/cli/commands/evidencePack.js +2 -0
  3. package/dist/cli/commands/evidencePack.js.map +1 -1
  4. package/dist/cli/commands/prove.js +172 -23
  5. package/dist/cli/commands/prove.js.map +1 -1
  6. package/dist/cli/commands/startConsole.d.ts +2 -2
  7. package/dist/cli/commands/startConsole.js +2 -260
  8. package/dist/cli/commands/startConsole.js.map +1 -1
  9. package/dist/cli/commands/startConsoleExecution.d.ts +5 -0
  10. package/dist/cli/commands/startConsoleExecution.js +108 -0
  11. package/dist/cli/commands/startConsoleExecution.js.map +1 -0
  12. package/dist/cli/commands/startConsoleMission.d.ts +6 -0
  13. package/dist/cli/commands/startConsoleMission.js +157 -0
  14. package/dist/cli/commands/startConsoleMission.js.map +1 -0
  15. package/dist/cli/commands/startMissionBundle.js +24 -27
  16. package/dist/cli/commands/startMissionBundle.js.map +1 -1
  17. package/dist/core/adoption.d.ts +8 -81
  18. package/dist/core/adoption.js +4 -549
  19. package/dist/core/adoption.js.map +1 -1
  20. package/dist/core/adoptionFirstRunDiagnostics.d.ts +20 -0
  21. package/dist/core/adoptionFirstRunDiagnostics.js +240 -0
  22. package/dist/core/adoptionFirstRunDiagnostics.js.map +1 -0
  23. package/dist/core/adoptionMcpConfig.d.ts +27 -0
  24. package/dist/core/adoptionMcpConfig.js +123 -0
  25. package/dist/core/adoptionMcpConfig.js.map +1 -0
  26. package/dist/core/adoptionMcpDoctor.d.ts +23 -0
  27. package/dist/core/adoptionMcpDoctor.js +87 -0
  28. package/dist/core/adoptionMcpDoctor.js.map +1 -0
  29. package/dist/core/adoptionWorkflowRecipes.d.ts +14 -0
  30. package/dist/core/adoptionWorkflowRecipes.js +110 -0
  31. package/dist/core/adoptionWorkflowRecipes.js.map +1 -0
  32. package/dist/core/bugHunt.js +26 -255
  33. package/dist/core/bugHunt.js.map +1 -1
  34. package/dist/core/bugHuntPreflightFindings.d.ts +2 -1
  35. package/dist/core/bugHuntPreflightFindings.js +20 -0
  36. package/dist/core/bugHuntPreflightFindings.js.map +1 -1
  37. package/dist/core/bugHuntReportAssembly.d.ts +20 -0
  38. package/dist/core/bugHuntReportAssembly.js +179 -0
  39. package/dist/core/bugHuntReportAssembly.js.map +1 -0
  40. package/dist/core/bugHuntSourceFindings.d.ts +3 -0
  41. package/dist/core/bugHuntSourceFindings.js +61 -0
  42. package/dist/core/bugHuntSourceFindings.js.map +1 -0
  43. package/dist/core/dogfood.js +4 -393
  44. package/dist/core/dogfood.js.map +1 -1
  45. package/dist/core/dogfoodMarketValidation.d.ts +5 -0
  46. package/dist/core/dogfoodMarketValidation.js +265 -0
  47. package/dist/core/dogfoodMarketValidation.js.map +1 -0
  48. package/dist/core/dogfoodRepoEvaluation.d.ts +4 -0
  49. package/dist/core/dogfoodRepoEvaluation.js +137 -0
  50. package/dist/core/dogfoodRepoEvaluation.js.map +1 -0
  51. package/dist/core/evidenceComment.js +50 -13
  52. package/dist/core/evidenceComment.js.map +1 -1
  53. package/dist/core/feedback.js +2 -252
  54. package/dist/core/feedback.js.map +1 -1
  55. package/dist/core/feedbackIntakeClassifier.d.ts +2 -0
  56. package/dist/core/feedbackIntakeClassifier.js +255 -0
  57. package/dist/core/feedbackIntakeClassifier.js.map +1 -0
  58. package/dist/core/intentRouterKeywordToolGuards.js +1 -55
  59. package/dist/core/intentRouterKeywordToolGuards.js.map +1 -1
  60. package/dist/core/intentRouterKeywordWeights.js +13 -28
  61. package/dist/core/intentRouterKeywordWeights.js.map +1 -1
  62. package/dist/core/intentRouterProductGuardSignals.d.ts +3 -0
  63. package/dist/core/intentRouterProductGuardSignals.js +59 -0
  64. package/dist/core/intentRouterProductGuardSignals.js.map +1 -0
  65. package/dist/core/markdownSafety.d.ts +3 -0
  66. package/dist/core/markdownSafety.js +14 -0
  67. package/dist/core/markdownSafety.js.map +1 -0
  68. package/dist/core/preflight.d.ts +2 -0
  69. package/dist/core/preflight.js.map +1 -1
  70. package/dist/core/preflightChangedFiles.d.ts +2 -0
  71. package/dist/core/preflightChangedFiles.js +1 -1
  72. package/dist/core/preflightChangedFiles.js.map +1 -1
  73. package/dist/core/preflightInputs.d.ts +2 -0
  74. package/dist/core/preflightInputs.js +5 -2
  75. package/dist/core/preflightInputs.js.map +1 -1
  76. package/dist/core/proofLedger.d.ts +5 -1
  77. package/dist/core/proofLedger.js +161 -12
  78. package/dist/core/proofLedger.js.map +1 -1
  79. package/dist/core/proofReplay.d.ts +9 -0
  80. package/dist/core/proofReplay.js +164 -0
  81. package/dist/core/proofReplay.js.map +1 -0
  82. package/dist/core/proofSufficiency.d.ts +19 -0
  83. package/dist/core/proofSufficiency.js +425 -0
  84. package/dist/core/proofSufficiency.js.map +1 -0
  85. package/dist/core/prove.d.ts +6 -0
  86. package/dist/core/prove.js +277 -87
  87. package/dist/core/prove.js.map +1 -1
  88. package/dist/core/qualityScorecard.js +8 -238
  89. package/dist/core/qualityScorecard.js.map +1 -1
  90. package/dist/core/qualityScorecardDimensions.d.ts +14 -0
  91. package/dist/core/qualityScorecardDimensions.js +99 -0
  92. package/dist/core/qualityScorecardDimensions.js.map +1 -0
  93. package/dist/core/qualityScorecardRisks.d.ts +8 -0
  94. package/dist/core/qualityScorecardRisks.js +107 -0
  95. package/dist/core/qualityScorecardRisks.js.map +1 -0
  96. package/dist/core/qualityScorecardSignals.d.ts +20 -0
  97. package/dist/core/qualityScorecardSignals.js +59 -0
  98. package/dist/core/qualityScorecardSignals.js.map +1 -0
  99. package/dist/core/releaseEvidence.d.ts +1 -0
  100. package/dist/core/releaseEvidence.js +15 -40
  101. package/dist/core/releaseEvidence.js.map +1 -1
  102. package/dist/core/releaseEvidenceBaseline.js +4 -1
  103. package/dist/core/releaseEvidenceBaseline.js.map +1 -1
  104. package/dist/core/releaseEvidenceProofReceipt.d.ts +6 -0
  105. package/dist/core/releaseEvidenceProofReceipt.js +140 -0
  106. package/dist/core/releaseEvidenceProofReceipt.js.map +1 -0
  107. package/dist/core/releaseEvidenceVerdict.d.ts +5 -2
  108. package/dist/core/releaseEvidenceVerdict.js +39 -1
  109. package/dist/core/releaseEvidenceVerdict.js.map +1 -1
  110. package/dist/core/repositoryScanner.d.ts +1 -0
  111. package/dist/core/repositoryScanner.js +5 -4
  112. package/dist/core/repositoryScanner.js.map +1 -1
  113. package/dist/core/sessionResources.d.ts +14 -2
  114. package/dist/core/sessionResources.js +3 -3
  115. package/dist/core/sessionResources.js.map +1 -1
  116. package/dist/core/startInputs.d.ts +1 -1
  117. package/dist/core/startIntentTargets.d.ts +1 -1
  118. package/dist/core/startIntentTargets.js +1 -16
  119. package/dist/core/startIntentTargets.js.map +1 -1
  120. package/dist/core/startMissionInputStatusPolicy.d.ts +7 -0
  121. package/dist/core/startMissionInputStatusPolicy.js +74 -0
  122. package/dist/core/startMissionInputStatusPolicy.js.map +1 -0
  123. package/dist/core/startMissionPolicy.d.ts +6 -15
  124. package/dist/core/startMissionPolicy.js +4 -305
  125. package/dist/core/startMissionPolicy.js.map +1 -1
  126. package/dist/core/startMissionProofPolicy.d.ts +6 -0
  127. package/dist/core/startMissionProofPolicy.js +84 -0
  128. package/dist/core/startMissionProofPolicy.js.map +1 -0
  129. package/dist/core/startMissionRiskPolicy.d.ts +4 -0
  130. package/dist/core/startMissionRiskPolicy.js +85 -0
  131. package/dist/core/startMissionRiskPolicy.js.map +1 -0
  132. package/dist/core/startMissionRoutingPolicy.d.ts +6 -0
  133. package/dist/core/startMissionRoutingPolicy.js +67 -0
  134. package/dist/core/startMissionRoutingPolicy.js.map +1 -0
  135. package/dist/core/startMode.d.ts +1 -2
  136. package/dist/core/startMode.js +4 -151
  137. package/dist/core/startMode.js.map +1 -1
  138. package/dist/core/startModeIntentPolicy.d.ts +12 -0
  139. package/dist/core/startModeIntentPolicy.js +41 -0
  140. package/dist/core/startModeIntentPolicy.js.map +1 -0
  141. package/dist/core/startModeRoutingPolicy.d.ts +4 -0
  142. package/dist/core/startModeRoutingPolicy.js +117 -0
  143. package/dist/core/startModeRoutingPolicy.js.map +1 -0
  144. package/dist/core/startSearchQueryTargets.d.ts +1 -0
  145. package/dist/core/startSearchQueryTargets.js +17 -0
  146. package/dist/core/startSearchQueryTargets.js.map +1 -0
  147. package/dist/core/workplan.d.ts +3 -2
  148. package/dist/core/workplan.js +11 -585
  149. package/dist/core/workplan.js.map +1 -1
  150. package/dist/core/workplanCoordinationTasks.d.ts +3 -0
  151. package/dist/core/workplanCoordinationTasks.js +82 -0
  152. package/dist/core/workplanCoordinationTasks.js.map +1 -0
  153. package/dist/core/workplanModeTasks.d.ts +2 -0
  154. package/dist/core/workplanModeTasks.js +192 -0
  155. package/dist/core/workplanModeTasks.js.map +1 -0
  156. package/dist/core/workplanPreflightTasks.d.ts +2 -0
  157. package/dist/core/workplanPreflightTasks.js +126 -0
  158. package/dist/core/workplanPreflightTasks.js.map +1 -0
  159. package/dist/core/workplanQualitySignals.d.ts +7 -0
  160. package/dist/core/workplanQualitySignals.js +63 -0
  161. package/dist/core/workplanQualitySignals.js.map +1 -0
  162. package/dist/core/workplanReport.d.ts +4 -0
  163. package/dist/core/workplanReport.js +79 -0
  164. package/dist/core/workplanReport.js.map +1 -0
  165. package/dist/core/workplanRiskOwnership.d.ts +5 -0
  166. package/dist/core/workplanRiskOwnership.js +97 -0
  167. package/dist/core/workplanRiskOwnership.js.map +1 -0
  168. package/dist/core/workplanSuggestedActions.d.ts +2 -0
  169. package/dist/core/workplanSuggestedActions.js +43 -0
  170. package/dist/core/workplanSuggestedActions.js.map +1 -0
  171. package/dist/mcp/tools/prove.js +23 -17
  172. package/dist/mcp/tools/prove.js.map +1 -1
  173. package/dist/projscan-sbom.cdx.json +6 -6
  174. package/dist/tool-manifest.json +2 -2
  175. package/dist/types/config.d.ts +15 -0
  176. package/dist/types/evidencePack.d.ts +21 -0
  177. package/dist/types/prove.d.ts +79 -0
  178. package/dist/utils/changedFiles.js +57 -16
  179. package/dist/utils/changedFiles.js.map +1 -1
  180. package/dist/utils/config.js +2 -0
  181. package/dist/utils/config.js.map +1 -1
  182. package/dist/utils/configProofRecipes.d.ts +2 -0
  183. package/dist/utils/configProofRecipes.js +91 -0
  184. package/dist/utils/configProofRecipes.js.map +1 -0
  185. package/docs/GUIDE.md +120 -19
  186. package/package.json +1 -1
@@ -1,22 +1,6 @@
1
- import { routeIntent } from './intentRouter.js';
2
- import { isProductPlanningWorkplanRoute } from './startSuccessCriteria.js';
1
+ import { inferModeFromStartRoutes, routesForStartIntent, } from './startModeRoutingPolicy.js';
3
2
  import { isWorkplanMode } from './workplan.js';
4
- const MODE_RESOLVERS = [
5
- releaseMode,
6
- bugHuntMode,
7
- productPlanningMode,
8
- handoffMode,
9
- agentPlanningMode,
10
- prohibitedContinuationMode,
11
- hardeningMode,
12
- evidencePackMode,
13
- reviewMode,
14
- regressionMode,
15
- prDiffMode,
16
- mergeRiskMode,
17
- primaryPreflightMode,
18
- fallbackPreflightMode,
19
- ];
3
+ export { hasProhibitedWorkflowModeAction, preflightModeFromIntent } from './startModeIntentPolicy.js';
20
4
  export function resolveStartMode(value, intent) {
21
5
  const explicitMode = typeof value === 'string' ? normalizeStartModeInput(value) : undefined;
22
6
  if (explicitMode) {
@@ -51,33 +35,10 @@ function normalizeStartModeInput(value) {
51
35
  return isWorkplanMode(value) ? value : undefined;
52
36
  }
53
37
  export function inferModeFromIntent(intent) {
54
- const routes = routesForIntent(intent);
55
- const context = {
56
- intent: intent ?? '',
57
- routes,
58
- primaryRoute: routes[0],
59
- };
60
- for (const resolver of MODE_RESOLVERS) {
61
- const mode = resolver(context);
62
- if (mode)
63
- return mode;
64
- }
65
- return undefined;
38
+ return inferModeFromStartRoutes(intent);
66
39
  }
67
40
  export function routesForIntent(intent) {
68
- if (!intent)
69
- return [];
70
- return routeIntent(intent).matches.map(routeEntryToStartIntent);
71
- }
72
- export function preflightModeFromIntent(intent) {
73
- const text = intent.toLowerCase();
74
- if (!hasProhibitedWorkflowModeAction(intent) &&
75
- /\b(?:merge|merged|merging|release|rebase|rebasing|conflict|conflicts|resolve|resolving)\b/.test(text))
76
- return 'before_merge';
77
- if (/\b(?:commit|committing|committed|pr|pull\s+request)\b/.test(text) ||
78
- handoffIntentMatches(text))
79
- return 'before_commit';
80
- return 'before_edit';
41
+ return routesForStartIntent(intent);
81
42
  }
82
43
  function defaultModeReason(intent, routed) {
83
44
  if (!intent)
@@ -87,112 +48,4 @@ function defaultModeReason(intent, routed) {
87
48
  }
88
49
  return `No mode-specific intent matched "${intent}", so start defaults to before_edit.`;
89
50
  }
90
- function routeEntryToStartIntent(entry) {
91
- return {
92
- intent: entry.intent,
93
- category: entry.category,
94
- tool: entry.tool,
95
- cli: entry.cli,
96
- why: entry.why,
97
- example: entry.example,
98
- confidence: entry.confidence,
99
- rank: entry.rank,
100
- score: entry.score,
101
- matchedKeywords: entry.matchedKeywords,
102
- };
103
- }
104
- function releaseMode({ intent, primaryRoute }) {
105
- if (hasProhibitedWorkflowModeAction(intent))
106
- return undefined;
107
- return primaryRoute?.tool === 'projscan_release_train' ? 'release' : undefined;
108
- }
109
- function bugHuntMode({ primaryRoute }) {
110
- return primaryRoute?.tool === 'projscan_bug_hunt' && primaryRoute.confidence === 'high'
111
- ? 'bug_hunt'
112
- : undefined;
113
- }
114
- function productPlanningMode({ primaryRoute }) {
115
- return isProductPlanningWorkplanRoute(primaryRoute) ? 'bug_hunt' : undefined;
116
- }
117
- function handoffMode({ intent, primaryRoute }) {
118
- return primaryRoute?.tool === 'projscan_agent_brief' && handoffIntentMatches(intent)
119
- ? 'before_commit'
120
- : undefined;
121
- }
122
- function agentPlanningMode({ primaryRoute }) {
123
- return primaryRoute?.tool === 'projscan_workplan' && primaryRoute.confidence === 'high'
124
- ? 'before_edit'
125
- : undefined;
126
- }
127
- function prohibitedContinuationMode({ intent }) {
128
- if (!hasProhibitedWorkflowModeAction(intent))
129
- return undefined;
130
- return hasContinuationPlanningHint(intent) ? 'before_edit' : undefined;
131
- }
132
- function hardeningMode({ primaryRoute }) {
133
- return primaryRoute?.tool === 'projscan_dataflow' && primaryRoute.confidence === 'high'
134
- ? 'hardening'
135
- : undefined;
136
- }
137
- function evidencePackMode({ intent, primaryRoute }) {
138
- if (primaryRoute?.tool !== 'projscan_evidence_pack' && primaryRoute?.tool !== 'projscan_analyze') {
139
- return undefined;
140
- }
141
- return releaseCandidateReviewIntentMatches(intent) || noPublishReleaseReadinessIntentMatches(intent)
142
- ? 'before_merge'
143
- : 'before_commit';
144
- }
145
- function reviewMode({ intent, primaryRoute }) {
146
- return primaryRoute?.tool === 'projscan_review' ? reviewModeFromIntent(intent) : undefined;
147
- }
148
- function regressionMode({ intent, primaryRoute }) {
149
- return primaryRoute?.tool === 'projscan_regression_plan'
150
- ? regressionModeFromIntent(intent)
151
- : undefined;
152
- }
153
- function prDiffMode({ primaryRoute }) {
154
- return primaryRoute?.tool === 'projscan_pr_diff' ? 'before_commit' : undefined;
155
- }
156
- function mergeRiskMode({ primaryRoute }) {
157
- return primaryRoute?.tool === 'projscan_merge_risk' ? 'before_merge' : undefined;
158
- }
159
- function primaryPreflightMode({ intent, primaryRoute, }) {
160
- return primaryRoute?.tool === 'projscan_preflight' ? preflightModeFromIntent(intent) : undefined;
161
- }
162
- function fallbackPreflightMode({ intent, routes }) {
163
- if (routes.some((route) => route.tool === 'projscan_preflight') && hasPreflightModeHint(intent)) {
164
- return preflightModeFromIntent(intent);
165
- }
166
- return undefined;
167
- }
168
- function hasPreflightModeHint(intent) {
169
- return (/\b(?:safe|safety|gate|preflight|commit|committing|committed|merge|merged|merging|rebase|rebasing|conflict|conflicts|resolve|resolving|edit|proceed|block|blocked|blocker|blockers|blocking|allowed)\b/i.test(intent) || handoffIntentMatches(intent));
170
- }
171
- function hasContinuationPlanningHint(intent) {
172
- return /\b(?:keep\s+going|keep\s+(?:improving|working|implementing)|continue|continuing|go\s+on|improve|improving|implement|implementing|implementation|roadmap|user\s+research)\b/i.test(intent);
173
- }
174
- function handoffIntentMatches(intent) {
175
- return /\b(?:handoff|handover|hand\s+off)\b/i.test(intent);
176
- }
177
- function releaseCandidateReviewIntentMatches(intent) {
178
- return (/\brelease[-\s]+candidate\b/i.test(intent) &&
179
- /\b(?:review|approval|readiness|evidence|prepare|prepared|preparing)\b/i.test(intent));
180
- }
181
- function noPublishReleaseReadinessIntentMatches(intent) {
182
- return (/\brelease\b/i.test(intent) &&
183
- /\b(?:ready|readiness|check|proof|review)\b/i.test(intent) &&
184
- (/\bwithout\b[^.?!\n]*(?:publish|publishing)\b/i.test(intent) ||
185
- /\b(?:do\s+not|don't|dont|never)\b[^.?!\n]*(?:publish|publishing)\b/i.test(intent)));
186
- }
187
- export function hasProhibitedWorkflowModeAction(intent) {
188
- return (/\bno(?:[-\s]+more)?[-\s]+(?:release|releasing|publish|publishing|deploy|deploying|deployment|push|pushing|merge|merging|tag|tagging|ship|shipping|version[-\s]+bump|bump)\b/i.test(intent) ||
189
- /\b(?:do\s+not|don't|dont|never)\b[^.?!\n]*(?:release|releasing|publish|publishing|deploy|deploying|deployment|push|pushing|merge|merging|tag|tagging|ship|shipping|bump(?:ing)?(?:\s+the)?\s+version|version\s+bump)\b/i.test(intent) ||
190
- /\bwithout\b[^.?!\n]*(?:release|releasing|publish|publishing|deploy|deploying|deployment|push|pushing|merge|merging|tag|tagging|ship|shipping|bump(?:ing)?(?:\s+the)?\s+version|version\s+bump)\b/i.test(intent));
191
- }
192
- function regressionModeFromIntent(intent) {
193
- return /\bmerge|merged|merging|release\b/i.test(intent) ? 'before_merge' : 'before_commit';
194
- }
195
- function reviewModeFromIntent(intent) {
196
- return /\bmerge|merged|merging\b/i.test(intent) ? 'before_merge' : 'before_commit';
197
- }
198
51
  //# sourceMappingURL=startMode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"startMode.js","sourceRoot":"","sources":["../../src/core/startMode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"startMode.js","sourceRoot":"","sources":["../../src/core/startMode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAI/C,OAAO,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAUtG,MAAM,UAAU,gBAAgB,CAC9B,KAAiC,EACjC,MAA0B;IAE1B,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,UAAU;YAClB,MAAM,EACJ,YAAY,KAAK,KAAK;gBACpB,CAAC,CAAC,QAAQ,KAAK,2BAA2B;gBAC1C,CAAC,CAAC,QAAQ,KAAK,wCAAwC,YAAY,GAAG;SAC3E,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,WAAW,MAAM,iBAAiB,QAAQ,YAAY;SAC/D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;KACtE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,uBAAuB,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa;IAC5C,IAAI,KAAK,KAAK,gBAAgB;QAAE,OAAO,eAAe,CAAC;IACvD,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAA0B;IAC5D,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAA0B;IACxD,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA0B,EAAE,MAAe;IACpE,IAAI,CAAC,MAAM;QACT,OAAO,0FAA0F,CAAC;IACpG,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,yEAAyE,MAAM,sCAAsC,CAAC;IAC/H,CAAC;IACD,OAAO,oCAAoC,MAAM,sCAAsC,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,12 @@
1
+ type PreflightStartMode = 'before_edit' | 'before_commit' | 'before_merge';
2
+ type ReviewStartMode = 'before_commit' | 'before_merge';
3
+ export declare function preflightModeFromIntent(intent: string): PreflightStartMode;
4
+ export declare function hasPreflightModeHint(intent: string): boolean;
5
+ export declare function hasContinuationPlanningHint(intent: string): boolean;
6
+ export declare function handoffIntentMatches(intent: string): boolean;
7
+ export declare function releaseCandidateReviewIntentMatches(intent: string): boolean;
8
+ export declare function noPublishReleaseReadinessIntentMatches(intent: string): boolean;
9
+ export declare function hasProhibitedWorkflowModeAction(intent: string): boolean;
10
+ export declare function regressionModeFromIntent(intent: string): ReviewStartMode;
11
+ export declare function reviewModeFromIntent(intent: string): ReviewStartMode;
12
+ export {};
@@ -0,0 +1,41 @@
1
+ export function preflightModeFromIntent(intent) {
2
+ const text = intent.toLowerCase();
3
+ if (!hasProhibitedWorkflowModeAction(intent) &&
4
+ /\b(?:merge|merged|merging|release|rebase|rebasing|conflict|conflicts|resolve|resolving)\b/.test(text))
5
+ return 'before_merge';
6
+ if (/\b(?:commit|committing|committed|pr|pull\s+request)\b/.test(text) ||
7
+ handoffIntentMatches(text))
8
+ return 'before_commit';
9
+ return 'before_edit';
10
+ }
11
+ export function hasPreflightModeHint(intent) {
12
+ return (/\b(?:safe|safety|gate|preflight|commit|committing|committed|merge|merged|merging|rebase|rebasing|conflict|conflicts|resolve|resolving|edit|proceed|block|blocked|blocker|blockers|blocking|allowed)\b/i.test(intent) || handoffIntentMatches(intent));
13
+ }
14
+ export function hasContinuationPlanningHint(intent) {
15
+ return /\b(?:keep\s+going|keep\s+(?:improving|working|implementing)|continue|continuing|go\s+on|improve|improving|implement|implementing|implementation|roadmap|user\s+research)\b/i.test(intent);
16
+ }
17
+ export function handoffIntentMatches(intent) {
18
+ return /\b(?:handoff|handover|hand\s+off)\b/i.test(intent);
19
+ }
20
+ export function releaseCandidateReviewIntentMatches(intent) {
21
+ return (/\brelease[-\s]+candidate\b/i.test(intent) &&
22
+ /\b(?:review|approval|readiness|evidence|prepare|prepared|preparing)\b/i.test(intent));
23
+ }
24
+ export function noPublishReleaseReadinessIntentMatches(intent) {
25
+ return (/\brelease\b/i.test(intent) &&
26
+ /\b(?:ready|readiness|check|proof|review)\b/i.test(intent) &&
27
+ (/\bwithout\b[^.?!\n]*(?:publish|publishing)\b/i.test(intent) ||
28
+ /\b(?:do\s+not|don't|dont|never)\b[^.?!\n]*(?:publish|publishing)\b/i.test(intent)));
29
+ }
30
+ export function hasProhibitedWorkflowModeAction(intent) {
31
+ return (/\bno(?:[-\s]+more)?[-\s]+(?:release|releasing|publish|publishing|deploy|deploying|deployment|push|pushing|merge|merging|tag|tagging|ship|shipping|version[-\s]+bump|bump)\b/i.test(intent) ||
32
+ /\b(?:do\s+not|don't|dont|never)\b[^.?!\n]*(?:release|releasing|publish|publishing|deploy|deploying|deployment|push|pushing|merge|merging|tag|tagging|ship|shipping|bump(?:ing)?(?:\s+the)?\s+version|version\s+bump)\b/i.test(intent) ||
33
+ /\bwithout\b[^.?!\n]*(?:release|releasing|publish|publishing|deploy|deploying|deployment|push|pushing|merge|merging|tag|tagging|ship|shipping|bump(?:ing)?(?:\s+the)?\s+version|version\s+bump)\b/i.test(intent));
34
+ }
35
+ export function regressionModeFromIntent(intent) {
36
+ return /\bmerge|merged|merging|release\b/i.test(intent) ? 'before_merge' : 'before_commit';
37
+ }
38
+ export function reviewModeFromIntent(intent) {
39
+ return /\bmerge|merged|merging\b/i.test(intent) ? 'before_merge' : 'before_commit';
40
+ }
41
+ //# sourceMappingURL=startModeIntentPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startModeIntentPolicy.js","sourceRoot":"","sources":["../../src/core/startModeIntentPolicy.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAClC,IACE,CAAC,+BAA+B,CAAC,MAAM,CAAC;QACxC,2FAA2F,CAAC,IAAI,CAC9F,IAAI,CACL;QAED,OAAO,cAAc,CAAC;IACxB,IACE,uDAAuD,CAAC,IAAI,CAAC,IAAI,CAAC;QAClE,oBAAoB,CAAC,IAAI,CAAC;QAE1B,OAAO,eAAe,CAAC;IACzB,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,OAAO,CACL,wMAAwM,CAAC,IAAI,CAC3M,MAAM,CACP,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAClC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAc;IACxD,OAAO,6KAA6K,CAAC,IAAI,CACvL,MAAM,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,OAAO,sCAAsC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,MAAc;IAChE,OAAO,CACL,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1C,wEAAwE,CAAC,IAAI,CAAC,MAAM,CAAC,CACtF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,MAAc;IACnE,OAAO,CACL,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B,6CAA6C,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1D,CAAC,+CAA+C,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3D,qEAAqE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CACtF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,MAAc;IAC5D,OAAO,CACL,8KAA8K,CAAC,IAAI,CACjL,MAAM,CACP;QACD,yNAAyN,CAAC,IAAI,CAC5N,MAAM,CACP;QACD,mMAAmM,CAAC,IAAI,CACtM,MAAM,CACP,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,OAAO,mCAAmC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,OAAO,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC;AACrF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { StartRoutedIntent } from '../types/start.js';
2
+ import type { WorkplanMode } from '../types/workplan.js';
3
+ export declare function inferModeFromStartRoutes(intent: string | undefined): WorkplanMode | undefined;
4
+ export declare function routesForStartIntent(intent: string | undefined): StartRoutedIntent[];
@@ -0,0 +1,117 @@
1
+ import { routeIntent } from './intentRouter.js';
2
+ import { isProductPlanningWorkplanRoute } from './startSuccessCriteria.js';
3
+ import { hasContinuationPlanningHint, hasPreflightModeHint, handoffIntentMatches, hasProhibitedWorkflowModeAction, noPublishReleaseReadinessIntentMatches, preflightModeFromIntent, regressionModeFromIntent, releaseCandidateReviewIntentMatches, reviewModeFromIntent, } from './startModeIntentPolicy.js';
4
+ const MODE_RESOLVERS = [
5
+ releaseMode,
6
+ bugHuntMode,
7
+ productPlanningMode,
8
+ handoffMode,
9
+ agentPlanningMode,
10
+ prohibitedContinuationMode,
11
+ hardeningMode,
12
+ evidencePackMode,
13
+ reviewMode,
14
+ regressionMode,
15
+ prDiffMode,
16
+ mergeRiskMode,
17
+ primaryPreflightMode,
18
+ fallbackPreflightMode,
19
+ ];
20
+ export function inferModeFromStartRoutes(intent) {
21
+ const routes = routesForStartIntent(intent);
22
+ const context = {
23
+ intent: intent ?? '',
24
+ routes,
25
+ primaryRoute: routes[0],
26
+ };
27
+ for (const resolver of MODE_RESOLVERS) {
28
+ const mode = resolver(context);
29
+ if (mode)
30
+ return mode;
31
+ }
32
+ return undefined;
33
+ }
34
+ export function routesForStartIntent(intent) {
35
+ if (!intent)
36
+ return [];
37
+ return routeIntent(intent).matches.map(routeEntryToStartIntent);
38
+ }
39
+ function routeEntryToStartIntent(entry) {
40
+ return {
41
+ intent: entry.intent,
42
+ category: entry.category,
43
+ tool: entry.tool,
44
+ cli: entry.cli,
45
+ why: entry.why,
46
+ example: entry.example,
47
+ confidence: entry.confidence,
48
+ rank: entry.rank,
49
+ score: entry.score,
50
+ matchedKeywords: entry.matchedKeywords,
51
+ };
52
+ }
53
+ function releaseMode({ intent, primaryRoute }) {
54
+ if (hasProhibitedWorkflowModeAction(intent))
55
+ return undefined;
56
+ return primaryRoute?.tool === 'projscan_release_train' ? 'release' : undefined;
57
+ }
58
+ function bugHuntMode({ primaryRoute }) {
59
+ return primaryRoute?.tool === 'projscan_bug_hunt' && primaryRoute.confidence === 'high'
60
+ ? 'bug_hunt'
61
+ : undefined;
62
+ }
63
+ function productPlanningMode({ primaryRoute }) {
64
+ return isProductPlanningWorkplanRoute(primaryRoute) ? 'bug_hunt' : undefined;
65
+ }
66
+ function handoffMode({ intent, primaryRoute }) {
67
+ return primaryRoute?.tool === 'projscan_agent_brief' && handoffIntentMatches(intent)
68
+ ? 'before_commit'
69
+ : undefined;
70
+ }
71
+ function agentPlanningMode({ primaryRoute }) {
72
+ return primaryRoute?.tool === 'projscan_workplan' && primaryRoute.confidence === 'high'
73
+ ? 'before_edit'
74
+ : undefined;
75
+ }
76
+ function prohibitedContinuationMode({ intent }) {
77
+ if (!hasProhibitedWorkflowModeAction(intent))
78
+ return undefined;
79
+ return hasContinuationPlanningHint(intent) ? 'before_edit' : undefined;
80
+ }
81
+ function hardeningMode({ primaryRoute }) {
82
+ return primaryRoute?.tool === 'projscan_dataflow' && primaryRoute.confidence === 'high'
83
+ ? 'hardening'
84
+ : undefined;
85
+ }
86
+ function evidencePackMode({ intent, primaryRoute }) {
87
+ if (primaryRoute?.tool !== 'projscan_evidence_pack' && primaryRoute?.tool !== 'projscan_analyze') {
88
+ return undefined;
89
+ }
90
+ return releaseCandidateReviewIntentMatches(intent) || noPublishReleaseReadinessIntentMatches(intent)
91
+ ? 'before_merge'
92
+ : 'before_commit';
93
+ }
94
+ function reviewMode({ intent, primaryRoute }) {
95
+ return primaryRoute?.tool === 'projscan_review' ? reviewModeFromIntent(intent) : undefined;
96
+ }
97
+ function regressionMode({ intent, primaryRoute }) {
98
+ return primaryRoute?.tool === 'projscan_regression_plan'
99
+ ? regressionModeFromIntent(intent)
100
+ : undefined;
101
+ }
102
+ function prDiffMode({ primaryRoute }) {
103
+ return primaryRoute?.tool === 'projscan_pr_diff' ? 'before_commit' : undefined;
104
+ }
105
+ function mergeRiskMode({ primaryRoute }) {
106
+ return primaryRoute?.tool === 'projscan_merge_risk' ? 'before_merge' : undefined;
107
+ }
108
+ function primaryPreflightMode({ intent, primaryRoute, }) {
109
+ return primaryRoute?.tool === 'projscan_preflight' ? preflightModeFromIntent(intent) : undefined;
110
+ }
111
+ function fallbackPreflightMode({ intent, routes }) {
112
+ if (routes.some((route) => route.tool === 'projscan_preflight') && hasPreflightModeHint(intent)) {
113
+ return preflightModeFromIntent(intent);
114
+ }
115
+ return undefined;
116
+ }
117
+ //# sourceMappingURL=startModeRoutingPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startModeRoutingPolicy.js","sourceRoot":"","sources":["../../src/core/startModeRoutingPolicy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function extractSearchQuery(intent: string): string;
@@ -0,0 +1,17 @@
1
+ import { unwrapTarget } from './startIntentTargetText.js';
2
+ import { searchQueryFromHighPrioritySignals } from './startHighPrioritySearchTargets.js';
3
+ import { searchQueryFromTestAndRouteLookups } from './startTestRouteSearchTargets.js';
4
+ import { searchQueryFromGeneratedAndConfig } from './startGeneratedConfigSearchTargets.js';
5
+ import { searchQueryFromImplementation, searchQueryFromOwnership } from './startOwnershipSearchTargets.js';
6
+ import { searchQueryFromDomainSignals } from './startIntentDomainSearchQueries.js';
7
+ export function extractSearchQuery(intent) {
8
+ const trimmed = intent.trim();
9
+ return (searchQueryFromHighPrioritySignals(trimmed) ??
10
+ searchQueryFromDomainSignals(trimmed) ??
11
+ searchQueryFromTestAndRouteLookups(trimmed) ??
12
+ searchQueryFromGeneratedAndConfig(trimmed) ??
13
+ searchQueryFromOwnership(trimmed) ??
14
+ searchQueryFromImplementation(trimmed) ??
15
+ unwrapTarget((trimmed.match(/\b(?:search|find|locate|lookup)\s+(?:for\s+)?(.+)$/i)?.[1] ?? trimmed).trim()));
16
+ }
17
+ //# sourceMappingURL=startSearchQueryTargets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startSearchQueryTargets.js","sourceRoot":"","sources":["../../src/core/startSearchQueryTargets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,kCAAkC,EAAE,MAAM,qCAAqC,CAAC;AACzF,OAAO,EAAE,kCAAkC,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAC3F,OAAO,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC3G,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAEnF,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,CACL,kCAAkC,CAAC,OAAO,CAAC;QAC3C,4BAA4B,CAAC,OAAO,CAAC;QACrC,kCAAkC,CAAC,OAAO,CAAC;QAC3C,iCAAiC,CAAC,OAAO,CAAC;QAC1C,wBAAwB,CAAC,OAAO,CAAC;QACjC,6BAA6B,CAAC,OAAO,CAAC;QACtC,YAAY,CACV,CAAC,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,CAC9F,CACF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
- import type { WorkplanHandoffPayload, WorkplanMode, WorkplanReport, WorkplanTask } from '../types.js';
1
+ import { rankWorkplanTasks } from './workplanReport.js';
2
+ import type { WorkplanHandoffPayload, WorkplanMode, WorkplanReport } from '../types.js';
2
3
  export interface ComputeWorkplanOptions {
3
4
  mode?: WorkplanMode;
4
5
  baseRef?: string;
@@ -10,4 +11,4 @@ export interface ComputeWorkplanOptions {
10
11
  export declare function isWorkplanMode(value: string): value is WorkplanMode;
11
12
  export declare function computeWorkplan(rootPath: string, options?: ComputeWorkplanOptions): Promise<WorkplanReport>;
12
13
  export declare function buildWorkplanHandoff(report: WorkplanReport): WorkplanHandoffPayload;
13
- export declare function rankWorkplanTasks(tasks: WorkplanTask[]): WorkplanTask[];
14
+ export { rankWorkplanTasks };