Skip to content

daily use app server_ja

Kazushi Kamegawa edited this page Oct 7, 2026 · 1 revision

App Server 日常機能 — Issue #155

English

日付: 2026-10-08 追跡: Issue #155(親 #149)。全体計画: Codex App Server 更新対応とリモート接続 の Phase 6。 状態: 設計・計画は2026-10-08承認済み。実装は未着手。

概要

CLI 0.159.1 stable を対象に(0.155.1 は回帰比較用)、マージ済みの #152(mapping/所有者)、#153(履歴・保存添付 metadata 復元)、#154(質問・権限・MCP 対話)を拡張して残りの日常機能を完成させる。基準はコミット 69deda1(PR #169 マージ後)、Worker 契約 v20。マージ時点で次の空き契約番号を採番する。CLI・SDK・ランタイム・パッケージは更新しない。

再構築せずに再利用するもの: カタログのモデル ID・既定値・非表示既定・推論強度・service tier と継承/永続/次ターン設定、構造化 turn/plan/updated ステップ、composer 添付と localImage、#153 の上限付き thread/attachment/list paging/tombstone/single-flight 復元、#154 の MCP 認証/フォーム。

設計

計画と状態

  • turn/plan/updated は構造化ステップのスナップショットとして維持する。item/plan/delta は item ごとの上限付き暫定テキストとして追加し、完了 plan item で置換する(完了本文は delta の連結と一致しなくてよい)。本文を解析してステップを重複生成しない。
  • 固定 stable schema は item/plan/delta を EXPERIMENTAL と記述しているため任意入力とする。delta がなくても完了 plan を正しく表示し、契約ファイルに experimental 記述の method として記録する。
  • 完了状態が重複・遅延 delta と履歴/live の重複に優先する。上限は計画本文 UTF-8 64 KiB、構造化ステップ200件、既存の履歴・通知バッファ、50–100 ms のまとめ表示。
  • thread/status/changed、configWarning、model/rerouted、model/verification、item/mcpToolCall/progress を上限付き通知欄(thread 当たり50件、各4 KiB、種別と identity で集約)に表示する。接続状態と thread 状態は分けて表示する。model/verification は情報通知で、回答やネイティブ本人確認を起動しない。

カタログと入力検証

  • live カタログを正本とし、max/ultra は広告された場合のみ選択可能にする。既定モデルを固定しない。
  • モデル情報に上限付き inputModalities と availableAccessPrograms を追加する。inputModalities 省略時は schema 既定値(text, image)。明示的な空配列や未知値は許可とみなさない。
  • composer と Worker の turn/start 直前で実効モデルを検証する。不対応入力は理由付きで composer に残し、モデルを無断変更しない。画像以外のファイルは mention 入力(マッピング済み server path 参照)で text 対応だけを要求し、画像は image 対応が必要で、汎用 file modality はない。audio/未知 modality は表示のみ。

明示的な shell 実行

  • 入口は /shell [--timeout-ms N] -- <command> のみで、候補選択では実行しない。/shell は9番目の組み込みコマンドとし、候補一覧の組み込み表示上限を9件にする。skill 候補は削らない。
  • -- 以降のコマンドは完全に保持する。空コマンド、重複/未知オプション、負数・不正値・int64 超過の timeout を拒否する。省略はサーバー既定(1時間)、0 は即時 timeout、無制限を表す値はない。
  • 対象は現在の所有者が参加済みの idle thread のみ。確認画面に接続/profile、thread、正確なコマンド(不活性テキスト、生ログに残さない)、サーバー側 cwd、timeout、0.159.1 では thread/shellCommand が常に sandbox 外の full access で実行されることを表示する。
  • Execute 後に対象・世代・cwd を再検証し、IApprovalPolicyEngine をローカルで評価する。ポリシー拒否は上書きできず、Full access や既存 grant で確認を省略しない。
  • 空の RPC 応答は受付であり完了ではない。受付 deadline と実行 timeout は独立。イベントは実際の thread/turn/item ID で表示し、要求との対応を主張しない。
  • thread ごとの未確定 shell 送信は1件。確定応答またはエラーで解除し、受付 timeout・切断で結果不明の場合は接続世代の終了まで解除しない。新しい世代では thread/status が idle を報告してから送信を許可する。
  • 送信前 Cancel は何も送らない。送信後の要求固有 Stop はなく、時刻や本文から推測した interrupt もしない。再送、command/exec やローカルプロセスへの fallback はしない。

型付き結果とローカルファイル操作

  • text、MCP content、imageView/imageGeneration、fileChange を上限付き型付き部品へ変換する。汎用 JSON は理由付き fallback。サーバー側の切り詰めとローカル表示上限を区別する。
  • 生 payload と server path は Worker に保持し、Remote UI にはサニタイズ済み metadata と所有者/世代付き不透明操作 ID だけを渡す。
  • 変更ファイルリンク、artifact、Open、Reveal は RemotePathMapper と LocalPathBoundary を通し、操作直前に存在・種別・所有者・symlink/junction を再検証する。生 server path を開かない。
  • preview は PNG/JPEG のみ。MIME/signature 一致、入力 10 MiB 以下、4,096 × 4,096 以下、1,600万 pixel 以下を全体 decode 前に確認し、所有者/世代終了時に破棄する。SVG/HTML、remote fetch、ブラウザー自動起動、生 URI binding はしない。fileId は不透明 ID、mcpAppUi は text fallback のみで埋め込み web runtime は持たない。

保存添付

  • 保存添付は metadata であり、upload や composer chip ではなく、モデル入力へ自動挿入しない。wire 契約は attachmentType、identityKey、任意 payload のみ。
  • client 所有 type relaycodex.file.v1、payload は { version: 1, serverPath, mimeType, displayName }。serverPath は正規化した絶対 server-domain path。identityKey は initialize で報告されたサーバー OS のパス規則で正規化した server path の SHA-256 に version 接頭辞を付けたもので、ローカル profile の mapping に依存しない。
  • 既知 MIME は text/plain、application/pdf、image/png、image/jpeg(preview は PNG/JPEG のみ)。未知 type/version や不正 payload は理由付きの read-only 表示。
  • Add は source、保護 directory policy、profile/root mapping、物理境界を再検証し、created/existing を区別して上書きしない。Remove は type + identityKey を送り、確認と policy 評価を要求する。所有者/profile/root と payload 由来は検証するが、参照先ファイルの存在は要求しない。不在 remove は成功。
  • #153 の上限と突合(limit 50、100件/page、active 100件/thread、payload 64 KiB、type/key 各256 bytes)を維持する。NotSent/確定/OutcomeUnknown を記録し、冪等性を再送の許可としない。結果不明は読み取り専用 list で確認し、因果を断定しない。

ローカル Windows sandbox セットアップ

  • owned local stdio で initialize が Windows を確認した場合のみ提供し、remote profile では提供しない。
  • elevated/unelevated の明示選択と Start。任意の cwd には LocalPathBoundary で検証したアクティブなソリューションルートを Start 前に表示して送り、ソリューションがない場合は null を送る。
  • 状態は未観測・開始中・実行中・成功・失敗・未対応・結果不明。started=true は成功ではなく、started=false も成功の証明ではない。completion が受付応答より先に届く場合も扱う。進捗は不定表示のみ。
  • 接続世代ごとに1回(失敗・結果不明後も同様)。古い世代や pending のない completion は無視する。エラーは上限付きで redact し、自動再試行しない。

0.159.1 追加フィールド

availableAccessPrograms は read-only、disabledPluginIds は plugin editor なしで表示、MCP の serverName/httpOrigin/serverCapabilities は filter 付き状態 metadata、mcpAppUi は text fallback、image.fileId は不透明 ID、flexUnavailable/tooManyDenials は再試行なしの個別理由表示、promax は quota を固定せず表示。rollout/compress は対象外。daemon/worktree、Realtime、dynamic tools、ExternalMessage、plugin import/editor、native verification 成功経路、attestation は追加しない。

作業単位

単位 内容 依存
P0 契約番号、使用 method 登録(stable/experimental 区別)、固定 schema fixture、型付き DTO と payload registry —
P1 plan delta/完了、thread/config/model/MCP 通知、Bridge 両側の modality 検証、追加フィールド P0
P2 型付き部品、PNG/JPEG preview、操作直前検証付き変更ファイル Open/Reveal P0、P1 の envelope
P3 既存 store 上の relaycodex.file.v1 reader/writer、明示 add/remove、結果状態 P2
P4 /shell parser、確認、policy、送信、未確定ロック P0、P1
P5 ローカル Windows setup 状態機械 P0
P6 統合、サブエージェントレビュー、全検証、スクリーンショット P1–P5

対象ファイル

Worker: CodexSessionService、WorkerRpcService、通知 parser。Contracts: WorkerContracts、InteractionContracts。Extension: WorkerBridge、ChatViewModel、tool window XAML、FilePickerService。共通: RemotePathMapper、LocalPathBoundary、IApprovalPolicyEngine、SafeMarkdownService、ISecretRedactor。契約: app-server-contract.json。

テスト

Fake App Server と固定 0.159.1/0.155.1 fixture で検証する: delta なしの完了 plan、完了後の遅延 delta、状態通知 burst、カタログ読取中の所有者変更。不対応 modality の composer 保持。shell の構文/timeout/policy 拒否/送信前 Cancel/Stop なし/他 client の turn/未確定ロック解除/再送0件。型付き混在結果、不正・過大 media、表示から操作までの junction escape。添付の created/existing、不在 remove、古い page、未知 type、参照先消失、再接続/履歴/fork、結果不明。sandbox の completion 先行、started=false、未対応 method、cwd 検証、旧世代、remote 拒否。

ドキュメント

リポジトリ: doc/daily-use-app-server-design.md、doc/daily-use-app-server-plan.md と各 _ja、ADR-016 改訂、doc/design.md 第17節、doc/plan.md 第13節、doc/app-server-update-plan.md Phase 6。shell 実装時に doc/slash-commands.md を更新する。

検証

対象を絞ったテストの後に全 Core/UI テスト、Debug/Release 警告0件ビルド、固定 schema と使用 method の確認、VSIX の DTO/XAML 整合性。Experimental Instance で Light/Dark/High Contrast、狭い幅、keyboard/focus、accessibility のスクリーンショットを確認する。未取得のスクリーンショットは未達条件のまま扱う。全証跡が揃うまで #155 を close せず、#156 のリリースゲートを維持する。

Clone this wiki locally