archtracker-mcp 0.3.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -4
- package/dist/cli/index.js +105 -140
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +2 -9
- package/dist/index.js +59 -128
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.js +64 -131
- package/dist/mcp/index.js.map +1 -1
- package/package.json +4 -6
- package/scripts/postinstall.cjs +0 -45
- package/scripts/screenshot.mjs +0 -121
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "archtracker-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Architecture & Dependency Tracker — MCP server + CLI + interactive web viewer for AI-driven development",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
17
|
"bin": {
|
|
18
|
-
"archtracker": "dist/cli/index.js"
|
|
18
|
+
"archtracker": "dist/cli/index.js",
|
|
19
|
+
"archtracker-mcp": "dist/mcp/index.js"
|
|
19
20
|
},
|
|
20
21
|
"files": [
|
|
21
22
|
"dist",
|
|
22
|
-
"skills"
|
|
23
|
-
"scripts"
|
|
23
|
+
"skills"
|
|
24
24
|
],
|
|
25
25
|
"scripts": {
|
|
26
26
|
"build": "tsup",
|
|
@@ -28,7 +28,6 @@
|
|
|
28
28
|
"test": "vitest run",
|
|
29
29
|
"test:watch": "vitest",
|
|
30
30
|
"typecheck": "tsc --noEmit",
|
|
31
|
-
"postinstall": "node scripts/postinstall.cjs",
|
|
32
31
|
"prepublishOnly": "npm run build"
|
|
33
32
|
},
|
|
34
33
|
"keywords": [
|
|
@@ -81,7 +80,6 @@
|
|
|
81
80
|
"dependencies": {
|
|
82
81
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
83
82
|
"commander": "^14.0.3",
|
|
84
|
-
"dependency-cruiser": "^17.3.8",
|
|
85
83
|
"zod": "^4.3.6"
|
|
86
84
|
},
|
|
87
85
|
"devDependencies": {
|
package/scripts/postinstall.cjs
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Patch dependency-cruiser's CJS files that use Node.js subpath imports (#*)
|
|
3
|
-
* which fail on Windows + Node.js v22 due to CJS loader not resolving
|
|
4
|
-
* the imports field correctly.
|
|
5
|
-
*
|
|
6
|
-
* See: https://github.com/sverweij/dependency-cruiser/issues/XXXX
|
|
7
|
-
*/
|
|
8
|
-
const fs = require("node:fs");
|
|
9
|
-
const path = require("node:path");
|
|
10
|
-
|
|
11
|
-
const TARGET = path.join(
|
|
12
|
-
__dirname,
|
|
13
|
-
"..",
|
|
14
|
-
"node_modules",
|
|
15
|
-
"dependency-cruiser",
|
|
16
|
-
"src",
|
|
17
|
-
"extract",
|
|
18
|
-
"transpile",
|
|
19
|
-
"vue-template-wrap.cjs"
|
|
20
|
-
);
|
|
21
|
-
|
|
22
|
-
if (fs.existsSync(TARGET)) {
|
|
23
|
-
let content = fs.readFileSync(TARGET, "utf8");
|
|
24
|
-
let patched = false;
|
|
25
|
-
|
|
26
|
-
if (content.includes('require("#utl/try-require.cjs")')) {
|
|
27
|
-
content = content.replace(
|
|
28
|
-
'require("#utl/try-require.cjs")',
|
|
29
|
-
'require("../../utl/try-require.cjs")'
|
|
30
|
-
);
|
|
31
|
-
patched = true;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
if (content.includes('require("#meta.cjs")')) {
|
|
35
|
-
content = content.replace(
|
|
36
|
-
'require("#meta.cjs")',
|
|
37
|
-
'require("../../meta.cjs")'
|
|
38
|
-
);
|
|
39
|
-
patched = true;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
if (patched) {
|
|
43
|
-
fs.writeFileSync(TARGET, content);
|
|
44
|
-
}
|
|
45
|
-
}
|
package/scripts/screenshot.mjs
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { chromium } from "playwright";
|
|
2
|
-
import { join, dirname } from "path";
|
|
3
|
-
import { fileURLToPath } from "url";
|
|
4
|
-
|
|
5
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
-
const SCREENSHOTS_DIR = join(__dirname, "..", "docs", "screenshots");
|
|
7
|
-
const URL = "http://localhost:54999";
|
|
8
|
-
|
|
9
|
-
async function main() {
|
|
10
|
-
const browser = await chromium.launch();
|
|
11
|
-
const context = await browser.newContext({
|
|
12
|
-
viewport: { width: 1440, height: 900 },
|
|
13
|
-
deviceScaleFactor: 2,
|
|
14
|
-
});
|
|
15
|
-
const page = await context.newPage();
|
|
16
|
-
|
|
17
|
-
// --- Graph View (Dark theme - default) ---
|
|
18
|
-
await page.goto(URL);
|
|
19
|
-
await page.waitForTimeout(3000); // wait for D3 simulation to stabilize
|
|
20
|
-
await page.screenshot({
|
|
21
|
-
path: join(SCREENSHOTS_DIR, "graph-view-dark.png"),
|
|
22
|
-
fullPage: false,
|
|
23
|
-
});
|
|
24
|
-
console.log("✓ graph-view-dark.png");
|
|
25
|
-
|
|
26
|
-
// --- Graph View (Light theme) ---
|
|
27
|
-
// Open settings and toggle theme
|
|
28
|
-
const settingsBtn = page.locator("#settings-btn");
|
|
29
|
-
if (await settingsBtn.isVisible()) {
|
|
30
|
-
await settingsBtn.click();
|
|
31
|
-
await page.waitForTimeout(500);
|
|
32
|
-
}
|
|
33
|
-
const themeToggle = page.locator("#theme-toggle");
|
|
34
|
-
if (await themeToggle.isVisible()) {
|
|
35
|
-
await themeToggle.click();
|
|
36
|
-
await page.waitForTimeout(1000);
|
|
37
|
-
}
|
|
38
|
-
// Close settings panel by clicking settings button again
|
|
39
|
-
if (await settingsBtn.isVisible()) {
|
|
40
|
-
await settingsBtn.click();
|
|
41
|
-
await page.waitForTimeout(500);
|
|
42
|
-
}
|
|
43
|
-
await page.screenshot({
|
|
44
|
-
path: join(SCREENSHOTS_DIR, "graph-view-light.png"),
|
|
45
|
-
fullPage: false,
|
|
46
|
-
});
|
|
47
|
-
console.log("✓ graph-view-light.png");
|
|
48
|
-
|
|
49
|
-
// Switch back to dark
|
|
50
|
-
if (await settingsBtn.isVisible()) {
|
|
51
|
-
await settingsBtn.click();
|
|
52
|
-
await page.waitForTimeout(500);
|
|
53
|
-
}
|
|
54
|
-
if (await themeToggle.isVisible()) {
|
|
55
|
-
await themeToggle.click();
|
|
56
|
-
await page.waitForTimeout(500);
|
|
57
|
-
}
|
|
58
|
-
if (await settingsBtn.isVisible()) {
|
|
59
|
-
await settingsBtn.click();
|
|
60
|
-
await page.waitForTimeout(500);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// --- Hierarchy View ---
|
|
64
|
-
const hierTab = page.locator('[data-view="hier-view"]');
|
|
65
|
-
if (await hierTab.isVisible()) {
|
|
66
|
-
await hierTab.click();
|
|
67
|
-
await page.waitForTimeout(2000);
|
|
68
|
-
await page.screenshot({
|
|
69
|
-
path: join(SCREENSHOTS_DIR, "hierarchy-view.png"),
|
|
70
|
-
fullPage: false,
|
|
71
|
-
});
|
|
72
|
-
console.log("✓ hierarchy-view.png");
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// --- Diff View (if available) ---
|
|
76
|
-
const diffTab = page.locator("#diff-tab");
|
|
77
|
-
if (await diffTab.isVisible()) {
|
|
78
|
-
await diffTab.click();
|
|
79
|
-
await page.waitForTimeout(2000);
|
|
80
|
-
await page.screenshot({
|
|
81
|
-
path: join(SCREENSHOTS_DIR, "diff-view.png"),
|
|
82
|
-
fullPage: false,
|
|
83
|
-
});
|
|
84
|
-
console.log("✓ diff-view.png");
|
|
85
|
-
} else {
|
|
86
|
-
console.log("⊘ diff-view (no diff data, skipped)");
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// --- Graph View with Impact Mode ---
|
|
90
|
-
const graphTab = page.locator('[data-view="graph-view"]');
|
|
91
|
-
await graphTab.click();
|
|
92
|
-
await page.waitForTimeout(1500);
|
|
93
|
-
|
|
94
|
-
// Enable impact mode
|
|
95
|
-
const impactBtn = page.locator("#impact-btn");
|
|
96
|
-
if (await impactBtn.isVisible()) {
|
|
97
|
-
await impactBtn.click();
|
|
98
|
-
await page.waitForTimeout(500);
|
|
99
|
-
|
|
100
|
-
// Click on a node to trigger impact simulation
|
|
101
|
-
// Find a node in the SVG and click it
|
|
102
|
-
const nodes = page.locator("#graph-view svg circle");
|
|
103
|
-
const count = await nodes.count();
|
|
104
|
-
if (count > 0) {
|
|
105
|
-
// Click on a node near the center area
|
|
106
|
-
const targetIdx = Math.min(2, count - 1);
|
|
107
|
-
await nodes.nth(targetIdx).click({ force: true });
|
|
108
|
-
await page.waitForTimeout(1500);
|
|
109
|
-
}
|
|
110
|
-
await page.screenshot({
|
|
111
|
-
path: join(SCREENSHOTS_DIR, "impact-simulation.png"),
|
|
112
|
-
fullPage: false,
|
|
113
|
-
});
|
|
114
|
-
console.log("✓ impact-simulation.png");
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
await browser.close();
|
|
118
|
-
console.log("\nAll screenshots saved to docs/screenshots/");
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
main().catch(console.error);
|