mcpField
A
AVCS

AVCS

ローカル
github.com/izagoodバージョン管理14 日前に更新

AVCS について

AVCSは、人間とAIエージェントが並行してコードを編集する環境向けの、Git非互換のバージョン管理システムです。意図、操作、証拠、競合時の決定を中核オブジェクトとして扱い、決定的な還元によってコードツリーを生成します。

主な機能

  1. 01操作グラフによる履歴管理と決定的な還元
  2. 02意図・証拠・決定を中核オブジェクト化
  3. 03ポリシーに基づく競合の評価と解決
  4. 04信頼できる証拠による動作変更のゲート
  5. 05MCPサーバーと人間向けCLI

活用シーン

  1. 01複数エージェントによる並行編集の調整
  2. 02記録された決定による重複変更の解決
  3. 03信頼できるテストなどを条件とした変更の受け入れ

MCP 対応

AVCSはエージェント向けのMCPサーバーを提供し、全ツールまたはコア向けの縮小構成を選べます。作業の反映や範囲を限定したコンテキストの構築に加え、購読可能なリソースがheadの変更をクライアントに通知します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"izagood-avcs": {
"command": "npx",
"args": [
"-y",
"@izagood/avcs"
],
"env": {
"AVCS_REPO": "<AVCS_REPO>"
}
}
}
}
起動コマンドnpx -y @izagood/avcs
設定が必要な環境変数
AVCS_REPOabsolute path of the AVCS repo to serve; defaults to the client cwd

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@izagood/avcs0.42.0

ツール

39

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
cwdstringいいえ操作対象の作業ディレクトリの絶対パス。サーバーは上位へたどり、所属する AVCS リポジトリ(.avcs)を解決します。任意項目です。デフォルトではクライアントのワークスペースルートを使用し、次にサーバー自身の作業ディレクトリを使用します。AVCS_REPO によってサーバーが固定されている場合は無視されます。
topicenumいいえ標準ループでは省略workflow | tools | sync | rules | errors
verbosebooleanいいえ人が読みやすいようにレスポンスを整形します。デフォルトは false(簡潔でトークン数が少ない形式)です。

詳細

AVCS — エージェント型バージョン管理システム

人間と AI エージェントが同時に作業するための、AI ネイティブなバージョン管理システムです。

CI status node runtime deps license

エージェントはバージョン管理にコンテキストを費やすべきではありません。 それが設計目標のすべてであり、主張ではなく実測しています。同じ作業にエージェントが費やすコストは次のとおりです。

エージェントが費やすコストgit /全機能AVCS
先に他の人の PR がマージされた後に変更を取り込む(30 KB のモジュール)18,922 トークン279 トークン — 99% 削減
このリカバリーを完了するまでの往復回数74
ツールスキーマ。セッションごとに発生約8.8kトークン(39個のツール)約3.5kトークン(13個、--profile core)
同じ行での衝突でモデルに渡されるものコンフリクトマーカー付きのファイル全体競合する2つの操作を示す1つのオブジェクト
先に別の PR がマージされた後に変更を取り込むためのエージェントのトークン数。git は 0.7 KB、8 KB、30 KB のファイルでそれぞれ 446、5,249、18,922 トークンを必要としますが、AVCS は 279 のままです

git のリカバリーコストは ファイルのサイズに比例します。コンフリクトはファイル内のバイト列なので、1行を変更するだけでもエージェントはモジュール全体を読み込み、モジュール全体を書き戻します。AVCS のコストは変更のサイズに比例します。コンフリクトは競合する2つの操作を示すオブジェクトなので、ファイルが大きくなってもコストは変わりません。また、書き換えるブランチも、強制プッシュするものもないため、往復回数が異なります。そしてこれは 1回 のサイクルにすぎず、自分より先にマージされる PR ごとに繰り返されます。測定したファイルサイズでは、削減率は37~99%です。

これは後付けの圧縮テクニックではありません。スナップショットではなく操作グラフを保存することで自然に実現します。リベースが不要なので、読み直すものもありません。リベースの数値を得た手法、注意事項、ハーネスはこちらをご覧ください。 avcs-demo → エージェントのトークンコスト。 スキーマの数値は、公開されている MCP の機能そのものを示しています。JSON が35 KB対14 KBで、通常の1トークンあたり約4バイトで換算しています。

Git はコードがいつ変更されたかを記録します。 AVCS は、コードが現在の状態に至るまでに、誰が、どのような意図で、どのような証拠に基づき、どのようなコンフリクトの判断を経て変更したかを記録します。

AVCS は、人間と多数の AI エージェントが同じコードベースを同時に編集する環境のために構築された、新しい、意図的に Git との互換性を持たないバージョン管理システムです。コミット/ブランチ/マージ/コンフリクトマーカーのモデルを廃し、代わりに意図、セッション、操作、証拠、判断を第一級のオブジェクトとして保存します。コードツリーは信頼できる唯一の情報源ではありません。操作グラフを決定論的に還元して計算される投影です。

state = reduce(base, operationDAG, decisions, policy, materializer)

同じオブジェクト、同じポリシー、同じマテリアライザーを使えば、どのレプリカでも同じツリーが生成されます。マージはテキストの選択ではなく、純粋で決定論的な還元です。

ステータス: 研究用プロトタイプです。実装は実際に動作し、テストでカバーされていますが、各フェーズの完成度は実用可能な MVP の水準です(言語に依存しないテキストの3ウェイマージ、ed25519 署名)。構造を考慮したマージ、意味的な破壊の検出、複数署名による信頼性、堅牢化された分散同期は、ロードマップで管理しています。 まずはここから: インストール · 最初の5分 · サーバーを使って作業する · MCP 経由でエージェントを接続する · エージェントのクイックスタートガイド

まずは動作を確認する: izagood/avcs-demo — この設計が答える問いを実行できるデモです。2つのエージェントが同じファイルを同時に編集すると、どうなるでしょうか? ./demo.sh を1回実行するだけで、拒否されずに取り込まれる古いヘッドからの適用、リベースなしの同一ファイルの自動マージ、そして同じ行での衝突がコンフリクトマーカーではなく署名付きの決定になる様子を確認できます。

git の上にレイヤーを重ねるのではだめなのですか?

あらゆる「AI + git」ツールは、最終的にエージェントのコンテキストを履歴のそばに保存します。コミットのトレーラー、PR コメント、サイドカー JSON などです。AVCS が存在するのは、これらのオブジェクトがマージ処理そのものに使われる不可欠な要素でなければならず、git に後付けしてもそれは実現できないからです。

  • エビデンスがマージを制御する必要があります。 git は、テストに合格していない振る舞いの変更でも問題なくマージします。AVCS では、その変更は信頼できるエビデンスが揃うまで、リデューサーによって L3 — ブロックと判定されます。また、操作の作成者自身による保証はエビデンスとして認められません。
  • 決定はマージ後も残る必要があります。 git merge はバイト列を出力してコンフリクトを解決しますが、選択とその理由は消えてしまいます。AVCS の decision は署名付きオブジェクトです。後から参照でき、以前の決定は今後の自動解決にも影響します。
  • 同時編集がコンフリクトマーカーに行き着いてはなりません。 2つのエージェントが1つのファイルを編集した場合、ツリーに <<<<<<< が残り、人間が断片を整理するのではなく、決定的なポリシーの縮約(以下の L0~L4)が行われます。
  • 意図は作業とともに引き継がれる必要があります。 トレーラーは作用しないテキストです。intent(目標 + 制約 + 許可された範囲)は、セッションの開始時に参照される対象であり、リースと競合チェックの適用範囲を定め、avcs.context.build が次のエージェントに渡すものです。

git はスナップショットを保存し、テキストの選択にマージを委ねます。AVCS は操作グラフを保存し、意図、エビデンス、決定に基づく計算としてマージを行います。そのため、AVCS は意図的に git と互換性がありません。これらのオブジェクトはメタデータではなく、エンジンそのものだからです。(ブリッジとしての git 連携は用意されています:docs/14、docs/20。)

基本原則

#原則Git との違い
1操作が履歴を構成するのであり、コミットではありませんコミットは多数の操作に対する単なるチェックポイントです
2識別子はエンティティ IDであり、ファイルパスではありません名前変更と編集を自動マージできます
3マージは決定的な縮約であり、テキストの選択ではありませんコンフリクトマーカーはありません
4コンフリクトは第一級の decision オブジェクトであり、壊れたファイルではありません理由は履歴に残ります
5AI の出力はエビデンスを添付した提案済みの操作であり、信頼済みのコードではありませんテストのない振る舞いの変更は accepted にできません
6コードで最終書き込み優先が既定になることはありません優先順位はポリシーによって決まります

仕組み

意味のあるものはすべて、コンテンツアドレス方式の追記専用オブジェクトです。コードは操作 DAG 上の投影であり、コミットとして保存されることはありません。

オブジェクト役割
intent変更を行う理由(目標+制約+許可された範囲)
sessionintent に基づくエージェント/人間の作業エピソード
operation1 つの意味的な変更単位 — 実際の履歴
evidence機械的に検証可能な証明(テスト/型チェック/lint/スキャン)で、操作に紐付けられるもの
decision競合や設計上の選択に対する解決策の記録
checkpoint検証済みの状態ベクトル(操作+ポリシー+マテリアライザー) — コミットに代わるもの
view操作グラフに対する宣言的なクエリ — ブランチに代わるもの
release署名と来歴情報を持つチェックポイント — タグに代わるもの
policyリデューサーにパラメーターとして渡す決定論的なマージルール

…これらに加え、生のコンテンツ用の blob と、複数マシンおよびセキュリティの各フェーズで使用されるガバナンスオブジェクト(lease、membership、protection、promotion、redaction、override、approval、line、integration)があります。

競合解決レベル

AVCS はコードに対して、最終書き込み優先方式にフォールバックすることはありません。競合する操作は評価され、根拠とともに記録されたうえで解決されます。

  • L0 / L1 — 異なるエンティティ、または同じファイル内の重複しない行領域 → 自動マージ
  • L2 — 同じ行領域に重複する同時編集 → ポリシーによる自動判定(人間の判断を優先し、信頼度で重み付け)。自動判定そのものも autoDecisions に記録されます
  • L3 — 信頼できる証拠がない動作変更 → ブロック
  • L4 — 公開 API の破壊的変更 → 人間による判断が必要。対象範囲のオーナーに振り分けられます

証拠の信頼性は重要です。操作の作成者自身が、その操作の正当性を証明することはできません。証拠のゲート判定とテスト合格ボーナスの対象となるのは、作成者ではなく、信頼できるアクター(CI ボット/人間)が生成した証拠のみです。

現在の機能

リデューサーとポリシーエンジンが基盤であり、上位フェーズではその上に分散コラボレーション、セキュリティ、可観測性を構築します。

基盤(フェーズ 1〜6)

  • ストレージコア — 追記専用のコンテンツアドレス方式オブジェクトストア(.avcs/objects)
  • 決定論的リデューサー+ポリシーエンジン — 上記の L0〜L4 の競合評価を、優先順位の階層、上限付きの信頼性調整、監査可能な自動判定とともに提供
  • 言語に依存しないテキストマージ(フェーズ 2) — 決定論的な N-way の行単位 3-way マージ(src/merge/merge3.ts)により、1 つのファイル内の重複しない領域への編集は、言語にかかわらず自動マージされます。編集が重複する場合は、ポリシーによって解決される競合領域になります。コアでは言語解析を行いません
  • 暗号学的信頼性(フェーズ 3) — ed25519 署名付きの証拠/判断。偽造された署名は信頼性ゲートで拒否されます。実際の検証ランナー、WorkLease、RepairContext
  • 判断の記憶(フェーズ 4) — 過去の人間の判断を呼び出せる機能(recallDecisions)と、今後の自動解決にバイアスを与える、抽出された「学習済みポリシー」
  • ポリシーの深化(フェーズ 5) — コードオーナーへの振り分けと、上限付きの信頼性学習
  • リリースと来歴(フェーズ 6) — 検証済みチェックポイント+CycloneDX SBOM+署名付きアーティファクト

コラボレーション、スケーラビリティ、セキュリティ(フェーズ 7〜12)

  • フェーズ 7 — 複数マシン: メンバーシップ/ロール(署名付きキーによるフェデレーション)、pull(オブジェクトのゴシップ。2 つのレプリカが同じ treeHash に収束)、保護機能と finalize CAS(fast-forward でない更新は拒否されるため、古いプッシュが新しい履歴を上書きできません)
  • フェーズ 8 — 系譜: 長期間にわたって分岐したライン(例:v1.x ∥ v2.x。同じパスでも内容が異なり、競合はゼロ)、portOp(バックポート=cherry-pick)
  • フェーズ 9 — スケール: エンティティインデックス、materializeAt(タイムトラベル)、重複排除機能付きの大容量 blob のチャンクストレージ
  • フェーズ 10 — オブザーバビリティ: blame(誰が/なぜ)、logP、決定論的な bisect、diff
  • フェーズ 11 — 外部からの貢献: 隔離ティア+promote+信頼されていない CI のゲート
  • フェーズ 12 — セキュリティ: redact(漏えいしたシークレットのバイト単位の消去。oid は保持)、緊急時の override、前進のみのロールバック
  • ローカルでの取り消し(docs/23)— avcs undo [--last | <op-oid>…] [--purge] [--no-git]:ローカルの ops をビューから削除し、--purge を指定すると、それらのみが参照しているバイトも消去します。ops がプッシュ済みの場合は拒否されます。そのケースは管理者承認が必要な redact で処理するためです。git 連携リポジトリで --purge を指定すると、git のコピーも消去されます。ただし、書き換えが安全かつローカルであると証明できる場合に限ります(リモートに存在しない、コミットが先端にある、そのコミットに他の作業が含まれない、ツリーがクリーンである)。それ以外の場合は AVCS 側の処理のみを行い、残っているものと、それぞれに適したコマンドを正確に示します。「認証情報をローテーションしてください。すでに公開されています」と伝える場合もあります
  • 作業ツリーは実際に派生したものです — checkout は、投影した内容を記録します (.avcs/projection.json、パス → blob oid)。次の投影時に、対象ビューに含まれなくなったファイルを削除します。AVCS が書き込んでいないファイル(ビルド出力、無視対象ファイル、自分で作成したものなど)には触れません。また、投影後に編集したファイルは保持され、通知で名前が示されます。黙って上書きされることはありません。そのためビューを切り替えると、以前に投影したすべてのビューの和集合ではなく、そのビューが得られます

ブランチはビューに、コミットはチェックポイントに、タグはリリースになります。エージェントは第一級のMCP サーバー(39 個のツール、または --profile core で 13 個)を通じて AVCS を操作し、人間はCLIを使います。Phase 14 以降、サーバーは統合キュー(avcs submit、POST /integrate)を実行します。古い投稿に対して「head が移動しました。先に pull してください」と返すことはありません。サーバーが投稿者に代わってフロンティアの和集合を再集約し、結果は必ず判定(advanced | conflict 修復パケット | needs_evidence — 検証を 1 回実行すればよく、やり直しは不要 | queued)になります。Phase 15 以降、レプリカはリアルタイムで収束します(GET /events のロングポーリング、avcs sync --watch、競合の早期警告)。Phase 16 で MCP の機能が完成しました。avcs.sync.land は 1 回の呼び出しで作業を反映し、avcs.context.build は決定論的な切り詰めを伴う、上限付きの作業コンテキストを組み立てます。また、購読可能なリソースは head が移動したときにクライアントへ通知します。詳しくは docs/17 と docs/18 を参照してください。動作は 827 件のテストで構成される契約テストスイート(test/*.test.ts、すべて成功)によって固定されており、tsc も問題なく完了します。

インストール

Node ≥ 22.6 が必要です。AVCS は型ストリッピングによって TypeScript を直接実行するため、ビルド工程も実行時の依存関係もありません。

AVCS は npm で @izagood/avcs として公開されています。グローバルにインストールすると、PATH から avcs コマンドを実行できます。

npm install -g @izagood/avcs

インストールせず、レジストリから直接実行することもできます。

npx @izagood/avcs version
最初の 5 分(サーバーも git も不要)

AVCS はローカルファーストです。ディスク上のリポジトリだけで、履歴、blame、取り消し、リリースを含む完全な VCS として機能し、サーバーも git も必要ありません。既存のプロジェクトディレクトリで次を実行します。

avcs init .                        # create the repo (inside a git repo is fine — .avcs is git-ignored)
avcs import . -m "initial import"  # bring the existing tree in as operations

# …edit files as usual, then record the change:
avcs commit -m "add mul()"         # authors operations for your working-tree changes

avcs status                        # operation / conflict summary
avcs log                           # operation history
avcs blame file:src/math.js        # who owns this file and why (entity key = file:<path>)
avcs conflicts                     # decisions a human still owes
avcs decide <conflict-id> --choose <op-oid> --reason "…"   # …and pay one: a signed decision


avcs undo --last                   # take the last operation back out of the view…
avcs checkout                      # …and re-project the working tree from it

注目すべき点は 2 つあります。commit は git のコミットとは異なり、実際の履歴となる意味的な操作を記録します。また、作業ツリーは信頼できる唯一の情報源ではなく、checkout で再マテリアライズする投影です。すべてのコマンドは avcs help で確認できます。

署名アイデンティティ

avcs のアイデンティティは、特定のチェックアウトではなく、あなたとこのマシンに属します。~/.ssh や ~/.gnupg と同じスコープです。一度プロビジョニングすれば、このマシン上のすべてのリポジトリで署名に使用できます:

avcs key provision human:you    # writes ~/.avcs/private/human:you.json (0600, dir 0700)
avcs key ls                     # who this machine can sign as, and which keystore each came from
avcs key import <key-file>      # put an existing identity on a NEW machine

キーストアは $AVCS_CONFIG_HOME、それが設定されていない場合は $XDG_CONFIG_HOME/avcs、それも設定されていない場合は ~/.avcs です。リポジトリは、別のアクター(CI チェックアウト、2 つ目のアイデンティティなど)として署名するために、独自のキーを <store>/private/ に保持できます。このオーバーライドが最初に読み込まれます。12 — ローカルでの運用を参照してください。

id があなたのアイデンティティです。信頼、キー、ガバナンスキーはこれに紐づきます。帰属情報と連絡先を設定するには、git と同じ方法で表示名とメールアドレスを設定します。これらはあなたが作成するすべての操作に含まれるため、blame や履歴であなたを表示し、連絡を取れるようになりますが、何かを制限することはありません:

avcs config user.name  "Ada Lovelace"
avcs config user.email "[email protected]"
avcs config actor      "human:ada"      # the id commits author as (else your sole key / AVCS_ACTOR)
avcs config                              # show what is set

これらの設定は .avcs/config.json に保存されます。AVCS_AUTHOR_NAME / AVCS_AUTHOR_EMAIL / AVCS_ACTOR を設定すると、呼び出しごとに上書きできます。

サーバーを使って作業する

サーバーがなくても、リポジトリは便利に使えます。サーバーが用意できたら、avcs serve、avcs-server、または準拠した任意の実装を使って、一連のやり取りをいくつかのコマンドで行えます:

avcs clone https://your.server/acme/web .      # fetch the graph AND project a working tree
avcs clone https://your.server/acme/web . --at <checkpoint>   # …at one exact checkpoint
avcs sync                                      # pull + push against the remote it recorded
avcs sync --watch                              # live convergence: long-poll + contention early warning
avcs land -m "add mul()"                       # push + checkpoint + integrate, in one step

使うコマンドは land です。古くなったヘッドは「head moved — pull first」と差し戻されるのではなく、サーバーの統合キューで取り込まれます。そのため、結果は landed か、人間が判断するためのコンフリクトパケットのどちらかになり、やり直しは不要です。avcs remote add <name> <url> でサーバーを追加登録し、avcs sync <name> で使用するサーバーを選択します。

署名キーを渡さずに CI から読み込む場合。 デフォルトの認証情報は、正規化されたリクエストに対する AVCS-Sig 署名です。この署名にはメソッドと本文が含まれるため、取得された読み取り用認証情報を使って書き込みを再実行することはできません。これが適切なデフォルトですが、一時的な読み取り専用ユーザーには適していません。そのため、読み取りではベアラートークンも使用できます:

AVCS_HUB_TOKEN=… avcs clone https://your.server/acme/web .

トークンは設計上、読み取り専用です。書き込みパスにはトークンを渡すパラメーターがないため、変数が漏れてもクローンはできますが、プッシュ、確定、ポリシーの書き換えはできません。保持している署名キーは常にトークンより優先されるため、署名を使う読み取りユーザーが気づかないうちにトークン認証へ降格されることはありません。トークンの形式、有効期間、スコープはサーバーによって決まります。docs/26を参照してください。

エージェントを接続する(MCP)

エージェントは MCP サーバーを介して AVCS を操作します。avcs をインストールしたら、Claude Code CLI に登録します:

avcs mcp install            # runs `claude mcp add avcs -- avcs mcp` for you (scope: user)
claude mcp list             # confirm "avcs" is Connected

avcs mcp 自体が、エージェントによって起動される stdio サーバーです(対象リポジトリは $AVCS_REPO、未設定の場合は cwd)。手動で登録する場合、または他の MCP クライアントを使う場合は、avcs mcp を指定します:

claude mcp add avcs -- avcs mcp

MCP SDK は optionalDependency として同梱されるため、通常のインストールに含まれており、追加の手順は不要です。

すべてのツールはデフォルトで簡潔に応答します。呼び出し時に verbose フラグを指定すると、整形表示を有効にできます。エージェントが読まない空白も、処理コストがかかることに変わりはないためです。

エージェントが実行するループ — 5 つの操作で、land は 1 回の呼び出しで完了します:

avcs.guide                                  # the loop, the rules, error recovery
avcs.context.build   { intentOid }          # provenance, prior decisions, live risks
avcs.operation.propose { path, content }    # never write final files directly
avcs.validate.run + avcs.evidence.attach    # a behaviour change needs passing evidence
avcs.sync.land       { by }                 # push + checkpoint + integrate → landed | conflict

要となるのは sync.land です。古くなったヘッドは自動的に取り込まれるため、結果は landed か、人間が判断するためのコンフリクトパケットのいずれかです。「pull してやり直し」は不要です。--profile core を追加すると、39 個すべてではなく、これら 13 個のツールだけを公開できます。エージェントに渡されるスキーマは、セッションごとに 35 KB から 14 KB に縮小されます:

claude mcp add avcs -- avcs mcp --profile core

後でアップグレードするには、npm install -g @izagood/avcs@latest を再実行します。削除するには、npm uninstall -g @izagood/avcs を実行します(リポジトリのデータはそのまま残ります)。

ソースからインストールする

最新の main を追跡したい場合や、AVCS 自体を開発したい場合は、同梱の install.sh を使ってください。リポジトリをクローンし、チェックアウト先を参照する avcs ランチャーを設定するため、更新は git pull だけで済み、再インストールは不要です。

curl -fsSL https://raw.githubusercontent.com/izagood/avcs/main/install.sh | bash

このワンライナーは、リポジトリを ~/.local/share/avcs にクローンし(--dir/AVCS_HOME で変更できます)、avcs ランチャーを ~/.local/bin にインストールします。再実行すると、チェックアウトがその場で更新されます。すでにクローンがある場合は、その中からインストーラーを実行してください。

git clone https://github.com/izagood/avcs.git && cd avcs
./install.sh

ランチャーは ~/.local/bin に配置されます(--bin-dir <dir> または AVCS_BIN_DIR で変更できます)。まだ ~/.local/bin が PATH に含まれていない場合、追加する行がインストーラーによって表示されます。

ソースからインストールするその他の方法:

./install.sh --bin-dir /usr/local/bin   # system-wide (may need sudo)
./install.sh --name avcs-dev            # install under a different command name
./install.sh --dir ~/src/avcs --ref v1  # one-liner mode: clone dir + ref to install
./uninstall.sh                          # remove the launcher (data is left intact)

実行時に node が PATH に含まれていない場合は、AVCS_NODE=/path/to/node を指定してランチャーにパスを知らせてください。

ライブラリとして使用する(@izagood/avcs)

ホスティングサーバー(avcshub など)は、AVCS コアをバージョン管理されたパッケージとして利用できます。開発とテストでは型ストリッピングを使って生の .ts を実行しますが、npm publish では tsconfig.build.json を使って tsc でコンパイルした dist/(JS と型宣言)が公開されるため、利用側でビルドツールを用意せずにインポートできます。

npm install @izagood/avcs
import { startHub, type HubHandle } from "@izagood/avcs/hub";   // the hub server
import { ObjectStore, CorruptObjectError } from "@izagood/avcs/store";
import { verifyMessage, generateKeypair } from "@izagood/avcs/identity";
import { Repo } from "@izagood/avcs";                            // root: primary public API

const hub = await startHub({ repoDir: "./data", port: 8080, gated: true });

エントリーポイント:.(ルートのバレル)・./hub・./hub/client・./store・./identity・./types。

リリース:PR で package.json の version を更新し、main にマージします。.github/workflows/release.yml が新しいバージョンを検出し、npm publish(プロビナンス付き)を実行して、コミットに vX.Y.Z のタグを付け、GitHub Release を作成します。公開処理はレジストリの確認で制御されるため、バージョンを変更しない package.json の編集では何も行われません。また、すべての PR でリリースのドライラン(CI での npm run build + npm pack --dry-run)が実行され、マージ前にパッケージングのリグレッションを検出します。@izagood スコープへの公開権限を持つ NPM_TOKEN リポジトリシークレットが必要です。

独自のサーバーを構築する

AVCS はサービスではなく、プロトコルです。準拠サーバーに必要なエンドポイントは 3 つです。

GET  /have            the oids you hold        → ["operation_ab12…", …]
GET  /objects/:oid    one object as JSON       → { … }  (404 if absent)
POST /objects         take one object          → { "oid": "operation_ab12…" }

それ以外はすべて任意です。クライアントは GET /version から機能フラグを読み取り、フラグがない場合、またはエンドポイントが 404/405/501 を返した場合は、独自のフォールバックを使用します。最初の 2 つだけを提供する読み取り専用ミラーも正当なサーバーです。統合キュー、バッチ処理、ロングポーリングを備えていないサーバーも同様です。

これは意図的な設計です。avcs は、自分では制御できないデプロイ環境に接続するパブリッククライアントだからです。

契約となるドキュメントは 2 つです。

  • 26 — サーバープロトコル — 各エンドポイントのリクエスト/レスポンス形式、ステータスコード、機能ネゴシエーション、SSH スタイルのリクエスト署名、そしてサーバーの作成者が実際によく犯すミスをまとめた表です。
  • 24 — 正規化された相互運用 — oid の計算方法です。JavaScript 以外で実装する場合は、まずこれを読んでください。オブジェクトの ID は正規化された JSON の sha256 であり、正規化処理のうち 3 つの部分は、わずかな違いが生じやすい箇所です。ここから逸脱してもエラーにはなりません。互いに収束しない、どちらも正しい 2 つの実装ができあがります。

何よりも先に、spec/canonical-vectors.json(受理例 10 件、拒否例 4 件。それぞれ期待される正規化バイト列と oid を含みます)を使って、正規化処理を検証してください。

次に、適合性テストスイートをサーバーに向けて実行します。

AVCS_CONFORMANCE_URL=https://your.hub/acme/web npm run conformance

適用されるレベルが報告されます。core(3 つのエンドポイントと、ソースの treeHash を再現するクローン)に続き、機能フラグに応じて sync、governance、queue が実行されます。告知していないレベルは失敗ではなくスキップされます。部分的なサーバーも正当なものです。

core が検証するのは、オブジェクトの複製とクローン可能性であり、サーバー側でのプロジェクションではありません。treeHash の比較は、プッシュしたクライアントとクローンしたクライアントという 2 つのクライアント間で行われます。そのため、サーバーが受け取ったデータを忠実に返すことは確認できますが、サーバー自身がそれらのオブジェクトからツリーを導出できることは確認しません。オブジェクトを正しく保存して提供する一方で、何もマテリアライズしないサーバーでも core に合格できます。これは意図したとおりです。プロジェクションはクライアント側の責務であり、それも行うサーバーは、このレベルで求められる以上のことをしています。

まずは次の 3 つの実装を参考にしてください。

  • examples/server.py — 標準ライブラリのみを使った、完全準拠の core レベルサーバーです。JavaScript も avcs ライブラリも不要です。依存するのはドキュメント 24 とゴールデンベクターだけです。これがポイントです。python3 examples/server.py --selftest を実行してベクターで正規化処理を検証し、その後、適合性テストスイートをサーバーに向けて実行してください。

  • avcs-server — このライブラリを基盤に構築された、スタンドアロンでセルフホスト可能なマルチリポジトリサーバーです。core で適合性を検証済みです。実行、コードの確認、またはフォークをして、ご自身のデプロイの出発点としてご利用ください。

  • このリポジトリの startHub — リファレンス実装です。単一リポジトリ対応でマルチテナントではありませんが、プロトコル全体を提供します。仕様を実行可能な形にしたものとして読むか、avcs serve で実行してください。

チェックアウトから実行する

AVCS 自体を開発していますか?すべてのコマンドは、チェックアウトから直接 node で実行できます。

# Walk all four merge scenarios end to end
node --experimental-strip-types src/demo.ts

# Run the behavior-contract test suite
node --experimental-strip-types --test test/*.test.ts      # or: npm test

# Human-facing CLI (or just `avcs <command>` once installed)
node --experimental-strip-types src/cli.ts init .
node --experimental-strip-types src/cli.ts status
node --experimental-strip-types src/cli.ts conflicts
node --experimental-strip-types src/cli.ts log

# Agent-facing MCP server (`avcs mcp` once installed; ships the SDK as an optionalDependency)
npm install
AVCS_REPO=$(pwd) npm run mcp      # = node --experimental-strip-types src/mcp/server.ts

型チェック(tsc --noEmit)には npm install が必要ですが、ランタイム自体に依存関係はありません。

コードマップ

パス役割
src/objects/types.tsオブジェクトモデルの定義(唯一の信頼できる情報源)
src/store/objectStore.ts追記専用のコンテンツアドレス方式のストア
src/core/canonical.ts正規シリアライズとコンテンツアドレス指定(oid)
src/core/identity.tsed25519 による署名/検証と Keyring(フェーズ 3)
src/reducer/reducer.ts操作グラフからコードツリーへのリダクションと競合の段階付け
src/reducer/policy.tsポリシーエンジン(優先順位の段階、信頼性の補正)
src/reducer/incremental.ts差分再リダクション(変更のないグループを再利用)
src/merge/merge3.ts言語に依存しない N-way の行単位 3-way テキストマージ(フェーズ 2)
src/policy/owners.ts, reliability.tsコードオーナーへの割り当て · 信頼性の学習(フェーズ 5)
src/validation/runner.ts, repair.ts検証ランナー · RepairContext(フェーズ 3)
src/concurrency/lease.tsWorkLease(フェーズ 3)
src/release/sbom.tsSBOM の生成(フェーズ 6)
src/hub/hubServer.ts, hubClient.ts複数マシン同期サーバー(フェーズ 7。API 名では従来の「hub」という用語を維持)
src/api/repo.ts高レベルのファサード(CLI、デモ、MCP で共有)
src/api/keystore.tsマシンレベルのプライベートキーストア(~/.avcs/private)
src/mcp/server.tsエージェント向け MCP インターフェース(39 個のツール。--profile core では 13 個を公開)
src/cli.ts人間向けの検査/リリース CLI
src/demo.tsエンドツーエンドのシナリオ

設計ドキュメント

コントリビューション

これは開発初期段階の研究用プロトタイプであり、設計は現在も変化しています。Issue の作成や議論を歓迎します。変更を提案する場合は、現在のモデルの根拠を理解するための出発点として、上記の設計ドキュメントをご覧ください。プルリクエストを作成する前に、npm test と npm run typecheck を実行してください。

イシューの報告

AVCS を使用中に変更してほしい点に気づいたら、自由形式のフィードバックを送るのではなく、イシューを作成してください。構造化された報告のほうが、対応しやすくなります。.github/ISSUE_TEMPLATE に 2 つのテンプレートがあります。

  • 🔧 変更リクエスト — 既存の動作、CLI/MCP インターフェース、デフォルト設定、またはドキュメントの変更を提案します。
  • 🐞 バグ報告 — 動作がおかしい、クラッシュする、または非決定的な結果が生じる場合に使用します。

🌐 どの言語でも歓迎します。 英語、한국어、日本語など、最も使いやすい言語でイシューを作成してください。メンテナーが必要に応じて翻訳します。言語を理由に報告をためらわないでください。

main へのすべてのプッシュとプルリクエストで CI(.github/workflows/ci.yml)が実行されます。Node 22.x と 24.x で、npm ci → npm run typecheck → npm test の順に実行されます。プルリクエストは CI が成功した場合にのみマージされます。

ライセンス

Apache License 2.0 の下でライセンスされています。Copyright © 2026 jaebin lee。帰属表示については NOTICE をご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。