124 lines
7.0 KiB
Markdown
124 lines
7.0 KiB
Markdown
---
|
|
title: 'Backend内蔵Companion RuntimeとWeb Console MVP'
|
|
state: 'planning'
|
|
created_at: '2026-06-25T11:45:17Z'
|
|
updated_at: '2026-06-25T13:25:34Z'
|
|
assignee: null
|
|
---
|
|
|
|
## 背景
|
|
|
|
Workspace backend は Worker runtime registry / Backend internal runtime を control plane として扱う方向に進んでいる。Orchestrator については Backend internal runtime 上の Worker として Kanban / Ticket event を routing する設計が固まりつつある。同じ考え方で、Companion も local Pod / TUI 専用ではなく、Backend internal runtime 上の lightweight Worker として起動し、Web frontend から接続できるようにしたい。
|
|
|
|
この Ticket では、TUI Console の Web 移植版に向けた MVP として、Backend internal Companion Worker にメッセージを送り、LLM 応答を Web frontend で受け取るところまでを実装する。Companion は v0 では filesystem / shell / ticket mutation / runtime operation tools を持たなくてよい。まずは tools なしの conversational Worker として、Backend internal runtime、Web API、Web console UI、stream / transcript projection の最小経路を作る。
|
|
|
|
## 目的
|
|
|
|
- Backend internal runtime 上で Companion Worker を起動・保持できる。
|
|
- Workspace web frontend から Companion に接続できる。
|
|
- Web console UI から message を送信し、Companion の応答を表示できる。
|
|
- TUI Console の基本体験を Web に移植するための最小 transcript / run status / input path を作る。
|
|
- v0 では tool authority を持たせず、Backend internal conversational Worker として安全に始める。
|
|
|
|
## 要件
|
|
|
|
### Backend internal Companion runtime
|
|
|
|
- Backend internal runtime 上に Companion Worker を表現する。
|
|
- Companion は local Pod process / Unix socket / `.yoi/pods` metadata に依存しない。
|
|
- Worker identity は runtime scoped に扱う。
|
|
- `runtime_id`
|
|
- `worker_id`
|
|
- `display_name`
|
|
- `display_ref` 例: `companion@backend-internal`
|
|
- Runtime registry / Worker list/detail から Backend internal Companion が見える。
|
|
- v0 Companion は tools なし、または明示的に empty tool registry / minimal safe tool registry とする。
|
|
- Workspace filesystem、shell、git、Ticket mutation、raw session path、raw socket path を Companion authority にしない。
|
|
|
|
### Conversation / transcript model
|
|
|
|
- Backend internal Companion に user message を送れる API を追加する。
|
|
- Assistant response を Web frontend が受け取れるようにする。
|
|
- v0 は以下のどちらかの方式でよい。
|
|
- request / response 完了後に transcript を返す。
|
|
- SSE / streaming endpoint で delta / final response を返す。
|
|
- 実装方式は実装時に選んでよいが、UI が「送る -> 返る」を確認できること。
|
|
- Backend は raw provider trace を durable authority にしない。
|
|
- Web console 用 transcript は bounded projection とし、将来 prune / overview 化できる形にする。
|
|
- usage aggregate / run status は取れる範囲で残す。v0 で詳細 dashboard は不要。
|
|
|
|
### Web API
|
|
|
|
- Workspace server に Companion connection / message API を追加する。
|
|
- API は browser から raw runtime path / socket path / session path を受け取らない。
|
|
- API は current workspace の Backend internal Companion を解決する。
|
|
- 最低限以下を扱う。
|
|
- Companion status / detail 取得。
|
|
- Transcript / conversation projection 取得。
|
|
- User message 送信。
|
|
- Assistant response 取得または stream。
|
|
- Error は typed response として扱う。
|
|
- companion unavailable
|
|
- already running / busy
|
|
- invalid input
|
|
- provider error
|
|
- response timeout / cancelled
|
|
|
|
### Web Console UI
|
|
|
|
- Workspace web に Companion Console 画面または panel を追加する。
|
|
- TUI Console の基本 UI を Web 向けに移植する。
|
|
- transcript 表示。
|
|
- user message composer。
|
|
- sending / generating / idle / error 状態表示。
|
|
- assistant response の表示。
|
|
- v0 は message round-trip が主目的であり、TUI Console の全機能移植は不要。
|
|
- tool call UI、file viewer、diff viewer、thinking block grouping、multi Pod attach は scope 外でよい。
|
|
- Web UI は Backend API response / stream を authority とし、local session file / Pod socket を直接読まない。
|
|
|
|
### Runtime / LLM integration
|
|
|
|
- Backend internal Companion は existing LLM worker / provider config / profile selection のどれを使うか実装時に決める。
|
|
- v0 では project/default Companion profile の完全継承は必須ではないが、model / provider / language / prompt selection の最小方針を明確にする。
|
|
- Companion prompt は Rust 直書きではなく prompt resource boundary を使う。
|
|
- tools なし Companion でも system prompt / conversation history / current workspace identity は最小限渡せるようにする。
|
|
- Long-running provider request 中に複数 message を送った場合の扱いを決める。
|
|
- v0 は single-flight / busy reject でよい。
|
|
|
|
### Safety / authority
|
|
|
|
- Browser は raw provider credential、socket path、session path、runtime file path を知らない。
|
|
- Backend internal Companion は workspace filesystem / shell / git / Ticket mutation authority を持たない。
|
|
- 将来 tool を追加する場合も、domain-specific backend operation / explicit grant 経由にする。
|
|
- User message / assistant response は normal conversation history として扱い、hidden context injection にしない。
|
|
- Provider error / cancellation / timeout は Web UI に明示する。
|
|
|
|
## Non-goals
|
|
|
|
- Full TUI Console parity。
|
|
- Tool call execution UI。
|
|
- Filesystem / shell / git / Ticket mutation tools を Companion に渡すこと。
|
|
- Local Pod Companion の廃止。
|
|
- Remote runtime implementation。
|
|
- Multi-user auth / permission model の完成。
|
|
- Persistent raw session DB ingest。
|
|
- Usage dashboard の完成。
|
|
- Orchestrator routing / Kanban integration。
|
|
|
|
## 受け入れ条件
|
|
|
|
- Backend internal runtime 上に Companion Worker が存在し、runtime / worker API から確認できる。
|
|
- Web frontend から Backend internal Companion の status / transcript projection を取得できる。
|
|
- Web frontend の Console UI から user message を送信できる。
|
|
- Companion が LLM response を生成し、Web UI に表示される。
|
|
- v0 Companion は filesystem / shell / git / Ticket mutation tools を持たない。
|
|
- Browser が raw socket path / session path / runtime path / provider credential を扱わない。
|
|
- Provider request 中の busy / error / timeout が typed error または UI state として扱われる。
|
|
- Prompt prose は resource boundary に置かれている。
|
|
- Focused backend / frontend tests が追加されている、または E2E 不足の場合はテスト可能範囲と手動確認手順が記録されている。
|
|
- `cargo test -p yoi-workspace-server` が通る。
|
|
- `cargo check -p yoi` が通る。
|
|
- `cd web/workspace && deno task check && deno task build` が通る。
|
|
- `git diff --check` が通る。
|
|
- `nix build .#yoi --no-link` が通る。
|