archtracker-mcp 0.6.0 → 0.7.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/README.md CHANGED
@@ -1,3 +1,7 @@
1
+ <p align="right">
2
+ <a href="README.ja.md">🇯🇵 日本語</a>
3
+ </p>
4
+
1
5
  <p align="center">
2
6
  <img src="https://img.shields.io/badge/MCP-Compatible-blue?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNWwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiIvPjwvc3ZnPg==" alt="MCP Compatible">
3
7
  <img src="https://img.shields.io/npm/v/archtracker-mcp?style=for-the-badge&color=cb3837&logo=npm" alt="npm version">
@@ -19,8 +23,7 @@
19
23
  <a href="#multi-layer-architecture">Multi-Layer</a> &bull;
20
24
  <a href="#web-viewer">Web Viewer</a> &bull;
21
25
  <a href="#mcp-tools">MCP Tools</a> &bull;
22
- <a href="#cli-commands">CLI</a> &bull;
23
- <a href="#日本語">日本語</a>
26
+ <a href="#cli-commands">CLI</a>
24
27
  </p>
25
28
 
26
29
  ---
@@ -42,11 +45,12 @@ When AI agents modify code, they **miss cascading impacts**:
42
45
  ## Features
43
46
 
44
47
  - **Dependency Graph Analysis** — Regex-based static analysis for **13 languages** (JS/TS, Python, Rust, Go, Java, C/C++, C#, Ruby, PHP, Swift, Kotlin, Dart, Scala)
45
- - **Multi-Layer Architecture** — Analyze multiple services/layers as a unified graph with cross-layer connection detection (NEW in v0.5.0)
48
+ - **Multi-Layer Architecture** — Analyze multiple services/layers as a unified graph with cross-layer connection detection
46
49
  - **Interactive Web Viewer** — Force-directed graph with convex hull layer grouping, hierarchy diagram, diff view with D3.js
50
+ - **Security Hardened** — XSS-safe HTML escaping, path traversal protection on all MCP tools (v0.6.0)
47
51
  - **Impact Simulation** — Click any file to visualize transitive dependents (BFS traversal)
48
52
  - **Snapshot Diffing** — Save architecture snapshots and detect drift over time
49
- - **MCP Server** — 5 tools for Claude Code / AI agents via Model Context Protocol
53
+ - **MCP Server** — 6 tools for Claude Code / AI agents via Model Context Protocol
50
54
  - **Claude Code Skills** — 6 slash commands (`/arch-check`, `/arch-snapshot`, `/arch-serve`, etc.)
51
55
  - **CI Integration** — `--ci` mode + auto-generated GitHub Actions workflow
52
56
  - **Bilingual** — Full English/Japanese support (auto-detected from `LANG` env)
@@ -168,6 +172,14 @@ The interactive web viewer provides three visualization modes:
168
172
 
169
173
  ![Impact Simulation](docs/screenshots/impact-simulation.png)
170
174
 
175
+ #### Layer Focus
176
+
177
+ ![Layer Focus](docs/screenshots/layer-focus.png)
178
+
179
+ - Shift+click a layer tab to **solo** it; click others to add
180
+ - Convex hulls show layer boundaries; dashed lines show cross-layer links
181
+ - Filtered physics automatically adjust for clearer separation
182
+
171
183
  ### Hierarchy View (DAG Layout)
172
184
 
173
185
  ![Hierarchy View](docs/screenshots/hierarchy-view.png)
@@ -350,320 +362,3 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
350
362
  ## License
351
363
 
352
364
  [MIT](LICENSE) &copy; un907
353
-
354
- ---
355
-
356
- <a id="日本語"></a>
357
-
358
- <h1 align="center">archtracker-mcp <sub>(日本語)</sub></h1>
359
-
360
- <p align="center">
361
- <b>AI駆動開発のためのアーキテクチャ & 依存関係トラッカー</b><br>
362
- MCP サーバー + CLI + Web ビューア + Claude Code Skills
363
- </p>
364
-
365
- ## なぜ archtracker?
366
-
367
- AI エージェントがコードを修正する際、**波及的な影響を見逃します**:
368
-
369
- | 問題 | archtracker なし | archtracker あり |
370
- |------|-----------------|-----------------|
371
- | `auth.ts` を変更 | 12ファイルが依存していることを知らない | 影響を受ける全12ファイルを即座に表示 |
372
- | リファクタでファイル名変更 | 次のセッションで古いパスを参照 | `context` コマンドで現在の有効パスを取得 |
373
- | 新しい依存関係を追加 | 結合度の増加が見えない | 差分レポートがアーキテクチャ変更を検出 |
374
- | PRレビュー | 手動で依存関係を追跡 | CIが自動でアーキテクチャドリフトをチェック |
375
- | マルチサービス構成 | サービス境界を跨ぐ影響が見えない | レイヤー対応分析でクロスレイヤー接続を検出 |
376
-
377
- **archtracker-mcp** は依存関係分析、スナップショット差分、影響シミュレーション、インタラクティブな可視化を提供します。MCP ツール、CLI、Web UI、Claude Code Skills からアクセス可能です。
378
-
379
- ## 機能
380
-
381
- - **依存関係グラフ分析** — 正規表現ベースの静的解析、**13言語**対応(JS/TS, Python, Rust, Go, Java, C/C++, C#, Ruby, PHP, Swift, Kotlin, Dart, Scala)
382
- - **マルチレイヤーアーキテクチャ** — 複数サービス/レイヤーを統合グラフとして分析、クロスレイヤー接続の自動検出(v0.5.0 新機能)
383
- - **インタラクティブ Web ビューア** — D3.js による力学モデルグラフ(凸包レイヤーグループ表示)、階層図、差分ビュー
384
- - **影響シミュレーション** — ファイルをクリックして推移的な被依存ファイルを可視化(BFS探索)
385
- - **スナップショット差分** — アーキテクチャスナップショットを保存し、ドリフトを検出
386
- - **MCP サーバー** — Model Context Protocol 経由で5つのツールを提供
387
- - **Claude Code Skills** — 6つのスラッシュコマンド(`/arch-check`、`/arch-snapshot`、`/arch-serve` 等)
388
- - **CI 統合** — `--ci` モード + GitHub Actions ワークフロー自動生成
389
- - **多言語対応** — 日本語・英語完全対応(`LANG` 環境変数から自動検出)
390
- - **ダーク/ライトテーマ** — localStorage で設定を永続化
391
- - **SVG/PNG エクスポート** — ドキュメント用にグラフをエクスポート
392
-
393
- ## クイックスタート
394
-
395
- ### インストール
396
-
397
- ```bash
398
- npm install -g archtracker-mcp
399
- ```
400
-
401
- ### 1. プロジェクトを分析
402
-
403
- ```bash
404
- archtracker analyze --target src
405
- ```
406
-
407
- ### 2. ベースラインスナップショットを保存
408
-
409
- ```bash
410
- archtracker init --target src
411
- ```
412
-
413
- ### 3. Web ビューアを起動
414
-
415
- ```bash
416
- archtracker serve --target src --watch
417
- # => http://localhost:3000
418
- ```
419
-
420
- ### 4. アーキテクチャドリフトをチェック
421
-
422
- ```bash
423
- archtracker check --target src
424
- ```
425
-
426
- ## マルチレイヤーアーキテクチャ
427
-
428
- フロントエンド + バックエンド + 共有ライブラリなど、複数のサービスやレイヤーを持つプロジェクトを統合的に分析できます。
429
-
430
- ### セットアップ
431
-
432
- プロジェクトルートに `.archtracker/layers.json` を作成:
433
-
434
- ```json
435
- {
436
- "version": "1.0",
437
- "layers": [
438
- {
439
- "name": "Frontend",
440
- "targetDir": "frontend/src",
441
- "language": "javascript",
442
- "color": "#58a6ff",
443
- "description": "React Web App"
444
- },
445
- {
446
- "name": "Backend",
447
- "targetDir": "backend/app",
448
- "language": "python",
449
- "color": "#3fb950",
450
- "description": "FastAPI Server"
451
- }
452
- ],
453
- "connections": [
454
- {
455
- "fromLayer": "Frontend",
456
- "fromFile": "api/client.ts",
457
- "toLayer": "Backend",
458
- "toFile": "main.py",
459
- "type": "api-call",
460
- "label": "REST API"
461
- }
462
- ]
463
- }
464
- ```
465
-
466
- テンプレートの自動生成:
467
-
468
- ```bash
469
- archtracker layers init
470
- ```
471
-
472
- ### 使い方
473
-
474
- `layers.json` が存在する場合、全コマンドが自動的にマルチレイヤーモードで動作します:
475
-
476
- ```bash
477
- archtracker analyze --root . # 全レイヤーを分析
478
- archtracker serve --root . --watch # レイヤータブ・凸包表示付き Web ビューア
479
- archtracker check --root . # クロスレイヤー差分チェック
480
- ```
481
-
482
- 各レイヤーは独立した言語設定で個別に分析され、プレフィックス付きパス(例: `Backend/worker.py`)で統合グラフにマージされます。
483
-
484
- ### Web ビューアでのレイヤー表示
485
-
486
- - **レイヤータブ**: 複数選択トグルで特定レイヤーにフォーカス(Shift+クリックでソロモード)
487
- - **凸包グループ**: 各レイヤーが色付きの境界で視覚的にグループ化
488
- - **クロスレイヤーリンク**: レイヤー間接続を点線で表示(設定で切替可能)
489
- - **Layer Cohesion スライダー**: レイヤー内ノードの凝集度を調整
490
- - **差分ハイライト**: 変更を含むレイヤーの境界がハイライト
491
-
492
- ## Web ビューア
493
-
494
- インタラクティブな Web ビューアは3つの可視化モードを提供します:
495
-
496
- ### グラフビュー(力学モデル)
497
-
498
- ![グラフビュー](docs/screenshots/graph-view-dark.png)
499
-
500
- - ドラッグ、ズーム、クリックでノードの依存関係を探索
501
- - ノードをクリックでハイライトを**ピン固定** — 他のノードをホバーして比較
502
- - 下部のピルでディレクトリごと、上部のタブでレイヤーごとにフィルタリング
503
- - 重力、レイヤー凝集力、ノードサイズ、フォントサイズ、リンク透明度を調整可能
504
- - **影響モード**: ファイルをクリックして推移的に影響を受ける全ファイルを表示
505
-
506
- ![影響シミュレーション](docs/screenshots/impact-simulation.png)
507
-
508
- ### 階層ビュー(DAGレイアウト)
509
-
510
- ![階層ビュー](docs/screenshots/hierarchy-view.png)
511
-
512
- - 依存の深さを示すレイヤー型トップダウンレイアウト
513
- - クリックでピン固定 + 詳細パネル
514
- - レイヤー対応フィルタリング + コンパクト再配置
515
-
516
- ### 差分ビュー
517
-
518
- ![差分ビュー](docs/screenshots/diff-view.png)
519
-
520
- - アーキテクチャ変更の色分け可視化
521
- - 緑=追加、赤=削除、黄=変更、青=影響
522
- - 変更を含むレイヤー境界のハイライト表示
523
- - スナップショットが存在する場合に利用可能
524
-
525
- ```bash
526
- # ファイル変更の自動リロード付きで起動
527
- archtracker serve --target src --port 3456 --watch
528
- ```
529
-
530
- ## MCP ツール
531
-
532
- archtracker を MCP サーバーとして Claude Code や MCP 互換 AI エージェントに追加:
533
-
534
- ```json
535
- {
536
- "mcpServers": {
537
- "archtracker": {
538
- "command": "npx",
539
- "args": ["-y", "archtracker-mcp"]
540
- }
541
- }
542
- }
543
- ```
544
-
545
- | ツール | 説明 |
546
- |--------|------|
547
- | `generate_map` | 依存関係グラフを解析し構造化JSONで返す(プログラム用) |
548
- | `analyze_existing_architecture` | 包括的な人間向け分析レポート |
549
- | `save_architecture_snapshot` | `.archtracker/snapshot.json` にスナップショットを保存 |
550
- | `check_architecture_diff` | スナップショットと現在のコードを比較し影響を表示 |
551
- | `get_current_context` | 有効なファイルパスとアーキテクチャサマリーを取得 |
552
- | `search_architecture` | パス、影響範囲、重要度、孤立ファイルで検索 |
553
-
554
- `.archtracker/layers.json` が存在する場合、全ツールがマルチレイヤーモードを自動検出します。
555
-
556
- ## CLI コマンド
557
-
558
- ```
559
- archtracker init [options] 初期アーキテクチャスナップショットを生成
560
- archtracker analyze [options] 包括的な分析レポート
561
- archtracker check [options] スナップショットと現在のコードを比較
562
- archtracker context [options] アーキテクチャコンテキストを表示(AIセッション用)
563
- archtracker serve [options] インタラクティブ Web ビューアを起動
564
- archtracker ci-setup [options] GitHub Actions ワークフローを生成
565
- archtracker layers init テンプレート layers.json を作成
566
- archtracker layers list 設定済みレイヤーを一覧表示
567
-
568
- オプション:
569
- -t, --target <dir> 対象ディレクトリ(デフォルト: "src")
570
- -r, --root <dir> プロジェクトルート(デフォルト: ".")
571
- -l, --language <lang> 対象言語(省略時は自動検出)
572
- -p, --port <number> Web ビューアのポート(デフォルト: 3000)
573
- -w, --watch ファイル変更の監視と自動リロード
574
- -e, --exclude <pattern> 除外パターン(正規表現)
575
- -n, --top <number> 分析の上位N件(デフォルト: 10)
576
- --save 分析後にスナップショットを保存
577
- --ci CIモード: 要確認ファイルがあれば exit 1
578
- --json JSON形式で出力(context コマンド)
579
- --lang <locale> 言語: en | ja(LANG から自動検出)
580
- ```
581
-
582
- > **マルチレイヤー**: `.archtracker/layers.json` が存在し `--target` が明示指定されていない場合、全コマンドが自動的にマルチレイヤー分析を使用します。`--root` でプロジェクトルートを指定してください。
583
-
584
- ## Claude Code Skills
585
-
586
- `skills/` ディレクトリをプロジェクトにコピー:
587
-
588
- ```bash
589
- cp -r node_modules/archtracker-mcp/skills/ .claude/skills/
590
- ```
591
-
592
- | スキル | 説明 |
593
- |--------|------|
594
- | `/arch-analyze` | 包括的なアーキテクチャ分析を実行 |
595
- | `/arch-check` | スナップショットと現在のコードを比較 |
596
- | `/arch-snapshot` | 現在のアーキテクチャスナップショットを保存 |
597
- | `/arch-context` | 有効なファイルパスでAIセッションを初期化 |
598
- | `/arch-search` | アーキテクチャ検索(パス、影響、重要度、孤立) |
599
- | `/arch-serve` | インタラクティブ Web ビューアを起動 |
600
-
601
- 全スキルがマルチレイヤープロジェクトに自動対応します。
602
-
603
- ## プログラマティック API
604
-
605
- ```typescript
606
- import {
607
- analyzeProject,
608
- analyzeMultiLayer,
609
- saveSnapshot,
610
- loadSnapshot,
611
- computeDiff,
612
- formatDiffReport,
613
- formatAnalysisReport,
614
- } from "archtracker-mcp";
615
-
616
- // 単一ディレクトリ分析
617
- const graph = await analyzeProject("src", { exclude: ["__tests__"] });
618
-
619
- // マルチレイヤー分析
620
- const layers = [
621
- { name: "Frontend", targetDir: "frontend/src", language: "javascript" },
622
- { name: "Backend", targetDir: "backend/app", language: "python" },
623
- ];
624
- const multi = await analyzeMultiLayer(".", layers);
625
-
626
- // スナップショット
627
- const snapshot = await saveSnapshot(".", graph);
628
-
629
- // 差分比較
630
- const prev = await loadSnapshot(".");
631
- if (prev) {
632
- const diff = computeDiff(prev.graph, graph);
633
- console.log(formatDiffReport(diff));
634
- }
635
- ```
636
-
637
- ## CI / CD
638
-
639
- ### GitHub Actions ワークフローの自動生成
640
-
641
- ```bash
642
- archtracker ci-setup --target src
643
- # .github/workflows/arch-check.yml を生成
644
- ```
645
-
646
- ## 多言語対応
647
-
648
- `LANG` / `LC_ALL` 環境変数から自動検出されます:
649
-
650
- ```bash
651
- LANG=ja_JP.UTF-8 archtracker analyze # 日本語出力
652
- archtracker --lang ja check # 明示的に日本語指定
653
- ```
654
-
655
- Web ビューアでも設定パネルから言語を切り替え可能です。
656
-
657
- ## 動作要件
658
-
659
- - **Node.js** >= 18.0.0
660
-
661
- 対応言語: JavaScript/TypeScript, Python, Rust, Go, Java, C/C++, C#, Ruby, PHP, Swift, Kotlin, Dart, Scala
662
-
663
- ## コントリビュート
664
-
665
- [CONTRIBUTING.md](CONTRIBUTING.md) をご覧ください。
666
-
667
- ## ライセンス
668
-
669
- [MIT](LICENSE) &copy; un907
package/dist/bin.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/bin.ts
4
- var CLI_COMMANDS = ["init", "analyze", "check", "context", "serve", "ci-setup", "layers", "help"];
4
+ var CLI_COMMANDS = ["init", "analyze", "check", "context", "serve", "ci-setup", "layers", "history", "help"];
5
5
  var CLI_FLAGS = ["--help", "-h", "--version", "-V"];
6
6
  var args = process.argv.slice(2);
7
7
  var hasCommand = args.some((arg) => CLI_COMMANDS.includes(arg));
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/bin.ts"],"sourcesContent":["/**\n * Smart entry point for `archtracker-mcp` binary.\n *\n * - If CLI subcommands are detected (serve, analyze, init, etc.) → run CLI\n * - Otherwise → start MCP server on stdio\n *\n * This allows both:\n * npx archtracker-mcp → MCP server\n * npx archtracker-mcp serve --target src → Web viewer (CLI mode)\n * npx archtracker-mcp analyze --target src → Analysis report (CLI mode)\n */\n\nconst CLI_COMMANDS = [\"init\", \"analyze\", \"check\", \"context\", \"serve\", \"ci-setup\", \"layers\", \"help\"];\nconst CLI_FLAGS = [\"--help\", \"-h\", \"--version\", \"-V\"];\n\nconst args = process.argv.slice(2);\nconst hasCommand = args.some((arg) => CLI_COMMANDS.includes(arg));\nconst hasFlag = args.some((arg) => CLI_FLAGS.includes(arg));\n\nif (hasCommand || hasFlag) {\n await import(\"./cli/index.js\");\n} else {\n await import(\"./mcp/index.js\");\n}\n\nexport {};\n"],"mappings":";;;AAYA,IAAM,eAAe,CAAC,QAAQ,WAAW,SAAS,WAAW,SAAS,YAAY,UAAU,MAAM;AAClG,IAAM,YAAY,CAAC,UAAU,MAAM,aAAa,IAAI;AAEpD,IAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,IAAM,aAAa,KAAK,KAAK,CAAC,QAAQ,aAAa,SAAS,GAAG,CAAC;AAChE,IAAM,UAAU,KAAK,KAAK,CAAC,QAAQ,UAAU,SAAS,GAAG,CAAC;AAE1D,IAAI,cAAc,SAAS;AACzB,QAAM,OAAO,gBAAgB;AAC/B,OAAO;AACL,QAAM,OAAO,gBAAgB;AAC/B;","names":[]}
1
+ {"version":3,"sources":["../src/bin.ts"],"sourcesContent":["/**\n * Smart entry point for `archtracker-mcp` binary.\n *\n * - If CLI subcommands are detected (serve, analyze, init, etc.) → run CLI\n * - Otherwise → start MCP server on stdio\n *\n * This allows both:\n * npx archtracker-mcp → MCP server\n * npx archtracker-mcp serve --target src → Web viewer (CLI mode)\n * npx archtracker-mcp analyze --target src → Analysis report (CLI mode)\n */\n\nconst CLI_COMMANDS = [\"init\", \"analyze\", \"check\", \"context\", \"serve\", \"ci-setup\", \"layers\", \"history\", \"help\"];\nconst CLI_FLAGS = [\"--help\", \"-h\", \"--version\", \"-V\"];\n\nconst args = process.argv.slice(2);\nconst hasCommand = args.some((arg) => CLI_COMMANDS.includes(arg));\nconst hasFlag = args.some((arg) => CLI_FLAGS.includes(arg));\n\nif (hasCommand || hasFlag) {\n await import(\"./cli/index.js\");\n} else {\n await import(\"./mcp/index.js\");\n}\n\nexport {};\n"],"mappings":";;;AAYA,IAAM,eAAe,CAAC,QAAQ,WAAW,SAAS,WAAW,SAAS,YAAY,UAAU,WAAW,MAAM;AAC7G,IAAM,YAAY,CAAC,UAAU,MAAM,aAAa,IAAI;AAEpD,IAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,IAAM,aAAa,KAAK,KAAK,CAAC,QAAQ,aAAa,SAAS,GAAG,CAAC;AAChE,IAAM,UAAU,KAAK,KAAK,CAAC,QAAQ,UAAU,SAAS,GAAG,CAAC;AAE1D,IAAI,cAAc,SAAS;AACzB,QAAM,OAAO,gBAAgB;AAC/B,OAAO;AACL,QAAM,OAAO,gBAAgB;AAC/B;","names":[]}