8.4 KiB
| title | state | created_at | updated_at | assignee | queued_by | queued_at |
|---|---|---|---|---|---|---|
| worker-runtime core crateと組み込みRuntime APIを作る | inprogress | 2026-06-25T12:17:05Z | 2026-06-25T16:32:52Z | null | workspace-panel | 2026-06-25T16:20:10Z |
背景
Yoi は旧 Pod 相当の実行単位を今後 Worker として扱い、Runtime が複数 Worker を保持・操作する構造へ移行する。llm-worker は llm-engine へ改名し、既存 pod crate は worker crate へ改名する。次に必要なのは、Backend が持つ RuntimeRegistry ではなく、Worker を実際に動かす環境そのものとしての Runtime を library として定義することである。
この Ticket は worker-runtime 全体を一括実装する umbrella ではない。最初の実装 slice として、HTTP server、WebSocket/SSE server、FS 永続化、remote client は含めず、Backend などに組み込める worker-runtime core crate と memory-backed embedded Runtime API を作る。
要件
Crate / feature boundary
crates/worker-runtimeを追加する。worker-runtime/lib.rsは embeddable Runtime core API を公開する。- この Ticket では
worker-runtime/main.rs/ standalone Runtime process は実装しない。 - Core crate は HTTP server / WebSocket server / filesystem store dependency を強制しない。
- Cargo feature の土台だけは切ってよい。
memory-storeor core default。- 将来の
fs-store。 - 将来の
http-server。 - 将来の
event-stream/ws-server。 - 将来の
http-client。
Runtime / Worker model
- Runtime は Worker を動かす環境であり、trait object ではなく concrete runtime domain entity として扱う。
- Runtime は Runtime-scoped Worker identity を使う。
runtime_idworker_iddisplay_namedisplay_ref
- Browser / Backend / API が
pod_name/ socket path / session path を authority にしない model を定義する。 - Runtime / Worker の summary / detail / state / capability / diagnostics 型を定義する。
- UI 表示用
worker-name@runtime-nameと API authorityruntime_id + worker_idを分ける。
Embedded Runtime API
- Backend などの Rust process に
Runtimeを直接組み込める。 - v0 は memory store でよい。
- Runtime API は transport API ではなく、
worker-runtime/lib.rsが公開する Rust API として定義する。 - API surface は以下の責務に分ける。
Runtime management API
Runtime 自体の管理・観測を扱う。Worker 1体の操作とは分ける。
runtime_summary/runtime_status。- Runtime capabilities。
- Runtime diagnostics。
- Runtime-local store/allocation status。
- Runtime が保持している Worker 数や busy summary。
- v0 では Runtime config mutation は不要。config bundle sync も別 Ticket とする。
Worker catalog / lifecycle API
Runtime 内に存在する Worker の作成・一覧・停止を扱う。これは旧 Pod の process lifecycle をそのまま露出するのではなく、Runtime-scoped Worker lifecycle として定義する。
list_workers(query)。get_worker(worker_id)。create_worker(CreateWorkerRequest)。stop_worker(worker_id)。cancel_worker(worker_id)or active run cancel。- Unknown worker / duplicate worker / busy worker / unsupported capability を typed error にする。
CreateWorkerRequest は Web/Dashboard intent を直接受けない。Backend resolver 後、Runtime が解決可能な profile-oriented request とする。
display_name/ optional caller-provided worker id。WorkerIntent。ProfileSelector。- optional
ConfigBundleRef。 - requested capabilities。
- optional workspace / mount references。
Profile/config bundle sync は別 Ticket とし、この Ticket では config_bundle は optional placeholder として型に含める程度でよい。config_bundle が無い場合、Runtime-local builtin/default Profile resources の範囲で toolsなし Worker を作れるようにする。
Worker interaction API
Worker へ入力を送り、run を開始する経路を扱う。これは既存 worker crate が持つ single Worker の入力処理を Runtime 経由で呼べるようにする層であり、Worker 内部 API を無制限に継承しない。
send_input(worker_id, WorkerInput)。- v0 input は user message を最小単位とする。
- v0 は per-worker single-flight / busy reject でよい。
- acceptance result は accepted / rejected / busy / not found / failed を区別する。
- Runtime は
pod_name/ socket path / session path を input authority にしない。
Worker observation / projection API
Worker の状態と UI 用 projection を扱う。raw provider trace / raw full session log は Runtime public authority にしない。
- worker status / active run summary。
- bounded transcript projection。
- event cursor or subscription abstraction。
- usage / overview projection placeholder。
- diagnostics / last error。
- v0 は in-memory event log / transcript projection でよい。
Existing Worker APIとの関係
workercrate は当面 single Worker host として残る。- Runtime core は
workercrate の全 public API を再公開しない。 - Runtime が公開するのは複数 Worker 管理に必要な catalog / lifecycle / interaction / projection API のみ。
- Worker 固有の socket protocol / attach details / session file details は Runtime API に漏らさない。
Store / allocation core
- Memory-backed store を core に含める。
- Store API は将来
fs-storefeature や Backend-provided store に差し替えられる境界を持つ。 pod-store相当の責務は standaloneworker-storeにせず、Runtime internal persistence abstraction として設計する。pod-registry相当の責務は standaloneworker-registryにせず、Runtime internal allocation / scope abstraction として設計する。- この Ticket では full FS persistence / host-level stale reclaim は実装しない。
Existing Worker / LLM engine boundary
llm-engineは LLM turn engine として扱い、Runtime / Worker identity は持たせない。workercrate は当面 single Worker host として残り、Runtime core から直接大規模移植しない。- Existing process/socket/session compatibility は後続 adapter / integration で扱う。
Non-goals
fs-storeimplementation。- REST command server。
- SSE / WebSocket observation server。
- HTTP client / Backend RuntimeRegistry remote integration。
- Backend internal Companion Web Console。
- Existing
pod-store/pod-registrycrate の即時削除。 - Existing Worker process/socket/session model の削除。
- Full remote Runtime protocol。
- Profile/config bundle sync implementation。
- Plugin package / grant / prompt resource synchronization。
受け入れ条件
crates/worker-runtimeが追加されている。worker-runtimecore は HTTP / WS / FS store dependency なしで library として使える。Runtimeconcrete struct と Runtime/Worker domain types が公開されている。- Runtime management API、Worker catalog/lifecycle API、Worker interaction API、Worker observation/projection API が型として分離されている。
- Memory-backed embedded Runtime が runtime summary/status、worker list/detail/create、send input、stop/cancel、bounded transcript projection、event cursor/subscription placeholder を持つ。
- Worker create request は Web/Dashboard intent ではなく、
WorkerIntent、Profile selector、optionalConfigBundleRef、requested capabilities を表現できる。 ConfigBundleRefが無い場合、Runtime-local builtin/default resources で toolsなし Worker を作れる。workercrate の socket / attach / session file details が Runtime public API に再公開されていない。- Profile/config bundle sync は実装されていないが、後続 Ticket が接続できる型境界がある。
runtime_id + worker_idが authority であり、pod_name/ socket path / session path を authority にしない。- Store / allocation abstraction が Runtime internal responsibility として定義されている。
worker-store/worker-registrystandalone crate は作られていない。cargo test -p worker-runtimeが通る。cargo check -p yoiが通る。git diff --checkが通る。nix build .#yoi --no-linkが通る。