2.7 KiB
2.7 KiB
| title | state | created_at | updated_at | assignee | queued_by | queued_at |
|---|---|---|---|---|---|---|
| Add host-owned WebSocket driver for Plugin services | queued | 2026-06-24T19:51:56Z | 2026-06-24T20:13:41Z | null | workspace-panel | 2026-06-24T20:12:03Z |
背景
Current host_api.websocket is a pull primitive: Plugin code must explicitly call recv(timeout) while an exported function is running. That is insufficient for Discord Gateway / Slack Socket Mode style long-lived integrations. Service Plugins need Host-owned WebSocket connections whose incoming frames are queued as ingress events and whose outgoing sends are requested through output commands.
This Ticket adds the WebSocket-specific event source and command executor on top of the Service ingress queue and output command model.
要件
- Host-owned WebSocket connection driver を追加する。
- Plugin manifest / grant で WebSocket subscription / target authority を表現できる。
- Host が connect / reader task / close / error detection を管理する。
- Incoming text frame を Plugin ingress event に変換し、service ingress queue に enqueue する。
- Close / error / reconnect-needed も ingress event または status diagnostic として扱う。
- Plugin からの WebSocket send は output command として受け取り、grant check 後に Host が送信する。
- v0 で扱う frame kind を明確にする。
- text frame required。
- binary / ping / pong / close の扱いを diagnostic / unsupported / control handling として定義する。
- Connection status、last frame time、last error、queue drops、send failures を diagnostics に出す。
- Existing
recv(timeout)pull API は long-lived integration の recommended path にしない。
Non-goals
- Discord protocol implementation。
- Full reconnect / resume policy の完成。
- Secret store / auth injection の全面設計。
- Binary frame application payload support。
- Browser-facing WebSocket API。
受け入れ条件
- Host-owned WebSocket driver が Service Plugin に紐づく connection を管理できる。
- Incoming text frame が Plugin ingress queue に event として入る。
- Plugin output command から WebSocket text send が実行される。
- Ungranted send / unauthorized target は fail closed で diagnostic になる。
- Connection close / error が service status diagnostics に反映される。
- Existing pull
recv(timeout)API が docs/templates の recommended service integration path から外れている。 - WebSocket driver / ingress / send command の tests が追加されている。
cargo test -p pod、cargo check -p yoi、git diff --check、nix build .#yoi --no-linkが通る。