775文字
4分
編集

Cloudflare Artifacts、Git 互換のエージェント向けバージョン管理

Cloudflare は、エージェントやサンドボックス、Workers からセッション単位でリポジトリを大量に扱う開発者向けに、Git クライアントと互換な HTTPS リモートを提供するバージョン管理ストレージ Artifacts のプライベート β を開始した。認証付きリモート URL とトークンを渡せば通常の git clone / push が行え、サーバレスや Git 実行環境がない文脈では REST と Workers 向け API からリポジトリ作成・資格情報発行・コミット操作に届く。既存の Git リポジトリは import で取り込み、分岐は fork で読み取り専用の隔離コピーとして切り出せる。プライベート β の利用者は順次追加され、パブリック β は同年 5 月初旬を目安に開放する方針である。内部利用ではセッションごとにファイル系とプロンプト履歴をリポジトリへ積み、時点に戻る・他者と共有する・任意の地点からフォークする用途を想定している。

実装は Durable Objects を基盤に、リポジトリごとに状態を分離する。Git のスマート HTTP(v1 / v2)、浅いクローンや have / want 交渉を含む取得、Zig で実装したプロトコルエンジンを Wasm に載せて動かす。オブジェクトは SQLite 上に格納し大きな blob は行を分割、帯域とメモリを抑えるため取得時に既知のベースがあればデルタを返す。スナップショット用途に R2、認証トークン追跡に同期 KV を使う。メタデータ用途に git-notes をネイティブ扱いし、プロンプトやエージェント帰属をオブジェクト本体を変えずに付与できる。

ギガバイト級で履歴が長いリポジトリでは、起動時に完全クローンすると数分かかることがある。これに対し Artifacts の投入に合わせて ArtifactFS をオープンソース化した。blobless 相当でツリーと参照を先に取り、ファイル本文はバックグラウンドでハイドレートし、マニフェストや設定、コードを優先する。本文の取得が追いつかないまま読み込みに来た場合は、揃うまで読み取りがブロックする。コミットと git push で戻し、ArtifactFS 自体は任意の Git リモート(GitHub や自前ホストを含む)に対して使える。

今後の予定として、名前空間・リポジトリ単位のメトリクス拡充、Event Subscriptions 経由のリポジトリイベント(push / pull / clone / fork 等)、TypeScript・Go・Python のクライアント SDK、リポジトリ横断を含む検索 API、Workers Builds 向けの API 連携を挙げている。

課金単位料金毎月の無償枠に含まれる量
操作$0.15 / 1,000 回10,000 回
ストレージ$0.50 / GB1 GB

未使用や冷えたリポジトリの固定費を課さない方針で、消費ストレージと操作回数に基づく。β の進行に伴い Workers 無償枠への提供と公平な上限も検討し、本番課金前に価格変更があれば事前通知する。プライベート β の希望者はフォームで登録できる。

typescript
interface Env { ARTIFACTS: Artifacts }
export default {
  async fetch(request: Request, env: Env) {
    const { remote, token } = await env.ARTIFACTS.import({
      source: { url: "https://github.com/cloudflare/workers-sdk", branch: "main" },
      target: { name: "workers-sdk" },
    });
    const repo = await env.ARTIFACTS.get("workers-sdk");
    const fork = await repo.fork("workers-sdk-review", { readOnly: true });
    return Response.json({ remote: fork.remote, token: fork.token });
  },
};

#参考文献