@duckmind/deepquark-darwin-arm64 0.9.78 → 0.9.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.deepquark/skills/bundled/data-storytelling/SKILL.md +453 -0
- package/.deepquark/skills/bundled/docx/LICENSE.txt +30 -0
- package/.deepquark/skills/bundled/docx/SKILL.md +481 -0
- package/.deepquark/skills/bundled/docx/scripts/__init__.py +1 -0
- package/.deepquark/skills/bundled/docx/scripts/accept_changes.py +135 -0
- package/.deepquark/skills/bundled/docx/scripts/comment.py +318 -0
- package/.deepquark/skills/bundled/docx/scripts/office/helpers/__init__.py +0 -0
- package/.deepquark/skills/bundled/docx/scripts/office/helpers/merge_runs.py +199 -0
- package/.deepquark/skills/bundled/docx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/.deepquark/skills/bundled/docx/scripts/office/pack.py +159 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.deepquark/skills/bundled/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.deepquark/skills/bundled/docx/scripts/office/soffice.py +183 -0
- package/.deepquark/skills/bundled/docx/scripts/office/unpack.py +132 -0
- package/.deepquark/skills/bundled/docx/scripts/office/validate.py +111 -0
- package/.deepquark/skills/bundled/docx/scripts/office/validators/__init__.py +15 -0
- package/.deepquark/skills/bundled/docx/scripts/office/validators/base.py +847 -0
- package/.deepquark/skills/bundled/docx/scripts/office/validators/docx.py +446 -0
- package/.deepquark/skills/bundled/docx/scripts/office/validators/pptx.py +275 -0
- package/.deepquark/skills/bundled/docx/scripts/office/validators/redlining.py +247 -0
- package/.deepquark/skills/bundled/docx/scripts/templates/comments.xml +3 -0
- package/.deepquark/skills/bundled/docx/scripts/templates/commentsExtended.xml +3 -0
- package/.deepquark/skills/bundled/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/.deepquark/skills/bundled/docx/scripts/templates/commentsIds.xml +3 -0
- package/.deepquark/skills/bundled/docx/scripts/templates/people.xml +3 -0
- package/.deepquark/skills/bundled/drawio-architect/SKILL.md +300 -0
- package/.deepquark/skills/bundled/drawio-architect/references/architecture-patterns.md +236 -0
- package/.deepquark/skills/bundled/drawio-architect/references/branding.md +180 -0
- package/.deepquark/skills/bundled/drawio-architect/references/cloud-icons.md +493 -0
- package/.deepquark/skills/bundled/drawio-architect/references/style-guide.md +268 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/ARCHITECTURE_REVIEW.md +495 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/AUTONOMY_VERIFICATION.md +420 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/COMPETITIVE_ANALYSIS.md +179 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/CONTEXT_OPTIMIZATION.md +293 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/QUICK_START.md +167 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/README.md +259 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/SKILL.md +754 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/WORD_PRECISION_AUDIT.md +476 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/reference/methodology.md +384 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/requirements.txt +10 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/scripts/citation_manager.py +177 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/scripts/md_to_html.py +330 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/scripts/research_engine.py +578 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/scripts/source_evaluator.py +292 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/scripts/validate_report.py +354 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/scripts/verify_citations.py +430 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/scripts/verify_html.py +220 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/templates/mckinsey_report_template.html +443 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/templates/report_template.md +414 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/tests/fixtures/invalid_report.md +27 -0
- package/.deepquark/skills/bundled/duckmind-deep-research/tests/fixtures/valid_report.md +114 -0
- package/.deepquark/skills/bundled/duckmind-multimodal/SKILL.md +171 -0
- package/.deepquark/skills/bundled/duckmind-multimodal/references/image-generation.md +131 -0
- package/.deepquark/skills/bundled/duckmind-multimodal/references/pdf-processing.md +120 -0
- package/.deepquark/skills/bundled/duckmind-transcribe/SKILL.md +70 -0
- package/.deepquark/skills/bundled/duckmind-transcribe/scripts/transcribe.sh +134 -0
- package/.deepquark/skills/bundled/excel-analysis/SKILL.md +247 -0
- package/.deepquark/skills/bundled/ge-payroll/SKILL.md +153 -0
- package/.deepquark/skills/bundled/ge-payroll/evals/evals.json +23 -0
- package/.deepquark/skills/bundled/ge-payroll/references/pain-points-improvements.md +106 -0
- package/.deepquark/skills/bundled/ge-payroll/references/process-detail.md +217 -0
- package/.deepquark/skills/bundled/ge-payroll/references/raci-stakeholders.md +85 -0
- package/.deepquark/skills/bundled/ge-payroll/references/timeline-mandays.md +64 -0
- package/.deepquark/skills/bundled/pdf/LICENSE.txt +30 -0
- package/.deepquark/skills/bundled/pdf/SKILL.md +314 -0
- package/.deepquark/skills/bundled/pdf/forms.md +294 -0
- package/.deepquark/skills/bundled/pdf/reference.md +612 -0
- package/.deepquark/skills/bundled/pdf/scripts/check_bounding_boxes.py +65 -0
- package/.deepquark/skills/bundled/pdf/scripts/check_fillable_fields.py +11 -0
- package/.deepquark/skills/bundled/pdf/scripts/convert_pdf_to_images.py +33 -0
- package/.deepquark/skills/bundled/pdf/scripts/create_validation_image.py +37 -0
- package/.deepquark/skills/bundled/pdf/scripts/extract_form_field_info.py +122 -0
- package/.deepquark/skills/bundled/pdf/scripts/extract_form_structure.py +115 -0
- package/.deepquark/skills/bundled/pdf/scripts/fill_fillable_fields.py +98 -0
- package/.deepquark/skills/bundled/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/.deepquark/skills/bundled/perplexity-search/SKILL.md +447 -0
- package/.deepquark/skills/bundled/perplexity-search/assets/.env.example +16 -0
- package/.deepquark/skills/bundled/perplexity-search/references/model_comparison.md +386 -0
- package/.deepquark/skills/bundled/perplexity-search/references/openrouter_setup.md +454 -0
- package/.deepquark/skills/bundled/perplexity-search/references/search_strategies.md +258 -0
- package/.deepquark/skills/bundled/perplexity-search/scripts/perplexity_search.py +277 -0
- package/.deepquark/skills/bundled/perplexity-search/scripts/setup_env.py +171 -0
- package/.deepquark/skills/bundled/pptx/LICENSE.txt +30 -0
- package/.deepquark/skills/bundled/pptx/SKILL.md +232 -0
- package/.deepquark/skills/bundled/pptx/editing.md +205 -0
- package/.deepquark/skills/bundled/pptx/pptxgenjs.md +420 -0
- package/.deepquark/skills/bundled/pptx/scripts/__init__.py +0 -0
- package/.deepquark/skills/bundled/pptx/scripts/add_slide.py +195 -0
- package/.deepquark/skills/bundled/pptx/scripts/clean.py +286 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/helpers/__init__.py +0 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/helpers/merge_runs.py +199 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/pack.py +159 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/soffice.py +183 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/unpack.py +132 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/validate.py +111 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/validators/__init__.py +15 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/validators/base.py +847 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/validators/docx.py +446 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/validators/pptx.py +275 -0
- package/.deepquark/skills/bundled/pptx/scripts/office/validators/redlining.py +247 -0
- package/.deepquark/skills/bundled/pptx/scripts/thumbnail.py +289 -0
- package/.deepquark/skills/bundled/text-to-pdf-automation/SKILL.md +91 -0
- package/.deepquark/skills/bundled/web-fetch/SKILL.md +56 -0
- package/.deepquark/skills/bundled/web-fetch/scripts/fetch.sh +54 -0
- package/.deepquark/skills/bundled/xlsx/LICENSE.txt +30 -0
- package/.deepquark/skills/bundled/xlsx/SKILL.md +292 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/helpers/__init__.py +0 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/helpers/merge_runs.py +199 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/pack.py +159 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/soffice.py +183 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/unpack.py +132 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/validate.py +111 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/validators/__init__.py +15 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/validators/base.py +847 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/validators/docx.py +446 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/validators/pptx.py +275 -0
- package/.deepquark/skills/bundled/xlsx/scripts/office/validators/redlining.py +247 -0
- package/.deepquark/skills/bundled/xlsx/scripts/recalc.py +184 -0
- package/.deepquark/skills/bundled/youtube-downloader/SKILL.md +99 -0
- package/.deepquark/skills/bundled/youtube-downloader/scripts/download_video.py +145 -0
- package/.deepquark/skills/bundled/youtube-transcribe-skill/SKILL.md +116 -0
- package/bin/deepquark +0 -0
- package/package.json +4 -3
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
"""Create thumbnail grids from PowerPoint presentation slides.
|
|
2
|
+
|
|
3
|
+
Creates a grid layout of slide thumbnails for quick visual analysis.
|
|
4
|
+
Labels each thumbnail with its XML filename (e.g., slide1.xml).
|
|
5
|
+
Hidden slides are shown with a placeholder pattern.
|
|
6
|
+
|
|
7
|
+
Usage:
|
|
8
|
+
python thumbnail.py input.pptx [output_prefix] [--cols N]
|
|
9
|
+
|
|
10
|
+
Examples:
|
|
11
|
+
python thumbnail.py presentation.pptx
|
|
12
|
+
# Creates: thumbnails.jpg
|
|
13
|
+
|
|
14
|
+
python thumbnail.py template.pptx grid --cols 4
|
|
15
|
+
# Creates: grid.jpg (or grid-1.jpg, grid-2.jpg for large decks)
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
import argparse
|
|
19
|
+
import subprocess
|
|
20
|
+
import sys
|
|
21
|
+
import tempfile
|
|
22
|
+
import zipfile
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
import defusedxml.minidom
|
|
26
|
+
from office.soffice import get_soffice_env
|
|
27
|
+
from PIL import Image, ImageDraw, ImageFont
|
|
28
|
+
|
|
29
|
+
THUMBNAIL_WIDTH = 300
|
|
30
|
+
CONVERSION_DPI = 100
|
|
31
|
+
MAX_COLS = 6
|
|
32
|
+
DEFAULT_COLS = 3
|
|
33
|
+
JPEG_QUALITY = 95
|
|
34
|
+
GRID_PADDING = 20
|
|
35
|
+
BORDER_WIDTH = 2
|
|
36
|
+
FONT_SIZE_RATIO = 0.10
|
|
37
|
+
LABEL_PADDING_RATIO = 0.4
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def main():
|
|
41
|
+
parser = argparse.ArgumentParser(
|
|
42
|
+
description="Create thumbnail grids from PowerPoint slides."
|
|
43
|
+
)
|
|
44
|
+
parser.add_argument("input", help="Input PowerPoint file (.pptx)")
|
|
45
|
+
parser.add_argument(
|
|
46
|
+
"output_prefix",
|
|
47
|
+
nargs="?",
|
|
48
|
+
default="thumbnails",
|
|
49
|
+
help="Output prefix for image files (default: thumbnails)",
|
|
50
|
+
)
|
|
51
|
+
parser.add_argument(
|
|
52
|
+
"--cols",
|
|
53
|
+
type=int,
|
|
54
|
+
default=DEFAULT_COLS,
|
|
55
|
+
help=f"Number of columns (default: {DEFAULT_COLS}, max: {MAX_COLS})",
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
args = parser.parse_args()
|
|
59
|
+
|
|
60
|
+
cols = min(args.cols, MAX_COLS)
|
|
61
|
+
if args.cols > MAX_COLS:
|
|
62
|
+
print(f"Warning: Columns limited to {MAX_COLS}")
|
|
63
|
+
|
|
64
|
+
input_path = Path(args.input)
|
|
65
|
+
if not input_path.exists() or input_path.suffix.lower() != ".pptx":
|
|
66
|
+
print(f"Error: Invalid PowerPoint file: {args.input}", file=sys.stderr)
|
|
67
|
+
sys.exit(1)
|
|
68
|
+
|
|
69
|
+
output_path = Path(f"{args.output_prefix}.jpg")
|
|
70
|
+
|
|
71
|
+
try:
|
|
72
|
+
slide_info = get_slide_info(input_path)
|
|
73
|
+
|
|
74
|
+
with tempfile.TemporaryDirectory() as temp_dir:
|
|
75
|
+
temp_path = Path(temp_dir)
|
|
76
|
+
visible_images = convert_to_images(input_path, temp_path)
|
|
77
|
+
|
|
78
|
+
if not visible_images and not any(s["hidden"] for s in slide_info):
|
|
79
|
+
print("Error: No slides found", file=sys.stderr)
|
|
80
|
+
sys.exit(1)
|
|
81
|
+
|
|
82
|
+
slides = build_slide_list(slide_info, visible_images, temp_path)
|
|
83
|
+
|
|
84
|
+
grid_files = create_grids(slides, cols, THUMBNAIL_WIDTH, output_path)
|
|
85
|
+
|
|
86
|
+
print(f"Created {len(grid_files)} grid(s):")
|
|
87
|
+
for grid_file in grid_files:
|
|
88
|
+
print(f" {grid_file}")
|
|
89
|
+
|
|
90
|
+
except Exception as e:
|
|
91
|
+
print(f"Error: {e}", file=sys.stderr)
|
|
92
|
+
sys.exit(1)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def get_slide_info(pptx_path: Path) -> list[dict]:
|
|
96
|
+
with zipfile.ZipFile(pptx_path, "r") as zf:
|
|
97
|
+
rels_content = zf.read("ppt/_rels/presentation.xml.rels").decode("utf-8")
|
|
98
|
+
rels_dom = defusedxml.minidom.parseString(rels_content)
|
|
99
|
+
|
|
100
|
+
rid_to_slide = {}
|
|
101
|
+
for rel in rels_dom.getElementsByTagName("Relationship"):
|
|
102
|
+
rid = rel.getAttribute("Id")
|
|
103
|
+
target = rel.getAttribute("Target")
|
|
104
|
+
rel_type = rel.getAttribute("Type")
|
|
105
|
+
if "slide" in rel_type and target.startswith("slides/"):
|
|
106
|
+
rid_to_slide[rid] = target.replace("slides/", "")
|
|
107
|
+
|
|
108
|
+
pres_content = zf.read("ppt/presentation.xml").decode("utf-8")
|
|
109
|
+
pres_dom = defusedxml.minidom.parseString(pres_content)
|
|
110
|
+
|
|
111
|
+
slides = []
|
|
112
|
+
for sld_id in pres_dom.getElementsByTagName("p:sldId"):
|
|
113
|
+
rid = sld_id.getAttribute("r:id")
|
|
114
|
+
if rid in rid_to_slide:
|
|
115
|
+
hidden = sld_id.getAttribute("show") == "0"
|
|
116
|
+
slides.append({"name": rid_to_slide[rid], "hidden": hidden})
|
|
117
|
+
|
|
118
|
+
return slides
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def build_slide_list(
|
|
122
|
+
slide_info: list[dict],
|
|
123
|
+
visible_images: list[Path],
|
|
124
|
+
temp_dir: Path,
|
|
125
|
+
) -> list[tuple[Path, str]]:
|
|
126
|
+
if visible_images:
|
|
127
|
+
with Image.open(visible_images[0]) as img:
|
|
128
|
+
placeholder_size = img.size
|
|
129
|
+
else:
|
|
130
|
+
placeholder_size = (1920, 1080)
|
|
131
|
+
|
|
132
|
+
slides = []
|
|
133
|
+
visible_idx = 0
|
|
134
|
+
|
|
135
|
+
for info in slide_info:
|
|
136
|
+
if info["hidden"]:
|
|
137
|
+
placeholder_path = temp_dir / f"hidden-{info['name']}.jpg"
|
|
138
|
+
placeholder_img = create_hidden_placeholder(placeholder_size)
|
|
139
|
+
placeholder_img.save(placeholder_path, "JPEG")
|
|
140
|
+
slides.append((placeholder_path, f"{info['name']} (hidden)"))
|
|
141
|
+
else:
|
|
142
|
+
if visible_idx < len(visible_images):
|
|
143
|
+
slides.append((visible_images[visible_idx], info["name"]))
|
|
144
|
+
visible_idx += 1
|
|
145
|
+
|
|
146
|
+
return slides
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def create_hidden_placeholder(size: tuple[int, int]) -> Image.Image:
|
|
150
|
+
img = Image.new("RGB", size, color="#F0F0F0")
|
|
151
|
+
draw = ImageDraw.Draw(img)
|
|
152
|
+
line_width = max(5, min(size) // 100)
|
|
153
|
+
draw.line([(0, 0), size], fill="#CCCCCC", width=line_width)
|
|
154
|
+
draw.line([(size[0], 0), (0, size[1])], fill="#CCCCCC", width=line_width)
|
|
155
|
+
return img
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def convert_to_images(pptx_path: Path, temp_dir: Path) -> list[Path]:
|
|
159
|
+
pdf_path = temp_dir / f"{pptx_path.stem}.pdf"
|
|
160
|
+
|
|
161
|
+
result = subprocess.run(
|
|
162
|
+
[
|
|
163
|
+
"soffice",
|
|
164
|
+
"--headless",
|
|
165
|
+
"--convert-to",
|
|
166
|
+
"pdf",
|
|
167
|
+
"--outdir",
|
|
168
|
+
str(temp_dir),
|
|
169
|
+
str(pptx_path),
|
|
170
|
+
],
|
|
171
|
+
capture_output=True,
|
|
172
|
+
text=True,
|
|
173
|
+
env=get_soffice_env(),
|
|
174
|
+
)
|
|
175
|
+
if result.returncode != 0 or not pdf_path.exists():
|
|
176
|
+
raise RuntimeError("PDF conversion failed")
|
|
177
|
+
|
|
178
|
+
result = subprocess.run(
|
|
179
|
+
[
|
|
180
|
+
"pdftoppm",
|
|
181
|
+
"-jpeg",
|
|
182
|
+
"-r",
|
|
183
|
+
str(CONVERSION_DPI),
|
|
184
|
+
str(pdf_path),
|
|
185
|
+
str(temp_dir / "slide"),
|
|
186
|
+
],
|
|
187
|
+
capture_output=True,
|
|
188
|
+
text=True,
|
|
189
|
+
)
|
|
190
|
+
if result.returncode != 0:
|
|
191
|
+
raise RuntimeError("Image conversion failed")
|
|
192
|
+
|
|
193
|
+
return sorted(temp_dir.glob("slide-*.jpg"))
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def create_grids(
|
|
197
|
+
slides: list[tuple[Path, str]],
|
|
198
|
+
cols: int,
|
|
199
|
+
width: int,
|
|
200
|
+
output_path: Path,
|
|
201
|
+
) -> list[str]:
|
|
202
|
+
max_per_grid = cols * (cols + 1)
|
|
203
|
+
grid_files = []
|
|
204
|
+
|
|
205
|
+
for chunk_idx, start_idx in enumerate(range(0, len(slides), max_per_grid)):
|
|
206
|
+
end_idx = min(start_idx + max_per_grid, len(slides))
|
|
207
|
+
chunk_slides = slides[start_idx:end_idx]
|
|
208
|
+
|
|
209
|
+
grid = create_grid(chunk_slides, cols, width)
|
|
210
|
+
|
|
211
|
+
if len(slides) <= max_per_grid:
|
|
212
|
+
grid_filename = output_path
|
|
213
|
+
else:
|
|
214
|
+
stem = output_path.stem
|
|
215
|
+
suffix = output_path.suffix
|
|
216
|
+
grid_filename = output_path.parent / f"{stem}-{chunk_idx + 1}{suffix}"
|
|
217
|
+
|
|
218
|
+
grid_filename.parent.mkdir(parents=True, exist_ok=True)
|
|
219
|
+
grid.save(str(grid_filename), quality=JPEG_QUALITY)
|
|
220
|
+
grid_files.append(str(grid_filename))
|
|
221
|
+
|
|
222
|
+
return grid_files
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
def create_grid(
|
|
226
|
+
slides: list[tuple[Path, str]],
|
|
227
|
+
cols: int,
|
|
228
|
+
width: int,
|
|
229
|
+
) -> Image.Image:
|
|
230
|
+
font_size = int(width * FONT_SIZE_RATIO)
|
|
231
|
+
label_padding = int(font_size * LABEL_PADDING_RATIO)
|
|
232
|
+
|
|
233
|
+
with Image.open(slides[0][0]) as img:
|
|
234
|
+
aspect = img.height / img.width
|
|
235
|
+
height = int(width * aspect)
|
|
236
|
+
|
|
237
|
+
rows = (len(slides) + cols - 1) // cols
|
|
238
|
+
grid_w = cols * width + (cols + 1) * GRID_PADDING
|
|
239
|
+
grid_h = rows * (height + font_size + label_padding * 2) + (rows + 1) * GRID_PADDING
|
|
240
|
+
|
|
241
|
+
grid = Image.new("RGB", (grid_w, grid_h), "white")
|
|
242
|
+
draw = ImageDraw.Draw(grid)
|
|
243
|
+
|
|
244
|
+
try:
|
|
245
|
+
font = ImageFont.load_default(size=font_size)
|
|
246
|
+
except Exception:
|
|
247
|
+
font = ImageFont.load_default()
|
|
248
|
+
|
|
249
|
+
for i, (img_path, slide_name) in enumerate(slides):
|
|
250
|
+
row, col = i // cols, i % cols
|
|
251
|
+
x = col * width + (col + 1) * GRID_PADDING
|
|
252
|
+
y_base = (
|
|
253
|
+
row * (height + font_size + label_padding * 2) + (row + 1) * GRID_PADDING
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
label = slide_name
|
|
257
|
+
bbox = draw.textbbox((0, 0), label, font=font)
|
|
258
|
+
text_w = bbox[2] - bbox[0]
|
|
259
|
+
draw.text(
|
|
260
|
+
(x + (width - text_w) // 2, y_base + label_padding),
|
|
261
|
+
label,
|
|
262
|
+
fill="black",
|
|
263
|
+
font=font,
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
y_thumbnail = y_base + label_padding + font_size + label_padding
|
|
267
|
+
|
|
268
|
+
with Image.open(img_path) as img:
|
|
269
|
+
img.thumbnail((width, height), Image.Resampling.LANCZOS)
|
|
270
|
+
w, h = img.size
|
|
271
|
+
tx = x + (width - w) // 2
|
|
272
|
+
ty = y_thumbnail + (height - h) // 2
|
|
273
|
+
grid.paste(img, (tx, ty))
|
|
274
|
+
|
|
275
|
+
if BORDER_WIDTH > 0:
|
|
276
|
+
draw.rectangle(
|
|
277
|
+
[
|
|
278
|
+
(tx - BORDER_WIDTH, ty - BORDER_WIDTH),
|
|
279
|
+
(tx + w + BORDER_WIDTH - 1, ty + h + BORDER_WIDTH - 1),
|
|
280
|
+
],
|
|
281
|
+
outline="gray",
|
|
282
|
+
width=BORDER_WIDTH,
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
return grid
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
if __name__ == "__main__":
|
|
289
|
+
main()
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: text-to-pdf-automation
|
|
3
|
+
description: "Automate Text To PDF tasks via Rube MCP (Composio). Always search tools first for current schemas."
|
|
4
|
+
requires:
|
|
5
|
+
mcp: [rube]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Text To PDF Automation via Rube MCP
|
|
9
|
+
|
|
10
|
+
Automate Text To PDF operations through Composio's Text To PDF toolkit via Rube MCP.
|
|
11
|
+
|
|
12
|
+
**Toolkit docs**: [composio.dev/toolkits/text_to_pdf](https://composio.dev/toolkits/text_to_pdf)
|
|
13
|
+
|
|
14
|
+
## Prerequisites
|
|
15
|
+
|
|
16
|
+
- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
|
|
17
|
+
- Active Text To PDF connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `text_to_pdf`
|
|
18
|
+
- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas
|
|
19
|
+
|
|
20
|
+
## Setup
|
|
21
|
+
|
|
22
|
+
**Get Rube MCP**: Add `https://rube.app/mcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.
|
|
23
|
+
|
|
24
|
+
1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds
|
|
25
|
+
2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `text_to_pdf`
|
|
26
|
+
3. If connection is not ACTIVE, follow the returned auth link to complete setup
|
|
27
|
+
4. Confirm connection status shows ACTIVE before running any workflows
|
|
28
|
+
|
|
29
|
+
## Tool Discovery
|
|
30
|
+
|
|
31
|
+
Always discover available tools before executing workflows:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
RUBE_SEARCH_TOOLS
|
|
35
|
+
queries: [{use_case: "Text To PDF operations", known_fields: ""}]
|
|
36
|
+
session: {generate_id: true}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
This returns available tool slugs, input schemas, recommended execution plans, and known pitfalls.
|
|
40
|
+
|
|
41
|
+
## Core Workflow Pattern
|
|
42
|
+
|
|
43
|
+
### Step 1: Discover Available Tools
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
RUBE_SEARCH_TOOLS
|
|
47
|
+
queries: [{use_case: "your specific Text To PDF task"}]
|
|
48
|
+
session: {id: "existing_session_id"}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Step 2: Check Connection
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
RUBE_MANAGE_CONNECTIONS
|
|
55
|
+
toolkits: ["text_to_pdf"]
|
|
56
|
+
session_id: "your_session_id"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Step 3: Execute Tools
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
RUBE_MULTI_EXECUTE_TOOL
|
|
63
|
+
tools: [{
|
|
64
|
+
tool_slug: "TOOL_SLUG_FROM_SEARCH",
|
|
65
|
+
arguments: {/* schema-compliant args from search results */}
|
|
66
|
+
}]
|
|
67
|
+
memory: {}
|
|
68
|
+
session_id: "your_session_id"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Known Pitfalls
|
|
72
|
+
|
|
73
|
+
- **Always search first**: Tool schemas change. Never hardcode tool slugs or arguments without calling `RUBE_SEARCH_TOOLS`
|
|
74
|
+
- **Check connection**: Verify `RUBE_MANAGE_CONNECTIONS` shows ACTIVE status before executing tools
|
|
75
|
+
- **Schema compliance**: Use exact field names and types from the search results
|
|
76
|
+
- **Memory parameter**: Always include `memory` in `RUBE_MULTI_EXECUTE_TOOL` calls, even if empty (`{}`)
|
|
77
|
+
- **Session reuse**: Reuse session IDs within a workflow. Generate new ones for new workflows
|
|
78
|
+
- **Pagination**: Check responses for pagination tokens and continue fetching until complete
|
|
79
|
+
|
|
80
|
+
## Quick Reference
|
|
81
|
+
|
|
82
|
+
| Operation | Approach |
|
|
83
|
+
|-----------|----------|
|
|
84
|
+
| Find tools | `RUBE_SEARCH_TOOLS` with Text To PDF-specific use case |
|
|
85
|
+
| Connect | `RUBE_MANAGE_CONNECTIONS` with toolkit `text_to_pdf` |
|
|
86
|
+
| Execute | `RUBE_MULTI_EXECUTE_TOOL` with discovered tool slugs |
|
|
87
|
+
| Bulk ops | `RUBE_REMOTE_WORKBENCH` with `run_composio_tool()` |
|
|
88
|
+
| Full schema | `RUBE_GET_TOOL_SCHEMAS` for tools with `schemaRef` |
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
*Powered by [Composio](https://composio.dev)*
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web-fetch
|
|
3
|
+
description: Fetch and extract readable content from web pages. Use for lightweight page access without browser automation.
|
|
4
|
+
homepage: https://github.com/zhayujie/chatgpt-on-wechat
|
|
5
|
+
metadata:
|
|
6
|
+
emoji: 🌐
|
|
7
|
+
requires:
|
|
8
|
+
bins: ["curl"]
|
|
9
|
+
always: true
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Web Fetch
|
|
13
|
+
|
|
14
|
+
Fetch and extract readable content from web pages using curl and basic text processing.
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
**Important**: Scripts are located relative to this skill's base directory.
|
|
19
|
+
|
|
20
|
+
When you see this skill in `<available_skills>`, note the `<base_dir>` path.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# General pattern:
|
|
24
|
+
bash "<base_dir>/scripts/fetch.sh" <url> [output_file]
|
|
25
|
+
|
|
26
|
+
# Example (replace <base_dir> with actual path from skill listing):
|
|
27
|
+
bash "~/chatgpt-on-wechat/skills/web-fetch/scripts/fetch.sh" "https://example.com"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Parameters:**
|
|
31
|
+
- `url`: The HTTP/HTTPS URL to fetch (required)
|
|
32
|
+
- `output_file`: Optional file to save the output (default: stdout)
|
|
33
|
+
|
|
34
|
+
**Returns:**
|
|
35
|
+
- Extracted page content with title and text
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
|
|
39
|
+
### Fetch a web page
|
|
40
|
+
```bash
|
|
41
|
+
bash "<base_dir>/scripts/fetch.sh" "https://example.com"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Save to file
|
|
45
|
+
```bash
|
|
46
|
+
bash "<base_dir>/scripts/fetch.sh" "https://example.com" output.txt
|
|
47
|
+
cat output.txt
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Notes
|
|
51
|
+
|
|
52
|
+
- Uses curl for HTTP requests (timeout: 10s)
|
|
53
|
+
- Extracts title and basic text content
|
|
54
|
+
- Removes HTML tags and scripts
|
|
55
|
+
- Works with any standard web page
|
|
56
|
+
- No external dependencies beyond curl
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Fetch and extract readable content from a web page
|
|
3
|
+
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
url="${1:-}"
|
|
7
|
+
output_file="${2:-}"
|
|
8
|
+
|
|
9
|
+
if [ -z "$url" ]; then
|
|
10
|
+
echo "Error: URL is required"
|
|
11
|
+
echo "Usage: bash fetch.sh <url> [output_file]"
|
|
12
|
+
exit 1
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
# Validate URL
|
|
16
|
+
if [[ ! "$url" =~ ^https?:// ]]; then
|
|
17
|
+
echo "Error: Invalid URL (must start with http:// or https://)"
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
# Fetch the page with curl
|
|
22
|
+
html=$(curl -sS -L --max-time 10 \
|
|
23
|
+
-H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" \
|
|
24
|
+
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" \
|
|
25
|
+
"$url" 2>&1) || {
|
|
26
|
+
echo "Error: Failed to fetch URL: $url"
|
|
27
|
+
exit 1
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
# Extract title
|
|
31
|
+
title=$(echo "$html" | grep -oP '(?<=<title>).*?(?=</title>)' | head -1 || echo "Untitled")
|
|
32
|
+
|
|
33
|
+
# Remove script and style tags
|
|
34
|
+
text=$(echo "$html" | sed 's/<script[^>]*>.*<\/script>//gI' | sed 's/<style[^>]*>.*<\/style>//gI')
|
|
35
|
+
|
|
36
|
+
# Remove HTML tags
|
|
37
|
+
text=$(echo "$text" | sed 's/<[^>]*>//g')
|
|
38
|
+
|
|
39
|
+
# Clean up whitespace
|
|
40
|
+
text=$(echo "$text" | tr -s ' ' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
41
|
+
|
|
42
|
+
# Format output
|
|
43
|
+
result="Title: $title
|
|
44
|
+
|
|
45
|
+
Content:
|
|
46
|
+
$text"
|
|
47
|
+
|
|
48
|
+
# Output to file or stdout
|
|
49
|
+
if [ -n "$output_file" ]; then
|
|
50
|
+
echo "$result" > "$output_file"
|
|
51
|
+
echo "Content saved to: $output_file"
|
|
52
|
+
else
|
|
53
|
+
echo "$result"
|
|
54
|
+
fi
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
© 2025 Anthropic, PBC. All rights reserved.
|
|
2
|
+
|
|
3
|
+
LICENSE: Use of these materials (including all code, prompts, assets, files,
|
|
4
|
+
and other components of this Skill) is governed by your agreement with
|
|
5
|
+
Anthropic regarding use of Anthropic's services. If no separate agreement
|
|
6
|
+
exists, use is governed by Anthropic's Consumer Terms of Service or
|
|
7
|
+
Commercial Terms of Service, as applicable:
|
|
8
|
+
https://www.anthropic.com/legal/consumer-terms
|
|
9
|
+
https://www.anthropic.com/legal/commercial-terms
|
|
10
|
+
Your applicable agreement is referred to as the "Agreement." "Services" are
|
|
11
|
+
as defined in the Agreement.
|
|
12
|
+
|
|
13
|
+
ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the
|
|
14
|
+
contrary, users may not:
|
|
15
|
+
|
|
16
|
+
- Extract these materials from the Services or retain copies of these
|
|
17
|
+
materials outside the Services
|
|
18
|
+
- Reproduce or copy these materials, except for temporary copies created
|
|
19
|
+
automatically during authorized use of the Services
|
|
20
|
+
- Create derivative works based on these materials
|
|
21
|
+
- Distribute, sublicense, or transfer these materials to any third party
|
|
22
|
+
- Make, offer to sell, sell, or import any inventions embodied in these
|
|
23
|
+
materials
|
|
24
|
+
- Reverse engineer, decompile, or disassemble these materials
|
|
25
|
+
|
|
26
|
+
The receipt, viewing, or possession of these materials does not convey or
|
|
27
|
+
imply any license or right beyond those expressly granted above.
|
|
28
|
+
|
|
29
|
+
Anthropic retains all right, title, and interest in these materials,
|
|
30
|
+
including all copyrights, patents, and other intellectual property rights.
|