Skip to content

About

Local-first AI activity dashboard with opt-in, evidence-grounded Pi task summaries.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

AI Worklog · 本地 AI 开发工作台

项目 → 对话 → 工作分项:持续自动总结

首页「开启自动记录」可选择补齐今天并持续或仅从现在开始。授权受限脱敏正文后,使用当前模型自动完成:

  1. 从已导入的 Pi/Codex 历史对话发现工作。按 Git 共同仓库归类,同一仓库的子目录与 worktree 合并;非 Git 项目按工作目录分类。项目下各条对话分别总结,不将多个对话混成一份材料。
  2. 会话结束或空闲默认3分钟后记录一次,进行中的回合保持未整理,被放弃的回合在静默30分钟后仍按实际进展记录。待处理对话按最多12条新记录加必要上下文分批覆盖并持久标记,不把“抽样过一次”当成全部处理完;同一任务保留多次进展记录。
  3. 自动保存任务名称、问题、措施、解决结果、验证和后续事项;按功能开发、问题修复、测试、重构、文档、方案和运维等分类。
  4. 每条对话保留跨日累计的工作分项与进展历史;同一分项持续更新,不按日期重复创建累计任务。已报告解决和仅讨论的分项归档,进行中/受阻继续跟进。日报只列当天新增与更新,不要求手动确认。
  5. 自动记录起止跨度和活跃时长估计;超5分钟的标记间隔不计活跃,并发区间全局去重后分摊到任务与分类,不能当作精确工时。

首页树状展示项目、对话和每个分项解决的问题;处理过程与按日期保留的进展按需展开。「任务归档」另支持按日/周/月、分类与状态查看当天变化。旧版跨对话混合的摘要保留追溯,但不直接充当独立对话成果;对应材料会按新规则自动复核一次,可能产生模型用量。日报、周报及月报优先输出自动任务、结果和耗时;原人工修订保留为可选附录,不覆盖已有结论。分类纠正、归档调整和线下事项补充均为可选。

设置绑定来源范围持久保存在当前 SQLite;重开 App 可恢复,不用每次重新开启。首次未授权不会调用模型,来源或模型变化时需重新授权。不设每日调用次数上限,旧版10次策略自动迁移为无限;保留单工执行、去重和空闲调度,失败不无限重试,可一键重试。活跃时长按阶段累积,不因下一次总结而丢失之前的投入。暂停会取消未执行自动任务,已发送的请求可能仍会完成。

App 运行时自动跟踪,退出后不运行后台采集服务。 来源导入仍默认扫描每种来源最近20个文件,只覆盖已导入的时间范围;离线/缺失日志、短句无法表达的内容不会被编造成工作。跨日保持同一对话及其累计分项;不同对话即使标题相似也不会合并成一个分项。按日期清理不会改写仍保留日期中已有摘要的历史背景;需要清除全部 AI 派生正文时使用 purge --summaries-only。

工作优先的新版界面

  • 首页先展示待核对、受阻和未整理会话,点击主操作直接进入要处理的工作;完整 AI 草稿和设置按需展开。
  • 蓝色主操作、浅紫色 AI 操作、文字辅助操作分层;人工确认、进行中、阻塞和草稿使用不同状态色及文字。
  • 周记录改为七日工作卡片和可切换指标的折线趋势,未记录断线、真实零值保留;周页面直接导出当前周报。
  • 首页「今日时长分布」按任务汇总已归因的活跃估计,给出总时长、占比和未归因缺口;无记录时整块隐藏,不补造时长,也不当作工时或绩效。

详见界面重构与验证范围。

保留的人工修订工作区(可选)

任务页提供列表、状态筛选和标题/结论搜索,右侧只打开一项记录。AI 过程按需展开,结果、验证和下一步优先;新建表单独立打开。切换记录和日期保留本次未保存文字,提交期间阻止重复保存并保护后续输入。

详见单项审阅工作区与已知边界,或查看任务页演示截图(虚构数据)。

归档:结项而不等于验收

  • 详情页按钮收敛为「保存」「确认完成并归档」「重新打开」。归档会同时结束任务、把该任务的自动记录标为已归档;工作结果为空时拒绝归档。
  • 列表可勾选 1–50 项批量归档或重新打开,任一项不存在则整体失败,不会只做一半;筛选新增「已归档」,「全部」及其余待办视图都排除已归档记录。
  • 归档不改写 AI 草稿、不删除证据;报告里仍标为「已自动归档(非人工验收)」。重新打开只恢复任务与自动记录状态,人工结论保留。
  • 闲聊等无效记录可以直接删除:详情页「删除记录」或列表「删除所选」,一次确认后移除任务、草稿、人工审阅和自动记录,原始日志不动。独属该任务的来源对话会被忽略,不再自动生成任务,可在首页「已忽略」分组恢复;仍被其他任务使用的对话不会被忽略。
  • 保存/归档期间按钮禁用并显示进行中文字,成功就地反馈并附时间,失败显示可读错误;来源改为一行摘要,会话与证据默认折叠,只有存在待核对新草稿时才展开审阅重点。

详见审阅归档、删除、批量操作与已知边界。

更清楚的报告与重点审阅

  • 报告改为人工成果优先,明确区分推进、阻塞和 AI 待审结论;默认精简交付版,也可切换完整审阅版。
  • 标出缺少验证、仅讨论未实施、审阅后新增草稿等重点;可以只看关注项并直接进入对应审阅。
  • 已审阅草稿不反复展开;跨日完全相同的人工文字仅合并展示,原记录和统计保留。
  • 页面正式排版,原文依据按需展开,支持 Markdown 导出和打印保存 PDF。

详见报告质量与验证说明。

更省事的日常整理

  • 顶部常驻「返回」按钮:总结设置、审阅与报告之间可回到上一位置,恢复日期和滚动位置;证据预览可收起返回任务。macOS 也支持菜单「返回上一位置」(⌘[)。

  • 有效 AI 草稿可直接带入结果、验证和下一步,不必重复抄写;只填表,不再次调用模型、不自动确认为成果。

  • 编辑时刷新不打断输入,切换日期可返回继续;支持撤销未保存修订,保存期间的新输入不会被旧响应覆盖。

  • 不值得整理的会话可点「暂不整理」,随时恢复;有新工作活动会重新提醒,不丢日志、不影响使用统计。

详见低负担整理流程与后续优先项。

周记录与 macOS App(0.5 预览)

  • 侧栏新增「本周记录」:七天工作集合、每日任务状态图、Token / 回复 / 会话趋势,点击图表查看当天;只把受阻和写了下一步的记录列为本期待跟进。
  • 本机可构建原生 macOS App,点击图标自动启动服务与桌面窗口,无需复制链接。首次未授权不调用模型;已开启的自动模式可在重开时恢复。关闭 App 停止采集。
./bin/build-macos-app
open "dist/AI Worklog.app"

构建需要 macOS 12+、Xcode Command Line Tools 和 Python 3.9+。当前为本机架构、未公证的预览版,Python 尚未内置。已有数据可通过 App「文件 → 打开已有工作数据库」继续使用,不会自动搬动或覆盖。

开发时不必每次重新打包:./bin/dev-app 让 App 直接读取仓库源码,改 Python 约 1.5 秒后自动重启本地服务,改 static/ 自动刷新页面。数据本身在 App 运行期间每 30 秒导入一次、页面每 30 秒刷新,无需重开。

./bin/dev-app        # 开发模式:源码 + 自动重载

详见周记录与桌面版说明。

当前迭代:从会话统计到工作任务

业务总结质量改造

总结现在围绕具体工作,按 问题/目标 → 处理措施 → 结果/解决的问题 → 验证情况 → 未完成事项 输出,区分已报告解决、进行中、受阻和仅讨论。

  • 正文未授权或没有可读材料时禁止生成,不再花 Token 把工具调用包装成工作总结。仍可查看本地统计、手动记录任务结果。
  • 优先保留用户目标、处理结论、后续否定反馈;按会话和时间分层抽样,并保留请求/回复配对,排除工具调用噪声。长答复保留首部与结论尾部,不再整段丢弃。
  • 旧版空正文/结构不合格的草稿保留追溯,但会标记“需重新生成”,不会作为有效成果导出。旧缓存与新版证据隔离。
  • 新版草稿须有结构化问题、措施与结果字段;引用空白证据、声称解决却无结果、漏掉自身提到的量化测试结果,均不能标记成功。助手报告不等于独立验证或业务验收。
  • 虚构场景的 DeepSeek 实测示例展示:登录故障修复、失败回归阻塞、桌面方案未实施,不能混为“全部完成”。

可视化、总结与会话主题

  • 首页提供每小时事件分布、模型 Token 占比和人工任务状态分布;事件数量不等于工作时长。
  • “工作总结”展示当前数据库中所选日期的 AI 草稿、人工成果和命令行回顾。尚无草稿时会说明原因,不把元数据统计伪装成业务总结。
  • 点击“生成总结”→“启用 AI 总结”,可选择 CodeBuddy DeepSeek Flash 或 Pi 默认模型;可单独授权脱敏摘录。设置本身不调用模型,选择会话生成时才调用,并再次确认可能产生用量。普通手动设置对当前服务有效;自动模式设置与来源授权会持久保存。
  • 点击会话“生成总结”会关联或创建一个单会话任务,生成阶段草稿并自动刷新。多会话任务仍可在来源工作区手动创建;自动模式不要求人工审阅才能保存记录。
  • “提取主题名称”经确认后,仅在本地扫描每个来源最近 20 个文件,从当日用户短句提取脱敏主题,非模型生成。也可手动改名;单会话 AI 总结有正文证据时会使用草稿概述生成简短名称,绝不覆盖手动命名。原始会话文件不会修改。
  • ID 仅在“来源详情”中显示。主题名保存在当前 SQLite 的 session_names 表;purge --titles-only 会删除自动提取/生成的名称,purge --summaries-only 会删除 AI 草稿衍生名称;两者均保留手动名称。

首页现在先展示人工审阅的任务、工作结果和待整理会话;模型/Token 统计移到“使用分析”。任务可关联同日多个 Pi/Codex 会话,也可不选会话,手动记录线下工作。自动模式会直接记录模型报告的任务结果并分类归档,明确标为非人工验收;人工修订仍独立保留,不再是形成报告的前提。

# 自动发现本机 Pi/Codex 会话目录;首次不调用模型,已有自动授权时恢复原设置
python3 app.py start --db data/personal.sqlite3

# 可选:显式增加一个 Git 仓库,只读取当日提交的摘要和改动行数
python3 app.py start --db data/personal.sqlite3 --git-repo /absolute/path/to/repository

# 如需手动生成 AI 草稿,再加 --enable-llm;摘录另需 --allow-excerpts
python3 app.py start --db data/personal.sqlite3 --enable-llm

打开命令输出的完整本地链接。创建任务后,在“人工审阅与修订”填写状态、结果、经验、验证和下一步;Git 提交由你选择关联,提交记录本身不代表测试或验收通过。界面右上角可切换日报、周报和月报并下载;命令行也支持:

python3 app.py report --db data/personal.sqlite3 --period week --date 2026-10-29
python3 app.py report --db data/personal.sqlite3 --period month --date 2026-10-29 --out data/october.md

start 仅提供本地自动发现和轮询;需要只读取指定来源时,仍可使用下方的 serve --watch --pi-dir ...。Git 导入是显式的,不扫描整个磁盘。详细边界见 本轮产品迭代。

0.7.1(当前迭代):周趋势点选只选中当天、不再跳回工作台;采集缺口改为按日期窗口统计,补齐本周覆盖。详见0.7.1 验证记录。0.7.0 的会话结束或空闲 3 分钟后才自动记录一次、任务标题取自对话本身、任务记录页默认隐藏已归档,以及三套样式统一到层次仪表盘视觉,详见0.7 验证记录。0.6.0 的删除无效记录、忽略与恢复来源对话,删除联动清理草稿、人工审阅和自动记录且不改动原始日志;0.5.0 的项目 → 对话 → 工作分项自动记录台账、审阅归档与批量结项、来源摘要化,以及 0.4.0 的人工审阅、显式 Git 提交关联、周/月报和一键启动,以及 0.3.0 的命令行增量回顾继续保留。

演示工作台:虚构数据

使用 CodeBuddy 中的 DeepSeek 生成总结

复用本机 CodeBuddy CLI 的登录,不复制 API Key,也不修改全局 Pi/CodeBuddy 配置。默认选择 deepseek-v4.1-flash:

python3 app.py start --db data/personal.sqlite3 --enable-llm \
  --summary-provider codebuddy --summary-model deepseek-v4.1-flash

默认不发送正文,未授权时阻止生成业务总结。请先在网页“总结设置”中明确授权并预览脱敏正文,或启动时另加 --allow-excerpts。点击会话“生成总结”才会调用模型(除非你另外开启自动模式)。

也支持命令行回顾:./bin/worklog-review --summary-provider codebuddy --summary-model deepseek-v4.1-flash,其首次起点和摘录授权规则不变。

适配器在临时目录中运行官方 codebuddy,设置空工具白名单、全工具拒绝、dontAsk、空 MCP、单轮和不保存会话;仅从用户设置传递路由字段,不加载用户/项目设置中的插件、hooks 或环境变量。输出需通过结构及证据引用校验,且不能出现工具调用。现有 CodeBuddy 版本的 init 消息会列出未过滤的工具目录,实际模型工具受空白名单限制;测试覆盖此协议差异。CLI 自身仍可能保留运行诊断,不保证完全无磁盘写入。

生成结果仍是待审阅草稿,用量来自 CLI 返回的 Token 计数;不把零成本字段当成免费,也不推算 CodeBuddy 积分账单。需要先安装 codebuddy 并完成登录,失败不会自动换成其他模型或走其他付费渠道。

不开网页:命令行增量回顾

# 在仓库目录操作。首次明确从现在开始;此步不读取日志、不调用模型。
# --allow-excerpts 会保存此来源范围内的脱敏摘录授权,后续回顾无需重复授权。
./bin/worklog-review --start-now --allow-excerpts

# 以后每次结束对话后执行:直接在终端按工作条目输出总结。
./bin/worklog-review

# 不调用模型、不标记已回顾,只预览本次将使用的材料。
./bin/worklog-review --preview

# 查看上一次成功回顾,也可导出到一个不存在的文件。
./bin/worklog-review --last
./bin/worklog-review --last --out data/last-review.md
  • 便携入口默认只读 Pi 日志,使用独立的 data/review.sqlite3。命令不要求网页服务,也不需要常驻采集:Pi 自己保存日志,下次回顾再读取。
  • 每次最多4批,每批最多24条证据、12个会话;按已验证条目流式输出,不直接打印未经脱敏/引用校验的模型原始 token。积压留到下次同一命令,--batch-limit 1 可减少单次调用,最大12批。
  • 成功输出并完成可选文件导出后,才原子标记所覆盖事件。失败/取消不推进记录点;已验证结果缓存可复用。迟到日志、相同时间戳的新事件仍按事件ID识别,不只比较时间戳。
  • 首次需要历史回顾,可把 --start-now 换成 --since '2026-10-29T09:00:00+08:00'。没有自动判断“退出对话”的钩子;边界由首次起点和后续成功回顾明确建立。
  • --metadata-only 撤销当前来源的摘录授权。模型只能概括受限材料,不等于自动识别或验收全部业务任务;只在 IDE 中手动修改、未写入 AI 会话的活动不在覆盖范围。
  • 来源发生读取缺口时默认停止,不调用模型/标记已回顾。先用 --preview 检查;只有明确接受不完整结果才使用 --allow-partial。默认最多读取每个来源500个JSONL文件,非文件增量游标。
  • 默认使用 Pi 现有模型,也可传 --summary-provider / --summary-model;依赖第三方扩展的 provider 暂不适配。命令行只限制每次批数,不继承网页服务的每日10任务额度,不是费用封顶。

需要 Codex 时,在首次建立起点和每次回顾都加 --codex-dir "$HOME/.codex/sessions";来源组合有独立记录点,不会静默合并授权。更详细的边界、输出和清理说明见 增量回顾。

网页任务总结(0.2.0 起)

  • 手动结束并总结:在“任务记录”页关联最多12个会话,或不选会话记录线下工作;关联会话后可预览脱敏材料,按需生成阶段总结或结束任务并总结。
  • 自动阶段总结:显式开启后,为本次启动之后的新活动建立会话任务,标题取自对话本身;会话结束或空闲后记录一次(界面默认3分钟,CLI --idle-minutes 默认10分钟)。未结束的回合不会触发,阶段总结永不自动标记任务完成。
  • 复用现有 Pi 模型:默认使用 Pi 的 defaultProvider/defaultModel,也可由启动参数指定。本机已用 openai-codex / gpt-6.1-sol 做合成材料真实调用验证。
  • 受限脱敏摘录:只选用户需求、助手文本结论及工具状态;不发送思维链、工具参数、原始输出、图片或系统提示词。长消息、代码块、常见凭据和路径会省略或脱敏。
  • 可追溯草稿:总结包含概述、做过的工作、结果线索、阻塞、下一步建议及证据ID,并进入Markdown日报。引用合法不证明结论真实,仍需人工审阅。
  • 控制调用:单工作进程、同一材料去重、显式失败重试、每日默认最多10个总结任务;旧排队任务也受当日执行额度限制。

原有活动时间线、模型/缓存统计、异常记录、按日期导出和匿名元数据模式继续可用。

启动:手动 + 自动总结

Python 3.9+;元数据功能仅用标准库。LLM功能还需要已安装、已登录的 Pi,以及所选模型的可用额度。本程序仍不是自启动或后台常驻软件。

git clone https://github.com/CCdddbb/ai-worklog.git
cd ai-worklog
python3 app.py serve --db data/personal.sqlite3 \
  --watch --pi-dir "$HOME/.pi/agent/sessions" \
  --enable-llm --allow-excerpts --auto-summarize \
  --idle-minutes 10 --daily-summary-limit 10 \
  --summary-provider openai-codex --summary-model gpt-6.1-sol

打开终端打印的完整 http://127.0.0.1:.../#token=... 链接;不要分享。令牌仅留在当前页面内存,刷新整个页面后需重新打开完整链接。Ctrl+C 停止HTTP、采集和总结进程。

  • 不希望自动调用:去掉 --auto-summarize,仍可手动结束并总结。
  • 不允许对话摘录出设备:去掉 --allow-excerpts,系统阻止模型业务总结;仍可浏览本地统计、手动记录和导出人工成果。
  • 不调用模型:去掉所有总结相关选项,运行普通 serve 或 serve --watch。
  • 单独Codex日志:可增加 --codex-dir "$HOME/.codex/sessions"。Pi已有CodeBuddy使用记录,不重复导入其桥接副本。
  • 不指定provider/model时使用Pi默认选择。总结进程禁用扩展,依赖第三方扩展的provider暂不自动适配;不会静默切换到其他模型。

默认每个来源最多读取100个JSONL文件,可用 --max-files 调整(最大500)。按日期导入时只把与当天相关的文件计入覆盖:最后写入时间早于当天的文件不读取、也不算缺口;超过64MiB的文件读取到上限并披露截断。页面和日报披露覆盖与跳过情况,不保证所有历史都已扫描。

如何使用任务总结

  1. 到“任务总结”页,确认显示的模型、摘录授权和自动模式。
  2. 输入任务名称,勾选关联会话,指定从当天几点开始记录,创建任务。
  3. 点“预览当前材料”检查即将使用的脱敏内容。
  4. 点“阶段总结”,或“结束并总结”;后者代表用户结束记录,不是模型确认业务已验收。
  5. 等待“AI草稿已生成”,可查看本次冻结的证据快照,并导出含总结的日报。

自动模式按已授权范围执行,不等待逐次预览确认。默认仅处理启动后的新活动,不把历史所有对话自动发给模型。旧的、已经排队且配置与授权相同的任务可以恢复执行;更换模型、来源目录或摘录授权时,旧任务会被阻止并要求重新触发。

同一批活动不会持续重复总结;活动继续后可生成新阶段。失败不会无限自动重试,需手动重试。同日达到额度的旧排队任务会等待后续额度;这是任务数限制,不是费用封顶,Pi本身的重试也可能产生额外调用与费用。

网页中的任务按所选日期和起始时间限定范围。 手动可关联同日多个对话;自动默认按会话分组,不盲目合并不同业务。跨日应分别建立阶段任务,尚未实现多日任务自动归并。

隐私与执行隔离

  • 未启用LLM时,默认只保存匿名元数据。--titles 是独立的短标题选项,不等于允许模型调用。
  • --enable-llm --allow-excerpts 授权选定的脱敏摘录发送到模型服务(可能在云端)。关键词脱敏无法识别所有客户信息和商业秘密,启用前应确认公司政策允许。
  • 摘录最多24条,优先保留需求/结论及时间分层的请求回复;单条先限制到3600个UTF-8字节,再按总计32000字节正文预算公平分配,完整快照不超过48000字节。长文本清理后保留首尾结论。页面会披露采样和缺失,不代表完整理解全部工作。
  • 摘录证据快照、模型草稿和用量记录保存在本地SQLite,不保存整份原始日志。数据库权限0600,但未加密;删除总结不会清除已导出的报告或外部备份。
  • 总结通过空临时目录中的Pi CLI运行,禁用工具、MCP、扩展、技能、上下文文件和会话持久化;材料经stdin传入,不放在命令行参数中。模型文本不会作为代码、命令或HTML执行。
  • 本应用不读取或复制API Key;仅取Pi模型选择字段。凭据解析及正常OAuth刷新由Pi自己处理,不改Pi/Codex全局配置。
  • 标准输出、标准错误、输入和运行时间均受限制;失败不把原始模型响应或私密诊断写入日志。总结进程不保存会话,避免被采集后再触发总结。
  • 本地API只绑定loopback,写操作必须有本次启动令牌和同源Origin;浏览器不能指定读取路径、模型命令或任意来源。

时间和Token仍是源日志的统计,不是实际编码工时、实际账单或完成证明。推理Token不重复叠加,缓存与普通输入分列;并行活动区间取并集。辅助用量缺模型时记unknown,不猜填。

保留原有命令

# 只读导入,不调用LLM
python3 app.py import --db data/personal.sqlite3 --pi-dir "$HOME/.pi/agent/sessions"

# 导出新文件,不覆盖人工编辑
python3 app.py report --db data/personal.sqlite3 --date 2026-10-28 --out data/my-report.md

# 关闭总结服务后,清理本应用数据;不改源日志
python3 app.py purge --db data/personal.sqlite3 --summaries-only
python3 app.py purge --db data/personal.sqlite3 --titles-only
python3 app.py purge --db data/personal.sqlite3 --before 2026-10-01

演示可用 python3 app.py serve --db data/demo.sqlite3。没有演示库时先运行一次 python3 app.py demo --db data/demo.sqlite3;已有库不会被覆盖。演示和真实数据应始终分库。

REA 学习及验证

确实用隔离Node和REA分析了两个WakaTime官方插件的核心文件,没有运行其插件或逆向闭源后台。固定提交、无本机路径的研究清单和许可见 设计说明 与 docs/research/,分析有明确的partial/unknown范围。原始REA摘要和完整证据只在维护者本地保留,不随公开仓库上传;研究清单不是原始REA证据的替代认证。

PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -v
node --check static/app.js
node --check static/tasks.js

# 使用已有Playwright,真实浏览器 + 假模型测试,不产生LLM费用
WORKLOG_SUMMARY_FIXTURE=1 \
PLAYWRIGHT_CORE_PATH=/absolute/path/to/playwright-core \
  node tests/browser-smoke.cjs

原有真实Pi调用使用合成日志验证,不发送个人实际对话,见 0.2.0验证说明。新增命令行流程的验证见 增量回顾。没有配置自启动。生产级安全审核、全天稳定性、源文件增量读取游标、完整跨工具语义去重和定时外部推送尚未完成。

公开仓库说明

数据库、身份盐值、个人日报、对话摘录、运行缓存和原始REA分析文件均被排除。演示截图和自动化测试只使用虚构数据;不要强制添加 data/ 或私密运行产物。

仓库公开不等于本项目已选定开源许可证;本项目许可证待确定。第三方材料按各自许可处理,见 第三方说明。

About

Local-first AI activity dashboard with opt-in, evidence-grounded Pi task summaries.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages