projscan 3.4.0 → 3.4.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.
@@ -1,3 +1,4 @@
1
+ import fs from 'node:fs/promises';
1
2
  import path from 'node:path';
2
3
  import { loadWorkspace } from '../../core/workspace.js';
3
4
  import { scanRepository } from '../../core/repositoryScanner.js';
@@ -68,15 +69,45 @@ export const workspaceGraphTool = {
68
69
  }
69
70
  },
70
71
  };
72
+ const MAX_WORKSPACE_GRAPH_FILES = 5000;
73
+ const SKIPPED_WORKSPACE_DIRS = new Set(['.git', '.projscan-cache', 'node_modules', 'dist', 'build', 'coverage', '.next', '.nuxt']);
71
74
  async function buildPerRepoGraph(repoPath) {
72
75
  try {
76
+ const withinCap = await isWithinWorkspaceGraphFileCap(repoPath);
77
+ if (!withinCap)
78
+ return null;
73
79
  const scan = await scanRepository(repoPath);
80
+ if (scan.files.length > MAX_WORKSPACE_GRAPH_FILES)
81
+ return null;
74
82
  return await buildCodeGraph(repoPath, scan.files);
75
83
  }
76
84
  catch {
77
85
  return null;
78
86
  }
79
87
  }
88
+ async function isWithinWorkspaceGraphFileCap(rootPath) {
89
+ let count = 0;
90
+ const stack = [rootPath];
91
+ while (stack.length > 0) {
92
+ const dir = stack.pop();
93
+ if (!dir)
94
+ continue;
95
+ const entries = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
96
+ for (const entry of entries) {
97
+ if (entry.isDirectory()) {
98
+ if (!SKIPPED_WORKSPACE_DIRS.has(entry.name))
99
+ stack.push(path.join(dir, entry.name));
100
+ continue;
101
+ }
102
+ if (!entry.isFile())
103
+ continue;
104
+ count += 1;
105
+ if (count > MAX_WORKSPACE_GRAPH_FILES)
106
+ return false;
107
+ }
108
+ }
109
+ return true;
110
+ }
80
111
  async function listView(workspace, rootPath) {
81
112
  if (!workspace)
82
113
  return { repos: [] };
@@ -1 +1 @@
1
- {"version":3,"file":"workspaceGraph.js","sourceRoot":"","sources":["../../../src/mcp/tools/workspaceGraph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspaceGraph.js","sourceRoot":"","sources":["../../../src/mcp/tools/workspaceGraph.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.5",
4
- "serialNumber": "urn:uuid:eb092e16-162d-4509-a9ae-35ee08249b1f",
4
+ "serialNumber": "urn:uuid:1a06c2ae-75e9-447d-a9d2-6ac19421312e",
5
5
  "version": 1,
6
6
  "metadata": {
7
- "timestamp": "2026-06-03T23:14:48.681Z",
7
+ "timestamp": "2026-06-04T06:12:24.527Z",
8
8
  "tools": [
9
9
  {
10
10
  "vendor": "projscan",
11
11
  "name": "projscan-sbom-generator",
12
- "version": "3.4.0"
12
+ "version": "3.4.1"
13
13
  }
14
14
  ],
15
15
  "component": {
16
16
  "type": "application",
17
- "bom-ref": "pkg:npm/projscan@3.4.0",
17
+ "bom-ref": "pkg:npm/projscan@3.4.1",
18
18
  "name": "projscan",
19
- "version": "3.4.0",
20
- "purl": "pkg:npm/projscan@3.4.0"
19
+ "version": "3.4.1",
20
+ "purl": "pkg:npm/projscan@3.4.1"
21
21
  }
22
22
  },
23
23
  "components": [
@@ -1183,6 +1183,20 @@
1183
1183
  }
1184
1184
  ]
1185
1185
  },
1186
+ {
1187
+ "type": "library",
1188
+ "bom-ref": "pkg:npm/%40standard-schema/spec@1.1.0",
1189
+ "name": "@standard-schema/spec",
1190
+ "version": "1.1.0",
1191
+ "purl": "pkg:npm/%40standard-schema/spec@1.1.0",
1192
+ "licenses": [
1193
+ {
1194
+ "license": {
1195
+ "id": "MIT"
1196
+ }
1197
+ }
1198
+ ]
1199
+ },
1186
1200
  {
1187
1201
  "type": "library",
1188
1202
  "bom-ref": "pkg:npm/%40types/chai@5.2.3",
@@ -1409,10 +1423,10 @@
1409
1423
  },
1410
1424
  {
1411
1425
  "type": "library",
1412
- "bom-ref": "pkg:npm/%40vitest/expect@3.2.4",
1426
+ "bom-ref": "pkg:npm/%40vitest/expect@4.1.8",
1413
1427
  "name": "@vitest/expect",
1414
- "version": "3.2.4",
1415
- "purl": "pkg:npm/%40vitest/expect@3.2.4",
1428
+ "version": "4.1.8",
1429
+ "purl": "pkg:npm/%40vitest/expect@4.1.8",
1416
1430
  "licenses": [
1417
1431
  {
1418
1432
  "license": {
@@ -1423,10 +1437,10 @@
1423
1437
  },
1424
1438
  {
1425
1439
  "type": "library",
1426
- "bom-ref": "pkg:npm/%40vitest/mocker@3.2.4",
1440
+ "bom-ref": "pkg:npm/%40vitest/mocker@4.1.8",
1427
1441
  "name": "@vitest/mocker",
1428
- "version": "3.2.4",
1429
- "purl": "pkg:npm/%40vitest/mocker@3.2.4",
1442
+ "version": "4.1.8",
1443
+ "purl": "pkg:npm/%40vitest/mocker@4.1.8",
1430
1444
  "licenses": [
1431
1445
  {
1432
1446
  "license": {
@@ -1437,10 +1451,10 @@
1437
1451
  },
1438
1452
  {
1439
1453
  "type": "library",
1440
- "bom-ref": "pkg:npm/%40vitest/pretty-format@3.2.4",
1454
+ "bom-ref": "pkg:npm/%40vitest/pretty-format@4.1.8",
1441
1455
  "name": "@vitest/pretty-format",
1442
- "version": "3.2.4",
1443
- "purl": "pkg:npm/%40vitest/pretty-format@3.2.4",
1456
+ "version": "4.1.8",
1457
+ "purl": "pkg:npm/%40vitest/pretty-format@4.1.8",
1444
1458
  "licenses": [
1445
1459
  {
1446
1460
  "license": {
@@ -1451,10 +1465,10 @@
1451
1465
  },
1452
1466
  {
1453
1467
  "type": "library",
1454
- "bom-ref": "pkg:npm/%40vitest/runner@3.2.4",
1468
+ "bom-ref": "pkg:npm/%40vitest/runner@4.1.8",
1455
1469
  "name": "@vitest/runner",
1456
- "version": "3.2.4",
1457
- "purl": "pkg:npm/%40vitest/runner@3.2.4",
1470
+ "version": "4.1.8",
1471
+ "purl": "pkg:npm/%40vitest/runner@4.1.8",
1458
1472
  "licenses": [
1459
1473
  {
1460
1474
  "license": {
@@ -1465,10 +1479,10 @@
1465
1479
  },
1466
1480
  {
1467
1481
  "type": "library",
1468
- "bom-ref": "pkg:npm/%40vitest/snapshot@3.2.4",
1482
+ "bom-ref": "pkg:npm/%40vitest/snapshot@4.1.8",
1469
1483
  "name": "@vitest/snapshot",
1470
- "version": "3.2.4",
1471
- "purl": "pkg:npm/%40vitest/snapshot@3.2.4",
1484
+ "version": "4.1.8",
1485
+ "purl": "pkg:npm/%40vitest/snapshot@4.1.8",
1472
1486
  "licenses": [
1473
1487
  {
1474
1488
  "license": {
@@ -1479,10 +1493,10 @@
1479
1493
  },
1480
1494
  {
1481
1495
  "type": "library",
1482
- "bom-ref": "pkg:npm/%40vitest/spy@3.2.4",
1496
+ "bom-ref": "pkg:npm/%40vitest/spy@4.1.8",
1483
1497
  "name": "@vitest/spy",
1484
- "version": "3.2.4",
1485
- "purl": "pkg:npm/%40vitest/spy@3.2.4",
1498
+ "version": "4.1.8",
1499
+ "purl": "pkg:npm/%40vitest/spy@4.1.8",
1486
1500
  "licenses": [
1487
1501
  {
1488
1502
  "license": {
@@ -1493,10 +1507,10 @@
1493
1507
  },
1494
1508
  {
1495
1509
  "type": "library",
1496
- "bom-ref": "pkg:npm/%40vitest/utils@3.2.4",
1510
+ "bom-ref": "pkg:npm/%40vitest/utils@4.1.8",
1497
1511
  "name": "@vitest/utils",
1498
- "version": "3.2.4",
1499
- "purl": "pkg:npm/%40vitest/utils@3.2.4",
1512
+ "version": "4.1.8",
1513
+ "purl": "pkg:npm/%40vitest/utils@4.1.8",
1500
1514
  "licenses": [
1501
1515
  {
1502
1516
  "license": {
@@ -1773,24 +1787,10 @@
1773
1787
  },
1774
1788
  {
1775
1789
  "type": "library",
1776
- "bom-ref": "pkg:npm/cac@6.7.14",
1777
- "name": "cac",
1778
- "version": "6.7.14",
1779
- "purl": "pkg:npm/cac@6.7.14",
1780
- "licenses": [
1781
- {
1782
- "license": {
1783
- "id": "MIT"
1784
- }
1785
- }
1786
- ]
1787
- },
1788
- {
1789
- "type": "library",
1790
- "bom-ref": "pkg:npm/chai@5.3.3",
1790
+ "bom-ref": "pkg:npm/chai@6.2.2",
1791
1791
  "name": "chai",
1792
- "version": "5.3.3",
1793
- "purl": "pkg:npm/chai@5.3.3",
1792
+ "version": "6.2.2",
1793
+ "purl": "pkg:npm/chai@6.2.2",
1794
1794
  "licenses": [
1795
1795
  {
1796
1796
  "license": {
@@ -1813,20 +1813,6 @@
1813
1813
  }
1814
1814
  ]
1815
1815
  },
1816
- {
1817
- "type": "library",
1818
- "bom-ref": "pkg:npm/check-error@2.1.3",
1819
- "name": "check-error",
1820
- "version": "2.1.3",
1821
- "purl": "pkg:npm/check-error@2.1.3",
1822
- "licenses": [
1823
- {
1824
- "license": {
1825
- "id": "MIT"
1826
- }
1827
- }
1828
- ]
1829
- },
1830
1816
  {
1831
1817
  "type": "library",
1832
1818
  "bom-ref": "pkg:npm/chownr@1.1.4",
@@ -1939,6 +1925,20 @@
1939
1925
  }
1940
1926
  ]
1941
1927
  },
1928
+ {
1929
+ "type": "library",
1930
+ "bom-ref": "pkg:npm/convert-source-map@2.0.0",
1931
+ "name": "convert-source-map",
1932
+ "version": "2.0.0",
1933
+ "purl": "pkg:npm/convert-source-map@2.0.0",
1934
+ "licenses": [
1935
+ {
1936
+ "license": {
1937
+ "id": "MIT"
1938
+ }
1939
+ }
1940
+ ]
1941
+ },
1942
1942
  {
1943
1943
  "type": "library",
1944
1944
  "bom-ref": "pkg:npm/cross-spawn@7.0.6",
@@ -1981,20 +1981,6 @@
1981
1981
  }
1982
1982
  ]
1983
1983
  },
1984
- {
1985
- "type": "library",
1986
- "bom-ref": "pkg:npm/deep-eql@5.0.2",
1987
- "name": "deep-eql",
1988
- "version": "5.0.2",
1989
- "purl": "pkg:npm/deep-eql@5.0.2",
1990
- "licenses": [
1991
- {
1992
- "license": {
1993
- "id": "MIT"
1994
- }
1995
- }
1996
- ]
1997
- },
1998
1984
  {
1999
1985
  "type": "library",
2000
1986
  "bom-ref": "pkg:npm/deep-extend@0.6.0",
@@ -2067,10 +2053,10 @@
2067
2053
  },
2068
2054
  {
2069
2055
  "type": "library",
2070
- "bom-ref": "pkg:npm/es-module-lexer@1.7.0",
2056
+ "bom-ref": "pkg:npm/es-module-lexer@2.1.0",
2071
2057
  "name": "es-module-lexer",
2072
- "version": "1.7.0",
2073
- "purl": "pkg:npm/es-module-lexer@1.7.0",
2058
+ "version": "2.1.0",
2059
+ "purl": "pkg:npm/es-module-lexer@2.1.0",
2074
2060
  "licenses": [
2075
2061
  {
2076
2062
  "license": {
@@ -2765,20 +2751,6 @@
2765
2751
  }
2766
2752
  ]
2767
2753
  },
2768
- {
2769
- "type": "library",
2770
- "bom-ref": "pkg:npm/js-tokens@9.0.1",
2771
- "name": "js-tokens",
2772
- "version": "9.0.1",
2773
- "purl": "pkg:npm/js-tokens@9.0.1",
2774
- "licenses": [
2775
- {
2776
- "license": {
2777
- "id": "MIT"
2778
- }
2779
- }
2780
- ]
2781
- },
2782
2754
  {
2783
2755
  "type": "library",
2784
2756
  "bom-ref": "pkg:npm/json-buffer@3.0.1",
@@ -2905,20 +2877,6 @@
2905
2877
  }
2906
2878
  ]
2907
2879
  },
2908
- {
2909
- "type": "library",
2910
- "bom-ref": "pkg:npm/loupe@3.2.1",
2911
- "name": "loupe",
2912
- "version": "3.2.1",
2913
- "purl": "pkg:npm/loupe@3.2.1",
2914
- "licenses": [
2915
- {
2916
- "license": {
2917
- "id": "MIT"
2918
- }
2919
- }
2920
- ]
2921
- },
2922
2880
  {
2923
2881
  "type": "library",
2924
2882
  "bom-ref": "pkg:npm/magic-string@0.30.21",
@@ -3283,6 +3241,20 @@
3283
3241
  }
3284
3242
  ]
3285
3243
  },
3244
+ {
3245
+ "type": "library",
3246
+ "bom-ref": "pkg:npm/obug@2.1.1",
3247
+ "name": "obug",
3248
+ "version": "2.1.1",
3249
+ "purl": "pkg:npm/obug@2.1.1",
3250
+ "licenses": [
3251
+ {
3252
+ "license": {
3253
+ "id": "MIT"
3254
+ }
3255
+ }
3256
+ ]
3257
+ },
3286
3258
  {
3287
3259
  "type": "library",
3288
3260
  "bom-ref": "pkg:npm/once@1.4.0",
@@ -3465,20 +3437,6 @@
3465
3437
  }
3466
3438
  ]
3467
3439
  },
3468
- {
3469
- "type": "library",
3470
- "bom-ref": "pkg:npm/pathval@2.0.1",
3471
- "name": "pathval",
3472
- "version": "2.0.1",
3473
- "purl": "pkg:npm/pathval@2.0.1",
3474
- "licenses": [
3475
- {
3476
- "license": {
3477
- "id": "MIT"
3478
- }
3479
- }
3480
- ]
3481
- },
3482
3440
  {
3483
3441
  "type": "library",
3484
3442
  "bom-ref": "pkg:npm/picocolors@1.1.1",
@@ -3873,10 +3831,10 @@
3873
3831
  },
3874
3832
  {
3875
3833
  "type": "library",
3876
- "bom-ref": "pkg:npm/std-env@3.10.0",
3834
+ "bom-ref": "pkg:npm/std-env@4.1.0",
3877
3835
  "name": "std-env",
3878
- "version": "3.10.0",
3879
- "purl": "pkg:npm/std-env@3.10.0",
3836
+ "version": "4.1.0",
3837
+ "purl": "pkg:npm/std-env@4.1.0",
3880
3838
  "licenses": [
3881
3839
  {
3882
3840
  "license": {
@@ -3969,20 +3927,6 @@
3969
3927
  }
3970
3928
  ]
3971
3929
  },
3972
- {
3973
- "type": "library",
3974
- "bom-ref": "pkg:npm/strip-literal@3.1.0",
3975
- "name": "strip-literal",
3976
- "version": "3.1.0",
3977
- "purl": "pkg:npm/strip-literal@3.1.0",
3978
- "licenses": [
3979
- {
3980
- "license": {
3981
- "id": "MIT"
3982
- }
3983
- }
3984
- ]
3985
- },
3986
3930
  {
3987
3931
  "type": "library",
3988
3932
  "bom-ref": "pkg:npm/tar-fs@2.1.4",
@@ -4083,10 +4027,10 @@
4083
4027
  },
4084
4028
  {
4085
4029
  "type": "library",
4086
- "bom-ref": "pkg:npm/tinyexec@0.3.2",
4030
+ "bom-ref": "pkg:npm/tinyexec@1.2.4",
4087
4031
  "name": "tinyexec",
4088
- "version": "0.3.2",
4089
- "purl": "pkg:npm/tinyexec@0.3.2",
4032
+ "version": "1.2.4",
4033
+ "purl": "pkg:npm/tinyexec@1.2.4",
4090
4034
  "licenses": [
4091
4035
  {
4092
4036
  "license": {
@@ -4111,38 +4055,10 @@
4111
4055
  },
4112
4056
  {
4113
4057
  "type": "library",
4114
- "bom-ref": "pkg:npm/tinypool@1.1.1",
4115
- "name": "tinypool",
4116
- "version": "1.1.1",
4117
- "purl": "pkg:npm/tinypool@1.1.1",
4118
- "licenses": [
4119
- {
4120
- "license": {
4121
- "id": "MIT"
4122
- }
4123
- }
4124
- ]
4125
- },
4126
- {
4127
- "type": "library",
4128
- "bom-ref": "pkg:npm/tinyrainbow@2.0.0",
4058
+ "bom-ref": "pkg:npm/tinyrainbow@3.1.0",
4129
4059
  "name": "tinyrainbow",
4130
- "version": "2.0.0",
4131
- "purl": "pkg:npm/tinyrainbow@2.0.0",
4132
- "licenses": [
4133
- {
4134
- "license": {
4135
- "id": "MIT"
4136
- }
4137
- }
4138
- ]
4139
- },
4140
- {
4141
- "type": "library",
4142
- "bom-ref": "pkg:npm/tinyspy@4.0.4",
4143
- "name": "tinyspy",
4144
- "version": "4.0.4",
4145
- "purl": "pkg:npm/tinyspy@4.0.4",
4060
+ "version": "3.1.0",
4061
+ "purl": "pkg:npm/tinyrainbow@3.1.0",
4146
4062
  "licenses": [
4147
4063
  {
4148
4064
  "license": {
@@ -4459,20 +4375,6 @@
4459
4375
  }
4460
4376
  ]
4461
4377
  },
4462
- {
4463
- "type": "library",
4464
- "bom-ref": "pkg:npm/vite-node@3.2.4",
4465
- "name": "vite-node",
4466
- "version": "3.2.4",
4467
- "purl": "pkg:npm/vite-node@3.2.4",
4468
- "licenses": [
4469
- {
4470
- "license": {
4471
- "id": "MIT"
4472
- }
4473
- }
4474
- ]
4475
- },
4476
4378
  {
4477
4379
  "type": "library",
4478
4380
  "bom-ref": "pkg:npm/vite@6.4.2",
@@ -4489,10 +4391,10 @@
4489
4391
  },
4490
4392
  {
4491
4393
  "type": "library",
4492
- "bom-ref": "pkg:npm/vitest@3.2.4",
4394
+ "bom-ref": "pkg:npm/vitest@4.1.8",
4493
4395
  "name": "vitest",
4494
- "version": "3.2.4",
4495
- "purl": "pkg:npm/vitest@3.2.4",
4396
+ "version": "4.1.8",
4397
+ "purl": "pkg:npm/vitest@4.1.8",
4496
4398
  "licenses": [
4497
4399
  {
4498
4400
  "license": {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "projscan",
3
- "version": "3.4.0",
3
+ "version": "3.4.1",
4
4
  "mcpProtocolVersion": "2025-03-26",
5
- "generatedAt": "2026-06-03T23:14:54.100Z",
5
+ "generatedAt": "2026-06-04T06:12:30.232Z",
6
6
  "toolCount": 41,
7
7
  "tools": [
8
8
  {
@@ -792,7 +792,7 @@
792
792
  },
793
793
  "manifest_path": {
794
794
  "type": "string",
795
- "description": "\"validate\" only — repo-relative or absolute path to a *.projscan-plugin.json file."
795
+ "description": "\"validate\" only — repo-relative path under .projscan-plugins/ to a *.projscan-plugin.json file."
796
796
  }
797
797
  }
798
798
  }
@@ -864,7 +864,7 @@
864
864
  },
865
865
  "enable_plugins": {
866
866
  "type": "boolean",
867
- "description": "Enable local analyzer plugins for this run, equivalent to PROJSCAN_PLUGINS_PREVIEW=1."
867
+ "description": "Request local analyzer plugin evidence only when this MCP server process already has PROJSCAN_PLUGINS_PREVIEW=1. This argument never enables plugin execution by itself."
868
868
  },
869
869
  "max_tokens": {
870
870
  "type": "number",
package/dist/types.d.ts CHANGED
@@ -1175,8 +1175,15 @@ export interface PluginTestResult {
1175
1175
  commands: {
1176
1176
  validate: string;
1177
1177
  test: string;
1178
+ execute: string;
1178
1179
  enable: string;
1179
1180
  };
1181
+ execution: {
1182
+ requested: boolean;
1183
+ executed: boolean;
1184
+ mode: 'static' | 'execute';
1185
+ note: string;
1186
+ };
1180
1187
  context: {
1181
1188
  requested: boolean;
1182
1189
  capabilities: Array<'semanticGraph' | 'dataflow'>;
@@ -184,19 +184,18 @@ Use `plugin test` after editing a plugin:
184
184
  ```sh
185
185
  projscan plugin test .projscan-plugins/policy.projscan-plugin.json
186
186
  projscan plugin test .projscan-plugins/policy.projscan-plugin.json --format json
187
- projscan plugin test .projscan-plugins/policy.projscan-plugin.json --fixture ./test-fixture
187
+ PROJSCAN_PLUGINS_PREVIEW=1 projscan plugin test .projscan-plugins/policy.projscan-plugin.json --execute
188
+ PROJSCAN_PLUGINS_PREVIEW=1 projscan plugin test .projscan-plugins/policy.projscan-plugin.json --execute --fixture ./test-fixture
188
189
  ```
189
190
 
190
- For analyzer plugins, the test runner loads the module, scans the fixture root,
191
- runs `check(rootPath, files)`, and verifies every returned issue has the required
192
- shape. For reporter plugins, it renders sample `doctor`, `analyze`, and `ci`
193
- payloads for the commands listed in the manifest and verifies each render returns
194
- a string.
191
+ By default, `plugin test` validates the manifest, checks that the module file is readable, and reports guidance without importing or running plugin code. Add `--execute` only when you intentionally want to run local plugin code, and set `PROJSCAN_PLUGINS_PREVIEW=1` in the process environment.
192
+
193
+ In execute mode, analyzer plugins scan the fixture root, run `check(rootPath, files)`, and verify every returned issue has the required shape. Reporter plugins render sample `doctor`, `analyze`, and `ci` payloads for the commands listed in the manifest and verify each render returns a string.
195
194
 
196
195
  The JSON result also includes three guidance blocks:
197
196
 
198
197
  - `trust`: reminds callers that local plugins execute repository code, stay local-only, and require `PROJSCAN_PLUGINS_PREVIEW=1` before execution.
199
- - `commands`: gives copyable `validate`, `test`, and preview-enabled `enable` commands for the same manifest.
198
+ - `commands`: gives copyable `validate`, static `test`, preview-enabled `execute`, and `enable` commands for the same manifest.
200
199
  - `context`: reports whether the plugin requested graph/dataflow context and lists detected capabilities such as `semanticGraph` and `dataflow`.
201
200
 
202
201
  Graph-aware analyzers should keep context access lazy. Only call `context.getSemanticGraph()` or `context.getDataflow()` when the plugin needs that evidence for its issues.
@@ -6,10 +6,11 @@ the manifest and module into `.projscan-plugins/`, then run:
6
6
  ```bash
7
7
  projscan plugin validate .projscan-plugins/<name>.projscan-plugin.json
8
8
  projscan plugin test .projscan-plugins/<name>.projscan-plugin.json
9
+ PROJSCAN_PLUGINS_PREVIEW=1 projscan plugin test .projscan-plugins/<name>.projscan-plugin.json --execute
9
10
  PROJSCAN_PLUGINS_PREVIEW=1 projscan doctor
10
11
  ```
11
12
 
12
- Local plugins are code execution. Only enable plugins you trust. `projscan plugin test --format json` returns `trust`, `commands`, and `context` guidance so agents can validate a plugin, see the preview flag, and detect graph/dataflow context needs before execution.
13
+ Local plugins are code execution. Only enable plugins you trust. `projscan plugin test --format json` is static by default and returns `trust`, `commands`, `execution`, and `context` guidance so agents can validate a plugin, see the preview flag, and detect graph/dataflow context needs before execution.
13
14
 
14
15
  ## Analyzer Plugins
15
16
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "projscan",
3
3
  "mcpName": "io.github.abhiyoheswaran1/projscan",
4
- "version": "3.4.0",
4
+ "version": "3.4.1",
5
5
  "description": "Agent-first code intelligence. MCP server (2025-03-26) with AST parsing for JavaScript, TypeScript, Python, Go, Java, Ruby, Rust, PHP, C#, Kotlin, Swift, and C++; repo understanding maps (projscan_understand), stable v3 semantic graph (projscan_semantic_graph), dataflow risk engine with bridge-helper detection (projscan_dataflow), code graph, file + per-function AST cyclomatic complexity, per-function fan-in + fan-out, coupling + cycle detection, structural PR diff with HTML reporter, coverage report with HTML reporter, intent-grounded one-call PR review (projscan_review with optional `intent` arg, new taint flows, contract changes, and newDataflowRisks) and long-running PR-watch mode with structured per-bucket deltas (projscan_review_watch), first-60-seconds workflow orientation (projscan_start), agent workplans (projscan_workplan), bug-hunt queues (projscan_bug_hunt), product-line planning (projscan_release_train), evidence packs (projscan_evidence_pack), regression planning (projscan_regression_plan), agent briefs (projscan_agent_brief), quality scorecards (projscan_quality_scorecard), and preflight with supply-chain IOC evidence, rule-driven fix suggestions + mechanical apply layer with rollback (projscan_apply_fix, projscan_fix_suggest, projscan_explain_issue), source-to-sink taint analysis (projscan_taint) with truncation reporting, transitive blast-radius analysis with cross-repo mode (projscan_impact for files and symbols), cross-repo workspace registration + intelligence (projscan_workspace_graph), per-function semantic search chunks (sub-file embeddings), per-rule confidence + severity drift + cost-summary analytics with live streaming (projscan_cost_summary), stable local analyzer + reporter plugin API (projscan_plugin, CLI --reporter, opt-in via PROJSCAN_PLUGINS_PREVIEW=1), monorepo workspace awareness with cross-package import policy + per-package dependencies / outdated / audit, BM25 + optional semantic search, cursor pagination, progress notifications, context-budgeted output, and a stable-surface CI guard. CLI on the side.",
6
6
  "type": "module",
7
7
  "main": "./dist/index.js",
@@ -112,7 +112,7 @@
112
112
  "typescript": "^5.6.0",
113
113
  "typescript-eslint": "^8.57.0",
114
114
  "vite": "^6.4.2",
115
- "vitest": "^3.2.4"
115
+ "vitest": "^4.1.8"
116
116
  },
117
117
  "overrides": {
118
118
  "protobufjs": "^7.5.9",