--- title: 'RuntimeへProfile/config bundleを同期する' state: 'done' created_at: '2026-06-25T15:49:30Z' updated_at: '2026-06-26T07:40:38Z' assignee: null queued_by: 'workspace-panel' queued_at: '2026-06-25T16:44:39Z' --- ## 背景 Runtime は Worker を動かす環境であり、Worker creation 時には Profile / prompt resources / tool policy / plugin declarations / host-local policy を使って最終的な WorkerSpec を作る必要がある。Backend が Profile を完全解決して巨大な WorkerSpec を毎回 Runtime に渡す設計にすると、remote Runtime / Plugin / secret / mount / host-specific policy と相性が悪い。 一方で、Runtime に `profile = "builtin:companion"` の selector だけを送っても、remote Runtime が同じ Profile / prompt / plugin resource を持っている保証はない。したがって、Backend は workspace/project で有効な Profile/config bundle を Runtime に同期し、Worker creation では profile selector + bundle digest + intent を送る形にしたい。 この Ticket は `worker-runtime` core の後続として、Runtime への Profile/config bundle sync と Runtime-side profile resolution を実装する。初期 `worker-runtime` core では `config_bundle = None` による builtin/default fallback で動作確認できるため、この同期機能は別実装粒度とする。 ## 要件 ### Config bundle model - Runtime に同期可能な Profile/config bundle model を定義する。 - Bundle は digest / revision / workspace id / created_at / source metadata を持つ。 - Bundle は少なくとも以下を表現できる。 - Profile definitions。 - prompt resources。 - workflow definitions or references。 - tool declarations / tool policy。 - plugin descriptors / package refs / digests。 - non-secret model/provider config refs。 - language settings。 - workspace/project metadata。 - grants / policy declarations。 - Secret values、runtime-local mount actual path、local cache path、raw socket/session path は bundle に含めない。 - Secret は secret ref / grant / policy として表現し、値は Runtime host-local secret store が解決する。 ### Runtime sync API - Runtime は config bundle を受け取り、digest で保存・照合できる。 - Embedded Runtime では direct lib API で bundle sync できる。 - Networked Runtime では REST API で bundle sync できる shape を定義する。 - 例: `PUT /v1/config-bundles/{digest}`。 - 例: `GET /v1/config-bundles/{digest}` or status endpoint。 - Runtime は create worker 時に指定された bundle digest を持っているか検証する。 - Bundle digest mismatch / missing bundle / invalid profile selector / unsupported declaration を typed error にする。 ### Worker creation integration - `CreateWorkerRequest` は profile selector + config bundle ref を受ける。 - Runtime は bundle 内の Profile を最終解決する。 - Runtime は host-local policy / capability / secret / mount / plugin grant enforcement を適用して `ResolvedWorkerSpec` を作る。 - Backend は Profile を完全解決した巨大 WorkerSpec を送らず、intent / profile selector / bundle ref / required capabilities を送る。 - Runtime-local builtin/default fallback は残してよいが、remote Runtime / plugin use では bundle が必要になる policy を設定できる。 ### Backend responsibility - Backend は workspace/project の有効 config bundle を作成・選択し、対象 Runtime に同期する。 - Backend はどの Runtime にどの bundle を同期してよいかを policy / workspace visibility で判断する。 - Backend は Browser に Runtime credential / direct endpoint / raw bundle storage path を渡さない。 - Backend RuntimeRegistry は Runtime の bundle availability / digest status を確認できる。 ### Plugin / host policy boundary - Plugin package bytes を bundle に含めるか package ref + digest にするかは実装時に決める。 - Runtime は plugin descriptor / digest / grants を検証してから tool/service/ingress surface を登録する。 - Runtime host が保護したい secret / mount / network egress / shell/git availability は host-local policy として最終判断する。 - Bundle sync は Plugin execution を直接許可するものではなく、Runtime-side grant enforcement が必要である。 ## Non-goals - `worker-runtime` core crate の作成。 - FS store feature の実装。 - REST command server の実装そのもの。ただし API shape は定義してよい。 - Full Plugin package manager / registry / signature policy。 - Secret value synchronization。 - Workspace mount actual path synchronization without host policy。 - Backend internal Companion Web Console completion。 ## 受け入れ条件 - Config bundle domain type が定義され、digest / revision / provenance を持つ。 - Runtime は bundle を保存・一覧/確認・digest 検証できる。 - `CreateWorkerRequest` が profile selector + config bundle ref を扱える。 - Runtime は bundle 内 Profile を解決し、host-local policy を適用する境界を持つ。 - Missing bundle / digest mismatch / invalid profile / unsupported declaration が typed error になる。 - Bundle は secret values / raw socket path / raw session path / runtime-local mount actual path を含まない。 - Backend は Runtime へ bundle sync し、Runtime の bundle availability を確認できる。 - Remote Runtime 用 REST sync API shape または実 endpoint がある。 - Builtin/default fallback と synced bundle mode の責務が docs/tests で区別されている。 - `cargo test -p worker-runtime` が通る。 - `cargo test -p yoi-workspace-server` が通る。 - `cargo check -p yoi` が通る。 - `git diff --check` が通る。 - `nix build .#yoi --no-link` が通る。