diff --git a/identity/device-auth.json b/identity/device-auth.json index b5134c3..f325ed5 100644 --- a/identity/device-auth.json +++ b/identity/device-auth.json @@ -12,7 +12,7 @@ "operator.read", "operator.write" ], - "updatedAtMs": 1785303158597 + "updatedAtMs": 1785463718356 } } } diff --git a/media/inbound/bfff3514-ddd5-4038-ad0a-6c32b9f094e5.jpg b/media/inbound/bfff3514-ddd5-4038-ad0a-6c32b9f094e5.jpg new file mode 100644 index 0000000..5765a3d Binary files /dev/null and b/media/inbound/bfff3514-ddd5-4038-ad0a-6c32b9f094e5.jpg differ diff --git a/openclaw-weixin/accounts/e48ace9814f0-im-bot.context-tokens.json b/openclaw-weixin/accounts/e48ace9814f0-im-bot.context-tokens.json index 1f3c3d7..500f417 100644 --- a/openclaw-weixin/accounts/e48ace9814f0-im-bot.context-tokens.json +++ b/openclaw-weixin/accounts/e48ace9814f0-im-bot.context-tokens.json @@ -1 +1 @@ -{"o9cq80w6ZnnPGItW-GGACkwd69bA@im.wechat":"AARzJWAFAAABAAAAAABrucQ947SJn/rA4+JraiAAAAB+9905Q6UiugPBawU3n3cyzQX+LkN8ofRzsCZYN0mt7kpEVcpGz1VUkXXYeO3NgQyxoU6ZQMndVwo8azUW2lJJYn/REb5T"} \ No newline at end of file +{"o9cq80w6ZnnPGItW-GGACkwd69bA@im.wechat":"AARzJWAFAAABAAAAAACxHKQt88WQpuBKogNsaiAAAAB+9905Q6UiugPBawU3n3cyzQX+LkN8ofRzsCZYN0mt7r/lcogHg+bmq8Zrtu2mu8rXpBpADcV9i//GrNQS7iPk/h1pzA1J"} \ No newline at end of file diff --git a/openclaw-weixin/accounts/e48ace9814f0-im-bot.sync.json b/openclaw-weixin/accounts/e48ace9814f0-im-bot.sync.json index 50b64a3..e451387 100644 --- a/openclaw-weixin/accounts/e48ace9814f0-im-bot.sync.json +++ b/openclaw-weixin/accounts/e48ace9814f0-im-bot.sync.json @@ -1 +1 @@ -{"get_updates_buf":"ChAIKRDsk7mr+zMYmp6chfYzEjplNDhhY2U5ODE0ZjBAaW0uYm90OjA2MDAwMGQ0ZmYwNzg5NWY2NDFlMmZjNmIzNGUzMzNkZDIwMjgx"} \ No newline at end of file +{"get_updates_buf":"ChAIORDi6Liv+zMYmp6chfYzEjplNDhhY2U5ODE0ZjBAaW0uYm90OjA2MDAwMGQ0ZmYwNzg5NWY2NDFlMmZjNmIzNGUzMzNkZDIwMjgx"} \ No newline at end of file diff --git a/skill-workshop/proposals.json b/skill-workshop/proposals.json index d98f9aa..287bbfd 100644 --- a/skill-workshop/proposals.json +++ b/skill-workshop/proposals.json @@ -1 +1 @@ -{"schema":"openclaw.skill-workshop.proposals-manifest.v1","updatedAt":"2026-07-09T09:56:20.877Z","proposals":[{"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-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"}]} diff --git a/skill-workshop/proposals/weekly-report-dingtalk-draft-20260731-610f0943bc/PROPOSAL.md b/skill-workshop/proposals/weekly-report-dingtalk-draft-20260731-610f0943bc/PROPOSAL.md new file mode 100644 index 0000000..0f604c9 --- /dev/null +++ b/skill-workshop/proposals/weekly-report-dingtalk-draft-20260731-610f0943bc/PROPOSAL.md @@ -0,0 +1,93 @@ +--- +name: "weekly-report-dingtalk-draft" +description: "生成项目周报草稿存入钉邮草稿箱(仅草稿禁发)。固化杨轩周报标准格式/签名/收件抄送。" +status: proposal +version: "v1" +date: "2026-07-31T02:07:55.496Z" +--- + +# 周报草稿生成技能(钉邮草稿箱) + +## 用途 +为杨轩生成项目周报并保存到钉钉企业邮箱(钉邮)**草稿箱**,**禁止直接发送**(红线)。 + +## 发送渠道 +- **himalaya IMAP 存草稿不可用**(`feature not available`)——不要用它存草稿/send。 +- 使用 **Python imaplib + 钉邮 IMAP**:`imap.mxhichina.com:993`(SSL),账号密码从 himalaya 配置读取。 +- SMTP 可发不用;本技能**只存草稿**。 +- 草稿文件夹 IMAP 名(modified UTF7):`&g0l6Pw-`(即「草稿」)。可用 `m.list()` 复核。 + +## 凭据读取(不硬编码、不外泄) +从 `/home/yangxuan/.config/himalaya/config.toml` 读取: +`accounts.yangxuan."imap.sasl.plain.username"`、`"imap.sasl.plain.password.raw"`。 +用正则匹配键名取值;脚本里用变量引用,**不要把密码打印到日志/聊天**。 + +## 固定配置(每次执行仍须向用户确认) +- 收件人:刘强 `` +- 抄送:陈明 ``、曾莉 ``(**不含吴睿东 wurd,已去除**) + +## 主题格式 +半角括号 + 空格~空格,RFC2047 编码(整个主题做 base64): +`Gx开发周报 (YYYY-MM-DD ~ YYYY-MM-DD)` +示例:`G6开发周报 (2026-07-27 ~ 2026-07-31)` + +## 正文结构(text/plain + text/html 双部分 multipart/alternative) +``` +项目名称: 维云智造Gx +主要任务: <简短短语> + +本周工作内容 +周一(YYYY-MM-DD) + - <条目> + - <条目> +周二(YYYY-MM-DD) + - ... +(周一到周五) + +存在问题 + 无 + +Best regards, +杨轩 +地址:中国·南京云密城L栋5/10楼 +手机:18726128489 +邮箱:yangxuan@witsoft.cn +``` +- HTML 用 `` 加粗标题、` ` 空格、`
` 换行、条目 `  - `。 +- **签名含图片**(外链):`https://mail-online.nosdn.127.net/wzpmmc/65e8a1396c5c0dbb66cecd9792d4504b.jpg`,签名文字灰色(#bfbfbf, Microsoft Yahei 13px)。 + +## Header 编码(关键,易踩坑) +RFC2047,**姓名单独编码成带引号 `"=?UTF-8?B?...?="`,邮箱明文**;不要把姓名+邮箱一起编码(会导致收件人重叠乱码)。 +``` +From: "=?UTF-8?B?5p2o6L2p?=" +To: "=?UTF-8?B?5YiY5by6?=" +Cc: "=?UTF-8?B?6ZmI5piO?=" , "=?UTF-8?B?5pu+6I6J?=" +Subject: =?UTF-8?B??= +``` +人名 base64 速查: +- 杨轩 `5p2o6L2p`、刘强 `5YiY5by6`、陈明 `6ZmI5piO`、曾莉 `5pu+6I6J`、吴睿东 `5ZC0552/5Lic`(勿用其抄送) + +## 存草稿命令(Python) +```python +import imaplib, time, re, base64 +# 读取凭据 ... +m = imaplib.IMAP4_SSL('imap.mxhichina.com', 993); m.login(USER, PASS) +m.select(DRAFT) +typ, data = m.search(None, 'ALL'); ids = data[0].split() +if ids: # 先清空旧草稿再覆盖 + m.store(b','.join(ids), '+FLAGS', r'(\Deleted)'); m.expunge() +m.append(DRAFT, None, imaplib.Time2Internaldate(time.time()), raw_eml_bytes) +m.logout() +``` +- 用 `EmailMessage`/`MIMEText` 组装,或字节级拼接 header + body(推荐字节级拼接避免库自动编码干扰 header)。 + +## 红线 +- **仅存草稿箱,禁止直接发送/`send`**。未获杨轩明确放行绝不执行 SMTP 发送。 +- 草稿进入草稿箱后,交付给杨轩到钉邮核对;杨轩放行后才允许发送。 + +## 工作流 +1. 收集本周(周一到周五)日报内容。 +2. 组装 plain + html,套用固定签名。 +3. 正确 RFC2047 header。 +4. imaplib APPEND 到草稿箱(先清旧草稿)。 +5. 回报草稿信息(主题/收件/抄送/有无签名)给杨轩,等放行。 diff --git a/skill-workshop/proposals/weekly-report-dingtalk-draft-20260731-610f0943bc/proposal.json b/skill-workshop/proposals/weekly-report-dingtalk-draft-20260731-610f0943bc/proposal.json new file mode 100644 index 0000000..3064e8c --- /dev/null +++ b/skill-workshop/proposals/weekly-report-dingtalk-draft-20260731-610f0943bc/proposal.json @@ -0,0 +1 @@ +{"schema":"openclaw.skill-workshop.proposal.v1","id":"weekly-report-dingtalk-draft-20260731-610f0943bc","kind":"create","status":"applied","title":"Create weekly-report-dingtalk-draft","description":"生成项目周报草稿存入钉邮草稿箱(仅草稿禁发)。固化杨轩周报标准格式/签名/收件抄送。","createdAt":"2026-07-31T02:07:55.496Z","updatedAt":"2026-07-31T02:09:58.896Z","createdBy":"skill-workshop","origin":{"agentId":"main","sessionKey":"agent:main:openclaw-weixin:direct:o9cq80w6znnpgitw-ggackwd69ba@im.wechat","runId":"16559456-06ef-4d28-921b-40da704d8ae5","messageId":"openclaw-weixin:1785463647241-96c14cef"},"proposedVersion":"v1","draftFile":"PROPOSAL.md","draftHash":"7b8f70e32ea9f8779a96717cf930d7ee71e8d705999547ac82ff2e01d88029eb","target":{"skillName":"weekly-report-dingtalk-draft","skillKey":"weekly-report-dingtalk-draft","skillDir":"/home/yangxuan/.openclaw/workspace/skills/weekly-report-dingtalk-draft","skillFile":"/home/yangxuan/.openclaw/workspace/skills/weekly-report-dingtalk-draft/SKILL.md","source":"openclaw-workspace"},"scan":{"state":"clean","scannedAt":"2026-07-31T02:09:58.869Z","critical":0,"warn":0,"info":0,"findings":[]},"goal":"把本次验证通过的周报草稿生成流程固化为可复用技能,每周五自动复用正确的格式与编码,避免重蹈格式/编码踩坑。","appliedAt":"2026-07-31T02:09:58.896Z"} diff --git a/skill-workshop/proposals/weekly-report-dingtalk-draft-20260731-610f0943bc/rollback.json b/skill-workshop/proposals/weekly-report-dingtalk-draft-20260731-610f0943bc/rollback.json new file mode 100644 index 0000000..989699f --- /dev/null +++ b/skill-workshop/proposals/weekly-report-dingtalk-draft-20260731-610f0943bc/rollback.json @@ -0,0 +1 @@ +{"schema":"openclaw.skill-workshop.rollback.v1","proposalId":"weekly-report-dingtalk-draft-20260731-610f0943bc","writtenAt":"2026-07-31T02:09:58.873Z","targetSkillFile":"/home/yangxuan/.openclaw/workspace/skills/weekly-report-dingtalk-draft/SKILL.md","action":"create"} diff --git a/workspace-attestations/675ebd4bbbf5213802ade350a2fff111afbca7ad11b9646d0add12e68fed6b95.attested b/workspace-attestations/675ebd4bbbf5213802ade350a2fff111afbca7ad11b9646d0add12e68fed6b95.attested index 88c472c..6b4f44b 100644 --- a/workspace-attestations/675ebd4bbbf5213802ade350a2fff111afbca7ad11b9646d0add12e68fed6b95.attested +++ b/workspace-attestations/675ebd4bbbf5213802ade350a2fff111afbca7ad11b9646d0add12e68fed6b95.attested @@ -1,2 +1,2 @@ openclaw-workspace-attestation:v1 -2026-07-24T09:40:00.105Z +2026-07-31T02:32:00.963Z diff --git a/workspace-resume/memory/2026-07-31.md b/workspace-resume/memory/2026-07-31.md index 6bed610..20007e4 100644 --- a/workspace-resume/memory/2026-07-31.md +++ b/workspace-resume/memory/2026-07-31.md @@ -76,3 +76,10 @@ ### 待办/可选项 - 系统备份脚本 /usr/local/bin/backup-agent-dbs.sh 里也硬编码了 MySQL 密码 `5gynj20J`(未处理) - eml-archive/ 历史存档暂保留,如需清理可后续处理 + +### 8. 配置同步到 Gitea(2026-07-31) +- 通知 main(管家)处理 workspace-resume 变更同步 +- 提交:`ae4b7c8` (chore(workspace-resume): 配置清理与维护同步 2026-07-31),推送 314 分支成功 +- 已同步 14 个文件:AGENTS/MEMORY/TOOLS/USER/WORK_EXPERIENCE、send_weekly_report.py、SKILL.md、HEARTBEAT.md 删除、4个旧周报移入 .trash、新增 .trash/、memory/2026-07-31.md、2026-W31周报 +- 按建议跳过:.env(gitignore 忽略)、identity/、openclaw-weixin/(token)、workspace-attestations/、media/inbound/、skill-workshop/ +- 验证:本地与 origin/314 一致,仅剩敏感文件保持本地未提交