Skip to content

Latest commit

 

History

History
898 lines (659 loc) · 87.2 KB

File metadata and controls

898 lines (659 loc) · 87.2 KB

StepForward 路线图 & 修改计划 v2.2.8

本文档整理了所有讨论过的修改点、优先级、和产品迭代路线图。


版本历史

版本 日期 主要内容
v1.0 2026-07-20 初始 MVP:任务拆解 → Done/Wait → 情绪干预
v2.0 2026-07-22 大版本:主界面重构、多角色 AI、清单分类、语音/音频、角色自定义
v2.0.1 2026-07-22 小修:按钮布局优化、清单功能增强、庆祝动画、确认弹窗、情绪输入入口、体验细节打磨
v2.0.3 2026-07-26 功能升级:历史对话回顾与清空、AI 拆解任务时避免时间冲突
v2.0.4 2026-07-30 重大升级:流式输出、跨日排期、清单筛选、用户画像、情绪分级+干预方法库、危机安全边界
v2.1 2026-07-30 体验优化:骨架屏加载、情绪对话一键复制、手动改日期、跨事件时间联动、用餐时间+休息智能安排
v2.2.0 2026-08-15 成长日记与睡前仪式:手写日记 AI 回应、睡前安心仪式四步流程、日记卡片视觉升级、任务安排缓冲机制
v2.2.1 2026-08-15 新手引导 + 部署安全:多步渐进式新手引导、Netlify 部署、API Key 服务端代理保护(演示模式免配置)
v2.2.2 2026-09-01 新手引导体验优化:气泡可拖动、关闭方式收敛、虚线转动动效、第4步特殊化、回退逻辑修复、跨日排期 prompt 强化
v2.2.3 2026-09-01 新手引导气泡定位修复 + 键盘唤起修复 + 吉祥物动效 + 夸夸弹窗体验优化(等待期间不可误关)+ 安卓卡死根因修复(praise-overlay watchdog)+ 过期任务"欢迎回来"分批处理弹窗 + scheduleReminders 过期过滤 + saveData 节流 + 夸夸内容保存至成长日记(可折叠)+ 一键复制包含夸夸 + 时间安排智能化(方案2+5:用户意图优先 prompt 改造 + 前端关键词兜底校验)
v2.2.5 2026-09-02 过期任务处理优化:忽略→先不动、后推功能暂时下架(调度决策应由 AGENT 编排层统一处理,当前硬代码方案越做越复杂且 bug 频发)、保留删除/先不动/已完成三动作 + 待办清单批量处理(批量选中/全选/事件组全选、批量删除、批量标记已完成) + 修改整件事时显示第一步时间
v2.2.6 2026-09-03 待办批量处理调优(级联勾选/单步勾选/处理后即时消失)+ saveDataSync 同步持久化机制 + 时间系统修复(修改后界面即时刷新、步骤 A 被覆盖 bug、步骤时长动态计算、主界面卡片即时同步)+ 主界面数字/称呼即时更新 + 设置项治理(隐藏 AI 气质栏/不可抗力自动重排/同步调整按钮、弹窗打开报错修复)+ 成长日记修复(手写日记 AI 回应卡加载、晚安记录可查看内容)+ 睡前仪式回顾今日时区 bug + 仪式步骤过渡加载动效优化(窗口全程可见)
v2.2.7 2026-09-03 冲突处理重构(删旧建新 → 确定性顺延,旧任务 ID 保留、孤儿数据根除)+ 双倍顺延 bug 修复(shiftAllSubsequentTasks 跳过同事件姐妹步骤)+ 冲突弹窗改为二选一按钮(已有安排优先/新任务优先)+ Logo 概念图探索
v2.2.8 2026-09-03 时间设置逻辑改造:「工作开始/工作结束」更名「开始安排(默认 09:00)/准备休息(默认 22:30)」,存储由整数小时迁移为 HH:MM(旧值自动迁移)+ 调度边界规则(无时间意图最早从开始安排起排、到准备休息截止顺延次日、早餐 0:00-12:00 与个人护理例外、用户意图仍最高优先)= prompt 规则注入 + 前端兜底校验4/5 双层实现 + 跨零点守卫(准备休息早于开始安排时截止校验跳过)+ README 用餐/作息描述与实际行为校准 + 设置/引导文案一致性更新 + 调度兜底仿真测试脚本(12 项断言)

一、v2.2 系列(当前版本)

v2.2 系列围绕「成长陪伴 + 新手引导 + 部署安全」三个方向持续迭代。

1.0 v2.2.0 · 成长日记与睡前仪式(全部完成 ✅)

v2.2.0 是加上新手引导前的稳定版本,实现了成长日记模块升级(阶段一)与睡前安心仪式。

1.0.1 成长日记模块升级(阶段一)

# 内容 状态
1.0.1.1 手写日记 AI 温暖回应(即时反馈) ✅ 完成
1.0.1.2 日记 AI 回应开关(设置中可关闭) ✅ 完成
1.0.1.3 加载状态文案:"正在为你写下温柔的晚安..."(避免技术术语) ✅ 完成
1.0.1.4 日记卡片视觉升级:差异化样式(achievement/manual/bedtime) ✅ 完成
1.0.1.5 日记卡片视觉效果开关(设置中可关闭) ✅ 完成

1.0.2 睡前安心仪式

# 内容 状态
1.0.2.1 四步流程:回顾今日 → 小确幸选择题 → 放下焦虑 → 晚安语 ✅ 完成
1.0.2.2 小确幸选择题:AI生成5个选项,可多选、可换一批、已选保留 ✅ 完成
1.0.2.3 睡前仪式触发:主界面底部按钮 + 设置中固定提醒开关 ✅ 完成
1.0.2.4 睡前仪式记录卡片:日期、回顾、小确幸、晚安语、复制/保存按钮 ✅ 完成
1.0.2.5 睡前仪式记录自动保存到成长日记 + Toast 提示 + 自动打开日记窗口 ✅ 完成

1.0.3 其它修改

# 内容 状态
1.0.3.1 任务安排30秒缓冲机制 + 温馨提示 ✅ 完成
1.0.3.2 天气图标统一使用大太阳 ☀️ ✅ 完成
1.0.3.3 API配置页文案:"步步向前·永远陪你一起做任何事" ✅ 完成

1.1 v2.2.1 · 新手引导 + 部署安全(全部完成 ✅)

v2.2.1 是加上新手引导后的版本,实现了多步渐进式新手引导,并完成 Netlify 部署与 API Key 服务端代理保护,让 HR 打开 demo 链接无需配置即可直接使用。

1.1.1 用户引导模块

# 内容 状态
1.1.1.1 轻量开屏 + 渐进式导览混合方案 ✅ 完成
1.1.1.2 多步导览流程(输入框 → 拆解预览 → 卡片介绍 → 完成按钮 → 清单按钮 → 设置按钮 → 收尾) ✅ 完成
1.1.1.3 事件驱动式引导:前几步由用户真实操作触发前进(提交任务 → 确认拆解 → 完成/暂停任务),而非手动点"下一步" ✅ 完成
1.1.1.4 输入框预填示例内容:"写项目周报 +下午3点前交" ✅ 完成
1.1.1.5 回退按钮功能(可返回上一步) ✅ 完成
1.1.1.6 智能定位气泡:根据目标元素周围空间自动选择最佳位置,屏幕较小时自动切换方向 ✅ 完成
1.1.1.7 话筒图标点击提示:"语音功能开发中,敬请期待~" ✅ 完成
1.1.1.8 设置页"重新查看新手引导"按钮 ✅ 完成
1.1.1.9 开屏欢迎页文案更新 ✅ 完成
1.1.1.10 新手引导需包含"成长日记中查看睡前仪式记录"的指引 ✅ 完成
1.1.1.11 引导跳过步骤需跳过 DOM 中不存在的元素,且允许点击遮罩关闭 ✅ 完成

1.1.2 Netlify 部署 + API Key 保护

全前端项目部署到 Netlify 作为 demo 作品。API Key 通过 Netlify Functions 服务端代理保护,不暴露在前端,HR 打开链接无需输入 API Key 直接进入昵称设置页。

# 内容 状态
1.1.2.1 新建 netlify/functions/llm-proxy.mjs:服务端代理,读取 DEEPSEEK_API_KEY 环境变量,支持流式与非流式 ✅ 完成
1.1.2.2 新建 netlify.toml:publish = "." + functions = "netlify/functions" ✅ 完成
1.1.2.3 js/api.js 新增 isDemoMode():localhost/121.0.0.1/file:// 为本地直连,其他域名走代理 ✅ 完成
1.1.2.4 演示模式固定使用 DeepSeek Flash(deepseek-v4-flash),hasConfig() 恒返回 true ✅ 完成
1.1.2.5 js/app.js:演示模式下隐藏 API Key 配置页,直接进入昵称设置页 ✅ 完成
1.1.2.6 部署验证脚本 scripts/verify-deployment.mjs ✅ 完成

1.2 v2.2.2 · 新手引导体验优化(全部完成 ✅)

v2.2.2 是进一步优化新手引导的版本,围绕「气泡可拖动、关闭方式收敛、视觉动效、回退逻辑、边界问题」五个方向打磨,并强化了跨日排期 prompt。

1.2.1 气泡可拖动(任意位置)

# 内容 状态
1.2.1.1 拖动区域从"仅标题栏"扩大为"整个气泡(除按钮区)",按住任意非按钮位置都可拖动 ✅ 完成
1.2.1.2 5px 移动阈值:区分点击与拖动,防止误触 ✅ 完成
1.2.1.3 拖动后阻止一次 click 事件,避免误触发按钮 ✅ 完成
1.2.1.4 边界夹紧:气泡拖到屏幕边缘被挡住,不会完全跑出屏幕 ✅ 完成
1.2.1.5 resize 时自动拉回边界内 ✅ 完成
1.2.1.6 cleanup 机制:引导结束时清理拖动监听,防止内存泄漏 ✅ 完成

1.2.2 关闭方式收敛

# 内容 状态
1.2.2.1 关闭引导的唯一方式改为点击气泡内"跳过引导"按钮 ✅ 完成
1.2.2.2 移除点击遮罩空白区域关闭 ✅ 完成
1.2.2.3 移除 ESC 键关闭 ✅ 完成

1.2.3 视觉动效:虚线转动

# 内容 状态
1.2.3.1 前 4 步改用虚线转动动效(outline 颜色 + 间距交替,accent2/accent 双色,2s 循环),不变暗 ✅ 完成
1.2.3.2 第 5 步起保持聚光灯 + 变暗(Spotlight) ✅ 完成
1.2.3.3 第 1 步高亮目标从 #taskInput 改为 .input-box(整个输入框容器),范围更醒目 ✅ 完成
1.2.3.4 修复 !important 覆盖 @keyframes 导致虚线动画"冻住"的问题 ✅ 完成

1.2.4 第 4 步特殊化("等一下"按钮)

# 内容 状态
1.2.4.1 第 4 步(介绍"等一下"功能)改为幽灵模式:界面不变暗、取消整卡高亮,保证夸夸弹窗清晰可见 ✅ 完成
1.2.4.2 只对"等一下"按钮(.action-btn.secondary)加虚线转动动效强调 ✅ 完成

1.2.5 回退逻辑修复

# 内容 状态
1.2.5.1 从第 3 步回退直接跳到第 1 步(跳过第 2 步)——第 2 步依赖任务拆解预览,回退后不存在会卡住 ✅ 完成
1.2.5.2 除第 1 步无"上一步"、最后一步无"下一步"外,其余步骤均有上一步/下一步按钮 ✅ 完成

1.2.6 边界与定位问题修复

# 内容 状态
1.2.6.1 修复气泡跑出屏幕边缘:renderStep 中先调用 highlightTarget(滚动)再定位气泡,避免滚动后位置计算失效 ✅ 完成
1.2.6.2 scrollIntoView 从 smooth 改为 auto(即时滚动),确保滚到位后再计算气泡位置 ✅ 完成
1.2.6.3 按钮区域光标修复:.tour-controls 及按钮使用 pointer 而非 grab(朋友建议) ✅ 完成
1.2.6.4 touch-action 时机修复:从全局禁用改为仅 .dragging 状态禁用,避免与页面滚动冲突(朋友建议) ✅ 完成

1.2.7 跨日排期 prompt 强化

# 内容 状态
1.2.1.1 buildTaskPlannerPrompt 新增「第一步:先判断任务日期」章节,日期识别提到最前并 ⚠️ 强调 ✅ 完成
1.2.1.2 措辞强化:明确提到未来日期时"必须安排到对应日期,绝对不能安排在今天" ✅ 完成
1.2.1.3 扩大日期识别范围:加入"周五下午"、"下周三之前"等更多表达方式 ✅ 完成

1.2.8 验证情况

验证项 结果
Node 语法检查(onboarding.js / prompt.js) ✅ 无错误
第 1-4 步虚线转动动效 ✅ 正常播放
第 4 步只高亮"等一下"按钮、夸夸弹窗清晰 ✅ 通过
第 3 步回退 → 直接回第 1 步 ✅ 通过
气泡不跑出屏幕边缘 ✅ 通过
跨日任务排期到对应日期 ✅ 通过

1.3 v2.2.3 · 新手引导气泡定位与键盘修复(全部完成 ✅)

v2.2.3 聚焦两个严重影响第一印象的 bug:气泡自动飘出屏幕边缘 + 1/10 自动唤起输入法键盘。

1.3.1 气泡定位根因修复

# 内容 状态
1.3.1.1 修复根因一:renderStep 中 overlay.style.display 从 'block' 移到量尺寸之前——旧顺序导致遮罩 display:none 时气泡量到 0×0,空间计算与视口夹取全部失效 ✅ 完成
1.3.1.2 修复根因二:positionAtDirection 重写,放弃 transform: translate(-50%,-100%) 偏移定位——旧代码只夹取锚点 left/top,transform 把整个可视框推出屏幕(top 方向最严重) ✅ 完成
1.3.1.3 改为直接「左上角坐标」定位 + 视口夹取可视框,确保气泡整体始终在屏内 ✅ 完成
1.3.1.4 加 requestAnimationFrame 二次校准,防字体/布局延迟导致尺寸漂移 ✅ 完成

1.3.2 移动端键盘唤起修复

# 内容 状态
1.3.2.1 删除预填逻辑中的 input.focus(),只保留 input.value 赋值——移动端不会再自动弹键盘压缩视口,用户主动点击输入框时才会弹出 ✅ 完成

1.3.3 产品吉祥物(概念)动效

基于用户反馈"加载间隔太显眼、突然打断理解",新增吉祥物(概念)连接所有加载等待间隔,让等待有温度、有锚点。

# 内容 状态
1.3.3.1 新增 js/mascot.js:5 个吉祥物 SVG 虚线轮廓模板 + 状态管理(getCurrentMascot/getMascotSVG/getMascotLoadingHTML 等) ✅ 完成
1.3.3.2 新增 css/mascot.css:5 个吉祥物各自 @keyframes 动效 + 暗色模式/睡前仪式背景适配 ✅ 完成
1.3.3.3 改造 6 处加载点:任务拆解等待、倒计时缓冲、情绪对话思考中、夸夸弹窗准备、睡前晚安语生成、日记 AI 回应 ✅ 完成
1.3.3.4 设置页新增「🧸 陪伴伙伴」选择器,5 个吉祥物可随时切换,默认猫猫 ✅ 完成
1.3.3.5 倒计时缓冲 5 秒 → 2 秒 ✅ 完成
1.3.3.6 AI 开始回复后吉祥物消失(只在加载等待时显示),不打断阅读 ✅ 完成

吉祥物清单:🐱 猫猫(默认·弹跳摆尾)、🐶 狗狗(上下晃摇尾)、🐰 兔兔(弹跳晃耳)、🤖 小机器人(轮子转·天线闪)、🐨 小考拉(缓慢摇晃·抱住自己)

1.3.4 验证情况

验证项 结果
Node 语法检查(onboarding.js / app.js / diary.js / mascot.js) ✅ 无错误
气泡 1/10 弹出时完全在屏幕内、不触发键盘 ✅ 待手机端确认
各方向定位(top/bottom/left/right)均不超出边缘 ✅ 待手机端确认
拖动后气泡仍保持边界夹紧 ✅ 已有逻辑未受影响
6 处加载点吉祥物正常显示动画 ✅ 待手机端确认
设置页切换吉祥物立即生效 ✅ 待手机端确认
暗色模式下吉祥物轮廓色正确跟随 ✅ 待手机端确认

1.3.5 夸夸弹窗体验优化 + 安卓卡死根因修复

用户反馈两个问题:1) 夸夸弹窗等待时"点击任意处继续"误导用户提前关闭;2) 安卓手机按钮集体失灵。

# 内容 状态
1.3.5.1 showPraiseStream() 改造:等待期间隐藏 hint 小字 + 禁止点击关闭;AI 回应出来后(首次 update)才显示"点击任意处关闭本次弹窗"并恢复点击关闭 ✅ 完成
1.3.5.2 showPraise() 改造:文案"点击任意处继续" → "点击任意处关闭本次弹窗" ✅ 完成
1.3.5.3 根因修复:showPraiseStream 和 showPraise 的 overlay 加 .praise-overlay class + data-created 时间戳——原来纯 inline style 不受 CSS 安全网和 watchdog 保护 ✅ 完成
1.3.5.4 扩展 startOverlayWatchdog():新增扫描 .praise-overlay,超过 35 秒强制清理(30 秒自动关闭 + 5 秒余量),根治安卓卡死 ✅ 完成
1.3.5.5 CSS 补充 .praise-overlay 的 pointer-events 安全网 ✅ 完成

安卓卡死根因:showPraiseStream / showPraise 创建的 overlay 用纯 inline style,无 class → watchdog 不扫描 → AI 调用失败/超时时 overlay 永远留在 DOM(z-index:9998 拦截全屏点击)→ 按钮失灵但页面可滚动。

1.3.6 过期任务"欢迎回来"分批处理 + 卡顿根因修复

用户反馈:有安排任务的情况下忘了用产品,下一次打开时主界面卡片的过时提示导致严重卡顿。

# 内容 状态
1.3.6.1 C1:scheduleReminders() 过滤过期任务(diff<0 不设 0ms 定时器)——根除连环触发卡顿源头 ✅ 完成
1.3.6.2 C2:saveData() 加 200ms 节流——短时间多次调用只写最后一次,避免整份重复写 localStorage ✅ 完成
1.3.6.3 A:新增 handleOverdueTasks() ——检测过期任务,弹"欢迎回来,XX 💕"分批处理弹窗 ✅ 完成
1.3.6.4 按母任务分组显示,支持单个步骤勾选 + 按事件全选 + 全选 ✅ 完成
1.3.6.5 三个批量动作:忽略(标记 reminded,保持 pending)/ 已完成(标记 done)/ 后推(推到 30 分钟后) ✅ 完成
1.3.6.6 处理完选中项后未处理的留在列表,用户可继续选择处理;全部处理完自动关闭弹窗 ✅ 完成
1.3.6.7 在 showApp() 中 scheduleReminders() 之后调用 handleOverdueTasks() ✅ 完成

卡顿根因:scheduleReminders 为每个过期任务设 0ms setTimeout,重开产品时连环触发"存数据+弹提醒+渲染",叠加导致严重卡顿。

1.3.7 夸夸内容保存至成长日记

用户反馈:完成步骤后的夸夸弹窗内容应保存到成长日记,与手写日记的 AI 回应存储方式一致。

# 内容 状态
1.3.7.1 markDone():捕获 diaryId,AI 回应(含 fallback)后写入 aiResponse ✅ 完成
1.3.7.2 markDoneFromList():同上 ✅ 完成
1.3.7.3 openParentTaskMenu():批量步骤,AI 回应后写入所有本批次日记条目 ✅ 完成
1.3.7.4 renderDiaryList():achievement 条目有 aiResponse 时显示"📖 查看夸夸"按钮(默认折叠,点击展开/收起) ✅ 完成
1.3.7.5 formatAllDiaryForCopy():achievement 条目有 aiResponse 时加入 --- 夸夸 --- 段落 ✅ 完成

存储方案:与手写日记 AI 回应完全相同,使用日记条目的 aiResponse 字段。一键复制所有日记时自动包含夸夸内容。

1.3.8 产品沉淀文档

基于一个月的开发经历,沉淀复盘方法论与 AI 思考选题。

# 内容 状态
1.3.8.1 撰写 提案/SF_产品开发复盘与方法论沉淀.md(原文件名 stepforward-开发复盘与方法论沉淀.md):从零技术背景到做出完整产品的开发复盘,梳理迭代节奏中的 14 条方法论(含时间安排 bad case 沉淀的方法论十一/十二、多服务商 API 兼容性沉淀的方法论十三、"不做什么"沉淀的方法论十四),突出产品思维与产品潜力。开头改写为"为什么做这个产品",浓缩产品灵感来源(行动力瘫痪 + 完美主义 + 缺乏能量来源 + 找不到合适产品) ✅ 完成
1.3.8.2 梳理 提案/AI思考选题清单.md:基于 StepForward 真实经历,分 4 大类(AI 产品思考/用户体验与情感设计/AI 工程认知/个人成长与方法论)列出 15 个选题,每个标注素材来源与展开方向 ✅ 完成
1.3.8.3 撰写 提案/时间安排bad-case-troubleshooting案例.md:时间安排 bad case 排查案例,包含发现过程、三轮方案推演、根因反思(设置是偏好不是枷锁)、延伸思考(Agent 方向) ✅ 完成
1.3.8.4 撰写 提案/多服务商API兼容性-maintenance案例.md:多服务商 API 兼容性维护案例,bug/bad case/maintenance case 三类问题辨析,手工艺人模式 vs 工业化模式对比,四类成熟方案调研(LangChain/Dify/LiteLLM/OpenRouter),渐进落地路径 ✅ 完成
1.3.8.5 撰写 提案/我选择不做什么-不评价的产品底色.md:主动放弃打卡模块的思考案例,从"我本身就是目标用户"出发推演打卡对完美主义+行动力瘫痪用户的负面效应,提出"不评价"是产品底色,延伸到产品价值观藏在"不做什么"里 ✅ 完成

1.3.9 时间安排智能化(方案 2+5)

用户反馈:任务拆解的时间安排不够智能,吃饭类任务被排出用餐时段、用户明确指定的时间被忽略(bad case)。详细排查过程见 提案/时间安排bad-case-troubleshooting记录.md。

# 内容 状态
1.3.9.1 方案2·Prompt 改造:新增【最高优先级原则:用户意图优先】区块,用户明确说了时间就按用户的来 ✅ 完成
1.3.9.2 工作时间从"严格在...内安排"降级为"仅在用户未明确指定时间时作为参考" ✅ 完成
1.3.9.3 用餐时间从"请避开"降级为"作为参考" ✅ 完成
1.3.9.4 新增【任务类型识别】区块:吃饭→用餐时段、午休→午餐后、睡觉→晚间工作时段之后 ✅ 完成
1.3.9.5 方案5·前端关键词兜底:新增 applyScheduleFallback() 函数,AI 返回后做二次校验 ✅ 完成
1.3.9.6 校验1:吃饭类任务不在用餐时段 → 修正到对应午餐/晚餐时间 ✅ 完成
1.3.9.7 校验2:午休类任务不在午餐后 → 修正到午餐结束时间 ✅ 完成
1.3.9.8 校验3:用户说了"现在/马上"但 AI 安排的时间偏差超过 2 小时 → 修正为当前时间 ✅ 完成

局限性:方案 2+5 不能彻底解决所有 bad case(模糊时间表达的不一致性、关键词覆盖面有限),需长期跟踪。

1.3.10 过期任务处理 + 待办批量处理(v2.2.5)

# 内容 状态
1.3.10.1 过期任务"忽略"按钮改名为"先不动",语义更清晰,用户一眼就懂是保持原样 ✅ 完成
1.3.10.2 过期任务新增"删除"按钮,直接从任务列表移除 ✅ 完成
1.3.10.3 过期任务"后推"改为"顺延到明天"——按原时间顺延24小时 → 已下架,调度决策应交由 AGENT 编排层统一处理,硬代码方案越做越复杂且 bug 频发 ❌ 下架
1.3.10.4 顺延冲突检测 + 冲突弹窗三选项 → 随同顺延功能一并下架 ❌ 下架
1.3.10.5 待办清单新增"批量处理"按钮,点击后进入批量模式(筛选按钮隐藏、按钮变"退出批量处理") ✅ 完成
1.3.10.6 批量模式:事件组 checkbox + 步骤 checkbox + 全选 checkbox + 已选计数 ✅ 完成
1.3.10.7 批量操作:删除 / 标记已完成,直接用代码执行,不调用 AI ✅ 完成
1.3.10.8 关闭清单弹窗时自动重置批量模式和选中状态 ✅ 完成
1.3.10.9 修改整件事时显示事件内第一个步骤的时间,方便用户参考 ✅ 完成

架构洞察:任务拆解、时间安排、冲突处理、过期重排等调度决策,本质上应该由 AGENT 编排层统一完成,而非分散在 prompt + N 段硬代码中。详细思考见 提案/过期任务处理-AGENT化契机-case记录.md。

1.4 v2.2.6 · 待办治理与稳定性修复(本轮全部完成 ✅)

v2.2.6 聚焦「任务处理后的即时反应」与「设置/日记/睡前仪式的稳定性修复」,核心是引入 saveDataSync 同步持久化机制,统一解决多个"界面不刷新/数据被覆盖"类 bug。

1.4.1 待办批量处理调优

# 内容 状态
1.4.1.1 点击事件组勾选框 → 级联勾选事件内所有步骤(统一 ID 转 String,修复 Set 数字/字符串 key 不一致问题) ✅ 完成
1.4.1.2 允许只批量勾选单个步骤并执行删除/标记已完成 ✅ 完成
1.4.1.3 批量删除需联动清理该任务的情绪对话历史;批量完成需写入成就日记 ✅ 完成

1.4.2 任务处理后从页面即时消失(saveDataSync 机制)

# 内容 状态
1.4.2.1 根因:saveData 有 200ms 尾沿节流,操作后立即 openListModal 从 localStorage 读到旧数据 ✅ 完成
1.4.2.2 新增 saveDataSync() 同步写入(绕过节流),批量删除/完成改用同步保存 ✅ 完成
1.4.2.3 迁移到清单内单独修改:单个步骤/整件事的删除、提前完成、重新加入待办均改同步保存 ✅ 完成

1.4.3 时间系统修复

# 内容 状态
1.4.3.1 修改时间后清单界面即时刷新,无需手动重进/整页刷新 ✅ 完成
1.4.3.2 修复步骤 A 时间被覆盖 bug:顺延函数内部 getData+saveData 读到旧数据,把 A 新时间覆盖回旧值;统一改为"单 data 对象 + 末尾 saveDataSync" ✅ 完成
1.4.3.3 同步修复 doReschedule("等一下"顺延)同构 bug ✅ 完成
1.4.3.4 步骤显示时长动态计算:按本步骤→下一步开始时间间隔实时计算,最后一步/异常回退存储时长 ✅ 完成
1.4.3.5 主界面待办提醒卡片开始时间随清单修改即时同步(补 renderNextTask() 调用) ✅ 完成
1.4.3.6 修复"同步调整后续所有任务的时间"失效:调用顺序改为先顺延再更新自身,用原始时间做锚点 ✅ 完成

1.4.4 主界面计数与称呼即时更新

# 内容 状态
1.4.4.1 待办/已完成清单数字随清单操作即时更新(批量删除/完成补 updateCounters(),时序问题改 saveDataSync) ✅ 完成
1.4.4.2 顺带修复 showConflictResolution 冲突任务删了又被写回的隐藏数据 bug · ✅ 完成
1.4.4.3 设置改称呼保存后,主界面问候语即时同步(updateUserGreeting()),无需手动刷新 ✅ 完成

1.4.5 设置项治理

# 内容 状态
1.4.5.1 隐藏"AI 陪伴者气质"栏(HTML 注释保留,恢复时取消注释即可) ✅ 完成
1.4.5.2 隐藏"不可抗力自动重排后续任务"设置项 ✅ 完成
1.4.5.3 隐藏"同步调整后续所有任务的时间"按钮(默认勾选保留,跨事件联动逻辑照常生效) ✅ 完成
1.4.5.4 修复设置弹窗打不开:隐藏项元素不存在时 openSettings/saveSettings 抛出 null.value,统一加防御 ✅ 完成

1.4.6 成长日记修复

# 内容 状态
1.4.6.1 手写日记 AI 回应卡加载:同步落盘 + 失败写入兜底文案 + .catch 兜底,不再卡在"正在回应你..." ✅ 完成
1.4.6.2 手写日记 AI 回应可查看(修好加载后内联展示) ✅ 完成
1.4.6.3 晚安记录内容可查看:显示汇总行(回顾 X 件事·记下 Y 个小确幸)+ "📖 查看晚安"折叠按钮展示 AI 晚安语 ✅ 完成

1.4.7 睡前安心仪式

# 内容 状态
1.4.7.1 修复"回顾今日"显示休息日 bug:completedAt 为 UTC ISO 字符串,startsWith(本地日期) 在凌晨 00:00-08:00 失配;新增 isCompletedToday 用本地日历日比较 ✅ 完成
1.4.7.2 仪式第 1→2 步过渡优化:窗口全程可见,内容区切换为所选吉祥物加载动效(复用 getMascotLoadingHTML),加载完成平滑替换 ✅ 完成
1.4.7.3 异步渲染令牌(_bedtimeTransitionSeq)防止加载中退出/重启导致状态错乱;防重复请求 ✅ 完成

1.5 v2.2.7 · 冲突处理重构与双倍顺延修复(本轮全部完成 ✅)

v2.2.7 聚焦冲突处理架构升级:从「AI 删旧建新」迁移到「确定性顺延」,根除孤儿数据问题,并修复一个隐藏的双倍顺延 bug。

1.5.1 冲突处理架构重构:删旧建新 → 确定性顺延

# 内容 状态
1.5.1.1 根因:旧流程让 AI 重排冲突新旧任务,但 prompt 不传旧任务事件名 → AI 拿步骤文本当事件名 → 旧事件被拆成单步骤同名事件 ✅ 完成
1.5.1.2 根因:旧流程删旧任务后新建,旧任务 ID 丢失 → 情绪对话历史(moods 按 taskId 索引)变成孤儿数据 ✅ 完成
1.5.1.3 重构 showConflictResolution:移除 AI 调用、JSON 解析、删旧建新逻辑,改为二选一按钮("已有安排优先" / "新任务优先") ✅ 完成
1.5.1.4 新增 resolveConflictOldFirst:旧任务分毫不动,新任务整体后移到最早空闲时段(迭代避让所有任务,保持组内间隔) ✅ 完成
1.5.1.5 新增 resolveConflictNewFirst:新任务按原时间保存,冲突旧任务用清单改时间同款的 shiftSiblingSteps + shiftAllSubsequentTasks 顺延(ID 不变,记录完整保留) ✅ 完成
1.5.1.6 兜底校验环(最多 20 轮):级联顺延可能把无关旧任务推到新任务时段上,逐轮扫描发现重叠则继续后推 ✅ 完成
1.5.1.7 先顺延旧任务、后保存新任务:顺延时新任务不在数据中,级联不会误伤新任务 ✅ 完成
1.5.1.8 reAddStepsToPending 冲突调用补传 source 参数,从已完成清单触发时处理后自动刷新清单 ✅ 完成

1.5.2 双倍顺延 bug 修复

# 内容 状态
1.5.2.1 根因:shiftAllSubsequentTasks 不跳过同事件兄弟步骤,shiftSiblingSteps 已顺延过的步骤被再次顺延 ✅ 完成
1.5.2.2 修复:shiftAllSubsequentTasks 新增 t.parentTask === anchorTask.parentTask 跳过条件 ✅ 完成
1.5.2.3 影响面:清单内改单个步骤时间(后续步骤多推一倍)、整件事大偏移修改(步骤顺序倒挂)、冲突处理"新任务优先"(旧事件步骤时间四散) ✅ 完成
1.5.2.4 仿真验证:4 个场景(新任务优先、已有安排优先、清单改时间、整件事大偏移)全部通过,结构保持、时间正确、单次顺延 ✅ 完成

1.5.3 V2.0.0 对比分析

维度 V2.0.0 当前版本
冲突检测 无,冲突静默共存 区间重叠公式,逐任务比对
冲突处理 不存在 二选一按钮 + 确定性顺延(旧任务 ID 保留)
拆解防冲突(事前) 无 至今也没有——prompt 仍不注入现有任务清单,防撞车完全靠保存时检测
跨日 不支持 支持 scheduledDate

1.5.4 Logo 概念图探索

# 内容 状态
1.5.4.1 基于现有品牌图标风格基因(暖橙黄渐变、3D 软糖质感、圆润形态、环绕光点),生成 3 款 Logo 概念图 ✅ 完成
1.5.4.2 概念 1(太阳/向日葵)、概念 2(3D 软糖星星)、概念 3(融合:星星嵌在花瓣徽章中) ✅ 完成
1.5.4.3 推荐:概念 3(融合款),兼有权威感与亲和力,圆形裁切后形态完整 📋 待用户确认

1.6 ROADMAP 新增项目

优先级 功能 说明 状态
🔴 高 时间安排智能化(方案 2+5) Prompt 改造:用户意图优先,工作时间/用餐时间从硬约束降级为默认偏好;前端关键词兜底校验(吃饭/睡觉类任务、用户说"现在/马上"被忽略时自动修正)。详见 提案/时间安排智能化-问题分析与方案对比.md ✅ 完成(1.3.9)
🟡 中 时间安排 bad case 持续关注 方案 2+5 不能彻底解决所有 bad case。已知未解决场景:用户在用餐时段内输入非用餐类任务(如 12 点输入"写作业"),AI 从当前时间开始安排,未避开午餐时间。根因:用餐时间从硬约束降级为参考后,AI 对"用户没说时间但当前正好在用餐时段"的中间场景处理不到位。需持续收集真实 bad case 并迭代优化 📋 规划中(长期跟踪)
🟡 中 多服务商 API 兼容性(maintenance case) 6 家服务商模型名/请求格式硬编码在 api.js,服务商更新 API 时产品静默故障(已发生过 DeepSeek 模型名变更事件)。当前阶段:人工巡检 6 家 changelog + resolveModel() 模型名回退。Phase 2 后端升级时:集中配置 → 前端健康检查 → 后端统一代理。详见 提案/多服务商API兼容性-maintenance-case记录.md 📋 规划中(长期跟踪)
🟡 中 AGENT 编排层(远期规划) 当前产品已是 AGENT 雏形(任务拆解注入用户画像、情绪分级联动、吉祥物状态联动、成长日记行为记录、过期任务感知)。下一步:编排层串联各模块,用户无感中获得更贴心体验。调度 AGENT 是编排层的第一个核心能力——把分散在 prompt + 硬代码中的任务拆解、时间安排、冲突处理、过期重排等调度决策统一收归 AGENT。分阶段:① 现有模块串联(零额外交互)② 定时总结/长期规划(AGENT 主动发起)③ 用户画像可视化(可选交互)。核心原则:AGENT 能力增长让用户感知"更懂我"而非"更多功能",保持产品轻量。编排层还应包含故障自愈能力(服务商挂了自动切换)。详见 提案/过期任务处理-AGENT化契机-case记录.md 📋 规划中(远期方向)
🟢 低 情绪对话模块 随时随地可开启的情绪陪伴,入口建议在主界面底部 📋 规划中
🟢 低 呼吸引导功能 睡前安心仪式的可选扩展 📋 规划中
🟡 中 认知重构引导 当日记出现负性思维时嵌入轻量引导,需谨慎设计语气 📋 规划中
🟡 中 提醒强度差异化 三档(轻柔/适中/积极)实现差异化行为:轻柔=只到点提醒、适中=提前5分钟、积极=提前15分钟+重复提醒 📋 规划中(设置入口已保留,标注"即将推出")
🟡 中 吉祥物正式化 当前为虚线轮廓"概念"动效(很快),后续可为吉祥物制作更完整配色/更多心情动画、AI 回应时在气泡旁作陪 📋 规划中(当前采用概念版)
🟢 低 偶然发现式成就 无目标、无压力的"温柔发现"——完成任务/情绪恢复等时刻,用一句话让用户感知到"它在陪着我走",不做徽章墙、不做打卡、不设目标 📋 规划中(思路储备)
🟡 中 陪伴偏好设置 将现有"AI 陪伴者气质"自由输入升级为选项式偏好设置:砍掉年龄/性别,合并说话方式+关系为"陪伴风格"(温柔倾听/直球行动/轻松幽默),新增"困难时刻"(先安慰我/鼓励我冲/陪我理一理)和"激励偏好"(刚刚好/多来点/不用啦)。选项式、低频变化、缓存友好。等用户量起来后再做 📋 规划中(方案已设计,暂不实施)
🟡 中 "越用越懂你"体验优化 当前用户画像注入 system prompt 导致缓存命中率下降,且用户感知弱。后续考虑:画像信息移到 user message 末尾、记忆显式化(引用用户历史数据)、对话记忆(保留上次摘要)、行为自适应(根据画像调整产品行为而非仅调整 AI 说话)。等用户量起来后再做 📋 规划中(方案已设计,暂不实施)

二、v2.1 本轮修改(全部完成 ✅)

v2.1 是一次体验优化版本,围绕"加载体验、对话导出、时间系统、AI 智能编排"四个方向做了 6 项改进。

1.1 骨架屏 / 加载提示

之前打开页面是白屏静默加载,用户不知道是否在加载中。v2.1 增加了简单的骨架屏,提升感知体验。

# 内容 状态
1.1.1 首页加载骨架屏:卡片占位 + 渐变闪烁动画,数据加载完成后平滑过渡 ✅ 完成
1.1.2 AI 拆解任务时的加载状态提示 ✅ 完成
1.1.3 情绪对话 AI 回复时的打字指示器(流式输出已实现,此处为兜底状态) ✅ 完成

1.2 情绪陪伴对话一键复制

之前情绪对话历史只能在 App 内查看,无法导出。v2.1 增加一键复制功能,用户可以粘贴到记事本等应用保存。

# 内容 状态
1.2.1 设置中增加「一键复制所有陪伴回顾」按钮:按"事件 → 步骤 → 对话"层级格式化复制全部历史 ✅ 完成
1.2.2 单步骤陪伴回顾弹窗增加「一键复制对话记录」按钮:复制该步骤下的所有对话 ✅ 完成
1.2.3 复制格式:清晰的层级结构 + 时间戳 + 角色标识,便于阅读和归档 ✅ 完成
1.2.4 预留导出入口(txt/word/excel/pdf),后续版本扩展 ✅ 完成

1.3 手动修改事件日期

v2.0.4 已支持 AI 自动跨日排期,但用户无法手动修改事件日期。v2.1 补齐了手动修改能力。

# 内容 状态
1.3.1 事件修改弹窗增加日期选择器:支持手动选择事件日期 ✅ 完成
1.3.2 修改日期后,事件内所有步骤的日期同步更新 ✅ 完成
1.3.3 日期变更后,自动触发跨事件时间联动(见 1.4) ✅ 完成

1.4 跨事件时间联动

之前修改某个事件的时间,只影响事件内部步骤,不会影响后续其他事件,可能造成时间冲突。v2.1 实现了全局时间联动。

# 内容 状态
1.4.1 新增 shiftAllSubsequentTasks:修改任意任务时间后,排在其后的所有待办任务整体顺延/提前 ✅ 完成
1.4.2 支持跨事件联动:不只是同事件内步骤,后续所有事件的所有任务都联动 ✅ 完成
1.4.3 修改步骤开始时间/时长时,询问用户是否顺延后续任务(保留选择权) ✅ 完成
1.4.4 顺延时自动处理跨日溢出:时间顺延到次日自动更新日期 ✅ 完成
1.4.5 已完成任务不受影响:只联动 status=pending 的任务 ✅ 完成

1.5 用餐时间设置

AI 拆解任务时需要考虑用户的用餐时间,避免把任务安排在饭点。

# 内容 状态
1.5.1 设置中增加用餐时间配置模块:午餐/晚餐的开始时间 + 用餐时长 ✅ 完成
1.5.2 默认值:午餐 12:00 开始 90 分钟,晚餐 18:00 开始 90 分钟 ✅ 完成
1.5.3 时长设为 0 时,AI 不避该餐时段 ✅ 完成
1.5.4 约束仅作用于 AI 自动排期:用户手动调整到用餐时间不受限制 ✅ 完成
1.5.5 buildTaskPlannerPrompt 注入用餐时间约束 ✅ 完成

1.6 休息时间智能插入

按照番茄工作法等劳逸结合理论,AI 在安排任务时自动考虑休息间隔。

# 内容 状态
1.6.1 规则:每连续工作 45-60 分钟后安排 5-10 分钟短休息 ✅ 完成
1.6.2 规则:同一事件内步骤之间休息较短(5 分钟左右) ✅ 完成
1.6.3 规则:不同事件之间休息稍长(10-15 分钟) ✅ 完成
1.6.4 规则:事件间隔 >= 15 分钟视为自然休息,不额外标注 ✅ 完成
1.6.5 步骤 JSON 增加 breakAfter 字段标记该步骤后有休息 ✅ 完成
1.6.6 用餐时间本身视为休息,前后不额外安排休息 ✅ 完成

1.7 验证情况

验证项 结果
语法检查(style.css / index.html / app.js / prompt.js) ✅ 无错误
功能存在性验证(6 大模块 25+ 项检查) ✅ 全部通过
向后兼容检查 ✅ 旧数据无 scheduledDate 视为今日,旧设置无用餐时间使用默认值

三、v2.0.4 修改回顾(全部完成 ✅)

v2.0.4 是一次重大体验升级,包含 6 项功能:流式 AI 输出、跨日排期、清单筛选、用户行为画像、情绪分级+干预方法库、危机安全边界。

1.1 流式 AI 输出

之前 AI 回复(夸夸/情绪对话)全部生成完毕才显示,用户要等几秒到十几秒。v2.0.4 改为流式逐字输出,点击"完成"后立即看到反馈,体验大幅提升。

# 内容 状态
1.1.1 新增 callAIStream:基于 fetch + ReadableStream + TextDecoder 解析 SSE,支持 OpenAI 兼容格式(DeepSeek/OpenAI/Qwen/MiniMax/Zhipu)和 Anthropic Claude 两种协议 ✅ 完成
1.1.2 流式错误处理复用 callAI 的 401/429/404 友好提示 + CORS 提示,流式失败自动降级为非流式调用 ✅ 完成
1.1.3 新增 showPraiseStream:流式版夸奖弹窗,立即创建 + 文字逐步显示 + 实时 Markdown 渲染 ✅ 完成
1.1.4 三处夸夸调用改为流式:markDone(主界面完成)、markDoneFromList(清单完成)、openParentTaskMenu(整件事完成) ✅ 完成
1.1.5 两处情绪对话改为流式:continueEmotionIntervention、handleUserStillBad,AI 气泡逐字显示 ✅ 完成
1.1.6 旧的 callAI 完整保留(任务拆解/冲突解决/情绪分类仍需完整 JSON) ✅ 完成

1.2 跨日排期扩展

之前只能安排当天任务,scheduledTime 只有 HH:MM,parseTimeStr 恒返回今日。v2.0.4 扩展为支持任意未来日期,AI 按自然语言自动分配。

# 内容 状态
1.2.1 数据结构升级:任务对象新增 scheduledDate 字段(YYYY-MM-DD),旧数据无此字段时视为"今日" ✅ 完成
1.2.2 新增 4 个日期工具函数:formatDate、todayDateStr、parseScheduledDateTime(日期+时间解析)、formatScheduledDisplay(友好显示:今天/明天/M月D日) ✅ 完成
1.2.3 buildTaskPlannerPrompt 升级:传入完整日期,支持自然语言日期理解("明天"、"下周三"、"8月5日"等),JSON 返回格式增加 date 字段 ✅ 完成
1.2.4 saveBreakdownResult / flattenParsedSteps:写入/映射 scheduledDate 字段 ✅ 完成
1.2.5 findTimeConflicts:改用完整日期时间比较,支持跨日冲突检测 ✅ 完成
1.2.6 renderNextTask:任务选择逻辑升级为跨日,显示友好日期标签 ✅ 完成
1.2.7 scheduleReminders:支持 12 小时以上跨日提醒 ✅ 完成
1.2.8 openListModal:排序和显示均改用日期+时间,步骤显示格式升级 ✅ 完成
1.2.9 shiftSiblingSteps:顺延考虑跨日溢出,自动更新日期 ✅ 完成
1.2.10 旧 parseTimeStr 函数保留,确保向后兼容 ✅ 完成

1.3 清单筛选功能

之前待办/已完成清单只能看全部,没有日期筛选。v2.0.3 增加今日/所有/自定义日期区间三种筛选模式。

# 内容 状态
1.3.1 index.html 新增筛选栏:今日 / 所有 / 自定义 三个 pill 按钮 + 自定义日期范围选择器 ✅ 完成
1.3.2 css/style.css 新增 .filter-btn / .filter-btn-active 样式 ✅ 完成
1.3.3 新增 listFilterState 状态变量 + currentListType 记录当前清单类型 ✅ 完成
1.3.4 新增 filterTasksByDate 函数:支持 today / all / custom 三种过滤模式 ✅ 完成
1.3.5 openListModal 集成筛选:状态过滤 → 日期过滤 → 分组渲染 ✅ 完成
1.3.6 筛选栏交互:按钮激活态同步、自定义模式展开日期选择器、"确定"后重渲染 ✅ 完成
1.3.7 旧数据兼容:无 scheduledDate 的任务在"今日"筛选下仍然显示 ✅ 完成

1.4 用户行为画像(AI 越用越懂你)

ROADMAP Phase 2 高优先级项「AI 越用越懂你」的第一版落地。纯前端 localStorage 实现,追踪用户行为模式,生成画像注入 AI prompt。

# 内容 状态
1.4.1 新增 js/profile.js:用户画像系统 v1.0,数据存 stepforward_profile(localStorage) ✅ 完成
1.4.2 画像数据结构:behavior.tasks(任务统计)、behavior.procrastination(拖延模式)、behavior.emotions(情绪模式)、recentContext.dailySummaries(近 30 天每日摘要) ✅ 完成
1.4.3 trackTaskCreated:追踪任务创建,更新活跃时段分布 ✅ 完成
1.4.4 trackTaskCompleted:追踪任务完成,计算完成率、拖延时长 ✅ 完成
1.4.5 trackEmotionEvent:追踪情绪事件,记录等级分布和触发词 ✅ 完成
1.4.6 generateAIContext:生成画像摘要文本,数据不足 50 字时返回空(冷启动保护) ✅ 完成
1.4.7 buildSystemPrompt 注入画像:数据充足时自动追加,提示 AI 自然融入关怀、不直接提及数据 ✅ 完成
1.4.8 四处埋点:saveBreakdownResult(创建)、markDone/markDoneFromList(完成)、continueEmotionIntervention(情绪) ✅ 完成
1.4.9 所有埋点均用 try/catch 包裹,画像系统出错不影响主功能 ✅ 完成

1.5 情绪分级 + 干预方法库扩展

ROADMAP Phase 2 高优先级项「情绪干预方法库扩展」的落地。同时补齐情绪分级功能,level 1-4 各有不同的回应策略。

# 内容 状态
1.5.1 新增 INTERVENTION_LIBRARY:8 种循证干预技术(4-7-8 呼吸法、5-4-3-2-1 接地练习、认知重构、自我慈悲、渐进式肌肉放松、身体扫描、烦恼定时法、危机支持协议) ✅ 完成
1.5.2 新增 buildEmotionInterventionPrompt:根据情绪等级(1-4)动态构建不同策略的干预 prompt ✅ 完成
1.5.3 Level 1(轻度):90% 倾听共情 + 10% 极简动作,语气轻松温暖 ✅ 完成
1.5.4 Level 2(中度):共情为主,方法为辅,只在反复表达痛苦时引入一个极简练习 ✅ 完成
1.5.5 Level 3(重度):深度共情+情绪梳理,用户主动询问时才谨慎推荐方法,可提及专业资源 ✅ 完成
1.5.6 Level 4(危机):启动危机协议,提供热线电话,温暖陪伴+引导求助 ✅ 完成
1.5.7 showReasonSelector 新增 level 3 入口按钮:「我很糟糕 / 自我否定」 ✅ 完成
1.5.8 内容策略原则:倾听优先 > 方法降级 > 极简动作 > 识别+梳理,避免"给一堆方法"的倾向 ✅ 完成

1.6 危机安全边界

生命安全最高优先级。前端关键词预筛 + AI prompt 层面双重机制,确保用户表达自伤/自杀想法时立即获得专业资源。

# 内容 状态
1.6.1 BASE_TRAITS 新增「绝对安全边界」章节:危机模式识别条件 + 6 条回应规则 ✅ 完成
1.6.2 新增 CRISIS_RESPONSE_TEMPLATE 常量:硬编码危机回应模板 + 三条 24 小时心理援助热线 ✅ 完成
1.6.3 新增 CRISIS_KEYWORDS:24 个危机关键词(不想活了/想死/自杀/割腕/自伤等) ✅ 完成
1.6.4 新增 detectCrisisSignal:前端关键词预筛,确保 100% 触发 ✅ 完成
1.6.5 新增 showCrisisResponse:显示危机卡片(援助热线 + 可点击拨打)+ 硬编码模板 + AI 温暖陪伴回复 ✅ 完成
1.6.6 危机卡片样式:温暖不刺眼(浅红背景 + 珊瑚色边框),热线电话用 <a href="tel:"> 一键拨打 ✅ 完成
1.6.7 sendEmotionMessage 入口检测:用户发送消息先过关键词筛,命中则直接走危机流程 ✅ 完成
1.6.8 continueEmotionIntervention 入口检测:按钮选择路径同样过筛 ✅ 完成
1.6.9 双重机制:前端关键词(100% 触发硬编码)+ AI prompt 识别(处理隐晦表述) ✅ 完成

1.7 验证情况

验证项 结果
Node 语法检查(5 个 JS 文件) ✅ 无错误(api.js / app.js / prompt.js / profile.js / markdown.js)
功能存在性验证(30+ 项检查) ✅ 全部通过(流式、跨日、筛选、画像、分级、危机六大模块均已实现)
向后兼容检查 ✅ 旧 parseTimeStr/callAI 保留,旧数据无 scheduledDate 视为今日

四、v2.0.3 修改回顾(全部完成 ✅)

2.1 历史对话回顾与清空

之前 v2.0.1 路线图曾标记"陪伴回顾/清空对话"为已完成,但实际代码未实现。v2.0.3 真正落地了这两个功能。

# 内容 状态
2.1.1 情绪对话历史持久化:关闭情绪弹窗时自动保存到 localStorage(复用 moods 字段,按 taskId 索引,每次"等一下"对话累积为一个 session) ✅ 完成
2.1.2 ⋮ 菜单增加「💬 陪伴回顾(N)」按钮:有历史时才显示,打开只读回顾弹窗,按时间倒序展示每次会话 ✅ 完成
2.1.3 ⋮ 菜单增加「清空对话」按钮:二次确认后清除该任务的全部对话历史 ✅ 完成
2.1.4 视觉降级:两个按钮做成次要操作样式,放在主操作按钮上方 ✅ 完成
2.1.5 已完成事项也支持回顾 ✅ 完成
2.1.6 任务删除时联动清理对应的对话历史 ✅ 完成
2.1.7 旧数据兼容:moods 字段不存在或为旧结构时做守卫处理 ✅ 完成

2.2 AI 拆解任务时避免时间冲突

之前 findTimeConflicts 只在"重新加入待办"时调用。初始拆解确认保存时没有冲突检测。v2.0.3 补上了这个缺口。

# 内容 状态
2.2.1 新增 flattenParsedSteps:把 AI 拆解结果扁平化为冲突检测所需的 steps 数组 ✅ 完成
2.2.2 新增 saveBreakdownWithConflictCheck:保存前先检测冲突,有冲突则复用 showConflictResolution 让用户处理 ✅ 完成
2.2.3 改写拆解确认按钮:先关闭预览弹窗再检测,避免弹窗叠加 ✅ 完成
2.2.4 冲突弹窗取消时增加 toast 提示"已取消,本次未保存" ✅ 完成

五、v2.0.1-2.0.2 修改回顾(全部完成 ✅)

3.1 按钮与布局优化

# 内容 状态
3.1.1 修改/删除按钮:删除左(小)、保存右(大),符合使用惯性 + 防误触 ✅ 完成
3.1.2 下一个待办卡片:⋮ 按钮移到左上角(事件分类左边),Done/Wait 区域保持干净 ✅ 完成
3.1.3 闹钟图标 ⏰ → 太阳 ☀️,减少焦虑感 ✅ 完成

3.2 待办/已完成清单功能增强

# 内容 状态
3.2.1 步骤左侧 checkbox 可点击:待办→标记完成(确认弹窗+小✨庆祝) ✅ 完成
3.2.2 步骤右侧增加 ⋮ 按钮:修改/删除 ✅ 完成
3.2.3 事件名称可点击:弹出整个事件的批量操作 ✅ 完成
3.2.4 事件批量操作:整体时间顺延(小时+分钟) ✅ 完成
3.2.5 事件批量操作:删除整个事件(小按钮+确认) ✅ 完成
3.2.6 事件批量操作:🎉 整个事件提前完成(大礼花+AI夸夸官夸奖) ✅ 完成
3.2.7 已完成步骤:点击 checkbox 可重新加入待办(确认弹窗) ✅ 完成
3.2.8 已完成事件:整个事件重新加入待办(确认弹窗) ✅ 完成
3.2.9 修改步骤时间后:询问是否顺延后续任务 ✅ 完成

3.3 庆祝与仪式感

# 内容 状态
3.3.1 完成单个步骤:小✨庆祝动画 ✅ 完成
3.3.2 完成整个事件:12个礼花🎉🎆✨🌟从天而降(大礼炮) ✅ 完成
3.3.3 完成整个事件:AI 以"夸夸官"角色热情夸奖用户 ✅ 完成

3.4 情绪陪伴体验优化

# 内容 状态
3.4.1 事件名和任务名分行显示 ✅ 完成
3.4.2 情绪弹窗底部始终有输入框,用户随时可以表达 ✅ 完成
3.4.3 每一轮选项按钮都增加「💬 我想自己说...」入口 ✅ 完成
3.4.4 ⋮ 菜单增加「陪伴回顾」 ➡️ 移至 v2.0.2 实现
3.4.5 ⋮ 菜单增加「清空对话」 ➡️ 移至 v2.0.2 实现

3.5 设置与确认机制

# 内容 状态
3.5.1 设置顶部增加「↺ 恢复默认设置」小按钮 ✅ 完成
3.5.2 所有删除/清空/恢复操作:增加二次确认弹窗 ✅ 完成
3.5.3 步骤标记完成:确认弹窗 ✅ 完成
3.5.4 清除数据按钮:增加确认步骤 ✅ 完成

3.6 问题修复

# 内容 状态
3.6.1 语音输入:全面改进错误检测和提示(8 种错误场景) ✅ 完成
3.6.2 修复代码重复导致的 bug ✅ 完成

六、v2.0 主要内容回顾

4.1 核心体验优化

  • Prompt v2.0:四角色系统(首席幕僚/心理咨询师/老朋友/睡前向导)

  • Prompt v2.0:反空话套话(7条禁止 + 5条必须)

  • 情绪干预文本:短段落、分段显示、重点加粗

4.2 界面重构

  • 主界面只显示「下一个待办」

  • 待办/已完成按大任务分组

  • 工作时间约束(AI 不排到深夜)

4.3 新功能

  • 语音输入(浏览器 SpeechRecognition)

  • 音频输出:通知音(Web Audio)+ 语音播报(SpeechSynthesis)

  • AI 角色气质自定义(年龄/性别/说话方式/关系)


七、持续关注的体验问题(需内测验证)

这些是已经做了改进,但需要大量内测来验证是否真的有效的问题。

# 问题 当前状态 验证方式
5.1 AI 是否真的能"接住情绪",还是仍然有空话套话 v2.0.3 已大幅加强分级策略+倾听优先 收集 20+ 条情绪对话,逐条标记"接住了/没接住"
5.2 AI 自定义气质设置是否真的影响回应语气 已实现但未验证 对比测试:改气质前后的回应差异
5.3 庆祝动画是否感觉温暖不浮夸 已加小✨和大🎉 用户反馈是否喜欢
5.4 待办清单的交互是否足够直观 checkbox + ⋮ + 事件名点击 + 日期筛选 新用户测试是否能找到所有功能
5.5 情绪陪伴的输入入口是否足够明显 已加底部常驻输入框 + 每轮"我想自己说"按钮 用户是否能随时自由表达
5.6 流式输出的节奏是否自然 v2.0.3 新增 实际使用中是否感觉像真人打字
5.7 用户画像是否真的让 AI 回应更贴合 v2.0.3 新增(冷启动期数据不足效果有限) 积累 30+ 条数据后对比
5.8 情绪分级是否准确,level 3 的回应对患者是否合适 v2.0.3 新增 专业人士评审 + 用户反馈

八、Phase 2 · 体验升级(预计 v2.1 - v2.5)

已落地的项标记版本号,剩余项仍在规划中。

优先级 功能 说明 状态
🔴 高 AI 越用越懂你 收集用户行为模式(拖延倾向/情绪触发/完成率),生成画像注入 AI prompt ✅ v2.0.4 已实现(v1.0 基础版)
🔴 高 情绪干预方法库扩展 从 2-3 种扩展到 8 种(呼吸/接地/认知重构/自我慈悲/肌肉放松/身体扫描/烦恼定时/危机协议) ✅ v2.0.4 已实现
🔴 高 情绪分级功能 AI 根据自然语言判断情绪等级(1-4),分级回应 ✅ v2.0.4 已实现
🟡 中 事件日期修改(手动) 支持手动将整个事件顺延/改动到未来某一天 ✅ v2.1 已实现
🟡 中 跨事件时间联动 修改任务时间后,后续所有事件整体顺延/提前 ✅ v2.1 已实现
🟡 中 用餐时间设置 用户自定义午/晚餐时间,AI 排期自动避开 ✅ v2.1 已实现
🟡 中 休息时间智能插入 番茄钟式劳逸结合,事件间/步骤间自动安排休息 ✅ v2.1 已实现
🟡 中 情绪对话一键复制 陪伴回顾支持一键复制全部/单步骤对话 ✅ v2.1 已实现
🟡 中 骨架屏/加载体验 首页骨架屏 + 各操作加载状态提示 ✅ v2.1 已实现
🟡 中 多任务智能编排 判断能否同时进行(听播客+整理桌面)vs 不能同时进行(写周报+学AI) 📋 规划中
🟡 中 界面温度感升级 微动画/过渡/呼吸感/夜间模式/主题色选择 📋 规划中
🟡 中 成长日记模块 Done 自动流入 + 自由书写 + 睡前安心仪式 ✅ v2.2.0 已实现(阶段一:手写日记回应 + 睡前仪式)
🟡 中 用户画像增强 增加更多维度(干预效果追踪/情绪恢复速度/偏好风格学习) 🟡 基础版已完成,持续迭代
🟢 低 语音输入改用 AI API 用 DeepSeek Whisper API 替代浏览器语音识别 📋 规划中

九、Phase 3 · 能力扩展(预计 v3.0+)

优先级 功能 说明 状态
🟡 中 长期计划拆解 学习路径/项目规划 + 多轮询问收集信息 📋 规划中
🟡 中 周度/月度回顾 基于日记数据的自动回顾 📋 规划中
🟡 中 成长日记模块 Done 自动流入 + 自由书写 + 睡前安心仪式(从 Phase 2 上调,依赖日记数据) ✅ v2.2.0 已实现(阶段一),阶段二(Done 自动流入增强)规划中
🟢 低 给未来的信 时间胶囊功能 📋 规划中
🟢 低 日历备忘功能 提前安排事情,为长期计划提供支持 📋 规划中
🔴 高 多模态输入输出 图片/文件/视频的理解和生成 🔒 需后端/架构升级
🔴 高 数据导出/多设备同步 需要后端架构升级 🔒 需后端/架构升级

十、关于仪式感的备选方案

除了烟花动画,以下是一些可以增加温暖感但不浮夸的仪式感元素(Phase 2 评估是否加入):

元素 场景 说明
🌅 每日首次打开的问候动画 早上第一次打开 App 柔和的渐显 + 一句温暖的问候,不超过 2 秒
📖 完成任务后的"成长印章" 完成步骤 不是烟花,而是一个小小的印章盖上去的动画(温暖、有沉淀感)
🌱 进度小树苗 完成任务积累 每完成一个任务,小树苗长大一点点(视觉化成长)
🌙 夜间模式自动切换 日落后 界面慢慢切换到暖色调夜间模式,减少蓝光
🫂 情绪陪伴时背景轻微柔化 打开情绪弹窗 背景稍微变暗模糊,营造"安全空间"的感觉
🎵 环境音选项 情绪陪伴/睡前仪式 可选的雨声/白噪音/森林音(Web Audio 生成,不需要音频文件)

十一、FAQ · 常见问题解答

Q1: 为什么改了 AI 气质设置,感觉回应语气没太大变化?

原因分析:

  1. System Prompt 权重问题:当前的 AI 人格设定在 System Prompt 中占比很大,用户自定义的气质设定是附加在后面的。大模型可能更重视前面的核心人格描述。
  2. temperature 设置:当前 temperature = 0.7,偏保守。如果想让 AI 更"放飞"地表现不同气质,可以调高到 0.8-0.9。
  3. 自定义设定的描述不够具体:如果用户只填了"女性"、"温柔",这些词太泛了,模型不容易产生明显差异。

调整方向(暂不修改,后续优化):

  • 将自定义气质设定移到 System Prompt 的更前面

  • 根据气质类型动态调整 temperature

  • 增加预设气质模板(用户可以直接选,比自己填更有效)


Q2: 通知提示音和播报语音用的是什么技术?可以让用户自定义吗?

当前实现:

功能 技术方案 说明
通知提示音 Web Audio API(纯代码生成) 生成 520Hz 柔和正弦波,零依赖、随时可用
语音播报 SpeechSynthesis API(浏览器自带) 调用操作系统 TTS 引擎,不同系统声音不同

用户自定义的可行性:

自定义选项 难度 说明
提示音音量 ⭐ 简单 加滑块控制 Web Audio 的 gain 值
提示音频率/音色 ⭐ 简单 提供几种预设(叮咚/鸟鸣/风铃),都是代码生成
自定义提示音文件 ⭐⭐ 中等 用户上传 mp3/wav,存在 localStorage(有大小限制)
语音播报音量/语速 ⭐ 简单 SpeechSynthesis API 原生支持 rate/pitch/volume
语音播报换声音 ⭐⭐ 中等 getVoices() 列出系统所有语音,但不同系统可用语音不同
AI 语音(像真人一样) ⭐⭐⭐ 较难 需要调用 TTS API(Azure TTS / ElevenLabs),有费用

建议: Phase 2 可以先做"提示音预设选择"和"播报语速/音量调节",成本低收益大。


Q3: 语音输入为什么用不了?如何解决?

根本原因: 浏览器的 SpeechRecognition API 有严格的安全限制:

使用场景 是否可用 原因
Chrome/Edge(HTTPS 网站) ✅ 可用 满足安全要求
Chrome/Edge(localhost) ✅ 可用 本地开发被豁免
Chrome/Edge(file:// 直接打开) ❌ 不可用 文件协议被浏览器限制
iOS Safari ❌ 不可用 Safari 不支持 SpeechRecognition API
iOS Chrome/Edge ❌ 不可用 iOS 上所有浏览器都用 Safari 内核
Android Chrome ✅ 可用(HTTPS/localhost) 满足安全要求

v2.0.1 已改进: 检测 8 种不同错误场景,每种给出具体中文提示。

终极解决方案(Phase 2 低优先级): 改用 AI API 做语音识别(DeepSeek Whisper 兼容接口),不依赖浏览器。


Q4: 用户画像是什么?数据存在哪里?会泄露吗?

v2.0.4 新增功能。

数据存储: 所有画像数据都存在你自己设备的 localStorage 中,不会上传到任何服务器。StepForward 是纯前端应用,没有后端数据库。

存什么: 只存统计摘要(完成率、拖延时长、情绪等级分布等),不存原始对话内容。

冷启动: 数据不足时(比如刚开始用),AI 不会注入任何画像信息,和之前一样。

可以关闭吗: v2.0.4 暂时没有开关,后续版本可以考虑在设置中增加。如果想清空,可以在设置中"清除所有数据"。


Q5: 情绪分级是什么意思?为什么要分级?

v2.0.4 新增功能。

不同程度的情绪状态,需要的陪伴方式不一样:

  • 轻度(没心情/懒得动):几句鼓励 + 一个小动作就够了

  • 中度(焦虑/压力大):需要深度共情,可能需要一个呼吸或接地练习

  • 重度(自我否定/崩溃):需要更柔软的陪伴,情绪梳理比方法更重要

  • 危机(自伤/自杀念头):立即提供专业资源,AI 不做治疗

分级的目的是让 AI 的回应更贴合用户当下的状态,而不是用一个模板回应所有人。