@bastani/atomic 0.5.11 → 0.5.12-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/.agents/skills/adapt/SKILL.md +199 -0
- package/.agents/skills/advanced-evaluation/SKILL.md +402 -0
- package/.agents/skills/advanced-evaluation/references/bias-mitigation.md +288 -0
- package/.agents/skills/advanced-evaluation/references/evaluation-pipeline.md +43 -0
- package/.agents/skills/advanced-evaluation/references/implementation-patterns.md +315 -0
- package/.agents/skills/advanced-evaluation/references/metrics-guide.md +331 -0
- package/.agents/skills/advanced-evaluation/scripts/evaluation_example.py +392 -0
- package/.agents/skills/animate/SKILL.md +175 -0
- package/.agents/skills/arrange/SKILL.md +124 -0
- package/.agents/skills/audit/SKILL.md +148 -0
- package/.agents/skills/bdi-mental-states/SKILL.md +311 -0
- package/.agents/skills/bdi-mental-states/references/bdi-ontology-core.md +207 -0
- package/.agents/skills/bdi-mental-states/references/framework-integration.md +582 -0
- package/.agents/skills/bdi-mental-states/references/rdf-examples.md +315 -0
- package/.agents/skills/bdi-mental-states/references/sparql-competency.md +420 -0
- package/.agents/skills/bolder/SKILL.md +117 -0
- package/.agents/skills/bun/SKILL.md +199 -0
- package/.agents/skills/clarify/SKILL.md +183 -0
- package/.agents/skills/colorize/SKILL.md +143 -0
- package/.agents/skills/context-compression/SKILL.md +272 -0
- package/.agents/skills/context-compression/references/evaluation-framework.md +213 -0
- package/.agents/skills/context-compression/scripts/compression_evaluator.py +862 -0
- package/.agents/skills/context-compression/tests/test_compression_evaluator.py +56 -0
- package/.agents/skills/context-degradation/SKILL.md +206 -0
- package/.agents/skills/context-degradation/references/patterns.md +314 -0
- package/.agents/skills/context-degradation/scripts/degradation_detector.py +614 -0
- package/.agents/skills/context-fundamentals/SKILL.md +201 -0
- package/.agents/skills/context-fundamentals/references/context-components.md +283 -0
- package/.agents/skills/context-fundamentals/scripts/context_manager.py +533 -0
- package/.agents/skills/context-optimization/SKILL.md +195 -0
- package/.agents/skills/context-optimization/references/optimization_techniques.md +272 -0
- package/.agents/skills/context-optimization/scripts/compaction.py +562 -0
- package/.agents/skills/create-spec/SKILL.md +244 -0
- package/.agents/skills/critique/SKILL.md +225 -0
- package/.agents/skills/critique/reference/cognitive-load.md +106 -0
- package/.agents/skills/critique/reference/heuristics-scoring.md +234 -0
- package/.agents/skills/critique/reference/personas.md +178 -0
- package/.agents/skills/delight/SKILL.md +304 -0
- package/.agents/skills/distill/SKILL.md +122 -0
- package/.agents/skills/docx/LICENSE.txt +30 -0
- package/.agents/skills/docx/SKILL.md +590 -0
- package/.agents/skills/docx/scripts/__init__.py +1 -0
- package/.agents/skills/docx/scripts/accept_changes.py +135 -0
- package/.agents/skills/docx/scripts/comment.py +318 -0
- package/.agents/skills/docx/scripts/office/helpers/__init__.py +0 -0
- package/.agents/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
- package/.agents/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/.agents/skills/docx/scripts/office/pack.py +159 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.agents/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.agents/skills/docx/scripts/office/soffice.py +183 -0
- package/.agents/skills/docx/scripts/office/unpack.py +132 -0
- package/.agents/skills/docx/scripts/office/validate.py +111 -0
- package/.agents/skills/docx/scripts/office/validators/__init__.py +15 -0
- package/.agents/skills/docx/scripts/office/validators/base.py +847 -0
- package/.agents/skills/docx/scripts/office/validators/docx.py +446 -0
- package/.agents/skills/docx/scripts/office/validators/pptx.py +275 -0
- package/.agents/skills/docx/scripts/office/validators/redlining.py +247 -0
- package/.agents/skills/docx/scripts/templates/comments.xml +3 -0
- package/.agents/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/.agents/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/.agents/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/.agents/skills/docx/scripts/templates/people.xml +3 -0
- package/.agents/skills/evaluation/SKILL.md +251 -0
- package/.agents/skills/evaluation/references/metrics.md +339 -0
- package/.agents/skills/evaluation/scripts/evaluator.py +627 -0
- package/.agents/skills/explain-code/SKILL.md +230 -0
- package/.agents/skills/extract/SKILL.md +91 -0
- package/.agents/skills/filesystem-context/SKILL.md +287 -0
- package/.agents/skills/filesystem-context/references/implementation-patterns.md +549 -0
- package/.agents/skills/filesystem-context/scripts/filesystem_context.py +425 -0
- package/.agents/skills/find-skills/SKILL.md +142 -0
- package/.agents/skills/frontend-design/SKILL.md +147 -0
- package/.agents/skills/frontend-design/reference/color-and-contrast.md +132 -0
- package/.agents/skills/frontend-design/reference/interaction-design.md +195 -0
- package/.agents/skills/frontend-design/reference/motion-design.md +99 -0
- package/.agents/skills/frontend-design/reference/responsive-design.md +114 -0
- package/.agents/skills/frontend-design/reference/spatial-design.md +100 -0
- package/.agents/skills/frontend-design/reference/typography.md +133 -0
- package/.agents/skills/frontend-design/reference/ux-writing.md +107 -0
- package/.agents/skills/gh-commit/SKILL.md +243 -0
- package/.agents/skills/gh-create-pr/SKILL.md +93 -0
- package/.agents/skills/harden/SKILL.md +354 -0
- package/.agents/skills/hosted-agents/SKILL.md +260 -0
- package/.agents/skills/hosted-agents/references/infrastructure-patterns.md +700 -0
- package/.agents/skills/hosted-agents/scripts/sandbox_manager.py +590 -0
- package/.agents/skills/impeccable/SKILL.md +365 -0
- package/.agents/skills/impeccable/reference/color-and-contrast.md +105 -0
- package/.agents/skills/impeccable/reference/craft.md +70 -0
- package/.agents/skills/impeccable/reference/extract.md +70 -0
- package/.agents/skills/impeccable/reference/interaction-design.md +195 -0
- package/.agents/skills/impeccable/reference/motion-design.md +99 -0
- package/.agents/skills/impeccable/reference/responsive-design.md +114 -0
- package/.agents/skills/impeccable/reference/spatial-design.md +100 -0
- package/.agents/skills/impeccable/reference/typography.md +142 -0
- package/.agents/skills/impeccable/reference/ux-writing.md +107 -0
- package/.agents/skills/impeccable/scripts/cleanup-deprecated.mjs +214 -0
- package/.agents/skills/init/SKILL.md +138 -0
- package/.agents/skills/layout/SKILL.md +125 -0
- package/.agents/skills/liteparse/SKILL.md +222 -0
- package/.agents/skills/memory-systems/SKILL.md +219 -0
- package/.agents/skills/memory-systems/references/implementation.md +551 -0
- package/.agents/skills/memory-systems/scripts/memory_store.py +616 -0
- package/.agents/skills/multi-agent-patterns/SKILL.md +257 -0
- package/.agents/skills/multi-agent-patterns/references/frameworks.md +433 -0
- package/.agents/skills/multi-agent-patterns/scripts/coordination.py +613 -0
- package/.agents/skills/normalize/SKILL.md +70 -0
- package/.agents/skills/onboard/SKILL.md +245 -0
- package/.agents/skills/opentui/SKILL.md +201 -0
- package/.agents/skills/opentui/references/animation/REFERENCE.md +431 -0
- package/.agents/skills/opentui/references/components/REFERENCE.md +144 -0
- package/.agents/skills/opentui/references/components/code-diff.md +672 -0
- package/.agents/skills/opentui/references/components/containers.md +417 -0
- package/.agents/skills/opentui/references/components/inputs.md +531 -0
- package/.agents/skills/opentui/references/components/text-display.md +386 -0
- package/.agents/skills/opentui/references/core/REFERENCE.md +145 -0
- package/.agents/skills/opentui/references/core/api.md +543 -0
- package/.agents/skills/opentui/references/core/configuration.md +168 -0
- package/.agents/skills/opentui/references/core/gotchas.md +393 -0
- package/.agents/skills/opentui/references/core/patterns.md +449 -0
- package/.agents/skills/opentui/references/keyboard/REFERENCE.md +617 -0
- package/.agents/skills/opentui/references/layout/REFERENCE.md +337 -0
- package/.agents/skills/opentui/references/layout/patterns.md +444 -0
- package/.agents/skills/opentui/references/react/REFERENCE.md +174 -0
- package/.agents/skills/opentui/references/react/api.md +436 -0
- package/.agents/skills/opentui/references/react/configuration.md +302 -0
- package/.agents/skills/opentui/references/react/gotchas.md +443 -0
- package/.agents/skills/opentui/references/react/patterns.md +501 -0
- package/.agents/skills/opentui/references/solid/REFERENCE.md +201 -0
- package/.agents/skills/opentui/references/solid/api.md +564 -0
- package/.agents/skills/opentui/references/solid/configuration.md +316 -0
- package/.agents/skills/opentui/references/solid/gotchas.md +427 -0
- package/.agents/skills/opentui/references/solid/patterns.md +560 -0
- package/.agents/skills/opentui/references/testing/REFERENCE.md +614 -0
- package/.agents/skills/optimize/SKILL.md +266 -0
- package/.agents/skills/overdrive/SKILL.md +142 -0
- package/.agents/skills/pdf/LICENSE.txt +30 -0
- package/.agents/skills/pdf/SKILL.md +314 -0
- package/.agents/skills/pdf/forms.md +294 -0
- package/.agents/skills/pdf/reference.md +612 -0
- package/.agents/skills/pdf/scripts/check_bounding_boxes.py +65 -0
- package/.agents/skills/pdf/scripts/check_fillable_fields.py +11 -0
- package/.agents/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
- package/.agents/skills/pdf/scripts/create_validation_image.py +37 -0
- package/.agents/skills/pdf/scripts/extract_form_field_info.py +122 -0
- package/.agents/skills/pdf/scripts/extract_form_structure.py +115 -0
- package/.agents/skills/pdf/scripts/fill_fillable_fields.py +98 -0
- package/.agents/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/.agents/skills/playwright-cli/SKILL.md +344 -0
- package/.agents/skills/playwright-cli/references/element-attributes.md +23 -0
- package/.agents/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/.agents/skills/playwright-cli/references/request-mocking.md +87 -0
- package/.agents/skills/playwright-cli/references/running-code.md +231 -0
- package/.agents/skills/playwright-cli/references/session-management.md +169 -0
- package/.agents/skills/playwright-cli/references/storage-state.md +275 -0
- package/.agents/skills/playwright-cli/references/test-generation.md +88 -0
- package/.agents/skills/playwright-cli/references/tracing.md +139 -0
- package/.agents/skills/playwright-cli/references/video-recording.md +143 -0
- package/.agents/skills/polish/SKILL.md +224 -0
- package/.agents/skills/pptx/LICENSE.txt +30 -0
- package/.agents/skills/pptx/SKILL.md +232 -0
- package/.agents/skills/pptx/editing.md +205 -0
- package/.agents/skills/pptx/pptxgenjs.md +420 -0
- package/.agents/skills/pptx/scripts/__init__.py +0 -0
- package/.agents/skills/pptx/scripts/add_slide.py +195 -0
- package/.agents/skills/pptx/scripts/clean.py +286 -0
- package/.agents/skills/pptx/scripts/office/helpers/__init__.py +0 -0
- package/.agents/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
- package/.agents/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/.agents/skills/pptx/scripts/office/pack.py +159 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.agents/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.agents/skills/pptx/scripts/office/soffice.py +183 -0
- package/.agents/skills/pptx/scripts/office/unpack.py +132 -0
- package/.agents/skills/pptx/scripts/office/validate.py +111 -0
- package/.agents/skills/pptx/scripts/office/validators/__init__.py +15 -0
- package/.agents/skills/pptx/scripts/office/validators/base.py +847 -0
- package/.agents/skills/pptx/scripts/office/validators/docx.py +446 -0
- package/.agents/skills/pptx/scripts/office/validators/pptx.py +275 -0
- package/.agents/skills/pptx/scripts/office/validators/redlining.py +247 -0
- package/.agents/skills/pptx/scripts/thumbnail.py +289 -0
- package/.agents/skills/project-development/SKILL.md +291 -0
- package/.agents/skills/project-development/references/case-studies.md +388 -0
- package/.agents/skills/project-development/references/pipeline-patterns.md +610 -0
- package/.agents/skills/project-development/scripts/pipeline_template.py +796 -0
- package/.agents/skills/prompt-engineer/SKILL.md +263 -0
- package/.agents/skills/prompt-engineer/references/advanced_patterns.md +271 -0
- package/.agents/skills/prompt-engineer/references/core_prompting.md +137 -0
- package/.agents/skills/prompt-engineer/references/quality_improvement.md +193 -0
- package/.agents/skills/quieter/SKILL.md +103 -0
- package/.agents/skills/research-codebase/SKILL.md +227 -0
- package/.agents/skills/shape/SKILL.md +96 -0
- package/.agents/skills/skill-creator/LICENSE.txt +202 -0
- package/.agents/skills/skill-creator/SKILL.md +485 -0
- package/.agents/skills/skill-creator/agents/analyzer.md +274 -0
- package/.agents/skills/skill-creator/agents/comparator.md +202 -0
- package/.agents/skills/skill-creator/agents/grader.md +223 -0
- package/.agents/skills/skill-creator/assets/eval_review.html +146 -0
- package/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/.agents/skills/skill-creator/references/schemas.md +430 -0
- package/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
- package/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
- package/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
- package/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
- package/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
- package/.agents/skills/skill-creator/scripts/utils.py +47 -0
- package/.agents/skills/sl-commit/SKILL.md +51 -0
- package/.agents/skills/sl-submit-diff/SKILL.md +55 -0
- package/.agents/skills/teach-impeccable/SKILL.md +71 -0
- package/.agents/skills/test-driven-development/SKILL.md +371 -0
- package/.agents/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/.agents/skills/tool-design/SKILL.md +271 -0
- package/.agents/skills/tool-design/references/architectural_reduction.md +210 -0
- package/.agents/skills/tool-design/references/best_practices.md +176 -0
- package/.agents/skills/tool-design/scripts/description_generator.py +528 -0
- package/.agents/skills/typescript-advanced-types/SKILL.md +719 -0
- package/.agents/skills/typescript-expert/SKILL.md +428 -0
- package/.agents/skills/typescript-expert/references/tsconfig-strict.json +92 -0
- package/.agents/skills/typescript-expert/references/typescript-cheatsheet.md +383 -0
- package/.agents/skills/typescript-expert/references/utility-types.ts +335 -0
- package/.agents/skills/typescript-expert/scripts/ts_diagnostic.py +203 -0
- package/.agents/skills/typescript-react-reviewer/SKILL.md +200 -0
- package/.agents/skills/typescript-react-reviewer/references/antipatterns.md +510 -0
- package/.agents/skills/typescript-react-reviewer/references/checklist.md +267 -0
- package/.agents/skills/typescript-react-reviewer/references/react19-patterns.md +305 -0
- package/.agents/skills/typeset/SKILL.md +116 -0
- package/.agents/skills/workflow-creator/SKILL.md +337 -0
- package/.agents/skills/workflow-creator/references/agent-sessions.md +789 -0
- package/.agents/skills/workflow-creator/references/computation-and-validation.md +224 -0
- package/.agents/skills/workflow-creator/references/control-flow.md +450 -0
- package/.agents/skills/workflow-creator/references/discovery-and-verification.md +156 -0
- package/.agents/skills/workflow-creator/references/failure-modes.md +732 -0
- package/.agents/skills/workflow-creator/references/getting-started.md +289 -0
- package/.agents/skills/workflow-creator/references/session-config.md +355 -0
- package/.agents/skills/workflow-creator/references/state-and-data-flow.md +374 -0
- package/.agents/skills/workflow-creator/references/user-input.md +206 -0
- package/.agents/skills/workflow-creator/references/workflow-inputs.md +274 -0
- package/.agents/skills/xlsx/LICENSE.txt +30 -0
- package/.agents/skills/xlsx/SKILL.md +292 -0
- package/.agents/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
- package/.agents/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
- package/.agents/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/.agents/skills/xlsx/scripts/office/pack.py +159 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.agents/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.agents/skills/xlsx/scripts/office/soffice.py +183 -0
- package/.agents/skills/xlsx/scripts/office/unpack.py +132 -0
- package/.agents/skills/xlsx/scripts/office/validate.py +111 -0
- package/.agents/skills/xlsx/scripts/office/validators/__init__.py +15 -0
- package/.agents/skills/xlsx/scripts/office/validators/base.py +847 -0
- package/.agents/skills/xlsx/scripts/office/validators/docx.py +446 -0
- package/.agents/skills/xlsx/scripts/office/validators/pptx.py +275 -0
- package/.agents/skills/xlsx/scripts/office/validators/redlining.py +247 -0
- package/.agents/skills/xlsx/scripts/recalc.py +184 -0
- package/.claude/agents/reviewer.md +1 -0
- package/.github/agents/reviewer.md +1 -0
- package/.opencode/agents/reviewer.md +1 -0
- package/README.md +274 -169
- package/package.json +6 -7
- package/src/commands/cli/init/index.ts +2 -2
- package/src/commands/cli/init/scm.ts +7 -8
- package/src/commands/cli/workflow-command.test.ts +74 -0
- package/src/commands/cli/workflow.ts +7 -2
- package/src/scripts/bundle-configs.ts +128 -0
- package/src/sdk/components/compact-switcher.tsx +1 -1
- package/src/sdk/components/orchestrator-panel-store.ts +13 -0
- package/src/sdk/components/orchestrator-panel.tsx +10 -0
- package/src/sdk/components/statusline.tsx +13 -1
- package/src/sdk/providers/claude.ts +42 -0
- package/src/sdk/runtime/executor.ts +111 -32
- package/src/sdk/types.ts +7 -0
- package/src/sdk/workflows/builtin/ralph/claude/index.ts +132 -76
- package/src/sdk/workflows/builtin/ralph/copilot/index.ts +129 -71
- package/src/sdk/workflows/builtin/ralph/helpers/git.ts +184 -17
- package/src/sdk/workflows/builtin/ralph/helpers/prompts.ts +463 -79
- package/src/sdk/workflows/builtin/ralph/opencode/index.ts +124 -80
- package/src/services/system/auto-sync.ts +31 -51
- package/src/services/system/skills.ts +56 -60
- package/dist/lib/path-root-guard.d.ts +0 -4
- package/dist/lib/path-root-guard.d.ts.map +0 -1
- package/dist/sdk/components/color-utils.d.ts +0 -4
- package/dist/sdk/components/color-utils.d.ts.map +0 -1
- package/dist/sdk/components/compact-switcher.d.ts +0 -10
- package/dist/sdk/components/compact-switcher.d.ts.map +0 -1
- package/dist/sdk/components/connectors.d.ts +0 -15
- package/dist/sdk/components/connectors.d.ts.map +0 -1
- package/dist/sdk/components/connectors.test.d.ts +0 -2
- package/dist/sdk/components/connectors.test.d.ts.map +0 -1
- package/dist/sdk/components/edge.d.ts +0 -4
- package/dist/sdk/components/edge.d.ts.map +0 -1
- package/dist/sdk/components/error-boundary.d.ts +0 -23
- package/dist/sdk/components/error-boundary.d.ts.map +0 -1
- package/dist/sdk/components/graph-theme.d.ts +0 -17
- package/dist/sdk/components/graph-theme.d.ts.map +0 -1
- package/dist/sdk/components/header.d.ts +0 -3
- package/dist/sdk/components/header.d.ts.map +0 -1
- package/dist/sdk/components/hooks.d.ts +0 -15
- package/dist/sdk/components/hooks.d.ts.map +0 -1
- package/dist/sdk/components/layout.d.ts +0 -27
- package/dist/sdk/components/layout.d.ts.map +0 -1
- package/dist/sdk/components/layout.test.d.ts +0 -2
- package/dist/sdk/components/layout.test.d.ts.map +0 -1
- package/dist/sdk/components/node-card.d.ts +0 -10
- package/dist/sdk/components/node-card.d.ts.map +0 -1
- package/dist/sdk/components/orchestrator-panel-contexts.d.ts +0 -16
- package/dist/sdk/components/orchestrator-panel-contexts.d.ts.map +0 -1
- package/dist/sdk/components/orchestrator-panel-store.d.ts +0 -46
- package/dist/sdk/components/orchestrator-panel-store.d.ts.map +0 -1
- package/dist/sdk/components/orchestrator-panel-store.test.d.ts +0 -2
- package/dist/sdk/components/orchestrator-panel-store.test.d.ts.map +0 -1
- package/dist/sdk/components/orchestrator-panel-types.d.ts +0 -18
- package/dist/sdk/components/orchestrator-panel-types.d.ts.map +0 -1
- package/dist/sdk/components/orchestrator-panel.d.ts +0 -52
- package/dist/sdk/components/orchestrator-panel.d.ts.map +0 -1
- package/dist/sdk/components/session-graph-panel.d.ts +0 -7
- package/dist/sdk/components/session-graph-panel.d.ts.map +0 -1
- package/dist/sdk/components/status-helpers.d.ts +0 -6
- package/dist/sdk/components/status-helpers.d.ts.map +0 -1
- package/dist/sdk/components/statusline.d.ts +0 -7
- package/dist/sdk/components/statusline.d.ts.map +0 -1
- package/dist/sdk/components/workflow-picker-panel.d.ts +0 -123
- package/dist/sdk/components/workflow-picker-panel.d.ts.map +0 -1
- package/dist/sdk/define-workflow.d.ts +0 -78
- package/dist/sdk/define-workflow.d.ts.map +0 -1
- package/dist/sdk/define-workflow.test.d.ts +0 -2
- package/dist/sdk/define-workflow.test.d.ts.map +0 -1
- package/dist/sdk/errors.d.ts +0 -24
- package/dist/sdk/errors.d.ts.map +0 -1
- package/dist/sdk/errors.test.d.ts +0 -2
- package/dist/sdk/errors.test.d.ts.map +0 -1
- package/dist/sdk/index.d.ts +0 -13
- package/dist/sdk/index.d.ts.map +0 -1
- package/dist/sdk/providers/claude.d.ts +0 -170
- package/dist/sdk/providers/claude.d.ts.map +0 -1
- package/dist/sdk/providers/copilot.d.ts +0 -11
- package/dist/sdk/providers/copilot.d.ts.map +0 -1
- package/dist/sdk/providers/opencode.d.ts +0 -11
- package/dist/sdk/providers/opencode.d.ts.map +0 -1
- package/dist/sdk/runtime/discovery.d.ts +0 -86
- package/dist/sdk/runtime/discovery.d.ts.map +0 -1
- package/dist/sdk/runtime/executor-entry.d.ts +0 -11
- package/dist/sdk/runtime/executor-entry.d.ts.map +0 -1
- package/dist/sdk/runtime/executor.d.ts +0 -72
- package/dist/sdk/runtime/executor.d.ts.map +0 -1
- package/dist/sdk/runtime/executor.test.d.ts +0 -2
- package/dist/sdk/runtime/executor.test.d.ts.map +0 -1
- package/dist/sdk/runtime/graph-inference.d.ts +0 -35
- package/dist/sdk/runtime/graph-inference.d.ts.map +0 -1
- package/dist/sdk/runtime/loader.d.ts +0 -70
- package/dist/sdk/runtime/loader.d.ts.map +0 -1
- package/dist/sdk/runtime/panel.d.ts +0 -9
- package/dist/sdk/runtime/panel.d.ts.map +0 -1
- package/dist/sdk/runtime/theme.d.ts +0 -28
- package/dist/sdk/runtime/theme.d.ts.map +0 -1
- package/dist/sdk/runtime/tmux.d.ts +0 -297
- package/dist/sdk/runtime/tmux.d.ts.map +0 -1
- package/dist/sdk/types.d.ts +0 -295
- package/dist/sdk/types.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts +0 -62
- package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts +0 -46
- package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts +0 -26
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts +0 -92
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts +0 -57
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts +0 -49
- package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts +0 -14
- package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts +0 -14
- package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts +0 -17
- package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts +0 -119
- package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts +0 -20
- package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts +0 -14
- package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts.map +0 -1
- package/dist/sdk/workflows/index.d.ts +0 -24
- package/dist/sdk/workflows/index.d.ts.map +0 -1
- package/dist/services/config/definitions.d.ts +0 -85
- package/dist/services/config/definitions.d.ts.map +0 -1
- package/dist/services/system/copy.d.ts +0 -77
- package/dist/services/system/copy.d.ts.map +0 -1
- package/dist/services/system/detect.d.ts +0 -75
- package/dist/services/system/detect.d.ts.map +0 -1
- package/tsconfig.json +0 -33
|
@@ -0,0 +1,562 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Context Optimization Utilities — compaction, masking, budgeting, and cache optimization.
|
|
3
|
+
|
|
4
|
+
Public API
|
|
5
|
+
----------
|
|
6
|
+
Functions:
|
|
7
|
+
estimate_token_count(text) -> int
|
|
8
|
+
estimate_message_tokens(messages) -> int
|
|
9
|
+
categorize_messages(messages) -> dict
|
|
10
|
+
summarize_content(content, category, max_length) -> str
|
|
11
|
+
design_stable_prompt(template, dynamic_values) -> str
|
|
12
|
+
calculate_cache_metrics(requests, cache) -> dict
|
|
13
|
+
|
|
14
|
+
Classes:
|
|
15
|
+
ObservationStore — Store and mask verbose tool outputs with retrievable references.
|
|
16
|
+
ContextBudget — Token budget allocation and optimization trigger detection.
|
|
17
|
+
|
|
18
|
+
PRODUCTION NOTES:
|
|
19
|
+
- Token estimation uses simplified heuristics (~4 chars/token for English).
|
|
20
|
+
Production systems should use model-specific tokenizers:
|
|
21
|
+
- OpenAI: tiktoken library
|
|
22
|
+
- Anthropic: anthropic tokenizer
|
|
23
|
+
- Local models: HuggingFace tokenizers
|
|
24
|
+
|
|
25
|
+
- Summarization functions use simple heuristics for demonstration.
|
|
26
|
+
Production systems should use:
|
|
27
|
+
- LLM-based summarization for high-quality compression
|
|
28
|
+
- Domain-specific summarization models
|
|
29
|
+
- Schema-based summarization for structured outputs
|
|
30
|
+
|
|
31
|
+
- Cache metrics are illustrative. Production systems should integrate
|
|
32
|
+
with actual inference infrastructure metrics.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
from typing import List, Dict, Optional, Tuple
|
|
36
|
+
import hashlib
|
|
37
|
+
import re
|
|
38
|
+
import time
|
|
39
|
+
|
|
40
|
+
__all__ = [
|
|
41
|
+
"estimate_token_count",
|
|
42
|
+
"estimate_message_tokens",
|
|
43
|
+
"categorize_messages",
|
|
44
|
+
"summarize_content",
|
|
45
|
+
"summarize_tool_output",
|
|
46
|
+
"summarize_conversation",
|
|
47
|
+
"summarize_document",
|
|
48
|
+
"summarize_general",
|
|
49
|
+
"ObservationStore",
|
|
50
|
+
"ContextBudget",
|
|
51
|
+
"design_stable_prompt",
|
|
52
|
+
"calculate_cache_metrics",
|
|
53
|
+
"generate_cache_recommendations",
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# ---------------------------------------------------------------------------
|
|
58
|
+
# Token estimation
|
|
59
|
+
# ---------------------------------------------------------------------------
|
|
60
|
+
|
|
61
|
+
def estimate_token_count(text: str) -> int:
|
|
62
|
+
"""
|
|
63
|
+
Estimate token count for text.
|
|
64
|
+
|
|
65
|
+
Use when: a quick token budget check is needed and a model-specific
|
|
66
|
+
tokenizer is unavailable or too slow for the hot path.
|
|
67
|
+
|
|
68
|
+
Uses approximation: ~4 characters per token for English.
|
|
69
|
+
|
|
70
|
+
WARNING: This is a rough estimate. Actual tokenization varies by:
|
|
71
|
+
- Model (GPT-5.2, Claude 4.5, Gemini 3 have different tokenizers)
|
|
72
|
+
- Content type (code typically has higher token density)
|
|
73
|
+
- Language (non-English may have 2-3x higher token/char ratio)
|
|
74
|
+
|
|
75
|
+
Production usage::
|
|
76
|
+
|
|
77
|
+
import tiktoken
|
|
78
|
+
enc = tiktoken.encoding_for_model("gpt-4")
|
|
79
|
+
token_count = len(enc.encode(text))
|
|
80
|
+
"""
|
|
81
|
+
return len(text) // 4
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def estimate_message_tokens(messages: List[Dict[str, str]]) -> int:
|
|
85
|
+
"""
|
|
86
|
+
Estimate token count for a message list.
|
|
87
|
+
|
|
88
|
+
Use when: checking whether the current conversation is approaching
|
|
89
|
+
the context budget threshold before deciding to compact or mask.
|
|
90
|
+
"""
|
|
91
|
+
total = 0
|
|
92
|
+
for msg in messages:
|
|
93
|
+
content = msg.get("content", "")
|
|
94
|
+
total += estimate_token_count(content)
|
|
95
|
+
# Add overhead for role/formatting
|
|
96
|
+
total += 10
|
|
97
|
+
return total
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
# ---------------------------------------------------------------------------
|
|
101
|
+
# Compaction functions
|
|
102
|
+
# ---------------------------------------------------------------------------
|
|
103
|
+
|
|
104
|
+
def categorize_messages(messages: List[Dict]) -> Dict[str, List[Dict]]:
|
|
105
|
+
"""
|
|
106
|
+
Categorize messages for selective compaction.
|
|
107
|
+
|
|
108
|
+
Use when: preparing to compact context and needing to apply different
|
|
109
|
+
summarization strategies per category (tool outputs first, then old
|
|
110
|
+
conversation turns, then retrieved documents — never the system prompt).
|
|
111
|
+
|
|
112
|
+
Returns a dict mapping category name to list of messages.
|
|
113
|
+
"""
|
|
114
|
+
categories: Dict[str, List[Dict]] = {
|
|
115
|
+
"system_prompt": [],
|
|
116
|
+
"tool_definition": [],
|
|
117
|
+
"tool_output": [],
|
|
118
|
+
"conversation": [],
|
|
119
|
+
"retrieved_document": [],
|
|
120
|
+
"other": [],
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
for msg in messages:
|
|
124
|
+
role = msg.get("role", "user")
|
|
125
|
+
content = msg.get("content", "")
|
|
126
|
+
|
|
127
|
+
if role == "system":
|
|
128
|
+
categories["system_prompt"].append({**msg, "category": "system_prompt"})
|
|
129
|
+
elif "tool_use" in msg.get("type", ""):
|
|
130
|
+
categories["tool_output"].append({**msg, "category": "tool_output"})
|
|
131
|
+
elif role == "user":
|
|
132
|
+
categories["conversation"].append({**msg, "category": "conversation"})
|
|
133
|
+
elif "retrieved" in msg.get("tags", []):
|
|
134
|
+
categories["retrieved_document"].append({**msg, "category": "retrieved_document"})
|
|
135
|
+
else:
|
|
136
|
+
categories["other"].append({**msg, "category": "other"})
|
|
137
|
+
|
|
138
|
+
return categories
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def summarize_content(content: str, category: str, max_length: int = 500) -> str:
|
|
142
|
+
"""
|
|
143
|
+
Summarize content for compaction, dispatching by category.
|
|
144
|
+
|
|
145
|
+
Use when: compacting context and needing category-aware summarization
|
|
146
|
+
(tool outputs get metric extraction, conversations get decision
|
|
147
|
+
extraction, documents get lead-paragraph extraction).
|
|
148
|
+
"""
|
|
149
|
+
if category == "tool_output":
|
|
150
|
+
return summarize_tool_output(content, max_length)
|
|
151
|
+
elif category == "conversation":
|
|
152
|
+
return summarize_conversation(content, max_length)
|
|
153
|
+
elif category == "retrieved_document":
|
|
154
|
+
return summarize_document(content, max_length)
|
|
155
|
+
else:
|
|
156
|
+
return summarize_general(content, max_length)
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def summarize_tool_output(content: str, max_length: int = 500) -> str:
|
|
160
|
+
"""
|
|
161
|
+
Summarize tool output by extracting metrics and key findings.
|
|
162
|
+
|
|
163
|
+
Use when: a tool output has served its immediate purpose and needs
|
|
164
|
+
to be compacted while preserving actionable data points.
|
|
165
|
+
"""
|
|
166
|
+
# Look for metrics (numbers with context)
|
|
167
|
+
metrics = re.findall(r'(\w+):\s*([\d.,]+)', content)
|
|
168
|
+
|
|
169
|
+
# Look for key findings (lines with important keywords)
|
|
170
|
+
keywords = ["result", "found", "total", "success", "error", "value"]
|
|
171
|
+
findings = []
|
|
172
|
+
for line in content.split('\n'):
|
|
173
|
+
if any(kw in line.lower() for kw in keywords):
|
|
174
|
+
findings.append(line.strip())
|
|
175
|
+
|
|
176
|
+
summary_parts = []
|
|
177
|
+
if metrics:
|
|
178
|
+
summary_parts.append(f"Metrics: {', '.join([f'{k}={v}' for k, v in metrics])}")
|
|
179
|
+
if findings:
|
|
180
|
+
summary_parts.append("Key findings: " + "; ".join(findings[:3]))
|
|
181
|
+
|
|
182
|
+
result = " | ".join(summary_parts) if summary_parts else "[Tool output summarized]"
|
|
183
|
+
return result[:max_length]
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def summarize_conversation(content: str, max_length: int = 500) -> str:
|
|
187
|
+
"""
|
|
188
|
+
Summarize conversational content by extracting decisions and questions.
|
|
189
|
+
|
|
190
|
+
Use when: older conversation turns need compaction and the key
|
|
191
|
+
decisions/commitments must survive while filler is removed.
|
|
192
|
+
"""
|
|
193
|
+
decisions = re.findall(r'(?i)(?:decided|decision|chose|chosen)[:\s]+([^.]+)', content)
|
|
194
|
+
questions = re.findall(r'(?:\?|question)[:\s]+([^.]+)', content)
|
|
195
|
+
|
|
196
|
+
summary_parts = []
|
|
197
|
+
if decisions:
|
|
198
|
+
decision_texts = [d.strip() for d in decisions[:5]]
|
|
199
|
+
summary_parts.append(f"Decisions: {'; '.join(decision_texts)}")
|
|
200
|
+
if questions:
|
|
201
|
+
question_texts = [q.strip() for q in questions[:3]]
|
|
202
|
+
summary_parts.append(f"Open questions: {'; '.join(question_texts)}")
|
|
203
|
+
|
|
204
|
+
if not summary_parts:
|
|
205
|
+
# Fallback: extract the first few substantive sentences
|
|
206
|
+
sentences = [s.strip() for s in content.split('.') if len(s.strip()) > 20]
|
|
207
|
+
if sentences:
|
|
208
|
+
summary_parts.append('. '.join(sentences[:3]) + '.')
|
|
209
|
+
|
|
210
|
+
result = " | ".join(summary_parts) if summary_parts else "[Conversation summarized]"
|
|
211
|
+
return result[:max_length]
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def summarize_document(content: str, max_length: int = 500) -> str:
|
|
215
|
+
"""
|
|
216
|
+
Summarize document content using lead-paragraph extraction.
|
|
217
|
+
|
|
218
|
+
Use when: a retrieved document has been consumed for reasoning and
|
|
219
|
+
only a brief reference needs to remain in context.
|
|
220
|
+
"""
|
|
221
|
+
paragraphs = content.split('\n\n')
|
|
222
|
+
if paragraphs:
|
|
223
|
+
first_para = paragraphs[0].strip()
|
|
224
|
+
sentences = first_para.split('. ')
|
|
225
|
+
if len(sentences) > 2:
|
|
226
|
+
first_para = '. '.join(sentences[:2]) + '.'
|
|
227
|
+
return first_para[:max_length]
|
|
228
|
+
return "[Document summarized]"
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def summarize_general(content: str, max_length: int = 500) -> str:
|
|
232
|
+
"""
|
|
233
|
+
General-purpose summarization via truncation.
|
|
234
|
+
|
|
235
|
+
Use when: content does not fit a specific category and a simple
|
|
236
|
+
truncation with ellipsis is acceptable.
|
|
237
|
+
"""
|
|
238
|
+
return content[:max_length] + "..." if len(content) > max_length else content
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
# ---------------------------------------------------------------------------
|
|
242
|
+
# Observation masking
|
|
243
|
+
# ---------------------------------------------------------------------------
|
|
244
|
+
|
|
245
|
+
class ObservationStore:
|
|
246
|
+
"""
|
|
247
|
+
Store and mask verbose tool outputs with retrievable references.
|
|
248
|
+
|
|
249
|
+
Use when: tool outputs dominate context (>50% of tokens) and older
|
|
250
|
+
observations have already served their reasoning purpose. Stores the
|
|
251
|
+
full content externally and replaces it with a compact reference
|
|
252
|
+
containing a key-point summary.
|
|
253
|
+
|
|
254
|
+
Example::
|
|
255
|
+
|
|
256
|
+
store = ObservationStore(max_size=500)
|
|
257
|
+
masked, ref_id = store.mask(long_tool_output, max_length=200)
|
|
258
|
+
# masked: "[Obs:a1b2c3d4 elided. Key: ... Full content retrievable.]"
|
|
259
|
+
# Later retrieval:
|
|
260
|
+
original = store.retrieve(ref_id)
|
|
261
|
+
"""
|
|
262
|
+
|
|
263
|
+
def __init__(self, max_size: int = 1000) -> None:
|
|
264
|
+
self.observations: Dict[str, Dict] = {}
|
|
265
|
+
self.order: List[str] = []
|
|
266
|
+
self.max_size = max_size
|
|
267
|
+
|
|
268
|
+
def store(self, content: str, metadata: Optional[Dict] = None) -> str:
|
|
269
|
+
"""Store observation and return reference ID."""
|
|
270
|
+
ref_id = self._generate_ref_id(content)
|
|
271
|
+
|
|
272
|
+
self.observations[ref_id] = {
|
|
273
|
+
"content": content,
|
|
274
|
+
"metadata": metadata or {},
|
|
275
|
+
"stored_at": time.time(),
|
|
276
|
+
"last_accessed": time.time(),
|
|
277
|
+
}
|
|
278
|
+
self.order.append(ref_id)
|
|
279
|
+
|
|
280
|
+
# Evict oldest if over limit
|
|
281
|
+
if len(self.order) > self.max_size:
|
|
282
|
+
oldest = self.order.pop(0)
|
|
283
|
+
del self.observations[oldest]
|
|
284
|
+
|
|
285
|
+
return ref_id
|
|
286
|
+
|
|
287
|
+
def retrieve(self, ref_id: str) -> Optional[str]:
|
|
288
|
+
"""Retrieve observation by reference ID."""
|
|
289
|
+
if ref_id in self.observations:
|
|
290
|
+
self.observations[ref_id]["last_accessed"] = time.time()
|
|
291
|
+
return self.observations[ref_id]["content"]
|
|
292
|
+
return None
|
|
293
|
+
|
|
294
|
+
def mask(self, content: str, max_length: int = 200) -> Tuple[str, Optional[str]]:
|
|
295
|
+
"""
|
|
296
|
+
Mask observation if longer than max_length.
|
|
297
|
+
|
|
298
|
+
Use when: deciding per-observation whether to keep inline or
|
|
299
|
+
replace with a compact reference. Returns (masked_content, ref_id)
|
|
300
|
+
where ref_id is None if the content was short enough to keep.
|
|
301
|
+
"""
|
|
302
|
+
if len(content) <= max_length:
|
|
303
|
+
return content, None
|
|
304
|
+
|
|
305
|
+
ref_id = self.store(content)
|
|
306
|
+
key_point = self._extract_key_point(content)
|
|
307
|
+
masked = f"[Obs:{ref_id} elided. Key: {key_point}. Full content retrievable.]"
|
|
308
|
+
return masked, ref_id
|
|
309
|
+
|
|
310
|
+
def _generate_ref_id(self, content: str) -> str:
|
|
311
|
+
"""Generate unique reference ID."""
|
|
312
|
+
hash_input = f"{content[:100]}{time.time()}"
|
|
313
|
+
return hashlib.md5(hash_input.encode()).hexdigest()[:8]
|
|
314
|
+
|
|
315
|
+
def _extract_key_point(self, content: str) -> str:
|
|
316
|
+
"""Extract key point from observation."""
|
|
317
|
+
lines = [line for line in content.split('\n') if len(line) > 20]
|
|
318
|
+
if lines:
|
|
319
|
+
return lines[0][:50] + "..."
|
|
320
|
+
sentences = content.split('. ')
|
|
321
|
+
if sentences:
|
|
322
|
+
return sentences[0][:50] + "..."
|
|
323
|
+
return content[:50] + "..."
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
# ---------------------------------------------------------------------------
|
|
327
|
+
# Context budget management
|
|
328
|
+
# ---------------------------------------------------------------------------
|
|
329
|
+
|
|
330
|
+
class ContextBudget:
|
|
331
|
+
"""
|
|
332
|
+
Token budget allocation and optimization trigger detection.
|
|
333
|
+
|
|
334
|
+
Use when: building an agent loop that needs to monitor context usage
|
|
335
|
+
across categories and trigger compaction/masking at the right thresholds
|
|
336
|
+
rather than waiting until the window overflows.
|
|
337
|
+
|
|
338
|
+
Example::
|
|
339
|
+
|
|
340
|
+
budget = ContextBudget(total_limit=128_000)
|
|
341
|
+
budget.allocate("system_prompt", 1500)
|
|
342
|
+
budget.allocate("tool_definitions", 3000)
|
|
343
|
+
# ... after each agent turn:
|
|
344
|
+
should_act, reasons = budget.should_optimize(current_usage)
|
|
345
|
+
if should_act:
|
|
346
|
+
# apply masking or compaction based on reasons
|
|
347
|
+
pass
|
|
348
|
+
"""
|
|
349
|
+
|
|
350
|
+
def __init__(self, total_limit: int) -> None:
|
|
351
|
+
self.total_limit = total_limit
|
|
352
|
+
self.allocated: Dict[str, int] = {
|
|
353
|
+
"system_prompt": 0,
|
|
354
|
+
"tool_definitions": 0,
|
|
355
|
+
"retrieved_docs": 0,
|
|
356
|
+
"message_history": 0,
|
|
357
|
+
"tool_outputs": 0,
|
|
358
|
+
"other": 0,
|
|
359
|
+
}
|
|
360
|
+
self.reserved = 5000 # Reserved buffer
|
|
361
|
+
self.reservation_limit = total_limit - self.reserved
|
|
362
|
+
|
|
363
|
+
def allocate(self, category: str, amount: int) -> bool:
|
|
364
|
+
"""
|
|
365
|
+
Allocate budget to category. Returns True on success, False if
|
|
366
|
+
the allocation would exceed the reservation limit.
|
|
367
|
+
"""
|
|
368
|
+
if category not in self.allocated:
|
|
369
|
+
category = "other"
|
|
370
|
+
|
|
371
|
+
current = sum(self.allocated.values())
|
|
372
|
+
proposed = current + amount
|
|
373
|
+
|
|
374
|
+
if proposed > self.reservation_limit:
|
|
375
|
+
return False
|
|
376
|
+
|
|
377
|
+
self.allocated[category] += amount
|
|
378
|
+
return True
|
|
379
|
+
|
|
380
|
+
def remaining(self) -> int:
|
|
381
|
+
"""Get remaining unallocated budget."""
|
|
382
|
+
current = sum(self.allocated.values())
|
|
383
|
+
return self.reservation_limit - current
|
|
384
|
+
|
|
385
|
+
def get_usage(self) -> Dict[str, object]:
|
|
386
|
+
"""
|
|
387
|
+
Get current usage breakdown.
|
|
388
|
+
|
|
389
|
+
Use when: logging or displaying context budget state for
|
|
390
|
+
monitoring dashboards or debug output.
|
|
391
|
+
"""
|
|
392
|
+
total = sum(self.allocated.values())
|
|
393
|
+
return {
|
|
394
|
+
"total_used": total,
|
|
395
|
+
"total_limit": self.total_limit,
|
|
396
|
+
"remaining": self.remaining(),
|
|
397
|
+
"by_category": dict(self.allocated),
|
|
398
|
+
"utilization_ratio": total / self.total_limit,
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
def should_optimize(
|
|
402
|
+
self, current_usage: int, metrics: Optional[Dict[str, float]] = None
|
|
403
|
+
) -> Tuple[bool, List[Tuple[str, object]]]:
|
|
404
|
+
"""
|
|
405
|
+
Determine if optimization should trigger.
|
|
406
|
+
|
|
407
|
+
Use when: called at the end of each agent loop iteration to
|
|
408
|
+
decide whether to apply compaction, masking, or both before
|
|
409
|
+
the next model call.
|
|
410
|
+
|
|
411
|
+
Returns (should_optimize, list_of_reasons).
|
|
412
|
+
"""
|
|
413
|
+
reasons: List[Tuple[str, object]] = []
|
|
414
|
+
|
|
415
|
+
# Check utilization
|
|
416
|
+
utilization = current_usage / self.total_limit
|
|
417
|
+
if utilization > 0.8:
|
|
418
|
+
reasons.append(("high_utilization", utilization))
|
|
419
|
+
|
|
420
|
+
# Check degradation metrics if provided
|
|
421
|
+
if metrics:
|
|
422
|
+
if metrics.get("attention_degradation", 0) > 0.3:
|
|
423
|
+
reasons.append(("attention_degradation", True))
|
|
424
|
+
if metrics.get("quality_score", 1.0) < 0.8:
|
|
425
|
+
reasons.append(("quality_degradation", True))
|
|
426
|
+
|
|
427
|
+
return len(reasons) > 0, reasons
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
# ---------------------------------------------------------------------------
|
|
431
|
+
# Cache optimization
|
|
432
|
+
# ---------------------------------------------------------------------------
|
|
433
|
+
|
|
434
|
+
def design_stable_prompt(template: str, dynamic_values: Optional[Dict] = None) -> str:
|
|
435
|
+
"""
|
|
436
|
+
Stabilize a prompt template for maximum KV-cache hit rate.
|
|
437
|
+
|
|
438
|
+
Use when: constructing system prompts or few-shot prefixes that will
|
|
439
|
+
be reused across many requests. Replaces dynamic content (timestamps,
|
|
440
|
+
session IDs, counters) with stable placeholders so the prefix hash
|
|
441
|
+
remains constant.
|
|
442
|
+
"""
|
|
443
|
+
result = template
|
|
444
|
+
|
|
445
|
+
# Replace timestamps
|
|
446
|
+
date_pattern = r'\d{4}-\d{2}-\d{2}'
|
|
447
|
+
result = re.sub(date_pattern, '[DATE_STABLE]', result)
|
|
448
|
+
|
|
449
|
+
# Replace session IDs
|
|
450
|
+
session_pattern = r'Session \d+'
|
|
451
|
+
result = re.sub(session_pattern, 'Session [STABLE]', result)
|
|
452
|
+
|
|
453
|
+
# Replace counters
|
|
454
|
+
counter_pattern = r'\d+/\d+'
|
|
455
|
+
result = re.sub(counter_pattern, '[COUNTER_STABLE]', result)
|
|
456
|
+
|
|
457
|
+
return result
|
|
458
|
+
|
|
459
|
+
|
|
460
|
+
def calculate_cache_metrics(
|
|
461
|
+
requests: List[Dict], cache: Dict[str, Dict]
|
|
462
|
+
) -> Dict[str, object]:
|
|
463
|
+
"""
|
|
464
|
+
Calculate KV-cache hit metrics for a request sequence.
|
|
465
|
+
|
|
466
|
+
Use when: evaluating whether prompt restructuring improved cache
|
|
467
|
+
utilization. Feed in the request log and current cache state to
|
|
468
|
+
get hit/miss rates and actionable recommendations.
|
|
469
|
+
"""
|
|
470
|
+
hits = 0
|
|
471
|
+
misses = 0
|
|
472
|
+
|
|
473
|
+
for req in requests:
|
|
474
|
+
prefix = req.get("prefix_hash", "")
|
|
475
|
+
token_count = req.get("token_count", 0)
|
|
476
|
+
|
|
477
|
+
if prefix in cache:
|
|
478
|
+
hits += token_count * cache[prefix].get("hit_ratio", 0)
|
|
479
|
+
else:
|
|
480
|
+
misses += token_count
|
|
481
|
+
|
|
482
|
+
total = hits + misses
|
|
483
|
+
|
|
484
|
+
return {
|
|
485
|
+
"hit_rate": hits / total if total > 0 else 0,
|
|
486
|
+
"cache_hits": hits,
|
|
487
|
+
"cache_misses": misses,
|
|
488
|
+
"recommendations": generate_cache_recommendations(hits, misses),
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
def generate_cache_recommendations(hits: int, misses: int) -> List[str]:
|
|
493
|
+
"""
|
|
494
|
+
Generate recommendations for cache optimization based on hit/miss ratio.
|
|
495
|
+
|
|
496
|
+
Use when: cache metrics indicate sub-optimal hit rates and concrete
|
|
497
|
+
next steps are needed.
|
|
498
|
+
"""
|
|
499
|
+
recommendations: List[str] = []
|
|
500
|
+
|
|
501
|
+
hit_rate = hits / (hits + misses) if (hits + misses) > 0 else 0
|
|
502
|
+
|
|
503
|
+
if hit_rate < 0.5:
|
|
504
|
+
recommendations.append("Consider stabilizing system prompts")
|
|
505
|
+
recommendations.append("Reduce variation in request prefixes")
|
|
506
|
+
|
|
507
|
+
if hit_rate < 0.8:
|
|
508
|
+
recommendations.append("Group similar requests together")
|
|
509
|
+
recommendations.append("Use consistent formatting across requests")
|
|
510
|
+
|
|
511
|
+
return recommendations
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
# ---------------------------------------------------------------------------
|
|
515
|
+
# Demo / smoke test
|
|
516
|
+
# ---------------------------------------------------------------------------
|
|
517
|
+
|
|
518
|
+
if __name__ == "__main__":
|
|
519
|
+
print("=== Context Optimization Utilities — Demo ===\n")
|
|
520
|
+
|
|
521
|
+
# 1. Token estimation
|
|
522
|
+
sample_text = "The quick brown fox jumps over the lazy dog. " * 20
|
|
523
|
+
tokens = estimate_token_count(sample_text)
|
|
524
|
+
print(f"1. Token estimate for {len(sample_text)}-char text: ~{tokens} tokens\n")
|
|
525
|
+
|
|
526
|
+
# 2. Observation masking
|
|
527
|
+
store = ObservationStore(max_size=100)
|
|
528
|
+
long_output = (
|
|
529
|
+
"Result: 42 items found\n"
|
|
530
|
+
"Total processing time: 3.2s\n"
|
|
531
|
+
"Details:\n" + "\n".join([f" Item {i}: value={i*10}" for i in range(20)])
|
|
532
|
+
)
|
|
533
|
+
masked, ref_id = store.mask(long_output, max_length=100)
|
|
534
|
+
print(f"2. Masked observation:\n {masked}")
|
|
535
|
+
print(f" Ref ID: {ref_id}")
|
|
536
|
+
retrieved = store.retrieve(ref_id)
|
|
537
|
+
print(f" Retrievable: {retrieved is not None}\n")
|
|
538
|
+
|
|
539
|
+
# 3. Context budget
|
|
540
|
+
budget = ContextBudget(total_limit=128_000)
|
|
541
|
+
budget.allocate("system_prompt", 1500)
|
|
542
|
+
budget.allocate("tool_definitions", 3000)
|
|
543
|
+
budget.allocate("message_history", 95_000)
|
|
544
|
+
usage = budget.get_usage()
|
|
545
|
+
print(f"3. Budget utilization: {usage['utilization_ratio']:.1%}")
|
|
546
|
+
should_opt, reasons = budget.should_optimize(
|
|
547
|
+
current_usage=int(128_000 * 0.85)
|
|
548
|
+
)
|
|
549
|
+
print(f" Should optimize: {should_opt}, reasons: {reasons}\n")
|
|
550
|
+
|
|
551
|
+
# 4. Cache-stable prompt
|
|
552
|
+
raw_prompt = "Session 42 started on 2025-12-20. Progress: 3/10 tasks."
|
|
553
|
+
stable = design_stable_prompt(raw_prompt)
|
|
554
|
+
print(f"4. Original prompt: {raw_prompt}")
|
|
555
|
+
print(f" Stabilized: {stable}\n")
|
|
556
|
+
|
|
557
|
+
# 5. Summarization
|
|
558
|
+
tool_out = "count: 150\nstatus: success\nFound 3 errors in module A."
|
|
559
|
+
summary = summarize_content(tool_out, "tool_output", max_length=200)
|
|
560
|
+
print(f"5. Tool output summary: {summary}\n")
|
|
561
|
+
|
|
562
|
+
print("=== Demo complete ===")
|