@yalehwang/archguard 0.1.6 → 0.1.8
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/README.md +90 -58
- package/dist/cli/analyze/normalize-to-diagrams.d.ts +5 -0
- package/dist/cli/analyze/normalize-to-diagrams.d.ts.map +1 -0
- package/dist/cli/analyze/normalize-to-diagrams.js +94 -0
- package/dist/cli/analyze/normalize-to-diagrams.js.map +1 -0
- package/dist/cli/analyze/run-analysis.d.ts +20 -0
- package/dist/cli/analyze/run-analysis.d.ts.map +1 -0
- package/dist/cli/analyze/run-analysis.js +150 -0
- package/dist/cli/analyze/run-analysis.js.map +1 -0
- package/dist/cli/cache/arch-json-disk-cache.d.ts.map +1 -1
- package/dist/cli/cache/arch-json-disk-cache.js +2 -1
- package/dist/cli/cache/arch-json-disk-cache.js.map +1 -1
- package/dist/cli/cache/diagram-manifest.d.ts +13 -0
- package/dist/cli/cache/diagram-manifest.d.ts.map +1 -0
- package/dist/cli/cache/diagram-manifest.js +60 -0
- package/dist/cli/cache/diagram-manifest.js.map +1 -0
- package/dist/cli/cache/render-hash-cache.d.ts +13 -0
- package/dist/cli/cache/render-hash-cache.d.ts.map +1 -0
- package/dist/cli/cache/render-hash-cache.js +39 -0
- package/dist/cli/cache/render-hash-cache.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +1 -4
- package/dist/cli/commands/analyze.d.ts.map +1 -1
- package/dist/cli/commands/analyze.js +26 -143
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/cache.d.ts.map +1 -1
- package/dist/cli/commands/cache.js +7 -0
- package/dist/cli/commands/cache.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +3 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +17 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/query.d.ts +3 -0
- package/dist/cli/commands/query.d.ts.map +1 -0
- package/dist/cli/commands/query.js +227 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp/analyze-tool.d.ts +6 -0
- package/dist/cli/mcp/analyze-tool.d.ts.map +1 -0
- package/dist/cli/mcp/analyze-tool.js +112 -0
- package/dist/cli/mcp/analyze-tool.js.map +1 -0
- package/dist/cli/mcp/mcp-server.d.ts +6 -0
- package/dist/cli/mcp/mcp-server.d.ts.map +1 -0
- package/dist/cli/mcp/mcp-server.js +165 -0
- package/dist/cli/mcp/mcp-server.js.map +1 -0
- package/dist/cli/processors/arch-json-provider.d.ts +38 -0
- package/dist/cli/processors/arch-json-provider.d.ts.map +1 -0
- package/dist/cli/processors/arch-json-provider.js +295 -0
- package/dist/cli/processors/arch-json-provider.js.map +1 -0
- package/dist/cli/processors/diagram-output-router.d.ts +26 -0
- package/dist/cli/processors/diagram-output-router.d.ts.map +1 -0
- package/dist/cli/processors/diagram-output-router.js +235 -0
- package/dist/cli/processors/diagram-output-router.js.map +1 -0
- package/dist/cli/processors/diagram-processor.d.ts +11 -22
- package/dist/cli/processors/diagram-processor.d.ts.map +1 -1
- package/dist/cli/processors/diagram-processor.js +37 -455
- package/dist/cli/processors/diagram-processor.js.map +1 -1
- package/dist/cli/progress.d.ts +22 -1
- package/dist/cli/progress.d.ts.map +1 -1
- package/dist/cli/progress.js +24 -0
- package/dist/cli/progress.js.map +1 -1
- package/dist/cli/query/arch-index-builder.d.ts +4 -0
- package/dist/cli/query/arch-index-builder.d.ts.map +1 -0
- package/dist/cli/query/arch-index-builder.js +126 -0
- package/dist/cli/query/arch-index-builder.js.map +1 -0
- package/dist/cli/query/arch-index.d.ts +17 -0
- package/dist/cli/query/arch-index.d.ts.map +1 -0
- package/dist/cli/query/arch-index.js +2 -0
- package/dist/cli/query/arch-index.js.map +1 -0
- package/dist/cli/query/engine-loader.d.ts +7 -0
- package/dist/cli/query/engine-loader.d.ts.map +1 -0
- package/dist/cli/query/engine-loader.js +98 -0
- package/dist/cli/query/engine-loader.js.map +1 -0
- package/dist/cli/query/query-artifacts.d.ts +7 -0
- package/dist/cli/query/query-artifacts.d.ts.map +1 -0
- package/dist/cli/query/query-artifacts.js +78 -0
- package/dist/cli/query/query-artifacts.js.map +1 -0
- package/dist/cli/query/query-engine.d.ts +49 -0
- package/dist/cli/query/query-engine.d.ts.map +1 -0
- package/dist/cli/query/query-engine.js +137 -0
- package/dist/cli/query/query-engine.js.map +1 -0
- package/dist/cli/query/query-manifest.d.ts +24 -0
- package/dist/cli/query/query-manifest.d.ts.map +1 -0
- package/dist/cli/query/query-manifest.js +2 -0
- package/dist/cli/query/query-manifest.js.map +1 -0
- package/dist/cli/utils/canonicalize-arch-json.d.ts +3 -0
- package/dist/cli/utils/canonicalize-arch-json.d.ts.map +1 -0
- package/dist/cli/utils/canonicalize-arch-json.js +81 -0
- package/dist/cli/utils/canonicalize-arch-json.js.map +1 -0
- package/dist/cli/utils/diagram-index-generator.d.ts.map +1 -1
- package/dist/cli/utils/diagram-index-generator.js +0 -5
- package/dist/cli/utils/diagram-index-generator.js.map +1 -1
- package/dist/cli/utils/project-structure-detector.d.ts.map +1 -1
- package/dist/cli/utils/project-structure-detector.js +0 -10
- package/dist/cli/utils/project-structure-detector.js.map +1 -1
- package/dist/mermaid/renderer.d.ts.map +1 -1
- package/dist/mermaid/renderer.js +34 -0
- package/dist/mermaid/renderer.js.map +1 -1
- package/dist/plugins/golang/atlas/index.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/index.js +3 -1
- package/dist/plugins/golang/atlas/index.js.map +1 -1
- package/dist/plugins/golang/atlas/types.d.ts +1 -0
- package/dist/plugins/golang/atlas/types.d.ts.map +1 -1
- package/dist/plugins/golang/index.d.ts.map +1 -1
- package/dist/plugins/golang/index.js +15 -6
- package/dist/plugins/golang/index.js.map +1 -1
- package/dist/plugins/golang/source-scope.d.ts +7 -0
- package/dist/plugins/golang/source-scope.d.ts.map +1 -0
- package/dist/plugins/golang/source-scope.js +83 -0
- package/dist/plugins/golang/source-scope.js.map +1 -0
- package/node_modules/node-addon-api/LICENSE.md +9 -0
- package/node_modules/node-addon-api/README.md +95 -0
- package/node_modules/node-addon-api/common.gypi +21 -0
- package/node_modules/node-addon-api/except.gypi +25 -0
- package/node_modules/node-addon-api/index.js +14 -0
- package/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
- package/node_modules/node-addon-api/napi-inl.h +7033 -0
- package/node_modules/node-addon-api/napi.h +3309 -0
- package/node_modules/node-addon-api/node_addon_api.gyp +42 -0
- package/node_modules/node-addon-api/node_api.gyp +9 -0
- package/node_modules/node-addon-api/noexcept.gypi +26 -0
- package/node_modules/node-addon-api/nothing.c +0 -0
- package/node_modules/node-addon-api/package-support.json +21 -0
- package/node_modules/node-addon-api/package.json +480 -0
- package/node_modules/node-addon-api/tools/README.md +73 -0
- package/node_modules/node-addon-api/tools/check-napi.js +99 -0
- package/node_modules/node-addon-api/tools/clang-format.js +71 -0
- package/node_modules/node-addon-api/tools/conversion.js +301 -0
- package/node_modules/node-gyp-build/LICENSE +21 -0
- package/node_modules/node-gyp-build/README.md +58 -0
- package/node_modules/node-gyp-build/SECURITY.md +5 -0
- package/node_modules/node-gyp-build/bin.js +84 -0
- package/node_modules/node-gyp-build/build-test.js +19 -0
- package/node_modules/node-gyp-build/index.js +6 -0
- package/node_modules/node-gyp-build/node-gyp-build.js +207 -0
- package/node_modules/node-gyp-build/optional.js +7 -0
- package/node_modules/node-gyp-build/package.json +43 -0
- package/node_modules/tree-sitter/LICENSE +21 -0
- package/node_modules/tree-sitter/README.md +128 -0
- package/node_modules/tree-sitter/binding.gyp +80 -0
- package/node_modules/tree-sitter/index.js +916 -0
- package/node_modules/tree-sitter/package.json +76 -0
- package/node_modules/tree-sitter/prebuilds/linux-x64/node.napi.glibc.node +0 -0
- package/node_modules/tree-sitter/src/addon_data.h +47 -0
- package/node_modules/tree-sitter/src/binding.cc +35 -0
- package/node_modules/tree-sitter/src/conversions.cc +140 -0
- package/node_modules/tree-sitter/src/conversions.h +22 -0
- package/node_modules/tree-sitter/src/language.cc +106 -0
- package/node_modules/tree-sitter/src/language.h +17 -0
- package/node_modules/tree-sitter/src/logger.cc +70 -0
- package/node_modules/tree-sitter/src/logger.h +19 -0
- package/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
- package/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
- package/node_modules/tree-sitter/src/node.cc +1088 -0
- package/node_modules/tree-sitter/src/node.h +30 -0
- package/node_modules/tree-sitter/src/parser.cc +306 -0
- package/node_modules/tree-sitter/src/parser.h +35 -0
- package/node_modules/tree-sitter/src/query.cc +397 -0
- package/node_modules/tree-sitter/src/query.h +40 -0
- package/node_modules/tree-sitter/src/tree.cc +316 -0
- package/node_modules/tree-sitter/src/tree.h +45 -0
- package/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
- package/node_modules/tree-sitter/src/tree_cursor.h +52 -0
- package/node_modules/tree-sitter/tree-sitter.d.ts +1042 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1478 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +291 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +523 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +293 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +293 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +483 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +54 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +12 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +875 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2293 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +286 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +239 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4350 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +911 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1034 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +399 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +170 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +717 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +11 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +75 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +24 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +113 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1314 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1935 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
- package/package.json +9 -2
- package/scripts/postinstall-tree-sitter.mjs +28 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { resolveArchDir, loadEngine, readManifest } from '../query/engine-loader.js';
|
|
3
|
+
export function createQueryCommand() {
|
|
4
|
+
return new Command('query')
|
|
5
|
+
.description('Query architecture entities and relationships')
|
|
6
|
+
.option('--arch-dir <dir>', 'ArchGuard work directory')
|
|
7
|
+
.option('--scope <key>', 'Query scope key')
|
|
8
|
+
.option('--format <type>', 'Output format: json|text', 'text')
|
|
9
|
+
.option('--verbose', 'Return full entities in JSON output instead of summary')
|
|
10
|
+
.option('--entity <name>', 'Find entity by name')
|
|
11
|
+
.option('--deps-of <name>', 'Find dependencies of entity')
|
|
12
|
+
.option('--used-by <name>', 'Find dependents of entity')
|
|
13
|
+
.option('--implementers-of <name>', 'Find implementers of interface')
|
|
14
|
+
.option('--subclasses-of <name>', 'Find subclasses of class')
|
|
15
|
+
.option('--file <path>', 'Find entities in file')
|
|
16
|
+
.option('--depth <n>', 'BFS depth for --deps-of/--used-by (1-5)', '1')
|
|
17
|
+
.option('--cycles', 'Show dependency cycles')
|
|
18
|
+
.option('--summary', 'Show scope summary')
|
|
19
|
+
.option('--list-scopes', 'List available query scopes')
|
|
20
|
+
.option('--type <entityType>', 'Filter entities by type')
|
|
21
|
+
.option('--high-coupling', 'Find high-coupling entities')
|
|
22
|
+
.option('--threshold <n>', 'Coupling threshold for --high-coupling', '8')
|
|
23
|
+
.option('--orphans', 'Find orphan entities (no relations)')
|
|
24
|
+
.option('--in-cycles', 'Find entities participating in cycles')
|
|
25
|
+
.action(queryHandler);
|
|
26
|
+
}
|
|
27
|
+
async function queryHandler(opts) {
|
|
28
|
+
try {
|
|
29
|
+
validateQueryOptions(opts);
|
|
30
|
+
if (opts.listScopes) {
|
|
31
|
+
await handleListScopes(opts);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const archDir = resolveArchDir(opts.archDir);
|
|
35
|
+
const engine = await loadEngine(archDir, opts.scope);
|
|
36
|
+
const isJson = opts.format === 'json';
|
|
37
|
+
const scopeEntry = engine.getScopeEntry();
|
|
38
|
+
let result;
|
|
39
|
+
if (opts.entity) {
|
|
40
|
+
const entities = engine.findEntity(opts.entity);
|
|
41
|
+
result = projectEntitiesForOutput(engine, entities, opts.verbose);
|
|
42
|
+
if (!isJson)
|
|
43
|
+
formatEntityList(entities, `Entities matching "${opts.entity}"`);
|
|
44
|
+
}
|
|
45
|
+
else if (opts.depsOf) {
|
|
46
|
+
const depth = parseBoundedInt(opts.depth, '--depth', 1, 5);
|
|
47
|
+
const entities = engine.getDependencies(opts.depsOf, depth);
|
|
48
|
+
result = projectEntitiesForOutput(engine, entities, opts.verbose);
|
|
49
|
+
if (!isJson)
|
|
50
|
+
formatEntityList(entities, `Dependencies of "${opts.depsOf}" (depth: ${depth})`);
|
|
51
|
+
}
|
|
52
|
+
else if (opts.usedBy) {
|
|
53
|
+
const depth = parseBoundedInt(opts.depth, '--depth', 1, 5);
|
|
54
|
+
const entities = engine.getDependents(opts.usedBy, depth);
|
|
55
|
+
result = projectEntitiesForOutput(engine, entities, opts.verbose);
|
|
56
|
+
if (!isJson)
|
|
57
|
+
formatEntityList(entities, `Dependents of "${opts.usedBy}" (depth: ${depth})`);
|
|
58
|
+
}
|
|
59
|
+
else if (opts.implementersOf) {
|
|
60
|
+
const entities = engine.findImplementers(opts.implementersOf);
|
|
61
|
+
result = projectEntitiesForOutput(engine, entities, opts.verbose);
|
|
62
|
+
if (!isJson)
|
|
63
|
+
formatEntityList(entities, `Implementers of "${opts.implementersOf}"`);
|
|
64
|
+
}
|
|
65
|
+
else if (opts.subclassesOf) {
|
|
66
|
+
const entities = engine.findSubclasses(opts.subclassesOf);
|
|
67
|
+
result = projectEntitiesForOutput(engine, entities, opts.verbose);
|
|
68
|
+
if (!isJson)
|
|
69
|
+
formatEntityList(entities, `Subclasses of "${opts.subclassesOf}"`);
|
|
70
|
+
}
|
|
71
|
+
else if (opts.file) {
|
|
72
|
+
const entities = engine.getFileEntities(opts.file);
|
|
73
|
+
result = projectEntitiesForOutput(engine, entities, opts.verbose);
|
|
74
|
+
if (!isJson)
|
|
75
|
+
formatEntityList(entities, `Entities in ${opts.file}`);
|
|
76
|
+
}
|
|
77
|
+
else if (opts.cycles) {
|
|
78
|
+
const cycles = engine.getCycles();
|
|
79
|
+
result = cycles;
|
|
80
|
+
if (!isJson)
|
|
81
|
+
formatCycles(cycles);
|
|
82
|
+
}
|
|
83
|
+
else if (opts.summary) {
|
|
84
|
+
const summary = engine.getSummary();
|
|
85
|
+
result = summary;
|
|
86
|
+
if (!isJson)
|
|
87
|
+
formatSummary(summary);
|
|
88
|
+
}
|
|
89
|
+
else if (opts.type) {
|
|
90
|
+
const entities = engine.findByType(opts.type);
|
|
91
|
+
result = projectEntitiesForOutput(engine, entities, opts.verbose);
|
|
92
|
+
if (!isJson)
|
|
93
|
+
formatEntityList(entities, `Entities of type "${opts.type}"`);
|
|
94
|
+
}
|
|
95
|
+
else if (opts.highCoupling) {
|
|
96
|
+
const threshold = parseBoundedInt(opts.threshold, '--threshold', 1);
|
|
97
|
+
const entities = engine.findHighCoupling(threshold);
|
|
98
|
+
result = projectEntitiesForOutput(engine, entities, opts.verbose);
|
|
99
|
+
if (!isJson)
|
|
100
|
+
formatEntityList(entities, `High-coupling entities (threshold: ${threshold})`);
|
|
101
|
+
}
|
|
102
|
+
else if (opts.orphans) {
|
|
103
|
+
const entities = engine.findOrphans();
|
|
104
|
+
result = projectEntitiesForOutput(engine, entities, opts.verbose);
|
|
105
|
+
if (!isJson)
|
|
106
|
+
formatEntityList(entities, 'Orphan entities (no relations)');
|
|
107
|
+
}
|
|
108
|
+
else if (opts.inCycles) {
|
|
109
|
+
const entities = engine.findInCycles();
|
|
110
|
+
result = projectEntitiesForOutput(engine, entities, opts.verbose);
|
|
111
|
+
if (!isJson)
|
|
112
|
+
formatEntityList(entities, 'Entities in dependency cycles');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
console.error('No query option specified. Use --help to see available options.');
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
if (isJson) {
|
|
119
|
+
console.log(JSON.stringify(result, null, 2));
|
|
120
|
+
}
|
|
121
|
+
if (scopeEntry.kind === 'derived' && !isJson) {
|
|
122
|
+
console.log('\n[Note: This scope is a derived (partial) view, not a complete project analysis.]');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
127
|
+
console.error(`Error: ${message}`);
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function validateQueryOptions(opts) {
|
|
132
|
+
const primaryOptions = [
|
|
133
|
+
opts.entity,
|
|
134
|
+
opts.depsOf,
|
|
135
|
+
opts.usedBy,
|
|
136
|
+
opts.implementersOf,
|
|
137
|
+
opts.subclassesOf,
|
|
138
|
+
opts.file,
|
|
139
|
+
opts.cycles,
|
|
140
|
+
opts.summary,
|
|
141
|
+
opts.listScopes,
|
|
142
|
+
opts.type,
|
|
143
|
+
opts.highCoupling,
|
|
144
|
+
opts.orphans,
|
|
145
|
+
opts.inCycles,
|
|
146
|
+
].filter(Boolean);
|
|
147
|
+
if (primaryOptions.length > 1) {
|
|
148
|
+
throw new Error('Specify exactly one primary query option.');
|
|
149
|
+
}
|
|
150
|
+
if (opts.depsOf || opts.usedBy) {
|
|
151
|
+
parseBoundedInt(opts.depth, '--depth', 1, 5);
|
|
152
|
+
}
|
|
153
|
+
if (opts.highCoupling) {
|
|
154
|
+
parseBoundedInt(opts.threshold, '--threshold', 1);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function parseBoundedInt(value, flagName, min, max) {
|
|
158
|
+
const parsed = Number(value);
|
|
159
|
+
if (!Number.isInteger(parsed) || parsed < min || (max !== undefined && parsed > max)) {
|
|
160
|
+
const range = max !== undefined ? ` (${min}-${max})` : ` (>= ${min})`;
|
|
161
|
+
throw new Error(`Invalid ${flagName}: "${value}". Expected an integer${range}.`);
|
|
162
|
+
}
|
|
163
|
+
return parsed;
|
|
164
|
+
}
|
|
165
|
+
function projectEntitiesForOutput(engine, entities, verbose) {
|
|
166
|
+
return verbose ? entities : entities.map((entity) => engine.toSummary(entity));
|
|
167
|
+
}
|
|
168
|
+
async function handleListScopes(opts) {
|
|
169
|
+
const archDir = resolveArchDir(opts.archDir);
|
|
170
|
+
const manifest = await readManifest(archDir);
|
|
171
|
+
if (opts.format === 'json') {
|
|
172
|
+
console.log(JSON.stringify(manifest.scopes, null, 2));
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (manifest.scopes.length === 0) {
|
|
176
|
+
console.log('No query scopes available. Run `archguard analyze` first.');
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
console.log('Available query scopes:\n');
|
|
180
|
+
for (const scope of manifest.scopes) {
|
|
181
|
+
console.log(` ${scope.key} (${scope.kind})`);
|
|
182
|
+
console.log(` Label: ${scope.label}`);
|
|
183
|
+
console.log(` Language: ${scope.language}`);
|
|
184
|
+
console.log(` Sources: ${scope.sources.join(', ')}`);
|
|
185
|
+
console.log(` Entities: ${scope.entityCount}, Relations: ${scope.relationCount}`);
|
|
186
|
+
console.log('');
|
|
187
|
+
}
|
|
188
|
+
console.log(`Total: ${manifest.scopes.length} scope(s)`);
|
|
189
|
+
}
|
|
190
|
+
function formatEntityList(entities, title) {
|
|
191
|
+
console.log(`${title}:\n`);
|
|
192
|
+
if (entities.length === 0) {
|
|
193
|
+
console.log(' (none)');
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
for (const e of entities) {
|
|
197
|
+
const loc = e.sourceLocation;
|
|
198
|
+
console.log(` ${e.name} (${e.type}) @ ${loc.file}:${loc.startLine}`);
|
|
199
|
+
}
|
|
200
|
+
console.log(`\n Total: ${entities.length}`);
|
|
201
|
+
}
|
|
202
|
+
function formatCycles(cycles) {
|
|
203
|
+
if (cycles.length === 0) {
|
|
204
|
+
console.log('No dependency cycles detected.');
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
console.log(`Found ${cycles.length} dependency cycle(s):\n`);
|
|
208
|
+
for (let i = 0; i < cycles.length; i++) {
|
|
209
|
+
const c = cycles[i];
|
|
210
|
+
console.log(` Cycle ${i + 1} (size ${c.size}): ${c.memberNames.join(' -> ')}`);
|
|
211
|
+
console.log(` Files: ${c.files.join(', ')}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function formatSummary(summary) {
|
|
215
|
+
console.log('Scope Summary:\n');
|
|
216
|
+
console.log(` Language: ${summary.language}`);
|
|
217
|
+
console.log(` Kind: ${summary.kind}`);
|
|
218
|
+
console.log(` Entities: ${summary.entityCount}`);
|
|
219
|
+
console.log(` Relations: ${summary.relationCount}`);
|
|
220
|
+
if (summary.topDependedOn.length > 0) {
|
|
221
|
+
console.log('\n Top depended-on:');
|
|
222
|
+
for (const item of summary.topDependedOn) {
|
|
223
|
+
console.log(` ${item.name}: ${item.dependentCount} dependents`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/cli/commands/query.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAiCrF,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;SACxB,WAAW,CAAC,+CAA+C,CAAC;SAG5D,MAAM,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;SACtD,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC;SAC1C,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,CAAC;SAC7D,MAAM,CAAC,WAAW,EAAE,wDAAwD,CAAC;SAG7E,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;SAChD,MAAM,CAAC,kBAAkB,EAAE,6BAA6B,CAAC;SACzD,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;SACvD,MAAM,CAAC,0BAA0B,EAAE,gCAAgC,CAAC;SACpE,MAAM,CAAC,wBAAwB,EAAE,0BAA0B,CAAC;SAC5D,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC;SAChD,MAAM,CAAC,aAAa,EAAE,yCAAyC,EAAE,GAAG,CAAC;SACrE,MAAM,CAAC,UAAU,EAAE,wBAAwB,CAAC;SAC5C,MAAM,CAAC,WAAW,EAAE,oBAAoB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;SAGtD,MAAM,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;SACxD,MAAM,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;SACxD,MAAM,CAAC,iBAAiB,EAAE,wCAAwC,EAAE,GAAG,CAAC;SACxE,MAAM,CAAC,WAAW,EAAE,qCAAqC,CAAC;SAC1D,MAAM,CAAC,aAAa,EAAE,uCAAuC,CAAC;SAE9D,MAAM,CAAC,YAAY,CAAC,CAAC;AAC1B,CAAC;AAKD,KAAK,UAAU,YAAY,CAAC,IAAkB;IAC5C,IAAI,CAAC;QACH,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAG3B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAGD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;QACtC,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;QAG1C,IAAI,MAAe,CAAC;QAEpB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM;gBAAE,gBAAgB,CAAC,QAAQ,EAAE,sBAAsB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChF,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5D,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM;gBAAE,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,IAAI,CAAC,MAAM,aAAa,KAAK,GAAG,CAAC,CAAC;QAChG,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC1D,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM;gBAAE,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,IAAI,CAAC,MAAM,aAAa,KAAK,GAAG,CAAC,CAAC;QAC9F,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC9D,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM;gBAAE,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACtF,CAAC;aAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1D,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM;gBAAE,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QAClF,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM;gBAAE,gBAAgB,CAAC,QAAQ,EAAE,eAAe,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YAClC,MAAM,GAAG,MAAM,CAAC;YAChB,IAAI,CAAC,MAAM;gBAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YACpC,MAAM,GAAG,OAAO,CAAC;YACjB,IAAI,CAAC,MAAM;gBAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM;gBAAE,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7E,CAAC;aAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACpD,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM;gBAAE,gBAAgB,CAAC,QAAQ,EAAE,sCAAsC,SAAS,GAAG,CAAC,CAAC;QAC9F,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YACtC,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM;gBAAE,gBAAgB,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CAAC;QAC5E,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YACvC,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM;gBAAE,gBAAgB,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAGD,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAkB;IAC9C,MAAM,cAAc,GAAG;QACrB,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,cAAc;QACnB,IAAI,CAAC,YAAY;QACjB,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,YAAY;QACjB,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,QAAQ;KACd,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAElB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/B,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,KAAa,EACb,QAAgB,EAChB,GAAW,EACX,GAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;QACrF,MAAM,KAAK,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,MAAM,KAAK,yBAAyB,KAAK,GAAG,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAC/B,MAAmB,EACnB,QAAkB,EAClB,OAA4B;IAE5B,OAAO,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACjF,CAAC;AAID,KAAK,UAAU,gBAAgB,CAAC,IAAkB;IAChD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,WAAW,gBAAgB,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,UAAU,QAAQ,CAAC,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC;AAC3D,CAAC;AAID,SAAS,gBAAgB,CAAC,QAAkB,EAAE,KAAa;IACzD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;IAC3B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,cAAc,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,YAAY,CAAC,MAAmB;IACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,MAAM,yBAAyB,CAAC,CAAC;IAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAA8C;IACnE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAErD,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,aAAa,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,SAAS,IAAI,OAAO,CAgBnC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -3,6 +3,8 @@ import { Command } from 'commander';
|
|
|
3
3
|
import { createAnalyzeCommand } from './commands/analyze.js';
|
|
4
4
|
import { createCacheCommand } from './commands/cache.js';
|
|
5
5
|
import { createInitCommand } from './commands/init.js';
|
|
6
|
+
import { createQueryCommand } from './commands/query.js';
|
|
7
|
+
import { createMcpCommand } from './commands/mcp.js';
|
|
6
8
|
import { createRequire } from 'module';
|
|
7
9
|
const require = createRequire(import.meta.url);
|
|
8
10
|
const packageJson = require('../../package.json');
|
|
@@ -15,6 +17,8 @@ export function createCLI() {
|
|
|
15
17
|
program.addCommand(createAnalyzeCommand());
|
|
16
18
|
program.addCommand(createCacheCommand());
|
|
17
19
|
program.addCommand(createInitCommand());
|
|
20
|
+
program.addCommand(createQueryCommand());
|
|
21
|
+
program.addCommand(createMcpCommand());
|
|
18
22
|
return program;
|
|
19
23
|
}
|
|
20
24
|
import * as fs from 'fs';
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAGvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAKlD,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,WAAW,CAAC;SACjB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;SAC5B,WAAW,CAAC,0EAA0E,CAAC,CAAC;IAG3F,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAGvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAKlD,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,WAAW,CAAC;SACjB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;SAC5B,WAAW,CAAC,0EAA0E,CAAC,CAAC;IAG3F,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAEvC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAK3B,MAAM,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClG,IAAI,MAAM,EAAE,CAAC;IACX,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
export interface AnalyzeToolContext {
|
|
3
|
+
defaultRoot: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function registerAnalyzeTool(server: McpServer, ctx: AnalyzeToolContext): void;
|
|
6
|
+
//# sourceMappingURL=analyze-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-tool.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/analyze-tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAkCD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,kBAAkB,GAAG,IAAI,CA4CpF"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { runAnalysis } from '../analyze/run-analysis.js';
|
|
4
|
+
import { StderrReporter } from '../progress.js';
|
|
5
|
+
const supportedAnalyzeLanguages = ['typescript', 'go', 'java', 'python', 'cpp'];
|
|
6
|
+
const analyzeLocks = new Set();
|
|
7
|
+
const analyzeSchema = {
|
|
8
|
+
projectRoot: z
|
|
9
|
+
.string()
|
|
10
|
+
.optional()
|
|
11
|
+
.describe('Root directory of the target project. Defaults to the MCP server startup cwd.'),
|
|
12
|
+
sources: z
|
|
13
|
+
.array(z.string())
|
|
14
|
+
.optional()
|
|
15
|
+
.describe('Source paths relative to the target project root. Omit to analyze the project root.'),
|
|
16
|
+
lang: z
|
|
17
|
+
.enum(supportedAnalyzeLanguages)
|
|
18
|
+
.optional()
|
|
19
|
+
.describe('Source code language plugin to use. Supported values: typescript, go, java, python, cpp. This is not a natural-language locale.'),
|
|
20
|
+
diagrams: z
|
|
21
|
+
.array(z.enum(['package', 'class', 'method']))
|
|
22
|
+
.optional()
|
|
23
|
+
.describe('Diagram levels to generate. Omit to use the detected/default set for the target sources.'),
|
|
24
|
+
format: z
|
|
25
|
+
.enum(['mermaid', 'json'])
|
|
26
|
+
.optional()
|
|
27
|
+
.describe('Output artifact format. Use json for query/index refresh without Mermaid rendering.'),
|
|
28
|
+
noCache: z
|
|
29
|
+
.boolean()
|
|
30
|
+
.default(false)
|
|
31
|
+
.describe('Disable analysis caches for this run.'),
|
|
32
|
+
};
|
|
33
|
+
export function registerAnalyzeTool(server, ctx) {
|
|
34
|
+
server.tool('archguard_analyze', 'Analyze project sources with an optional code-language plugin override and refresh query artifacts for the target project.', analyzeSchema, async ({ projectRoot, sources, lang, diagrams, format, noCache }) => {
|
|
35
|
+
const root = resolveRoot(projectRoot, ctx.defaultRoot);
|
|
36
|
+
const startedAt = Date.now();
|
|
37
|
+
try {
|
|
38
|
+
return await withPerProjectLock(root, async () => {
|
|
39
|
+
const normalizedSources = sources?.map((source) => path.resolve(root, source));
|
|
40
|
+
const result = await runAnalysis({
|
|
41
|
+
sessionRoot: root,
|
|
42
|
+
workDir: path.join(root, '.archguard'),
|
|
43
|
+
cliOptions: {
|
|
44
|
+
sources: normalizedSources,
|
|
45
|
+
lang,
|
|
46
|
+
diagrams,
|
|
47
|
+
format,
|
|
48
|
+
cache: noCache ? false : undefined,
|
|
49
|
+
},
|
|
50
|
+
reporter: new StderrReporter(),
|
|
51
|
+
});
|
|
52
|
+
if (result.queryScopesPersisted === 0) {
|
|
53
|
+
return textResponse('Analysis failed: No query scopes were persisted.\nPrevious query state is unchanged.');
|
|
54
|
+
}
|
|
55
|
+
return textResponse(formatAnalyzeResponse(result, {
|
|
56
|
+
elapsedMs: Date.now() - startedAt,
|
|
57
|
+
projectRoot: root,
|
|
58
|
+
}));
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
63
|
+
return textResponse(`Analysis failed: ${message}\nPrevious query state is unchanged.`);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function textResponse(text) {
|
|
68
|
+
return { content: [{ type: 'text', text }] };
|
|
69
|
+
}
|
|
70
|
+
function resolveRoot(projectRoot, defaultRoot) {
|
|
71
|
+
if (!projectRoot)
|
|
72
|
+
return defaultRoot;
|
|
73
|
+
return path.isAbsolute(projectRoot) ? projectRoot : path.resolve(defaultRoot, projectRoot);
|
|
74
|
+
}
|
|
75
|
+
async function withPerProjectLock(root, fn) {
|
|
76
|
+
const key = path.resolve(root);
|
|
77
|
+
if (analyzeLocks.has(key)) {
|
|
78
|
+
throw new Error(`An analysis is already running for ${key}. Wait for it to complete or analyze a different project.`);
|
|
79
|
+
}
|
|
80
|
+
analyzeLocks.add(key);
|
|
81
|
+
try {
|
|
82
|
+
return await fn();
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
analyzeLocks.delete(key);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function formatAnalyzeResponse(result, meta) {
|
|
89
|
+
const lines = [`Analysis completed in ${(meta.elapsedMs / 1000).toFixed(1)}s`, ''];
|
|
90
|
+
lines.push(`Project root: ${meta.projectRoot}`);
|
|
91
|
+
lines.push(`Work dir: ${result.config.workDir}`);
|
|
92
|
+
lines.push(`Output: ${result.config.outputDir}`);
|
|
93
|
+
lines.push(`Query: ${result.queryScopesPersisted} scopes written`);
|
|
94
|
+
if (result.results.length > 0) {
|
|
95
|
+
lines.push('', 'Diagrams:');
|
|
96
|
+
for (const diagram of result.results) {
|
|
97
|
+
if (diagram.success) {
|
|
98
|
+
lines.push(` - ${diagram.name} ok ${diagram.stats?.entities ?? 0} entities ${diagram.stats?.relations ?? 0} relations ${((diagram.stats?.parseTime ?? 0) / 1000).toFixed(1)}s`);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
lines.push(` - ${diagram.name} failed ${diagram.error ?? 'unknown error'}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (result.hasDiagramFailures) {
|
|
106
|
+
lines.push('', 'Warnings:');
|
|
107
|
+
lines.push(' - One or more diagrams failed, but query data was refreshed.');
|
|
108
|
+
}
|
|
109
|
+
lines.push('', 'Next step: call archguard_summary or another query tool.');
|
|
110
|
+
return lines.join('\n');
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=analyze-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-tool.js","sourceRoot":"","sources":["../../../src/cli/mcp/analyze-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
export declare function resolveRoot(projectRoot: string | undefined, defaultRoot: string): string;
|
|
3
|
+
export declare function createMcpServer(defaultRoot?: string): McpServer;
|
|
4
|
+
export declare function startMcpServer(defaultRoot?: string): Promise<void>;
|
|
5
|
+
export declare function registerTools(server: McpServer, defaultRoot: string): void;
|
|
6
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/mcp-server.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyBpE,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAGxF;AAqBD,wBAAgB,eAAe,CAAC,WAAW,GAAE,MAAsB,GAAG,SAAS,CAW9E;AASD,wBAAsB,cAAc,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOvF;AA4BD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAoJ1E"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { loadEngine } from '../query/engine-loader.js';
|
|
6
|
+
import { registerAnalyzeTool } from './analyze-tool.js';
|
|
7
|
+
const projectRootParam = z
|
|
8
|
+
.string()
|
|
9
|
+
.optional()
|
|
10
|
+
.describe('Root directory of the target project. Defaults to the MCP server startup cwd.');
|
|
11
|
+
const scopeParam = z
|
|
12
|
+
.string()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe('Query scope key, label fragment, or the synthetic alias "global". Omit to use manifest.globalScopeKey resolution.');
|
|
15
|
+
function textResponse(text) {
|
|
16
|
+
return { content: [{ type: 'text', text }] };
|
|
17
|
+
}
|
|
18
|
+
export function resolveRoot(projectRoot, defaultRoot) {
|
|
19
|
+
if (!projectRoot)
|
|
20
|
+
return defaultRoot;
|
|
21
|
+
return path.isAbsolute(projectRoot) ? projectRoot : path.resolve(defaultRoot, projectRoot);
|
|
22
|
+
}
|
|
23
|
+
async function withEngineErrorContext(root, fn) {
|
|
24
|
+
const archDir = path.join(root, '.archguard');
|
|
25
|
+
try {
|
|
26
|
+
return await fn();
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
30
|
+
if (message.includes('No query data found')) {
|
|
31
|
+
return textResponse(`No query data found at ${archDir}/query.\nRun archguard_analyze({ projectRoot: "${root}" }) first.`);
|
|
32
|
+
}
|
|
33
|
+
return textResponse(`Query failed for ${root}: ${message}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function createMcpServer(defaultRoot = process.cwd()) {
|
|
37
|
+
const server = new McpServer({
|
|
38
|
+
name: 'archguard',
|
|
39
|
+
version: '1.0.0',
|
|
40
|
+
});
|
|
41
|
+
registerTools(server, defaultRoot);
|
|
42
|
+
registerAnalyzeTool(server, {
|
|
43
|
+
defaultRoot,
|
|
44
|
+
});
|
|
45
|
+
return server;
|
|
46
|
+
}
|
|
47
|
+
export async function startMcpServer(defaultRoot = process.cwd()) {
|
|
48
|
+
const server = createMcpServer(defaultRoot);
|
|
49
|
+
const transport = new StdioServerTransport();
|
|
50
|
+
await server.connect(transport);
|
|
51
|
+
console.error('ArchGuard MCP server running on stdio');
|
|
52
|
+
}
|
|
53
|
+
function serializeEntities(entities) {
|
|
54
|
+
return JSON.stringify(entities, null, 2);
|
|
55
|
+
}
|
|
56
|
+
const verboseParam = z
|
|
57
|
+
.preprocess(v => (v === 'true' ? true : v === 'false' ? false : v), z.boolean().default(false))
|
|
58
|
+
.describe('Return full entities with members. Default false returns summary only.');
|
|
59
|
+
function applyView(engine, entities, verbose) {
|
|
60
|
+
const isVerbose = verbose === 'true' ? true : (verbose ?? false);
|
|
61
|
+
return isVerbose ? entities : entities.map(e => engine.toSummary(e));
|
|
62
|
+
}
|
|
63
|
+
export function registerTools(server, defaultRoot) {
|
|
64
|
+
server.tool('archguard_find_entity', 'Find architecture entities by exact name match', {
|
|
65
|
+
projectRoot: projectRootParam,
|
|
66
|
+
scope: scopeParam,
|
|
67
|
+
name: z.string().describe('Entity name to search for'),
|
|
68
|
+
verbose: verboseParam,
|
|
69
|
+
}, async ({ projectRoot, scope, name, verbose }) => {
|
|
70
|
+
const root = resolveRoot(projectRoot, defaultRoot);
|
|
71
|
+
return withEngineErrorContext(root, async () => {
|
|
72
|
+
const engine = await loadEngine(path.join(root, '.archguard'), scope);
|
|
73
|
+
const payload = applyView(engine, engine.findEntity(name), verbose);
|
|
74
|
+
return textResponse(serializeEntities(payload));
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
server.tool('archguard_get_dependencies', 'Get dependencies of a named entity (what it depends on)', {
|
|
78
|
+
projectRoot: projectRootParam,
|
|
79
|
+
scope: scopeParam,
|
|
80
|
+
name: z.string().describe('Entity name'),
|
|
81
|
+
depth: z.coerce.number().min(1).max(5).default(1).describe('BFS traversal depth (1-5)'),
|
|
82
|
+
verbose: verboseParam,
|
|
83
|
+
}, async ({ projectRoot, scope, name, depth, verbose }) => {
|
|
84
|
+
const root = resolveRoot(projectRoot, defaultRoot);
|
|
85
|
+
return withEngineErrorContext(root, async () => {
|
|
86
|
+
const engine = await loadEngine(path.join(root, '.archguard'), scope);
|
|
87
|
+
const payload = applyView(engine, engine.getDependencies(name, depth), verbose);
|
|
88
|
+
return textResponse(serializeEntities(payload));
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
server.tool('archguard_get_dependents', 'Get dependents of a named entity (what depends on it)', {
|
|
92
|
+
projectRoot: projectRootParam,
|
|
93
|
+
scope: scopeParam,
|
|
94
|
+
name: z.string().describe('Entity name'),
|
|
95
|
+
depth: z.coerce.number().min(1).max(5).default(1).describe('BFS traversal depth (1-5)'),
|
|
96
|
+
verbose: verboseParam,
|
|
97
|
+
}, async ({ projectRoot, scope, name, depth, verbose }) => {
|
|
98
|
+
const root = resolveRoot(projectRoot, defaultRoot);
|
|
99
|
+
return withEngineErrorContext(root, async () => {
|
|
100
|
+
const engine = await loadEngine(path.join(root, '.archguard'), scope);
|
|
101
|
+
const payload = applyView(engine, engine.getDependents(name, depth), verbose);
|
|
102
|
+
return textResponse(serializeEntities(payload));
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
server.tool('archguard_find_implementers', 'Find classes that implement a given interface', {
|
|
106
|
+
projectRoot: projectRootParam,
|
|
107
|
+
scope: scopeParam,
|
|
108
|
+
name: z.string().describe('Interface name'),
|
|
109
|
+
verbose: verboseParam,
|
|
110
|
+
}, async ({ projectRoot, scope, name, verbose }) => {
|
|
111
|
+
const root = resolveRoot(projectRoot, defaultRoot);
|
|
112
|
+
return withEngineErrorContext(root, async () => {
|
|
113
|
+
const engine = await loadEngine(path.join(root, '.archguard'), scope);
|
|
114
|
+
const payload = applyView(engine, engine.findImplementers(name), verbose);
|
|
115
|
+
return textResponse(serializeEntities(payload));
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
server.tool('archguard_find_subclasses', 'Find subclasses of a given class', {
|
|
119
|
+
projectRoot: projectRootParam,
|
|
120
|
+
scope: scopeParam,
|
|
121
|
+
name: z.string().describe('Class name'),
|
|
122
|
+
verbose: verboseParam,
|
|
123
|
+
}, async ({ projectRoot, scope, name, verbose }) => {
|
|
124
|
+
const root = resolveRoot(projectRoot, defaultRoot);
|
|
125
|
+
return withEngineErrorContext(root, async () => {
|
|
126
|
+
const engine = await loadEngine(path.join(root, '.archguard'), scope);
|
|
127
|
+
const payload = applyView(engine, engine.findSubclasses(name), verbose);
|
|
128
|
+
return textResponse(serializeEntities(payload));
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
server.tool('archguard_get_file_entities', 'Get all entities defined in a specific file', {
|
|
132
|
+
projectRoot: projectRootParam,
|
|
133
|
+
scope: scopeParam,
|
|
134
|
+
filePath: z.string().describe('Source file path (e.g. "cli/query/query-engine.ts")'),
|
|
135
|
+
verbose: verboseParam,
|
|
136
|
+
}, async ({ projectRoot, scope, filePath, verbose }) => {
|
|
137
|
+
const root = resolveRoot(projectRoot, defaultRoot);
|
|
138
|
+
return withEngineErrorContext(root, async () => {
|
|
139
|
+
const engine = await loadEngine(path.join(root, '.archguard'), scope);
|
|
140
|
+
const payload = applyView(engine, engine.getFileEntities(filePath), verbose);
|
|
141
|
+
return textResponse(serializeEntities(payload));
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
server.tool('archguard_detect_cycles', 'Detect dependency cycles in the architecture', {
|
|
145
|
+
projectRoot: projectRootParam,
|
|
146
|
+
scope: scopeParam,
|
|
147
|
+
}, async ({ projectRoot, scope }) => {
|
|
148
|
+
const root = resolveRoot(projectRoot, defaultRoot);
|
|
149
|
+
return withEngineErrorContext(root, async () => {
|
|
150
|
+
const engine = await loadEngine(path.join(root, '.archguard'), scope);
|
|
151
|
+
return textResponse(JSON.stringify(engine.getCycles(), null, 2));
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
server.tool('archguard_summary', 'Get a summary of the architecture scope', {
|
|
155
|
+
projectRoot: projectRootParam,
|
|
156
|
+
scope: scopeParam,
|
|
157
|
+
}, async ({ projectRoot, scope }) => {
|
|
158
|
+
const root = resolveRoot(projectRoot, defaultRoot);
|
|
159
|
+
return withEngineErrorContext(root, async () => {
|
|
160
|
+
const engine = await loadEngine(path.join(root, '.archguard'), scope);
|
|
161
|
+
return textResponse(JSON.stringify(engine.getSummary(), null, 2));
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/cli/mcp/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ParseCache } from '../../parser/parse-cache.js';
|
|
2
|
+
import type { DiagramConfig, GlobalConfig } from '../../types/config.js';
|
|
3
|
+
import type { ArchJSON } from '../../types/index.js';
|
|
4
|
+
import type { PluginRegistry } from '../../core/plugin-registry.js';
|
|
5
|
+
export interface ArchJsonProviderOptions {
|
|
6
|
+
globalConfig: GlobalConfig;
|
|
7
|
+
parseCache?: ParseCache;
|
|
8
|
+
registry?: PluginRegistry;
|
|
9
|
+
}
|
|
10
|
+
export interface ArchJsonGetOptions {
|
|
11
|
+
needsModuleGraph: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function hashSources(sources: string[]): string;
|
|
14
|
+
export declare function deriveSubModuleArchJSON(parent: ArchJSON, subPath: string, workspaceRoot?: string): ArchJSON;
|
|
15
|
+
export declare class ArchJsonProvider {
|
|
16
|
+
private readonly globalConfig;
|
|
17
|
+
private readonly parseCache?;
|
|
18
|
+
private readonly registry?;
|
|
19
|
+
private readonly fileDiscovery;
|
|
20
|
+
private readonly archJsonDiskCache;
|
|
21
|
+
private archJsonCache;
|
|
22
|
+
private archJsonPathIndex;
|
|
23
|
+
private archJsonDeferred;
|
|
24
|
+
constructor(options: ArchJsonProviderOptions);
|
|
25
|
+
cacheSize(): number;
|
|
26
|
+
get(diagram: DiagramConfig, opts: ArchJsonGetOptions): Promise<{
|
|
27
|
+
archJson: ArchJSON;
|
|
28
|
+
kind: 'parsed' | 'derived';
|
|
29
|
+
}>;
|
|
30
|
+
private cacheArchJson;
|
|
31
|
+
private registerDeferred;
|
|
32
|
+
private findParentCoverage;
|
|
33
|
+
private parseGoProject;
|
|
34
|
+
private parseCppProject;
|
|
35
|
+
private parseTsPlugin;
|
|
36
|
+
private parseWithParallelParser;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=arch-json-provider.d.ts.map
|