Skip to content

【openscreen】Codexサブスクリプション認証でAI編集を利用できるようにする #1

Description

@nanameru

課題 / 目的

OpenScreenのAI編集を、APIキーではなくユーザー自身のChatGPT/Codexサブスクリプション認証で利用できるようにする。OpenScreenから公式のcodex app-serverをバックグラウンド起動し、Codexアプリを別に開かなくても接続・編集できる体験を提供する。

利用者と成功状態

  • 利用者: Codex CLIをインストール済み、または導入可能なOpenScreen利用者
  • 成功状態: AI設定で「Codexで接続」を選び、必要な場合だけブラウザ認証を行った後、既存のチャット編集をCodex経由で実行できる

対象範囲

  • codexプロバイダーとcodex-app-server認証種別の追加
  • Codex CLIの検出とcodex app-server --stdioのライフサイクル管理
  • JSON-RPC初期化、account/readaccount/login/startaccount/login/completed
  • 認証URLを既定ブラウザで開く接続ボタンと接続状態表示
  • model/listによる利用可能モデル取得
  • 既存のOpenScreen編集ツールをCodexのdynamicToolsへ変換し、ツール呼び出し結果を既存ドキュメントへ適用
  • アプリ終了時・切断時の子プロセス終了
  • 英語・日本語を含む既存13ロケールの文言追加
  • 単体・統合・UIテストとmacOSでの手動スモーク確認

対象外

  • Codex認証ファイルやアクセストークンの直接読み取り・コピー・保存
  • OpenAIのOAuth client IDをOpenScreenへ埋め込むこと
  • Codex CLIの自動インストール
  • GitHub Copilot連携
  • WebSocket transport、リモートCodex、OpenScreen独自の認証サーバー
  • merge、release、配布済みアプリの置換

完了条件

  • Codex CLI未検出時に、理由と導入案内を表示し、アプリがクラッシュしない
  • Codexログイン済みの場合、「Codexで接続」で接続済みになりAPIキー入力を要求しない
  • 未ログインの場合、account/login/startが返すURLをブラウザで開き、完了通知後に接続状態が更新される
  • OpenScreenがCodexの認証ファイル・トークンを直接読み取らない
  • Codexのモデル一覧を取得・選択できる
  • チャットから既存の編集ツールを少なくとも1回実行し、タイムライン変更とツール要約が返る
  • 既存APIキープロバイダーの接続・モデル取得・チャット動作を壊さない
  • 子プロセスが切断・アプリ終了後に残留しない
  • 対象テスト、lint、app/test typecheck、i18n check、renderer buildが通る
  • Draft PRで人間確認待ちにする

System Readiness Gate

  • 永続化: 既存llm-config.jsonにはプロバイダー・モデル選択のみ保存。認証情報はCodexが所有し、OpenScreenは保存しない
  • データ正本: 動画プロジェクトは既存AxcutDocument、会話は既存chat session、認証状態はcodex app-server account/read
  • 認証: 必要。公式Codex CLIのChatGPTログインをapp-server経由で開始・確認する
  • 認可: ローカル単一利用者。OpenScreen側のrole追加なし
  • session: app-serverプロセスは必要時に遅延起動し、切断・終了時に停止
  • secrets: OpenScreenはトークン値へ触れない
  • answered / delegated / not-applicable: 必須項目は上記で確定
  • unresolved: 0
  • SYSTEM_READY: yes
  • ユーザー最終確認: 2026-08-26「それで実装して」「公開forkの方がいい」

UI / Design Gate

  • UI変更: あり
  • モード: small-change
  • 既存のProvider card / form / status pill / buttonをcanonical componentとして再利用
  • 新しい画面・ナビゲーション・情報設計変更はないためFigmaを省略
  • 必要state: CLI未検出 / 未ログイン / 認証中 / 接続済み / エラー
  • unresolved: 0
  • DESIGN_READY: yes
  • 人間確認: 「Codexで接続」ボタンから必要時だけブラウザ認証する流れを2026-08-26に確認済み

実装計画

  1. Codex app-server clientとプロセス管理をテスト先行で追加する
  2. Provider registry、native bridge契約、サービスへCodex認証・モデル取得を追加する
  3. 既存Agent toolsをdynamic toolsへ接続し、chat serviceをCodex transportへ分岐する
  4. Provider settings UIと全ロケールを追加する
  5. 回帰・セキュリティ・実機スモークを実行する
  6. ナレッジログ、test-board、Draft PRを更新する

テスト / CI計画

  • Unit: JSON-RPC framing、初期化、ログイン状態、認証完了、モデル一覧、終了処理
  • Integration: fake app-server子プロセスを使った接続とdynamic tool round-trip
  • UI: Codexカード、CLI未検出、接続中、接続済み、エラー表示
  • Regression: 既存APIキープロバイダーのsnapshot/model/chat tests
  • Security: auth file/tokenを読まないこと、URL scheme検証、子プロセス引数固定
  • Manual E2E: macOS上で既存ログイン済みCodexを検出し、設定画面と1回の編集を確認。ログアウトや認証情報変更は行わない

Hard stops

  • Draft PRは1件まで。merge / release / installは行わない
  • Codex認証の変更・ログアウトは行わない
  • 同じ原因で品質gateが2回失敗したら停止する
  • 既存providerの互換性を壊す設計変更が必要なら停止して再確認する

ナレッジログ

  • 2026-08-26: OpenScreenの既存設計文書が、ChatGPTサブスクリプションの正式な復帰経路としてcodex app-serverを明記していることを確認した
  • 2026-08-26: Codex CLI 0.149.1の生成TypeScript定義でaccount/readaccount/login/startmodel/listthread/startturn/startdynamicToolsを確認した
  • 2026-08-26: Cursor Context ScoutはAPIキー未設定で利用できず、ローカルrgと設計文書で関連箇所を特定した

Beads TODO

  • Epic: herdr-dyw
  • herdr-dyw.1 Codex app-serverクライアントの振る舞いをテストで定義する
  • herdr-dyw.2 Codex app-serverのプロセス管理とJSON-RPCクライアントを実装する
  • herdr-dyw.3 既存AI編集ツールをCodex dynamicToolsへ接続する
  • herdr-dyw.4 Codex接続UIとnative bridge契約を実装する
  • herdr-dyw.5 回帰・セキュリティ・実機スモークを検証する
  • herdr-dyw.6 ナレッジログとDraft PRを作成する

依存関係の追加はembedded Doltがstore is read-onlyを返したためIssueの実装計画を実行順の正本として継続する。Epicと子taskの作成自体は完了している。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions