リクエスト
セッションが作った commit を、リポジトリの agent/<session-id> ブランチに送り出すよう依頼する
セッションはリポジトリに直接 push しない。セッションの作業は checkpoint に commit として残り、その commit をリポジトリに送り出すには push リクエストを作る。sessions:approve を持つ人が承認して初めて、プラットフォーム(API)が push する。リクエストには sessions:write が必要である。
| 状態 | 意味 |
|---|---|
requested | 判断を待っている |
approved → pushing | 承認され、プラットフォームが push している |
pushed | リポジトリにブランチが作成または更新された |
rejected | 拒否された |
failed | push できなかった。理由は 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 つである |