skill-forge-hub 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +94 -2
- package/annual-report/SKILL.md +31 -0
- package/annual-report/resources/content-rules.md +40 -0
- package/annual-report/resources/data-collection.md +25 -0
- package/annual-report/resources/date-parsing.md +18 -0
- package/annual-report/resources/disk-and-html.md +28 -0
- package/annual-report/resources/industry-dictionary.md +19 -0
- package/annual-report/resources/usage-guide.md +26 -0
- package/annual-report/user-config.md +37 -0
- package/article-to-html/SKILL.md +239 -0
- package/article-to-html/design-system.md +358 -0
- package/article-to-html/scripts/download_roboto.py +38 -0
- package/article-to-html/scripts/extract_docx.py +68 -0
- package/article-to-html/scripts/inline_fonts.py +32 -0
- package/article-to-html/scripts/install_sourcehan.py +78 -0
- package/cli.js +350 -0
- package/daily-report/SKILL.md +31 -0
- package/daily-report/resources/content-rules.md +82 -0
- package/daily-report/resources/data-collection.md +40 -0
- package/daily-report/resources/date-parsing.md +21 -0
- package/daily-report/resources/disk-and-html.md +14 -0
- package/daily-report/resources/industry-dictionary.md +19 -0
- package/daily-report/resources/usage-guide.md +65 -0
- package/daily-report/user-config.md +36 -0
- package/package.json +33 -4
- package/spec-doc2spec/SKILL.md +64 -0
- package/spec-doc2spec/resources/checklist.md +25 -0
- package/spec-doc2spec/resources/images.md +27 -0
- package/spec-doc2spec/resources/structure.md +27 -0
- package/spec-doc2spec/resources/usage-guide.md +32 -0
- package/spec-spec2doc/SKILL.md +62 -0
- package/spec-spec2doc/resources/checklist.md +24 -0
- package/spec-spec2doc/resources/images-and-template.md +14 -0
- package/spec-spec2doc/resources/pdf-path.md +21 -0
- package/spec-spec2doc/resources/usage-guide.md +32 -0
- package/template/SKILL.md +42 -0
- package/template/resources/README.md +20 -0
- package/weekly-report/SKILL.md +31 -0
- package/weekly-report/resources/content-rules.md +82 -0
- package/weekly-report/resources/data-collection.md +41 -0
- package/weekly-report/resources/date-parsing.md +20 -0
- package/weekly-report/resources/disk-and-html.md +14 -0
- package/weekly-report/resources/industry-dictionary.md +19 -0
- package/weekly-report/resources/usage-guide.md +68 -0
- package/weekly-report/user-config.md +37 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# 数据收集
|
|
2
|
+
|
|
3
|
+
先检测当前系统再取对应路径列(macOS:`uname -s` 返回 Darwin;Windows:`node -e "console.log(process.platform)"` 返回 win32),按需检查以下工作区当日提交,聚合产出。只汇总有提交的仓库:
|
|
4
|
+
|
|
5
|
+
| 仓库 | macOS 路径 | Windows 路径 |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| NearCast | /Users/luzhaosheng/SmartDeveloper/DevWorkspace/Android_Studio/NearCast | - |
|
|
8
|
+
| nearcast-server | /Users/luzhaosheng/SmartDeveloper/DevWorkspace/IntelliJ_IDEA/nearcast-server | - |
|
|
9
|
+
| nearcast-go | /Users/luzhaosheng/SmartDeveloper/DevWorkspace/GoProject/nearcast-go | - |
|
|
10
|
+
| nearcast-admin | /Users/luzhaosheng/SmartDeveloper/DevWorkspace/WebProject/nearcast-admin | - |
|
|
11
|
+
| SmartCanteenConsumerMachineApp | /Users/luzhaosheng/SmartDeveloper/DevWorkspace/Android_Studio/SmartCanteenConsumerMachineApp | - |
|
|
12
|
+
| TrustPay | /Users/luzhaosheng/SmartDeveloper/DevWorkspace/Android_Studio/TrustPay | - |
|
|
13
|
+
| srf-app | - | d:\Workspace_Java\srf-app |
|
|
14
|
+
| srf-manage | - | d:\Workspace_Java\srf-manage |
|
|
15
|
+
| srf-operation | - | d:\Workspace_Java\srf-operation |
|
|
16
|
+
| srf-service | - | d:\Workspace_Java\srf-service |
|
|
17
|
+
| srf-web-user | - | d:\Web_Projects\srf-web-user |
|
|
18
|
+
| srf-web-operation | - | d:\Web_Projects\srf-web-operation |
|
|
19
|
+
| srf-web-wx | - | d:\Web_Projects\srf-web-wx |
|
|
20
|
+
| srf-web-h5-teacher | - | d:\Web_Projects\srf-web-h5-teacher |
|
|
21
|
+
| srf-web-uop | - | d:\Web_Projects\srf-web-uop |
|
|
22
|
+
| Spec-Core-Smart-Canteen | - | d:\Workspace_QCoder\Spec-Core-Smart-Canteen |
|
|
23
|
+
|
|
24
|
+
- 「-」= 该仓库在当前系统不存在,跳过;当前系统对应列全为「-」(陌生机器)时跳过 git 收集,只按会话/文字内容生成
|
|
25
|
+
|
|
26
|
+
命令模板:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
git -C <仓库路径> log --since="YYYY-MM-DD 00:00:00" --until="YYYY-MM-DD 23:59:59" --pretty=format:"%h %s" --stat
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
- 汇总每个提交涉及的**文件数**与**增删行数**(来自 --stat),作为量化数据
|
|
33
|
+
- **行数统计口径(防生成物噪音)**:统计增删行数前必须先剔除生成物路径(如 `.speccore/code-graph/` 下的 graph.json:单文件可能贡献数十万行,会撑爆指标);numstat 输出为 `add\tdel\tpath` 三列,用 `grep -vE $'\t\.speccore/code-graph/'` 按制表符+路径过滤(正则匹配行首无效);统计后若行数仍异常巨大(>5 万行),用 `sort -rn | head -8` 定位元凶文件再排除;日报指标卡(提交次数/涉及文件数/代码行数)与 HTML 量化指标行均用过滤后口径
|
|
34
|
+
- 同主题多提交(含多次提交与 MR 合并记录)合并为一条任务点,量化数据累加
|
|
35
|
+
- git 无法给出实际耗时,用时取合理估算值,允许用户事后修正
|
|
36
|
+
- 无当日提交的仓库不写入日报
|
|
37
|
+
- 仓库路径(当前系统列)不存在/非 git 仓库时静默跳过该仓库(不报错、不写入)
|
|
38
|
+
- 用户说「只写 xxx 的日报 / 只聚合 xxx 仓库」时只收集指定仓库
|
|
39
|
+
- git 之外的默认来源:本次会话中用户已提及/口述的工作内容(任务、进度、风险等对话信息)一并聚合,与 git 记录去重合并
|
|
40
|
+
- 用户明确说"只整理这段文字/只按这段"时,忽略 git 与会话上下文,只用指定文字
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 日期解析(自然语言优先)
|
|
2
|
+
|
|
3
|
+
先解析用户话术得到目标日期 YYYY-MM-DD,再收集该日提交。解析规则:
|
|
4
|
+
|
|
5
|
+
| 说法示例 | 解析规则 |
|
|
6
|
+
|---|---|
|
|
7
|
+
| 写日报 / 生成日报(未提任何日期) | **默认今天,不追问** |
|
|
8
|
+
| 今天的日报 / 今日日报 / 当天的日报 | 今天 |
|
|
9
|
+
| 昨天的日报 / 昨日日报 | 今天 -1 天 |
|
|
10
|
+
| 前天的日报 / 大前天的日报 | 今天 -2 / -3 天 |
|
|
11
|
+
| N 天前的日报 | 今天 -N 天 |
|
|
12
|
+
| 上周X的日报(如上周三) | 上一周的周 X(周一为一周起点) |
|
|
13
|
+
| 10月20号的日报 / 10月20日 | 缺年份默认当前年;若该日期晚于今天,取去年同日 |
|
|
14
|
+
| 20261020 / 2026-10-20 | 直接使用 |
|
|
15
|
+
| 10月20号到10月25号的日报 / 11.05~11.07 / 上周一到上周五 / 10月20号到今天 | 连续日期批量生成:两端分别按本表单点规则解析(终点缺年份沿用起点年份、终点月份早于起点月份视为下一年,如「12月28号到1月3号」;终点可写「今天/昨天」),按日期正序逐日生成一份日报 |
|
|
16
|
+
|
|
17
|
+
- 目标日期写入日报标题与 git log 的 --since/--until
|
|
18
|
+
- 批量生成流程:先一次性收集区间内所有日期的提交(逐日分片 --since/--until),再按日期正序逐日生成(每日可引用后一天数据做「明日计划」,见「输出内容与数据来源」节),最后统一落盘与截图;批量时只自动打开最后一天(最新一天)的 html、其余仅落盘不开浏览器,避免开多个标签页;对话中按日期分隔输出各天 md 正文
|
|
19
|
+
- 落盘子目录名永远用解析出的目标日期("昨天的日报"→ 昨天日期),与生成当天/生成时刻无关,不因跨零点而改变
|
|
20
|
+
- 未提及任何日期词(如"今天/昨天/10月20号")时,一律默认今天直接生成,不追问用户
|
|
21
|
+
- 解析结果有歧义时以最近过去的日期为默认,并在标题中注明解析出的日期
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# 本地落盘(默认行为)
|
|
2
|
+
|
|
3
|
+
- 落盘根目录读取顶部「默认配置」的 `DIR`(默认 `auto`:按当前系统自动选 `DIR_MAC` / `DIR_WIN`),按目标日期分子目录(macOS:`<DIR>/YYYY-MM-DD/`;Windows:`<DIR>\YYYY-MM-DD\`,目录不存在则自动创建);改配置节里的 DIR / DIR_MAC / DIR_WIN 即可改变默认位置
|
|
4
|
+
- 换机器/目录不存在回退:落盘前检测 DIR 是否存在(macOS:`test -d <DIR>`;Windows:PowerShell `Test-Path '<DIR>'` 或 node `fs.existsSync`),目录/盘符不存在时默认根目录自动改用用户主目录下 reports(macOS=`~/reports`、Windows=`%USERPROFILE%\reports`,不存在则自动创建),保证任何机器都能落盘
|
|
5
|
+
- 使用时用户临时指明位置(如"写到桌面"、"存到 ~/report(macOS)/ D:\report(Windows)",覆盖 DIR、仅当次生效):以用户指定位置为根目录,同样按日期分子目录;"桌面"映射:macOS=`~/Desktop`、Windows=`%USERPROFILE%\Desktop`;目录不存在自动创建
|
|
6
|
+
- 每次生成落盘哪些文件读取顶部「默认配置」的 `FORMATS`(默认 md/txt/html/content-png 四个,md/txt/html 文件名 `daily-report-YYYYMMDD.<格式>`、截图文件名 `daily-report-YYYYMMDD-content.png`;txt 为纯文本版);`DISK: false` 时全部不落盘
|
|
7
|
+
- 对话中照常输出 md 正文(不受 FORMATS 影响);`OPEN_HTML: true` 且本次落盘了 html 时,自动打开浏览器(macOS:`open <html文件>`;Windows PowerShell:`Start-Process <html文件>`)
|
|
8
|
+
- FORMATS 含 content-png 时额外生成内容区截图 `daily-report-YYYYMMDD-content.png`:整页内容区截图一张(头部标题卡片 + 今日完成任务/明日计划/风险阻塞点三张分节卡片整体截出,头部卡片必须带上,图片四周保留对称合适的外边距约 40px 留白):html 内置 `?shot=content` 参数(页面 JS 检测后仅统一 body 四周 padding 40px、不隐藏任何元素(头部标题卡/三张分节卡/页脚全部保留),正常浏览不受影响);用 Chrome headless 访问带参 URL 截图(路径按系统选:macOS=`/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`;Windows 按序探测 `C:\Program Files\Google\Chrome\Application\chrome.exe` → `C:\Program Files (x86)\Google\Chrome\Application\chrome.exe` → `%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe`,经 node child_process 执行 `--headless --disable-gpu --no-sandbox --hide-scrollbars --user-data-dir=<临时目录> --screenshot=<png路径> --window-size=760,<估算高度> --virtual-time-budget=4000 "file:///<html路径>?shot=content"`(Windows 下 URL 写作 file:///C:/...,用 node url.pathToFileURL 生成),跑完删除临时目录;禁止用 `--headless=new`(单例模式会静默失败生成占位图);若 Chrome 不存在则换 Edge(macOS=`/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge`;Windows=`C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe` → `C:\Program Files\Microsoft\Edge\Application\msedge.exe`),都找不到时跳过截图并在对话注明);高度按整页内容区估算(body 上下留白~80 + 头部标题卡片~180 + 每节卡片(45+条目数×70+40,含各卡片 margin-bottom 18) + 余量~15,底部留白仅 body 下 padding 40px、与顶部对称,余量只防截断不可多给),截图后用 Read 校验:头部标题卡片与三张分节卡片整体完整在图内、四周留白对称合适、不截断,底部留白过大则减高度、截断则加高度重截
|
|
9
|
+
- md/txt/html 均含生成时间行,精确到时分秒(如 2026-10-22 19:10:38);HTML 采用参考图式深蓝面板风格 + ask 同款发光动效的融合样式(不换其它色系,颜色全部用 CSS 变量统一 ask 色板:--cyan #0ea5e9、--bg #0a1929、--card #0b1e37、--border rgba(14,165,233,.15)、--text #bae6fd、--muted #5b7fa5、--green #14b8a6、--orange #f97316、--purple #6366f1、--rose #f43f5e):禁用任何 CDN 与外部网络引用(@import、外链 CSS/JS/图片/网络字体一律禁止,页面必须公司内网离线双击可打开、零外部依赖),字体全用系统本地字体栈 ui-monospace/'SF Mono'/SFMono-Regular/Menlo/Consolas/'Microsoft YaHei'/monospace(macOS 走 SF Mono/Menlo、Windows 走 Consolas,中文回退 Microsoft YaHei;字母数字等宽自带科技感),正文同栈 400、标题同栈 900 渐变文字(var(--cyan) #0ea5e9→var(--purple) #6366f1,background-clip:text,发光用 ask-result 模板同款 text-shadow 双圈(titleGlow 动画 3s 呼吸:基线 20px/.4 + 60px/.15 ↔ 峰值 30px/.7 + 80px/.3,h1 留静态基线;24px 小字同参数观感与官方一致,禁止改三圈小模糊——会糊在字内边界不清));页面背景纯深蓝黑 #0a1929(参考图同款色值)、正文浅青 #bae6fd、全屏极轻微噪点纹理(body::before fixed 覆盖层,background-image 用 SVG feTurbulence data URI(<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='100%' height='100%' filter='url(#n)'/></svg>),opacity .04,pointer-events:none,z-index 0 在卡片之下,消除大面积纯色死板感),body 纯 #0a1929 背景不加径向辉光(onboarding 同款);全屏背景叠加 speccore dashboard 同款三层科技感底纹:60px 网格底纹(.grid-pattern fixed inset 0,background-image linear-gradient(rgba(0,240,255,.03) 1px, transparent 1px) 纵横双向、background-size 60px 60px、z-index 0)+ 彩色星点层(.stars fixed inset 0,8 个 1-1.5px 星点 radial-gradient(1px 1px at <位置>, <色>, transparent) 多背景组合:白色 rgba(255,255,255,.3-.4) 与青色 rgba(0,240,255,.45-.5)、紫色 rgba(168,85,247,.4)、绿色 rgba(0,255,136,.4),位置分散 10%-90%,z-index 0)+ 全屏 2px 周期细扫描线(.scanlines fixed inset 0,repeating-linear-gradient(0deg, transparent 0 2px, rgba(0,240,255,.015) 2px 4px),z-index 999 罩最上层,pointer-events none;三层均 fixed 不随滚动,营造星野+网格+扫描的科技氛围,不破坏参考图纯深蓝黑质感);内容区宽度响应窗口自适应(.wrap width:clamp(640px, 60%, 1200px) + margin:0 auto:最小 640px、最大 1200px、中间按窗口 60% 缩放,页面左右留白对称);头部卡片参考图式实心深蓝底(var(--card) 实心 #0b1e37,略亮于背景、更偏蓝)+ 8px 周期细密水平条纹(background-image 叠加 repeating-linear-gradient(180deg, rgba(255,255,255,.012) 0 1px, transparent 1px 8px))+ 上下边缘 1px 微亮描边(border-top/border-bottom 1px solid #0f3350,参考图「边缘点亮一线」效果,与 ask 四边浮光扫描线动画共存、动画层在上)+ 圆角 6px + 外发光与 inset 内发光(0 0 20px rgba(14,165,233,.08) + inset 0 1px 24px rgba(14,165,233,.04)),overflow:hidden,标题区仅标题与青色胶囊生成时间徽章(badge 后直接收尾,不加底部细线/装饰光带,避免悬空多余线);标题与徽章下加 TL;DR 一句话摘要行(.summary-line flex 布局 max-width 540px 居中:左侧 .summary-tag「TL;DR」青色小标签 系统等宽 10px 粗体、rgba(14,165,233,.35) 细边圆角 4px、rgba(14,165,233,.07) 底、青色 text-shadow 光晕 + 右侧 .summary-text 12.5px 浅青正文 line-height 1.75 text-align left;摘要带判断给结论——整体节奏/主要风险/明日重点,不罗列条目);分节卡片同参考图式质感(实心深蓝底 #0b1e37 + 8px 周期细密水平条纹 + 上下边缘 1px 微亮描边 #0f3350 + 圆角缩小至 6px + overflow:hidden,保留阴影与 inset 内发光,去掉原全框青色细边),每张分节卡片左侧带参考图式左缘色条(8px 宽竖线贯穿整卡高度,节色渐变带同色光晕:完成 linear-gradient(180deg,#5eead4,#14b8a6) / 计划 linear-gradient(180deg,#fdba74,#f97316) / 风险 linear-gradient(180deg,#fda4af,#e11d48),box-shadow 0 0 12px 同色 30% 透明度;卡片内容 padding-left 24px 避让色条),节标题带 18px 同色渐变 SVG 语义图标+文字微光晕(h2 flex 布局 gap 10px,图标替换原竖向短条:完成=圆形对勾、计划=日历、风险=三角警示;inline SVG 内 linearGradient 同节色系渐变 完成 #5eead4→#14b8a6 / 计划 #fdba74→#f97316 / 风险 #fda4af→#e11d48 + 白色描边细节 + drop-shadow 同色光晕;标题色:完成青绿 #5eead4、计划橙 #fdba74、风险玫红 #fda4af + h2 文字同色双圈发光字 3s 呼吸 secGlow 动画(基线 14px/.45+40px/.18 ↔ 峰值 22px/.75+60px/.3,各节动画用本节主题色,与主标题同节奏;仅节标题文字发光,SVG 图标与日期徽章不加))+ 「今日完成任务」节标题右侧带目标日期小胶囊徽章 sec-date(margin-left:auto 推右、flex:0 0 auto;11px var(--muted) 字、padding 3px 10px、圆角 999px、青色细边 rgba(14,165,233,.18)、背景 rgba(14,165,233,.05),如 2026-10-22;仅完成节显示、计划/风险节不加,让截图自带具体日期)+ 条目 3D 立体圆球序号徽章(28px 白字,立体感克制的柔和球面——弱化版三段收窄色阶:受光球面渐变 radial-gradient(受光点 circle at 30% 28%,浅亮→主色→深色:完成 #7dd9cf→#14b8a6→#0d9488、计划 #fdc69a→#f97316→#ea580c、风险 #fdaab4→#f43f5e→#e11d48)+ inset 右下内暗影 -3px -4px 6px rgba(0,0,0,.3) 与左上内亮缘 1px 2px 3px rgba(255,255,255,.2) + ::before 左上椭圆高光点(position:relative 定位,top 5px/left 7px、8x6px、rotate -28deg、白色径向渐隐 rgba(255,255,255,.7)→0)+ 底部投影 0 2px 4px rgba(0,0,0,.25) 与同色光晕 0 0 8px + 数字 text-shadow 0 1px 1px rgba(0,0,0,.25) 贴球面) + 条目内部留白:li 水平 padding 10px(hover 淡青底 rgba(14,165,233,.06) 与文字间留 10px 间距)+ 序号圆形徽章 28px(数字距圆边约 8px,不贴圆边)+ 列表轻微缩进 12px(ol/ul padding 0 12px)+ 描述与进度双层错落排版(描述 15px、进度用时 12px 青灰小字 #5b7fa5、百分比加粗强调且两侧 margin 0 2px 呼吸留白、进度与用时之间用「 - 」连接(与 md/txt 版一致,不用 · )、条目间青色虚线分隔);风险节条目三环展开:desc 主行(问题)+ meta 影响行(12px 青灰小字「影响:xxx」)+ .advice 建议行(12px 青色小字,「建议:」加粗前缀,margin-top 6px);md/txt 版同条目依次写问题、影响、建议,文本格式不变+ 青色渐变 40px 大胶囊「一键复制」按钮(var(--cyan)→#0284c7,30px 青色光晕,hover 45px 光晕上浮,模板同款;flex 居中布局,内置 16px 内联 SVG 双矩形复制图标(白色 currentColor 描边、图标与文字 gap 8px、禁用 emoji 图标),复制成功后图标切换为对勾 SVG、文字短暂变「已复制」);头部 speccore ask 风格发光特效(与 ask 页面完全同款):四边 1px 青色浮光线,渐变 transparent→var(--cyan)→transparent 整条线平移扫动(亮段长、无 box-shadow 光晕,四边亮段构成顺时针环绕循环,与 ask 看板卡片完全同款(上横线 scanX 左→右、右竖线 scanY 上→下、下横线 scanX-rev 右→左、左竖线 scanY-rev 下→上,四线同周期同速度 3s linear 单向平移);实现为 1px 整线渐变元素平铺整条边(上/下横线 left:0/right:0 + height:1px + linear-gradient(90deg, transparent, var(--cyan), transparent);左/右竖线 top:0/bottom:0 + width:1px + linear-gradient(180deg, transparent, var(--cyan), transparent)),随线体 translateX/translateY 平移 ±100%(相对线长):scanX -100%→100%、scanX-rev 100%→-100%、scanY -100%→100%、scanY-rev 100%→-100%;亮段(线中央渐变段)完整穿越卡片后消失于两端界外(卡片 overflow:hidden 裁剪),带「出现→穿越→消失」节奏;禁止自创 background-position 滚动/常驻辉光/往返摆动/亮段半嵌常驻等变体)+ 顶部光斑 ask 同款 cardGlow(radial-gradient ellipse at 50% 10% rgba(14,165,233,.25)→transparent 70%,opacity .5→1 + scale 1→1.6,transform-origin top center,3s 循环;头部卡片与每张分节卡片内均放 .card-glow 光斑层,覆盖整卡顶部)+ 标题文字青色光晕呼吸(text-shadow 双圈 3s 循环);入场动画:头部淡入下滑、卡片依次错峰上浮淡入(完成 0.26s/计划 0.4s/风险 0.54s)、按钮弹入(卡片入场动画 fadeDown/fadeUp/riseIn 的 fill-mode 必须用 backwards 严禁 both——both 使动画结束后最后一帧 transform:none 永久覆盖 hover 的 3D 偏转 transform,CSS 动画 applied 值优先级高于普通声明,hover 偏转会完全失效;cometFade 与按钮 pop 保持 both 不受此限);hover 微交互:卡片上浮+阴影加深+inset 发光增强、条目淡青底、序号徽章放大微旋、按钮上浮/按压回缩;页脚 10px muted 文字(无分隔线、不加边框),署名固定 GENERATED BY SPECCORE TEAM · <目标日期>(日期动态,如 GENERATED BY SPECCORE TEAM · 20261022);三段分节列表,任务点保持中文顿号序号;当日节奏条(.day-strip 完成任务节内三时段横条:上午/下午/晚上按提交数分段高亮、.strip-item position:relative、hover 弹出 .strip-tip 浮层(bottom:calc(100% + 6px) 向上弹出避卡片 overflow:hidden 裁剪;position:absolute、translateX(-50%) scale(.85)→hover scale(1)、opacity 0→1、pointer-events:none、z-index:30、background:#0b2a4a、border:1px solid rgba(14,165,233,.4)、圆角、小字两行「时段 · N 次提交」+主题词));节奏条下量化指标行(.day-metrics flex 居中 gap:22px、10.5px muted 字、数字用 .day-metrics b 青色等宽加粗(3 次提交 / 56 个文件 / +1.8k −285 行,删行数字 .minus 用 --rose 玫红);纯文字模式无 git 数据时省略此行);进度条终点圆点 + 流星扫描填充(.pbar-fill 必须 display:block + position:relative——行内 span 忽略 width/height 会变成 0×0,填充与圆点全部不可见;.pbar-fill::before 终点圆点 7px 径向渐变圆 right:0 + transform:translate(50%,-50%) 骑在填充右缘(done 青绿 radial-gradient(circle at 35% 30%,#a7f3d0,#2dd4bf 62%,#0d9488)、plan 橙 #fdba74/#f97316/#c2410c,box-shadow 同色光晕、z-index:2;.pbar-track/.pbar-fill 均不得加 overflow:hidden——圆点右半伸出填充 3.5px 骑边渲染);流星 = JS 注入 .pbar-track 内的 .pbar-sweep(absolute 左贴轨道、width:0 起点隐藏、height:16px、transform:translateY(-50%) 垂直居中、z-index:1、pointer-events:none)+ sweep 右缘 .pbar-comet 光体(absolute left:100% 贴 sweep 右缘随宽度移动,严禁 right:62%/right:100% 等右侧定位——彗星会停在轨道中段、进度 100% 时也到不了终点;子弹头形光核:20×11px 横向泪滴 border-radius:55% 100% 100% 55% / 85% 100% 100% 85%(右端全圆弧=前进弹头、左端 55%/85% 大圆角=后部饱满钝圆接尾不露尖(比 35%/60% 更钝,禁尖窄收尾),严禁 13×7 小椭圆方块感、严禁 20px 大圆球形态)background 三层:底层 linear-gradient(90deg,rgba(153,246,228,.3),rgba(224,254,255,.6) 55%,#fff) 铺底(形状内不得透底)+ 右前缘青蓝冷光 radial-gradient(ellipse 70% 85% at 74% 45%,rgba(125,211,252,.9),transparent) + 青白核 radial-gradient(circle 12px at 66% 50%,#fff,rgba(224,254,255,.95) 45%,rgba(153,246,228,.5) 75%,transparent)(circle 半径必须显式 12px——自动半径按最远角计、四角渐隐至透明会露出轨道深色背景成「黑三角」,显式半径让光核饱满),box-shadow 双圈柔光 0 0 5px 2px rgba(186,230,253,.75) + 0 0 12px 4px rgba(45,212,191,.3)——光晕总高控制在 2~2.5 倍条高以内,不用 drop-shadow;整体前大后收窄的扫帚流星:头部 20×11 大头 → ::after 彗尾 right:40%、84×12px 细长锥形拖尾 linear-gradient(90deg,transparent,rgba(153,246,228,.18) 26%,rgba(186,230,253,.55) 64%,rgba(255,255,255,.9)) + clip-path:polygon(4% 40%,16% 24%,100% 0,100% 100%,16% 76%,4% 60%)(左端收成 2.4px 高平口钝头、右端全高平接光核、16% 处起渐收——远窄近宽,禁矩形方块形、禁 1px 尖点)+ blur 1px + z-index:0——长度约 4 倍头宽;剥落粒子流(JS 为每颗 .pbar-comet 注入 12 个 span.cp,绝对定位在光核中后段出生):12 粒椭圆小块前大后小(3.2×2.2 → 1.2×0.9px,宽高不等 + rotate -12°~12° 不规则椭圆,禁用标准圆形、禁用 box-shadow 静态星屑——静态点没有剥落飘散的生命感),出生点从头部稍靠后(left 9~17px)开始,y 紧贴中心水平线(中线 ±2.5px,各粒角度基本一致不散乱),cpFlow 1.5~1.8s cubic-bezier(.2,.05,.55,1) infinite + 负延迟 -0.1~-1.5s 错峰:0%→10% 淡入渐现(渐渐出现)、10%→100% 沿水平线加速向后飘 translate3d(-45~-62px, dy, 0)(加速向后)、55% 后 opacity 渐隐 + scale(.16) 渐小(向尾部消失)、dy 取与出生 y 反向小值让飞行终点向中心水平线收敛,box-shadow 光晕 0%→55% 增强再减弱(每粒生命期一次明灭=呼吸发光,周期 1.5~1.8s 与主体 2.4s 呼吸非整数倍错开,禁止同频齐步闪);粒子 z-index:1 在彗尾之上(尾 z-index:0)、opacity:0 起步呼吸发光分层不同频:主体光核与彗尾 2.4s 周期呼吸(comet 双动画 cometFade + glowPulse 2.4s ease-in-out infinite:box-shadow 双圈光晕 0%↔50% 周期扩缩;::after 挂 tailGlow 2.4s ease-in-out infinite:filter blur(1px) brightness(1) ↔ blur(1.5px) brightness(1.28) 亮度呼吸),粒子 1.5~1.8s 明灭与主体 2.4s 呼吸非整数倍错开(视觉错落不同频);opacity:0 常驻隐藏);.pbar-track.sheen-on 时 sweep transition:width 1.1s cubic-bezier(.3,.8,.4,1) 生长(comet 贴 sweep 右缘 left:100% 随宽度从左扫到右),comet 的 animation 严禁写在 .pbar-comet 基类(基类动画页面加载 t=0 即播、1.1s 后 both 定格 opacity:0,而扫动 setTimeout 1.5s 才开始——时序错位会让流星全程不可见);必须挂在 .pbar-track.sheen-on .pbar-comet 选择器上(cometFade 1.1s ease-out both, glowPulse 2.4s ease-in-out infinite 逗号并列双动画:cometFade 7% 淡入、86% 保持、100% 到终点消失、glowPulse 光晕呼吸循环;::after 彗尾另挂 tailGlow 2.4s ease-in-out infinite 亮度呼吸),靠 playSweep 内 remove/add sheen-on 类切换重启动画,与 dotPulse 同机制;扫动终点按各条目标进度 data-w:sheen 内 sweep inline width 终点 = data-w(done 条 100% 扫满轨道、有进度的 plan 条如 30% 即 30% 停在进度点不越界)——sweep 宽度过渡与 fill 宽度过渡同参数天然同步,comet 与彗尾/星屑无需任何反向补偿(scaleX 压缩方案会把彗尾一同拉长数倍,禁用);填充同步生长:入场 sheen(el,'wave') 给 fill 设 transition width 1.1s 同 easing + width 0→data-w,与流星同步——流星扫到哪、填充长到哪,流星到终点消失、留下各自进度,之后填充保持不再变化;圆点 .pbar-done/.pbar-plan .pbar-track.sheen-on .pbar-fill::before animation:dotPulse 1.1s(90% 处 filter:brightness(2) + 白光 drop-shadow 爆亮,done/plan 通用)流星到达终点时爆亮——dotPulse 选择器必须与 JS 加类位置一致:JS 把 sheen-on 加在 .pbar-track 上,严禁写 .pbar-fill.sheen-on::before(JS 从不在 fill 上加类,选择器永不命中、爆亮不触发);流星注入与入场波浪覆盖完成条 + 有进度的计划条(JS 遍历 .pbar-track:plan 且进度<=0 的条 return 跳过——0 进度的计划条不注入流星、不扫、保持静态),其余条 data-w 记录目标进度后 fill 归零;入场波浪:setTimeout 1500+i*420ms 逐条 sheen(el,'wave') 错峰(上→下必然可见);hover 重扫:li 上 mouseenter+pointerenter 双监听,sheen(el,'hover') 只 remove/add fill 与 track 的 sheen-on 类重放流星扫过(comet 再扫一遍,0 进度的 plan 条同样跳过),fill 宽度与颜色完全不重置(进度不再变化),sheen(el,src) 按来源独立节流(wave 1s / hover 300ms);重启动画 remove 类→sweep inline 归零 width:0(transition:none 无过渡)→void offsetWidth 强制回流→同步 add 类→sweep inline 目标 width=data-w(恢复 transition;双 RAF 在 headless 虚拟时间下不推进,不可用));液态玻璃(@supports((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))) 内 .header-card/.section 加 backdrop-filter:blur(16px) saturate(1.35) + background-color:rgba(11,30,55,.42),不支持的老浏览器走默认实心深蓝不白屏);CRT 扫描光带(.scanband position:fixed、left:0/right:0、height:150px、linear-gradient(180deg,transparent,rgba(0,240,255,.03) 50%,transparent)、animation:scanMove 11s linear infinite(top -22%→112%)、pointer-events:none、z-index:998,置于 scanlines 之下一层);卡片级 3D 微倾斜(严禁全页级 mousemove 倾斜——页面容器整页旋转会让所有卡片一起偏转,与「仅当前卡片响应」不符):每张卡片 hover 时仅该卡片随鼠标偏转,卡片 transform 写 perspective(900px) + rotateY(calc(var(--mx,0)*2.5deg)) rotateX(calc(var(--my,0)*-2.5deg))(±1.25° 极轻微),与 hover 上浮 translateY(-2px) 合并写同一条 transform(严禁拆两条相互覆盖);hover 态选择器带 tilt(header-card/overview/section 或 header-card/card),非 hover 卡片不倾斜;JS 对每张卡片监听 mousemove 计算卡内相对位置((clientX-rect.left)/rect.width*2-1 归一化 -1~1)只更新该卡 --mx/--my,mouseleave 归零回正,transition transform .18s 平滑;移动端无 mousemove 保持 0 不倾斜);禁止写 @media (prefers-reduced-motion: reduce) 禁用动画的媒体查询块(官方模板无此块,用户系统开启减少动画时该块会禁用全部动效,是竖线不动/发光不呼吸的根因);页面 JS 需支持 `?shot=content` 参数(检测 location.search 含 shot=content 时仅统一 body 四周 padding 40px(不隐藏任何元素),供整页内容区截图用、保证截图四周留白对称合适)
|
|
10
|
+
- HTML 顶部带「一键复制」按钮:点击复制的是 txt 版纯文本全文(复制源必须用 txt 文件内容:含换行、无 #/##/> 等 Markdown 符号,严禁用 md 内容当复制源),按钮短暂变"已复制";JS 用 navigator.clipboard.writeText,失败回退隐藏 textarea + document.execCommand('copy')(兼容 file:// 打开)
|
|
11
|
+
- 用户临时说"不落盘/别写文件"时(覆盖 DISK):只在对话输出,不写文件、不开浏览器;临时说"写到桌面/存到 X"(覆盖 DIR)、"只要 md/只出 html/只要内容区截图/只要截图/这次不截图"(覆盖 FORMATS)、"别开浏览器"(覆盖 OPEN_HTML)同理,均只对当次生效、不改配置
|
|
12
|
+
- 同名目录处理:日期子目录已存在时直接复用(不重建、不清空),仅覆盖 FORMATS 清单内的同名文件(md/txt/html/content-png),目录内其它文件(时间戳另存的历史文件、full.png 等用户自放文件)一律保留不动、绝不删除或清空(该目录可能是用户此前自建、作其它用途的目录,我们只并列写入自己的专属命名文件,不与用户文件冲突混淆);落盘前查看目录内已有内容,若存在非本 skill 命名的其它文件(daily-report-/weekly-report- 前缀之外),对话中提示用户「该目录内已有其它文件,本次日报已与它们并列存放,未做任何改动」;同一日期重复生成默认直接覆盖原文件,用户说"保留之前的/另存/不覆盖"时,文件名追加时间戳(如 `daily-report-20261022-1530.html`)另存不覆盖
|
|
13
|
+
- 落盘完成后,对话回复必须向用户报告落盘位置:列出实际写入的目录完整路径与文件清单(如「已落盘到 /Users/.../reports/2026-11-06/:daily-report-20261106.md、.txt、.html、daily-report-20261106-content.png」),并注明 html 是否已在浏览器打开、截图是否跳过(Chrome/Edge 都不存在时);DISK=false 或未落盘时注明「本次仅对话输出,未落盘」
|
|
14
|
+
- 落盘文件清单以顶部 FORMATS 为准;显式格式参数(如 `/daily-report 20261022 md`)只影响对话输出形态,不影响落盘清单
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 行业适配(职业词典)
|
|
2
|
+
|
|
3
|
+
报告骨架(三段式/TL;DR/量化指标/节奏条/风险建议环)行业无关,只有「行业变量」随职业切换。用户对话中声明职业即按词典取词(如「帮我写份销售日报」→ 销售词条);词典没有的行业走兜底。
|
|
4
|
+
|
|
5
|
+
| 变量 | 研发 | 销售 | 运营 | 产品 | HR | 财务 | 市场 | 客服 | 项目/PMO | 行政 | 法务 | 设计 |
|
|
6
|
+
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
7
|
+
| 标题 | 研发日报 | 销售日报 | 运营日报 | 产品日报 | 人事日报 | 财务日报 | 市场日报 | 客服日报 | 项目日报 | 行政日报 | 法务日报 | 设计日报 |
|
|
8
|
+
| 工作单元 | 提交/版本/PR | 拜访/商机/回款 | 活动/渠道/内容 | 需求/迭代/上线 | 招聘/培训/入离职 | 报表/对账/税务 | 投放/活动/线索 | 工单/会话/满意度 | 里程碑/需求变更/资源/评审 | 会务/采购/资产/证照 | 合同审核/诉讼/合规/知产 | UI稿/设计规范/走查/交付 |
|
|
9
|
+
| 量化指标 | 提交数·文件数·行数 | 拜访数·商机数·回款额 | 曝光·转化·GMV | 交付数·上线数 | 简历数·到面率·入职数 | 凭证数·回款·预算执行率 | 投放额·线索数·ROI | 工单量·解决率·满意度 | 里程碑达成数·任务完成数·变更数 | 会务场次·采购完成数·资产盘点数 | 合同审核数·案件进展·合规项数 | 页面稿数·规范组件数·走查问题数 |
|
|
10
|
+
| 节奏条 | 提交时段节奏 | 拜访时段节奏 | 活动推进节奏 | 迭代推进节奏 | 面试安排节奏 | 结账对账节奏 | 投放推进节奏 | 工单处理节奏 | 里程碑推进节奏 | 会务采购节奏 | 合同案件节奏 | 设计交付节奏 |
|
|
11
|
+
| 风险话术 | 阻塞点/技术债 | 竞争/预算审批 | 资源/渠道效果 | 需求变更/排期 | 用人缺口 | 资金/合规 | 渠道成本 | 舆情/高峰 | 范围蔓延/资源冲突 | 供应商延期/预算超支 | 合规风险/诉讼时效 | 需求反复/排期挤压 |
|
|
12
|
+
|
|
13
|
+
- 用户角色画像:顶部「默认配置」的 ROLE 定义用户默认角色与主要工作内容(当前:程序员,企业内技术开发,负责前端、后端方向);未提职业时按 ROLE 画像取词(当前等价研发词条:git 提交聚合 + 提交/版本术语 + 提交数/文件数/行数指标)
|
|
14
|
+
- 触发:话术含职业词(销售/运营/产品/HR/财务/市场/客服/项目/PMO/行政/法务/设计等)→ 标题、工作单元术语、量化指标、节奏条主题、风险话术全部按该词典词条生成
|
|
15
|
+
- 临时换角色:说「以 XX 的身份写日报」(如「以销售经理的身份写」)→ 当次按该角色词条生成,不改配置
|
|
16
|
+
- 永久换角色:说「以后默认用 XX 角色 / 我的职业是 XX / 我的主要工作是 XX」→ 更新顶部 ROLE 配置(永久生效);词典没有的角色按用户描述新增词条
|
|
17
|
+
- 声明+临时指标覆盖:说「这次指标看拜访数和签约额」→ 词条 + 临时指标(仅当次);说「以后都用这套指标」→ 固化进词典(永久)
|
|
18
|
+
- 兜底:词典外的行业(工地施工、医生值班等)→ 骨架 + 用户素材(文字/图片/文件)现场生成词条(工作单元/指标从素材提取),本次生效;说「记住这个行业」→ 固化为新词条
|
|
19
|
+
- 行业/角色切换只换内容与指标,HTML 骨架/色板/动效/落盘规范全部不变;纯文字整理模式同样适用词典;优先级:临时角色声明 > 顶部 ROLE 配置 > 词典表
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# 📖 使用说明(详细条目版,用户可读)
|
|
2
|
+
|
|
3
|
+
## 基本用法
|
|
4
|
+
- 直接说「写日报」「生成日报」→ 默认生成今天的日报,无需指定日期
|
|
5
|
+
- 指定日期(多种说法均可):
|
|
6
|
+
- 「今天的日报」→ 今天;「昨天的日报」「前天的日报」→ 往前推 1 / 2 天
|
|
7
|
+
- 「上周三的日报」→ 上一周的周三(周一为一周起点)
|
|
8
|
+
- 「10月20号的日报」→ 当年 10 月 20 日(该日期晚于今天则取去年同日)
|
|
9
|
+
- 「20261020 的日报」→ 直接按数字日期解析
|
|
10
|
+
- 「10月20号到25号的日报」「11.05~11.07」「上周一到上周五」→ 连续日期批量生成,每天一份(前一天明日计划自动从后一天完成任务抽取)
|
|
11
|
+
- 同一日期重复生成会直接覆盖原文件;说「保留之前的」→ 文件名追加时间戳另存不覆盖
|
|
12
|
+
- 说「日报和周报都要」→ 日报、周报按各自流程分别生成,同日数据自动去重
|
|
13
|
+
- 说「打开/查看今天的日报」→ 该报告文件已存在时直接打开不重新生成;不存在则按正常流程生成
|
|
14
|
+
- 说「只算我的提交」→ 只聚合本人提交(git log 加 --author=<用户名>);默认仓库内全部提交都计入
|
|
15
|
+
- 说「只写 xxx 的日报 / 只聚合 xxx 仓库」→ 只收集指定仓库的提交,跳过其它仓库
|
|
16
|
+
|
|
17
|
+
## 口头追加任务
|
|
18
|
+
- 说「补充一下:上午改了角标接口,下午跟测试联调」→ 自动按语义拆成多条任务,润色为规范格式并入「今日完成任务」
|
|
19
|
+
- 拆分信号:时间词(上午/下午/晚上)、连接词(还有/另外/以及)、分号顿号列举、数字列举
|
|
20
|
+
- 补充内容带分段词时按段并入:「明日计划:xxx」→ 明日计划段;「风险:xxx」→ 风险阻塞点段(说「风险暂无/无风险」→ 风险段写「暂无」);不带分段词默认并入「今日完成任务」
|
|
21
|
+
- 与 git 提交聚合出的任务自动去重,同一件事只保留一条
|
|
22
|
+
|
|
23
|
+
## 贴文字 / 发图片 / 给文件整理日报(无 git 提交也适用)
|
|
24
|
+
- 直接贴一段文字说「整理成日报 / 把这段文字整理成日报」→ 以文字为主源生成,不依赖 git 提交(非开发岗位也可用);说「只整理这段文字 / 只按这段 / 不用 git」同样跳过 git 与会话上下文
|
|
25
|
+
- 发图片(截图/照片等 jpg/png/webp)或给文件(md/txt/docx/pdf 等)说「整理成日报」→ 先用 Read 读取:图片按视觉理解提取图中文字信息,md/txt 直接读文本,docx/pdf 优先尝试 pandoc 转文本(无 pandoc 则请用户粘贴文字),再按纯文字模式整理
|
|
26
|
+
- 图片模糊/内容读不清时:先把已提取的部分展示给用户确认或补充,不瞎编没读到的内容
|
|
27
|
+
- 自动分段归类:文字里写「明天/接下来/计划…」→ 明日计划;「风险/阻塞/问题/卡住…」→ 风险阻塞点;其余 → 今日完成任务(用户已明确分段则按用户分段)
|
|
28
|
+
- 自动拆条润色:按主题拆成一条条(日报粒度 20-40 字/点),口语整理为动词开头的规范描述
|
|
29
|
+
- 量化与用时:没有代码提交就没有文件数/行数;进度没写默认完成 100%、计划 0%;用时没提就不写,不瞎编
|
|
30
|
+
- 默认直接生成落盘(CONFIRM: never,无需确认);把顶部 CONFIRM 改为 text/always,或临时说「先看看效果/先出效果」→ 先在对话输出整理好的报告正文,用户说「可以/确认/落盘」→ 再落盘文件与内容区截图并开 html;说「改一下 xxx」→ 按意见修改后重新出效果再确认
|
|
31
|
+
- 说「不用确认/直接落盘」→ 当次跳过确认直接落盘(临时要求优先于配置)
|
|
32
|
+
- 说「不落盘/别写文件」时跳过确认,直接对话输出
|
|
33
|
+
|
|
34
|
+
## 自定义模板(适配各类岗位)
|
|
35
|
+
- 内置模板为三段式(今日完成任务/明日计划/风险阻塞点),适合开发岗位;其他岗位可自定义模板
|
|
36
|
+
- 临时换模板:说「这次按 xxx 来」→ 口头描述结构(如"按四段:工作内容/存在问题/明日计划/需要支持"),当次按该结构生成,不改配置
|
|
37
|
+
- 永久换模板:把顶部配置 TEMPLATE 改为 custom,并按 SKILL.md 的「📝 自定义模板」节说明修改段结构,之后默认按新模板生成
|
|
38
|
+
- 说「以后都用这个模板」→ 自动把当前口述的结构写入「📝 自定义模板」节并把 TEMPLATE 改为 custom
|
|
39
|
+
- 模板优先于纯文字模式的信号词归类:指定了段名后,文字按段名归类填充
|
|
40
|
+
|
|
41
|
+
## 角色定制(我的职业画像)
|
|
42
|
+
- 默认按顶部「默认配置」ROLE 生成(当前:程序员,企业内技术开发,负责前端、后端方向);说「我的职业是 XX / 我的主要工作是 XX / 以后默认用 XX 角色」→ 永久修改 ROLE
|
|
43
|
+
- 说「以 XX 的身份写日报」→ 当次按该角色生成(内置 12 行业词条:研发/销售/运营/产品/HR/财务/市场/客服/项目/行政/法务/设计可直接用),不改配置
|
|
44
|
+
- 词典外行业走兜底:按骨架 + 你提供的素材现场生成词条;说「记住这个行业」→ 固化为新词条
|
|
45
|
+
|
|
46
|
+
## 控制落盘(临时要求,仅对当次生效)
|
|
47
|
+
- 默认:对话输出 Markdown + md/txt/html 三文件 + 内容区截图 content-png 落盘到 DIR(auto 按系统选:macOS=/Users/luzhaosheng/MyWork/智慧食堂/reports、Windows=d:\Workspace_QCoder\reports)/<日期>/ + html 自动打开(DIR 目录/盘符不存在时自动改用用户主目录下 reports:macOS=~/reports、Windows=%USERPROFILE%\reports)
|
|
48
|
+
- 说「写到桌面」→ 本次落盘到桌面(macOS=~/Desktop、Windows=%USERPROFILE%\Desktop);说「存到 ~/report / D:\report」→ 本次用指定目录(均自动按日期建子目录)
|
|
49
|
+
- 说「不落盘/别写文件」→ 本次只在对话输出,不写文件、不开浏览器
|
|
50
|
+
- 说「只要 md」「只出 html」「只要内容区截图」→ 本次只落指定格式文件;说「这次不截图」→ 本次跳过截图(content-png = 三张卡片整体一张图,四周约 40px 留白、「今日完成任务」标题右侧带目标日期徽章,不含头部标题、复制按钮、页脚)
|
|
51
|
+
- 说「只要截图/重新截个图」(如「给 10月22号的日报截个图」)→ 本次不重新生成内容,只对现有 html 执行内容区截图(覆盖 content-png,需 html 已存在,找不到则提示先生成)
|
|
52
|
+
- 说「别开浏览器」→ 本次落盘后不自动打开 html
|
|
53
|
+
- 说「保留之前的」→ 同日期重复生成时不覆盖,文件名追加时间戳另存
|
|
54
|
+
|
|
55
|
+
## 配置开关(改 SKILL.md 顶部「默认配置」节,长期生效)
|
|
56
|
+
| 配置项 | 作用 | 可选值 / 示例 |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| DISK | 是否落盘写文件 | true(落盘,默认)/ false(默认只在对话输出) |
|
|
59
|
+
| FORMATS | 落盘哪些格式(数组) | [md, txt, html, content-png](默认,含内容区截图)/ [md, html] / [md, txt, html](不截图);content-png = 三张卡片整体截图(四周约 40px 留白、完成节带日期徽章),不含头部标题/复制按钮/页脚 |
|
|
60
|
+
| DIR | 落盘根目录 | auto(按当前系统自动选 DIR_MAC / DIR_WIN,默认);DIR_MAC = macOS 根目录(/Users/luzhaosheng/MyWork/智慧食堂/reports);DIR_WIN = Windows 根目录(d:\Workspace_QCoder\reports) |
|
|
61
|
+
| OPEN_HTML | 落盘后是否自动打开 html | true(自动打开,默认)/ false(不打开) |
|
|
62
|
+
| TEMPLATE | 报告模板 | default(内置三段式,默认)/ custom(按「📝 自定义模板」节的结构生成) |
|
|
63
|
+
| CONFIRM | 落盘前先出效果确认 | never(直接生成不确认,默认)/ text(纯文字整理模式确认)/ always(所有生成都确认) |
|
|
64
|
+
- 优先级:临时口头要求(不落盘/写到桌面/只要 md/只要内容区截图/这次不截图/别开浏览器/临时换模板等)永远优先于默认配置,仅对当次生效、不改配置
|
|
65
|
+
- DIR(按系统解析)指向的目录/盘符不存在时,自动回退到用户主目录下 reports(macOS=~/reports、Windows=%USERPROFILE%\reports)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# 用户配置(升级技能时本文件不会被覆盖)
|
|
2
|
+
|
|
3
|
+
> 你的个人配置全放在这里。skill-forge 升级技能时官方只更新 SKILL.md 与 resources/,
|
|
4
|
+
> 本文件始终保留你的版本——落盘目录、格式、角色画像、自定义模板放心改。
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
## ⚙️ 默认配置(用户可手动修改;临时口头要求永远优先)
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
DISK: true # 是否落盘写文件;false = 默认只在对话输出,不写文件不开浏览器
|
|
11
|
+
FORMATS: [md, txt, html, content-png] # 落盘哪些格式(数组,可删减/增,如 [md, html] / [md, txt, html](不截图);content-png = 整页内容区截图(头部标题卡片 + 今日完成任务/明日计划/风险阻塞点三张分节卡片整体截出,头部卡片必须带上),删除该项即不截图;不影响对话中的 md 正文输出)
|
|
12
|
+
DIR: auto # 落盘根目录:auto = 按当前系统自动选 DIR_MAC / DIR_WIN(也可直接写死某个绝对路径)
|
|
13
|
+
DIR_MAC: /Users/luzhaosheng/MyWork/智慧食堂/reports # macOS 落盘根目录(自动按目标日期建子目录;目录不存在时回退用户主目录下 reports)
|
|
14
|
+
DIR_WIN: d:\Workspace_QCoder\reports # Windows 落盘根目录(自动按目标日期建子目录;目录/盘符不存在时回退用户主目录下 reports)
|
|
15
|
+
OPEN_HTML: true # 落盘后是否自动用浏览器打开 html(FORMATS 不含 html 时忽略)
|
|
16
|
+
TEMPLATE: default # 报告模板:default = 内置三段式(完成任务/明日计划/风险阻塞点);custom = 使用下方「📝 自定义模板」节;口头临时指定模板仅当次生效
|
|
17
|
+
ROLE: 全栈开发工程师(企业内技术开发) # 用户默认职业角色与主要工作内容(两者并存:职业名 + 括号内工作内容,生成内容/术语/量化指标/节奏条/风险话术全部按此画像走);用户随口描述职业时(如「我搞装修的,天天跑工地」)→ AI 提炼为规范表述(装修项目经理(负责工地现场管理、施工进度与质量巡检))更新此处;说「以 XX 的身份写」→ 当次临时换角色不改配置;说「以后默认用 XX 角色 / 我的职业是 XX / 我的主要工作是 XX」→ 永久更新此处
|
|
18
|
+
CONFIRM: never # 落盘前确认:never = 直接生成落盘不确认(默认);text = 纯文字整理模式先出效果确认后再落盘;always = 任何方式生成都先确认;临时说「先看看效果」当次先确认、说「不用确认」当次跳过
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
> 临时口头要求(仅对当次生效,不修改上方配置):说「不落盘/别写文件」→ 当次 DISK=false;说「写到桌面/存到 ~/report(macOS)或 D:\report(Windows)」→ 当次改用该 DIR;说「只要 md / 只出 html / 只要内容区截图」→ 当次只落指定格式;说「这次不截图」→ 当次不生成内容区截图;说「只要截图/重新截个图」→ 当次只对现有 html 执行内容区截图(不重新收集 git、不重写 md/txt/html 内容文件);说「别开浏览器」→ 当次 OPEN_HTML=false;说「这次按 xxx 模板来」→ 当次临时换模板(不改配置);说「以后都用这个模板」→ 自动写入下方「📝 自定义模板」节并把 TEMPLATE 改为 custom(永久生效);说「先看看效果/先出效果再落盘」→ 当次先出效果确认后再落盘;说「不用确认/直接落盘」→ 当次跳过确认直接落盘。
|
|
22
|
+
|
|
23
|
+
## 📝 自定义模板(TEMPLATE: custom 时启用,用户可手改,适配各类岗位)
|
|
24
|
+
|
|
25
|
+
把顶部 TEMPLATE 改为 custom 后,按下面结构生成报告(段名、段数、条目格式均可改):
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
段一:今日工作内容(每条:工作描述 - 完成情况)
|
|
29
|
+
段二:存在问题与困难(只列描述)
|
|
30
|
+
段三:明日工作计划(每条:计划描述 - 预计完成时间)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
> 只写段结构与条目格式即可;未写明的细节(中文顿号序号、生成时间行、落盘行为、HTML 样式)沿用默认规范。
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
> 更多用法见 SKILL.md 的「生成流程」与 resources/ 分册。
|
package/package.json
CHANGED
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skill-forge-hub",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "SkillForge (技能锻造坊) — a curated collection of AI craft skills. Install once, then pick skills interactively: daily/weekly reports, article-to-HTML, SpecCore document converters.",
|
|
5
|
+
"bin": {
|
|
6
|
+
"skill-forge": "cli.js"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"cli.js",
|
|
10
|
+
"daily-report",
|
|
11
|
+
"weekly-report",
|
|
12
|
+
"annual-report",
|
|
13
|
+
"article-to-html",
|
|
14
|
+
"spec-doc2spec",
|
|
15
|
+
"spec-spec2doc",
|
|
16
|
+
"template"
|
|
17
|
+
],
|
|
18
|
+
"keywords": [
|
|
19
|
+
"skillforge",
|
|
20
|
+
"skills",
|
|
21
|
+
"ai-agent",
|
|
22
|
+
"claude-skills",
|
|
23
|
+
"daily-report",
|
|
24
|
+
"weekly-report",
|
|
25
|
+
"article-to-html"
|
|
26
|
+
],
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=14.0.0"
|
|
30
|
+
},
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "https://github.com/windfallsheng/SkillForge.git"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-doc2spec
|
|
3
|
+
description: >
|
|
4
|
+
文档转需求规格 Skill(doc2spec)。仅在用户要求把 PRD / Word / Markdown 需求文档转成结构化需求文档
|
|
5
|
+
(需求点提炼、功能单元切分)时使用。Pandoc 负责 Word→Markdown 机械转换,AI 全程参与校对防错——
|
|
6
|
+
Pandoc 对复杂表格(合并单元格拆裂)、文本框(内容丢失)、图片(EMF/WMF 浏览器不可渲染)、修订痕(删除线残留)
|
|
7
|
+
有已知局限,机械产物一律只作底稿,AI 对照原文逐段校对、纠错补漏后再加工成需求规格。
|
|
8
|
+
图片自动提取与目录组织(默认 assets/images/,可配置 IMG_DIR;EMF/WMF 自动检测并跨系统转 PNG)。
|
|
9
|
+
输出目录默认源文档同目录下 {文档名}-spec/ 子目录,可配置 OUTPUT_DIR。
|
|
10
|
+
跨系统适配 macOS / Windows / Linux(Pandoc 安装、EMF 转换工具链探测、路径引用)。
|
|
11
|
+
支持 .docx(Pandoc 转换)/ .md(直接读取);.pdf 走 pdftotext 文本提取(无图)或提示先转 Word。
|
|
12
|
+
不处理一般性的文档内容讨论(如「帮我看看这份文档讲了什么」),只处理「文档 → 需求规格」的转换任务。
|
|
13
|
+
allowed-tools: ["Bash", "Read", "Write", "Edit"]
|
|
14
|
+
disable-model-invocation: false
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# 文档 → 需求规格(doc2spec)
|
|
18
|
+
|
|
19
|
+
将产品需求文档(PRD)转换为结构化的 Markdown 需求文档。分工原则:**Pandoc 负责机械转换,AI 负责校对防错与需求加工**——Pandoc 对复杂表格(合并单元格拆裂)、文本框(内容丢失)、图片(EMF 格式浏览器不可渲染)、修订痕(删除线残留)存在已知局限,机械产物一律只作底稿,AI 必须对照原文逐段校对、纠错补漏后再加工。
|
|
20
|
+
|
|
21
|
+
## 生成流程
|
|
22
|
+
|
|
23
|
+
1. **依赖检测**(每次必做)→ `pandoc --version`;未安装按「安装指引」输出并停止,不执行任何转换命令
|
|
24
|
+
2. **格式路由** → `.docx` 走 Pandoc 机械转换;`.md` 直接 Read 原文(跳过第 3 步转换,第 4 步校对照做);`.pdf` 走 `pdftotext` 文本提取(仅文本、无图无版式)或提示用户先转 Word
|
|
25
|
+
3. **Pandoc 机械转换** → `pandoc <输入.docx> -f docx -t gfm --extract-media=<IMG_DIR> -o 00-converted.md`(标题/表格/列表保留、图片提取到 IMG_DIR);另生成 `pandoc <输入.docx> -t plain -o 00-plain.txt` 纯文本底稿供完整性核对
|
|
26
|
+
4. **AI 逐段校对(防错防漏,必做)** → 读 `resources/checklist.md`:对照源文档逐段核对完整性/表格/列表/图片/乱码/修订痕/页眉页脚噪音,发现错误直接在 00-converted.md 上修正
|
|
27
|
+
5. **图片处理** → 读 `resources/images.md`:校验图片引用路径、检测 EMF/WMF 并跨系统转 PNG、处理缺失图片
|
|
28
|
+
6. **AI 结构加工与落盘** → 读 `resources/structure.md`:提炼需求点与验收标准、按功能单元切分章节、生成澄清清单,按目录规范落盘
|
|
29
|
+
7. **报告** → 产出路径、功能单元清单、校对修正记录、待澄清需求点
|
|
30
|
+
|
|
31
|
+
## ⚙️ 默认配置(用户可手动修改;临时口头要求永远优先)
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
OUTPUT_DIR: auto # 输出目录:auto = 源文档同目录下新建 {文档名}-spec/ 子目录;也可写死绝对路径
|
|
35
|
+
IMG_DIR: assets/images # 图片提取目录(相对输出目录);Pandoc --extract-media 提取到此处
|
|
36
|
+
EMF_POLICY: convert # EMF/WMF 图片策略:convert = 自动跨系统转 PNG(LibreOffice 兜底);keep = 保留原样并在澄清清单注明不可渲染
|
|
37
|
+
CONFIRM: never # 落盘前确认:never = 直接生成落盘;always = 先出加工预览确认后再落盘
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
> 临时口头要求(仅当次生效):说「输出到 XX 目录」→ 当次改 OUTPUT_DIR;说「图片放 XX」→ 当次改 IMG_DIR;说「先看看效果」→ 当次先出预览确认再落盘。
|
|
41
|
+
|
|
42
|
+
## 安装指引(仅当检测未安装时输出给用户)
|
|
43
|
+
|
|
44
|
+
Pandoc 跨系统安装(开源免费,官网 https://pandoc.org/installing.html):
|
|
45
|
+
|
|
46
|
+
1. **macOS**:`brew install pandoc`(未装 Homebrew 先装 brew,或从官网下载 .pkg 双击安装)
|
|
47
|
+
2. **Windows**:`winget install --id JohnMacFarlane.Pandoc`(无 winget 时从官网下载 .msi 双击安装,默认选项即可)
|
|
48
|
+
3. **Linux**:Debian/Ubuntu `sudo apt-get install pandoc`;Fedora `sudo dnf install pandoc`;Arch `sudo pacman -S pandoc`
|
|
49
|
+
4. **验证**:`pandoc --version` 输出版本号即成功;Windows 若提示找不到命令,关闭并重新打开终端刷新 PATH
|
|
50
|
+
|
|
51
|
+
EMF 图片转 PNG 依赖 LibreOffice(可选,仅当文档含 EMF 图):macOS `brew install --cask libreoffice`;Windows `winget install TheDocumentFoundation.LibreOffice`;Linux `sudo apt-get install libreoffice`。
|
|
52
|
+
|
|
53
|
+
安装完成后,请用户重新说一次需求,再走「生成流程」。
|
|
54
|
+
|
|
55
|
+
## 使用说明
|
|
56
|
+
|
|
57
|
+
用户仅询问使用方法(「spec-doc2spec 怎么用 / 使用说明 / 使用步骤 / 能干什么」)时不启动流程,读 `resources/usage-guide.md` 将其内容原样输出(首行标题改为「doc2spec 使用指南」),不执行任何转换命令。
|
|
58
|
+
|
|
59
|
+
## 规则速览
|
|
60
|
+
|
|
61
|
+
- 机械产物只作底稿:AI 校对(完整性/表格/图片/乱码/修订痕)与需求加工(需求点+验收标准、功能单元切分、澄清清单)缺一不可
|
|
62
|
+
- 图片一律进 IMG_DIR(默认 assets/images),EMF/WMF 必须先转 PNG(soffice headless → qlmanage → magick 按系统探测)
|
|
63
|
+
- 输出目录默认 {文档名}-spec/,00-converted.md 底稿保留溯源、加工稿另写不覆盖底稿
|
|
64
|
+
- 有疑点进 _clarify.md,不臆造内容;落盘后向用户报告产出路径/单元清单/校对记录/待澄清点
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# AI 校对清单(机械转换后必做)
|
|
2
|
+
|
|
3
|
+
Pandoc 机械产物只作底稿。AI 必须 Read 源文档与 00-converted.md / 00-plain.txt,逐段对照核对,发现问题直接在底稿上修正,修正后再进入需求加工。
|
|
4
|
+
|
|
5
|
+
## 完整性核对
|
|
6
|
+
|
|
7
|
+
- 章节结构:源文档每个一级/二级标题在转换结果中都有对应内容,无整章整段丢失
|
|
8
|
+
- 双通道比对:00-plain.txt 是纯文本全量输出——若某段内容 plain 版有而 gfm 版无,说明该段在格式转换中丢失(常见于 Word 文本框、SmartArt、批注框内文本),必须找回补进底稿
|
|
9
|
+
- 关键词抽查:源文档高频词/专有名词(功能名、接口名、字段名、编号)逐一 grep 底稿确认在位
|
|
10
|
+
|
|
11
|
+
## 错误排查(Pandoc 已知局限)
|
|
12
|
+
|
|
13
|
+
- **表格**:合并单元格拆裂、列错位、跨页表格断行错乱 → AI 重建为规范 markdown 表格(合并单元格用行内注释注明合并范围);表格被降级成纯文本段落时恢复为表格
|
|
14
|
+
- **列表**:多层嵌套层级丢失、有序列表编号中断 → AI 按原文恢复层级与编号
|
|
15
|
+
- **图片**:引用路径失效、图片丢失、.emf/.wmf 引用 → 见 images.md
|
|
16
|
+
- **特殊字符**:公式变形、箭头/全角符号乱码 → AI 修正;数学公式用 $...$ 行内 / $$...$$ 块级保留 LaTeX 原貌
|
|
17
|
+
- **修订痕**:Word 修订模式未接受时,转换可能残留删除线文本 → 提示用户「接受所有修订」后重转;无法重转时 AI 按「接受后状态」处理并注明
|
|
18
|
+
- **页眉页脚/页码**:转换为正文残留文本 → 剔除
|
|
19
|
+
- **超链接**:链接地址丢失 → AI 从源文档补回或注明
|
|
20
|
+
|
|
21
|
+
## 校对纪律
|
|
22
|
+
|
|
23
|
+
- 修正直接在 00-converted.md 上进行,修正后该文件即「已校对底稿」
|
|
24
|
+
- 修正与补漏逐条记录(供最终报告引用)
|
|
25
|
+
- 校对后仍存疑的内容进 _clarify.md 澄清清单,不臆造
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 图片处理
|
|
2
|
+
|
|
3
|
+
## 提取
|
|
4
|
+
|
|
5
|
+
- Pandoc 转换命令带 `--extract-media=<IMG_DIR>`(默认 assets/images,相对输出目录):文档内嵌图片自动提取到该目录,md 引用改写为相对路径
|
|
6
|
+
- 转换后 Read 00-converted.md 收集全部 `` 引用,逐一核对 IMG_DIR 下对应文件存在;引用路径以 00-converted.md 所在目录为基准解析
|
|
7
|
+
|
|
8
|
+
## EMF/WMF 转换(浏览器不可渲染格式)
|
|
9
|
+
|
|
10
|
+
- 检查 IMG_DIR 下是否出现 .emf/.wmf 文件(Word 图形对象默认 EMF,很常见):有则必须转 PNG,否则预览/截图/后续加工全部不可见
|
|
11
|
+
- 转换链(跨系统,按序探测,成功即止):
|
|
12
|
+
1. LibreOffice:`soffice --headless --convert-to png --outdir <IMG_DIR> <file.emf>`(三系统通用,首选)
|
|
13
|
+
2. macOS 备选:`qlmanage -t -s 1600 -o <IMG_DIR> <file.emf>`(部分 EMF 不支持)
|
|
14
|
+
3. Windows 备选:ImageMagick `magick <file.emf> <file.png>`
|
|
15
|
+
- 转换成功后把 md 引用 .emf → .png 全部替换
|
|
16
|
+
- 全部工具缺失时:按 EMF_POLICY=keep 保留原文件,在 _clarify.md 注明「N 张 EMF 图无法渲染,建议在 Word 中另存为 PNG 后重新转换」
|
|
17
|
+
|
|
18
|
+
## 缺失与异常
|
|
19
|
+
|
|
20
|
+
- 引用存在但文件缺失:核对 --extract-media 是否执行、路径是否被移动;无法恢复的在 _clarify.md 记录「图片缺失:<原位置>」
|
|
21
|
+
- alt 文本:Pandoc 保留 Word 图片 alt 文本,AI 校对时确认关键图片 alt 与原文图注一致;无 alt 的关键图片按原文图注补写
|
|
22
|
+
- 图片命名:默认沿用 Pandoc 提取名(image1.png 等);重名冲突时 AI 重命名并在 md 引用同步更新
|
|
23
|
+
|
|
24
|
+
## 目录组织
|
|
25
|
+
|
|
26
|
+
- 默认 IMG_DIR=assets/images(相对输出目录,可配置改绝对路径)
|
|
27
|
+
- 严禁图片散落在输出目录根:一律进 IMG_DIR
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 目录组织与落盘
|
|
2
|
+
|
|
3
|
+
## 默认输出结构
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
{源目录}/{文档名}-spec/ ← OUTPUT_DIR=auto 默认;可配置绝对路径
|
|
7
|
+
├── README.md ← 索引:源文档、转换时间、功能单元清单、校对记录摘要
|
|
8
|
+
├── 00-converted.md ← Pandoc 机械底稿(AI 已校对修正版,保留溯源)
|
|
9
|
+
├── 00-plain.txt ← 纯文本底稿(完整性核对用,保留溯源)
|
|
10
|
+
├── 01-需求规格.md ← AI 加工后的主规格:需求点 + 验收标准(功能单元 ≤3 时单文件即可)
|
|
11
|
+
├── requirements/ ← 功能单元切片(单元 >3 时启用)
|
|
12
|
+
│ ├── REQ-01-{单元名}.md
|
|
13
|
+
│ └── ...
|
|
14
|
+
├── assets/images/ ← 图片目录(IMG_DIR 可配置)
|
|
15
|
+
└── _clarify.md ← 待澄清清单(有疑点才生成)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## 加工规则
|
|
19
|
+
|
|
20
|
+
- 需求点提炼:每条「需求点 - 验收标准」结对,保留原文关键表述,不臆造内容
|
|
21
|
+
- 功能单元切分:按业务功能边界切分,单元名用中文短名(如「用户登录」);单元 >3 时拆 requirements/ 目录,否则合并在 01-需求规格.md 内分章节
|
|
22
|
+
- 澄清清单:校对中发现的歧义/缺失/矛盾 → _clarify.md 逐条编号记录(问题 + 原文出处 + AI 建议)
|
|
23
|
+
- 溯源:每个功能单元注明来源章节;00-converted.md 保留不做删改,加工后的规格另写文件、不覆盖底稿
|
|
24
|
+
|
|
25
|
+
## 目录复用
|
|
26
|
+
|
|
27
|
+
- 输出目录已存在时:复用并覆盖本清单内同名文件(00-converted.md/01-需求规格.md 等),其余文件保留;不清空目录
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# doc2spec 使用指南
|
|
2
|
+
|
|
3
|
+
## 能干什么
|
|
4
|
+
|
|
5
|
+
把 PRD / Word / Markdown 需求文档转成结构化 Markdown 需求规格:Pandoc 机械转换 + AI 逐段校对(纠错补漏)+ 需求点提炼与功能单元切分。图片自动提取到 assets/images/(EMF 等不可渲染格式自动转 PNG);输出默认「源文档同目录/{文档名}-spec/」子目录,输出与图片目录均可配置。
|
|
6
|
+
|
|
7
|
+
## 使用方式
|
|
8
|
+
|
|
9
|
+
1. 直接说「把这份 PRD 转成需求文档」「Word 转需求切片」并给出文件路径
|
|
10
|
+
2. 未装 Pandoc 时按引导安装(macOS brew / Windows winget / Linux apt-get)
|
|
11
|
+
3. Pandoc 完成 Word→Markdown 机械转换后,AI 对照原文逐段校对(完整性/表格/图片/乱码/修订痕),再提炼需求点、按功能单元切分
|
|
12
|
+
4. 产出结构化需求文档到指定目录
|
|
13
|
+
|
|
14
|
+
## 支持格式
|
|
15
|
+
|
|
16
|
+
- .docx(Pandoc 转换,图片自动提取)
|
|
17
|
+
- .md(直接读取)
|
|
18
|
+
- .pdf(pdftotext 文本提取,仅文本无图;需要图片建议先转 Word)
|
|
19
|
+
|
|
20
|
+
## 常用说法
|
|
21
|
+
|
|
22
|
+
- 「输出到桌面」→ 临时改输出目录
|
|
23
|
+
- 「图片放 figures/」→ 临时改图片目录
|
|
24
|
+
- 「先看看效果」→ 先出预览确认再落盘
|
|
25
|
+
|
|
26
|
+
## 产出
|
|
27
|
+
|
|
28
|
+
{文档名}-spec/ 目录:README 索引 + 需求规格(含功能单元切片)+ 图片目录 + 澄清清单(有疑点时)。
|
|
29
|
+
|
|
30
|
+
## 触发词
|
|
31
|
+
|
|
32
|
+
把 PRD 转成需求文档 / Word 转需求切片 / 文档转规格 / /doc2spec
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-spec2doc
|
|
3
|
+
description: >
|
|
4
|
+
规格转交付文档 Skill(spec2doc)。仅在用户要求把 Markdown 规格 / 技术文档导出为 Word / PDF 交付文档时使用。
|
|
5
|
+
Pandoc 负责机械转换,AI 负责转换前排版整理与转换后回验防错(Pandoc 对复杂表格、图片路径、中文字体有局限,
|
|
6
|
+
回验发现问题修正源稿重新转换直到通过,机械产物不直接交付)。主路径 Markdown → Word(支持 --reference-doc
|
|
7
|
+
模板:默认依次探测源目录 template.docx / reference.docx,可配置 TEMPLATE_DOCX)。
|
|
8
|
+
Markdown → PDF 双路径:xelatex(需 LaTeX 引擎与 CJK 中文字体)或 Chrome headless 打印(免 LaTeX、跨系统兜底),
|
|
9
|
+
引擎可配置 PDF_ENGINE。输出目录默认与源文档同目录,可配置 OUTPUT_DIR。
|
|
10
|
+
跨系统适配 macOS / Windows / Linux(Pandoc/LaTeX 安装、中文字体探测、Chrome 路径探测)。
|
|
11
|
+
不处理一般性的文档格式转换(如「把这个 txt 转成 Word」),只处理「规格 → 交付文档」的转换任务。
|
|
12
|
+
allowed-tools: ["Bash", "Read", "Write", "Edit"]
|
|
13
|
+
disable-model-invocation: false
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# 规格 → 交付文档(spec2doc)
|
|
17
|
+
|
|
18
|
+
将 Markdown 规格 / 技术文档转换为 Word / PDF 交付文档。分工原则:**Pandoc 负责机械转换,AI 负责排版整理与回验防错**——AI 转换前整理标题层级/表格/图片路径,转换后核对产出文档内容完整与格式正确,发现问题修正源稿重新转换,直到回验通过(机械产物不直接交付)。
|
|
19
|
+
|
|
20
|
+
## 生成流程
|
|
21
|
+
|
|
22
|
+
1. **依赖检测**(每次必做)→ `pandoc --version`;未安装按「安装指引」输出并停止。目标为 PDF 时另探测引擎:`xelatex --version`(LaTeX 路径)→ Chrome 路径(打印路径),细节读 `resources/pdf-path.md`
|
|
23
|
+
2. **AI 排版整理** → 统一标题层级、规整表格(超宽表拆表或改列表)、检查图片引用路径、确定元信息(标题/作者)
|
|
24
|
+
3. **Pandoc 输出** → Word:`pandoc <输入.md> -f gfm -t docx -o <输出.docx> [--reference-doc=<模板>] [--toc --toc-depth=3]`(模板探测与图片路径读 `resources/images-and-template.md`);PDF:双路径命令读 `resources/pdf-path.md`
|
|
25
|
+
4. **AI 回验(防错防漏,必做)** → 读 `resources/checklist.md`:反向转换比对内容完整性、图片嵌入核对、标题层级、中文显示、乱码排查
|
|
26
|
+
5. **修正重转** → 发现问题修正源稿重新转换,再次回验;重转不超过 3 轮,仍不通过如实报告「哪些项无法修复 + 原因」,不交付带错文档
|
|
27
|
+
6. **报告** → 输出路径与格式、回验结论、PDF 引擎与兜底说明
|
|
28
|
+
|
|
29
|
+
## ⚙️ 默认配置(用户可手动修改;临时口头要求永远优先)
|
|
30
|
+
|
|
31
|
+
```yaml
|
|
32
|
+
OUTPUT_DIR: auto # 输出目录:auto = 与源 md 同目录;可写死绝对路径
|
|
33
|
+
TEMPLATE_DOCX: auto # Word 模板:auto = 依次探测 <源目录>/template.docx → reference.docx → 无则 Pandoc 默认样式;可指定模板路径
|
|
34
|
+
TOC: true # Word/PDF 是否生成目录(--toc --toc-depth=3)
|
|
35
|
+
PDF_ENGINE: auto # PDF 引擎:auto = 探测 xelatex(有则 LaTeX 路径)→ 无则 Chrome 打印路径
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
> 临时口头要求(仅当次生效):说「输出到 XX」→ 当次改 OUTPUT_DIR;说「用这个模板」+ 路径 → 当次换模板;说「不要目录」→ 当次 TOC=false;说「必须用 LaTeX 出 PDF」→ 当次 PDF_ENGINE=xelatex(无引擎则引导安装)。
|
|
39
|
+
|
|
40
|
+
## 安装指引(仅当检测未安装时输出给用户)
|
|
41
|
+
|
|
42
|
+
Pandoc 跨系统安装(开源免费,官网 https://pandoc.org/installing.html):
|
|
43
|
+
|
|
44
|
+
1. **macOS**:`brew install pandoc`(未装 Homebrew 先装 brew,或从官网下载 .pkg 双击安装)
|
|
45
|
+
2. **Windows**:`winget install --id JohnMacFarlane.Pandoc`(无 winget 时从官网下载 .msi 双击安装,默认选项即可)
|
|
46
|
+
3. **Linux**:Debian/Ubuntu `sudo apt-get install pandoc`;Fedora `sudo dnf install pandoc`;Arch `sudo pacman -S pandoc`
|
|
47
|
+
4. **验证**:`pandoc --version` 输出版本号即成功;Windows 若提示找不到命令,关闭并重新打开终端刷新 PATH
|
|
48
|
+
|
|
49
|
+
PDF 的 LaTeX 引擎(仅当要求 LaTeX 出 PDF 时):macOS `brew install --cask basictex`(装完 `sudo tlmgr install ctex`);Windows `winget install MiKTeX.MiKTeX`;Linux Debian/Ubuntu `sudo apt-get install texlive-xetex texlive-lang-chinese`。免装 LaTeX 可走 Chrome 打印路径(见 resources/pdf-path.md)。
|
|
50
|
+
|
|
51
|
+
安装完成后,请用户重新说一次需求,再走「生成流程」。
|
|
52
|
+
|
|
53
|
+
## 使用说明
|
|
54
|
+
|
|
55
|
+
用户仅询问使用方法(「spec-spec2doc 怎么用 / 使用说明 / 使用步骤 / 能干什么」)时不启动流程,读 `resources/usage-guide.md` 将其内容原样输出(首行标题改为「spec2doc 使用指南」),不执行任何转换命令。
|
|
56
|
+
|
|
57
|
+
## 规则速览
|
|
58
|
+
|
|
59
|
+
- 机械产物不直接交付:AI 排版整理(转换前)与回验防错(转换后)缺一不可,发现问题修正源稿重转直到通过
|
|
60
|
+
- Word 是主路径(Pandoc 原生);PDF 双路径 xelatex / Chrome 打印,引擎缺失先出 Word 并提示 Word 另存 PDF
|
|
61
|
+
- 图片相对路径以工作目录为基准:转换前 cd 到源 md 目录或 --resource-path 声明;EMF 源图先转 PNG
|
|
62
|
+
- 模板探测链 template.docx → reference.docx → Pandoc 默认样式;目录生成 TOC 默认开启
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# AI 回验清单(转换后必做)
|
|
2
|
+
|
|
3
|
+
机械产物不直接交付。AI 转换后必须回验,发现问题修正源稿重新转换,直到通过。
|
|
4
|
+
|
|
5
|
+
## 回验方法
|
|
6
|
+
|
|
7
|
+
- Word 内容比对:`pandoc <输出.docx> -t gfm` 反向转回 md,与源 md 逐段比对(章节/段落/表格/列表是否完整无遗漏)
|
|
8
|
+
- 图片嵌入核对:`unzip -l <输出.docx> | grep media` 确认图片全部嵌入;数量与源 md 引用数一致
|
|
9
|
+
- 文件可开性:docx 大小异常(接近 0KB 或数倍膨胀)→ 转换失败信号,重转排查
|
|
10
|
+
- PDF 回验:`pdftotext <输出.pdf> - | wc -l` 文本行数合理(非 0 非异常少);必要时截图查看版式
|
|
11
|
+
|
|
12
|
+
## 检查项
|
|
13
|
+
|
|
14
|
+
- 内容完整:无章节/段落/表格遗漏(反向转换比对)
|
|
15
|
+
- 标题层级:各级标题样式正确,目录(TOC)条目与正文一致
|
|
16
|
+
- 表格:不超宽溢出、无拆裂(超宽表 AI 提前拆分为多表或改列表呈现)
|
|
17
|
+
- 图片:全部嵌入且显示正常(EMF/WMF 源图同样先转 PNG 再转 Word,转换链同 doc2spec 的 images.md:soffice headless → qlmanage → magick)
|
|
18
|
+
- 中文显示:PDF 中文不豆腐块(LaTeX 路径需 CJK 字体,见 pdf-path.md)
|
|
19
|
+
- 乱码/格式错乱:特殊字符、公式、代码块变形 → 修正源稿重转
|
|
20
|
+
|
|
21
|
+
## 重转纪律
|
|
22
|
+
|
|
23
|
+
- 每轮回验记录问题清单;修正源稿 → 重新转换 → 再次回验
|
|
24
|
+
- 重转不超过 3 轮;仍不通过时如实报告用户「哪些项无法修复 + 原因」,不交付带错文档
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# 图片与模板
|
|
2
|
+
|
|
3
|
+
## 图片路径
|
|
4
|
+
|
|
5
|
+
- Pandoc 解析 md 图片相对路径以**当前工作目录**为基准:转换前 cd 到源 md 所在目录,或用 `--resource-path=.:<额外图片目录>` 声明搜索路径
|
|
6
|
+
- 图片缺失时 Pandoc 报「[WARNING] Could not fetch resource」→ AI 核对路径后重转
|
|
7
|
+
- EMF/WMF 源图浏览器/Word 均不可靠:先跨系统转 PNG 再转 Word(转换链同 doc2spec 的 images.md:LibreOffice `soffice --headless --convert-to png` → macOS `qlmanage -t` → Windows `magick`)
|
|
8
|
+
- 转换后回验图片全部嵌入(`unzip -l <输出.docx> | grep media`)
|
|
9
|
+
|
|
10
|
+
## Word 模板(--reference-doc)
|
|
11
|
+
|
|
12
|
+
- 探测链(TEMPLATE_DOCX=auto):<源目录>/template.docx → <源目录>/reference.docx → 无模板用 Pandoc 默认样式
|
|
13
|
+
- 生成默认模板供定制:`pandoc -o <template.docx> --print-default-data-file reference.docx`(用户可在 Word 中改样式后保存为 template.docx 放源目录,永久生效)
|
|
14
|
+
- 指定模板转换:`pandoc <输入.md> -f gfm -t docx -o <输出.docx> --reference-doc=<template.docx> [--toc --toc-depth=3]`
|