Skip to content

Repository files navigation

DailySnap

DailySnap 小猫

一只陪你上班的小橘猫。记一条,它就开心一点;不记,它会想你。

DailySnap 把"工作记录"做成桌宠养成——你随手记一句话,AI 帮你整理成时间线、日报、周报,猫也跟着成长。记忆是透明的 Markdown 文件,你能看到猫记住了你什么。

当前版本:P0 完成 · 桌宠形态 + 三层记忆系统 + 意图识别 + Onboarding + 上下文对话 + 日报自动补生成

🏠 官网https://dailysnap.online/ ⬇️ 下载https://dailysnap.online/#download

DailySnap 应用图标

核心特性

桌宠养成

  • 屏幕角落常驻一只小黑猫(暖白橘耳黑眼,温馨傲娇性格)
  • 6 种状态表情:calm / happy / curious / sleepy / sad / satisfied
  • 心情值、好感度、亲密度三维养成
  • 记一条猫就开心,2 小时没记猫打哈欠,日报生成后猫满足

猫脑(三层记忆系统)

所有记忆都是 Markdown 文件,存在 ~/.dailysnap/memory/,可以同步到 iCloud / Dropbox:

文件 用途 类比
profile.md 你的偏好(职业、项目、提醒频率、猫的性格) 永远在视野里的"核心记忆"
today.md 今日原始记录 工作记忆
daily-summaries/YYYY-MM-DD.md 每日 AI 整理摘要 近期回顾
long-term.md AI 从多日记录中提炼的规律 长期记忆
states.json 猫的养成状态(mood/love/affinity/streak) 猫的成长档案

AI Agent(意图识别)

AI 用 function calling 自己判断该做什么,不写死规则:

工具 触发场景
save_record 用户分享工作进展
followup 信息不够具体时追问(最多 2 轮)
search_memory 用户问过去的事("我上周做了什么")
generate_report 用户说"生成日报"
chat 用户闲聊、倾诉情绪

每次 AI 回应前会自动读取 profile.md + 最近摘要作为上下文——猫记得你是谁。

上下文感知对话

  • 问候语:启动时根据最近记录 + 时间段生成问候语(纯函数、确定性、两端一致)
  • 追问:信息不够具体时猫会追问(做什么/进展/卡点),追问文案由 AI 生成而非固定模板
  • 对话历史:主窗口按天分组展示,昨天及更早的对话折叠成「折叠条」,点开可回看,往上滑懒加载更早的历史
  • 桌面猫与主窗口状态同步:对话由 Rust 端单一事实来源管理,两端永远看到同一份对话

日报自动补生成

  • 启动时静默补生成漏掉的日报(凌晨关机 / 几天没开程序也能补上)
  • 早上 6:00–12:00 检测到昨天有记录但没日报时,主动提醒补生成
  • AI 调用失败时自动重试,不把占位符内容写进历史

Onboarding(第一次见面)

  • 第一次启动时猫主动开口:"喵~ 你好呀!我是你的 DailySnap 小猫"
  • 自然聊天收集 5 个偏好(职业/项目/提醒频率/打扰方式/猫性格)
  • 回答写入 profile.md,不是问卷是聊天

导航(方案 B)

  • 顶部 4 个 tab:对话 / 时间轴 / 报告 / 统计
  • "报告" 内部子 tab 切换:日报 / 周报
  • 设置入标题栏齿轮,弹出菜单(提醒设置 / AI 设置 / 主题切换)
  • 键盘快捷键 1-5 切 tab

悬浮球(2 状态精简)

  • compact:屏幕角落一只猫(默认)
  • expanded:480×340 输入面板(标题 + quick replies 2×2 + 输入框 + 发送 + 猫栏)
  • 单击猫展开,3 分钟无操作自动收起
  • 定时提醒触发时直接展开(不再有气泡中间态)
  • 双击猫打开主窗口

技术栈

技术
桌面框架 Tauri 2
前端 React 19 + TypeScript + Vite + TailwindCSS 4
动效 Framer Motion
图表 Recharts
Markdown 渲染 react-markdown
后端 Rust(reqwest + tokio + serde)
数据库 SQLite(tauri-plugin-sql)
文件系统 tauri-plugin-fs + tauri-plugin-dialog
设计参考 impeccable skill(避免泛 AI 审美)

项目结构

Dailysnap/
├── src/                          # 前端
│   ├── components/
│   │   ├── MainWindow.tsx        # 主窗口(4 tab + 设置齿轮 + 猫头像)
│   │   ├── ChatPanel.tsx         # 对话面板(onboarding + agent_turn)
│   │   ├── TimelinePanel.tsx     # 时间轴(spine + dot 风格)
│   │   ├── ReportPanel.tsx       # 日报
│   │   ├── WeeklyPanel.tsx       # 周报
│   │   ├── StatsPanel.tsx        # 统计(饼图 + 柱状图 + 热力图)
│   │   ├── FloatBall.tsx         # 悬浮球(compact / expanded 2 状态)
│   │   └── Cat.tsx               # 猫 SVG 组件(6 状态 + framer-motion 动画)
│   ├── services/
│   │   ├── ai.ts                 # AI 调用封装(含 retry + fallback)
│   │   ├── db.ts                 # SQLite 操作
│   │   ├── date.ts               # 日期边界工具(凌晨4点)
│   │   ├── greeting.ts           # 上下文问候语生成(纯函数)
│   │   └── reportBackfill.ts     # 日报补生成
│   ├── hooks/useTheme.ts         # 亮/暗主题
│   ├── hooks/useCatAnim.ts       # 猫动画状态机
│   ├── stores/recordStore.ts     # Zustand 状态
│   ├── styles/globals.css        # 设计 token(warm-tinted neutrals)
│   └── utils/floatInteraction.ts # 浮球交互工具
├── src-tauri/                    # Rust 后端
│   └── src/
│       ├── services/
│       │   ├── memory.rs         # 猫脑(三层 Markdown 文件 + 对话状态)
│       │   ├── ai_client.rs      # AI client(function calling + 流式 + retry)
│       │   ├── scheduler.rs      # 提醒调度
│       │   └── holiday.rs        # 节假日判断
│       ├── commands/
│       │   ├── cat.rs            # agent_turn / get_cat_state / 对话命令 等
│       │   ├── ai.rs             # ai_chat(旧版兼容)
│       │   ├── records.rs        # save_record / get_records_by_date
│       │   ├── settings.rs       # get_settings / update_setting
│       │   ├── reminder.rs       # show_float_ball / set_float_mode
│       │   └── devtools.rs       # switch_tab(dev-only)
│       └── macos_window.rs       # macOS 无边框窗口处理
└── ~/.dailysnap/memory/          # 用户记忆目录(自动创建)
    ├── profile.md
    ├── today.md
    ├── conversation_YYYY-MM-DD.json  # 按天存的对话历史
    ├── daily-summaries/
    ├── long-term.md
    └── states.json

设计理念

反 AI 审美

参考 impeccable 设计 skill,避免泛 AI 审美:

  • 配色:warm-tinted neutrals(暖米色背景 + 墨色文字),不用紫色 accent
  • 字体:system font + label-caps(uppercase + letter-spacing 编辑风小标签)
  • 间距:模块化节奏(4 的倍数),section 之间 28px 大间距
  • 按钮:方形圆角 6px(不是 12px 大圆角),文字按钮不用 emoji
  • 时间线:spine + dot 风格(左竖线 + 彩色圆点),不堆卡片

猫的人格

温馨 + 傲娇 + 贱兮兮:

  • 说话简短(30-80 字),用第一人称"我"
  • 不叫用户"主人"或"您",直接"你"
  • 看到用户做事会开心(但不会直接说"我好感动",而是"哼,又干活了吧,记得喝水")
  • 偶尔自嘲("我只是一只猫,懂什么时间管理")

快速开始

环境要求

  • Node.js 18+
  • pnpm
  • Rust(rustup)
  • macOS(主要目标平台)

安装运行

cd Dailysnap
pnpm install
pnpm tauri dev

配置 AI

  1. 启动后第一次进入会触发 onboarding(猫主动聊天)
  2. 标题栏点齿轮 → AI 设置 → 填 API Key
  3. 推荐用 DeepSeek(deepseek-v4-flash)或任意 OpenAI 兼容协议的模型

路线图

P0(已完成)

  • ✅ 猫脑(三层 Markdown 文件记忆系统)
  • ✅ 意图识别(function calling 5 工具,含 followup 追问)
  • ✅ Onboarding 流程(猫主动聊天认识你)
  • ✅ 养成机制(好感度 + 亲密度 + 心情值)
  • ✅ 猫 SVG(6 状态 + framer-motion 动画)
  • ✅ 导航方案 B(4 tab + 报告子导航)
  • ✅ 悬浮球精简(2 状态)
  • ✅ 上下文问候语(纯函数、两端一致)
  • ✅ 对话历史按天折叠(昨天折叠 + 上滑懒加载)
  • ✅ 日报自动补生成(凌晨关机也能补上)
  • ✅ 桌面猫与主窗口对话状态同步(单一事实来源)

P1(计划中)

  • 📝 语音记录(按住悬浮球说话 → Whisper 转文字 → 存记录)
  • 📝 猫素材升级(PNG 替换 SVG,更可爱)

P2(计划中)

  • 📝 图片识别(截图发猫 → GPT-4o Vision)
  • 📝 长期记忆向量检索(参考 Mem0)

P3(远期)

  • 📝 手机端(React Native + iCloud 同步)
  • 📝 Live2D 高保真猫

参考

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages