codedev-mcp 3.2.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 (229) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/LICENSE +21 -0
  3. package/README.md +760 -0
  4. package/dist/analyzers/api-contract.d.ts +46 -0
  5. package/dist/analyzers/api-contract.d.ts.map +1 -0
  6. package/dist/analyzers/api-contract.js +319 -0
  7. package/dist/analyzers/api-contract.js.map +1 -0
  8. package/dist/analyzers/architecture.d.ts +37 -0
  9. package/dist/analyzers/architecture.d.ts.map +1 -0
  10. package/dist/analyzers/architecture.js +149 -0
  11. package/dist/analyzers/architecture.js.map +1 -0
  12. package/dist/analyzers/branch-compare.d.ts +46 -0
  13. package/dist/analyzers/branch-compare.d.ts.map +1 -0
  14. package/dist/analyzers/branch-compare.js +128 -0
  15. package/dist/analyzers/branch-compare.js.map +1 -0
  16. package/dist/analyzers/cicd.d.ts +42 -0
  17. package/dist/analyzers/cicd.d.ts.map +1 -0
  18. package/dist/analyzers/cicd.js +237 -0
  19. package/dist/analyzers/cicd.js.map +1 -0
  20. package/dist/analyzers/codebase.d.ts +64 -0
  21. package/dist/analyzers/codebase.d.ts.map +1 -0
  22. package/dist/analyzers/codebase.js +354 -0
  23. package/dist/analyzers/codebase.js.map +1 -0
  24. package/dist/analyzers/complexity-heatmap.d.ts +50 -0
  25. package/dist/analyzers/complexity-heatmap.d.ts.map +1 -0
  26. package/dist/analyzers/complexity-heatmap.js +156 -0
  27. package/dist/analyzers/complexity-heatmap.js.map +1 -0
  28. package/dist/analyzers/context-pack.d.ts +43 -0
  29. package/dist/analyzers/context-pack.d.ts.map +1 -0
  30. package/dist/analyzers/context-pack.js +232 -0
  31. package/dist/analyzers/context-pack.js.map +1 -0
  32. package/dist/analyzers/coverage.d.ts +70 -0
  33. package/dist/analyzers/coverage.d.ts.map +1 -0
  34. package/dist/analyzers/coverage.js +313 -0
  35. package/dist/analyzers/coverage.js.map +1 -0
  36. package/dist/analyzers/db-schema.d.ts +55 -0
  37. package/dist/analyzers/db-schema.d.ts.map +1 -0
  38. package/dist/analyzers/db-schema.js +237 -0
  39. package/dist/analyzers/db-schema.js.map +1 -0
  40. package/dist/analyzers/dead-code.d.ts +34 -0
  41. package/dist/analyzers/dead-code.d.ts.map +1 -0
  42. package/dist/analyzers/dead-code.js +131 -0
  43. package/dist/analyzers/dead-code.js.map +1 -0
  44. package/dist/analyzers/dep-vuln.d.ts +36 -0
  45. package/dist/analyzers/dep-vuln.d.ts.map +1 -0
  46. package/dist/analyzers/dep-vuln.js +342 -0
  47. package/dist/analyzers/dep-vuln.js.map +1 -0
  48. package/dist/analyzers/docs.d.ts +47 -0
  49. package/dist/analyzers/docs.d.ts.map +1 -0
  50. package/dist/analyzers/docs.js +473 -0
  51. package/dist/analyzers/docs.js.map +1 -0
  52. package/dist/analyzers/git.d.ts +115 -0
  53. package/dist/analyzers/git.d.ts.map +1 -0
  54. package/dist/analyzers/git.js +214 -0
  55. package/dist/analyzers/git.js.map +1 -0
  56. package/dist/analyzers/iac.d.ts +39 -0
  57. package/dist/analyzers/iac.d.ts.map +1 -0
  58. package/dist/analyzers/iac.js +233 -0
  59. package/dist/analyzers/iac.js.map +1 -0
  60. package/dist/analyzers/impact.d.ts +51 -0
  61. package/dist/analyzers/impact.d.ts.map +1 -0
  62. package/dist/analyzers/impact.js +235 -0
  63. package/dist/analyzers/impact.js.map +1 -0
  64. package/dist/analyzers/monorepo.d.ts +36 -0
  65. package/dist/analyzers/monorepo.d.ts.map +1 -0
  66. package/dist/analyzers/monorepo.js +233 -0
  67. package/dist/analyzers/monorepo.js.map +1 -0
  68. package/dist/analyzers/notebook.d.ts +53 -0
  69. package/dist/analyzers/notebook.d.ts.map +1 -0
  70. package/dist/analyzers/notebook.js +149 -0
  71. package/dist/analyzers/notebook.js.map +1 -0
  72. package/dist/analyzers/perf-profile.d.ts +39 -0
  73. package/dist/analyzers/perf-profile.d.ts.map +1 -0
  74. package/dist/analyzers/perf-profile.js +222 -0
  75. package/dist/analyzers/perf-profile.js.map +1 -0
  76. package/dist/analyzers/scaffold.d.ts +46 -0
  77. package/dist/analyzers/scaffold.d.ts.map +1 -0
  78. package/dist/analyzers/scaffold.js +313 -0
  79. package/dist/analyzers/scaffold.js.map +1 -0
  80. package/dist/analyzers/security.d.ts +42 -0
  81. package/dist/analyzers/security.d.ts.map +1 -0
  82. package/dist/analyzers/security.js +281 -0
  83. package/dist/analyzers/security.js.map +1 -0
  84. package/dist/analyzers/symbols.d.ts +49 -0
  85. package/dist/analyzers/symbols.d.ts.map +1 -0
  86. package/dist/analyzers/symbols.js +212 -0
  87. package/dist/analyzers/symbols.js.map +1 -0
  88. package/dist/analyzers/tree-sitter.d.ts +71 -0
  89. package/dist/analyzers/tree-sitter.d.ts.map +1 -0
  90. package/dist/analyzers/tree-sitter.js +333 -0
  91. package/dist/analyzers/tree-sitter.js.map +1 -0
  92. package/dist/analyzers/type-flow.d.ts +39 -0
  93. package/dist/analyzers/type-flow.d.ts.map +1 -0
  94. package/dist/analyzers/type-flow.js +75 -0
  95. package/dist/analyzers/type-flow.js.map +1 -0
  96. package/dist/cache/memory-cache.d.ts +130 -0
  97. package/dist/cache/memory-cache.d.ts.map +1 -0
  98. package/dist/cache/memory-cache.js +273 -0
  99. package/dist/cache/memory-cache.js.map +1 -0
  100. package/dist/config.d.ts +32 -0
  101. package/dist/config.d.ts.map +1 -0
  102. package/dist/config.js +57 -0
  103. package/dist/config.js.map +1 -0
  104. package/dist/constants/instructions.d.ts +2 -0
  105. package/dist/constants/instructions.d.ts.map +1 -0
  106. package/dist/constants/instructions.js +82 -0
  107. package/dist/constants/instructions.js.map +1 -0
  108. package/dist/db/connection.d.ts +12 -0
  109. package/dist/db/connection.d.ts.map +1 -0
  110. package/dist/db/connection.js +34 -0
  111. package/dist/db/connection.js.map +1 -0
  112. package/dist/db/json-store.d.ts +111 -0
  113. package/dist/db/json-store.d.ts.map +1 -0
  114. package/dist/db/json-store.js +201 -0
  115. package/dist/db/json-store.js.map +1 -0
  116. package/dist/db/sqlite-store.d.ts +153 -0
  117. package/dist/db/sqlite-store.d.ts.map +1 -0
  118. package/dist/db/sqlite-store.js +388 -0
  119. package/dist/db/sqlite-store.js.map +1 -0
  120. package/dist/index.d.ts +17 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +116 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/resources/health.d.ts +35 -0
  125. package/dist/resources/health.d.ts.map +1 -0
  126. package/dist/resources/health.js +81 -0
  127. package/dist/resources/health.js.map +1 -0
  128. package/dist/schemas/output-schemas.d.ts +517 -0
  129. package/dist/schemas/output-schemas.d.ts.map +1 -0
  130. package/dist/schemas/output-schemas.js +296 -0
  131. package/dist/schemas/output-schemas.js.map +1 -0
  132. package/dist/search/fast-search.d.ts +90 -0
  133. package/dist/search/fast-search.d.ts.map +1 -0
  134. package/dist/search/fast-search.js +387 -0
  135. package/dist/search/fast-search.js.map +1 -0
  136. package/dist/search/semantic.d.ts +26 -0
  137. package/dist/search/semantic.d.ts.map +1 -0
  138. package/dist/search/semantic.js +458 -0
  139. package/dist/search/semantic.js.map +1 -0
  140. package/dist/tools/analysis.d.ts +7 -0
  141. package/dist/tools/analysis.d.ts.map +1 -0
  142. package/dist/tools/analysis.js +491 -0
  143. package/dist/tools/analysis.js.map +1 -0
  144. package/dist/tools/architecture.d.ts +7 -0
  145. package/dist/tools/architecture.d.ts.map +1 -0
  146. package/dist/tools/architecture.js +176 -0
  147. package/dist/tools/architecture.js.map +1 -0
  148. package/dist/tools/devops.d.ts +7 -0
  149. package/dist/tools/devops.d.ts.map +1 -0
  150. package/dist/tools/devops.js +179 -0
  151. package/dist/tools/devops.js.map +1 -0
  152. package/dist/tools/docs.d.ts +7 -0
  153. package/dist/tools/docs.d.ts.map +1 -0
  154. package/dist/tools/docs.js +102 -0
  155. package/dist/tools/docs.js.map +1 -0
  156. package/dist/tools/git.d.ts +7 -0
  157. package/dist/tools/git.d.ts.map +1 -0
  158. package/dist/tools/git.js +475 -0
  159. package/dist/tools/git.js.map +1 -0
  160. package/dist/tools/nav.d.ts +7 -0
  161. package/dist/tools/nav.d.ts.map +1 -0
  162. package/dist/tools/nav.js +275 -0
  163. package/dist/tools/nav.js.map +1 -0
  164. package/dist/tools/notebook.d.ts +7 -0
  165. package/dist/tools/notebook.d.ts.map +1 -0
  166. package/dist/tools/notebook.js +102 -0
  167. package/dist/tools/notebook.js.map +1 -0
  168. package/dist/tools/performance.d.ts +7 -0
  169. package/dist/tools/performance.d.ts.map +1 -0
  170. package/dist/tools/performance.js +59 -0
  171. package/dist/tools/performance.js.map +1 -0
  172. package/dist/tools/quality.d.ts +7 -0
  173. package/dist/tools/quality.d.ts.map +1 -0
  174. package/dist/tools/quality.js +279 -0
  175. package/dist/tools/quality.js.map +1 -0
  176. package/dist/tools/scaffold.d.ts +7 -0
  177. package/dist/tools/scaffold.d.ts.map +1 -0
  178. package/dist/tools/scaffold.js +80 -0
  179. package/dist/tools/scaffold.js.map +1 -0
  180. package/dist/tools/search.d.ts +7 -0
  181. package/dist/tools/search.d.ts.map +1 -0
  182. package/dist/tools/search.js +308 -0
  183. package/dist/tools/search.js.map +1 -0
  184. package/dist/tools/security.d.ts +7 -0
  185. package/dist/tools/security.d.ts.map +1 -0
  186. package/dist/tools/security.js +138 -0
  187. package/dist/tools/security.js.map +1 -0
  188. package/dist/utils/analytics.d.ts +69 -0
  189. package/dist/utils/analytics.d.ts.map +1 -0
  190. package/dist/utils/analytics.js +144 -0
  191. package/dist/utils/analytics.js.map +1 -0
  192. package/dist/utils/concurrency.d.ts +43 -0
  193. package/dist/utils/concurrency.d.ts.map +1 -0
  194. package/dist/utils/concurrency.js +78 -0
  195. package/dist/utils/concurrency.js.map +1 -0
  196. package/dist/utils/fallback.d.ts +52 -0
  197. package/dist/utils/fallback.d.ts.map +1 -0
  198. package/dist/utils/fallback.js +137 -0
  199. package/dist/utils/fallback.js.map +1 -0
  200. package/dist/utils/git-hooks.d.ts +24 -0
  201. package/dist/utils/git-hooks.d.ts.map +1 -0
  202. package/dist/utils/git-hooks.js +108 -0
  203. package/dist/utils/git-hooks.js.map +1 -0
  204. package/dist/utils/languages.d.ts +72 -0
  205. package/dist/utils/languages.d.ts.map +1 -0
  206. package/dist/utils/languages.js +463 -0
  207. package/dist/utils/languages.js.map +1 -0
  208. package/dist/utils/logger.d.ts +13 -0
  209. package/dist/utils/logger.d.ts.map +1 -0
  210. package/dist/utils/logger.js +34 -0
  211. package/dist/utils/logger.js.map +1 -0
  212. package/dist/utils/plugins.d.ts +105 -0
  213. package/dist/utils/plugins.d.ts.map +1 -0
  214. package/dist/utils/plugins.js +325 -0
  215. package/dist/utils/plugins.js.map +1 -0
  216. package/dist/utils/security.d.ts +17 -0
  217. package/dist/utils/security.d.ts.map +1 -0
  218. package/dist/utils/security.js +48 -0
  219. package/dist/utils/security.js.map +1 -0
  220. package/dist/utils/streaming.d.ts +56 -0
  221. package/dist/utils/streaming.d.ts.map +1 -0
  222. package/dist/utils/streaming.js +95 -0
  223. package/dist/utils/streaming.js.map +1 -0
  224. package/dist/version.d.ts +3 -0
  225. package/dist/version.d.ts.map +1 -0
  226. package/dist/version.js +3 -0
  227. package/dist/version.js.map +1 -0
  228. package/mcp.json +100 -0
  229. package/package.json +89 -0
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Jupyter Notebook (.ipynb) parser.
3
+ * Extracts code cells, markdown cells, outputs, and dependencies.
4
+ */
5
+ import { readFile } from 'node:fs/promises';
6
+ import { glob } from 'glob';
7
+ /**
8
+ * Parse a Jupyter notebook file.
9
+ * @param filePath - Path to the .ipynb file
10
+ * @returns Parsed notebook information including cells, imports, and execution state
11
+ */
12
+ export async function parseNotebook(filePath) {
13
+ const content = await readFile(filePath, 'utf-8');
14
+ const notebook = JSON.parse(content);
15
+ const kernelSpec = notebook.metadata?.kernelspec || {};
16
+ const kernelLanguage = kernelSpec.language || notebook.metadata?.language_info?.name || 'unknown';
17
+ const kernelDisplayName = kernelSpec.display_name || kernelLanguage;
18
+ const cells = [];
19
+ const imports = [];
20
+ const functions = [];
21
+ let lastExecCount = 0;
22
+ let executedInOrder = true;
23
+ let hasUnexecutedCells = false;
24
+ for (let i = 0; i < (notebook.cells || []).length; i++) {
25
+ const cell = notebook.cells[i];
26
+ const cellType = cell.cell_type;
27
+ const source = Array.isArray(cell.source) ? cell.source.join('') : cell.source || '';
28
+ const outputs = [];
29
+ let hasError = false;
30
+ if (cell.outputs) {
31
+ for (const output of cell.outputs) {
32
+ if (output.output_type === 'error') {
33
+ hasError = true;
34
+ outputs.push(`Error: ${output.ename}: ${output.evalue}`);
35
+ }
36
+ else if (output.output_type === 'stream') {
37
+ const text = Array.isArray(output.text) ? output.text.join('') : output.text || '';
38
+ if (text.trim())
39
+ outputs.push(text.trim().slice(0, 200));
40
+ }
41
+ else if (output.output_type === 'execute_result' || output.output_type === 'display_data') {
42
+ const textData = output.data?.['text/plain'];
43
+ if (textData) {
44
+ const text = Array.isArray(textData) ? textData.join('') : textData;
45
+ outputs.push(text.slice(0, 200));
46
+ }
47
+ }
48
+ }
49
+ }
50
+ const execCount = cell.execution_count;
51
+ if (cellType === 'code') {
52
+ if (execCount === null || execCount === undefined) {
53
+ hasUnexecutedCells = true;
54
+ }
55
+ else if (execCount <= lastExecCount) {
56
+ executedInOrder = false;
57
+ }
58
+ lastExecCount = execCount || lastExecCount;
59
+ // Extract imports
60
+ const importLines = source
61
+ .split('\n')
62
+ .filter((l) => /^(?:import |from |require\(|const .+ = require)/.test(l.trim()));
63
+ imports.push(...importLines.map((l) => l.trim()));
64
+ // Extract function definitions
65
+ const funcLines = source
66
+ .split('\n')
67
+ .filter((l) => /^(?:def |async def |function |class )/.test(l.trim()));
68
+ functions.push(...funcLines.map((l) => l.trim()));
69
+ }
70
+ cells.push({
71
+ cellType,
72
+ source,
73
+ index: i,
74
+ executionCount: execCount,
75
+ outputs: outputs.length > 0 ? outputs : undefined,
76
+ hasError,
77
+ });
78
+ }
79
+ return {
80
+ file: filePath,
81
+ kernelLanguage,
82
+ kernelDisplayName,
83
+ totalCells: cells.length,
84
+ codeCells: cells.filter((c) => c.cellType === 'code').length,
85
+ markdownCells: cells.filter((c) => c.cellType === 'markdown').length,
86
+ cells,
87
+ imports: [...new Set(imports)],
88
+ functions,
89
+ executedInOrder,
90
+ hasUnexecutedCells,
91
+ };
92
+ }
93
+ /**
94
+ * Find all notebooks in a directory.
95
+ * @param cwd - The working directory to search
96
+ * @returns Array of notebook file paths
97
+ */
98
+ export async function findNotebooks(cwd) {
99
+ return glob('**/*.ipynb', {
100
+ cwd,
101
+ ignore: ['node_modules/**', '.ipynb_checkpoints/**', 'dist/**', 'build/**'],
102
+ });
103
+ }
104
+ /**
105
+ * Extract just the code from a notebook (for analysis).
106
+ * @param notebook - Parsed notebook information
107
+ * @returns Concatenated code from all code cells
108
+ */
109
+ export function extractCode(notebook) {
110
+ return notebook.cells
111
+ .filter((c) => c.cellType === 'code')
112
+ .map((c) => `# Cell ${c.index} [${c.executionCount || '?'}]\n${c.source}`)
113
+ .join('\n\n');
114
+ }
115
+ /**
116
+ * Get notebook health summary.
117
+ * @param notebook - Parsed notebook information
118
+ * @returns Health issues and overall score
119
+ */
120
+ export function notebookHealth(notebook) {
121
+ const issues = [];
122
+ let score = 100;
123
+ if (notebook.hasUnexecutedCells) {
124
+ issues.push('Has unexecuted code cells');
125
+ score -= 10;
126
+ }
127
+ if (!notebook.executedInOrder) {
128
+ issues.push('Cells not executed in order (may have hidden state)');
129
+ score -= 20;
130
+ }
131
+ if (notebook.cells.some((c) => c.hasError)) {
132
+ issues.push('Contains cells with execution errors');
133
+ score -= 15;
134
+ }
135
+ if (notebook.markdownCells === 0) {
136
+ issues.push('No markdown documentation cells');
137
+ score -= 10;
138
+ }
139
+ if (notebook.codeCells > 30) {
140
+ issues.push(`Large notebook (${notebook.codeCells} code cells) — consider splitting`);
141
+ score -= 10;
142
+ }
143
+ if (notebook.imports.length === 0 && notebook.codeCells > 3) {
144
+ issues.push('No imports found — may be missing dependencies');
145
+ score -= 5;
146
+ }
147
+ return { issues, score: Math.max(0, score) };
148
+ }
149
+ //# sourceMappingURL=notebook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebook.js","sourceRoot":"","sources":["../../src/analyzers/notebook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Performance Profiling Integration
3
+ * Parses common profiling output: Node.js CPU profiles (.cpuprofile),
4
+ * webpack bundle stats, and performs heuristic analysis on file/dep sizes.
5
+ */
6
+ export interface PerfEntry {
7
+ type: 'hot_function' | 'large_bundle' | 'slow_module' | 'large_file' | 'heavy_dep';
8
+ name: string;
9
+ file?: string;
10
+ metric: string;
11
+ value: number;
12
+ unit: string;
13
+ severity: 'critical' | 'warning' | 'info';
14
+ recommendation?: string;
15
+ }
16
+ export interface PerfResult {
17
+ entries: PerfEntry[];
18
+ sources: string[];
19
+ profFiles: string[];
20
+ summary: {
21
+ critical: number;
22
+ warning: number;
23
+ info: number;
24
+ };
25
+ bundleSize?: {
26
+ total: number;
27
+ largest: {
28
+ name: string;
29
+ size: number;
30
+ }[];
31
+ };
32
+ }
33
+ /**
34
+ * Main performance analysis function.
35
+ * @param cwd - The working directory
36
+ * @returns Performance analysis results with entries and summary
37
+ */
38
+ export declare function analyzePerformance(cwd: string): Promise<PerfResult>;
39
+ //# sourceMappingURL=perf-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perf-profile.d.ts","sourceRoot":"","sources":["../../src/analyzers/perf-profile.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,WAAW,CAAC;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;CAC3E;AAuJD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAkEzE"}
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Performance Profiling Integration
3
+ * Parses common profiling output: Node.js CPU profiles (.cpuprofile),
4
+ * webpack bundle stats, and performs heuristic analysis on file/dep sizes.
5
+ */
6
+ import { listFiles } from '../search/fast-search.js';
7
+ import { readFile, stat } from 'node:fs/promises';
8
+ import path from 'node:path';
9
+ /**
10
+ * Parse Node.js .cpuprofile files (V8 CPU profile format).
11
+ * @param content - The raw CPU profile JSON content
12
+ * @returns Array of performance entries for hot functions
13
+ */
14
+ function parseCPUProfile(content) {
15
+ const entries = [];
16
+ try {
17
+ const profile = JSON.parse(content);
18
+ const nodes = profile.nodes || [];
19
+ const funcHits = [];
20
+ for (const node of nodes) {
21
+ if (node.hitCount > 0 && node.callFrame) {
22
+ funcHits.push({
23
+ name: node.callFrame.functionName || '(anonymous)',
24
+ url: node.callFrame.url || '',
25
+ hitCount: node.hitCount,
26
+ });
27
+ }
28
+ }
29
+ funcHits.sort((a, b) => b.hitCount - a.hitCount);
30
+ const totalHits = funcHits.reduce((sum, f) => sum + f.hitCount, 0);
31
+ for (const func of funcHits.slice(0, 20)) {
32
+ const pct = totalHits > 0 ? ((func.hitCount / totalHits) * 100).toFixed(1) : '0';
33
+ const severity = parseFloat(pct) > 10 ? 'critical' : parseFloat(pct) > 3 ? 'warning' : 'info';
34
+ entries.push({
35
+ type: 'hot_function',
36
+ name: func.name,
37
+ file: func.url.replace(/^file:\/\//, ''),
38
+ metric: 'CPU time',
39
+ value: parseFloat(pct),
40
+ unit: '%',
41
+ severity,
42
+ recommendation: parseFloat(pct) > 10 ? `Hot function taking ${pct}% CPU` : undefined,
43
+ });
44
+ }
45
+ }
46
+ catch {
47
+ /* skip */
48
+ }
49
+ return entries;
50
+ }
51
+ /**
52
+ * Parse webpack stats.json for bundle analysis.
53
+ * @param content - The raw webpack stats JSON content
54
+ * @param file - The stats file path
55
+ * @returns Array of performance entries for bundle sizes
56
+ */
57
+ function parseWebpackStats(content, file) {
58
+ const entries = [];
59
+ try {
60
+ const stats = JSON.parse(content);
61
+ const assets = stats.assets || [];
62
+ const sorted = assets
63
+ .sort((a, b) => b.size - a.size)
64
+ .slice(0, 15);
65
+ for (const asset of sorted) {
66
+ const sizeMB = (asset.size / (1024 * 1024)).toFixed(2);
67
+ const severity = asset.size > 500_000 ? 'critical' : asset.size > 200_000 ? 'warning' : 'info';
68
+ entries.push({
69
+ type: 'large_bundle',
70
+ name: asset.name,
71
+ file,
72
+ metric: 'Bundle size',
73
+ value: asset.size,
74
+ unit: 'bytes',
75
+ severity,
76
+ recommendation: asset.size > 500_000 ? `Bundle ${asset.name} is ${sizeMB}MB — consider code splitting` : undefined,
77
+ });
78
+ }
79
+ }
80
+ catch {
81
+ /* skip */
82
+ }
83
+ return entries;
84
+ }
85
+ /**
86
+ * Analyze source file sizes.
87
+ * @param cwd - The working directory
88
+ * @returns Array of performance entries for large files
89
+ */
90
+ async function analyzeFileSizes(cwd) {
91
+ const entries = [];
92
+ const files = await listFiles(cwd, { glob: '**/*.{ts,tsx,js,jsx,py,java,go,rs}' });
93
+ for (const file of files.slice(0, 500)) {
94
+ try {
95
+ const st = await stat(path.join(cwd, file));
96
+ const sizeKB = st.size / 1024;
97
+ if (sizeKB > 100) {
98
+ entries.push({
99
+ type: 'large_file',
100
+ name: file,
101
+ file,
102
+ metric: 'File size',
103
+ value: Math.round(sizeKB),
104
+ unit: 'KB',
105
+ severity: sizeKB > 500 ? 'critical' : sizeKB > 200 ? 'warning' : 'info',
106
+ recommendation: sizeKB > 200 ? `File is ${Math.round(sizeKB)}KB — consider splitting` : undefined,
107
+ });
108
+ }
109
+ }
110
+ catch {
111
+ /* skip */
112
+ }
113
+ }
114
+ return entries.sort((a, b) => b.value - a.value).slice(0, 15);
115
+ }
116
+ /**
117
+ * Analyze heavy dependencies from package.json.
118
+ * @param cwd - The working directory
119
+ * @returns Array of performance entries for heavy dependencies
120
+ */
121
+ async function analyzeHeavyDeps(cwd) {
122
+ const entries = [];
123
+ const HEAVY_DEPS = {
124
+ moment: { sizeEstKB: 290, alternative: 'date-fns or dayjs (2-7KB)' },
125
+ lodash: { sizeEstKB: 530, alternative: 'lodash-es with tree-shaking' },
126
+ 'aws-sdk': { sizeEstKB: 7500, alternative: '@aws-sdk/* v3 modular packages' },
127
+ firebase: { sizeEstKB: 600, alternative: 'firebase/app + only needed modules' },
128
+ antd: { sizeEstKB: 1200, alternative: 'Import individual antd components' },
129
+ '@mui/material': { sizeEstKB: 800, alternative: 'Import individual @mui components' },
130
+ 'core-js': { sizeEstKB: 500, alternative: 'Use browserslist for targeted polyfills' },
131
+ };
132
+ try {
133
+ const pkgContent = await readFile(path.join(cwd, 'package.json'), 'utf-8');
134
+ const pkg = JSON.parse(pkgContent);
135
+ const allDeps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
136
+ for (const [name, info] of Object.entries(HEAVY_DEPS)) {
137
+ if (allDeps[name]) {
138
+ entries.push({
139
+ type: 'heavy_dep',
140
+ name,
141
+ metric: 'Estimated bundle impact',
142
+ value: info.sizeEstKB,
143
+ unit: 'KB',
144
+ severity: info.sizeEstKB > 500 ? 'warning' : 'info',
145
+ recommendation: info.alternative ? `Consider: ${info.alternative}` : undefined,
146
+ });
147
+ }
148
+ }
149
+ }
150
+ catch {
151
+ /* skip */
152
+ }
153
+ return entries.sort((a, b) => b.value - a.value);
154
+ }
155
+ /**
156
+ * Main performance analysis function.
157
+ * @param cwd - The working directory
158
+ * @returns Performance analysis results with entries and summary
159
+ */
160
+ export async function analyzePerformance(cwd) {
161
+ const allEntries = [];
162
+ const sources = [];
163
+ const profFiles = [];
164
+ // CPU profiles
165
+ const cpuProfiles = await listFiles(cwd, { glob: '**/*.cpuprofile' });
166
+ for (const f of cpuProfiles.slice(0, 5)) {
167
+ try {
168
+ const content = await readFile(path.join(cwd, f), 'utf-8');
169
+ const entries = parseCPUProfile(content);
170
+ if (entries.length > 0) {
171
+ allEntries.push(...entries);
172
+ profFiles.push(f);
173
+ sources.push('cpuprofile');
174
+ }
175
+ }
176
+ catch {
177
+ /* skip */
178
+ }
179
+ }
180
+ // Webpack stats
181
+ const statsFiles = await listFiles(cwd, { glob: '**/*stats*.json' });
182
+ for (const f of statsFiles.filter((f) => /stats|bundle/i.test(f)).slice(0, 3)) {
183
+ try {
184
+ const content = await readFile(path.join(cwd, f), 'utf-8');
185
+ if (content.includes('"assets"') || content.includes('"modules"')) {
186
+ const entries = parseWebpackStats(content, f);
187
+ if (entries.length > 0) {
188
+ allEntries.push(...entries);
189
+ profFiles.push(f);
190
+ sources.push('webpack-stats');
191
+ }
192
+ }
193
+ }
194
+ catch {
195
+ /* skip */
196
+ }
197
+ }
198
+ // File size analysis
199
+ const fileSizeEntries = await analyzeFileSizes(cwd);
200
+ if (fileSizeEntries.length > 0) {
201
+ allEntries.push(...fileSizeEntries);
202
+ sources.push('file-sizes');
203
+ }
204
+ // Heavy deps
205
+ const heavyDepEntries = await analyzeHeavyDeps(cwd);
206
+ if (heavyDepEntries.length > 0) {
207
+ allEntries.push(...heavyDepEntries);
208
+ sources.push('dep-weight');
209
+ }
210
+ const summary = { critical: 0, warning: 0, info: 0 };
211
+ for (const e of allEntries)
212
+ summary[e.severity]++;
213
+ const bundleEntries = allEntries.filter((e) => e.type === 'large_bundle');
214
+ const bundleSize = bundleEntries.length > 0
215
+ ? {
216
+ total: bundleEntries.reduce((sum, e) => sum + e.value, 0),
217
+ largest: bundleEntries.slice(0, 5).map((e) => ({ name: e.name, size: e.value })),
218
+ }
219
+ : undefined;
220
+ return { entries: allEntries, sources: [...new Set(sources)], profFiles, summary, bundleSize };
221
+ }
222
+ //# sourceMappingURL=perf-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perf-profile.js","sourceRoot":"","sources":["../../src/analyzers/perf-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Code Generation Templates / Scaffolding
3
+ * Generates boilerplate code from symbol signatures.
4
+ * Supports: React components, Express routes, test files, API handlers,
5
+ * class stubs, and module scaffolds based on project conventions.
6
+ */
7
+ export interface ScaffoldTemplate {
8
+ name: string;
9
+ description: string;
10
+ language: string;
11
+ category: 'component' | 'route' | 'test' | 'model' | 'service' | 'util' | 'hook';
12
+ }
13
+ export interface ScaffoldResult {
14
+ template: string;
15
+ generatedCode: string;
16
+ fileName: string;
17
+ language: string;
18
+ /** Detected project conventions applied */
19
+ conventions: string[];
20
+ }
21
+ export interface ConventionResult {
22
+ templates: ScaffoldTemplate[];
23
+ detectedPatterns: string[];
24
+ projectType: string;
25
+ }
26
+ /**
27
+ * List available scaffold templates based on project conventions.
28
+ * @param cwd - The working directory
29
+ * @returns Available templates, detected patterns, and project type
30
+ */
31
+ export declare function listTemplates(cwd: string): Promise<ConventionResult>;
32
+ /**
33
+ * Generate scaffold code for a given template and name.
34
+ * @param cwd - The working directory
35
+ * @param options - Scaffold options
36
+ * @param options.template - Template type to generate
37
+ * @param options.name - Name for the generated code
38
+ * @param options.targetFile - Optional target file path
39
+ * @returns Generated scaffold result with code and metadata
40
+ */
41
+ export declare function generateScaffold(cwd: string, options: {
42
+ template: string;
43
+ name: string;
44
+ targetFile?: string;
45
+ }): Promise<ScaffoldResult>;
46
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/analyzers/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;CAClF;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAgND;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+C1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/D,OAAO,CAAC,cAAc,CAAC,CA8CzB"}