@bastani/atomic 0.5.11 → 0.5.12-1
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/components/workflow-picker-panel.tsx +407 -296
- package/src/sdk/providers/claude.ts +50 -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
|
@@ -5,27 +5,42 @@
|
|
|
5
5
|
* so users can see each iteration's progress in real time. The loop
|
|
6
6
|
* terminates when:
|
|
7
7
|
* - {@link MAX_LOOPS} iterations have completed, OR
|
|
8
|
-
* - Two
|
|
8
|
+
* - Two parallel reviewer passes both return zero findings.
|
|
9
|
+
*
|
|
10
|
+
* The reviewer stages use a `submit_review` custom tool (defined via
|
|
11
|
+
* `defineTool` with Zod schema validation) to guarantee the review result
|
|
12
|
+
* matches the {@link ReviewResultSchema}. The Copilot SDK validates tool
|
|
13
|
+
* call arguments against the Zod schema before the handler fires.
|
|
9
14
|
*
|
|
10
15
|
* Run: atomic workflow -n ralph -a copilot "<your spec>"
|
|
11
16
|
*/
|
|
12
17
|
|
|
13
18
|
import { defineWorkflow } from "../../../index.ts";
|
|
19
|
+
import { defineTool } from "@github/copilot-sdk";
|
|
14
20
|
import type { SessionEvent } from "@github/copilot-sdk";
|
|
15
21
|
|
|
16
22
|
import {
|
|
17
23
|
buildPlannerPrompt,
|
|
18
24
|
buildOrchestratorPrompt,
|
|
25
|
+
buildInfraDiscoveryPrompts,
|
|
19
26
|
buildReviewPrompt,
|
|
20
27
|
buildDebuggerReportPrompt,
|
|
21
|
-
parseReviewResult,
|
|
22
28
|
extractMarkdownBlock,
|
|
29
|
+
filterActionable,
|
|
30
|
+
mergeReviewResults,
|
|
31
|
+
ReviewResultSchema,
|
|
32
|
+
type ReviewResult,
|
|
33
|
+
type StructuredReviewResult,
|
|
23
34
|
} from "../helpers/prompts.ts";
|
|
24
35
|
import { hasActionableFindings } from "../helpers/review.ts";
|
|
25
|
-
import {
|
|
36
|
+
import { captureBranchChangeset } from "../helpers/git.ts";
|
|
26
37
|
|
|
27
38
|
const MAX_LOOPS = 10;
|
|
28
|
-
|
|
39
|
+
|
|
40
|
+
const SUBMIT_REVIEW_DESCRIPTION =
|
|
41
|
+
"Submit the structured code review result. You MUST call this tool " +
|
|
42
|
+
"exactly once with your complete review. Do not output the review as " +
|
|
43
|
+
"plain text — use this tool.";
|
|
29
44
|
|
|
30
45
|
/**
|
|
31
46
|
* Concatenate the text content of every top-level assistant message in the
|
|
@@ -65,20 +80,13 @@ export default defineWorkflow<"copilot">({
|
|
|
65
80
|
"Plan → orchestrate → review → debug loop with bounded iteration",
|
|
66
81
|
})
|
|
67
82
|
.run(async (ctx) => {
|
|
68
|
-
// Free-form workflows receive their positional prompt under
|
|
69
|
-
// `inputs.prompt`; destructure once so every stage below can close
|
|
70
|
-
// over a bare `userPromptText` without re-reaching into ctx.inputs.
|
|
71
|
-
// (Named `userPromptText` rather than `prompt` to avoid confusion
|
|
72
|
-
// with the `prompt:` object key used in the Copilot send call.)
|
|
73
83
|
const userPromptText = ctx.inputs.prompt ?? "";
|
|
74
|
-
let consecutiveClean = 0;
|
|
75
84
|
let debuggerReport = "";
|
|
76
85
|
|
|
77
86
|
for (let iteration = 1; iteration <= MAX_LOOPS; iteration++) {
|
|
78
87
|
// ── Plan ──────────────────────────────────────────────────────────
|
|
79
|
-
const plannerName = `planner-${iteration}`;
|
|
80
88
|
const planner = await ctx.stage(
|
|
81
|
-
{ name:
|
|
89
|
+
{ name: `planner-${iteration}` },
|
|
82
90
|
{},
|
|
83
91
|
{ agent: "planner" },
|
|
84
92
|
async (s) => {
|
|
@@ -94,11 +102,9 @@ export default defineWorkflow<"copilot">({
|
|
|
94
102
|
},
|
|
95
103
|
);
|
|
96
104
|
|
|
97
|
-
|
|
98
105
|
// ── Orchestrate ───────────────────────────────────────────────────
|
|
99
|
-
const orchName = `orchestrator-${iteration}`;
|
|
100
106
|
await ctx.stage(
|
|
101
|
-
{ name:
|
|
107
|
+
{ name: `orchestrator-${iteration}` },
|
|
102
108
|
{},
|
|
103
109
|
{ agent: "orchestrator" },
|
|
104
110
|
async (s) => {
|
|
@@ -111,82 +117,134 @@ export default defineWorkflow<"copilot">({
|
|
|
111
117
|
},
|
|
112
118
|
);
|
|
113
119
|
|
|
120
|
+
// ── Infrastructure Discovery (three parallel sub-agent stages) ──
|
|
121
|
+
const changeset = await captureBranchChangeset();
|
|
122
|
+
const discoveryPrompts = buildInfraDiscoveryPrompts();
|
|
114
123
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
124
|
+
const [locatorResult, analyzerResult, patternResult] = await Promise.all([
|
|
125
|
+
ctx.stage(
|
|
126
|
+
{ name: `infra-locate-${iteration}`, headless: true },
|
|
127
|
+
{},
|
|
128
|
+
{ agent: "codebase-locator" },
|
|
129
|
+
async (s) => {
|
|
130
|
+
await s.session.send({ prompt: discoveryPrompts.locator });
|
|
131
|
+
const messages = await s.session.getMessages();
|
|
132
|
+
s.save(messages);
|
|
133
|
+
return getAssistantText(messages);
|
|
134
|
+
},
|
|
135
|
+
),
|
|
136
|
+
ctx.stage(
|
|
137
|
+
{ name: `infra-analyze-${iteration}`, headless: true },
|
|
138
|
+
{},
|
|
139
|
+
{ agent: "codebase-analyzer" },
|
|
140
|
+
async (s) => {
|
|
141
|
+
await s.session.send({ prompt: discoveryPrompts.analyzer });
|
|
142
|
+
const messages = await s.session.getMessages();
|
|
143
|
+
s.save(messages);
|
|
144
|
+
return getAssistantText(messages);
|
|
145
|
+
},
|
|
146
|
+
),
|
|
147
|
+
ctx.stage(
|
|
148
|
+
{ name: `infra-patterns-${iteration}`, headless: true },
|
|
149
|
+
{},
|
|
150
|
+
{ agent: "codebase-pattern-finder" },
|
|
151
|
+
async (s) => {
|
|
152
|
+
await s.session.send({ prompt: discoveryPrompts.patternFinder });
|
|
153
|
+
const messages = await s.session.getMessages();
|
|
154
|
+
s.save(messages);
|
|
155
|
+
return getAssistantText(messages);
|
|
156
|
+
},
|
|
157
|
+
),
|
|
158
|
+
]);
|
|
159
|
+
|
|
160
|
+
const discoveryContext = [
|
|
161
|
+
"### Infrastructure Files (codebase-locator)\n\n" + locatorResult.result,
|
|
162
|
+
"### Infrastructure Analysis (codebase-analyzer)\n\n" + analyzerResult.result,
|
|
163
|
+
"### Build & Test Patterns (codebase-pattern-finder)\n\n" + patternResult.result,
|
|
164
|
+
].join("\n\n---\n\n");
|
|
165
|
+
|
|
166
|
+
// ── Review (two parallel passes) ──────────────────────────────────
|
|
167
|
+
const reviewPrompt = buildReviewPrompt(userPromptText, {
|
|
168
|
+
changeset,
|
|
169
|
+
iteration,
|
|
170
|
+
useSubmitTool: true,
|
|
171
|
+
discoveryContext,
|
|
172
|
+
});
|
|
134
173
|
|
|
174
|
+
// Each parallel reviewer gets its own tool + capture ref so they
|
|
175
|
+
// don't race on a shared mutable.
|
|
176
|
+
let captureA: ReviewResult | null = null;
|
|
177
|
+
let captureB: ReviewResult | null = null;
|
|
135
178
|
|
|
136
|
-
|
|
137
|
-
|
|
179
|
+
const toolA = defineTool("submit_review", {
|
|
180
|
+
description: SUBMIT_REVIEW_DESCRIPTION,
|
|
181
|
+
parameters: ReviewResultSchema,
|
|
182
|
+
skipPermission: true,
|
|
183
|
+
handler: async (data: ReviewResult) => {
|
|
184
|
+
captureA = filterActionable(data);
|
|
185
|
+
return "Review submitted successfully.";
|
|
186
|
+
},
|
|
187
|
+
});
|
|
138
188
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
189
|
+
const toolB = defineTool("submit_review", {
|
|
190
|
+
description: SUBMIT_REVIEW_DESCRIPTION,
|
|
191
|
+
parameters: ReviewResultSchema,
|
|
192
|
+
skipPermission: true,
|
|
193
|
+
handler: async (data: ReviewResult) => {
|
|
194
|
+
captureB = filterActionable(data);
|
|
195
|
+
return "Review submitted successfully.";
|
|
196
|
+
},
|
|
197
|
+
});
|
|
142
198
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const confirm = await ctx.stage(
|
|
147
|
-
{ name: confirmName },
|
|
199
|
+
const [reviewA, reviewB] = await Promise.all([
|
|
200
|
+
ctx.stage(
|
|
201
|
+
{ name: `reviewer-${iteration}-a` },
|
|
148
202
|
{},
|
|
149
|
-
{ agent: "reviewer" },
|
|
203
|
+
{ agent: "reviewer", tools: [toolA] },
|
|
150
204
|
async (s) => {
|
|
151
|
-
await s.session.
|
|
152
|
-
prompt: buildReviewPrompt(userPromptText, {
|
|
153
|
-
gitStatus,
|
|
154
|
-
iteration,
|
|
155
|
-
isConfirmationPass: true,
|
|
156
|
-
}),
|
|
157
|
-
});
|
|
205
|
+
await s.session.sendAndWait({ prompt: reviewPrompt });
|
|
158
206
|
const messages = await s.session.getMessages();
|
|
159
207
|
s.save(messages);
|
|
160
|
-
return
|
|
208
|
+
return {
|
|
209
|
+
structured: captureA,
|
|
210
|
+
raw: getAssistantText(messages),
|
|
211
|
+
} as StructuredReviewResult;
|
|
161
212
|
},
|
|
162
|
-
)
|
|
163
|
-
|
|
213
|
+
),
|
|
214
|
+
ctx.stage(
|
|
215
|
+
{ name: `reviewer-${iteration}-b` },
|
|
216
|
+
{},
|
|
217
|
+
{ agent: "reviewer", tools: [toolB] },
|
|
218
|
+
async (s) => {
|
|
219
|
+
await s.session.sendAndWait({ prompt: reviewPrompt });
|
|
220
|
+
const messages = await s.session.getMessages();
|
|
221
|
+
s.save(messages);
|
|
222
|
+
return {
|
|
223
|
+
structured: captureB,
|
|
224
|
+
raw: getAssistantText(messages),
|
|
225
|
+
} as StructuredReviewResult;
|
|
226
|
+
},
|
|
227
|
+
),
|
|
228
|
+
]);
|
|
164
229
|
|
|
165
|
-
|
|
166
|
-
|
|
230
|
+
const merged = mergeReviewResults(reviewA.result, reviewB.result);
|
|
231
|
+
const parsed = merged.structured;
|
|
232
|
+
const reviewRaw = merged.raw;
|
|
167
233
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
if (consecutiveClean >= CONSECUTIVE_CLEAN_THRESHOLD) break;
|
|
171
|
-
} else {
|
|
172
|
-
consecutiveClean = 0;
|
|
173
|
-
}
|
|
174
|
-
} else {
|
|
175
|
-
consecutiveClean = 0;
|
|
176
|
-
}
|
|
234
|
+
// Both reviewers agree the code is clean → done
|
|
235
|
+
if (!hasActionableFindings(parsed, reviewRaw)) break;
|
|
177
236
|
|
|
178
|
-
// ── Debug (only if
|
|
179
|
-
if (
|
|
180
|
-
const debuggerName = `debugger-${iteration}`;
|
|
237
|
+
// ── Debug (only if another iteration is allowed) ──────────────────
|
|
238
|
+
if (iteration < MAX_LOOPS) {
|
|
181
239
|
const debugger_ = await ctx.stage(
|
|
182
|
-
{ name:
|
|
240
|
+
{ name: `debugger-${iteration}` },
|
|
183
241
|
{},
|
|
184
242
|
{ agent: "debugger" },
|
|
185
243
|
async (s) => {
|
|
186
244
|
await s.session.send({
|
|
187
245
|
prompt: buildDebuggerReportPrompt(parsed, reviewRaw, {
|
|
188
246
|
iteration,
|
|
189
|
-
|
|
247
|
+
changeset,
|
|
190
248
|
}),
|
|
191
249
|
});
|
|
192
250
|
const messages = await s.session.getMessages();
|
|
@@ -1,34 +1,201 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Deterministic
|
|
2
|
+
* Deterministic changeset probes used by the Ralph loop.
|
|
3
3
|
*
|
|
4
4
|
* The reviewer and debugger sub-agents both benefit from knowing exactly which
|
|
5
|
-
* files were touched
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* files were touched by the current work. We compute a diff relative to the
|
|
6
|
+
* parent branch (auto-discovered, defaulting to main) so the changeset
|
|
7
|
+
* includes BOTH committed and uncommitted changes — not just the working tree.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* Git command failures are captured — not swallowed — so downstream agents
|
|
10
|
+
* can distinguish "nothing changed" from "git broke" and course-correct.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
// ─── Internals ──────────────────────────────────────────────────────────────
|
|
14
|
+
|
|
15
|
+
/** Result of running a single git command. */
|
|
16
|
+
interface GitResult {
|
|
17
|
+
/** Trimmed stdout on success, "" on failure. */
|
|
18
|
+
stdout: string;
|
|
19
|
+
/** True when the command exited with code 0. */
|
|
20
|
+
ok: boolean;
|
|
21
|
+
/** Human-readable error context when ok is false. */
|
|
22
|
+
error?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
13
25
|
/**
|
|
14
|
-
* Run
|
|
15
|
-
*
|
|
26
|
+
* Run a git command and return both the output and error context.
|
|
27
|
+
*
|
|
28
|
+
* Never throws — call-site code can check `.ok` and propagate `.error`
|
|
29
|
+
* to downstream agents instead of silently producing empty strings.
|
|
16
30
|
*/
|
|
17
|
-
|
|
31
|
+
async function git(
|
|
32
|
+
args: string[],
|
|
18
33
|
cwd: string = process.cwd(),
|
|
19
|
-
): Promise<
|
|
34
|
+
): Promise<GitResult> {
|
|
20
35
|
try {
|
|
21
36
|
const proc = Bun.spawn({
|
|
22
|
-
cmd: ["git",
|
|
37
|
+
cmd: ["git", ...args],
|
|
23
38
|
cwd,
|
|
24
39
|
stdout: "pipe",
|
|
25
|
-
stderr: "
|
|
40
|
+
stderr: "pipe",
|
|
26
41
|
});
|
|
27
|
-
const stdout = await
|
|
42
|
+
const [stdout, stderr] = await Promise.all([
|
|
43
|
+
new Response(proc.stdout).text(),
|
|
44
|
+
new Response(proc.stderr).text(),
|
|
45
|
+
]);
|
|
28
46
|
const code = await proc.exited;
|
|
29
|
-
if (code !== 0)
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
47
|
+
if (code !== 0) {
|
|
48
|
+
return {
|
|
49
|
+
stdout: "",
|
|
50
|
+
ok: false,
|
|
51
|
+
error: `\`git ${args.join(" ")}\` exited with code ${code}${stderr.trim() ? ": " + stderr.trim() : ""}`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return { stdout: stdout.trim(), ok: true };
|
|
55
|
+
} catch (err) {
|
|
56
|
+
return {
|
|
57
|
+
stdout: "",
|
|
58
|
+
ok: false,
|
|
59
|
+
error: `\`git ${args.join(" ")}\` failed to spawn: ${err instanceof Error ? err.message : String(err)}`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// ─── Branch discovery ───────────────────────────────────────────────────────
|
|
65
|
+
|
|
66
|
+
/** Well-known default branch names, tried in order. */
|
|
67
|
+
const DEFAULT_BRANCH_CANDIDATES = ["main", "master", "develop"] as const;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Discover the parent (base) branch for the current HEAD.
|
|
71
|
+
*
|
|
72
|
+
* Strategy:
|
|
73
|
+
* 1. Find the merge-base between HEAD and each default-branch candidate.
|
|
74
|
+
* The candidate whose merge-base is closest to HEAD (fewest commits away)
|
|
75
|
+
* is the winner.
|
|
76
|
+
* 2. If no candidate exists locally, fall back to "main".
|
|
77
|
+
*
|
|
78
|
+
* This handles the common case of feature branches off main/master without
|
|
79
|
+
* requiring configuration.
|
|
80
|
+
*/
|
|
81
|
+
export async function discoverBaseBranch(
|
|
82
|
+
cwd: string = process.cwd(),
|
|
83
|
+
): Promise<string> {
|
|
84
|
+
const branchResult = await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd);
|
|
85
|
+
const currentBranch = branchResult.stdout;
|
|
86
|
+
|
|
87
|
+
let bestCandidate = "main";
|
|
88
|
+
let bestDistance = Infinity;
|
|
89
|
+
|
|
90
|
+
for (const candidate of DEFAULT_BRANCH_CANDIDATES) {
|
|
91
|
+
// Skip if we ARE the candidate (reviewing main against itself is useless)
|
|
92
|
+
if (currentBranch === candidate) continue;
|
|
93
|
+
|
|
94
|
+
// Check the ref exists
|
|
95
|
+
const refExists = await git(["rev-parse", "--verify", `refs/heads/${candidate}`], cwd);
|
|
96
|
+
if (!refExists.ok) continue;
|
|
97
|
+
|
|
98
|
+
const mergeBase = await git(["merge-base", "HEAD", candidate], cwd);
|
|
99
|
+
if (!mergeBase.ok) continue;
|
|
100
|
+
|
|
101
|
+
// Count commits from merge-base to HEAD — fewer = closer = better match
|
|
102
|
+
const countResult = await git(["rev-list", "--count", `${mergeBase.stdout}..HEAD`], cwd);
|
|
103
|
+
const distance = parseInt(countResult.stdout, 10);
|
|
104
|
+
if (!Number.isNaN(distance) && distance < bestDistance) {
|
|
105
|
+
bestDistance = distance;
|
|
106
|
+
bestCandidate = candidate;
|
|
107
|
+
}
|
|
33
108
|
}
|
|
109
|
+
|
|
110
|
+
return bestCandidate;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// ─── Changeset capture ──────────────────────────────────────────────────────
|
|
114
|
+
|
|
115
|
+
/** The result of capturing the full changeset for a review. */
|
|
116
|
+
export interface BranchChangeset {
|
|
117
|
+
/** The base branch the diff is relative to (e.g. "main") */
|
|
118
|
+
baseBranch: string;
|
|
119
|
+
/**
|
|
120
|
+
* `git diff --stat` output showing files changed, insertions, deletions
|
|
121
|
+
* relative to the merge-base with the parent branch. Includes both
|
|
122
|
+
* committed AND uncommitted changes.
|
|
123
|
+
*/
|
|
124
|
+
diffStat: string;
|
|
125
|
+
/**
|
|
126
|
+
* Short list of uncommitted working-tree changes (`git status -s`).
|
|
127
|
+
* Useful for the reviewer to distinguish "already committed" from
|
|
128
|
+
* "still in-flight".
|
|
129
|
+
*/
|
|
130
|
+
uncommitted: string;
|
|
131
|
+
/**
|
|
132
|
+
* `git diff --name-status` output listing each changed file with its
|
|
133
|
+
* status (A=added, M=modified, D=deleted, R=renamed).
|
|
134
|
+
*/
|
|
135
|
+
nameStatus: string;
|
|
136
|
+
/**
|
|
137
|
+
* Human-readable error messages for any git commands that failed during
|
|
138
|
+
* changeset capture. Empty when everything succeeded. Downstream prompts
|
|
139
|
+
* surface these so the reviewing agent can course-correct (e.g. run the
|
|
140
|
+
* git commands itself, or flag the gap as a finding).
|
|
141
|
+
*/
|
|
142
|
+
errors: string[];
|
|
34
143
|
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Capture the full changeset for the current branch relative to its parent.
|
|
147
|
+
*
|
|
148
|
+
* Combines:
|
|
149
|
+
* - `git diff <merge-base>..HEAD --stat` (committed changes)
|
|
150
|
+
* - `git diff --stat` (uncommitted staged+unstaged changes)
|
|
151
|
+
* - `git status -s` (working tree snapshot)
|
|
152
|
+
*
|
|
153
|
+
* Into a single {@link BranchChangeset} that gives the reviewer complete
|
|
154
|
+
* visibility into everything this branch has done.
|
|
155
|
+
*
|
|
156
|
+
* Git failures are collected in {@link BranchChangeset.errors} rather than
|
|
157
|
+
* swallowed, so downstream agents see exactly what broke and can compensate.
|
|
158
|
+
*/
|
|
159
|
+
export async function captureBranchChangeset(
|
|
160
|
+
cwd: string = process.cwd(),
|
|
161
|
+
): Promise<BranchChangeset> {
|
|
162
|
+
const errors: string[] = [];
|
|
163
|
+
|
|
164
|
+
const baseBranch = await discoverBaseBranch(cwd);
|
|
165
|
+
const mergeBaseResult = await git(["merge-base", "HEAD", baseBranch], cwd);
|
|
166
|
+
|
|
167
|
+
if (!mergeBaseResult.ok && mergeBaseResult.error) {
|
|
168
|
+
errors.push(mergeBaseResult.error);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Compute the merge-base ref, falling back to baseBranch if merge-base fails
|
|
172
|
+
const baseRef = mergeBaseResult.stdout || baseBranch;
|
|
173
|
+
|
|
174
|
+
// Full diff stat: committed changes from branch point through HEAD,
|
|
175
|
+
// plus any uncommitted working-tree changes (the combined diff captures
|
|
176
|
+
// the complete picture)
|
|
177
|
+
const diffStatResult = await git(["diff", `${baseRef}...HEAD`, "--stat"], cwd);
|
|
178
|
+
const uncommittedStatResult = await git(["diff", "--stat"], cwd);
|
|
179
|
+
const uncommittedResult = await git(["status", "-s"], cwd);
|
|
180
|
+
const nameStatusResult = await git(["diff", `${baseRef}...HEAD`, "--name-status"], cwd);
|
|
181
|
+
|
|
182
|
+
// Collect errors from each command
|
|
183
|
+
if (!diffStatResult.ok && diffStatResult.error) errors.push(diffStatResult.error);
|
|
184
|
+
if (!uncommittedStatResult.ok && uncommittedStatResult.error) errors.push(uncommittedStatResult.error);
|
|
185
|
+
if (!uncommittedResult.ok && uncommittedResult.error) errors.push(uncommittedResult.error);
|
|
186
|
+
if (!nameStatusResult.ok && nameStatusResult.error) errors.push(nameStatusResult.error);
|
|
187
|
+
|
|
188
|
+
// Merge committed + uncommitted stats for a complete picture
|
|
189
|
+
const combinedStat = [diffStatResult.stdout, uncommittedStatResult.stdout]
|
|
190
|
+
.filter(Boolean)
|
|
191
|
+
.join("\n");
|
|
192
|
+
|
|
193
|
+
return {
|
|
194
|
+
baseBranch,
|
|
195
|
+
diffStat: combinedStat,
|
|
196
|
+
uncommitted: uncommittedResult.stdout,
|
|
197
|
+
nameStatus: nameStatusResult.stdout,
|
|
198
|
+
errors,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
|