7.8 KiB
| title | state | created_at | updated_at | assignee | queued_by | queued_at |
|---|---|---|---|---|---|---|
| Workspace Browserから手動Coding Workerを作成する導線を追加する | closed | 2026-07-02T12:59:57Z | 2026-07-02T18:24:50Z | null | workspace-panel | 2026-07-02T16:13:24Z |
背景
Workspace Browser には Runtime / Worker catalog と Worker Console はあるが、ユーザーが Browser から「普通に読み書きできる coding agent Worker」を明示作成する導線がまだ無い。
現状の workspace-server には Runtime worker spawn の backend 経路があり、Browser-facing API としても /api/runtimes/{runtime_id}/workers が存在する。ただし、この既存 endpoint は Runtime create に近い field を受け取り得るため、Browser UI から ConfigBundleRef、requested capabilities、raw workspace path、cwd、secret、runtime store path などを直接渡す導線にしてはいけない。
この Ticket では、Workspace sidebar の WORKER セクションから明示的に New form を開き、Backend が coding preset を解決して Worker を作成し、作成後に Worker Console へ遷移する導線を作る。
目的
- Workspace Browser から手動で Coding Worker を作成できるようにする。
- Sidebar の WORKER 見出し横に
Newbutton を置く。 - Browser-facing request は product-level launch request とし、Runtime internal create request を直接露出しない。
- Backend が coding preset から Profile / ConfigBundle / execution backend / workspace scope を解決する。
- 作成成功後は Worker Console に遷移する。
- 作成失敗時は sanitized diagnostic を form に表示する。
UI 設計
Sidebar entry point
web/workspace/src/lib/workspace-sidebar/WorkersNavSection.svelte の WORKER section heading 横に New button を追加する。
WORKER New
New を押すと Worker 作成 form を開く。v0 は sidebar 内の inline panel でも modal/dialog でもよいが、既存 sidebar UX を壊さないこと。
Form fields
v0 の form は次の 4 field に限定する。
display_name- optional。
- Worker identity ではなく表示名だけに使う。
runtime_id- 対象 Runtime。
- default: embedded Runtime。
- 候補は
/api/workspaceなど既存 projection からcan_spawn_worker=trueの Runtime を使うか、v0 は embedded Runtime 固定でもよい。
profile- Worker の振る舞いを選ぶ Profile。
- default: coding 用 Profile。
- Browser の自由入力ではなく、Backend が公開する候補から選ぶ。
initial_text- optional。
- 作成直後の user input として Worker に渡す。
kind = coding はこの endpoint の launch mode として Backend が持ってよいが、form の入力 field にはしない。
自由入力にしないもの:
- raw workspace path。
- cwd。
- tool scope。
ConfigBundleRef。requested_capabilities。- secret / token。
- Runtime endpoint / socket path / session path / store path。
Success behavior
Worker 作成成功後:
- Worker list を refresh する。
- 作成された Worker の Console に遷移する。
/runtimes/{runtime_id}/workers/{worker_id}/console
Error behavior
Worker 作成失敗時:
- form 内に sanitized diagnostic を表示する。
- raw path、secret、Runtime endpoint、internal store path を表示しない。
- form の入力値は保持する。
Backend API 設計
Browser から既存 Runtime create payload を直接叩かせず、Workspace Backend に product-level endpoint を追加する。
候補:
POST /api/workers
request v0:
{
"runtime_id": "embedded-worker-runtime",
"display_name": "scratch worker",
"profile": "builtin:coder",
"initial_text": "このリポジトリを確認して"
}
response:
{
"runtime_id": "embedded-worker-runtime",
"worker_id": "...",
"worker": { ... existing WorkerSummary or WorkerDetail projection ... }
}
Backend resolution
Backend は manual Coding Worker launch endpoint として、request の profile を次へ解決する。
- Profile 候補に存在するか検証する。
- Profile から default ConfigBundle を解決 / sync / check する。
- embedded / selected Runtime spawn を行う。
- normal workspace read/write capable Worker execution path に接続する。
- initial text を Worker input / initial input として送る。
Browser-facing request に kind、ConfigBundle identity、requested capabilities を持たせない。
既存 endpoint との関係
/api/runtimes/{runtime_id}/workersは internal-ish Runtime spawn endpoint として残ってよい。- Browser の New Worker UI は新しい
/api/workersproduct-level endpoint を使う。 - 将来的に
/api/runtimes/{runtime_id}/workersを debug/admin/internal に寄せるかは別 Ticket で扱う。
Coding Worker の意味
この Ticket の Coding Worker は、一般的な coding agent と同様に workspace 内のファイルを読み書きできる Worker を指す。
ただし Browser が file path / scope / tool grant を直接指定するのではなく、Backend が現在の Workspace Backend 実行環境に基づいて既存 execution backend / tool host の範囲へ接続する。
v0 では embedded Runtime / local execution backend を対象にする。remote Runtime で workspace provisioning が未対応の場合は typed diagnostic で拒否してよい。
実装要件
WorkersNavSection.svelteの heading 横にNewbutton を追加する。- New form を追加し、display name / runtime / profile / initial text を入力できる。
- Form submit で Browser-facing
/api/workerslaunch endpoint を呼ぶ。 - Backend に
/api/workersPOST endpoint を追加する。 - Backend request type は product-level launch request とし、Runtime create request をそのまま deserialize しない。
- Backend が request の
profileを default coding Worker launch に解決する。 - Browser-facing request/response に raw workspace path、cwd、ConfigBundleRef、requested capabilities、secret、Runtime endpoint、store path を含めない。
- 作成成功後に Worker Console へ遷移する。
- 作成失敗時に sanitized diagnostic を表示する。
- Worker list refresh を行う。
受け入れ条件
- Sidebar WORKER heading 横に
Newbutton がある。 Newで Worker 作成 form が開く。- Form には display name / runtime / profile / initial text だけがある。
- Form から coding Worker を作成できる。
- Form request は
/api/workersproduct-level endpoint を使う。 - Browser-facing payload に raw path / cwd /
ConfigBundleRef/ requested capabilities / secret / Runtime endpoint / store path が含まれない。 - Backend が request の
profileから Profile / ConfigBundle / execution backend を解決する。 - 作成成功後、作成された Worker の Console に遷移する。
- 作成失敗時、sanitized diagnostic が表示される。
- remote Runtime など未対応対象では typed diagnostic で拒否される。
- Focused tests が Backend launch endpoint、payload sanitization、success projection、unsupported runtime diagnostic、UI form rendering / submit path を確認する。
cd web/workspace && deno task testが通る。cd web/workspace && deno task checkが通る。cargo test -p yoi-workspace-serverが通る。cargo check -p yoiが通る。git diff --checkが通る。nix build .#yoi --no-linkが通る。
対象外
- Remote Runtime workspace provisioning の完成。
- per-worker cwd / tool scope の新 UI。
- ConfigBundle editor UI。
- Profile picker の本格実装。
- multi-agent Ticket role launch UI。
- Worker reconnect / stale recovery UI。
/api/runtimes/{runtime_id}/workersの削除。