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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "archtracker-mcp",
3
- "version": "0.3.2",
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": {
@@ -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
- }
@@ -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);