既存デッキを開き直すとチャット履歴がロードされず、エージェントがコンテキストを失う
再現手順
- デッキを作成し、チャットでスライドを生成する
- デッキ一覧に戻る
- 同じデッキを再度開く(例:
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)
}
以下の場合に保存が失敗/スキップされる:
onDeckCreated がundefinedの場合(条件全体がスキップされる)
- ツール結果に
deckId が含まれない場合
patchDeck がエラーになった場合(.catch(() => {}) で握りつぶされる)
修正案
chatSessionId の保存を onDeckCreated の条件から分離する
patchDeck の失敗時にリトライまたはログ出力する
- フォールバックのsessionID生成ロジックを見直す(padEndではなく、デッキ作成時に確定的にsessionIdを生成してDDBに保存する)
対象ファイル
web-ui/src/components/chat/ChatPanel.tsx — chatSessionId保存ロジック
mcp-server/tools/init.py — デッキ作成時にchatSessionIdを保存する案
既存デッキを開き直すとチャット履歴がロードされず、エージェントがコンテキストを失う
再現手順
https://...cloudfront.net/decks/#c36b013f)期待動作
実際の動作
原因
DynamoDBのデッキレコードに
chatSessionIdが保存されていない。APIレスポンス確認:
{ "chatSessionId": null, "slides": 3, "name": "lambda-intro-test" }chatSessionIdがnullの場合、フロントエンドはフォールバックとしてdeckId.padEnd(36, "0")をsessionIdに使うが、これは実際のチャットセッションIDと一致しないため、履歴APIが空を返す。chatSessionIdが保存されるロジック(ChatPanel.tsx)
以下の場合に保存が失敗/スキップされる:
onDeckCreatedがundefinedの場合(条件全体がスキップされる)deckIdが含まれない場合patchDeckがエラーになった場合(.catch(() => {})で握りつぶされる)修正案
chatSessionIdの保存をonDeckCreatedの条件から分離するpatchDeckの失敗時にリトライまたはログ出力する対象ファイル
web-ui/src/components/chat/ChatPanel.tsx— chatSessionId保存ロジックmcp-server/tools/init.py— デッキ作成時にchatSessionIdを保存する案