@bastani/atomic 0.6.8 → 0.7.0-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/bin/atomic +65 -0
- package/package.json +17 -82
- package/postinstall.mjs +47 -0
- package/.agents/skills/ado-commit/SKILL.md +0 -94
- package/.agents/skills/ado-create-pr/SKILL.md +0 -211
- package/.agents/skills/advanced-evaluation/SKILL.md +0 -404
- package/.agents/skills/advanced-evaluation/references/bias-mitigation.md +0 -288
- package/.agents/skills/advanced-evaluation/references/evaluation-pipeline.md +0 -43
- package/.agents/skills/advanced-evaluation/references/implementation-patterns.md +0 -315
- package/.agents/skills/advanced-evaluation/references/metrics-guide.md +0 -331
- package/.agents/skills/advanced-evaluation/scripts/evaluation_example.py +0 -392
- package/.agents/skills/ast-grep/SKILL.md +0 -325
- package/.agents/skills/ast-grep/references/rule_reference.md +0 -297
- package/.agents/skills/bdi-mental-states/SKILL.md +0 -313
- package/.agents/skills/bdi-mental-states/references/bdi-ontology-core.md +0 -207
- package/.agents/skills/bdi-mental-states/references/framework-integration.md +0 -582
- package/.agents/skills/bdi-mental-states/references/rdf-examples.md +0 -315
- package/.agents/skills/bdi-mental-states/references/sparql-competency.md +0 -420
- package/.agents/skills/bun/SKILL.md +0 -233
- package/.agents/skills/context-compression/SKILL.md +0 -274
- package/.agents/skills/context-compression/references/evaluation-framework.md +0 -213
- package/.agents/skills/context-compression/scripts/compression_evaluator.py +0 -862
- package/.agents/skills/context-compression/tests/test_compression_evaluator.py +0 -56
- package/.agents/skills/context-degradation/SKILL.md +0 -208
- package/.agents/skills/context-degradation/references/patterns.md +0 -314
- package/.agents/skills/context-degradation/scripts/degradation_detector.py +0 -614
- package/.agents/skills/context-fundamentals/SKILL.md +0 -203
- package/.agents/skills/context-fundamentals/references/context-components.md +0 -283
- package/.agents/skills/context-fundamentals/scripts/context_manager.py +0 -533
- package/.agents/skills/context-optimization/SKILL.md +0 -197
- package/.agents/skills/context-optimization/references/optimization_techniques.md +0 -272
- package/.agents/skills/context-optimization/scripts/compaction.py +0 -562
- package/.agents/skills/create-spec/SKILL.md +0 -249
- package/.agents/skills/docx/LICENSE.txt +0 -30
- package/.agents/skills/docx/SKILL.md +0 -592
- package/.agents/skills/docx/scripts/__init__.py +0 -1
- package/.agents/skills/docx/scripts/accept_changes.py +0 -135
- package/.agents/skills/docx/scripts/comment.py +0 -318
- package/.agents/skills/docx/scripts/office/helpers/__init__.py +0 -0
- package/.agents/skills/docx/scripts/office/helpers/merge_runs.py +0 -199
- package/.agents/skills/docx/scripts/office/helpers/simplify_redlines.py +0 -197
- package/.agents/skills/docx/scripts/office/pack.py +0 -159
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/.agents/skills/docx/scripts/office/schemas/mce/mc.xsd +0 -75
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/.agents/skills/docx/scripts/office/soffice.py +0 -183
- package/.agents/skills/docx/scripts/office/unpack.py +0 -132
- package/.agents/skills/docx/scripts/office/validate.py +0 -111
- package/.agents/skills/docx/scripts/office/validators/__init__.py +0 -15
- package/.agents/skills/docx/scripts/office/validators/base.py +0 -847
- package/.agents/skills/docx/scripts/office/validators/docx.py +0 -446
- package/.agents/skills/docx/scripts/office/validators/pptx.py +0 -275
- package/.agents/skills/docx/scripts/office/validators/redlining.py +0 -247
- package/.agents/skills/docx/scripts/templates/comments.xml +0 -3
- package/.agents/skills/docx/scripts/templates/commentsExtended.xml +0 -3
- package/.agents/skills/docx/scripts/templates/commentsExtensible.xml +0 -3
- package/.agents/skills/docx/scripts/templates/commentsIds.xml +0 -3
- package/.agents/skills/docx/scripts/templates/people.xml +0 -3
- package/.agents/skills/evaluation/SKILL.md +0 -253
- package/.agents/skills/evaluation/references/metrics.md +0 -339
- package/.agents/skills/evaluation/scripts/evaluator.py +0 -627
- package/.agents/skills/explain-code/SKILL.md +0 -232
- package/.agents/skills/filesystem-context/SKILL.md +0 -289
- package/.agents/skills/filesystem-context/references/implementation-patterns.md +0 -549
- package/.agents/skills/filesystem-context/scripts/filesystem_context.py +0 -425
- package/.agents/skills/find-skills/SKILL.md +0 -144
- package/.agents/skills/gh-commit/SKILL.md +0 -245
- package/.agents/skills/gh-create-pr/SKILL.md +0 -95
- package/.agents/skills/hosted-agents/SKILL.md +0 -262
- package/.agents/skills/hosted-agents/references/infrastructure-patterns.md +0 -700
- package/.agents/skills/hosted-agents/scripts/sandbox_manager.py +0 -590
- package/.agents/skills/impeccable/SKILL.md +0 -178
- package/.agents/skills/impeccable/agents/openai.yaml +0 -4
- package/.agents/skills/impeccable/reference/adapt.md +0 -190
- package/.agents/skills/impeccable/reference/animate.md +0 -175
- package/.agents/skills/impeccable/reference/audit.md +0 -134
- package/.agents/skills/impeccable/reference/bolder.md +0 -113
- package/.agents/skills/impeccable/reference/brand.md +0 -114
- package/.agents/skills/impeccable/reference/clarify.md +0 -174
- package/.agents/skills/impeccable/reference/cognitive-load.md +0 -106
- package/.agents/skills/impeccable/reference/color-and-contrast.md +0 -105
- package/.agents/skills/impeccable/reference/colorize.md +0 -154
- package/.agents/skills/impeccable/reference/craft.md +0 -193
- package/.agents/skills/impeccable/reference/critique.md +0 -213
- package/.agents/skills/impeccable/reference/delight.md +0 -302
- package/.agents/skills/impeccable/reference/distill.md +0 -111
- package/.agents/skills/impeccable/reference/document.md +0 -427
- package/.agents/skills/impeccable/reference/extract.md +0 -70
- package/.agents/skills/impeccable/reference/harden.md +0 -347
- package/.agents/skills/impeccable/reference/heuristics-scoring.md +0 -234
- package/.agents/skills/impeccable/reference/interaction-design.md +0 -195
- package/.agents/skills/impeccable/reference/layout.md +0 -141
- package/.agents/skills/impeccable/reference/live.md +0 -594
- package/.agents/skills/impeccable/reference/motion-design.md +0 -109
- package/.agents/skills/impeccable/reference/onboard.md +0 -234
- package/.agents/skills/impeccable/reference/optimize.md +0 -258
- package/.agents/skills/impeccable/reference/overdrive.md +0 -130
- package/.agents/skills/impeccable/reference/personas.md +0 -178
- package/.agents/skills/impeccable/reference/polish.md +0 -232
- package/.agents/skills/impeccable/reference/product.md +0 -62
- package/.agents/skills/impeccable/reference/quieter.md +0 -99
- package/.agents/skills/impeccable/reference/responsive-design.md +0 -114
- package/.agents/skills/impeccable/reference/shape.md +0 -151
- package/.agents/skills/impeccable/reference/spatial-design.md +0 -100
- package/.agents/skills/impeccable/reference/teach.md +0 -156
- package/.agents/skills/impeccable/reference/typeset.md +0 -124
- package/.agents/skills/impeccable/reference/typography.md +0 -159
- package/.agents/skills/impeccable/reference/ux-writing.md +0 -107
- package/.agents/skills/impeccable/scripts/cleanup-deprecated.mjs +0 -284
- package/.agents/skills/impeccable/scripts/command-metadata.json +0 -94
- package/.agents/skills/impeccable/scripts/design-parser.mjs +0 -820
- package/.agents/skills/impeccable/scripts/detect-csp.mjs +0 -198
- package/.agents/skills/impeccable/scripts/is-generated.mjs +0 -69
- package/.agents/skills/impeccable/scripts/live-accept.mjs +0 -595
- package/.agents/skills/impeccable/scripts/live-browser.js +0 -4781
- package/.agents/skills/impeccable/scripts/live-inject.mjs +0 -445
- package/.agents/skills/impeccable/scripts/live-poll.mjs +0 -186
- package/.agents/skills/impeccable/scripts/live-server.mjs +0 -694
- package/.agents/skills/impeccable/scripts/live-wrap.mjs +0 -571
- package/.agents/skills/impeccable/scripts/live.mjs +0 -247
- package/.agents/skills/impeccable/scripts/load-context.mjs +0 -141
- package/.agents/skills/impeccable/scripts/modern-screenshot.umd.js +0 -14
- package/.agents/skills/impeccable/scripts/pin.mjs +0 -214
- package/.agents/skills/init/SKILL.md +0 -140
- package/.agents/skills/liteparse/SKILL.md +0 -223
- package/.agents/skills/memory-systems/SKILL.md +0 -221
- package/.agents/skills/memory-systems/references/implementation.md +0 -551
- package/.agents/skills/memory-systems/scripts/memory_store.py +0 -616
- package/.agents/skills/multi-agent-patterns/SKILL.md +0 -259
- package/.agents/skills/multi-agent-patterns/references/frameworks.md +0 -433
- package/.agents/skills/multi-agent-patterns/scripts/coordination.py +0 -613
- package/.agents/skills/opentui/SKILL.md +0 -202
- package/.agents/skills/opentui/references/animation/REFERENCE.md +0 -431
- package/.agents/skills/opentui/references/components/REFERENCE.md +0 -144
- package/.agents/skills/opentui/references/components/code-diff.md +0 -672
- package/.agents/skills/opentui/references/components/containers.md +0 -417
- package/.agents/skills/opentui/references/components/inputs.md +0 -531
- package/.agents/skills/opentui/references/components/text-display.md +0 -386
- package/.agents/skills/opentui/references/core/REFERENCE.md +0 -145
- package/.agents/skills/opentui/references/core/api.md +0 -543
- package/.agents/skills/opentui/references/core/configuration.md +0 -168
- package/.agents/skills/opentui/references/core/gotchas.md +0 -393
- package/.agents/skills/opentui/references/core/patterns.md +0 -449
- package/.agents/skills/opentui/references/keyboard/REFERENCE.md +0 -617
- package/.agents/skills/opentui/references/layout/REFERENCE.md +0 -337
- package/.agents/skills/opentui/references/layout/patterns.md +0 -444
- package/.agents/skills/opentui/references/react/REFERENCE.md +0 -174
- package/.agents/skills/opentui/references/react/api.md +0 -436
- package/.agents/skills/opentui/references/react/configuration.md +0 -302
- package/.agents/skills/opentui/references/react/gotchas.md +0 -443
- package/.agents/skills/opentui/references/react/patterns.md +0 -501
- package/.agents/skills/opentui/references/solid/REFERENCE.md +0 -201
- package/.agents/skills/opentui/references/solid/api.md +0 -564
- package/.agents/skills/opentui/references/solid/configuration.md +0 -316
- package/.agents/skills/opentui/references/solid/gotchas.md +0 -427
- package/.agents/skills/opentui/references/solid/patterns.md +0 -560
- package/.agents/skills/opentui/references/testing/REFERENCE.md +0 -614
- package/.agents/skills/pdf/LICENSE.txt +0 -30
- package/.agents/skills/pdf/SKILL.md +0 -316
- package/.agents/skills/pdf/forms.md +0 -294
- package/.agents/skills/pdf/reference.md +0 -612
- package/.agents/skills/pdf/scripts/check_bounding_boxes.py +0 -65
- package/.agents/skills/pdf/scripts/check_fillable_fields.py +0 -11
- package/.agents/skills/pdf/scripts/convert_pdf_to_images.py +0 -33
- package/.agents/skills/pdf/scripts/create_validation_image.py +0 -37
- package/.agents/skills/pdf/scripts/extract_form_field_info.py +0 -122
- package/.agents/skills/pdf/scripts/extract_form_structure.py +0 -115
- package/.agents/skills/pdf/scripts/fill_fillable_fields.py +0 -98
- package/.agents/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -107
- package/.agents/skills/playwright-cli/SKILL.md +0 -390
- package/.agents/skills/playwright-cli/references/element-attributes.md +0 -23
- package/.agents/skills/playwright-cli/references/playwright-tests.md +0 -39
- package/.agents/skills/playwright-cli/references/request-mocking.md +0 -87
- package/.agents/skills/playwright-cli/references/running-code.md +0 -241
- package/.agents/skills/playwright-cli/references/session-management.md +0 -225
- package/.agents/skills/playwright-cli/references/spec-driven-testing.md +0 -305
- package/.agents/skills/playwright-cli/references/storage-state.md +0 -275
- package/.agents/skills/playwright-cli/references/test-generation.md +0 -134
- package/.agents/skills/playwright-cli/references/tracing.md +0 -139
- package/.agents/skills/playwright-cli/references/video-recording.md +0 -143
- package/.agents/skills/pptx/LICENSE.txt +0 -30
- package/.agents/skills/pptx/SKILL.md +0 -234
- package/.agents/skills/pptx/editing.md +0 -205
- package/.agents/skills/pptx/pptxgenjs.md +0 -420
- package/.agents/skills/pptx/scripts/__init__.py +0 -0
- package/.agents/skills/pptx/scripts/add_slide.py +0 -195
- package/.agents/skills/pptx/scripts/clean.py +0 -286
- package/.agents/skills/pptx/scripts/office/helpers/__init__.py +0 -0
- package/.agents/skills/pptx/scripts/office/helpers/merge_runs.py +0 -199
- package/.agents/skills/pptx/scripts/office/helpers/simplify_redlines.py +0 -197
- package/.agents/skills/pptx/scripts/office/pack.py +0 -159
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/.agents/skills/pptx/scripts/office/schemas/mce/mc.xsd +0 -75
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/.agents/skills/pptx/scripts/office/soffice.py +0 -183
- package/.agents/skills/pptx/scripts/office/unpack.py +0 -132
- package/.agents/skills/pptx/scripts/office/validate.py +0 -111
- package/.agents/skills/pptx/scripts/office/validators/__init__.py +0 -15
- package/.agents/skills/pptx/scripts/office/validators/base.py +0 -847
- package/.agents/skills/pptx/scripts/office/validators/docx.py +0 -446
- package/.agents/skills/pptx/scripts/office/validators/pptx.py +0 -275
- package/.agents/skills/pptx/scripts/office/validators/redlining.py +0 -247
- package/.agents/skills/pptx/scripts/thumbnail.py +0 -289
- package/.agents/skills/project-development/SKILL.md +0 -293
- package/.agents/skills/project-development/references/case-studies.md +0 -388
- package/.agents/skills/project-development/references/pipeline-patterns.md +0 -610
- package/.agents/skills/project-development/scripts/pipeline_template.py +0 -796
- package/.agents/skills/prompt-engineer/SKILL.md +0 -265
- package/.agents/skills/prompt-engineer/references/advanced_patterns.md +0 -271
- package/.agents/skills/prompt-engineer/references/core_prompting.md +0 -137
- package/.agents/skills/prompt-engineer/references/quality_improvement.md +0 -193
- package/.agents/skills/research-codebase/SKILL.md +0 -229
- package/.agents/skills/ripgrep/SKILL.md +0 -384
- package/.agents/skills/skill-creator/LICENSE.txt +0 -202
- package/.agents/skills/skill-creator/SKILL.md +0 -487
- package/.agents/skills/skill-creator/agents/analyzer.md +0 -274
- package/.agents/skills/skill-creator/agents/comparator.md +0 -202
- package/.agents/skills/skill-creator/agents/grader.md +0 -223
- package/.agents/skills/skill-creator/assets/eval_review.html +0 -146
- package/.agents/skills/skill-creator/eval-viewer/generate_review.py +0 -471
- package/.agents/skills/skill-creator/eval-viewer/viewer.html +0 -1325
- package/.agents/skills/skill-creator/references/schemas.md +0 -430
- package/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
- package/.agents/skills/skill-creator/scripts/generate_report.py +0 -326
- package/.agents/skills/skill-creator/scripts/improve_description.py +0 -247
- package/.agents/skills/skill-creator/scripts/package_skill.py +0 -136
- package/.agents/skills/skill-creator/scripts/quick_validate.py +0 -103
- package/.agents/skills/skill-creator/scripts/run_eval.py +0 -310
- package/.agents/skills/skill-creator/scripts/run_loop.py +0 -328
- package/.agents/skills/skill-creator/scripts/utils.py +0 -47
- package/.agents/skills/sl-commit/SKILL.md +0 -53
- package/.agents/skills/sl-submit-diff/SKILL.md +0 -57
- package/.agents/skills/tdd/SKILL.md +0 -111
- package/.agents/skills/tdd/deep-modules.md +0 -33
- package/.agents/skills/tdd/interface-design.md +0 -31
- package/.agents/skills/tdd/mocking.md +0 -59
- package/.agents/skills/tdd/refactoring.md +0 -10
- package/.agents/skills/tdd/tests.md +0 -61
- package/.agents/skills/tool-design/SKILL.md +0 -273
- package/.agents/skills/tool-design/references/architectural_reduction.md +0 -210
- package/.agents/skills/tool-design/references/best_practices.md +0 -176
- package/.agents/skills/tool-design/scripts/description_generator.py +0 -528
- package/.agents/skills/typescript-advanced-types/SKILL.md +0 -720
- package/.agents/skills/typescript-expert/SKILL.md +0 -434
- package/.agents/skills/typescript-expert/references/tsconfig-strict.json +0 -92
- package/.agents/skills/typescript-expert/references/typescript-cheatsheet.md +0 -383
- package/.agents/skills/typescript-expert/references/utility-types.ts +0 -335
- package/.agents/skills/typescript-expert/scripts/ts_diagnostic.py +0 -203
- package/.agents/skills/typescript-react-reviewer/SKILL.md +0 -201
- package/.agents/skills/typescript-react-reviewer/references/antipatterns.md +0 -510
- package/.agents/skills/typescript-react-reviewer/references/checklist.md +0 -267
- package/.agents/skills/typescript-react-reviewer/references/react19-patterns.md +0 -305
- package/.agents/skills/workflow-creator/SKILL.md +0 -553
- package/.agents/skills/workflow-creator/references/agent-sessions.md +0 -891
- package/.agents/skills/workflow-creator/references/agent-setup-recipe.md +0 -266
- package/.agents/skills/workflow-creator/references/computation-and-validation.md +0 -201
- package/.agents/skills/workflow-creator/references/control-flow.md +0 -470
- package/.agents/skills/workflow-creator/references/failure-modes.md +0 -1014
- package/.agents/skills/workflow-creator/references/getting-started.md +0 -392
- package/.agents/skills/workflow-creator/references/registry-and-validation.md +0 -141
- package/.agents/skills/workflow-creator/references/running-workflows.md +0 -418
- package/.agents/skills/workflow-creator/references/session-config.md +0 -431
- package/.agents/skills/workflow-creator/references/state-and-data-flow.md +0 -356
- package/.agents/skills/workflow-creator/references/user-input.md +0 -234
- package/.agents/skills/workflow-creator/references/workflow-inputs.md +0 -392
- package/.agents/skills/xlsx/LICENSE.txt +0 -30
- package/.agents/skills/xlsx/SKILL.md +0 -294
- package/.agents/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
- package/.agents/skills/xlsx/scripts/office/helpers/merge_runs.py +0 -199
- package/.agents/skills/xlsx/scripts/office/helpers/simplify_redlines.py +0 -197
- package/.agents/skills/xlsx/scripts/office/pack.py +0 -159
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/.agents/skills/xlsx/scripts/office/schemas/mce/mc.xsd +0 -75
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/.agents/skills/xlsx/scripts/office/soffice.py +0 -183
- package/.agents/skills/xlsx/scripts/office/unpack.py +0 -132
- package/.agents/skills/xlsx/scripts/office/validate.py +0 -111
- package/.agents/skills/xlsx/scripts/office/validators/__init__.py +0 -15
- package/.agents/skills/xlsx/scripts/office/validators/base.py +0 -847
- package/.agents/skills/xlsx/scripts/office/validators/docx.py +0 -446
- package/.agents/skills/xlsx/scripts/office/validators/pptx.py +0 -275
- package/.agents/skills/xlsx/scripts/office/validators/redlining.py +0 -247
- package/.agents/skills/xlsx/scripts/recalc.py +0 -184
- package/.claude/agents/code-simplifier.md +0 -52
- package/.claude/agents/codebase-analyzer.md +0 -166
- package/.claude/agents/codebase-locator.md +0 -122
- package/.claude/agents/codebase-online-researcher.md +0 -148
- package/.claude/agents/codebase-pattern-finder.md +0 -247
- package/.claude/agents/codebase-research-analyzer.md +0 -179
- package/.claude/agents/codebase-research-locator.md +0 -145
- package/.claude/agents/debugger.md +0 -91
- package/.claude/agents/orchestrator.md +0 -19
- package/.claude/agents/planner.md +0 -295
- package/.claude/agents/reviewer.md +0 -98
- package/.claude/agents/worker.md +0 -165
- package/.claude/settings.json +0 -27
- package/.github/agents/code-simplifier.md +0 -52
- package/.github/agents/codebase-analyzer.md +0 -166
- package/.github/agents/codebase-locator.md +0 -122
- package/.github/agents/codebase-online-researcher.md +0 -146
- package/.github/agents/codebase-pattern-finder.md +0 -247
- package/.github/agents/codebase-research-analyzer.md +0 -179
- package/.github/agents/codebase-research-locator.md +0 -145
- package/.github/agents/debugger.md +0 -98
- package/.github/agents/orchestrator.md +0 -27
- package/.github/agents/planner.md +0 -305
- package/.github/agents/reviewer.md +0 -95
- package/.github/agents/worker.md +0 -237
- package/.github/lsp.json +0 -93
- package/.mcp.json +0 -20
- package/.opencode/agents/code-simplifier.md +0 -62
- package/.opencode/agents/codebase-analyzer.md +0 -171
- package/.opencode/agents/codebase-locator.md +0 -127
- package/.opencode/agents/codebase-online-researcher.md +0 -152
- package/.opencode/agents/codebase-pattern-finder.md +0 -252
- package/.opencode/agents/codebase-research-analyzer.md +0 -183
- package/.opencode/agents/codebase-research-locator.md +0 -149
- package/.opencode/agents/debugger.md +0 -99
- package/.opencode/agents/orchestrator.md +0 -27
- package/.opencode/agents/planner.md +0 -309
- package/.opencode/agents/reviewer.md +0 -103
- package/.opencode/agents/worker.md +0 -165
- package/.opencode/opencode.json +0 -25
- package/README.md +0 -1624
- package/assets/settings.schema.json +0 -51
- package/dist/commands/cli/claude-inflight-hook.d.ts +0 -100
- package/dist/commands/cli/claude-inflight-hook.d.ts.map +0 -1
- package/dist/commands/cli/claude-stop-hook.d.ts +0 -80
- package/dist/commands/cli/claude-stop-hook.d.ts.map +0 -1
- package/dist/lib/atomic-temp.d.ts +0 -8
- package/dist/lib/atomic-temp.d.ts.map +0 -1
- package/dist/lib/path-root-guard.d.ts +0 -4
- package/dist/lib/path-root-guard.d.ts.map +0 -1
- package/dist/lib/spawn.d.ts +0 -102
- package/dist/lib/spawn.d.ts.map +0 -1
- package/dist/lib/terminal-env.d.ts +0 -9
- package/dist/lib/terminal-env.d.ts.map +0 -1
- package/dist/sdk/components/attached-statusline.d.ts +0 -26
- package/dist/sdk/components/attached-statusline.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 -16
- package/dist/sdk/components/connectors.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 -18
- 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/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 -52
- package/dist/sdk/components/orchestrator-panel-store.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 -86
- package/dist/sdk/components/orchestrator-panel.d.ts.map +0 -1
- package/dist/sdk/components/renderer-background.d.ts +0 -9
- package/dist/sdk/components/renderer-background.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 -5
- package/dist/sdk/components/statusline.d.ts.map +0 -1
- package/dist/sdk/components/tui-diagnostics.d.ts +0 -56
- package/dist/sdk/components/tui-diagnostics.d.ts.map +0 -1
- package/dist/sdk/components/workflow-picker-panel.d.ts +0 -126
- package/dist/sdk/components/workflow-picker-panel.d.ts.map +0 -1
- package/dist/sdk/define-workflow.d.ts +0 -107
- package/dist/sdk/define-workflow.d.ts.map +0 -1
- package/dist/sdk/errors.d.ts +0 -46
- package/dist/sdk/errors.d.ts.map +0 -1
- package/dist/sdk/index.d.ts +0 -26
- package/dist/sdk/index.d.ts.map +0 -1
- package/dist/sdk/primitives/inputs.d.ts +0 -36
- package/dist/sdk/primitives/inputs.d.ts.map +0 -1
- package/dist/sdk/primitives/metadata.d.ts +0 -40
- package/dist/sdk/primitives/metadata.d.ts.map +0 -1
- package/dist/sdk/primitives/run.d.ts +0 -57
- package/dist/sdk/primitives/run.d.ts.map +0 -1
- package/dist/sdk/primitives/sessions.d.ts +0 -128
- package/dist/sdk/primitives/sessions.d.ts.map +0 -1
- package/dist/sdk/providers/claude.d.ts +0 -392
- package/dist/sdk/providers/claude.d.ts.map +0 -1
- package/dist/sdk/providers/copilot.d.ts +0 -55
- package/dist/sdk/providers/copilot.d.ts.map +0 -1
- package/dist/sdk/providers/opencode.d.ts +0 -27
- package/dist/sdk/providers/opencode.d.ts.map +0 -1
- package/dist/sdk/registry.d.ts +0 -27
- package/dist/sdk/registry.d.ts.map +0 -1
- package/dist/sdk/runtime/attached-footer.d.ts +0 -31
- package/dist/sdk/runtime/attached-footer.d.ts.map +0 -1
- package/dist/sdk/runtime/cc-debounce.d.ts +0 -29
- package/dist/sdk/runtime/cc-debounce.d.ts.map +0 -1
- package/dist/sdk/runtime/executor-env.d.ts +0 -20
- package/dist/sdk/runtime/executor-env.d.ts.map +0 -1
- package/dist/sdk/runtime/executor.d.ts +0 -265
- package/dist/sdk/runtime/executor.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/orchestrator-entry.d.ts +0 -26
- package/dist/sdk/runtime/orchestrator-entry.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/port-discovery.d.ts +0 -71
- package/dist/sdk/runtime/port-discovery.d.ts.map +0 -1
- package/dist/sdk/runtime/status-writer.d.ts +0 -101
- package/dist/sdk/runtime/status-writer.d.ts.map +0 -1
- package/dist/sdk/runtime/theme.d.ts +0 -33
- package/dist/sdk/runtime/theme.d.ts.map +0 -1
- package/dist/sdk/runtime/tmux.d.ts +0 -307
- package/dist/sdk/runtime/tmux.d.ts.map +0 -1
- package/dist/sdk/runtime/version-compat.d.ts +0 -28
- package/dist/sdk/runtime/version-compat.d.ts.map +0 -1
- package/dist/sdk/types.d.ts +0 -435
- package/dist/sdk/types.d.ts.map +0 -1
- package/dist/sdk/worker-shared.d.ts +0 -42
- package/dist/sdk/worker-shared.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts +0 -81
- 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 -37
- package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/batching.d.ts +0 -43
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/batching.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts +0 -14
- 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 -136
- 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 -58
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scratch.d.ts +0 -43
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scratch.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts +0 -37
- package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/open-claude-design/claude/index.d.ts +0 -68
- package/dist/sdk/workflows/builtin/open-claude-design/claude/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/open-claude-design/copilot/index.d.ts +0 -56
- package/dist/sdk/workflows/builtin/open-claude-design/copilot/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/constants.d.ts +0 -72
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/constants.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/design-system.d.ts +0 -46
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/design-system.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/export.d.ts +0 -32
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/export.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/import.d.ts +0 -33
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/import.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/prompts.d.ts +0 -106
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/prompts.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/scan.d.ts +0 -50
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/scan.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/validation.d.ts +0 -12
- package/dist/sdk/workflows/builtin/open-claude-design/helpers/validation.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/open-claude-design/opencode/index.d.ts +0 -58
- package/dist/sdk/workflows/builtin/open-claude-design/opencode/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts +0 -37
- package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts +0 -34
- package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/helpers/copilot-reviewer.d.ts +0 -25
- package/dist/sdk/workflows/builtin/ralph/helpers/copilot-reviewer.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts +0 -69
- package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts +0 -266
- package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts +0 -24
- package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts +0 -33
- package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts.map +0 -1
- package/dist/sdk/workflows/index.d.ts +0 -32
- package/dist/sdk/workflows/index.d.ts.map +0 -1
- package/dist/services/config/additional-instructions.d.ts +0 -67
- package/dist/services/config/additional-instructions.d.ts.map +0 -1
- package/dist/services/config/atomic-config.d.ts +0 -42
- package/dist/services/config/atomic-config.d.ts.map +0 -1
- package/dist/services/config/definitions.d.ts +0 -52
- package/dist/services/config/definitions.d.ts.map +0 -1
- package/dist/services/config/index.d.ts +0 -7
- package/dist/services/config/index.d.ts.map +0 -1
- package/dist/services/config/scm-sync.d.ts +0 -37
- package/dist/services/config/scm-sync.d.ts.map +0 -1
- package/dist/services/config/settings-schema.d.ts +0 -2
- package/dist/services/config/settings-schema.d.ts.map +0 -1
- package/dist/services/system/copy.d.ts +0 -84
- 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/dist/theme/colors.d.ts +0 -35
- package/dist/theme/colors.d.ts.map +0 -1
- package/src/cli.ts +0 -397
- package/src/commands/builtin-registry.ts +0 -37
- package/src/commands/cli/chat/index.test.ts +0 -252
- package/src/commands/cli/chat/index.ts +0 -430
- package/src/commands/cli/chat.ts +0 -8
- package/src/commands/cli/claude-ask-hook.test.ts +0 -128
- package/src/commands/cli/claude-ask-hook.ts +0 -84
- package/src/commands/cli/claude-inflight-hook.test.ts +0 -598
- package/src/commands/cli/claude-inflight-hook.ts +0 -359
- package/src/commands/cli/claude-session-start-hook.ts +0 -61
- package/src/commands/cli/claude-stop-hook.test.ts +0 -317
- package/src/commands/cli/claude-stop-hook.ts +0 -441
- package/src/commands/cli/completions.ts +0 -24
- package/src/commands/cli/config.ts +0 -80
- package/src/commands/cli/footer.tsx +0 -248
- package/src/commands/cli/init/index.ts +0 -41
- package/src/commands/cli/init/onboarding.ts +0 -61
- package/src/commands/cli/init.ts +0 -8
- package/src/commands/cli/management-commands.ts +0 -112
- package/src/commands/cli/session.test.ts +0 -830
- package/src/commands/cli/session.ts +0 -447
- package/src/commands/cli/workflow-command.test.ts +0 -618
- package/src/commands/cli/workflow-inputs.test.ts +0 -353
- package/src/commands/cli/workflow-inputs.ts +0 -266
- package/src/commands/cli/workflow-list.test.ts +0 -235
- package/src/commands/cli/workflow-list.ts +0 -0
- package/src/commands/cli/workflow-status.test.ts +0 -451
- package/src/commands/cli/workflow-status.ts +0 -330
- package/src/commands/cli/workflow.ts +0 -196
- package/src/completions/bash.ts +0 -102
- package/src/completions/fish.ts +0 -136
- package/src/completions/index.ts +0 -7
- package/src/completions/powershell.ts +0 -195
- package/src/completions/zsh.ts +0 -150
- package/src/lib/atomic-temp.test.ts +0 -86
- package/src/lib/atomic-temp.ts +0 -62
- package/src/lib/common-ignore.ts +0 -46
- package/src/lib/merge.ts +0 -103
- package/src/lib/path-root-guard.ts +0 -38
- package/src/lib/spawn.test.ts +0 -109
- package/src/lib/spawn.ts +0 -678
- package/src/lib/terminal-env.test.ts +0 -343
- package/src/lib/terminal-env.ts +0 -100
- package/src/scripts/bump-version.ts +0 -94
- package/src/scripts/bundle-configs.ts +0 -116
- package/src/scripts/clean-dist.test.ts +0 -53
- package/src/scripts/clean-dist.ts +0 -37
- package/src/scripts/constants-base.ts +0 -14
- package/src/scripts/constants.ts +0 -35
- package/src/sdk/components/attached-statusline.tsx +0 -86
- package/src/sdk/components/color-utils.ts +0 -20
- package/src/sdk/components/compact-switcher.tsx +0 -78
- package/src/sdk/components/connectors.test.ts +0 -707
- package/src/sdk/components/connectors.ts +0 -160
- package/src/sdk/components/edge.tsx +0 -13
- package/src/sdk/components/error-boundary.tsx +0 -38
- package/src/sdk/components/graph-theme.ts +0 -37
- package/src/sdk/components/header.tsx +0 -85
- package/src/sdk/components/hooks.ts +0 -21
- package/src/sdk/components/layout.test.ts +0 -1245
- package/src/sdk/components/layout.ts +0 -223
- package/src/sdk/components/node-card.tsx +0 -91
- package/src/sdk/components/orchestrator-panel-contexts.ts +0 -35
- package/src/sdk/components/orchestrator-panel-store.test.ts +0 -847
- package/src/sdk/components/orchestrator-panel-store.ts +0 -187
- package/src/sdk/components/orchestrator-panel-types.ts +0 -23
- package/src/sdk/components/orchestrator-panel.tsx +0 -262
- package/src/sdk/components/renderer-background.ts +0 -49
- package/src/sdk/components/session-graph-panel.tsx +0 -471
- package/src/sdk/components/status-helpers.ts +0 -33
- package/src/sdk/components/statusline.tsx +0 -68
- package/src/sdk/components/tui-diagnostics.ts +0 -273
- package/src/sdk/components/workflow-picker-panel.tsx +0 -1613
- package/src/sdk/define-workflow.test.ts +0 -354
- package/src/sdk/define-workflow.ts +0 -275
- package/src/sdk/errors.test.ts +0 -83
- package/src/sdk/errors.ts +0 -77
- package/src/sdk/index.test.ts +0 -92
- package/src/sdk/index.ts +0 -101
- package/src/sdk/primitives/inputs.ts +0 -48
- package/src/sdk/primitives/metadata.ts +0 -63
- package/src/sdk/primitives/run.ts +0 -81
- package/src/sdk/primitives/sessions.test.ts +0 -594
- package/src/sdk/primitives/sessions.ts +0 -328
- package/src/sdk/providers/claude.ts +0 -1450
- package/src/sdk/providers/copilot.test.ts +0 -365
- package/src/sdk/providers/copilot.ts +0 -185
- package/src/sdk/providers/headless-hil-policy.test.ts +0 -211
- package/src/sdk/providers/opencode.ts +0 -88
- package/src/sdk/registry.ts +0 -132
- package/src/sdk/runtime/attached-footer.ts +0 -155
- package/src/sdk/runtime/cc-debounce.ts +0 -104
- package/src/sdk/runtime/executor-env.ts +0 -45
- package/src/sdk/runtime/executor.test.ts +0 -1321
- package/src/sdk/runtime/executor.ts +0 -2136
- package/src/sdk/runtime/graph-inference.ts +0 -50
- package/src/sdk/runtime/orchestrator-entry.ts +0 -110
- package/src/sdk/runtime/panel.tsx +0 -9
- package/src/sdk/runtime/port-discovery.test.ts +0 -573
- package/src/sdk/runtime/port-discovery.ts +0 -496
- package/src/sdk/runtime/status-writer.test.ts +0 -245
- package/src/sdk/runtime/status-writer.ts +0 -201
- package/src/sdk/runtime/theme.ts +0 -71
- package/src/sdk/runtime/tmux.conf +0 -112
- package/src/sdk/runtime/tmux.ts +0 -785
- package/src/sdk/runtime/version-compat.ts +0 -68
- package/src/sdk/types.ts +0 -548
- package/src/sdk/worker-shared.test.ts +0 -163
- package/src/sdk/worker-shared.ts +0 -155
- package/src/sdk/workflows/builtin/deep-research-codebase/claude/index.ts +0 -569
- package/src/sdk/workflows/builtin/deep-research-codebase/copilot/index.ts +0 -481
- package/src/sdk/workflows/builtin/deep-research-codebase/helpers/batching.ts +0 -65
- package/src/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.ts +0 -24
- package/src/sdk/workflows/builtin/deep-research-codebase/helpers/ignore-by-default.d.ts +0 -8
- package/src/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.ts +0 -958
- package/src/sdk/workflows/builtin/deep-research-codebase/helpers/scout.ts +0 -505
- package/src/sdk/workflows/builtin/deep-research-codebase/helpers/scratch.ts +0 -115
- package/src/sdk/workflows/builtin/deep-research-codebase/opencode/index.ts +0 -530
- package/src/sdk/workflows/builtin/open-claude-design/claude/index.ts +0 -500
- package/src/sdk/workflows/builtin/open-claude-design/copilot/index.ts +0 -508
- package/src/sdk/workflows/builtin/open-claude-design/helpers/constants.ts +0 -159
- package/src/sdk/workflows/builtin/open-claude-design/helpers/design-system.ts +0 -88
- package/src/sdk/workflows/builtin/open-claude-design/helpers/export.ts +0 -193
- package/src/sdk/workflows/builtin/open-claude-design/helpers/import.ts +0 -52
- package/src/sdk/workflows/builtin/open-claude-design/helpers/prompts.ts +0 -1110
- package/src/sdk/workflows/builtin/open-claude-design/helpers/scan.ts +0 -117
- package/src/sdk/workflows/builtin/open-claude-design/helpers/validation.ts +0 -38
- package/src/sdk/workflows/builtin/open-claude-design/opencode/index.ts +0 -610
- package/src/sdk/workflows/builtin/ralph/claude/index.ts +0 -272
- package/src/sdk/workflows/builtin/ralph/copilot/index.ts +0 -298
- package/src/sdk/workflows/builtin/ralph/helpers/copilot-reviewer.ts +0 -105
- package/src/sdk/workflows/builtin/ralph/helpers/git.ts +0 -201
- package/src/sdk/workflows/builtin/ralph/helpers/prompts.ts +0 -1108
- package/src/sdk/workflows/builtin/ralph/helpers/review.ts +0 -33
- package/src/sdk/workflows/builtin/ralph/opencode/index.ts +0 -290
- package/src/sdk/workflows/index.ts +0 -116
- package/src/services/config/additional-instructions.ts +0 -273
- package/src/services/config/atomic-config.ts +0 -210
- package/src/services/config/atomic-global-config.ts +0 -348
- package/src/services/config/config-path.ts +0 -19
- package/src/services/config/definitions.ts +0 -125
- package/src/services/config/index.ts +0 -7
- package/src/services/config/scm-sync.ts +0 -185
- package/src/services/config/settings-schema.ts +0 -2
- package/src/services/config/settings.ts +0 -144
- package/src/services/system/agents.ts +0 -95
- package/src/services/system/auth.test.ts +0 -343
- package/src/services/system/auth.ts +0 -140
- package/src/services/system/auto-sync.ts +0 -128
- package/src/services/system/copy.ts +0 -392
- package/src/services/system/detect.ts +0 -161
- package/src/services/system/file-lock.ts +0 -289
- package/src/services/system/install-ui.ts +0 -296
- package/src/services/system/skills.ts +0 -58
- package/src/theme/colors.ts +0 -96
- package/src/theme/logo.ts +0 -123
- package/src/version.ts +0 -7
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for the headless human-in-the-loop (HIL) auto-deny policy.
|
|
3
|
-
*
|
|
4
|
-
* In unattended runs (headless stages), no human is attached to answer
|
|
5
|
-
* interactive questions from the agent. If the SDK's ask-user tool is
|
|
6
|
-
* not disabled, a query will sit blocked forever. These tests verify
|
|
7
|
-
* each provider's headless integration blocks the relevant tool.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { test, expect, describe } from "bun:test";
|
|
11
|
-
import { chmodSync, mkdtempSync, writeFileSync } from "node:fs";
|
|
12
|
-
import { tmpdir } from "node:os";
|
|
13
|
-
import { join } from "node:path";
|
|
14
|
-
import { mergeDisallowedTools, resolveHeadlessClaudeBin } from "./claude.ts";
|
|
15
|
-
import {
|
|
16
|
-
HEADLESS_OPENCODE_CLIENT_ID,
|
|
17
|
-
withHeadlessOpencodeEnv,
|
|
18
|
-
} from "./opencode.ts";
|
|
19
|
-
import { mergeExcludedTools } from "../runtime/executor.ts";
|
|
20
|
-
|
|
21
|
-
// ---------------------------------------------------------------------------
|
|
22
|
-
// Claude — disallowedTools: ["AskUserQuestion"]
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
|
-
|
|
25
|
-
describe("mergeDisallowedTools (Claude)", () => {
|
|
26
|
-
test("adds AskUserQuestion when no existing disallow list", () => {
|
|
27
|
-
expect(mergeDisallowedTools(undefined, ["AskUserQuestion"])).toEqual([
|
|
28
|
-
"AskUserQuestion",
|
|
29
|
-
]);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
test("preserves caller-supplied entries", () => {
|
|
33
|
-
expect(
|
|
34
|
-
mergeDisallowedTools(["Bash", "WebFetch"], ["AskUserQuestion"]),
|
|
35
|
-
).toEqual(["Bash", "WebFetch", "AskUserQuestion"]);
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
test("does not duplicate AskUserQuestion if caller already disallowed it", () => {
|
|
39
|
-
expect(
|
|
40
|
-
mergeDisallowedTools(["AskUserQuestion", "Bash"], ["AskUserQuestion"]),
|
|
41
|
-
).toEqual(["AskUserQuestion", "Bash"]);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
// ---------------------------------------------------------------------------
|
|
46
|
-
// Copilot — excludedTools: ["ask_user"]
|
|
47
|
-
// ---------------------------------------------------------------------------
|
|
48
|
-
|
|
49
|
-
describe("mergeExcludedTools (Copilot)", () => {
|
|
50
|
-
test("adds ask_user when no existing excluded list", () => {
|
|
51
|
-
expect(mergeExcludedTools(undefined, ["ask_user"])).toEqual(["ask_user"]);
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
test("preserves caller-supplied entries", () => {
|
|
55
|
-
expect(mergeExcludedTools(["bash"], ["ask_user"])).toEqual([
|
|
56
|
-
"bash",
|
|
57
|
-
"ask_user",
|
|
58
|
-
]);
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
test("does not duplicate ask_user if caller already excluded it", () => {
|
|
62
|
-
expect(mergeExcludedTools(["ask_user", "bash"], ["ask_user"])).toEqual([
|
|
63
|
-
"ask_user",
|
|
64
|
-
"bash",
|
|
65
|
-
]);
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
// ---------------------------------------------------------------------------
|
|
70
|
-
// Claude — headless binary resolution pins to the PATH `claude` CLI
|
|
71
|
-
// ---------------------------------------------------------------------------
|
|
72
|
-
|
|
73
|
-
describe("resolveHeadlessClaudeBin", () => {
|
|
74
|
-
const withPath = (path: string, fn: () => void) => {
|
|
75
|
-
const before = process.env.PATH;
|
|
76
|
-
process.env.PATH = path;
|
|
77
|
-
try {
|
|
78
|
-
fn();
|
|
79
|
-
} finally {
|
|
80
|
-
if (before === undefined) delete process.env.PATH;
|
|
81
|
-
else process.env.PATH = before;
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
test("returns the `claude` binary when present on PATH", () => {
|
|
86
|
-
const dir = mkdtempSync(join(tmpdir(), "atomic-claude-bin-"));
|
|
87
|
-
const bin = join(dir, "claude");
|
|
88
|
-
writeFileSync(bin, "#!/usr/bin/env sh\nexit 0\n");
|
|
89
|
-
chmodSync(bin, 0o755);
|
|
90
|
-
withPath(dir, () => {
|
|
91
|
-
expect(resolveHeadlessClaudeBin()).toBe(bin);
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
test("throws with installer URL when PATH has no `claude`", () => {
|
|
96
|
-
const empty = mkdtempSync(join(tmpdir(), "atomic-empty-path-"));
|
|
97
|
-
withPath(empty, () => {
|
|
98
|
-
expect(() => resolveHeadlessClaudeBin()).toThrow(/CLI not found on PATH/);
|
|
99
|
-
expect(() => resolveHeadlessClaudeBin()).toThrow(
|
|
100
|
-
/docs\.claude\.com.*claude-code/,
|
|
101
|
-
);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
// ---------------------------------------------------------------------------
|
|
107
|
-
// OpenCode — OPENCODE_CLIENT override excludes the question tool
|
|
108
|
-
// ---------------------------------------------------------------------------
|
|
109
|
-
//
|
|
110
|
-
// Upstream (`packages/opencode/src/tool/registry.ts`) gates the question
|
|
111
|
-
// tool on `["app","cli","desktop"].includes(OPENCODE_CLIENT)`. The SDK
|
|
112
|
-
// spawns `opencode serve` via cross-spawn and inherits `process.env` at
|
|
113
|
-
// fork time, so scoping the override around `createOpencode()` is
|
|
114
|
-
// sufficient to keep the tool off the registry.
|
|
115
|
-
|
|
116
|
-
describe("withHeadlessOpencodeEnv", () => {
|
|
117
|
-
test("sets OPENCODE_CLIENT to the headless id while fn runs", async () => {
|
|
118
|
-
const seen: string | undefined = await withHeadlessOpencodeEnv(async () =>
|
|
119
|
-
process.env.OPENCODE_CLIENT,
|
|
120
|
-
);
|
|
121
|
-
expect(seen).toBe(HEADLESS_OPENCODE_CLIENT_ID);
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
test("restores prior value when it was set before", async () => {
|
|
125
|
-
const before = process.env.OPENCODE_CLIENT;
|
|
126
|
-
process.env.OPENCODE_CLIENT = "preexisting";
|
|
127
|
-
try {
|
|
128
|
-
await withHeadlessOpencodeEnv(async () => {});
|
|
129
|
-
expect(process.env.OPENCODE_CLIENT).toBe("preexisting");
|
|
130
|
-
} finally {
|
|
131
|
-
if (before === undefined) delete process.env.OPENCODE_CLIENT;
|
|
132
|
-
else process.env.OPENCODE_CLIENT = before;
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
test("unsets the variable when it was unset before", async () => {
|
|
137
|
-
const before = process.env.OPENCODE_CLIENT;
|
|
138
|
-
delete process.env.OPENCODE_CLIENT;
|
|
139
|
-
try {
|
|
140
|
-
await withHeadlessOpencodeEnv(async () => {});
|
|
141
|
-
expect(
|
|
142
|
-
Object.prototype.hasOwnProperty.call(process.env, "OPENCODE_CLIENT"),
|
|
143
|
-
).toBe(false);
|
|
144
|
-
} finally {
|
|
145
|
-
if (before === undefined) delete process.env.OPENCODE_CLIENT;
|
|
146
|
-
else process.env.OPENCODE_CLIENT = before;
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
test("restores prior value even when fn throws", async () => {
|
|
151
|
-
const before = process.env.OPENCODE_CLIENT;
|
|
152
|
-
process.env.OPENCODE_CLIENT = "preexisting";
|
|
153
|
-
try {
|
|
154
|
-
await expect(
|
|
155
|
-
withHeadlessOpencodeEnv(async () => {
|
|
156
|
-
throw new Error("boom");
|
|
157
|
-
}),
|
|
158
|
-
).rejects.toThrow("boom");
|
|
159
|
-
expect(process.env.OPENCODE_CLIENT).toBe("preexisting");
|
|
160
|
-
} finally {
|
|
161
|
-
if (before === undefined) delete process.env.OPENCODE_CLIENT;
|
|
162
|
-
else process.env.OPENCODE_CLIENT = before;
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
test("is not one of the values that would enable the question tool", () => {
|
|
167
|
-
// Guard against accidental future edits: picking "cli", "app", or
|
|
168
|
-
// "desktop" here would silently re-enable the interactive question tool
|
|
169
|
-
// and make headless stages hang again.
|
|
170
|
-
expect(["app", "cli", "desktop"]).not.toContain(
|
|
171
|
-
HEADLESS_OPENCODE_CLIENT_ID,
|
|
172
|
-
);
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
test("concurrent uses do not leak the override after both unwind", async () => {
|
|
176
|
-
// Race regression: without a reference counter, the second concurrent
|
|
177
|
-
// stage reads the first's already-overridden value as its "prior" and
|
|
178
|
-
// restores "sdk" instead of the true original on unwind.
|
|
179
|
-
const before = process.env.OPENCODE_CLIENT;
|
|
180
|
-
delete process.env.OPENCODE_CLIENT;
|
|
181
|
-
try {
|
|
182
|
-
let releaseA!: () => void;
|
|
183
|
-
let releaseB!: () => void;
|
|
184
|
-
const waitA = new Promise<void>((r) => {
|
|
185
|
-
releaseA = r;
|
|
186
|
-
});
|
|
187
|
-
const waitB = new Promise<void>((r) => {
|
|
188
|
-
releaseB = r;
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
const a = withHeadlessOpencodeEnv(async () => {
|
|
192
|
-
await waitA;
|
|
193
|
-
});
|
|
194
|
-
const b = withHeadlessOpencodeEnv(async () => {
|
|
195
|
-
await waitB;
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
// Release A first, then B — the order that exposes the naive bug.
|
|
199
|
-
releaseA();
|
|
200
|
-
releaseB();
|
|
201
|
-
await Promise.all([a, b]);
|
|
202
|
-
|
|
203
|
-
expect(
|
|
204
|
-
Object.prototype.hasOwnProperty.call(process.env, "OPENCODE_CLIENT"),
|
|
205
|
-
).toBe(false);
|
|
206
|
-
} finally {
|
|
207
|
-
if (before === undefined) delete process.env.OPENCODE_CLIENT;
|
|
208
|
-
else process.env.OPENCODE_CLIENT = before;
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
});
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenCode workflow source validation + headless env helper.
|
|
3
|
-
*
|
|
4
|
-
* Checks that OpenCode workflow source files use the runtime-managed
|
|
5
|
-
* `s.client` and `s.session` instead of manual SDK client creation, and
|
|
6
|
-
* exports the `OPENCODE_CLIENT` override used to keep the interactive
|
|
7
|
-
* `question` tool out of headless stages.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { createProviderValidator } from "../types.ts";
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Client identifier passed to SDK-spawned OpenCode subprocesses in headless
|
|
14
|
-
* stages.
|
|
15
|
-
*
|
|
16
|
-
* OpenCode only registers its interactive `question` tool when
|
|
17
|
-
* `OPENCODE_CLIENT` is one of `"app" | "cli" | "desktop"` (see
|
|
18
|
-
* `packages/opencode/src/tool/registry.ts` upstream — the `questionEnabled`
|
|
19
|
-
* gate). In unattended runs nobody is attached to answer, so we identify
|
|
20
|
-
* ourselves as `"sdk"` to keep the tool off the registry entirely. This
|
|
21
|
-
* mirrors how the upstream ACP integration excludes the tool by default
|
|
22
|
-
* (`packages/opencode/src/cli/cmd/acp.ts` sets `OPENCODE_CLIENT=acp`).
|
|
23
|
-
*/
|
|
24
|
-
export const HEADLESS_OPENCODE_CLIENT_ID = "sdk";
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Run `fn` with `process.env.OPENCODE_CLIENT` set to
|
|
28
|
-
* `HEADLESS_OPENCODE_CLIENT_ID`, restoring the prior value afterward. The
|
|
29
|
-
* SDK spawns `opencode serve` via `cross-spawn` and inherits the parent's
|
|
30
|
-
* env at spawn time, so scoping the override around `createOpencode(...)`
|
|
31
|
-
* is enough to influence the subprocess without leaking into later work.
|
|
32
|
-
*
|
|
33
|
-
* A reference counter keeps the override in place while any concurrent
|
|
34
|
-
* headless spawn is still running — otherwise two parallel stages can
|
|
35
|
-
* race, and the second one restores the first one's already-overridden
|
|
36
|
-
* value as if it were the original. The captured "pre-override" state is
|
|
37
|
-
* only read on the outermost entry and only replayed on the outermost
|
|
38
|
-
* exit.
|
|
39
|
-
*
|
|
40
|
-
* Prior value handling is explicit so we distinguish "was unset" from
|
|
41
|
-
* "was set to empty string".
|
|
42
|
-
*/
|
|
43
|
-
let headlessEnvDepth = 0;
|
|
44
|
-
let headlessEnvHadPrior = false;
|
|
45
|
-
let headlessEnvPrior: string | undefined;
|
|
46
|
-
|
|
47
|
-
export async function withHeadlessOpencodeEnv<T>(
|
|
48
|
-
fn: () => Promise<T>,
|
|
49
|
-
): Promise<T> {
|
|
50
|
-
if (headlessEnvDepth === 0) {
|
|
51
|
-
headlessEnvHadPrior = Object.prototype.hasOwnProperty.call(
|
|
52
|
-
process.env,
|
|
53
|
-
"OPENCODE_CLIENT",
|
|
54
|
-
);
|
|
55
|
-
headlessEnvPrior = process.env.OPENCODE_CLIENT;
|
|
56
|
-
}
|
|
57
|
-
headlessEnvDepth++;
|
|
58
|
-
try {
|
|
59
|
-
process.env.OPENCODE_CLIENT = HEADLESS_OPENCODE_CLIENT_ID;
|
|
60
|
-
return await fn();
|
|
61
|
-
} finally {
|
|
62
|
-
headlessEnvDepth--;
|
|
63
|
-
if (headlessEnvDepth === 0) {
|
|
64
|
-
if (headlessEnvHadPrior) process.env.OPENCODE_CLIENT = headlessEnvPrior;
|
|
65
|
-
else delete process.env.OPENCODE_CLIENT;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Validate an OpenCode workflow source file for common mistakes.
|
|
72
|
-
*/
|
|
73
|
-
export const validateOpenCodeWorkflow = createProviderValidator([
|
|
74
|
-
{
|
|
75
|
-
pattern: /\bcreateOpencodeClient\b/,
|
|
76
|
-
rule: "opencode/manual-client",
|
|
77
|
-
message:
|
|
78
|
-
"Manual createOpencodeClient() call detected. Use s.client instead — " +
|
|
79
|
-
"the runtime auto-creates the client. Pass client config as the second arg to ctx.stage().",
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
pattern: /\bclient\.session\.create\b/,
|
|
83
|
-
rule: "opencode/manual-session",
|
|
84
|
-
message:
|
|
85
|
-
"Manual client.session.create() call detected. Use s.session instead — " +
|
|
86
|
-
"the runtime auto-creates the session. Pass session config as the third arg to ctx.stage().",
|
|
87
|
-
},
|
|
88
|
-
]);
|
package/src/sdk/registry.ts
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workflow Registry — immutable, chainable registry of WorkflowDefinition objects.
|
|
3
|
-
*
|
|
4
|
-
* Key scheme: `${agent}/${name}` — each (agent, name) pair is unique.
|
|
5
|
-
* Registering the same key twice throws — no silent overwrites.
|
|
6
|
-
* `register()` is immutable: returns a new Registry, original is unchanged.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type { AgentType, Registry, RegistrableWorkflow, WorkflowDefinition } from "./types.ts";
|
|
10
|
-
import { validateCopilotWorkflow } from "./providers/copilot.ts";
|
|
11
|
-
import { validateOpenCodeWorkflow } from "./providers/opencode.ts";
|
|
12
|
-
import { validateClaudeWorkflow } from "./providers/claude.ts";
|
|
13
|
-
import type { ValidationWarning } from "./types.ts";
|
|
14
|
-
|
|
15
|
-
// Registry type is declared in types.ts; re-export it from here for convenience.
|
|
16
|
-
export type { Registry };
|
|
17
|
-
|
|
18
|
-
// ─── Validator dispatch ──────────────────────────────────────────────────────
|
|
19
|
-
|
|
20
|
-
/** Map agent type to its provider validator. */
|
|
21
|
-
const providerValidators: Record<
|
|
22
|
-
AgentType,
|
|
23
|
-
(source: string) => ValidationWarning[]
|
|
24
|
-
> = {
|
|
25
|
-
claude: validateClaudeWorkflow,
|
|
26
|
-
opencode: validateOpenCodeWorkflow,
|
|
27
|
-
copilot: validateCopilotWorkflow,
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Run provider-specific source validation for a workflow definition.
|
|
32
|
-
*
|
|
33
|
-
* Derives source text from `wf.run.toString()` — the function body contains
|
|
34
|
-
* the SDK API calls the validators check via regex. Hard failures (thrown
|
|
35
|
-
* errors from the validator itself) propagate; warnings are returned.
|
|
36
|
-
*/
|
|
37
|
-
function runProviderValidation(wf: WorkflowDefinition): ValidationWarning[] {
|
|
38
|
-
const validator = providerValidators[wf.agent];
|
|
39
|
-
const source = wf.run.toString();
|
|
40
|
-
return validator(source);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Validate a single workflow definition at registration time.
|
|
45
|
-
* Throws on hard failures; logs warnings via console.warn with `[registry]` prefix.
|
|
46
|
-
*/
|
|
47
|
-
function validateAtRegistration(wf: WorkflowDefinition): void {
|
|
48
|
-
const warnings = runProviderValidation(wf);
|
|
49
|
-
for (const w of warnings) {
|
|
50
|
-
console.warn(
|
|
51
|
-
`[registry] workflow "${wf.agent}/${wf.name}" — ${w.rule}: ${w.message}`,
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// ─── Implementation ──────────────────────────────────────────────────────────
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Internal implementation — typed separately from the public `Registry<T>`
|
|
60
|
-
* so the accumulating generic can be rebuilt on each `register()` call
|
|
61
|
-
* without leaking the implementation detail.
|
|
62
|
-
*/
|
|
63
|
-
class RegistryImpl<T extends Record<string, WorkflowDefinition>> {
|
|
64
|
-
/** Immutable snapshot of registered definitions, keyed by `${agent}/${name}`. */
|
|
65
|
-
private readonly map: ReadonlyMap<string, WorkflowDefinition>;
|
|
66
|
-
|
|
67
|
-
constructor(map: ReadonlyMap<string, WorkflowDefinition>) {
|
|
68
|
-
this.map = map;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
register<W extends RegistrableWorkflow>(
|
|
72
|
-
wf: W,
|
|
73
|
-
): Registry<T & Record<`${W["agent"]}/${W["name"]}`, W>> {
|
|
74
|
-
const key = `${wf.agent}/${wf.name}` as `${W["agent"]}/${W["name"]}`;
|
|
75
|
-
|
|
76
|
-
if (this.map.has(key)) {
|
|
77
|
-
throw new Error(
|
|
78
|
-
`[atomic] Duplicate workflow registration: "${key}" is already registered. ` +
|
|
79
|
-
`Each (agent, name) pair must be unique.`,
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
validateAtRegistration(wf);
|
|
84
|
-
|
|
85
|
-
const next = new Map(this.map);
|
|
86
|
-
next.set(key, wf);
|
|
87
|
-
return new RegistryImpl<T & Record<`${W["agent"]}/${W["name"]}`, W>>(next) as Registry<
|
|
88
|
-
T & Record<`${W["agent"]}/${W["name"]}`, W>
|
|
89
|
-
>;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
get<K extends keyof T>(key: K): T[K] {
|
|
93
|
-
const entry = this.map.get(key as string);
|
|
94
|
-
if (!entry) {
|
|
95
|
-
throw new Error(`[atomic] Workflow "${String(key)}" is not registered.`);
|
|
96
|
-
}
|
|
97
|
-
return entry as T[K];
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
has(key: string): boolean {
|
|
101
|
-
return this.map.has(key);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
list(): readonly WorkflowDefinition[] {
|
|
105
|
-
return Object.freeze(Array.from(this.map.values()));
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
resolve(name: string, agent: AgentType): WorkflowDefinition | undefined {
|
|
109
|
-
return this.map.get(`${agent}/${name}`);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// ─── Factory ─────────────────────────────────────────────────────────────────
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Create an empty workflow registry.
|
|
117
|
-
*
|
|
118
|
-
* @example
|
|
119
|
-
* ```typescript
|
|
120
|
-
* import { createRegistry } from "@bastani/atomic/workflows";
|
|
121
|
-
* import { myWorkflow } from "./workflows/my-workflow.workflow";
|
|
122
|
-
*
|
|
123
|
-
* const registry = createRegistry()
|
|
124
|
-
* .register(myWorkflow);
|
|
125
|
-
* ```
|
|
126
|
-
*/
|
|
127
|
-
export function createRegistry(): Registry<Record<string, never>> {
|
|
128
|
-
return new RegistryImpl<Record<string, never>>(new Map()) as Registry<Record<string, never>>;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// ─── Re-export validators for external use ───────────────────────────────────
|
|
132
|
-
export { validateCopilotWorkflow, validateOpenCodeWorkflow, validateClaudeWorkflow };
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Helper for spawning the attached `atomic _footer` pane inside an agent
|
|
3
|
-
* tmux window.
|
|
4
|
-
*
|
|
5
|
-
* Shared between the workflow executor (per-agent windows) and the chat
|
|
6
|
-
* command (single-agent window). Splits the target pane vertically so the
|
|
7
|
-
* top pane keeps running the agent CLI and the bottom pane hosts the
|
|
8
|
-
* React footer.
|
|
9
|
-
*
|
|
10
|
-
* Resolves the CLI entrypoint relative to this module (runtime/ lives at
|
|
11
|
-
* src/sdk/runtime/, so ../../cli.ts is the CLI). `process.argv[1]` points
|
|
12
|
-
* at the worker entrypoint when called from the orchestrator,
|
|
13
|
-
* so it can't be used here.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import { posix, win32 } from "node:path";
|
|
17
|
-
import type { AgentType } from "../types.ts";
|
|
18
|
-
import { getMuxBinary, tmuxRun } from "./tmux.ts";
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Rows reserved for the footer pane. Matches the single-row height of
|
|
22
|
-
* `AttachedStatusline` so the agent pane absorbs all remaining space.
|
|
23
|
-
*/
|
|
24
|
-
const FOOTER_PANE_LINES = 1;
|
|
25
|
-
|
|
26
|
-
/** Escape a string for safe interpolation inside a bash double-quoted string. */
|
|
27
|
-
function escBash(s: string): string {
|
|
28
|
-
return s
|
|
29
|
-
.replace(/\x00/g, "")
|
|
30
|
-
.replace(/[\n\r]+/g, " ")
|
|
31
|
-
.replace(/[\\"$`!]/g, "\\$&");
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/** Escape a string as a PowerShell single-quoted literal. */
|
|
35
|
-
function quotePwshLiteral(s: string): string {
|
|
36
|
-
return `'${s
|
|
37
|
-
.replace(/\x00/g, "")
|
|
38
|
-
.replace(/[\n\r]+/g, " ")
|
|
39
|
-
.replace(/'/g, "''")}'`;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function encodePwshCommand(script: string): string {
|
|
43
|
-
return Buffer.from(script, "utf16le").toString("base64");
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export function resolveAttachedFooterCliPath(
|
|
47
|
-
runtimeDir = import.meta.dir,
|
|
48
|
-
platform: NodeJS.Platform = process.platform,
|
|
49
|
-
): string {
|
|
50
|
-
return platform === "win32"
|
|
51
|
-
? win32.join(runtimeDir, "..", "..", "cli.ts")
|
|
52
|
-
: posix.join(runtimeDir, "..", "..", "cli.ts");
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export function buildAttachedFooterCommand({
|
|
56
|
-
runtime,
|
|
57
|
-
cliPath,
|
|
58
|
-
windowName,
|
|
59
|
-
agentType,
|
|
60
|
-
platform = process.platform,
|
|
61
|
-
}: {
|
|
62
|
-
runtime: string;
|
|
63
|
-
cliPath: string;
|
|
64
|
-
windowName: string;
|
|
65
|
-
agentType?: AgentType;
|
|
66
|
-
platform?: NodeJS.Platform;
|
|
67
|
-
}): string {
|
|
68
|
-
if (platform === "win32") {
|
|
69
|
-
const script = [
|
|
70
|
-
quotePwshLiteral(runtime),
|
|
71
|
-
quotePwshLiteral(cliPath),
|
|
72
|
-
quotePwshLiteral("_footer"),
|
|
73
|
-
quotePwshLiteral("--name"),
|
|
74
|
-
quotePwshLiteral(windowName),
|
|
75
|
-
...(agentType
|
|
76
|
-
? [quotePwshLiteral("--agent"), quotePwshLiteral(agentType)]
|
|
77
|
-
: []),
|
|
78
|
-
].join(" ");
|
|
79
|
-
return `pwsh -NoProfile -EncodedCommand ${encodePwshCommand(`& ${script}`)}`;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const agentFlag = agentType ? ` --agent "${escBash(agentType)}"` : "";
|
|
83
|
-
return (
|
|
84
|
-
`"${escBash(runtime)}" "${escBash(cliPath)}" _footer ` +
|
|
85
|
-
`--name "${escBash(windowName)}"${agentFlag}`
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export function buildAttachedFooterCloseHooks(
|
|
90
|
-
agentPaneId: string,
|
|
91
|
-
footerPaneId: string,
|
|
92
|
-
options: { guardAgentPane?: boolean } = {},
|
|
93
|
-
): Array<{ event: string; command: string }> {
|
|
94
|
-
const killFooter = `kill-pane -t ${footerPaneId}`;
|
|
95
|
-
const paneExitedCommand = options.guardAgentPane === false
|
|
96
|
-
? killFooter
|
|
97
|
-
: `if -F '#{==:#{hook_pane},${agentPaneId}}' '${killFooter}'`;
|
|
98
|
-
|
|
99
|
-
return [
|
|
100
|
-
{ event: "pane-exited", command: paneExitedCommand },
|
|
101
|
-
{ event: "after-kill-pane", command: killFooter },
|
|
102
|
-
];
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
function muxSupportsHookPaneFormat(): boolean {
|
|
106
|
-
const binary = getMuxBinary();
|
|
107
|
-
return binary !== "psmux" && binary !== "pmux";
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export function spawnAttachedFooter(
|
|
111
|
-
windowName: string,
|
|
112
|
-
paneId: string,
|
|
113
|
-
agentType?: AgentType,
|
|
114
|
-
): void {
|
|
115
|
-
const runtime = process.execPath;
|
|
116
|
-
if (!runtime) return;
|
|
117
|
-
const cliPath = resolveAttachedFooterCliPath();
|
|
118
|
-
const cmd = buildAttachedFooterCommand({
|
|
119
|
-
runtime,
|
|
120
|
-
cliPath,
|
|
121
|
-
windowName,
|
|
122
|
-
agentType,
|
|
123
|
-
});
|
|
124
|
-
const split = tmuxRun([
|
|
125
|
-
"split-window",
|
|
126
|
-
"-t", paneId,
|
|
127
|
-
"-v", "-l", String(FOOTER_PANE_LINES), "-d",
|
|
128
|
-
"-P", "-F", "#{pane_id}",
|
|
129
|
-
cmd,
|
|
130
|
-
]);
|
|
131
|
-
if (!split.ok) return;
|
|
132
|
-
const footerPaneId = split.stdout.trim();
|
|
133
|
-
if (!footerPaneId) return;
|
|
134
|
-
tmuxRun(["select-pane", "-t", paneId]);
|
|
135
|
-
for (const hook of buildAttachedFooterCloseHooks(paneId, footerPaneId, {
|
|
136
|
-
guardAgentPane: muxSupportsHookPaneFormat(),
|
|
137
|
-
})) {
|
|
138
|
-
tmuxRun([
|
|
139
|
-
"set-hook",
|
|
140
|
-
"-w", "-t", footerPaneId,
|
|
141
|
-
hook.event,
|
|
142
|
-
hook.command,
|
|
143
|
-
]);
|
|
144
|
-
}
|
|
145
|
-
// Pin the footer to FOOTER_PANE_LINES on every resize so the agent pane
|
|
146
|
-
// absorbs all new space. Tmux's default proportional redistribution
|
|
147
|
-
// would otherwise grow the footer on larger windows. Window-scoped
|
|
148
|
-
// (`-w`) so other windows (e.g. the orchestrator graph) are unaffected.
|
|
149
|
-
tmuxRun([
|
|
150
|
-
"set-hook",
|
|
151
|
-
"-w", "-t", footerPaneId,
|
|
152
|
-
"window-resized",
|
|
153
|
-
`resize-pane -t ${footerPaneId} -y ${FOOTER_PANE_LINES}`,
|
|
154
|
-
]);
|
|
155
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
/**
|
|
3
|
-
* Ctrl+C debounce helper for Atomic-managed tmux panes.
|
|
4
|
-
*
|
|
5
|
-
* Invoked from `tmux.conf` on every root-table Ctrl+C:
|
|
6
|
-
*
|
|
7
|
-
* bind -n C-c run-shell -b '"#{@atomic-bun}" "#{@atomic-cc-debounce}" "#{pane_id}"'
|
|
8
|
-
*
|
|
9
|
-
* The binding sits on the shared atomic tmux server, so the debounce
|
|
10
|
-
* applies uniformly to every pane — Claude Code, OpenCode, and Copilot
|
|
11
|
-
* CLI, in both chat and workflow sessions.
|
|
12
|
-
*
|
|
13
|
-
* Rule: forward Ctrl+C only if the previous press is more than QUIET_MS
|
|
14
|
-
* ago. The state file is touched on *every* press (forwarded or
|
|
15
|
-
* swallowed) so sustained spam keeps extending the cooldown instead of
|
|
16
|
-
* letting a press leak through every QUIET_MS interval — which is what
|
|
17
|
-
* would otherwise still trigger an agent CLI's "double-tap to exit"
|
|
18
|
-
* confirmation.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
import { join } from "node:path";
|
|
22
|
-
import { readFileSync, writeFileSync } from "node:fs";
|
|
23
|
-
import { ensureAtomicTempDir } from "../../lib/atomic-temp.ts";
|
|
24
|
-
|
|
25
|
-
/** Quiet period (ms) the user must leave between presses for the next
|
|
26
|
-
* one to be forwarded. Must exceed every integrated agent's exit-confirm
|
|
27
|
-
* window — Claude Code's is the widest (~1.5 s), so 1200 ms is a safe
|
|
28
|
-
* margin that still feels responsive for legitimate double-interrupts. */
|
|
29
|
-
export const QUIET_MS = 1200;
|
|
30
|
-
|
|
31
|
-
/** Pure decision helper — exported so tests can exercise it without
|
|
32
|
-
* touching the filesystem or spawning tmux. Returns `true` when the
|
|
33
|
-
* press should be forwarded, `false` when it should be swallowed. */
|
|
34
|
-
export function shouldForward(
|
|
35
|
-
nowMs: number,
|
|
36
|
-
lastMs: number,
|
|
37
|
-
quietMs: number = QUIET_MS,
|
|
38
|
-
): boolean {
|
|
39
|
-
return nowMs - lastMs > quietMs;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/** Filesystem-safe transform for a tmux pane id (typically `%0`, `%12`).
|
|
43
|
-
* A defensive sanitise keeps the path portable if tmux ever hands us
|
|
44
|
-
* something with shell metacharacters. */
|
|
45
|
-
function stateFileFor(paneId: string): string {
|
|
46
|
-
const safe = paneId.replace(/[^a-zA-Z0-9_%-]/g, "_");
|
|
47
|
-
return join(ensureAtomicTempDir(), `atomic-cc-${safe}`);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function readLastPress(stateFile: string): number {
|
|
51
|
-
try {
|
|
52
|
-
const parsed = Number.parseInt(readFileSync(stateFile, "utf8").trim(), 10);
|
|
53
|
-
return Number.isFinite(parsed) ? parsed : 0;
|
|
54
|
-
} catch {
|
|
55
|
-
return 0;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/** Resolve the multiplexer binary for `tmux send-keys`. When `run-shell`
|
|
60
|
-
* spawns this script the `TMUX` / `PSMUX` env var is already set to the
|
|
61
|
-
* atomic socket, so plain `tmux` / `psmux` routes correctly without
|
|
62
|
-
* `-L`. We only need to pick the right executable name for the host. */
|
|
63
|
-
function resolveMuxBinary(): string {
|
|
64
|
-
if (process.platform === "win32") {
|
|
65
|
-
for (const candidate of ["psmux", "pmux", "tmux"]) {
|
|
66
|
-
if (Bun.which(candidate)) return candidate;
|
|
67
|
-
}
|
|
68
|
-
return "psmux";
|
|
69
|
-
}
|
|
70
|
-
return "tmux";
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function main(): number {
|
|
74
|
-
const paneId = process.argv[2];
|
|
75
|
-
if (!paneId) return 0;
|
|
76
|
-
|
|
77
|
-
const stateFile = stateFileFor(paneId);
|
|
78
|
-
const now = Date.now();
|
|
79
|
-
const last = readLastPress(stateFile);
|
|
80
|
-
|
|
81
|
-
// Always bump the timestamp so held-down or spammed presses keep
|
|
82
|
-
// extending the cooldown — this is what turns the single-press gate
|
|
83
|
-
// into a true quiet-period debounce.
|
|
84
|
-
try {
|
|
85
|
-
writeFileSync(stateFile, String(now));
|
|
86
|
-
} catch {
|
|
87
|
-
// Best-effort: if the tmp dir is read-only we'd rather forward every
|
|
88
|
-
// press than drop them silently.
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (!shouldForward(now, last)) return 0;
|
|
92
|
-
|
|
93
|
-
const proc = Bun.spawnSync({
|
|
94
|
-
cmd: [resolveMuxBinary(), "send-keys", "-t", paneId, "C-c"],
|
|
95
|
-
stdin: "ignore",
|
|
96
|
-
stdout: "ignore",
|
|
97
|
-
stderr: "ignore",
|
|
98
|
-
});
|
|
99
|
-
return proc.exitCode ?? 0;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (import.meta.main) {
|
|
103
|
-
process.exit(main());
|
|
104
|
-
}
|