5.6.1 - #464
Merged
Merged
Conversation
…llage-broll skill video-product: - new scripts/review.py: post-compose self-review (ffprobe + 5-position frame extraction + audio level + duration/resolution uniformity, exit code as verdict) - new scripts/state.py: pipeline state machine for subagent resume-from-failure (8 stages, append-only state.history/) - gen.py: append decisions.log on every fallback (borrowed from OpenMontage decision_log) - SKILL.md slimmed 656->200 lines, split into 8 stages/ submodule docs - Step 2.2.3 slideshow-risk checklist (repetition/weak-motion/typography-overreliance) - Step 2.3.5 Gate 0 contact sheet confirmation (siliconflow-img-gen keyframes + ffmpeg tile) - Step 2.5 budget estimation gate - assemble.py: add --transition crossfade (ffmpeg xfade chain) content-producer: - new scripts/normalize.py: loudnorm to -14 LUFS (mandatory, Step 5.5) - new scripts/burn-srt.py: burn SRT subtitles via ffmpeg subtitles filter (optional) - new scripts/duck.py: BGM ducking via sidechaincompress (optional, separable tracks only) - new scripts/denoise.py: audio noise reduction via afftdn/arnndn (optional, poor footage only) - new scripts/interp.py: frame interpolation via minterpolate (optional, low-fps source only) - new scripts/README.md: script index - AGENTS.md: script checklist section + Step 5.5/5.6/5.7/5.8/3.5接入 points - new skills/collage-broll/: adapted from gbro-collage-broll, three-gate approval + assemble-from-empty, switched deps from Gemini Omni/Codex image_gen to gen.py i2v + siliconflow-img-gen Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
…--transition crossfade
gen.py:
- new append_decision() helper: append-only ISO timestamp | event | detail line to decisions.log
- generate() calls append_decision on every candidate-chain fallback (records from→to + reason)
- generate() calls append_decision when all candidates exhausted (records model list + last error)
- borrowed from OpenMontage decision_log pattern
assemble.py:
- new --transition {none,crossfade} arg (default none)
- new _apply_crossfade() helper: ffmpeg xfade+acrossfade 鲜, 0.5s per adjacent pair
- ≤3 segments use xfade direct chain; >3 segments fall back to hard cut (avoid ffmpeg filter graph explosion)
- probe ffmpeg -filters for xfade support, skip crossfade if missing
- fall back to concat product on any ffprobe/normalize/xfade failure
- assemble() / assemble_multiple_videos() pass transition through
Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
sales-cs 启用时 IT engineer 曾把 "channel": "wecom" 写进 agent 顶层对象, 正确层位应为 bindings[].match.channel + channels.<name>。绑 channel 一律走 对应 skill 的 apply 脚本,不得手贴 agent 块。 - MEMORY: 「openclaw.json 禁止更改」节补「channel 字段层位」禁改条目 - AGENTS: 重写「渠道配置」节,层位约束前置;awada/飞书企微两条路径并列, 选择服从 main agent 派下指令、不擅选
…yering fix: 约束 it-engineer channel 字段层位,禁止手贴 agent 顶层
Signed-off-by: bigbrother666 <96130569+bigbrother666sh@users.noreply.github.com>
…清单 / 同步状态 Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
…脚本 + stages 引用改公共 skill SKILL.md 从 1 行占位重写为 234 行完整工作流文: - 出脚本→Gate 0 关键帧确认→预算估算→逐段 AI 生成/素材组装→合成→成片自检→封面→用户确认全链路 - 作三条平行路径(collage-broll/html-video/manim-explainer)的编排入口 - stages/ 6 子文档保留不动,SKILL.md 只做主骨架+导航指针+工作流串联 删 4 冗余脚本: - gen.py + tts.py(已抽公共 aigc-video-gen/siliconflow-tts,CP 副本删走 PATH 调用) - state.py(同 main 范式用不上) - extract_and_concat.py(stages 全无引用,上轮从 main 焯来的冗余) - 剩 5 脚本(assemble/check/compress_preview/review)stages 全有引用保留 stages 里 gen.py→aigc-video-gen、tts.py→siliconflow-tts 全替换(36+2 处), 4 处不通顺 python3 ./skills/.../scripts/<skill> 命令订正为 PATH 调用。 stages 残留参考来源词清净(符合技能内容规范第 6 节): - borrowed from OpenMontage storyboard gate / 借鉴 gbro Gate 2 + OpenMontage storyboard - gbro README 原话 / borrowed from OpenMontage budget gate - 借鉴 OpenMontage post-render self-review + gbro Gate 3 QA - OpenMontage 没有,是我们加的 / 可借鉴点→可复用点 共 7 处删改。 调研文档 docs/video-capability-replanning-2026-07-25.md 第 7 节补记本轮重构落行。 Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
highlight-cut(独立技能,参考 AutoClip 落地) - 新建 crews/main/skills/highlight-cut/:5 步工作流(检测生 cut_plan.json → 用户确认 plan → 按 plan 剪拼 → 成片自检强制闸门 → 用户确认) - scripts/cut_plan.py(541 行):火山方舟豆包语音极速版 ASR 拿 utterance+word 级时间戳 + 多层检测(fillers/silence/stutters/false_starts/repeats/highlight)+ 三 mode(filler/highlight/both)+ Jaccard 相似度判据 + stdout 报告 - scripts/apply_cut.py(267 行):按 cut_plan.json 滤 keep=true 段 + ffmpeg 逐段抽 + 段间 triangular fade 防咔点 + concat 拼接 video-review(抽公共成片自检) - review.py 原在 main 与 content-producer 各持一份字节相同副本(485 行),本轮抽到仓根 skills/video-review/(含 SKILL.md + scripts/review.py)供跨 crew 共用 - 注释清洗禁词(borrowed from OpenMontage + gbro Gate 3 QA 等)+ Usage 路径订正 - main 与 CP 各删本地副本,引用方全订正到 ./skills/video-review/scripts/review.py:main 的 video-product/SKILL.md 脚本清单 + state.py + highlight-cut/SKILL.md;CP 的 video-product/SKILL.md(行 172+220)+ stages/step5-compose.md(行 55) docs:调研文档补 highlight-cut 落地变更记录 Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
…构为 video-edit + wrapper 三连 - talking-head-cut(原 highlight-cut):按口播场景重命名,B 类薄转发 wrapper → cut_plan.py;剪拼步改调 video-edit apply-cut - video-edit(原 video-product):定位收敛为已有素材加工与拼接——extract 抽段拼接 / assemble 编号合成 / audio-mix 旁白 BGM 混音(新) / subtitles 字幕烧录(新) / frames 抽帧+agent 看图写 cut_plan 的画面精彩集锦(新) / apply-cut 按计划剪拼(自 talking-head-cut 移入) / preview 预览压缩;首个 C 类分发器 wrapper - 删 main 侧 gen.py / tts.py / state.py / check.py(AIGC 与 TTS 改引公共 aigc-video-gen / siliconflow-tts,CP 侧有完整备份) - video-review:review.py 兼容单文件入参(修 SKILL.md 单文件调用失效问题)+ 补薄转发 wrapper - 连带更新 AGENTS.md 视频生产/发布段、README、published-track 引用、d21 wrapper 审计记录 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…r + 重规划文档补 main 侧落地记录 - skills/aigc-video-gen:百炼 happyhorse / 火山 Seedance 候选链声画同出生成(gen.py 与删除前 main 版本字节级一致),含薄 wrapper;修 GLM 乱码字与旧 video-product / A.x 阶段编号引用 - skills/siliconflow-tts:公共 TTS 回退(tts.py 采用 CP 演进版:markdown 清洗 + 绝对路径 + ASR 自检),含薄 wrapper;SKILL.md 示例改 PATH 风格 - docs/video-capability-replanning:新增 §5.5 main 侧落地记录与公共技能依赖(答复 §9.1 gen.py 下落——现成成果在 fix/it-engineer-channel-layering 分支 f5c99a1,已提取);含 CP 侧同期撰写的第二部分 §6–§9 - 清理 crews/main/skills/video-assembler 残渣(f5c99a1 旧名遗留 __pycache__) - CP 侧 crews/content-producer/skills/siliconflow-tts 本地副本按决策 4.3 待 CP 侧删除改引公共,本轮未动 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- 弃 patchright+Chrome CDP(含 Screencast API 方案),全线改 camoufox 栈:Discover/Rehearse 用 camoufox-cli 命令驱动(session ui-demo,需登录加 --persistent),Record 用新增 scripts/record_runner.mjs(camoufox-js 起浏览器 + Playwright recordVideo) - 演习阶段新增必问环节:先问用户是否旁观——旁观则 --headed --viewport 重开、逐步预告操作、用户随时提"重点录哪/不录哪"即时记入录制计划;其余一律默认无头,仅无头无法正常工作时转有头 - 演习产物=录制计划(步骤+字幕+不录清单),必须用户确认后才准录制;演习登录态经 cookies export 注入录制 context - 录制执行器内置光标/字幕条/moveAndClick/typeSlowly 等 helper(load 自动重注入),成片按窗口内容区实测建画布(camoufox 指纹强制 outer window 尺寸,直录 720 会出底部灰边) - 薄 wrapper ui-demo.sh(PATH 调用)+ skill 级 package.json(camoufox-js/playwright-core,apply-addons per-skill 安装);CLAUDE.md 依赖表同步 - 实测:无头录制 15s 成片 1280x658 vp8,光标/点击高亮/字幕/逐字输入全部在片;rehearse 命令链 open/snapshot/cookies export/close 全通 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…底 + HEARTBEAT Step3 目录纠偏 排查 2026-07-25 起凌晨复盘 xhs 15 条全报 NOTE_NOT_IN_PROFILE: - check-session pongXhs 判 data.guest(xhs 给游客也发 web_session,游客调 v2 user/me 同样 success:true,两层探活全被骗过——真根因,非 cookie 文件缺失) - get-xhs-user-id.sh 切 v2 端点(v1 已返 -104 无权限)+ 拒绝 guest 伪 id + cookie 文件三态归一(原实现把对象数组当分号串 split 必挂) - fetch-retro-data.ts profile 映射改条目列表:guest 视角 SSR note id 全部 置空,id miss 后按 title 匹配兜底(实测命中);新增 PROFILE_MAPPING_EMPTY 区分"解析到 0 条"与"笔记不在列表" - fetch-and-update-metrics.sh 从 DB 带 --title 透传 - fetch-xhs-with-xsec.ts 修 sleep 毫秒 bug(3ms→3s) - HEARTBEAT.md Step3 纠偏:calibration/<platform>/predictions/ 目录不存在 (content-calibrator 是 per-work 布局),改为检查 <work>/calibration/ prediction.md;附安全命令写法,避免复合命令非零退出被 openclaw fail-closed 判 mutating 致 cron 每晚误报 "Cron job failed" Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…emon 僵尸化 2026-07-27 13:18 死机根因:idle 自退 watchdog(60s) -> shutdown() -> manager.close() -> await context.close(),Firefox 卡死时 await 永不返回,daemon 僵尸化,camoufox-bin 进程不退,堆积撑爆 13GB(kernel audit 4 个 camoufox-bin pid 无一退出记录,sar 内存 40 分钟不回落)。 07-17 (0773afb) 只给 killDaemon 路径加了 8s 超时+杀进程组,idle 自退的 shutdown 路径漏修同一个 context.close() hang race。close 命令路径有 killDaemon 外部兜底,idle 自退路径无兜底,是防御缺口。 修:shutdown() 给 manager.close() 加 8s Promise.race 超时(与 killDaemon 对齐),超时先清 sock/pid 再 SIGKILL 整个进程组(daemon 是 detached pgid leader,camoufox-bin+content 是其子进程,一锅端)。forceExit=false 的测试路径超时后继续正常清除,不杀进程组。 不改 browser.ts close():避免 close 命令'假成功'导致 killDaemon 不再外部 SIGKILL 反而泄漏 camoufox-bin。 198 测试过,tsc 构建过。上游 0.7.3 TeamWiseFlow#14 修的是 socket 残留挂起(我们已有 activeConnections 等价),context.close() 超时上游没有,跟进上游也不会修此问题。
…oot 容器/Ubuntu24.04/浏览器检测/预发布资产/addon await/Node20.10) 选择性 cherry-pick 上游 0.7.x 的 install 相关修复(不带 TeamWiseFlow#13/TeamWiseFlow#15/TeamWiseFlow#18 架构变化,不用 Python 侧)。fork 基线 0.6.2 这些 bug 全都有,直击新用户首装 + Docker 部署痛点。 - TeamWiseFlow#19 root 容器 (c0ed8ad): cli.ts 加 runAsRoot,getuid===0 直接执行不再硬编码 sudo(Docker root 容器无 sudo 必挂) - TeamWiseFlow#17 Ubuntu 24.04 t64 (1a6c5e2): resolveAptLibasound -> resolveAptDeps 通用 apt-get install -s dry-run,处理 libgtk-3-0 等所有 t64 重命名(不只 libasound2) - TeamWiseFlow#17 浏览器检测 (1a6c5e2): browser.ts ensureBrowserInstalled 弃用 execFileSync(npx...) 改 camoufoxPath+existsSync(npx 从 cwd 解析下错版本/需网络/非 TTY daemon 挂起) - TeamWiseFlow#17 预发布资产 (1a6c5e2): install.ts assetsViaApi 过滤 prerelease/draft(避免装缺二进制的坏资产) - TeamWiseFlow#19 addon await (c0ed8ad): install.ts maybeDownloadAddons 加 await(空 UBO 致 open() manifest missing) - TeamWiseFlow#17 Node 20.10 (1a6c5e2): cli.ts main 开头版本预检 + package.json engines >=20.10(camoufox-js 用 JSON import attributes 需 20.10+) 198 测试过,tsc 构建过。assetsViaWeb 网页路径 stableTags 预发布过滤(TeamWiseFlow#17)较复杂且是 API 失败的 fallback 路径,暂不吸收;camoufox-js 精确锁版本(^0.11.1)单独评估。
…ch 禁用 web_fetch 旧 description 英文且不精确,Agent 常对 mp.weixin.qq.com 文章链接误用浏览器 web_fetch 而非本技能。新 description 中文,明确三场景:(1) 文章链接直接 fetch(禁用 web_fetch);(2) 公众号名称 search->account-posts->逐篇 fetch;(3) 统一负责 wx_mp 登录态。登录从'Also supports'附属提升为核心职责。Agent 在 system prompt 阶段只看 description 决定是否用技能,精确的触发条件是关键。
awada/wecom 只送达最后一个 assistant turn 的文本(openclaw core buildEmbeddedRunPayloads 的 shouldUseCanonicalFinalAnswer),回复与 tool_call 同 turn 时文本被丢弃。旧 AGENTS.md"每轮结束时更新客户记录" 诱导回复+更新塞进同一 turn,触发该 bug。 统一为:cs-update / feedback 记录 / follow-up 等均在独立 tool-only turn 执行(零客户文本),所有工具完成后再在最终 turn 输出回复。工具在前对模型 slip 鲁棒--即便工具 turn 漏出文本,回复仍在最后 turn 一定送达;旧"回复 在前+ack"模式一补 ack 就丢回复。 - AGENTS.md: 会话主流程/数据库更新原则/延迟购买意向重排为工具在前 - SOUL.md: 对外约束补"工具在前、回复在后"规则 + feedback 记录翻转 - customer-db/SKILL.md: 第三节"每轮对话结束时更新"->"先更新记录,再回复客户" 渠道回复强制规则仍由 setup-crew.sh inject_channel_reply_rules 注入,不动; 本地部署实例 workspace-sales-cs 同步分别改(skill 与代码仓不同)。
按 docs/cp-refactor-dev-plan-2026-07-27.md 落地 content-producer 重构, survey 文档 §1–§9 用户已批示,本轮一次性完成 Phase 1–4。 公共 domain skill: - skills/siliconflow-tts → skills/awk-tts(火山方舟豆包语音合成 2.0, seed-tts-2.0 字符版,NDJSON 流式响应 + X-Api-* �鉴权 + speaker 路由, ASR 自检走火山录音文件极速版复用 viral-chaser 凭据池) - skills/video-review 保留为公共(main + CP 五条出片路径共用) CP workflow skill(四能力方向): - 新建 video-producer:端到端主技能,17 子脚本骨架覆盖 Stage 0–14 全链 + 两闸门 GATE A/B + 产物文件即 checkpoint 不引状态机 - 新建 design-full:整合 design-system-picker + init-workspace + AGENTS.md 工作模式2,含 14 套设计系统库 + 子命令 wrapper + 三条 子工作流 A/B/C - collage-broll:补公共 video-review 技术自检闸门,GEN_PY 断链改指 公共 aigc-video-gen - manim-explainer:fragment-assembly → video-edit assemble, siliconflow-tts → awk-tts CP 定义文档同步: - AGENTS.md 重构为四能力方向路由表,删工作模式2 全细节 - SOUL/IDENTITY/MEMORY/BUILTIN_SKILLS 同步更新 - scripts/README.md 与 normalize.py 清出处词(OpenMontage 等) - openclaw_setting_sample.json 旧技能字样清 附带提交一处之前未提交的变更: - crews/main/skills/zhihu-publish/SKILL.md 破折号规范化(—— → --) Phase 4 全仓终检全过:awk-tts/design-full/video-producer 三 wrapper --help exit=0,17 子脚本 py_compile OK,CP 内越界词与残留引用全清, python 脸调外泄 NONE。 Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
collage-broll/SKILL.md: - Gate 3 + Phase 3 生成部分改直接调公共 aigc-video-gen wrapper,不再 腔引用其下 scripts/gen.py 脚本体(PATH 化调用,零路径拼接) - 删"由 gbro-collage-broll 适配而来"出处日志段 + 原膜对比表 - 删"首次使用:环境自检"段 + 配置指南段(AWK_API_KEY/python 是系统 级前提不必在技能内复述,脚本体 check_setup.sh 保留以备其他场景) - 删底部"没吸收的 gbro 原膜能力"段 - description frontmatter 去 gbro-collage-broll 触发词 + Gemini Omni 出处词,改走公共 aigc-video-gen 表述 - run_gate3.py 腔本体同步:GEN_PY 腔引用 → shutil.which(WRAPPER) 走 PATH,wrapper 不在 PATH 时 exit 1 报错 manim-explainer/SKILL.md: - Render Conventions + Reusable Starter 两处命令示例改调 manim-explainer wrapper,不再裸引用 scripts/render-manim.sh Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
aigc-video-gen/scripts/gen.py: - 删 6 个 agent 用不到的 Flag:--ref-audio / --negative-prompt / --no-prompt-extend / --seed / --poll-interval / --timeout - 对应 payload 注入逻辑 + poll 函数形参一并收口:volc_poll / ds_poll 删 interval/timeout 形参,改内部固定常量 VOLC_POLL_INTERVAL/VOLC_TIMEOUT/DS_POLL_INTERVAL/DS_TIMEOUT - SKILL.md Parameters 段补 3 个有用 Flag:--prev-segment / --no-audio / --platform video-producer/SKILL.md: - narrative/motion/montage 三英文词中文化为直白名字:故事讲述型 / 纯画面动效型 / 蒙太奇剪接型(frontmatter description + Stage 0 路由段 + 模糊意图段 + wrapper 命令清单全改) - Stage 0 路由段补三档直白释义(重情节/重节奏/重氛围)让非专业 用户一看就懂;intent-router.py docstring 段释义同步补齐 - 内部 key 保留英文不动(VALID_GENRES 等下游一致) README.md: - 借鉴出处段补 ShortGPT(Stage 12 拼接+转场借鉴) - AutoClip 措辞补 motion-audit 镜头抽帧打分思路借鉴点 docs/cp-refactor-dev-plan-2026-07-27.md:删(开发计划落地完毕) Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
- openclaw.version: 2026.6.11 -> 2026.7.1 (commit 2d2ddc43d0) - 6 browser-camoufox-pivot per-file patches regenerated for 7.1 upstream drift: 01 (docs), 05 (browser-tool.ts), 09 (profile-capabilities.ts), 11 (agent-tools.ts), 10/17 (del test files). Patch set unchanged. - 7.1 adds local-extension profile mode (Chrome extension relay); 09 keeps the new mode, removes only local-managed (camoufox takes over). - 05 fixes a latent TS2322 (resolvedTarget not excluding "camoufox" when passed to resolveBrowserBaseUrl which now accepts only "host"); exposed by tsgo, previously unseen because build uses tsdown/esbuild (no typecheck). - All 37 patches apply cleanly (git apply --3way); tsgo typecheck clean on re-ported files (browser-tool.ts / profile-capabilities.ts / agent-tools.ts). - openclaw-weixin already at npm latest (2.4.6 / 2.1.4 / 1.1.0), no change.
f3b7db8 (Refactor code structure) 把 5 个文件存成 CRLF,其中 setup-crew.sh / install.sh 的 shebang 变成 #!/bin/bash\r,内核找不到解释器 -> apply-addons.sh (set -e) 在调 setup-crew.sh 时报 "无法执行:找不到需要的文件" 中止。 - setup-crew.sh / install.sh / README.md / scripts/README.md: CRLF -> LF - install.ps1: 按 .gitattributes 规整 blob(纯行尾,BOM 保留,工作树仍 CRLF) - 新增 .gitattributes: * text=auto eol=lf;*.ps1/*.psm1/*.bat/*.cmd eol=crlf
aigc-video-gen/scripts/gen.py: - volc_submit payload 补 "watermark": False,与 ds_submit 一致 (DashScope 段早带,火山段漏带——本轮补齐让两平台默认都不打水印) README.md 借鉴出处段订正: - 删误加的 ShortGPT(不在用户给的参考之内) - 补四个真借鉴项目:HyperFrames / html-video / ViMax / OpenMontage (上一轮我撞 §5 禁词盲删了这四个真该列的——README 是产品门面 例外可列,§5 禁词只约束技能内 SKILL.md / 脚本注释) Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
按 Content Producer 实战反馈落地 10 项改进: 批次一(修 bug + 参数化): - assemble xfade 路径 amix 加 normalize=0,与 audio-mix 对齐避免音量稀释 - assemble 加 --low-memory(ultrafast preset + crf 28),低内存机器友好 - assemble 加 --preview-duration N,额外截前 N 秒到 video-preview.mp4 供试听 - audio-mix docstring 补 normalize=0 / apad 说明 批次二(音频基础设施 + 真拼接): - 新增 add-silent-audio 子命令:给无音频视频片段补静音轨(默认 24000/mono) - assemble 内置音频格式统一(--audio-format,无音频段补静音、规格不符段重采样) - assemble 不传 --width/--fps 时自动探测各段规格,不一时统一到最低公共规格 - clip-trim 加 --pre-buffer N,切段前置缓冲避免 -ss 切 MP3 吞首字 批次三(两阶段工作流 + timeline 模式): - 新增 scene-compose 子命令:单 Scene 分段合成(clips+旁白+对白 → 一个 Scene 片段) - timeline-compose 加 audio_mode=concat 模式:各段音轨静音填充后 concat 成连续轨, 避免 amix 断续/normalize 稀释问题 批次四(片尾专用工具): - 新增 make-outro 子命令:形象图+黑边+烧字幕(颜色/字体/淡入可配)+静音轨 → 标准比例片尾 - assemble 扩展支持 render/outro/ 等命名子目录收段,片尾自动纳入成片 SKILL.md / wrapper help 同步更新工具箱表、退出码表、场景化组合示例 A–H。 Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
- SKILL.md description 去掉意图路由+闸门无意义末句,改为双模式描述: 模式 A 端到端生产(从零做一支完整视频,走 Stage 0→14 全流程); 模式 B 片段修整(已有几个片段要拼/配音/剪/烧字幕,直接调 Stage 12 工具箱) - SKILL.md 适用场景段改为双模式说明,模式 B 列清各工具对应活儿, 并标注不做语义级剪辑(去口气词/智能剪重点仍归 main 的 video-edit/talking-head-cut) - AGENTS.md 同步增加 video-producer 双模式段,改 SKILL.md/臚本时须兼顾两种用法 Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
… 修 daemon --persistent 缺失与 QR 截图空白 wx-mp-hunter: - 从 TypeScript 整体重写为 Python(scripts/wx_mp_hunter.py),依赖收敛至仓根 requirements.txt(httpx + zstandard) - 删除旧 TS 实现:wx_mp_hunter.ts / download_images.ts / wx_mp_keepalive.mjs / package.json / 根 wx-mp-hunter.sh - 删除死代码 _WxArticleParser 类(html.parser 路线未被调用) - fetch 命令全盘采用多类型识别方案,应对所有公众号类型: - B1 有 <h1>:图文页(js_content)/ 图片分享页(js_image_desc)/ 视频分享页(js_common_share_desc)/ metadata description 链接列表 - B2 无 <h1>:分享源页(js_share_source)/ 新类型文本页(js_text_desc)/ og:* meta 新版分享页 / 已删除页 - author 多路兜底:js_name → var nickname → profile_nickname → h1 父 div 子 div 的 <strong> → js_wx_follow_nickname* → wx_follow_nickname - publish_time 四路兜底:<em id=publish_time> 年月日 → var ct/var publish_time 时间戳 → og:article:published_time meta → 正则扫年月日 - cmd_fetch 透传 error_msg(new_type_article type ... / it's a deleted page 等)到输出 JSON - SKILL.md 重写:无登录流程、无 MimicWX、posts-list 检查容器环境变量、homepage 走 camoufox 无头浏览器 - homepage 节新增 mp/appmsgalbum 合集 URL 模式描述(走浏览器不走 HTTP,合集页是 JS 渲染动态列表) wx-mp-engagement: - 修 daemon 缺 --persistent 根因:camoufox-cli 的 --persistent 是 per-call flag,旧代码仅 camoufox_open 带了, 其他辅助(camoufox_get_url/camoufox_eval/camoufox_screenshot/camoufox_close)都没带,导致每次命令重起 daemon 不加载 profile(cookie/登录态不恢复)+ 多 daemon 同 session 冲突互杀(SIGKILL)。 修复:把 --persistent 提到 camoufox_run 固定参数,所有命令复用同一 daemon + 同一 profile - 修 _ensure_login 误判 session 失效:camoufox-cli open 是「打开+立刻返回」不等 redirect 完成, 旧代码 open 后立刻读 URL 拿到首页 URL(无 token)误判失效 exit 2。 修复:open 后轮询 URL 等 redirect token 出现(最多 15s),显式跳 login/scanloginqrcode 才判真失效 - 修 cmd_login QR 截图空白:open 后立刻 screenshot 时 QR 还没注入完(JS 动态注入 <img>)。 修复:open 后轮询 eval 验证 QR <img> 已注入(src 以 data:image 开头),最多等 10s,兜底等固定 3s,再截图 - SKILL.md 重写:自管 wx_mp camoufox session,无 wx-mp-hunter 引用,实现自己的 login/login-confirm 命令 - HEARTBEAT.md Step 2 更新:camoufox redirect URL 检查流程,无 wx-mp-hunter 引用 Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
…nnels-publish): 登录改无头截图扫码 HEARTBEAT.md: - Step 2 新增取数时效窗口:浏览器方案靠列表页天然截断,接口方案 ≤30 天 - Step 2 通用规则:取数失败必须原样报 stderr,禁止自行归因 - Step 3:fetch 失败但 DB 有历史数据时复盘不跳过 wx-mp-engagement/SKILL.md: - 标注 count=20 是有意设计,老内容不重抓 - Notes 加报错约束:token 与 publish_url 无关 wechat-channels-publish/SKILL.md: - 登录从有头 --headed --viewport 1920x1080 改为无头截图扫码 (screenshot QR PNG → 发用户扫 → 轮询 URL 确认),对齐 wx-mp-engagement - forked camoufox-cli → camoufox-cli - 保留 target=camoufox/host/node 三后端分支
…aigc-video-gen 新增 MiniMax Hailuo 视频/音乐生成
douyin-publish:
- 新增 open-page 子命令: 无头 persistent session open 上传页, 输出 session+URL 供 agent 判定登录态
- _check_logged_in mute 成 no-op (原 URL+cookie 双信号误判率高)
- SKILL.md 顶部加「发布前置」章节: open-page → agent 查页面元素 → run/login-manager
- 测试同步: TestCheckLoggedIn 改验证 no-op 行为
aigc-video-gen:
- 新增 MiniMax 平台支持 (resolve_platform 加 MINIMAX_API_KEY 检测)
- 视频生成走 V2 异步任务模型: POST /v2/video_generation (content[] 多模态数组) → GET /v2/query/video_generation/{task_id} → task.content.url 成片地址
- 音乐生成走 /v1/music_generation: music-3.0 模型, prompt+lyrics+audio_setting, 同步返回音频 bytes
- main 重构为子命令结构: video (默认, 向后兼容) + music (MiniMax 背景)
- SKILL.md 同步: 平台表加 MiniMax 行, MINIMAX_API_KEY 缺失提醒交 IT engineer, 候选链/端点/模型名对齐官方文档
Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
- 新脚本 query-retro-pending.py/.sh:扫描 cal_enabled=1 记录,筛选 有 prediction.md 无 retro.md + 过 T+Nd 窗口,按 source_folder 跨平台 分组,输出 JSON 含 cal_scores + 各平台 metrics + prediction_path - HEARTBEAT.md Step 3 从 5 步机械检查简化为一行脚本调用 - published-track SKILL.md 加流程 3D 文档
小红书 web API 识别 body 内联话题有两个硬性要求: 1. body 里话题必须写成 `#话题名[话题]#`([话题] 和首尾两个 # 都是固定字面量) 2. 整个话题字符串前后要包不可见字符 \uFEFF(BOM) 朴素 `#话题` 写法服务端当纯文本渲染——这正是"手机点编辑再保存就变正常 tag"的根因: App 端编辑器保存时自动重新序列化成 \uFEFF#话题[话题]#\uFEFF 格式。 改动: - extract_topics: 每个 topic dict 补 link 字段(话题页 URL 占位) - 新增 rewrite_topics_in_body: 把 body 里朴素 #话题 重写为 \uFEFF#话题[话题]#\uFEFF 正则负向前瞻 (?!\[话题\]#) 排除已闭环的,避免重复套娃 - main(): extract 完 topics 后用 rewrite_topics_in_body 改写 body 再传下去 - SKILL.md: --body 参数说明补上话题重写格式细节和根因 验证:py_compile 语法通过 + 端到端 5 case 全 pass (朴素话题/无话题/重复去重/extra_topics/link 字段存在性) Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
- 新建 detect-bump-signals.py/.sh:扫描已复盘作品,比较 rubric 维度分 vs 实际互动(log 桶归一化 0-5),按维度统计同向偏差,≥3 次 → bump 信号 - Retro 流程拆两步:3a 单篇复盘批量(retro.md+rubric-memo.md) → 3b detect-bump-signals.sh 一次性检测,不在单篇间插 bump - Bump 段加混杂因素评估指导(同账号/同平台集中 → 可能非 rubric 问题) - SKILL.md 核心闭环图 + 路由表 + 脚本段同步更新 - HEARTBEAT.md Step 3 拆 3a+3b,Step 5 报告格式更新 - 本地实例 HEARTBEAT.md 同步
抖音 v.douyin.com、B站 b23.tv、小红书 xhslink.com / xhslink.cn, 便于 agent 识别用户转发的分享链接。 Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
- DB 加两列: cal_bias_signals(TEXT) + cal_bump_evaluated(INTEGER) - init-db.sh 加列定义 + 已有表 ALTER 迁移 - detect-bump-signals.py 重写为纯 DB: 从 cal_score_* + 互动指标算偏差 信号, 写回 cal_bias_signals, 每条记录只处理一次 - 输出加 platforms 分布字段, Agent 一眼判断混杂因素 - bump 后清信号: UPDATE cal_bias_signals=NULL, cal_bump_evaluated=1 - .cheat-state.json 删 consecutive_directional_errors(移到 DB) - SKILL.md + HEARTBEAT.md 同步更新描述
每篇作品到 T+3d 就该复盘,不该攒 5 篇才做。bump 的'够不够'由 detect-bump-signals 的 threshold=3 管,跟 Step 3a 要不要做无关。 脚本/HEARTBEAT/published-track SKILL.md 同步去参数。
将原 scripts/gen.py 拆分为三个独立供应商脚本,sh 层根据 --platform 或 env 自动 dispatch: - scripts/gen_minimax.py — MiniMax Hailuo 视频生成 + music 子命令 - scripts/gen_volc.py — 火山引擎 Seedance 视频生成 - scripts/gen_dashscope.py — 阿里云百炼 HappyHorse / Wan2.7 视频生成 - skills/_shared/aigc_common.py — 共享逻辑(HTTP/download/ensure_safe_output/ extract_last_frame/append_decision/generate/resolve_prev_segment) - aigc-video-gen.sh — 重写为 dispatch wrapper(剔除 --platform 参数后转发) MiniMax H3 多模态参考增强(对齐官方 video-generation-v2-h3-context-ir 文档): - 新增 --ref-audio 参数(reference_audio role) - mm_video_build_content 支持 reference_image/reference_video/reference_audio 组合 - cmd_video 入口校验官方约束: - 图生视频(first_frame/last_frame)与多模态参考(reference_*)互斥 - 多模态参考不可仅输入音频,须至少 1 个 reference_video 或 reference_image SKILL.md 同步更新:三脚本结构说明、--ref-audio 参数行、H3 多模态参考约束章节。 验证: - py_compile 四个 Python 文件全通过 - sh dispatch:--platform minimax 正确剔除并转发;env 自动判 MINIMAX_API_KEY → minimax;全无 env → exit 2 + 正确 hint - H3 约束校验:仅 --ref-audio → die(须至少 1 个参考视频/图片); --ref-audio + --ref-image → 通过约束进入 submit(401 假 key 预期); 图生视频 + 多模态参考 → die(互斥) Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
Bump 拆成两个独立流程: - 流程 A(综合评估,Heartbeat 自动):detect-bump-signals.sh 触发后 Agent 评估混杂因素 → 写 rubric-memo.md → 清信号 → 提醒用户 - 流程 B(Rubric 升级,用户发起):生成新公式 → 盲重打 10 篇 → validate-rubric.sh 验证 → pass=true 落地 / pass=false 重试最多 3 轮 新增 validate-rubric.py/.sh:复用 detect-bump-signals 的 log 桶归一化 + 偏差检测逻辑,对比新旧公式偏差信号数,新 < 旧 → pass=true。 HEARTBEAT.md Step 3b + Step 5 同步更新,明确 Agent 不得自动升级。
new < old 太松(old=20 new=19 也过),改为降幅 ≥ 30% 才 pass: reduction_ratio = (old - new) / old >= threshold old=0 时直接 fail(旧公式本无偏差,无升级必要)。 --reduction-threshold 可调。
原放 skills/_shared/ 需 sys.path.insert 跨目录跳转,import 不干净。 aigc_common.py 只被本 skill 的三个 gen_*.py 调用,放 scripts/ 同级更合理: - 三个 gen_*.py 的 sys.path.insert 改为指向同目录 - SKILL.md 引用从 skills/_shared/aigc_common.py 改为 scripts/aigc_common.py - 旧 skills/_shared/aigc_common.py 清空待删 验证:py_compile 四文件 OK + sh dispatch 四测试符合预期 (--platform minimax / env 自动判 / ref-audio 约束 / 全无 env exit 2) Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
- Step 3b 从"bump 信号检测"改为"综合评估":detect-bump-signals.sh 返回后 Agent 做混杂因素评估 → 写 rubric-memo.md → 建议用户 (升级 rubric / 调阈值),不再单列 Bump 流程 A - Bump 段只保留 Rubric 升级流程(用户发起),去掉流程 A/B 编号 - detect-bump-signals.py 聚合后自动清 cal_bias_signals, 信号每轮消费即清不跨轮累积,"清信号"不再是 Agent 手动步骤 - 三条原则 #2 从"升级=全量重打"改为"升级需盲重打验证" (新设计只重打 10 篇非全量) - HEARTBEAT.md Step 3b + Step 5 同步更新
无条件清空致未达阈值的信号丢失,跨轮永远凑不到 ≥3。 改为:触发 bump 才清(信号已被消费),未触发时保留累积。
fetch_post_list 返回值类型判断修复(小贝发现):
- JS 返回 {"posts":[...],"total":N} 是 dict 不是 list
- 旧代码 isinstance(data, list) 判断导致 dict 直接返回空列表
- 加 isinstance(data, dict) 分支取 data.get("posts", [])
match_post metrics 提取修复(小贝发现):
- JS 解析出的 post 对象 plays/likes/comments/shares/favorites 是顶层字段
- 旧代码用 row.get("metrics", {}) 取不存在的 key 拿到空 dict
- 加 _extract_metrics(row) 辅助函数从顶层字段提取
.gitignore 补 *-engagement-probe/ 模式:
- engagement 技能 probe 调试输出(dump 截图/HTML/innerText)不入仓
Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
wx-mp-engagement「收藏」字段中文叫法改「喜欢」: - DB 列名 favorites 不动,只是技能内对应中文从「推荐」改成「喜欢」 - 对应微信界面爱心 icon(收藏到看一看) - 注释 + SKILL.md innerText 结构描述同步 wx-mp/wx-channel engagement login-confirm 删重 open 验登录段: - cmd_login_confirm 原本拿到登录就位信号后又重 open 首页验登录 - 重 open 会起新 daemon 抢同 session profile,与 login 那次 open 的旧 daemon 互杀(SIGKILL),正在跑的 daemon 被杀导致 confirm 异常退出 - token/URL 已证明登录就位,重 open 验登录是多余且有害的——删掉, 直接 close session 收尾即可 - 两个技能(wx-mp-engagement + wx-channel-engagement)同修 Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
|
codes-factory-of-bg seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account. You have signed the CLA already but the status is still pending? Let us recheck it. |
CI 的 openclaw 子仓用 git init + fetch --depth=1 裸浅 clone,不拉 blob, 导致 apply-addons.sh 跑 git apply --3way 时连补丁头里的 pre-image blob 都找不到,所有 browser-camoufox-pivot per-file 补丁全报 Failed to apply。 本机完整 fetch 故照跑不误,差异纯在 git 浅度。改用 git clone 完整拉取, 与本机行为对齐。 Co-Authored-By: AtomCode (GLM-5.2) <noreply@atomgit.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
5.6.1 version