diff --git a/docs/superpowers/plans/2026-06-27-ai-message-card-buttons.md b/docs/superpowers/plans/2026-06-27-ai-message-card-buttons.md
new file mode 100644
index 0000000..cb57af3
--- /dev/null
+++ b/docs/superpowers/plans/2026-06-27-ai-message-card-buttons.md
@@ -0,0 +1,467 @@
+---
+author: claude
+created_at: 2026-06-27
+purpose: AI 消息卡片功能按钮统一实现计划
+---
+
+# AI 消息卡片功能按钮统一实现计划
+
+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
+
+**Goal:** 统一小程序实现心愿页面中所有 AI 消息卡片的功能按钮,并修复 story-card 展开失效 bug
+
+**Architecture:** 在现有单文件组件 `ScriptView.vue` 内修复 + 扩展,不提取独立组件,保持现有文件结构
+
+**Tech Stack:** Vue 3, UniApp, 微信小程序
+
+---
+
+## 文件结构
+
+**修改:**
+- `mini-program/src/pages/main/ScriptView.vue` - 主页面组件(模板 + 脚本 + 样式)
+
+---
+
+### Task 1: 修复 story-card 展开失效 bug
+
+**Files:**
+- Modify: `mini-program/src/pages/main/ScriptView.vue:192-210`
+
+- [ ] **Step 1: 移除 resultHasScriptReplies 条件包裹**
+
+打开 `mini-program/src/pages/main/ScriptView.vue`,找到第 192 行的 ``,删除这个条件包裹标签和对应的 `` 闭合标签(第 210 行)。
+
+修改前:
+```vue
+
+
+ {{ displayedResultContent }}
+
+ {{ displayedResultContent }}
+
+ {{ storyCollapsed ? '展开全文' : '收起全文' }}
+
+
+
+
+
+
+```
+
+修改后:
+```vue
+
+ {{ displayedResultContent }}
+
+{{ displayedResultContent }}
+
+ {{ storyCollapsed ? '展开全文' : '收起全文' }}
+
+
+
+
+
+```
+
+- [ ] **Step 2: 验证修复**
+
+在微信开发者工具中编译运行,进入「实现心愿」页面:
+1. 输入心愿并生成故事
+2. 点击「继续生成」创建 script 类型消息
+3. 点击 story-card 的展开/收起按钮,验证故事正文能正确展开和收起
+4. 确认控制台无报错
+
+- [ ] **Step 3: 提交代码**
+
+```bash
+git add mini-program/src/pages/main/ScriptView.vue
+git commit -m "fix: 修复 story-card 展开失效 bug
+
+移除 resultHasScriptReplies 条件包裹,让故事正文始终由 storyCollapsed 控制展开/收起"
+```
+
+---
+
+### Task 2: 添加新方法支持消息卡片功能
+
+**Files:**
+- Modify: `mini-program/src/pages/main/ScriptView.vue` (script 部分)
+
+- [ ] **Step 1: 添加 copyMessageContent 方法**
+
+在 `toggleMessageCollapse` 方法之后(约第 450 行),添加复制消息内容的方法:
+
+```javascript
+const copyMessageContent = (message) => {
+ const content = message?.content || ''
+ if (!content.trim()) {
+ uni.showToast({ title: '暂无可复制内容', icon: 'none' })
+ return
+ }
+ uni.setClipboardData({
+ data: content,
+ success: () => {
+ uni.showToast({ title: '已复制', icon: 'success' })
+ }
+ })
+ analytics.track('script_message_copy_click', {
+ message_id: message?.id || '',
+ content_length: content.length
+ }, { eventType: 'script', pagePath })
+}
+```
+
+- [ ] **Step 2: 添加 playMessageTts 方法**
+
+在 `copyMessageContent` 方法之后,添加播放 TTS 的方法:
+
+```javascript
+const playMessageTts = (message) => {
+ const scriptId = currentResult.value?.id || ''
+ ttsPlayer.playSource(scriptId)
+ analytics.track('script_message_tts_click', {
+ message_id: message?.id || '',
+ script_id: scriptId
+ }, { eventType: 'script', pagePath })
+}
+```
+
+- [ ] **Step 3: 修改 toggleMessageCollapse 方法添加埋点**
+
+找到 `toggleMessageCollapse` 方法(约第 442-450 行),在方法开头添加埋点代码:
+
+修改前:
+```javascript
+const toggleMessageCollapse = (message) => {
+ collapsedMessageIds.value[message.id] = !isMessageCollapsed(message)
+}
+```
+
+修改后:
+```javascript
+const toggleMessageCollapse = (message) => {
+ collapsedMessageIds.value[message.id] = !isMessageCollapsed(message)
+ analytics.track('script_message_collapse_toggle', {
+ message_id: message?.id || '',
+ collapsed: collapsedMessageIds.value[message.id]
+ }, { eventType: 'script', pagePath })
+}
+```
+
+- [ ] **Step 4: 验证方法添加**
+
+在微信开发者工具中编译运行,确认控制台无语法错误。新方法暂时不会被调用,后续任务会在模板中使用。
+
+- [ ] **Step 5: 提交代码**
+
+```bash
+git add mini-program/src/pages/main/ScriptView.vue
+git commit -m "feat: 添加消息卡片功能方法
+
+- copyMessageContent: 复制消息内容到剪贴板
+- playMessageTts: 播放故事 TTS 音频
+- toggleMessageCollapse: 添加展开/收起埋点"
+```
+
+---
+
+### Task 3: 在 result-chat-list 中添加功能按钮组
+
+**Files:**
+- Modify: `mini-program/src/pages/main/ScriptView.vue:245-270`
+
+- [ ] **Step 1: 在 assistant 消息中添加功能按钮组**
+
+找到 `result-chat-list` 部分(约第 245-270 行),在消息内容和展开/收起按钮之后、时间戳之前,添加功能按钮组。
+
+修改前:
+```vue
+
+
+ {{ getMessageContent(message) }}
+
+ {{ isMessageCollapsed(message) ? '展开全文' : '收起全文' }}
+
+
+
+
+
+ {{ formatMessageTime(message.createdAt) }}
+
+
+
+```
+
+修改后:
+```vue
+
+
+ {{ getMessageContent(message) }}
+
+ {{ isMessageCollapsed(message) ? '展开全文' : '收起全文' }}
+
+
+
+
+
+
+
+ 复制
+
+
+ 换个方向
+
+
+ 不像我
+
+
+ 继续生成
+
+
+ ▶ 播放
+
+
+ {{ formatMessageTime(message.createdAt) }}
+
+
+
+```
+
+**说明:**
+- 按钮组使用 `.message-actions` 容器,2 列网格布局
+- 复制、换个方向、不像我、继续生成使用 `.action-btn` 样式
+- 播放按钮使用 `.action-btn.primary` 样式(主色调突出)
+- 所有按钮都调用 Task 2 中定义的方法或复用现有方法
+
+- [ ] **Step 2: 验证按钮组显示**
+
+在微信开发者工具中编译运行:
+1. 进入「实现心愿」页面,生成故事
+2. 点击「继续生成」创建 assistant 消息
+3. 验证每条 assistant 消息下方显示 5 个功能按钮(复制、换个方向、不像我、继续生成、播放)
+4. 验证按钮布局为 2 列网格
+
+- [ ] **Step 3: 验证按钮功能**
+
+逐个测试按钮功能:
+1. **复制**:点击后应复制消息内容,显示「已复制」提示
+2. **换个方向**:点击后应进入「换方向」修订确认流程
+3. **不像我**:点击后应进入「不像我」修订确认流程
+4. **继续生成**:点击后应收起故事并聚焦输入框
+5. **播放**:点击后应播放故事 TTS 音频
+
+确认控制台无报错,所有功能正常。
+
+- [ ] **Step 4: 提交代码**
+
+```bash
+git add mini-program/src/pages/main/ScriptView.vue
+git commit -m "feat: 在 result-chat-list 中添加功能按钮组
+
+为每条 assistant 消息添加完整功能按钮:
+- 复制:复制消息内容到剪贴板
+- 换个方向:进入换方向修订确认
+- 不像我:进入不像我修订确认
+- 继续生成:收起故事并聚焦输入框
+- 播放:播放故事 TTS 音频"
+```
+
+---
+
+### Task 4: 添加消息按钮组样式
+
+**Files:**
+- Modify: `mini-program/src/pages/main/ScriptView.vue` (style 部分)
+
+- [ ] **Step 1: 添加 .message-actions 样式**
+
+在 `