projscan 1.11.0 → 2.1.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 (141) hide show
  1. package/README.md +40 -30
  2. package/dist/cli/_shared.d.ts +2 -1
  3. package/dist/cli/_shared.js +23 -18
  4. package/dist/cli/_shared.js.map +1 -1
  5. package/dist/cli/commands/analyze.js +7 -3
  6. package/dist/cli/commands/analyze.js.map +1 -1
  7. package/dist/cli/commands/applyFix.js +2 -2
  8. package/dist/cli/commands/applyFix.js.map +1 -1
  9. package/dist/cli/commands/audit.js +2 -2
  10. package/dist/cli/commands/audit.js.map +1 -1
  11. package/dist/cli/commands/badge.js +2 -1
  12. package/dist/cli/commands/badge.js.map +1 -1
  13. package/dist/cli/commands/ci.js +3 -3
  14. package/dist/cli/commands/ci.js.map +1 -1
  15. package/dist/cli/commands/coupling.js +2 -2
  16. package/dist/cli/commands/coupling.js.map +1 -1
  17. package/dist/cli/commands/coverage.js +2 -2
  18. package/dist/cli/commands/coverage.js.map +1 -1
  19. package/dist/cli/commands/dependencies.js +2 -2
  20. package/dist/cli/commands/dependencies.js.map +1 -1
  21. package/dist/cli/commands/diagram.js +2 -2
  22. package/dist/cli/commands/diagram.js.map +1 -1
  23. package/dist/cli/commands/diff.js +2 -2
  24. package/dist/cli/commands/diff.js.map +1 -1
  25. package/dist/cli/commands/doctor.js +3 -3
  26. package/dist/cli/commands/doctor.js.map +1 -1
  27. package/dist/cli/commands/explain.js +6 -7
  28. package/dist/cli/commands/explain.js.map +1 -1
  29. package/dist/cli/commands/explainIssue.js +2 -2
  30. package/dist/cli/commands/explainIssue.js.map +1 -1
  31. package/dist/cli/commands/file.js +2 -2
  32. package/dist/cli/commands/file.js.map +1 -1
  33. package/dist/cli/commands/fix.js +2 -1
  34. package/dist/cli/commands/fix.js.map +1 -1
  35. package/dist/cli/commands/fixSuggest.js +2 -2
  36. package/dist/cli/commands/fixSuggest.js.map +1 -1
  37. package/dist/cli/commands/help.js +2 -1
  38. package/dist/cli/commands/help.js.map +1 -1
  39. package/dist/cli/commands/hotspots.js +2 -2
  40. package/dist/cli/commands/hotspots.js.map +1 -1
  41. package/dist/cli/commands/impact.js +2 -2
  42. package/dist/cli/commands/impact.js.map +1 -1
  43. package/dist/cli/commands/init.js +2 -1
  44. package/dist/cli/commands/init.js.map +1 -1
  45. package/dist/cli/commands/installHook.js +2 -1
  46. package/dist/cli/commands/installHook.js.map +1 -1
  47. package/dist/cli/commands/mcp.js +2 -1
  48. package/dist/cli/commands/mcp.js.map +1 -1
  49. package/dist/cli/commands/memory.js +5 -4
  50. package/dist/cli/commands/memory.js.map +1 -1
  51. package/dist/cli/commands/outdated.js +2 -2
  52. package/dist/cli/commands/outdated.js.map +1 -1
  53. package/dist/cli/commands/plugin.d.ts +3 -3
  54. package/dist/cli/commands/plugin.js +91 -11
  55. package/dist/cli/commands/plugin.js.map +1 -1
  56. package/dist/cli/commands/prDiff.js +2 -2
  57. package/dist/cli/commands/prDiff.js.map +1 -1
  58. package/dist/cli/commands/preflight.d.ts +1 -0
  59. package/dist/cli/commands/preflight.js +80 -0
  60. package/dist/cli/commands/preflight.js.map +1 -0
  61. package/dist/cli/commands/review.js +2 -2
  62. package/dist/cli/commands/review.js.map +1 -1
  63. package/dist/cli/commands/search.js +2 -2
  64. package/dist/cli/commands/search.js.map +1 -1
  65. package/dist/cli/commands/session.js +5 -5
  66. package/dist/cli/commands/session.js.map +1 -1
  67. package/dist/cli/commands/structure.js +2 -2
  68. package/dist/cli/commands/structure.js.map +1 -1
  69. package/dist/cli/commands/taint.js +2 -2
  70. package/dist/cli/commands/taint.js.map +1 -1
  71. package/dist/cli/commands/upgrade.js +2 -2
  72. package/dist/cli/commands/upgrade.js.map +1 -1
  73. package/dist/cli/commands/watch.js +2 -1
  74. package/dist/cli/commands/watch.js.map +1 -1
  75. package/dist/cli/commands/workspace.js +4 -2
  76. package/dist/cli/commands/workspace.js.map +1 -1
  77. package/dist/cli/commands/workspaces.js +2 -2
  78. package/dist/cli/commands/workspaces.js.map +1 -1
  79. package/dist/cli/index.js +2 -0
  80. package/dist/cli/index.js.map +1 -1
  81. package/dist/core/fileInspector.d.ts +2 -5
  82. package/dist/core/fileInspector.js +28 -103
  83. package/dist/core/fileInspector.js.map +1 -1
  84. package/dist/core/languages/LanguageAdapter.d.ts +3 -1
  85. package/dist/core/languages/LanguageAdapter.js +13 -1
  86. package/dist/core/languages/LanguageAdapter.js.map +1 -1
  87. package/dist/core/pluginDx.d.ts +14 -0
  88. package/dist/core/pluginDx.js +298 -0
  89. package/dist/core/pluginDx.js.map +1 -0
  90. package/dist/core/plugins.d.ts +5 -6
  91. package/dist/core/plugins.js +99 -13
  92. package/dist/core/plugins.js.map +1 -1
  93. package/dist/core/preflight.d.ts +11 -0
  94. package/dist/core/preflight.js +416 -0
  95. package/dist/core/preflight.js.map +1 -0
  96. package/dist/core/review.js +101 -1
  97. package/dist/core/review.js.map +1 -1
  98. package/dist/core/sessionResources.d.ts +6 -0
  99. package/dist/core/sessionResources.js +216 -0
  100. package/dist/core/sessionResources.js.map +1 -0
  101. package/dist/index.d.ts +2 -0
  102. package/dist/index.js +1 -0
  103. package/dist/index.js.map +1 -1
  104. package/dist/mcp/resources.js +25 -0
  105. package/dist/mcp/resources.js.map +1 -1
  106. package/dist/mcp/tools/_shared.d.ts +1 -1
  107. package/dist/mcp/tools/_shared.js +3 -15
  108. package/dist/mcp/tools/_shared.js.map +1 -1
  109. package/dist/mcp/tools/explain.js +1 -3
  110. package/dist/mcp/tools/explain.js.map +1 -1
  111. package/dist/mcp/tools/plugin.d.ts +4 -7
  112. package/dist/mcp/tools/plugin.js +6 -9
  113. package/dist/mcp/tools/plugin.js.map +1 -1
  114. package/dist/mcp/tools/preflight.d.ts +2 -0
  115. package/dist/mcp/tools/preflight.js +51 -0
  116. package/dist/mcp/tools/preflight.js.map +1 -0
  117. package/dist/mcp/tools.js +2 -0
  118. package/dist/mcp/tools.js.map +1 -1
  119. package/dist/reporters/htmlReporter.d.ts +2 -1
  120. package/dist/reporters/htmlReporter.js +70 -0
  121. package/dist/reporters/htmlReporter.js.map +1 -1
  122. package/dist/reporters/jsonReporter.d.ts +1 -0
  123. package/dist/reporters/jsonReporter.js +25 -19
  124. package/dist/reporters/jsonReporter.js.map +1 -1
  125. package/dist/tool-manifest.json +35 -5
  126. package/dist/types.d.ts +137 -0
  127. package/dist/utils/banner.js +14 -4
  128. package/dist/utils/banner.js.map +1 -1
  129. package/dist/utils/fileWalker.js +4 -0
  130. package/dist/utils/fileWalker.js.map +1 -1
  131. package/dist/utils/formatSupport.d.ts +58 -0
  132. package/dist/utils/formatSupport.js +63 -0
  133. package/dist/utils/formatSupport.js.map +1 -0
  134. package/docs/2.0-MIGRATION.md +80 -0
  135. package/docs/PLUGIN-AUTHORING.md +239 -0
  136. package/docs/examples/plugins/policy.mjs +16 -0
  137. package/docs/examples/plugins/policy.projscan-plugin.json +8 -0
  138. package/docs/examples/plugins/team-radar.mjs +17 -0
  139. package/docs/examples/plugins/team-radar.projscan-plugin.json +8 -0
  140. package/docs/plugin.schema.json +70 -0
  141. package/package.json +10 -4
@@ -1 +1 @@
1
- {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/utils/banner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/utils/banner.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,12 @@ const DEFAULT_IGNORE = [
9
9
  '**/.next/**',
10
10
  '**/.nuxt/**',
11
11
  '**/.cache/**',
12
+ '**/.projscan-cache/**',
13
+ '**/.projscan-memory/**',
12
14
  '**/.turbo/**',
13
15
  '**/.output/**',
16
+ '**/.DS_Store',
17
+ '**/Thumbs.db',
14
18
  // Python noise. Without these, a repo with a committed virtualenv
15
19
  // or interpreter bytecode cache would scan thousands of third-party
16
20
  // files and tank the health score.
@@ -1 +1 @@
1
- {"version":3,"file":"fileWalker.js","sourceRoot":"","sources":["../../src/utils/fileWalker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3B,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,cAAc,GAAG;IACrB,oBAAoB;IACpB,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,cAAc;IACd,cAAc;IACd,eAAe;IACf,kEAAkE;IAClE,oEAAoE;IACpE,mCAAmC;IACnC,YAAY;IACZ,aAAa;IACb,WAAW;IACX,YAAY;IACZ,mBAAmB;IACnB,YAAY;IACZ,qBAAqB;IACrB,mBAAmB;IACnB,mBAAmB;IACnB,aAAa;IACb,kBAAkB;CACnB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAqB;IACrE,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,cAAc,CAAC;IAEjD,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,IAAI,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACjE,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/E,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE;QAChC,GAAG,EAAE,QAAQ;QACb,QAAQ,EAAE,KAAK;QACf,GAAG,EAAE,IAAI;QACT,MAAM;QACN,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,mBAAmB,EAAE,KAAK;KAC3B,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACpE,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAElE,OAAO;YACL,YAAY;YACZ,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC;YAClD,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE;YACnD,SAAS,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC;YAC3B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;SACtC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"fileWalker.js","sourceRoot":"","sources":["../../src/utils/fileWalker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3B,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,cAAc,GAAG;IACrB,oBAAoB;IACpB,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,cAAc;IACd,uBAAuB;IACvB,wBAAwB;IACxB,cAAc;IACd,eAAe;IACf,cAAc;IACd,cAAc;IACd,kEAAkE;IAClE,oEAAoE;IACpE,mCAAmC;IACnC,YAAY;IACZ,aAAa;IACb,WAAW;IACX,YAAY;IACZ,mBAAmB;IACnB,YAAY;IACZ,qBAAqB;IACrB,mBAAmB;IACnB,mBAAmB;IACnB,aAAa;IACb,kBAAkB;CACnB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAqB;IACrE,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,cAAc,CAAC;IAEjD,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,IAAI,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACjE,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/E,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE;QAChC,GAAG,EAAE,QAAQ;QACb,QAAQ,EAAE,KAAK;QACf,GAAG,EAAE,IAAI;QACT,MAAM;QACN,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,mBAAmB,EAAE,KAAK;KAC3B,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACpE,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAElE,OAAO;YACL,YAAY;YACZ,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC;YAClD,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE;YACnD,SAAS,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC;YAC3B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;SACtC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { ReportFormat } from '../types.js';
2
+ export declare const OUTPUT_FORMATS: readonly ["console", "json", "markdown", "sarif", "html"];
3
+ export declare const COMMAND_FORMAT_SUPPORT: {
4
+ readonly analyze: readonly ["console", "json", "markdown", "sarif", "html"];
5
+ readonly 'apply-fix': readonly ["console", "json"];
6
+ readonly audit: readonly ["console", "json", "markdown", "sarif"];
7
+ readonly badge: readonly ["console"];
8
+ readonly ci: readonly ["console", "json", "markdown", "sarif"];
9
+ readonly coupling: readonly ["console", "json", "markdown", "html"];
10
+ readonly coverage: readonly ["console", "json", "markdown", "html"];
11
+ readonly dependencies: readonly ["console", "json", "markdown"];
12
+ readonly diagram: readonly ["console", "json", "markdown"];
13
+ readonly diff: readonly ["console", "json", "markdown"];
14
+ readonly doctor: readonly ["console", "json", "markdown", "sarif", "html"];
15
+ readonly explain: readonly ["console", "json", "markdown"];
16
+ readonly 'explain-issue': readonly ["console", "json", "markdown"];
17
+ readonly file: readonly ["console", "json", "markdown"];
18
+ readonly fix: readonly ["console"];
19
+ readonly 'fix-suggest': readonly ["console", "json", "markdown"];
20
+ readonly help: readonly ["console"];
21
+ readonly hotspots: readonly ["console", "json", "markdown", "html"];
22
+ readonly impact: readonly ["console", "json", "markdown", "html"];
23
+ readonly init: readonly ["console"];
24
+ readonly 'install-hook': readonly ["console"];
25
+ readonly mcp: readonly ["console"];
26
+ readonly memory: readonly ["console", "json"];
27
+ readonly 'memory stable': readonly ["console", "json"];
28
+ readonly 'memory runs': readonly ["console", "json"];
29
+ readonly 'memory forget': readonly ["console"];
30
+ readonly outdated: readonly ["console", "json", "markdown", "sarif"];
31
+ readonly 'plugin list': readonly ["console", "json"];
32
+ readonly 'plugin validate': readonly ["console", "json"];
33
+ readonly 'plugin init': readonly ["console", "json"];
34
+ readonly 'plugin test': readonly ["console", "json"];
35
+ readonly preflight: readonly ["console", "json"];
36
+ readonly 'pr-diff': readonly ["console", "json", "markdown", "html"];
37
+ readonly review: readonly ["console", "json", "markdown", "html"];
38
+ readonly search: readonly ["console", "json", "markdown"];
39
+ readonly session: readonly ["console", "json"];
40
+ readonly 'session touched': readonly ["console", "json"];
41
+ readonly 'session events': readonly ["console", "json"];
42
+ readonly 'session reset': readonly ["console", "json"];
43
+ readonly structure: readonly ["console", "json", "markdown"];
44
+ readonly taint: readonly ["console", "json"];
45
+ readonly upgrade: readonly ["console", "json", "markdown"];
46
+ readonly watch: readonly ["console"];
47
+ readonly 'workspace list': readonly ["console", "json"];
48
+ readonly 'workspace add': readonly ["console"];
49
+ readonly 'workspace remove': readonly ["console"];
50
+ readonly workspaces: readonly ["console", "json", "markdown"];
51
+ };
52
+ export type CommandFormatName = keyof typeof COMMAND_FORMAT_SUPPORT;
53
+ export declare function formatList(formats?: readonly ReportFormat[]): string;
54
+ export declare function getCommandFormatSupport(commandName: string): readonly ReportFormat[] | undefined;
55
+ export declare function formatSupportRows(): Array<{
56
+ command: CommandFormatName;
57
+ formats: readonly ReportFormat[];
58
+ }>;
@@ -0,0 +1,63 @@
1
+ export const OUTPUT_FORMATS = ['console', 'json', 'markdown', 'sarif', 'html'];
2
+ export const COMMAND_FORMAT_SUPPORT = {
3
+ analyze: ['console', 'json', 'markdown', 'sarif', 'html'],
4
+ 'apply-fix': ['console', 'json'],
5
+ audit: ['console', 'json', 'markdown', 'sarif'],
6
+ badge: ['console'],
7
+ ci: ['console', 'json', 'markdown', 'sarif'],
8
+ coupling: ['console', 'json', 'markdown', 'html'],
9
+ coverage: ['console', 'json', 'markdown', 'html'],
10
+ dependencies: ['console', 'json', 'markdown'],
11
+ diagram: ['console', 'json', 'markdown'],
12
+ diff: ['console', 'json', 'markdown'],
13
+ doctor: ['console', 'json', 'markdown', 'sarif', 'html'],
14
+ explain: ['console', 'json', 'markdown'],
15
+ 'explain-issue': ['console', 'json', 'markdown'],
16
+ file: ['console', 'json', 'markdown'],
17
+ fix: ['console'],
18
+ 'fix-suggest': ['console', 'json', 'markdown'],
19
+ help: ['console'],
20
+ hotspots: ['console', 'json', 'markdown', 'html'],
21
+ impact: ['console', 'json', 'markdown', 'html'],
22
+ init: ['console'],
23
+ 'install-hook': ['console'],
24
+ mcp: ['console'],
25
+ memory: ['console', 'json'],
26
+ 'memory stable': ['console', 'json'],
27
+ 'memory runs': ['console', 'json'],
28
+ 'memory forget': ['console'],
29
+ outdated: ['console', 'json', 'markdown', 'sarif'],
30
+ 'plugin list': ['console', 'json'],
31
+ 'plugin validate': ['console', 'json'],
32
+ 'plugin init': ['console', 'json'],
33
+ 'plugin test': ['console', 'json'],
34
+ preflight: ['console', 'json'],
35
+ 'pr-diff': ['console', 'json', 'markdown', 'html'],
36
+ review: ['console', 'json', 'markdown', 'html'],
37
+ search: ['console', 'json', 'markdown'],
38
+ session: ['console', 'json'],
39
+ 'session touched': ['console', 'json'],
40
+ 'session events': ['console', 'json'],
41
+ 'session reset': ['console', 'json'],
42
+ structure: ['console', 'json', 'markdown'],
43
+ taint: ['console', 'json'],
44
+ upgrade: ['console', 'json', 'markdown'],
45
+ watch: ['console'],
46
+ 'workspace list': ['console', 'json'],
47
+ 'workspace add': ['console'],
48
+ 'workspace remove': ['console'],
49
+ workspaces: ['console', 'json', 'markdown'],
50
+ };
51
+ export function formatList(formats = OUTPUT_FORMATS) {
52
+ return formats.join(', ');
53
+ }
54
+ export function getCommandFormatSupport(commandName) {
55
+ return COMMAND_FORMAT_SUPPORT[commandName];
56
+ }
57
+ export function formatSupportRows() {
58
+ return Object.entries(COMMAND_FORMAT_SUPPORT).map(([command, formats]) => ({
59
+ command: command,
60
+ formats,
61
+ }));
62
+ }
63
+ //# sourceMappingURL=formatSupport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatSupport.js","sourceRoot":"","sources":["../../src/utils/formatSupport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ # Migrating to projscan 2.0
2
+
3
+ projscan 2.0 stabilizes the local plugin platform and uses the major version
4
+ boundary to clean up deferred 1.x surfaces. MCP tool names and input schemas
5
+ remain stable; the intentional changes are concentrated in CLI JSON metadata,
6
+ the npm TypeScript API, and plugin contract documentation.
7
+
8
+ ## Breaking Changes
9
+
10
+ ### CLI JSON has `schemaVersion: 2`
11
+
12
+ Every built-in CLI JSON reporter now includes `schemaVersion: 2` at the top
13
+ level. Existing command data keys remain present, so most consumers can migrate
14
+ by ignoring the new field or branching on it.
15
+
16
+ Before:
17
+
18
+ ```json
19
+ {
20
+ "health": {
21
+ "score": 100
22
+ }
23
+ }
24
+ ```
25
+
26
+ After:
27
+
28
+ ```json
29
+ {
30
+ "schemaVersion": 2,
31
+ "health": {
32
+ "score": 100
33
+ }
34
+ }
35
+ ```
36
+
37
+ ### Deprecated regex extractors are removed
38
+
39
+ The deprecated `extractImports` and `extractExports` helpers are removed from
40
+ the npm public API. They were JS/TS-only regex helpers and could not represent
41
+ the multi-language AST graph accurately.
42
+
43
+ Use one of these instead:
44
+
45
+ - `buildCodeGraph(rootPath, files)` for full graph construction.
46
+ - `importsOf(graph, file)` for imports from one file.
47
+ - `exportsOf(graph, file)` for exports from one file.
48
+ - `inspectFile(rootPath, file)` for a user-facing file explanation.
49
+
50
+ ### Language ids are extensible
51
+
52
+ Built-in language ids remain documented, but `LanguageId` is no longer a closed
53
+ union. Consumers that need only built-ins should use `BuiltinLanguageId`.
54
+ Consumers that accept plugin-provided languages should use `LanguageId`.
55
+
56
+ ## Plugin Contract
57
+
58
+ Plugin manifests use `schemaVersion: 1` in 2.0. Analyzer plugins export
59
+ `check(rootPath, files)`. Reporter plugins export `render(context)`.
60
+
61
+ The stable manifest fields are:
62
+
63
+ - `schemaVersion`
64
+ - `name`
65
+ - `kind`
66
+ - `module`
67
+ - analyzer-only `category`
68
+ - reporter-only `commands`
69
+ - optional `description`
70
+
71
+ Plugin execution stays local. projscan does not fetch remote plugin code.
72
+
73
+ ## Compatibility Notes
74
+
75
+ MCP tool names and input schemas remain stable. The major-version changes are
76
+ limited to documented CLI JSON metadata, npm TypeScript API cleanup, and plugin
77
+ contract stabilization.
78
+
79
+ During migration, prefer MCP tools or CLI JSON over console output. Console
80
+ format remains human-facing and may change visually between releases.
@@ -0,0 +1,239 @@
1
+ # Plugin Authoring
2
+
3
+ projscan 2.0 stabilizes the local analyzer and reporter plugin contract.
4
+ Plugin execution is opt-in via `PROJSCAN_PLUGINS_PREVIEW=1` so repositories
5
+ must explicitly trust local plugin code before it runs.
6
+
7
+ Plugins are local code. Enabling the opt-in flag means you trust the plugin code in
8
+ the repository, the same way you trust project scripts in `package.json`.
9
+ projscan does not fetch remote plugin code.
10
+
11
+ ## Layout
12
+
13
+ Plugin manifests live under `.projscan-plugins/`:
14
+
15
+ ```text
16
+ .projscan-plugins/
17
+ policy.projscan-plugin.json
18
+ policy.mjs
19
+ team-summary.projscan-plugin.json
20
+ team-summary.mjs
21
+ ```
22
+
23
+ ## Manifest
24
+
25
+ Analyzer plugins add issues to the normal projscan issue stream:
26
+
27
+ ```json
28
+ {
29
+ "schemaVersion": 1,
30
+ "name": "policy",
31
+ "kind": "analyzer",
32
+ "module": "./policy.mjs",
33
+ "category": "custom",
34
+ "description": "Project-specific policy checks"
35
+ }
36
+ ```
37
+
38
+ Reporter plugins render CLI output for selected commands:
39
+
40
+ ```json
41
+ {
42
+ "schemaVersion": 1,
43
+ "name": "team-summary",
44
+ "kind": "reporter",
45
+ "module": "./team-summary.mjs",
46
+ "commands": ["doctor", "analyze", "ci"],
47
+ "description": "Compact team health summary"
48
+ }
49
+ ```
50
+
51
+ Fields:
52
+
53
+ - `schemaVersion`: must be `1`.
54
+ - `name`: stable plugin identifier. Issue ids are prefixed with `plugin:<name>:`.
55
+ - `kind`: `analyzer` or `reporter`.
56
+ - `module`: relative path inside the plugin directory. Absolute paths and `..` are rejected.
57
+ - `category`: analyzer-only fallback issue category when a plugin issue omits one.
58
+ - `commands`: reporter-only list of CLI commands the reporter supports: `doctor`, `analyze`, `ci`.
59
+ - `description`: optional summary for humans and agents.
60
+
61
+ ## Schema
62
+
63
+ The machine-readable manifest schema lives at
64
+ [`docs/plugin.schema.json`](plugin.schema.json). The examples under
65
+ [`docs/examples/plugins/`](examples/plugins/) are tested in CI.
66
+
67
+ ## Scaffold
68
+
69
+ Use `plugin init` to create a minimal local plugin without writing the manifest
70
+ by hand:
71
+
72
+ ```sh
73
+ projscan plugin init --kind analyzer --name policy
74
+ projscan plugin init --kind reporter --name team-summary
75
+ projscan plugin init --kind analyzer --name policy --format json
76
+ ```
77
+
78
+ The command writes a manifest and `.mjs` module under `.projscan-plugins/`.
79
+ It refuses to overwrite existing files.
80
+
81
+ ## Analyzer Module
82
+
83
+ The module must export a `check(rootPath, files)` function, either as the
84
+ default export or a named export.
85
+
86
+ ```js
87
+ export default {
88
+ check: async (rootPath, files) => {
89
+ return files
90
+ .filter((file) => file.relativePath.endsWith('.ts'))
91
+ .filter((file) => file.relativePath.includes('legacy'))
92
+ .map((file) => ({
93
+ id: 'legacy-typescript-file',
94
+ title: 'Legacy TypeScript file',
95
+ description: `${file.relativePath} is under the legacy tree.`,
96
+ severity: 'warning',
97
+ category: 'custom',
98
+ fixAvailable: false,
99
+ locations: [{ file: file.relativePath, line: 1 }],
100
+ }));
101
+ },
102
+ };
103
+ ```
104
+
105
+ Required issue fields:
106
+
107
+ - `id`
108
+ - `title`
109
+ - `description`
110
+ - `severity`: `error`, `warning`, or `info`
111
+ - `category`
112
+ - `fixAvailable`
113
+
114
+ Malformed issues are dropped so one bad plugin cannot poison the issue stream.
115
+
116
+ ## Reporter Module
117
+
118
+ Reporter plugins are CLI-only. The module must export a
119
+ `render(context)` function, either as the default export or a named export.
120
+
121
+ ```js
122
+ export default {
123
+ render: async ({ command, payload }) => {
124
+ if (command === 'ci') {
125
+ return `CI ${payload.ci.pass ? 'passed' : 'failed'}: ${payload.ci.score}/100`;
126
+ }
127
+
128
+ const issues = payload.issues ?? [];
129
+ const score = payload.health?.score ?? 'analysis';
130
+ return `${command}: ${issues.length} issue(s), score ${score}`;
131
+ },
132
+ };
133
+ ```
134
+
135
+ `context` contains:
136
+
137
+ - `command`: `doctor`, `analyze`, or `ci`.
138
+ - `rootPath`: absolute project root.
139
+ - `manifest`: the validated reporter manifest.
140
+ - `payload`: the command payload.
141
+
142
+ Payloads:
143
+
144
+ - `doctor`: `{ health, issues }`
145
+ - `analyze`: the same `AnalysisReport` shape returned by `--format json`
146
+ - `ci`: `{ ci: { score, grade, pass, threshold, totalIssues, errors, warnings, info, issues } }`
147
+
148
+ Renderers must return a string. They should not write directly to stdout or
149
+ stderr; projscan writes the returned text after the renderer succeeds.
150
+
151
+ ## Custom Presentation
152
+
153
+ Reporter plugins are the customization boundary for team-specific presentation.
154
+ Use them for white-label reports, team-branded summaries, and output shaped for
155
+ local workflows. The built-in HTML reporter stays the default core renderer
156
+ instead of growing project-specific theming flags.
157
+
158
+ ## Validate
159
+
160
+ ```sh
161
+ projscan plugin validate .projscan-plugins/policy.projscan-plugin.json
162
+ projscan plugin validate .projscan-plugins/policy.projscan-plugin.json --format json
163
+ ```
164
+
165
+ Validation reports structured diagnostics with a stable `code`, the manifest
166
+ `field` when applicable, a `message`, and sometimes a `hint`.
167
+
168
+ ## Test
169
+
170
+ Use `plugin test` after editing a plugin:
171
+
172
+ ```sh
173
+ projscan plugin test .projscan-plugins/policy.projscan-plugin.json
174
+ projscan plugin test .projscan-plugins/policy.projscan-plugin.json --format json
175
+ projscan plugin test .projscan-plugins/policy.projscan-plugin.json --fixture ./test-fixture
176
+ ```
177
+
178
+ For analyzer plugins, the test runner loads the module, scans the fixture root,
179
+ runs `check(rootPath, files)`, and verifies every returned issue has the required
180
+ shape. For reporter plugins, it renders sample `doctor`, `analyze`, and `ci`
181
+ payloads for the commands listed in the manifest and verifies each render returns
182
+ a string.
183
+
184
+ ## List
185
+
186
+ ```sh
187
+ projscan plugin list
188
+ projscan plugin list --format json
189
+ ```
190
+
191
+ The list command discovers manifests whether or not execution is enabled. It
192
+ shows `enabled:false` until the opt-in flag is set.
193
+
194
+ ## Enable
195
+
196
+ ```sh
197
+ PROJSCAN_PLUGINS_PREVIEW=1 projscan doctor
198
+ PROJSCAN_PLUGINS_PREVIEW=1 projscan ci
199
+ PROJSCAN_PLUGINS_PREVIEW=1 projscan analyze
200
+ PROJSCAN_PLUGINS_PREVIEW=1 projscan doctor --reporter team-summary
201
+ PROJSCAN_PLUGINS_PREVIEW=1 projscan analyze --reporter team-summary
202
+ PROJSCAN_PLUGINS_PREVIEW=1 projscan ci --reporter team-summary
203
+ ```
204
+
205
+ When enabled, analyzer plugin issues are merged into the same issue stream as
206
+ built-in analyzer issues. That means they affect health scores and CI gates in
207
+ the same way.
208
+
209
+ Reporter plugins are selected with `--reporter <name>` on supported commands.
210
+ Do not combine `--reporter` with `--format json`, `markdown`, `sarif`, or
211
+ `html`; reporter output is its own stdout text.
212
+
213
+ ## MCP
214
+
215
+ The `projscan_plugin` MCP tool supports:
216
+
217
+ - `action: "list"`
218
+ - `action: "validate"` with `manifest_path`
219
+
220
+ Plugin execution for MCP `projscan_doctor` and `projscan_analyze` follows the
221
+ same `PROJSCAN_PLUGINS_PREVIEW` flag as the CLI.
222
+
223
+ Reporter rendering is CLI-only. MCP tools continue to return structured
224
+ payloads.
225
+
226
+ ## Failure Isolation
227
+
228
+ - One plugin failing to load does not stop other plugins.
229
+ - One plugin throwing during `check` does not stop built-in analyzers.
230
+ - Malformed issues are dropped.
231
+ - One reporter failing to load or render exits that CLI command with a
232
+ diagnostic instead of falling back to a misleading built-in report.
233
+ - Runtime plugin warnings go to stderr so JSON stdout stays parseable.
234
+
235
+ ## Compatibility
236
+
237
+ This is the stable 2.0 plugin contract for local analyzer and reporter plugins.
238
+ New optional manifest fields may be added in 2.x; existing required fields keep
239
+ their names and types.
@@ -0,0 +1,16 @@
1
+ export default {
2
+ check: async (_rootPath, files) => {
3
+ return files
4
+ .filter((file) => file.relativePath.endsWith('.ts'))
5
+ .filter((file) => file.relativePath.includes('legacy'))
6
+ .map((file) => ({
7
+ id: 'legacy-typescript-file',
8
+ title: 'Legacy TypeScript file',
9
+ description: `${file.relativePath} is under the legacy tree.`,
10
+ severity: 'warning',
11
+ category: 'custom',
12
+ fixAvailable: false,
13
+ locations: [{ file: file.relativePath, line: 1 }],
14
+ }));
15
+ },
16
+ };
@@ -0,0 +1,8 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "name": "policy",
4
+ "kind": "analyzer",
5
+ "module": "./policy.mjs",
6
+ "category": "custom",
7
+ "description": "Flags legacy TypeScript files for team review"
8
+ }
@@ -0,0 +1,17 @@
1
+ export default {
2
+ render: async ({ command, payload }) => {
3
+ if (command === 'ci') {
4
+ const ci = payload.ci;
5
+ return `team-radar ci ${ci.pass ? 'pass' : 'fail'} ${ci.score}/100 ${ci.grade} ${ci.totalIssues} issue(s)`;
6
+ }
7
+
8
+ if (command === 'doctor') {
9
+ const health = payload.health;
10
+ const issues = Array.isArray(payload.issues) ? payload.issues.length : 0;
11
+ return `team-radar doctor ${health.score}/100 ${health.grade} ${issues} issue(s)`;
12
+ }
13
+
14
+ const issues = Array.isArray(payload.issues) ? payload.issues.length : 0;
15
+ return `team-radar analyze ${issues} issue(s)`;
16
+ },
17
+ };
@@ -0,0 +1,8 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "name": "team-radar",
4
+ "kind": "reporter",
5
+ "module": "./team-radar.mjs",
6
+ "commands": ["doctor", "analyze", "ci"],
7
+ "description": "Compact team health summary"
8
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/abhiyoheswaran1/projscan/blob/main/docs/plugin.schema.json",
4
+ "title": "projscan plugin manifest",
5
+ "description": "Manifest schema for local projscan analyzer and reporter plugins.",
6
+ "oneOf": [
7
+ {
8
+ "title": "Analyzer plugin",
9
+ "type": "object",
10
+ "additionalProperties": false,
11
+ "required": ["schemaVersion", "name", "kind", "module", "category"],
12
+ "properties": {
13
+ "schemaVersion": {
14
+ "const": 1
15
+ },
16
+ "name": {
17
+ "type": "string",
18
+ "pattern": "^[a-z0-9._/-]{1,65}$"
19
+ },
20
+ "kind": {
21
+ "const": "analyzer"
22
+ },
23
+ "module": {
24
+ "type": "string",
25
+ "minLength": 1
26
+ },
27
+ "category": {
28
+ "type": "string",
29
+ "minLength": 1
30
+ },
31
+ "description": {
32
+ "type": "string"
33
+ }
34
+ }
35
+ },
36
+ {
37
+ "title": "Reporter plugin",
38
+ "type": "object",
39
+ "additionalProperties": false,
40
+ "required": ["schemaVersion", "name", "kind", "module", "commands"],
41
+ "properties": {
42
+ "schemaVersion": {
43
+ "const": 1
44
+ },
45
+ "name": {
46
+ "type": "string",
47
+ "pattern": "^[a-z0-9._/-]{1,65}$"
48
+ },
49
+ "kind": {
50
+ "const": "reporter"
51
+ },
52
+ "module": {
53
+ "type": "string",
54
+ "minLength": 1
55
+ },
56
+ "commands": {
57
+ "type": "array",
58
+ "minItems": 1,
59
+ "items": {
60
+ "enum": ["doctor", "analyze", "ci"]
61
+ },
62
+ "uniqueItems": true
63
+ },
64
+ "description": {
65
+ "type": "string"
66
+ }
67
+ }
68
+ }
69
+ ]
70
+ }