@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
package/src/sdk/runtime/tmux.ts
DELETED
|
@@ -1,785 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* tmux session and pane management utilities.
|
|
3
|
-
*
|
|
4
|
-
* Provides low-level tmux operations for the workflow runtime:
|
|
5
|
-
* creating sessions, splitting panes, spawning commands, capturing output,
|
|
6
|
-
* sending keystrokes, and pane state detection.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { join } from "node:path";
|
|
10
|
-
import { requiredMuxBinaryCandidatesForPlatform } from "../../lib/spawn.ts";
|
|
11
|
-
import { writeFileSync, unlinkSync } from "node:fs";
|
|
12
|
-
import type { Subprocess } from "bun";
|
|
13
|
-
import { atomicTempPath } from "../../lib/atomic-temp.ts";
|
|
14
|
-
|
|
15
|
-
// ---------------------------------------------------------------------------
|
|
16
|
-
// Constants
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
|
|
19
|
-
/** Dedicated tmux socket name — isolates Atomic sessions from the user's default server. */
|
|
20
|
-
export const SOCKET_NAME = "atomic";
|
|
21
|
-
|
|
22
|
-
/** Path to the bundled tmux config (shared by tmux and psmux). */
|
|
23
|
-
const CONFIG_PATH = join(import.meta.dir, "tmux.conf");
|
|
24
|
-
|
|
25
|
-
/** Path to the bundled Ctrl+C debounce script (TypeScript, run via bun
|
|
26
|
-
* so the same file handles Linux, macOS, and Windows without shell
|
|
27
|
-
* dialect gymnastics). Referenced from tmux.conf. */
|
|
28
|
-
const CC_DEBOUNCE_PATH = join(import.meta.dir, "cc-debounce.ts");
|
|
29
|
-
|
|
30
|
-
/** Discriminated result from a tmux command execution. */
|
|
31
|
-
export type TmuxResult =
|
|
32
|
-
| { ok: true; stdout: string }
|
|
33
|
-
| { ok: false; stderr: string };
|
|
34
|
-
|
|
35
|
-
// ---------------------------------------------------------------------------
|
|
36
|
-
// Core tmux primitives
|
|
37
|
-
// ---------------------------------------------------------------------------
|
|
38
|
-
|
|
39
|
-
// ---------------------------------------------------------------------------
|
|
40
|
-
// Core tmux primitives
|
|
41
|
-
// ---------------------------------------------------------------------------
|
|
42
|
-
|
|
43
|
-
/** Cached resolved multiplexer binary path. Resolved once on first use. */
|
|
44
|
-
let resolvedMuxBinary: string | null | undefined; // undefined = not yet resolved
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Resolve the terminal multiplexer binary for the current platform.
|
|
48
|
-
*
|
|
49
|
-
* On Windows, tries psmux → pmux. Do not accept arbitrary `tmux.exe` because
|
|
50
|
-
* that can be a non-native shim and would prevent the psmux installer from
|
|
51
|
-
* running.
|
|
52
|
-
* On Unix/macOS, uses tmux directly.
|
|
53
|
-
*
|
|
54
|
-
* Returns the binary name (not the full path) or null if none is found.
|
|
55
|
-
* The result is cached after the first call.
|
|
56
|
-
*/
|
|
57
|
-
export function getMuxBinary(): string | null {
|
|
58
|
-
if (resolvedMuxBinary !== undefined) return resolvedMuxBinary;
|
|
59
|
-
|
|
60
|
-
// Bun.which() reads PATH from the original process environment at startup
|
|
61
|
-
// and ignores runtime mutations to process.env.PATH. Pass PATH explicitly
|
|
62
|
-
// so that callers who modify PATH (e.g. tests) get correct results.
|
|
63
|
-
const pathOpt = { PATH: process.env.PATH ?? "" };
|
|
64
|
-
|
|
65
|
-
for (const candidate of requiredMuxBinaryCandidatesForPlatform()) {
|
|
66
|
-
if (Bun.which(candidate, pathOpt)) {
|
|
67
|
-
resolvedMuxBinary = candidate;
|
|
68
|
-
return resolvedMuxBinary;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
resolvedMuxBinary = null;
|
|
73
|
-
return resolvedMuxBinary;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Reset the cached multiplexer binary resolution.
|
|
78
|
-
* Call after installing tmux/psmux to force re-detection.
|
|
79
|
-
*/
|
|
80
|
-
export function resetMuxBinaryCache(): void {
|
|
81
|
-
resolvedMuxBinary = undefined;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Check if tmux is installed and available.
|
|
86
|
-
*/
|
|
87
|
-
export function isTmuxInstalled(): boolean {
|
|
88
|
-
return getMuxBinary() !== null;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Check if we're currently inside a tmux session.
|
|
93
|
-
*/
|
|
94
|
-
export function isInsideTmux(): boolean {
|
|
95
|
-
return process.env.TMUX !== undefined || process.env.PSMUX !== undefined;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Check if we're inside the atomic tmux socket specifically.
|
|
100
|
-
*
|
|
101
|
-
* The `TMUX` env var has the format `<socket_path>,<pid>,<index>`.
|
|
102
|
-
* On Unix this looks like `/tmp/tmux-1000/atomic,12345,0` when the
|
|
103
|
-
* socket name is "atomic".
|
|
104
|
-
*/
|
|
105
|
-
export function isInsideAtomicSocket(): boolean {
|
|
106
|
-
const tmuxEnv = process.env.TMUX ?? process.env.PSMUX ?? "";
|
|
107
|
-
// Socket path is everything before the first comma.
|
|
108
|
-
const socketPath = tmuxEnv.split(",")[0] ?? "";
|
|
109
|
-
// The socket name is the last path segment.
|
|
110
|
-
const socketName = socketPath.split("/").pop() ?? "";
|
|
111
|
-
return socketName === SOCKET_NAME;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Run a tmux command and return a result object.
|
|
116
|
-
* Prefers this over the throwing `tmux()` for cases where callers
|
|
117
|
-
* need to handle failure gracefully.
|
|
118
|
-
*/
|
|
119
|
-
export function tmuxRun(args: string[]): TmuxResult {
|
|
120
|
-
const binary = getMuxBinary();
|
|
121
|
-
if (!binary) {
|
|
122
|
-
return { ok: false, stderr: "No terminal multiplexer (tmux/psmux) found on PATH" };
|
|
123
|
-
}
|
|
124
|
-
const fullArgs = ["-f", CONFIG_PATH, "-L", SOCKET_NAME, ...args];
|
|
125
|
-
const result = Bun.spawnSync({
|
|
126
|
-
cmd: [binary, ...fullArgs],
|
|
127
|
-
stdout: "pipe",
|
|
128
|
-
stderr: "pipe",
|
|
129
|
-
});
|
|
130
|
-
if (!result.success) {
|
|
131
|
-
return { ok: false, stderr: result.stderr.toString().trim() };
|
|
132
|
-
}
|
|
133
|
-
return { ok: true, stdout: result.stdout.toString().trim() };
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Run a tmux command and return stdout. Throws on failure.
|
|
138
|
-
*/
|
|
139
|
-
function tmux(args: string[]): string {
|
|
140
|
-
const result = tmuxRun(args);
|
|
141
|
-
if (!result.ok) {
|
|
142
|
-
throw new Error(`tmux ${args[0]} failed: ${result.stderr}`);
|
|
143
|
-
}
|
|
144
|
-
return result.stdout;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Run a tmux command, ignoring output. Throws on failure.
|
|
149
|
-
*/
|
|
150
|
-
function tmuxExec(args: string[]): void {
|
|
151
|
-
const result = tmuxRun(args);
|
|
152
|
-
if (!result.ok) {
|
|
153
|
-
throw new Error(`tmux ${args[0]} failed: ${result.stderr}`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// ---------------------------------------------------------------------------
|
|
158
|
-
// Session and pane management
|
|
159
|
-
// ---------------------------------------------------------------------------
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Build `-e KEY=VALUE` argument pairs for tmux environment flags.
|
|
163
|
-
* Supported by tmux new-session/new-window since tmux 3.2.
|
|
164
|
-
*/
|
|
165
|
-
function buildEnvArgs(envVars?: Record<string, string>): string[] {
|
|
166
|
-
if (!envVars) return [];
|
|
167
|
-
const args: string[] = [];
|
|
168
|
-
for (const [key, value] of Object.entries(envVars)) {
|
|
169
|
-
args.push("-e", `${key}=${value}`);
|
|
170
|
-
}
|
|
171
|
-
return args;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Create a new tmux session with the given name.
|
|
176
|
-
* The session starts detached with an initial command in the first pane.
|
|
177
|
-
*
|
|
178
|
-
* @param sessionName - Unique session name
|
|
179
|
-
* @param initialCommand - Shell command to run in the initial pane
|
|
180
|
-
* @param windowName - Optional name for the initial window
|
|
181
|
-
* @param cwd - Optional working directory for the initial pane
|
|
182
|
-
* @param envVars - Optional environment variables for the initial pane
|
|
183
|
-
* @returns The pane ID of the initial pane (e.g., "%0")
|
|
184
|
-
*/
|
|
185
|
-
export function createSession(
|
|
186
|
-
sessionName: string,
|
|
187
|
-
initialCommand: string,
|
|
188
|
-
windowName?: string,
|
|
189
|
-
cwd?: string,
|
|
190
|
-
envVars?: Record<string, string>,
|
|
191
|
-
): string {
|
|
192
|
-
const args = [
|
|
193
|
-
"new-session",
|
|
194
|
-
"-d",
|
|
195
|
-
"-s", sessionName,
|
|
196
|
-
"-P", "-F", "#{pane_id}",
|
|
197
|
-
...buildEnvArgs(envVars),
|
|
198
|
-
];
|
|
199
|
-
if (windowName) {
|
|
200
|
-
args.push("-n", windowName);
|
|
201
|
-
}
|
|
202
|
-
if (cwd) {
|
|
203
|
-
args.push("-c", cwd);
|
|
204
|
-
}
|
|
205
|
-
args.push(initialCommand);
|
|
206
|
-
const paneId = tmux(args);
|
|
207
|
-
// Reload config into the running server so keybindings are always current
|
|
208
|
-
// (tmux only loads -f on first server start; source-file updates a running server).
|
|
209
|
-
tmuxRun(["source-file", CONFIG_PATH]);
|
|
210
|
-
// Expose the bun binary and debounce-script paths as server-wide user
|
|
211
|
-
// options so tmux.conf's Ctrl+C binding can invoke them without
|
|
212
|
-
// hardcoding an install path or relying on the user's PATH — which
|
|
213
|
-
// tmux's run-shell does not always inherit in full, especially on
|
|
214
|
-
// Windows psmux. `process.execPath` is the exact bun interpreter
|
|
215
|
-
// currently running atomic, guaranteeing it's executable.
|
|
216
|
-
tmuxRun(["set-option", "-g", "@atomic-bun", process.execPath]);
|
|
217
|
-
tmuxRun(["set-option", "-g", "@atomic-cc-debounce", CC_DEBOUNCE_PATH]);
|
|
218
|
-
return paneId || tmux(["list-panes", "-t", sessionName, "-F", "#{pane_id}"]).split("\n")[0]!;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
export function buildKillSessionOnPaneExitHooks(
|
|
222
|
-
sessionName: string,
|
|
223
|
-
paneId: string,
|
|
224
|
-
options: { guardPaneExited?: boolean } = {},
|
|
225
|
-
): Array<{ event: string; command: string }> {
|
|
226
|
-
const killCommand = `kill-session -t ${sessionName}`;
|
|
227
|
-
const paneExitedCommand = options.guardPaneExited === false
|
|
228
|
-
? killCommand
|
|
229
|
-
: `if -F '#{==:#{hook_pane},${paneId}}' '${killCommand}'`;
|
|
230
|
-
return [
|
|
231
|
-
{ event: "pane-exited", command: paneExitedCommand },
|
|
232
|
-
{ event: "after-kill-pane", command: killCommand },
|
|
233
|
-
];
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
function supportsHookPaneFormat(binary = getMuxBinary()): boolean {
|
|
237
|
-
return binary !== "psmux" && binary !== "pmux";
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* Install hooks that kill the entire session when the agent pane goes away.
|
|
242
|
-
* Used by chat sessions so the session is torn down when the agent CLI exits
|
|
243
|
-
* — whether via `/exit`, a deliberate double Ctrl+C, a crash, or a direct
|
|
244
|
-
* pane close — without leaving the footer pane keeping the session alive.
|
|
245
|
-
*
|
|
246
|
-
* tmux fires `pane-exited` when a pane process exits; psmux also supports
|
|
247
|
-
* that event, but does not currently populate tmux's `#{hook_pane}` format,
|
|
248
|
-
* so the psmux hook is session-scoped. A direct pane close/kill fires
|
|
249
|
-
* `after-kill-pane` instead. These session-scoped hooks are safe for chat
|
|
250
|
-
* sessions: they only have the agent pane plus its footer, and closing either
|
|
251
|
-
* should close the entire chat window.
|
|
252
|
-
*/
|
|
253
|
-
export function killSessionOnPaneExit(sessionName: string, paneId: string): void {
|
|
254
|
-
const hooks = buildKillSessionOnPaneExitHooks(sessionName, paneId, {
|
|
255
|
-
guardPaneExited: supportsHookPaneFormat(),
|
|
256
|
-
});
|
|
257
|
-
for (const hook of hooks) {
|
|
258
|
-
tmuxRun([
|
|
259
|
-
"set-hook",
|
|
260
|
-
"-t", sessionName,
|
|
261
|
-
hook.event,
|
|
262
|
-
hook.command,
|
|
263
|
-
]);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/**
|
|
268
|
-
* Create a new window in an existing session without switching focus.
|
|
269
|
-
*
|
|
270
|
-
* @param sessionName - Target session name
|
|
271
|
-
* @param windowName - Name for the new window
|
|
272
|
-
* @param command - Shell command to run in the new window
|
|
273
|
-
* @param cwd - Optional working directory for the new window
|
|
274
|
-
* @param envVars - Optional environment variables for the new window
|
|
275
|
-
* @returns The pane ID of the new window's pane
|
|
276
|
-
*/
|
|
277
|
-
export function createWindow(
|
|
278
|
-
sessionName: string,
|
|
279
|
-
windowName: string,
|
|
280
|
-
command: string,
|
|
281
|
-
cwd?: string,
|
|
282
|
-
envVars?: Record<string, string>,
|
|
283
|
-
): string {
|
|
284
|
-
const args = [
|
|
285
|
-
"new-window",
|
|
286
|
-
"-d",
|
|
287
|
-
"-t", sessionName,
|
|
288
|
-
"-n", windowName,
|
|
289
|
-
"-P", "-F", "#{pane_id}",
|
|
290
|
-
...buildEnvArgs(envVars),
|
|
291
|
-
];
|
|
292
|
-
if (cwd) {
|
|
293
|
-
args.push("-c", cwd);
|
|
294
|
-
}
|
|
295
|
-
args.push(command);
|
|
296
|
-
return tmux(args);
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* Create a new pane in an existing session by splitting.
|
|
301
|
-
*
|
|
302
|
-
* @returns The pane ID of the new pane
|
|
303
|
-
*/
|
|
304
|
-
export function createPane(sessionName: string, command: string): string {
|
|
305
|
-
return tmux([
|
|
306
|
-
"split-window",
|
|
307
|
-
"-t", sessionName,
|
|
308
|
-
"-P", "-F", "#{pane_id}",
|
|
309
|
-
command,
|
|
310
|
-
]);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
/**
|
|
314
|
-
* Replace the running command in an existing pane with a new one.
|
|
315
|
-
*
|
|
316
|
-
* `-k` kills whatever is currently running in the pane (e.g. a still-initializing
|
|
317
|
-
* shell) before tmux spawns the new command. Because tmux execs the command
|
|
318
|
-
* itself rather than forwarding keystrokes through a shell line editor, there
|
|
319
|
-
* is no shell-ready race and no ZLE TCSAFLUSH drop — callers can invoke this
|
|
320
|
-
* immediately after pane creation without waiting for a prompt to appear.
|
|
321
|
-
*/
|
|
322
|
-
export function respawnPane(paneId: string, command: string): void {
|
|
323
|
-
tmuxExec(["respawn-pane", "-k", "-t", paneId, command]);
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
// ---------------------------------------------------------------------------
|
|
327
|
-
// Keystroke sending
|
|
328
|
-
// ---------------------------------------------------------------------------
|
|
329
|
-
|
|
330
|
-
/**
|
|
331
|
-
* Send literal text to a tmux pane using `-l` flag (no special key interpretation).
|
|
332
|
-
* Uses `--` to prevent text starting with `-` from being parsed as flags.
|
|
333
|
-
*
|
|
334
|
-
* For large text payloads, prefer {@link sendViaPasteBuffer} which bypasses
|
|
335
|
-
* tmux's ~16 KB internal message buffer limit.
|
|
336
|
-
*/
|
|
337
|
-
export function sendLiteralText(paneId: string, text: string): void {
|
|
338
|
-
// Replace newlines with spaces to avoid premature submission
|
|
339
|
-
const normalized = text.replace(/[\r\n]+/g, " ");
|
|
340
|
-
tmuxExec(["send-keys", "-t", paneId, "-l", "--", normalized]);
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
/**
|
|
344
|
-
* Send text to a tmux pane via the paste buffer.
|
|
345
|
-
*
|
|
346
|
-
* More reliable than `send-keys -l` for large text:
|
|
347
|
-
* - No OS ARG_MAX / MAX_ARG_STRLEN limits (text goes through a temp file)
|
|
348
|
-
* - Atomic delivery — the entire text is pasted at once
|
|
349
|
-
* - No chunking needed
|
|
350
|
-
*
|
|
351
|
-
* Newlines are normalized to spaces to prevent premature submission,
|
|
352
|
-
* matching `sendLiteralText`'s behavior.
|
|
353
|
-
*/
|
|
354
|
-
export function sendViaPasteBuffer(paneId: string, text: string): void {
|
|
355
|
-
const normalized = text.replace(/[\r\n]+/g, " ");
|
|
356
|
-
const tmp = atomicTempPath(
|
|
357
|
-
"atomic-paste",
|
|
358
|
-
".txt",
|
|
359
|
-
`${process.pid}-${Date.now()}`,
|
|
360
|
-
);
|
|
361
|
-
|
|
362
|
-
writeFileSync(tmp, normalized, "utf-8");
|
|
363
|
-
try {
|
|
364
|
-
tmuxExec(["load-buffer", tmp]);
|
|
365
|
-
tmuxExec(["paste-buffer", "-t", paneId, "-d"]);
|
|
366
|
-
} finally {
|
|
367
|
-
try {
|
|
368
|
-
unlinkSync(tmp);
|
|
369
|
-
} catch {
|
|
370
|
-
// Temp file cleanup is best-effort
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
/**
|
|
376
|
-
* Send a special key (C-m, C-c, C-u, Tab, etc.) to a tmux pane.
|
|
377
|
-
*/
|
|
378
|
-
export function sendSpecialKey(paneId: string, key: string): void {
|
|
379
|
-
tmuxExec(["send-keys", "-t", paneId, key]);
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
// ---------------------------------------------------------------------------
|
|
383
|
-
// Pane capture
|
|
384
|
-
// ---------------------------------------------------------------------------
|
|
385
|
-
|
|
386
|
-
/**
|
|
387
|
-
* Capture the visible content of a tmux pane.
|
|
388
|
-
*
|
|
389
|
-
* @param paneId - The pane ID (e.g., "%0")
|
|
390
|
-
* @param start - Start line (negative = from bottom, default: capture visible only)
|
|
391
|
-
*/
|
|
392
|
-
export function capturePane(paneId: string, start?: number): string {
|
|
393
|
-
const args = ["capture-pane", "-t", paneId, "-p"];
|
|
394
|
-
if (start !== undefined) {
|
|
395
|
-
args.push("-S", String(start));
|
|
396
|
-
}
|
|
397
|
-
return tmux(args);
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
/** Internal capture helper — returns empty string on failure. */
|
|
401
|
-
function capturePaneRaw(paneId: string, scrollbackLines?: number): string {
|
|
402
|
-
const args = ["capture-pane", "-t", paneId, "-p"];
|
|
403
|
-
if (scrollbackLines !== undefined) {
|
|
404
|
-
args.push("-S", `-${scrollbackLines}`);
|
|
405
|
-
}
|
|
406
|
-
const result = tmuxRun(args);
|
|
407
|
-
return result.ok ? result.stdout : "";
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
/**
|
|
411
|
-
* Capture only the visible portion of a pane (no scrollback).
|
|
412
|
-
* Preferred for state detection (ready/busy) to avoid stale prompt lines
|
|
413
|
-
* or old activity indicators in scrollback triggering false positives.
|
|
414
|
-
* Returns empty string on failure instead of throwing.
|
|
415
|
-
*/
|
|
416
|
-
export function capturePaneVisible(paneId: string): string {
|
|
417
|
-
return capturePaneRaw(paneId);
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
/**
|
|
421
|
-
* Capture last N lines of scrollback from a pane.
|
|
422
|
-
* Preferred for output collection where you need recent history.
|
|
423
|
-
* Returns empty string on failure instead of throwing.
|
|
424
|
-
*/
|
|
425
|
-
export function capturePaneScrollback(paneId: string, lines = 200): string {
|
|
426
|
-
return capturePaneRaw(paneId, lines);
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
// ---------------------------------------------------------------------------
|
|
430
|
-
// Session lifecycle
|
|
431
|
-
// ---------------------------------------------------------------------------
|
|
432
|
-
|
|
433
|
-
/**
|
|
434
|
-
* Kill a tmux session.
|
|
435
|
-
*/
|
|
436
|
-
export function killSession(sessionName: string): void {
|
|
437
|
-
try {
|
|
438
|
-
tmuxExec(["kill-session", "-t", sessionName]);
|
|
439
|
-
} catch {
|
|
440
|
-
// Session may already be dead
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
/** Kill a specific tmux window within a session. Silences errors if already dead. */
|
|
445
|
-
export function killWindow(sessionName: string, windowName: string): void {
|
|
446
|
-
try {
|
|
447
|
-
tmuxExec(["kill-window", "-t", `${sessionName}:${windowName}`]);
|
|
448
|
-
} catch {
|
|
449
|
-
// Window may already be dead
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
/**
|
|
454
|
-
* Check if a tmux session exists.
|
|
455
|
-
*/
|
|
456
|
-
export function sessionExists(sessionName: string): boolean {
|
|
457
|
-
const result = tmuxRun(["has-session", "-t", sessionName]);
|
|
458
|
-
return result.ok;
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
/**
|
|
462
|
-
* Set a session-level environment variable.
|
|
463
|
-
* Uses `tmux set-environment -t <session>` so the value is scoped to
|
|
464
|
-
* the individual session, not the global server environment.
|
|
465
|
-
*/
|
|
466
|
-
export function setSessionEnv(sessionName: string, key: string, value: string): void {
|
|
467
|
-
tmuxRun(["set-environment", "-t", sessionName, key, value]);
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
export function parseSessionEnvValue(stdout: string, key: string): string | null {
|
|
471
|
-
const prefix = `${key}=`;
|
|
472
|
-
const line = stdout
|
|
473
|
-
.split(/\r?\n/)
|
|
474
|
-
.find((entry) => entry.startsWith(prefix));
|
|
475
|
-
return line ? line.slice(prefix.length) : null;
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
/**
|
|
479
|
-
* Get the PID of the foreground process in a tmux pane.
|
|
480
|
-
* Returns null if the pane no longer exists or the query fails.
|
|
481
|
-
*
|
|
482
|
-
* Note: this is the pane's "current" process — typically the agent
|
|
483
|
-
* itself when the pane was created with the agent as the initial command.
|
|
484
|
-
* If tmux exec'd a wrapper shell that then exec'd the agent, the PID
|
|
485
|
-
* will refer to the same process (exec replaces in-place).
|
|
486
|
-
*/
|
|
487
|
-
export function getPanePid(paneId: string): number | null {
|
|
488
|
-
const result = tmuxRun(["display-message", "-t", paneId, "-p", "#{pane_pid}"]);
|
|
489
|
-
if (!result.ok) return null;
|
|
490
|
-
const pid = Number(result.stdout.trim());
|
|
491
|
-
return Number.isFinite(pid) && pid > 0 ? pid : null;
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
/**
|
|
495
|
-
* Read a session-level environment variable.
|
|
496
|
-
* Returns `null` when the session doesn't exist or the variable isn't set.
|
|
497
|
-
*/
|
|
498
|
-
export function getSessionEnv(sessionName: string, key: string): string | null {
|
|
499
|
-
const result = tmuxRun(["show-environment", "-t", sessionName, key]);
|
|
500
|
-
if (!result.ok) return null;
|
|
501
|
-
// tmux returns "KEY=VALUE" for a requested key. psmux can append its own
|
|
502
|
-
// PSMUX_* metadata or return all environment lines, so only accept an exact
|
|
503
|
-
// key match and ignore every unrelated line.
|
|
504
|
-
return parseSessionEnvValue(result.stdout, key);
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
/** Session type derived from the session name prefix. */
|
|
508
|
-
export type SessionType = "chat" | "workflow";
|
|
509
|
-
|
|
510
|
-
/**
|
|
511
|
-
* Parse a session name into its type and agent.
|
|
512
|
-
*
|
|
513
|
-
* Naming conventions:
|
|
514
|
-
* Chat: atomic-chat-<agent>-<id>
|
|
515
|
-
* Workflow: atomic-wf-<agent>-<name>-<id>
|
|
516
|
-
*
|
|
517
|
-
* Agent names are a known, hyphen-free set (claude, copilot, opencode)
|
|
518
|
-
* so parsing is unambiguous even when the workflow name contains hyphens.
|
|
519
|
-
*/
|
|
520
|
-
export function parseSessionName(name: string): { type?: SessionType; agent?: string } {
|
|
521
|
-
const KNOWN_AGENTS = new Set(["claude", "copilot", "opencode"]);
|
|
522
|
-
|
|
523
|
-
if (name.startsWith("atomic-chat-")) {
|
|
524
|
-
// atomic-chat-<agent>-<id>
|
|
525
|
-
const rest = name.slice("atomic-chat-".length);
|
|
526
|
-
const dash = rest.indexOf("-");
|
|
527
|
-
const candidate = dash >= 0 ? rest.slice(0, dash) : rest;
|
|
528
|
-
if (KNOWN_AGENTS.has(candidate)) {
|
|
529
|
-
return { type: "chat", agent: candidate };
|
|
530
|
-
}
|
|
531
|
-
return { type: "chat" };
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
if (name.startsWith("atomic-wf-")) {
|
|
535
|
-
// atomic-wf-<agent>-<name>-<id>
|
|
536
|
-
const rest = name.slice("atomic-wf-".length);
|
|
537
|
-
const dash = rest.indexOf("-");
|
|
538
|
-
const candidate = dash >= 0 ? rest.slice(0, dash) : rest;
|
|
539
|
-
if (KNOWN_AGENTS.has(candidate)) {
|
|
540
|
-
return { type: "workflow", agent: candidate };
|
|
541
|
-
}
|
|
542
|
-
return { type: "workflow" };
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
return {};
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
/** A single tmux session on the atomic socket. */
|
|
549
|
-
export interface TmuxSession {
|
|
550
|
-
/** Session name (e.g. "atomic-chat-claude-a1b2c3d4") */
|
|
551
|
-
name: string;
|
|
552
|
-
/** Number of windows in the session */
|
|
553
|
-
windows: number;
|
|
554
|
-
/** ISO 8601 creation timestamp */
|
|
555
|
-
created: string;
|
|
556
|
-
/** Whether a client is currently attached */
|
|
557
|
-
attached: boolean;
|
|
558
|
-
/** Session type derived from the name prefix */
|
|
559
|
-
type?: SessionType;
|
|
560
|
-
/** Agent backend that owns this session (e.g. "claude", "copilot", "opencode") */
|
|
561
|
-
agent?: string;
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
const SESSION_LIST_DELIMITER = "__ATOMIC_SESSION_FIELD__";
|
|
565
|
-
|
|
566
|
-
function isAtomicManagedSessionName(name: string): boolean {
|
|
567
|
-
return name.startsWith("atomic-");
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
export function parseListSessionsOutput(
|
|
571
|
-
stdout: string,
|
|
572
|
-
getEnv: (sessionName: string, key: string) => string | null = getSessionEnv,
|
|
573
|
-
): TmuxSession[] {
|
|
574
|
-
return stdout
|
|
575
|
-
.split("\n")
|
|
576
|
-
.filter((line) => line.trim() !== "")
|
|
577
|
-
.filter((line) => line.includes(SESSION_LIST_DELIMITER))
|
|
578
|
-
.flatMap((line) => {
|
|
579
|
-
const [name, windowsStr, createdStr, attachedStr] = line.split(SESSION_LIST_DELIMITER);
|
|
580
|
-
if (!name || !windowsStr || !createdStr || attachedStr === undefined) return [];
|
|
581
|
-
if (!isAtomicManagedSessionName(name)) return [];
|
|
582
|
-
|
|
583
|
-
const epochSec = Number(createdStr);
|
|
584
|
-
const parsed = parseSessionName(name);
|
|
585
|
-
return [{
|
|
586
|
-
name,
|
|
587
|
-
windows: Number(windowsStr) || 1,
|
|
588
|
-
created: Number.isFinite(epochSec) && epochSec > 0
|
|
589
|
-
? new Date(epochSec * 1000).toISOString()
|
|
590
|
-
: createdStr,
|
|
591
|
-
attached: attachedStr === "1",
|
|
592
|
-
type: parsed.type,
|
|
593
|
-
agent: parsed.agent ?? getEnv(name, "ATOMIC_AGENT") ?? undefined,
|
|
594
|
-
}];
|
|
595
|
-
});
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
/**
|
|
599
|
-
* List all sessions on the atomic tmux socket.
|
|
600
|
-
*
|
|
601
|
-
* Uses a custom format string so output is machine-parseable regardless of
|
|
602
|
-
* locale. Returns an empty array when the server isn't running or has no
|
|
603
|
-
* sessions (tmux exits non-zero in both cases).
|
|
604
|
-
*/
|
|
605
|
-
export function listSessions(): TmuxSession[] {
|
|
606
|
-
const fmt = [
|
|
607
|
-
"#{session_name}",
|
|
608
|
-
"#{session_windows}",
|
|
609
|
-
"#{session_created}",
|
|
610
|
-
"#{session_attached}",
|
|
611
|
-
].join(SESSION_LIST_DELIMITER);
|
|
612
|
-
const result = tmuxRun(["list-sessions", "-F", fmt]);
|
|
613
|
-
if (!result.ok) return [];
|
|
614
|
-
|
|
615
|
-
return parseListSessionsOutput(result.stdout);
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
/** Build the full argument list for an attach-session command. */
|
|
619
|
-
function buildAttachArgs(sessionName: string): string[] {
|
|
620
|
-
const binary = getMuxBinary();
|
|
621
|
-
if (!binary) {
|
|
622
|
-
throw new Error("No terminal multiplexer (tmux/psmux) found on PATH");
|
|
623
|
-
}
|
|
624
|
-
return [binary, "-f", CONFIG_PATH, "-L", SOCKET_NAME, "attach-session", "-t", sessionName];
|
|
625
|
-
}
|
|
626
|
-
|
|
627
|
-
/**
|
|
628
|
-
* Attach to an existing tmux session (takes over the current terminal).
|
|
629
|
-
*/
|
|
630
|
-
export function attachSession(sessionName: string): void {
|
|
631
|
-
const cmd = buildAttachArgs(sessionName);
|
|
632
|
-
const proc = Bun.spawnSync({
|
|
633
|
-
cmd,
|
|
634
|
-
stdin: "inherit",
|
|
635
|
-
stdout: "inherit",
|
|
636
|
-
stderr: "pipe",
|
|
637
|
-
});
|
|
638
|
-
if (!proc.success) {
|
|
639
|
-
const stderr = proc.stderr.toString().trim();
|
|
640
|
-
throw new Error(`Failed to attach to session: ${sessionName}${stderr ? ` (${stderr})` : ""}`);
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
|
|
644
|
-
/**
|
|
645
|
-
* Spawn an interactive attach-session process.
|
|
646
|
-
* Encapsulates binary resolution, config injection, and socket isolation.
|
|
647
|
-
* Used by all async attach call sites (executor, chat).
|
|
648
|
-
*/
|
|
649
|
-
export function spawnMuxAttach(sessionName: string): Subprocess {
|
|
650
|
-
return Bun.spawn(buildAttachArgs(sessionName), {
|
|
651
|
-
stdio: ["inherit", "inherit", "inherit"],
|
|
652
|
-
});
|
|
653
|
-
}
|
|
654
|
-
|
|
655
|
-
/**
|
|
656
|
-
* Switch the current tmux client to a different session.
|
|
657
|
-
* Use this instead of `attachSession` when already inside tmux to avoid
|
|
658
|
-
* creating a nested tmux client.
|
|
659
|
-
*/
|
|
660
|
-
export function switchClient(sessionName: string): void {
|
|
661
|
-
tmuxExec(["switch-client", "-t", sessionName]);
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
/**
|
|
665
|
-
* Get the name of the current tmux session (when running inside tmux).
|
|
666
|
-
* Returns null if not inside tmux or if the query fails.
|
|
667
|
-
*/
|
|
668
|
-
export function getCurrentSession(): string | null {
|
|
669
|
-
if (!isInsideTmux()) return null;
|
|
670
|
-
// Only query the atomic server if we're actually inside the atomic socket.
|
|
671
|
-
// Otherwise, display-message picks an arbitrary session on the atomic
|
|
672
|
-
// server that has nothing to do with our terminal.
|
|
673
|
-
if (!isInsideAtomicSocket()) return null;
|
|
674
|
-
const result = tmuxRun(["display-message", "-p", "#{session_name}"]);
|
|
675
|
-
if (!result.ok) return null;
|
|
676
|
-
return result.stdout || null;
|
|
677
|
-
}
|
|
678
|
-
|
|
679
|
-
/**
|
|
680
|
-
* Attach or switch to a tmux session depending on whether we're already
|
|
681
|
-
* inside tmux. Avoids nested tmux clients.
|
|
682
|
-
*
|
|
683
|
-
* - Outside tmux: spawns `attach-session` (blocks until session ends).
|
|
684
|
-
* - Inside tmux: runs `switch-client` (returns immediately).
|
|
685
|
-
*/
|
|
686
|
-
export function attachOrSwitch(sessionName: string): void {
|
|
687
|
-
if (isInsideTmux()) {
|
|
688
|
-
switchClient(sessionName);
|
|
689
|
-
} else {
|
|
690
|
-
attachSession(sessionName);
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
/**
|
|
695
|
-
* Detach every client currently attached to the given atomic-managed
|
|
696
|
-
* tmux session. The session itself stays alive — only the clients are
|
|
697
|
-
* disconnected. Mirrors {@link attachSession}: attach connects a client,
|
|
698
|
-
* detachClients disconnects them.
|
|
699
|
-
*
|
|
700
|
-
* Best-effort: returns silently when the session has no attached clients
|
|
701
|
-
* or has already been torn down.
|
|
702
|
-
*/
|
|
703
|
-
export function detachClients(sessionName: string): void {
|
|
704
|
-
try {
|
|
705
|
-
tmuxExec(["detach-client", "-s", sessionName]);
|
|
706
|
-
} catch {
|
|
707
|
-
// No clients attached or session already gone — nothing to do.
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
|
|
711
|
-
/**
|
|
712
|
-
* Detach from the user's current tmux session and replace the client
|
|
713
|
-
* with an attach to a session on the atomic socket.
|
|
714
|
-
*
|
|
715
|
-
* Uses `detach-client -E` so the user's terminal seamlessly transitions
|
|
716
|
-
* from their tmux session to the atomic session — no nesting.
|
|
717
|
-
* Their original tmux session stays alive; they can re-attach with
|
|
718
|
-
* `tmux attach` after leaving the atomic session.
|
|
719
|
-
*
|
|
720
|
-
* Only call when {@link isInsideTmux} returns `true`.
|
|
721
|
-
*/
|
|
722
|
-
export function detachAndAttachAtomic(sessionName: string): void {
|
|
723
|
-
const binary = getMuxBinary();
|
|
724
|
-
if (!binary) {
|
|
725
|
-
throw new Error("No terminal multiplexer (tmux/psmux) found on PATH");
|
|
726
|
-
}
|
|
727
|
-
// Build the shell command that will run on the freed terminal.
|
|
728
|
-
const attachArgs = buildAttachArgs(sessionName);
|
|
729
|
-
const attachCmd = attachArgs
|
|
730
|
-
.map((a) => `"${a.replace(/[\\"$`!]/g, "\\$&")}"`)
|
|
731
|
-
.join(" ");
|
|
732
|
-
|
|
733
|
-
// Target the user's current tmux server (no -L flag) and replace
|
|
734
|
-
// the client process with an attach to the atomic socket.
|
|
735
|
-
Bun.spawnSync({
|
|
736
|
-
cmd: [binary, "detach-client", "-E", attachCmd],
|
|
737
|
-
stdio: ["inherit", "inherit", "inherit"],
|
|
738
|
-
});
|
|
739
|
-
}
|
|
740
|
-
|
|
741
|
-
/**
|
|
742
|
-
* Select (switch to) a window within the current tmux session.
|
|
743
|
-
*/
|
|
744
|
-
export function selectWindow(target: string): void {
|
|
745
|
-
tmuxExec(["select-window", "-t", target]);
|
|
746
|
-
}
|
|
747
|
-
|
|
748
|
-
/**
|
|
749
|
-
* Move the target session's current-window pointer forward by one.
|
|
750
|
-
* Equivalent to the `Ctrl+\` binding inside an attached client, but
|
|
751
|
-
* usable without a client and addressable by session name.
|
|
752
|
-
*/
|
|
753
|
-
export function nextWindow(sessionName: string): void {
|
|
754
|
-
tmuxExec(["next-window", "-t", sessionName]);
|
|
755
|
-
}
|
|
756
|
-
|
|
757
|
-
/**
|
|
758
|
-
* Move the target session's current-window pointer backward by one.
|
|
759
|
-
*/
|
|
760
|
-
export function previousWindow(sessionName: string): void {
|
|
761
|
-
tmuxExec(["previous-window", "-t", sessionName]);
|
|
762
|
-
}
|
|
763
|
-
|
|
764
|
-
// ---------------------------------------------------------------------------
|
|
765
|
-
// Normalization (ported from oh-my-codex's normalizeTmuxCapture)
|
|
766
|
-
// ---------------------------------------------------------------------------
|
|
767
|
-
|
|
768
|
-
/**
|
|
769
|
-
* Collapse all whitespace to single spaces for robust capture comparison.
|
|
770
|
-
* Prevents false negatives from tmux inserting/stripping whitespace.
|
|
771
|
-
*/
|
|
772
|
-
export function normalizeTmuxCapture(text: string): string {
|
|
773
|
-
return text.replace(/\r/g, "").replace(/\s+/g, " ").trim();
|
|
774
|
-
}
|
|
775
|
-
|
|
776
|
-
/**
|
|
777
|
-
* Normalize captured text preserving line structure (for display output).
|
|
778
|
-
*/
|
|
779
|
-
export function normalizeTmuxLines(text: string): string {
|
|
780
|
-
return text
|
|
781
|
-
.split("\n")
|
|
782
|
-
.map((l) => l.trimEnd())
|
|
783
|
-
.join("\n")
|
|
784
|
-
.trim();
|
|
785
|
-
}
|