機能承認と push

リクエスト

セッションが作った commit を、リポジトリの agent/<session-id> ブランチに送り出すよう依頼する

セッションはリポジトリに直接 push しない。セッションの作業は checkpoint に commit として残り、その commit をリポジトリに送り出すには push リクエストを作る。sessions:approve を持つ人が承認して初めて、プラットフォーム(API)が push する。リクエストには sessions:write が必要である。

状態意味
requested判断を待っている
approved → pushing承認され、プラットフォームが push している
pushedリポジトリにブランチが作成または更新された
rejected拒否された
failedpush できなかった。理由は receipt にある

ファイルを変更するセッションを用意する

SDK の例は SDK のインストールで作った werft クライアントを、HTTP API の例はサーバーのアドレス API とキー KEY のシェル変数を使う。このスクリプトはリポジトリの README.md に 1 行を追加し、権限リクエストを許可するとターンが終わる。セッションを作ったキーで許可するこの例は、開発用サーバーの運用者キーでだけ通る。Web コンソールで発行したキーなら、許可には別のキーで作ったクライアントを使う(承認用のキーを分けて使う)。

import { waitForTurn } from "@werft-ai/sdk";

const note = await werft.sessions.create({
  profile_id: "claude-coding-local",
  repository_id: "sample-app",
  message:
    'GATE-SPEC {"id":"note","steps":[{"tool":"Bash","input":{"command":"echo tested | tee -a README.md","description":"append to README.md"}}],"final":"updated README.md"}',
});
const sessionId = note.session_id;
await waitForTurn(werft, sessionId, note.turn_id, {
  onRequest: { permission: () => ({ action: "allow" }) },
});

リクエストする

SDK はセッション id だけを渡し、HTTP API は既定でリクエスト本文として空の JSON オブジェクト({})を送る。何を送るかは、リクエストする人が選ぶのではない。プラットフォームが、その時点のセッションの最新の checkpoint とその commit、ブランチ agent/<session-id> を固定する。リポジトリは、repository_id を省くとセッションを作るときに指定したリポジトリになる。リポジトリなしで始まったエージェントのセッションが attach で付けたリポジトリを送るには、HTTP API の本文に repository_id を入れる(SDK の pushRequests.create はまだこの引数を受け取らない)。1 回のリクエストは 1 つのリポジトリを送るので、リポジトリが複数あるときはリポジトリごとに 1 回ずつ出し、承認のルールはどのリポジトリでも同じである。

const push = await werft.sessions.pushRequests.create(sessionId);
console.log({
  state: push.state,
  repository_id: push.repository_id,
  checkpoint_revision: push.checkpoint_revision,
  target_branch: push.target_branch,
});
{
  state: 'requested',
  repository_id: 'sample-app',
  checkpoint_revision: 0,
  target_branch: 'agent/…'
}

レスポンスは 201 である。セッションのリクエスト一覧は pushRequests.list(GET /v1/sessions/{id}/push-requests)で、リクエスト 1 件は pushRequests.get(GET …/push-requests/{push_request_id})で見る。

レスポンス意味
409 PUSH_SOURCE_MISSINGセッションにリポジトリまたは checkpoint がまだない
409 PUSH_REQUEST_OPEN開いているリクエスト(requested・approved・pushing)がすでにある。セッションごとに 1 つである

次のステップ

  • 承認: 固定された commit を確認して承認する
  • 拒否

このページ