projscan 4.14.0 → 4.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/README.md +103 -21
  2. package/dist/cli/commands/assess.js +36 -2
  3. package/dist/cli/commands/assess.js.map +1 -1
  4. package/dist/cli/commands/evidencePack.js +2 -0
  5. package/dist/cli/commands/evidencePack.js.map +1 -1
  6. package/dist/cli/commands/prove.js +172 -23
  7. package/dist/cli/commands/prove.js.map +1 -1
  8. package/dist/cli/commands/startConsole.d.ts +2 -2
  9. package/dist/cli/commands/startConsole.js +2 -260
  10. package/dist/cli/commands/startConsole.js.map +1 -1
  11. package/dist/cli/commands/startConsoleExecution.d.ts +5 -0
  12. package/dist/cli/commands/startConsoleExecution.js +108 -0
  13. package/dist/cli/commands/startConsoleExecution.js.map +1 -0
  14. package/dist/cli/commands/startConsoleMission.d.ts +6 -0
  15. package/dist/cli/commands/startConsoleMission.js +157 -0
  16. package/dist/cli/commands/startConsoleMission.js.map +1 -0
  17. package/dist/cli/commands/startMissionBundle.js +24 -27
  18. package/dist/cli/commands/startMissionBundle.js.map +1 -1
  19. package/dist/core/adoption.d.ts +8 -81
  20. package/dist/core/adoption.js +4 -549
  21. package/dist/core/adoption.js.map +1 -1
  22. package/dist/core/adoptionFirstRunDiagnostics.d.ts +20 -0
  23. package/dist/core/adoptionFirstRunDiagnostics.js +240 -0
  24. package/dist/core/adoptionFirstRunDiagnostics.js.map +1 -0
  25. package/dist/core/adoptionMcpConfig.d.ts +27 -0
  26. package/dist/core/adoptionMcpConfig.js +123 -0
  27. package/dist/core/adoptionMcpConfig.js.map +1 -0
  28. package/dist/core/adoptionMcpDoctor.d.ts +23 -0
  29. package/dist/core/adoptionMcpDoctor.js +87 -0
  30. package/dist/core/adoptionMcpDoctor.js.map +1 -0
  31. package/dist/core/adoptionWorkflowRecipes.d.ts +14 -0
  32. package/dist/core/adoptionWorkflowRecipes.js +110 -0
  33. package/dist/core/adoptionWorkflowRecipes.js.map +1 -0
  34. package/dist/core/baseframeAssessment.d.ts +9 -0
  35. package/dist/core/baseframeAssessment.js +471 -0
  36. package/dist/core/baseframeAssessment.js.map +1 -0
  37. package/dist/core/bugHunt.js +26 -255
  38. package/dist/core/bugHunt.js.map +1 -1
  39. package/dist/core/bugHuntPreflightFindings.d.ts +2 -1
  40. package/dist/core/bugHuntPreflightFindings.js +20 -0
  41. package/dist/core/bugHuntPreflightFindings.js.map +1 -1
  42. package/dist/core/bugHuntReportAssembly.d.ts +20 -0
  43. package/dist/core/bugHuntReportAssembly.js +179 -0
  44. package/dist/core/bugHuntReportAssembly.js.map +1 -0
  45. package/dist/core/bugHuntSourceFindings.d.ts +3 -0
  46. package/dist/core/bugHuntSourceFindings.js +61 -0
  47. package/dist/core/bugHuntSourceFindings.js.map +1 -0
  48. package/dist/core/dogfood.js +4 -393
  49. package/dist/core/dogfood.js.map +1 -1
  50. package/dist/core/dogfoodMarketValidation.d.ts +5 -0
  51. package/dist/core/dogfoodMarketValidation.js +265 -0
  52. package/dist/core/dogfoodMarketValidation.js.map +1 -0
  53. package/dist/core/dogfoodRepoEvaluation.d.ts +4 -0
  54. package/dist/core/dogfoodRepoEvaluation.js +137 -0
  55. package/dist/core/dogfoodRepoEvaluation.js.map +1 -0
  56. package/dist/core/evidenceComment.js +50 -13
  57. package/dist/core/evidenceComment.js.map +1 -1
  58. package/dist/core/feedback.js +2 -252
  59. package/dist/core/feedback.js.map +1 -1
  60. package/dist/core/feedbackIntakeClassifier.d.ts +2 -0
  61. package/dist/core/feedbackIntakeClassifier.js +255 -0
  62. package/dist/core/feedbackIntakeClassifier.js.map +1 -0
  63. package/dist/core/intentRouterKeywordToolGuards.js +1 -55
  64. package/dist/core/intentRouterKeywordToolGuards.js.map +1 -1
  65. package/dist/core/intentRouterKeywordWeights.js +13 -28
  66. package/dist/core/intentRouterKeywordWeights.js.map +1 -1
  67. package/dist/core/intentRouterProductGuardSignals.d.ts +3 -0
  68. package/dist/core/intentRouterProductGuardSignals.js +59 -0
  69. package/dist/core/intentRouterProductGuardSignals.js.map +1 -0
  70. package/dist/core/markdownSafety.d.ts +3 -0
  71. package/dist/core/markdownSafety.js +14 -0
  72. package/dist/core/markdownSafety.js.map +1 -0
  73. package/dist/core/preflight.d.ts +2 -0
  74. package/dist/core/preflight.js.map +1 -1
  75. package/dist/core/preflightChangedFiles.d.ts +2 -0
  76. package/dist/core/preflightChangedFiles.js +1 -1
  77. package/dist/core/preflightChangedFiles.js.map +1 -1
  78. package/dist/core/preflightInputs.d.ts +2 -0
  79. package/dist/core/preflightInputs.js +5 -2
  80. package/dist/core/preflightInputs.js.map +1 -1
  81. package/dist/core/proofLedger.d.ts +5 -1
  82. package/dist/core/proofLedger.js +161 -12
  83. package/dist/core/proofLedger.js.map +1 -1
  84. package/dist/core/proofReplay.d.ts +9 -0
  85. package/dist/core/proofReplay.js +164 -0
  86. package/dist/core/proofReplay.js.map +1 -0
  87. package/dist/core/proofSufficiency.d.ts +19 -0
  88. package/dist/core/proofSufficiency.js +425 -0
  89. package/dist/core/proofSufficiency.js.map +1 -0
  90. package/dist/core/prove.d.ts +6 -0
  91. package/dist/core/prove.js +277 -87
  92. package/dist/core/prove.js.map +1 -1
  93. package/dist/core/qualityScorecard.js +8 -238
  94. package/dist/core/qualityScorecard.js.map +1 -1
  95. package/dist/core/qualityScorecardDimensions.d.ts +14 -0
  96. package/dist/core/qualityScorecardDimensions.js +99 -0
  97. package/dist/core/qualityScorecardDimensions.js.map +1 -0
  98. package/dist/core/qualityScorecardRisks.d.ts +8 -0
  99. package/dist/core/qualityScorecardRisks.js +107 -0
  100. package/dist/core/qualityScorecardRisks.js.map +1 -0
  101. package/dist/core/qualityScorecardSignals.d.ts +20 -0
  102. package/dist/core/qualityScorecardSignals.js +59 -0
  103. package/dist/core/qualityScorecardSignals.js.map +1 -0
  104. package/dist/core/releaseEvidence.d.ts +1 -0
  105. package/dist/core/releaseEvidence.js +15 -40
  106. package/dist/core/releaseEvidence.js.map +1 -1
  107. package/dist/core/releaseEvidenceBaseline.js +4 -1
  108. package/dist/core/releaseEvidenceBaseline.js.map +1 -1
  109. package/dist/core/releaseEvidenceProofReceipt.d.ts +6 -0
  110. package/dist/core/releaseEvidenceProofReceipt.js +140 -0
  111. package/dist/core/releaseEvidenceProofReceipt.js.map +1 -0
  112. package/dist/core/releaseEvidenceVerdict.d.ts +5 -2
  113. package/dist/core/releaseEvidenceVerdict.js +39 -1
  114. package/dist/core/releaseEvidenceVerdict.js.map +1 -1
  115. package/dist/core/repositoryScanner.d.ts +1 -0
  116. package/dist/core/repositoryScanner.js +5 -4
  117. package/dist/core/repositoryScanner.js.map +1 -1
  118. package/dist/core/sessionResources.d.ts +14 -2
  119. package/dist/core/sessionResources.js +3 -3
  120. package/dist/core/sessionResources.js.map +1 -1
  121. package/dist/core/startInputs.d.ts +1 -1
  122. package/dist/core/startIntentTargets.d.ts +1 -1
  123. package/dist/core/startIntentTargets.js +1 -16
  124. package/dist/core/startIntentTargets.js.map +1 -1
  125. package/dist/core/startMissionInputStatusPolicy.d.ts +7 -0
  126. package/dist/core/startMissionInputStatusPolicy.js +74 -0
  127. package/dist/core/startMissionInputStatusPolicy.js.map +1 -0
  128. package/dist/core/startMissionPolicy.d.ts +6 -15
  129. package/dist/core/startMissionPolicy.js +4 -305
  130. package/dist/core/startMissionPolicy.js.map +1 -1
  131. package/dist/core/startMissionProofPolicy.d.ts +6 -0
  132. package/dist/core/startMissionProofPolicy.js +84 -0
  133. package/dist/core/startMissionProofPolicy.js.map +1 -0
  134. package/dist/core/startMissionRiskPolicy.d.ts +4 -0
  135. package/dist/core/startMissionRiskPolicy.js +85 -0
  136. package/dist/core/startMissionRiskPolicy.js.map +1 -0
  137. package/dist/core/startMissionRoutingPolicy.d.ts +6 -0
  138. package/dist/core/startMissionRoutingPolicy.js +67 -0
  139. package/dist/core/startMissionRoutingPolicy.js.map +1 -0
  140. package/dist/core/startMode.d.ts +1 -2
  141. package/dist/core/startMode.js +4 -151
  142. package/dist/core/startMode.js.map +1 -1
  143. package/dist/core/startModeIntentPolicy.d.ts +12 -0
  144. package/dist/core/startModeIntentPolicy.js +41 -0
  145. package/dist/core/startModeIntentPolicy.js.map +1 -0
  146. package/dist/core/startModeRoutingPolicy.d.ts +4 -0
  147. package/dist/core/startModeRoutingPolicy.js +117 -0
  148. package/dist/core/startModeRoutingPolicy.js.map +1 -0
  149. package/dist/core/startSearchQueryTargets.d.ts +1 -0
  150. package/dist/core/startSearchQueryTargets.js +17 -0
  151. package/dist/core/startSearchQueryTargets.js.map +1 -0
  152. package/dist/core/workplan.d.ts +3 -2
  153. package/dist/core/workplan.js +11 -585
  154. package/dist/core/workplan.js.map +1 -1
  155. package/dist/core/workplanCoordinationTasks.d.ts +3 -0
  156. package/dist/core/workplanCoordinationTasks.js +82 -0
  157. package/dist/core/workplanCoordinationTasks.js.map +1 -0
  158. package/dist/core/workplanModeTasks.d.ts +2 -0
  159. package/dist/core/workplanModeTasks.js +192 -0
  160. package/dist/core/workplanModeTasks.js.map +1 -0
  161. package/dist/core/workplanPreflightTasks.d.ts +2 -0
  162. package/dist/core/workplanPreflightTasks.js +126 -0
  163. package/dist/core/workplanPreflightTasks.js.map +1 -0
  164. package/dist/core/workplanQualitySignals.d.ts +7 -0
  165. package/dist/core/workplanQualitySignals.js +63 -0
  166. package/dist/core/workplanQualitySignals.js.map +1 -0
  167. package/dist/core/workplanReport.d.ts +4 -0
  168. package/dist/core/workplanReport.js +79 -0
  169. package/dist/core/workplanReport.js.map +1 -0
  170. package/dist/core/workplanRiskOwnership.d.ts +5 -0
  171. package/dist/core/workplanRiskOwnership.js +97 -0
  172. package/dist/core/workplanRiskOwnership.js.map +1 -0
  173. package/dist/core/workplanSuggestedActions.d.ts +2 -0
  174. package/dist/core/workplanSuggestedActions.js +43 -0
  175. package/dist/core/workplanSuggestedActions.js.map +1 -0
  176. package/dist/mcp/tools/prove.js +23 -17
  177. package/dist/mcp/tools/prove.js.map +1 -1
  178. package/dist/projscan-sbom.cdx.json +6 -6
  179. package/dist/publicCore.d.ts +1 -0
  180. package/dist/publicCore.js +1 -0
  181. package/dist/publicCore.js.map +1 -1
  182. package/dist/tool-manifest.json +2 -2
  183. package/dist/types/baseframe.d.ts +75 -0
  184. package/dist/types/baseframe.js +2 -0
  185. package/dist/types/baseframe.js.map +1 -0
  186. package/dist/types/config.d.ts +15 -0
  187. package/dist/types/evidencePack.d.ts +21 -0
  188. package/dist/types/prove.d.ts +79 -0
  189. package/dist/types.d.ts +1 -0
  190. package/dist/utils/changedFiles.js +57 -16
  191. package/dist/utils/changedFiles.js.map +1 -1
  192. package/dist/utils/config.js +2 -0
  193. package/dist/utils/config.js.map +1 -1
  194. package/dist/utils/configProofRecipes.d.ts +2 -0
  195. package/dist/utils/configProofRecipes.js +91 -0
  196. package/dist/utils/configProofRecipes.js.map +1 -0
  197. package/docs/GUIDE.md +120 -19
  198. package/docs/integrations/baseframe-suite-v1.md +163 -0
  199. package/package.json +2 -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 };