[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KJS92G7F64S5D7XPW04CE6":3,"skill-same:01M6KJS92G7F64S5D7XPW04CE6":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"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":49,"updatedAt":50,"install":51,"resources":64},"01M6KJS92G7F64S5D7XPW04CE6","pptx-validation-fallback",null,"Validate PowerPoint files using python-pptx when read_file fails","AG064\u002FOpenSpace","AG064","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F184930299?v=4","01M6KHVFG7TB73NHX3RDYSTMH2","01M6KHVFMM7XA2PZA9Z83PHS3V",0,"MIT","https:\u002F\u002Fgithub.com\u002FAG064\u002FOpenSpace\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fpptx-validation-fallback\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000003","演示文稿","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[28,29,30,31,32,33,34,35,36,37,38],"pptx","validation","fallback","pptx validation fallback","python","validate","powerpoint","file","read","files","python-pptx","2026-11-10 10:12:30",false,"---\nname: pptx-validation-fallback\ndescription: Validate PowerPoint files using python-pptx when read_file fails\n---\n\n# PowerPoint Validation Fallback\n\n## When to Use\n\nUse this skill when `read_file` fails to properly read or validate PowerPoint (.pptx) files. This provides a reliable alternative for verifying presentation contents including slide count, titles, and structure.\n\n## Procedure\n\n### Step 1: Check if read_file Failed\n\nIf `read_file` with filetype `pptx` returns errors, incomplete content, or cannot extract slide information, proceed to the fallback method.\n\n### Step 2: Use run_shell with python-pptx\n\nExecute Python code via `run_shell` using the `python-pptx` library to inspect the presentation:\n\n```python\nfrom pptx import Presentation\n\n# Load the presentation\nprs = Presentation('path\u002Fto\u002Ffile.pptx')\n\n# Get basic info\nslide_count = len(prs.slides)\nprint(f\"Total slides: {slide_count}\")\n\n# Extract slide titles\nfor i, slide in enumerate(prs.slides):\n    if slide.shapes.title:\n        title = slide.shapes.title.text\n        print(f\"Slide {i+1}: {title}\")\n    else:\n        print(f\"Slide {i+1}: [No title]\")\n```\n\n### Step 3: Validate Structure\n\nCheck that the presentation meets expected requirements:\n\n```python\nfrom pptx import Presentation\n\nprs = Presentation('path\u002Fto\u002Ffile.pptx')\n\n# Validation checks\nexpected_slides = 10  # Adjust based on requirements\nactual_slides = len(prs.slides)\n\nif actual_slides >= expected_slides:\n    print(f\"✓ Slide count OK: {actual_slides} slides\")\nelse:\n    print(f\"✗ Insufficient slides: {actual_slides}\u002F{expected_slides}\")\n\n# Check for content on each slide\nfor i, slide in enumerate(prs.slides):\n    has_title = slide.shapes.title is not None\n    has_content = len(slide.shapes) > 1\n    print(f\"Slide {i+1}: title={has_title}, content={has_content}\")\n```\n\n### Step 4: Extract Detailed Content (Optional)\n\nFor deeper validation, extract text content from all shapes:\n\n```python\nfrom pptx import Presentation\n\nprs = Presentation('path\u002Fto\u002Ffile.pptx')\n\nfor i, slide in enumerate(prs.slides):\n    print(f\"\\n=== Slide {i+1} ===\")\n    for shape in slide.shapes:\n        if hasattr(shape, \"text\") and shape.text.strip():\n            print(shape.text)\n```\n\n## Expected Output\n\nSuccessful validation should provide:\n- Confirmed slide count\n- List of slide titles\n- Verification that each slide has expected content structure\n\n## Common Use Cases\n\n- Verifying generated presentations have correct number of slides\n- Confirming slide titles match required topics\n- Validating presentation structure before delivery\n- Debugging why read_file cannot parse a .pptx file\n\n## Dependencies\n\nThe `python-pptx` library must be available in the execution environment. Most Python environments support it via pip:\n\n```bash\npip install python-pptx\n```","# PowerPoint Validation Fallback\n\n## When to Use\n\nUse this skill when `read_file` fails to properly read or validate PowerPoint (.pptx) files. This provides a reliable alternative for verifying presentation contents including slide count, titles, and structure.\n\n## Procedure\n\n### Step 1: Check if read_file Failed\n\nIf `read_file` with filetype `pptx` returns errors, incomplete content, or cannot extract slide information, proceed to the fallback method.\n\n### Step 2: Use run_shell with python-pptx\n\nExecute Python code via `run_shell` using the `python-pptx` library to inspect the presentation:\n\n```python\nfrom pptx import Presentation\n\n# Load the presentation\nprs = Presentation('path\u002Fto\u002Ffile.pptx')\n\n# Get basic info\nslide_count = len(prs.slides)\nprint(f\"Total slides: {slide_count}\")\n\n# Extract slide titles\nfor i, slide in enumerate(prs.slides):\n    if slide.shapes.title:\n        title = slide.shapes.title.text\n        print(f\"Slide {i+1}: {title}\")\n    else:\n        print(f\"Slide {i+1}: [No title]\")\n```\n\n### Step 3: Validate Structure\n\nCheck that the presentation meets expected requirements:\n\n```python\nfrom pptx import Presentation\n\nprs = Presentation('path\u002Fto\u002Ffile.pptx')\n\n# Validation checks\nexpected_slides = 10  # Adjust based on requirements\nactual_slides = len(prs.slides)\n\nif actual_slides >= expected_slides:\n    print(f\"✓ Slide count OK: {actual_slides} slides\")\nelse:\n    print(f\"✗ Insufficient slides: {actual_slides}\u002F{expected_slides}\")\n\n# Check for content on each slide\nfor i, slide in enumerate(prs.slides):\n    has_title = slide.shapes.title is not None\n    has_content = len(slide.shapes) > 1\n    print(f\"Slide {i+1}: title={has_title}, content={has_content}\")\n```\n\n### Step 4: Extract Detailed Content (Optional)\n\nFor deeper validation, extract text content from all shapes:\n\n```python\nfrom pptx import Presentation\n\nprs = Presentation('path\u002Fto\u002Ffile.pptx')\n\nfor i, slide in enumerate(prs.slides):\n    print(f\"\\n=== Slide {i+1} ===\")\n    for shape in slide.shapes:\n        if hasattr(shape, \"text\") and shape.text.strip():\n            print(shape.text)\n```\n\n## Expected Output\n\nSuccessful validation should provide:\n- Confirmed slide count\n- List of slide titles\n- Verification that each slide has expected content structure\n\n## Common Use Cases\n\n- Verifying generated presentations have correct number of slides\n- Confirming slide titles match required topics\n- Validating presentation structure before delivery\n- Debugging why read_file cannot parse a .pptx file\n\n## Dependencies\n\nThe `python-pptx` library must be available in the execution environment. Most Python environments support it via pip:\n\n```bash\npip install python-pptx\n```",{"name":5,"description":7},"main","ff671ef61ed6587c49bd54c81cdc751c0b99e363","gdpval_bench\u002Fskills\u002Fpptx-validation-fallback","https:\u002F\u002Fgithub.com\u002FAG064\u002FOpenSpace","https:\u002F\u002Fgithub.com\u002FAG064","AG064, E.Mi.\r\n\r\nA person who thinks all the time, yet all they have to think is nothing. I want to improve the world and work on open source projects","2026-10-08 06:53:48",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add AG064\u002FOpenSpace --skill pptx-validation-fallback",{"tool":57,"command":58},"bunx","bunx skills add AG064\u002FOpenSpace --skill pptx-validation-fallback",{"tool":60,"command":61},"pnpm","pnpm dlx skills add AG064\u002FOpenSpace --skill pptx-validation-fallback","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FAG064\u002FOpenSpace\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fpptx-validation-fallback\u002FSKILL.md",true,[65],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},".skill_id","OTHER","其他",38,"https:\u002F\u002Fgithub.com\u002FAG064\u002FOpenSpace\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fpptx-validation-fallback\u002F.skill_id",[72,93,109,118,146,162],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":39},"01M6KKMPWA0B5SCCH766F8M5EA","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\u002FAG064\u002FOpenSpace\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-ts-check\u002FSKILL.md",[],[79,80,81,82,83,84,85,86,87,88,89,37,90,91,35,32,92],"write special chars ts check","check","write","filters","Existing","type-checking","for","errors","script","output","type","only","template","typescript",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":39},"01M6KKMJXVBNVEY3TRK055F4A7","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\u002FAG064\u002FOpenSpace\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-readback\u002FSKILL.md",[],[100,101,81,91,102,36,35,32,103,104,105,106,107,85,87,108],"readback","write special chars readback","cleanup","scripts","verification","via","post","helper","with",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":39},"01M6KKMEGX9M9NC105J0W3Q5B9","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\u002FAG064\u002FOpenSpace\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-heredoc\u002FSKILL.md",[],[81,116,32,85,105,91,117,35,87],"write special chars heredoc","shell",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":127,"publishedAt":39},"01M6KKM8EJ2AATVHZBNB916WT0","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\u002FAG064\u002FOpenSpace\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fworldmonitor-reference\u002FSKILL.md",[124],{"categoryNo":125,"categoryName":126,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000033","数据分析师",[128,129,130,131,92,132,133,134,135,136,85,137,138,139,140,141,142,143,144,145],"reference","worldmonitor","worldmonitor reference","dashboard","css","architecture","extracting","hierarchy","source","layer","panel","patterns","edge functions","integrations","open","api","data","scheduler",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":39},"01M6KKM39PHYK627F19GE2B9XN","virtual-list","Implement efficient virtual scrolling for rendering large lists with DOM recycling, chunk-based rendering, and performance optimizations","https:\u002F\u002Fgithub.com\u002FAG064\u002FOpenSpace\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fvirtual-list\u002FSKILL.md",[],[153,154,155,156,85,157,108,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":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":168,"publishedAt":39},"01M6KKKY7T2P61Y0JH54CDEJKQ","verify-directory-structure","Diagnose and resolve file access issues by first verifying the directory structure.","https:\u002F\u002Fgithub.com\u002FAG064\u002FOpenSpace\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fverify-directory-structure\u002FSKILL.md",[],[169,170,171,172,173,174,35,175,176,177],"directory","verify","structure","verify directory structure","access","first","issues","diagnose","file access"]