0x7A7A6572/dsh-forge-studio--packages-plugin-daily-log ↗★ 1
@zzerx/dsh-plugin-daily-log
每日工作日志:聚合 Git 提交与本地 agent 对话(deepseek/claude/codex),按自定义模板生成日报/周报/月报;agent 工具按需注入,默认只挂一个 daily_log 派发器。 适合需要根据Git提交和对话记录自动生成工作报告的用户。
설치
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:0x7A7A6572/dsh-forge-studio#3176e0b6a5b9469523d8ab727e2c1fe0db8a71a7&path:packages/plugin-daily-log@zzerx/dsh-plugin-daily-log
侧边栏图标:设置面板侧边栏默认给所有分区一个通用齿轮(外壳的图标是硬编码 id 映射,槽位没有图标入口),本插件用一层作用域 DOM 补丁把「工作报告」换成自己的图标,做法同
dsh-skill-hub;补丁失败只退回齿轮,不影响功能。
每日工作日志:聚合 Git 提交 与 本地 agent 对话(deepseek / claude / codex),按自定义模板生成日报 / 周报 / 月报。不再只面向开发者 —— 非开发者也能用本地对话记录做工作总结。
功能
- 多源采集:Git 仓库(
git log白名单 + execFile 防注入)、Claude Code(~/.claude/projects/**/*.jsonl)、Codex(~/.codex/sessions/**)、DeepSeek harness(DSH_HOME会话日志)。 - 对话式生成:在聊天里说「帮我生成本周周报」,agent 先确认时间范围与项目、扫描 Git 提交与本地 agent 对话,再亲自按模板结构把活动归纳成业务化报告(合并同功能提交、归类到核心产出/问题修复/技术优化等章节);经你确认后保存到报告历史并可导出 .md。
- 报告历史 + 导出:历史报告可查看 / 删除,一键导出 .md 到本地目录。
- 默认仅本人提交:Git 渠道默认按提交身份过滤 —— 设置
authorEmail优先,未配置时回落各仓库生效的git config user.email,因此默认只产出本人提交;项目级author可覆盖,填*/all放开全作者。对话渠道没有作者维度,不受影响。 - agent 工具:会话里自然语言「帮我生成本周周报」,经
daily_log_*工具完成(daily_log_list_sources/daily_log_scan/daily_log_prepare_report/daily_log_save_report/daily_log_export_report等)。 - 上下文可控的取数:会话渠道按条产出(单人一周可达数百条),因此扫描默认只给分组级索引 ——
level=index的渲染行数只与「会话 / 分支」数量有关,与消息条数无关;需要细节时level=summary取每组「首问 + 末答」,level=raw才是逐条明细(可配session_id/keywords下钻)。被折叠的分组会显式列出名称与条数,不会静默丢弃。 - 注入内容剥离:宿主往会话里塞的包裹块(IDE 打开的/选中的文件、环境与权限说明、AGENTS.md 提示、技能基目录、命令回显、任务通知、
[Request interrupted])在解析阶段剥离或丢弃;它们常与真实提问同处一条消息,因此先剥壳、剥完为空才丢整条。只按白名单标签匹配 —— 正文里出现 `` /这类正常尖括号内容不会被误伤。
工具按需注入(默认不注册)
本插件的 agent 工具默认不进入模型上下文:新会话只挂 1 个常驻派发器工具 daily_log,systemPrompt 里也只有一句短指针;15 个 daily_log_* 工具在按需启用时才注入本会话(这个机制叫「按需注入」)。
详细工作流引导段(811 字符)不走 systemPrompt:agent 作用域只有 tools、没有 prompt 段通道,注册进去会被静默丢弃(真机实测)。因此引导改走对话本身 —— 它随 daily_log 的启用结果,或随 /report 的续接消息(用户原话在前、引导在后,不重述需求)一起进入本会话,模型读到的仍是全文。
两种启用方式,任选其一:
- 敲
/report指令:例如/report 生成这周的周报。指令会把需求续成一条用户消息交给模型,模型随即拿到 15 个工具并开始干活,不用你再重述一遍需求(万一自动续接失败,会明确提示你把需求再说一次)。注意/report要带需求:裸敲/report(不带参数)不会产生模型轮次,那一轮自然也没有可投递引导的对话通道 —— 引导会在你之后正常提需求、模型经daily_log启用时随结果一并给出。 - 让模型自己启用:直接说「帮我生成这周的周报」,模型先调用
daily_log派发器把整组工具启用起来,紧接着就能调用daily_log_scan等工具。启用后在该会话内保持可见 —— 不会用完自动回收,也不跨会话泄漏。
开关的位置与作用范围:设置 → 工作报告 →「注册 /report 指令」(设置项 forge-studio-daily-log.enableReportCommand,默认开)。它只管 /report 指令是否注册,不是本插件的总开关:关掉后模型仍可在需要时经 daily_log 自行启用整组工具。
默认态省下多少(按本包当前文案实测的字符数换算,token 为估算区间):
| 项 | 默认态(每轮) | 按需启用后(每轮) |
|---|---|---|
15 个 daily_log_* 工具完整 schema | 不发送 | 约 1.7–2.4k token |
| 详细引导段(811 字符,随启用结果 / 续接消息进对话) | 不发送 | 约 0.4–0.5k token |
daily_log 派发器定义(513 字符) | 约 0.13k token | 约 0.13k token |
| 常驻短指针(173 字符) | 约 0.12k token | 约 0.12k token |
| 合计 | 约 0.25k token | 约 2.4–3.1k token |
即默认态每轮少付约 2.2–2.9k token(≈ 90%):从「15 个工具的完整 schema + 详细引导段」压到「1 个派发器 + 1 句短指针」。
作者过滤(默认仅本人提交)
Git 提交的作者过滤按以下优先级取值,三级皆空时不过滤:
- 项目级
author(daily_log_add_source的author参数); - 设置
forge-studio-daily-log.authorEmail(设置页可填); - 各仓库生效的
git config user.email(仓库 local 优先,回落全局身份)。
填 * 或 all 可显式放开全作者(想收录团队提交时使用)。
架构
- host:
src/index.ts打开daily_log域(storage-domain 三表 sources/reports/templates)→ 提供ctx.dailyLog服务(Typert remote 直连)→ 注册设置命名空间 → 装配数据源 provider + agent 工具桥。 - 数据源:
src/sources/{git,claude,codex,dsh}.ts(claude/codex共用conversation-jsonl.ts解析器;dsh.ts自带多帧 zstd 解码与注入源过滤);扫描结果经src/agent/scan-render.ts分层渲染(index / summary / raw)后交给 agent。 - client:
src/client/index.ts挂ctx.remote.dailyLog.*远程通道 → 在 dsh 设置面板注册一级分区「工作报告」(settings.section,声明感知注入,与加载顺序无关)。
界面(设置里的一级分区)
入口统一收在 设置 → 工作报告(不再占用侧栏与会话区)。分区内:
- 顶部「注册 /report 指令」开关:只管指令是否注册,关掉后模型仍可经
daily_log自行启用(见上一节);开关读写的是本插件设置命名空间,与 host 侧同源,改完即时生效; - 其下「对话式生成」模块:说明怎么用左侧对话生成,显示当前默认模板与数据源数量,按钮「去对话生成」直接关掉设置回到会话;
- 页签 报告 / 数据源 / 模板(带计数);
- 三页统一走 dsh 的卡片语言(0.5px 描边卡片 + 卡片栅格 + 分组小标题 + 虚线新增位),样式
src/client/views/ui-css.ts只注入一次,选择器挂在分区根标记下;长正文(报告正文 / 模板预览)在卡片内滚动,展开的报告横跨整行。
视图文件:views/section.tsx(分区外壳)/ sources-view.tsx(数据源 + 两个弹窗)/ reports-view.tsx / templates-view.tsx / parts.tsx(共用小件)/ ui-css.ts(样式)。弹窗走宿主 Modal 原语(body portal),内容包一层同根标记以命中分区样式。
启用进 web profile
把 @zzerx/dsh-plugin-daily-log 加进 .dsh-home/profiles/web/package.json 的 dsh.profile.bundles 列表后执行:
pnpm --filter @zzerx/dsh-plugin-daily-log build
pnpm install # 更新 profile 锁文件
pnpm dev
开发
pnpm --filter @zzerx/dsh-plugin-daily-log typecheck # tsc --noEmit(host + tests)
pnpm --filter @zzerx/dsh-plugin-daily-log test # vitest(domain/service/template/reference + git 集成)
pnpm --filter @zzerx/dsh-plugin-daily-log build # lib/index.js + lib/client.js + lib/types
模板(LLM 引导)
模板是「指令段(可选) + + 骨架段」的 Markdown:两者都会作为结构引导注入生成阶段的提示,AI 按骨架章节撰写正文(不是占位符替换)。内置 default 提供五节骨架(核心产出 / 问题修复 / 技术优化 / 其他工作 / 下一步计划);模板页可创建/编辑两段式自定义模板。