diff --git a/identity/device-auth.json b/identity/device-auth.json index f325ed5..c3e2b6f 100644 --- a/identity/device-auth.json +++ b/identity/device-auth.json @@ -12,7 +12,7 @@ "operator.read", "operator.write" ], - "updatedAtMs": 1785463718356 + "updatedAtMs": 1785497536078 } } } diff --git a/skill-workshop/proposals.json b/skill-workshop/proposals.json index 287bbfd..cf28fca 100644 --- a/skill-workshop/proposals.json +++ b/skill-workshop/proposals.json @@ -1 +1 @@ -{"schema":"openclaw.skill-workshop.proposals-manifest.v1","updatedAt":"2026-07-31T02:09:58.941Z","proposals":[{"id":"weekly-report-dingtalk-draft-20260731-610f0943bc","kind":"create","status":"applied","title":"Create weekly-report-dingtalk-draft","description":"生成项目周报草稿存入钉邮草稿箱(仅草稿禁发)。固化杨轩周报标准格式/签名/收件抄送。","skillName":"weekly-report-dingtalk-draft","skillKey":"weekly-report-dingtalk-draft","createdAt":"2026-07-31T02:07:55.496Z","updatedAt":"2026-07-31T02:09:58.896Z","scanState":"clean"},{"id":"dianping-review-20260611-d402abec10","kind":"create","status":"applied","title":"Create dianping-review","description":"通过大众点评搜索查询餐厅、老店、美食推荐和评论","skillName":"dianping-review","skillKey":"dianping-review","createdAt":"2026-06-11T23:50:15.731Z","updatedAt":"2026-07-09T09:56:20.865Z","scanState":"clean"},{"id":"calibre-cleaner-20260624-0fc374efd7","kind":"update","status":"applied","title":"Update calibre-cleaner","description":"清洗 Calibre 书库:修复损坏书名/提取作者/检测编码损坏、小文件的批量删除","skillName":"calibre-cleaner","skillKey":"calibre-cleaner","createdAt":"2026-06-24T03:23:27.062Z","updatedAt":"2026-07-09T09:56:20.404Z","scanState":"clean"},{"id":"jellyfin-nfo-builder-20260701-6434352e0d","kind":"create","status":"applied","title":"Create jellyfin-nfo-builder","description":"为剧集整理统一文件名、生成缺失的 Jellyfin .nfo 剧集元数据","skillName":"jellyfin-nfo-builder","skillKey":"jellyfin-nfo-builder","createdAt":"2026-07-01T23:52:24.406Z","updatedAt":"2026-07-09T09:56:19.928Z","scanState":"clean"},{"id":"jav-media-sorter-20260707-b1f90c8a4d","kind":"create","status":"applied","title":"Create jav-media-sorter","description":"JAV 视频整理:组装文件、按演员分组、刮削 nfo 元数据与封面图","skillName":"jav-media-sorter","skillKey":"jav-media-sorter","createdAt":"2026-07-07T12:14:43.074Z","updatedAt":"2026-07-09T09:56:18.413Z","scanState":"clean"},{"id":"f-download-sorter-20260706-902cc0d5aa","kind":"create","status":"applied","title":"Create f-download-sorter","description":"整理 /mnt/f 下下载的视频文件:扫描→清垃圾→按规则归档到7个大类目录","skillName":"f-download-sorter","skillKey":"f-download-sorter","createdAt":"2026-07-06T09:03:54.941Z","updatedAt":"2026-07-06T09:04:18.513Z","scanState":"clean"},{"id":"weekly-report-g5-20260626-7595273f1d","kind":"create","status":"applied","title":"Create weekly-report-g5","description":"维云智造G5周报生成:整理每日工作→多段邮件(纯文本+HTML含签名图)→存入钉邮草稿箱","skillName":"weekly-report-g5","skillKey":"weekly-report-g5","createdAt":"2026-06-26T00:46:22.478Z","updatedAt":"2026-06-26T00:46:35.812Z","scanState":"clean"},{"id":"calibre-cleaner-20260624-cdbeb219a3","kind":"update","status":"applied","title":"Update calibre-cleaner","description":"清洗 Calibre 书库:修复损坏书名/提取作者/检测编码损坏、小文件的批量删除","skillName":"calibre-cleaner","skillKey":"calibre-cleaner","createdAt":"2026-06-24T03:03:28.166Z","updatedAt":"2026-06-24T03:03:30.915Z","scanState":"clean"},{"id":"calibre-cleaner-20260624-a441798af9","kind":"create","status":"applied","title":"Create calibre-cleaner","description":"清洗 Calibre 书库:修复损坏书名/提取作者/检测编码损坏、小文件的批量删除","skillName":"calibre-cleaner","skillKey":"calibre-cleaner","createdAt":"2026-06-24T02:29:02.278Z","updatedAt":"2026-06-24T02:29:27.227Z","scanState":"clean"},{"id":"calibre-title-cleaner-20260624-3760b64e8b","kind":"create","status":"applied","title":"Create calibre-title-cleaner","description":"清洗 Calibre 书库中损坏的 txt 文档书名(HTML标签/长文本/乱码/路径超限修复)","skillName":"calibre-title-cleaner","skillKey":"calibre-title-cleaner","createdAt":"2026-06-24T01:10:56.296Z","updatedAt":"2026-06-24T01:13:39.670Z","scanState":"clean"}]} +{"schema":"openclaw.skill-workshop.proposals-manifest.v1","updatedAt":"2026-07-31T11:33:42.962Z","proposals":[{"id":"birthday-reminder-20260731-b22c95216e","kind":"create","status":"applied","title":"Create birthday-reminder","description":"\"管理家人/朋友生日提醒。农历或阳历生日,每年换算公历,生日前7天、前3天、当天通过钉钉提醒杨轩。\"","skillName":"birthday-reminder","skillKey":"birthday-reminder","createdAt":"2026-07-31T11:29:54.202Z","updatedAt":"2026-07-31T11:33:42.919Z","scanState":"clean"},{"id":"weekly-report-dingtalk-draft-20260731-610f0943bc","kind":"create","status":"applied","title":"Create weekly-report-dingtalk-draft","description":"生成项目周报草稿存入钉邮草稿箱(仅草稿禁发)。固化杨轩周报标准格式/签名/收件抄送。","skillName":"weekly-report-dingtalk-draft","skillKey":"weekly-report-dingtalk-draft","createdAt":"2026-07-31T02:07:55.496Z","updatedAt":"2026-07-31T02:09:58.896Z","scanState":"clean"},{"id":"dianping-review-20260611-d402abec10","kind":"create","status":"applied","title":"Create dianping-review","description":"通过大众点评搜索查询餐厅、老店、美食推荐和评论","skillName":"dianping-review","skillKey":"dianping-review","createdAt":"2026-06-11T23:50:15.731Z","updatedAt":"2026-07-09T09:56:20.865Z","scanState":"clean"},{"id":"calibre-cleaner-20260624-0fc374efd7","kind":"update","status":"applied","title":"Update calibre-cleaner","description":"清洗 Calibre 书库:修复损坏书名/提取作者/检测编码损坏、小文件的批量删除","skillName":"calibre-cleaner","skillKey":"calibre-cleaner","createdAt":"2026-06-24T03:23:27.062Z","updatedAt":"2026-07-09T09:56:20.404Z","scanState":"clean"},{"id":"jellyfin-nfo-builder-20260701-6434352e0d","kind":"create","status":"applied","title":"Create jellyfin-nfo-builder","description":"为剧集整理统一文件名、生成缺失的 Jellyfin .nfo 剧集元数据","skillName":"jellyfin-nfo-builder","skillKey":"jellyfin-nfo-builder","createdAt":"2026-07-01T23:52:24.406Z","updatedAt":"2026-07-09T09:56:19.928Z","scanState":"clean"},{"id":"jav-media-sorter-20260707-b1f90c8a4d","kind":"create","status":"applied","title":"Create jav-media-sorter","description":"JAV 视频整理:组装文件、按演员分组、刮削 nfo 元数据与封面图","skillName":"jav-media-sorter","skillKey":"jav-media-sorter","createdAt":"2026-07-07T12:14:43.074Z","updatedAt":"2026-07-09T09:56:18.413Z","scanState":"clean"},{"id":"f-download-sorter-20260706-902cc0d5aa","kind":"create","status":"applied","title":"Create f-download-sorter","description":"整理 /mnt/f 下下载的视频文件:扫描→清垃圾→按规则归档到7个大类目录","skillName":"f-download-sorter","skillKey":"f-download-sorter","createdAt":"2026-07-06T09:03:54.941Z","updatedAt":"2026-07-06T09:04:18.513Z","scanState":"clean"},{"id":"weekly-report-g5-20260626-7595273f1d","kind":"create","status":"applied","title":"Create weekly-report-g5","description":"维云智造G5周报生成:整理每日工作→多段邮件(纯文本+HTML含签名图)→存入钉邮草稿箱","skillName":"weekly-report-g5","skillKey":"weekly-report-g5","createdAt":"2026-06-26T00:46:22.478Z","updatedAt":"2026-06-26T00:46:35.812Z","scanState":"clean"},{"id":"calibre-cleaner-20260624-cdbeb219a3","kind":"update","status":"applied","title":"Update calibre-cleaner","description":"清洗 Calibre 书库:修复损坏书名/提取作者/检测编码损坏、小文件的批量删除","skillName":"calibre-cleaner","skillKey":"calibre-cleaner","createdAt":"2026-06-24T03:03:28.166Z","updatedAt":"2026-06-24T03:03:30.915Z","scanState":"clean"},{"id":"calibre-cleaner-20260624-a441798af9","kind":"create","status":"applied","title":"Create calibre-cleaner","description":"清洗 Calibre 书库:修复损坏书名/提取作者/检测编码损坏、小文件的批量删除","skillName":"calibre-cleaner","skillKey":"calibre-cleaner","createdAt":"2026-06-24T02:29:02.278Z","updatedAt":"2026-06-24T02:29:27.227Z","scanState":"clean"},{"id":"calibre-title-cleaner-20260624-3760b64e8b","kind":"create","status":"applied","title":"Create calibre-title-cleaner","description":"清洗 Calibre 书库中损坏的 txt 文档书名(HTML标签/长文本/乱码/路径超限修复)","skillName":"calibre-title-cleaner","skillKey":"calibre-title-cleaner","createdAt":"2026-06-24T01:10:56.296Z","updatedAt":"2026-06-24T01:13:39.670Z","scanState":"clean"}]} diff --git a/skill-workshop/proposals/birthday-reminder-20260731-b22c95216e/PROPOSAL.md b/skill-workshop/proposals/birthday-reminder-20260731-b22c95216e/PROPOSAL.md new file mode 100644 index 0000000..3c3cb54 --- /dev/null +++ b/skill-workshop/proposals/birthday-reminder-20260731-b22c95216e/PROPOSAL.md @@ -0,0 +1,91 @@ +--- +name: "birthday-reminder" +description: "\"管理家人/朋友生日提醒。农历或阳历生日,每年换算公历,生日前7天、前3天、当天通过钉钉提醒杨轩。\"" +status: proposal +version: "v1" +date: "2026-07-31T11:29:54.202Z" +--- + +# 生日提醒 skill + +统一管理杨轩的家人/朋友生日提醒。支持农历或阳历生日,每年换算公历日期,在生日**前7天、前3天、当天**通过钉钉当前对话提醒杨轩。 + +## 触发场景 + +- 杨轩提供新的生日信息(农历或阳历) +- 需要查询/修改/删除某个人的生日提醒 +- 需要为下一年设置生日提醒 + +## 成员生日库(记录于 MEMORY.md) + +| 人物 | 生日类型 | 出生日期 | 说明 | +|------|---------|---------|------| +| 汪礼平 | 农历 | 1968年六月二十日 | 三次提醒 | +| 杨安顺 | 农历 | 1968年八月十八日 | 三次提醒 | +| 王芳 | 农历 | 1993年十月初七日 | 三次提醒 | +| 杨锦书 | 阳历 | 2021年11月10日 | 卷儿,阳历固定 | + +## 换算规则 + +- **农历生日**:每年农历日期对应的公历日期都不同,需要用 lunar_python 逐年换算 +- **阳历生日**:日期固定,不换算(如杨锦书每年都是11月10日) + +农历换算命令(需要 lunar_python 已安装): + +```bash +python3 -c " +from lunar_python import Lunar +for year in range(2026, 2031): + lunar = Lunar.fromYmd(year, 8, 18) # 月, 日(农历) + solar = lunar.getSolar() + print(f'{year}年农历8月18日 = 公历 {solar.getYear()}-{solar.getMonth():02d}-{solar.getDay():02d}') +" +``` + +## 提醒时间点计算 + +每年按公历生日计算三个提醒日,**当天 0 点(UTC)触发**: + +- 前7天 = 生日 - 7天 +- 前3天 = 生日 - 3天 +- 当天 = 生日当天 + +## 创建 cron 任务(核心流程) + +每个生日创建**3个一次性 cron 任务**(前7天/前3天/当天),使用 `isolated` session + announce 投递到钉钉。 + +关键投递参数(**必须显式设置,否则不会推送到钉钉**): +- `--session isolated` +- `--announce --channel dingtalk-connector --to 0464031658857345` +- `--wake now --delete-after-run` + +命令模板: + +```bash +cd /home/yangxuan/.openclaw && openclaw cron create "" \ + --name "<姓名>生日提前7天" \ + --message "🎂 提醒:<姓名>生日快到了!7天后
就是生日。" \ + --session isolated --announce --channel dingtalk-connector \ + --to "0464031658857345" --wake now --delete-after-run +``` + +注意:`--at` 时间不带时区按 UTC 处理。北京时间 = UTC+8。 + +## 步骤 + +1. 记录/更新生日信息到 MEMORY.md 的"🎂 生日提醒"区域 +2. 若农历生日,用 lunar_python 换算当年及下一年的公历日期;若阳历则固定 +3. 计算三个提醒日(前7天/前3天/当天) +4. 为每年分别创建3个一次性 cron 任务(isolated + announce 钉钉) +5. 验证:`openclaw cron list` 确认任务已创建且 delivery 为 dingtalk-connector +6. 更新 MEMORY.md 记录已完成设置的年份 + +## 验证 + +创建后必须确认任务 delivery 已配置为 `dingtalk-connector:0464031658857345`,否则提醒不会推送到钉钉(main session 的 system-event 默认不投递)。 + +## 注意事项 + +- **当年提醒时效**:若当年提醒日已过,从下一年开始设置 +- 任务为一次性,运行后自动删除;下一年需重新换算农历并新建 +- 农历生日每年代入 lunar_python 换算公历日期(lunar_python 已通过 `pip install --break-system-packages --user lunar_python` 安装) diff --git a/skill-workshop/proposals/birthday-reminder-20260731-b22c95216e/proposal.json b/skill-workshop/proposals/birthday-reminder-20260731-b22c95216e/proposal.json new file mode 100644 index 0000000..082af33 --- /dev/null +++ b/skill-workshop/proposals/birthday-reminder-20260731-b22c95216e/proposal.json @@ -0,0 +1 @@ +{"schema":"openclaw.skill-workshop.proposal.v1","id":"birthday-reminder-20260731-b22c95216e","kind":"create","status":"applied","title":"Create birthday-reminder","description":"\"管理家人/朋友生日提醒。农历或阳历生日,每年换算公历,生日前7天、前3天、当天通过钉钉提醒杨轩。\"","createdAt":"2026-07-31T11:29:54.202Z","updatedAt":"2026-07-31T11:33:42.919Z","createdBy":"skill-workshop","origin":{"agentId":"main","sessionKey":"agent:main:dingtalk-connector:direct:0464031658857345","runId":"4a92a4e4-442d-4327-90d0-440505518eb3","messageId":"msg003iQyZFijTOfEB9HpgwIg=="},"proposedVersion":"v1","draftFile":"PROPOSAL.md","draftHash":"68a3da0aa70ccd19d727fb8c3edc9bb50fd0178465c0c9ae927d9c7191fc98c2","target":{"skillName":"birthday-reminder","skillKey":"birthday-reminder","skillDir":"/home/yangxuan/.openclaw/workspace/skills/birthday-reminder","skillFile":"/home/yangxuan/.openclaw/workspace/skills/birthday-reminder/SKILL.md","source":"openclaw-workspace"},"scan":{"state":"clean","scannedAt":"2026-07-31T11:33:42.888Z","critical":0,"warn":0,"info":0,"findings":[]},"goal":"统一管理杨轩家庭成员/朋友的生日提醒:记录生日信息(农历/阳历)、每年换算公历生日、创建三次提醒 cron 任务、维护长期记忆。实现一套可复用的标准化流程。","appliedAt":"2026-07-31T11:33:42.919Z"} diff --git a/skill-workshop/proposals/birthday-reminder-20260731-b22c95216e/rollback.json b/skill-workshop/proposals/birthday-reminder-20260731-b22c95216e/rollback.json new file mode 100644 index 0000000..a6a2283 --- /dev/null +++ b/skill-workshop/proposals/birthday-reminder-20260731-b22c95216e/rollback.json @@ -0,0 +1 @@ +{"schema":"openclaw.skill-workshop.rollback.v1","proposalId":"birthday-reminder-20260731-b22c95216e","writtenAt":"2026-07-31T11:33:42.892Z","targetSkillFile":"/home/yangxuan/.openclaw/workspace/skills/birthday-reminder/SKILL.md","action":"create"} diff --git a/workspace-attestations/675ebd4bbbf5213802ade350a2fff111afbca7ad11b9646d0add12e68fed6b95.attested b/workspace-attestations/675ebd4bbbf5213802ade350a2fff111afbca7ad11b9646d0add12e68fed6b95.attested index 6b4f44b..d26e50b 100644 --- a/workspace-attestations/675ebd4bbbf5213802ade350a2fff111afbca7ad11b9646d0add12e68fed6b95.attested +++ b/workspace-attestations/675ebd4bbbf5213802ade350a2fff111afbca7ad11b9646d0add12e68fed6b95.attested @@ -1,2 +1,2 @@ openclaw-workspace-attestation:v1 -2026-07-31T02:32:00.963Z +2026-07-31T09:40:00.122Z