codexia 0.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.
- package/CHANGELOG.md +111 -0
- package/LICENSE +663 -0
- package/README.md +392 -0
- package/dist/adapters/github/index.d.ts +66 -0
- package/dist/adapters/github/index.d.ts.map +1 -0
- package/dist/adapters/github/index.js +84 -0
- package/dist/adapters/github/index.js.map +1 -0
- package/dist/adapters/index.d.ts +5 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +5 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/cli/commands/changelog.d.ts +3 -0
- package/dist/cli/commands/changelog.d.ts.map +1 -0
- package/dist/cli/commands/changelog.js +221 -0
- package/dist/cli/commands/changelog.js.map +1 -0
- package/dist/cli/commands/check.d.ts +3 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +35 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/complexity.d.ts +3 -0
- package/dist/cli/commands/complexity.d.ts.map +1 -0
- package/dist/cli/commands/complexity.js +103 -0
- package/dist/cli/commands/complexity.js.map +1 -0
- package/dist/cli/commands/graph.d.ts +3 -0
- package/dist/cli/commands/graph.d.ts.map +1 -0
- package/dist/cli/commands/graph.js +46 -0
- package/dist/cli/commands/graph.js.map +1 -0
- package/dist/cli/commands/history.d.ts +3 -0
- package/dist/cli/commands/history.d.ts.map +1 -0
- package/dist/cli/commands/history.js +127 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/hotpaths.d.ts +3 -0
- package/dist/cli/commands/hotpaths.d.ts.map +1 -0
- package/dist/cli/commands/hotpaths.js +153 -0
- package/dist/cli/commands/hotpaths.js.map +1 -0
- package/dist/cli/commands/impact.d.ts +3 -0
- package/dist/cli/commands/impact.d.ts.map +1 -0
- package/dist/cli/commands/impact.js +37 -0
- package/dist/cli/commands/impact.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +167 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/invariants.d.ts +3 -0
- package/dist/cli/commands/invariants.d.ts.map +1 -0
- package/dist/cli/commands/invariants.js +176 -0
- package/dist/cli/commands/invariants.js.map +1 -0
- package/dist/cli/commands/mcp-server.d.ts +3 -0
- package/dist/cli/commands/mcp-server.d.ts.map +1 -0
- package/dist/cli/commands/mcp-server.js +64 -0
- package/dist/cli/commands/mcp-server.js.map +1 -0
- package/dist/cli/commands/monorepo.d.ts +3 -0
- package/dist/cli/commands/monorepo.d.ts.map +1 -0
- package/dist/cli/commands/monorepo.js +156 -0
- package/dist/cli/commands/monorepo.js.map +1 -0
- package/dist/cli/commands/pr-report.d.ts +3 -0
- package/dist/cli/commands/pr-report.d.ts.map +1 -0
- package/dist/cli/commands/pr-report.js +32 -0
- package/dist/cli/commands/pr-report.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +3 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +25 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/commands/signals.d.ts +3 -0
- package/dist/cli/commands/signals.d.ts.map +1 -0
- package/dist/cli/commands/signals.js +34 -0
- package/dist/cli/commands/signals.js.map +1 -0
- package/dist/cli/commands/tests.d.ts +3 -0
- package/dist/cli/commands/tests.d.ts.map +1 -0
- package/dist/cli/commands/tests.js +30 -0
- package/dist/cli/commands/tests.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +3 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +131 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/engine.d.ts +162 -0
- package/dist/cli/engine.d.ts.map +1 -0
- package/dist/cli/engine.js +564 -0
- package/dist/cli/engine.js.map +1 -0
- package/dist/cli/formatter.d.ts +39 -0
- package/dist/cli/formatter.d.ts.map +1 -0
- package/dist/cli/formatter.js +444 -0
- package/dist/cli/formatter.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +63 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/interactive.d.ts +7 -0
- package/dist/cli/interactive.d.ts.map +1 -0
- package/dist/cli/interactive.js +644 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/core/dependency-graph.d.ts +54 -0
- package/dist/core/dependency-graph.d.ts.map +1 -0
- package/dist/core/dependency-graph.js +190 -0
- package/dist/core/dependency-graph.js.map +1 -0
- package/dist/core/dependency-graph.test.d.ts +2 -0
- package/dist/core/dependency-graph.test.d.ts.map +1 -0
- package/dist/core/dependency-graph.test.js +106 -0
- package/dist/core/dependency-graph.test.js.map +1 -0
- package/dist/core/git-analyzer.d.ts +52 -0
- package/dist/core/git-analyzer.d.ts.map +1 -0
- package/dist/core/git-analyzer.js +250 -0
- package/dist/core/git-analyzer.js.map +1 -0
- package/dist/core/git-analyzer.test.d.ts +2 -0
- package/dist/core/git-analyzer.test.d.ts.map +1 -0
- package/dist/core/git-analyzer.test.js +71 -0
- package/dist/core/git-analyzer.test.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/repo-indexer.d.ts +57 -0
- package/dist/core/repo-indexer.d.ts.map +1 -0
- package/dist/core/repo-indexer.js +356 -0
- package/dist/core/repo-indexer.js.map +1 -0
- package/dist/core/repo-indexer.test.d.ts +2 -0
- package/dist/core/repo-indexer.test.d.ts.map +1 -0
- package/dist/core/repo-indexer.test.js +89 -0
- package/dist/core/repo-indexer.test.js.map +1 -0
- package/dist/core/signals-engine.d.ts +38 -0
- package/dist/core/signals-engine.d.ts.map +1 -0
- package/dist/core/signals-engine.js +142 -0
- package/dist/core/signals-engine.js.map +1 -0
- package/dist/core/signals-engine.test.d.ts +2 -0
- package/dist/core/signals-engine.test.d.ts.map +1 -0
- package/dist/core/signals-engine.test.js +129 -0
- package/dist/core/signals-engine.test.js.map +1 -0
- package/dist/core/symbol-map.d.ts +45 -0
- package/dist/core/symbol-map.d.ts.map +1 -0
- package/dist/core/symbol-map.js +187 -0
- package/dist/core/symbol-map.js.map +1 -0
- package/dist/core/types.d.ts +514 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/types.test.d.ts +2 -0
- package/dist/core/types.test.d.ts.map +1 -0
- package/dist/core/types.test.js +20 -0
- package/dist/core/types.test.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +89 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +549 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/modules/changelog-generator.d.ts +82 -0
- package/dist/modules/changelog-generator.d.ts.map +1 -0
- package/dist/modules/changelog-generator.js +350 -0
- package/dist/modules/changelog-generator.js.map +1 -0
- package/dist/modules/complexity-engine.d.ts +86 -0
- package/dist/modules/complexity-engine.d.ts.map +1 -0
- package/dist/modules/complexity-engine.js +355 -0
- package/dist/modules/complexity-engine.js.map +1 -0
- package/dist/modules/convention-checker.d.ts +24 -0
- package/dist/modules/convention-checker.d.ts.map +1 -0
- package/dist/modules/convention-checker.js +181 -0
- package/dist/modules/convention-checker.js.map +1 -0
- package/dist/modules/graph-utils.d.ts +38 -0
- package/dist/modules/graph-utils.d.ts.map +1 -0
- package/dist/modules/graph-utils.js +40 -0
- package/dist/modules/graph-utils.js.map +1 -0
- package/dist/modules/hot-path-detector.d.ts +105 -0
- package/dist/modules/hot-path-detector.d.ts.map +1 -0
- package/dist/modules/hot-path-detector.js +332 -0
- package/dist/modules/hot-path-detector.js.map +1 -0
- package/dist/modules/impact-analyzer.d.ts +40 -0
- package/dist/modules/impact-analyzer.d.ts.map +1 -0
- package/dist/modules/impact-analyzer.js +218 -0
- package/dist/modules/impact-analyzer.js.map +1 -0
- package/dist/modules/impact-analyzer.test.d.ts +2 -0
- package/dist/modules/impact-analyzer.test.d.ts.map +1 -0
- package/dist/modules/impact-analyzer.test.js +308 -0
- package/dist/modules/impact-analyzer.test.js.map +1 -0
- package/dist/modules/index.d.ts +14 -0
- package/dist/modules/index.d.ts.map +1 -0
- package/dist/modules/index.js +20 -0
- package/dist/modules/index.js.map +1 -0
- package/dist/modules/invariant-engine.d.ts +119 -0
- package/dist/modules/invariant-engine.d.ts.map +1 -0
- package/dist/modules/invariant-engine.js +457 -0
- package/dist/modules/invariant-engine.js.map +1 -0
- package/dist/modules/memory-loader.d.ts +34 -0
- package/dist/modules/memory-loader.d.ts.map +1 -0
- package/dist/modules/memory-loader.js +313 -0
- package/dist/modules/memory-loader.js.map +1 -0
- package/dist/modules/memory-loader.test.d.ts +2 -0
- package/dist/modules/memory-loader.test.d.ts.map +1 -0
- package/dist/modules/memory-loader.test.js +120 -0
- package/dist/modules/memory-loader.test.js.map +1 -0
- package/dist/modules/monorepo-analyzer.d.ts +141 -0
- package/dist/modules/monorepo-analyzer.d.ts.map +1 -0
- package/dist/modules/monorepo-analyzer.js +453 -0
- package/dist/modules/monorepo-analyzer.js.map +1 -0
- package/dist/modules/plugin-system.d.ts +144 -0
- package/dist/modules/plugin-system.d.ts.map +1 -0
- package/dist/modules/plugin-system.js +428 -0
- package/dist/modules/plugin-system.js.map +1 -0
- package/dist/modules/smart-test-prioritizer.d.ts +95 -0
- package/dist/modules/smart-test-prioritizer.d.ts.map +1 -0
- package/dist/modules/smart-test-prioritizer.js +328 -0
- package/dist/modules/smart-test-prioritizer.js.map +1 -0
- package/dist/modules/temporal-analyzer.d.ts +71 -0
- package/dist/modules/temporal-analyzer.d.ts.map +1 -0
- package/dist/modules/temporal-analyzer.js +301 -0
- package/dist/modules/temporal-analyzer.js.map +1 -0
- package/dist/modules/test-suggester.d.ts +22 -0
- package/dist/modules/test-suggester.d.ts.map +1 -0
- package/dist/modules/test-suggester.js +145 -0
- package/dist/modules/test-suggester.js.map +1 -0
- package/dist/modules/visualizer.d.ts +49 -0
- package/dist/modules/visualizer.d.ts.map +1 -0
- package/dist/modules/visualizer.js +302 -0
- package/dist/modules/visualizer.js.map +1 -0
- package/dist/modules/watcher.d.ts +82 -0
- package/dist/modules/watcher.d.ts.map +1 -0
- package/dist/modules/watcher.js +298 -0
- package/dist/modules/watcher.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { Formatter } from '../formatter.js';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
export const mcpServerCommand = new Command('mcp-server')
|
|
5
|
+
.description('Start MCP server for AI integration')
|
|
6
|
+
.option('-p, --port <port>', 'HTTP port (uses stdio if not specified)')
|
|
7
|
+
.option('--stdio', 'Use stdio transport (for direct MCP integration)')
|
|
8
|
+
.option('--tools <tools>', 'Comma-separated list of tools to enable')
|
|
9
|
+
.option('--verbose', 'Enable verbose logging')
|
|
10
|
+
.addHelpText('after', `
|
|
11
|
+
Examples:
|
|
12
|
+
$ codexia mcp-server Start with stdio (for Claude/etc)
|
|
13
|
+
$ codexia mcp-server --port 3000 Start HTTP server on port 3000
|
|
14
|
+
$ codexia mcp-server --tools scan,impact Enable specific tools only
|
|
15
|
+
|
|
16
|
+
Available MCP Tools:
|
|
17
|
+
- scan Scan repository and index all code
|
|
18
|
+
- impact Analyze change impact
|
|
19
|
+
- context Get intelligent context for a file
|
|
20
|
+
- validate Validate changes against conventions
|
|
21
|
+
- signals Get semantic signals
|
|
22
|
+
- tests Suggest affected tests
|
|
23
|
+
- dependencies Get dependency information
|
|
24
|
+
- hotpaths Analyze critical code paths
|
|
25
|
+
- complexity Get complexity metrics
|
|
26
|
+
- memory Access project memory
|
|
27
|
+
`)
|
|
28
|
+
.action(async (options, command) => {
|
|
29
|
+
const globalOpts = command.parent?.opts() || {};
|
|
30
|
+
const formatter = new Formatter(globalOpts.json);
|
|
31
|
+
try {
|
|
32
|
+
// Dynamic import to avoid loading MCP server when not needed
|
|
33
|
+
const { startMCPServer } = await import('../../mcp/server.js');
|
|
34
|
+
console.error(chalk.cyan('🤖 Starting Codexia MCP Server...\n'));
|
|
35
|
+
if (options.port) {
|
|
36
|
+
console.error(chalk.dim(`Mode: HTTP server on port ${options.port}`));
|
|
37
|
+
console.error(chalk.dim('Endpoint: POST /mcp\n'));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.error(chalk.dim('Mode: stdio (for direct MCP integration)'));
|
|
41
|
+
console.error(chalk.dim('Connect via stdin/stdout\n'));
|
|
42
|
+
}
|
|
43
|
+
if (options.tools) {
|
|
44
|
+
console.error(chalk.dim(`Enabled tools: ${options.tools}\n`));
|
|
45
|
+
}
|
|
46
|
+
// Start MCP server with appropriate transport
|
|
47
|
+
const transport = options.port ? 'http' : 'stdio';
|
|
48
|
+
await startMCPServer(transport, options.port);
|
|
49
|
+
// Keep process alive
|
|
50
|
+
if (options.port) {
|
|
51
|
+
console.error(chalk.green('✓ MCP Server running'));
|
|
52
|
+
console.error(chalk.dim(`\nExample request:
|
|
53
|
+
curl -X POST http://localhost:${options.port}/mcp \\
|
|
54
|
+
-H "Content-Type: application/json" \\
|
|
55
|
+
-d '{"method": "tools/call", "params": {"name": "codexia_scan"}}'
|
|
56
|
+
`));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error(formatter.formatError(error));
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC;KACtD,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,mBAAmB,EAAE,yCAAyC,CAAC;KACtE,MAAM,CAAC,SAAS,EAAE,kDAAkD,CAAC;KACrE,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;KACpE,MAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC;KAC7C,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;CAiBvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,6DAA6D;QAC7D,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAE/D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAEjE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,8CAA8C;QAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAClD,MAAM,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAE9C,qBAAqB;QACrB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;kCACE,OAAO,CAAC,IAAI;;;CAG7C,CAAC,CAAC,CAAC;QACE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAc,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monorepo.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/monorepo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,eAAe,SA0KxB,CAAC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { CodexiaEngine } from '../engine.js';
|
|
3
|
+
import { Formatter } from '../formatter.js';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
export const monorepoCommand = new Command('monorepo')
|
|
6
|
+
.description('Analyze monorepo structure and cross-package dependencies')
|
|
7
|
+
.option('--detect', 'Detect monorepo type and packages')
|
|
8
|
+
.option('--graph', 'Show package dependency graph')
|
|
9
|
+
.option('--impact <package>', 'Show impact on other packages')
|
|
10
|
+
.option('--shared', 'Analyze shared dependencies')
|
|
11
|
+
.option('--cycles', 'Detect circular dependencies between packages')
|
|
12
|
+
.option('--scope <packages>', 'Limit analysis to specific packages (comma-separated)')
|
|
13
|
+
.addHelpText('after', `
|
|
14
|
+
Examples:
|
|
15
|
+
$ codexia monorepo --detect Detect packages and structure
|
|
16
|
+
$ codexia monorepo --graph Show package dependency graph
|
|
17
|
+
$ codexia monorepo --impact @org/core Impact of changing core package
|
|
18
|
+
$ codexia monorepo --shared Analyze shared dependencies
|
|
19
|
+
$ codexia monorepo --cycles Find circular package dependencies
|
|
20
|
+
`)
|
|
21
|
+
.action(async (options, command) => {
|
|
22
|
+
const globalOpts = command.parent?.opts() || {};
|
|
23
|
+
const formatter = new Formatter(globalOpts.json);
|
|
24
|
+
try {
|
|
25
|
+
const engine = new CodexiaEngine();
|
|
26
|
+
await engine.initialize();
|
|
27
|
+
const scope = options.scope?.split(',');
|
|
28
|
+
const showAll = !options.detect && !options.graph && !options.impact && !options.shared && !options.cycles;
|
|
29
|
+
const analysis = await engine.analyzeMonorepo({
|
|
30
|
+
scope,
|
|
31
|
+
includeGraph: options.graph || showAll,
|
|
32
|
+
includeShared: options.shared || showAll,
|
|
33
|
+
includeCycles: options.cycles || showAll,
|
|
34
|
+
impactPackage: options.impact,
|
|
35
|
+
});
|
|
36
|
+
if (globalOpts.json) {
|
|
37
|
+
console.log(JSON.stringify(analysis, null, 2));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
console.log(chalk.bold.cyan('\n📦 Monorepo Analysis\n'));
|
|
41
|
+
console.log(chalk.dim('─'.repeat(80)));
|
|
42
|
+
// Detection
|
|
43
|
+
if (options.detect || showAll) {
|
|
44
|
+
console.log(chalk.bold('\n🔍 Monorepo Detection:\n'));
|
|
45
|
+
console.log(` Type: ${chalk.yellow(analysis.type || 'Not detected')}`);
|
|
46
|
+
console.log(` Root: ${chalk.dim(analysis.root)}`);
|
|
47
|
+
console.log(` Packages: ${chalk.yellow(analysis.packages.length)}`);
|
|
48
|
+
console.log(chalk.dim('\n Packages found:'));
|
|
49
|
+
for (const pkg of analysis.packages) {
|
|
50
|
+
const versionStr = pkg.version ? chalk.dim(` v${pkg.version}`) : '';
|
|
51
|
+
const privateStr = pkg.private ? chalk.dim(' (private)') : '';
|
|
52
|
+
console.log(` ${chalk.green('●')} ${chalk.cyan(pkg.name)}${versionStr}${privateStr}`);
|
|
53
|
+
console.log(chalk.dim(` ${pkg.path}`));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Dependency graph
|
|
57
|
+
if (options.graph || showAll) {
|
|
58
|
+
console.log(chalk.bold('\n🔗 Package Dependencies:\n'));
|
|
59
|
+
for (const pkg of analysis.packages) {
|
|
60
|
+
const deps = analysis.dependencies[pkg.name] || [];
|
|
61
|
+
const dependents = analysis.dependents[pkg.name] || [];
|
|
62
|
+
console.log(` ${chalk.cyan(pkg.name)}`);
|
|
63
|
+
if (deps.length > 0) {
|
|
64
|
+
console.log(chalk.dim(` depends on: ${deps.map((d) => chalk.yellow(d)).join(', ')}`));
|
|
65
|
+
}
|
|
66
|
+
if (dependents.length > 0) {
|
|
67
|
+
console.log(chalk.dim(` used by: ${dependents.map((d) => chalk.green(d)).join(', ')}`));
|
|
68
|
+
}
|
|
69
|
+
if (deps.length === 0 && dependents.length === 0) {
|
|
70
|
+
console.log(chalk.dim(' (no internal dependencies)'));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// ASCII graph
|
|
74
|
+
if (analysis.graph) {
|
|
75
|
+
console.log(chalk.bold('\n Dependency Graph:'));
|
|
76
|
+
console.log(chalk.dim(analysis.graph));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Shared dependencies
|
|
80
|
+
if (options.shared || showAll) {
|
|
81
|
+
console.log(chalk.bold('\n📚 Shared Dependencies:\n'));
|
|
82
|
+
if (analysis.sharedDeps?.length) {
|
|
83
|
+
const sorted = [...analysis.sharedDeps].sort((a, b) => b.usedBy.length - a.usedBy.length);
|
|
84
|
+
for (const dep of sorted.slice(0, 15)) {
|
|
85
|
+
const versionMismatch = dep.versions.length > 1;
|
|
86
|
+
const icon = versionMismatch ? chalk.yellow('⚠') : chalk.green('●');
|
|
87
|
+
console.log(` ${icon} ${chalk.cyan(dep.name)}`);
|
|
88
|
+
console.log(chalk.dim(` Used by ${dep.usedBy.length} packages: ${dep.usedBy.join(', ')}`));
|
|
89
|
+
if (versionMismatch) {
|
|
90
|
+
console.log(chalk.yellow(` ⚠ Version mismatch: ${dep.versions.join(', ')}`));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log(chalk.dim(' No shared dependencies found.'));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Circular dependencies
|
|
99
|
+
if (options.cycles || showAll) {
|
|
100
|
+
console.log(chalk.bold('\n🔄 Circular Dependencies:\n'));
|
|
101
|
+
if (analysis.cycles?.length) {
|
|
102
|
+
for (const cycle of analysis.cycles) {
|
|
103
|
+
console.log(` ${chalk.red('⚠')} ${cycle.map((c) => chalk.cyan(c)).join(' → ')} → ${chalk.cyan(cycle[0])}`);
|
|
104
|
+
}
|
|
105
|
+
console.log(chalk.yellow(`\n Found ${analysis.cycles.length} circular dependency chains.`));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
console.log(chalk.green(' ✓ No circular dependencies detected.'));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Impact analysis
|
|
112
|
+
if (options.impact) {
|
|
113
|
+
console.log(chalk.bold(`\n💥 Impact of ${options.impact}:\n`));
|
|
114
|
+
if (analysis.impact) {
|
|
115
|
+
console.log(` Direct dependents: ${chalk.yellow(analysis.impact.direct.length)}`);
|
|
116
|
+
for (const pkg of analysis.impact.direct) {
|
|
117
|
+
console.log(` ${chalk.green('●')} ${pkg}`);
|
|
118
|
+
}
|
|
119
|
+
console.log(` Transitive: ${chalk.yellow(analysis.impact.transitive.length)}`);
|
|
120
|
+
for (const pkg of analysis.impact.transitive) {
|
|
121
|
+
console.log(` ${chalk.dim('○')} ${pkg}`);
|
|
122
|
+
}
|
|
123
|
+
console.log(`\n Total blast radius: ${chalk.red(analysis.impact.direct.length + analysis.impact.transitive.length)} packages`);
|
|
124
|
+
if (analysis.impact.buildOrder) {
|
|
125
|
+
console.log(chalk.bold('\n Suggested build order:'));
|
|
126
|
+
for (let i = 0; i < analysis.impact.buildOrder.length; i++) {
|
|
127
|
+
console.log(` ${i + 1}. ${analysis.impact.buildOrder[i]}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
console.log(chalk.dim(` Package "${options.impact}" not found.`));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Summary
|
|
136
|
+
console.log(chalk.dim('\n─'.repeat(80)));
|
|
137
|
+
console.log(chalk.bold('\n📊 Summary:\n'));
|
|
138
|
+
console.log(` Monorepo type: ${chalk.yellow(analysis.type || 'Unknown')}`);
|
|
139
|
+
console.log(` Total packages: ${chalk.yellow(analysis.packages.length)}`);
|
|
140
|
+
console.log(` Internal dependencies: ${chalk.yellow(analysis.summary.internalDeps)}`);
|
|
141
|
+
console.log(` Shared external deps: ${chalk.yellow(analysis.summary.sharedDeps)}`);
|
|
142
|
+
console.log(` Circular dependencies: ${analysis.cycles?.length ? chalk.red(analysis.cycles.length) : chalk.green('0')}`);
|
|
143
|
+
if (analysis.recommendations?.length) {
|
|
144
|
+
console.log(chalk.bold('\n💡 Recommendations:\n'));
|
|
145
|
+
for (const rec of analysis.recommendations) {
|
|
146
|
+
console.log(` ${chalk.yellow('•')} ${rec}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
console.log();
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
console.error(formatter.formatError(error));
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=monorepo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monorepo.js","sourceRoot":"","sources":["../../../src/cli/commands/monorepo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-report.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pr-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,eAAe,SA6BxB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { CodexiaEngine } from '../engine.js';
|
|
3
|
+
import { Formatter } from '../formatter.js';
|
|
4
|
+
export const prReportCommand = new Command('pr-report')
|
|
5
|
+
.description('Generate a PR analysis report')
|
|
6
|
+
.option('-b, --base <ref>', 'Base ref for comparison')
|
|
7
|
+
.option('--head <ref>', 'Head ref for comparison')
|
|
8
|
+
.addHelpText('after', `
|
|
9
|
+
Examples:
|
|
10
|
+
$ codexia pr-report Generate report for latest commit
|
|
11
|
+
$ codexia pr-report -b main Generate report comparing to main
|
|
12
|
+
$ codexia pr-report --json Output as JSON for CI integration
|
|
13
|
+
`)
|
|
14
|
+
.action(async (options, command) => {
|
|
15
|
+
const globalOpts = command.parent?.opts() || {};
|
|
16
|
+
const isJson = globalOpts.json || globalOpts.format === 'json';
|
|
17
|
+
const isMarkdown = globalOpts.format === 'markdown';
|
|
18
|
+
const formatter = new Formatter(isJson, isMarkdown);
|
|
19
|
+
try {
|
|
20
|
+
const engine = new CodexiaEngine();
|
|
21
|
+
const report = await engine.generatePrReport({
|
|
22
|
+
base: options.base,
|
|
23
|
+
head: options.head,
|
|
24
|
+
});
|
|
25
|
+
console.log(formatter.formatPrReport(report));
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
console.error(formatter.formatError(error));
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=pr-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-report.js","sourceRoot":"","sources":["../../../src/cli/commands/pr-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KACpD,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,kBAAkB,EAAE,yBAAyB,CAAC;KACrD,MAAM,CAAC,cAAc,EAAE,yBAAyB,CAAC;KACjD,WAAW,CAAC,OAAO,EAAE;;;;;CAKvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC;IAC/D,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAEnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC;YAC3C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAc,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,WAAW,SAqBpB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { CodexiaEngine } from '../engine.js';
|
|
3
|
+
import { Formatter } from '../formatter.js';
|
|
4
|
+
export const scanCommand = new Command('scan')
|
|
5
|
+
.description('Scan and index the repository')
|
|
6
|
+
.addHelpText('after', `
|
|
7
|
+
Examples:
|
|
8
|
+
$ codexia scan Index the repository
|
|
9
|
+
$ codexia scan --json Output as JSON for CI pipelines
|
|
10
|
+
`)
|
|
11
|
+
.action(async (_options, command) => {
|
|
12
|
+
const globalOpts = command.parent?.opts() || {};
|
|
13
|
+
const formatter = new Formatter(globalOpts.json);
|
|
14
|
+
console.log('Scanning repository...');
|
|
15
|
+
try {
|
|
16
|
+
const engine = new CodexiaEngine();
|
|
17
|
+
const result = await engine.scan();
|
|
18
|
+
console.log(formatter.formatScan(result));
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
console.error(formatter.formatError(error));
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,+BAA+B,CAAC;KAC5C,WAAW,CAAC,OAAO,EAAE;;;;CAIvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAc,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,cAAc,SA+BvB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { CodexiaEngine } from '../engine.js';
|
|
3
|
+
import { Formatter } from '../formatter.js';
|
|
4
|
+
export const signalsCommand = new Command('signals')
|
|
5
|
+
.description('Detect code quality signals (orphan code, god classes, circular deps)')
|
|
6
|
+
.option('--orphans', 'Check for orphan (unused exported) code')
|
|
7
|
+
.option('--god-classes', 'Check for overly large files')
|
|
8
|
+
.option('--cycles', 'Check for circular dependencies')
|
|
9
|
+
.addHelpText('after', `
|
|
10
|
+
Examples:
|
|
11
|
+
$ codexia signals Run all signal checks
|
|
12
|
+
$ codexia signals --orphans Check for unused exports only
|
|
13
|
+
$ codexia signals --cycles Check for circular dependencies only
|
|
14
|
+
$ codexia signals --json Output as JSON for tooling
|
|
15
|
+
`)
|
|
16
|
+
.action(async (options, command) => {
|
|
17
|
+
const globalOpts = command.parent?.opts() || {};
|
|
18
|
+
const formatter = new Formatter(globalOpts.json);
|
|
19
|
+
console.log('Analyzing code signals...\n');
|
|
20
|
+
try {
|
|
21
|
+
const engine = new CodexiaEngine();
|
|
22
|
+
const signals = await engine.analyzeSignals({
|
|
23
|
+
checkOrphans: options.orphans ?? true,
|
|
24
|
+
checkGodClasses: options.godClasses ?? true,
|
|
25
|
+
checkCycles: options.cycles ?? true,
|
|
26
|
+
});
|
|
27
|
+
console.log(formatter.formatSignals(signals));
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error(formatter.formatError(error));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/cli/commands/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,uEAAuE,CAAC;KACpF,MAAM,CAAC,WAAW,EAAE,yCAAyC,CAAC;KAC9D,MAAM,CAAC,eAAe,EAAE,8BAA8B,CAAC;KACvD,MAAM,CAAC,UAAU,EAAE,iCAAiC,CAAC;KACrD,WAAW,CAAC,OAAO,EAAE;;;;;;CAMvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC;YAC1C,YAAY,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YACrC,eAAe,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;YAC3C,WAAW,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;SACpC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAc,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,YAAY,SA2BrB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { CodexiaEngine } from '../engine.js';
|
|
3
|
+
import { Formatter } from '../formatter.js';
|
|
4
|
+
export const testsCommand = new Command('tests')
|
|
5
|
+
.description('Suggest tests for changed code')
|
|
6
|
+
.option('-b, --base <ref>', 'Base ref for comparison', 'HEAD')
|
|
7
|
+
.option('--staged', 'Analyze only staged changes')
|
|
8
|
+
.addHelpText('after', `
|
|
9
|
+
Examples:
|
|
10
|
+
$ codexia tests Suggest tests for changed code
|
|
11
|
+
$ codexia tests --staged Suggest tests for staged changes
|
|
12
|
+
$ codexia tests -b main Suggest tests for changes since main
|
|
13
|
+
`)
|
|
14
|
+
.action(async (options, command) => {
|
|
15
|
+
const globalOpts = command.parent?.opts() || {};
|
|
16
|
+
const formatter = new Formatter(globalOpts.json);
|
|
17
|
+
try {
|
|
18
|
+
const engine = new CodexiaEngine();
|
|
19
|
+
const suggestions = await engine.suggestTests({
|
|
20
|
+
base: options.base,
|
|
21
|
+
staged: options.staged,
|
|
22
|
+
});
|
|
23
|
+
console.log(formatter.formatTests(suggestions));
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error(formatter.formatError(error));
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tests.js","sourceRoot":"","sources":["../../../src/cli/commands/tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,CAAC;KAC7D,MAAM,CAAC,UAAU,EAAE,6BAA6B,CAAC;KACjD,WAAW,CAAC,OAAO,EAAE;;;;;CAKvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAEnC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAc,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,YAAY,SAsIrB,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { CodexiaEngine } from '../engine.js';
|
|
6
|
+
import { Formatter } from '../formatter.js';
|
|
7
|
+
export const watchCommand = new Command('watch')
|
|
8
|
+
.description('Watch for file changes and re-run analysis')
|
|
9
|
+
.option('--signals', 'Run signals analysis on changes')
|
|
10
|
+
.option('--impact', 'Run impact analysis on changes')
|
|
11
|
+
.option('--check', 'Run convention check on changes')
|
|
12
|
+
.addHelpText('after', `
|
|
13
|
+
Examples:
|
|
14
|
+
$ codexia watch Watch and scan on changes
|
|
15
|
+
$ codexia watch --signals Watch and run signal analysis
|
|
16
|
+
$ codexia watch --impact Watch and run impact analysis
|
|
17
|
+
$ codexia watch --check Watch and run convention checks
|
|
18
|
+
`)
|
|
19
|
+
.action(async (options, command) => {
|
|
20
|
+
const globalOpts = command.parent?.opts() || {};
|
|
21
|
+
const formatter = new Formatter(globalOpts.json);
|
|
22
|
+
const cwd = process.cwd();
|
|
23
|
+
console.log(chalk.blue('👀') + ' Watching for changes...');
|
|
24
|
+
console.log(chalk.gray(` Directory: ${cwd}`));
|
|
25
|
+
console.log(chalk.gray(' Press Ctrl+C to stop\n'));
|
|
26
|
+
let engine = new CodexiaEngine();
|
|
27
|
+
let debounceTimer = null;
|
|
28
|
+
let isProcessing = false;
|
|
29
|
+
const runAnalysis = async (configChanged = false) => {
|
|
30
|
+
if (isProcessing)
|
|
31
|
+
return;
|
|
32
|
+
isProcessing = true;
|
|
33
|
+
try {
|
|
34
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
35
|
+
// Recreate engine if configuration files changed
|
|
36
|
+
if (configChanged) {
|
|
37
|
+
console.log(chalk.gray(`[${timestamp}]`) + ' Configuration changed, reloading engine...\n');
|
|
38
|
+
engine = new CodexiaEngine();
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.log(chalk.gray(`[${timestamp}]`) + ' Change detected, analyzing...\n');
|
|
42
|
+
}
|
|
43
|
+
if (options.signals) {
|
|
44
|
+
const signals = await engine.analyzeSignals({});
|
|
45
|
+
console.log(formatter.formatSignals(signals));
|
|
46
|
+
}
|
|
47
|
+
else if (options.impact) {
|
|
48
|
+
const impact = await engine.analyzeImpact({});
|
|
49
|
+
const diff = await engine.getDiff();
|
|
50
|
+
console.log(formatter.formatImpact(impact, diff));
|
|
51
|
+
}
|
|
52
|
+
else if (options.check) {
|
|
53
|
+
const violations = await engine.checkConventions({});
|
|
54
|
+
console.log(formatter.formatConventions(violations));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
const result = await engine.scan();
|
|
58
|
+
console.log(formatter.formatScan(result));
|
|
59
|
+
}
|
|
60
|
+
console.log(chalk.gray('Watching for changes...\n'));
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.error(formatter.formatError(error));
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
isProcessing = false;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
// Initial run
|
|
70
|
+
await runAnalysis(false);
|
|
71
|
+
// Set up file watcher - only watch specific source directories
|
|
72
|
+
const watchDirs = ['src', 'lib', 'app'].filter(dir => {
|
|
73
|
+
try {
|
|
74
|
+
return fs.statSync(path.join(cwd, dir)).isDirectory();
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
// Also watch .codexia directory if it exists for configuration changes
|
|
81
|
+
const codexiaDir = path.join(cwd, '.codexia');
|
|
82
|
+
let watchCodexia = false;
|
|
83
|
+
try {
|
|
84
|
+
if (fs.statSync(codexiaDir).isDirectory()) {
|
|
85
|
+
watchDirs.push('.codexia');
|
|
86
|
+
watchCodexia = true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// .codexia directory doesn't exist
|
|
91
|
+
}
|
|
92
|
+
const watchers = [];
|
|
93
|
+
for (const dir of watchDirs) {
|
|
94
|
+
try {
|
|
95
|
+
const watcher = fs.watch(path.join(cwd, dir), { recursive: true }, (_eventType, filename) => {
|
|
96
|
+
if (!filename)
|
|
97
|
+
return;
|
|
98
|
+
// Check if it's a .codexia configuration file change
|
|
99
|
+
const isConfigChange = watchCodexia &&
|
|
100
|
+
(filename.includes('.codexia') &&
|
|
101
|
+
(filename.endsWith('.md') || filename.endsWith('template.md')));
|
|
102
|
+
// Ignore certain files
|
|
103
|
+
if (filename.includes('node_modules') ||
|
|
104
|
+
filename.includes('.git') ||
|
|
105
|
+
filename.includes('.codexia/index-cache.json') ||
|
|
106
|
+
filename.includes('dist') ||
|
|
107
|
+
filename.endsWith('.log')) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// Debounce
|
|
111
|
+
if (debounceTimer) {
|
|
112
|
+
clearTimeout(debounceTimer);
|
|
113
|
+
}
|
|
114
|
+
debounceTimer = setTimeout(() => runAnalysis(isConfigChange), 300);
|
|
115
|
+
});
|
|
116
|
+
watchers.push(watcher);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Directory doesn't exist or can't be watched
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Handle Ctrl+C
|
|
123
|
+
process.on('SIGINT', () => {
|
|
124
|
+
console.log('\n' + chalk.yellow('Stopping watch mode...'));
|
|
125
|
+
for (const watcher of watchers) {
|
|
126
|
+
watcher.close();
|
|
127
|
+
}
|
|
128
|
+
process.exit(0);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"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"}
|