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
@@ -0,0 +1,9 @@
1
+ import type { ProjScanAssessmentV1 } from '../types/baseframe.js';
2
+ export type { BaseframeAgentWorkflowV1, ProjScanAssessmentV1 } from '../types/baseframe.js';
3
+ export interface CreateBaseframeAssessmentOptions {
4
+ root: string;
5
+ taskId: string;
6
+ intent: string;
7
+ outputPath?: string;
8
+ }
9
+ export declare function createBaseframeAssessment(options: CreateBaseframeAssessmentOptions): Promise<ProjScanAssessmentV1>;
@@ -0,0 +1,471 @@
1
+ import { execFile } from 'node:child_process';
2
+ import fs from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { promisify } from 'node:util';
6
+ import { computeAssess } from './assess.js';
7
+ import { detectFrameworks } from './frameworkDetector.js';
8
+ import { detectLanguages } from './languageDetector.js';
9
+ import { scanRepository } from './repositoryScanner.js';
10
+ import { atomicWriteFile } from '../utils/atomicWrite.js';
11
+ const execFileAsync = promisify(execFile);
12
+ const TASK_ID_PATTERN = /^[A-Za-z0-9](?:[A-Za-z0-9_-]{0,126}[A-Za-z0-9])?$/;
13
+ const ASSESSMENT_FILE = 'projscan-assessment.json';
14
+ const BASEFRAME_DIR = '.baseframe';
15
+ const EVIDENCE_DIR = 'evidence';
16
+ let cachedProducerVersion;
17
+ export async function createBaseframeAssessment(options) {
18
+ const root = path.resolve(options.root);
19
+ validateTaskId(options.taskId);
20
+ const intent = normalizeIntent(options.intent);
21
+ const outputPath = resolveAssessmentOutputPath(root, options.taskId, options.outputPath);
22
+ const generatedAt = new Date().toISOString();
23
+ const version = await readProducerVersion();
24
+ const [signals, repository] = await Promise.all([
25
+ collectSignals(root, intent),
26
+ readRepositoryMetadata(root),
27
+ ]);
28
+ const assessment = buildAssessment({
29
+ taskId: options.taskId,
30
+ intent,
31
+ generatedAt,
32
+ version,
33
+ repository,
34
+ signals,
35
+ });
36
+ await prepareAssessmentWrite(root, options.taskId, outputPath);
37
+ await assertWritableAssessmentOutput(outputPath, options.taskId);
38
+ await atomicWriteJson(outputPath, assessment);
39
+ await updateWorkflowManifest({
40
+ root,
41
+ taskId: options.taskId,
42
+ intent,
43
+ assessmentPath: relativeRepositoryPath(root, outputPath),
44
+ version,
45
+ updatedAt: generatedAt,
46
+ });
47
+ return assessment;
48
+ }
49
+ function buildAssessment(input) {
50
+ const verdict = mapVerdict(input.signals.assess);
51
+ const summary = summarizeAssessment(verdict, input.signals);
52
+ const repositoryType = describeRepositoryType(input.signals.languages, input.signals.frameworks);
53
+ const proofCards = input.signals.assess?.proofCards ?? [];
54
+ return {
55
+ schemaVersion: '1.0',
56
+ kind: 'projscan-assessment',
57
+ producer: {
58
+ name: 'projscan',
59
+ version: input.version,
60
+ },
61
+ taskId: input.taskId,
62
+ intent: input.intent,
63
+ generatedAt: input.generatedAt,
64
+ repository: input.repository,
65
+ verdict,
66
+ summary,
67
+ ...(repositoryType ? { repositoryType } : {}),
68
+ impactedAreas: buildImpactedAreas(proofCards),
69
+ reviewFocus: buildReviewFocus(proofCards),
70
+ risks: buildRisks(proofCards, verdict),
71
+ suggestedChecks: buildSuggestedChecks(input.signals.assess, verdict),
72
+ };
73
+ }
74
+ async function collectSignals(root, intent) {
75
+ const limitations = [];
76
+ const [assessResult, scanResult] = await Promise.allSettled([
77
+ computeAssess(root, { goal: intent }),
78
+ scanRepository(root),
79
+ ]);
80
+ const assess = settledValue(assessResult);
81
+ if (!assess)
82
+ limitations.push('assess report unavailable');
83
+ const scan = settledValue(scanResult);
84
+ if (!scan)
85
+ limitations.push('repository scan unavailable');
86
+ let languages;
87
+ let frameworks;
88
+ if (scan) {
89
+ try {
90
+ languages = detectLanguages(scan.files);
91
+ }
92
+ catch {
93
+ limitations.push('language detection unavailable');
94
+ }
95
+ try {
96
+ frameworks = await detectFrameworks(root, scan.files);
97
+ }
98
+ catch {
99
+ limitations.push('framework detection unavailable');
100
+ }
101
+ }
102
+ return { assess, scan, languages, frameworks, limitations };
103
+ }
104
+ function settledValue(result) {
105
+ return result.status === 'fulfilled' ? result.value : undefined;
106
+ }
107
+ function mapVerdict(assess) {
108
+ if (!assess)
109
+ return 'unknown';
110
+ const preflight = assess.sourceVerdicts?.preflight;
111
+ if (preflight === 'block')
112
+ return 'block';
113
+ if (preflight === 'caution')
114
+ return 'caution';
115
+ if (preflight === 'proceed')
116
+ return 'proceed';
117
+ if (assess.proofCards.length === 0)
118
+ return 'unknown';
119
+ if (assess.verdict === 'blocked')
120
+ return 'block';
121
+ if (assess.verdict === 'watch')
122
+ return 'caution';
123
+ if (assess.verdict === 'ready')
124
+ return 'proceed';
125
+ return 'unknown';
126
+ }
127
+ function summarizeAssessment(verdict, signals) {
128
+ if (verdict === 'unknown') {
129
+ const reason = signals.limitations.length > 0
130
+ ? signals.limitations.join('; ')
131
+ : 'no source verdicts or review-focus evidence were available';
132
+ return `unknown: ProjScan assessment is limited because ${reason}.`;
133
+ }
134
+ const baseSummary = signals.assess?.summary ?? 'local ProjScan signals were mapped to Baseframe';
135
+ return `${verdict}: ${baseSummary}`;
136
+ }
137
+ function describeRepositoryType(languages, frameworks) {
138
+ const primary = languages?.primary && languages.primary !== 'Unknown' ? languages.primary : '';
139
+ const frameworkNames = frameworks?.frameworks.map((framework) => framework.name).sort((a, b) => a.localeCompare(b)) ??
140
+ [];
141
+ const packageManager = frameworks?.packageManager && frameworks.packageManager !== 'unknown'
142
+ ? frameworks.packageManager
143
+ : '';
144
+ const details = frameworkNames.length > 0 && packageManager
145
+ ? `${frameworkNames.join(', ')}; ${packageManager}`
146
+ : [...frameworkNames, packageManager].filter(Boolean).join(', ');
147
+ if (!primary && !details)
148
+ return undefined;
149
+ if (!primary)
150
+ return `Repository (${details})`;
151
+ return details ? `${primary} repository (${details})` : `${primary} repository`;
152
+ }
153
+ function buildImpactedAreas(proofCards) {
154
+ const areas = new Map();
155
+ for (const card of proofCards) {
156
+ for (const file of normalizeFileList(card.files)) {
157
+ const areaName = file.split('/')[0] || file;
158
+ const area = areas.get(areaName) ?? { paths: new Set(), reasons: new Set() };
159
+ area.paths.add(file);
160
+ area.reasons.add(card.finding);
161
+ areas.set(areaName, area);
162
+ }
163
+ }
164
+ return [...areas.entries()]
165
+ .sort(([a], [b]) => a.localeCompare(b))
166
+ .map(([name, area]) => ({
167
+ name,
168
+ paths: [...area.paths].sort((a, b) => a.localeCompare(b)),
169
+ reason: [...area.reasons].sort((a, b) => a.localeCompare(b)).join('; '),
170
+ }));
171
+ }
172
+ function buildReviewFocus(proofCards) {
173
+ const focus = new Map();
174
+ for (const card of proofCards) {
175
+ for (const file of normalizeFileList(card.files)) {
176
+ const current = focus.get(file);
177
+ const priority = strongerPriority(current?.priority, mapPriority(card.priority));
178
+ const reasons = current?.reasons ?? new Set();
179
+ reasons.add(card.finding);
180
+ reasons.add(card.whyItMatters);
181
+ focus.set(file, { priority, reasons });
182
+ }
183
+ }
184
+ return [...focus.entries()]
185
+ .sort(([a], [b]) => a.localeCompare(b))
186
+ .map(([file, entry]) => ({
187
+ path: file,
188
+ priority: entry.priority,
189
+ reasons: [...entry.reasons].filter(Boolean),
190
+ }));
191
+ }
192
+ function buildRisks(proofCards, verdict) {
193
+ return proofCards.map((card) => {
194
+ const files = normalizeFileList(card.files);
195
+ return {
196
+ id: card.id,
197
+ severity: riskSeverity(verdict, card.priority),
198
+ category: card.source,
199
+ message: card.finding,
200
+ ...(files.length > 0 ? { files } : {}),
201
+ ...(card.recommendedFix.summary ? { suggestedAction: card.recommendedFix.summary } : {}),
202
+ };
203
+ });
204
+ }
205
+ function buildSuggestedChecks(assess, verdict) {
206
+ if (!assess)
207
+ return [];
208
+ if (verdict === 'unknown' && assess.proofCards.length === 0 && !assess.sourceVerdicts)
209
+ return [];
210
+ const checks = new Map();
211
+ const proofReasons = new Map();
212
+ for (const card of assess.proofCards) {
213
+ for (const command of card.verification.commands) {
214
+ proofReasons.set(command, `Proof-card verification for ${card.finding}.`);
215
+ }
216
+ }
217
+ for (const command of assess.answers.testsThatProveIt) {
218
+ checks.set(command, {
219
+ command,
220
+ reason: proofReasons.get(command) ?? reasonForAssessmentCommand(command),
221
+ required: true,
222
+ });
223
+ }
224
+ for (const [command, reason] of proofReasons) {
225
+ if (!checks.has(command))
226
+ checks.set(command, { command, reason, required: true });
227
+ }
228
+ for (const command of assess.commands) {
229
+ if (!checks.has(command)) {
230
+ checks.set(command, {
231
+ command,
232
+ reason: 'ProjScan assessment follow-up.',
233
+ required: false,
234
+ });
235
+ }
236
+ }
237
+ return [...checks.values()];
238
+ }
239
+ function reasonForAssessmentCommand(command) {
240
+ if (command === 'projscan doctor --format json')
241
+ return 'Confirms the issue queue after fixes.';
242
+ if (command.startsWith('projscan preflight '))
243
+ return 'Confirms preflight readiness.';
244
+ return 'Assessment verification command.';
245
+ }
246
+ function normalizeFileList(files) {
247
+ return [...new Set(files.map(normalizeReportPath).filter((file) => file.length > 0))].sort((a, b) => a.localeCompare(b));
248
+ }
249
+ function normalizeReportPath(file) {
250
+ return file.replace(/\\/g, '/').replace(/^\.\//, '');
251
+ }
252
+ function mapPriority(priority) {
253
+ if (priority === 'p0' || priority === 'p1')
254
+ return 'high';
255
+ if (priority === 'p2')
256
+ return 'medium';
257
+ return 'low';
258
+ }
259
+ function strongerPriority(left, right) {
260
+ if (!left)
261
+ return right;
262
+ const rank = { high: 0, medium: 1, low: 2 };
263
+ return rank[right] < rank[left] ? right : left;
264
+ }
265
+ function riskSeverity(verdict, priority) {
266
+ if (verdict === 'block' || priority === 'p0')
267
+ return 'blocking';
268
+ if (verdict === 'caution' || priority === 'p1')
269
+ return 'warning';
270
+ return 'info';
271
+ }
272
+ function validateTaskId(taskId) {
273
+ if (!TASK_ID_PATTERN.test(taskId)) {
274
+ throw new Error('Invalid task ID. Task ID must be 1-128 characters, start and end with a letter or number, and contain only letters, numbers, hyphen, or underscore.');
275
+ }
276
+ }
277
+ function normalizeIntent(intent) {
278
+ const trimmed = intent.trim();
279
+ if (!trimmed)
280
+ throw new Error('Baseframe assessment requires a non-empty intent.');
281
+ return trimmed;
282
+ }
283
+ function resolveAssessmentOutputPath(root, taskId, outputPath) {
284
+ if (outputPath && hasTraversalSegment(outputPath)) {
285
+ throw new Error('Invalid output path. Path traversal segments are not allowed.');
286
+ }
287
+ const expected = defaultAssessmentPath(root, taskId);
288
+ const resolved = outputPath ? path.resolve(root, outputPath) : expected;
289
+ if (resolved !== expected) {
290
+ throw new Error(`Invalid output path. ProjScan can only write ${relativeRepositoryPath(root, expected)} for task ${taskId}.`);
291
+ }
292
+ return resolved;
293
+ }
294
+ function defaultAssessmentPath(root, taskId) {
295
+ return path.join(root, BASEFRAME_DIR, EVIDENCE_DIR, taskId, ASSESSMENT_FILE);
296
+ }
297
+ function hasTraversalSegment(value) {
298
+ return value.split(/[\\/]+/).includes('..');
299
+ }
300
+ async function prepareAssessmentWrite(root, taskId, outputPath) {
301
+ await ensureSafeDirectoryPath(root, [BASEFRAME_DIR, EVIDENCE_DIR, taskId]);
302
+ if (path.dirname(outputPath) !== path.join(root, BASEFRAME_DIR, EVIDENCE_DIR, taskId)) {
303
+ throw new Error('Invalid output path. Output parent does not match the task evidence directory.');
304
+ }
305
+ }
306
+ async function ensureSafeDirectoryPath(root, segments) {
307
+ const rootReal = await fs.realpath(root);
308
+ let current = root;
309
+ for (const segment of segments) {
310
+ current = path.join(current, segment);
311
+ await ensureDirectoryNoSymlink(current);
312
+ }
313
+ const currentReal = await fs.realpath(current);
314
+ if (!isPathInside(currentReal, rootReal)) {
315
+ throw new Error(`Refusing to write through symlinked Baseframe path: ${current}`);
316
+ }
317
+ }
318
+ async function ensureDirectoryNoSymlink(dirPath) {
319
+ let stat = await lstatOptional(dirPath);
320
+ if (!stat) {
321
+ try {
322
+ await fs.mkdir(dirPath);
323
+ }
324
+ catch (err) {
325
+ if (!isNodeErrorCode(err, 'EEXIST'))
326
+ throw err;
327
+ }
328
+ stat = await lstatOptional(dirPath);
329
+ }
330
+ if (!stat)
331
+ throw new Error(`Could not create output directory: ${dirPath}`);
332
+ if (stat.isSymbolicLink()) {
333
+ throw new Error(`Refusing to write through symlinked Baseframe directory: ${dirPath}`);
334
+ }
335
+ if (!stat.isDirectory())
336
+ throw new Error(`Output path component is not a directory: ${dirPath}`);
337
+ }
338
+ async function assertWritableAssessmentOutput(outputPath, taskId) {
339
+ const stat = await lstatOptional(outputPath);
340
+ if (!stat)
341
+ return;
342
+ if (stat.isSymbolicLink()) {
343
+ throw new Error(`Refusing to overwrite symlinked output path: ${outputPath}`);
344
+ }
345
+ if (!stat.isFile())
346
+ throw new Error(`Existing output path is not a file: ${outputPath}`);
347
+ let parsed;
348
+ try {
349
+ parsed = JSON.parse(await fs.readFile(outputPath, 'utf-8'));
350
+ }
351
+ catch {
352
+ throw new Error(`Refusing to overwrite existing output that is not a ProjScan assessment: ${outputPath}`);
353
+ }
354
+ if (!isMatchingAssessment(parsed, taskId)) {
355
+ throw new Error(`Refusing to overwrite existing output that is not this ProjScan assessment: ${outputPath}`);
356
+ }
357
+ }
358
+ function isMatchingAssessment(value, taskId) {
359
+ return (isRecord(value) &&
360
+ value.schemaVersion === '1.0' &&
361
+ value.kind === 'projscan-assessment' &&
362
+ value.taskId === taskId);
363
+ }
364
+ async function updateWorkflowManifest(input) {
365
+ const manifestPath = path.join(input.root, BASEFRAME_DIR, 'agent-workflow.json');
366
+ const stat = await lstatOptional(manifestPath);
367
+ if (stat?.isSymbolicLink()) {
368
+ throw new Error(`Refusing to overwrite symlinked workflow manifest: ${manifestPath}`);
369
+ }
370
+ if (stat && !stat.isFile()) {
371
+ throw new Error(`Existing workflow manifest is not a file: ${manifestPath}`);
372
+ }
373
+ const existing = stat ? await readManifest(manifestPath) : {};
374
+ if (typeof existing.taskId === 'string' && existing.taskId !== input.taskId) {
375
+ throw new Error(`Workflow manifest already belongs to task ${existing.taskId}; refusing to mix task ${input.taskId}.`);
376
+ }
377
+ const existingTools = isRecord(existing.tools) ? existing.tools : {};
378
+ const manifest = {
379
+ ...existing,
380
+ schemaVersion: '1.0',
381
+ taskId: input.taskId,
382
+ intent: input.intent,
383
+ createdAt: typeof existing.createdAt === 'string' ? existing.createdAt : input.updatedAt,
384
+ updatedAt: input.updatedAt,
385
+ tools: {
386
+ ...existingTools,
387
+ projscan: {
388
+ status: 'completed',
389
+ assessmentPath: input.assessmentPath,
390
+ version: input.version,
391
+ },
392
+ },
393
+ };
394
+ await atomicWriteJson(manifestPath, manifest);
395
+ }
396
+ async function readManifest(manifestPath) {
397
+ try {
398
+ const parsed = JSON.parse(await fs.readFile(manifestPath, 'utf-8'));
399
+ if (!isRecord(parsed))
400
+ throw new Error('workflow manifest must be a JSON object');
401
+ return parsed;
402
+ }
403
+ catch (err) {
404
+ throw new Error(`Could not read workflow manifest ${manifestPath}: ${err instanceof Error ? err.message : 'invalid JSON'}`, { cause: err });
405
+ }
406
+ }
407
+ async function atomicWriteJson(filePath, value) {
408
+ await atomicWriteFile(filePath, `${JSON.stringify(value, null, 2)}\n`);
409
+ }
410
+ async function readRepositoryMetadata(root) {
411
+ const [branch, commit] = await Promise.all([
412
+ gitOutput(root, ['rev-parse', '--abbrev-ref', 'HEAD']),
413
+ gitOutput(root, ['rev-parse', 'HEAD']),
414
+ ]);
415
+ return {
416
+ root,
417
+ ...(branch && branch !== 'HEAD' ? { branch } : {}),
418
+ ...(commit ? { commit } : {}),
419
+ };
420
+ }
421
+ async function gitOutput(root, args) {
422
+ try {
423
+ const { stdout } = await execFileAsync('git', args, { cwd: root, maxBuffer: 1024 * 1024 });
424
+ const trimmed = stdout.trim();
425
+ return trimmed.length > 0 ? trimmed : undefined;
426
+ }
427
+ catch {
428
+ return undefined;
429
+ }
430
+ }
431
+ async function readProducerVersion() {
432
+ if (cachedProducerVersion)
433
+ return cachedProducerVersion;
434
+ try {
435
+ const moduleDir = path.dirname(fileURLToPath(import.meta.url));
436
+ const packagePath = path.resolve(moduleDir, '../../package.json');
437
+ const parsed = JSON.parse(await fs.readFile(packagePath, 'utf-8'));
438
+ cachedProducerVersion = typeof parsed.version === 'string' ? parsed.version : 'unknown';
439
+ }
440
+ catch {
441
+ cachedProducerVersion = 'unknown';
442
+ }
443
+ return cachedProducerVersion;
444
+ }
445
+ function relativeRepositoryPath(root, filePath) {
446
+ return path.relative(root, filePath).replace(/\\/g, '/');
447
+ }
448
+ function isPathInside(candidate, root) {
449
+ const relative = path.relative(root, candidate);
450
+ return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
451
+ }
452
+ async function lstatOptional(filePath) {
453
+ try {
454
+ return await fs.lstat(filePath);
455
+ }
456
+ catch (err) {
457
+ if (isNodeErrorCode(err, 'ENOENT'))
458
+ return undefined;
459
+ throw err;
460
+ }
461
+ }
462
+ function isNodeErrorCode(error, code) {
463
+ return (typeof error === 'object' &&
464
+ error !== null &&
465
+ 'code' in error &&
466
+ error.code === code);
467
+ }
468
+ function isRecord(value) {
469
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
470
+ }
471
+ //# sourceMappingURL=baseframeAssessment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseframeAssessment.js","sourceRoot":"","sources":["../../src/core/baseframeAssessment.ts"],"names":[],"mappings":"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"}