@bastani/atomic 0.5.11 → 0.5.12-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/.agents/skills/adapt/SKILL.md +199 -0
  2. package/.agents/skills/advanced-evaluation/SKILL.md +402 -0
  3. package/.agents/skills/advanced-evaluation/references/bias-mitigation.md +288 -0
  4. package/.agents/skills/advanced-evaluation/references/evaluation-pipeline.md +43 -0
  5. package/.agents/skills/advanced-evaluation/references/implementation-patterns.md +315 -0
  6. package/.agents/skills/advanced-evaluation/references/metrics-guide.md +331 -0
  7. package/.agents/skills/advanced-evaluation/scripts/evaluation_example.py +392 -0
  8. package/.agents/skills/animate/SKILL.md +175 -0
  9. package/.agents/skills/arrange/SKILL.md +124 -0
  10. package/.agents/skills/audit/SKILL.md +148 -0
  11. package/.agents/skills/bdi-mental-states/SKILL.md +311 -0
  12. package/.agents/skills/bdi-mental-states/references/bdi-ontology-core.md +207 -0
  13. package/.agents/skills/bdi-mental-states/references/framework-integration.md +582 -0
  14. package/.agents/skills/bdi-mental-states/references/rdf-examples.md +315 -0
  15. package/.agents/skills/bdi-mental-states/references/sparql-competency.md +420 -0
  16. package/.agents/skills/bolder/SKILL.md +117 -0
  17. package/.agents/skills/bun/SKILL.md +199 -0
  18. package/.agents/skills/clarify/SKILL.md +183 -0
  19. package/.agents/skills/colorize/SKILL.md +143 -0
  20. package/.agents/skills/context-compression/SKILL.md +272 -0
  21. package/.agents/skills/context-compression/references/evaluation-framework.md +213 -0
  22. package/.agents/skills/context-compression/scripts/compression_evaluator.py +862 -0
  23. package/.agents/skills/context-compression/tests/test_compression_evaluator.py +56 -0
  24. package/.agents/skills/context-degradation/SKILL.md +206 -0
  25. package/.agents/skills/context-degradation/references/patterns.md +314 -0
  26. package/.agents/skills/context-degradation/scripts/degradation_detector.py +614 -0
  27. package/.agents/skills/context-fundamentals/SKILL.md +201 -0
  28. package/.agents/skills/context-fundamentals/references/context-components.md +283 -0
  29. package/.agents/skills/context-fundamentals/scripts/context_manager.py +533 -0
  30. package/.agents/skills/context-optimization/SKILL.md +195 -0
  31. package/.agents/skills/context-optimization/references/optimization_techniques.md +272 -0
  32. package/.agents/skills/context-optimization/scripts/compaction.py +562 -0
  33. package/.agents/skills/create-spec/SKILL.md +244 -0
  34. package/.agents/skills/critique/SKILL.md +225 -0
  35. package/.agents/skills/critique/reference/cognitive-load.md +106 -0
  36. package/.agents/skills/critique/reference/heuristics-scoring.md +234 -0
  37. package/.agents/skills/critique/reference/personas.md +178 -0
  38. package/.agents/skills/delight/SKILL.md +304 -0
  39. package/.agents/skills/distill/SKILL.md +122 -0
  40. package/.agents/skills/docx/LICENSE.txt +30 -0
  41. package/.agents/skills/docx/SKILL.md +590 -0
  42. package/.agents/skills/docx/scripts/__init__.py +1 -0
  43. package/.agents/skills/docx/scripts/accept_changes.py +135 -0
  44. package/.agents/skills/docx/scripts/comment.py +318 -0
  45. package/.agents/skills/docx/scripts/office/helpers/__init__.py +0 -0
  46. package/.agents/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
  47. package/.agents/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
  48. package/.agents/skills/docx/scripts/office/pack.py +159 -0
  49. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  50. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  51. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  52. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  53. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  54. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  55. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  56. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  57. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  58. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  59. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  60. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  61. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  62. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  63. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  64. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  65. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  66. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  67. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  68. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  69. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  70. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  71. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  72. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  73. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  74. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  75. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  76. package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  77. package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  78. package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  79. package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  80. package/.agents/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  81. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  82. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  83. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  84. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  85. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  86. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  87. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  88. package/.agents/skills/docx/scripts/office/soffice.py +183 -0
  89. package/.agents/skills/docx/scripts/office/unpack.py +132 -0
  90. package/.agents/skills/docx/scripts/office/validate.py +111 -0
  91. package/.agents/skills/docx/scripts/office/validators/__init__.py +15 -0
  92. package/.agents/skills/docx/scripts/office/validators/base.py +847 -0
  93. package/.agents/skills/docx/scripts/office/validators/docx.py +446 -0
  94. package/.agents/skills/docx/scripts/office/validators/pptx.py +275 -0
  95. package/.agents/skills/docx/scripts/office/validators/redlining.py +247 -0
  96. package/.agents/skills/docx/scripts/templates/comments.xml +3 -0
  97. package/.agents/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  98. package/.agents/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  99. package/.agents/skills/docx/scripts/templates/commentsIds.xml +3 -0
  100. package/.agents/skills/docx/scripts/templates/people.xml +3 -0
  101. package/.agents/skills/evaluation/SKILL.md +251 -0
  102. package/.agents/skills/evaluation/references/metrics.md +339 -0
  103. package/.agents/skills/evaluation/scripts/evaluator.py +627 -0
  104. package/.agents/skills/explain-code/SKILL.md +230 -0
  105. package/.agents/skills/extract/SKILL.md +91 -0
  106. package/.agents/skills/filesystem-context/SKILL.md +287 -0
  107. package/.agents/skills/filesystem-context/references/implementation-patterns.md +549 -0
  108. package/.agents/skills/filesystem-context/scripts/filesystem_context.py +425 -0
  109. package/.agents/skills/find-skills/SKILL.md +142 -0
  110. package/.agents/skills/frontend-design/SKILL.md +147 -0
  111. package/.agents/skills/frontend-design/reference/color-and-contrast.md +132 -0
  112. package/.agents/skills/frontend-design/reference/interaction-design.md +195 -0
  113. package/.agents/skills/frontend-design/reference/motion-design.md +99 -0
  114. package/.agents/skills/frontend-design/reference/responsive-design.md +114 -0
  115. package/.agents/skills/frontend-design/reference/spatial-design.md +100 -0
  116. package/.agents/skills/frontend-design/reference/typography.md +133 -0
  117. package/.agents/skills/frontend-design/reference/ux-writing.md +107 -0
  118. package/.agents/skills/gh-commit/SKILL.md +243 -0
  119. package/.agents/skills/gh-create-pr/SKILL.md +93 -0
  120. package/.agents/skills/harden/SKILL.md +354 -0
  121. package/.agents/skills/hosted-agents/SKILL.md +260 -0
  122. package/.agents/skills/hosted-agents/references/infrastructure-patterns.md +700 -0
  123. package/.agents/skills/hosted-agents/scripts/sandbox_manager.py +590 -0
  124. package/.agents/skills/impeccable/SKILL.md +365 -0
  125. package/.agents/skills/impeccable/reference/color-and-contrast.md +105 -0
  126. package/.agents/skills/impeccable/reference/craft.md +70 -0
  127. package/.agents/skills/impeccable/reference/extract.md +70 -0
  128. package/.agents/skills/impeccable/reference/interaction-design.md +195 -0
  129. package/.agents/skills/impeccable/reference/motion-design.md +99 -0
  130. package/.agents/skills/impeccable/reference/responsive-design.md +114 -0
  131. package/.agents/skills/impeccable/reference/spatial-design.md +100 -0
  132. package/.agents/skills/impeccable/reference/typography.md +142 -0
  133. package/.agents/skills/impeccable/reference/ux-writing.md +107 -0
  134. package/.agents/skills/impeccable/scripts/cleanup-deprecated.mjs +214 -0
  135. package/.agents/skills/init/SKILL.md +138 -0
  136. package/.agents/skills/layout/SKILL.md +125 -0
  137. package/.agents/skills/liteparse/SKILL.md +222 -0
  138. package/.agents/skills/memory-systems/SKILL.md +219 -0
  139. package/.agents/skills/memory-systems/references/implementation.md +551 -0
  140. package/.agents/skills/memory-systems/scripts/memory_store.py +616 -0
  141. package/.agents/skills/multi-agent-patterns/SKILL.md +257 -0
  142. package/.agents/skills/multi-agent-patterns/references/frameworks.md +433 -0
  143. package/.agents/skills/multi-agent-patterns/scripts/coordination.py +613 -0
  144. package/.agents/skills/normalize/SKILL.md +70 -0
  145. package/.agents/skills/onboard/SKILL.md +245 -0
  146. package/.agents/skills/opentui/SKILL.md +201 -0
  147. package/.agents/skills/opentui/references/animation/REFERENCE.md +431 -0
  148. package/.agents/skills/opentui/references/components/REFERENCE.md +144 -0
  149. package/.agents/skills/opentui/references/components/code-diff.md +672 -0
  150. package/.agents/skills/opentui/references/components/containers.md +417 -0
  151. package/.agents/skills/opentui/references/components/inputs.md +531 -0
  152. package/.agents/skills/opentui/references/components/text-display.md +386 -0
  153. package/.agents/skills/opentui/references/core/REFERENCE.md +145 -0
  154. package/.agents/skills/opentui/references/core/api.md +543 -0
  155. package/.agents/skills/opentui/references/core/configuration.md +168 -0
  156. package/.agents/skills/opentui/references/core/gotchas.md +393 -0
  157. package/.agents/skills/opentui/references/core/patterns.md +449 -0
  158. package/.agents/skills/opentui/references/keyboard/REFERENCE.md +617 -0
  159. package/.agents/skills/opentui/references/layout/REFERENCE.md +337 -0
  160. package/.agents/skills/opentui/references/layout/patterns.md +444 -0
  161. package/.agents/skills/opentui/references/react/REFERENCE.md +174 -0
  162. package/.agents/skills/opentui/references/react/api.md +436 -0
  163. package/.agents/skills/opentui/references/react/configuration.md +302 -0
  164. package/.agents/skills/opentui/references/react/gotchas.md +443 -0
  165. package/.agents/skills/opentui/references/react/patterns.md +501 -0
  166. package/.agents/skills/opentui/references/solid/REFERENCE.md +201 -0
  167. package/.agents/skills/opentui/references/solid/api.md +564 -0
  168. package/.agents/skills/opentui/references/solid/configuration.md +316 -0
  169. package/.agents/skills/opentui/references/solid/gotchas.md +427 -0
  170. package/.agents/skills/opentui/references/solid/patterns.md +560 -0
  171. package/.agents/skills/opentui/references/testing/REFERENCE.md +614 -0
  172. package/.agents/skills/optimize/SKILL.md +266 -0
  173. package/.agents/skills/overdrive/SKILL.md +142 -0
  174. package/.agents/skills/pdf/LICENSE.txt +30 -0
  175. package/.agents/skills/pdf/SKILL.md +314 -0
  176. package/.agents/skills/pdf/forms.md +294 -0
  177. package/.agents/skills/pdf/reference.md +612 -0
  178. package/.agents/skills/pdf/scripts/check_bounding_boxes.py +65 -0
  179. package/.agents/skills/pdf/scripts/check_fillable_fields.py +11 -0
  180. package/.agents/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
  181. package/.agents/skills/pdf/scripts/create_validation_image.py +37 -0
  182. package/.agents/skills/pdf/scripts/extract_form_field_info.py +122 -0
  183. package/.agents/skills/pdf/scripts/extract_form_structure.py +115 -0
  184. package/.agents/skills/pdf/scripts/fill_fillable_fields.py +98 -0
  185. package/.agents/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
  186. package/.agents/skills/playwright-cli/SKILL.md +344 -0
  187. package/.agents/skills/playwright-cli/references/element-attributes.md +23 -0
  188. package/.agents/skills/playwright-cli/references/playwright-tests.md +39 -0
  189. package/.agents/skills/playwright-cli/references/request-mocking.md +87 -0
  190. package/.agents/skills/playwright-cli/references/running-code.md +231 -0
  191. package/.agents/skills/playwright-cli/references/session-management.md +169 -0
  192. package/.agents/skills/playwright-cli/references/storage-state.md +275 -0
  193. package/.agents/skills/playwright-cli/references/test-generation.md +88 -0
  194. package/.agents/skills/playwright-cli/references/tracing.md +139 -0
  195. package/.agents/skills/playwright-cli/references/video-recording.md +143 -0
  196. package/.agents/skills/polish/SKILL.md +224 -0
  197. package/.agents/skills/pptx/LICENSE.txt +30 -0
  198. package/.agents/skills/pptx/SKILL.md +232 -0
  199. package/.agents/skills/pptx/editing.md +205 -0
  200. package/.agents/skills/pptx/pptxgenjs.md +420 -0
  201. package/.agents/skills/pptx/scripts/__init__.py +0 -0
  202. package/.agents/skills/pptx/scripts/add_slide.py +195 -0
  203. package/.agents/skills/pptx/scripts/clean.py +286 -0
  204. package/.agents/skills/pptx/scripts/office/helpers/__init__.py +0 -0
  205. package/.agents/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
  206. package/.agents/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
  207. package/.agents/skills/pptx/scripts/office/pack.py +159 -0
  208. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  209. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  210. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  211. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  212. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  213. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  214. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  215. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  216. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  217. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  218. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  219. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  220. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  221. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  222. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  223. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  224. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  225. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  226. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  227. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  228. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  229. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  230. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  231. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  232. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  233. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  234. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  235. package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  236. package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  237. package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  238. package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  239. package/.agents/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
  240. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  241. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  242. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  243. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  244. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  245. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  246. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  247. package/.agents/skills/pptx/scripts/office/soffice.py +183 -0
  248. package/.agents/skills/pptx/scripts/office/unpack.py +132 -0
  249. package/.agents/skills/pptx/scripts/office/validate.py +111 -0
  250. package/.agents/skills/pptx/scripts/office/validators/__init__.py +15 -0
  251. package/.agents/skills/pptx/scripts/office/validators/base.py +847 -0
  252. package/.agents/skills/pptx/scripts/office/validators/docx.py +446 -0
  253. package/.agents/skills/pptx/scripts/office/validators/pptx.py +275 -0
  254. package/.agents/skills/pptx/scripts/office/validators/redlining.py +247 -0
  255. package/.agents/skills/pptx/scripts/thumbnail.py +289 -0
  256. package/.agents/skills/project-development/SKILL.md +291 -0
  257. package/.agents/skills/project-development/references/case-studies.md +388 -0
  258. package/.agents/skills/project-development/references/pipeline-patterns.md +610 -0
  259. package/.agents/skills/project-development/scripts/pipeline_template.py +796 -0
  260. package/.agents/skills/prompt-engineer/SKILL.md +263 -0
  261. package/.agents/skills/prompt-engineer/references/advanced_patterns.md +271 -0
  262. package/.agents/skills/prompt-engineer/references/core_prompting.md +137 -0
  263. package/.agents/skills/prompt-engineer/references/quality_improvement.md +193 -0
  264. package/.agents/skills/quieter/SKILL.md +103 -0
  265. package/.agents/skills/research-codebase/SKILL.md +227 -0
  266. package/.agents/skills/shape/SKILL.md +96 -0
  267. package/.agents/skills/skill-creator/LICENSE.txt +202 -0
  268. package/.agents/skills/skill-creator/SKILL.md +485 -0
  269. package/.agents/skills/skill-creator/agents/analyzer.md +274 -0
  270. package/.agents/skills/skill-creator/agents/comparator.md +202 -0
  271. package/.agents/skills/skill-creator/agents/grader.md +223 -0
  272. package/.agents/skills/skill-creator/assets/eval_review.html +146 -0
  273. package/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  274. package/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  275. package/.agents/skills/skill-creator/references/schemas.md +430 -0
  276. package/.agents/skills/skill-creator/scripts/__init__.py +0 -0
  277. package/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  278. package/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
  279. package/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
  280. package/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
  281. package/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
  282. package/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
  283. package/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
  284. package/.agents/skills/skill-creator/scripts/utils.py +47 -0
  285. package/.agents/skills/sl-commit/SKILL.md +51 -0
  286. package/.agents/skills/sl-submit-diff/SKILL.md +55 -0
  287. package/.agents/skills/teach-impeccable/SKILL.md +71 -0
  288. package/.agents/skills/test-driven-development/SKILL.md +371 -0
  289. package/.agents/skills/test-driven-development/testing-anti-patterns.md +299 -0
  290. package/.agents/skills/tool-design/SKILL.md +271 -0
  291. package/.agents/skills/tool-design/references/architectural_reduction.md +210 -0
  292. package/.agents/skills/tool-design/references/best_practices.md +176 -0
  293. package/.agents/skills/tool-design/scripts/description_generator.py +528 -0
  294. package/.agents/skills/typescript-advanced-types/SKILL.md +719 -0
  295. package/.agents/skills/typescript-expert/SKILL.md +428 -0
  296. package/.agents/skills/typescript-expert/references/tsconfig-strict.json +92 -0
  297. package/.agents/skills/typescript-expert/references/typescript-cheatsheet.md +383 -0
  298. package/.agents/skills/typescript-expert/references/utility-types.ts +335 -0
  299. package/.agents/skills/typescript-expert/scripts/ts_diagnostic.py +203 -0
  300. package/.agents/skills/typescript-react-reviewer/SKILL.md +200 -0
  301. package/.agents/skills/typescript-react-reviewer/references/antipatterns.md +510 -0
  302. package/.agents/skills/typescript-react-reviewer/references/checklist.md +267 -0
  303. package/.agents/skills/typescript-react-reviewer/references/react19-patterns.md +305 -0
  304. package/.agents/skills/typeset/SKILL.md +116 -0
  305. package/.agents/skills/workflow-creator/SKILL.md +337 -0
  306. package/.agents/skills/workflow-creator/references/agent-sessions.md +789 -0
  307. package/.agents/skills/workflow-creator/references/computation-and-validation.md +224 -0
  308. package/.agents/skills/workflow-creator/references/control-flow.md +450 -0
  309. package/.agents/skills/workflow-creator/references/discovery-and-verification.md +156 -0
  310. package/.agents/skills/workflow-creator/references/failure-modes.md +732 -0
  311. package/.agents/skills/workflow-creator/references/getting-started.md +289 -0
  312. package/.agents/skills/workflow-creator/references/session-config.md +355 -0
  313. package/.agents/skills/workflow-creator/references/state-and-data-flow.md +374 -0
  314. package/.agents/skills/workflow-creator/references/user-input.md +206 -0
  315. package/.agents/skills/workflow-creator/references/workflow-inputs.md +274 -0
  316. package/.agents/skills/xlsx/LICENSE.txt +30 -0
  317. package/.agents/skills/xlsx/SKILL.md +292 -0
  318. package/.agents/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  319. package/.agents/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
  320. package/.agents/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
  321. package/.agents/skills/xlsx/scripts/office/pack.py +159 -0
  322. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  323. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  324. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  325. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  326. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  327. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  328. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  329. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  330. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  331. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  332. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  333. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  334. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  335. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  336. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  337. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  338. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  339. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  340. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  341. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  342. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  343. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  344. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  345. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  346. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  347. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  348. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  349. package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  350. package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  351. package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  352. package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  353. package/.agents/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
  354. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  355. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  356. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  357. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  358. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  359. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  360. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  361. package/.agents/skills/xlsx/scripts/office/soffice.py +183 -0
  362. package/.agents/skills/xlsx/scripts/office/unpack.py +132 -0
  363. package/.agents/skills/xlsx/scripts/office/validate.py +111 -0
  364. package/.agents/skills/xlsx/scripts/office/validators/__init__.py +15 -0
  365. package/.agents/skills/xlsx/scripts/office/validators/base.py +847 -0
  366. package/.agents/skills/xlsx/scripts/office/validators/docx.py +446 -0
  367. package/.agents/skills/xlsx/scripts/office/validators/pptx.py +275 -0
  368. package/.agents/skills/xlsx/scripts/office/validators/redlining.py +247 -0
  369. package/.agents/skills/xlsx/scripts/recalc.py +184 -0
  370. package/.claude/agents/reviewer.md +1 -0
  371. package/.github/agents/reviewer.md +1 -0
  372. package/.opencode/agents/reviewer.md +1 -0
  373. package/README.md +274 -169
  374. package/package.json +6 -7
  375. package/src/commands/cli/init/index.ts +2 -2
  376. package/src/commands/cli/init/scm.ts +7 -8
  377. package/src/commands/cli/workflow-command.test.ts +74 -0
  378. package/src/commands/cli/workflow.ts +7 -2
  379. package/src/scripts/bundle-configs.ts +128 -0
  380. package/src/sdk/components/compact-switcher.tsx +1 -1
  381. package/src/sdk/components/orchestrator-panel-store.ts +13 -0
  382. package/src/sdk/components/orchestrator-panel.tsx +10 -0
  383. package/src/sdk/components/statusline.tsx +13 -1
  384. package/src/sdk/components/workflow-picker-panel.tsx +407 -296
  385. package/src/sdk/providers/claude.ts +50 -0
  386. package/src/sdk/runtime/executor.ts +111 -32
  387. package/src/sdk/types.ts +7 -0
  388. package/src/sdk/workflows/builtin/ralph/claude/index.ts +132 -76
  389. package/src/sdk/workflows/builtin/ralph/copilot/index.ts +129 -71
  390. package/src/sdk/workflows/builtin/ralph/helpers/git.ts +184 -17
  391. package/src/sdk/workflows/builtin/ralph/helpers/prompts.ts +463 -79
  392. package/src/sdk/workflows/builtin/ralph/opencode/index.ts +124 -80
  393. package/src/services/system/auto-sync.ts +31 -51
  394. package/src/services/system/skills.ts +56 -60
  395. package/dist/lib/path-root-guard.d.ts +0 -4
  396. package/dist/lib/path-root-guard.d.ts.map +0 -1
  397. package/dist/sdk/components/color-utils.d.ts +0 -4
  398. package/dist/sdk/components/color-utils.d.ts.map +0 -1
  399. package/dist/sdk/components/compact-switcher.d.ts +0 -10
  400. package/dist/sdk/components/compact-switcher.d.ts.map +0 -1
  401. package/dist/sdk/components/connectors.d.ts +0 -15
  402. package/dist/sdk/components/connectors.d.ts.map +0 -1
  403. package/dist/sdk/components/connectors.test.d.ts +0 -2
  404. package/dist/sdk/components/connectors.test.d.ts.map +0 -1
  405. package/dist/sdk/components/edge.d.ts +0 -4
  406. package/dist/sdk/components/edge.d.ts.map +0 -1
  407. package/dist/sdk/components/error-boundary.d.ts +0 -23
  408. package/dist/sdk/components/error-boundary.d.ts.map +0 -1
  409. package/dist/sdk/components/graph-theme.d.ts +0 -17
  410. package/dist/sdk/components/graph-theme.d.ts.map +0 -1
  411. package/dist/sdk/components/header.d.ts +0 -3
  412. package/dist/sdk/components/header.d.ts.map +0 -1
  413. package/dist/sdk/components/hooks.d.ts +0 -15
  414. package/dist/sdk/components/hooks.d.ts.map +0 -1
  415. package/dist/sdk/components/layout.d.ts +0 -27
  416. package/dist/sdk/components/layout.d.ts.map +0 -1
  417. package/dist/sdk/components/layout.test.d.ts +0 -2
  418. package/dist/sdk/components/layout.test.d.ts.map +0 -1
  419. package/dist/sdk/components/node-card.d.ts +0 -10
  420. package/dist/sdk/components/node-card.d.ts.map +0 -1
  421. package/dist/sdk/components/orchestrator-panel-contexts.d.ts +0 -16
  422. package/dist/sdk/components/orchestrator-panel-contexts.d.ts.map +0 -1
  423. package/dist/sdk/components/orchestrator-panel-store.d.ts +0 -46
  424. package/dist/sdk/components/orchestrator-panel-store.d.ts.map +0 -1
  425. package/dist/sdk/components/orchestrator-panel-store.test.d.ts +0 -2
  426. package/dist/sdk/components/orchestrator-panel-store.test.d.ts.map +0 -1
  427. package/dist/sdk/components/orchestrator-panel-types.d.ts +0 -18
  428. package/dist/sdk/components/orchestrator-panel-types.d.ts.map +0 -1
  429. package/dist/sdk/components/orchestrator-panel.d.ts +0 -52
  430. package/dist/sdk/components/orchestrator-panel.d.ts.map +0 -1
  431. package/dist/sdk/components/session-graph-panel.d.ts +0 -7
  432. package/dist/sdk/components/session-graph-panel.d.ts.map +0 -1
  433. package/dist/sdk/components/status-helpers.d.ts +0 -6
  434. package/dist/sdk/components/status-helpers.d.ts.map +0 -1
  435. package/dist/sdk/components/statusline.d.ts +0 -7
  436. package/dist/sdk/components/statusline.d.ts.map +0 -1
  437. package/dist/sdk/components/workflow-picker-panel.d.ts +0 -123
  438. package/dist/sdk/components/workflow-picker-panel.d.ts.map +0 -1
  439. package/dist/sdk/define-workflow.d.ts +0 -78
  440. package/dist/sdk/define-workflow.d.ts.map +0 -1
  441. package/dist/sdk/define-workflow.test.d.ts +0 -2
  442. package/dist/sdk/define-workflow.test.d.ts.map +0 -1
  443. package/dist/sdk/errors.d.ts +0 -24
  444. package/dist/sdk/errors.d.ts.map +0 -1
  445. package/dist/sdk/errors.test.d.ts +0 -2
  446. package/dist/sdk/errors.test.d.ts.map +0 -1
  447. package/dist/sdk/index.d.ts +0 -13
  448. package/dist/sdk/index.d.ts.map +0 -1
  449. package/dist/sdk/providers/claude.d.ts +0 -170
  450. package/dist/sdk/providers/claude.d.ts.map +0 -1
  451. package/dist/sdk/providers/copilot.d.ts +0 -11
  452. package/dist/sdk/providers/copilot.d.ts.map +0 -1
  453. package/dist/sdk/providers/opencode.d.ts +0 -11
  454. package/dist/sdk/providers/opencode.d.ts.map +0 -1
  455. package/dist/sdk/runtime/discovery.d.ts +0 -86
  456. package/dist/sdk/runtime/discovery.d.ts.map +0 -1
  457. package/dist/sdk/runtime/executor-entry.d.ts +0 -11
  458. package/dist/sdk/runtime/executor-entry.d.ts.map +0 -1
  459. package/dist/sdk/runtime/executor.d.ts +0 -72
  460. package/dist/sdk/runtime/executor.d.ts.map +0 -1
  461. package/dist/sdk/runtime/executor.test.d.ts +0 -2
  462. package/dist/sdk/runtime/executor.test.d.ts.map +0 -1
  463. package/dist/sdk/runtime/graph-inference.d.ts +0 -35
  464. package/dist/sdk/runtime/graph-inference.d.ts.map +0 -1
  465. package/dist/sdk/runtime/loader.d.ts +0 -70
  466. package/dist/sdk/runtime/loader.d.ts.map +0 -1
  467. package/dist/sdk/runtime/panel.d.ts +0 -9
  468. package/dist/sdk/runtime/panel.d.ts.map +0 -1
  469. package/dist/sdk/runtime/theme.d.ts +0 -28
  470. package/dist/sdk/runtime/theme.d.ts.map +0 -1
  471. package/dist/sdk/runtime/tmux.d.ts +0 -297
  472. package/dist/sdk/runtime/tmux.d.ts.map +0 -1
  473. package/dist/sdk/types.d.ts +0 -295
  474. package/dist/sdk/types.d.ts.map +0 -1
  475. package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts +0 -62
  476. package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts.map +0 -1
  477. package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts +0 -46
  478. package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts.map +0 -1
  479. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts +0 -26
  480. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts.map +0 -1
  481. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts +0 -92
  482. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts.map +0 -1
  483. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts +0 -57
  484. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts.map +0 -1
  485. package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts +0 -49
  486. package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts.map +0 -1
  487. package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts +0 -14
  488. package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts.map +0 -1
  489. package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts +0 -14
  490. package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts.map +0 -1
  491. package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts +0 -17
  492. package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts.map +0 -1
  493. package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts +0 -119
  494. package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts.map +0 -1
  495. package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts +0 -20
  496. package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts.map +0 -1
  497. package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts +0 -14
  498. package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts.map +0 -1
  499. package/dist/sdk/workflows/index.d.ts +0 -24
  500. package/dist/sdk/workflows/index.d.ts.map +0 -1
  501. package/dist/services/config/definitions.d.ts +0 -85
  502. package/dist/services/config/definitions.d.ts.map +0 -1
  503. package/dist/services/system/copy.d.ts +0 -77
  504. package/dist/services/system/copy.d.ts.map +0 -1
  505. package/dist/services/system/detect.d.ts +0 -75
  506. package/dist/services/system/detect.d.ts.map +0 -1
  507. package/tsconfig.json +0 -33
@@ -0,0 +1,617 @@
1
+ # Keyboard Input Handling
2
+
3
+ How to handle keyboard input in OpenTUI applications.
4
+
5
+ ## Overview
6
+
7
+ OpenTUI provides keyboard input handling through:
8
+ - **Core**: `renderer.keyInput` EventEmitter
9
+ - **React**: `useKeyboard()` hook
10
+ - **Solid**: `useKeyboard()` hook
11
+
12
+ ## When to Use
13
+
14
+ Use this reference when you need keyboard shortcuts, focus-aware input handling, or custom keybindings.
15
+
16
+ ## KeyEvent Object
17
+
18
+ All keyboard handlers receive a `KeyEvent` object:
19
+
20
+ ```typescript
21
+ interface KeyEvent {
22
+ name: string // Key name: "a", "escape", "f1", etc.
23
+ sequence: string // Raw escape sequence
24
+ ctrl: boolean // Ctrl modifier held
25
+ shift: boolean // Shift modifier held
26
+ meta: boolean // Alt modifier held
27
+ option: boolean // Option modifier held (macOS)
28
+ eventType: "press" | "release" | "repeat"
29
+ repeated: boolean // Key is being held (repeat event)
30
+ }
31
+ ```
32
+
33
+ ## Basic Usage
34
+
35
+ ### Core
36
+
37
+ ```typescript
38
+ import { createCliRenderer, type KeyEvent } from "@opentui/core"
39
+
40
+ const renderer = await createCliRenderer()
41
+
42
+ renderer.keyInput.on("keypress", (key: KeyEvent) => {
43
+ if (key.name === "escape") {
44
+ renderer.destroy()
45
+ return
46
+ }
47
+
48
+ if (key.ctrl && key.name === "s") {
49
+ saveDocument()
50
+ }
51
+ })
52
+ ```
53
+
54
+ ### React
55
+
56
+ ```tsx
57
+ import { useKeyboard, useRenderer } from "@opentui/react"
58
+
59
+ function App() {
60
+ const renderer = useRenderer()
61
+ useKeyboard((key) => {
62
+ if (key.name === "escape") {
63
+ renderer.destroy()
64
+ }
65
+ })
66
+
67
+ return <text>Press ESC to exit</text>
68
+ }
69
+ ```
70
+
71
+
72
+ ### Solid
73
+
74
+ ```tsx
75
+ import { useKeyboard, useRenderer } from "@opentui/solid"
76
+
77
+ function App() {
78
+ const renderer = useRenderer()
79
+ useKeyboard((key) => {
80
+ if (key.name === "escape") {
81
+ renderer.destroy()
82
+ }
83
+ })
84
+
85
+ return <text>Press ESC to exit</text>
86
+ }
87
+ ```
88
+
89
+ ## Key Names
90
+
91
+ ### Alphabetic Keys
92
+
93
+ Lowercase: `a`, `b`, `c`, ... `z`
94
+
95
+ With Shift: Check `key.shift && key.name === "a"` for uppercase
96
+
97
+ ### Numeric Keys
98
+
99
+ `0`, `1`, `2`, ... `9`
100
+
101
+ ### Function Keys
102
+
103
+ `f1`, `f2`, `f3`, ... `f12`
104
+
105
+ ### Special Keys
106
+
107
+ | Key Name | Description |
108
+ |----------|-------------|
109
+ | `escape` | Escape key |
110
+ | `enter` | Enter/Return |
111
+ | `return` | Enter/Return (alias) |
112
+ | `tab` | Tab key |
113
+ | `backspace` | Backspace |
114
+ | `delete` | Delete key |
115
+ | `space` | Spacebar |
116
+
117
+ ### Arrow Keys
118
+
119
+ | Key Name | Description |
120
+ |----------|-------------|
121
+ | `up` | Up arrow |
122
+ | `down` | Down arrow |
123
+ | `left` | Left arrow |
124
+ | `right` | Right arrow |
125
+
126
+ ### Navigation Keys
127
+
128
+ | Key Name | Description |
129
+ |----------|-------------|
130
+ | `home` | Home key |
131
+ | `end` | End key |
132
+ | `pageup` | Page Up |
133
+ | `pagedown` | Page Down |
134
+ | `insert` | Insert key |
135
+
136
+ ## Modifier Keys
137
+
138
+ Check modifier properties on `KeyEvent`:
139
+
140
+ ```typescript
141
+ renderer.keyInput.on("keypress", (key) => {
142
+ if (key.ctrl && key.name === "c") {
143
+ // Ctrl+C
144
+ }
145
+
146
+ if (key.shift && key.name === "tab") {
147
+ // Shift+Tab
148
+ }
149
+
150
+ if (key.meta && key.name === "s") {
151
+ // Alt+S (meta = Alt on most systems)
152
+ }
153
+
154
+ if (key.option && key.name === "a") {
155
+ // Option+A (macOS)
156
+ }
157
+ })
158
+ ```
159
+
160
+ ### Modifier Combinations
161
+
162
+ ```typescript
163
+ // Ctrl+Shift+S
164
+ if (key.ctrl && key.shift && key.name === "s") {
165
+ saveAs()
166
+ }
167
+
168
+ // Ctrl+Alt+Delete (careful with system shortcuts!)
169
+ if (key.ctrl && key.meta && key.name === "delete") {
170
+ // ...
171
+ }
172
+ ```
173
+
174
+ ## Event Types
175
+
176
+ ### Press Events (Default)
177
+
178
+ Normal key press:
179
+
180
+ ```typescript
181
+ renderer.keyInput.on("keypress", (key) => {
182
+ if (key.eventType === "press") {
183
+ // Initial key press
184
+ }
185
+ })
186
+ ```
187
+
188
+ ### Repeat Events
189
+
190
+ Key held down:
191
+
192
+ ```typescript
193
+ renderer.keyInput.on("keypress", (key) => {
194
+ if (key.eventType === "repeat" || key.repeated) {
195
+ // Key is being held
196
+ }
197
+ })
198
+ ```
199
+
200
+ ### Release Events
201
+
202
+ Key released (opt-in):
203
+
204
+ ```tsx
205
+ // React
206
+ useKeyboard(
207
+ (key) => {
208
+ if (key.eventType === "release") {
209
+ // Key released
210
+ }
211
+ },
212
+ { release: true } // Enable release events
213
+ )
214
+
215
+ // Solid
216
+ useKeyboard(
217
+ (key) => {
218
+ if (key.eventType === "release") {
219
+ // Key released
220
+ }
221
+ },
222
+ { release: true }
223
+ )
224
+ ```
225
+
226
+ ## Patterns
227
+
228
+ ### Navigation Menu
229
+
230
+ ```tsx
231
+ function Menu() {
232
+ const [selectedIndex, setSelectedIndex] = useState(0)
233
+ const items = ["Home", "Settings", "Help", "Quit"]
234
+
235
+ useKeyboard((key) => {
236
+ switch (key.name) {
237
+ case "up":
238
+ case "k":
239
+ setSelectedIndex(i => Math.max(0, i - 1))
240
+ break
241
+ case "down":
242
+ case "j":
243
+ setSelectedIndex(i => Math.min(items.length - 1, i + 1))
244
+ break
245
+ case "enter":
246
+ handleSelect(items[selectedIndex])
247
+ break
248
+ }
249
+ })
250
+
251
+ return (
252
+ <box flexDirection="column">
253
+ {items.map((item, i) => (
254
+ <text
255
+ key={item}
256
+ fg={i === selectedIndex ? "#00FF00" : "#FFFFFF"}
257
+ >
258
+ {i === selectedIndex ? "> " : " "}{item}
259
+ </text>
260
+ ))}
261
+ </box>
262
+ )
263
+ }
264
+ ```
265
+
266
+ ### Modal Escape
267
+
268
+ ```tsx
269
+ function Modal({ onClose, children }) {
270
+ useKeyboard((key) => {
271
+ if (key.name === "escape") {
272
+ onClose()
273
+ }
274
+ })
275
+
276
+ return (
277
+ <box border padding={2}>
278
+ {children}
279
+ </box>
280
+ )
281
+ }
282
+ ```
283
+
284
+ ### Vim-style Modes
285
+
286
+ ```tsx
287
+ function Editor() {
288
+ const [mode, setMode] = useState<"normal" | "insert">("normal")
289
+ const [content, setContent] = useState("")
290
+
291
+ useKeyboard((key) => {
292
+ if (mode === "normal") {
293
+ switch (key.name) {
294
+ case "i":
295
+ setMode("insert")
296
+ break
297
+ case "escape":
298
+ // Already in normal mode
299
+ break
300
+ case "j":
301
+ moveCursorDown()
302
+ break
303
+ case "k":
304
+ moveCursorUp()
305
+ break
306
+ }
307
+ } else if (mode === "insert") {
308
+ if (key.name === "escape") {
309
+ setMode("normal")
310
+ }
311
+ // Input component handles text in insert mode
312
+ }
313
+ })
314
+
315
+ return (
316
+ <box flexDirection="column">
317
+ <text>Mode: {mode}</text>
318
+ <textarea
319
+ value={content}
320
+ onChange={setContent}
321
+ focused={mode === "insert"}
322
+ />
323
+ </box>
324
+ )
325
+ }
326
+ ```
327
+
328
+ ### Game Controls
329
+
330
+ ```tsx
331
+ function Game() {
332
+ const [pressed, setPressed] = useState(new Set<string>())
333
+
334
+ useKeyboard(
335
+ (key) => {
336
+ setPressed(keys => {
337
+ const newKeys = new Set(keys)
338
+ if (key.eventType === "release") {
339
+ newKeys.delete(key.name)
340
+ } else {
341
+ newKeys.add(key.name)
342
+ }
343
+ return newKeys
344
+ })
345
+ },
346
+ { release: true }
347
+ )
348
+
349
+ // Game logic uses pressed set
350
+ useEffect(() => {
351
+ if (pressed.has("up") || pressed.has("w")) {
352
+ moveUp()
353
+ }
354
+ if (pressed.has("down") || pressed.has("s")) {
355
+ moveDown()
356
+ }
357
+ }, [pressed])
358
+
359
+ return <text>WASD or arrows to move</text>
360
+ }
361
+ ```
362
+
363
+ ### Keyboard Shortcuts Help
364
+
365
+ ```tsx
366
+ function ShortcutsHelp() {
367
+ const shortcuts = [
368
+ { keys: "Ctrl+S", action: "Save" },
369
+ { keys: "Ctrl+Q", action: "Quit" },
370
+ { keys: "Ctrl+F", action: "Find" },
371
+ { keys: "Tab", action: "Next field" },
372
+ { keys: "Shift+Tab", action: "Previous field" },
373
+ ]
374
+
375
+ return (
376
+ <box border title="Keyboard Shortcuts" padding={1}>
377
+ {shortcuts.map(({ keys, action }) => (
378
+ <box key={keys} flexDirection="row">
379
+ <text width={15} fg="#00FFFF">{keys}</text>
380
+ <text>{action}</text>
381
+ </box>
382
+ ))}
383
+ </box>
384
+ )
385
+ }
386
+ ```
387
+
388
+ ## Paste Events
389
+
390
+ Handle pasted content. Paste events deliver raw bytes, not decoded text.
391
+
392
+ ### PasteEvent Object
393
+
394
+ ```typescript
395
+ import { type PasteEvent } from "@opentui/core"
396
+
397
+ interface PasteEvent {
398
+ type: "paste" // Always "paste"
399
+ bytes: Uint8Array // Raw pasted bytes
400
+ metadata?: PasteMetadata // Optional metadata
401
+ preventDefault(): void // Prevent default paste handling
402
+ defaultPrevented: boolean // Whether preventDefault was called
403
+ }
404
+
405
+ interface PasteMetadata {
406
+ mimeType?: string // MIME type if available
407
+ kind?: PasteKind // Paste kind
408
+ }
409
+ ```
410
+
411
+ ### Decoding Paste Bytes
412
+
413
+ Use `decodePasteBytes` to convert raw bytes to a string, and `stripAnsiSequences` to remove ANSI escape codes:
414
+
415
+ ```typescript
416
+ import { decodePasteBytes, stripAnsiSequences } from "@opentui/core"
417
+
418
+ const text = decodePasteBytes(event.bytes) // Decode UTF-8
419
+ const clean = stripAnsiSequences(decodePasteBytes(event.bytes)) // Decode + strip ANSI
420
+ ```
421
+
422
+ ### Core
423
+
424
+ ```typescript
425
+ import { type PasteEvent, decodePasteBytes } from "@opentui/core"
426
+
427
+ renderer.keyInput.on("paste", (event: PasteEvent) => {
428
+ const text = decodePasteBytes(event.bytes)
429
+ console.log("Pasted:", text)
430
+ })
431
+ ```
432
+
433
+ ### Solid
434
+
435
+ Solid provides a dedicated `usePaste` hook:
436
+
437
+ ```tsx
438
+ import { usePaste } from "@opentui/solid"
439
+ import { decodePasteBytes } from "@opentui/core"
440
+
441
+ function App() {
442
+ usePaste((event) => {
443
+ const text = decodePasteBytes(event.bytes)
444
+ console.log("Pasted:", text)
445
+ })
446
+
447
+ return <text>Paste something</text>
448
+ }
449
+ ```
450
+
451
+ > **Note**: `usePaste` is **Solid-only**. React does not have this hook - handle paste via the Core event emitter or input component's `onChange`.
452
+
453
+ ## Text Selection
454
+
455
+ Text selection is renderer-managed. The renderer owns a single `Selection` object, walks the renderable tree to find selectable children, and emits a `"selection"` event when the user finishes selecting (mouse-up). The `Selection` object aggregates text from all selected renderables automatically.
456
+
457
+ ### Making Renderables Selectable
458
+
459
+ A renderable must have `selectable` set to `true` to participate in selection. Text-based renderables (`TextRenderable`, `TextareaRenderable`, `ASCIIFontRenderable`, `TextTableRenderable`) support this:
460
+
461
+ ```tsx
462
+ // React / Solid
463
+ <text selectable>This text can be selected</text>
464
+
465
+ // Core
466
+ const text = new TextRenderable(renderer, {
467
+ id: "label",
468
+ content: "This text can be selected",
469
+ selectable: true,
470
+ })
471
+ ```
472
+
473
+ ### Copy-on-Selection (Core)
474
+
475
+ Listen to the renderer's `"selection"` event. The `Selection` object's `getSelectedText()` returns text aggregated from all selected renderables in reading order:
476
+
477
+ ```typescript
478
+ import type { Selection } from "@opentui/core"
479
+
480
+ renderer.on("selection", (selection: Selection) => {
481
+ const text = selection.getSelectedText()
482
+ if (text) {
483
+ renderer.copyToClipboardOSC52(text)
484
+ }
485
+ })
486
+ ```
487
+
488
+ > **Important**: Call `selection.getSelectedText()` on the `Selection` object from the event -- not `renderer.root.getSelectedText()`. Individual renderables only return their own selected text. The `Selection` object aggregates across the tree.
489
+
490
+ ### Copy-on-Selection (Solid)
491
+
492
+ ```tsx
493
+ import { useSelectionHandler } from "@opentui/solid"
494
+
495
+ function App() {
496
+ useSelectionHandler((selection) => {
497
+ const text = selection.getSelectedText()
498
+ if (text) {
499
+ renderer.copyToClipboardOSC52(text)
500
+ }
501
+ })
502
+
503
+ return <text selectable>Select this text</text>
504
+ }
505
+ ```
506
+
507
+ > **Note**: `useSelectionHandler` is **Solid-only**. React does not have this hook -- use the Core `renderer.on("selection", ...)` event.
508
+
509
+ ### Selection Object
510
+
511
+ The `Selection` object passed to the event callback:
512
+
513
+ ```typescript
514
+ selection.getSelectedText() // Aggregated text from all selected renderables
515
+ selection.bounds // { startX, startY, endX, endY } bounding rect
516
+ selection.selectedRenderables // Renderable[] with active selections
517
+ selection.isActive // Whether selection is still active
518
+ ```
519
+
520
+ Individual renderables also expose:
521
+
522
+ ```typescript
523
+ renderable.hasSelection() // Does this renderable have selected text?
524
+ renderable.getSelectedText() // Selected text in this renderable only
525
+ ```
526
+
527
+ ### How Selection Traversal Works
528
+
529
+ When the user drags to select, the renderer:
530
+ 1. Identifies the selection container (common ancestor of start and end points)
531
+ 2. Walks all `selectable` descendants within the selection bounds
532
+ 3. Calls `onSelectionChanged(selection)` on each, which computes local selection
533
+ 4. Tracks which renderables have active selections in `selection.selectedRenderables`
534
+
535
+ This means selection works across multiple renderables. Dragging across two `<text selectable>` elements selects text in both, and `selection.getSelectedText()` joins them with newlines.
536
+
537
+ ## Clipboard API (OSC 52)
538
+
539
+ Copy text to the system clipboard using OSC 52 escape sequences. Works over SSH and in most modern terminal emulators.
540
+
541
+ ```typescript
542
+ // Copy to clipboard
543
+ const success = renderer.copyToClipboardOSC52("text to copy")
544
+
545
+ // Check if OSC 52 is supported
546
+ if (renderer.isOsc52Supported()) {
547
+ renderer.copyToClipboardOSC52("Hello!")
548
+ }
549
+
550
+ // Clear clipboard
551
+ renderer.clearClipboardOSC52()
552
+
553
+ // Target specific clipboard (X11)
554
+ import { ClipboardTarget } from "@opentui/core"
555
+ renderer.copyToClipboardOSC52("text", ClipboardTarget.Primary) // X11 primary
556
+ renderer.copyToClipboardOSC52("text", ClipboardTarget.Clipboard) // System clipboard (default)
557
+ ```
558
+
559
+ ## Focus and Input Components
560
+
561
+ Input components (`<input>`, `<textarea>`, `<select>`) capture keyboard events when focused:
562
+
563
+ ```tsx
564
+ <input focused /> // Receives keyboard input
565
+
566
+ // Global useKeyboard still fires, but input consumes characters
567
+ ```
568
+
569
+ To prevent conflicts, check if an input is focused before handling global shortcuts:
570
+
571
+ ```tsx
572
+ function App() {
573
+ const renderer = useRenderer()
574
+ const [inputFocused, setInputFocused] = useState(false)
575
+
576
+ useKeyboard((key) => {
577
+ if (inputFocused) return // Let input handle it
578
+
579
+ // Global shortcuts
580
+ if (key.name === "escape") {
581
+ renderer.destroy()
582
+ }
583
+ })
584
+
585
+ return (
586
+ <input
587
+ focused={inputFocused}
588
+ onFocus={() => setInputFocused(true)}
589
+ onBlur={() => setInputFocused(false)}
590
+ />
591
+ )
592
+ }
593
+ ```
594
+
595
+ ## Gotchas
596
+
597
+ ### Terminal Limitations
598
+
599
+ Some key combinations are captured by the terminal or OS:
600
+ - `Ctrl+C` often sends SIGINT (use `exitOnCtrlC: false` to handle)
601
+ - `Ctrl+Z` suspends the process
602
+ - Some function keys may be intercepted
603
+
604
+ ### SSH and Remote Sessions
605
+
606
+ Key detection may vary over SSH. Test on target environments.
607
+
608
+ ### Multiple Handlers
609
+
610
+ Multiple `useKeyboard` calls all receive events. Coordinate handlers to prevent conflicts.
611
+
612
+ ## See Also
613
+
614
+ - [React API](../react/api.md) - `useKeyboard` hook reference
615
+ - [Solid API](../solid/api.md) - `useKeyboard` hook reference
616
+ - [Input Components](../components/inputs.md) - Focus management with input, textarea, select
617
+ - [Testing](../testing/REFERENCE.md) - Simulating key presses in tests