projscan 4.14.0 → 4.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -21
- package/dist/cli/commands/assess.js +36 -2
- package/dist/cli/commands/assess.js.map +1 -1
- package/dist/cli/commands/evidencePack.js +2 -0
- package/dist/cli/commands/evidencePack.js.map +1 -1
- package/dist/cli/commands/prove.js +172 -23
- package/dist/cli/commands/prove.js.map +1 -1
- package/dist/cli/commands/startConsole.d.ts +2 -2
- package/dist/cli/commands/startConsole.js +2 -260
- package/dist/cli/commands/startConsole.js.map +1 -1
- package/dist/cli/commands/startConsoleExecution.d.ts +5 -0
- package/dist/cli/commands/startConsoleExecution.js +108 -0
- package/dist/cli/commands/startConsoleExecution.js.map +1 -0
- package/dist/cli/commands/startConsoleMission.d.ts +6 -0
- package/dist/cli/commands/startConsoleMission.js +157 -0
- package/dist/cli/commands/startConsoleMission.js.map +1 -0
- package/dist/cli/commands/startMissionBundle.js +24 -27
- package/dist/cli/commands/startMissionBundle.js.map +1 -1
- package/dist/core/adoption.d.ts +8 -81
- package/dist/core/adoption.js +4 -549
- package/dist/core/adoption.js.map +1 -1
- package/dist/core/adoptionFirstRunDiagnostics.d.ts +20 -0
- package/dist/core/adoptionFirstRunDiagnostics.js +240 -0
- package/dist/core/adoptionFirstRunDiagnostics.js.map +1 -0
- package/dist/core/adoptionMcpConfig.d.ts +27 -0
- package/dist/core/adoptionMcpConfig.js +123 -0
- package/dist/core/adoptionMcpConfig.js.map +1 -0
- package/dist/core/adoptionMcpDoctor.d.ts +23 -0
- package/dist/core/adoptionMcpDoctor.js +87 -0
- package/dist/core/adoptionMcpDoctor.js.map +1 -0
- package/dist/core/adoptionWorkflowRecipes.d.ts +14 -0
- package/dist/core/adoptionWorkflowRecipes.js +110 -0
- package/dist/core/adoptionWorkflowRecipes.js.map +1 -0
- package/dist/core/baseframeAssessment.d.ts +9 -0
- package/dist/core/baseframeAssessment.js +471 -0
- package/dist/core/baseframeAssessment.js.map +1 -0
- package/dist/core/bugHunt.js +26 -255
- package/dist/core/bugHunt.js.map +1 -1
- package/dist/core/bugHuntPreflightFindings.d.ts +2 -1
- package/dist/core/bugHuntPreflightFindings.js +20 -0
- package/dist/core/bugHuntPreflightFindings.js.map +1 -1
- package/dist/core/bugHuntReportAssembly.d.ts +20 -0
- package/dist/core/bugHuntReportAssembly.js +179 -0
- package/dist/core/bugHuntReportAssembly.js.map +1 -0
- package/dist/core/bugHuntSourceFindings.d.ts +3 -0
- package/dist/core/bugHuntSourceFindings.js +61 -0
- package/dist/core/bugHuntSourceFindings.js.map +1 -0
- package/dist/core/dogfood.js +4 -393
- package/dist/core/dogfood.js.map +1 -1
- package/dist/core/dogfoodMarketValidation.d.ts +5 -0
- package/dist/core/dogfoodMarketValidation.js +265 -0
- package/dist/core/dogfoodMarketValidation.js.map +1 -0
- package/dist/core/dogfoodRepoEvaluation.d.ts +4 -0
- package/dist/core/dogfoodRepoEvaluation.js +137 -0
- package/dist/core/dogfoodRepoEvaluation.js.map +1 -0
- package/dist/core/evidenceComment.js +50 -13
- package/dist/core/evidenceComment.js.map +1 -1
- package/dist/core/feedback.js +2 -252
- package/dist/core/feedback.js.map +1 -1
- package/dist/core/feedbackIntakeClassifier.d.ts +2 -0
- package/dist/core/feedbackIntakeClassifier.js +255 -0
- package/dist/core/feedbackIntakeClassifier.js.map +1 -0
- package/dist/core/intentRouterKeywordToolGuards.js +1 -55
- package/dist/core/intentRouterKeywordToolGuards.js.map +1 -1
- package/dist/core/intentRouterKeywordWeights.js +13 -28
- package/dist/core/intentRouterKeywordWeights.js.map +1 -1
- package/dist/core/intentRouterProductGuardSignals.d.ts +3 -0
- package/dist/core/intentRouterProductGuardSignals.js +59 -0
- package/dist/core/intentRouterProductGuardSignals.js.map +1 -0
- package/dist/core/markdownSafety.d.ts +3 -0
- package/dist/core/markdownSafety.js +14 -0
- package/dist/core/markdownSafety.js.map +1 -0
- package/dist/core/preflight.d.ts +2 -0
- package/dist/core/preflight.js.map +1 -1
- package/dist/core/preflightChangedFiles.d.ts +2 -0
- package/dist/core/preflightChangedFiles.js +1 -1
- package/dist/core/preflightChangedFiles.js.map +1 -1
- package/dist/core/preflightInputs.d.ts +2 -0
- package/dist/core/preflightInputs.js +5 -2
- package/dist/core/preflightInputs.js.map +1 -1
- package/dist/core/proofLedger.d.ts +5 -1
- package/dist/core/proofLedger.js +161 -12
- package/dist/core/proofLedger.js.map +1 -1
- package/dist/core/proofReplay.d.ts +9 -0
- package/dist/core/proofReplay.js +164 -0
- package/dist/core/proofReplay.js.map +1 -0
- package/dist/core/proofSufficiency.d.ts +19 -0
- package/dist/core/proofSufficiency.js +425 -0
- package/dist/core/proofSufficiency.js.map +1 -0
- package/dist/core/prove.d.ts +6 -0
- package/dist/core/prove.js +277 -87
- package/dist/core/prove.js.map +1 -1
- package/dist/core/qualityScorecard.js +8 -238
- package/dist/core/qualityScorecard.js.map +1 -1
- package/dist/core/qualityScorecardDimensions.d.ts +14 -0
- package/dist/core/qualityScorecardDimensions.js +99 -0
- package/dist/core/qualityScorecardDimensions.js.map +1 -0
- package/dist/core/qualityScorecardRisks.d.ts +8 -0
- package/dist/core/qualityScorecardRisks.js +107 -0
- package/dist/core/qualityScorecardRisks.js.map +1 -0
- package/dist/core/qualityScorecardSignals.d.ts +20 -0
- package/dist/core/qualityScorecardSignals.js +59 -0
- package/dist/core/qualityScorecardSignals.js.map +1 -0
- package/dist/core/releaseEvidence.d.ts +1 -0
- package/dist/core/releaseEvidence.js +15 -40
- package/dist/core/releaseEvidence.js.map +1 -1
- package/dist/core/releaseEvidenceBaseline.js +4 -1
- package/dist/core/releaseEvidenceBaseline.js.map +1 -1
- package/dist/core/releaseEvidenceProofReceipt.d.ts +6 -0
- package/dist/core/releaseEvidenceProofReceipt.js +140 -0
- package/dist/core/releaseEvidenceProofReceipt.js.map +1 -0
- package/dist/core/releaseEvidenceVerdict.d.ts +5 -2
- package/dist/core/releaseEvidenceVerdict.js +39 -1
- package/dist/core/releaseEvidenceVerdict.js.map +1 -1
- package/dist/core/repositoryScanner.d.ts +1 -0
- package/dist/core/repositoryScanner.js +5 -4
- package/dist/core/repositoryScanner.js.map +1 -1
- package/dist/core/sessionResources.d.ts +14 -2
- package/dist/core/sessionResources.js +3 -3
- package/dist/core/sessionResources.js.map +1 -1
- package/dist/core/startInputs.d.ts +1 -1
- package/dist/core/startIntentTargets.d.ts +1 -1
- package/dist/core/startIntentTargets.js +1 -16
- package/dist/core/startIntentTargets.js.map +1 -1
- package/dist/core/startMissionInputStatusPolicy.d.ts +7 -0
- package/dist/core/startMissionInputStatusPolicy.js +74 -0
- package/dist/core/startMissionInputStatusPolicy.js.map +1 -0
- package/dist/core/startMissionPolicy.d.ts +6 -15
- package/dist/core/startMissionPolicy.js +4 -305
- package/dist/core/startMissionPolicy.js.map +1 -1
- package/dist/core/startMissionProofPolicy.d.ts +6 -0
- package/dist/core/startMissionProofPolicy.js +84 -0
- package/dist/core/startMissionProofPolicy.js.map +1 -0
- package/dist/core/startMissionRiskPolicy.d.ts +4 -0
- package/dist/core/startMissionRiskPolicy.js +85 -0
- package/dist/core/startMissionRiskPolicy.js.map +1 -0
- package/dist/core/startMissionRoutingPolicy.d.ts +6 -0
- package/dist/core/startMissionRoutingPolicy.js +67 -0
- package/dist/core/startMissionRoutingPolicy.js.map +1 -0
- package/dist/core/startMode.d.ts +1 -2
- package/dist/core/startMode.js +4 -151
- package/dist/core/startMode.js.map +1 -1
- package/dist/core/startModeIntentPolicy.d.ts +12 -0
- package/dist/core/startModeIntentPolicy.js +41 -0
- package/dist/core/startModeIntentPolicy.js.map +1 -0
- package/dist/core/startModeRoutingPolicy.d.ts +4 -0
- package/dist/core/startModeRoutingPolicy.js +117 -0
- package/dist/core/startModeRoutingPolicy.js.map +1 -0
- package/dist/core/startSearchQueryTargets.d.ts +1 -0
- package/dist/core/startSearchQueryTargets.js +17 -0
- package/dist/core/startSearchQueryTargets.js.map +1 -0
- package/dist/core/workplan.d.ts +3 -2
- package/dist/core/workplan.js +11 -585
- package/dist/core/workplan.js.map +1 -1
- package/dist/core/workplanCoordinationTasks.d.ts +3 -0
- package/dist/core/workplanCoordinationTasks.js +82 -0
- package/dist/core/workplanCoordinationTasks.js.map +1 -0
- package/dist/core/workplanModeTasks.d.ts +2 -0
- package/dist/core/workplanModeTasks.js +192 -0
- package/dist/core/workplanModeTasks.js.map +1 -0
- package/dist/core/workplanPreflightTasks.d.ts +2 -0
- package/dist/core/workplanPreflightTasks.js +126 -0
- package/dist/core/workplanPreflightTasks.js.map +1 -0
- package/dist/core/workplanQualitySignals.d.ts +7 -0
- package/dist/core/workplanQualitySignals.js +63 -0
- package/dist/core/workplanQualitySignals.js.map +1 -0
- package/dist/core/workplanReport.d.ts +4 -0
- package/dist/core/workplanReport.js +79 -0
- package/dist/core/workplanReport.js.map +1 -0
- package/dist/core/workplanRiskOwnership.d.ts +5 -0
- package/dist/core/workplanRiskOwnership.js +97 -0
- package/dist/core/workplanRiskOwnership.js.map +1 -0
- package/dist/core/workplanSuggestedActions.d.ts +2 -0
- package/dist/core/workplanSuggestedActions.js +43 -0
- package/dist/core/workplanSuggestedActions.js.map +1 -0
- package/dist/mcp/tools/prove.js +23 -17
- package/dist/mcp/tools/prove.js.map +1 -1
- package/dist/projscan-sbom.cdx.json +6 -6
- package/dist/publicCore.d.ts +1 -0
- package/dist/publicCore.js +1 -0
- package/dist/publicCore.js.map +1 -1
- package/dist/tool-manifest.json +2 -2
- package/dist/types/baseframe.d.ts +75 -0
- package/dist/types/baseframe.js +2 -0
- package/dist/types/baseframe.js.map +1 -0
- package/dist/types/config.d.ts +15 -0
- package/dist/types/evidencePack.d.ts +21 -0
- package/dist/types/prove.d.ts +79 -0
- package/dist/types.d.ts +1 -0
- package/dist/utils/changedFiles.js +57 -16
- package/dist/utils/changedFiles.js.map +1 -1
- package/dist/utils/config.js +2 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/configProofRecipes.d.ts +2 -0
- package/dist/utils/configProofRecipes.js +91 -0
- package/dist/utils/configProofRecipes.js.map +1 -0
- package/docs/GUIDE.md +120 -19
- package/docs/integrations/baseframe-suite-v1.md +163 -0
- package/package.json +2 -1
|
@@ -1,211 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import { isRunnableCommand, uniqueStrings } from './startResume.js';
|
|
6
|
-
import { escapeDoubleQuoted } from './startShellArgs.js';
|
|
7
|
-
import { actionFromWorkplan, isPreflightAction, preflightModeForMission, } from './startSuccessCriteria.js';
|
|
8
|
-
export function routedWhyNow(route, actionPlan) {
|
|
9
|
-
if (route.tool === 'projscan_impact' && actionPlan[0]?.tool === 'projscan_search') {
|
|
10
|
-
return `Intent matched "${route.intent}", but the target is a phrase, so search first and then run ${route.tool} on the exact symbol or file.`;
|
|
11
|
-
}
|
|
12
|
-
if (route.tool === 'projscan_fix_suggest' && actionPlan[0]?.tool === 'projscan_doctor') {
|
|
13
|
-
return `Intent matched "${route.intent}", but no issue id was named, so run projscan_doctor first and then run ${route.tool} on the selected issue.`;
|
|
14
|
-
}
|
|
15
|
-
if (route.tool === 'projscan_explain_issue' && actionPlan[0]?.tool === 'projscan_doctor') {
|
|
16
|
-
return `Intent matched "${route.intent}", but no issue id was named, so run projscan_doctor first and then run ${route.tool} on the selected issue.`;
|
|
17
|
-
}
|
|
18
|
-
if (route.tool === 'projscan_upgrade' && actionPlan[0]?.tool === 'projscan_outdated') {
|
|
19
|
-
return `Intent matched "${route.intent}", but no package was named, so run projscan_outdated first and then run ${route.tool} on the selected package.`;
|
|
20
|
-
}
|
|
21
|
-
if (actionPlan[0]?.tool && actionPlan[0].tool !== route.tool) {
|
|
22
|
-
return `Intent matched "${route.intent}", so start with ${actionPlan[0].tool} and then keep ${route.tool} as proof.`;
|
|
23
|
-
}
|
|
24
|
-
return `Intent matched "${route.intent}", so start with ${route.tool} before broader workflow commands.`;
|
|
25
|
-
}
|
|
26
|
-
export function missionStatus(setupOverall, verdict, adoptionGaps) {
|
|
27
|
-
if (setupOverall === 'fail' || verdict === 'block')
|
|
28
|
-
return 'blocked';
|
|
29
|
-
if (adoptionGaps.some((gap) => gap.status === 'fail'))
|
|
30
|
-
return 'needs_setup';
|
|
31
|
-
if (setupOverall === 'warn' ||
|
|
32
|
-
verdict === 'caution' ||
|
|
33
|
-
adoptionGaps.some((gap) => gap.status === 'warn'))
|
|
34
|
-
return 'needs_attention';
|
|
35
|
-
return 'ready';
|
|
36
|
-
}
|
|
37
|
-
export function missionActionPlan(mode, intent, route, fixFirst, workplan, workflow) {
|
|
38
|
-
if (route?.tool === 'projscan_release_train' && mode !== 'release') {
|
|
39
|
-
return [
|
|
40
|
-
{
|
|
41
|
-
label: `Use projscan_workplan for ${intent ?? mode}`,
|
|
42
|
-
command: `projscan workplan --mode ${mode} --format json`,
|
|
43
|
-
tool: 'projscan_workplan',
|
|
44
|
-
args: { mode },
|
|
45
|
-
},
|
|
46
|
-
];
|
|
47
|
-
}
|
|
48
|
-
if (route?.tool === 'projscan_preflight' && intent && isDailySafeCommitIntent(mode, intent)) {
|
|
49
|
-
return [
|
|
50
|
-
{
|
|
51
|
-
label: 'Assess safe-commit risk first',
|
|
52
|
-
command: 'projscan assess --mode fix-first --format json',
|
|
53
|
-
tool: 'projscan_assess',
|
|
54
|
-
args: { mode: 'fix-first' },
|
|
55
|
-
},
|
|
56
|
-
];
|
|
57
|
-
}
|
|
58
|
-
if (route && intent)
|
|
59
|
-
return actionPlanFromRoute(mode, intent, route);
|
|
60
|
-
const fallback = actionFromFixFirst(fixFirst) ?? actionFromWorkplan(workplan) ?? actionFromWorkflow(workflow);
|
|
61
|
-
return [fallback];
|
|
62
|
-
}
|
|
63
|
-
function isDailySafeCommitIntent(mode, intent) {
|
|
64
|
-
return (mode === 'before_commit' &&
|
|
65
|
-
/\b(?:safe|safety|ready)\b/i.test(intent) &&
|
|
66
|
-
/\b(?:commit|committing|committed|pr|pull\s+request)\b/i.test(intent));
|
|
67
|
-
}
|
|
68
|
-
export function missionUnresolvedInputs(actionPlan) {
|
|
69
|
-
const sourceAction = actionPlan[0]?.label ?? 'the previous action';
|
|
70
|
-
const unresolved = [];
|
|
71
|
-
for (const action of actionPlan.slice(1)) {
|
|
72
|
-
if (!action.args)
|
|
73
|
-
continue;
|
|
74
|
-
for (const [name, value] of Object.entries(action.args)) {
|
|
75
|
-
if (typeof value !== 'string' || !isPlaceholder(value))
|
|
76
|
-
continue;
|
|
77
|
-
unresolved.push({
|
|
78
|
-
name,
|
|
79
|
-
placeholder: value,
|
|
80
|
-
sourceAction,
|
|
81
|
-
instruction: placeholderInstruction(name, value),
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return dedupeUnresolvedInputs(unresolved);
|
|
86
|
-
}
|
|
87
|
-
export function missionReadyActions(actionPlan) {
|
|
88
|
-
return actionPlan.filter(isReadyAction);
|
|
89
|
-
}
|
|
90
|
-
function placeholderInstruction(name, placeholder) {
|
|
91
|
-
if (name === 'symbol')
|
|
92
|
-
return `Replace ${placeholder} with an exported symbol returned by the search step.`;
|
|
93
|
-
if (name === 'file')
|
|
94
|
-
return `Replace ${placeholder} with a file path returned by the search step.`;
|
|
95
|
-
if (name === 'issue_id')
|
|
96
|
-
return `Replace ${placeholder} with an issue id from projscan doctor or projscan analyze.`;
|
|
97
|
-
if (name === 'package')
|
|
98
|
-
return `Replace ${placeholder} with a package name from projscan outdated or projscan dependencies.`;
|
|
99
|
-
if (name === 'target')
|
|
100
|
-
return `Replace ${placeholder} with the file, directory, or symbol to claim.`;
|
|
101
|
-
if (name === 'agent')
|
|
102
|
-
return `Replace ${placeholder} with the agent name holding the claim.`;
|
|
103
|
-
if (name === 'report_scope')
|
|
104
|
-
return `Replace ${placeholder} with one or more comma-separated repo-relative paths to include in the shared evidence.`;
|
|
105
|
-
return `Replace ${placeholder} with the ${name} value produced by the previous step.`;
|
|
106
|
-
}
|
|
107
|
-
function dedupeUnresolvedInputs(inputs) {
|
|
108
|
-
const seen = new Set();
|
|
109
|
-
const result = [];
|
|
110
|
-
for (const input of inputs) {
|
|
111
|
-
const key = `${input.name}:${input.placeholder}`;
|
|
112
|
-
if (seen.has(key))
|
|
113
|
-
continue;
|
|
114
|
-
seen.add(key);
|
|
115
|
-
result.push(input);
|
|
116
|
-
}
|
|
117
|
-
return result;
|
|
118
|
-
}
|
|
119
|
-
function actionFromFixFirst(fixFirst) {
|
|
120
|
-
if (!fixFirst)
|
|
121
|
-
return undefined;
|
|
122
|
-
return {
|
|
123
|
-
label: fixFirst.title,
|
|
124
|
-
command: fixFirst.commands[0],
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
export function actionFromWorkflow(workflow) {
|
|
128
|
-
return {
|
|
129
|
-
label: `Run ${workflow.name}`,
|
|
130
|
-
command: workflow.commands[0] ?? 'projscan start --format json',
|
|
131
|
-
tool: workflow.mcpTools[0],
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
export function headlineForStatus(status, label) {
|
|
135
|
-
if (status === 'blocked')
|
|
136
|
-
return `Blocked: ${label}`;
|
|
137
|
-
if (status === 'needs_setup')
|
|
138
|
-
return `Set up first: ${label}`;
|
|
139
|
-
if (status === 'needs_attention')
|
|
140
|
-
return `Proceed carefully: ${label}`;
|
|
141
|
-
return `Next move: ${label}`;
|
|
142
|
-
}
|
|
143
|
-
export function missionGuardrails(mode, coordinationHints, primaryAction) {
|
|
144
|
-
const preflightMode = preflightModeForMission(mode);
|
|
145
|
-
const guardrails = [
|
|
146
|
-
{
|
|
147
|
-
label: 'Verify the repo map before handoff',
|
|
148
|
-
command: 'projscan understand --view verify --format json',
|
|
149
|
-
tool: 'projscan_understand',
|
|
150
|
-
},
|
|
151
|
-
];
|
|
152
|
-
if (!isPreflightAction(primaryAction)) {
|
|
153
|
-
guardrails.unshift({
|
|
154
|
-
label: 'Check the safety gate before editing',
|
|
155
|
-
command: `projscan preflight --mode ${preflightMode} --format json`,
|
|
156
|
-
tool: 'projscan_preflight',
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
for (const hint of prioritizeStartHarnessHints(coordinationHints)) {
|
|
160
|
-
guardrails.push({
|
|
161
|
-
label: hint.label,
|
|
162
|
-
command: hint.command,
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
return dedupeActions(guardrails).slice(0, 4);
|
|
166
|
-
}
|
|
167
|
-
export function missionProofCommands(mode, workplan, guardrails, actionPlan) {
|
|
168
|
-
const primaryAction = actionPlan[0] ?? actionFromWorkplan(workplan);
|
|
169
|
-
const commands = uniqueStrings([
|
|
170
|
-
...actionPlan.map((action) => action.command ?? ''),
|
|
171
|
-
...(isPreflightAction(primaryAction)
|
|
172
|
-
? []
|
|
173
|
-
: [`projscan preflight --mode ${preflightModeForMission(mode)} --format json`]),
|
|
174
|
-
...guardrails
|
|
175
|
-
.map((action) => action.command)
|
|
176
|
-
.filter((command) => typeof command === 'string'),
|
|
177
|
-
...workplan.tasks.flatMap((task) => task.verification.commands),
|
|
178
|
-
]).filter(isRunnableCommand);
|
|
179
|
-
const proofCommands = releaseCandidateProofCommands(mode, commands);
|
|
180
|
-
if (!isPreflightAction(primaryAction))
|
|
181
|
-
return proofCommands.slice(0, 8);
|
|
182
|
-
return proofCommands
|
|
183
|
-
.filter((command, index) => index === 0 || !command.startsWith('projscan preflight '))
|
|
184
|
-
.slice(0, 8);
|
|
185
|
-
}
|
|
186
|
-
function releaseCandidateProofCommands(mode, commands) {
|
|
187
|
-
if (mode !== 'release')
|
|
188
|
-
return commands;
|
|
189
|
-
const localWebsitePrompt = 'projscan evidence-pack --website-prompt --format json';
|
|
190
|
-
const localOnly = commands.filter((command) => command !== 'npm view projscan version' &&
|
|
191
|
-
command !== 'gh release view vX.Y.Z --json assets');
|
|
192
|
-
const withWebsitePrompt = localOnly.includes(localWebsitePrompt)
|
|
193
|
-
? localOnly
|
|
194
|
-
: [...localOnly, localWebsitePrompt];
|
|
195
|
-
const priority = [
|
|
196
|
-
'projscan release-train --format json',
|
|
197
|
-
'projscan preflight --mode before_merge --format json',
|
|
198
|
-
'projscan understand --view verify --format json',
|
|
199
|
-
'npm exec agentloop -- status',
|
|
200
|
-
'npm exec agentflight -- verify',
|
|
201
|
-
'npm run release:check',
|
|
202
|
-
localWebsitePrompt,
|
|
203
|
-
];
|
|
204
|
-
return uniqueStrings([
|
|
205
|
-
...priority.filter((command) => withWebsitePrompt.includes(command)),
|
|
206
|
-
...withWebsitePrompt,
|
|
207
|
-
]);
|
|
208
|
-
}
|
|
1
|
+
export { headlineForStatus, missionReadyActions, missionStatus, missionUnresolvedInputs } from './startMissionInputStatusPolicy.js';
|
|
2
|
+
export { actionFromWorkflow, missionActionPlan, routedWhyNow } from './startMissionRoutingPolicy.js';
|
|
3
|
+
export { combineRisks } from './startMissionRiskPolicy.js';
|
|
4
|
+
export { dedupeActions, missionGuardrails, missionProofCommands } from './startMissionProofPolicy.js';
|
|
209
5
|
export function chooseWorkflow(mode, recipes) {
|
|
210
6
|
const id = recipeIdForMode(mode);
|
|
211
7
|
const recipe = recipes.find((entry) => entry.id === id) ?? recipes[0];
|
|
@@ -232,103 +28,6 @@ function recipeIdForMode(mode) {
|
|
|
232
28
|
return 'before_edit';
|
|
233
29
|
return 'before_edit';
|
|
234
30
|
}
|
|
235
|
-
export function combineRisks(workplan, qualityRisks, maxRisks) {
|
|
236
|
-
const fromWorkplan = workplan.topRisks.map(workplanRiskToStartRisk);
|
|
237
|
-
const fromQuality = qualityRisks
|
|
238
|
-
.filter(isActionableStartQualityRisk)
|
|
239
|
-
.map(qualityRiskToStartRisk);
|
|
240
|
-
const risks = dedupeRisks([...fromWorkplan, ...fromQuality]).slice(0, maxRisks);
|
|
241
|
-
if (risks.length > 0)
|
|
242
|
-
return risks;
|
|
243
|
-
return [
|
|
244
|
-
{
|
|
245
|
-
id: 'start-baseline',
|
|
246
|
-
priority: 'p2',
|
|
247
|
-
title: 'Preserve the clean baseline',
|
|
248
|
-
source: 'baseline',
|
|
249
|
-
files: [],
|
|
250
|
-
command: 'projscan start --format json',
|
|
251
|
-
},
|
|
252
|
-
];
|
|
253
|
-
}
|
|
254
|
-
function workplanRiskToStartRisk(risk, index) {
|
|
255
|
-
return {
|
|
256
|
-
id: `start-workplan-${index + 1}`,
|
|
257
|
-
priority: risk.priority,
|
|
258
|
-
title: startRiskTitle(risk),
|
|
259
|
-
source: risk.source,
|
|
260
|
-
files: risk.file ? [risk.file] : [],
|
|
261
|
-
command: workplanRiskCommand(risk),
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
function workplanRiskCommand(risk) {
|
|
265
|
-
if (risk.tool === 'projscan_review')
|
|
266
|
-
return 'projscan review --format json';
|
|
267
|
-
if (risk.tool === 'projscan_file' && risk.file)
|
|
268
|
-
return `projscan file "${escapeDoubleQuoted(risk.file)}" --format json`;
|
|
269
|
-
return 'projscan preflight --format json';
|
|
270
|
-
}
|
|
271
|
-
function startRiskTitle(risk) {
|
|
272
|
-
if (risk.source !== 'release')
|
|
273
|
-
return risk.message;
|
|
274
|
-
if (/large handoff review risk|manual review sign-off/iu.test(risk.message)) {
|
|
275
|
-
return 'Manual review sign-off required for large handoff risk';
|
|
276
|
-
}
|
|
277
|
-
if (/large platform release risk|manual release sign-off/iu.test(risk.message)) {
|
|
278
|
-
return 'Manual release sign-off required for large platform release risk';
|
|
279
|
-
}
|
|
280
|
-
return risk.message;
|
|
281
|
-
}
|
|
282
|
-
function qualityRiskToStartRisk(risk) {
|
|
283
|
-
return {
|
|
284
|
-
id: `start-quality-${risk.id}`,
|
|
285
|
-
priority: risk.priority,
|
|
286
|
-
title: risk.title,
|
|
287
|
-
source: risk.source,
|
|
288
|
-
files: risk.files,
|
|
289
|
-
command: risk.command,
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
function isActionableStartQualityRisk(risk) {
|
|
293
|
-
if (risk.source !== 'hotspot' || risk.priority !== 'p2')
|
|
294
|
-
return true;
|
|
295
|
-
return risk.files.length === 0 || !risk.files.every(isLowSignalHotspotFile);
|
|
296
|
-
}
|
|
297
|
-
function isLowSignalHotspotFile(file) {
|
|
298
|
-
return isTestFile(file) || isTypeBarrel(file);
|
|
299
|
-
}
|
|
300
|
-
function isTestFile(file) {
|
|
301
|
-
return /(^|\/)(__tests__|test|tests)\//u.test(file) || /\.(spec|test)\.[cm]?[jt]sx?$/u.test(file);
|
|
302
|
-
}
|
|
303
|
-
function isTypeBarrel(file) {
|
|
304
|
-
return /(^|\/)types(\.d)?\.ts$/u.test(file) || /(^|\/)types\/index(\.d)?\.ts$/u.test(file);
|
|
305
|
-
}
|
|
306
|
-
function dedupeRisks(risks) {
|
|
307
|
-
const seen = new Set();
|
|
308
|
-
const result = [];
|
|
309
|
-
for (const risk of risks) {
|
|
310
|
-
const key = `${risk.title}:${risk.files.join(',')}`;
|
|
311
|
-
if (seen.has(key))
|
|
312
|
-
continue;
|
|
313
|
-
seen.add(key);
|
|
314
|
-
result.push(risk);
|
|
315
|
-
}
|
|
316
|
-
return result;
|
|
317
|
-
}
|
|
318
|
-
export function dedupeActions(actions) {
|
|
319
|
-
const seen = new Set();
|
|
320
|
-
const result = [];
|
|
321
|
-
for (const action of actions) {
|
|
322
|
-
const key = action.command
|
|
323
|
-
? `command:${action.command}`
|
|
324
|
-
: `action:${action.label}:${action.tool ?? ''}`;
|
|
325
|
-
if (seen.has(key))
|
|
326
|
-
continue;
|
|
327
|
-
seen.add(key);
|
|
328
|
-
result.push(action);
|
|
329
|
-
}
|
|
330
|
-
return result.slice(0, 12);
|
|
331
|
-
}
|
|
332
31
|
export function summarize(mode, workplan, qualityRisks, adoptionGaps, fixFirstTitle, qualityVerdict, topRisks = []) {
|
|
333
32
|
const qualityLabel = topRisks.some(isPriorityRisk)
|
|
334
33
|
? 'ranked risk item(s)'
|
|
@@ -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":"AAQA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AACpI,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEtG,MAAM,UAAU,cAAc,CAC5B,IAAkB,EAClB,OAA8B;IAE9B,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE;QAC1C,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,IAAkB;IACzC,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IAC3C,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,kBAAkB,CAAC;IAClD,IAAI,IAAI,KAAK,eAAe;QAAE,OAAO,gBAAgB,CAAC;IACtD,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,WAAW,CAAC;IAChD,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,UAAU,CAAC;IAC5C,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,aAAa,CAAC;IAC9C,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,IAAkB,EAClB,QAAwB,EACxB,YAAoB,EACpB,YAAoB,EACpB,aAAsB,EACtB,cAAwC,EACxC,WAAwB,EAAE;IAE1B,MAAM,YAAY,GAChB,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;QAC3B,CAAC,CAAC,qBAAqB;QACvB,CAAC,CAAC,cAAc,KAAK,WAAW,IAAI,cAAc,KAAK,SAAS;YAChE,CAAC,CAAC,uBAAuB;YACzB,CAAC,CAAC,iBAAiB,CAAC;IACxB,OAAO,UAAU,IAAI,eAAe,aAAa,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,yBAAyB,SAAS,YAAY,IAAI,YAAY,QAAQ,YAAY,kBAAkB,CAAC;AACxL,CAAC;AAED,SAAS,cAAc,CAAC,IAAe;IACrC,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PreflightSuggestedAction } from '../types/preflight.js';
|
|
2
|
+
import type { SessionCoordinationHint } from '../types/session.js';
|
|
3
|
+
import type { WorkplanMode, WorkplanReport } from '../types/workplan.js';
|
|
4
|
+
export declare function missionGuardrails(mode: WorkplanMode, coordinationHints: SessionCoordinationHint[], primaryAction: PreflightSuggestedAction): PreflightSuggestedAction[];
|
|
5
|
+
export declare function missionProofCommands(mode: WorkplanMode, workplan: WorkplanReport, guardrails: PreflightSuggestedAction[], actionPlan: PreflightSuggestedAction[]): string[];
|
|
6
|
+
export declare function dedupeActions(actions: PreflightSuggestedAction[]): PreflightSuggestedAction[];
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { prioritizeStartHarnessHints } from './startHarness.js';
|
|
2
|
+
import { isRunnableCommand, uniqueStrings } from './startResume.js';
|
|
3
|
+
import { actionFromWorkplan, isPreflightAction, preflightModeForMission, } from './startSuccessCriteria.js';
|
|
4
|
+
export function missionGuardrails(mode, coordinationHints, primaryAction) {
|
|
5
|
+
const preflightMode = preflightModeForMission(mode);
|
|
6
|
+
const guardrails = [
|
|
7
|
+
{
|
|
8
|
+
label: 'Verify the repo map before handoff',
|
|
9
|
+
command: 'projscan understand --view verify --format json',
|
|
10
|
+
tool: 'projscan_understand',
|
|
11
|
+
},
|
|
12
|
+
];
|
|
13
|
+
if (!isPreflightAction(primaryAction)) {
|
|
14
|
+
guardrails.unshift({
|
|
15
|
+
label: 'Check the safety gate before editing',
|
|
16
|
+
command: `projscan preflight --mode ${preflightMode} --format json`,
|
|
17
|
+
tool: 'projscan_preflight',
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
for (const hint of prioritizeStartHarnessHints(coordinationHints)) {
|
|
21
|
+
guardrails.push({
|
|
22
|
+
label: hint.label,
|
|
23
|
+
command: hint.command,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return dedupeActions(guardrails).slice(0, 4);
|
|
27
|
+
}
|
|
28
|
+
export function missionProofCommands(mode, workplan, guardrails, actionPlan) {
|
|
29
|
+
const primaryAction = actionPlan[0] ?? actionFromWorkplan(workplan);
|
|
30
|
+
const commands = uniqueStrings([
|
|
31
|
+
...actionPlan.map((action) => action.command ?? ''),
|
|
32
|
+
...(isPreflightAction(primaryAction)
|
|
33
|
+
? []
|
|
34
|
+
: [`projscan preflight --mode ${preflightModeForMission(mode)} --format json`]),
|
|
35
|
+
...guardrails
|
|
36
|
+
.map((action) => action.command)
|
|
37
|
+
.filter((command) => typeof command === 'string'),
|
|
38
|
+
...workplan.tasks.flatMap((task) => task.verification.commands),
|
|
39
|
+
]).filter(isRunnableCommand);
|
|
40
|
+
const proofCommands = releaseCandidateProofCommands(mode, commands);
|
|
41
|
+
if (!isPreflightAction(primaryAction))
|
|
42
|
+
return proofCommands.slice(0, 8);
|
|
43
|
+
return proofCommands
|
|
44
|
+
.filter((command, index) => index === 0 || !command.startsWith('projscan preflight '))
|
|
45
|
+
.slice(0, 8);
|
|
46
|
+
}
|
|
47
|
+
export function dedupeActions(actions) {
|
|
48
|
+
const seen = new Set();
|
|
49
|
+
const result = [];
|
|
50
|
+
for (const action of actions) {
|
|
51
|
+
const key = action.command
|
|
52
|
+
? `command:${action.command}`
|
|
53
|
+
: `action:${action.label}:${action.tool ?? ''}`;
|
|
54
|
+
if (seen.has(key))
|
|
55
|
+
continue;
|
|
56
|
+
seen.add(key);
|
|
57
|
+
result.push(action);
|
|
58
|
+
}
|
|
59
|
+
return result.slice(0, 12);
|
|
60
|
+
}
|
|
61
|
+
function releaseCandidateProofCommands(mode, commands) {
|
|
62
|
+
if (mode !== 'release')
|
|
63
|
+
return commands;
|
|
64
|
+
const localWebsitePrompt = 'projscan evidence-pack --website-prompt --format json';
|
|
65
|
+
const localOnly = commands.filter((command) => command !== 'npm view projscan version' &&
|
|
66
|
+
command !== 'gh release view vX.Y.Z --json assets');
|
|
67
|
+
const withWebsitePrompt = localOnly.includes(localWebsitePrompt)
|
|
68
|
+
? localOnly
|
|
69
|
+
: [...localOnly, localWebsitePrompt];
|
|
70
|
+
const priority = [
|
|
71
|
+
'projscan release-train --format json',
|
|
72
|
+
'projscan preflight --mode before_merge --format json',
|
|
73
|
+
'projscan understand --view verify --format json',
|
|
74
|
+
'npm exec agentloop -- status',
|
|
75
|
+
'npm exec agentflight -- verify',
|
|
76
|
+
'npm run release:check',
|
|
77
|
+
localWebsitePrompt,
|
|
78
|
+
];
|
|
79
|
+
return uniqueStrings([
|
|
80
|
+
...priority.filter((command) => withWebsitePrompt.includes(command)),
|
|
81
|
+
...withWebsitePrompt,
|
|
82
|
+
]);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=startMissionProofPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startMissionProofPolicy.js","sourceRoot":"","sources":["../../src/core/startMissionProofPolicy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { StartRisk } from '../types/start.js';
|
|
2
|
+
import type { QualityScorecardRisk } from '../types/qualityScorecard.js';
|
|
3
|
+
import type { WorkplanReport } from '../types/workplan.js';
|
|
4
|
+
export declare function combineRisks(workplan: WorkplanReport, qualityRisks: QualityScorecardRisk[], maxRisks: number): StartRisk[];
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { escapeDoubleQuoted } from './startShellArgs.js';
|
|
2
|
+
export function combineRisks(workplan, qualityRisks, maxRisks) {
|
|
3
|
+
const fromWorkplan = workplan.topRisks.map(workplanRiskToStartRisk);
|
|
4
|
+
const fromQuality = qualityRisks
|
|
5
|
+
.filter(isActionableStartQualityRisk)
|
|
6
|
+
.map(qualityRiskToStartRisk);
|
|
7
|
+
const risks = dedupeRisks([...fromWorkplan, ...fromQuality]).slice(0, maxRisks);
|
|
8
|
+
if (risks.length > 0)
|
|
9
|
+
return risks;
|
|
10
|
+
return [
|
|
11
|
+
{
|
|
12
|
+
id: 'start-baseline',
|
|
13
|
+
priority: 'p2',
|
|
14
|
+
title: 'Preserve the clean baseline',
|
|
15
|
+
source: 'baseline',
|
|
16
|
+
files: [],
|
|
17
|
+
command: 'projscan start --format json',
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
function workplanRiskToStartRisk(risk, index) {
|
|
22
|
+
return {
|
|
23
|
+
id: `start-workplan-${index + 1}`,
|
|
24
|
+
priority: risk.priority,
|
|
25
|
+
title: startRiskTitle(risk),
|
|
26
|
+
source: risk.source,
|
|
27
|
+
files: risk.file ? [risk.file] : [],
|
|
28
|
+
command: workplanRiskCommand(risk),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function workplanRiskCommand(risk) {
|
|
32
|
+
if (risk.tool === 'projscan_review')
|
|
33
|
+
return 'projscan review --format json';
|
|
34
|
+
if (risk.tool === 'projscan_file' && risk.file)
|
|
35
|
+
return `projscan file "${escapeDoubleQuoted(risk.file)}" --format json`;
|
|
36
|
+
return 'projscan preflight --format json';
|
|
37
|
+
}
|
|
38
|
+
function startRiskTitle(risk) {
|
|
39
|
+
if (risk.source !== 'release')
|
|
40
|
+
return risk.message;
|
|
41
|
+
if (/large handoff review risk|manual review sign-off/iu.test(risk.message)) {
|
|
42
|
+
return 'Manual review sign-off required for large handoff risk';
|
|
43
|
+
}
|
|
44
|
+
if (/large platform release risk|manual release sign-off/iu.test(risk.message)) {
|
|
45
|
+
return 'Manual release sign-off required for large platform release risk';
|
|
46
|
+
}
|
|
47
|
+
return risk.message;
|
|
48
|
+
}
|
|
49
|
+
function qualityRiskToStartRisk(risk) {
|
|
50
|
+
return {
|
|
51
|
+
id: `start-quality-${risk.id}`,
|
|
52
|
+
priority: risk.priority,
|
|
53
|
+
title: risk.title,
|
|
54
|
+
source: risk.source,
|
|
55
|
+
files: risk.files,
|
|
56
|
+
command: risk.command,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function isActionableStartQualityRisk(risk) {
|
|
60
|
+
if (risk.source !== 'hotspot' || risk.priority !== 'p2')
|
|
61
|
+
return true;
|
|
62
|
+
return risk.files.length === 0 || !risk.files.every(isLowSignalHotspotFile);
|
|
63
|
+
}
|
|
64
|
+
function isLowSignalHotspotFile(file) {
|
|
65
|
+
return isTestFile(file) || isTypeBarrel(file);
|
|
66
|
+
}
|
|
67
|
+
function isTestFile(file) {
|
|
68
|
+
return /(^|\/)(__tests__|test|tests)\//u.test(file) || /\.(spec|test)\.[cm]?[jt]sx?$/u.test(file);
|
|
69
|
+
}
|
|
70
|
+
function isTypeBarrel(file) {
|
|
71
|
+
return /(^|\/)types(\.d)?\.ts$/u.test(file) || /(^|\/)types\/index(\.d)?\.ts$/u.test(file);
|
|
72
|
+
}
|
|
73
|
+
function dedupeRisks(risks) {
|
|
74
|
+
const seen = new Set();
|
|
75
|
+
const result = [];
|
|
76
|
+
for (const risk of risks) {
|
|
77
|
+
const key = `${risk.title}:${risk.files.join(',')}`;
|
|
78
|
+
if (seen.has(key))
|
|
79
|
+
continue;
|
|
80
|
+
seen.add(key);
|
|
81
|
+
result.push(risk);
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=startMissionRiskPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startMissionRiskPolicy.js","sourceRoot":"","sources":["../../src/core/startMissionRiskPolicy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PreflightSuggestedAction } from '../types/preflight.js';
|
|
2
|
+
import type { StartReport, StartRoutedIntent, StartWorkflowRecommendation } from '../types/start.js';
|
|
3
|
+
import type { WorkplanMode, WorkplanReport } from '../types/workplan.js';
|
|
4
|
+
export declare function routedWhyNow(route: StartRoutedIntent, actionPlan: PreflightSuggestedAction[]): string;
|
|
5
|
+
export declare function missionActionPlan(mode: WorkplanMode, intent: string | undefined, route: StartRoutedIntent | undefined, fixFirst: StartReport['fixFirst'], workplan: WorkplanReport, workflow: StartWorkflowRecommendation): PreflightSuggestedAction[];
|
|
6
|
+
export declare function actionFromWorkflow(workflow: StartWorkflowRecommendation): PreflightSuggestedAction;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { actionPlanFromRoute } from './startRouteActions.js';
|
|
2
|
+
import { actionFromWorkplan } from './startSuccessCriteria.js';
|
|
3
|
+
export function routedWhyNow(route, actionPlan) {
|
|
4
|
+
if (route.tool === 'projscan_impact' && actionPlan[0]?.tool === 'projscan_search') {
|
|
5
|
+
return `Intent matched "${route.intent}", but the target is a phrase, so search first and then run ${route.tool} on the exact symbol or file.`;
|
|
6
|
+
}
|
|
7
|
+
if (route.tool === 'projscan_fix_suggest' && actionPlan[0]?.tool === 'projscan_doctor') {
|
|
8
|
+
return `Intent matched "${route.intent}", but no issue id was named, so run projscan_doctor first and then run ${route.tool} on the selected issue.`;
|
|
9
|
+
}
|
|
10
|
+
if (route.tool === 'projscan_explain_issue' && actionPlan[0]?.tool === 'projscan_doctor') {
|
|
11
|
+
return `Intent matched "${route.intent}", but no issue id was named, so run projscan_doctor first and then run ${route.tool} on the selected issue.`;
|
|
12
|
+
}
|
|
13
|
+
if (route.tool === 'projscan_upgrade' && actionPlan[0]?.tool === 'projscan_outdated') {
|
|
14
|
+
return `Intent matched "${route.intent}", but no package was named, so run projscan_outdated first and then run ${route.tool} on the selected package.`;
|
|
15
|
+
}
|
|
16
|
+
if (actionPlan[0]?.tool && actionPlan[0].tool !== route.tool) {
|
|
17
|
+
return `Intent matched "${route.intent}", so start with ${actionPlan[0].tool} and then keep ${route.tool} as proof.`;
|
|
18
|
+
}
|
|
19
|
+
return `Intent matched "${route.intent}", so start with ${route.tool} before broader workflow commands.`;
|
|
20
|
+
}
|
|
21
|
+
export function missionActionPlan(mode, intent, route, fixFirst, workplan, workflow) {
|
|
22
|
+
if (route?.tool === 'projscan_release_train' && mode !== 'release') {
|
|
23
|
+
return [
|
|
24
|
+
{
|
|
25
|
+
label: `Use projscan_workplan for ${intent ?? mode}`,
|
|
26
|
+
command: `projscan workplan --mode ${mode} --format json`,
|
|
27
|
+
tool: 'projscan_workplan',
|
|
28
|
+
args: { mode },
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
}
|
|
32
|
+
if (route?.tool === 'projscan_preflight' && intent && isDailySafeCommitIntent(mode, intent)) {
|
|
33
|
+
return [
|
|
34
|
+
{
|
|
35
|
+
label: 'Assess safe-commit risk first',
|
|
36
|
+
command: 'projscan assess --mode fix-first --format json',
|
|
37
|
+
tool: 'projscan_assess',
|
|
38
|
+
args: { mode: 'fix-first' },
|
|
39
|
+
},
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
if (route && intent)
|
|
43
|
+
return actionPlanFromRoute(mode, intent, route);
|
|
44
|
+
const fallback = actionFromFixFirst(fixFirst) ?? actionFromWorkplan(workplan) ?? actionFromWorkflow(workflow);
|
|
45
|
+
return [fallback];
|
|
46
|
+
}
|
|
47
|
+
export function actionFromWorkflow(workflow) {
|
|
48
|
+
return {
|
|
49
|
+
label: `Run ${workflow.name}`,
|
|
50
|
+
command: workflow.commands[0] ?? 'projscan start --format json',
|
|
51
|
+
tool: workflow.mcpTools[0],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function isDailySafeCommitIntent(mode, intent) {
|
|
55
|
+
return (mode === 'before_commit' &&
|
|
56
|
+
/\b(?:safe|safety|ready)\b/i.test(intent) &&
|
|
57
|
+
/\b(?:commit|committing|committed|pr|pull\s+request)\b/i.test(intent));
|
|
58
|
+
}
|
|
59
|
+
function actionFromFixFirst(fixFirst) {
|
|
60
|
+
if (!fixFirst)
|
|
61
|
+
return undefined;
|
|
62
|
+
return {
|
|
63
|
+
label: fixFirst.title,
|
|
64
|
+
command: fixFirst.commands[0],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=startMissionRoutingPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startMissionRoutingPolicy.js","sourceRoot":"","sources":["../../src/core/startMissionRoutingPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAS/D,MAAM,UAAU,YAAY,CAC1B,KAAwB,EACxB,UAAsC;IAEtC,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAClF,OAAO,mBAAmB,KAAK,CAAC,MAAM,+DAA+D,KAAK,CAAC,IAAI,+BAA+B,CAAC;IACjJ,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACvF,OAAO,mBAAmB,KAAK,CAAC,MAAM,2EAA2E,KAAK,CAAC,IAAI,yBAAyB,CAAC;IACvJ,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACzF,OAAO,mBAAmB,KAAK,CAAC,MAAM,2EAA2E,KAAK,CAAC,IAAI,yBAAyB,CAAC;IACvJ,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACrF,OAAO,mBAAmB,KAAK,CAAC,MAAM,4EAA4E,KAAK,CAAC,IAAI,2BAA2B,CAAC;IAC1J,CAAC;IACD,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7D,OAAO,mBAAmB,KAAK,CAAC,MAAM,oBAAoB,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,kBAAkB,KAAK,CAAC,IAAI,YAAY,CAAC;IACvH,CAAC;IACD,OAAO,mBAAmB,KAAK,CAAC,MAAM,oBAAoB,KAAK,CAAC,IAAI,oCAAoC,CAAC;AAC3G,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAAkB,EAClB,MAA0B,EAC1B,KAAoC,EACpC,QAAiC,EACjC,QAAwB,EACxB,QAAqC;IAErC,IAAI,KAAK,EAAE,IAAI,KAAK,wBAAwB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACnE,OAAO;YACL;gBACE,KAAK,EAAE,6BAA6B,MAAM,IAAI,IAAI,EAAE;gBACpD,OAAO,EAAE,4BAA4B,IAAI,gBAAgB;gBACzD,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,EAAE,IAAI,EAAE;aACf;SACF,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,EAAE,IAAI,KAAK,oBAAoB,IAAI,MAAM,IAAI,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QAC5F,OAAO;YACL;gBACE,KAAK,EAAE,+BAA+B;gBACtC,OAAO,EAAE,gDAAgD;gBACzD,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;aAC5B;SACF,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,IAAI,MAAM;QAAE,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACrE,MAAM,QAAQ,GACZ,kBAAkB,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC/F,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAqC;IAErC,OAAO;QACL,KAAK,EAAE,OAAO,QAAQ,CAAC,IAAI,EAAE;QAC7B,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,8BAA8B;QAC/D,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAkB,EAAE,MAAc;IACjE,OAAO,CACL,IAAI,KAAK,eAAe;QACxB,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC;QACzC,wDAAwD,CAAC,IAAI,CAAC,MAAM,CAAC,CACtE,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,QAAiC;IAEjC,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC9B,CAAC;AACJ,CAAC"}
|
package/dist/core/startMode.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { StartModeSource, StartRoutedIntent } from '../types/start.js';
|
|
2
2
|
import type { WorkplanMode } from '../types/workplan.js';
|
|
3
|
+
export { hasProhibitedWorkflowModeAction, preflightModeFromIntent } from './startModeIntentPolicy.js';
|
|
3
4
|
export interface StartModeResolution {
|
|
4
5
|
mode: WorkplanMode;
|
|
5
6
|
source: StartModeSource;
|
|
@@ -10,5 +11,3 @@ export declare function resolveStartMode(value: StartModeInput | undefined, inte
|
|
|
10
11
|
export declare function isStartModeInput(value: string): value is StartModeInput;
|
|
11
12
|
export declare function inferModeFromIntent(intent: string | undefined): WorkplanMode | undefined;
|
|
12
13
|
export declare function routesForIntent(intent: string | undefined): StartRoutedIntent[];
|
|
13
|
-
export declare function preflightModeFromIntent(intent: string): 'before_edit' | 'before_commit' | 'before_merge';
|
|
14
|
-
export declare function hasProhibitedWorkflowModeAction(intent: string): boolean;
|