Skip to content

既存デッキを開き直すとチャット履歴がロードされずエージェントがコンテキストを失う #21

@okamoto-aws

Description

@okamoto-aws

既存デッキを開き直すとチャット履歴がロードされず、エージェントがコンテキストを失う

再現手順

  1. デッキを作成し、チャットでスライドを生成する
  2. デッキ一覧に戻る
  3. 同じデッキを再度開く(例: https://...cloudfront.net/decks/#c36b013f

期待動作

  • チャット履歴が復元される
  • エージェントに追加の編集指示ができる

実際の動作

  • Brief/Outline/Art directionは表示される
  • チャット履歴がロードされない(空のチャット画面)
  • エージェントに編集指示をしても「スライドが見つからないため何もできない」と返される

原因

DynamoDBのデッキレコードに chatSessionId が保存されていない。

APIレスポンス確認:

{ "chatSessionId": null, "slides": 3, "name": "lambda-intro-test" }

chatSessionId がnullの場合、フロントエンドはフォールバックとして deckId.padEnd(36, "0") をsessionIdに使うが、これは実際のチャットセッションIDと一致しないため、履歴APIが空を返す。

chatSessionIdが保存されるロジック(ChatPanel.tsx)

if (toolUseData?.completed && toolUseData?.result?.deckId && onDeckCreated) {
    patchDeck(resultDeckId, { chatSessionId: sessionId }, idToken).catch(() => {})
    onDeckCreated(resultDeckId)
}

以下の場合に保存が失敗/スキップされる:

  1. onDeckCreated がundefinedの場合(条件全体がスキップされる)
  2. ツール結果に deckId が含まれない場合
  3. patchDeck がエラーになった場合(.catch(() => {}) で握りつぶされる)

修正案

  • chatSessionId の保存を onDeckCreated の条件から分離する
  • patchDeck の失敗時にリトライまたはログ出力する
  • フォールバックのsessionID生成ロジックを見直す(padEndではなく、デッキ作成時に確定的にsessionIdを生成してDDBに保存する)

対象ファイル

  • web-ui/src/components/chat/ChatPanel.tsx — chatSessionId保存ロジック
  • mcp-server/tools/init.py — デッキ作成時にchatSessionIdを保存する案

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions