本文档整理了所有讨论过的修改点、优先级、和产品迭代路线图。
| 版本 | 日期 | 主要内容 |
|---|---|---|
| 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.0 是加上新手引导前的稳定版本,实现了成长日记模块升级(阶段一)与睡前安心仪式。
| # | 内容 | 状态 |
|---|---|---|
| 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 | 四步流程:回顾今日 → 小确幸选择题 → 放下焦虑 → 晚安语 | ✅ 完成 |
| 1.0.2.2 | 小确幸选择题:AI生成5个选项,可多选、可换一批、已选保留 | ✅ 完成 |
| 1.0.2.3 | 睡前仪式触发:主界面底部按钮 + 设置中固定提醒开关 | ✅ 完成 |
| 1.0.2.4 | 睡前仪式记录卡片:日期、回顾、小确幸、晚安语、复制/保存按钮 | ✅ 完成 |
| 1.0.2.5 | 睡前仪式记录自动保存到成长日记 + Toast 提示 + 自动打开日记窗口 | ✅ 完成 |
| # | 内容 | 状态 |
|---|---|---|
| 1.0.3.1 | 任务安排30秒缓冲机制 + 温馨提示 | ✅ 完成 |
| 1.0.3.2 | 天气图标统一使用大太阳 ☀️ | ✅ 完成 |
| 1.0.3.3 | API配置页文案:"步步向前·永远陪你一起做任何事" | ✅ 完成 |
v2.2.1 是加上新手引导后的版本,实现了多步渐进式新手引导,并完成 Netlify 部署与 API Key 服务端代理保护,让 HR 打开 demo 链接无需配置即可直接使用。
| # | 内容 | 状态 |
|---|---|---|
| 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 中不存在的元素,且允许点击遮罩关闭 | ✅ 完成 |
全前端项目部署到 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 |
✅ 完成 |
v2.2.2 是进一步优化新手引导的版本,围绕「气泡可拖动、关闭方式收敛、视觉动效、回退逻辑、边界问题」五个方向打磨,并强化了跨日排期 prompt。
| # | 内容 | 状态 |
|---|---|---|
| 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 | 关闭引导的唯一方式改为点击气泡内"跳过引导"按钮 | ✅ 完成 |
| 1.2.2.2 | 移除点击遮罩空白区域关闭 | ✅ 完成 |
| 1.2.2.3 | 移除 ESC 键关闭 | ✅ 完成 |
| # | 内容 | 状态 |
|---|---|---|
| 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.1 | 第 4 步(介绍"等一下"功能)改为幽灵模式:界面不变暗、取消整卡高亮,保证夸夸弹窗清晰可见 | ✅ 完成 |
| 1.2.4.2 | 只对"等一下"按钮(.action-btn.secondary)加虚线转动动效强调 |
✅ 完成 |
| # | 内容 | 状态 |
|---|---|---|
| 1.2.5.1 | 从第 3 步回退直接跳到第 1 步(跳过第 2 步)——第 2 步依赖任务拆解预览,回退后不存在会卡住 | ✅ 完成 |
| 1.2.5.2 | 除第 1 步无"上一步"、最后一步无"下一步"外,其余步骤均有上一步/下一步按钮 | ✅ 完成 |
| # | 内容 | 状态 |
|---|---|---|
| 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.1.1 | buildTaskPlannerPrompt 新增「第一步:先判断任务日期」章节,日期识别提到最前并 |
✅ 完成 |
| 1.2.1.2 | 措辞强化:明确提到未来日期时"必须安排到对应日期,绝对不能安排在今天" | ✅ 完成 |
| 1.2.1.3 | 扩大日期识别范围:加入"周五下午"、"下周三之前"等更多表达方式 | ✅ 完成 |
| 验证项 | 结果 |
|---|---|
| Node 语法检查(onboarding.js / prompt.js) | ✅ 无错误 |
| 第 1-4 步虚线转动动效 | ✅ 正常播放 |
| 第 4 步只高亮"等一下"按钮、夸夸弹窗清晰 | ✅ 通过 |
| 第 3 步回退 → 直接回第 1 步 | ✅ 通过 |
| 气泡不跑出屏幕边缘 | ✅ 通过 |
| 跨日任务排期到对应日期 | ✅ 通过 |
v2.2.3 聚焦两个严重影响第一印象的 bug:气泡自动飘出屏幕边缘 + 1/10 自动唤起输入法键盘。
| # | 内容 | 状态 |
|---|---|---|
| 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 | 删除预填逻辑中的 input.focus(),只保留 input.value 赋值——移动端不会再自动弹键盘压缩视口,用户主动点击输入框时才会弹出 |
✅ 完成 |
基于用户反馈"加载间隔太显眼、突然打断理解",新增吉祥物(概念)连接所有加载等待间隔,让等待有温度、有锚点。
| # | 内容 | 状态 |
|---|---|---|
| 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 开始回复后吉祥物消失(只在加载等待时显示),不打断阅读 | ✅ 完成 |
吉祥物清单:🐱 猫猫(默认·弹跳摆尾)、🐶 狗狗(上下晃摇尾)、🐰 兔兔(弹跳晃耳)、🤖 小机器人(轮子转·天线闪)、🐨 小考拉(缓慢摇晃·抱住自己)
| 验证项 | 结果 |
|---|---|
| Node 语法检查(onboarding.js / app.js / diary.js / mascot.js) | ✅ 无错误 |
| 气泡 1/10 弹出时完全在屏幕内、不触发键盘 | ✅ 待手机端确认 |
| 各方向定位(top/bottom/left/right)均不超出边缘 | ✅ 待手机端确认 |
| 拖动后气泡仍保持边界夹紧 | ✅ 已有逻辑未受影响 |
| 6 处加载点吉祥物正常显示动画 | ✅ 待手机端确认 |
| 设置页切换吉祥物立即生效 | ✅ 待手机端确认 |
| 暗色模式下吉祥物轮廓色正确跟随 | ✅ 待手机端确认 |
用户反馈两个问题: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 | 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,重开产品时连环触发"存数据+弹提醒+渲染",叠加导致严重卡顿。
用户反馈:完成步骤后的夸夸弹窗内容应保存到成长日记,与手写日记的 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 字段。一键复制所有日记时自动包含夸夸内容。
基于一个月的开发经历,沉淀复盘方法论与 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:主动放弃打卡模块的思考案例,从"我本身就是目标用户"出发推演打卡对完美主义+行动力瘫痪用户的负面效应,提出"不评价"是产品底色,延伸到产品价值观藏在"不做什么"里 |
✅ 完成 |
用户反馈:任务拆解的时间安排不够智能,吃饭类任务被排出用餐时段、用户明确指定的时间被忽略(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.1 | 过期任务"忽略"按钮改名为"先不动",语义更清晰,用户一眼就懂是保持原样 | ✅ 完成 |
| 1.3.10.2 | 过期任务新增"删除"按钮,直接从任务列表移除 | ✅ 完成 |
| 1.3.10.3 | ❌ 下架 | |
| 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。
v2.2.6 聚焦「任务处理后的即时反应」与「设置/日记/睡前仪式的稳定性修复」,核心是引入
saveDataSync同步持久化机制,统一解决多个"界面不刷新/数据被覆盖"类 bug。
| # | 内容 | 状态 |
|---|---|---|
| 1.4.1.1 | 点击事件组勾选框 → 级联勾选事件内所有步骤(统一 ID 转 String,修复 Set 数字/字符串 key 不一致问题) | ✅ 完成 |
| 1.4.1.2 | 允许只批量勾选单个步骤并执行删除/标记已完成 | ✅ 完成 |
| 1.4.1.3 | 批量删除需联动清理该任务的情绪对话历史;批量完成需写入成就日记 | ✅ 完成 |
| # | 内容 | 状态 |
|---|---|---|
| 1.4.2.1 | 根因:saveData 有 200ms 尾沿节流,操作后立即 openListModal 从 localStorage 读到旧数据 |
✅ 完成 |
| 1.4.2.2 | 新增 saveDataSync() 同步写入(绕过节流),批量删除/完成改用同步保存 |
✅ 完成 |
| 1.4.2.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 | 待办/已完成清单数字随清单操作即时更新(批量删除/完成补 updateCounters(),时序问题改 saveDataSync) |
✅ 完成 |
| 1.4.4.2 | 顺带修复 showConflictResolution 冲突任务删了又被写回的隐藏数据 bug · |
✅ 完成 |
| 1.4.4.3 | 设置改称呼保存后,主界面问候语即时同步(updateUserGreeting()),无需手动刷新 |
✅ 完成 |
| # | 内容 | 状态 |
|---|---|---|
| 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 | 手写日记 AI 回应卡加载:同步落盘 + 失败写入兜底文案 + .catch 兜底,不再卡在"正在回应你..." |
✅ 完成 |
| 1.4.6.2 | 手写日记 AI 回应可查看(修好加载后内联展示) | ✅ 完成 |
| 1.4.6.3 | 晚安记录内容可查看:显示汇总行(回顾 X 件事·记下 Y 个小确幸)+ "📖 查看晚安"折叠按钮展示 AI 晚安语 | ✅ 完成 |
| # | 内容 | 状态 |
|---|---|---|
| 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)防止加载中退出/重启导致状态错乱;防重复请求 |
✅ 完成 |
v2.2.7 聚焦冲突处理架构升级:从「AI 删旧建新」迁移到「确定性顺延」,根除孤儿数据问题,并修复一个隐藏的双倍顺延 bug。
| # | 内容 | 状态 |
|---|---|---|
| 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.1 | 根因:shiftAllSubsequentTasks 不跳过同事件兄弟步骤,shiftSiblingSteps 已顺延过的步骤被再次顺延 |
✅ 完成 |
| 1.5.2.2 | 修复:shiftAllSubsequentTasks 新增 t.parentTask === anchorTask.parentTask 跳过条件 |
✅ 完成 |
| 1.5.2.3 | 影响面:清单内改单个步骤时间(后续步骤多推一倍)、整件事大偏移修改(步骤顺序倒挂)、冲突处理"新任务优先"(旧事件步骤时间四散) | ✅ 完成 |
| 1.5.2.4 | 仿真验证:4 个场景(新任务优先、已有安排优先、清单改时间、整件事大偏移)全部通过,结构保持、时间正确、单次顺延 | ✅ 完成 |
| 维度 | V2.0.0 | 当前版本 |
|---|---|---|
| 冲突检测 | 无,冲突静默共存 | 区间重叠公式,逐任务比对 |
| 冲突处理 | 不存在 | 二选一按钮 + 确定性顺延(旧任务 ID 保留) |
| 拆解防冲突(事前) | 无 | 至今也没有——prompt 仍不注入现有任务清单,防撞车完全靠保存时检测 |
| 跨日 | 不支持 | 支持 scheduledDate |
| # | 内容 | 状态 |
|---|---|---|
| 1.5.4.1 | 基于现有品牌图标风格基因(暖橙黄渐变、3D 软糖质感、圆润形态、环绕光点),生成 3 款 Logo 概念图 | ✅ 完成 |
| 1.5.4.2 | 概念 1(太阳/向日葵)、概念 2(3D 软糖星星)、概念 3(融合:星星嵌在花瓣徽章中) | ✅ 完成 |
| 1.5.4.3 | 推荐:概念 3(融合款),兼有权威感与亲和力,圆形裁切后形态完整 | 📋 待用户确认 |
| 优先级 | 功能 | 说明 | 状态 |
|---|---|---|---|
| 🔴 高 | 时间安排智能化(方案 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 是一次体验优化版本,围绕"加载体验、对话导出、时间系统、AI 智能编排"四个方向做了 6 项改进。
之前打开页面是白屏静默加载,用户不知道是否在加载中。v2.1 增加了简单的骨架屏,提升感知体验。
| # | 内容 | 状态 |
|---|---|---|
| 1.1.1 | 首页加载骨架屏:卡片占位 + 渐变闪烁动画,数据加载完成后平滑过渡 | ✅ 完成 |
| 1.1.2 | AI 拆解任务时的加载状态提示 | ✅ 完成 |
| 1.1.3 | 情绪对话 AI 回复时的打字指示器(流式输出已实现,此处为兜底状态) | ✅ 完成 |
之前情绪对话历史只能在 App 内查看,无法导出。v2.1 增加一键复制功能,用户可以粘贴到记事本等应用保存。
| # | 内容 | 状态 |
|---|---|---|
| 1.2.1 | 设置中增加「一键复制所有陪伴回顾」按钮:按"事件 → 步骤 → 对话"层级格式化复制全部历史 | ✅ 完成 |
| 1.2.2 | 单步骤陪伴回顾弹窗增加「一键复制对话记录」按钮:复制该步骤下的所有对话 | ✅ 完成 |
| 1.2.3 | 复制格式:清晰的层级结构 + 时间戳 + 角色标识,便于阅读和归档 | ✅ 完成 |
| 1.2.4 | 预留导出入口(txt/word/excel/pdf),后续版本扩展 | ✅ 完成 |
v2.0.4 已支持 AI 自动跨日排期,但用户无法手动修改事件日期。v2.1 补齐了手动修改能力。
| # | 内容 | 状态 |
|---|---|---|
| 1.3.1 | 事件修改弹窗增加日期选择器:支持手动选择事件日期 | ✅ 完成 |
| 1.3.2 | 修改日期后,事件内所有步骤的日期同步更新 | ✅ 完成 |
| 1.3.3 | 日期变更后,自动触发跨事件时间联动(见 1.4) | ✅ 完成 |
之前修改某个事件的时间,只影响事件内部步骤,不会影响后续其他事件,可能造成时间冲突。v2.1 实现了全局时间联动。
| # | 内容 | 状态 |
|---|---|---|
| 1.4.1 | 新增 shiftAllSubsequentTasks:修改任意任务时间后,排在其后的所有待办任务整体顺延/提前 |
✅ 完成 |
| 1.4.2 | 支持跨事件联动:不只是同事件内步骤,后续所有事件的所有任务都联动 | ✅ 完成 |
| 1.4.3 | 修改步骤开始时间/时长时,询问用户是否顺延后续任务(保留选择权) | ✅ 完成 |
| 1.4.4 | 顺延时自动处理跨日溢出:时间顺延到次日自动更新日期 | ✅ 完成 |
| 1.4.5 | 已完成任务不受影响:只联动 status=pending 的任务 | ✅ 完成 |
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 注入用餐时间约束 |
✅ 完成 |
按照番茄工作法等劳逸结合理论,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 | 用餐时间本身视为休息,前后不额外安排休息 | ✅ 完成 |
| 验证项 | 结果 |
|---|---|
| 语法检查(style.css / index.html / app.js / prompt.js) | ✅ 无错误 |
| 功能存在性验证(6 大模块 25+ 项检查) | ✅ 全部通过 |
| 向后兼容检查 | ✅ 旧数据无 scheduledDate 视为今日,旧设置无用餐时间使用默认值 |
v2.0.4 是一次重大体验升级,包含 6 项功能:流式 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) |
✅ 完成 |
之前只能安排当天任务,
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 函数保留,确保向后兼容 |
✅ 完成 |
之前待办/已完成清单只能看全部,没有日期筛选。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 的任务在"今日"筛选下仍然显示 |
✅ 完成 |
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 包裹,画像系统出错不影响主功能 | ✅ 完成 |
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 | 内容策略原则:倾听优先 > 方法降级 > 极简动作 > 识别+梳理,避免"给一堆方法"的倾向 | ✅ 完成 |
生命安全最高优先级。前端关键词预筛 + 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 识别(处理隐晦表述) | ✅ 完成 |
| 验证项 | 结果 |
|---|---|
| Node 语法检查(5 个 JS 文件) | ✅ 无错误(api.js / app.js / prompt.js / profile.js / markdown.js) |
| 功能存在性验证(30+ 项检查) | ✅ 全部通过(流式、跨日、筛选、画像、分级、危机六大模块均已实现) |
| 向后兼容检查 | ✅ 旧 parseTimeStr/callAI 保留,旧数据无 scheduledDate 视为今日 |
之前 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 字段不存在或为旧结构时做守卫处理 |
✅ 完成 |
之前
findTimeConflicts只在"重新加入待办"时调用。初始拆解确认保存时没有冲突检测。v2.0.3 补上了这个缺口。
| # | 内容 | 状态 |
|---|---|---|
| 2.2.1 | 新增 flattenParsedSteps:把 AI 拆解结果扁平化为冲突检测所需的 steps 数组 |
✅ 完成 |
| 2.2.2 | 新增 saveBreakdownWithConflictCheck:保存前先检测冲突,有冲突则复用 showConflictResolution 让用户处理 |
✅ 完成 |
| 2.2.3 | 改写拆解确认按钮:先关闭预览弹窗再检测,避免弹窗叠加 | ✅ 完成 |
| 2.2.4 | 冲突弹窗取消时增加 toast 提示"已取消,本次未保存" | ✅ 完成 |
| # | 内容 | 状态 |
|---|---|---|
| 3.1.1 | 修改/删除按钮:删除左(小)、保存右(大),符合使用惯性 + 防误触 | ✅ 完成 |
| 3.1.2 | 下一个待办卡片:⋮ 按钮移到左上角(事件分类左边),Done/Wait 区域保持干净 | ✅ 完成 |
| 3.1.3 | 闹钟图标 ⏰ → 太阳 ☀️,减少焦虑感 | ✅ 完成 |
| # | 内容 | 状态 |
|---|---|---|
| 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.1 | 完成单个步骤:小✨庆祝动画 | ✅ 完成 |
| 3.3.2 | 完成整个事件:12个礼花🎉🎆✨🌟从天而降(大礼炮) | ✅ 完成 |
| 3.3.3 | 完成整个事件:AI 以"夸夸官"角色热情夸奖用户 | ✅ 完成 |
| # | 内容 | 状态 |
|---|---|---|
| 3.4.1 | 事件名和任务名分行显示 | ✅ 完成 |
| 3.4.2 | 情绪弹窗底部始终有输入框,用户随时可以表达 | ✅ 完成 |
| 3.4.3 | 每一轮选项按钮都增加「💬 我想自己说...」入口 | ✅ 完成 |
| 3.4.4 | ⋮ 菜单增加「陪伴回顾」 | ➡️ 移至 v2.0.2 实现 |
| 3.4.5 | ⋮ 菜单增加「清空对话」 | ➡️ 移至 v2.0.2 实现 |
| # | 内容 | 状态 |
|---|---|---|
| 3.5.1 | 设置顶部增加「↺ 恢复默认设置」小按钮 | ✅ 完成 |
| 3.5.2 | 所有删除/清空/恢复操作:增加二次确认弹窗 | ✅ 完成 |
| 3.5.3 | 步骤标记完成:确认弹窗 | ✅ 完成 |
| 3.5.4 | 清除数据按钮:增加确认步骤 | ✅ 完成 |
| # | 内容 | 状态 |
|---|---|---|
| 3.6.1 | 语音输入:全面改进错误检测和提示(8 种错误场景) | ✅ 完成 |
| 3.6.2 | 修复代码重复导致的 bug | ✅ 完成 |
-
Prompt v2.0:四角色系统(首席幕僚/心理咨询师/老朋友/睡前向导)
-
Prompt v2.0:反空话套话(7条禁止 + 5条必须)
-
情绪干预文本:短段落、分段显示、重点加粗
-
主界面只显示「下一个待办」
-
待办/已完成按大任务分组
-
工作时间约束(AI 不排到深夜)
-
语音输入(浏览器 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 新增 | 专业人士评审 + 用户反馈 |
已落地的项标记版本号,剩余项仍在规划中。
| 优先级 | 功能 | 说明 | 状态 |
|---|---|---|---|
| 🔴 高 | 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 替代浏览器语音识别 | 📋 规划中 |
| 优先级 | 功能 | 说明 | 状态 |
|---|---|---|---|
| 🟡 中 | 长期计划拆解 | 学习路径/项目规划 + 多轮询问收集信息 | 📋 规划中 |
| 🟡 中 | 周度/月度回顾 | 基于日记数据的自动回顾 | 📋 规划中 |
| 🟡 中 | 成长日记模块 | Done 自动流入 + 自由书写 + 睡前安心仪式(从 Phase 2 上调,依赖日记数据) | ✅ v2.2.0 已实现(阶段一),阶段二(Done 自动流入增强)规划中 |
| 🟢 低 | 给未来的信 | 时间胶囊功能 | 📋 规划中 |
| 🟢 低 | 日历备忘功能 | 提前安排事情,为长期计划提供支持 | 📋 规划中 |
| 🔴 高 | 多模态输入输出 | 图片/文件/视频的理解和生成 | 🔒 需后端/架构升级 |
| 🔴 高 | 数据导出/多设备同步 | 需要后端架构升级 | 🔒 需后端/架构升级 |
除了烟花动画,以下是一些可以增加温暖感但不浮夸的仪式感元素(Phase 2 评估是否加入):
| 元素 | 场景 | 说明 |
|---|---|---|
| 🌅 每日首次打开的问候动画 | 早上第一次打开 App | 柔和的渐显 + 一句温暖的问候,不超过 2 秒 |
| 📖 完成任务后的"成长印章" | 完成步骤 | 不是烟花,而是一个小小的印章盖上去的动画(温暖、有沉淀感) |
| 🌱 进度小树苗 | 完成任务积累 | 每完成一个任务,小树苗长大一点点(视觉化成长) |
| 🌙 夜间模式自动切换 | 日落后 | 界面慢慢切换到暖色调夜间模式,减少蓝光 |
| 🫂 情绪陪伴时背景轻微柔化 | 打开情绪弹窗 | 背景稍微变暗模糊,营造"安全空间"的感觉 |
| 🎵 环境音选项 | 情绪陪伴/睡前仪式 | 可选的雨声/白噪音/森林音(Web Audio 生成,不需要音频文件) |
原因分析:
- System Prompt 权重问题:当前的 AI 人格设定在 System Prompt 中占比很大,用户自定义的气质设定是附加在后面的。大模型可能更重视前面的核心人格描述。
- temperature 设置:当前 temperature = 0.7,偏保守。如果想让 AI 更"放飞"地表现不同气质,可以调高到 0.8-0.9。
- 自定义设定的描述不够具体:如果用户只填了"女性"、"温柔",这些词太泛了,模型不容易产生明显差异。
调整方向(暂不修改,后续优化):
-
将自定义气质设定移到 System Prompt 的更前面
-
根据气质类型动态调整 temperature
-
增加预设气质模板(用户可以直接选,比自己填更有效)
当前实现:
| 功能 | 技术方案 | 说明 |
|---|---|---|
| 通知提示音 | 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 可以先做"提示音预设选择"和"播报语速/音量调节",成本低收益大。
根本原因: 浏览器的 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 兼容接口),不依赖浏览器。
v2.0.4 新增功能。
数据存储: 所有画像数据都存在你自己设备的 localStorage 中,不会上传到任何服务器。StepForward 是纯前端应用,没有后端数据库。
存什么: 只存统计摘要(完成率、拖延时长、情绪等级分布等),不存原始对话内容。
冷启动: 数据不足时(比如刚开始用),AI 不会注入任何画像信息,和之前一样。
可以关闭吗: v2.0.4 暂时没有开关,后续版本可以考虑在设置中增加。如果想清空,可以在设置中"清除所有数据"。
v2.0.4 新增功能。
不同程度的情绪状态,需要的陪伴方式不一样:
-
轻度(没心情/懒得动):几句鼓励 + 一个小动作就够了
-
中度(焦虑/压力大):需要深度共情,可能需要一个呼吸或接地练习
-
重度(自我否定/崩溃):需要更柔软的陪伴,情绪梳理比方法更重要
-
危机(自伤/自杀念头):立即提供专业资源,AI 不做治疗
分级的目的是让 AI 的回应更贴合用户当下的状态,而不是用一个模板回应所有人。