[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XBJ3SDS7QQWC4S52RF9MM4":3,"skill-same:01M6XBJ3SDS7QQWC4S52RF9MM4":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":27,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":13,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6XBJ3SDS7QQWC4S52RF9MM4","docx-dual-parse",null,"Extract text from DOCX files using shell or Python zipfile, with environment-aware fallback","UF-gzj\u002Fopenspace-claude-evolution","UF-gzj","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F272393507?v=4","01M6XBCZB755P01VVYGQWPYZY3","01M6XBCZFJA5AREA17WGETA3FW",0,"MIT","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fdocx-shell-parse-enhanced-4bba79\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[28,29,30,31,32,33,34,35,36,37,38],"docx","docx dual parse","parse","python","shell","text","extract","environment","files","fallback","with","2026-11-10 10:12:30",false,"---\nname: docx-dual-parse\ndescription: Extract text from DOCX files using shell or Python zipfile, with environment-aware fallback\n---\n\n# DOCX Dual-Method Text Extraction\n\nExtract text from Microsoft Word (.docx) files using either shell commands or Python's zipfile module, automatically selecting the most reliable method for your environment.\n\n## When to Use\n\n- Need reliable DOCX text extraction in varying environments (containers, sandboxes, minimal images)\n- Python environment may lack `python-docx` but has standard library access\n- Shell utilities (`unzip`, `sed`) may be unavailable or restricted\n- Want environment-aware fallback without manual intervention\n\n## Core Technique\n\nDOCX files are ZIP archives containing XML files. This skill provides two extraction methods:\n\n**Method A (Shell):** `unzip -p` + `sed` for tag stripping\n**Method B (Python):** `zipfile` module for archive access + string parsing\n\n## Environment Detection\n\nBefore extraction, detect which method will work:\n\n```bash\n# Quick shell method test\nif unzip -v >\u002Fdev\u002Fnull 2>&1; then\n    echo \"Shell method available\"\nelse\n    echo \"Shell method unavailable, try Python\"\nfi\n```\n\n```python\n# Quick Python method test\npython3 -c \"import zipfile; print('Python method available')\" 2>\u002Fdev\u002Fnull\n```\n\n## Method A: Shell-Based Extraction\n\nUse when `unzip` and `sed` are available and the environment allows shell operations.\n\n### Step-by-Step Instructions\n\n**1. Verify the DOCX file exists**\n```bash\nls -la document.docx\n```\n\n**2. Extract raw XML content**\n```bash\nunzip -p document.docx word\u002Fdocument.xml\n```\n\n**3. Strip XML tags from content**\n```bash\nunzip -p document.docx word\u002Fdocument.xml | sed -e 's\u002F\u003C[^>]*>\u002F\u002Fg'\n```\n\n**4. Clean up whitespace (optional)**\n```bash\nunzip -p document.docx word\u002Fdocument.xml | \\\n  sed -e 's\u002F\u003C[^>]*>\u002F\u002Fg' | \\\n  sed -e 's\u002F^[[:space:]]*\u002F\u002F' -e 's\u002F[[:space:]]*$\u002F\u002F' | \\\n  sed -e '\u002F^$\u002Fd'\n```\n\n**5. Save extracted text to file**\n```bash\nunzip -p document.docx word\u002Fdocument.xml | \\\n  sed -e 's\u002F\u003C[^>]*>\u002F\u002Fg' > output.txt\n```\n\n### Reusable Shell Function\n\n```bash\nparse_docx_shell() {\n    local file=\"$1\"\n    if [ ! -f \"$file\" ]; then\n        echo \"Error: File not found: $file\" >&2\n        return 1\n    fi\n    if ! command -v unzip >\u002Fdev\u002Fnull 2>&1; then\n        echo \"Error: unzip not available\" >&2\n        return 1\n    fi\n    unzip -p \"$file\" word\u002Fdocument.xml 2>\u002Fdev\u002Fnull | \\\n        sed -e 's\u002F\u003C[^>]*>\u002F\u002Fg' | \\\n        sed -e 's\u002F^[[:space:]]*\u002F\u002F' -e 's\u002F[[:space:]]*$\u002F\u002F' | \\\n        sed -e '\u002F^$\u002Fd'\n}\n\n# Usage: parse_docx_shell document.docx\n```\n\n## Method B: Python Zipfile Extraction\n\nUse when shell method fails or Python environment is more reliable than shell.\n\n### Step-by-Step Instructions\n\n**1. Verify the DOCX file exists**\n```bash\nls -la document.docx\n```\n\n**2. Run Python extraction via run_shell**\n```bash\nrun_shell 'python3 -c \"\nimport zipfile\nimport re\nwith zipfile.ZipFile(\\\"document.docx\\\", \\\"r\\\") as z:\n    content = z.read(\\\"word\u002Fdocument.xml\\\").decode(\\\"utf-8\\\")\n    text = re.sub(r\\\"\u003C[^>]*>\\\", \\\"\\\", content)\n    lines = [l.strip() for l in text.splitlines() if l.strip()]\n    for line in lines:\n        print(line)\n\"'\n```\n\n**3. Save to file by redirecting output**\n```bash\nrun_shell 'python3 -c \"\nimport zipfile\nimport re\nwith zipfile.ZipFile(\\\"document.docx\\\", \\\"r\\\") as z:\n    content = z.read(\\\"word\u002Fdocument.xml\\\").decode(\\\"utf-8\\\")\n    text = re.sub(r\\\"\u003C[^>]*>\\\", \\\"\\\", content)\n    lines = [l.strip() for l in text.splitlines() if l.strip()]\n    with open(\\\"output.txt\\\", \\\"w\\\") as f:\n        for line in lines:\n            f.write(line + \\\"\\\\n\\\")\n\"'\n```\n\n### Reusable Python Function (via run_shell)\n\n```bash\nparse_docx_python() {\n    local file=\"$1\"\n    local output=\"$2\"\n    if [ ! -f \"$file\" ]; then\n        echo \"Error: File not found: $file\" >&2\n        return 1\n    fi\n    run_shell \"python3 -c \\\"\nimport zipfile\nimport re\nimport sys\ntry:\n    with zipfile.ZipFile(\\\\'$file\\\\', \\\\'r\\\\') as z:\n        content = z.read(\\\\'word\u002Fdocument.xml\\\\').decode(\\\\'utf-8\\\\')\n        text = re.sub(r\\\\'\u003C[^>]*>\\\\', \\\\'\\\\', content)\n        lines = [l.strip() for l in text.splitlines() if l.strip()]\n        for line in lines:\n            print(line)\nexcept Exception as e:\n    print(f\\\\'Error: {e}\\\\', file=sys.stderr)\n    sys.exit(1)\n\\\"\"\n}\n\n# Usage: parse_docx_python document.docx\n# Or to file: parse_docx_python document.docx > output.txt\n```\n\n## Unified Dual-Method Function\n\nAutomatically tries shell first, falls back to Python if shell fails:\n\n```bash\nparse_docx() {\n    local file=\"$1\"\n    if [ ! -f \"$file\" ]; then\n        echo \"Error: File not found: $file\" >&2\n        return 1\n    fi\n    \n    # Try shell method first\n    if command -v unzip >\u002Fdev\u002Fnull 2>&1; then\n        result=$(unzip -p \"$file\" word\u002Fdocument.xml 2>\u002Fdev\u002Fnull | \\\n            sed -e 's\u002F\u003C[^>]*>\u002F\u002Fg' | \\\n            sed -e 's\u002F^[[:space:]]*\u002F\u002F' -e 's\u002F[[:space:]]*$\u002F\u002F' | \\\n            sed -e '\u002F^$\u002Fd')\n        if [ -n \"$result\" ]; then\n            echo \"$result\"\n            return 0\n        fi\n    fi\n    \n    # Fallback to Python method\n    python3 -c \"\nimport zipfile\nimport re\nimport sys\ntry:\n    with zipfile.ZipFile('$file', 'r') as z:\n        content = z.read('word\u002Fdocument.xml').decode('utf-8')\n        text = re.sub(r'\u003C[^>]*>', '', content)\n        lines = [l.strip() for l in text.splitlines() if l.strip()]\n        for line in lines:\n            print(line)\nexcept Exception as e:\n    print(f'Error: {e}', file=sys.stderr)\n    sys.exit(1)\n\"\n}\n\n# Usage: parse_docx document.docx\n```\n\n## Alternative: Extract to Temporary Directory\n\nFor complex parsing needs or debugging:\n\n**Shell approach:**\n```bash\ntmpdir=$(mktemp -d)\nunzip document.docx -d \"$tmpdir\"\ncat \"$tmpdir\u002Fword\u002Fdocument.xml\" | sed -e 's\u002F\u003C[^>]*>\u002F\u002Fg'\nrm -rf \"$tmpdir\"\n```\n\n**Python approach:**\n```bash\npython3 -c \"\nimport zipfile\nimport tempfile\nimport os\nwith zipfile.ZipFile('document.docx', 'r') as z:\n    tmpdir = tempfile.mkdtemp()\n    z.extractall(tmpdir)\n    with open(os.path.join(tmpdir, 'word\u002Fdocument.xml')) as f:\n        print(f.read())\n\"\n```\n\n## Verification\n\nConfirm extraction worked:\n\n```bash\n# Check output has content\nparse_docx document.docx | head -20\n\n# Verify file was created (if saving to file)\nls -la output.txt\nwc -l output.txt\n```\n\n## Method Selection Guide\n\n| Environment | Recommended Method |\n|-------------|-------------------|\n| Standard Linux with unzip | Shell (faster, simpler) |\n| Container without unzip | Python zipfile |\n| Sandboxed execution | Python via execute_code_sandbox or run_shell |\n| Minimal\u002Fbusybox images | Shell if unzip available |\n| Unknown\u002Frestricted | Use unified `parse_docx` function |\n\n## Limitations\n\n- Does not preserve formatting, images, or table structure\n- May include some residual XML entity references (&nbsp;, etc.)\n- Works best for simple text extraction needs\n- DOCX must be a valid Office Open XML format\n- Protected\u002Fencrypted DOCX files require additional handling\n\n## Error Handling Tips\n\n1. Always check file existence before parsing\n2. Test method availability in the target environment\n3. Capture stderr for debugging failed extractions\n4. Validate output is non-empty before proceeding\n5. Handle XML entity decoding if needed (sed can expand basic entities)\n","# DOCX Dual-Method Text Extraction\n\nExtract text from Microsoft Word (.docx) files using either shell commands or Python's zipfile module, automatically selecting the most reliable method for your environment.\n\n## When to Use\n\n- Need reliable DOCX text extraction in varying environments (containers, sandboxes, minimal images)\n- Python environment may lack `python-docx` but has standard library access\n- Shell utilities (`unzip`, `sed`) may be unavailable or restricted\n- Want environment-aware fallback without manual intervention\n\n## Core Technique\n\nDOCX files are ZIP archives containing XML files. This skill provides two extraction methods:\n\n**Method A (Shell):** `unzip -p` + `sed` for tag stripping\n**Method B (Python):** `zipfile` module for archive access + string parsing\n\n## Environment Detection\n\nBefore extraction, detect which method will work:\n\n```bash\n# Quick shell method test\nif unzip -v >\u002Fdev\u002Fnull 2>&1; then\n    echo \"Shell method available\"\nelse\n    echo \"Shell method unavailable, try Python\"\nfi\n```\n\n```python\n# Quick Python method test\npython3 -c \"import zipfile; print('Python method available')\" 2>\u002Fdev\u002Fnull\n```\n\n## Method A: Shell-Based Extraction\n\nUse when `unzip` and `sed` are available and the environment allows shell operations.\n\n### Step-by-Step Instructions\n\n**1. Verify the DOCX file exists**\n```bash\nls -la document.docx\n```\n\n**2. Extract raw XML content**\n```bash\nunzip -p document.docx word\u002Fdocument.xml\n```\n\n**3. Strip XML tags from content**\n```bash\nunzip -p document.docx word\u002Fdocument.xml | sed -e 's\u002F\u003C[^>]*>\u002F\u002Fg'\n```\n\n**4. Clean up whitespace (optional)**\n```bash\nunzip -p document.docx word\u002Fdocument.xml | \\\n  sed -e 's\u002F\u003C[^>]*>\u002F\u002Fg' | \\\n  sed -e 's\u002F^[[:space:]]*\u002F\u002F' -e 's\u002F[[:space:]]*$\u002F\u002F' | \\\n  sed -e '\u002F^$\u002Fd'\n```\n\n**5. Save extracted text to file**\n```bash\nunzip -p document.docx word\u002Fdocument.xml | \\\n  sed -e 's\u002F\u003C[^>]*>\u002F\u002Fg' > output.txt\n```\n\n### Reusable Shell Function\n\n```bash\nparse_docx_shell() {\n    local file=\"$1\"\n    if [ ! -f \"$file\" ]; then\n        echo \"Error: File not found: $file\" >&2\n        return 1\n    fi\n    if ! command -v unzip >\u002Fdev\u002Fnull 2>&1; then\n        echo \"Error: unzip not available\" >&2\n        return 1\n    fi\n    unzip -p \"$file\" word\u002Fdocument.xml 2>\u002Fdev\u002Fnull | \\\n        sed -e 's\u002F\u003C[^>]*>\u002F\u002Fg' | \\\n        sed -e 's\u002F^[[:space:]]*\u002F\u002F' -e 's\u002F[[:space:]]*$\u002F\u002F' | \\\n        sed -e '\u002F^$\u002Fd'\n}\n\n# Usage: parse_docx_shell document.docx\n```\n\n## Method B: Python Zipfile Extraction\n\nUse when shell method fails or Python environment is more reliable than shell.\n\n### Step-by-Step Instructions\n\n**1. Verify the DOCX file exists**\n```bash\nls -la document.docx\n```\n\n**2. Run Python extraction via run_shell**\n```bash\nrun_shell 'python3 -c \"\nimport zipfile\nimport re\nwith zipfile.ZipFile(\\\"document.docx\\\", \\\"r\\\") as z:\n    content = z.read(\\\"word\u002Fdocument.xml\\\").decode(\\\"utf-8\\\")\n    text = re.sub(r\\\"\u003C[^>]*>\\\", \\\"\\\", content)\n    lines = [l.strip() for l in text.splitlines() if l.strip()]\n    for line in lines:\n        print(line)\n\"'\n```\n\n**3. Save to file by redirecting output**\n```bash\nrun_shell 'python3 -c \"\nimport zipfile\nimport re\nwith zipfile.ZipFile(\\\"document.docx\\\", \\\"r\\\") as z:\n    content = z.read(\\\"word\u002Fdocument.xml\\\").decode(\\\"utf-8\\\")\n    text = re.sub(r\\\"\u003C[^>]*>\\\", \\\"\\\", content)\n    lines = [l.strip() for l in text.splitlines() if l.strip()]\n    with open(\\\"output.txt\\\", \\\"w\\\") as f:\n        for line in lines:\n            f.write(line + \\\"\\\\n\\\")\n\"'\n```\n\n### Reusable Python Function (via run_shell)\n\n```bash\nparse_docx_python() {\n    local file=\"$1\"\n    local output=\"$2\"\n    if [ ! -f \"$file\" ]; then\n        echo \"Error: File not found: $file\" >&2\n        return 1\n    fi\n    run_shell \"python3 -c \\\"\nimport zipfile\nimport re\nimport sys\ntry:\n    with zipfile.ZipFile(\\\\'$file\\\\', \\\\'r\\\\') as z:\n        content = z.read(\\\\'word\u002Fdocument.xml\\\\').decode(\\\\'utf-8\\\\')\n        text = re.sub(r\\\\'\u003C[^>]*>\\\\', \\\\'\\\\', content)\n        lines = [l.strip() for l in text.splitlines() if l.strip()]\n        for line in lines:\n            print(line)\nexcept Exception as e:\n    print(f\\\\'Error: {e}\\\\', file=sys.stderr)\n    sys.exit(1)\n\\\"\"\n}\n\n# Usage: parse_docx_python document.docx\n# Or to file: parse_docx_python document.docx > output.txt\n```\n\n## Unified Dual-Method Function\n\nAutomatically tries shell first, falls back to Python if shell fails:\n\n```bash\nparse_docx() {\n    local file=\"$1\"\n    if [ ! -f \"$file\" ]; then\n        echo \"Error: File not found: $file\" >&2\n        return 1\n    fi\n    \n    # Try shell method first\n    if command -v unzip >\u002Fdev\u002Fnull 2>&1; then\n        result=$(unzip -p \"$file\" word\u002Fdocument.xml 2>\u002Fdev\u002Fnull | \\\n            sed -e 's\u002F\u003C[^>]*>\u002F\u002Fg' | \\\n            sed -e 's\u002F^[[:space:]]*\u002F\u002F' -e 's\u002F[[:space:]]*$\u002F\u002F' | \\\n            sed -e '\u002F^$\u002Fd')\n        if [ -n \"$result\" ]; then\n            echo \"$result\"\n            return 0\n        fi\n    fi\n    \n    # Fallback to Python method\n    python3 -c \"\nimport zipfile\nimport re\nimport sys\ntry:\n    with zipfile.ZipFile('$file', 'r') as z:\n        content = z.read('word\u002Fdocument.xml').decode('utf-8')\n        text = re.sub(r'\u003C[^>]*>', '', content)\n        lines = [l.strip() for l in text.splitlines() if l.strip()]\n        for line in lines:\n            print(line)\nexcept Exception as e:\n    print(f'Error: {e}', file=sys.stderr)\n    sys.exit(1)\n\"\n}\n\n# Usage: parse_docx document.docx\n```\n\n## Alternative: Extract to Temporary Directory\n\nFor complex parsing needs or debugging:\n\n**Shell approach:**\n```bash\ntmpdir=$(mktemp -d)\nunzip document.docx -d \"$tmpdir\"\ncat \"$tmpdir\u002Fword\u002Fdocument.xml\" | sed -e 's\u002F\u003C[^>]*>\u002F\u002Fg'\nrm -rf \"$tmpdir\"\n```\n\n**Python approach:**\n```bash\npython3 -c \"\nimport zipfile\nimport tempfile\nimport os\nwith zipfile.ZipFile('document.docx', 'r') as z:\n    tmpdir = tempfile.mkdtemp()\n    z.extractall(tmpdir)\n    with open(os.path.join(tmpdir, 'word\u002Fdocument.xml')) as f:\n        print(f.read())\n\"\n```\n\n## Verification\n\nConfirm extraction worked:\n\n```bash\n# Check output has content\nparse_docx document.docx | head -20\n\n# Verify file was created (if saving to file)\nls -la output.txt\nwc -l output.txt\n```\n\n## Method Selection Guide\n\n| Environment | Recommended Method |\n|-------------|-------------------|\n| Standard Linux with unzip | Shell (faster, simpler) |\n| Container without unzip | Python zipfile |\n| Sandboxed execution | Python via execute_code_sandbox or run_shell |\n| Minimal\u002Fbusybox images | Shell if unzip available |\n| Unknown\u002Frestricted | Use unified `parse_docx` function |\n\n## Limitations\n\n- Does not preserve formatting, images, or table structure\n- May include some residual XML entity references (&nbsp;, etc.)\n- Works best for simple text extraction needs\n- DOCX must be a valid Office Open XML format\n- Protected\u002Fencrypted DOCX files require additional handling\n\n## Error Handling Tips\n\n1. Always check file existence before parsing\n2. Test method availability in the target environment\n3. Capture stderr for debugging failed extractions\n4. Validate output is non-empty before proceeding\n5. Handle XML entity decoding if needed (sed can expand basic entities)\n",{"name":5,"description":7},"main","0650921d63895de3997bc81f1ff1d0ac67032072","gdpval_bench\u002Fskills\u002Fdocx-shell-parse-enhanced-4bba79","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution","https:\u002F\u002Fgithub.com\u002FUF-gzj","2026-04-16 09:31:03",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add UF-gzj\u002Fopenspace-claude-evolution --skill docx-dual-parse",{"tool":56,"command":57},"bunx","bunx skills add UF-gzj\u002Fopenspace-claude-evolution --skill docx-dual-parse",{"tool":59,"command":60},"pnpm","pnpm dlx skills add UF-gzj\u002Fopenspace-claude-evolution --skill docx-dual-parse","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fdocx-shell-parse-enhanced-4bba79\u002FSKILL.md",true,[64],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},".skill_id","OTHER","其他",46,"https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fdocx-shell-parse-enhanced-4bba79\u002F.skill_id",[71,94,110,118,146,162],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":39},"01M6XCCXD3NCM2YKR3WNGBASPC","write-special-chars-ts-check","Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, plus a reliable TypeScript type-checking step that filters output to only the newly-written files to avoid being misled by pre-existing errors.","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-ts-check\u002FSKILL.md",[],[78,79,80,81,82,83,84,85,86,87,88,89,90,36,91,92,93,31],"check","write","write special chars ts check","typescript","filters","characters","Existing","type-checking","for","errors","script","output","type","only","template","file",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":39},"01M6XCCT7E3J922Q345PBGSHPN","write-special-chars-readback","Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, with mandatory post-write verification via read_file and cleanup of \u002Ftmp helper scripts.","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-readback\u002FSKILL.md",[],[101,102,79,93,103,31,104,105,106,107,108,92,109,38,83,86,88],"readback","write special chars readback","helper","post","via","scripts","cleanup","read","verification",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":39},"01M6XCCMQX1R8B6FECWB3P63T7","write-special-chars-heredoc","Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) by using a Python heredoc script executed via shell.","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-heredoc\u002FSKILL.md",[],[117,79,83,32,88,105,92,93,31,86],"write special chars heredoc",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":127,"publishedAt":39},"01M6XCCG41M994JJEX6VN52PEP","worldmonitor-reference","Curated architecture index of the WorldMonitor open-source dashboard. Reference for extracting patterns — vanilla TypeScript, Panel class hierarchy, service layer, CSS grid, API edge functions, refresh scheduler, and 60+ data source integrations.","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fworldmonitor-reference\u002FSKILL.md",[124],{"categoryNo":125,"categoryName":126,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000033","数据分析师",[128,129,130,131,132,81,133,134,135,136,137,86,138,139,140,141,142,143,144,145],"reference","worldmonitor","worldmonitor reference","architecture","dashboard","css","scheduler","layer","hierarchy","source","extracting","panel","patterns","edge functions","integrations","open","api","data",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":39},"01M6XCCCHWNKG2W4VH9E6A10HF","virtual-list","Implement efficient virtual scrolling for rendering large lists with DOM recycling, chunk-based rendering, and performance optimizations","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fvirtual-list\u002FSKILL.md",[],[153,154,155,156,86,157,38,158,159,160,161],"virtual list","list","virtual","chunk","dom","rendering","recycling","implement","performance",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":168,"publishedAt":39},"01M6XCC7X8PKMR2DEW91XGHYSV","verify-directory-structure","Diagnose and resolve file access issues by first verifying the directory structure.","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fverify-directory-structure\u002FSKILL.md",[],[169,170,171,172,173,174,93,175,176,177],"directory","verify directory structure","structure","verify","access","first","issues","diagnose","file access"]