@monoes/monomindcli 1.17.0 → 1.17.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.
- package/.claude/agents/engineering/engineering-security-engineer.md +1 -1
- package/.claude/commands/mastermind/_repeat.md +4 -0
- package/.claude/commands/mastermind/master.md +52 -1
- package/.claude/skills/mastermind/_repeat.md +2 -0
- package/dist/src/__tests__/browse-analyzer.test.js +42 -59
- package/dist/src/__tests__/browse-analyzer.test.js.map +1 -1
- package/dist/src/browser/dashboard/server.d.ts.map +1 -1
- package/dist/src/browser/dashboard/server.js +18 -0
- package/dist/src/browser/dashboard/server.js.map +1 -1
- package/dist/src/browser/dashboard/ui.html +37 -125
- package/dist/src/commands/agent-lifecycle.d.ts +17 -0
- package/dist/src/commands/agent-lifecycle.d.ts.map +1 -0
- package/dist/src/commands/agent-lifecycle.js +320 -0
- package/dist/src/commands/agent-lifecycle.js.map +1 -0
- package/dist/src/commands/agent-ops.d.ts +9 -0
- package/dist/src/commands/agent-ops.d.ts.map +1 -0
- package/dist/src/commands/agent-ops.js +329 -0
- package/dist/src/commands/agent-ops.js.map +1 -0
- package/dist/src/commands/agent.d.ts.map +1 -1
- package/dist/src/commands/agent.js +5 -907
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/analyze-ast.d.ts +26 -0
- package/dist/src/commands/analyze-ast.d.ts.map +1 -0
- package/dist/src/commands/analyze-ast.js +284 -0
- package/dist/src/commands/analyze-ast.js.map +1 -0
- package/dist/src/commands/analyze-boundaries.d.ts +14 -0
- package/dist/src/commands/analyze-boundaries.d.ts.map +1 -0
- package/dist/src/commands/analyze-boundaries.js +295 -0
- package/dist/src/commands/analyze-boundaries.js.map +1 -0
- package/dist/src/commands/analyze-diff.d.ts +8 -0
- package/dist/src/commands/analyze-diff.d.ts.map +1 -0
- package/dist/src/commands/analyze-diff.js +395 -0
- package/dist/src/commands/analyze-diff.js.map +1 -0
- package/dist/src/commands/analyze-graph.d.ts +14 -0
- package/dist/src/commands/analyze-graph.d.ts.map +1 -0
- package/dist/src/commands/analyze-graph.js +304 -0
- package/dist/src/commands/analyze-graph.js.map +1 -0
- package/dist/src/commands/analyze-imports.d.ts +11 -0
- package/dist/src/commands/analyze-imports.d.ts.map +1 -0
- package/dist/src/commands/analyze-imports.js +287 -0
- package/dist/src/commands/analyze-imports.js.map +1 -0
- package/dist/src/commands/analyze-symbols.d.ts +14 -0
- package/dist/src/commands/analyze-symbols.d.ts.map +1 -0
- package/dist/src/commands/analyze-symbols.js +302 -0
- package/dist/src/commands/analyze-symbols.js.map +1 -0
- package/dist/src/commands/analyze.d.ts +38 -0
- package/dist/src/commands/analyze.d.ts.map +1 -1
- package/dist/src/commands/analyze.js +12 -1827
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/doctor-env-checks.d.ts +26 -0
- package/dist/src/commands/doctor-env-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-env-checks.js +189 -0
- package/dist/src/commands/doctor-env-checks.js.map +1 -0
- package/dist/src/commands/doctor-project-checks.d.ts +19 -0
- package/dist/src/commands/doctor-project-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-project-checks.js +388 -0
- package/dist/src/commands/doctor-project-checks.js.map +1 -0
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +51 -942
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/hive-mind-comms.d.ts +11 -0
- package/dist/src/commands/hive-mind-comms.d.ts.map +1 -0
- package/dist/src/commands/hive-mind-comms.js +242 -0
- package/dist/src/commands/hive-mind-comms.js.map +1 -0
- package/dist/src/commands/hive-mind-helpers.d.ts +35 -0
- package/dist/src/commands/hive-mind-helpers.d.ts.map +1 -0
- package/dist/src/commands/hive-mind-helpers.js +203 -0
- package/dist/src/commands/hive-mind-helpers.js.map +1 -0
- package/dist/src/commands/hive-mind-ops.d.ts +8 -0
- package/dist/src/commands/hive-mind-ops.d.ts.map +1 -0
- package/dist/src/commands/hive-mind-ops.js +233 -0
- package/dist/src/commands/hive-mind-ops.js.map +1 -0
- package/dist/src/commands/hive-mind-spawn.d.ts +12 -0
- package/dist/src/commands/hive-mind-spawn.d.ts.map +1 -0
- package/dist/src/commands/hive-mind-spawn.js +274 -0
- package/dist/src/commands/hive-mind-spawn.js.map +1 -0
- package/dist/src/commands/hive-mind.d.ts.map +1 -1
- package/dist/src/commands/hive-mind.js +10 -1129
- package/dist/src/commands/hive-mind.js.map +1 -1
- package/dist/src/commands/hooks-coverage-commands.d.ts +4 -4
- package/dist/src/commands/hooks-coverage-commands.d.ts.map +1 -1
- package/dist/src/commands/hooks-coverage-commands.js +19 -819
- package/dist/src/commands/hooks-coverage-commands.js.map +1 -1
- package/dist/src/commands/hooks-coverage-gaps.d.ts +7 -0
- package/dist/src/commands/hooks-coverage-gaps.d.ts.map +1 -0
- package/dist/src/commands/hooks-coverage-gaps.js +334 -0
- package/dist/src/commands/hooks-coverage-gaps.js.map +1 -0
- package/dist/src/commands/hooks-coverage-routing.d.ts +7 -0
- package/dist/src/commands/hooks-coverage-routing.d.ts.map +1 -0
- package/dist/src/commands/hooks-coverage-routing.js +399 -0
- package/dist/src/commands/hooks-coverage-routing.js.map +1 -0
- package/dist/src/commands/init-subcommands.d.ts +8 -0
- package/dist/src/commands/init-subcommands.d.ts.map +1 -0
- package/dist/src/commands/init-subcommands.js +156 -0
- package/dist/src/commands/init-subcommands.js.map +1 -0
- package/dist/src/commands/init-upgrade.d.ts +6 -0
- package/dist/src/commands/init-upgrade.d.ts.map +1 -0
- package/dist/src/commands/init-upgrade.js +203 -0
- package/dist/src/commands/init-upgrade.js.map +1 -0
- package/dist/src/commands/init-wizard.d.ts +6 -0
- package/dist/src/commands/init-wizard.d.ts.map +1 -0
- package/dist/src/commands/init-wizard.js +246 -0
- package/dist/src/commands/init-wizard.js.map +1 -0
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +6 -623
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/memory-admin.d.ts +10 -0
- package/dist/src/commands/memory-admin.d.ts.map +1 -0
- package/dist/src/commands/memory-admin.js +433 -0
- package/dist/src/commands/memory-admin.js.map +1 -0
- package/dist/src/commands/memory-crud.d.ts +9 -0
- package/dist/src/commands/memory-crud.d.ts.map +1 -0
- package/dist/src/commands/memory-crud.js +342 -0
- package/dist/src/commands/memory-crud.js.map +1 -0
- package/dist/src/commands/memory-list.d.ts +10 -0
- package/dist/src/commands/memory-list.d.ts.map +1 -0
- package/dist/src/commands/memory-list.js +321 -0
- package/dist/src/commands/memory-list.js.map +1 -0
- package/dist/src/commands/memory-transfer.d.ts +9 -0
- package/dist/src/commands/memory-transfer.d.ts.map +1 -0
- package/dist/src/commands/memory-transfer.js +372 -0
- package/dist/src/commands/memory-transfer.js.map +1 -0
- package/dist/src/commands/memory.d.ts +6 -0
- package/dist/src/commands/memory.d.ts.map +1 -1
- package/dist/src/commands/memory.js +10 -1441
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/neural-core.d.ts +8 -0
- package/dist/src/commands/neural-core.d.ts.map +1 -0
- package/dist/src/commands/neural-core.js +274 -0
- package/dist/src/commands/neural-core.js.map +1 -0
- package/dist/src/commands/neural-optimize.d.ts +7 -0
- package/dist/src/commands/neural-optimize.d.ts.map +1 -0
- package/dist/src/commands/neural-optimize.js +332 -0
- package/dist/src/commands/neural-optimize.js.map +1 -0
- package/dist/src/commands/neural-registry.d.ts +7 -0
- package/dist/src/commands/neural-registry.d.ts.map +1 -0
- package/dist/src/commands/neural-registry.js +290 -0
- package/dist/src/commands/neural-registry.js.map +1 -0
- package/dist/src/commands/neural.d.ts.map +1 -1
- package/dist/src/commands/neural.js +3 -974
- package/dist/src/commands/neural.js.map +1 -1
- package/dist/src/commands/platforms.d.ts.map +1 -1
- package/dist/src/commands/platforms.js +327 -7
- package/dist/src/commands/platforms.js.map +1 -1
- package/dist/src/commands/security-cve.d.ts +6 -0
- package/dist/src/commands/security-cve.d.ts.map +1 -0
- package/dist/src/commands/security-cve.js +310 -0
- package/dist/src/commands/security-cve.js.map +1 -0
- package/dist/src/commands/security-misc.d.ts +9 -0
- package/dist/src/commands/security-misc.d.ts.map +1 -0
- package/dist/src/commands/security-misc.js +293 -0
- package/dist/src/commands/security-misc.js.map +1 -0
- package/dist/src/commands/security-scan.d.ts +18 -0
- package/dist/src/commands/security-scan.d.ts.map +1 -0
- package/dist/src/commands/security-scan.js +328 -0
- package/dist/src/commands/security-scan.js.map +1 -0
- package/dist/src/commands/security.d.ts.map +1 -1
- package/dist/src/commands/security.js +3 -958
- package/dist/src/commands/security.js.map +1 -1
- package/dist/src/commands/session.js +1 -1
- package/dist/src/commands/session.js.map +1 -1
- package/dist/src/commands/swarm.d.ts.map +1 -1
- package/dist/src/commands/swarm.js +23 -17
- package/dist/src/commands/swarm.js.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.js +77 -0
- package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
- package/dist/src/parser.d.ts.map +1 -1
- package/dist/src/parser.js +11 -6
- package/dist/src/parser.js.map +1 -1
- package/dist/src/routing/llm-caller.d.ts.map +1 -1
- package/dist/src/routing/llm-caller.js +1 -2
- package/dist/src/routing/llm-caller.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -3
- package/scripts/understand-analyze.mjs +1 -1
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analyze dependencies and circular subcommands
|
|
3
|
+
* Full dependency graph building and circular dependency detection
|
|
4
|
+
*/
|
|
5
|
+
import { output } from '../output.js';
|
|
6
|
+
import { resolve } from 'path';
|
|
7
|
+
import { getGraphAnalyzer, safeWriteOutputFile } from './analyze.js';
|
|
8
|
+
/**
|
|
9
|
+
* Build and export dependency graph
|
|
10
|
+
*/
|
|
11
|
+
export const dependenciesCommand = {
|
|
12
|
+
name: 'dependencies',
|
|
13
|
+
aliases: ['graph'],
|
|
14
|
+
description: 'Build and export full dependency graph',
|
|
15
|
+
options: [
|
|
16
|
+
{
|
|
17
|
+
name: 'output',
|
|
18
|
+
short: 'o',
|
|
19
|
+
description: 'Output file path',
|
|
20
|
+
type: 'string',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'format',
|
|
24
|
+
short: 'f',
|
|
25
|
+
description: 'Output format (text, json, dot)',
|
|
26
|
+
type: 'string',
|
|
27
|
+
default: 'text',
|
|
28
|
+
choices: ['text', 'json', 'dot'],
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'include',
|
|
32
|
+
short: 'i',
|
|
33
|
+
description: 'File extensions to include (comma-separated)',
|
|
34
|
+
type: 'string',
|
|
35
|
+
default: '.ts,.tsx,.js,.jsx,.mjs,.cjs',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'exclude',
|
|
39
|
+
short: 'e',
|
|
40
|
+
description: 'Patterns to exclude (comma-separated)',
|
|
41
|
+
type: 'string',
|
|
42
|
+
default: 'node_modules,dist,build,.git',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'depth',
|
|
46
|
+
short: 'd',
|
|
47
|
+
description: 'Maximum directory depth',
|
|
48
|
+
type: 'number',
|
|
49
|
+
default: 10,
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
examples: [
|
|
53
|
+
{ command: 'monomind analyze dependencies src/', description: 'Build dependency graph' },
|
|
54
|
+
{ command: 'monomind analyze dependencies -f dot -o deps.dot src/', description: 'Export to DOT' },
|
|
55
|
+
{ command: 'monomind analyze dependencies -i .ts,.tsx src/', description: 'Only TypeScript files' },
|
|
56
|
+
],
|
|
57
|
+
action: async (ctx) => {
|
|
58
|
+
const targetDir = ctx.args[0] || ctx.cwd;
|
|
59
|
+
const outputFile = ctx.flags.output;
|
|
60
|
+
const format = ctx.flags.format || 'text';
|
|
61
|
+
const include = (ctx.flags.include || '.ts,.tsx,.js,.jsx,.mjs,.cjs').split(',');
|
|
62
|
+
const exclude = (ctx.flags.exclude || 'node_modules,dist,build,.git').split(',');
|
|
63
|
+
const rawDepth = ctx.flags.depth || 10;
|
|
64
|
+
const maxDepth = Number.isFinite(rawDepth) ? Math.max(1, Math.min(rawDepth, 50)) : 10;
|
|
65
|
+
output.printInfo(`Building dependency graph for: ${output.highlight(targetDir)}`);
|
|
66
|
+
output.writeln();
|
|
67
|
+
const spinner = output.createSpinner({ text: 'Scanning files...', spinner: 'dots' });
|
|
68
|
+
spinner.start();
|
|
69
|
+
try {
|
|
70
|
+
const analyzer = await getGraphAnalyzer();
|
|
71
|
+
if (!analyzer) {
|
|
72
|
+
spinner.stop();
|
|
73
|
+
output.printError('Graph analyzer module not available');
|
|
74
|
+
return { success: false, exitCode: 1 };
|
|
75
|
+
}
|
|
76
|
+
const graph = await analyzer.buildDependencyGraph(resolve(targetDir), {
|
|
77
|
+
include,
|
|
78
|
+
exclude,
|
|
79
|
+
maxDepth,
|
|
80
|
+
});
|
|
81
|
+
spinner.stop();
|
|
82
|
+
// Detect circular dependencies
|
|
83
|
+
const circularDeps = analyzer.detectCircularDependencies(graph);
|
|
84
|
+
// Handle different output formats
|
|
85
|
+
if (format === 'json') {
|
|
86
|
+
const jsonOutput = {
|
|
87
|
+
nodes: Array.from(graph.nodes.values()),
|
|
88
|
+
edges: graph.edges,
|
|
89
|
+
metadata: graph.metadata,
|
|
90
|
+
circularDependencies: circularDeps,
|
|
91
|
+
};
|
|
92
|
+
if (outputFile) {
|
|
93
|
+
await safeWriteOutputFile(outputFile, JSON.stringify(jsonOutput, null, 2));
|
|
94
|
+
output.printSuccess(`Graph written to ${outputFile}`);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
output.printJson(jsonOutput);
|
|
98
|
+
}
|
|
99
|
+
return { success: true, data: jsonOutput };
|
|
100
|
+
}
|
|
101
|
+
if (format === 'dot') {
|
|
102
|
+
const result = { graph, circularDependencies: circularDeps, statistics: {
|
|
103
|
+
nodeCount: graph.nodes.size,
|
|
104
|
+
edgeCount: graph.edges.length,
|
|
105
|
+
avgDegree: 0,
|
|
106
|
+
maxDegree: 0,
|
|
107
|
+
density: 0,
|
|
108
|
+
componentCount: 0,
|
|
109
|
+
} };
|
|
110
|
+
const dotOutput = analyzer.exportToDot(result, {
|
|
111
|
+
includeLabels: true,
|
|
112
|
+
highlightCycles: true,
|
|
113
|
+
});
|
|
114
|
+
if (outputFile) {
|
|
115
|
+
await safeWriteOutputFile(outputFile, dotOutput);
|
|
116
|
+
output.printSuccess(`DOT graph written to ${outputFile}`);
|
|
117
|
+
output.writeln(output.dim('Visualize with: dot -Tpng -o deps.png ' + outputFile));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
output.writeln(dotOutput);
|
|
121
|
+
}
|
|
122
|
+
return { success: true };
|
|
123
|
+
}
|
|
124
|
+
// Text format (default)
|
|
125
|
+
output.printBox([
|
|
126
|
+
`Files: ${graph.metadata.totalFiles}`,
|
|
127
|
+
`Dependencies: ${graph.metadata.totalEdges}`,
|
|
128
|
+
`Build time: ${graph.metadata.buildTime}ms`,
|
|
129
|
+
`Root: ${graph.metadata.rootDir}`,
|
|
130
|
+
].join('\n'), 'Dependency Graph');
|
|
131
|
+
// Show top files by imports
|
|
132
|
+
output.writeln();
|
|
133
|
+
output.writeln(output.bold('Most Connected Files'));
|
|
134
|
+
output.writeln();
|
|
135
|
+
const nodesByDegree = Array.from(graph.nodes.values())
|
|
136
|
+
.map((n) => ({
|
|
137
|
+
...n,
|
|
138
|
+
degree: graph.edges.filter((e) => e.source === n.id || e.target === n.id).length,
|
|
139
|
+
}))
|
|
140
|
+
.sort((a, b) => b.degree - a.degree)
|
|
141
|
+
.slice(0, 10);
|
|
142
|
+
output.printTable({
|
|
143
|
+
columns: [
|
|
144
|
+
{ key: 'path', header: 'File', width: 50 },
|
|
145
|
+
{ key: 'degree', header: 'Connections', width: 12, align: 'right' },
|
|
146
|
+
{ key: 'complexity', header: 'Complexity', width: 12, align: 'right' },
|
|
147
|
+
],
|
|
148
|
+
data: nodesByDegree.map(n => ({
|
|
149
|
+
path: n.path.length > 48 ? '...' + n.path.slice(-45) : n.path,
|
|
150
|
+
degree: n.degree,
|
|
151
|
+
complexity: n.complexity || 0,
|
|
152
|
+
})),
|
|
153
|
+
});
|
|
154
|
+
// Show circular dependencies
|
|
155
|
+
if (circularDeps.length > 0) {
|
|
156
|
+
output.writeln();
|
|
157
|
+
output.writeln(output.bold(output.warning(`Circular Dependencies: ${circularDeps.length}`)));
|
|
158
|
+
output.writeln();
|
|
159
|
+
for (const cycle of circularDeps.slice(0, 3)) {
|
|
160
|
+
output.writeln(` ${cycle.cycle.join(' -> ')}`);
|
|
161
|
+
}
|
|
162
|
+
if (circularDeps.length > 3) {
|
|
163
|
+
output.writeln(output.dim(` ... and ${circularDeps.length - 3} more`));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (outputFile) {
|
|
167
|
+
const fullOutput = {
|
|
168
|
+
nodes: Array.from(graph.nodes.values()),
|
|
169
|
+
edges: graph.edges,
|
|
170
|
+
metadata: graph.metadata,
|
|
171
|
+
circularDependencies: circularDeps,
|
|
172
|
+
};
|
|
173
|
+
await safeWriteOutputFile(outputFile, JSON.stringify(fullOutput, null, 2));
|
|
174
|
+
output.printSuccess(`Full results written to ${outputFile}`);
|
|
175
|
+
}
|
|
176
|
+
return { success: true };
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
spinner.stop();
|
|
180
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
181
|
+
output.printError(`Analysis failed: ${message}`);
|
|
182
|
+
return { success: false, exitCode: 1 };
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* Detect circular dependencies
|
|
188
|
+
*/
|
|
189
|
+
export const circularCommand = {
|
|
190
|
+
name: 'circular',
|
|
191
|
+
aliases: ['cycles'],
|
|
192
|
+
description: 'Detect circular dependencies in codebase',
|
|
193
|
+
options: [
|
|
194
|
+
{
|
|
195
|
+
name: 'output',
|
|
196
|
+
short: 'o',
|
|
197
|
+
description: 'Output file path',
|
|
198
|
+
type: 'string',
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
name: 'format',
|
|
202
|
+
short: 'f',
|
|
203
|
+
description: 'Output format (text, json)',
|
|
204
|
+
type: 'string',
|
|
205
|
+
default: 'text',
|
|
206
|
+
choices: ['text', 'json'],
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
name: 'severity',
|
|
210
|
+
short: 's',
|
|
211
|
+
description: 'Minimum severity to show (low, medium, high)',
|
|
212
|
+
type: 'string',
|
|
213
|
+
default: 'low',
|
|
214
|
+
choices: ['low', 'medium', 'high'],
|
|
215
|
+
},
|
|
216
|
+
],
|
|
217
|
+
examples: [
|
|
218
|
+
{ command: 'monomind analyze circular src/', description: 'Find circular dependencies' },
|
|
219
|
+
{ command: 'monomind analyze circular -s high src/', description: 'Only high severity cycles' },
|
|
220
|
+
],
|
|
221
|
+
action: async (ctx) => {
|
|
222
|
+
const targetDir = ctx.args[0] || ctx.cwd;
|
|
223
|
+
const outputFile = ctx.flags.output;
|
|
224
|
+
const format = ctx.flags.format || 'text';
|
|
225
|
+
const minSeverity = ctx.flags.severity || 'low';
|
|
226
|
+
output.printInfo(`Detecting circular dependencies in: ${output.highlight(targetDir)}`);
|
|
227
|
+
output.writeln();
|
|
228
|
+
const spinner = output.createSpinner({ text: 'Analyzing dependencies...', spinner: 'dots' });
|
|
229
|
+
spinner.start();
|
|
230
|
+
try {
|
|
231
|
+
const analyzer = await getGraphAnalyzer();
|
|
232
|
+
if (!analyzer) {
|
|
233
|
+
spinner.stop();
|
|
234
|
+
output.printError('Graph analyzer module not available');
|
|
235
|
+
return { success: false, exitCode: 1 };
|
|
236
|
+
}
|
|
237
|
+
const graph = await analyzer.buildDependencyGraph(resolve(targetDir));
|
|
238
|
+
const cycles = analyzer.detectCircularDependencies(graph);
|
|
239
|
+
spinner.stop();
|
|
240
|
+
// Filter by severity
|
|
241
|
+
const severityOrder = { low: 0, medium: 1, high: 2 };
|
|
242
|
+
const minLevel = severityOrder[minSeverity] || 0;
|
|
243
|
+
const filtered = cycles.filter(c => severityOrder[c.severity] >= minLevel);
|
|
244
|
+
if (format === 'json') {
|
|
245
|
+
const jsonOutput = { cycles: filtered, total: cycles.length, filtered: filtered.length };
|
|
246
|
+
if (outputFile) {
|
|
247
|
+
await safeWriteOutputFile(outputFile, JSON.stringify(jsonOutput, null, 2));
|
|
248
|
+
output.printSuccess(`Results written to ${outputFile}`);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
output.printJson(jsonOutput);
|
|
252
|
+
}
|
|
253
|
+
return { success: true, data: jsonOutput };
|
|
254
|
+
}
|
|
255
|
+
// Text format
|
|
256
|
+
if (filtered.length === 0) {
|
|
257
|
+
output.printSuccess('No circular dependencies found!');
|
|
258
|
+
return { success: true };
|
|
259
|
+
}
|
|
260
|
+
output.printBox([
|
|
261
|
+
`Total cycles: ${cycles.length}`,
|
|
262
|
+
`Shown (${minSeverity}+): ${filtered.length}`,
|
|
263
|
+
`High severity: ${cycles.filter(c => c.severity === 'high').length}`,
|
|
264
|
+
`Medium severity: ${cycles.filter(c => c.severity === 'medium').length}`,
|
|
265
|
+
`Low severity: ${cycles.filter(c => c.severity === 'low').length}`,
|
|
266
|
+
].join('\n'), 'Circular Dependencies');
|
|
267
|
+
output.writeln();
|
|
268
|
+
// Group by severity
|
|
269
|
+
const grouped = {
|
|
270
|
+
high: filtered.filter(c => c.severity === 'high'),
|
|
271
|
+
medium: filtered.filter(c => c.severity === 'medium'),
|
|
272
|
+
low: filtered.filter(c => c.severity === 'low'),
|
|
273
|
+
};
|
|
274
|
+
for (const [severity, items] of Object.entries(grouped)) {
|
|
275
|
+
if (items.length === 0)
|
|
276
|
+
continue;
|
|
277
|
+
const color = severity === 'high' ? output.error : severity === 'medium' ? output.warning : output.dim;
|
|
278
|
+
output.writeln(color(output.bold(`${severity.toUpperCase()} SEVERITY (${items.length})`)));
|
|
279
|
+
output.writeln();
|
|
280
|
+
for (const cycle of items.slice(0, 5)) {
|
|
281
|
+
output.writeln(` ${cycle.cycle.join(' -> ')}`);
|
|
282
|
+
output.writeln(output.dim(` Fix: ${cycle.suggestion}`));
|
|
283
|
+
output.writeln();
|
|
284
|
+
}
|
|
285
|
+
if (items.length > 5) {
|
|
286
|
+
output.writeln(output.dim(` ... and ${items.length - 5} more ${severity} cycles`));
|
|
287
|
+
output.writeln();
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (outputFile) {
|
|
291
|
+
await safeWriteOutputFile(outputFile, JSON.stringify({ cycles: filtered }, null, 2));
|
|
292
|
+
output.printSuccess(`Results written to ${outputFile}`);
|
|
293
|
+
}
|
|
294
|
+
return { success: true, data: { cycles: filtered } };
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
spinner.stop();
|
|
298
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
299
|
+
output.printError(`Analysis failed: ${message}`);
|
|
300
|
+
return { success: false, exitCode: 1 };
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
};
|
|
304
|
+
//# sourceMappingURL=analyze-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-graph.js","sourceRoot":"","sources":["../../../src/commands/analyze-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analyze imports and deps subcommands
|
|
3
|
+
* Import dependency analysis and project dependency checking
|
|
4
|
+
*/
|
|
5
|
+
import type { Command } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Imports analysis subcommand
|
|
8
|
+
*/
|
|
9
|
+
export declare const importsCommand: Command;
|
|
10
|
+
export declare const depsCommand: Command;
|
|
11
|
+
//# sourceMappingURL=analyze-imports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-imports.d.ts","sourceRoot":"","sources":["../../../src/commands/analyze-imports.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AAO1E;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,OA6J5B,CAAC;AAGF,eAAO,MAAM,WAAW,EAAE,OA8IzB,CAAC"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analyze imports and deps subcommands
|
|
3
|
+
* Import dependency analysis and project dependency checking
|
|
4
|
+
*/
|
|
5
|
+
import { output } from '../output.js';
|
|
6
|
+
import * as fs from 'fs/promises';
|
|
7
|
+
import { resolve } from 'path';
|
|
8
|
+
import { execSync } from 'child_process';
|
|
9
|
+
import { getASTAnalyzer, safeWriteOutputFile, scanSourceFiles, fallbackAnalyze } from './analyze.js';
|
|
10
|
+
/**
|
|
11
|
+
* Imports analysis subcommand
|
|
12
|
+
*/
|
|
13
|
+
export const importsCommand = {
|
|
14
|
+
name: 'imports',
|
|
15
|
+
aliases: ['imp'],
|
|
16
|
+
description: 'Analyze import dependencies across files',
|
|
17
|
+
options: [
|
|
18
|
+
{
|
|
19
|
+
name: 'format',
|
|
20
|
+
short: 'f',
|
|
21
|
+
description: 'Output format (text, json)',
|
|
22
|
+
type: 'string',
|
|
23
|
+
default: 'text',
|
|
24
|
+
choices: ['text', 'json'],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'output',
|
|
28
|
+
short: 'o',
|
|
29
|
+
description: 'Output file path',
|
|
30
|
+
type: 'string',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'external',
|
|
34
|
+
short: 'e',
|
|
35
|
+
description: 'Show only external (npm) imports',
|
|
36
|
+
type: 'boolean',
|
|
37
|
+
default: false,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
examples: [
|
|
41
|
+
{ command: 'monomind analyze imports src/', description: 'Analyze all imports' },
|
|
42
|
+
{ command: 'monomind analyze imports src/ --external', description: 'Only npm packages' },
|
|
43
|
+
],
|
|
44
|
+
action: async (ctx) => {
|
|
45
|
+
const targetPath = ctx.args[0] || ctx.cwd;
|
|
46
|
+
const formatType = ctx.flags.format || 'text';
|
|
47
|
+
const outputFile = ctx.flags.output;
|
|
48
|
+
const externalOnly = ctx.flags.external;
|
|
49
|
+
output.printInfo(`Analyzing imports: ${output.highlight(targetPath)}`);
|
|
50
|
+
output.writeln();
|
|
51
|
+
const spinner = output.createSpinner({ text: 'Scanning imports...', spinner: 'dots' });
|
|
52
|
+
spinner.start();
|
|
53
|
+
try {
|
|
54
|
+
const astModule = await getASTAnalyzer();
|
|
55
|
+
const resolvedPath = resolve(targetPath);
|
|
56
|
+
const stat = await fs.stat(resolvedPath);
|
|
57
|
+
const files = stat.isDirectory() ? await scanSourceFiles(resolvedPath) : [resolvedPath];
|
|
58
|
+
const importCounts = new Map();
|
|
59
|
+
const fileImports = new Map();
|
|
60
|
+
for (const file of files.slice(0, 100)) {
|
|
61
|
+
try {
|
|
62
|
+
const content = await fs.readFile(file, 'utf-8');
|
|
63
|
+
let analysis;
|
|
64
|
+
if (astModule) {
|
|
65
|
+
const analyzer = astModule.createASTAnalyzer();
|
|
66
|
+
analysis = analyzer.analyze(content, file);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
analysis = fallbackAnalyze(content, file);
|
|
70
|
+
}
|
|
71
|
+
const imports = analysis.imports.filter(imp => {
|
|
72
|
+
if (externalOnly) {
|
|
73
|
+
return !imp.startsWith('.') && !imp.startsWith('/');
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
});
|
|
77
|
+
fileImports.set(file, imports);
|
|
78
|
+
for (const imp of imports) {
|
|
79
|
+
const existing = importCounts.get(imp) || { count: 0, files: [] };
|
|
80
|
+
existing.count++;
|
|
81
|
+
existing.files.push(file);
|
|
82
|
+
importCounts.set(imp, existing);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Skip files that can't be parsed
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
spinner.stop();
|
|
90
|
+
// Sort by count
|
|
91
|
+
const sortedImports = Array.from(importCounts.entries())
|
|
92
|
+
.sort((a, b) => b[1].count - a[1].count);
|
|
93
|
+
if (formatType === 'json') {
|
|
94
|
+
const jsonOutput = {
|
|
95
|
+
imports: Object.fromEntries(sortedImports),
|
|
96
|
+
fileImports: Object.fromEntries(fileImports),
|
|
97
|
+
};
|
|
98
|
+
if (outputFile) {
|
|
99
|
+
await safeWriteOutputFile(outputFile, JSON.stringify(jsonOutput, null, 2));
|
|
100
|
+
output.printSuccess(`Results written to ${outputFile}`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
output.printJson(jsonOutput);
|
|
104
|
+
}
|
|
105
|
+
return { success: true, data: jsonOutput };
|
|
106
|
+
}
|
|
107
|
+
// Summary
|
|
108
|
+
const externalImports = sortedImports.filter(([imp]) => !imp.startsWith('.') && !imp.startsWith('/'));
|
|
109
|
+
const localImports = sortedImports.filter(([imp]) => imp.startsWith('.') || imp.startsWith('/'));
|
|
110
|
+
output.printBox([
|
|
111
|
+
`Total unique imports: ${sortedImports.length}`,
|
|
112
|
+
`External (npm): ${externalImports.length}`,
|
|
113
|
+
`Local (relative): ${localImports.length}`,
|
|
114
|
+
`Files scanned: ${files.length}`,
|
|
115
|
+
].join('\n'), 'Import Analysis');
|
|
116
|
+
// Most used imports
|
|
117
|
+
output.writeln();
|
|
118
|
+
output.writeln(output.bold('Most Used Imports'));
|
|
119
|
+
output.writeln(output.dim('-'.repeat(60)));
|
|
120
|
+
const topImports = sortedImports.slice(0, 20);
|
|
121
|
+
output.printTable({
|
|
122
|
+
columns: [
|
|
123
|
+
{ key: 'count', header: 'Uses', width: 8, align: 'right' },
|
|
124
|
+
{ key: 'import', header: 'Import', width: 50 },
|
|
125
|
+
{ key: 'type', header: 'Type', width: 10 },
|
|
126
|
+
],
|
|
127
|
+
data: topImports.map(([imp, data]) => ({
|
|
128
|
+
count: data.count,
|
|
129
|
+
import: imp,
|
|
130
|
+
type: imp.startsWith('.') || imp.startsWith('/') ? output.dim('local') : output.highlight('npm'),
|
|
131
|
+
})),
|
|
132
|
+
});
|
|
133
|
+
if (sortedImports.length > 20) {
|
|
134
|
+
output.writeln(output.dim(` ... and ${sortedImports.length - 20} more imports`));
|
|
135
|
+
}
|
|
136
|
+
if (outputFile) {
|
|
137
|
+
await safeWriteOutputFile(outputFile, JSON.stringify({
|
|
138
|
+
imports: Object.fromEntries(sortedImports),
|
|
139
|
+
fileImports: Object.fromEntries(fileImports),
|
|
140
|
+
}, null, 2));
|
|
141
|
+
output.printSuccess(`Results written to ${outputFile}`);
|
|
142
|
+
}
|
|
143
|
+
return { success: true, data: { imports: sortedImports } };
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
spinner.stop();
|
|
147
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
148
|
+
output.printError(`Import analysis failed: ${message}`);
|
|
149
|
+
return { success: false, exitCode: 1 };
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
// Dependencies subcommand
|
|
154
|
+
export const depsCommand = {
|
|
155
|
+
name: 'deps',
|
|
156
|
+
description: 'Analyze project dependencies',
|
|
157
|
+
options: [
|
|
158
|
+
{ name: 'outdated', short: 'o', type: 'boolean', description: 'Show only outdated dependencies' },
|
|
159
|
+
{ name: 'security', short: 's', type: 'boolean', description: 'Check for security vulnerabilities' },
|
|
160
|
+
{ name: 'format', short: 'f', type: 'string', description: 'Output format: text, json', default: 'text' },
|
|
161
|
+
],
|
|
162
|
+
examples: [
|
|
163
|
+
{ command: 'monomind analyze deps --outdated', description: 'Show outdated dependencies' },
|
|
164
|
+
{ command: 'monomind analyze deps --security', description: 'Check for vulnerabilities' },
|
|
165
|
+
],
|
|
166
|
+
action: async (ctx) => {
|
|
167
|
+
const showOutdated = ctx.flags.outdated;
|
|
168
|
+
const checkSecurity = ctx.flags.security;
|
|
169
|
+
const formatJson = ctx.flags.format === 'json';
|
|
170
|
+
output.writeln();
|
|
171
|
+
output.writeln(output.bold('Dependency Analysis'));
|
|
172
|
+
output.writeln(output.dim('-'.repeat(50)));
|
|
173
|
+
try {
|
|
174
|
+
const pkgPath = resolve('package.json');
|
|
175
|
+
let pkgContent;
|
|
176
|
+
try {
|
|
177
|
+
pkgContent = await fs.readFile(pkgPath, 'utf-8');
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
output.printError('No package.json found in current directory');
|
|
181
|
+
return { success: false, exitCode: 1 };
|
|
182
|
+
}
|
|
183
|
+
const pkg = JSON.parse(pkgContent);
|
|
184
|
+
const deps = Object.entries(pkg.dependencies || {});
|
|
185
|
+
const devDeps = Object.entries(pkg.devDependencies || {});
|
|
186
|
+
const optDeps = Object.entries(pkg.optionalDependencies || {});
|
|
187
|
+
const peerDeps = Object.entries(pkg.peerDependencies || {});
|
|
188
|
+
const total = deps.length + devDeps.length + optDeps.length + peerDeps.length;
|
|
189
|
+
if (formatJson && !showOutdated && !checkSecurity) {
|
|
190
|
+
const jsonData = { name: pkg.name, version: pkg.version, dependencies: deps.length, devDependencies: devDeps.length, optionalDependencies: optDeps.length, peerDependencies: peerDeps.length, total };
|
|
191
|
+
output.printJson(jsonData);
|
|
192
|
+
return { success: true, data: jsonData };
|
|
193
|
+
}
|
|
194
|
+
output.printBox([`Package: ${pkg.name || 'unknown'} @ ${pkg.version || '0.0.0'}`, `Dependencies: ${deps.length}`, `Dev Dependencies: ${devDeps.length}`, `Optional: ${optDeps.length}`, `Peer: ${peerDeps.length}`, `Total: ${total}`].join('\n'), 'Dependency Summary');
|
|
195
|
+
if (showOutdated) {
|
|
196
|
+
output.writeln();
|
|
197
|
+
output.writeln(output.bold('Outdated Check'));
|
|
198
|
+
output.writeln(output.dim('-'.repeat(60)));
|
|
199
|
+
const outdated = [];
|
|
200
|
+
const checkDeps = async (entries, category) => {
|
|
201
|
+
for (const [name, declared] of entries) {
|
|
202
|
+
try {
|
|
203
|
+
const installedPkg = resolve('node_modules', name, 'package.json');
|
|
204
|
+
const raw = await fs.readFile(installedPkg, 'utf-8');
|
|
205
|
+
const installedContent = JSON.parse(raw);
|
|
206
|
+
const installed = installedContent.version || 'unknown';
|
|
207
|
+
const cleanDeclared = declared.replace(/^[\^~>=<]+/, '');
|
|
208
|
+
if (installed !== cleanDeclared) {
|
|
209
|
+
outdated.push({ name, declared: declared, installed, category });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
outdated.push({ name, declared: declared, installed: 'not installed', category });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
await checkDeps(deps, 'prod');
|
|
218
|
+
await checkDeps(devDeps, 'dev');
|
|
219
|
+
if (outdated.length === 0) {
|
|
220
|
+
output.printSuccess('All dependencies match declared versions');
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
output.printTable({
|
|
224
|
+
columns: [
|
|
225
|
+
{ key: 'name', header: 'Package', width: 30 },
|
|
226
|
+
{ key: 'declared', header: 'Declared', width: 14 },
|
|
227
|
+
{ key: 'installed', header: 'Installed', width: 14 },
|
|
228
|
+
{ key: 'category', header: 'Type', width: 6 },
|
|
229
|
+
],
|
|
230
|
+
data: outdated.slice(0, 30),
|
|
231
|
+
});
|
|
232
|
+
if (outdated.length > 30) {
|
|
233
|
+
output.writeln(output.dim(` ... and ${outdated.length - 30} more`));
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
if (checkSecurity) {
|
|
238
|
+
output.writeln();
|
|
239
|
+
output.writeln(output.bold('Security Audit'));
|
|
240
|
+
output.writeln(output.dim('-'.repeat(60)));
|
|
241
|
+
try {
|
|
242
|
+
const auditRaw = execSync('npm audit --json 2>/dev/null', { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
|
|
243
|
+
const audit = JSON.parse(auditRaw);
|
|
244
|
+
const vulns = audit.metadata?.vulnerabilities || audit.vulnerabilities || {};
|
|
245
|
+
const info = vulns.info || 0;
|
|
246
|
+
const low = vulns.low || 0;
|
|
247
|
+
const moderate = vulns.moderate || 0;
|
|
248
|
+
const high = vulns.high || 0;
|
|
249
|
+
const critical = vulns.critical || 0;
|
|
250
|
+
const totalVulns = info + low + moderate + high + critical;
|
|
251
|
+
if (totalVulns === 0) {
|
|
252
|
+
output.printSuccess('No known vulnerabilities found');
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
output.printTable({
|
|
256
|
+
columns: [
|
|
257
|
+
{ key: 'severity', header: 'Severity', width: 12 },
|
|
258
|
+
{ key: 'count', header: 'Count', width: 8, align: 'right' },
|
|
259
|
+
],
|
|
260
|
+
data: [
|
|
261
|
+
...(critical > 0 ? [{ severity: 'Critical', count: critical }] : []),
|
|
262
|
+
...(high > 0 ? [{ severity: 'High', count: high }] : []),
|
|
263
|
+
...(moderate > 0 ? [{ severity: 'Moderate', count: moderate }] : []),
|
|
264
|
+
...(low > 0 ? [{ severity: 'Low', count: low }] : []),
|
|
265
|
+
...(info > 0 ? [{ severity: 'Info', count: info }] : []),
|
|
266
|
+
{ severity: 'Total', count: totalVulns },
|
|
267
|
+
],
|
|
268
|
+
});
|
|
269
|
+
if (critical > 0 || high > 0) {
|
|
270
|
+
output.printWarning(`${critical + high} high/critical vulnerabilities found. Run 'npm audit' for details.`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
output.printWarning('npm audit failed. Ensure npm is available and node_modules is installed.');
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return { success: true };
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
282
|
+
output.printError(`Dependency analysis failed: ${message}`);
|
|
283
|
+
return { success: false, exitCode: 1 };
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
};
|
|
287
|
+
//# sourceMappingURL=analyze-imports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-imports.js","sourceRoot":"","sources":["../../../src/commands/analyze-imports.ts"],"names":[],"mappings":"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"}
|