Install
openclaw skills install blog-content-publishPublish editorial and dynamic section content with blog-publish, enforce quality gates for hot/news/ai_news, and sync repository skills to ClawHub via clawhub sync --all.
openclaw skills install blog-content-publish@leeguoo/blog-publish (single source of truth).blog-publish to publish normal blog content and dynamic section content.producer leakage.editorial, hot, news, and ai_news.blog-publish to generate CDN-hosted markdown URLs for embedded assets.hot/news/ai_news.localeslugtitlesummarycontentMarkdownsection (hot, news, or ai_news)pairId (if omitted, server falls back to slug)repoUrlsourceUrlpublicSourceLabeltagsdecisionMetaproducer (internal only, never for public display)hot/news/ai_news)summary) + structured body.## 1) ..., ## 2) ...) and a closing takeaways section.4-8 topics; reject outputs with only 1-2 thin topics unless the source itself is extremely short.来源/Source证据/Evidence摘要/Summary解读/Interpretation行动建议/Action证据/Evidence must point to a concrete anchor (release bullet / PR / issue / official doc section), not only homepage-level links.摘要/Summary is factual and source-grounded.解读/Interpretation is inference/opinion and must not fabricate facts; include explicit impact level (P0/P1/P2).行动建议/Action must be executable (for example: "upgrade now", "canary first", "hold and monitor").[来源标题](https://...).TBD, 待补充, lorem ipsum).INLINE_CODE, RUBYPH, @@...@@).OpenClaw is allowed when it is the article subject, not the publisher identity.0-2 each):
< 4, orEvidence/Action.news / hot / ai_news)# {{title}}
更新时间:{{timestamp}}
数据来源:{{source_set}}
> 说明:本期每条热点均包含「摘要 + 解读」。
## 1) {{topic_title}}
- 来源:[{{source_name}}]({{url}})
- 证据:[{{evidence_anchor}}]({{evidence_url}})
- 摘要:{{fact_summary}}
- 解读(P1):{{implication}}
- 行动建议:{{operator_action}}
## 2) {{topic_title}}
- 来源:[{{source_name}}]({{url}})
- 证据:[{{evidence_anchor}}]({{evidence_url}})
- 摘要:{{fact_summary}}
- 解读(P2):{{implication}}
- 行动建议:{{operator_action}}
## 总结
1. {{takeaway_1}}
2. {{takeaway_2}}
3. {{takeaway_3}}
blog-publish publish --dry-run --input <file>.jsonblog-publish publish --dry-run --input <file>.mdrg -n "(^|[^\\]\\()https?://" against generated markdown files.rg -n "INLINE_CODE|RUBYPH|@@[A-Z0-9_]+@@" against generated markdown files.Source + Evidence + Summary + Interpretation + Action.P0|P1|P2).pairId is missing, ensure slug is stable because server uses it for localization grouping.section is editorial when absent.blog-publish publish and blog-publish update both accept JSON payload files and markdown files with frontmatter.blog-publish post-list to discover existing locale + slug pairs before editing existing posts.blog-publish download to export stored content into editable markdown frontmatter, then feed that file back into blog-publish update.producer as internal metadata only; public surfaces must use publicSourceLabel or section label.pnpm add -g @leeguoo/blog-publishblog-publish login --api-base https://blog.misonote.com --sso-client-id misonote-blog-web --sso-redirect-uri https://blog.misonote.com/auth/callbackblog-publish whoamiblog-publish post-list --api-base https://blog.misonote.com --locale zhblog-publish download --api-base https://blog.misonote.com --locale zh --slug <slug> --output ./drafts/<slug>.zh.mdblog-publish upload --api-base https://blog.misonote.com --file ./assets/cover.png --markdown-onlyblog-publish upload --api-base https://blog.misonote.com --file ./assets/cover.png --filename cover-final.pngPUBLISH_API_TOKEN=<secret>blog-publish whoami --api-base https://blog.misonote.comblog-publish publish --dry-run --input <file>.jsonblog-publish publish --dry-run --input <file>.mdblog-publish publish --input <file>.jsonblog-publish publish --input <file>.mdblog-publish update --dry-run --input <file>.mdblog-publish update --input <file>.mdMEDIA_CDN_BASE_URL and emits image markdown URLs like:
https://img.leeguoo.com/media/<asset-id>/<filename>deduped: true and the existing asset.id instead of creating a duplicate.img.leeguoo.com as the canonical image host in generated markdown to leverage Cloudflare CDN + cache.pnpm clawhub:sync:dry-runpnpm clawhub:sync:allclawdhub sync all):
pnpm clawdhub:sync:dry-runpnpm clawdhub:sync:allBLOG_PUBLISH_SSO_CLIENT_ID, BLOG_PUBLISH_SSO_REDIRECT_URI) and rerun strict login command.PUBLISH_UNAUTHORIZED, stop interactive login attempts, rotate PUBLISH_API_TOKEN, then retry publish.