sumulige-claude 1.0.9 → 1.1.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/.claude/.version +1 -0
- package/.claude/AGENTS.md +9 -9
- package/.claude/commands/commit-push-pr.md +23 -3
- package/.claude/commands/todos.md +41 -6
- package/.claude/hooks/session-restore.cjs +102 -0
- package/.claude/hooks/session-save.cjs +164 -0
- package/.claude/hooks/todo-manager.cjs +262 -141
- package/.claude/settings.local.json +25 -1
- package/.claude/skills/algorithmic-art/LICENSE.txt +202 -0
- package/.claude/skills/algorithmic-art/SKILL.md +405 -0
- package/.claude/skills/algorithmic-art/templates/generator_template.js +223 -0
- package/.claude/skills/algorithmic-art/templates/viewer.html +599 -0
- package/.claude/skills/api-tester/SKILL.md +52 -23
- package/.claude/skills/brand-guidelines/LICENSE.txt +202 -0
- package/.claude/skills/brand-guidelines/SKILL.md +73 -0
- package/.claude/skills/canvas-design/LICENSE.txt +202 -0
- package/.claude/skills/canvas-design/SKILL.md +130 -0
- package/.claude/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/.claude/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/.claude/skills/doc-coauthoring/SKILL.md +375 -0
- package/.claude/skills/docx/LICENSE.txt +30 -0
- package/.claude/skills/docx/SKILL.md +197 -0
- package/.claude/skills/docx/docx-js.md +350 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.claude/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.claude/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.claude/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.claude/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.claude/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/.claude/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/.claude/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/.claude/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/.claude/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.claude/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.claude/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.claude/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.claude/skills/docx/ooxml/scripts/pack.py +159 -0
- package/.claude/skills/docx/ooxml/scripts/unpack.py +29 -0
- package/.claude/skills/docx/ooxml/scripts/validate.py +69 -0
- package/.claude/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
- package/.claude/skills/docx/ooxml/scripts/validation/base.py +951 -0
- package/.claude/skills/docx/ooxml/scripts/validation/docx.py +274 -0
- package/.claude/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
- package/.claude/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
- package/.claude/skills/docx/ooxml.md +610 -0
- package/.claude/skills/docx/scripts/__init__.py +1 -0
- package/.claude/skills/docx/scripts/document.py +1276 -0
- package/.claude/skills/docx/scripts/templates/comments.xml +3 -0
- package/.claude/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/.claude/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/.claude/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/.claude/skills/docx/scripts/templates/people.xml +3 -0
- package/.claude/skills/docx/scripts/utilities.py +374 -0
- package/.claude/skills/frontend-design/LICENSE.txt +177 -0
- package/.claude/skills/frontend-design/SKILL.md +42 -0
- package/.claude/skills/internal-comms/LICENSE.txt +202 -0
- package/.claude/skills/internal-comms/SKILL.md +32 -0
- package/.claude/skills/internal-comms/examples/3p-updates.md +47 -0
- package/.claude/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/.claude/skills/internal-comms/examples/faq-answers.md +30 -0
- package/.claude/skills/internal-comms/examples/general-comms.md +16 -0
- package/.claude/skills/mcp-builder/LICENSE.txt +202 -0
- package/.claude/skills/mcp-builder/SKILL.md +236 -0
- package/.claude/skills/mcp-builder/reference/evaluation.md +602 -0
- package/.claude/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/.claude/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/.claude/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/.claude/skills/mcp-builder/scripts/connections.py +151 -0
- package/.claude/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/.claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/.claude/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/.claude/skills/pdf/LICENSE.txt +30 -0
- package/.claude/skills/pdf/SKILL.md +294 -0
- package/.claude/skills/pdf/forms.md +205 -0
- package/.claude/skills/pdf/reference.md +612 -0
- package/.claude/skills/pdf/scripts/check_bounding_boxes.py +70 -0
- package/.claude/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
- package/.claude/skills/pdf/scripts/check_fillable_fields.py +12 -0
- package/.claude/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
- package/.claude/skills/pdf/scripts/create_validation_image.py +41 -0
- package/.claude/skills/pdf/scripts/extract_form_field_info.py +152 -0
- package/.claude/skills/pdf/scripts/fill_fillable_fields.py +114 -0
- package/.claude/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
- package/.claude/skills/pptx/LICENSE.txt +30 -0
- package/.claude/skills/pptx/SKILL.md +484 -0
- package/.claude/skills/pptx/html2pptx.md +625 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.claude/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.claude/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.claude/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.claude/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.claude/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/.claude/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/.claude/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/.claude/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/.claude/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.claude/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.claude/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.claude/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.claude/skills/pptx/ooxml/scripts/pack.py +159 -0
- package/.claude/skills/pptx/ooxml/scripts/unpack.py +29 -0
- package/.claude/skills/pptx/ooxml/scripts/validate.py +69 -0
- package/.claude/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/.claude/skills/pptx/ooxml/scripts/validation/base.py +951 -0
- package/.claude/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
- package/.claude/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/.claude/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/.claude/skills/pptx/ooxml.md +427 -0
- package/.claude/skills/pptx/scripts/html2pptx.js +979 -0
- package/.claude/skills/pptx/scripts/inventory.py +1020 -0
- package/.claude/skills/pptx/scripts/rearrange.py +231 -0
- package/.claude/skills/pptx/scripts/replace.py +385 -0
- package/.claude/skills/pptx/scripts/thumbnail.py +450 -0
- package/.claude/skills/skill-creator/LICENSE.txt +202 -0
- package/.claude/skills/skill-creator/SKILL.md +356 -0
- package/.claude/skills/skill-creator/references/output-patterns.md +82 -0
- package/.claude/skills/skill-creator/references/workflows.md +28 -0
- package/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
- package/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/.claude/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/.claude/skills/slack-gif-creator/LICENSE.txt +202 -0
- package/.claude/skills/slack-gif-creator/SKILL.md +254 -0
- package/.claude/skills/slack-gif-creator/core/easing.py +234 -0
- package/.claude/skills/slack-gif-creator/core/frame_composer.py +176 -0
- package/.claude/skills/slack-gif-creator/core/gif_builder.py +269 -0
- package/.claude/skills/slack-gif-creator/core/validators.py +136 -0
- package/.claude/skills/slack-gif-creator/requirements.txt +4 -0
- package/.claude/skills/template/SKILL.md +6 -0
- package/.claude/skills/test-workflow/SKILL.md +191 -0
- package/.claude/skills/theme-factory/LICENSE.txt +202 -0
- package/.claude/skills/theme-factory/SKILL.md +59 -0
- package/.claude/skills/theme-factory/theme-showcase.pdf +0 -0
- package/.claude/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/.claude/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/.claude/skills/theme-factory/themes/desert-rose.md +19 -0
- package/.claude/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/.claude/skills/theme-factory/themes/golden-hour.md +19 -0
- package/.claude/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/.claude/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/.claude/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/.claude/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/.claude/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/.claude/skills/web-artifacts-builder/LICENSE.txt +202 -0
- package/.claude/skills/web-artifacts-builder/SKILL.md +74 -0
- package/.claude/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/.claude/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
- package/.claude/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/.claude/skills/webapp-testing/LICENSE.txt +202 -0
- package/.claude/skills/webapp-testing/SKILL.md +96 -0
- package/.claude/skills/webapp-testing/examples/console_logging.py +35 -0
- package/.claude/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/.claude/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/.claude/skills/webapp-testing/scripts/with_server.py +106 -0
- package/.claude/skills/xlsx/LICENSE.txt +30 -0
- package/.claude/skills/xlsx/SKILL.md +289 -0
- package/.claude/skills/xlsx/recalc.py +178 -0
- package/.claude/templates/tasks/develop.md +69 -0
- package/.claude/templates/tasks/research.md +64 -0
- package/.claude/templates/tasks/test.md +96 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/.versionrc +25 -0
- package/AGENTS.md +171 -86
- package/CHANGELOG.md +83 -4
- package/PROJECT_STRUCTURE.md +40 -3
- package/Q&A.md +184 -0
- package/README.md +74 -2
- package/cli.js +79 -5
- package/config/official-skills.json +183 -0
- package/development/todos/.state.json +4 -0
- package/development/todos/INDEX.md +67 -32
- package/docs/RELEASE.md +93 -0
- package/jest.config.js +61 -0
- package/lib/commands.js +1724 -39
- package/lib/migrations.js +154 -0
- package/lib/utils.js +102 -14
- package/lib/version-check.js +169 -0
- package/package.json +13 -3
- package/scripts/fix-hooks.mjs +97 -0
- package/template/.claude/commands/commit-push-pr.md +23 -3
- package/template/.claude/hooks/project-kickoff.cjs +190 -1
- package/template/.claude/hooks/session-restore.cjs +102 -0
- package/template/.claude/hooks/session-save.cjs +164 -0
- package/template/.claude/settings.json +114 -50
- package/tests/README.md +263 -0
- package/tests/commands.test.js +163 -0
- package/tests/config.test.js +100 -0
- package/tests/marketplace.test.js +304 -0
- package/tests/migrations.test.js +187 -0
- package/tests/utils.test.js +167 -0
package/.claude/.version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.0.10
|
package/.claude/AGENTS.md
CHANGED
|
@@ -4,39 +4,39 @@
|
|
|
4
4
|
|
|
5
5
|
## Agent Orchestration
|
|
6
6
|
|
|
7
|
-
This project uses **
|
|
7
|
+
This project uses **Sumulige Claude** for multi-agent collaboration.
|
|
8
8
|
|
|
9
9
|
### conductor
|
|
10
|
-
- **Model**: claude-opus-4
|
|
10
|
+
- **Model**: claude-opus-4-5-20251101
|
|
11
11
|
- **Role**: Task coordination and decomposition
|
|
12
12
|
|
|
13
13
|
### architect
|
|
14
|
-
- **Model**: claude-opus-4
|
|
14
|
+
- **Model**: claude-opus-4-5-20251101
|
|
15
15
|
- **Role**: Architecture design and decisions
|
|
16
16
|
|
|
17
17
|
### builder
|
|
18
|
-
- **Model**: claude-opus-4
|
|
18
|
+
- **Model**: claude-opus-4-5-20251101
|
|
19
19
|
- **Role**: Code implementation and testing
|
|
20
20
|
|
|
21
21
|
### reviewer
|
|
22
|
-
- **Model**: claude-opus-4
|
|
22
|
+
- **Model**: claude-opus-4-5-20251101
|
|
23
23
|
- **Role**: Code review and quality check
|
|
24
24
|
|
|
25
25
|
### librarian
|
|
26
|
-
- **Model**: claude-opus-4
|
|
26
|
+
- **Model**: claude-opus-4-5-20251101
|
|
27
27
|
- **Role**: Documentation and knowledge
|
|
28
28
|
|
|
29
29
|
## Usage
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
32
|
# View agent status
|
|
33
|
-
|
|
33
|
+
sumulige-claude status
|
|
34
34
|
|
|
35
35
|
# Run agent task
|
|
36
|
-
|
|
36
|
+
sumulige-claude agent <task>
|
|
37
37
|
|
|
38
38
|
# List skills
|
|
39
|
-
|
|
39
|
+
sumulige-claude skill:list
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
</skills_system>
|
|
@@ -22,7 +22,27 @@ Analyze the changes and:
|
|
|
22
22
|
2. Identify the main purpose of the changes
|
|
23
23
|
3. Check if there are any sensitive files that shouldn't be committed
|
|
24
24
|
|
|
25
|
-
## Step 3:
|
|
25
|
+
## Step 3: Code Simplification (Before Commit)
|
|
26
|
+
|
|
27
|
+
**IMPORTANT**: Before creating the commit, simplify and refine the code changes:
|
|
28
|
+
|
|
29
|
+
1. Review the recently modified code sections
|
|
30
|
+
2. Apply code simplification focusing on:
|
|
31
|
+
- Code clarity and consistency
|
|
32
|
+
- Reducing unnecessary complexity and nesting
|
|
33
|
+
- Eliminating redundant code and abstractions
|
|
34
|
+
- Following project standards (if CLAUDE.md exists)
|
|
35
|
+
- Preserving exact functionality
|
|
36
|
+
3. Use explicit, readable code over overly compact solutions
|
|
37
|
+
|
|
38
|
+
**Trigger phrases to apply simplification**:
|
|
39
|
+
- "简化此代码" (Simplify this code)
|
|
40
|
+
- "使这更清晰" (Make this clearer)
|
|
41
|
+
- "优化此实现" (Optimize this implementation)
|
|
42
|
+
|
|
43
|
+
Ask the user: "是否需要简化代码?(Need code simplification?)" - if yes, apply code-simplifier agent before proceeding.
|
|
44
|
+
|
|
45
|
+
## Step 4: Stage and Commit
|
|
26
46
|
|
|
27
47
|
If there are unstaged changes that should be included, ask the user first.
|
|
28
48
|
|
|
@@ -36,7 +56,7 @@ Then create a commit with a clear message following this format:
|
|
|
36
56
|
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
|
37
57
|
```
|
|
38
58
|
|
|
39
|
-
## Step
|
|
59
|
+
## Step 5: Push and Create PR
|
|
40
60
|
|
|
41
61
|
1. Push the changes to remote
|
|
42
62
|
2. Check if there's an open PR for this branch using:
|
|
@@ -51,7 +71,7 @@ Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
|
|
51
71
|
- Test plan (checklist)
|
|
52
72
|
- Link to any related issues
|
|
53
73
|
|
|
54
|
-
## Step
|
|
74
|
+
## Step 6: Verify
|
|
55
75
|
|
|
56
76
|
After creating the PR, show the PR URL and check CI status using:
|
|
57
77
|
```bash
|
|
@@ -14,12 +14,37 @@ cat development/todos/INDEX.md
|
|
|
14
14
|
|
|
15
15
|
## Task Operations
|
|
16
16
|
|
|
17
|
+
### Task Types (v2.0)
|
|
18
|
+
|
|
19
|
+
任务管理系统支持 R-D-T 三阶段生命周期:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
Research (研究) → Develop (开发) → Test (测试) → Done (完成)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
| 类型 | 图标 | 目录 | 说明 |
|
|
26
|
+
|------|------|------|------|
|
|
27
|
+
| Research | 📊 | `active/research/` | 调研/设计/探索 |
|
|
28
|
+
| Develop | 💻 | `active/develop/` | 实现/编码/重构 |
|
|
29
|
+
| Test | 🧪 | `active/test/` | 测试/验证/QA |
|
|
30
|
+
|
|
31
|
+
### Task Templates
|
|
32
|
+
|
|
33
|
+
使用 `.claude/templates/tasks/` 中的模板创建任务:
|
|
34
|
+
|
|
35
|
+
- **研究任务**: `.claude/templates/tasks/research.md`
|
|
36
|
+
- **开发任务**: `.claude/templates/tasks/develop.md`
|
|
37
|
+
- **测试任务**: `.claude/templates/tasks/test.md`
|
|
38
|
+
|
|
17
39
|
### Create a New Task
|
|
18
40
|
|
|
19
41
|
When user asks to create a task:
|
|
20
|
-
1.
|
|
21
|
-
2.
|
|
22
|
-
3. Use
|
|
42
|
+
1. Determine the task type (research/develop/test)
|
|
43
|
+
2. Create file in `development/todos/active/{type}/`
|
|
44
|
+
3. Use kebab-case for filename (e.g., `user-authentication.md`)
|
|
45
|
+
4. Copy from the corresponding template
|
|
46
|
+
|
|
47
|
+
#### Task Template (Legacy Format)
|
|
23
48
|
|
|
24
49
|
```markdown
|
|
25
50
|
# [Task Name]
|
|
@@ -59,9 +84,19 @@ When user asks to create a task:
|
|
|
59
84
|
### Update Task Status
|
|
60
85
|
|
|
61
86
|
To move a task:
|
|
62
|
-
- **Complete**: Move from `active/` to `completed/`
|
|
63
|
-
- **Backlog**: Move from `active/` to `backlog/`
|
|
64
|
-
- **Archive**: Move from `completed/` to `archived/`
|
|
87
|
+
- **Complete**: Move from `active/{type}/` to `completed/{type}/`
|
|
88
|
+
- **Backlog**: Move from `active/{type}/` to `backlog/{type}/`
|
|
89
|
+
- **Archive**: Move from `completed/{type}/` to `archived/{type}/`
|
|
90
|
+
|
|
91
|
+
Example: Move `active/develop/auth.md` → `completed/develop/auth.md`
|
|
92
|
+
|
|
93
|
+
### Auto-Transition Suggestions
|
|
94
|
+
|
|
95
|
+
When a develop task is completed, the todo-manager will suggest creating a corresponding test task. Check with:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
node .claude/hooks/todo-manager.cjs --suggest
|
|
99
|
+
```
|
|
65
100
|
|
|
66
101
|
### Update Task Progress
|
|
67
102
|
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Session Restore Hook - Restore conversation context from file
|
|
4
|
+
*
|
|
5
|
+
* Provides context continuity across sessions
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const fs = require('fs');
|
|
9
|
+
const path = require('path');
|
|
10
|
+
|
|
11
|
+
const PROJECT_DIR = process.env.CLAUDE_PROJECT_DIR || process.cwd();
|
|
12
|
+
const SESSIONS_DIR = path.join(PROJECT_DIR, '.claude', 'sessions');
|
|
13
|
+
const MEMORY_FILE = path.join(PROJECT_DIR, '.claude', 'MEMORY.md');
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Get latest session
|
|
17
|
+
*/
|
|
18
|
+
function getLatestSession() {
|
|
19
|
+
if (!fs.existsSync(SESSIONS_DIR)) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const files = fs.readdirSync(SESSIONS_DIR)
|
|
24
|
+
.filter(f => f.startsWith('session_') && f.endsWith('.md'))
|
|
25
|
+
.sort()
|
|
26
|
+
.reverse();
|
|
27
|
+
|
|
28
|
+
if (files.length === 0) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const latestFile = files[0];
|
|
33
|
+
const filepath = path.join(SESSIONS_DIR, latestFile);
|
|
34
|
+
const content = fs.readFileSync(filepath, 'utf-8');
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
file: latestFile,
|
|
38
|
+
path: filepath,
|
|
39
|
+
content: content
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Get recent memory entries
|
|
45
|
+
*/
|
|
46
|
+
function getRecentMemory(days = 7) {
|
|
47
|
+
if (!fs.existsSync(MEMORY_FILE)) {
|
|
48
|
+
return '';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const content = fs.readFileSync(MEMORY_FILE, 'utf-8');
|
|
52
|
+
const entries = content.split('## ').slice(1, days + 1);
|
|
53
|
+
|
|
54
|
+
return entries.join('## ');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Format context summary for display
|
|
59
|
+
*/
|
|
60
|
+
function formatContextSummary(latestSession, recentMemory) {
|
|
61
|
+
let summary = '';
|
|
62
|
+
|
|
63
|
+
if (latestSession) {
|
|
64
|
+
summary += `\n📁 Last Session: ${latestSession.file}\n`;
|
|
65
|
+
summary += ` Date: ${fs.statSync(latestSession.path).mtime.toLocaleString()}\n`;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const memoryEntries = recentMemory.split('\n').filter(l => l.trim()).length;
|
|
69
|
+
if (memoryEntries > 0) {
|
|
70
|
+
summary += `\n💾 Memory Entries: ${memoryEntries}\n`;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return summary;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Main execution
|
|
77
|
+
if (require.main === module) {
|
|
78
|
+
const args = process.argv.slice(2);
|
|
79
|
+
|
|
80
|
+
if (args[0] === '--latest') {
|
|
81
|
+
const session = getLatestSession();
|
|
82
|
+
if (session) {
|
|
83
|
+
console.log(session.content);
|
|
84
|
+
} else {
|
|
85
|
+
console.log('No sessions found.');
|
|
86
|
+
}
|
|
87
|
+
} else if (args[0] === '--memory') {
|
|
88
|
+
const memory = getRecentMemory(parseInt(args[1]) || 7);
|
|
89
|
+
console.log('# Recent Memory\n');
|
|
90
|
+
console.log(memory);
|
|
91
|
+
} else if (args[0] === '--summary') {
|
|
92
|
+
const session = getLatestSession();
|
|
93
|
+
const memory = getRecentMemory();
|
|
94
|
+
console.log(formatContextSummary(session, memory));
|
|
95
|
+
} else {
|
|
96
|
+
console.log('Usage: node session-restore.cjs [--latest|--memory|--summary]');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
exports.getLatestSession = getLatestSession;
|
|
101
|
+
exports.getRecentMemory = getRecentMemory;
|
|
102
|
+
exports.formatContextSummary = formatContextSummary;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Session Save Hook - Save conversation context to file
|
|
4
|
+
*
|
|
5
|
+
* Triggered after each conversation turn
|
|
6
|
+
* Saves conversation history, context, and state
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
const path = require('path');
|
|
11
|
+
|
|
12
|
+
const PROJECT_DIR = process.env.CLAUDE_PROJECT_DIR || process.cwd();
|
|
13
|
+
const SESSIONS_DIR = path.join(PROJECT_DIR, '.claude', 'sessions');
|
|
14
|
+
const MEMORY_FILE = path.join(PROJECT_DIR, '.claude', 'MEMORY.md');
|
|
15
|
+
|
|
16
|
+
// Ensure sessions directory exists
|
|
17
|
+
if (!fs.existsSync(SESSIONS_DIR)) {
|
|
18
|
+
fs.mkdirSync(SESSIONS_DIR, { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Generate session filename
|
|
23
|
+
*/
|
|
24
|
+
function getSessionFilename() {
|
|
25
|
+
const now = new Date();
|
|
26
|
+
const date = now.toISOString().split('T')[0];
|
|
27
|
+
const time = now.toTimeString().split(' ')[0].replace(/:/g, '-');
|
|
28
|
+
return `session_${date}_${time}.md`;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Save session context
|
|
33
|
+
*/
|
|
34
|
+
function saveSession(context) {
|
|
35
|
+
const filename = getSessionFilename();
|
|
36
|
+
const filepath = path.join(SESSIONS_DIR, filename);
|
|
37
|
+
|
|
38
|
+
const content = `# Session - ${new Date().toISOString()}
|
|
39
|
+
|
|
40
|
+
> Type: ${context.type || 'chat'}
|
|
41
|
+
> Model: ${context.model || 'unknown'}
|
|
42
|
+
> Duration: ${context.duration || 'unknown'}
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Summary
|
|
47
|
+
|
|
48
|
+
${context.summary || 'No summary provided'}
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Context
|
|
53
|
+
|
|
54
|
+
\`\`\`json
|
|
55
|
+
${JSON.stringify(context.metadata || {}, null, 2)}
|
|
56
|
+
\`\`\`
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Key Points
|
|
61
|
+
|
|
62
|
+
${(context.keyPoints || []).map((p, i) => `${i + 1}. ${p}`).join('\n')}
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Artifacts
|
|
67
|
+
|
|
68
|
+
${(context.artifacts || []).map(a => `- ${a}`).join('\n') || 'None'}
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Next Steps
|
|
73
|
+
|
|
74
|
+
${context.nextSteps || 'None'}
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
*Session saved at: ${new Date().toISOString()}*
|
|
79
|
+
`;
|
|
80
|
+
|
|
81
|
+
fs.writeFileSync(filepath, content, 'utf-8');
|
|
82
|
+
|
|
83
|
+
// Update sessions index
|
|
84
|
+
updateSessionsIndex();
|
|
85
|
+
|
|
86
|
+
return filename;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Update sessions index
|
|
91
|
+
*/
|
|
92
|
+
function updateSessionsIndex() {
|
|
93
|
+
const files = fs.readdirSync(SESSIONS_DIR)
|
|
94
|
+
.filter(f => f.endsWith('.md'))
|
|
95
|
+
.sort()
|
|
96
|
+
.reverse();
|
|
97
|
+
|
|
98
|
+
const indexPath = path.join(SESSIONS_DIR, 'INDEX.md');
|
|
99
|
+
|
|
100
|
+
let content = `# Sessions Index
|
|
101
|
+
|
|
102
|
+
> Total sessions: ${files.length}
|
|
103
|
+
> Last updated: ${new Date().toISOString()}
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Recent Sessions
|
|
108
|
+
|
|
109
|
+
${files.slice(0, 20).map(f => {
|
|
110
|
+
const filepath = path.join(SESSIONS_DIR, f);
|
|
111
|
+
const stat = fs.statSync(filepath);
|
|
112
|
+
return `- [${f}](${f}) - ${stat.mtime.toISOString()}`;
|
|
113
|
+
}).join('\n')}
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
`;
|
|
117
|
+
|
|
118
|
+
fs.writeFileSync(indexPath, content, 'utf-8');
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Update MEMORY.md with latest context
|
|
123
|
+
*/
|
|
124
|
+
function updateMemory(context) {
|
|
125
|
+
const timestamp = new Date().toISOString();
|
|
126
|
+
|
|
127
|
+
let content = '';
|
|
128
|
+
|
|
129
|
+
if (fs.existsSync(MEMORY_FILE)) {
|
|
130
|
+
content = fs.readFileSync(MEMORY_FILE, 'utf-8');
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Check if we need to add a new entry
|
|
134
|
+
const newEntry = `\n## ${timestamp.split('T')[0]}\n\n${
|
|
135
|
+
context.summary || context.keyPoints?.join('\n') || 'No details'
|
|
136
|
+
}\n`;
|
|
137
|
+
|
|
138
|
+
// Keep only last 7 days
|
|
139
|
+
const entries = content.split('## ').slice(1, 8);
|
|
140
|
+
content = '# Memory\n\n<!-- Project memory updated by AI -->\n' +
|
|
141
|
+
'## ' + entries.join('## ') + newEntry;
|
|
142
|
+
|
|
143
|
+
fs.writeFileSync(MEMORY_FILE, content, 'utf-8');
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Main execution
|
|
147
|
+
if (require.main === module) {
|
|
148
|
+
const args = process.argv.slice(2);
|
|
149
|
+
|
|
150
|
+
if (args[0] === '--save' && args[1]) {
|
|
151
|
+
const contextData = JSON.parse(fs.readFileSync(args[1], 'utf-8'));
|
|
152
|
+
const filename = saveSession(contextData);
|
|
153
|
+
console.log(`✅ Session saved: ${filename}`);
|
|
154
|
+
|
|
155
|
+
if (contextData.addToMemory !== false) {
|
|
156
|
+
updateMemory(contextData);
|
|
157
|
+
console.log(`✅ Memory updated`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
exports.saveSession = saveSession;
|
|
163
|
+
exports.updateMemory = updateMemory;
|
|
164
|
+
exports.updateSessionsIndex = updateSessionsIndex;
|