projscan 3.0.2 → 3.0.4
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 +39 -25
- package/dist/cli/commands/dataflow.js +2 -0
- package/dist/cli/commands/dataflow.js.map +1 -1
- package/dist/cli/commands/evidencePack.js +6 -0
- package/dist/cli/commands/evidencePack.js.map +1 -1
- package/dist/cli/commands/init.js +143 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mcp.js +67 -3
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/review.js +5 -23
- package/dist/cli/commands/review.js.map +1 -1
- package/dist/cli/commands/start.d.ts +1 -0
- package/dist/cli/commands/start.js +79 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/workplan.js +17 -11
- package/dist/cli/commands/workplan.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/adoption.d.ts +86 -0
- package/dist/core/adoption.js +441 -0
- package/dist/core/adoption.js.map +1 -1
- package/dist/core/ast.d.ts +8 -0
- package/dist/core/ast.js +69 -4
- package/dist/core/ast.js.map +1 -1
- package/dist/core/bugHunt.js +16 -7
- package/dist/core/bugHunt.js.map +1 -1
- package/dist/core/dataflow.d.ts +2 -0
- package/dist/core/dataflow.js +3 -1
- package/dist/core/dataflow.js.map +1 -1
- package/dist/core/dataflowFilters.d.ts +1 -0
- package/dist/core/dataflowFilters.js +8 -9
- package/dist/core/dataflowFilters.js.map +1 -1
- package/dist/core/frameworkSources.d.ts +2 -0
- package/dist/core/frameworkSources.js +33 -0
- package/dist/core/frameworkSources.js.map +1 -0
- package/dist/core/indexCache.js +4 -1
- package/dist/core/indexCache.js.map +1 -1
- package/dist/core/ownership.js +58 -0
- package/dist/core/ownership.js.map +1 -1
- package/dist/core/pathClassifiers.d.ts +2 -0
- package/dist/core/pathClassifiers.js +23 -0
- package/dist/core/pathClassifiers.js.map +1 -0
- package/dist/core/preflight.js +24 -4
- package/dist/core/preflight.js.map +1 -1
- package/dist/core/releaseEvidence.d.ts +5 -1
- package/dist/core/releaseEvidence.js +332 -4
- package/dist/core/releaseEvidence.js.map +1 -1
- package/dist/core/review.d.ts +2 -0
- package/dist/core/review.js +90 -16
- package/dist/core/review.js.map +1 -1
- package/dist/core/reviewDataflow.d.ts +10 -2
- package/dist/core/reviewDataflow.js +15 -11
- package/dist/core/reviewDataflow.js.map +1 -1
- package/dist/core/start.d.ts +8 -0
- package/dist/core/start.js +156 -0
- package/dist/core/start.js.map +1 -0
- package/dist/core/taint.js +3 -1
- package/dist/core/taint.js.map +1 -1
- package/dist/core/workplan.d.ts +2 -1
- package/dist/core/workplan.js +77 -3
- package/dist/core/workplan.js.map +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/tools/adoption.js +7 -3
- package/dist/mcp/tools/adoption.js.map +1 -1
- package/dist/mcp/tools/dataflow.js +5 -0
- package/dist/mcp/tools/dataflow.js.map +1 -1
- package/dist/mcp/tools/evidencePack.js +5 -0
- package/dist/mcp/tools/evidencePack.js.map +1 -1
- package/dist/mcp/tools/review.js +3 -23
- package/dist/mcp/tools/review.js.map +1 -1
- package/dist/mcp/tools/start.d.ts +2 -0
- package/dist/mcp/tools/start.js +58 -0
- package/dist/mcp/tools/start.js.map +1 -0
- package/dist/mcp/tools.js +2 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/projscan-sbom.cdx.json +6 -6
- package/dist/tool-manifest.json +52 -5
- package/dist/types.d.ts +119 -0
- package/dist/utils/baseline.js +41 -1
- package/dist/utils/baseline.js.map +1 -1
- package/dist/utils/formatSupport.d.ts +5 -0
- package/dist/utils/formatSupport.js +5 -0
- package/dist/utils/formatSupport.js.map +1 -1
- package/docs/PLUGIN-GALLERY.md +25 -0
- package/docs/examples/plugins/api-route-ownership.mjs +60 -0
- package/docs/examples/plugins/api-route-ownership.projscan-plugin.json +8 -0
- package/docs/examples/plugins/monorepo-boundary.mjs +37 -0
- package/docs/examples/plugins/monorepo-boundary.projscan-plugin.json +8 -0
- package/docs/examples/plugins/security-sensitive-files.mjs +18 -0
- package/docs/examples/plugins/security-sensitive-files.projscan-plugin.json +8 -0
- package/package.json +2 -2
package/dist/core/adoption.js
CHANGED
|
@@ -3,6 +3,11 @@ import fs from 'node:fs/promises';
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { promisify } from 'node:util';
|
|
5
5
|
import { PLUGIN_PREVIEW_FLAG, discoverPluginManifests } from './plugins.js';
|
|
6
|
+
import { analyzeHotspots } from './hotspotAnalyzer.js';
|
|
7
|
+
import { collectIssues } from './issueEngine.js';
|
|
8
|
+
import { scanRepository } from './repositoryScanner.js';
|
|
9
|
+
import { saveBaseline } from '../utils/baseline.js';
|
|
10
|
+
import { applyConfigToIssues, loadConfig } from '../utils/config.js';
|
|
6
11
|
const execFileAsync = promisify(execFile);
|
|
7
12
|
export const MCP_CLIENT_IDS = [
|
|
8
13
|
'all',
|
|
@@ -16,6 +21,7 @@ export const MCP_CLIENT_IDS = [
|
|
|
16
21
|
'zed',
|
|
17
22
|
'gemini',
|
|
18
23
|
];
|
|
24
|
+
export const POLICY_STARTER_TEAMS = ['frontend', 'platform', 'security', 'monorepo'];
|
|
19
25
|
const INSTALL = {
|
|
20
26
|
command: 'npm install -g projscan',
|
|
21
27
|
runWithoutInstall: 'npx projscan',
|
|
@@ -133,6 +139,32 @@ export function getWorkflowRecipes() {
|
|
|
133
139
|
mcpTools: ['projscan_preflight', 'projscan_workplan'],
|
|
134
140
|
handoff: 'If preflight returns caution or block, follow suggestedNextActions before editing.',
|
|
135
141
|
},
|
|
142
|
+
{
|
|
143
|
+
id: 'team_bootstrap',
|
|
144
|
+
name: 'Team Bootstrap',
|
|
145
|
+
useWhen: 'Adopt projscan for a team or new repository.',
|
|
146
|
+
outcome: 'A team policy, PR workflow, ownership starter, baseline memory, MCP setup check, and first start report that make adoption repeatable.',
|
|
147
|
+
commands: [
|
|
148
|
+
'projscan init team --team platform',
|
|
149
|
+
'projscan start --mode before_edit --format json',
|
|
150
|
+
'projscan mcp doctor --client codex --format json',
|
|
151
|
+
],
|
|
152
|
+
mcpTools: ['projscan_adoption', 'projscan_start'],
|
|
153
|
+
handoff: 'Run init team once, commit the generated policy/workflow/ownership/baseline files, then tune thresholds after the first PR.',
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
id: 'pr_automation',
|
|
157
|
+
name: 'PR Automation',
|
|
158
|
+
useWhen: 'Put projscan evidence directly in pull request review.',
|
|
159
|
+
outcome: 'Pull requests receive an approval comment and fail CI only when preflight returns block.',
|
|
160
|
+
commands: [
|
|
161
|
+
'projscan init github-action',
|
|
162
|
+
'projscan preflight --mode before_merge --format json',
|
|
163
|
+
'projscan evidence-pack --pr-comment',
|
|
164
|
+
],
|
|
165
|
+
mcpTools: ['projscan_preflight', 'projscan_evidence_pack'],
|
|
166
|
+
handoff: 'Treat block as a hard CI failure; use PR comment next actions for caution-level follow-up.',
|
|
167
|
+
},
|
|
136
168
|
{
|
|
137
169
|
id: 'bug_hunt',
|
|
138
170
|
name: 'Bug Hunt',
|
|
@@ -389,4 +421,413 @@ async function git(rootPath, args) {
|
|
|
389
421
|
maxBuffer: 1024 * 1024,
|
|
390
422
|
});
|
|
391
423
|
}
|
|
424
|
+
export function isPolicyStarterTeam(value) {
|
|
425
|
+
return typeof value === 'string' && POLICY_STARTER_TEAMS.includes(value);
|
|
426
|
+
}
|
|
427
|
+
export function getPolicyStarterKit(team) {
|
|
428
|
+
const kit = POLICY_KITS[team];
|
|
429
|
+
return {
|
|
430
|
+
schemaVersion: 1,
|
|
431
|
+
team,
|
|
432
|
+
label: kit.label,
|
|
433
|
+
config: cloneConfig(kit.config),
|
|
434
|
+
nextCommands: [...kit.nextCommands],
|
|
435
|
+
rationale: [...kit.rationale],
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
export async function writePolicyStarterKit(rootPath, team, options = {}) {
|
|
439
|
+
const target = path.join(rootPath, '.projscanrc.json');
|
|
440
|
+
const kit = getPolicyStarterKit(team);
|
|
441
|
+
try {
|
|
442
|
+
await fs.access(target);
|
|
443
|
+
if (options.force !== true) {
|
|
444
|
+
return {
|
|
445
|
+
...kit,
|
|
446
|
+
target,
|
|
447
|
+
created: false,
|
|
448
|
+
reason: '.projscanrc.json already exists; pass --force to overwrite it.',
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
catch {
|
|
453
|
+
// file does not exist
|
|
454
|
+
}
|
|
455
|
+
await fs.writeFile(target, `${JSON.stringify(kit.config, null, 2)}\n`, 'utf-8');
|
|
456
|
+
return {
|
|
457
|
+
...kit,
|
|
458
|
+
target,
|
|
459
|
+
created: true,
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
export async function writeTeamStarterKit(rootPath, team, options = {}) {
|
|
463
|
+
const policy = await writePolicyStarterKit(rootPath, team, options);
|
|
464
|
+
const action = await writeGithubActionStarter(rootPath, options);
|
|
465
|
+
const codeowners = await writeCodeownersStarter(rootPath, team, options);
|
|
466
|
+
const baseline = await writeInitialBaseline(rootPath, options);
|
|
467
|
+
return {
|
|
468
|
+
schemaVersion: 1,
|
|
469
|
+
team,
|
|
470
|
+
created: {
|
|
471
|
+
policy: policy.created,
|
|
472
|
+
githubAction: action.created,
|
|
473
|
+
codeowners: codeowners.created,
|
|
474
|
+
baseline: baseline.created,
|
|
475
|
+
},
|
|
476
|
+
files: {
|
|
477
|
+
policy: policy.target,
|
|
478
|
+
githubAction: action.target,
|
|
479
|
+
codeowners: codeowners.target,
|
|
480
|
+
baseline: baseline.target,
|
|
481
|
+
},
|
|
482
|
+
nextCommands: [
|
|
483
|
+
'projscan start --mode before_edit --format json',
|
|
484
|
+
'projscan mcp doctor --client codex --format json',
|
|
485
|
+
'projscan evidence-pack --pr-comment',
|
|
486
|
+
],
|
|
487
|
+
rationale: [
|
|
488
|
+
'Bootstraps policy, PR evidence automation, ownership routing, and baseline memory in one command.',
|
|
489
|
+
'The generated PR workflow posts evidence before enforcing block-only preflight failure.',
|
|
490
|
+
],
|
|
491
|
+
reasons: [policy.reason, action.reason, codeowners.reason, baseline.reason].filter((item) => typeof item === 'string'),
|
|
492
|
+
onboarding: buildTeamOnboarding(team),
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
function buildTeamOnboarding(team) {
|
|
496
|
+
return [
|
|
497
|
+
{
|
|
498
|
+
id: 'review-generated-files',
|
|
499
|
+
title: 'Review generated starter files',
|
|
500
|
+
why: 'Confirm policy thresholds, PR workflow behavior, CODEOWNERS handles, and baseline memory before committing the bootstrap.',
|
|
501
|
+
command: 'git diff -- .projscanrc.json .github/workflows/projscan.yml .github/CODEOWNERS .projscan-baseline.json',
|
|
502
|
+
files: ['.projscanrc.json', '.github/workflows/projscan.yml', '.github/CODEOWNERS', '.projscan-baseline.json'],
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
id: 'verify-mcp-setup',
|
|
506
|
+
title: 'Verify MCP setup',
|
|
507
|
+
why: 'Make sure the coding agent can start projscan before the first team PR depends on MCP evidence.',
|
|
508
|
+
command: 'projscan mcp doctor --client codex --format json',
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
id: 'open-first-pr',
|
|
512
|
+
title: 'Open the first PR with evidence',
|
|
513
|
+
why: 'The first PR should show the verdict, trust calibration, owner routing, baseline trend, and next commands in one reviewer surface.',
|
|
514
|
+
command: 'projscan evidence-pack --pr-comment',
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
id: 'tune-after-baseline',
|
|
518
|
+
title: `Tune the ${team} policy after the first baseline`,
|
|
519
|
+
why: 'Treat cautions as calibration data first; tighten thresholds only after the first real team review.',
|
|
520
|
+
command: 'projscan preflight --mode before_merge --format json',
|
|
521
|
+
},
|
|
522
|
+
];
|
|
523
|
+
}
|
|
524
|
+
async function writeCodeownersStarter(rootPath, team, options) {
|
|
525
|
+
const target = path.join(rootPath, '.github', 'CODEOWNERS');
|
|
526
|
+
try {
|
|
527
|
+
await fs.access(target);
|
|
528
|
+
if (options.force !== true)
|
|
529
|
+
return { target, created: false, reason: '.github/CODEOWNERS already exists; pass --force to overwrite it.' };
|
|
530
|
+
}
|
|
531
|
+
catch {
|
|
532
|
+
// file does not exist
|
|
533
|
+
}
|
|
534
|
+
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
535
|
+
await fs.writeFile(target, buildCodeownersStarter(team), 'utf-8');
|
|
536
|
+
return { target, created: true };
|
|
537
|
+
}
|
|
538
|
+
function buildCodeownersStarter(team) {
|
|
539
|
+
const owner = TEAM_OWNER_HANDLES[team];
|
|
540
|
+
return [
|
|
541
|
+
'# Generated by projscan init team. Replace these handles with your real owners.',
|
|
542
|
+
`* ${owner}`,
|
|
543
|
+
`src/** ${owner}`,
|
|
544
|
+
`docs/** ${owner}`,
|
|
545
|
+
`.github/** ${owner}`,
|
|
546
|
+
'',
|
|
547
|
+
].join('\n');
|
|
548
|
+
}
|
|
549
|
+
const TEAM_OWNER_HANDLES = {
|
|
550
|
+
frontend: '@frontend-team',
|
|
551
|
+
platform: '@platform-team',
|
|
552
|
+
security: '@security-team',
|
|
553
|
+
monorepo: '@monorepo-team',
|
|
554
|
+
};
|
|
555
|
+
async function writeInitialBaseline(rootPath, options) {
|
|
556
|
+
const target = path.join(rootPath, '.projscan-baseline.json');
|
|
557
|
+
try {
|
|
558
|
+
await fs.access(target);
|
|
559
|
+
if (options.force !== true)
|
|
560
|
+
return { target, created: false, reason: '.projscan-baseline.json already exists; pass --force to overwrite it.' };
|
|
561
|
+
}
|
|
562
|
+
catch {
|
|
563
|
+
// file does not exist
|
|
564
|
+
}
|
|
565
|
+
const configResult = await loadConfig(rootPath).catch(() => ({ config: { ignore: [] } }));
|
|
566
|
+
const scan = await scanRepository(rootPath, { ignore: configResult.config.ignore });
|
|
567
|
+
const issues = applyConfigToIssues(await collectIssues(rootPath, scan.files), configResult.config);
|
|
568
|
+
const hotspotReport = await analyzeHotspots(rootPath, scan.files, issues, { limit: 20 });
|
|
569
|
+
await saveBaseline(rootPath, issues, hotspotReport);
|
|
570
|
+
return { target, created: true };
|
|
571
|
+
}
|
|
572
|
+
export async function computeMcpSetupDoctor(rootPath, client = 'all') {
|
|
573
|
+
const guide = getMcpConfigGuide(client);
|
|
574
|
+
const configText = guide.client === 'all'
|
|
575
|
+
? guide.configs.map((entry) => `# ${entry.displayName}\n${entry.configText}`).join('\n\n')
|
|
576
|
+
: guide.configText;
|
|
577
|
+
const whereToPaste = guide.client === 'all'
|
|
578
|
+
? 'Use the matching client-specific config block.'
|
|
579
|
+
: guide.whereToPaste;
|
|
580
|
+
const checks = [
|
|
581
|
+
checkNodeVersion(),
|
|
582
|
+
{
|
|
583
|
+
id: 'server-command',
|
|
584
|
+
status: 'pass',
|
|
585
|
+
summary: 'MCP server command uses local stdio startup.',
|
|
586
|
+
detail: INSTALL.mcpServerCommand,
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
id: 'config-shape',
|
|
590
|
+
status: configText.includes('projscan') && configText.includes('npx') ? 'pass' : 'fail',
|
|
591
|
+
summary: 'Config snippet includes the projscan stdio server.',
|
|
592
|
+
detail: whereToPaste,
|
|
593
|
+
},
|
|
594
|
+
await checkProjectMcpConfig(rootPath, client),
|
|
595
|
+
];
|
|
596
|
+
const status = checks.some((check) => check.status === 'fail') ? 'fail' : checks.some((check) => check.status === 'warn') ? 'warn' : 'pass';
|
|
597
|
+
return {
|
|
598
|
+
schemaVersion: 1,
|
|
599
|
+
client,
|
|
600
|
+
status,
|
|
601
|
+
summary: `${status}: ${client} MCP setup uses ${INSTALL.mcpServerCommand}`,
|
|
602
|
+
expected: {
|
|
603
|
+
command: INSTALL.mcpServerCommand,
|
|
604
|
+
runWithoutInstall: INSTALL.runWithoutInstall,
|
|
605
|
+
install: INSTALL.command,
|
|
606
|
+
},
|
|
607
|
+
whereToPaste,
|
|
608
|
+
configText,
|
|
609
|
+
checks,
|
|
610
|
+
nextCommands: ['projscan init mcp --client all', `projscan mcp doctor --client ${client} --format json`, 'npx -y projscan mcp'],
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
async function checkProjectMcpConfig(rootPath, client) {
|
|
614
|
+
const candidates = clientConfigCandidates(client);
|
|
615
|
+
for (const candidate of candidates) {
|
|
616
|
+
try {
|
|
617
|
+
const raw = await fs.readFile(path.join(rootPath, candidate), 'utf-8');
|
|
618
|
+
return {
|
|
619
|
+
id: 'project-config',
|
|
620
|
+
status: raw.includes('projscan') ? 'pass' : 'warn',
|
|
621
|
+
summary: raw.includes('projscan') ? `Found projscan in ${candidate}.` : `Found ${candidate}, but it does not mention projscan.`,
|
|
622
|
+
detail: candidate,
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
catch {
|
|
626
|
+
// try next
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
return {
|
|
630
|
+
id: 'project-config',
|
|
631
|
+
status: 'info',
|
|
632
|
+
summary: 'No project-local MCP config found; paste the snippet into the client settings if needed.',
|
|
633
|
+
};
|
|
634
|
+
}
|
|
635
|
+
function clientConfigCandidates(client) {
|
|
636
|
+
if (client === 'cursor')
|
|
637
|
+
return ['.cursor/mcp.json'];
|
|
638
|
+
if (client === 'continue')
|
|
639
|
+
return ['.continue/config.json'];
|
|
640
|
+
if (client === 'codex')
|
|
641
|
+
return ['.codex/config.toml'];
|
|
642
|
+
if (client === 'all')
|
|
643
|
+
return ['.cursor/mcp.json', '.continue/config.json', '.codex/config.toml'];
|
|
644
|
+
return [];
|
|
645
|
+
}
|
|
646
|
+
const POLICY_KITS = {
|
|
647
|
+
frontend: {
|
|
648
|
+
label: 'Frontend team policy',
|
|
649
|
+
config: {
|
|
650
|
+
minScore: 75,
|
|
651
|
+
hotspots: { limit: 12, since: '90 days ago' },
|
|
652
|
+
ignore: ['.next', 'dist', 'build', 'coverage', 'storybook-static'],
|
|
653
|
+
disableRules: [],
|
|
654
|
+
severityOverrides: {
|
|
655
|
+
'test-missing': 'warning',
|
|
656
|
+
},
|
|
657
|
+
},
|
|
658
|
+
nextCommands: [
|
|
659
|
+
'projscan start --mode before_edit --format json',
|
|
660
|
+
'projscan preflight --mode before_edit --format json',
|
|
661
|
+
'projscan quality-scorecard --format json',
|
|
662
|
+
],
|
|
663
|
+
rationale: [
|
|
664
|
+
'Frontend teams need fast feedback on generated build directories and test readiness.',
|
|
665
|
+
'The starter keeps generated output quiet while still surfacing changed-code risk.',
|
|
666
|
+
],
|
|
667
|
+
},
|
|
668
|
+
platform: {
|
|
669
|
+
label: 'Platform team policy',
|
|
670
|
+
config: {
|
|
671
|
+
minScore: 80,
|
|
672
|
+
baseRef: 'main',
|
|
673
|
+
hotspots: { limit: 15, since: '120 days ago' },
|
|
674
|
+
ignore: ['dist', 'build', 'coverage', '.turbo', '.cache'],
|
|
675
|
+
disableRules: [],
|
|
676
|
+
},
|
|
677
|
+
nextCommands: [
|
|
678
|
+
'projscan start --mode before_edit --format json',
|
|
679
|
+
'projscan workplan --mode before_merge --format json',
|
|
680
|
+
'projscan regression-plan --level focused --format json',
|
|
681
|
+
],
|
|
682
|
+
rationale: [
|
|
683
|
+
'Platform teams usually care about stable merge gates and broad blast radius.',
|
|
684
|
+
'This starter pins the base ref and keeps hotspot windows wide enough for infrastructure churn.',
|
|
685
|
+
],
|
|
686
|
+
},
|
|
687
|
+
security: {
|
|
688
|
+
label: 'Security team policy',
|
|
689
|
+
config: {
|
|
690
|
+
minScore: 90,
|
|
691
|
+
baseRef: 'main',
|
|
692
|
+
hotspots: { limit: 20, since: '180 days ago' },
|
|
693
|
+
ignore: ['dist', 'build', 'coverage'],
|
|
694
|
+
disableRules: [],
|
|
695
|
+
severityOverrides: {
|
|
696
|
+
'unused-dependency': 'warning',
|
|
697
|
+
},
|
|
698
|
+
taint: {
|
|
699
|
+
sources: ['req.body', 'request.json', 'process.env', 'cookies', 'headers'],
|
|
700
|
+
sinks: ['exec', 'eval', 'spawn', 'query', 'raw', 'innerHTML'],
|
|
701
|
+
},
|
|
702
|
+
},
|
|
703
|
+
nextCommands: [
|
|
704
|
+
'projscan preflight --mode before_edit --format json',
|
|
705
|
+
'projscan dataflow --format json',
|
|
706
|
+
'projscan audit --format sarif',
|
|
707
|
+
],
|
|
708
|
+
rationale: [
|
|
709
|
+
'Security teams need stricter score thresholds and project-specific taint names.',
|
|
710
|
+
'The starter keeps custom source/sink expansion explicit and reviewable in git.',
|
|
711
|
+
],
|
|
712
|
+
},
|
|
713
|
+
monorepo: {
|
|
714
|
+
label: 'Monorepo team policy',
|
|
715
|
+
config: {
|
|
716
|
+
minScore: 80,
|
|
717
|
+
baseRef: 'main',
|
|
718
|
+
hotspots: { limit: 20, since: '120 days ago' },
|
|
719
|
+
ignore: ['dist', 'build', 'coverage', '.turbo', '.nx', '.next'],
|
|
720
|
+
disableRules: [],
|
|
721
|
+
monorepo: {
|
|
722
|
+
importPolicy: [{ from: '*', allow: ['*'] }],
|
|
723
|
+
},
|
|
724
|
+
},
|
|
725
|
+
nextCommands: [
|
|
726
|
+
'projscan workspaces --format json',
|
|
727
|
+
'projscan start --mode before_edit --format json',
|
|
728
|
+
'projscan review --package <name> --format json',
|
|
729
|
+
],
|
|
730
|
+
rationale: [
|
|
731
|
+
'Monorepos need package ownership and import boundaries to be visible early.',
|
|
732
|
+
'The starter makes the policy block explicit so teams can tighten it package by package.',
|
|
733
|
+
],
|
|
734
|
+
},
|
|
735
|
+
};
|
|
736
|
+
function cloneConfig(config) {
|
|
737
|
+
return JSON.parse(JSON.stringify(config));
|
|
738
|
+
}
|
|
739
|
+
export function getGithubActionStarter() {
|
|
740
|
+
return {
|
|
741
|
+
schemaVersion: 1,
|
|
742
|
+
filename: '.github/workflows/projscan.yml',
|
|
743
|
+
workflow: GITHUB_ACTION_WORKFLOW,
|
|
744
|
+
nextCommands: [
|
|
745
|
+
'git add .github/workflows/projscan.yml',
|
|
746
|
+
'git commit -m "ci: add projscan PR workflow"',
|
|
747
|
+
],
|
|
748
|
+
rationale: [
|
|
749
|
+
'Runs projscan where review decisions already happen: the pull request.',
|
|
750
|
+
'Posts the same concise approval evidence that `projscan evidence-pack --pr-comment` prints locally.',
|
|
751
|
+
'Validates the generated PR comment before posting so the first review surface keeps verdict, trust calibration, routing, and commands intact.',
|
|
752
|
+
'Fails CI only when the machine-readable preflight verdict is block.',
|
|
753
|
+
'Keeps the workflow tool-only: no source upload, no API key, no embedded LLM.',
|
|
754
|
+
],
|
|
755
|
+
};
|
|
756
|
+
}
|
|
757
|
+
export async function writeGithubActionStarter(rootPath, options = {}) {
|
|
758
|
+
const starter = getGithubActionStarter();
|
|
759
|
+
const target = path.join(rootPath, starter.filename);
|
|
760
|
+
try {
|
|
761
|
+
await fs.access(target);
|
|
762
|
+
if (options.force !== true) {
|
|
763
|
+
return {
|
|
764
|
+
...starter,
|
|
765
|
+
target,
|
|
766
|
+
created: false,
|
|
767
|
+
reason: '.github/workflows/projscan.yml already exists; pass --force to overwrite it.',
|
|
768
|
+
};
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
catch {
|
|
772
|
+
// file does not exist
|
|
773
|
+
}
|
|
774
|
+
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
775
|
+
await fs.writeFile(target, starter.workflow, 'utf-8');
|
|
776
|
+
return {
|
|
777
|
+
...starter,
|
|
778
|
+
target,
|
|
779
|
+
created: true,
|
|
780
|
+
};
|
|
781
|
+
}
|
|
782
|
+
const GITHUB_ACTION_WORKFLOW = `name: projscan
|
|
783
|
+
|
|
784
|
+
on:
|
|
785
|
+
pull_request:
|
|
786
|
+
types: [opened, synchronize, reopened, ready_for_review]
|
|
787
|
+
|
|
788
|
+
permissions:
|
|
789
|
+
contents: read
|
|
790
|
+
pull-requests: write
|
|
791
|
+
|
|
792
|
+
jobs:
|
|
793
|
+
review:
|
|
794
|
+
name: projscan PR evidence
|
|
795
|
+
runs-on: ubuntu-latest
|
|
796
|
+
steps:
|
|
797
|
+
- name: Checkout
|
|
798
|
+
uses: actions/checkout@v5
|
|
799
|
+
with:
|
|
800
|
+
fetch-depth: 0
|
|
801
|
+
|
|
802
|
+
- name: Setup Node.js
|
|
803
|
+
uses: actions/setup-node@v5
|
|
804
|
+
with:
|
|
805
|
+
node-version: 22
|
|
806
|
+
|
|
807
|
+
- name: Orient workflow
|
|
808
|
+
run: npx -y projscan start --mode before_merge --format json --quiet > projscan-start.json
|
|
809
|
+
|
|
810
|
+
- name: Run preflight gate
|
|
811
|
+
run: npx -y projscan preflight --mode before_merge --format json --quiet > projscan-preflight.json
|
|
812
|
+
|
|
813
|
+
- name: Build PR comment
|
|
814
|
+
run: npx -y projscan evidence-pack --pr-comment --quiet > projscan-comment.md
|
|
815
|
+
|
|
816
|
+
- name: Validate PR comment
|
|
817
|
+
run: >
|
|
818
|
+
node -e "const fs = require('node:fs'); const body = fs.readFileSync('projscan-comment.md', 'utf8'); const required = ['## projscan approval evidence', '### Verdict', '### Trust Calibration', '### Baseline Trend', '### Top Risks', '### Team Routing', '### Verification', '### Next Commands']; const missing = required.filter((section) => !body.includes(section)); if (missing.length > 0 || body.length > 65536 || /undefined|\\[object Object\\]/.test(body)) { console.error('Invalid projscan PR comment: ' + missing.join(', ')); process.exit(1); }"
|
|
819
|
+
|
|
820
|
+
- name: Publish PR comment
|
|
821
|
+
if: github.event_name == 'pull_request'
|
|
822
|
+
env:
|
|
823
|
+
GH_TOKEN: \${{ github.token }}
|
|
824
|
+
run: |
|
|
825
|
+
if ! gh pr comment "\${{ github.event.pull_request.number }}" --body-file projscan-comment.md --edit-last; then
|
|
826
|
+
gh pr comment "\${{ github.event.pull_request.number }}" --body-file projscan-comment.md
|
|
827
|
+
fi
|
|
828
|
+
|
|
829
|
+
- name: Enforce preflight verdict
|
|
830
|
+
run: >
|
|
831
|
+
node -e "const fs = require('node:fs'); const r = JSON.parse(fs.readFileSync('projscan-preflight.json', 'utf8')); if (r.verdict === 'block') { console.error(r.summary || 'projscan preflight blocked this change'); process.exit(1); }"
|
|
832
|
+
`;
|
|
392
833
|
//# sourceMappingURL=adoption.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adoption.js","sourceRoot":"","sources":["../../src/core/adoption.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adoption.js","sourceRoot":"","sources":["../../src/core/adoption.ts"],"names":[],"mappings":"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"}
|
package/dist/core/ast.d.ts
CHANGED
|
@@ -40,6 +40,14 @@ export interface FunctionInfo {
|
|
|
40
40
|
* language adapter's per-function walker.
|
|
41
41
|
*/
|
|
42
42
|
callSites?: string[];
|
|
43
|
+
/**
|
|
44
|
+
* Qualified member call sites for JavaScript/TypeScript functions, such as
|
|
45
|
+
* `request.json` or `db.query`. Bare `callSites` remains the stable
|
|
46
|
+
* cross-language field; this keeps receiver-sensitive checks precise.
|
|
47
|
+
*/
|
|
48
|
+
memberCallSites?: string[];
|
|
49
|
+
/** Function parameter names when the adapter can recover them. */
|
|
50
|
+
parameters?: string[];
|
|
43
51
|
/**
|
|
44
52
|
* Per-function fan-out (1.2.0+): count of distinct callee names from
|
|
45
53
|
* `callSites`, restricted to names that are defined as functions
|
package/dist/core/ast.js
CHANGED
|
@@ -148,8 +148,18 @@ function collectFunctions(node, parentClassName, bindingName, out) {
|
|
|
148
148
|
const name = nameForFunctionNode(node, parentClassName, bindingName);
|
|
149
149
|
const line = node.loc?.start.line ?? 0;
|
|
150
150
|
const endLine = node.loc?.end.line ?? line;
|
|
151
|
-
const { cc, callSites, references } = analyzeBabelBody(node);
|
|
152
|
-
|
|
151
|
+
const { cc, callSites, memberCallSites, references } = analyzeBabelBody(node);
|
|
152
|
+
const parameters = functionParamNames(node);
|
|
153
|
+
out.push({
|
|
154
|
+
name,
|
|
155
|
+
line,
|
|
156
|
+
endLine,
|
|
157
|
+
cyclomaticComplexity: cc,
|
|
158
|
+
callSites,
|
|
159
|
+
memberCallSites,
|
|
160
|
+
parameters,
|
|
161
|
+
references,
|
|
162
|
+
});
|
|
153
163
|
// Recurse into nested functions so they emit their own entries. The body
|
|
154
164
|
// walker (`countCcInBody`) skips nested functions for CC, but we still need
|
|
155
165
|
// to descend the whole tree to find all functions.
|
|
@@ -251,9 +261,10 @@ function nameForFunctionNode(node, parentClassName, bindingName) {
|
|
|
251
261
|
function analyzeBabelBody(fnNode) {
|
|
252
262
|
const body = fnNode.body;
|
|
253
263
|
if (!body)
|
|
254
|
-
return { cc: 1, callSites: [], references: [] };
|
|
264
|
+
return { cc: 1, callSites: [], memberCallSites: [], references: [] };
|
|
255
265
|
let decisions = 0;
|
|
256
266
|
const calls = new Set();
|
|
267
|
+
const memberCalls = new Set();
|
|
257
268
|
const refs = new Set();
|
|
258
269
|
// MemberExpression nodes that ARE in callee position get their rightmost
|
|
259
270
|
// identifier added to callSites instead of references — track them here so
|
|
@@ -269,6 +280,9 @@ function analyzeBabelBody(fnNode) {
|
|
|
269
280
|
const name = babelCalleeName(callee);
|
|
270
281
|
if (name)
|
|
271
282
|
calls.add(name);
|
|
283
|
+
const memberName = babelQualifiedMemberName(callee);
|
|
284
|
+
if (memberName)
|
|
285
|
+
memberCalls.add(memberName);
|
|
272
286
|
if (callee && (callee.type === 'MemberExpression' || callee.type === 'OptionalMemberExpression')) {
|
|
273
287
|
calleeMembers.add(callee);
|
|
274
288
|
}
|
|
@@ -279,7 +293,35 @@ function analyzeBabelBody(fnNode) {
|
|
|
279
293
|
collectMemberReadIdents(n, refs);
|
|
280
294
|
}
|
|
281
295
|
});
|
|
282
|
-
return {
|
|
296
|
+
return {
|
|
297
|
+
cc: decisions + 1,
|
|
298
|
+
callSites: [...calls],
|
|
299
|
+
memberCallSites: [...memberCalls],
|
|
300
|
+
references: [...refs],
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
function functionParamNames(fnNode) {
|
|
304
|
+
const params = fnNode.params ?? [];
|
|
305
|
+
const out = new Set();
|
|
306
|
+
for (const param of params) {
|
|
307
|
+
const name = bindingIdentifierName(param);
|
|
308
|
+
if (name)
|
|
309
|
+
out.add(name);
|
|
310
|
+
}
|
|
311
|
+
return [...out];
|
|
312
|
+
}
|
|
313
|
+
function bindingIdentifierName(node) {
|
|
314
|
+
if (!node)
|
|
315
|
+
return null;
|
|
316
|
+
if (node.type === 'Identifier')
|
|
317
|
+
return node.name ?? null;
|
|
318
|
+
if (node.type === 'AssignmentPattern') {
|
|
319
|
+
return bindingIdentifierName(node.left);
|
|
320
|
+
}
|
|
321
|
+
if (node.type === 'RestElement') {
|
|
322
|
+
return bindingIdentifierName(node.argument);
|
|
323
|
+
}
|
|
324
|
+
return null;
|
|
283
325
|
}
|
|
284
326
|
/**
|
|
285
327
|
* Walk a member-expression chain (`a.b.c`, `req.body.x`, `process.env.SECRET`)
|
|
@@ -311,6 +353,29 @@ function babelCalleeName(node) {
|
|
|
311
353
|
}
|
|
312
354
|
return null;
|
|
313
355
|
}
|
|
356
|
+
function babelQualifiedMemberName(node) {
|
|
357
|
+
if (!node || (node.type !== 'MemberExpression' && node.type !== 'OptionalMemberExpression')) {
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
360
|
+
const member = node;
|
|
361
|
+
if (member.computed || !member.object || !member.property)
|
|
362
|
+
return null;
|
|
363
|
+
const objectName = babelMemberObjectName(member.object);
|
|
364
|
+
const propertyName = babelMemberPropertyName(member.property);
|
|
365
|
+
return objectName && propertyName ? `${objectName}.${propertyName}` : null;
|
|
366
|
+
}
|
|
367
|
+
function babelMemberObjectName(node) {
|
|
368
|
+
if (node.type === 'Identifier' || node.type === 'ThisExpression')
|
|
369
|
+
return babelCalleeName(node);
|
|
370
|
+
return babelQualifiedMemberName(node);
|
|
371
|
+
}
|
|
372
|
+
function babelMemberPropertyName(node) {
|
|
373
|
+
if (node.type === 'Identifier')
|
|
374
|
+
return node.name ?? null;
|
|
375
|
+
if (node.type === 'StringLiteral')
|
|
376
|
+
return node.value ?? null;
|
|
377
|
+
return null;
|
|
378
|
+
}
|
|
314
379
|
function walkChildren(node, visit) {
|
|
315
380
|
if (!node || typeof node !== 'object')
|
|
316
381
|
return;
|