@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,613 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Multi-Agent Coordination Utilities
|
|
3
|
+
|
|
4
|
+
Provides reusable building blocks for multi-agent coordination patterns:
|
|
5
|
+
supervisor/orchestrator, peer-to-peer handoffs, consensus mechanisms,
|
|
6
|
+
and failure handling with circuit breakers.
|
|
7
|
+
|
|
8
|
+
Use when: building multi-agent systems that need structured communication,
|
|
9
|
+
task delegation, consensus voting, or fault-tolerant agent coordination.
|
|
10
|
+
|
|
11
|
+
Designed for composability — import individual classes or use the
|
|
12
|
+
``if __name__ == "__main__"`` demo to see all patterns in action.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from typing import Dict, List, Any, Optional
|
|
16
|
+
from dataclasses import dataclass, field
|
|
17
|
+
from enum import Enum
|
|
18
|
+
import time
|
|
19
|
+
import uuid
|
|
20
|
+
|
|
21
|
+
__all__ = [
|
|
22
|
+
"MessageType",
|
|
23
|
+
"AgentMessage",
|
|
24
|
+
"AgentCommunication",
|
|
25
|
+
"SupervisorAgent",
|
|
26
|
+
"HandoffProtocol",
|
|
27
|
+
"ConsensusManager",
|
|
28
|
+
"AgentFailureHandler",
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class MessageType(Enum):
|
|
33
|
+
"""Types of messages exchanged between agents."""
|
|
34
|
+
|
|
35
|
+
REQUEST = "request"
|
|
36
|
+
RESPONSE = "response"
|
|
37
|
+
HANDOVER = "handover"
|
|
38
|
+
FEEDBACK = "feedback"
|
|
39
|
+
ALERT = "alert"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@dataclass
|
|
43
|
+
class AgentMessage:
|
|
44
|
+
"""Message exchanged between agents.
|
|
45
|
+
|
|
46
|
+
Use when: agents need a structured envelope for inter-agent communication
|
|
47
|
+
that carries sender/receiver identity, type, priority, and payload.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
sender: str
|
|
51
|
+
receiver: str
|
|
52
|
+
message_type: MessageType
|
|
53
|
+
content: Dict[str, Any]
|
|
54
|
+
timestamp: float = field(default_factory=time.time)
|
|
55
|
+
message_id: str = field(default_factory=lambda: str(uuid.uuid4()))
|
|
56
|
+
requires_response: bool = False
|
|
57
|
+
priority: int = 0 # 0 = normal, higher = more urgent
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class AgentCommunication:
|
|
61
|
+
"""Communication channel for multi-agent systems.
|
|
62
|
+
|
|
63
|
+
Use when: multiple agents need an in-process message bus for sending,
|
|
64
|
+
receiving, and broadcasting messages with history tracking.
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
def __init__(self) -> None:
|
|
68
|
+
self.inbox: Dict[str, List[AgentMessage]] = {}
|
|
69
|
+
self.outbox: List[AgentMessage] = []
|
|
70
|
+
self.message_history: List[AgentMessage] = []
|
|
71
|
+
|
|
72
|
+
def send(self, message: AgentMessage) -> None:
|
|
73
|
+
"""Send a message to an agent."""
|
|
74
|
+
if message.receiver not in self.inbox:
|
|
75
|
+
self.inbox[message.receiver] = []
|
|
76
|
+
self.inbox[message.receiver].append(message)
|
|
77
|
+
self.outbox.append(message)
|
|
78
|
+
self.message_history.append(message)
|
|
79
|
+
|
|
80
|
+
def receive(self, agent_id: str) -> List[AgentMessage]:
|
|
81
|
+
"""Receive all messages for an agent, clearing its inbox."""
|
|
82
|
+
messages = self.inbox.get(agent_id, [])
|
|
83
|
+
self.inbox[agent_id] = []
|
|
84
|
+
return messages
|
|
85
|
+
|
|
86
|
+
def broadcast(
|
|
87
|
+
self,
|
|
88
|
+
sender: str,
|
|
89
|
+
message_type: MessageType,
|
|
90
|
+
content: Dict[str, Any],
|
|
91
|
+
receivers: List[str],
|
|
92
|
+
) -> None:
|
|
93
|
+
"""Broadcast a message to multiple agents."""
|
|
94
|
+
for receiver in receivers:
|
|
95
|
+
self.send(
|
|
96
|
+
AgentMessage(
|
|
97
|
+
sender=sender,
|
|
98
|
+
receiver=receiver,
|
|
99
|
+
message_type=message_type,
|
|
100
|
+
content=content,
|
|
101
|
+
)
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
# ---------------------------------------------------------------------------
|
|
106
|
+
# Supervisor Pattern
|
|
107
|
+
# ---------------------------------------------------------------------------
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class SupervisorAgent:
|
|
111
|
+
"""Central supervisor agent that coordinates worker agents.
|
|
112
|
+
|
|
113
|
+
Use when: tasks have clear decomposition and a single coordinator should
|
|
114
|
+
delegate subtasks, track worker status, and aggregate results.
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
def __init__(self, name: str, communication: AgentCommunication) -> None:
|
|
118
|
+
self.name = name
|
|
119
|
+
self.communication = communication
|
|
120
|
+
self.workers: Dict[str, Dict[str, Any]] = {}
|
|
121
|
+
self.task_queue: List[Dict[str, Any]] = []
|
|
122
|
+
self.completed_tasks: List[Dict[str, Any]] = []
|
|
123
|
+
self.current_state: Dict[str, Any] = {}
|
|
124
|
+
|
|
125
|
+
def register_worker(self, worker_id: str, capabilities: List[str]) -> None:
|
|
126
|
+
"""Register a worker agent with the supervisor."""
|
|
127
|
+
self.workers[worker_id] = {
|
|
128
|
+
"capabilities": capabilities,
|
|
129
|
+
"status": "available",
|
|
130
|
+
"current_task": None,
|
|
131
|
+
"metrics": {"tasks_completed": 0, "avg_response_time": 0.0},
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
def decompose_task(self, task: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
135
|
+
"""Decompose a task into subtasks.
|
|
136
|
+
|
|
137
|
+
Use when: a high-level task needs to be broken into assignable units.
|
|
138
|
+
In production, replace the rule-based logic with LLM-driven planning.
|
|
139
|
+
"""
|
|
140
|
+
subtasks: List[Dict[str, Any]] = []
|
|
141
|
+
task_type = task.get("type", "general")
|
|
142
|
+
|
|
143
|
+
if task_type == "research":
|
|
144
|
+
subtasks = [
|
|
145
|
+
{"type": "search", "description": "Gather information"},
|
|
146
|
+
{"type": "analyze", "description": "Analyze findings"},
|
|
147
|
+
{"type": "synthesize", "description": "Synthesize results"},
|
|
148
|
+
]
|
|
149
|
+
elif task_type == "create":
|
|
150
|
+
subtasks = [
|
|
151
|
+
{"type": "plan", "description": "Create plan"},
|
|
152
|
+
{"type": "draft", "description": "Draft content"},
|
|
153
|
+
{"type": "review", "description": "Review and refine"},
|
|
154
|
+
]
|
|
155
|
+
else:
|
|
156
|
+
subtasks = [
|
|
157
|
+
{
|
|
158
|
+
"type": "execute",
|
|
159
|
+
"description": task.get("description", "Execute task"),
|
|
160
|
+
}
|
|
161
|
+
]
|
|
162
|
+
|
|
163
|
+
for subtask in subtasks:
|
|
164
|
+
subtask["parent_task"] = task.get("id")
|
|
165
|
+
subtask["priority"] = task.get("priority", 0)
|
|
166
|
+
|
|
167
|
+
return subtasks
|
|
168
|
+
|
|
169
|
+
def assign_task(self, subtask: Dict[str, Any], worker_id: str) -> None:
|
|
170
|
+
"""Assign a subtask to a worker agent."""
|
|
171
|
+
if worker_id not in self.workers:
|
|
172
|
+
raise ValueError(f"Unknown worker: {worker_id}")
|
|
173
|
+
|
|
174
|
+
self.workers[worker_id]["status"] = "busy"
|
|
175
|
+
self.workers[worker_id]["current_task"] = subtask.get("id")
|
|
176
|
+
|
|
177
|
+
self._send(
|
|
178
|
+
AgentMessage(
|
|
179
|
+
sender=self.name,
|
|
180
|
+
receiver=worker_id,
|
|
181
|
+
message_type=MessageType.REQUEST,
|
|
182
|
+
content={"action": "execute_task", "task": subtask},
|
|
183
|
+
requires_response=True,
|
|
184
|
+
priority=subtask.get("priority", 0),
|
|
185
|
+
)
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
def select_worker(self, subtask: Dict[str, Any]) -> str:
|
|
189
|
+
"""Select the best available worker for a subtask.
|
|
190
|
+
|
|
191
|
+
Use when: the supervisor needs capability-aware routing with
|
|
192
|
+
load-balancing (fewest completed tasks chosen first).
|
|
193
|
+
"""
|
|
194
|
+
required_capability = subtask.get("type", "general")
|
|
195
|
+
|
|
196
|
+
candidates = [
|
|
197
|
+
wid
|
|
198
|
+
for wid, info in self.workers.items()
|
|
199
|
+
if info["status"] == "available"
|
|
200
|
+
and required_capability in info["capabilities"]
|
|
201
|
+
]
|
|
202
|
+
|
|
203
|
+
if not candidates:
|
|
204
|
+
candidates = [
|
|
205
|
+
wid
|
|
206
|
+
for wid, info in self.workers.items()
|
|
207
|
+
if info["status"] == "available"
|
|
208
|
+
]
|
|
209
|
+
|
|
210
|
+
if not candidates:
|
|
211
|
+
raise ValueError("No available workers")
|
|
212
|
+
|
|
213
|
+
return min(
|
|
214
|
+
candidates,
|
|
215
|
+
key=lambda w: self.workers[w]["metrics"]["tasks_completed"],
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
def aggregate_results(
|
|
219
|
+
self, subtask_results: List[Dict[str, Any]]
|
|
220
|
+
) -> Dict[str, Any]:
|
|
221
|
+
"""Aggregate results from completed subtasks."""
|
|
222
|
+
summaries = [
|
|
223
|
+
r.get("summary", "")
|
|
224
|
+
for r in subtask_results
|
|
225
|
+
if r.get("success")
|
|
226
|
+
]
|
|
227
|
+
successful = sum(
|
|
228
|
+
1 for r in subtask_results if r.get("success", False)
|
|
229
|
+
)
|
|
230
|
+
quality = successful / len(subtask_results) if subtask_results else 0.0
|
|
231
|
+
|
|
232
|
+
return {
|
|
233
|
+
"results": subtask_results,
|
|
234
|
+
"summary": " | ".join(summaries),
|
|
235
|
+
"quality_score": quality,
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
def run_workflow(self, task: Dict[str, Any]) -> Dict[str, Any]:
|
|
239
|
+
"""Execute a complete workflow with supervision.
|
|
240
|
+
|
|
241
|
+
Use when: running an end-to-end supervised pipeline that decomposes
|
|
242
|
+
a task, assigns subtasks, collects results, and aggregates them.
|
|
243
|
+
|
|
244
|
+
Note: This is a synchronous simulation. Workers do not execute
|
|
245
|
+
asynchronously — each subtask is simulated inline. In production,
|
|
246
|
+
replace ``_simulate_worker_response`` with actual async worker
|
|
247
|
+
execution and message passing.
|
|
248
|
+
"""
|
|
249
|
+
subtasks = self.decompose_task(task)
|
|
250
|
+
|
|
251
|
+
results: List[Dict[str, Any]] = []
|
|
252
|
+
for subtask in subtasks:
|
|
253
|
+
worker = self.select_worker(subtask)
|
|
254
|
+
self.assign_task(subtask, worker)
|
|
255
|
+
|
|
256
|
+
# Simulate worker executing and responding
|
|
257
|
+
response = self._simulate_worker_response(worker, subtask)
|
|
258
|
+
self.communication.send(
|
|
259
|
+
AgentMessage(
|
|
260
|
+
sender=worker,
|
|
261
|
+
receiver=self.name,
|
|
262
|
+
message_type=MessageType.RESPONSE,
|
|
263
|
+
content=response,
|
|
264
|
+
)
|
|
265
|
+
)
|
|
266
|
+
self.workers[worker]["status"] = "available"
|
|
267
|
+
self.workers[worker]["metrics"]["tasks_completed"] += 1
|
|
268
|
+
|
|
269
|
+
messages = self.communication.receive(self.name)
|
|
270
|
+
for msg in messages:
|
|
271
|
+
if msg.message_type == MessageType.RESPONSE:
|
|
272
|
+
results.append(msg.content)
|
|
273
|
+
|
|
274
|
+
final_result = self.aggregate_results(results)
|
|
275
|
+
|
|
276
|
+
return {
|
|
277
|
+
"task": task,
|
|
278
|
+
"subtask_results": results,
|
|
279
|
+
"final_result": final_result,
|
|
280
|
+
"success": final_result["quality_score"] >= 0.8,
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
def _simulate_worker_response(
|
|
284
|
+
self, worker_id: str, subtask: Dict[str, Any]
|
|
285
|
+
) -> Dict[str, Any]:
|
|
286
|
+
"""Simulate a worker completing a subtask.
|
|
287
|
+
|
|
288
|
+
In production, replace with actual agent execution that sends
|
|
289
|
+
the subtask to a worker process and awaits a real response.
|
|
290
|
+
"""
|
|
291
|
+
return {
|
|
292
|
+
"success": True,
|
|
293
|
+
"summary": f"{worker_id} completed: {subtask.get('description', subtask.get('type', 'task'))}",
|
|
294
|
+
"worker": worker_id,
|
|
295
|
+
"subtask_type": subtask.get("type"),
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
def _send(self, message: AgentMessage) -> None:
|
|
299
|
+
"""Send message through the communication channel."""
|
|
300
|
+
self.communication.send(message)
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
# ---------------------------------------------------------------------------
|
|
304
|
+
# Handoff Protocol
|
|
305
|
+
# ---------------------------------------------------------------------------
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
class HandoffProtocol:
|
|
309
|
+
"""Protocol for agent-to-agent handoffs.
|
|
310
|
+
|
|
311
|
+
Use when: implementing peer-to-peer or swarm patterns where agents
|
|
312
|
+
transfer control and task state to one another.
|
|
313
|
+
"""
|
|
314
|
+
|
|
315
|
+
def __init__(self, communication: AgentCommunication) -> None:
|
|
316
|
+
self.communication = communication
|
|
317
|
+
|
|
318
|
+
def create_handoff(
|
|
319
|
+
self,
|
|
320
|
+
from_agent: str,
|
|
321
|
+
to_agent: str,
|
|
322
|
+
context: Dict[str, Any],
|
|
323
|
+
reason: str,
|
|
324
|
+
) -> AgentMessage:
|
|
325
|
+
"""Create a handoff message with transferred context."""
|
|
326
|
+
return AgentMessage(
|
|
327
|
+
sender=from_agent,
|
|
328
|
+
receiver=to_agent,
|
|
329
|
+
message_type=MessageType.HANDOVER,
|
|
330
|
+
content={
|
|
331
|
+
"handoff_reason": reason,
|
|
332
|
+
"transferred_context": context,
|
|
333
|
+
"handoff_timestamp": time.time(),
|
|
334
|
+
},
|
|
335
|
+
priority=1,
|
|
336
|
+
)
|
|
337
|
+
|
|
338
|
+
def accept_handoff(self, agent_id: str) -> Optional[AgentMessage]:
|
|
339
|
+
"""Accept the first pending handoff for an agent, if any."""
|
|
340
|
+
messages = self.communication.receive(agent_id)
|
|
341
|
+
|
|
342
|
+
for msg in messages:
|
|
343
|
+
if msg.message_type == MessageType.HANDOVER:
|
|
344
|
+
return msg
|
|
345
|
+
|
|
346
|
+
return None
|
|
347
|
+
|
|
348
|
+
def transfer_with_state(
|
|
349
|
+
self,
|
|
350
|
+
from_agent: str,
|
|
351
|
+
to_agent: str,
|
|
352
|
+
state: Dict[str, Any],
|
|
353
|
+
task: Dict[str, Any],
|
|
354
|
+
) -> bool:
|
|
355
|
+
"""Transfer task state from one agent to another.
|
|
356
|
+
|
|
357
|
+
Use when: a handoff must carry full task state and progress so the
|
|
358
|
+
receiving agent can resume without re-deriving context.
|
|
359
|
+
|
|
360
|
+
Returns True if the receiving agent acknowledged the handoff.
|
|
361
|
+
"""
|
|
362
|
+
handoff = self.create_handoff(
|
|
363
|
+
from_agent=from_agent,
|
|
364
|
+
to_agent=to_agent,
|
|
365
|
+
context={
|
|
366
|
+
"task_state": state,
|
|
367
|
+
"task_details": task,
|
|
368
|
+
"progress": state.get("progress", 0),
|
|
369
|
+
},
|
|
370
|
+
reason="task_transfer",
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
self.communication.send(handoff)
|
|
374
|
+
|
|
375
|
+
# In production, replace sleep with async await + timeout
|
|
376
|
+
time.sleep(0.1)
|
|
377
|
+
ack = self.communication.receive(from_agent)
|
|
378
|
+
|
|
379
|
+
return any(
|
|
380
|
+
m.message_type == MessageType.RESPONSE
|
|
381
|
+
and m.content.get("status") == "handoff_received"
|
|
382
|
+
for m in ack
|
|
383
|
+
)
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
# ---------------------------------------------------------------------------
|
|
387
|
+
# Consensus Mechanism
|
|
388
|
+
# ---------------------------------------------------------------------------
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
class ConsensusManager:
|
|
392
|
+
"""Manager for multi-agent consensus building.
|
|
393
|
+
|
|
394
|
+
Use when: multiple agents must vote on a decision and the system needs
|
|
395
|
+
weighted consensus that accounts for confidence and expertise rather
|
|
396
|
+
than naive majority voting.
|
|
397
|
+
"""
|
|
398
|
+
|
|
399
|
+
def __init__(self) -> None:
|
|
400
|
+
self.votes: Dict[str, List[Dict[str, Any]]] = {}
|
|
401
|
+
self.debates: Dict[str, List[Dict[str, Any]]] = {}
|
|
402
|
+
|
|
403
|
+
def initiate_vote(
|
|
404
|
+
self, topic_id: str, agents: List[str], options: List[str]
|
|
405
|
+
) -> None:
|
|
406
|
+
"""Initiate a voting round on a topic."""
|
|
407
|
+
self.votes[topic_id] = [
|
|
408
|
+
{
|
|
409
|
+
"agent": agent,
|
|
410
|
+
"topic": topic_id,
|
|
411
|
+
"options": options,
|
|
412
|
+
"status": "pending",
|
|
413
|
+
}
|
|
414
|
+
for agent in agents
|
|
415
|
+
]
|
|
416
|
+
|
|
417
|
+
def submit_vote(
|
|
418
|
+
self,
|
|
419
|
+
topic_id: str,
|
|
420
|
+
agent_id: str,
|
|
421
|
+
selection: str,
|
|
422
|
+
confidence: float,
|
|
423
|
+
) -> None:
|
|
424
|
+
"""Submit a vote for a topic with a confidence weight."""
|
|
425
|
+
if topic_id not in self.votes:
|
|
426
|
+
raise ValueError(f"Unknown topic: {topic_id}")
|
|
427
|
+
|
|
428
|
+
for vote in self.votes[topic_id]:
|
|
429
|
+
if vote["agent"] == agent_id:
|
|
430
|
+
vote["status"] = "cast"
|
|
431
|
+
vote["selection"] = selection
|
|
432
|
+
vote["confidence"] = confidence
|
|
433
|
+
break
|
|
434
|
+
|
|
435
|
+
def calculate_weighted_consensus(self, topic_id: str) -> Dict[str, Any]:
|
|
436
|
+
"""Calculate weighted consensus from cast votes.
|
|
437
|
+
|
|
438
|
+
Use when: votes are in and the system needs to determine a winner
|
|
439
|
+
weighted by each agent's confidence rather than simple majority.
|
|
440
|
+
Weight = confidence * expertise_factor.
|
|
441
|
+
"""
|
|
442
|
+
if topic_id not in self.votes:
|
|
443
|
+
raise ValueError(f"Unknown topic: {topic_id}")
|
|
444
|
+
|
|
445
|
+
votes = [
|
|
446
|
+
v for v in self.votes[topic_id] if v.get("status") == "cast"
|
|
447
|
+
]
|
|
448
|
+
|
|
449
|
+
if not votes:
|
|
450
|
+
return {"status": "no_votes", "result": None}
|
|
451
|
+
|
|
452
|
+
# Group by selection
|
|
453
|
+
selections: Dict[str, List[Dict[str, Any]]] = {}
|
|
454
|
+
for vote in votes:
|
|
455
|
+
selection = vote["selection"]
|
|
456
|
+
if selection not in selections:
|
|
457
|
+
selections[selection] = []
|
|
458
|
+
selections[selection].append(vote)
|
|
459
|
+
|
|
460
|
+
# Calculate weighted score for each selection
|
|
461
|
+
results: Dict[str, Dict[str, Any]] = {}
|
|
462
|
+
for selection, selection_votes in selections.items():
|
|
463
|
+
weighted_sum = sum(v["confidence"] for v in selection_votes)
|
|
464
|
+
avg_confidence = (
|
|
465
|
+
weighted_sum / len(selection_votes) if selection_votes else 0.0
|
|
466
|
+
)
|
|
467
|
+
results[selection] = {
|
|
468
|
+
"weighted_score": weighted_sum,
|
|
469
|
+
"avg_confidence": avg_confidence,
|
|
470
|
+
"vote_count": len(selection_votes),
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
winner = max(results.keys(), key=lambda s: results[s]["weighted_score"])
|
|
474
|
+
|
|
475
|
+
return {
|
|
476
|
+
"status": "complete",
|
|
477
|
+
"result": winner,
|
|
478
|
+
"details": results,
|
|
479
|
+
"consensus_strength": (
|
|
480
|
+
results[winner]["weighted_score"] / len(votes) if votes else 0.0
|
|
481
|
+
),
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
# ---------------------------------------------------------------------------
|
|
486
|
+
# Failure Handling
|
|
487
|
+
# ---------------------------------------------------------------------------
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
class AgentFailureHandler:
|
|
491
|
+
"""Handler for agent failures in multi-agent systems.
|
|
492
|
+
|
|
493
|
+
Use when: agents may fail and the system needs retry logic with
|
|
494
|
+
exponential backoff, circuit breakers, and automatic rerouting to
|
|
495
|
+
backup agents.
|
|
496
|
+
"""
|
|
497
|
+
|
|
498
|
+
def __init__(
|
|
499
|
+
self,
|
|
500
|
+
communication: AgentCommunication,
|
|
501
|
+
max_retries: int = 3,
|
|
502
|
+
) -> None:
|
|
503
|
+
self.communication = communication
|
|
504
|
+
self.max_retries = max_retries
|
|
505
|
+
self.failure_counts: Dict[str, int] = {}
|
|
506
|
+
self.circuit_breakers: Dict[str, float] = {} # agent -> unlock time
|
|
507
|
+
|
|
508
|
+
def handle_failure(
|
|
509
|
+
self, agent_id: str, task_id: str, error: str
|
|
510
|
+
) -> Dict[str, Any]:
|
|
511
|
+
"""Handle a failure from an agent.
|
|
512
|
+
|
|
513
|
+
Use when: an agent reports an error and the system must decide
|
|
514
|
+
whether to retry (with backoff) or reroute to a backup agent.
|
|
515
|
+
"""
|
|
516
|
+
self.failure_counts[agent_id] = (
|
|
517
|
+
self.failure_counts.get(agent_id, 0) + 1
|
|
518
|
+
)
|
|
519
|
+
|
|
520
|
+
if self.failure_counts[agent_id] >= self.max_retries:
|
|
521
|
+
self._activate_circuit_breaker(agent_id)
|
|
522
|
+
return {
|
|
523
|
+
"action": "reroute",
|
|
524
|
+
"reason": "circuit_breaker_activated",
|
|
525
|
+
"alternative": self._find_alternative_agent(agent_id),
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
return {
|
|
529
|
+
"action": "retry",
|
|
530
|
+
"reason": error,
|
|
531
|
+
"retry_count": self.failure_counts[agent_id],
|
|
532
|
+
"delay": min(2 ** self.failure_counts[agent_id], 60),
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
def _activate_circuit_breaker(self, agent_id: str) -> None:
|
|
536
|
+
"""Temporarily disable an agent (1-minute cooldown)."""
|
|
537
|
+
self.circuit_breakers[agent_id] = time.time() + 60
|
|
538
|
+
|
|
539
|
+
def _find_alternative_agent(self, failed_agent: str) -> str:
|
|
540
|
+
"""Find an alternative agent to handle the task.
|
|
541
|
+
|
|
542
|
+
In production, check agent capabilities and availability.
|
|
543
|
+
"""
|
|
544
|
+
return "default_backup_agent"
|
|
545
|
+
|
|
546
|
+
def is_available(self, agent_id: str) -> bool:
|
|
547
|
+
"""Check if an agent is available (circuit breaker not active)."""
|
|
548
|
+
if agent_id in self.circuit_breakers:
|
|
549
|
+
if time.time() < self.circuit_breakers[agent_id]:
|
|
550
|
+
return False
|
|
551
|
+
del self.circuit_breakers[agent_id]
|
|
552
|
+
self.failure_counts[agent_id] = 0
|
|
553
|
+
return True
|
|
554
|
+
|
|
555
|
+
def record_success(self, agent_id: str) -> None:
|
|
556
|
+
"""Record a successful task completion, resetting failure count."""
|
|
557
|
+
self.failure_counts[agent_id] = 0
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
# ---------------------------------------------------------------------------
|
|
561
|
+
# Demo / CLI entry point
|
|
562
|
+
# ---------------------------------------------------------------------------
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
if __name__ == "__main__":
|
|
566
|
+
print("=== Multi-Agent Coordination Demo ===\n")
|
|
567
|
+
|
|
568
|
+
# 1. Communication channel
|
|
569
|
+
comm = AgentCommunication()
|
|
570
|
+
print("1. Created communication channel")
|
|
571
|
+
|
|
572
|
+
# 2. Supervisor pattern
|
|
573
|
+
supervisor = SupervisorAgent("supervisor", comm)
|
|
574
|
+
supervisor.register_worker("researcher", ["search", "analyze"])
|
|
575
|
+
supervisor.register_worker("writer", ["synthesize", "draft"])
|
|
576
|
+
print("2. Registered supervisor with 2 workers: researcher, writer")
|
|
577
|
+
|
|
578
|
+
# 3. Handoff protocol
|
|
579
|
+
protocol = HandoffProtocol(comm)
|
|
580
|
+
handoff_msg = protocol.create_handoff(
|
|
581
|
+
from_agent="researcher",
|
|
582
|
+
to_agent="writer",
|
|
583
|
+
context={"findings": ["item1", "item2"]},
|
|
584
|
+
reason="research_complete",
|
|
585
|
+
)
|
|
586
|
+
comm.send(handoff_msg)
|
|
587
|
+
received = protocol.accept_handoff("writer")
|
|
588
|
+
print(
|
|
589
|
+
f"3. Handoff from researcher -> writer: "
|
|
590
|
+
f"{'accepted' if received else 'none pending'}"
|
|
591
|
+
)
|
|
592
|
+
|
|
593
|
+
# 4. Consensus mechanism
|
|
594
|
+
consensus = ConsensusManager()
|
|
595
|
+
consensus.initiate_vote("best_approach", ["agent_a", "agent_b", "agent_c"], ["A", "B"])
|
|
596
|
+
consensus.submit_vote("best_approach", "agent_a", "A", confidence=0.9)
|
|
597
|
+
consensus.submit_vote("best_approach", "agent_b", "B", confidence=0.6)
|
|
598
|
+
consensus.submit_vote("best_approach", "agent_c", "A", confidence=0.8)
|
|
599
|
+
result = consensus.calculate_weighted_consensus("best_approach")
|
|
600
|
+
print(
|
|
601
|
+
f"4. Consensus result: {result['result']} "
|
|
602
|
+
f"(strength: {result['consensus_strength']:.2f})"
|
|
603
|
+
)
|
|
604
|
+
|
|
605
|
+
# 5. Failure handling
|
|
606
|
+
handler = AgentFailureHandler(comm, max_retries=3)
|
|
607
|
+
action1 = handler.handle_failure("flaky_agent", "task_1", "timeout")
|
|
608
|
+
action2 = handler.handle_failure("flaky_agent", "task_1", "timeout")
|
|
609
|
+
action3 = handler.handle_failure("flaky_agent", "task_1", "timeout")
|
|
610
|
+
print(f"5. After 3 failures: action={action3['action']}")
|
|
611
|
+
print(f" Agent available? {handler.is_available('flaky_agent')}")
|
|
612
|
+
|
|
613
|
+
print("\n=== Demo Complete ===")
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: normalize
|
|
3
|
+
description: Audits and realigns UI to match design system standards, spacing, tokens, and patterns. Use when the user mentions consistency, design drift, mismatched styles, tokens, or wants to bring a feature back in line with the system.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
argument-hint: "[feature (page, route, component...)]"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Analyze and redesign the feature to perfectly match our design system standards, aesthetics, and established patterns.
|
|
9
|
+
|
|
10
|
+
## MANDATORY PREPARATION
|
|
11
|
+
|
|
12
|
+
Invoke /frontend-design — it contains design principles, anti-patterns, and the **Context Gathering Protocol**. Follow the protocol before proceeding — if no design context exists yet, you MUST run /teach-impeccable first.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Plan
|
|
17
|
+
|
|
18
|
+
Before making changes, deeply understand the context:
|
|
19
|
+
|
|
20
|
+
1. **Discover the design system**: Search for design system documentation, UI guidelines, component libraries, or style guides (grep for "design system", "ui guide", "style guide", etc.). Study it thoroughly until you understand:
|
|
21
|
+
- Core design principles and aesthetic direction
|
|
22
|
+
- Target audience and personas
|
|
23
|
+
- Component patterns and conventions
|
|
24
|
+
- Design tokens (colors, typography, spacing)
|
|
25
|
+
|
|
26
|
+
**CRITICAL**: If something isn't clear, ask. Don't guess at design system principles.
|
|
27
|
+
|
|
28
|
+
2. **Analyze the current feature**: Assess what works and what doesn't:
|
|
29
|
+
- Where does it deviate from design system patterns?
|
|
30
|
+
- Which inconsistencies are cosmetic vs. functional?
|
|
31
|
+
- What's the root cause—missing tokens, one-off implementations, or conceptual misalignment?
|
|
32
|
+
|
|
33
|
+
3. **Create a normalization plan**: Define specific changes that will align the feature with the design system:
|
|
34
|
+
- Which components can be replaced with design system equivalents?
|
|
35
|
+
- Which styles need to use design tokens instead of hard-coded values?
|
|
36
|
+
- How can UX patterns match established user flows?
|
|
37
|
+
|
|
38
|
+
**IMPORTANT**: Great design is effective design. Prioritize UX consistency and usability over visual polish alone. Think through the best possible experience for your use case and personas first.
|
|
39
|
+
|
|
40
|
+
## Execute
|
|
41
|
+
|
|
42
|
+
Systematically address all inconsistencies across these dimensions:
|
|
43
|
+
|
|
44
|
+
- **Typography**: Use design system fonts, sizes, weights, and line heights. Replace hard-coded values with typographic tokens or classes.
|
|
45
|
+
- **Color & Theme**: Apply design system color tokens. Remove one-off color choices that break the palette.
|
|
46
|
+
- **Spacing & Layout**: Use spacing tokens (margins, padding, gaps). Align with grid systems and layout patterns used elsewhere.
|
|
47
|
+
- **Components**: Replace custom implementations with design system components. Ensure props and variants match established patterns.
|
|
48
|
+
- **Motion & Interaction**: Match animation timing, easing, and interaction patterns to other features.
|
|
49
|
+
- **Responsive Behavior**: Ensure breakpoints and responsive patterns align with design system standards.
|
|
50
|
+
- **Accessibility**: Verify contrast ratios, focus states, ARIA labels match design system requirements.
|
|
51
|
+
- **Progressive Disclosure**: Match information hierarchy and complexity management to established patterns.
|
|
52
|
+
|
|
53
|
+
**NEVER**:
|
|
54
|
+
- Create new one-off components when design system equivalents exist
|
|
55
|
+
- Hard-code values that should use design tokens
|
|
56
|
+
- Introduce new patterns that diverge from the design system
|
|
57
|
+
- Compromise accessibility for visual consistency
|
|
58
|
+
|
|
59
|
+
This is not an exhaustive list—apply judgment to identify all areas needing normalization.
|
|
60
|
+
|
|
61
|
+
## Clean Up
|
|
62
|
+
|
|
63
|
+
After normalization, ensure code quality:
|
|
64
|
+
|
|
65
|
+
- **Consolidate reusable components**: If you created new components that should be shared, move them to the design system or shared UI component path.
|
|
66
|
+
- **Remove orphaned code**: Delete unused implementations, styles, or files made obsolete by normalization.
|
|
67
|
+
- **Verify quality**: Lint, type-check, and test according to repository guidelines. Ensure normalization didn't introduce regressions.
|
|
68
|
+
- **Ensure DRYness**: Look for duplication introduced during refactoring and consolidate.
|
|
69
|
+
|
|
70
|
+
Remember: You are a brilliant frontend designer with impeccable taste, equally strong in UX and UI. Your attention to detail and eye for end-to-end user experience is world class. Execute with precision and thoroughness.
|