projscan 4.10.0 → 4.11.1

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 (51) hide show
  1. package/README.md +72 -41
  2. package/dist/cli/commands/assess.d.ts +3 -0
  3. package/dist/cli/commands/assess.js +143 -0
  4. package/dist/cli/commands/assess.js.map +1 -0
  5. package/dist/cli/commands/simulate.d.ts +3 -0
  6. package/dist/cli/commands/simulate.js +125 -0
  7. package/dist/cli/commands/simulate.js.map +1 -0
  8. package/dist/cli/registerCommands.js +4 -0
  9. package/dist/cli/registerCommands.js.map +1 -1
  10. package/dist/core/assess.d.ts +9 -0
  11. package/dist/core/assess.js +119 -0
  12. package/dist/core/assess.js.map +1 -0
  13. package/dist/core/proofCards.d.ts +10 -0
  14. package/dist/core/proofCards.js +222 -0
  15. package/dist/core/proofCards.js.map +1 -0
  16. package/dist/core/riskDelta.d.ts +19 -0
  17. package/dist/core/riskDelta.js +77 -0
  18. package/dist/core/riskDelta.js.map +1 -0
  19. package/dist/core/simulate.d.ts +6 -0
  20. package/dist/core/simulate.js +298 -0
  21. package/dist/core/simulate.js.map +1 -0
  22. package/dist/mcp/toolCatalog.js +4 -0
  23. package/dist/mcp/toolCatalog.js.map +1 -1
  24. package/dist/mcp/tools/assess.d.ts +2 -0
  25. package/dist/mcp/tools/assess.js +42 -0
  26. package/dist/mcp/tools/assess.js.map +1 -0
  27. package/dist/mcp/tools/simulate.d.ts +2 -0
  28. package/dist/mcp/tools/simulate.js +32 -0
  29. package/dist/mcp/tools/simulate.js.map +1 -0
  30. package/dist/projscan-sbom.cdx.json +6 -6
  31. package/dist/publicCore.d.ts +2 -0
  32. package/dist/publicCore.js +2 -0
  33. package/dist/publicCore.js.map +1 -1
  34. package/dist/tool-manifest.json +52 -3
  35. package/dist/types/assess.d.ts +91 -0
  36. package/dist/types/assess.js +2 -0
  37. package/dist/types/assess.js.map +1 -0
  38. package/dist/types/simulate.d.ts +41 -0
  39. package/dist/types/simulate.js +2 -0
  40. package/dist/types/simulate.js.map +1 -0
  41. package/dist/types/workplan.d.ts +1 -0
  42. package/dist/types.d.ts +2 -0
  43. package/dist/utils/formatSupport.d.ts +2 -0
  44. package/dist/utils/formatSupport.js +2 -0
  45. package/dist/utils/formatSupport.js.map +1 -1
  46. package/docs/GUIDE.md +19 -1
  47. package/docs/demos/projscan-4-1-demo.html +214 -2
  48. package/docs/projscan-mission-control.png +0 -0
  49. package/docs/projscan-proof-cards.png +0 -0
  50. package/package.json +2 -1
  51. package/scripts/capture-readme-assets.mjs +6 -0
@@ -0,0 +1,298 @@
1
+ import path from 'node:path';
2
+ import { buildCodeGraph } from './codeGraph.js';
3
+ import { computeQualityScorecard } from './qualityScorecard.js';
4
+ import { scanRepository } from './repositoryScanner.js';
5
+ import { computeRiskDelta } from './riskDelta.js';
6
+ const DEFAULT_MAX_FILES = 5;
7
+ const NO_MATCH_WARNING = 'No repo files matched the plan. Mention a file, symbol, command, package, or module name for a stronger simulation.';
8
+ export async function computeSimulation(rootPath, options) {
9
+ const plan = normalizePlan(options.plan);
10
+ if (!plan)
11
+ throw new Error('simulate requires a non-empty plan');
12
+ const maxFiles = normalizeMaxFiles(options.maxFiles);
13
+ const [scan, quality] = await Promise.all([
14
+ scanRepository(rootPath),
15
+ computeQualityScorecard(rootPath, { maxRisks: maxFiles }),
16
+ ]);
17
+ const graph = await buildCodeGraph(rootPath, scan.files).catch(() => undefined);
18
+ const candidateFiles = rankCandidateFiles({
19
+ plan,
20
+ files: scan.files,
21
+ graph,
22
+ risks: quality.topRisks,
23
+ }).slice(0, maxFiles);
24
+ const testsLikelyAffected = likelyTests(scan.files, candidateFiles);
25
+ const contractsLikelyAffected = inferContracts(plan, candidateFiles);
26
+ const warnings = candidateFiles.length === 0 ? [NO_MATCH_WARNING] : [];
27
+ const proofCards = candidateFiles.map((candidate) => ({
28
+ id: `simulate-${slug(candidate.path)}`,
29
+ priority: priorityForCandidate(candidate),
30
+ source: candidate.qualityRisk ? 'hotspot' : 'plan',
31
+ }));
32
+ const riskDelta = computeRiskDelta({
33
+ healthScore: quality.health.score,
34
+ qualityVerdict: quality.verdict,
35
+ preflightVerdict: 'proceed',
36
+ proofCards,
37
+ selectedCardIds: proofCards.slice(0, 2).map((card) => card.id),
38
+ });
39
+ const confidence = confidenceFor(candidateFiles, graph);
40
+ const verdict = verdictFor(confidence, riskDelta.delta);
41
+ const rolloutPlan = buildRolloutPlan(plan, candidateFiles, testsLikelyAffected);
42
+ const proofCommands = buildProofCommands(plan, candidateFiles, testsLikelyAffected);
43
+ const evidence = buildEvidence(candidateFiles, testsLikelyAffected, contractsLikelyAffected);
44
+ return {
45
+ schemaVersion: 1,
46
+ plan,
47
+ verdict,
48
+ confidence,
49
+ summary: summarize(verdict, confidence, candidateFiles, riskDelta.delta),
50
+ filesLikelyTouched: candidateFiles,
51
+ testsLikelyAffected,
52
+ contractsLikelyAffected,
53
+ riskDelta,
54
+ rolloutPlan,
55
+ proofCommands,
56
+ evidence,
57
+ warnings,
58
+ };
59
+ }
60
+ function rankCandidateFiles(input) {
61
+ const planLower = input.plan.toLowerCase();
62
+ const planTerms = tokenize(input.plan);
63
+ const riskByFile = new Map();
64
+ for (const risk of input.risks) {
65
+ for (const file of risk.files)
66
+ riskByFile.set(file, risk);
67
+ }
68
+ return input.files
69
+ .map((file) => scoreFile(file, planLower, planTerms, input.graph, riskByFile.get(file.relativePath)))
70
+ .filter((candidate) => candidate.score > 0)
71
+ .sort((a, b) => b.score - a.score ||
72
+ testRank(a.path) - testRank(b.path) ||
73
+ a.path.localeCompare(b.path));
74
+ }
75
+ function scoreFile(file, planLower, planTerms, graph, qualityRisk) {
76
+ const basename = path.basename(file.relativePath);
77
+ const basenameNoExt = basename.replace(/\.[^.]+$/, '');
78
+ const fileTerms = tokenize(`${file.relativePath} ${basenameNoExt}`);
79
+ const reasons = [];
80
+ let score = 0;
81
+ if (planLower.includes(file.relativePath.toLowerCase())) {
82
+ score += 80;
83
+ reasons.push(`plan mentions ${file.relativePath}`);
84
+ }
85
+ else if (planLower.includes(basename.toLowerCase())) {
86
+ score += 70;
87
+ reasons.push(`plan mentions ${basename}`);
88
+ }
89
+ else if (basenameNoExt && planLower.includes(basenameNoExt.toLowerCase())) {
90
+ score += 60;
91
+ reasons.push(`plan mentions ${basenameNoExt}`);
92
+ }
93
+ const overlap = [...fileTerms].filter((term) => planTerms.has(term) && term.length > 2);
94
+ if (overlap.length > 0) {
95
+ score += overlap.length * 12;
96
+ reasons.push(`plan shares term(s): ${overlap.slice(0, 4).join(', ')}`);
97
+ }
98
+ if (qualityRisk && score > 0) {
99
+ score += 8;
100
+ reasons.push(`quality signal: ${qualityRisk.title}`);
101
+ }
102
+ const gf = graph?.files.get(file.relativePath);
103
+ const fanIn = graph?.localImporters.get(file.relativePath)?.size ?? 0;
104
+ const fanOut = gf?.imports.length ?? 0;
105
+ if (score > 0 && gf && (fanIn > 0 || fanOut > 0))
106
+ score += Math.min(10, fanIn + fanOut);
107
+ const graphSummary = gf && graph ? graphFor(file.relativePath, gf, graph) : undefined;
108
+ return {
109
+ path: file.relativePath,
110
+ score,
111
+ reasons,
112
+ ...(graphSummary ? { graph: graphSummary } : {}),
113
+ ...(qualityRisk ? { qualityRisk: qualityRisk.title } : {}),
114
+ };
115
+ }
116
+ function graphFor(file, graphFile, graph) {
117
+ return {
118
+ fanIn: graph.localImporters.get(file)?.size ?? 0,
119
+ fanOut: graphFile.imports.length,
120
+ directImporters: [...(graph.localImporters.get(file) ?? new Set())].sort(),
121
+ };
122
+ }
123
+ function likelyTests(files, candidates) {
124
+ const testFiles = files
125
+ .map((file) => file.relativePath)
126
+ .filter((file) => /(?:^|[./_-])(test|spec)\.[^.]+$/.test(file) || /\.(test|spec)\.[^.]+$/.test(file))
127
+ .sort();
128
+ const matches = new Map();
129
+ for (const candidate of candidates) {
130
+ const candidateBase = path.basename(candidate.path).replace(/\.[^.]+$/, '').toLowerCase();
131
+ for (const test of testFiles) {
132
+ const testLower = test.toLowerCase();
133
+ const score = testScore(testLower, candidateBase);
134
+ if (score > 0)
135
+ matches.set(test, Math.max(matches.get(test) ?? 0, score));
136
+ }
137
+ }
138
+ return [...matches]
139
+ .sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
140
+ .map(([test]) => test);
141
+ }
142
+ function testScore(testLower, candidateBase) {
143
+ const testBase = path
144
+ .basename(testLower)
145
+ .replace(/\.(test|spec)\.[^.]+$/, '')
146
+ .replace(/\.[^.]+$/, '');
147
+ if (testBase === candidateBase)
148
+ return 100;
149
+ return testLower.includes(candidateBase) ? 40 : 0;
150
+ }
151
+ function inferContracts(plan, candidates) {
152
+ const terms = tokenize(plan);
153
+ const contracts = new Set();
154
+ if (hasAny(terms, ['split', 'extract', 'module', 'modules', 'boundary']))
155
+ contracts.add('module boundary');
156
+ if (hasAny(terms, ['cli', 'command', 'commands']))
157
+ contracts.add('CLI command surface');
158
+ if (hasAny(terms, ['mcp', 'tool', 'tools']))
159
+ contracts.add('MCP tool surface');
160
+ if (hasAny(terms, ['type', 'types', 'api', 'export', 'public']))
161
+ contracts.add('public API/types');
162
+ if (candidates.some((candidate) => candidate.path.startsWith('src/cli/')))
163
+ contracts.add('CLI command surface');
164
+ if (candidates.some((candidate) => candidate.path.startsWith('src/mcp/')))
165
+ contracts.add('MCP tool surface');
166
+ if (candidates.some((candidate) => candidate.path.includes('/types') || candidate.path === 'src/types.ts'))
167
+ contracts.add('public API/types');
168
+ return [...contracts].sort();
169
+ }
170
+ function buildRolloutPlan(plan, candidates, tests) {
171
+ const primary = candidates[0]?.path;
172
+ const firstTest = tests[0];
173
+ return [
174
+ {
175
+ title: 'Lock the current behavior',
176
+ detail: firstTest
177
+ ? `Run or add the closest regression test before moving code: ${firstTest}.`
178
+ : 'Add one regression test around the behavior named in the plan before moving code.',
179
+ commands: firstTest ? [`npm test -- ${firstTest}`] : ['projscan assess --mode fix-first --format json'],
180
+ },
181
+ {
182
+ title: 'Extract the smallest module boundary',
183
+ detail: primary
184
+ ? `Move one responsibility out of ${primary}; keep imports and public exports stable until tests pass.`
185
+ : 'Name the target file or symbol, then extract one responsibility without broad cleanup.',
186
+ commands: primary ? [`projscan file ${primary} --format json`] : ['projscan understand --intent "where should this change go?" --format json'],
187
+ },
188
+ {
189
+ title: 'Wire callers through the existing public surface',
190
+ detail: 'Update direct importers first and avoid renaming public contracts unless the simulation calls them out.',
191
+ commands: primary ? [`projscan impact ${primary} --format json`] : ['projscan quality-scorecard --format json'],
192
+ },
193
+ {
194
+ title: 'Run proof commands and compare risk',
195
+ detail: `After the change, rerun the simulator for the same plan and compare risk delta.`,
196
+ commands: [`projscan simulate --plan ${quotePlan(plan)} --format json`],
197
+ },
198
+ ];
199
+ }
200
+ function buildProofCommands(plan, candidates, tests) {
201
+ const commands = [
202
+ `projscan simulate --plan ${quotePlan(plan)} --format json`,
203
+ 'projscan assess --mode fix-first --format json',
204
+ 'projscan quality-scorecard --format json',
205
+ ];
206
+ for (const candidate of candidates.slice(0, 3)) {
207
+ commands.push(`projscan file ${candidate.path} --format json`);
208
+ commands.push(`projscan impact ${candidate.path} --format json`);
209
+ }
210
+ for (const test of tests.slice(0, 3))
211
+ commands.push(`npm test -- ${test}`);
212
+ return [...new Set(commands)];
213
+ }
214
+ function buildEvidence(candidates, tests, contracts) {
215
+ const evidence = [];
216
+ for (const candidate of candidates) {
217
+ evidence.push({
218
+ source: 'plan-match',
219
+ detail: candidate.reasons.join('; '),
220
+ file: candidate.path,
221
+ command: `projscan file ${candidate.path} --format json`,
222
+ });
223
+ if (candidate.graph) {
224
+ evidence.push({
225
+ source: 'code-graph',
226
+ detail: `fan-in ${candidate.graph.fanIn}, fan-out ${candidate.graph.fanOut}, direct importers ${candidate.graph.directImporters.length}`,
227
+ file: candidate.path,
228
+ command: `projscan impact ${candidate.path} --format json`,
229
+ });
230
+ }
231
+ }
232
+ if (tests.length > 0) {
233
+ evidence.push({
234
+ source: 'test-neighbor',
235
+ detail: `${tests.length} likely affected test file(s)`,
236
+ file: tests[0],
237
+ });
238
+ }
239
+ if (contracts.length > 0) {
240
+ evidence.push({
241
+ source: 'contract-inference',
242
+ detail: contracts.join(', '),
243
+ });
244
+ }
245
+ return evidence;
246
+ }
247
+ function verdictFor(confidence, delta) {
248
+ if (confidence === 'low')
249
+ return 'needs-more-evidence';
250
+ if (delta <= 0)
251
+ return 'not-worth-it-yet';
252
+ return 'worth-doing';
253
+ }
254
+ function confidenceFor(candidates, graph) {
255
+ if (candidates.length === 0)
256
+ return 'low';
257
+ if (candidates[0] && candidates[0].score >= 80 && graph)
258
+ return 'high';
259
+ return 'medium';
260
+ }
261
+ function summarize(verdict, confidence, candidates, delta) {
262
+ if (candidates.length === 0)
263
+ return `${verdict}: low-confidence simulation needs a concrete target`;
264
+ return `${verdict}: ${confidence}-confidence plan touches ${candidates.length} likely file(s), projected risk delta +${delta}`;
265
+ }
266
+ function priorityForCandidate(candidate) {
267
+ if (candidate.score >= 90)
268
+ return 'p0';
269
+ if (candidate.score >= 45)
270
+ return 'p1';
271
+ return 'p2';
272
+ }
273
+ function normalizePlan(value) {
274
+ return value?.trim().replace(/\s+/g, ' ') ?? '';
275
+ }
276
+ function normalizeMaxFiles(value) {
277
+ if (typeof value !== 'number' || !Number.isFinite(value))
278
+ return DEFAULT_MAX_FILES;
279
+ return Math.max(1, Math.min(25, Math.floor(value)));
280
+ }
281
+ function tokenize(value) {
282
+ const spaced = value.replace(/([a-z0-9])([A-Z])/g, '$1 $2').toLowerCase();
283
+ const terms = spaced.match(/[a-z0-9]+/g) ?? [];
284
+ return new Set(terms.filter((term) => term.length > 1));
285
+ }
286
+ function hasAny(terms, values) {
287
+ return values.some((value) => terms.has(value));
288
+ }
289
+ function quotePlan(plan) {
290
+ return `"${plan.replace(/["\\]/g, '\\$&')}"`;
291
+ }
292
+ function slug(value) {
293
+ return value.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
294
+ }
295
+ function testRank(file) {
296
+ return /\.(test|spec)\.[^.]+$/.test(file) ? 1 : 0;
297
+ }
298
+ //# sourceMappingURL=simulate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulate.js","sourceRoot":"","sources":["../../src/core/simulate.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,8 @@ import { evidencePackTool } from './tools/evidencePack.js';
40
40
  import { regressionPlanTool } from './tools/regressionPlan.js';
41
41
  import { agentBriefTool } from './tools/agentBrief.js';
42
42
  import { qualityScorecardTool } from './tools/qualityScorecard.js';
43
+ import { assessTool } from './tools/assess.js';
44
+ import { simulateTool } from './tools/simulate.js';
43
45
  import { adoptionTool } from './tools/adoption.js';
44
46
  import { startTool } from './tools/start.js';
45
47
  import { understandTool } from './tools/understand.js';
@@ -80,6 +82,8 @@ export const mcpTools = [
80
82
  regressionPlanTool,
81
83
  agentBriefTool,
82
84
  qualityScorecardTool,
85
+ assessTool,
86
+ simulateTool,
83
87
  adoptionTool,
84
88
  startTool,
85
89
  understandTool,
@@ -1 +1 @@
1
- {"version":3,"file":"toolCatalog.js","sourceRoot":"","sources":["../../src/mcp/toolCatalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toolCatalog.js","sourceRoot":"","sources":["../../src/mcp/toolCatalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { McpTool } from './_shared.js';
2
+ export declare const assessTool: McpTool;
@@ -0,0 +1,42 @@
1
+ import { computeAssess } from '../../core/assess.js';
2
+ const ASSESS_MODES = new Set(['standard', 'fix-first', 'ship-readiness']);
3
+ export const assessTool = {
4
+ name: 'projscan_assess',
5
+ description: 'Run a proof-first engineering assessment. Returns Proof Cards with local evidence, fix-first guidance, risk delta, verification commands, and ship-readiness wording.',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ goal: {
10
+ type: 'string',
11
+ description: 'Plain-language assessment goal. Example: "make this repo safer to ship".',
12
+ },
13
+ mode: {
14
+ type: 'string',
15
+ description: 'Assessment mode: standard, fix-first, or ship-readiness. fix-first returns the shortest action queue.',
16
+ },
17
+ max_cards: {
18
+ type: 'number',
19
+ description: 'Maximum Proof Cards to return. Default: 5, max: 25.',
20
+ },
21
+ max_tokens: {
22
+ type: 'number',
23
+ description: 'Cap the response to roughly this many tokens.',
24
+ },
25
+ },
26
+ },
27
+ handler: async (args, rootPath) => ({
28
+ assess: await computeAssess(rootPath, {
29
+ goal: typeof args.goal === 'string' ? args.goal : undefined,
30
+ mode: parseMode(args.mode),
31
+ maxCards: typeof args.max_cards === 'number' && Number.isFinite(args.max_cards)
32
+ ? args.max_cards
33
+ : undefined,
34
+ }),
35
+ }),
36
+ };
37
+ function parseMode(value) {
38
+ return typeof value === 'string' && ASSESS_MODES.has(value)
39
+ ? value
40
+ : undefined;
41
+ }
42
+ //# sourceMappingURL=assess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assess.js","sourceRoot":"","sources":["../../../src/mcp/tools/assess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAa,CAAC,UAAU,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAEtF,MAAM,CAAC,MAAM,UAAU,GAAY;IACjC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,uKAAuK;IACzK,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0EAA0E;aACxF;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,uGAAuG;aAC1G;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qDAAqD;aACnE;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+CAA+C;aAC7D;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM,EAAE,MAAM,aAAa,CAAC,QAAQ,EAAE;YACpC,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC3D,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B,QAAQ,EACN,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;gBACnE,CAAC,CAAC,IAAI,CAAC,SAAS;gBAChB,CAAC,CAAC,SAAS;SAChB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,KAAmB,CAAC;QACvE,CAAC,CAAE,KAAoB;QACvB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpTool } from './_shared.js';
2
+ export declare const simulateTool: McpTool;
@@ -0,0 +1,32 @@
1
+ import { computeSimulation } from '../../core/simulate.js';
2
+ export const simulateTool = {
3
+ name: 'projscan_simulate',
4
+ description: 'Simulate a proposed change plan before editing. Returns likely files, tests, contracts, rollout, proof commands, and projected risk delta from local evidence.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: {
8
+ plan: {
9
+ type: 'string',
10
+ description: 'Plain-language change plan. Example: "split bugHunt.ts into ranking, evidence, and output modules".',
11
+ },
12
+ max_files: {
13
+ type: 'number',
14
+ description: 'Maximum likely touched files to return. Default: 5, max: 25.',
15
+ },
16
+ max_tokens: {
17
+ type: 'number',
18
+ description: 'Cap the response to roughly this many tokens.',
19
+ },
20
+ },
21
+ required: ['plan'],
22
+ },
23
+ handler: async (args, rootPath) => ({
24
+ simulate: await computeSimulation(rootPath, {
25
+ plan: typeof args.plan === 'string' ? args.plan : '',
26
+ maxFiles: typeof args.max_files === 'number' && Number.isFinite(args.max_files)
27
+ ? args.max_files
28
+ : undefined,
29
+ }),
30
+ }),
31
+ };
32
+ //# sourceMappingURL=simulate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulate.js","sourceRoot":"","sources":["../../../src/mcp/tools/simulate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,MAAM,CAAC,MAAM,YAAY,GAAY;IACnC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,gKAAgK;IAClK,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,qGAAqG;aACxG;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8DAA8D;aAC5E;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+CAA+C;aAC7D;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClC,QAAQ,EAAE,MAAM,iBAAiB,CAAC,QAAQ,EAAE;YAC1C,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YACpD,QAAQ,EACN,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;gBACnE,CAAC,CAAC,IAAI,CAAC,SAAS;gBAChB,CAAC,CAAC,SAAS;SAChB,CAAC;KACH,CAAC;CACH,CAAC"}
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.5",
4
- "serialNumber": "urn:uuid:f121e1ba-5a7a-4c17-98ab-a42644f0eec2",
4
+ "serialNumber": "urn:uuid:ac1a1fd3-2c78-4830-8579-508d0b0ff5e9",
5
5
  "version": 1,
6
6
  "metadata": {
7
- "timestamp": "2026-06-21T15:38:39.209Z",
7
+ "timestamp": "2026-06-22T06:58:43.839Z",
8
8
  "tools": [
9
9
  {
10
10
  "vendor": "projscan",
11
11
  "name": "projscan-sbom-generator",
12
- "version": "4.10.0"
12
+ "version": "4.11.1"
13
13
  }
14
14
  ],
15
15
  "component": {
16
16
  "type": "application",
17
- "bom-ref": "pkg:npm/projscan@4.10.0",
17
+ "bom-ref": "pkg:npm/projscan@4.11.1",
18
18
  "name": "projscan",
19
- "version": "4.10.0",
20
- "purl": "pkg:npm/projscan@4.10.0"
19
+ "version": "4.11.1",
20
+ "purl": "pkg:npm/projscan@4.11.1"
21
21
  }
22
22
  },
23
23
  "components": [
@@ -4,6 +4,8 @@ export { detectFrameworks } from './core/frameworkDetector.js';
4
4
  export { analyzeDependencies } from './core/dependencyAnalyzer.js';
5
5
  export { collectIssues } from './core/issueEngine.js';
6
6
  export { analyzeHotspots, computeRiskScore } from './core/hotspotAnalyzer.js';
7
+ export { computeAssess } from './core/assess.js';
8
+ export { computeSimulation } from './core/simulate.js';
7
9
  export { inspectFile } from './core/fileInspector.js';
8
10
  export { buildImportGraph, toPackageName, isPackageUsed, filesImporting, } from './core/importGraph.js';
9
11
  export { detectOutdated } from './core/outdatedDetector.js';
@@ -4,6 +4,8 @@ export { detectFrameworks } from './core/frameworkDetector.js';
4
4
  export { analyzeDependencies } from './core/dependencyAnalyzer.js';
5
5
  export { collectIssues } from './core/issueEngine.js';
6
6
  export { analyzeHotspots, computeRiskScore } from './core/hotspotAnalyzer.js';
7
+ export { computeAssess } from './core/assess.js';
8
+ export { computeSimulation } from './core/simulate.js';
7
9
  export { inspectFile } from './core/fileInspector.js';
8
10
  export { buildImportGraph, toPackageName, isPackageUsed, filesImporting, } from './core/importGraph.js';
9
11
  export { detectOutdated } from './core/outdatedDetector.js';
@@ -1 +1 @@
1
- {"version":3,"file":"publicCore.js","sourceRoot":"","sources":["../src/publicCore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAqB,MAAM,eAAe,CAAC;AAC5E,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,WAAW,GAGZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAwD,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EACL,gBAAgB,EAChB,MAAM,EACN,QAAQ,EACR,WAAW,EACX,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,WAAW,GAEZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EACL,KAAK,IAAI,WAAW,EACpB,OAAO,IAAI,aAAa,EACxB,KAAK,IAAI,WAAW,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAwB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"publicCore.js","sourceRoot":"","sources":["../src/publicCore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAqB,MAAM,eAAe,CAAC;AAC5E,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,WAAW,GAGZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAwD,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EACL,gBAAgB,EAChB,MAAM,EACN,QAAQ,EACR,WAAW,EACX,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,WAAW,GAEZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EACL,KAAK,IAAI,WAAW,EACpB,OAAO,IAAI,aAAa,EACxB,KAAK,IAAI,WAAW,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAwB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "projscan",
3
- "version": "4.10.0",
3
+ "version": "4.11.1",
4
4
  "mcpProtocolVersion": null,
5
- "generatedAt": "2026-06-21T15:38:46.053Z",
6
- "toolCount": 45,
5
+ "generatedAt": "2026-06-22T06:58:50.868Z",
6
+ "toolCount": 47,
7
7
  "tools": [
8
8
  {
9
9
  "name": "projscan_analyze",
@@ -1001,6 +1001,55 @@
1001
1001
  }
1002
1002
  }
1003
1003
  },
1004
+ {
1005
+ "name": "projscan_assess",
1006
+ "description": "Run a proof-first engineering assessment. Returns Proof Cards with local evidence, fix-first guidance, risk delta, verification commands, and ship-readiness wording.",
1007
+ "inputSchema": {
1008
+ "type": "object",
1009
+ "properties": {
1010
+ "goal": {
1011
+ "type": "string",
1012
+ "description": "Plain-language assessment goal. Example: \"make this repo safer to ship\"."
1013
+ },
1014
+ "mode": {
1015
+ "type": "string",
1016
+ "description": "Assessment mode: standard, fix-first, or ship-readiness. fix-first returns the shortest action queue."
1017
+ },
1018
+ "max_cards": {
1019
+ "type": "number",
1020
+ "description": "Maximum Proof Cards to return. Default: 5, max: 25."
1021
+ },
1022
+ "max_tokens": {
1023
+ "type": "number",
1024
+ "description": "Cap the response to roughly this many tokens."
1025
+ }
1026
+ }
1027
+ }
1028
+ },
1029
+ {
1030
+ "name": "projscan_simulate",
1031
+ "description": "Simulate a proposed change plan before editing. Returns likely files, tests, contracts, rollout, proof commands, and projected risk delta from local evidence.",
1032
+ "inputSchema": {
1033
+ "type": "object",
1034
+ "properties": {
1035
+ "plan": {
1036
+ "type": "string",
1037
+ "description": "Plain-language change plan. Example: \"split bugHunt.ts into ranking, evidence, and output modules\"."
1038
+ },
1039
+ "max_files": {
1040
+ "type": "number",
1041
+ "description": "Maximum likely touched files to return. Default: 5, max: 25."
1042
+ },
1043
+ "max_tokens": {
1044
+ "type": "number",
1045
+ "description": "Cap the response to roughly this many tokens."
1046
+ }
1047
+ },
1048
+ "required": [
1049
+ "plan"
1050
+ ]
1051
+ }
1052
+ },
1004
1053
  {
1005
1054
  "name": "projscan_adoption",
1006
1055
  "description": "Adoption helper for new projscan users and agents. Returns ready-to-paste MCP client configs, workflow recipes, or first-run diagnostics without mutating the repo.",