[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HXRWTCKYCSCZAEAHHC7FSH":3,"skill-same:01M6HXRWTCKYCSCZAEAHHC7FSH":63},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":6,"ownerHtmlUrl":40,"ownerBlogUrl":41,"ownerDescription":6,"updatedAt":42,"install":43,"resources":56},"01M6HXRWTCKYCSCZAEAHHC7FSH","pdf-verification-cli-enhanced-657992",null,"HKUDS\u002FAgentPilot","HKUDS","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F118165258?v=4","01M6HW8VRNZP64G0P4MVJW2KKQ","✨Data Intelligence Lab@HKU✨","01M6HW8VWZVHBRHYH3T330PFWV",7989,"MIT","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fgdpval_bench\u002Fskills\u002Fpdf-verification-cli-enhanced-657992\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[23,24,25,26,27,28,29],"PDF","cli","verification","pdf verification cli enhanced 657992","pdf verification cli enhanced","pdf verification cli","pdf verification","2026-11-10 10:12:30",false,"---\nname: pdf-to-report-workflow\ndescription: Complete PDF workflow: extract content from source PDFs and generate new PDF reports using command-line tools\n---\n\n# PDF-to-Report Generation Workflow\n\nThis skill provides a complete end-to-end workflow for processing PDF documents: extracting content from source PDFs, assembling report data, and generating new PDF output files—all using command-line tools when Python libraries are unavailable.\n\n## When to Use This Skill\n\n- Need to extract text\u002Fcontent from existing PDFs\n- Need to create new PDF reports from extracted data\n- Need to combine multiple PDF sources into a single report\n- PyPDF2, reportlab, or similar Python PDF libraries are unavailable\n- Working in minimal\u002Fcontainerized environments\n\n## Core Tools\n\n### Extraction Tools (poppler-utils)\n\n#### 1. `pdfinfo` - Extract PDF Metadata\n\n```bash\n# Get full PDF info\npdfinfo document.pdf\n\n# Get only page count\npdfinfo document.pdf | grep Pages\n\n# Extract page count as a number\npdfinfo document.pdf | grep Pages | awk '{print $2}'\n```\n\n**Key metadata fields:**\n- `Pages`: Number of pages in the PDF\n- `Title`: Document title\n- `Author`: Document author\n- `CreationDate`: When the PDF was created\n- `ModDate`: Last modification date\n\n#### 2. `pdftotext` - Extract Text Content\n\n```bash\n# Extract all text to stdout\npdftotext document.pdf -\n\n# Extract text to a file\npdftotext document.pdf output.txt\n\n# Extract text from specific page range\npdftotext -f 1 -l 3 document.pdf output.txt\n\n# Preserve layout (rough formatting)\npdftotext -layout document.pdf output.txt\n```\n\n### Generation Tools (Choose based on availability)\n\n#### 1. `enscript` + `ps2pdf` - Text to PDF (Recommended)\n\nConvert plain text to PDF via PostScript:\n\n```bash\n# Install if needed\napt-get install -y enscript ghostscript\n\n# Convert text file to PDF\nenscript -B -o output.ps input.txt && ps2pdf output.ps output.pdf\n\n# One-liner\nenscript -B input.txt -o - | ps2pdf - output.pdf\n```\n\n**Options:**\n- `-B`: No borders\n- `-o`: Output file (- for stdout)\n- `-f`: Font specification (e.g., `-fCourier10`)\n\n#### 2. `wkhtmltopdf` - HTML to PDF\n\nConvert HTML to PDF with full formatting support:\n\n```bash\n# Install if needed\napt-get install -y wkhtmltopdf\n\n# Convert HTML file to PDF\nwkhtmltopdf input.html output.pdf\n\n# Convert from stdin\necho \"\u003Chtml>\u003Cbody>\u003Ch1>Report\u003C\u002Fh1>\u003C\u002Fbody>\u003C\u002Fhtml>\" | wkhtmltopdf - output.pdf\n\n# With options for better quality\nwkhtmltopdf --page-size A4 --margin-top 25mm input.html output.pdf\n```\n\n#### 3. `libreoffice` - Document Conversion\n\nConvert various document formats to PDF:\n\n```bash\n# Install if needed\napt-get install -y libreoffice-writer\n\n# Convert to PDF (headless mode)\nlibreoffice --headless --convert-to pdf input.docx\nlibreoffice --headless --convert-to pdf input.odt\nlibreoffice --headless --convert-to pdf input.txt\n```\n\n#### 4. `pandoc` - Universal Document Converter\n\nConvert between many formats including PDF:\n\n```bash\n# Install if needed\napt-get install -y pandoc texlive-latex-base\n\n# Convert markdown to PDF\npandoc input.md -o output.pdf\n\n# Convert text to PDF\npandoc input.txt -o output.pdf\n\n# With custom template\npandoc input.md --template=template.tex -o output.pdf\n```\n\n#### 5. `pdftk` - PDF Manipulation\n\nMerge, split, or modify existing PDFs:\n\n```bash\n# Install if needed\napt-get install -y pdftk\n\n# Merge multiple PDFs\npdftk file1.pdf file2.pdf file3.pdf cat output merged.pdf\n\n# Extract pages\npdftk input.pdf cat 1-3 output extracted.pdf\n\n# Split into individual pages\npdftk input.pdf burst\n```\n\n## Complete Workflow\n\n### Phase 1: Check Tool Availability\n\n```bash\n# Check extraction tools\nwhich pdfinfo || echo \"pdfinfo not found\"\nwhich pdftotext || echo \"pdftotext not found\"\n\n# Check generation tools (at least one should be available)\nwhich enscript || echo \"enscript not found\"\nwhich wkhtmltopdf || echo \"wkhtmltopdf not found\"\nwhich libreoffice || echo \"libreoffice not found\"\nwhich pandoc || echo \"pandoc not found\"\n```\n\n### Phase 2: Install Missing Tools\n\n```bash\n# Debian\u002FUbuntu - Full installation\napt-get update && apt-get install -y poppler-utils enscript ghostscript\n\n# Or install wkhtmltopdf instead\napt-get install -y poppler-utils wkhtmltopdf\n\n# Or install pandoc for markdown-based reports\napt-get install -y poppler-utils pandoc texlive-latex-base\n```\n\n### Phase 3: Extract Content from Source PDFs\n\n```bash\n# Create working directory\nmkdir -p workdir\u002Fextracted\ncd workdir\n\n# Extract text from each source PDF\nfor pdf in ..\u002Fsource_pdfs\u002F*.pdf; do\n    filename=$(basename \"$pdf\" .pdf)\n    pdftotext -layout \"$pdf\" \"extracted\u002F${filename}.txt\"\n    echo \"Extracted: $filename\"\ndone\n\n# Verify extraction\nfor txt in extracted\u002F*.txt; do\n    lines=$(wc -l \u003C \"$txt\")\n    echo \"$txt: $lines lines\"\ndone\n```\n\n### Phase 4: Assemble Report Content\n\n```bash\n# Create report from extracted content\ncat > final_report.txt \u003C\u003C 'EOF'\n===========================================\nNEW CASE CREATION REPORT\nGenerated: $(date)\n===========================================\n\nEOF\n\n# Add sections from each source\necho \"SECTION 1: CASE CREATION GUIDE\" >> final_report.txt\necho \"-------------------------------------------\" >> final_report.txt\ncat extracted\u002Fcase_creation_guide.txt >> final_report.txt\necho \"\" >> final_report.txt\n\necho \"SECTION 2: CASE DETAIL SUMMARY\" >> final_report.txt\necho \"-------------------------------------------\" >> final_report.txt\ncat extracted\u002Fcase_detail_summary.txt >> final_report.txt\necho \"\" >> final_report.txt\n\necho \"SECTION 3: PATERNITY TEST RESULTS\" >> final_report.txt\necho \"-------------------------------------------\" >> final_report.txt\ncat extracted\u002Fpaternity_test_results.txt >> final_report.txt\necho \"\" >> final_report.txt\n\necho \"SECTION 4: ORDER OF CHILD SUPPORT\" >> final_report.txt\necho \"-------------------------------------------\" >> final_report.txt\ncat extracted\u002Forder_of_child_support.txt >> final_report.txt\necho \"\" >> final_report.txt\n\necho \"===========================================\" >> final_report.txt\necho \"END OF REPORT\" >> final_report.txt\necho \"===========================================\" >> final_report.txt\n```\n\n### Phase 5: Generate PDF Report\n\n**Option A: Using enscript + ps2pdf**\n\n```bash\n# Convert text to PDF\nenscript -B -fCourier10 -o report.ps final_report.txt && ps2pdf report.ps final_report.pdf\n\n# Or one-liner\nenscript -B final_report.txt -o - | ps2pdf - final_report.pdf\n\n# Verify output\npdfinfo final_report.pdf | grep Pages\n```\n\n**Option B: Using wkhtmltopdf (with HTML formatting)**\n\n```bash\n# Convert text to simple HTML\ncat > final_report.html \u003C\u003C 'EOF'\n\u003C!DOCTYPE html>\n\u003Chtml>\n\u003Chead>\n    \u003Cstyle>\n        body { font-family: monospace; margin: 40px; }\n        h1 { text-align: center; }\n        .section { margin-top: 30px; }\n    \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\nEOF\n\n# Add content (escape HTML special chars if needed)\nsed 's\u002F&\u002F\\&amp;\u002Fg; s\u002F\u003C\u002F\\&lt;\u002Fg; s\u002F>\u002F\\&gt;\u002Fg' final_report.txt | \\\n    sed 's\u002F^=\\{30,\\}\u002F\u003Ch1>\u002F; s\u002F$\u002F\u003C\\\u002Fh1>\u002F; \u002F^\u003Ch1>\u002F!s\u002F^\u002F--\u003Cbr>\u002F; \u002F^----\u002F!s\u002F$\u002F\u003Cbr>\u002F' >> final_report.html\n\necho \"\u003C\u002Fbody>\u003C\u002Fhtml>\" >> final_report.html\n\n# Convert to PDF\nwkhtmltopdf --page-size A4 --margin-top 25mm final_report.html final_report.pdf\n```\n\n**Option C: Using pandoc (markdown format)**\n\n```bash\n# Create markdown version\ncat > final_report.md \u003C\u003C 'EOF'\n# New Case Creation Report\n\n*Generated: $(date)*\n\n---\n\nEOF\n\n# Add sections with markdown formatting\nfor txt in extracted\u002F*.txt; do\n    filename=$(basename \"$txt\" .txt)\n    echo \"## $filename\" >> final_report.md\n    echo \"\" >> final_report.md\n    cat \"$txt\" >> final_report.md\n    echo \"\" >> final_report.md\ndone\n\n# Convert to PDF\npandoc final_report.md -o final_report.pdf\n```\n\n### Phase 6: Verify Generated Report\n\n```bash\n# Check PDF was created\nif [ -f final_report.pdf ]; then\n    echo \"✓ PDF created successfully\"\n    \n    # Verify page count\n    pages=$(pdfinfo final_report.pdf | grep Pages | awk '{print $2}')\n    echo \"  Pages: $pages\"\n    \n    # Verify file size\n    size=$(ls -lh final_report.pdf | awk '{print $5}')\n    echo \"  Size: $size\"\n    \n    # Verify content\n    if pdftotext final_report.pdf - | grep -q \"CASE CREATION REPORT\"; then\n        echo \"✓ Content verified\"\n    else\n        echo \"✗ Content verification failed\"\n    fi\nelse\n    echo \"✗ PDF generation failed\"\n    exit 1\nfi\n```\n\n## Python Integration Example\n\n```python\nimport subprocess\nimport os\nfrom datetime import datetime\n\nclass PDFReportGenerator:\n    def __init__(self, workdir=\"workdir\"):\n        self.workdir = workdir\n        os.makedirs(workdir, exist_ok=True)\n        os.makedirs(f\"{workdir}\u002Fextracted\", exist_ok=True)\n    \n    def check_tools(self):\n        \"\"\"Check available tools and return best option\"\"\"\n        tools = {}\n        for tool in ['pdfinfo', 'pdftotext', 'enscript', 'ps2pdf', \n                     'wkhtmltopdf', 'pandoc']:\n            result = subprocess.run(['which', tool], \n                                   capture_output=True, text=True)\n            tools[tool] = result.returncode == 0\n        return tools\n    \n    def extract_pdf(self, pdf_path, output_txt=None):\n        \"\"\"Extract text from PDF\"\"\"\n        if output_txt is None:\n            output_txt = f\"{self.workdir}\u002Fextracted\u002F{os.path.basename(pdf_path).replace('.pdf', '.txt')}\"\n        \n        result = subprocess.run(\n            ['pdftotext', '-layout', pdf_path, output_txt],\n            capture_output=True, text=True\n        )\n        \n        if result.returncode != 0:\n            raise Exception(f\"Extraction failed: {result.stderr}\")\n        \n        return output_txt\n    \n    def generate_report_pdf(self, text_content, output_pdf):\n        \"\"\"Generate PDF from text content using best available tool\"\"\"\n        tools = self.check_tools()\n        \n        # Write content to temp file\n        temp_txt = f\"{self.workdir}\u002Ftemp_report.txt\"\n        with open(temp_txt, 'w') as f:\n            f.write(text_content)\n        \n        if tools.get('enscript') and tools.get('ps2pdf'):\n            # Use enscript + ps2pdf\n            temp_ps = f\"{self.workdir}\u002Ftemp_report.ps\"\n            subprocess.run(['enscript', '-B', '-fCourier10', '-o', temp_ps, temp_txt], check=True)\n            subprocess.run(['ps2pdf', temp_ps, output_pdf], check=True)\n            return output_pdf\n        \n        elif tools.get('pandoc'):\n            # Use pandoc\n            temp_md = f\"{self.workdir}\u002Ftemp_report.md\"\n            with open(temp_md, 'w') as f:\n                f.write(f\"# Report\\n\\nGenerated: {datetime.now()}\\n\\n---\\n\\n\")\n                f.write(text_content)\n            subprocess.run(['pandoc', temp_md, '-o', output_pdf], check=True)\n            return output_pdf\n        \n        elif tools.get('wkhtmltopdf'):\n            # Use wkhtmltopdf\n            temp_html = f\"{self.workdir}\u002Ftemp_report.html\"\n            with open(temp_html, 'w') as f:\n                f.write(f\"\"\"\u003C!DOCTYPE html>\n\u003Chtml>\u003Chead>\u003Cstyle>body{{font-family:monospace;margin:40px;}}\u003C\u002Fstyle>\u003C\u002Fhead>\n\u003Cbody>\u003Cpre>{text_content}\u003C\u002Fpre>\u003C\u002Fbody>\u003C\u002Fhtml>\"\"\")\n            subprocess.run(['wkhtmltopdf', temp_html, output_pdf], check=True)\n            return output_pdf\n        \n        else:\n            raise Exception(\"No PDF generation tools available\")\n    \n    def get_pdf_info(self, pdf_path):\n        \"\"\"Get PDF metadata\"\"\"\n        result = subprocess.run(['pdfinfo', pdf_path], \n                               capture_output=True, text=True)\n        info = {}\n        for line in result.stdout.split('\\n'):\n            if ':' in line:\n                key, value = line.split(':', 1)\n                info[key.strip()] = value.strip()\n        return info\n    \n    def create_report_from_pdfs(self, source_pdfs, output_pdf, report_title=\"Report\"):\n        \"\"\"Complete workflow: extract from multiple PDFs and create report\"\"\"\n        extracted_texts = []\n        \n        # Extract from each source\n        for pdf in source_pdfs:\n            txt = self.extract_pdf(pdf)\n            with open(txt, 'r') as f:\n                content = f.read()\n            extracted_texts.append((os.path.basename(pdf), content))\n        \n        # Assemble report\n        report_content = f\"\"\"{'='*50}\n{report_title}\nGenerated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n{'='*50}\n\n\"\"\"\n        \n        for filename, content in extracted_texts:\n            report_content += f\"\\n{'-'*50}\\n\"\n            report_content += f\"SOURCE: {filename}\\n\"\n            report_content += f\"{'-'*50}\\n\\n\"\n            report_content += content + \"\\n\"\n        \n        report_content += f\"\\n{'='*50}\\nEND OF REPORT\\n{'='*50}\\n\"\n        \n        # Generate PDF\n        return self.generate_report_pdf(report_content, output_pdf)\n\n# Usage example\nif __name__ == \"__main__\":\n    generator = PDFReportGenerator()\n    \n    source_pdfs = [\n        \"source_pdfs\u002Fcase_creation_guide.pdf\",\n        \"source_pdfs\u002Fcase_detail_summary.pdf\",\n        \"source_pdfs\u002Fpaternity_test_results.pdf\",\n        \"source_pdfs\u002Forder_of_child_support.pdf\"\n    ]\n    \n    output = generator.create_report_from_pdfs(\n        source_pdfs, \n        \"final_report.pdf\",\n        \"NEW CASE CREATION REPORT\"\n    )\n    \n    print(f\"Report created: {output}\")\n    print(f\"Pages: {generator.get_pdf_info(output).get('Pages', 'Unknown')}\")\n```\n\n## Common Workflows\n\n| Task | Command Sequence |\n|------|------------------|\n| Extract single PDF | `pdftotext -layout file.pdf output.txt` |\n| Extract multiple PDFs | `for f in *.pdf; do pdftotext -layout \"$f\" \"${f%.pdf}.txt\"; done` |\n| Text to PDF (enscript) | `enscript -B input.txt -o - \\| ps2pdf - output.pdf` |\n| Text to PDF (pandoc) | `pandoc input.md -o output.pdf` |\n| Merge PDFs | `pdftk file1.pdf file2.pdf cat output merged.pdf` |\n| Verify PDF | `pdfinfo file.pdf \\| grep Pages` |\n| Check PDF content | `pdftotext file.pdf - \\| grep -i \"keyword\"` |\n\n## Troubleshooting\n\n**No PDF generation tools available**\n- Install at least one: `apt-get install enscript ghostscript` (simplest)\n- Or: `apt-get install pandoc texlive-latex-base` (best formatting)\n- Or: `apt-get install wkhtmltopdf` (HTML support)\n\n**`enscript` produces garbled output**\n- Check character encoding: `file input.txt`\n- Try adding `-r` option for raw output\n- Use `-fCourier10` for fixed-width font\n\n**`ps2pdf` produces large files**\n- Add compression: `ps2pdf -dPDFSETTINGS=\u002Febook input.ps output.pdf`\n- Or: `ps2pdf -dPDFSETTINGS=\u002Fscreen input.ps output.pdf` (smaller, lower quality)\n\n**`pdftotext` returns empty output**\n- PDF may be image-only (scanned) - requires OCR tools\n- PDF may be encrypted\u002Fpassword-protected\n- Try `pdftotext -layout` for better extraction\n\n**Report formatting looks poor**\n- Use `pandoc` with markdown for better formatting\n- Use `wkhtmltopdf` with HTML\u002FCSS for full control\n- Add `-layout` flag to `pdftotext` to preserve structure\n\n## Best Practices\n\n1. **Always verify tools before starting** - Check which generation tools are available\n2. **Preserve layout during extraction** - Use `pdftotext -layout` for better structure\n3. **Test with sample content first** - Generate a test PDF before full report\n4. **Validate output PDF** - Check page count and verify content was included\n5. **Handle special characters** - Escape HTML entities when using wkhtmltopdf\n6. **Clean up temporary files** - Remove intermediate .ps, .html, .txt files after generation\n7. **Document tool choices** - Note which generation method was used for reproducibility\n\n## Quick Start Template\n\n```bash\n#!\u002Fbin\u002Fbash\n# Quick PDF Report Generation Script\n\nset -e\n\n# Configuration\nSOURCE_DIR=\"${1:-source_pdfs}\"\nOUTPUT_PDF=\"${2:-final_report.pdf}\"\nWORKDIR=\"workdir_$$\"\n\n# Setup\nmkdir -p \"$WORKDIR\u002Fextracted\"\ntrap \"rm -rf $WORKDIR\" EXIT\n\n# Check tools\nfor tool in pdfinfo pdftotext; do\n    if ! which \"$tool\" &>\u002Fdev\u002Fnull; then\n        echo \"ERROR: $tool not found. Install poppler-utils.\"\n        exit 1\n    fi\ndone\n\n# Extract all source PDFs\necho \"Extracting PDFs from $SOURCE_DIR...\"\nfor pdf in \"$SOURCE_DIR\"\u002F*.pdf; do\n    [ -f \"$pdf\" ] || continue\n    name=$(basename \"$pdf\" .pdf)\n    pdftotext -layout \"$pdf\" \"$WORKDIR\u002Fextracted\u002F${name}.txt\"\n    echo \"  Extracted: $name\"\ndone\n\n# Assemble report\necho \"Assembling report...\"\n{\n    echo \"========================================\"\n    echo \"REPORT GENERATED: $(date)\"\n    echo \"========================================\"\n    echo \"\"\n    for txt in \"$WORKDIR\u002Fextracted\"\u002F*.txt; do\n        [ -f \"$txt\" ] || continue\n        name=$(basename \"$txt\" .txt)\n        echo \"=== $name ===\"\n        cat \"$txt\"\n        echo \"\"\n    done\n    echo \"========================================\"\n    echo \"END OF REPORT\"\n} > \"$WORKDIR\u002Freport.txt\"\n\n# Generate PDF\necho \"Generating PDF...\"\nif which enscript &>\u002Fdev\u002Fnull && which ps2pdf &>\u002Fdev\u002Fnull; then\n    enscript -B \"$WORKDIR\u002Freport.txt\" -o - | ps2pdf - \"$OUTPUT_PDF\"\nelif which pandoc &>\u002Fdev\u002Fnull; then\n    pandoc \"$WORKDIR\u002Freport.txt\" -o \"$OUTPUT_PDF\"\nelse\n    echo \"ERROR: No PDF generation tool available\"\n    exit 1\nfi\n\n# Verify\necho \"Verifying output...\"\npages=$(pdfinfo \"$OUTPUT_PDF\" | grep Pages | awk '{print $2}')\necho \"✓ Report created: $OUTPUT_PDF ($pages pages)\"\n```\n","# PDF-to-Report Generation Workflow\n\nThis skill provides a complete end-to-end workflow for processing PDF documents: extracting content from source PDFs, assembling report data, and generating new PDF output files—all using command-line tools when Python libraries are unavailable.\n\n## When to Use This Skill\n\n- Need to extract text\u002Fcontent from existing PDFs\n- Need to create new PDF reports from extracted data\n- Need to combine multiple PDF sources into a single report\n- PyPDF2, reportlab, or similar Python PDF libraries are unavailable\n- Working in minimal\u002Fcontainerized environments\n\n## Core Tools\n\n### Extraction Tools (poppler-utils)\n\n#### 1. `pdfinfo` - Extract PDF Metadata\n\n```bash\n# Get full PDF info\npdfinfo document.pdf\n\n# Get only page count\npdfinfo document.pdf | grep Pages\n\n# Extract page count as a number\npdfinfo document.pdf | grep Pages | awk '{print $2}'\n```\n\n**Key metadata fields:**\n- `Pages`: Number of pages in the PDF\n- `Title`: Document title\n- `Author`: Document author\n- `CreationDate`: When the PDF was created\n- `ModDate`: Last modification date\n\n#### 2. `pdftotext` - Extract Text Content\n\n```bash\n# Extract all text to stdout\npdftotext document.pdf -\n\n# Extract text to a file\npdftotext document.pdf output.txt\n\n# Extract text from specific page range\npdftotext -f 1 -l 3 document.pdf output.txt\n\n# Preserve layout (rough formatting)\npdftotext -layout document.pdf output.txt\n```\n\n### Generation Tools (Choose based on availability)\n\n#### 1. `enscript` + `ps2pdf` - Text to PDF (Recommended)\n\nConvert plain text to PDF via PostScript:\n\n```bash\n# Install if needed\napt-get install -y enscript ghostscript\n\n# Convert text file to PDF\nenscript -B -o output.ps input.txt && ps2pdf output.ps output.pdf\n\n# One-liner\nenscript -B input.txt -o - | ps2pdf - output.pdf\n```\n\n**Options:**\n- `-B`: No borders\n- `-o`: Output file (- for stdout)\n- `-f`: Font specification (e.g., `-fCourier10`)\n\n#### 2. `wkhtmltopdf` - HTML to PDF\n\nConvert HTML to PDF with full formatting support:\n\n```bash\n# Install if needed\napt-get install -y wkhtmltopdf\n\n# Convert HTML file to PDF\nwkhtmltopdf input.html output.pdf\n\n# Convert from stdin\necho \"\u003Chtml>\u003Cbody>\u003Ch1>Report\u003C\u002Fh1>\u003C\u002Fbody>\u003C\u002Fhtml>\" | wkhtmltopdf - output.pdf\n\n# With options for better quality\nwkhtmltopdf --page-size A4 --margin-top 25mm input.html output.pdf\n```\n\n#### 3. `libreoffice` - Document Conversion\n\nConvert various document formats to PDF:\n\n```bash\n# Install if needed\napt-get install -y libreoffice-writer\n\n# Convert to PDF (headless mode)\nlibreoffice --headless --convert-to pdf input.docx\nlibreoffice --headless --convert-to pdf input.odt\nlibreoffice --headless --convert-to pdf input.txt\n```\n\n#### 4. `pandoc` - Universal Document Converter\n\nConvert between many formats including PDF:\n\n```bash\n# Install if needed\napt-get install -y pandoc texlive-latex-base\n\n# Convert markdown to PDF\npandoc input.md -o output.pdf\n\n# Convert text to PDF\npandoc input.txt -o output.pdf\n\n# With custom template\npandoc input.md --template=template.tex -o output.pdf\n```\n\n#### 5. `pdftk` - PDF Manipulation\n\nMerge, split, or modify existing PDFs:\n\n```bash\n# Install if needed\napt-get install -y pdftk\n\n# Merge multiple PDFs\npdftk file1.pdf file2.pdf file3.pdf cat output merged.pdf\n\n# Extract pages\npdftk input.pdf cat 1-3 output extracted.pdf\n\n# Split into individual pages\npdftk input.pdf burst\n```\n\n## Complete Workflow\n\n### Phase 1: Check Tool Availability\n\n```bash\n# Check extraction tools\nwhich pdfinfo || echo \"pdfinfo not found\"\nwhich pdftotext || echo \"pdftotext not found\"\n\n# Check generation tools (at least one should be available)\nwhich enscript || echo \"enscript not found\"\nwhich wkhtmltopdf || echo \"wkhtmltopdf not found\"\nwhich libreoffice || echo \"libreoffice not found\"\nwhich pandoc || echo \"pandoc not found\"\n```\n\n### Phase 2: Install Missing Tools\n\n```bash\n# Debian\u002FUbuntu - Full installation\napt-get update && apt-get install -y poppler-utils enscript ghostscript\n\n# Or install wkhtmltopdf instead\napt-get install -y poppler-utils wkhtmltopdf\n\n# Or install pandoc for markdown-based reports\napt-get install -y poppler-utils pandoc texlive-latex-base\n```\n\n### Phase 3: Extract Content from Source PDFs\n\n```bash\n# Create working directory\nmkdir -p workdir\u002Fextracted\ncd workdir\n\n# Extract text from each source PDF\nfor pdf in ..\u002Fsource_pdfs\u002F*.pdf; do\n    filename=$(basename \"$pdf\" .pdf)\n    pdftotext -layout \"$pdf\" \"extracted\u002F${filename}.txt\"\n    echo \"Extracted: $filename\"\ndone\n\n# Verify extraction\nfor txt in extracted\u002F*.txt; do\n    lines=$(wc -l \u003C \"$txt\")\n    echo \"$txt: $lines lines\"\ndone\n```\n\n### Phase 4: Assemble Report Content\n\n```bash\n# Create report from extracted content\ncat > final_report.txt \u003C\u003C 'EOF'\n===========================================\nNEW CASE CREATION REPORT\nGenerated: $(date)\n===========================================\n\nEOF\n\n# Add sections from each source\necho \"SECTION 1: CASE CREATION GUIDE\" >> final_report.txt\necho \"-------------------------------------------\" >> final_report.txt\ncat extracted\u002Fcase_creation_guide.txt >> final_report.txt\necho \"\" >> final_report.txt\n\necho \"SECTION 2: CASE DETAIL SUMMARY\" >> final_report.txt\necho \"-------------------------------------------\" >> final_report.txt\ncat extracted\u002Fcase_detail_summary.txt >> final_report.txt\necho \"\" >> final_report.txt\n\necho \"SECTION 3: PATERNITY TEST RESULTS\" >> final_report.txt\necho \"-------------------------------------------\" >> final_report.txt\ncat extracted\u002Fpaternity_test_results.txt >> final_report.txt\necho \"\" >> final_report.txt\n\necho \"SECTION 4: ORDER OF CHILD SUPPORT\" >> final_report.txt\necho \"-------------------------------------------\" >> final_report.txt\ncat extracted\u002Forder_of_child_support.txt >> final_report.txt\necho \"\" >> final_report.txt\n\necho \"===========================================\" >> final_report.txt\necho \"END OF REPORT\" >> final_report.txt\necho \"===========================================\" >> final_report.txt\n```\n\n### Phase 5: Generate PDF Report\n\n**Option A: Using enscript + ps2pdf**\n\n```bash\n# Convert text to PDF\nenscript -B -fCourier10 -o report.ps final_report.txt && ps2pdf report.ps final_report.pdf\n\n# Or one-liner\nenscript -B final_report.txt -o - | ps2pdf - final_report.pdf\n\n# Verify output\npdfinfo final_report.pdf | grep Pages\n```\n\n**Option B: Using wkhtmltopdf (with HTML formatting)**\n\n```bash\n# Convert text to simple HTML\ncat > final_report.html \u003C\u003C 'EOF'\n\u003C!DOCTYPE html>\n\u003Chtml>\n\u003Chead>\n    \u003Cstyle>\n        body { font-family: monospace; margin: 40px; }\n        h1 { text-align: center; }\n        .section { margin-top: 30px; }\n    \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\nEOF\n\n# Add content (escape HTML special chars if needed)\nsed 's\u002F&\u002F\\&amp;\u002Fg; s\u002F\u003C\u002F\\&lt;\u002Fg; s\u002F>\u002F\\&gt;\u002Fg' final_report.txt | \\\n    sed 's\u002F^=\\{30,\\}\u002F\u003Ch1>\u002F; s\u002F$\u002F\u003C\\\u002Fh1>\u002F; \u002F^\u003Ch1>\u002F!s\u002F^\u002F--\u003Cbr>\u002F; \u002F^----\u002F!s\u002F$\u002F\u003Cbr>\u002F' >> final_report.html\n\necho \"\u003C\u002Fbody>\u003C\u002Fhtml>\" >> final_report.html\n\n# Convert to PDF\nwkhtmltopdf --page-size A4 --margin-top 25mm final_report.html final_report.pdf\n```\n\n**Option C: Using pandoc (markdown format)**\n\n```bash\n# Create markdown version\ncat > final_report.md \u003C\u003C 'EOF'\n# New Case Creation Report\n\n*Generated: $(date)*\n\n---\n\nEOF\n\n# Add sections with markdown formatting\nfor txt in extracted\u002F*.txt; do\n    filename=$(basename \"$txt\" .txt)\n    echo \"## $filename\" >> final_report.md\n    echo \"\" >> final_report.md\n    cat \"$txt\" >> final_report.md\n    echo \"\" >> final_report.md\ndone\n\n# Convert to PDF\npandoc final_report.md -o final_report.pdf\n```\n\n### Phase 6: Verify Generated Report\n\n```bash\n# Check PDF was created\nif [ -f final_report.pdf ]; then\n    echo \"✓ PDF created successfully\"\n    \n    # Verify page count\n    pages=$(pdfinfo final_report.pdf | grep Pages | awk '{print $2}')\n    echo \"  Pages: $pages\"\n    \n    # Verify file size\n    size=$(ls -lh final_report.pdf | awk '{print $5}')\n    echo \"  Size: $size\"\n    \n    # Verify content\n    if pdftotext final_report.pdf - | grep -q \"CASE CREATION REPORT\"; then\n        echo \"✓ Content verified\"\n    else\n        echo \"✗ Content verification failed\"\n    fi\nelse\n    echo \"✗ PDF generation failed\"\n    exit 1\nfi\n```\n\n## Python Integration Example\n\n```python\nimport subprocess\nimport os\nfrom datetime import datetime\n\nclass PDFReportGenerator:\n    def __init__(self, workdir=\"workdir\"):\n        self.workdir = workdir\n        os.makedirs(workdir, exist_ok=True)\n        os.makedirs(f\"{workdir}\u002Fextracted\", exist_ok=True)\n    \n    def check_tools(self):\n        \"\"\"Check available tools and return best option\"\"\"\n        tools = {}\n        for tool in ['pdfinfo', 'pdftotext', 'enscript', 'ps2pdf', \n                     'wkhtmltopdf', 'pandoc']:\n            result = subprocess.run(['which', tool], \n                                   capture_output=True, text=True)\n            tools[tool] = result.returncode == 0\n        return tools\n    \n    def extract_pdf(self, pdf_path, output_txt=None):\n        \"\"\"Extract text from PDF\"\"\"\n        if output_txt is None:\n            output_txt = f\"{self.workdir}\u002Fextracted\u002F{os.path.basename(pdf_path).replace('.pdf', '.txt')}\"\n        \n        result = subprocess.run(\n            ['pdftotext', '-layout', pdf_path, output_txt],\n            capture_output=True, text=True\n        )\n        \n        if result.returncode != 0:\n            raise Exception(f\"Extraction failed: {result.stderr}\")\n        \n        return output_txt\n    \n    def generate_report_pdf(self, text_content, output_pdf):\n        \"\"\"Generate PDF from text content using best available tool\"\"\"\n        tools = self.check_tools()\n        \n        # Write content to temp file\n        temp_txt = f\"{self.workdir}\u002Ftemp_report.txt\"\n        with open(temp_txt, 'w') as f:\n            f.write(text_content)\n        \n        if tools.get('enscript') and tools.get('ps2pdf'):\n            # Use enscript + ps2pdf\n            temp_ps = f\"{self.workdir}\u002Ftemp_report.ps\"\n            subprocess.run(['enscript', '-B', '-fCourier10', '-o', temp_ps, temp_txt], check=True)\n            subprocess.run(['ps2pdf', temp_ps, output_pdf], check=True)\n            return output_pdf\n        \n        elif tools.get('pandoc'):\n            # Use pandoc\n            temp_md = f\"{self.workdir}\u002Ftemp_report.md\"\n            with open(temp_md, 'w') as f:\n                f.write(f\"# Report\\n\\nGenerated: {datetime.now()}\\n\\n---\\n\\n\")\n                f.write(text_content)\n            subprocess.run(['pandoc', temp_md, '-o', output_pdf], check=True)\n            return output_pdf\n        \n        elif tools.get('wkhtmltopdf'):\n            # Use wkhtmltopdf\n            temp_html = f\"{self.workdir}\u002Ftemp_report.html\"\n            with open(temp_html, 'w') as f:\n                f.write(f\"\"\"\u003C!DOCTYPE html>\n\u003Chtml>\u003Chead>\u003Cstyle>body{{font-family:monospace;margin:40px;}}\u003C\u002Fstyle>\u003C\u002Fhead>\n\u003Cbody>\u003Cpre>{text_content}\u003C\u002Fpre>\u003C\u002Fbody>\u003C\u002Fhtml>\"\"\")\n            subprocess.run(['wkhtmltopdf', temp_html, output_pdf], check=True)\n            return output_pdf\n        \n        else:\n            raise Exception(\"No PDF generation tools available\")\n    \n    def get_pdf_info(self, pdf_path):\n        \"\"\"Get PDF metadata\"\"\"\n        result = subprocess.run(['pdfinfo', pdf_path], \n                               capture_output=True, text=True)\n        info = {}\n        for line in result.stdout.split('\\n'):\n            if ':' in line:\n                key, value = line.split(':', 1)\n                info[key.strip()] = value.strip()\n        return info\n    \n    def create_report_from_pdfs(self, source_pdfs, output_pdf, report_title=\"Report\"):\n        \"\"\"Complete workflow: extract from multiple PDFs and create report\"\"\"\n        extracted_texts = []\n        \n        # Extract from each source\n        for pdf in source_pdfs:\n            txt = self.extract_pdf(pdf)\n            with open(txt, 'r') as f:\n                content = f.read()\n            extracted_texts.append((os.path.basename(pdf), content))\n        \n        # Assemble report\n        report_content = f\"\"\"{'='*50}\n{report_title}\nGenerated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n{'='*50}\n\n\"\"\"\n        \n        for filename, content in extracted_texts:\n            report_content += f\"\\n{'-'*50}\\n\"\n            report_content += f\"SOURCE: {filename}\\n\"\n            report_content += f\"{'-'*50}\\n\\n\"\n            report_content += content + \"\\n\"\n        \n        report_content += f\"\\n{'='*50}\\nEND OF REPORT\\n{'='*50}\\n\"\n        \n        # Generate PDF\n        return self.generate_report_pdf(report_content, output_pdf)\n\n# Usage example\nif __name__ == \"__main__\":\n    generator = PDFReportGenerator()\n    \n    source_pdfs = [\n        \"source_pdfs\u002Fcase_creation_guide.pdf\",\n        \"source_pdfs\u002Fcase_detail_summary.pdf\",\n        \"source_pdfs\u002Fpaternity_test_results.pdf\",\n        \"source_pdfs\u002Forder_of_child_support.pdf\"\n    ]\n    \n    output = generator.create_report_from_pdfs(\n        source_pdfs, \n        \"final_report.pdf\",\n        \"NEW CASE CREATION REPORT\"\n    )\n    \n    print(f\"Report created: {output}\")\n    print(f\"Pages: {generator.get_pdf_info(output).get('Pages', 'Unknown')}\")\n```\n\n## Common Workflows\n\n| Task | Command Sequence |\n|------|------------------|\n| Extract single PDF | `pdftotext -layout file.pdf output.txt` |\n| Extract multiple PDFs | `for f in *.pdf; do pdftotext -layout \"$f\" \"${f%.pdf}.txt\"; done` |\n| Text to PDF (enscript) | `enscript -B input.txt -o - \\| ps2pdf - output.pdf` |\n| Text to PDF (pandoc) | `pandoc input.md -o output.pdf` |\n| Merge PDFs | `pdftk file1.pdf file2.pdf cat output merged.pdf` |\n| Verify PDF | `pdfinfo file.pdf \\| grep Pages` |\n| Check PDF content | `pdftotext file.pdf - \\| grep -i \"keyword\"` |\n\n## Troubleshooting\n\n**No PDF generation tools available**\n- Install at least one: `apt-get install enscript ghostscript` (simplest)\n- Or: `apt-get install pandoc texlive-latex-base` (best formatting)\n- Or: `apt-get install wkhtmltopdf` (HTML support)\n\n**`enscript` produces garbled output**\n- Check character encoding: `file input.txt`\n- Try adding `-r` option for raw output\n- Use `-fCourier10` for fixed-width font\n\n**`ps2pdf` produces large files**\n- Add compression: `ps2pdf -dPDFSETTINGS=\u002Febook input.ps output.pdf`\n- Or: `ps2pdf -dPDFSETTINGS=\u002Fscreen input.ps output.pdf` (smaller, lower quality)\n\n**`pdftotext` returns empty output**\n- PDF may be image-only (scanned) - requires OCR tools\n- PDF may be encrypted\u002Fpassword-protected\n- Try `pdftotext -layout` for better extraction\n\n**Report formatting looks poor**\n- Use `pandoc` with markdown for better formatting\n- Use `wkhtmltopdf` with HTML\u002FCSS for full control\n- Add `-layout` flag to `pdftotext` to preserve structure\n\n## Best Practices\n\n1. **Always verify tools before starting** - Check which generation tools are available\n2. **Preserve layout during extraction** - Use `pdftotext -layout` for better structure\n3. **Test with sample content first** - Generate a test PDF before full report\n4. **Validate output PDF** - Check page count and verify content was included\n5. **Handle special characters** - Escape HTML entities when using wkhtmltopdf\n6. **Clean up temporary files** - Remove intermediate .ps, .html, .txt files after generation\n7. **Document tool choices** - Note which generation method was used for reproducibility\n\n## Quick Start Template\n\n```bash\n#!\u002Fbin\u002Fbash\n# Quick PDF Report Generation Script\n\nset -e\n\n# Configuration\nSOURCE_DIR=\"${1:-source_pdfs}\"\nOUTPUT_PDF=\"${2:-final_report.pdf}\"\nWORKDIR=\"workdir_$$\"\n\n# Setup\nmkdir -p \"$WORKDIR\u002Fextracted\"\ntrap \"rm -rf $WORKDIR\" EXIT\n\n# Check tools\nfor tool in pdfinfo pdftotext; do\n    if ! which \"$tool\" &>\u002Fdev\u002Fnull; then\n        echo \"ERROR: $tool not found. Install poppler-utils.\"\n        exit 1\n    fi\ndone\n\n# Extract all source PDFs\necho \"Extracting PDFs from $SOURCE_DIR...\"\nfor pdf in \"$SOURCE_DIR\"\u002F*.pdf; do\n    [ -f \"$pdf\" ] || continue\n    name=$(basename \"$pdf\" .pdf)\n    pdftotext -layout \"$pdf\" \"$WORKDIR\u002Fextracted\u002F${name}.txt\"\n    echo \"  Extracted: $name\"\ndone\n\n# Assemble report\necho \"Assembling report...\"\n{\n    echo \"========================================\"\n    echo \"REPORT GENERATED: $(date)\"\n    echo \"========================================\"\n    echo \"\"\n    for txt in \"$WORKDIR\u002Fextracted\"\u002F*.txt; do\n        [ -f \"$txt\" ] || continue\n        name=$(basename \"$txt\" .txt)\n        echo \"=== $name ===\"\n        cat \"$txt\"\n        echo \"\"\n    done\n    echo \"========================================\"\n    echo \"END OF REPORT\"\n} > \"$WORKDIR\u002Freport.txt\"\n\n# Generate PDF\necho \"Generating PDF...\"\nif which enscript &>\u002Fdev\u002Fnull && which ps2pdf &>\u002Fdev\u002Fnull; then\n    enscript -B \"$WORKDIR\u002Freport.txt\" -o - | ps2pdf - \"$OUTPUT_PDF\"\nelif which pandoc &>\u002Fdev\u002Fnull; then\n    pandoc \"$WORKDIR\u002Freport.txt\" -o \"$OUTPUT_PDF\"\nelse\n    echo \"ERROR: No PDF generation tool available\"\n    exit 1\nfi\n\n# Verify\necho \"Verifying output...\"\npages=$(pdfinfo \"$OUTPUT_PDF\" | grep Pages | awk '{print $2}')\necho \"✓ Report created: $OUTPUT_PDF ($pages pages)\"\n```\n",{},"main","6b84b0689ca0d9e7b1e4061188ff6b60758e0f8a","openspace\u002Flegacy\u002Fv1\u002Fgdpval_bench\u002Fskills\u002Fpdf-verification-cli-enhanced-657992",938,"https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot","https:\u002F\u002Fgithub.com\u002FHKUDS","https:\u002F\u002Fsites.google.com\u002Fview\u002Fchaoh","2026-11-06 23:04:01",{"source":7,"skillName":5,"commands":44,"prompt":54,"zipAvailable":55},[45,48,51],{"tool":46,"command":47},"npx","npx skills add HKUDS\u002FAgentPilot --skill pdf-verification-cli-enhanced-657992",{"tool":49,"command":50},"bunx","bunx skills add HKUDS\u002FAgentPilot --skill pdf-verification-cli-enhanced-657992",{"tool":52,"command":53},"pnpm","pnpm dlx skills add HKUDS\u002FAgentPilot --skill pdf-verification-cli-enhanced-657992","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fgdpval_bench\u002Fskills\u002Fpdf-verification-cli-enhanced-657992\u002FSKILL.md",true,[57],{"path":58,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":61,"sourceHtmlUrl":62},".skill_id","OTHER","其他",50,"https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fgdpval_bench\u002Fskills\u002Fpdf-verification-cli-enhanced-657992\u002F.skill_id",[64,84,103,126,150,173],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":30},"01M6HYB297NDABRERJRVG0K8R0","agentpilot","Set up AgentPilot and use its single entry to prepare missing inputs and run configured RSI experiments. Use when the user requests AgentPilot installation or work with AgentPilot.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fplugins\u002Fagentpilot\u002Fskills\u002Fagentpilot\u002FSKILL.md",[],[66,71,72,73,74,75,76,77,78,79,80,81,82,83],"prepare","requests","with","missing","installation","rsi","up","use","user","work","SET","run","experiments",{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":30},"01M6HYAYWXTTE1J7DJM0MFNQ4H","remember","Review auto-memory entries and propose promotions to OPENSPACE.md, OPENSPACE.local.md, or retained auto-memory topics; detect duplicates, stale facts, conflicts, and ambiguous entries before making changes.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fskills\u002Fremember\u002FSKILL.md",[],[86,91,92,93,94,95,96,97,98,99,100,101,102],"memory","review","auto","openspace","changes","facts","detect","entries","local","conflicts","stale","duplicates",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":112,"publishedAt":30},"01M6HYAVMPM4SBDV60R2B5HPV8","skill-discovery","Search reusable OpenSpace skills locally, and browse cloud packages step by step when a cloud skill may help. Reusing proven skills saves tokens, improves reliability, and extends your capabilities beyond built-in tools.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fhost_skills\u002Fskill-discovery\u002FSKILL.md",[109],{"categoryNo":110,"categoryName":111,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[113,114,115,94,116,117,118,119,120,121,122,123,124,125],"skill discovery","discovery","reusable","step by step","tokens","packages","help","cloud","reliability","capabilities","browse","search","Tools",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":133,"publishedAt":30},"01M6HYAR811B3RB0M50RBEDGN6","delegate-task","Delegate tasks to OpenSpace — a full-stack autonomous worker for coding, DevOps, web research, and desktop automation, backed by an extensive MCP tool and skill library. Skills auto-improve through use, reducing token consumption over time. A cloud community lets agents share and collectively evolve reusable skills.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fhost_skills\u002Fdelegate-task\u002FSKILL.md",[132],{"categoryNo":110,"categoryName":111,"taxonomyType":20,"taxonomyTypeDesc":21},[134,135,136,94,137,138,139,140,141,115,93,78,142,143,144,145,146,147,148,149],"delegate","task","delegate task","time","improve","desktop automation","worker","community","autonomous","tool","stack","for","share","tasks","automation","MCP",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":156,"publishedAt":30},"01M6HYAM9FSGV6E52AYENDQXYH","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\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-ts-check\u002FSKILL.md",[],[157,158,159,160,161,162,163,164,165,166,167,168,169,170,145,171,172],"write special chars ts check","write","check","type","files","filters","only","template","file","python","typescript","output","Existing","type-checking","errors","script",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":179,"publishedAt":30},"01M6HYAH05HGV7SVWSVR8PJRQD","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\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-readback\u002FSKILL.md",[],[180,181,158,73,145,172,182,183,184,185,186,164,165,25,187,166],"write special chars readback","readback","helper","post","via","scripts","read","cleanup"]