@aslomon/effectum 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/install.js +68 -4
- package/bin/lib/cli-tools.js +288 -0
- package/bin/lib/specializations.js +11 -1
- package/bin/lib/template.js +14 -0
- package/bin/lib/ui.js +109 -0
- package/package.json +1 -1
- package/system/agents/data-engineer.md +268 -0
- package/system/agents/mobile-developer.md +257 -0
- package/system/hooks/observe.sh +164 -0
- package/system/hooks/quick-diff.sh +87 -0
- package/system/hooks/save-results.sh +56 -0
- package/system/hooks/scan.sh +170 -0
- package/system/skills/README.md +86 -0
- package/system/skills/SKILL.md +117 -0
- package/system/skills/agents/observer.md +137 -0
- package/system/skills/agents/start-observer.sh +143 -0
- package/system/skills/algorithmic-art/LICENSE.txt +202 -0
- package/system/skills/algorithmic-art/SKILL.md +405 -0
- package/system/skills/algorithmic-art/templates/generator_template.js +223 -0
- package/system/skills/algorithmic-art/templates/viewer.html +599 -0
- package/system/skills/api-endpoint/SKILL.md +106 -0
- package/system/skills/canvas-design/LICENSE.txt +202 -0
- package/system/skills/canvas-design/SKILL.md +130 -0
- package/system/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/system/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/system/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/system/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/system/skills/component/SKILL.md +103 -0
- package/system/skills/config.json +18 -0
- package/system/skills/doc-coauthoring/SKILL.md +375 -0
- package/system/skills/docx/LICENSE.txt +30 -0
- package/system/skills/docx/SKILL.md +590 -0
- package/system/skills/docx/scripts/__init__.py +1 -0
- package/system/skills/docx/scripts/accept_changes.py +135 -0
- package/system/skills/docx/scripts/comment.py +318 -0
- package/system/skills/docx/scripts/office/helpers/__init__.py +0 -0
- package/system/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
- package/system/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/system/skills/docx/scripts/office/pack.py +159 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/system/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/system/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/system/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/system/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/system/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/system/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/system/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/system/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/system/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/system/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/system/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/system/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/system/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/system/skills/docx/scripts/office/soffice.py +183 -0
- package/system/skills/docx/scripts/office/unpack.py +132 -0
- package/system/skills/docx/scripts/office/validate.py +111 -0
- package/system/skills/docx/scripts/office/validators/__init__.py +15 -0
- package/system/skills/docx/scripts/office/validators/base.py +847 -0
- package/system/skills/docx/scripts/office/validators/docx.py +446 -0
- package/system/skills/docx/scripts/office/validators/pptx.py +275 -0
- package/system/skills/docx/scripts/office/validators/redlining.py +247 -0
- package/system/skills/docx/scripts/templates/comments.xml +3 -0
- package/system/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/system/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/system/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/system/skills/docx/scripts/templates/people.xml +3 -0
- package/system/skills/evaluate-session.sh +69 -0
- package/system/skills/feature/SKILL.md +73 -0
- package/system/skills/frontend-design/LICENSE.txt +177 -0
- package/system/skills/frontend-design/SKILL.md +52 -0
- package/system/skills/hooks/observe.sh +164 -0
- package/system/skills/mcp-builder/LICENSE.txt +202 -0
- package/system/skills/mcp-builder/SKILL.md +236 -0
- package/system/skills/mcp-builder/reference/evaluation.md +602 -0
- package/system/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/system/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/system/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/system/skills/mcp-builder/scripts/connections.py +151 -0
- package/system/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/system/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/system/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/system/skills/pdf/LICENSE.txt +30 -0
- package/system/skills/pdf/SKILL.md +314 -0
- package/system/skills/pdf/forms.md +294 -0
- package/system/skills/pdf/reference.md +612 -0
- package/system/skills/pdf/scripts/check_bounding_boxes.py +65 -0
- package/system/skills/pdf/scripts/check_fillable_fields.py +11 -0
- package/system/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
- package/system/skills/pdf/scripts/create_validation_image.py +37 -0
- package/system/skills/pdf/scripts/extract_form_field_info.py +122 -0
- package/system/skills/pdf/scripts/extract_form_structure.py +115 -0
- package/system/skills/pdf/scripts/fill_fillable_fields.py +98 -0
- package/system/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/system/skills/pptx/LICENSE.txt +30 -0
- package/system/skills/pptx/SKILL.md +232 -0
- package/system/skills/pptx/editing.md +205 -0
- package/system/skills/pptx/pptxgenjs.md +420 -0
- package/system/skills/pptx/scripts/__init__.py +0 -0
- package/system/skills/pptx/scripts/add_slide.py +195 -0
- package/system/skills/pptx/scripts/clean.py +286 -0
- package/system/skills/pptx/scripts/office/helpers/__init__.py +0 -0
- package/system/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
- package/system/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/system/skills/pptx/scripts/office/pack.py +159 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/system/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/system/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/system/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/system/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/system/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/system/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/system/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/system/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/system/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/system/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/system/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/system/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/system/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/system/skills/pptx/scripts/office/soffice.py +183 -0
- package/system/skills/pptx/scripts/office/unpack.py +132 -0
- package/system/skills/pptx/scripts/office/validate.py +111 -0
- package/system/skills/pptx/scripts/office/validators/__init__.py +15 -0
- package/system/skills/pptx/scripts/office/validators/base.py +847 -0
- package/system/skills/pptx/scripts/office/validators/docx.py +446 -0
- package/system/skills/pptx/scripts/office/validators/pptx.py +275 -0
- package/system/skills/pptx/scripts/office/validators/redlining.py +247 -0
- package/system/skills/pptx/scripts/thumbnail.py +289 -0
- package/system/skills/scripts/quick-diff.sh +87 -0
- package/system/skills/scripts/save-results.sh +56 -0
- package/system/skills/scripts/scan.sh +170 -0
- package/system/skills/security-check/SKILL.md +70 -0
- package/system/skills/skill-creator/LICENSE.txt +202 -0
- package/system/skills/skill-creator/SKILL.md +479 -0
- package/system/skills/skill-creator/agents/analyzer.md +274 -0
- package/system/skills/skill-creator/agents/comparator.md +202 -0
- package/system/skills/skill-creator/agents/grader.md +223 -0
- package/system/skills/skill-creator/assets/eval_review.html +146 -0
- package/system/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/system/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/system/skills/skill-creator/references/schemas.md +430 -0
- package/system/skills/skill-creator/scripts/__init__.py +0 -0
- package/system/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/system/skills/skill-creator/scripts/generate_report.py +326 -0
- package/system/skills/skill-creator/scripts/improve_description.py +248 -0
- package/system/skills/skill-creator/scripts/package_skill.py +136 -0
- package/system/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/system/skills/skill-creator/scripts/run_eval.py +310 -0
- package/system/skills/skill-creator/scripts/run_loop.py +332 -0
- package/system/skills/skill-creator/scripts/utils.py +47 -0
- package/system/skills/suggest-compact.sh +54 -0
- package/system/skills/supabase-migration/SKILL.md +59 -0
- package/system/skills/theme-factory/LICENSE.txt +202 -0
- package/system/skills/theme-factory/SKILL.md +59 -0
- package/system/skills/theme-factory/theme-showcase.pdf +0 -0
- package/system/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/system/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/system/skills/theme-factory/themes/desert-rose.md +19 -0
- package/system/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/system/skills/theme-factory/themes/golden-hour.md +19 -0
- package/system/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/system/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/system/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/system/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/system/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/system/skills/web-artifacts-builder/LICENSE.txt +202 -0
- package/system/skills/web-artifacts-builder/SKILL.md +74 -0
- package/system/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/system/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
- package/system/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/system/skills/webapp-testing/LICENSE.txt +202 -0
- package/system/skills/webapp-testing/SKILL.md +96 -0
- package/system/skills/webapp-testing/examples/console_logging.py +35 -0
- package/system/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/system/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/system/skills/webapp-testing/scripts/with_server.py +106 -0
- package/system/skills/xlsx/LICENSE.txt +30 -0
- package/system/skills/xlsx/SKILL.md +292 -0
- package/system/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
- package/system/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
- package/system/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/system/skills/xlsx/scripts/office/pack.py +159 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/system/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/system/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/system/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/system/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/system/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/system/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/system/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/system/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/system/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/system/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/system/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/system/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/system/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/system/skills/xlsx/scripts/office/soffice.py +183 -0
- package/system/skills/xlsx/scripts/office/unpack.py +132 -0
- package/system/skills/xlsx/scripts/office/validate.py +111 -0
- package/system/skills/xlsx/scripts/office/validators/__init__.py +15 -0
- package/system/skills/xlsx/scripts/office/validators/base.py +847 -0
- package/system/skills/xlsx/scripts/office/validators/docx.py +446 -0
- package/system/skills/xlsx/scripts/office/validators/pptx.py +275 -0
- package/system/skills/xlsx/scripts/office/validators/redlining.py +247 -0
- package/system/skills/xlsx/scripts/recalc.py +184 -0
- package/system/teams/profiles.md +76 -0
- package/system/templates/CLAUDE.md.tmpl +6 -0
- package/system/templates/settings.json.tmpl +11 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# quick-diff.sh — compare skill file mtimes against results.json evaluated_at
|
|
3
|
+
# Usage: quick-diff.sh RESULTS_JSON [CWD_SKILLS_DIR]
|
|
4
|
+
# Output: JSON array of changed/new files to stdout (empty [] if no changes)
|
|
5
|
+
#
|
|
6
|
+
# When CWD_SKILLS_DIR is omitted, defaults to $PWD/.claude/skills so the
|
|
7
|
+
# script always picks up project-level skills without relying on the caller.
|
|
8
|
+
#
|
|
9
|
+
# Environment:
|
|
10
|
+
# SKILL_STOCKTAKE_GLOBAL_DIR Override ~/.claude/skills (for testing only;
|
|
11
|
+
# do not set in production — intended for bats tests)
|
|
12
|
+
# SKILL_STOCKTAKE_PROJECT_DIR Override project dir detection (for testing only)
|
|
13
|
+
|
|
14
|
+
set -euo pipefail
|
|
15
|
+
|
|
16
|
+
RESULTS_JSON="${1:-}"
|
|
17
|
+
CWD_SKILLS_DIR="${SKILL_STOCKTAKE_PROJECT_DIR:-${2:-$PWD/.claude/skills}}"
|
|
18
|
+
GLOBAL_DIR="${SKILL_STOCKTAKE_GLOBAL_DIR:-$HOME/.claude/skills}"
|
|
19
|
+
|
|
20
|
+
if [[ -z "$RESULTS_JSON" || ! -f "$RESULTS_JSON" ]]; then
|
|
21
|
+
echo "Error: RESULTS_JSON not found: ${RESULTS_JSON:-<empty>}" >&2
|
|
22
|
+
exit 1
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
# Validate CWD_SKILLS_DIR looks like a .claude/skills path (defense-in-depth).
|
|
26
|
+
# Only warn when the path exists — a nonexistent path poses no traversal risk.
|
|
27
|
+
if [[ -n "$CWD_SKILLS_DIR" && -d "$CWD_SKILLS_DIR" && "$CWD_SKILLS_DIR" != */.claude/skills* ]]; then
|
|
28
|
+
echo "Warning: CWD_SKILLS_DIR does not look like a .claude/skills path: $CWD_SKILLS_DIR" >&2
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
evaluated_at=$(jq -r '.evaluated_at' "$RESULTS_JSON")
|
|
32
|
+
|
|
33
|
+
# Fail fast on a missing or malformed evaluated_at rather than producing
|
|
34
|
+
# unpredictable results from ISO 8601 string comparison against "null".
|
|
35
|
+
if [[ ! "$evaluated_at" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$ ]]; then
|
|
36
|
+
echo "Error: invalid or missing evaluated_at in $RESULTS_JSON: $evaluated_at" >&2
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# Pre-extract known paths from results.json once (O(1) lookup per file instead of O(n*m))
|
|
41
|
+
known_paths=$(jq -r '.skills[].path' "$RESULTS_JSON" 2>/dev/null)
|
|
42
|
+
|
|
43
|
+
tmpdir=$(mktemp -d)
|
|
44
|
+
# Use a function to avoid embedding $tmpdir in a quoted string (prevents injection
|
|
45
|
+
# if TMPDIR were crafted to contain shell metacharacters).
|
|
46
|
+
_cleanup() { rm -rf "$tmpdir"; }
|
|
47
|
+
trap _cleanup EXIT
|
|
48
|
+
|
|
49
|
+
# Shared counter across process_dir calls — intentionally NOT local
|
|
50
|
+
i=0
|
|
51
|
+
|
|
52
|
+
process_dir() {
|
|
53
|
+
local dir="$1"
|
|
54
|
+
while IFS= read -r file; do
|
|
55
|
+
local mtime dp is_new
|
|
56
|
+
mtime=$(date -u -r "$file" +%Y-%m-%dT%H:%M:%SZ)
|
|
57
|
+
dp="${file/#$HOME/~}"
|
|
58
|
+
|
|
59
|
+
# Check if this file is known to results.json (exact whole-line match to
|
|
60
|
+
# avoid substring false-positives, e.g. "python-patterns" matching "python-patterns-v2").
|
|
61
|
+
if echo "$known_paths" | grep -qxF "$dp"; then
|
|
62
|
+
is_new="false"
|
|
63
|
+
# Known file: only emit if mtime changed (ISO 8601 string comparison is safe)
|
|
64
|
+
[[ "$mtime" > "$evaluated_at" ]] || continue
|
|
65
|
+
else
|
|
66
|
+
is_new="true"
|
|
67
|
+
# New file: always emit regardless of mtime
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
jq -n \
|
|
71
|
+
--arg path "$dp" \
|
|
72
|
+
--arg mtime "$mtime" \
|
|
73
|
+
--argjson is_new "$is_new" \
|
|
74
|
+
'{path:$path,mtime:$mtime,is_new:$is_new}' \
|
|
75
|
+
> "$tmpdir/$i.json"
|
|
76
|
+
i=$((i+1))
|
|
77
|
+
done < <(find "$dir" -name "*.md" -type f 2>/dev/null | sort)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
[[ -d "$GLOBAL_DIR" ]] && process_dir "$GLOBAL_DIR"
|
|
81
|
+
[[ -n "$CWD_SKILLS_DIR" && -d "$CWD_SKILLS_DIR" ]] && process_dir "$CWD_SKILLS_DIR"
|
|
82
|
+
|
|
83
|
+
if [[ $i -eq 0 ]]; then
|
|
84
|
+
echo "[]"
|
|
85
|
+
else
|
|
86
|
+
jq -s '.' "$tmpdir"/*.json
|
|
87
|
+
fi
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# save-results.sh — merge evaluated skills into results.json with correct UTC timestamp
|
|
3
|
+
# Usage: save-results.sh RESULTS_JSON <<< "$EVAL_JSON"
|
|
4
|
+
#
|
|
5
|
+
# stdin format:
|
|
6
|
+
# { "skills": {...}, "mode"?: "full"|"quick", "batch_progress"?: {...} }
|
|
7
|
+
#
|
|
8
|
+
# Always sets evaluated_at to current UTC time via `date -u`.
|
|
9
|
+
# Merges stdin .skills into existing results.json (new entries override old).
|
|
10
|
+
# Optionally updates .mode and .batch_progress if present in stdin.
|
|
11
|
+
|
|
12
|
+
set -euo pipefail
|
|
13
|
+
|
|
14
|
+
RESULTS_JSON="${1:-}"
|
|
15
|
+
|
|
16
|
+
if [[ -z "$RESULTS_JSON" ]]; then
|
|
17
|
+
echo "Error: RESULTS_JSON argument required" >&2
|
|
18
|
+
echo "Usage: save-results.sh RESULTS_JSON <<< \"\$EVAL_JSON\"" >&2
|
|
19
|
+
exit 1
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
EVALUATED_AT=$(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
23
|
+
|
|
24
|
+
# Read eval results from stdin and validate JSON before touching the results file
|
|
25
|
+
input_json=$(cat)
|
|
26
|
+
if ! echo "$input_json" | jq empty 2>/dev/null; then
|
|
27
|
+
echo "Error: stdin is not valid JSON" >&2
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
if [[ ! -f "$RESULTS_JSON" ]]; then
|
|
32
|
+
# Bootstrap: create new results.json from stdin JSON + current UTC timestamp
|
|
33
|
+
echo "$input_json" | jq --arg ea "$EVALUATED_AT" \
|
|
34
|
+
'. + { evaluated_at: $ea }' > "$RESULTS_JSON"
|
|
35
|
+
exit 0
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
# Merge: new .skills override existing ones; old skills not in input_json are kept.
|
|
39
|
+
# Optionally update .mode and .batch_progress if provided.
|
|
40
|
+
#
|
|
41
|
+
# Use mktemp for a collision-safe temp file (concurrent runs on the same RESULTS_JSON
|
|
42
|
+
# would race on a predictable ".tmp" suffix; random suffix prevents silent overwrites).
|
|
43
|
+
tmp=$(mktemp "${RESULTS_JSON}.XXXXXX")
|
|
44
|
+
trap 'rm -f "$tmp"' EXIT
|
|
45
|
+
|
|
46
|
+
jq -s \
|
|
47
|
+
--arg ea "$EVALUATED_AT" \
|
|
48
|
+
'.[0] as $existing | .[1] as $new |
|
|
49
|
+
$existing |
|
|
50
|
+
.evaluated_at = $ea |
|
|
51
|
+
.skills = ($existing.skills + ($new.skills // {})) |
|
|
52
|
+
if ($new | has("mode")) then .mode = $new.mode else . end |
|
|
53
|
+
if ($new | has("batch_progress")) then .batch_progress = $new.batch_progress else . end' \
|
|
54
|
+
"$RESULTS_JSON" <(echo "$input_json") > "$tmp"
|
|
55
|
+
|
|
56
|
+
mv "$tmp" "$RESULTS_JSON"
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# scan.sh — enumerate skill files, extract frontmatter and UTC mtime
|
|
3
|
+
# Usage: scan.sh [CWD_SKILLS_DIR]
|
|
4
|
+
# Output: JSON to stdout
|
|
5
|
+
#
|
|
6
|
+
# When CWD_SKILLS_DIR is omitted, defaults to $PWD/.claude/skills so the
|
|
7
|
+
# script always picks up project-level skills without relying on the caller.
|
|
8
|
+
#
|
|
9
|
+
# Environment:
|
|
10
|
+
# SKILL_STOCKTAKE_GLOBAL_DIR Override ~/.claude/skills (for testing only;
|
|
11
|
+
# do not set in production — intended for bats tests)
|
|
12
|
+
# SKILL_STOCKTAKE_PROJECT_DIR Override project dir detection (for testing only)
|
|
13
|
+
|
|
14
|
+
set -euo pipefail
|
|
15
|
+
|
|
16
|
+
GLOBAL_DIR="${SKILL_STOCKTAKE_GLOBAL_DIR:-$HOME/.claude/skills}"
|
|
17
|
+
CWD_SKILLS_DIR="${SKILL_STOCKTAKE_PROJECT_DIR:-${1:-$PWD/.claude/skills}}"
|
|
18
|
+
# Path to JSONL file containing tool-use observations (optional; used for usage frequency counts).
|
|
19
|
+
# Override via SKILL_STOCKTAKE_OBSERVATIONS env var if your setup uses a different path.
|
|
20
|
+
OBSERVATIONS="${SKILL_STOCKTAKE_OBSERVATIONS:-$HOME/.claude/observations.jsonl}"
|
|
21
|
+
|
|
22
|
+
# Validate CWD_SKILLS_DIR looks like a .claude/skills path (defense-in-depth).
|
|
23
|
+
# Only warn when the path exists — a nonexistent path poses no traversal risk.
|
|
24
|
+
if [[ -n "$CWD_SKILLS_DIR" && -d "$CWD_SKILLS_DIR" && "$CWD_SKILLS_DIR" != */.claude/skills* ]]; then
|
|
25
|
+
echo "Warning: CWD_SKILLS_DIR does not look like a .claude/skills path: $CWD_SKILLS_DIR" >&2
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
# Extract a frontmatter field (handles both quoted and unquoted single-line values).
|
|
29
|
+
# Does NOT support multi-line YAML blocks (| or >) or nested YAML keys.
|
|
30
|
+
extract_field() {
|
|
31
|
+
local file="$1" field="$2"
|
|
32
|
+
awk -v f="$field" '
|
|
33
|
+
BEGIN { fm=0 }
|
|
34
|
+
/^---$/ { fm++; next }
|
|
35
|
+
fm==1 {
|
|
36
|
+
n = length(f) + 2
|
|
37
|
+
if (substr($0, 1, n) == f ": ") {
|
|
38
|
+
val = substr($0, n+1)
|
|
39
|
+
gsub(/^"/, "", val)
|
|
40
|
+
gsub(/"$/, "", val)
|
|
41
|
+
print val
|
|
42
|
+
exit
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
fm>=2 { exit }
|
|
46
|
+
' "$file"
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
# Get UTC timestamp N days ago (supports both macOS and GNU date)
|
|
50
|
+
date_ago() {
|
|
51
|
+
local n="$1"
|
|
52
|
+
date -u -v-"${n}d" +%Y-%m-%dT%H:%M:%SZ 2>/dev/null ||
|
|
53
|
+
date -u -d "${n} days ago" +%Y-%m-%dT%H:%M:%SZ
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
# Count observations matching a file path since a cutoff timestamp
|
|
57
|
+
count_obs() {
|
|
58
|
+
local file="$1" cutoff="$2"
|
|
59
|
+
if [[ ! -f "$OBSERVATIONS" ]]; then
|
|
60
|
+
echo 0
|
|
61
|
+
return
|
|
62
|
+
fi
|
|
63
|
+
jq -r --arg p "$file" --arg c "$cutoff" \
|
|
64
|
+
'select(.tool=="Read" and .path==$p and .timestamp>=$c) | 1' \
|
|
65
|
+
"$OBSERVATIONS" 2>/dev/null | wc -l | tr -d ' '
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# Scan a directory and produce a JSON array of skill objects
|
|
69
|
+
scan_dir_to_json() {
|
|
70
|
+
local dir="$1"
|
|
71
|
+
local c7 c30
|
|
72
|
+
c7=$(date_ago 7)
|
|
73
|
+
c30=$(date_ago 30)
|
|
74
|
+
|
|
75
|
+
local tmpdir
|
|
76
|
+
tmpdir=$(mktemp -d)
|
|
77
|
+
# Use a function to avoid embedding $tmpdir in a quoted string (prevents injection
|
|
78
|
+
# if TMPDIR were crafted to contain shell metacharacters).
|
|
79
|
+
local _scan_tmpdir="$tmpdir"
|
|
80
|
+
_scan_cleanup() { rm -rf "$_scan_tmpdir"; }
|
|
81
|
+
trap _scan_cleanup RETURN
|
|
82
|
+
|
|
83
|
+
# Pre-aggregate observation counts in two passes (one per window) instead of
|
|
84
|
+
# calling jq per-file — reduces from O(n*m) to O(n+m) jq invocations.
|
|
85
|
+
local obs_7d_counts obs_30d_counts
|
|
86
|
+
obs_7d_counts=""
|
|
87
|
+
obs_30d_counts=""
|
|
88
|
+
if [[ -f "$OBSERVATIONS" ]]; then
|
|
89
|
+
obs_7d_counts=$(jq -r --arg c "$c7" \
|
|
90
|
+
'select(.tool=="Read" and .timestamp>=$c) | .path' \
|
|
91
|
+
"$OBSERVATIONS" 2>/dev/null | sort | uniq -c)
|
|
92
|
+
obs_30d_counts=$(jq -r --arg c "$c30" \
|
|
93
|
+
'select(.tool=="Read" and .timestamp>=$c) | .path' \
|
|
94
|
+
"$OBSERVATIONS" 2>/dev/null | sort | uniq -c)
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
local i=0
|
|
98
|
+
while IFS= read -r file; do
|
|
99
|
+
local name desc mtime u7 u30 dp
|
|
100
|
+
name=$(extract_field "$file" "name")
|
|
101
|
+
desc=$(extract_field "$file" "description")
|
|
102
|
+
mtime=$(date -u -r "$file" +%Y-%m-%dT%H:%M:%SZ)
|
|
103
|
+
# Use awk exact field match to avoid substring false-positives from grep -F.
|
|
104
|
+
# uniq -c output format: " N /path/to/file" — path is always field 2.
|
|
105
|
+
u7=$(echo "$obs_7d_counts" | awk -v f="$file" '$2 == f {print $1}' | head -1)
|
|
106
|
+
u7="${u7:-0}"
|
|
107
|
+
u30=$(echo "$obs_30d_counts" | awk -v f="$file" '$2 == f {print $1}' | head -1)
|
|
108
|
+
u30="${u30:-0}"
|
|
109
|
+
dp="${file/#$HOME/~}"
|
|
110
|
+
|
|
111
|
+
jq -n \
|
|
112
|
+
--arg path "$dp" \
|
|
113
|
+
--arg name "$name" \
|
|
114
|
+
--arg description "$desc" \
|
|
115
|
+
--arg mtime "$mtime" \
|
|
116
|
+
--argjson use_7d "$u7" \
|
|
117
|
+
--argjson use_30d "$u30" \
|
|
118
|
+
'{path:$path,name:$name,description:$description,use_7d:$use_7d,use_30d:$use_30d,mtime:$mtime}' \
|
|
119
|
+
> "$tmpdir/$i.json"
|
|
120
|
+
i=$((i+1))
|
|
121
|
+
done < <(find "$dir" -name "*.md" -type f 2>/dev/null | sort)
|
|
122
|
+
|
|
123
|
+
if [[ $i -eq 0 ]]; then
|
|
124
|
+
echo "[]"
|
|
125
|
+
else
|
|
126
|
+
jq -s '.' "$tmpdir"/*.json
|
|
127
|
+
fi
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
# --- Main ---
|
|
131
|
+
|
|
132
|
+
global_found="false"
|
|
133
|
+
global_count=0
|
|
134
|
+
global_skills="[]"
|
|
135
|
+
|
|
136
|
+
if [[ -d "$GLOBAL_DIR" ]]; then
|
|
137
|
+
global_found="true"
|
|
138
|
+
global_skills=$(scan_dir_to_json "$GLOBAL_DIR")
|
|
139
|
+
global_count=$(echo "$global_skills" | jq 'length')
|
|
140
|
+
fi
|
|
141
|
+
|
|
142
|
+
project_found="false"
|
|
143
|
+
project_path=""
|
|
144
|
+
project_count=0
|
|
145
|
+
project_skills="[]"
|
|
146
|
+
|
|
147
|
+
if [[ -n "$CWD_SKILLS_DIR" && -d "$CWD_SKILLS_DIR" ]]; then
|
|
148
|
+
project_found="true"
|
|
149
|
+
project_path="$CWD_SKILLS_DIR"
|
|
150
|
+
project_skills=$(scan_dir_to_json "$CWD_SKILLS_DIR")
|
|
151
|
+
project_count=$(echo "$project_skills" | jq 'length')
|
|
152
|
+
fi
|
|
153
|
+
|
|
154
|
+
# Merge global + project skills into one array
|
|
155
|
+
all_skills=$(jq -s 'add' <(echo "$global_skills") <(echo "$project_skills"))
|
|
156
|
+
|
|
157
|
+
jq -n \
|
|
158
|
+
--arg global_found "$global_found" \
|
|
159
|
+
--argjson global_count "$global_count" \
|
|
160
|
+
--arg project_found "$project_found" \
|
|
161
|
+
--arg project_path "$project_path" \
|
|
162
|
+
--argjson project_count "$project_count" \
|
|
163
|
+
--argjson skills "$all_skills" \
|
|
164
|
+
'{
|
|
165
|
+
scan_summary: {
|
|
166
|
+
global: { found: ($global_found == "true"), count: $global_count },
|
|
167
|
+
project: { found: ($project_found == "true"), path: $project_path, count: $project_count }
|
|
168
|
+
},
|
|
169
|
+
skills: $skills
|
|
170
|
+
}'
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Visa Document Translator
|
|
2
|
+
|
|
3
|
+
Automatically translate visa application documents from images to professional English PDFs.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 🔄 **Automatic OCR**: Tries multiple OCR methods (macOS Vision, EasyOCR, Tesseract)
|
|
8
|
+
- 📄 **Bilingual PDF**: Original image + professional English translation
|
|
9
|
+
- 🌍 **Multi-language**: Supports Chinese, and other languages
|
|
10
|
+
- 📋 **Professional Format**: Suitable for official visa applications
|
|
11
|
+
- 🚀 **Fully Automated**: No manual intervention required
|
|
12
|
+
|
|
13
|
+
## Supported Documents
|
|
14
|
+
|
|
15
|
+
- Bank deposit certificates (存款证明)
|
|
16
|
+
- Employment certificates (在职证明)
|
|
17
|
+
- Retirement certificates (退休证明)
|
|
18
|
+
- Income certificates (收入证明)
|
|
19
|
+
- Property certificates (房产证明)
|
|
20
|
+
- Business licenses (营业执照)
|
|
21
|
+
- ID cards and passports
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
/visa-doc-translate <image-file>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Examples
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
/visa-doc-translate RetirementCertificate.PNG
|
|
33
|
+
/visa-doc-translate BankStatement.HEIC
|
|
34
|
+
/visa-doc-translate EmploymentLetter.jpg
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Output
|
|
38
|
+
|
|
39
|
+
Creates `<filename>_Translated.pdf` with:
|
|
40
|
+
- **Page 1**: Original document image (centered, A4 size)
|
|
41
|
+
- **Page 2**: Professional English translation
|
|
42
|
+
|
|
43
|
+
## Requirements
|
|
44
|
+
|
|
45
|
+
### Python Libraries
|
|
46
|
+
```bash
|
|
47
|
+
pip install pillow reportlab
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### OCR (one of the following)
|
|
51
|
+
|
|
52
|
+
**macOS (recommended)**:
|
|
53
|
+
```bash
|
|
54
|
+
pip install pyobjc-framework-Vision pyobjc-framework-Quartz
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Cross-platform**:
|
|
58
|
+
```bash
|
|
59
|
+
pip install easyocr
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Tesseract**:
|
|
63
|
+
```bash
|
|
64
|
+
brew install tesseract tesseract-lang
|
|
65
|
+
pip install pytesseract
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## How It Works
|
|
69
|
+
|
|
70
|
+
1. Converts HEIC to PNG if needed
|
|
71
|
+
2. Checks and applies EXIF rotation
|
|
72
|
+
3. Extracts text using available OCR method
|
|
73
|
+
4. Translates to professional English
|
|
74
|
+
5. Generates bilingual PDF
|
|
75
|
+
|
|
76
|
+
## Perfect For
|
|
77
|
+
|
|
78
|
+
- 🇦🇺 Australia visa applications
|
|
79
|
+
- 🇺🇸 USA visa applications
|
|
80
|
+
- 🇨🇦 Canada visa applications
|
|
81
|
+
- 🇬🇧 UK visa applications
|
|
82
|
+
- 🇪🇺 EU visa applications
|
|
83
|
+
|
|
84
|
+
## License
|
|
85
|
+
|
|
86
|
+
MIT
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: visa-doc-translate
|
|
3
|
+
description: Translate visa application documents (images) to English and create a bilingual PDF with original and translation
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You are helping translate visa application documents for visa applications.
|
|
7
|
+
|
|
8
|
+
## Instructions
|
|
9
|
+
|
|
10
|
+
When the user provides an image file path, AUTOMATICALLY execute the following steps WITHOUT asking for confirmation:
|
|
11
|
+
|
|
12
|
+
1. **Image Conversion**: If the file is HEIC, convert it to PNG using `sips -s format png <input> --out <output>`
|
|
13
|
+
|
|
14
|
+
2. **Image Rotation**:
|
|
15
|
+
- Check EXIF orientation data
|
|
16
|
+
- Automatically rotate the image based on EXIF data
|
|
17
|
+
- If EXIF orientation is 6, rotate 90 degrees counterclockwise
|
|
18
|
+
- Apply additional rotation as needed (test 180 degrees if document appears upside down)
|
|
19
|
+
|
|
20
|
+
3. **OCR Text Extraction**:
|
|
21
|
+
- Try multiple OCR methods automatically:
|
|
22
|
+
- macOS Vision framework (preferred for macOS)
|
|
23
|
+
- EasyOCR (cross-platform, no tesseract required)
|
|
24
|
+
- Tesseract OCR (if available)
|
|
25
|
+
- Extract all text information from the document
|
|
26
|
+
- Identify document type (deposit certificate, employment certificate, retirement certificate, etc.)
|
|
27
|
+
|
|
28
|
+
4. **Translation**:
|
|
29
|
+
- Translate all text content to English professionally
|
|
30
|
+
- Maintain the original document structure and format
|
|
31
|
+
- Use professional terminology appropriate for visa applications
|
|
32
|
+
- Keep proper names in original language with English in parentheses
|
|
33
|
+
- For Chinese names, use pinyin format (e.g., WU Zhengye)
|
|
34
|
+
- Preserve all numbers, dates, and amounts accurately
|
|
35
|
+
|
|
36
|
+
5. **PDF Generation**:
|
|
37
|
+
- Create a Python script using PIL and reportlab libraries
|
|
38
|
+
- Page 1: Display the rotated original image, centered and scaled to fit A4 page
|
|
39
|
+
- Page 2: Display the English translation with proper formatting:
|
|
40
|
+
- Title centered and bold
|
|
41
|
+
- Content left-aligned with appropriate spacing
|
|
42
|
+
- Professional layout suitable for official documents
|
|
43
|
+
- Add a note at the bottom: "This is a certified English translation of the original document"
|
|
44
|
+
- Execute the script to generate the PDF
|
|
45
|
+
|
|
46
|
+
6. **Output**: Create a PDF file named `<original_filename>_Translated.pdf` in the same directory
|
|
47
|
+
|
|
48
|
+
## Supported Documents
|
|
49
|
+
|
|
50
|
+
- Bank deposit certificates (存款证明)
|
|
51
|
+
- Income certificates (收入证明)
|
|
52
|
+
- Employment certificates (在职证明)
|
|
53
|
+
- Retirement certificates (退休证明)
|
|
54
|
+
- Property certificates (房产证明)
|
|
55
|
+
- Business licenses (营业执照)
|
|
56
|
+
- ID cards and passports
|
|
57
|
+
- Other official documents
|
|
58
|
+
|
|
59
|
+
## Technical Implementation
|
|
60
|
+
|
|
61
|
+
### OCR Methods (tried in order)
|
|
62
|
+
|
|
63
|
+
1. **macOS Vision Framework** (macOS only):
|
|
64
|
+
```python
|
|
65
|
+
import Vision
|
|
66
|
+
from Foundation import NSURL
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
2. **EasyOCR** (cross-platform):
|
|
70
|
+
```bash
|
|
71
|
+
pip install easyocr
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
3. **Tesseract OCR** (if available):
|
|
75
|
+
```bash
|
|
76
|
+
brew install tesseract tesseract-lang
|
|
77
|
+
pip install pytesseract
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Required Python Libraries
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
pip install pillow reportlab
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
For macOS Vision framework:
|
|
87
|
+
```bash
|
|
88
|
+
pip install pyobjc-framework-Vision pyobjc-framework-Quartz
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Important Guidelines
|
|
92
|
+
|
|
93
|
+
- DO NOT ask for user confirmation at each step
|
|
94
|
+
- Automatically determine the best rotation angle
|
|
95
|
+
- Try multiple OCR methods if one fails
|
|
96
|
+
- Ensure all numbers, dates, and amounts are accurately translated
|
|
97
|
+
- Use clean, professional formatting
|
|
98
|
+
- Complete the entire process and report the final PDF location
|
|
99
|
+
|
|
100
|
+
## Example Usage
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
/visa-doc-translate RetirementCertificate.PNG
|
|
104
|
+
/visa-doc-translate BankStatement.HEIC
|
|
105
|
+
/visa-doc-translate EmploymentLetter.jpg
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Output Example
|
|
109
|
+
|
|
110
|
+
The skill will:
|
|
111
|
+
1. Extract text using available OCR method
|
|
112
|
+
2. Translate to professional English
|
|
113
|
+
3. Generate `<filename>_Translated.pdf` with:
|
|
114
|
+
- Page 1: Original document image
|
|
115
|
+
- Page 2: Professional English translation
|
|
116
|
+
|
|
117
|
+
Perfect for visa applications to Australia, USA, Canada, UK, and other countries requiring translated documents.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: observer
|
|
3
|
+
description: Background agent that analyzes session observations to detect patterns and create instincts. Uses Haiku for cost-efficiency.
|
|
4
|
+
model: haiku
|
|
5
|
+
run_mode: background
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Observer Agent
|
|
9
|
+
|
|
10
|
+
A background agent that analyzes observations from Claude Code sessions to detect patterns and create instincts.
|
|
11
|
+
|
|
12
|
+
## When to Run
|
|
13
|
+
|
|
14
|
+
- After significant session activity (20+ tool calls)
|
|
15
|
+
- When user runs `/analyze-patterns`
|
|
16
|
+
- On a scheduled interval (configurable, default 5 minutes)
|
|
17
|
+
- When triggered by observation hook (SIGUSR1)
|
|
18
|
+
|
|
19
|
+
## Input
|
|
20
|
+
|
|
21
|
+
Reads observations from `~/.claude/homunculus/observations.jsonl`:
|
|
22
|
+
|
|
23
|
+
```jsonl
|
|
24
|
+
{"timestamp":"2025-01-22T10:30:00Z","event":"tool_start","session":"abc123","tool":"Edit","input":"..."}
|
|
25
|
+
{"timestamp":"2025-01-22T10:30:01Z","event":"tool_complete","session":"abc123","tool":"Edit","output":"..."}
|
|
26
|
+
{"timestamp":"2025-01-22T10:30:05Z","event":"tool_start","session":"abc123","tool":"Bash","input":"npm test"}
|
|
27
|
+
{"timestamp":"2025-01-22T10:30:10Z","event":"tool_complete","session":"abc123","tool":"Bash","output":"All tests pass"}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Pattern Detection
|
|
31
|
+
|
|
32
|
+
Look for these patterns in observations:
|
|
33
|
+
|
|
34
|
+
### 1. User Corrections
|
|
35
|
+
When a user's follow-up message corrects Claude's previous action:
|
|
36
|
+
- "No, use X instead of Y"
|
|
37
|
+
- "Actually, I meant..."
|
|
38
|
+
- Immediate undo/redo patterns
|
|
39
|
+
|
|
40
|
+
→ Create instinct: "When doing X, prefer Y"
|
|
41
|
+
|
|
42
|
+
### 2. Error Resolutions
|
|
43
|
+
When an error is followed by a fix:
|
|
44
|
+
- Tool output contains error
|
|
45
|
+
- Next few tool calls fix it
|
|
46
|
+
- Same error type resolved similarly multiple times
|
|
47
|
+
|
|
48
|
+
→ Create instinct: "When encountering error X, try Y"
|
|
49
|
+
|
|
50
|
+
### 3. Repeated Workflows
|
|
51
|
+
When the same sequence of tools is used multiple times:
|
|
52
|
+
- Same tool sequence with similar inputs
|
|
53
|
+
- File patterns that change together
|
|
54
|
+
- Time-clustered operations
|
|
55
|
+
|
|
56
|
+
→ Create workflow instinct: "When doing X, follow steps Y, Z, W"
|
|
57
|
+
|
|
58
|
+
### 4. Tool Preferences
|
|
59
|
+
When certain tools are consistently preferred:
|
|
60
|
+
- Always uses Grep before Edit
|
|
61
|
+
- Prefers Read over Bash cat
|
|
62
|
+
- Uses specific Bash commands for certain tasks
|
|
63
|
+
|
|
64
|
+
→ Create instinct: "When needing X, use tool Y"
|
|
65
|
+
|
|
66
|
+
## Output
|
|
67
|
+
|
|
68
|
+
Creates/updates instincts in `~/.claude/homunculus/instincts/personal/`:
|
|
69
|
+
|
|
70
|
+
```yaml
|
|
71
|
+
---
|
|
72
|
+
id: prefer-grep-before-edit
|
|
73
|
+
trigger: "when searching for code to modify"
|
|
74
|
+
confidence: 0.65
|
|
75
|
+
domain: "workflow"
|
|
76
|
+
source: "session-observation"
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
# Prefer Grep Before Edit
|
|
80
|
+
|
|
81
|
+
## Action
|
|
82
|
+
Always use Grep to find the exact location before using Edit.
|
|
83
|
+
|
|
84
|
+
## Evidence
|
|
85
|
+
- Observed 8 times in session abc123
|
|
86
|
+
- Pattern: Grep → Read → Edit sequence
|
|
87
|
+
- Last observed: 2025-01-22
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Confidence Calculation
|
|
91
|
+
|
|
92
|
+
Initial confidence based on observation frequency:
|
|
93
|
+
- 1-2 observations: 0.3 (tentative)
|
|
94
|
+
- 3-5 observations: 0.5 (moderate)
|
|
95
|
+
- 6-10 observations: 0.7 (strong)
|
|
96
|
+
- 11+ observations: 0.85 (very strong)
|
|
97
|
+
|
|
98
|
+
Confidence adjusts over time:
|
|
99
|
+
- +0.05 for each confirming observation
|
|
100
|
+
- -0.1 for each contradicting observation
|
|
101
|
+
- -0.02 per week without observation (decay)
|
|
102
|
+
|
|
103
|
+
## Important Guidelines
|
|
104
|
+
|
|
105
|
+
1. **Be Conservative**: Only create instincts for clear patterns (3+ observations)
|
|
106
|
+
2. **Be Specific**: Narrow triggers are better than broad ones
|
|
107
|
+
3. **Track Evidence**: Always include what observations led to the instinct
|
|
108
|
+
4. **Respect Privacy**: Never include actual code snippets, only patterns
|
|
109
|
+
5. **Merge Similar**: If a new instinct is similar to existing, update rather than duplicate
|
|
110
|
+
|
|
111
|
+
## Example Analysis Session
|
|
112
|
+
|
|
113
|
+
Given observations:
|
|
114
|
+
```jsonl
|
|
115
|
+
{"event":"tool_start","tool":"Grep","input":"pattern: useState"}
|
|
116
|
+
{"event":"tool_complete","tool":"Grep","output":"Found in 3 files"}
|
|
117
|
+
{"event":"tool_start","tool":"Read","input":"src/hooks/useAuth.ts"}
|
|
118
|
+
{"event":"tool_complete","tool":"Read","output":"[file content]"}
|
|
119
|
+
{"event":"tool_start","tool":"Edit","input":"src/hooks/useAuth.ts..."}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Analysis:
|
|
123
|
+
- Detected workflow: Grep → Read → Edit
|
|
124
|
+
- Frequency: Seen 5 times this session
|
|
125
|
+
- Create instinct:
|
|
126
|
+
- trigger: "when modifying code"
|
|
127
|
+
- action: "Search with Grep, confirm with Read, then Edit"
|
|
128
|
+
- confidence: 0.6
|
|
129
|
+
- domain: "workflow"
|
|
130
|
+
|
|
131
|
+
## Integration with Skill Creator
|
|
132
|
+
|
|
133
|
+
When instincts are imported from Skill Creator (repo analysis), they have:
|
|
134
|
+
- `source: "repo-analysis"`
|
|
135
|
+
- `source_repo: "https://github.com/..."`
|
|
136
|
+
|
|
137
|
+
These should be treated as team/project conventions with higher initial confidence (0.7+).
|