Skill: j3ffyang/blog-polish-en-astro-cn (version 1.0.12)

--- name: blog-polish-en-astro-cn description: Polish and translate a technical blog draft into a 1000–1200 word, 4-5 section Markdown article in English and Simplified Chinese (zh-CN), preserving technical terms and code blocks. Then convert the English edition into Astro markdown compatible author: Jeff Yang version: 1.0.12 tags: [openclaw, clawhub, blog, polish, translate, linux, markdown] metadata: openclaw: requires: ["jq"] platforms: ["linux", "darwin"] entrypoint: skill inputSchema: type: object properties: draftPath: type: string description: Path to the draft markdown file. default: "~/.openclaw/workspace/contentDraft/latestDraft.md" outputDir: type: string description: Directory where polished file is saved. default: "~/.openclaw/workspace/contentPolished/" required: ["draftPath", "outputDir"] outputSchema: type: object properties: outputPath: type: string description: Path to the final polished markdown file. required: ["outputPath"] workflow: - name: init description: Set defaults and create timestamp run: | draftPath=${draftPath:-~/.openclaw/workspace/contentDraft/latestDraft.md} outputDir=${outputDir:-~/.openclaw/workspace/contentPolished/} outputDir=$(eval echo "$outputDir") ts=$(date +"%y%m%d%H%M") save_state ts "$ts" save_state draftPath "$draftPath" save_state outputDir "$outputDir" - name: verify_input description: Check if draftPath exists run: | if [ ! -f "$draftPath" ]; then echo "Error: Draft not found at $draftPath" >&2 exit 1 fi - name: generate-slug description: Create Astro-compatible slug from filename or title run: | # Default: use input filename without extension slug=$(basename "$draftPath" .md | sed 's/^[0-9]\{10\}-//' | tr '[:upper:]' '[:lower:]' | tr -s '-' | sed 's/[^a-z0-9-]//g') # Better: extract title from first H1 header title=$(sed -n 's/# \(.*\)/\1/p' "$draftPath" | head -1 | tr '[:upper:]' '[:lower:]' | tr -s ' ' '-' | sed 's/[^a-z0-9-]//g' | sed 's/--*/-/g') # Use title if available, else filename slug="${title:-$slug}" # Fallback: timestamp slug="${slug:-$(date +%y%m%d%H%M)}" save_state slug "$slug" save_state title "$title" - name: prepare_output description: Define output filename variable run: | ts=$(load_state ts) slug=$(load_state slug) outputDir=$(load_state outputDir) outputPath="${outputDir}/${ts}-${slug}_eng.md" save_state outputPath "$outputPath" - name: read_draft inputs: ["draftPath"] outputs: ["draftText"] - name: polish description: "LLM: Polish grammar in English → Save to ${outputDir}/${ts}-${slug}_eng.md" inputs: ["draftText", "ts", "outputDir"] outputs: ["outputPath"] llm: true # or specific model set_output: engOutputPath post: | save_state engOutputPath "$outputPath" - name: translate description: "LLM: Polish grammar in Simplified Chinese > Translate in Simplified → Save to ${outputDir}/${ts}-${slug}_chn.md" inputs: ["outputPath", "ts", "outputDir"] outputs: ["outputPath"] llm: true # or specific model set_output: chnOutputPath post: | save_state chnOutputPath "$outputPath" - name: add-astro-frontmatter description: Inject standard Astro YAML header into polished file run: | slug=$(load_state slug) title=$(load_state title) ts=$(load_state ts) polishedFile=$(load_state engOutputPath) outputDir=$(load_state outputDir) outputFile="${outputDir}/${ts}-${slug}_astro.md" tagsYAML='["linux","ai","opensource","openclaw"]' cat > "$outputFile" << EOF --- title: "${title:-Generated by OpenClaw}" date: $(date -Iseconds) tags: ${tagsYAML} image: ./hero.png --- $(cat "$polishedFile") EOF mkdir -p "${outputDir}/${ts}-${slug}/images/" save_state outputPath "$outputFile" - name: finalize description: Emit polished path only run: | # outputPath=$(load_state outputPath) # jq -n --arg outputPath "$outputPath" '{ outputPath: $outputPath }' engOutputPath=$(load_state engOutputPath) chnOutputPath=$(load_state chnOutputPath) outputPath=$(load_state outputPath) jq -n \ --arg engOutputPath "$engOutputPath" \ --arg chnOutputPath "$chnOutputPath" \ --arg astroPath "$outputPath" \ '{ engOutputPath: $engOutputPath, chnOutputPath: $chnOutputPath, astroPath: $astroPath }' --- # Blog Polish (en-US and zh-CN) This skill polishes a technical blog draft and translates it to English and then Simplified Chinese while preserving technical accuracy. ## When to Use Use when the user asks to polish/translate a technical blog draft to zh-CN **without images**. Triggers: "polish my draft", "translate blog to Chinese", "enhance latestDraft.md". ## Defaults - `draftPath`: `~/.openclaw/workspace/contentDraft/latestDraft.md` - `outputDir`: `~/.openclaw/workspace/contentPolished/` - Output filename: `${ts}-polished.md` or `${ts}-${subject}.md` ## Workflow Summary Draft → Check → Polish (EN) → Translate (ZH) → Convert EN to Astro format → Emit path JSON. 1. **Resolve paths** + create timestamp (`date +"%y%m%d%H%M"`) 2. **Read draft** from `draftPath` 3. **Polish English**: Fix grammar/spelling, improve clarity, structure into 4-5 sections, target 1000-1200 words 4. **Translate to zh-CN**: Preserve code blocks, inline code, technical terms (`openclaw`, `skill`, `cli`) 5. **Save polished markdown** to `${outputDir}/${ts}-polished.md` 6. **Return**: `{ outputPath: "/full/path/to/file.md" }` ## Output ## Example **Input**: `~/.openclaw/workspace/contentDraft/latestDraft.md` { "outputPath": "~/.openclaw/workspace/contentPolished/2603142134-openclaw-skills.md" }


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)