事情搞定,时间归你。 从一件件的小事里拥抱我们的大时代。
探戈 Done&Go 是一个本地优先的时间工作台:把一件事从记录、完成、核验,到把省下的时间归还给自己,收进一条可复核的时间链路。
当前产品入口是 web/index.html,本地服务由 scripts/serve-tango.mjs 提供。src/ 与 server/start.mjs 保留为历史 React 探索线,不代表当前入口。
产品介绍视频(2 分钟):▶ 一句话录入、五种外观、小组协作暗号与诚实的用时核验,两分钟看完全貌
| 场景 | 它能帮你做的事 |
|---|---|
| 学习 | 把作业、复习、写作拆成可完成的小段,完成后看真实用时。 |
| 研究 | 记录阅读、实验、写作与返工,让“待实测”和“已核验”分开。 |
| 教学 | 备课、批改、答疑分路线推进,也适合带学生做小组约定。 |
| 办公 | 把会议、材料、沟通和跟进收进当天路线,避免只留下忙碌感。 |
当前路由识别七个 hash 入口:today、line、review、agreements、settings、assistant 和 users。
| 路由 | 用途 |
|---|---|
#today |
记录事情、调整优先级、完成事项、查看今日预算。 |
#line |
查看当天时间路线、资讯发现和时间之树。 |
#review |
复盘 7 天或 30 天内的完成、用时与去向。 |
#agreements |
管理双方约定、小组协作与 AI 提案。 |
#settings |
配置账户、语言、外观、语音、AI 与隐私相关选项。 |
#assistant |
打开“和探戈聊聊”,进行对话、建议、回顾与资讯发现。 |
#users |
打开管理控制台;账户列表、启用、禁用和删除受管理员权限限制。 |
这里的时间收益不做广告式估算。系统只在你确认结果后,用可解释的规则计算差值;没有合格样本时,界面显示“待实测”。
| 指标 | 计算边界 |
|---|---|
| 结果核验 | 只有“已核验 · 结果可用”的记录进入收益口径;“需返工”不计入收益。 |
| 已确认腾出 | 取已验收记录中不为负的“原计划 − 实际总用时”;准备、执行、核对与返工都计入实际。它不是 AI 贡献的因果证明。 |
| 个人历史参考 | 至少需要两条同类、使用 AI、已验收的个人记录;旧记录未验收或样本不足时不报节省数字。 |
| 待归还时间 | 计算出的释放时间先进入 freed.pending,由你选择去向后才算被使用。 |
| 今日预算 | 从清醒时长中扣除重叠后的时间区间总量,而不是简单相加每件事。 |
完成一件事时,实际分钟数是可选字段;留空会保存为 actual:null。你可以标记是否使用 AI,并可选记录模型名称或版本。超时的记录不会伪装成释放时间,回顾里仍会显示负差值。
- 可以手写一句“14:00–15:00 开会”,也可以用麦克风录入一段说明。
- 语音采集使用 16 kHz WAV,静音约 1.6 秒自动停止,单次最长 30 秒;上下午标记会做规范化。
- 当前本地转录路径使用 Windows
System.Speech;转录流程会删除临时 WAV,其他环境仍可手写输入。 - 时间之树用芽、花、果实表示状态:不超过 1 小时的完成可开花,果实需要你确认;树视图约每 30 秒刷新。
- 计划、完成和核验记录优先保存在浏览器本地,不要求外接模型也能走完核心循环。
能力卡展示当前白名单中的外部模型入口:claude-sonnet-5.5、gpt-5.4 和 gemini-3.1-pro-preview。这些名称只是前端能力卡条目,不是本仓库训练或托管的模型,也不是效果背书;账户可用性以你自己的核验记录为准。
建议链路有几个硬边界:
- 每次最多给出 8 条建议。
- 建议带指纹校验,避免旧建议覆盖新状态。
- 只做任务分类调整,不会悄悄改写你的正文或时间。
- 分类变化也必须由你确认后才应用。
- 内置反注入检查,防止把外部文本当作系统指令执行。
- 收益相关文案必须遵守上面的时间口径,不夸大任务级效果。
“和探戈聊聊”由本地服务端网关转发,不在前端保存供应商密钥。当前聊天流式路径是:浏览器向 /api/assistant/chat 发送 stream:true,服务端返回 text/event-stream,前端逐段更新同一条回复。
当前分支包含 SSE 流式稳定化处理:
- 服务端在首个模型片段前发送状态帧,并周期性发送 15 秒 keepalive 注释。
- 上游空闲计时器在有新数据时重置;数据停止时按超时中断,同时保留总时长上限。
- 前端
readSSE在收到片段时重置 130 秒空闲预算,并把片段累积到当前回复中。 - 中途失败会以错误帧暴露,而不是让界面无限等待。
- 离线单元测试覆盖类型化片段、干净关闭、空闲超时、慢速稳定流、错误帧和前端累计逻辑。
网关当前支持 openai 与 anthropic 提供商,并按用途分级:聊天走 heavy,优先级、模型和方法反思走 standard,测试走 light。你可以用 TANGO_AI_MODEL_HEAVY、TANGO_AI_MODEL_STANDARD、TANGO_AI_MODEL_LIGHT 和 TANGO_AI_TIMEOUT_MS 覆盖默认值。
- 网关最多并发 2 个请求,并有响应体积与文本长度上限。
- 中文系统提示要求助手只给建议,不替你执行、确认或代替你陈述事实;不知道就承认不知道。
- API Key 在输出中脱敏;上游默认 HTTPS,仅回环地址允许 HTTP 例外。
- 资讯发现器聚合 OpenAI News、Hugging Face Blog、Google Research 与 Latent Space,使用 45 天窗口和 15 分钟缓存,可按 all、research、work、learning 过滤。
- 核心记录、完成与回顾不依赖外部模型。
约定是双方可见的版本化文本:termsVersion 与 termsHash 必须匹配才算接受同一版;你可以反提案、撤回或等待过期。小组协作支持步骤、成员、所有者与只读角色。
加入口令由服务端生成,约 100 bit 随机熵,只存摘要,不存明文;默认 7 天有效,退出会撤销,并有用户和 IP 两级节流。AI 提案覆盖计划、调整、工具、总结、方法和聊天等意图;操作会先经过 JSON 校验,最多 20 个动作,只能引用共享成员列表中的 ID,并需匹配 policyVersion。共享上下文上限为 36,000 字符。为了防止误删,拥有小组的账户不能直接删除。
- 界面提供中文、English、Русский、ไทย、العربية 和 한국어。
- 阿拉伯语启用 RTL 布局,语言切换会同步可本地化的占位符与
aria-label。 - 外观提供五套预设:标准主题、瑞士研究桌面、个人时间档案、夜间观测花园、知识工作台,覆盖亮暗两种方向。
- 外观选择保存在
localStorage,并在同浏览器标签页间同步。 - 主要控件使用
aria-label、aria-pressed、aria-current、aria-live和对话框aria-modal等状态标记;界面有屏幕阅读器标题与装饰性图形的aria-hidden处理。
| 层 | 当前实现 |
|---|---|
| 界面外壳 | web/index.html 挂载七个 hash 路由、导航、语言、外观与主题。 |
| 领域逻辑 | window.TangoTime 处理时间与完成,window.TangoAgreements 处理约定。 |
| 本地数据 | 浏览器 localStorage 保存核心记录,无跨设备同步。 |
| 约定与协作 | web/agreements.js 与协作 UI 连接服务端校验。 |
| 伴聊与管理 | #assistant 连接对话、建议、资讯与流式回复;#users 连接受权限限制的账户管理。 |
| 语音 | web/speech-capture.js 采集音频,本地服务端调用转录脚本。 |
| 当前服务 | scripts/serve-tango.mjs 提供静态文件、状态、语音、AI、发现、协作、账户与管理接口。 |
| AI 网关 | scripts/ai-assistant.mjs 做供应商转发、SSE 流、分级、限流、截断与脱敏。 |
| 账户与协作存储 | 正式服务使用 JWT、scrypt 与 SQLite;演示会话保存在内存。 |
| 发布产物 | scripts/build-web.mjs 生成 dist-web/donego-* 与 SHA-256 manifest。 |
当前架构要求新功能服务“记录 → 完成 → 归还 → 使用”的循环,并保证外部模型不可用时核心流程仍可用。
需要 Node.js 22.22 或更新版本。
node --version
npm ci --ignore-scripts
npm start打开 http://localhost:5207/#today。端口和绑定地址可分别用 TANGO_PORT、TANGO_BIND 调整。
| 启动方式 | 当前行为 |
|---|---|
npm start |
正式账户模式是默认入口,需要注册或登录。 |
npm run dev:auth |
启动本地账户引导器,并自动创建访客会话。 |
TANGO_REQUIRE_ACCOUNT=1 加 dev:auth |
关闭自动访客,恢复账户入口。 |
TANGO_DEMO_MODE=1 |
用于演示部署;演示小组与会话保存在内存。 |
TANGO_PUBLIC_ORIGIN |
公网访问必须设置明确来源;这不代表公开生产发布已被验证。 |
演示模式重启后会清空内存中的演示会话和演示小组;这不代表正式 SQLite 存储也会清空。
先从示例复制配置,再在本地编辑:
cp .env.example .env配置边界如下:
.env.example只放占位符,不要把真实密钥、账号或来源地址提交进仓库。- AI 提供商、地址、模型和密钥只放在服务端可读取的位置。
- 可以按需覆盖 heavy、standard、light 三档模型和请求超时。
- 生产化需要 32 字节以上的
TANGO_AUTH_SECRET、真实邮件传输和ADMIN_EMAILS白名单。 TANGO_COLLAB_DB可指定协作 SQLite 路径;演示模式会强制使用内存数据库。- 公网部署还必须设置
TANGO_PUBLIC_ORIGIN,并自行完成传输与运维安全检查。
| 命令 | 用途 |
|---|---|
npm run lint |
运行 OxLint。 |
npm run test:unit |
运行单元测试。 |
npm run verify:web |
运行核心单元测试和关键脚本的 node --check。 |
npm run verify:ui |
运行当前产品 Playwright UI 套件。 |
npm run verify:collaboration |
运行协作浏览器验证。 |
npm run verify:account |
运行账户与权限验证。 |
npm run verify:demo |
运行演示入口验证。 |
npm run verify:demo-direct |
运行 2026-10-22 演示入口的直接验证。 |
npm run verify:production |
运行生产就绪检查。 |
npm run build |
生成当前 Web 发布目录与 SHA-256 manifest。 |
构建产物位于 dist-web/donego-*。仓库里有当前 Dockerfile,但本仓库证据中没有这台机器上的实际容器构建或运行记录。
- 核心计划与完成记录保存在当前浏览器;产品不提供跨设备同步。
- 账户与会话用于入口、权限和管理边界,API Key 不暴露给前端。
- AI 只有在你配置供应商后才可用;协作 AI 只能访问授权范围内的共享上下文。
- 网关默认要求 HTTPS 上游,输出会脱敏 API Key,付费端点有用户、IP、请求体、响应体和并发限制。
- 语音转录完成后会删除临时 WAV;是否允许语音采集仍由你在界面触发。
- 口令只存摘要;协作成员看到的是被授权的数据,不是整个本地时间账。
- 管理接口受管理员门槛限制;演示访客不能管理用户或 AI 配置。
- 界面提供本地对话导出,文件由你决定是否保存或分享。
- Docker 镜像尚未在本机实际构建或运行。
- 真实邮件投递与公开生产发布尚未验证。
- 外部模型卡不证明任务级效果;时间差值也不是模型收益的因果结论。
src/、React 历史服务和Dockerfile.react-history不是当前产品入口。- 产品没有云同步,因此不要把本地浏览器数据当作多设备备份。
| 路径 | 内容 |
|---|---|
web/ |
当前单页产品、样式、语言、协作、账户、AI 与语音模块。 |
scripts/ |
当前服务器、AI 网关、资讯、协作、构建、验证与本地账户脚本。 |
docs/ |
按日期保存的架构、收益口径、协作、账户、演示与发布证据。 |
tests/unit/ |
Node 单元测试。 |
tests/tango/ 与 Playwright 配置 |
UI、协作、账户与演示验证入口。 |
src/、server/start.mjs |
历史 React/Vite 探索线。 |
dist-web/ |
npm run build 生成的发布产物。 |
.env.example |
本地配置占位符,不含真实密钥。 |
下表记录仓库文档中的阶段性证据;测试数字是当时记录,不自动代表当前分支状态。
| 日期 | 进展 |
|---|---|
| 2026-10-14 | 定下时间收益口径:只认已验收、可复核的个人记录,不把计划差值直接归因给 AI。 |
| 2026-10-15 | 沉淀语音采集与时间之树状态规则。 |
| 2026-10-16 | 确立当前分层架构和“记录、完成、归还、使用”的核心循环。 |
| 2026-10-17 | 形成 AI 伴聊设计文档,为服务端网关与建议边界打底。 |
| 2026-10-21 | 简化完成表单:实际用时可选,留空保存为空值;当时 verify:web 记录为 143 项通过。 |
| 2026-10-21 | 交付约定路径、邀请链接、AI 授权范围与提案应用;当时记录单元测试 757/757、协作浏览器验证 10/10,并用合成数据完成真实模型端到端验证。 |
| 2026-10-21 | 引入邮箱验证码注册、显式登录与口令协作;文档明确真实邮件投递和公开发布仍未验证。 |
| 2026-10-21 | 完成 V0.2 工程收口;之后继续简化完成界面。 |
| 2026-10-22 | 固化当前演示入口:正式账户为 npm start 默认,dev:auth 提供自动访客,verify:demo-direct 覆盖五次出现、六种语言和管理限制。 |
- 新功能应保留本地优先核心循环,并把外部 AI 当作可缺席能力。
- 改动时间、协作、账户或隐私口径时,先更新对应日期文档和测试。
- 提交前运行与改动范围匹配的验证;不要在文档或示例里提交真实密钥。
- 历史探索线可以保留,但不要把它重新包装成当前入口。