---
title: 'embedded worker-runtimeをworker crate実行に接続する'
state: 'inprogress'
created_at: '2026-06-27T18:26:46Z'
updated_at: '2026-06-27T20:58:06Z'
assignee: null
queued_by: 'workspace-panel'
queued_at: '2026-06-27T19:06:30Z'
---

## 背景

`worker-runtime` の embedded Runtime は Backend RuntimeRegistry / Worker Console から見える Worker を作れるが、実際の LLM agent 実行は既存 `worker` crate 側にある。現在はこの execution-plane が接続されていないため、embedded Worker は transcript / observation の箱としては見えるが、user input を実行できない。

この Ticket では、前段の execution backend 境界に対して、既存 `worker` crate を使う embedded execution adapter を実装する。Runtime が Worker を spawn したときに実 `worker::Worker` / `WorkerController` 相当を生成し、input を既存 Worker の run lifecycle に渡し、`protocol::Event` を Runtime observation bus に bridge する。

## 目的

- embedded Runtime Worker が既存 `worker` crate の実行 engine を使って動く。
- user input が fake response ではなく、実 Worker run / LLM execution に渡る。
- 既存 `protocol::Event` が Runtime observation stream に流れる。
- Runtime / Backend / Web Console が Worker 実行の正規経路を共有する。

## 要件

### Adapter placement / dependency boundary

- `worker-runtime` と `worker` crate の依存関係を確認し、循環依存を作らない場所に adapter を置く。
  - `worker-runtime` の optional feature、別 adapter crate、または Backend 側 adapter のいずれかを選んで Ticket thread に理由を記録する。
- Adapter は `worker-runtime` の execution backend 境界に接続する。
- Runtime public API / Browser-facing API に `worker::Worker` handle、socket path、session path、secret、raw manifest path を露出しない。

### Profile / config / authority resolution

- Runtime Worker spawn request の Profile selector / config bundle ref から、既存 Worker 実行に必要な config を解決する。
- prompt resources、model/provider config、SecretRef、ToolRegistry、HostAuthority、memory/session/history scope の扱いを明示する。
- Backend internal Companion 用であっても、暗黙の broad workspace authority を付けない。
- config / secret / provider が不足している場合は typed diagnostic として spawn/input を拒否し、fake response を返さない。

### Input / run lifecycle

- Backend Worker input API からの user input を、既存 Worker の `Method::Run` 相当または同等の run API に渡す。
- Worker が busy の場合、二重 run を typed rejection / queue policy で扱う。v0 で queue しないなら明示する。
- run started / completed / errored / cancelled を Runtime Worker status と transcript projection に反映する。
- stop / cancel が実装できる場合は既存 Worker control に接続し、できない場合は typed unsupported とする。

### Protocol event bridge

- 既存 Worker が出す `protocol::Event` を Runtime observation bus へ bridge する。
- Snapshot / transcript reconstruction / text delta / text done / thinking / tool call / tool result / usage / status / error を、既存 protocol semantics のまま流す。
- Runtime が event variant subset や別 output model を作らない。
- Worker history / session persistence と Runtime transcript projection が矛盾しないようにする。

## Non-goals

- Workspace Companion 専用 UX の完成。
- Web Console の visual redesign。
- remote Runtime process の execution adapter 実装。
- Full multi-user auth / permission / redaction policy。
- Task scheduling / background queue。

## 受け入れ条件

- embedded Runtime に `worker` crate 実行 adapter が接続されている。
- embedded Worker への user input が実 Worker run に渡る。
- provider / config が不足している場合、fake response ではなく typed diagnostic になる。
- 実行時の `protocol::Event` が Runtime observation bus と Backend client-facing WS に流れる。
- transcript projection が実 Worker run の user / assistant / tool / error output と整合する。
- raw execution handle / path / credential / session path が Browser-facing API に漏れない。
- Focused tests が fake provider または deterministic provider で user input -> assistant output -> protocol events -> transcript projection を確認する。
- `cargo test -p worker-runtime --features ws-server` が通る。
- `cargo test -p yoi-workspace-server` が通る。
- `cargo check -p yoi` が通る。
- `git diff --check` が通る。
- `nix build .#yoi --no-link` が通る。
