Skip to main content
Glama
developerz-ai

universal-lsp


1つのリポジトリに2つのプロジェクトがあり、一方が他方を必要とするため一緒に構築されています:

Universal LSP — 多くの言語をLuaで宣言されたプラグインを通じてカバーする、単一で高速、低メモリのC++言語サーバーです。セマンティック解析を含むすべての解析層は、1つのプロセス内でネイティブに実行されます。rust-analyzer、pyright、clangd、その他のバイナリやネットワークサービスを起動したり、プロキシしたり、依存したりすることはありません。ターミナルファーストでエージェント駆動の世界のために構築されています:エディタ向けの標準LSP over stdio、エージェント向けのMCPフロントエンド、CI向けのヘッドレスバッチクエリCLI。

graph-lite — 欠けていたグラフのためのSQLite:小さく、依存関係のない、埋め込み可能なプロパティグラフライブラリで、どのプロジェクトでも単一のヘッダーで取り込めます。その公開面はC ABIであり、Ruby、JavaScript、Python、Rust、Go、CはそれぞれのFFIを通じて埋め込むことができ、同期を保つためのラッパーは不要です — これがSQLiteに広がりを与えたのと同じものです。LSPはその最初で最も要求の厳しい消費者です — 大規模なコードベース全体のコールグラフ、インポートグラフ、シンボル関係を、インタラクティブなレイテンシの下で扱います — しかしgraph-liteのAPIはそのような語彙から自由に保たれ、機械的にそれを学ぶことを防がれています。

ステータス: 実装前。 リポジトリ、ゲート、ドキュメント、計画は整っています。現在の作業はビルドフェーズ1(graph-liteコア)です。ここにあるものはまだリリースされていません。スコープはdocs/spec.mdにあり、進捗はマイルストーンにあります。

なぜ

今日、すべての言語は独自のサーバー、独自のプロセス、独自のメモリフットプリント、そして「定義へ移動」のコストについて独自の考えを持っています。4つの言語で4つのプロジェクトを開くと、何も共有しない12のプロセスが実行されます — キャッシュもインデックスも関係グラフもありません。そして、それらのどれも、現在の読み書きの大部分を担うクライアント向けに設計されていません:エディタを接続せず、ターミナルで作業し、ディスク上に直接変更をバースト的に行うAIエージェントです。

Universal LSPはそのすべてを1つのプロセスで処理します。言語を追加するということは、新しいサーバーを書くのではなく、宣言的なLuaルールを書くことを意味します。

Related MCP server: code-auditor-mcp

ティア

言語は、そのプラグインのルールが記述する正確な深さを得ます — それ以上でもそれ以下でもなく、マシンにインストールされているものに依存することもありません。

ティア

提供するもの

駆動するもの

1 — 構文

ハイライト、折りたたみ、アウトライン、括弧のマッチング

tree-sitter 文法リファレンス + クエリファイル

2 — 構造

定義へ移動、参照の検索、名前変更、ワークスペースシンボル

宣言的なスコープ/バインディングルール + オプションの純Luaコールバック

3 — セマンティクス

型を考慮したホバー、型診断、セマンティック補完

共有ネイティブ単一化コア上の宣言的な型ルール

4 — 関係

コールグラフ、インポートグラフ、影響範囲、コールパス

Tier 2/3 の出力を graph-lite に具体化

Tier 4はエージェントが実際に望むものです:これを推移的に呼び出すものとこれを変更したら何が壊れるか — 100回のファイル読み取りではなく、事前計算されたグラフから答えられます。

アーキテクチャ

      editor  ──stdio LSP──┐
      agent   ──MCP────────┤
      CI      ──batch CLI──┘
                           │
                    ┌──────▼──────┐
                    │  shim/cli   │  thin entrypoints, no logic
                    └──────┬──────┘
                           │ unix socket
                  ┌────────▼─────────┐
                  │     daemon       │  one per user, many sessions,
                  │  engine/         │  warm caches, per-workspace state
                  └────┬────────┬────┘
              tree-sitter        │
              + Lua rules        │
                   │             │
              ┌────▼─────┐  ┌────▼─────┐
              │ analysis │──▶ graph-lite│  generic nodes + typed edges
              └──────────┘  └──────────┘  (knows nothing about code)

依存関係は一方向にのみ流れます:analysis → graph-lite、決して逆にはなりません。2つのlintガードとスタンドアロンビルドのCIジョブがそれを維持します。なぜなら、代替案 — 抽出時に気づくこと — は書き直しになるからです。

クイックスタート

git clone https://github.com/developerz-ai/universal-lsp.git
cd universal-lsp
bin/setup          # prerequisites → configure → link compile_commands.json
bin/check          # the full gate: format, guards, build, tests, sanitizers
bin/dev doctor     # one row per thing that can drift

CMake ≥ 3.24、Ninja、C++20コンパイラ、clang-format、そしてリポジトリツール用のBunが必要です。bin/setupは不足しているものとそのインストール方法を示します。

graph-liteを単独で埋め込む

graph-liteはこのリポジトリの知識なしでビルドされます — それはすべてのPRで検証され、後で抽出する際に書き直しではなくgit mvのままであることを保証します:

cmake -S graph-lite -B build/graph-lite -G Ninja
cmake --build build/graph-lite
#include "graph-lite.h"     /* the contract: C linkage, opaque handles, status codes */
#include "graph-lite.hpp"   // C++ ergonomics over the same entry points, header-only
require "ffi"               # and the same from Ruby, JS, Python, Rust, Go
module GraphLite
  extend FFI::Library
  ffi_lib "graph-lite"
  attach_function :graph_lite_version_string, [], :string
end

テストスイート内のC翻訳単位はCとしてコンパイルされリンクされるため、C互換でなくなったヘッダーは、あなたの統合ではなく私たちのビルドを失敗させます。

APIとデータモデル:docs/graph-lite/README.md · Cを選んだ理由:ADR 0004。

ローンチ時の言語

TypeScript · JavaScript · Ruby · C · C++ · Lua · Python · Java · Kotlin · Swift · Rust

Tier 1と2は11言語すべてで最初に提供されます — それがエディタとエージェントの両方にとっての価値の大部分です。Tier 3の深さはそこから言語ごとに成長し、誤った型ではなく「不明な型」に劣化します。

ドキュメント

読む

目的

docs/spec.md

完全なスコープ契約 — 目標、非目標、ビルドフェーズ

docs/research/things-to-know.md

他の人の出荷済みバグで既に代償を払った落とし穴

docs/graph-lite/

あたかも単独で存在するかのように書かれたライブラリ

docs/engine/

位置エンコーディング、ファイルシステム変更処理、デーモン設計

docs/plugins/authoring.md

新しい言語を教える

CLAUDE.md

このリポジトリの作業方法 — 最初の変更の前に読んでください

コントリビュート

CONTRIBUTING.mdを読み、次にCLAUDE.mdを読んでください。公式の11言語以外の言語のプラグインは承認もこのリポジトリ内の場所も必要ありません — gitリポジトリを公開してピン留めしてください。

ライセンス

エンジンはApache-2.0です。**graph-liteはMIT**であり、意図的に独立してバージョン管理されています:単一のヘッダーを埋め込む際に、それを育てたもののライセンスについて考える必要が決してないように。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI clients to perform local code search, indexing, and analysis across Java, JavaScript/TypeScript, .NET/C#, and Python projects through the MCP protocol.
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI coding agents to query a local, continuously updated symbol graph of a codebase, providing ranked search, caller/callee exploration, dependency paths, and git-diff impact analysis through MCP tools.
    1 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides IDE-like coding capabilities for AI agents via MCP, enabling semantic code retrieval, symbol-level editing, refactoring, and navigation across many programming languages.
    MIT