Skip to content

PR-C 後続: OAuth callback の ephemeral 経路復元の再検討 #28

@shomatan

Description

@shomatan

背景

PR #22 (ChatRunner long-lived Query 化) で runOAuthCallback を long-lived query 経由 (this.input.push) に統合した。CodeRabbit から複数回「OAuth callback を長寿命 prompt に流すのは危険」との指摘があったが、本 PR では設計トレードオフのため見送り判断とした。

設計トレードオフ

長所 短所
long-lived (現状) OAuth state を turn 跨ぎで保持、再認証 avoid (PR-C の主目的) callback URL の code / state が会話 context に turn 跨ぎで残る、allowedTools 単一制約が prompt 依存
ephemeral (CR 推奨) callback URL 完全分離、allowedTools 単一強制 subprocess 分離で OAuth state が引き継がれず、次 turn で再認証必要

検討項目

  1. SDK API の進化を待つ: Claude Agent SDK の MCP HTTP transport が subprocess 跨ぎで OAuth state を共有する API (例: token store の外部注入) を提供すれば、ephemeral 経路で OAuth state を保てるようになる
  2. 独自 token store: Tally 側で OAuth state を .tally/oauth-state/<mcpServerId>.yaml 等に永続化し、ephemeral subprocess 起動時に MCP server 経由で inject する仕組みを自前実装
  3. turn 単位の動的 allowedTools: SDK に「同 query 内で allowedTools を turn ごとに切替」する API があれば、long-lived のまま callback turn だけ単一 tool に絞れる

関連

優先度

低 (現状の prompt 指示でモデルが従う前提で MVP は機能する)。複数 MCP server 同時運用や厳密な allowedTools 制約が必要になった時点で再検討。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions