From db783a7c3d3e1afd4df96368720c7e1395b63e16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=BD=AE?= Date: Sat, 18 Apr 2026 23:19:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9skill=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .features/skill/MEMORY.md | 4 +- skills/{ => common}/docx/LICENSE.txt | 0 skills/{ => common}/docx/SKILL.md | 0 skills/{ => common}/docx/docx-js.md | 0 skills/{ => common}/docx/ooxml.md | 0 .../schemas/ISO-IEC29500-4_2016/dml-chart.xsd | 0 .../ISO-IEC29500-4_2016/dml-chartDrawing.xsd | 0 .../ISO-IEC29500-4_2016/dml-diagram.xsd | 0 .../ISO-IEC29500-4_2016/dml-lockedCanvas.xsd | 0 .../schemas/ISO-IEC29500-4_2016/dml-main.xsd | 0 .../ISO-IEC29500-4_2016/dml-picture.xsd | 0 .../dml-spreadsheetDrawing.xsd | 0 .../dml-wordprocessingDrawing.xsd | 0 .../ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd | 0 .../shared-additionalCharacteristics.xsd | 0 .../shared-bibliography.xsd | 0 .../shared-commonSimpleTypes.xsd | 0 .../shared-customXmlDataProperties.xsd | 0 .../shared-customXmlSchemaProperties.xsd | 0 .../shared-documentPropertiesCustom.xsd | 0 .../shared-documentPropertiesExtended.xsd | 0 .../shared-documentPropertiesVariantTypes.xsd | 0 .../ISO-IEC29500-4_2016/shared-math.xsd | 0 .../shared-relationshipReference.xsd | 0 .../ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd | 0 .../schemas/ISO-IEC29500-4_2016/vml-main.xsd | 0 .../ISO-IEC29500-4_2016/vml-officeDrawing.xsd | 0 .../vml-presentationDrawing.xsd | 0 .../vml-spreadsheetDrawing.xsd | 0 .../vml-wordprocessingDrawing.xsd | 0 .../ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd | 0 .../ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd | 0 .../ecma/fouth-edition/opc-contentTypes.xsd | 0 .../ecma/fouth-edition/opc-coreProperties.xsd | 0 .../schemas/ecma/fouth-edition/opc-digSig.xsd | 0 .../ecma/fouth-edition/opc-relationships.xsd | 0 .../docx/ooxml/schemas/mce/mc.xsd | 0 .../docx/ooxml/schemas/microsoft/wml-2010.xsd | 0 .../docx/ooxml/schemas/microsoft/wml-2012.xsd | 0 .../docx/ooxml/schemas/microsoft/wml-2018.xsd | 0 .../ooxml/schemas/microsoft/wml-cex-2018.xsd | 0 .../ooxml/schemas/microsoft/wml-cid-2016.xsd | 0 .../microsoft/wml-sdtdatahash-2020.xsd | 0 .../schemas/microsoft/wml-symex-2015.xsd | 0 .../{ => common}/docx/ooxml/scripts/pack.py | 0 .../{ => common}/docx/ooxml/scripts/unpack.py | 0 .../docx/ooxml/scripts/validate.py | 0 .../docx/ooxml/scripts/validation/__init__.py | 0 .../docx/ooxml/scripts/validation/base.py | 0 .../docx/ooxml/scripts/validation/docx.py | 0 .../docx/ooxml/scripts/validation/pptx.py | 0 .../ooxml/scripts/validation/redlining.py | 0 skills/{ => common}/docx/scripts/__init__.py | 0 skills/{ => common}/docx/scripts/document.py | 0 .../docx/scripts/templates/comments.xml | 0 .../scripts/templates/commentsExtended.xml | 0 .../scripts/templates/commentsExtensible.xml | 0 .../docx/scripts/templates/commentsIds.xml | 0 .../docx/scripts/templates/people.xml | 0 skills/{ => common}/docx/scripts/utilities.py | 0 skills/{ => common}/imap-smtp-email/SKILL.md | 0 .../imap-smtp-email/scripts/imap.js | 0 .../imap-smtp-email/scripts/smtp.js | 0 skills/{ => common}/imap-smtp-email/setup.sh | 0 skills/{ => common}/pdf/LICENSE.txt | 0 skills/{ => common}/pdf/SKILL.md | 0 skills/{ => common}/pdf/forms.md | 0 skills/{ => common}/pdf/reference.md | 0 .../pdf/scripts/check_bounding_boxes.py | 0 .../pdf/scripts/check_bounding_boxes_test.py | 0 .../pdf/scripts/check_fillable_fields.py | 0 .../pdf/scripts/convert_pdf_to_images.py | 0 .../pdf/scripts/create_validation_image.py | 0 .../pdf/scripts/extract_form_field_info.py | 0 .../pdf/scripts/fill_fillable_fields.py | 0 .../scripts/fill_pdf_form_with_annotations.py | 0 skills/{ => common}/pptx/LICENSE.txt | 0 skills/{ => common}/pptx/SKILL.md | 0 skills/{ => common}/pptx/html2pptx.md | 0 skills/{ => common}/pptx/ooxml.md | 0 .../schemas/ISO-IEC29500-4_2016/dml-chart.xsd | 0 .../ISO-IEC29500-4_2016/dml-chartDrawing.xsd | 0 .../ISO-IEC29500-4_2016/dml-diagram.xsd | 0 .../ISO-IEC29500-4_2016/dml-lockedCanvas.xsd | 0 .../schemas/ISO-IEC29500-4_2016/dml-main.xsd | 0 .../ISO-IEC29500-4_2016/dml-picture.xsd | 0 .../dml-spreadsheetDrawing.xsd | 0 .../dml-wordprocessingDrawing.xsd | 0 .../ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd | 0 .../shared-additionalCharacteristics.xsd | 0 .../shared-bibliography.xsd | 0 .../shared-commonSimpleTypes.xsd | 0 .../shared-customXmlDataProperties.xsd | 0 .../shared-customXmlSchemaProperties.xsd | 0 .../shared-documentPropertiesCustom.xsd | 0 .../shared-documentPropertiesExtended.xsd | 0 .../shared-documentPropertiesVariantTypes.xsd | 0 .../ISO-IEC29500-4_2016/shared-math.xsd | 0 .../shared-relationshipReference.xsd | 0 .../ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd | 0 .../schemas/ISO-IEC29500-4_2016/vml-main.xsd | 0 .../ISO-IEC29500-4_2016/vml-officeDrawing.xsd | 0 .../vml-presentationDrawing.xsd | 0 .../vml-spreadsheetDrawing.xsd | 0 .../vml-wordprocessingDrawing.xsd | 0 .../ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd | 0 .../ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd | 0 .../ecma/fouth-edition/opc-contentTypes.xsd | 0 .../ecma/fouth-edition/opc-coreProperties.xsd | 0 .../schemas/ecma/fouth-edition/opc-digSig.xsd | 0 .../ecma/fouth-edition/opc-relationships.xsd | 0 .../pptx/ooxml/schemas/mce/mc.xsd | 0 .../pptx/ooxml/schemas/microsoft/wml-2010.xsd | 0 .../pptx/ooxml/schemas/microsoft/wml-2012.xsd | 0 .../pptx/ooxml/schemas/microsoft/wml-2018.xsd | 0 .../ooxml/schemas/microsoft/wml-cex-2018.xsd | 0 .../ooxml/schemas/microsoft/wml-cid-2016.xsd | 0 .../microsoft/wml-sdtdatahash-2020.xsd | 0 .../schemas/microsoft/wml-symex-2015.xsd | 0 .../{ => common}/pptx/ooxml/scripts/pack.py | 0 .../{ => common}/pptx/ooxml/scripts/unpack.py | 0 .../pptx/ooxml/scripts/validate.py | 0 .../pptx/ooxml/scripts/validation/__init__.py | 0 .../pptx/ooxml/scripts/validation/base.py | 0 .../pptx/ooxml/scripts/validation/docx.py | 0 .../pptx/ooxml/scripts/validation/pptx.py | 0 .../ooxml/scripts/validation/redlining.py | 0 skills/{ => common}/pptx/scripts/html2pptx.js | 0 skills/{ => common}/pptx/scripts/inventory.py | 0 .../{ => common}/pptx/scripts/mermaid.min.js | 0 skills/{ => common}/pptx/scripts/rearrange.py | 0 skills/{ => common}/pptx/scripts/replace.py | 0 skills/{ => common}/pptx/scripts/thumbnail.py | 0 skills/{ => common}/r2-upload/.gitignore | 0 skills/{ => common}/r2-upload/SKILL.md | 0 .../r2-upload/references/CONFIGURATION.md | 0 .../r2-upload/references/TROUBLESHOOTING.md | 0 .../r2-upload/scripts/.r2-upload.yml | 0 .../r2-upload/scripts/r2-upload.py | 0 .../{ => common}/r2-upload/scripts/upload.py | 0 .../schedule-job/.claude-plugin/plugin.json | 0 skills/{ => common}/schedule-job/SKILL.md | 0 .../schedule-job/scripts/schedule_manager.py | 0 skills/{ => common}/skill-creator/LICENSE.txt | 0 skills/{ => common}/skill-creator/SKILL.md | 0 .../skill-creator/agents/analyzer.md | 0 .../skill-creator/agents/comparator.md | 0 .../skill-creator/agents/grader.md | 0 .../skill-creator/assets/eval_review.html | 0 .../eval-viewer/generate_review.py | 0 .../skill-creator/eval-viewer/viewer.html | 0 .../skill-creator/references/schemas.md | 0 .../skill-creator/scripts/__init__.py | 0 .../scripts/aggregate_benchmark.py | 0 .../skill-creator/scripts/generate_report.py | 0 .../scripts/improve_description.py | 0 .../skill-creator/scripts/package_skill.py | 0 .../skill-creator/scripts/quick_validate.py | 0 .../skill-creator/scripts/run_eval.py | 0 .../skill-creator/scripts/run_loop.py | 0 .../skill-creator/scripts/utils.py | 0 skills/{ => common}/xlsx/LICENSE.txt | 0 skills/{ => common}/xlsx/SKILL.md | 0 skills/{ => common}/xlsx/recalc.py | 0 .../.claude-plugin/plugin.json | 0 .../{ => onprem}/rag-retrieve-only/README.md | 0 .../rag-retrieve-only/hooks/pre_prompt.py | 0 .../hooks/retrieval-policy.md | 0 .../rag-retrieve-only/mcp_common.py | 0 .../rag-retrieve-only/rag_retrieve_server.py | 0 .../rag-retrieve-only/rag_retrieve_tools.json | 0 .../board-meeting-pack-helper/SKILL.md | 0 .../customer-reply-tone/SKILL.md | 0 .../{ => support}/exec-brief-1pager/SKILL.md | 0 .../incident-postmortem-ja/SKILL.md | 0 .../japan-compliance-checker/SKILL.md | 0 .../japanese-business-writer/SKILL.md | 0 .../japanese-pii-redactor/SKILL.md | 0 .../meeting-minutes-action/SKILL.md | 0 .../proposal-rfp-writer/SKILL.md | 0 .../quotation-sow-drafter/SKILL.md | 0 .../.claude-plugin/plugin.json | 22 ++ skills/support/rag-retrieve-only/README.md | 34 +++ .../rag-retrieve-only/hooks/pre_prompt.py | 20 ++ .../hooks/retrieval-policy.md | 31 +++ .../support/rag-retrieve-only/mcp_common.py | 251 ++++++++++++++++++ .../rag-retrieve-only/rag_retrieve_server.py | 222 ++++++++++++++++ .../rag-retrieve-only/rag_retrieve_tools.json | 21 ++ skills/{ => support}/sales-followup/SKILL.md | 0 .../{ => support}/stakeholder-update/SKILL.md | 0 .../managing-scripts/SKILL.md | 0 utils/multi_project_manager.py | 10 +- utils/settings.py | 1 + 193 files changed, 612 insertions(+), 4 deletions(-) rename skills/{ => common}/docx/LICENSE.txt (100%) rename skills/{ => common}/docx/SKILL.md (100%) rename skills/{ => common}/docx/docx-js.md (100%) rename skills/{ => common}/docx/ooxml.md (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/mce/mc.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/microsoft/wml-2010.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/microsoft/wml-2012.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/microsoft/wml-2018.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd (100%) rename skills/{ => common}/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd (100%) rename skills/{ => common}/docx/ooxml/scripts/pack.py (100%) rename skills/{ => common}/docx/ooxml/scripts/unpack.py (100%) rename skills/{ => common}/docx/ooxml/scripts/validate.py (100%) rename skills/{ => common}/docx/ooxml/scripts/validation/__init__.py (100%) rename skills/{ => common}/docx/ooxml/scripts/validation/base.py (100%) rename skills/{ => common}/docx/ooxml/scripts/validation/docx.py (100%) rename skills/{ => common}/docx/ooxml/scripts/validation/pptx.py (100%) rename skills/{ => common}/docx/ooxml/scripts/validation/redlining.py (100%) rename skills/{ => common}/docx/scripts/__init__.py (100%) rename skills/{ => common}/docx/scripts/document.py (100%) rename skills/{ => common}/docx/scripts/templates/comments.xml (100%) rename skills/{ => common}/docx/scripts/templates/commentsExtended.xml (100%) rename skills/{ => common}/docx/scripts/templates/commentsExtensible.xml (100%) rename skills/{ => common}/docx/scripts/templates/commentsIds.xml (100%) rename skills/{ => common}/docx/scripts/templates/people.xml (100%) rename skills/{ => common}/docx/scripts/utilities.py (100%) rename skills/{ => common}/imap-smtp-email/SKILL.md (100%) rename skills/{ => common}/imap-smtp-email/scripts/imap.js (100%) rename skills/{ => common}/imap-smtp-email/scripts/smtp.js (100%) rename skills/{ => common}/imap-smtp-email/setup.sh (100%) rename skills/{ => common}/pdf/LICENSE.txt (100%) rename skills/{ => common}/pdf/SKILL.md (100%) rename skills/{ => common}/pdf/forms.md (100%) rename skills/{ => common}/pdf/reference.md (100%) rename skills/{ => common}/pdf/scripts/check_bounding_boxes.py (100%) rename skills/{ => common}/pdf/scripts/check_bounding_boxes_test.py (100%) rename skills/{ => common}/pdf/scripts/check_fillable_fields.py (100%) rename skills/{ => common}/pdf/scripts/convert_pdf_to_images.py (100%) rename skills/{ => common}/pdf/scripts/create_validation_image.py (100%) rename skills/{ => common}/pdf/scripts/extract_form_field_info.py (100%) rename skills/{ => common}/pdf/scripts/fill_fillable_fields.py (100%) rename skills/{ => common}/pdf/scripts/fill_pdf_form_with_annotations.py (100%) rename skills/{ => common}/pptx/LICENSE.txt (100%) rename skills/{ => common}/pptx/SKILL.md (100%) rename skills/{ => common}/pptx/html2pptx.md (100%) rename skills/{ => common}/pptx/ooxml.md (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/mce/mc.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/microsoft/wml-2010.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/microsoft/wml-2012.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/microsoft/wml-2018.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd (100%) rename skills/{ => common}/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd (100%) rename skills/{ => common}/pptx/ooxml/scripts/pack.py (100%) rename skills/{ => common}/pptx/ooxml/scripts/unpack.py (100%) rename skills/{ => common}/pptx/ooxml/scripts/validate.py (100%) rename skills/{ => common}/pptx/ooxml/scripts/validation/__init__.py (100%) rename skills/{ => common}/pptx/ooxml/scripts/validation/base.py (100%) rename skills/{ => common}/pptx/ooxml/scripts/validation/docx.py (100%) rename skills/{ => common}/pptx/ooxml/scripts/validation/pptx.py (100%) rename skills/{ => common}/pptx/ooxml/scripts/validation/redlining.py (100%) rename skills/{ => common}/pptx/scripts/html2pptx.js (100%) rename skills/{ => common}/pptx/scripts/inventory.py (100%) rename skills/{ => common}/pptx/scripts/mermaid.min.js (100%) rename skills/{ => common}/pptx/scripts/rearrange.py (100%) rename skills/{ => common}/pptx/scripts/replace.py (100%) rename skills/{ => common}/pptx/scripts/thumbnail.py (100%) rename skills/{ => common}/r2-upload/.gitignore (100%) rename skills/{ => common}/r2-upload/SKILL.md (100%) rename skills/{ => common}/r2-upload/references/CONFIGURATION.md (100%) rename skills/{ => common}/r2-upload/references/TROUBLESHOOTING.md (100%) rename skills/{ => common}/r2-upload/scripts/.r2-upload.yml (100%) rename skills/{ => common}/r2-upload/scripts/r2-upload.py (100%) rename skills/{ => common}/r2-upload/scripts/upload.py (100%) rename skills/{ => common}/schedule-job/.claude-plugin/plugin.json (100%) rename skills/{ => common}/schedule-job/SKILL.md (100%) rename skills/{ => common}/schedule-job/scripts/schedule_manager.py (100%) rename skills/{ => common}/skill-creator/LICENSE.txt (100%) rename skills/{ => common}/skill-creator/SKILL.md (100%) rename skills/{ => common}/skill-creator/agents/analyzer.md (100%) rename skills/{ => common}/skill-creator/agents/comparator.md (100%) rename skills/{ => common}/skill-creator/agents/grader.md (100%) rename skills/{ => common}/skill-creator/assets/eval_review.html (100%) rename skills/{ => common}/skill-creator/eval-viewer/generate_review.py (100%) rename skills/{ => common}/skill-creator/eval-viewer/viewer.html (100%) rename skills/{ => common}/skill-creator/references/schemas.md (100%) rename skills/{ => common}/skill-creator/scripts/__init__.py (100%) rename skills/{ => common}/skill-creator/scripts/aggregate_benchmark.py (100%) rename skills/{ => common}/skill-creator/scripts/generate_report.py (100%) rename skills/{ => common}/skill-creator/scripts/improve_description.py (100%) rename skills/{ => common}/skill-creator/scripts/package_skill.py (100%) rename skills/{ => common}/skill-creator/scripts/quick_validate.py (100%) rename skills/{ => common}/skill-creator/scripts/run_eval.py (100%) rename skills/{ => common}/skill-creator/scripts/run_loop.py (100%) rename skills/{ => common}/skill-creator/scripts/utils.py (100%) rename skills/{ => common}/xlsx/LICENSE.txt (100%) rename skills/{ => common}/xlsx/SKILL.md (100%) rename skills/{ => common}/xlsx/recalc.py (100%) rename skills/{ => onprem}/rag-retrieve-only/.claude-plugin/plugin.json (100%) rename skills/{ => onprem}/rag-retrieve-only/README.md (100%) rename skills/{ => onprem}/rag-retrieve-only/hooks/pre_prompt.py (100%) rename skills/{ => onprem}/rag-retrieve-only/hooks/retrieval-policy.md (100%) rename skills/{ => onprem}/rag-retrieve-only/mcp_common.py (100%) rename skills/{ => onprem}/rag-retrieve-only/rag_retrieve_server.py (100%) rename skills/{ => onprem}/rag-retrieve-only/rag_retrieve_tools.json (100%) rename skills/{ => support}/board-meeting-pack-helper/SKILL.md (100%) rename skills/{ => support}/customer-reply-tone/SKILL.md (100%) rename skills/{ => support}/exec-brief-1pager/SKILL.md (100%) rename skills/{ => support}/incident-postmortem-ja/SKILL.md (100%) rename skills/{ => support}/japan-compliance-checker/SKILL.md (100%) rename skills/{ => support}/japanese-business-writer/SKILL.md (100%) rename skills/{ => support}/japanese-pii-redactor/SKILL.md (100%) rename skills/{ => support}/meeting-minutes-action/SKILL.md (100%) rename skills/{ => support}/proposal-rfp-writer/SKILL.md (100%) rename skills/{ => support}/quotation-sow-drafter/SKILL.md (100%) create mode 100644 skills/support/rag-retrieve-only/.claude-plugin/plugin.json create mode 100644 skills/support/rag-retrieve-only/README.md create mode 100644 skills/support/rag-retrieve-only/hooks/pre_prompt.py create mode 100644 skills/support/rag-retrieve-only/hooks/retrieval-policy.md create mode 100644 skills/support/rag-retrieve-only/mcp_common.py create mode 100644 skills/support/rag-retrieve-only/rag_retrieve_server.py create mode 100644 skills/support/rag-retrieve-only/rag_retrieve_tools.json rename skills/{ => support}/sales-followup/SKILL.md (100%) rename skills/{ => support}/stakeholder-update/SKILL.md (100%) rename {skills => skills_developing}/managing-scripts/SKILL.md (100%) diff --git a/.features/skill/MEMORY.md b/.features/skill/MEMORY.md index e8f40d5..fdf9b92 100644 --- a/.features/skill/MEMORY.md +++ b/.features/skill/MEMORY.md @@ -1,7 +1,7 @@ # Skill 功能 > 负责范围:技能包管理服务 - 核心实现 -> 最后更新:2025-02-11 +> 最后更新:2026-04-18 ## 当前状态 @@ -18,10 +18,12 @@ Skill 系统支持两种来源:官方 skills (`./skills/`) 和用户 skills (` ## 最近重要事项 +- 2026-04-18: `_extract_skills_to_robot` 改为通过环境变量 `SKILLS_SUBDIR` 选择官方 skills 子目录,默认使用 `skills/common` - 2025-02-11: 初始化 skill 功能 memory ## Gotchas(开发必读) +- ⚠️ `_extract_skills_to_robot` 只会从 `skills/{SKILLS_SUBDIR}` 读取官方 skills,默认是 `common` - ⚠️ 执行脚本必须使用绝对路径 - ⚠️ MCP 配置优先级:Skill MCP > 默认 MCP > 用户参数 - ⚠️ 上传大小限制:50MB(ZIP),解压后最大 500MB diff --git a/skills/docx/LICENSE.txt b/skills/common/docx/LICENSE.txt similarity index 100% rename from skills/docx/LICENSE.txt rename to skills/common/docx/LICENSE.txt diff --git a/skills/docx/SKILL.md b/skills/common/docx/SKILL.md similarity index 100% rename from skills/docx/SKILL.md rename to skills/common/docx/SKILL.md diff --git a/skills/docx/docx-js.md b/skills/common/docx/docx-js.md similarity index 100% rename from skills/docx/docx-js.md rename to skills/common/docx/docx-js.md diff --git a/skills/docx/ooxml.md b/skills/common/docx/ooxml.md similarity index 100% rename from skills/docx/ooxml.md rename to skills/common/docx/ooxml.md diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd diff --git a/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd b/skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd rename to skills/common/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd diff --git a/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd b/skills/common/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd rename to skills/common/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd diff --git a/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd b/skills/common/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd rename to skills/common/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd diff --git a/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd b/skills/common/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd rename to skills/common/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd diff --git a/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd b/skills/common/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd similarity index 100% rename from skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd rename to skills/common/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd diff --git a/skills/docx/ooxml/schemas/mce/mc.xsd b/skills/common/docx/ooxml/schemas/mce/mc.xsd similarity index 100% rename from skills/docx/ooxml/schemas/mce/mc.xsd rename to skills/common/docx/ooxml/schemas/mce/mc.xsd diff --git a/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd b/skills/common/docx/ooxml/schemas/microsoft/wml-2010.xsd similarity index 100% rename from skills/docx/ooxml/schemas/microsoft/wml-2010.xsd rename to skills/common/docx/ooxml/schemas/microsoft/wml-2010.xsd diff --git a/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd b/skills/common/docx/ooxml/schemas/microsoft/wml-2012.xsd similarity index 100% rename from skills/docx/ooxml/schemas/microsoft/wml-2012.xsd rename to skills/common/docx/ooxml/schemas/microsoft/wml-2012.xsd diff --git a/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd b/skills/common/docx/ooxml/schemas/microsoft/wml-2018.xsd similarity index 100% rename from skills/docx/ooxml/schemas/microsoft/wml-2018.xsd rename to skills/common/docx/ooxml/schemas/microsoft/wml-2018.xsd diff --git a/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd b/skills/common/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd similarity index 100% rename from skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd rename to skills/common/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd diff --git a/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd b/skills/common/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd similarity index 100% rename from skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd rename to skills/common/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd diff --git a/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd b/skills/common/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd similarity index 100% rename from skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd rename to skills/common/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd diff --git a/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd b/skills/common/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd similarity index 100% rename from skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd rename to skills/common/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd diff --git a/skills/docx/ooxml/scripts/pack.py b/skills/common/docx/ooxml/scripts/pack.py similarity index 100% rename from skills/docx/ooxml/scripts/pack.py rename to skills/common/docx/ooxml/scripts/pack.py diff --git a/skills/docx/ooxml/scripts/unpack.py b/skills/common/docx/ooxml/scripts/unpack.py similarity index 100% rename from skills/docx/ooxml/scripts/unpack.py rename to skills/common/docx/ooxml/scripts/unpack.py diff --git a/skills/docx/ooxml/scripts/validate.py b/skills/common/docx/ooxml/scripts/validate.py similarity index 100% rename from skills/docx/ooxml/scripts/validate.py rename to skills/common/docx/ooxml/scripts/validate.py diff --git a/skills/docx/ooxml/scripts/validation/__init__.py b/skills/common/docx/ooxml/scripts/validation/__init__.py similarity index 100% rename from skills/docx/ooxml/scripts/validation/__init__.py rename to skills/common/docx/ooxml/scripts/validation/__init__.py diff --git a/skills/docx/ooxml/scripts/validation/base.py b/skills/common/docx/ooxml/scripts/validation/base.py similarity index 100% rename from skills/docx/ooxml/scripts/validation/base.py rename to skills/common/docx/ooxml/scripts/validation/base.py diff --git a/skills/docx/ooxml/scripts/validation/docx.py b/skills/common/docx/ooxml/scripts/validation/docx.py similarity index 100% rename from skills/docx/ooxml/scripts/validation/docx.py rename to skills/common/docx/ooxml/scripts/validation/docx.py diff --git a/skills/docx/ooxml/scripts/validation/pptx.py b/skills/common/docx/ooxml/scripts/validation/pptx.py similarity index 100% rename from skills/docx/ooxml/scripts/validation/pptx.py rename to skills/common/docx/ooxml/scripts/validation/pptx.py diff --git a/skills/docx/ooxml/scripts/validation/redlining.py b/skills/common/docx/ooxml/scripts/validation/redlining.py similarity index 100% rename from skills/docx/ooxml/scripts/validation/redlining.py rename to skills/common/docx/ooxml/scripts/validation/redlining.py diff --git a/skills/docx/scripts/__init__.py b/skills/common/docx/scripts/__init__.py similarity index 100% rename from skills/docx/scripts/__init__.py rename to skills/common/docx/scripts/__init__.py diff --git a/skills/docx/scripts/document.py b/skills/common/docx/scripts/document.py similarity index 100% rename from skills/docx/scripts/document.py rename to skills/common/docx/scripts/document.py diff --git a/skills/docx/scripts/templates/comments.xml b/skills/common/docx/scripts/templates/comments.xml similarity index 100% rename from skills/docx/scripts/templates/comments.xml rename to skills/common/docx/scripts/templates/comments.xml diff --git a/skills/docx/scripts/templates/commentsExtended.xml b/skills/common/docx/scripts/templates/commentsExtended.xml similarity index 100% rename from skills/docx/scripts/templates/commentsExtended.xml rename to skills/common/docx/scripts/templates/commentsExtended.xml diff --git a/skills/docx/scripts/templates/commentsExtensible.xml b/skills/common/docx/scripts/templates/commentsExtensible.xml similarity index 100% rename from skills/docx/scripts/templates/commentsExtensible.xml rename to skills/common/docx/scripts/templates/commentsExtensible.xml diff --git a/skills/docx/scripts/templates/commentsIds.xml b/skills/common/docx/scripts/templates/commentsIds.xml similarity index 100% rename from skills/docx/scripts/templates/commentsIds.xml rename to skills/common/docx/scripts/templates/commentsIds.xml diff --git a/skills/docx/scripts/templates/people.xml b/skills/common/docx/scripts/templates/people.xml similarity index 100% rename from skills/docx/scripts/templates/people.xml rename to skills/common/docx/scripts/templates/people.xml diff --git a/skills/docx/scripts/utilities.py b/skills/common/docx/scripts/utilities.py similarity index 100% rename from skills/docx/scripts/utilities.py rename to skills/common/docx/scripts/utilities.py diff --git a/skills/imap-smtp-email/SKILL.md b/skills/common/imap-smtp-email/SKILL.md similarity index 100% rename from skills/imap-smtp-email/SKILL.md rename to skills/common/imap-smtp-email/SKILL.md diff --git a/skills/imap-smtp-email/scripts/imap.js b/skills/common/imap-smtp-email/scripts/imap.js similarity index 100% rename from skills/imap-smtp-email/scripts/imap.js rename to skills/common/imap-smtp-email/scripts/imap.js diff --git a/skills/imap-smtp-email/scripts/smtp.js b/skills/common/imap-smtp-email/scripts/smtp.js similarity index 100% rename from skills/imap-smtp-email/scripts/smtp.js rename to skills/common/imap-smtp-email/scripts/smtp.js diff --git a/skills/imap-smtp-email/setup.sh b/skills/common/imap-smtp-email/setup.sh similarity index 100% rename from skills/imap-smtp-email/setup.sh rename to skills/common/imap-smtp-email/setup.sh diff --git a/skills/pdf/LICENSE.txt b/skills/common/pdf/LICENSE.txt similarity index 100% rename from skills/pdf/LICENSE.txt rename to skills/common/pdf/LICENSE.txt diff --git a/skills/pdf/SKILL.md b/skills/common/pdf/SKILL.md similarity index 100% rename from skills/pdf/SKILL.md rename to skills/common/pdf/SKILL.md diff --git a/skills/pdf/forms.md b/skills/common/pdf/forms.md similarity index 100% rename from skills/pdf/forms.md rename to skills/common/pdf/forms.md diff --git a/skills/pdf/reference.md b/skills/common/pdf/reference.md similarity index 100% rename from skills/pdf/reference.md rename to skills/common/pdf/reference.md diff --git a/skills/pdf/scripts/check_bounding_boxes.py b/skills/common/pdf/scripts/check_bounding_boxes.py similarity index 100% rename from skills/pdf/scripts/check_bounding_boxes.py rename to skills/common/pdf/scripts/check_bounding_boxes.py diff --git a/skills/pdf/scripts/check_bounding_boxes_test.py b/skills/common/pdf/scripts/check_bounding_boxes_test.py similarity index 100% rename from skills/pdf/scripts/check_bounding_boxes_test.py rename to skills/common/pdf/scripts/check_bounding_boxes_test.py diff --git a/skills/pdf/scripts/check_fillable_fields.py b/skills/common/pdf/scripts/check_fillable_fields.py similarity index 100% rename from skills/pdf/scripts/check_fillable_fields.py rename to skills/common/pdf/scripts/check_fillable_fields.py diff --git a/skills/pdf/scripts/convert_pdf_to_images.py b/skills/common/pdf/scripts/convert_pdf_to_images.py similarity index 100% rename from skills/pdf/scripts/convert_pdf_to_images.py rename to skills/common/pdf/scripts/convert_pdf_to_images.py diff --git a/skills/pdf/scripts/create_validation_image.py b/skills/common/pdf/scripts/create_validation_image.py similarity index 100% rename from skills/pdf/scripts/create_validation_image.py rename to skills/common/pdf/scripts/create_validation_image.py diff --git a/skills/pdf/scripts/extract_form_field_info.py b/skills/common/pdf/scripts/extract_form_field_info.py similarity index 100% rename from skills/pdf/scripts/extract_form_field_info.py rename to skills/common/pdf/scripts/extract_form_field_info.py diff --git a/skills/pdf/scripts/fill_fillable_fields.py b/skills/common/pdf/scripts/fill_fillable_fields.py similarity index 100% rename from skills/pdf/scripts/fill_fillable_fields.py rename to skills/common/pdf/scripts/fill_fillable_fields.py diff --git a/skills/pdf/scripts/fill_pdf_form_with_annotations.py b/skills/common/pdf/scripts/fill_pdf_form_with_annotations.py similarity index 100% rename from skills/pdf/scripts/fill_pdf_form_with_annotations.py rename to skills/common/pdf/scripts/fill_pdf_form_with_annotations.py diff --git a/skills/pptx/LICENSE.txt b/skills/common/pptx/LICENSE.txt similarity index 100% rename from skills/pptx/LICENSE.txt rename to skills/common/pptx/LICENSE.txt diff --git a/skills/pptx/SKILL.md b/skills/common/pptx/SKILL.md similarity index 100% rename from skills/pptx/SKILL.md rename to skills/common/pptx/SKILL.md diff --git a/skills/pptx/html2pptx.md b/skills/common/pptx/html2pptx.md similarity index 100% rename from skills/pptx/html2pptx.md rename to skills/common/pptx/html2pptx.md diff --git a/skills/pptx/ooxml.md b/skills/common/pptx/ooxml.md similarity index 100% rename from skills/pptx/ooxml.md rename to skills/common/pptx/ooxml.md diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd diff --git a/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd b/skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd rename to skills/common/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd diff --git a/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd b/skills/common/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd rename to skills/common/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd diff --git a/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd b/skills/common/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd rename to skills/common/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd diff --git a/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd b/skills/common/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd rename to skills/common/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd diff --git a/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd b/skills/common/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd rename to skills/common/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd diff --git a/skills/pptx/ooxml/schemas/mce/mc.xsd b/skills/common/pptx/ooxml/schemas/mce/mc.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/mce/mc.xsd rename to skills/common/pptx/ooxml/schemas/mce/mc.xsd diff --git a/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd b/skills/common/pptx/ooxml/schemas/microsoft/wml-2010.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd rename to skills/common/pptx/ooxml/schemas/microsoft/wml-2010.xsd diff --git a/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd b/skills/common/pptx/ooxml/schemas/microsoft/wml-2012.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd rename to skills/common/pptx/ooxml/schemas/microsoft/wml-2012.xsd diff --git a/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd b/skills/common/pptx/ooxml/schemas/microsoft/wml-2018.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd rename to skills/common/pptx/ooxml/schemas/microsoft/wml-2018.xsd diff --git a/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd b/skills/common/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd rename to skills/common/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd diff --git a/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd b/skills/common/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd rename to skills/common/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd diff --git a/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd b/skills/common/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd rename to skills/common/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd diff --git a/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd b/skills/common/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd similarity index 100% rename from skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd rename to skills/common/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd diff --git a/skills/pptx/ooxml/scripts/pack.py b/skills/common/pptx/ooxml/scripts/pack.py similarity index 100% rename from skills/pptx/ooxml/scripts/pack.py rename to skills/common/pptx/ooxml/scripts/pack.py diff --git a/skills/pptx/ooxml/scripts/unpack.py b/skills/common/pptx/ooxml/scripts/unpack.py similarity index 100% rename from skills/pptx/ooxml/scripts/unpack.py rename to skills/common/pptx/ooxml/scripts/unpack.py diff --git a/skills/pptx/ooxml/scripts/validate.py b/skills/common/pptx/ooxml/scripts/validate.py similarity index 100% rename from skills/pptx/ooxml/scripts/validate.py rename to skills/common/pptx/ooxml/scripts/validate.py diff --git a/skills/pptx/ooxml/scripts/validation/__init__.py b/skills/common/pptx/ooxml/scripts/validation/__init__.py similarity index 100% rename from skills/pptx/ooxml/scripts/validation/__init__.py rename to skills/common/pptx/ooxml/scripts/validation/__init__.py diff --git a/skills/pptx/ooxml/scripts/validation/base.py b/skills/common/pptx/ooxml/scripts/validation/base.py similarity index 100% rename from skills/pptx/ooxml/scripts/validation/base.py rename to skills/common/pptx/ooxml/scripts/validation/base.py diff --git a/skills/pptx/ooxml/scripts/validation/docx.py b/skills/common/pptx/ooxml/scripts/validation/docx.py similarity index 100% rename from skills/pptx/ooxml/scripts/validation/docx.py rename to skills/common/pptx/ooxml/scripts/validation/docx.py diff --git a/skills/pptx/ooxml/scripts/validation/pptx.py b/skills/common/pptx/ooxml/scripts/validation/pptx.py similarity index 100% rename from skills/pptx/ooxml/scripts/validation/pptx.py rename to skills/common/pptx/ooxml/scripts/validation/pptx.py diff --git a/skills/pptx/ooxml/scripts/validation/redlining.py b/skills/common/pptx/ooxml/scripts/validation/redlining.py similarity index 100% rename from skills/pptx/ooxml/scripts/validation/redlining.py rename to skills/common/pptx/ooxml/scripts/validation/redlining.py diff --git a/skills/pptx/scripts/html2pptx.js b/skills/common/pptx/scripts/html2pptx.js similarity index 100% rename from skills/pptx/scripts/html2pptx.js rename to skills/common/pptx/scripts/html2pptx.js diff --git a/skills/pptx/scripts/inventory.py b/skills/common/pptx/scripts/inventory.py similarity index 100% rename from skills/pptx/scripts/inventory.py rename to skills/common/pptx/scripts/inventory.py diff --git a/skills/pptx/scripts/mermaid.min.js b/skills/common/pptx/scripts/mermaid.min.js similarity index 100% rename from skills/pptx/scripts/mermaid.min.js rename to skills/common/pptx/scripts/mermaid.min.js diff --git a/skills/pptx/scripts/rearrange.py b/skills/common/pptx/scripts/rearrange.py similarity index 100% rename from skills/pptx/scripts/rearrange.py rename to skills/common/pptx/scripts/rearrange.py diff --git a/skills/pptx/scripts/replace.py b/skills/common/pptx/scripts/replace.py similarity index 100% rename from skills/pptx/scripts/replace.py rename to skills/common/pptx/scripts/replace.py diff --git a/skills/pptx/scripts/thumbnail.py b/skills/common/pptx/scripts/thumbnail.py similarity index 100% rename from skills/pptx/scripts/thumbnail.py rename to skills/common/pptx/scripts/thumbnail.py diff --git a/skills/r2-upload/.gitignore b/skills/common/r2-upload/.gitignore similarity index 100% rename from skills/r2-upload/.gitignore rename to skills/common/r2-upload/.gitignore diff --git a/skills/r2-upload/SKILL.md b/skills/common/r2-upload/SKILL.md similarity index 100% rename from skills/r2-upload/SKILL.md rename to skills/common/r2-upload/SKILL.md diff --git a/skills/r2-upload/references/CONFIGURATION.md b/skills/common/r2-upload/references/CONFIGURATION.md similarity index 100% rename from skills/r2-upload/references/CONFIGURATION.md rename to skills/common/r2-upload/references/CONFIGURATION.md diff --git a/skills/r2-upload/references/TROUBLESHOOTING.md b/skills/common/r2-upload/references/TROUBLESHOOTING.md similarity index 100% rename from skills/r2-upload/references/TROUBLESHOOTING.md rename to skills/common/r2-upload/references/TROUBLESHOOTING.md diff --git a/skills/r2-upload/scripts/.r2-upload.yml b/skills/common/r2-upload/scripts/.r2-upload.yml similarity index 100% rename from skills/r2-upload/scripts/.r2-upload.yml rename to skills/common/r2-upload/scripts/.r2-upload.yml diff --git a/skills/r2-upload/scripts/r2-upload.py b/skills/common/r2-upload/scripts/r2-upload.py similarity index 100% rename from skills/r2-upload/scripts/r2-upload.py rename to skills/common/r2-upload/scripts/r2-upload.py diff --git a/skills/r2-upload/scripts/upload.py b/skills/common/r2-upload/scripts/upload.py similarity index 100% rename from skills/r2-upload/scripts/upload.py rename to skills/common/r2-upload/scripts/upload.py diff --git a/skills/schedule-job/.claude-plugin/plugin.json b/skills/common/schedule-job/.claude-plugin/plugin.json similarity index 100% rename from skills/schedule-job/.claude-plugin/plugin.json rename to skills/common/schedule-job/.claude-plugin/plugin.json diff --git a/skills/schedule-job/SKILL.md b/skills/common/schedule-job/SKILL.md similarity index 100% rename from skills/schedule-job/SKILL.md rename to skills/common/schedule-job/SKILL.md diff --git a/skills/schedule-job/scripts/schedule_manager.py b/skills/common/schedule-job/scripts/schedule_manager.py similarity index 100% rename from skills/schedule-job/scripts/schedule_manager.py rename to skills/common/schedule-job/scripts/schedule_manager.py diff --git a/skills/skill-creator/LICENSE.txt b/skills/common/skill-creator/LICENSE.txt similarity index 100% rename from skills/skill-creator/LICENSE.txt rename to skills/common/skill-creator/LICENSE.txt diff --git a/skills/skill-creator/SKILL.md b/skills/common/skill-creator/SKILL.md similarity index 100% rename from skills/skill-creator/SKILL.md rename to skills/common/skill-creator/SKILL.md diff --git a/skills/skill-creator/agents/analyzer.md b/skills/common/skill-creator/agents/analyzer.md similarity index 100% rename from skills/skill-creator/agents/analyzer.md rename to skills/common/skill-creator/agents/analyzer.md diff --git a/skills/skill-creator/agents/comparator.md b/skills/common/skill-creator/agents/comparator.md similarity index 100% rename from skills/skill-creator/agents/comparator.md rename to skills/common/skill-creator/agents/comparator.md diff --git a/skills/skill-creator/agents/grader.md b/skills/common/skill-creator/agents/grader.md similarity index 100% rename from skills/skill-creator/agents/grader.md rename to skills/common/skill-creator/agents/grader.md diff --git a/skills/skill-creator/assets/eval_review.html b/skills/common/skill-creator/assets/eval_review.html similarity index 100% rename from skills/skill-creator/assets/eval_review.html rename to skills/common/skill-creator/assets/eval_review.html diff --git a/skills/skill-creator/eval-viewer/generate_review.py b/skills/common/skill-creator/eval-viewer/generate_review.py similarity index 100% rename from skills/skill-creator/eval-viewer/generate_review.py rename to skills/common/skill-creator/eval-viewer/generate_review.py diff --git a/skills/skill-creator/eval-viewer/viewer.html b/skills/common/skill-creator/eval-viewer/viewer.html similarity index 100% rename from skills/skill-creator/eval-viewer/viewer.html rename to skills/common/skill-creator/eval-viewer/viewer.html diff --git a/skills/skill-creator/references/schemas.md b/skills/common/skill-creator/references/schemas.md similarity index 100% rename from skills/skill-creator/references/schemas.md rename to skills/common/skill-creator/references/schemas.md diff --git a/skills/skill-creator/scripts/__init__.py b/skills/common/skill-creator/scripts/__init__.py similarity index 100% rename from skills/skill-creator/scripts/__init__.py rename to skills/common/skill-creator/scripts/__init__.py diff --git a/skills/skill-creator/scripts/aggregate_benchmark.py b/skills/common/skill-creator/scripts/aggregate_benchmark.py similarity index 100% rename from skills/skill-creator/scripts/aggregate_benchmark.py rename to skills/common/skill-creator/scripts/aggregate_benchmark.py diff --git a/skills/skill-creator/scripts/generate_report.py b/skills/common/skill-creator/scripts/generate_report.py similarity index 100% rename from skills/skill-creator/scripts/generate_report.py rename to skills/common/skill-creator/scripts/generate_report.py diff --git a/skills/skill-creator/scripts/improve_description.py b/skills/common/skill-creator/scripts/improve_description.py similarity index 100% rename from skills/skill-creator/scripts/improve_description.py rename to skills/common/skill-creator/scripts/improve_description.py diff --git a/skills/skill-creator/scripts/package_skill.py b/skills/common/skill-creator/scripts/package_skill.py similarity index 100% rename from skills/skill-creator/scripts/package_skill.py rename to skills/common/skill-creator/scripts/package_skill.py diff --git a/skills/skill-creator/scripts/quick_validate.py b/skills/common/skill-creator/scripts/quick_validate.py similarity index 100% rename from skills/skill-creator/scripts/quick_validate.py rename to skills/common/skill-creator/scripts/quick_validate.py diff --git a/skills/skill-creator/scripts/run_eval.py b/skills/common/skill-creator/scripts/run_eval.py similarity index 100% rename from skills/skill-creator/scripts/run_eval.py rename to skills/common/skill-creator/scripts/run_eval.py diff --git a/skills/skill-creator/scripts/run_loop.py b/skills/common/skill-creator/scripts/run_loop.py similarity index 100% rename from skills/skill-creator/scripts/run_loop.py rename to skills/common/skill-creator/scripts/run_loop.py diff --git a/skills/skill-creator/scripts/utils.py b/skills/common/skill-creator/scripts/utils.py similarity index 100% rename from skills/skill-creator/scripts/utils.py rename to skills/common/skill-creator/scripts/utils.py diff --git a/skills/xlsx/LICENSE.txt b/skills/common/xlsx/LICENSE.txt similarity index 100% rename from skills/xlsx/LICENSE.txt rename to skills/common/xlsx/LICENSE.txt diff --git a/skills/xlsx/SKILL.md b/skills/common/xlsx/SKILL.md similarity index 100% rename from skills/xlsx/SKILL.md rename to skills/common/xlsx/SKILL.md diff --git a/skills/xlsx/recalc.py b/skills/common/xlsx/recalc.py similarity index 100% rename from skills/xlsx/recalc.py rename to skills/common/xlsx/recalc.py diff --git a/skills/rag-retrieve-only/.claude-plugin/plugin.json b/skills/onprem/rag-retrieve-only/.claude-plugin/plugin.json similarity index 100% rename from skills/rag-retrieve-only/.claude-plugin/plugin.json rename to skills/onprem/rag-retrieve-only/.claude-plugin/plugin.json diff --git a/skills/rag-retrieve-only/README.md b/skills/onprem/rag-retrieve-only/README.md similarity index 100% rename from skills/rag-retrieve-only/README.md rename to skills/onprem/rag-retrieve-only/README.md diff --git a/skills/rag-retrieve-only/hooks/pre_prompt.py b/skills/onprem/rag-retrieve-only/hooks/pre_prompt.py similarity index 100% rename from skills/rag-retrieve-only/hooks/pre_prompt.py rename to skills/onprem/rag-retrieve-only/hooks/pre_prompt.py diff --git a/skills/rag-retrieve-only/hooks/retrieval-policy.md b/skills/onprem/rag-retrieve-only/hooks/retrieval-policy.md similarity index 100% rename from skills/rag-retrieve-only/hooks/retrieval-policy.md rename to skills/onprem/rag-retrieve-only/hooks/retrieval-policy.md diff --git a/skills/rag-retrieve-only/mcp_common.py b/skills/onprem/rag-retrieve-only/mcp_common.py similarity index 100% rename from skills/rag-retrieve-only/mcp_common.py rename to skills/onprem/rag-retrieve-only/mcp_common.py diff --git a/skills/rag-retrieve-only/rag_retrieve_server.py b/skills/onprem/rag-retrieve-only/rag_retrieve_server.py similarity index 100% rename from skills/rag-retrieve-only/rag_retrieve_server.py rename to skills/onprem/rag-retrieve-only/rag_retrieve_server.py diff --git a/skills/rag-retrieve-only/rag_retrieve_tools.json b/skills/onprem/rag-retrieve-only/rag_retrieve_tools.json similarity index 100% rename from skills/rag-retrieve-only/rag_retrieve_tools.json rename to skills/onprem/rag-retrieve-only/rag_retrieve_tools.json diff --git a/skills/board-meeting-pack-helper/SKILL.md b/skills/support/board-meeting-pack-helper/SKILL.md similarity index 100% rename from skills/board-meeting-pack-helper/SKILL.md rename to skills/support/board-meeting-pack-helper/SKILL.md diff --git a/skills/customer-reply-tone/SKILL.md b/skills/support/customer-reply-tone/SKILL.md similarity index 100% rename from skills/customer-reply-tone/SKILL.md rename to skills/support/customer-reply-tone/SKILL.md diff --git a/skills/exec-brief-1pager/SKILL.md b/skills/support/exec-brief-1pager/SKILL.md similarity index 100% rename from skills/exec-brief-1pager/SKILL.md rename to skills/support/exec-brief-1pager/SKILL.md diff --git a/skills/incident-postmortem-ja/SKILL.md b/skills/support/incident-postmortem-ja/SKILL.md similarity index 100% rename from skills/incident-postmortem-ja/SKILL.md rename to skills/support/incident-postmortem-ja/SKILL.md diff --git a/skills/japan-compliance-checker/SKILL.md b/skills/support/japan-compliance-checker/SKILL.md similarity index 100% rename from skills/japan-compliance-checker/SKILL.md rename to skills/support/japan-compliance-checker/SKILL.md diff --git a/skills/japanese-business-writer/SKILL.md b/skills/support/japanese-business-writer/SKILL.md similarity index 100% rename from skills/japanese-business-writer/SKILL.md rename to skills/support/japanese-business-writer/SKILL.md diff --git a/skills/japanese-pii-redactor/SKILL.md b/skills/support/japanese-pii-redactor/SKILL.md similarity index 100% rename from skills/japanese-pii-redactor/SKILL.md rename to skills/support/japanese-pii-redactor/SKILL.md diff --git a/skills/meeting-minutes-action/SKILL.md b/skills/support/meeting-minutes-action/SKILL.md similarity index 100% rename from skills/meeting-minutes-action/SKILL.md rename to skills/support/meeting-minutes-action/SKILL.md diff --git a/skills/proposal-rfp-writer/SKILL.md b/skills/support/proposal-rfp-writer/SKILL.md similarity index 100% rename from skills/proposal-rfp-writer/SKILL.md rename to skills/support/proposal-rfp-writer/SKILL.md diff --git a/skills/quotation-sow-drafter/SKILL.md b/skills/support/quotation-sow-drafter/SKILL.md similarity index 100% rename from skills/quotation-sow-drafter/SKILL.md rename to skills/support/quotation-sow-drafter/SKILL.md diff --git a/skills/support/rag-retrieve-only/.claude-plugin/plugin.json b/skills/support/rag-retrieve-only/.claude-plugin/plugin.json new file mode 100644 index 0000000..a1a38c5 --- /dev/null +++ b/skills/support/rag-retrieve-only/.claude-plugin/plugin.json @@ -0,0 +1,22 @@ +{ + "name": "rag-retrieve-only", + "description": "Only provides rag_retrieve. table_rag_retrieve and local file retrieval are disabled.", + "hooks": { + "PrePrompt": [ + { + "type": "command", + "command": "python hooks/pre_prompt.py" + } + ] + }, + "mcpServers": { + "rag_retrieve": { + "transport": "stdio", + "command": "python", + "args": [ + "./rag_retrieve_server.py", + "{bot_id}" + ] + } + } +} diff --git a/skills/support/rag-retrieve-only/README.md b/skills/support/rag-retrieve-only/README.md new file mode 100644 index 0000000..55bdbdc --- /dev/null +++ b/skills/support/rag-retrieve-only/README.md @@ -0,0 +1,34 @@ +# rag-retrieve + +只保留 `rag_retrieve` 的精简版插件示例。 + +## 功能说明 + +- 通过 `PrePrompt` Hook 注入检索策略 +- 暴露 `rag_retrieve` MCP Server +- 插件仅支持 `rag_retrieve` +- 已禁用 `table_rag_retrieve` +- 已禁用本地文件检索 + +## 目录结构 + +```text +rag-retrieve-only/ +├── README.md +├── .claude-plugin/ +│ └── plugin.json +├── hooks/ +│ ├── pre_prompt.py +│ └── retrieval-policy.md +├── rag_retrieve_server.py +└── rag_retrieve_tools.json +``` + +## 当前检索策略 + +默认顺序:skill-enabled knowledge retrieval tools > `rag_retrieve` + +- 优先使用可用的技能内知识检索工具 +- 不足时使用 `rag_retrieve` +- 不并行执行多个检索源 +- 插件仅支持 `rag_retrieve` diff --git a/skills/support/rag-retrieve-only/hooks/pre_prompt.py b/skills/support/rag-retrieve-only/hooks/pre_prompt.py new file mode 100644 index 0000000..11f445d --- /dev/null +++ b/skills/support/rag-retrieve-only/hooks/pre_prompt.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 +""" +PreMemoryPrompt Hook - 用户上下文加载器示例 + +在记忆提取提示词(FACT_RETRIEVAL_PROMPT)加载时执行, +读取同目录下的 memory_prompt.md 作为自定义记忆提取提示词模板。 +""" +import sys +from pathlib import Path + + +def main(): + prompt_file = Path(__file__).parent / "retrieval-policy.md" + if prompt_file.exists(): + print(prompt_file.read_text(encoding="utf-8")) + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/skills/support/rag-retrieve-only/hooks/retrieval-policy.md b/skills/support/rag-retrieve-only/hooks/retrieval-policy.md new file mode 100644 index 0000000..09732b7 --- /dev/null +++ b/skills/support/rag-retrieve-only/hooks/retrieval-policy.md @@ -0,0 +1,31 @@ +# Retrieval Policy + +- `rag_retrieve` is the only knowledge source. +- Do NOT answer from model knowledge first. + +## 1.Query Preparation +- Do NOT pass the raw user question unless it already works well for retrieval. +- Rewrite for recall: extract entity, time scope, attributes, and intent. +- Add useful variants: synonyms, aliases, abbreviations, related titles, historical names, and category terms. +- Expand list-style, extraction, overview, historical, roster, timeline, and archive queries more aggressively. +- Preserve meaning. Do NOT introduce unrelated topics. + +## 2.Retrieval Breadth (`top_k`) +- Apply `top_k` only to `rag_retrieve`. Use the smallest sufficient value, then expand only if coverage is insufficient. +- Use `30` for simple fact lookup. +- Use `50` for moderate synthesis, comparison, summarization, or disambiguation. +- Use `100` for broad recall, such as comprehensive analysis, scattered knowledge, multiple entities or periods, or list / catalog / timeline / roster / overview requests. +- Raise `top_k` when keyword branches are many or results are too few, repetitive, incomplete, sparse, or too narrow. +- Use this expansion order: `30 -> 50 -> 100`. If unsure, use `100`. + +## 3.Retry +- If the result is insufficient, retry `rag_retrieve` with a better rewritten query or a larger `top_k`. +- Only say no relevant information was found after `rag_retrieve` has been tried and still provides insufficient evidence. + +## 4.Citation Requirements for Retrieved Knowledge +- When using knowledge from `rag_retrieve`, you MUST generate `` tags. +- Follow the citation format returned by each tool. +- Place citations immediately after the paragraph or bullet list that uses the knowledge. +- Do NOT collect citations at the end. +- Use 1-2 citations per paragraph or bullet list when possible. +- If learned knowledge is used, include at least 1 ``. diff --git a/skills/support/rag-retrieve-only/mcp_common.py b/skills/support/rag-retrieve-only/mcp_common.py new file mode 100644 index 0000000..5bf5935 --- /dev/null +++ b/skills/support/rag-retrieve-only/mcp_common.py @@ -0,0 +1,251 @@ +#!/usr/bin/env python3 +""" +MCP服务器通用工具函数 +提供路径处理、文件验证、请求处理等公共功能 +""" + +import json +import os +import sys +import asyncio +from typing import Any, Dict, List, Optional, Union +import re + +def get_allowed_directory(): + """获取允许访问的目录""" + # 优先使用命令行参数传入的dataset_dir + if len(sys.argv) > 1: + dataset_dir = sys.argv[1] + return os.path.abspath(dataset_dir) + + # 从环境变量读取项目数据目录 + project_dir = os.getenv("PROJECT_DATA_DIR", "./projects/data") + return os.path.abspath(project_dir) + + +def resolve_file_path(file_path: str, default_subfolder: str = "default") -> str: + """ + 解析文件路径,支持 folder/document.txt 和 document.txt 两种格式 + + Args: + file_path: 输入的文件路径 + default_subfolder: 当只传入文件名时使用的默认子文件夹名称 + + Returns: + 解析后的完整文件路径 + """ + # 如果路径包含文件夹分隔符,直接使用 + if '/' in file_path or '\\' in file_path: + clean_path = file_path.replace('\\', '/') + + # 移除 projects/ 前缀(如果存在) + if clean_path.startswith('projects/'): + clean_path = clean_path[9:] # 移除 'projects/' 前缀 + elif clean_path.startswith('./projects/'): + clean_path = clean_path[11:] # 移除 './projects/' 前缀 + else: + # 如果只有文件名,添加默认子文件夹 + clean_path = f"{default_subfolder}/{file_path}" + + # 获取允许的目录 + project_data_dir = get_allowed_directory() + + # 尝试在项目目录中查找文件 + full_path = os.path.join(project_data_dir, clean_path.lstrip('./')) + if os.path.exists(full_path): + return full_path + + # 如果直接路径不存在,尝试递归查找 + found = find_file_in_project(clean_path, project_data_dir) + if found: + return found + + # 如果是纯文件名且在default子文件夹中不存在,尝试在根目录查找 + if '/' not in file_path and '\\' not in file_path: + root_path = os.path.join(project_data_dir, file_path) + if os.path.exists(root_path): + return root_path + + raise FileNotFoundError(f"File not found: {file_path} (searched in {project_data_dir})") + + +def find_file_in_project(filename: str, project_dir: str) -> Optional[str]: + """在项目目录中递归查找文件""" + # 如果filename包含路径,只搜索指定的路径 + if '/' in filename: + parts = filename.split('/') + target_file = parts[-1] + search_dir = os.path.join(project_dir, *parts[:-1]) + + if os.path.exists(search_dir): + target_path = os.path.join(search_dir, target_file) + if os.path.exists(target_path): + return target_path + else: + # 纯文件名,递归搜索整个项目目录 + for root, dirs, files in os.walk(project_dir): + if filename in files: + return os.path.join(root, filename) + return None + + +def load_tools_from_json(tools_file_name: str) -> List[Dict[str, Any]]: + """从 JSON 文件加载工具定义""" + try: + tools_file = os.path.join(os.path.dirname(__file__), tools_file_name) + if os.path.exists(tools_file): + with open(tools_file, 'r', encoding='utf-8') as f: + return json.load(f) + else: + # 如果 JSON 文件不存在,使用默认定义 + return [] + except Exception as e: + print(f"Warning: Unable to load tool definition JSON file: {str(e)}") + return [] + + +def create_error_response(request_id: Any, code: int, message: str) -> Dict[str, Any]: + """创建标准化的错误响应""" + return { + "jsonrpc": "2.0", + "id": request_id, + "error": { + "code": code, + "message": message + } + } + + +def create_success_response(request_id: Any, result: Any) -> Dict[str, Any]: + """创建标准化的成功响应""" + return { + "jsonrpc": "2.0", + "id": request_id, + "result": result + } + + +def create_initialize_response(request_id: Any, server_name: str, server_version: str = "1.0.0") -> Dict[str, Any]: + """创建标准化的初始化响应""" + return { + "jsonrpc": "2.0", + "id": request_id, + "result": { + "protocolVersion": "2024-11-05", + "capabilities": { + "tools": {} + }, + "serverInfo": { + "name": server_name, + "version": server_version + } + } + } + + +def create_ping_response(request_id: Any) -> Dict[str, Any]: + """创建标准化的ping响应""" + return { + "jsonrpc": "2.0", + "id": request_id, + "result": { + "pong": True + } + } + + +def create_tools_list_response(request_id: Any, tools: List[Dict[str, Any]]) -> Dict[str, Any]: + """创建标准化的工具列表响应""" + return { + "jsonrpc": "2.0", + "id": request_id, + "result": { + "tools": tools + } + } + + +def is_regex_pattern(pattern: str) -> bool: + """检测字符串是否为正则表达式模式""" + # 检查 /pattern/ 格式 + if pattern.startswith('/') and pattern.endswith('/') and len(pattern) > 2: + return True + + # 检查 r"pattern" 或 r'pattern' 格式 + if pattern.startswith(('r"', "r'")) and pattern.endswith(('"', "'")) and len(pattern) > 3: + return True + + # 检查是否包含正则特殊字符 + regex_chars = {'*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '^', '$', '\\', '.'} + return any(char in pattern for char in regex_chars) + + +def compile_pattern(pattern: str) -> Union[re.Pattern, str, None]: + """编译正则表达式模式,如果不是正则则返回原字符串""" + if not is_regex_pattern(pattern): + return pattern + + try: + # 处理 /pattern/ 格式 + if pattern.startswith('/') and pattern.endswith('/'): + regex_body = pattern[1:-1] + return re.compile(regex_body) + + # 处理 r"pattern" 或 r'pattern' 格式 + if pattern.startswith(('r"', "r'")) and pattern.endswith(('"', "'")): + regex_body = pattern[2:-1] + return re.compile(regex_body) + + # 直接编译包含正则字符的字符串 + return re.compile(pattern) + except re.error as e: + # 如果编译失败,返回None表示无效的正则 + print(f"Warning: Regular expression '{pattern}' compilation failed: {e}") + return None + + +async def handle_mcp_streaming(request_handler): + """处理MCP请求的标准主循环""" + try: + while True: + # Read from stdin + line = await asyncio.get_event_loop().run_in_executor(None, sys.stdin.readline) + if not line: + break + + line = line.strip() + if not line: + continue + + try: + request = json.loads(line) + response = await request_handler(request) + + # Write to stdout + sys.stdout.write(json.dumps(response, ensure_ascii=False) + "\n") + sys.stdout.flush() + + except json.JSONDecodeError: + error_response = { + "jsonrpc": "2.0", + "error": { + "code": -32700, + "message": "Parse error" + } + } + sys.stdout.write(json.dumps(error_response, ensure_ascii=False) + "\n") + sys.stdout.flush() + + except Exception as e: + error_response = { + "jsonrpc": "2.0", + "error": { + "code": -32603, + "message": f"Internal error: {str(e)}" + } + } + sys.stdout.write(json.dumps(error_response, ensure_ascii=False) + "\n") + sys.stdout.flush() + + except KeyboardInterrupt: + pass diff --git a/skills/support/rag-retrieve-only/rag_retrieve_server.py b/skills/support/rag-retrieve-only/rag_retrieve_server.py new file mode 100644 index 0000000..88b093f --- /dev/null +++ b/skills/support/rag-retrieve-only/rag_retrieve_server.py @@ -0,0 +1,222 @@ +#!/usr/bin/env python3 +""" +RAG检索MCP服务器 +调用本地RAG API进行文档检索 +""" + +import asyncio +import hashlib +import json +import sys +import os +from typing import Any, Dict + +try: + import requests +except ImportError: + print("Error: requests module is required. Please install it with: pip install requests") + sys.exit(1) + +from mcp_common import ( + create_error_response, + create_success_response, + create_initialize_response, + create_ping_response, + create_tools_list_response, + load_tools_from_json, + handle_mcp_streaming +) +BACKEND_HOST = os.getenv("BACKEND_HOST", "https://api-dev.gptbase.ai") +MASTERKEY = os.getenv("MASTERKEY", "master") + +# Citation instruction prefixes injected into tool results +DOCUMENT_CITATION_INSTRUCTIONS = """ +When using the retrieved knowledge below, you MUST add XML citation tags for factual claims. + +## Document Knowledge +Format: `` +- Use `file` attribute with the UUID from document markers +- Use `filename` attribute with the actual filename from document markers +- Use `page` attribute (singular) with the page number +- `page` MUST be 0-based and must match the `pages:` values shown in the learned knowledge context + +## Web Page Knowledge +Format: `` +- Use `url` attribute with the web page URL from the source metadata +- Do not use `file`, `filename`, or `page` attributes for web sources +- If content is grounded in a web source, prefer a web citation with `url` over a file citation + +## Placement Rules +- Citations MUST appear IMMEDIATELY AFTER the paragraph or bullet list that uses the knowledge +- NEVER collect all citations and place them at the end of your response +- Limit to 1-2 citations per paragraph/bullet list +- If your answer uses learned knowledge, you MUST generate at least 1 `` in the response + + +""" + +def rag_retrieve(query: str, top_k: int = 100) -> Dict[str, Any]: + """调用RAG检索API""" + try: + bot_id = "" + if len(sys.argv) > 1: + bot_id = sys.argv[1] + + url = f"{BACKEND_HOST}/v1/rag_retrieve/{bot_id}" + if not url: + return { + "content": [ + { + "type": "text", + "text": "Error: RAG API URL not provided. Please provide URL as command line argument." + } + ] + } + + masterkey = MASTERKEY + token_input = f"{masterkey}:{bot_id}" + auth_token = hashlib.md5(token_input.encode()).hexdigest() + + headers = { + "content-type": "application/json", + "authorization": f"Bearer {auth_token}" + } + data = { + "query": query, + "top_k": top_k + } + + response = requests.post(url, json=data, headers=headers, timeout=30) + + if response.status_code != 200: + return { + "content": [ + { + "type": "text", + "text": f"Error: RAG API returned status code {response.status_code}. Response: {response.text}" + } + ] + } + + try: + response_data = response.json() + except json.JSONDecodeError as e: + return { + "content": [ + { + "type": "text", + "text": f"Error: Failed to parse API response as JSON. Error: {str(e)}, Raw response: {response.text}" + } + ] + } + + if "markdown" in response_data: + markdown_content = response_data["markdown"] + return { + "content": [ + { + "type": "text", + "text": DOCUMENT_CITATION_INSTRUCTIONS + markdown_content + } + ] + } + else: + return { + "content": [ + { + "type": "text", + "text": f"Error: 'markdown' field not found in API response. Response: {json.dumps(response_data, indent=2, ensure_ascii=False)}" + } + ] + } + + except requests.exceptions.RequestException as e: + return { + "content": [ + { + "type": "text", + "text": f"Error: Failed to connect to RAG API. {str(e)}" + } + ] + } + except Exception as e: + return { + "content": [ + { + "type": "text", + "text": f"Error: {str(e)}" + } + ] + } + + +async def handle_request(request: Dict[str, Any]) -> Dict[str, Any]: + """Handle MCP request""" + try: + method = request.get("method") + params = request.get("params", {}) + request_id = request.get("id") + + if method == "initialize": + return create_initialize_response(request_id, "rag-retrieve") + + elif method == "ping": + return create_ping_response(request_id) + + elif method == "tools/list": + tools = load_tools_from_json("rag_retrieve_tools.json") + if not tools: + tools = [ + { + "name": "rag_retrieve", + "description": "调用RAG检索API,根据查询内容检索相关文档。返回包含相关内容的markdown格式结果。", + "inputSchema": { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "检索查询内容" + } + }, + "required": ["query"] + } + } + ] + return create_tools_list_response(request_id, tools) + + elif method == "tools/call": + tool_name = params.get("name") + arguments = params.get("arguments", {}) + + if tool_name == "rag_retrieve": + query = arguments.get("query", "") + top_k = arguments.get("top_k", 100) + + if not query: + return create_error_response(request_id, -32602, "Missing required parameter: query") + + result = rag_retrieve(query, top_k) + + return { + "jsonrpc": "2.0", + "id": request_id, + "result": result + } + + else: + return create_error_response(request_id, -32601, f"Unknown tool: {tool_name}") + + else: + return create_error_response(request_id, -32601, f"Unknown method: {method}") + + except Exception as e: + return create_error_response(request.get("id"), -32603, f"Internal error: {str(e)}") + + +async def main(): + """Main entry point.""" + await handle_mcp_streaming(handle_request) + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/skills/support/rag-retrieve-only/rag_retrieve_tools.json b/skills/support/rag-retrieve-only/rag_retrieve_tools.json new file mode 100644 index 0000000..91d52cf --- /dev/null +++ b/skills/support/rag-retrieve-only/rag_retrieve_tools.json @@ -0,0 +1,21 @@ +[ + { + "name": "rag_retrieve", + "description": "Retrieve relevant documents from the knowledge base. Returns markdown results. Use this tool for concept, definition, workflow, policy, explanation, and general knowledge lookup. Rewrite the query when needed to improve recall.", + "inputSchema": { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "Retrieval query content. Rewrite the query when needed to improve recall." + }, + "top_k": { + "type": "integer", + "description": "Number of top results to retrieve. Choose dynamically based on retrieval breadth and coverage needs.", + "default": 100 + } + }, + "required": ["query"] + } + } +] diff --git a/skills/sales-followup/SKILL.md b/skills/support/sales-followup/SKILL.md similarity index 100% rename from skills/sales-followup/SKILL.md rename to skills/support/sales-followup/SKILL.md diff --git a/skills/stakeholder-update/SKILL.md b/skills/support/stakeholder-update/SKILL.md similarity index 100% rename from skills/stakeholder-update/SKILL.md rename to skills/support/stakeholder-update/SKILL.md diff --git a/skills/managing-scripts/SKILL.md b/skills_developing/managing-scripts/SKILL.md similarity index 100% rename from skills/managing-scripts/SKILL.md rename to skills_developing/managing-scripts/SKILL.md diff --git a/utils/multi_project_manager.py b/utils/multi_project_manager.py index 59bcf98..f68f3ba 100644 --- a/utils/multi_project_manager.py +++ b/utils/multi_project_manager.py @@ -381,10 +381,10 @@ def _extract_skills_to_robot(bot_id: str, skills: List[str], project_path: Path) - 如果是完整路径(如 "projects/uploads/xxx/skills/rag-retrieve_2.zip"),直接使用该路径 - 如果是简单名称(如 "rag-retrieve"),从以下目录按优先级顺序查找: 1. projects/uploads/{bot_id}/skills/ - 2. skills/ + 2. skills/{SKILLS_SUBDIR}/ - 如果是以 @ 开头的仓库相对路径(如 "@skills_autoload/rag-retrieve"),则从仓库根目录直接解析 - 搜索目录优先级:先搜索 projects/uploads/{bot_id}/skills/,再搜索 skills/ + 搜索目录优先级:先搜索 projects/uploads/{bot_id}/skills/,再搜索 skills/{SKILLS_SUBDIR}/ Args: bot_id: 机器人 ID @@ -393,9 +393,13 @@ def _extract_skills_to_robot(bot_id: str, skills: List[str], project_path: Path) """ # skills 源目录(按优先级顺序) repo_root = Path(__file__).resolve().parent.parent + official_skills_dir = repo_root / "skills" / settings.SKILLS_SUBDIR + if not official_skills_dir.exists(): + logger.warning(f"Official skills directory does not exist: {official_skills_dir}") skills_source_dirs = [ project_path / "uploads" / bot_id / "skills", - repo_root / "skills", + repo_root / "skills" / "common", + official_skills_dir, ] skills_target_dir = project_path / "robot" / bot_id / "skills" skills_target_dir.mkdir(parents=True, exist_ok=True) diff --git a/utils/settings.py b/utils/settings.py index fd48fb5..10014f3 100644 --- a/utils/settings.py +++ b/utils/settings.py @@ -24,6 +24,7 @@ TOOL_CACHE_AUTO_RENEW = os.getenv("TOOL_CACHE_AUTO_RENEW", "true") == "true" # Project Settings PROJECT_DATA_DIR = os.getenv("PROJECT_DATA_DIR", "./projects/data") SKILLS_DIR = os.getenv("SKILLS_DIR", "./skills") +SKILLS_SUBDIR = os.getenv("SKILLS_SUBDIR", "support") # Tokenizer Settings TOKENIZERS_PARALLELISM = os.getenv("TOKENIZERS_PARALLELISM", "true")