機能セッション

リポジトリなしのセッション

リポジトリを clone せず、空の作業スペースで動くセッション

リポジトリを使うかどうかは、プロファイルが決める。プロファイルの repository_mode が required ならセッションごとに repository_id を送り(GitHub 設定があるエージェントのセッションと、ワークスペースの上限が決めるプロファイルは、下の節のとおり省いてよい)、none なら送らず、optional ならどちらでもよい。リポジトリなしで作ったセッションは、空の作業スペースから始まる。SDK の例は SDK のインストールで作った werft クライアントを、HTTP API の例はサーバーのアドレス API とキー KEY のシェル変数を使う。

プロファイルを確認する

const { items } = await werft.profiles.list();
for (const profile of items) console.log(profile.id, profile.repository_mode);
claude-coding-auto required
claude-coding-local required
general none

開発用サーバー(開発用サーバーを実行する)の general プロファイルが none である。

リポジトリなしで作る

repository_id を省いて作る。

const created = await werft.sessions.create({
  profile_id: "general",
  message: 'GATE-SPEC {"id":"no-repo","steps":[],"final":"no repository here"}',
});
console.log(created.status);
const session = await werft.sessions.get(created.session_id);
console.log(session.repository_id, session.repository);
queued
null null

プロファイルと合わないとき

none のプロファイルに repository_id を送る、または required のプロファイルで省くと、422 UNSUPPORTED_CAPABILITY になる。ただし GitHub 設定があるエージェントのセッションと、ワークスペースの上限が決めるプロファイルは、required でも省けばリポジトリなしで始まる。

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

try {
  await werft.sessions.create({
    profile_id: "general",
    repository_id: "sample-app",
    message: "hello",
  });
} catch (error) {
  if (!isApiError(error)) throw error;
  console.log(error.status, error.code, error.message);
}
422 UNSUPPORTED_CAPABILITY Profile general runs without a repository: omit repository_id

リポジトリがないので、push する先もない。このセッションの push リクエストは 409 PUSH_SOURCE_MISSING になる。進行中にプロファイルを変えるときは、リポジトリを使わないプロファイル(optional、none)にしか変えられない。ワークスペースの上限が決めるプロファイルは required にも変えられ、エージェントのリリースに紐づいたセッションはプロファイルを変えられない(プロファイルを変更する)。

エージェントのセッションはリポジトリなしで始まる

エージェントのリリースで作ったセッションで repository_id を省くと、GitHub 設定があるエージェントはリポジトリなしで始まる。例外ではなく、エージェントのセッションの既定の動きである。エージェントは許可されたリポジトリを list_repositories で見て、タスクが読むか変更するリポジトリだけを attach_repository で付ける(セッションの途中でリポジトリを付ける)。付けたリポジトリは作業スペースに git リモートとして入り、そこへの書き込みはリポジトリごとに push 要求 1 回ずつの承認を通る。

リポジトリのないセッションで、成果物として集めたいファイルは作業スペースのルートの out/ に置く。checkpoint がその下のファイルを成果物として集める。repository_id を送ればそのリポジトリで始まり、GitHub 設定がまだない古いエージェントはリリースのリポジトリで始まる。

次のステップ

  • 送信: セッションにメッセージを送る

このページ