myagent-ai 1.0.0
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/Dockerfile +30 -0
- package/README.md +333 -0
- package/agents/__init__.py +6 -0
- package/agents/__pycache__/main_agent.cpython-312.pyc +0 -0
- package/agents/base.py +115 -0
- package/agents/main_agent.py +695 -0
- package/agents/memory_agent.py +313 -0
- package/agents/tool_agent.py +248 -0
- package/chatbot/__init__.py +5 -0
- package/chatbot/base.py +124 -0
- package/chatbot/discord_bot.py +146 -0
- package/chatbot/feishu_bot.py +548 -0
- package/chatbot/manager.py +164 -0
- package/chatbot/qq_bot.py +189 -0
- package/chatbot/telegram_bot.py +167 -0
- package/chatbot/wechat_bot.py +558 -0
- package/communication/__init__.py +66 -0
- package/communication/channel.py +576 -0
- package/communication/crypto.py +347 -0
- package/communication/manager.py +397 -0
- package/communication/peer.py +156 -0
- package/config.py +464 -0
- package/core/__init__.py +10 -0
- package/core/config_broadcast.py +276 -0
- package/core/llm.py +878 -0
- package/core/logger.py +241 -0
- package/core/task_queue.py +362 -0
- package/core/utils.py +184 -0
- package/executor/__init__.py +4 -0
- package/executor/__pycache__/engine.cpython-312.pyc +0 -0
- package/executor/engine.py +1215 -0
- package/groups/__init__.py +15 -0
- package/groups/manager.py +724 -0
- package/knowledge/__init__.py +4 -0
- package/knowledge/rag.py +444 -0
- package/main.py +801 -0
- package/memory/__init__.py +4 -0
- package/memory/manager.py +840 -0
- package/organization/__init__.py +4 -0
- package/organization/manager.py +350 -0
- package/package.json +58 -0
- package/requirements.txt +59 -0
- package/setup.py +40 -0
- package/skills/ASR/LICENSE.txt +21 -0
- package/skills/ASR/SKILL.md +580 -0
- package/skills/ASR/scripts/asr.ts +27 -0
- package/skills/LLM/LICENSE.txt +21 -0
- package/skills/LLM/SKILL.md +856 -0
- package/skills/LLM/scripts/chat.ts +32 -0
- package/skills/TTS/LICENSE.txt +21 -0
- package/skills/TTS/SKILL.md +735 -0
- package/skills/TTS/tts.ts +25 -0
- package/skills/VLM/LICENSE.txt +21 -0
- package/skills/VLM/SKILL.md +588 -0
- package/skills/VLM/scripts/vlm.ts +57 -0
- package/skills/__init__.py +5 -0
- package/skills/agent-browser/SKILL.md +328 -0
- package/skills/ai-news-collectors/SKILL.md +157 -0
- package/skills/ai-news-collectors/_meta.json +6 -0
- package/skills/ai-news-collectors/references/sources.md +128 -0
- package/skills/aminer-open-academic/SKILL.md +312 -0
- package/skills/aminer-open-academic/_meta.json +6 -0
- package/skills/aminer-open-academic/evals/evals.json +46 -0
- package/skills/aminer-open-academic/references/api-catalog.md +1032 -0
- package/skills/aminer-open-academic/scripts/__pycache__/aminer_client.cpython-312.pyc +0 -0
- package/skills/aminer-open-academic/scripts/aminer_client.py +875 -0
- package/skills/auto-target-tracker/SKILL.md +317 -0
- package/skills/base.py +147 -0
- package/skills/blog-writer/2024-02-17-radical-transparency-sales.md +35 -0
- package/skills/blog-writer/2024-02-17-raycast-spotlight-superpowers.md +33 -0
- package/skills/blog-writer/2024-02-17-short-form-content-marketing.md +47 -0
- package/skills/blog-writer/2024-02-17-typing-speed-benefits.md +33 -0
- package/skills/blog-writer/2024-03-14-effective-ai-prompts.md +55 -0
- package/skills/blog-writer/2024-11-08-ai-revolutionizing-entry-level-sales.md +43 -0
- package/skills/blog-writer/2025-11-12-why-ai-art-is-useless.md +49 -0
- package/skills/blog-writer/README.md +2 -0
- package/skills/blog-writer/SKILL.md +158 -0
- package/skills/blog-writer/__pycache__/manage_examples.cpython-312.pyc +0 -0
- package/skills/blog-writer/_meta.json +6 -0
- package/skills/blog-writer/manage_examples.py +90 -0
- package/skills/blog-writer/style-guide.md +160 -0
- package/skills/browser_skill.py +146 -0
- package/skills/coding-agent/SKILL.md +120 -0
- package/skills/coding-agent/_meta.json +6 -0
- package/skills/coding-agent/criteria.md +48 -0
- package/skills/coding-agent/execution.md +42 -0
- package/skills/coding-agent/memory-template.md +38 -0
- package/skills/coding-agent/planning.md +31 -0
- package/skills/coding-agent/state.md +60 -0
- package/skills/coding-agent/verification.md +39 -0
- package/skills/content-strategy/SKILL.md +181 -0
- package/skills/content-strategy/_meta.json +6 -0
- package/skills/contentanalysis/ExtractWisdom/SKILL.md +229 -0
- package/skills/contentanalysis/ExtractWisdom/Workflows/Extract.md +60 -0
- package/skills/contentanalysis/SKILL.md +14 -0
- package/skills/docx/CHANGELOG.md +85 -0
- package/skills/docx/LICENSE.txt +30 -0
- package/skills/docx/SKILL.md +455 -0
- package/skills/docx/docx-js.md +681 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/docx/ooxml/scripts/__pycache__/pack.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/__pycache__/unpack.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/__pycache__/validate.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/pack.py +159 -0
- package/skills/docx/ooxml/scripts/unpack.py +29 -0
- package/skills/docx/ooxml/scripts/validate.py +69 -0
- package/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/docx/ooxml/scripts/validation/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/validation/__pycache__/base.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/validation/__pycache__/docx.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/validation/__pycache__/pptx.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/validation/__pycache__/redlining.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/validation/base.py +951 -0
- package/skills/docx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/docx/ooxml.md +615 -0
- package/skills/docx/scripts/__init__.py +1 -0
- package/skills/docx/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/docx/scripts/__pycache__/add_toc_placeholders.cpython-312.pyc +0 -0
- package/skills/docx/scripts/__pycache__/document.cpython-312.pyc +0 -0
- package/skills/docx/scripts/__pycache__/utilities.cpython-312.pyc +0 -0
- package/skills/docx/scripts/add_toc_placeholders.py +220 -0
- package/skills/docx/scripts/document.py +1302 -0
- package/skills/docx/scripts/templates/comments.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills/docx/scripts/templates/people.xml +3 -0
- package/skills/docx/scripts/utilities.py +374 -0
- package/skills/dream-interpreter/SKILL.md +88 -0
- package/skills/dream-interpreter/assets/example_asset.txt +24 -0
- package/skills/dream-interpreter/references/api_reference.md +34 -0
- package/skills/dream-interpreter/references/interpretation-guide.md +83 -0
- package/skills/dream-interpreter/references/output-schema.md +65 -0
- package/skills/dream-interpreter/references/questioning-strategy.md +62 -0
- package/skills/dream-interpreter/references/visual-mapping.md +81 -0
- package/skills/dream-interpreter/scripts/__pycache__/example.cpython-312.pyc +0 -0
- package/skills/dream-interpreter/scripts/example.py +19 -0
- package/skills/dream-interpreter/skill.json +7 -0
- package/skills/file_skill.py +246 -0
- package/skills/finance/Finance_API_Doc.md +445 -0
- package/skills/finance/SKILL.md +53 -0
- package/skills/fullstack-dev/SKILL.md +205 -0
- package/skills/get-fortune-analysis/SKILL.md +370 -0
- package/skills/get-fortune-analysis/lunar_python.py +91 -0
- package/skills/gift-evaluator/SKILL.md +83 -0
- package/skills/gift-evaluator/__pycache__/html_tools.cpython-312.pyc +0 -0
- package/skills/gift-evaluator/html_tools.py +268 -0
- package/skills/image-edit/LICENSE.txt +21 -0
- package/skills/image-edit/SKILL.md +896 -0
- package/skills/image-edit/scripts/image-edit.ts +36 -0
- package/skills/image-generation/LICENSE.txt +21 -0
- package/skills/image-generation/SKILL.md +583 -0
- package/skills/image-generation/scripts/image-generation.ts +28 -0
- package/skills/image-understand/LICENSE.txt +21 -0
- package/skills/image-understand/SKILL.md +855 -0
- package/skills/image-understand/scripts/image-understand.ts +41 -0
- package/skills/interview-designer/README.md +70 -0
- package/skills/interview-designer/SKILL.md +53 -0
- package/skills/interview-designer/_meta.json +6 -0
- package/skills/interview-designer/references/design_rationale.md +43 -0
- package/skills/interview-designer/templates/interview_guide_template.md +62 -0
- package/skills/market-research-reports/SKILL.md +901 -0
- package/skills/market-research-reports/assets/FORMATTING_GUIDE.md +428 -0
- package/skills/market-research-reports/assets/market_report_template.tex +1380 -0
- package/skills/market-research-reports/assets/market_research.sty +564 -0
- package/skills/market-research-reports/references/data_analysis_patterns.md +548 -0
- package/skills/market-research-reports/references/report_structure_guide.md +999 -0
- package/skills/market-research-reports/references/visual_generation_guide.md +1077 -0
- package/skills/market-research-reports/scripts/__pycache__/generate_market_visuals.cpython-312.pyc +0 -0
- package/skills/market-research-reports/scripts/generate_market_visuals.py +529 -0
- package/skills/marketing-mode/README.md +49 -0
- package/skills/marketing-mode/SKILL.md +693 -0
- package/skills/marketing-mode/_meta.json +6 -0
- package/skills/marketing-mode/mode-prompt.md +39 -0
- package/skills/marketing-mode/skill.json +51 -0
- package/skills/mindfulness-meditation/SKILL.md +65 -0
- package/skills/mindfulness-meditation/_meta.json +6 -0
- package/skills/multi-search-engine/CHANGELOG.md +15 -0
- package/skills/multi-search-engine/CHANNELLOG.md +48 -0
- package/skills/multi-search-engine/SKILL.md +78 -0
- package/skills/multi-search-engine/_meta.json +6 -0
- package/skills/multi-search-engine/config.json +14 -0
- package/skills/multi-search-engine/metadata.json +7 -0
- package/skills/multi-search-engine/references/international-search.md +651 -0
- package/skills/pdf/LICENSE.txt +30 -0
- package/skills/pdf/SKILL.md +1534 -0
- package/skills/pdf/forms.md +205 -0
- package/skills/pdf/reference.md +765 -0
- package/skills/pdf/scripts/__pycache__/add_zai_metadata.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/check_bounding_boxes.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/check_bounding_boxes_test.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/check_fillable_fields.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/convert_pdf_to_images.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/create_validation_image.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/extract_form_field_info.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/fill_fillable_fields.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/fill_pdf_form_with_annotations.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/sanitize_code.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/add_zai_metadata.py +172 -0
- package/skills/pdf/scripts/check_bounding_boxes.py +70 -0
- package/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
- package/skills/pdf/scripts/check_fillable_fields.py +12 -0
- package/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
- package/skills/pdf/scripts/create_validation_image.py +41 -0
- package/skills/pdf/scripts/extract_form_field_info.py +152 -0
- package/skills/pdf/scripts/fill_fillable_fields.py +114 -0
- package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
- package/skills/pdf/scripts/sanitize_code.py +110 -0
- package/skills/podcast-generate/LICENSE.txt +21 -0
- package/skills/podcast-generate/SKILL.md +198 -0
- package/skills/podcast-generate/generate.ts +661 -0
- package/skills/podcast-generate/package.json +30 -0
- package/skills/podcast-generate/readme.md +177 -0
- package/skills/podcast-generate/test_data/segments.jsonl +3 -0
- package/skills/podcast-generate/tsconfig.json +26 -0
- package/skills/pptx/LICENSE.txt +30 -0
- package/skills/pptx/SKILL.md +507 -0
- package/skills/pptx/html2pptx.md +625 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/pptx/ooxml/scripts/__pycache__/pack.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/__pycache__/unpack.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/__pycache__/validate.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/pack.py +159 -0
- package/skills/pptx/ooxml/scripts/unpack.py +29 -0
- package/skills/pptx/ooxml/scripts/validate.py +69 -0
- package/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/pptx/ooxml/scripts/validation/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/validation/__pycache__/base.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/validation/__pycache__/docx.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/validation/__pycache__/pptx.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/validation/__pycache__/redlining.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/validation/base.py +951 -0
- package/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/pptx/ooxml.md +427 -0
- package/skills/pptx/scripts/__pycache__/inventory.cpython-312.pyc +0 -0
- package/skills/pptx/scripts/__pycache__/inventory.cpython-313.pyc +0 -0
- package/skills/pptx/scripts/__pycache__/rearrange.cpython-312.pyc +0 -0
- package/skills/pptx/scripts/__pycache__/replace.cpython-312.pyc +0 -0
- package/skills/pptx/scripts/__pycache__/thumbnail.cpython-312.pyc +0 -0
- package/skills/pptx/scripts/html2pptx.js +1044 -0
- package/skills/pptx/scripts/inventory.py +1020 -0
- package/skills/pptx/scripts/rearrange.py +231 -0
- package/skills/pptx/scripts/replace.py +385 -0
- package/skills/pptx/scripts/thumbnail.py +450 -0
- package/skills/qingyan-research/SKILL.md +294 -0
- package/skills/qingyan-research/__pycache__/generate_html.cpython-312.pyc +0 -0
- package/skills/qingyan-research/generate_html.py +33 -0
- package/skills/registry.py +344 -0
- package/skills/search_skill.py +228 -0
- package/skills/seo-content-writer/SKILL.md +661 -0
- package/skills/seo-content-writer/_meta.json +6 -0
- package/skills/seo-content-writer/references/content-structure-templates.md +875 -0
- package/skills/seo-content-writer/references/title-formulas.md +339 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/SKILL.md +485 -0
- package/skills/skill-creator/agents/analyzer.md +274 -0
- package/skills/skill-creator/agents/comparator.md +202 -0
- package/skills/skill-creator/agents/grader.md +223 -0
- package/skills/skill-creator/assets/eval_review.html +146 -0
- package/skills/skill-creator/eval-viewer/__pycache__/generate_review.cpython-312.pyc +0 -0
- package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/skill-creator/references/schemas.md +430 -0
- package/skills/skill-creator/scripts/__init__.py +0 -0
- package/skills/skill-creator/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/aggregate_benchmark.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/generate_report.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/improve_description.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/package_skill.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/run_eval.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/run_loop.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/utils.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/skill-creator/scripts/generate_report.py +326 -0
- package/skills/skill-creator/scripts/improve_description.py +236 -0
- package/skills/skill-creator/scripts/package_skill.py +136 -0
- package/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/skills/skill-creator/scripts/run_eval.py +310 -0
- package/skills/skill-creator/scripts/run_loop.py +328 -0
- package/skills/skill-creator/scripts/utils.py +47 -0
- package/skills/skill-finder-cn/SKILL.md +66 -0
- package/skills/skill-finder-cn/_meta.json +6 -0
- package/skills/skill-finder-cn/package.json +5 -0
- package/skills/skill-finder-cn/scripts/search.sh +15 -0
- package/skills/skill-vetter/SKILL.md +137 -0
- package/skills/stock-analysis-skill/SKILL.md +156 -0
- package/skills/stock-analysis-skill/package.json +21 -0
- package/skills/stock-analysis-skill/src/analyzer.ts +264 -0
- package/skills/stock-analysis-skill/src/dataFetcher.ts +130 -0
- package/skills/stock-analysis-skill/src/dividend.ts +226 -0
- package/skills/stock-analysis-skill/src/index.ts +327 -0
- package/skills/stock-analysis-skill/src/rumorScanner.ts +200 -0
- package/skills/stock-analysis-skill/src/types.ts +167 -0
- package/skills/stock-analysis-skill/src/watchlist.ts +292 -0
- package/skills/stock-analysis-skill/tsconfig.json +15 -0
- package/skills/storyboard-manager/SKILL.md +532 -0
- package/skills/storyboard-manager/index.js +9 -0
- package/skills/storyboard-manager/package.json +11 -0
- package/skills/storyboard-manager/references/character_development.md +232 -0
- package/skills/storyboard-manager/references/story_structures.md +148 -0
- package/skills/storyboard-manager/scripts/__pycache__/consistency_checker.cpython-312.pyc +0 -0
- package/skills/storyboard-manager/scripts/__pycache__/timeline_tracker.cpython-312.pyc +0 -0
- package/skills/storyboard-manager/scripts/consistency_checker.py +391 -0
- package/skills/storyboard-manager/scripts/timeline_tracker.py +352 -0
- package/skills/system_skill.py +249 -0
- package/skills/ui-ux-pro-max/SKILL.md +43 -0
- package/skills/ui-ux-pro-max/_meta.json +6 -0
- package/skills/ui-ux-pro-max/assets/data/charts.csv +26 -0
- package/skills/ui-ux-pro-max/assets/data/colors.csv +97 -0
- package/skills/ui-ux-pro-max/assets/data/icons.csv +101 -0
- package/skills/ui-ux-pro-max/assets/data/landing.csv +31 -0
- package/skills/ui-ux-pro-max/assets/data/products.csv +97 -0
- package/skills/ui-ux-pro-max/assets/data/react-performance.csv +45 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/astro.csv +54 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/flutter.csv +53 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/html-tailwind.csv +56 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/jetpack-compose.csv +53 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/nextjs.csv +53 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/nuxt-ui.csv +51 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/nuxtjs.csv +59 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/react-native.csv +52 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/react.csv +54 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/shadcn.csv +61 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/svelte.csv +54 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/swiftui.csv +51 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/vue.csv +50 -0
- package/skills/ui-ux-pro-max/assets/data/styles.csv +68 -0
- package/skills/ui-ux-pro-max/assets/data/typography.csv +58 -0
- package/skills/ui-ux-pro-max/assets/data/ui-reasoning.csv +101 -0
- package/skills/ui-ux-pro-max/assets/data/ux-guidelines.csv +100 -0
- package/skills/ui-ux-pro-max/assets/data/web-interface.csv +31 -0
- package/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills/ui-ux-pro-max/references/upstream-README.md +488 -0
- package/skills/ui-ux-pro-max/references/upstream-skill-content.md +288 -0
- package/skills/ui-ux-pro-max/scripts/__init__.py +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/search.cpython-312.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/skills/ui-ux-pro-max/scripts/design_system.py +1071 -0
- package/skills/ui-ux-pro-max/scripts/search.py +111 -0
- package/skills/video-generation/LICENSE.txt +21 -0
- package/skills/video-generation/SKILL.md +1082 -0
- package/skills/video-generation/scripts/video.ts +168 -0
- package/skills/video-understand/LICENSE.txt +21 -0
- package/skills/video-understand/SKILL.md +916 -0
- package/skills/video-understand/scripts/video-understand.ts +41 -0
- package/skills/visual-design-foundations/SKILL.md +318 -0
- package/skills/visual-design-foundations/references/color-systems.md +417 -0
- package/skills/visual-design-foundations/references/spacing-iconography.md +425 -0
- package/skills/visual-design-foundations/references/typography-systems.md +432 -0
- package/skills/web-reader/LICENSE.txt +21 -0
- package/skills/web-reader/SKILL.md +1140 -0
- package/skills/web-reader/scripts/web-reader.ts +37 -0
- package/skills/web-search/LICENSE.txt +21 -0
- package/skills/web-search/SKILL.md +912 -0
- package/skills/web-search/scripts/web_search.ts +44 -0
- package/skills/web-shader-extractor/SKILL.md +145 -0
- package/skills/web-shader-extractor/references/config-extraction.md +50 -0
- package/skills/web-shader-extractor/references/encoded-definitions.md +53 -0
- package/skills/web-shader-extractor/references/extraction-workflow.md +61 -0
- package/skills/web-shader-extractor/references/porting-strategy.md +164 -0
- package/skills/web-shader-extractor/references/shader-injection.md +126 -0
- package/skills/web-shader-extractor/references/shaders-com.md +190 -0
- package/skills/web-shader-extractor/references/tech-signatures.md +54 -0
- package/skills/web-shader-extractor/references/tsl-extraction.md +41 -0
- package/skills/web-shader-extractor/references/unicorn-studio.md +353 -0
- package/skills/web-shader-extractor/scripts/fetch-rendered-dom.mjs +153 -0
- package/skills/web-shader-extractor/scripts/scan-bundle.sh +76 -0
- package/skills/writing-plans/SKILL.md +116 -0
- package/skills/writing-plans/_meta.json +6 -0
- package/skills/xlsx/LICENSE.txt +30 -0
- package/skills/xlsx/SKILL.md +496 -0
- package/skills/xlsx/__pycache__/recalc.cpython-312.pyc +0 -0
- package/skills/xlsx/recalc.py +178 -0
- package/start.sh +36 -0
- package/web/__init__.py +1 -0
- package/web/__pycache__/api_server.cpython-312.pyc +0 -0
- package/web/api_server.py +2043 -0
- package/web/ui/chat.html +3235 -0
- package/web/ui/index.html +458 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qingyan_research_report
|
|
3
|
+
description: "Deep web research and HTML report generation. When GLM needs to conduct systematic information gathering and analysis for: (1) Exploring open-ended questions through multi-step search, deep reading, and logical reasoning, (2) Applying critical thinking and dynamic reflection to optimize search strategies and ensure information coverage, (3) Generating publication-quality HTML research reports with specific UI/UX standards (typography, colors, layout), (4) Creating interactive data visualizations (Chart.js) based on extracted statistical data, (5) Producing structured documents with automatic Table of Contents and responsive design."
|
|
4
|
+
---
|
|
5
|
+
你是 **GLM**,一位具备**批判性思维、系统性探索能力与结构化表达能力**的高级网络研究智能体。你的任务是围绕通用开放性问题,通过搜索、深度阅读与逐步推理,开展系统化信息收集与分析,最终产出一篇**结构清晰、语义深刻、表达专业且视觉美观的 HTML 研究报告**。
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### 一、思考准则
|
|
12
|
+
|
|
13
|
+
#### 1. 思考驱动的信息探索
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
在执行每一轮信息收集行动(如发起搜索、访问网页等)之前,你必须首先进行深入的任务分析与策略制定。你的思考内容需包括:
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
* 对当前信息状态的完整性、权威性与时效性评估
|
|
20
|
+
* 将用户问题拆解为多层次子问题,并识别缺失的关键信息
|
|
21
|
+
* 明确接下来应聚焦的关键主题与相应关键词,并给出搜索与访问策略
|
|
22
|
+
* 制定探索路径,说明哪些页面需要优先访问、哪些部分需重点提取
|
|
23
|
+
* 在此基础上,结合反思机制动态调整任务推进方向
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
#### 2. 动态反思与策略修正
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
在任务推进过程中,应适时在思考中进行反思与策略调整,以确保信息探索的深度与方向持续优化。反思内容可聚焦以下任一方面:
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
* **问题覆盖检查(Question Coverage)**:当前是否已全面回应用户关切的核心问题?是否仍有未触及的关键角度或遗漏的子问题?
|
|
33
|
+
* **内容深度评估(Content Depth Reflection)**:现有信息是否具备足够的逻辑深度、数据支持与推理展开?是否存在内容空洞或片面性?
|
|
34
|
+
* **信息拓展建议(Information Supplementation)**:是否存在虽未被显式提出,但对理解问题具有价值的潜在方向、边界扩展或补充数据?
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### 二、搜索工具
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
你可以使用加载外部skills中的搜索工具来系统性地获取信息,支持研究任务的深入推进:
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
- search:用于发起单轮全面精准的网页检索,以获取覆盖核心问题的权威来源。
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
- visit:访问指定网页,提取首页的主要内容以供后续分析。
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
### 三、HTML 报告生成规范
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
最终,当收集到足够充分的信息后,调用`generate_html`工具,输出一份具备出版级品质的 HTML 研究报告。
|
|
58
|
+
|
|
59
|
+
generate_html工具使用说明:
|
|
60
|
+
python3 generate_html.py --title "Report Title" <<'EOF'
|
|
61
|
+
<!DOCTYPE html>
|
|
62
|
+
<html>
|
|
63
|
+
...[Full HTML Content]...
|
|
64
|
+
</html>
|
|
65
|
+
EOF
|
|
66
|
+
|
|
67
|
+
Parameters Description:
|
|
68
|
+
Report Title: The level-1 heading of the report, also used as the filename.
|
|
69
|
+
Full HTML Content: The complete, self-contained HTML source code (including embedded CSS).
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
HTML格式需满足以下要求:
|
|
73
|
+
|
|
74
|
+
#### 1. 主题化设计与风格要求
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
**1. 总体布局与氛围:**
|
|
78
|
+
* **页面背景:** 纯白 (`#FFFFFF`), 页面背景必须覆盖整个页面。
|
|
79
|
+
* **内容区域:** 纯白 (`#FFFFFF`),确保与文本的最大对比度。
|
|
80
|
+
* **主文字色:** 近黑色 (`#212529`)。
|
|
81
|
+
* **文本强调色A:** 用于目录、链接、使用蓝色 (`#0D6EFD`)。
|
|
82
|
+
* **文本强调色B:** 用于关键高亮以及文本中加粗字体、使用黑色(`#212529`)
|
|
83
|
+
* **文本强调色C:** 用于标题装饰、使用黑色(`#212529`)
|
|
84
|
+
* **body设置:** 不要用display: flex设定。
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
**2. 字体与排版:**
|
|
88
|
+
标题 (Headings): "Alibaba PuHuiTi 3.0", "Noto Sans SC", "Noto Serif SC", sans-serif
|
|
89
|
+
正文 (Body): "Alibaba PuHuiTi 3.0", "Noto Serif SC", serif
|
|
90
|
+
代码 (Code): "Source Code Pro", monospace
|
|
91
|
+
字号:
|
|
92
|
+
正文: `16px`
|
|
93
|
+
H1 标题: font-size: 28px;margin-top: 24px;margin-bottom: 20px
|
|
94
|
+
H2 标题: font-size: 22px;padding-bottom: 0.4em;
|
|
95
|
+
H3 标题: font-size: 20px;
|
|
96
|
+
H4 标题: font-size: 18px;
|
|
97
|
+
脚注/图表说明: margin-bottom: 1.2em;
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
**3. 其他元素:**
|
|
101
|
+
当进行列举具体示例和行程安排时,适当用组件对示例和安排进行分组。正常文本不需要单独增加模块分组。
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
1. **标题:**
|
|
105
|
+
* `<h1>` 居中;`<h2>` 标题前添加装饰元素,样式为:14px圆形,颜色使用: 文本强调色A(`#0D6EFD`)。
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
2. **表格:**
|
|
109
|
+
* 摒弃传统边框。
|
|
110
|
+
* `thead` 下方 `2px` 主题强调色。
|
|
111
|
+
* `tbody tr:hover` 背景取主题明度 +5%。
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
3. **引用:**
|
|
115
|
+
* 左侧竖条使用主题强调色。
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
4. **文本主题背景:**
|
|
119
|
+
* 设置页面container,包含所有文本避免文本内容超出页面容器。
|
|
120
|
+
* 确保背景长度可以包含所有文本,不要出现文本超出背景的情况。
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
5. **分隔线:**
|
|
124
|
+
* 使用主题强调色。
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
6. **目录生成:**
|
|
128
|
+
在第一层 `<h1>` 标题 **之后** 自动插入 `Table of Contents`(名称为目录(保持和文本语种一致))模块,其生成规则如下:
|
|
129
|
+
1. **范围与层级:** 仅收集文档中出现的所有 `<h2>` 及其紧随其后的 `<h3>` 子标题(直到下一个 `<h2>` 前)。
|
|
130
|
+
2. **结构:**
|
|
131
|
+
```html
|
|
132
|
+
<nav class="toc">
|
|
133
|
+
<ul class="toc-level-2">
|
|
134
|
+
<li><a href="#section-1">H2 标题文本</a>
|
|
135
|
+
<ul class="toc-level-3">
|
|
136
|
+
<li><a href="#section-1-1">H3 标题文本</a></li>
|
|
137
|
+
...
|
|
138
|
+
</ul>
|
|
139
|
+
</li>
|
|
140
|
+
...
|
|
141
|
+
</ul>
|
|
142
|
+
</nav>
|
|
143
|
+
```
|
|
144
|
+
* **所有目录级别 (`<li>`) 的标题文本必须包裹在 `<a>` 标签中,确保点击即可跳转到对应的 `<h2>` 或 `<h3>`。**
|
|
145
|
+
3. **锚点生成:** 给每个 `<h2>`、`<h3>` 添加唯一 `id`(可使用标题文本的 slug 形式,全部小写,去除特殊字符)。目录中的 `href` 指向对应的 `#id`,实现点击跳转。
|
|
146
|
+
4. **样式要求:**
|
|
147
|
+
* 目录整体放在纯白内容区域中,与正文保持 `margin-bottom: 2em`。
|
|
148
|
+
* `.toc-level-2 > li` 使用数字或圆点标识;嵌套 `.toc-level-3` 使用缩进列表。
|
|
149
|
+
* 全部目录(序号和标题)颜色使用 **文本强调色** `#0D6EFD`,悬停时下划线, 适当添加缩进。
|
|
150
|
+
5. **序号格式:**
|
|
151
|
+
* 先检原文本标题是否包含序号(阿拉伯数字、中文数字、第一、第二、第三等),若包含则直接使用原文本标题中的序号。
|
|
152
|
+
* 若不包含序号,则根据文档主要语言为中文(根据 `<h1>`/`<h2>` 含有中文字符判断),则在目录中为每个 `<h2>` 添加中文序号前缀:`一、`、`二、`、`三、`……;其对应的 `<h3>` 列表项不再重复序号,仅作为缩进子项显示。
|
|
153
|
+
* 若不包含序号,则根据文档主要语言为非中文(根据 `<h1>`/`<h2>` 含有中文字符判断),则在目录中为每个 `<h2>` 添加阿拉伯数字加点形式:`1.`、`2.`、`3.` ……;其对应的 `<h3>` 列表项不再重复序号,仅作为缩进子项显示。
|
|
154
|
+
* 序号仅在目录中显示,不修改正文标题本身。
|
|
155
|
+
6. **可折叠(可选):** 如目录过长,可为每个 `<li>` 添加 `details/summary` 结构,实现折叠展开,但默认展开即可。
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
7. **智能图表生成**
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
* **图表生成要求**
|
|
162
|
+
* 数据多时,采用组合图,在一张图表中展现出全面的数据。
|
|
163
|
+
* 图表种类尽量多元化,不要大量重复使用一种图表格式。
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
* **触发条件:**
|
|
167
|
+
* **数据比较:** 文本中包含多组数据的直接对比(如 "A组的结果是25%,而B组是40%")。
|
|
168
|
+
* **趋势描述:** 描述了某个变量随时间的变化(如 "2024年时,A组25%,2023年时20%")。
|
|
169
|
+
* **分布或构成:** 展示一个整体中各个部分的百分比构成(如 "30%为男性,70%为女性")。
|
|
170
|
+
* **数据密集的表格:** 表格展示了精确数据,但趋势或比较更适合用图表表达。
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
* **解析需求**
|
|
174
|
+
* 图表类型(柱状、折线、条形图、组合图等)
|
|
175
|
+
* 比较主体、时间范围及指标
|
|
176
|
+
* 禁止生成环形图
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
* **数据处理**
|
|
180
|
+
* 依据解析结果,根据上下文进行数据搜集处理。
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
* **生成 Chart.js 图表(保持与主题语种一致)**
|
|
184
|
+
* 使用 Chart.js 绘制图表(防止打印 PDF 被截断)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
* **坐标轴 / 文字**
|
|
188
|
+
* 文字使用主文字色 `#212529`,指定字体
|
|
189
|
+
* 调整 x/y 轴名称字体及标题字体,避免超出图表空间
|
|
190
|
+
* y 轴最大值应为数据最大值的 1.2 倍
|
|
191
|
+
* 网格线使用辅助色 `#E9ECEF`,虚线显示
|
|
192
|
+
* 图表宽高自适应,节点不超边界
|
|
193
|
+
* 节点间自动计算间距,避免重叠
|
|
194
|
+
* 长文本自动换行或缩小字体
|
|
195
|
+
* 柱状图应从下向上绘制
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
* **数据元素绘制**
|
|
199
|
+
* 元素尺寸和位置必须精确计算
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
* **图例绘制**
|
|
203
|
+
* 图例图标与文本保持间距,避免重叠
|
|
204
|
+
* 除组合图外,不允许任何元素重叠(如 x/y 轴标题与数据名称重叠)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
* **颜色规范**
|
|
208
|
+
* 图形使用主题强调色 `#0D6EFD`
|
|
209
|
+
* 多图形并存使用对比色(如绿色、橙色),颜色带透明度
|
|
210
|
+
* 所有文字使用主文字色 `#212529`
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
* **图表注释**
|
|
214
|
+
* 注释清晰、具体
|
|
215
|
+
* 注释与主题语种一致
|
|
216
|
+
* 图表与注释文字用不同容器
|
|
217
|
+
* 示例:图2:2021年主要石化仓储上市公司毛利率对比
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
* **图表互动模块生成要求**
|
|
221
|
+
* 添加交互提示(鼠标悬停显示信息)
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
* **代码示例:**
|
|
225
|
+
```
|
|
226
|
+
function createChart(ctx, config) {
|
|
227
|
+
if (ctx) {
|
|
228
|
+
new Chart(ctx, config);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
createChart(growthCtx, {
|
|
234
|
+
type: 'bar',
|
|
235
|
+
data: {
|
|
236
|
+
labels: growthData.years,
|
|
237
|
+
datasets: [
|
|
238
|
+
{
|
|
239
|
+
label: '',
|
|
240
|
+
data: ,
|
|
241
|
+
yAxisID: 'y',
|
|
242
|
+
backgroundColor: 'rgba(59, 130, 246, 0.5)',
|
|
243
|
+
borderColor: 'rgba(59, 130, 246, 1)',
|
|
244
|
+
borderWidth: 1
|
|
245
|
+
}
|
|
246
|
+
// ...
|
|
247
|
+
]
|
|
248
|
+
},
|
|
249
|
+
options: {
|
|
250
|
+
responsive: true,
|
|
251
|
+
maintainAspectRatio: false,
|
|
252
|
+
scales: {
|
|
253
|
+
y: {
|
|
254
|
+
type: 'logarithmic',
|
|
255
|
+
position: 'left',
|
|
256
|
+
title: {
|
|
257
|
+
display: true,
|
|
258
|
+
text: '...'
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
plugins: {
|
|
263
|
+
tooltip: {
|
|
264
|
+
mode: 'index',
|
|
265
|
+
intersect: false
|
|
266
|
+
},
|
|
267
|
+
title: {
|
|
268
|
+
display: false
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
* **背景 / 网格线**
|
|
277
|
+
* 使用页面背景色或辅助色:`#F8F9FA`、`#E9ECEF`
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
* **嵌入 HTML**
|
|
281
|
+
* 使用 `<figure class="generated-chart">` 包裹 `<canvas>`
|
|
282
|
+
* 使用 `<figcaption>` 添加图表说明文字
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
### 四、禁止行为
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
* 禁止跳过反思机制或忽略信息分析
|
|
292
|
+
* 禁止直接复制网页内容或堆砌式摘要
|
|
293
|
+
* 禁止在信息不足或逻辑结构不完整时提前输出报告
|
|
294
|
+
* 禁止生成不完整 HTML(如缺少 `<html>` 或 `<style>`)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
import sys
|
|
4
|
+
import argparse
|
|
5
|
+
|
|
6
|
+
def safe_filename(title):
|
|
7
|
+
# 移除非法文件名字符
|
|
8
|
+
return re.sub(r'[\\/*?:"<>|]', "", title).strip()
|
|
9
|
+
|
|
10
|
+
def main():
|
|
11
|
+
parser = argparse.ArgumentParser(description="Save HTML content to a local file.")
|
|
12
|
+
parser.add_argument("--title", required=True, help="Report title (used as filename)")
|
|
13
|
+
args = parser.parse_args()
|
|
14
|
+
|
|
15
|
+
# 从标准输入 (STDIN) 读取所有内容,这不会受到 Shell 参数长度限制
|
|
16
|
+
try:
|
|
17
|
+
content = sys.stdin.read()
|
|
18
|
+
if not content:
|
|
19
|
+
print("Error: No content received from STDIN.", file=sys.stderr)
|
|
20
|
+
sys.exit(1)
|
|
21
|
+
|
|
22
|
+
filename = f"{safe_filename(args.title)}.html"
|
|
23
|
+
|
|
24
|
+
with open(filename, "w", encoding="utf-8") as f:
|
|
25
|
+
f.write(content)
|
|
26
|
+
|
|
27
|
+
print(f"Successfully generated: {os.path.abspath(filename)}")
|
|
28
|
+
except Exception as e:
|
|
29
|
+
print(f"Error: {str(e)}", file=sys.stderr)
|
|
30
|
+
sys.exit(1)
|
|
31
|
+
|
|
32
|
+
if __name__ == "__main__":
|
|
33
|
+
main()
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
"""
|
|
2
|
+
skills/registry.py - 技能注册表
|
|
3
|
+
================================
|
|
4
|
+
管理所有已注册的技能,提供查找、调用、列表功能。
|
|
5
|
+
支持动态注册、热加载和 OpenClaw 外部技能桥接。
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import importlib
|
|
10
|
+
import inspect
|
|
11
|
+
import json
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from typing import Any, Dict, List, Optional
|
|
14
|
+
|
|
15
|
+
from core.logger import get_logger
|
|
16
|
+
from skills.base import Skill, SkillResult, SkillParameter
|
|
17
|
+
|
|
18
|
+
logger = get_logger("myagent.skills")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class OpenClawSkillAdapter(Skill):
|
|
22
|
+
"""
|
|
23
|
+
OpenClaw 外部技能适配器。
|
|
24
|
+
|
|
25
|
+
将 skills/ 目录下的 OpenClaw 格式技能(SKILL.md + scripts/)包装为
|
|
26
|
+
Skill 基类实例,使其可以在 SkillRegistry 中统一管理。
|
|
27
|
+
|
|
28
|
+
OpenClaw 技能结构:
|
|
29
|
+
skills/
|
|
30
|
+
skill-name/
|
|
31
|
+
SKILL.md # 技能描述和指令
|
|
32
|
+
scripts/ # 可执行脚本
|
|
33
|
+
references/ # 参考文档
|
|
34
|
+
skill.json # 技能元数据(可选)
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
def __init__(self, skill_dir: Path):
|
|
38
|
+
super().__init__()
|
|
39
|
+
self._skill_dir = skill_dir
|
|
40
|
+
self._skill_md = ""
|
|
41
|
+
self._scripts: Dict[str, Path] = {}
|
|
42
|
+
self._metadata: Dict[str, Any] = {}
|
|
43
|
+
self._load_skill_info()
|
|
44
|
+
|
|
45
|
+
def _load_skill_info(self):
|
|
46
|
+
"""加载技能信息"""
|
|
47
|
+
self.name = self._skill_dir.name
|
|
48
|
+
|
|
49
|
+
# 读取 SKILL.md
|
|
50
|
+
skill_md_path = self._skill_dir / "SKILL.md"
|
|
51
|
+
if skill_md_path.exists():
|
|
52
|
+
self._skill_md = skill_md_path.read_text(encoding="utf-8", errors="ignore")
|
|
53
|
+
# 从 SKILL.md 第一行提取描述
|
|
54
|
+
first_line = self._skill_md.strip().split("\n")[0]
|
|
55
|
+
self.description = first_line.lstrip("# ").strip()
|
|
56
|
+
|
|
57
|
+
# 读取 skill.json(如果有)
|
|
58
|
+
skill_json_path = self._skill_dir / "skill.json"
|
|
59
|
+
if skill_json_path.exists():
|
|
60
|
+
try:
|
|
61
|
+
self._metadata = json.loads(skill_json_path.read_text(encoding="utf-8"))
|
|
62
|
+
if "name" in self._metadata:
|
|
63
|
+
self.name = self._metadata["name"]
|
|
64
|
+
if "description" in self._metadata:
|
|
65
|
+
self.description = self._metadata["description"]
|
|
66
|
+
except json.JSONDecodeError:
|
|
67
|
+
pass
|
|
68
|
+
|
|
69
|
+
# 发现脚本文件
|
|
70
|
+
scripts_dir = self._skill_dir / "scripts"
|
|
71
|
+
if scripts_dir.exists():
|
|
72
|
+
for script_file in scripts_dir.iterdir():
|
|
73
|
+
if script_file.is_file() and not script_file.name.startswith("_"):
|
|
74
|
+
# 去除扩展名作为参数名
|
|
75
|
+
param_name = script_file.stem
|
|
76
|
+
self._scripts[param_name] = script_file
|
|
77
|
+
|
|
78
|
+
# 构建 OpenClaw 技能的通用参数
|
|
79
|
+
self.parameters = [
|
|
80
|
+
SkillParameter(
|
|
81
|
+
name="task",
|
|
82
|
+
type="string",
|
|
83
|
+
description=f"要执行的任务指令({self.description})",
|
|
84
|
+
required=True,
|
|
85
|
+
),
|
|
86
|
+
]
|
|
87
|
+
|
|
88
|
+
async def execute(self, **kwargs) -> SkillResult:
|
|
89
|
+
"""
|
|
90
|
+
执行 OpenClaw 技能。
|
|
91
|
+
|
|
92
|
+
将 SKILL.md 的内容作为系统提示,
|
|
93
|
+
结合用户任务参数,返回使用指引。
|
|
94
|
+
"""
|
|
95
|
+
task = kwargs.get("task", "")
|
|
96
|
+
|
|
97
|
+
# 构建使用指引(实际执行由 Agent 的 LLM 解读 SKILL.md 指令完成)
|
|
98
|
+
references_info = ""
|
|
99
|
+
ref_dir = self._skill_dir / "references"
|
|
100
|
+
if ref_dir.exists():
|
|
101
|
+
ref_files = list(ref_dir.glob("*.md"))
|
|
102
|
+
if ref_files:
|
|
103
|
+
references_info = f"\n\n## 参考文档\n可用参考文件: {', '.join(f.name for f in ref_files)}"
|
|
104
|
+
|
|
105
|
+
scripts_info = ""
|
|
106
|
+
if self._scripts:
|
|
107
|
+
scripts_info = f"\n\n## 可用脚本\n"
|
|
108
|
+
for name, path in self._scripts.items():
|
|
109
|
+
scripts_info += f"- `{name}` ({path.suffix}): {path}\n"
|
|
110
|
+
|
|
111
|
+
result_text = (
|
|
112
|
+
f"## 技能: {self.name}\n\n"
|
|
113
|
+
f"### 描述\n{self.description}\n\n"
|
|
114
|
+
f"### 使用说明\n{self._skill_md[:5000]}"
|
|
115
|
+
f"{references_info}{scripts_info}\n\n"
|
|
116
|
+
f"### 当前任务\n{task}\n\n"
|
|
117
|
+
f"请根据上述技能说明完成当前任务。"
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
return SkillResult(
|
|
121
|
+
success=True,
|
|
122
|
+
data={
|
|
123
|
+
"skill_type": "openclaw",
|
|
124
|
+
"skill_name": self.name,
|
|
125
|
+
"skill_dir": str(self._skill_dir),
|
|
126
|
+
"instruction": result_text,
|
|
127
|
+
"has_scripts": bool(self._scripts),
|
|
128
|
+
"scripts": {name: str(path) for name, path in self._scripts.items()},
|
|
129
|
+
},
|
|
130
|
+
output=result_text[:3000],
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
def to_openclaw_format(self) -> dict:
|
|
134
|
+
"""导出为 OpenClaw 格式"""
|
|
135
|
+
result = super().to_openclaw_format()
|
|
136
|
+
result["source"] = "openclaw_external"
|
|
137
|
+
result["skill_dir"] = str(self._skill_dir)
|
|
138
|
+
return result
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
class SkillRegistry:
|
|
142
|
+
"""
|
|
143
|
+
技能注册表。
|
|
144
|
+
|
|
145
|
+
使用示例:
|
|
146
|
+
registry = SkillRegistry()
|
|
147
|
+
registry.register(FileReadSkill())
|
|
148
|
+
|
|
149
|
+
# 查找技能
|
|
150
|
+
skill = registry.get("file_read")
|
|
151
|
+
result = await skill.execute(path="/tmp/test.txt")
|
|
152
|
+
|
|
153
|
+
# 获取所有工具定义(给 LLM 用)
|
|
154
|
+
tools = registry.get_all_schemas()
|
|
155
|
+
|
|
156
|
+
# 按名称执行
|
|
157
|
+
result = await registry.execute("file_read", path="/tmp/test.txt")
|
|
158
|
+
|
|
159
|
+
# 加载外部 OpenClaw 技能
|
|
160
|
+
registry.load_openclaw_skills("/path/to/skills/")
|
|
161
|
+
"""
|
|
162
|
+
|
|
163
|
+
def __init__(self):
|
|
164
|
+
self._skills: Dict[str, Skill] = {}
|
|
165
|
+
self._openclaw_skills: Dict[str, OpenClawSkillAdapter] = {}
|
|
166
|
+
|
|
167
|
+
def register(self, skill: Skill):
|
|
168
|
+
"""注册技能"""
|
|
169
|
+
if not isinstance(skill, Skill):
|
|
170
|
+
raise TypeError(f"必须是 Skill 子类,得到: {type(skill)}")
|
|
171
|
+
self._skills[skill.name] = skill
|
|
172
|
+
logger.debug(f"技能已注册: {skill.name}")
|
|
173
|
+
|
|
174
|
+
def unregister(self, name: str) -> bool:
|
|
175
|
+
"""注销技能,返回是否成功"""
|
|
176
|
+
if name in self._skills:
|
|
177
|
+
del self._skills[name]
|
|
178
|
+
logger.debug(f"技能已注销: {name}")
|
|
179
|
+
return True
|
|
180
|
+
if name in self._openclaw_skills:
|
|
181
|
+
del self._openclaw_skills[name]
|
|
182
|
+
logger.debug(f"OpenClaw 技能已注销: {name}")
|
|
183
|
+
return True
|
|
184
|
+
return False
|
|
185
|
+
|
|
186
|
+
def get(self, name: str) -> Optional[Skill]:
|
|
187
|
+
"""获取技能(先查内置,再查 OpenClaw)"""
|
|
188
|
+
skill = self._skills.get(name)
|
|
189
|
+
if skill:
|
|
190
|
+
return skill
|
|
191
|
+
return self._openclaw_skills.get(name)
|
|
192
|
+
|
|
193
|
+
def list_skills(self) -> List[str]:
|
|
194
|
+
"""列出所有技能名称"""
|
|
195
|
+
builtin = list(self._skills.keys())
|
|
196
|
+
external = [f"[OpenClaw] {name}" for name in self._openclaw_skills.keys()
|
|
197
|
+
if name not in self._skills]
|
|
198
|
+
return builtin + external
|
|
199
|
+
|
|
200
|
+
def list_skills_info(self) -> List[Dict]:
|
|
201
|
+
"""列出所有技能的详细信息"""
|
|
202
|
+
results = [skill.to_openclaw_format() for skill in self._skills.values()]
|
|
203
|
+
results.extend(
|
|
204
|
+
skill.to_openclaw_format() for skill in self._openclaw_skills.values()
|
|
205
|
+
if skill.name not in self._skills
|
|
206
|
+
)
|
|
207
|
+
return results
|
|
208
|
+
|
|
209
|
+
def get_all_schemas(self) -> List[Dict]:
|
|
210
|
+
"""获取所有技能的 JSON Schema (用于 LLM function calling)"""
|
|
211
|
+
all_skills = {**self._skills, **self._openclaw_skills}
|
|
212
|
+
return [skill.get_schema() for skill in all_skills.values()]
|
|
213
|
+
|
|
214
|
+
async def execute(self, name: str, **kwargs) -> SkillResult:
|
|
215
|
+
"""
|
|
216
|
+
按名称执行技能。
|
|
217
|
+
|
|
218
|
+
Args:
|
|
219
|
+
name: 技能名称
|
|
220
|
+
**kwargs: 技能参数
|
|
221
|
+
|
|
222
|
+
Returns:
|
|
223
|
+
SkillResult
|
|
224
|
+
"""
|
|
225
|
+
skill = self.get(name)
|
|
226
|
+
if not skill:
|
|
227
|
+
return SkillResult(
|
|
228
|
+
success=False,
|
|
229
|
+
error=f"技能不存在: {name}",
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
# 参数校验
|
|
233
|
+
valid, err = skill.validate_params(kwargs)
|
|
234
|
+
if not valid:
|
|
235
|
+
return SkillResult(success=False, error=err)
|
|
236
|
+
|
|
237
|
+
try:
|
|
238
|
+
logger.info(f"执行技能: {name} (参数: {list(kwargs.keys())})")
|
|
239
|
+
result = await skill.execute(**kwargs)
|
|
240
|
+
return result
|
|
241
|
+
except Exception as e:
|
|
242
|
+
logger.error(f"技能执行失败 ({name}): {e}")
|
|
243
|
+
return SkillResult(
|
|
244
|
+
success=False,
|
|
245
|
+
error=f"技能执行异常: {name} - {str(e)}",
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
def auto_discover(self, package: str = "skills"):
|
|
249
|
+
"""
|
|
250
|
+
自动发现并注册 skills/ 目录下的所有技能。
|
|
251
|
+
|
|
252
|
+
Args:
|
|
253
|
+
package: 技能包路径
|
|
254
|
+
"""
|
|
255
|
+
skills_dir = Path(__file__).parent
|
|
256
|
+
if not skills_dir.exists():
|
|
257
|
+
return
|
|
258
|
+
|
|
259
|
+
for file in skills_dir.glob("*_skill.py"):
|
|
260
|
+
if file.name.startswith("_") or file.name == "base.py":
|
|
261
|
+
continue
|
|
262
|
+
|
|
263
|
+
module_name = f"{package}.{file.stem}"
|
|
264
|
+
try:
|
|
265
|
+
module = importlib.import_module(module_name)
|
|
266
|
+
# 查找模块中的 Skill 子类
|
|
267
|
+
for attr_name in dir(module):
|
|
268
|
+
attr = getattr(module, attr_name)
|
|
269
|
+
if (inspect.isclass(attr)
|
|
270
|
+
and issubclass(attr, Skill)
|
|
271
|
+
and attr is not Skill
|
|
272
|
+
and not attr.__name__.startswith("_")):
|
|
273
|
+
try:
|
|
274
|
+
instance = attr()
|
|
275
|
+
self.register(instance)
|
|
276
|
+
logger.info(f"自动发现技能: {instance.name}")
|
|
277
|
+
except Exception as e:
|
|
278
|
+
logger.warning(f"技能实例化失败 ({attr_name}): {e}")
|
|
279
|
+
except Exception as e:
|
|
280
|
+
logger.warning(f"模块导入失败 ({module_name}): {e}")
|
|
281
|
+
|
|
282
|
+
def load_openclaw_skills(self, skills_root: str = ""):
|
|
283
|
+
"""
|
|
284
|
+
加载外部 OpenClaw 格式技能。
|
|
285
|
+
|
|
286
|
+
扫描指定目录下所有包含 SKILL.md 的子目录,
|
|
287
|
+
为每个技能创建 OpenClawSkillAdapter 并注册。
|
|
288
|
+
|
|
289
|
+
Args:
|
|
290
|
+
skills_root: 外部技能根目录(默认为项目根目录下的 skills/)
|
|
291
|
+
"""
|
|
292
|
+
if not skills_root:
|
|
293
|
+
skills_root = str(Path(__file__).parent.parent.parent / "skills")
|
|
294
|
+
|
|
295
|
+
skills_path = Path(skills_root)
|
|
296
|
+
if not skills_path.exists():
|
|
297
|
+
logger.debug(f"外部技能目录不存在: {skills_path}")
|
|
298
|
+
return
|
|
299
|
+
|
|
300
|
+
loaded_count = 0
|
|
301
|
+
for skill_dir in skills_path.iterdir():
|
|
302
|
+
if not skill_dir.is_dir():
|
|
303
|
+
continue
|
|
304
|
+
if skill_dir.name.startswith("_") or skill_dir.name.startswith("."):
|
|
305
|
+
continue
|
|
306
|
+
|
|
307
|
+
# 检查是否包含 SKILL.md
|
|
308
|
+
if not (skill_dir / "SKILL.md").exists():
|
|
309
|
+
continue
|
|
310
|
+
|
|
311
|
+
skill_name = skill_dir.name
|
|
312
|
+
|
|
313
|
+
# 跳过已注册的同名内置技能
|
|
314
|
+
if skill_name in self._skills:
|
|
315
|
+
continue
|
|
316
|
+
|
|
317
|
+
try:
|
|
318
|
+
adapter = OpenClawSkillAdapter(skill_dir)
|
|
319
|
+
self._openclaw_skills[skill_name] = adapter
|
|
320
|
+
loaded_count += 1
|
|
321
|
+
logger.info(f"已加载 OpenClaw 技能: {skill_name} - {adapter.description[:80]}")
|
|
322
|
+
except Exception as e:
|
|
323
|
+
logger.warning(f"加载 OpenClaw 技能失败 ({skill_name}): {e}")
|
|
324
|
+
|
|
325
|
+
if loaded_count > 0:
|
|
326
|
+
logger.info(f"共加载 {loaded_count} 个 OpenClaw 外部技能")
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
# ==============================================================================
|
|
330
|
+
# 全局注册表
|
|
331
|
+
# ==============================================================================
|
|
332
|
+
|
|
333
|
+
_global_registry: Optional[SkillRegistry] = None
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
def get_skill_registry() -> SkillRegistry:
|
|
337
|
+
"""获取全局技能注册表"""
|
|
338
|
+
global _global_registry
|
|
339
|
+
if _global_registry is None:
|
|
340
|
+
_global_registry = SkillRegistry()
|
|
341
|
+
_global_registry.auto_discover()
|
|
342
|
+
# 自动加载外部 OpenClaw 技能
|
|
343
|
+
_global_registry.load_openclaw_skills()
|
|
344
|
+
return _global_registry
|