@bastani/atomic 0.5.11 → 0.5.12-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) 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/providers/claude.ts +42 -0
  385. package/src/sdk/runtime/executor.ts +111 -32
  386. package/src/sdk/types.ts +7 -0
  387. package/src/sdk/workflows/builtin/ralph/claude/index.ts +132 -76
  388. package/src/sdk/workflows/builtin/ralph/copilot/index.ts +129 -71
  389. package/src/sdk/workflows/builtin/ralph/helpers/git.ts +184 -17
  390. package/src/sdk/workflows/builtin/ralph/helpers/prompts.ts +463 -79
  391. package/src/sdk/workflows/builtin/ralph/opencode/index.ts +124 -80
  392. package/src/services/system/auto-sync.ts +31 -51
  393. package/src/services/system/skills.ts +56 -60
  394. package/dist/lib/path-root-guard.d.ts +0 -4
  395. package/dist/lib/path-root-guard.d.ts.map +0 -1
  396. package/dist/sdk/components/color-utils.d.ts +0 -4
  397. package/dist/sdk/components/color-utils.d.ts.map +0 -1
  398. package/dist/sdk/components/compact-switcher.d.ts +0 -10
  399. package/dist/sdk/components/compact-switcher.d.ts.map +0 -1
  400. package/dist/sdk/components/connectors.d.ts +0 -15
  401. package/dist/sdk/components/connectors.d.ts.map +0 -1
  402. package/dist/sdk/components/connectors.test.d.ts +0 -2
  403. package/dist/sdk/components/connectors.test.d.ts.map +0 -1
  404. package/dist/sdk/components/edge.d.ts +0 -4
  405. package/dist/sdk/components/edge.d.ts.map +0 -1
  406. package/dist/sdk/components/error-boundary.d.ts +0 -23
  407. package/dist/sdk/components/error-boundary.d.ts.map +0 -1
  408. package/dist/sdk/components/graph-theme.d.ts +0 -17
  409. package/dist/sdk/components/graph-theme.d.ts.map +0 -1
  410. package/dist/sdk/components/header.d.ts +0 -3
  411. package/dist/sdk/components/header.d.ts.map +0 -1
  412. package/dist/sdk/components/hooks.d.ts +0 -15
  413. package/dist/sdk/components/hooks.d.ts.map +0 -1
  414. package/dist/sdk/components/layout.d.ts +0 -27
  415. package/dist/sdk/components/layout.d.ts.map +0 -1
  416. package/dist/sdk/components/layout.test.d.ts +0 -2
  417. package/dist/sdk/components/layout.test.d.ts.map +0 -1
  418. package/dist/sdk/components/node-card.d.ts +0 -10
  419. package/dist/sdk/components/node-card.d.ts.map +0 -1
  420. package/dist/sdk/components/orchestrator-panel-contexts.d.ts +0 -16
  421. package/dist/sdk/components/orchestrator-panel-contexts.d.ts.map +0 -1
  422. package/dist/sdk/components/orchestrator-panel-store.d.ts +0 -46
  423. package/dist/sdk/components/orchestrator-panel-store.d.ts.map +0 -1
  424. package/dist/sdk/components/orchestrator-panel-store.test.d.ts +0 -2
  425. package/dist/sdk/components/orchestrator-panel-store.test.d.ts.map +0 -1
  426. package/dist/sdk/components/orchestrator-panel-types.d.ts +0 -18
  427. package/dist/sdk/components/orchestrator-panel-types.d.ts.map +0 -1
  428. package/dist/sdk/components/orchestrator-panel.d.ts +0 -52
  429. package/dist/sdk/components/orchestrator-panel.d.ts.map +0 -1
  430. package/dist/sdk/components/session-graph-panel.d.ts +0 -7
  431. package/dist/sdk/components/session-graph-panel.d.ts.map +0 -1
  432. package/dist/sdk/components/status-helpers.d.ts +0 -6
  433. package/dist/sdk/components/status-helpers.d.ts.map +0 -1
  434. package/dist/sdk/components/statusline.d.ts +0 -7
  435. package/dist/sdk/components/statusline.d.ts.map +0 -1
  436. package/dist/sdk/components/workflow-picker-panel.d.ts +0 -123
  437. package/dist/sdk/components/workflow-picker-panel.d.ts.map +0 -1
  438. package/dist/sdk/define-workflow.d.ts +0 -78
  439. package/dist/sdk/define-workflow.d.ts.map +0 -1
  440. package/dist/sdk/define-workflow.test.d.ts +0 -2
  441. package/dist/sdk/define-workflow.test.d.ts.map +0 -1
  442. package/dist/sdk/errors.d.ts +0 -24
  443. package/dist/sdk/errors.d.ts.map +0 -1
  444. package/dist/sdk/errors.test.d.ts +0 -2
  445. package/dist/sdk/errors.test.d.ts.map +0 -1
  446. package/dist/sdk/index.d.ts +0 -13
  447. package/dist/sdk/index.d.ts.map +0 -1
  448. package/dist/sdk/providers/claude.d.ts +0 -170
  449. package/dist/sdk/providers/claude.d.ts.map +0 -1
  450. package/dist/sdk/providers/copilot.d.ts +0 -11
  451. package/dist/sdk/providers/copilot.d.ts.map +0 -1
  452. package/dist/sdk/providers/opencode.d.ts +0 -11
  453. package/dist/sdk/providers/opencode.d.ts.map +0 -1
  454. package/dist/sdk/runtime/discovery.d.ts +0 -86
  455. package/dist/sdk/runtime/discovery.d.ts.map +0 -1
  456. package/dist/sdk/runtime/executor-entry.d.ts +0 -11
  457. package/dist/sdk/runtime/executor-entry.d.ts.map +0 -1
  458. package/dist/sdk/runtime/executor.d.ts +0 -72
  459. package/dist/sdk/runtime/executor.d.ts.map +0 -1
  460. package/dist/sdk/runtime/executor.test.d.ts +0 -2
  461. package/dist/sdk/runtime/executor.test.d.ts.map +0 -1
  462. package/dist/sdk/runtime/graph-inference.d.ts +0 -35
  463. package/dist/sdk/runtime/graph-inference.d.ts.map +0 -1
  464. package/dist/sdk/runtime/loader.d.ts +0 -70
  465. package/dist/sdk/runtime/loader.d.ts.map +0 -1
  466. package/dist/sdk/runtime/panel.d.ts +0 -9
  467. package/dist/sdk/runtime/panel.d.ts.map +0 -1
  468. package/dist/sdk/runtime/theme.d.ts +0 -28
  469. package/dist/sdk/runtime/theme.d.ts.map +0 -1
  470. package/dist/sdk/runtime/tmux.d.ts +0 -297
  471. package/dist/sdk/runtime/tmux.d.ts.map +0 -1
  472. package/dist/sdk/types.d.ts +0 -295
  473. package/dist/sdk/types.d.ts.map +0 -1
  474. package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts +0 -62
  475. package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts.map +0 -1
  476. package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts +0 -46
  477. package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts.map +0 -1
  478. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts +0 -26
  479. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts.map +0 -1
  480. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts +0 -92
  481. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts.map +0 -1
  482. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts +0 -57
  483. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts.map +0 -1
  484. package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts +0 -49
  485. package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts.map +0 -1
  486. package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts +0 -14
  487. package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts.map +0 -1
  488. package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts +0 -14
  489. package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts.map +0 -1
  490. package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts +0 -17
  491. package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts.map +0 -1
  492. package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts +0 -119
  493. package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts.map +0 -1
  494. package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts +0 -20
  495. package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts.map +0 -1
  496. package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts +0 -14
  497. package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts.map +0 -1
  498. package/dist/sdk/workflows/index.d.ts +0 -24
  499. package/dist/sdk/workflows/index.d.ts.map +0 -1
  500. package/dist/services/config/definitions.d.ts +0 -85
  501. package/dist/services/config/definitions.d.ts.map +0 -1
  502. package/dist/services/system/copy.d.ts +0 -77
  503. package/dist/services/system/copy.d.ts.map +0 -1
  504. package/dist/services/system/detect.d.ts +0 -75
  505. package/dist/services/system/detect.d.ts.map +0 -1
  506. package/tsconfig.json +0 -33
@@ -45,6 +45,8 @@ import {
45
45
  clearClaudeSession,
46
46
  ClaudeClientWrapper,
47
47
  ClaudeSessionWrapper,
48
+ HeadlessClaudeClientWrapper,
49
+ HeadlessClaudeSessionWrapper,
48
50
  } from "../providers/claude.ts";
49
51
  import { OrchestratorPanel } from "./panel.tsx";
50
52
  import { GraphFrontierTracker } from "./graph-inference.ts";
@@ -560,33 +562,66 @@ async function initProviderClientAndSession<A extends AgentType>(
560
562
  sessionId: string,
561
563
  clientOpts: StageClientOptions<A>,
562
564
  sessionOpts: StageSessionOptions<A>,
563
- ): Promise<{ client: ProviderClient<A>; session: ProviderSession<A> }> {
564
- type Result = { client: ProviderClient<A>; session: ProviderSession<A> };
565
+ headless = false,
566
+ ): Promise<{
567
+ client: ProviderClient<A>;
568
+ session: ProviderSession<A>;
569
+ /** Optional cleanup for SDK-managed resources (e.g. headless OpenCode server). */
570
+ cleanup?: () => void;
571
+ }> {
572
+ type Result = {
573
+ client: ProviderClient<A>;
574
+ session: ProviderSession<A>;
575
+ cleanup?: () => void;
576
+ };
565
577
 
566
578
  switch (agent) {
567
579
  case "copilot": {
568
580
  const { CopilotClient, approveAll } = await import("@github/copilot-sdk");
569
581
  const copilotClientOpts = clientOpts as StageClientOptions<"copilot">;
570
582
  const copilotSessionOpts = sessionOpts as StageSessionOptions<"copilot">;
571
- const client = new CopilotClient({ ...copilotClientOpts, cliUrl: serverUrl });
583
+ // Headless: let the SDK spawn its own CLI process (no cliUrl).
584
+ // Non-headless: connect to the CLI server running in a tmux pane.
585
+ const client = headless
586
+ ? new CopilotClient({ ...copilotClientOpts })
587
+ : new CopilotClient({ ...copilotClientOpts, cliUrl: serverUrl });
572
588
  await client.start();
573
589
  const session = await client.createSession({
574
590
  onPermissionRequest: approveAll,
575
591
  ...copilotSessionOpts,
576
592
  });
577
- await client.setForegroundSessionId(session.sessionId);
593
+ if (!headless) {
594
+ await client.setForegroundSessionId(session.sessionId);
595
+ }
578
596
  return { client, session } as Result;
579
597
  }
580
598
  case "opencode": {
599
+ const ocSessionOpts = sessionOpts as StageSessionOptions<"opencode">;
600
+ if (headless) {
601
+ const { createOpencode } = await import("@opencode-ai/sdk/v2");
602
+ const oc = await createOpencode({ port: 0 });
603
+ const sessionResult = await oc.client.session.create(ocSessionOpts);
604
+ return {
605
+ client: oc.client,
606
+ session: sessionResult.data!,
607
+ cleanup: () => oc.server.close(),
608
+ } as Result;
609
+ }
581
610
  const { createOpencodeClient } = await import("@opencode-ai/sdk/v2");
582
611
  const ocClientOpts = clientOpts as StageClientOptions<"opencode">;
583
- const ocSessionOpts = sessionOpts as StageSessionOptions<"opencode">;
584
612
  const client = createOpencodeClient({ ...ocClientOpts, baseUrl: serverUrl });
585
613
  const sessionResult = await client.session.create(ocSessionOpts);
586
614
  await client.tui.selectSession({ sessionID: sessionResult.data!.id });
587
615
  return { client, session: sessionResult.data! } as Result;
588
616
  }
589
617
  case "claude": {
618
+ if (headless) {
619
+ // Headless Claude stages use the Agent SDK directly — no tmux pane.
620
+ const client = new HeadlessClaudeClientWrapper();
621
+ await client.start();
622
+ const session = new HeadlessClaudeSessionWrapper(sessionId);
623
+ return { client, session } as Result;
624
+ }
590
625
  const claudeClientOpts = clientOpts as StageClientOptions<"claude">;
591
626
  const claudeSessionOpts = sessionOpts as StageSessionOptions<"claude">;
592
627
  const client = new ClaudeClientWrapper(paneId, claudeClientOpts);
@@ -633,7 +668,10 @@ async function cleanupProvider<A extends AgentType>(
633
668
  // Stateless HTTP client — no cleanup needed
634
669
  break;
635
670
  case "claude":
636
- clearClaudeSession(paneId);
671
+ // Headless Claude stages have no tmux pane to clear.
672
+ if (!paneId.startsWith("headless-")) {
673
+ clearClaudeSession(paneId);
674
+ }
637
675
  break;
638
676
  default:
639
677
  assertNever(agent);
@@ -685,8 +723,13 @@ function createSessionRunner(
685
723
  throw new Error(`Duplicate session name: "${name}"`);
686
724
  }
687
725
 
726
+ const isHeadless = options.headless === true;
727
+
688
728
  // ── 2. Auto-infer graph parents from frontier (synchronous) ──
689
- const graphParents = graphTracker.onSpawn();
729
+ // Headless stages are invisible in the graph — they must not consume or
730
+ // update the frontier, otherwise the next visible stage gets orphaned
731
+ // parent refs that don't exist in the panel.
732
+ const graphParents = isHeadless ? [] : graphTracker.onSpawn();
690
733
 
691
734
  // ── 3. Create done promise so dependent sessions can await this one ──
692
735
  let resolveDone!: () => void;
@@ -715,18 +758,34 @@ function createSessionRunner(
715
758
  port,
716
759
  );
717
760
 
718
- // ── 7. Create tmux window ──
719
- paneId = tmux.createWindow(
720
- shared.tmuxSessionName,
721
- name,
722
- paneCmd,
723
- undefined,
724
- paneEnvVars,
725
- );
726
- shared.activeRegistry.set(name, { name, paneId, done: donePromise });
761
+ // ── 7. Create tmux window or headless execution ──
762
+ let serverUrl: string;
763
+ if (isHeadless) {
764
+ // Headless stages use their SDKs directly — no tmux window.
765
+ // Claude Agent SDK runs in-process; Copilot SDK spawns its own CLI;
766
+ // OpenCode SDK starts both server and client via createOpencode().
767
+ paneId = `headless-${name}-${sessionId}`;
768
+ shared.activeRegistry.set(name, { name, paneId, done: donePromise });
769
+ serverUrl = "";
770
+
771
+ shared.panel.backgroundTaskStarted();
772
+ panelSessionAdded = true;
773
+ } else {
774
+ // Standard tmux window for visible stages.
775
+ paneId = tmux.createWindow(
776
+ shared.tmuxSessionName,
777
+ name,
778
+ paneCmd,
779
+ undefined,
780
+ paneEnvVars,
781
+ );
782
+ shared.activeRegistry.set(name, { name, paneId, done: donePromise });
783
+
784
+ serverUrl = await waitForServer(shared.agent, port, paneId);
727
785
 
728
- // ── 8. Wait for server readiness ──
729
- const serverUrl = await waitForServer(shared.agent, port, paneId);
786
+ shared.panel.addSession(name, graphParents);
787
+ panelSessionAdded = true;
788
+ }
730
789
 
731
790
  // ── 9. Create session directory ──
732
791
  const sessionDirName = `${name}-${sessionId}`;
@@ -736,10 +795,6 @@ function createSessionRunner(
736
795
  const messagesPath = join(sessionDir, "messages.json");
737
796
  const inboxPath = join(sessionDir, "inbox.md");
738
797
 
739
- // ── 10. Add node to graph panel ──
740
- shared.panel.addSession(name, graphParents);
741
- panelSessionAdded = true;
742
-
743
798
  // ── 11. Claude session snapshot (for identifying new sessions later) ──
744
799
  let knownClaudeSessionIds: Set<string> | undefined;
745
800
  if (shared.agent === "claude") {
@@ -829,7 +884,7 @@ function createSessionRunner(
829
884
  const getMessagesFn = createMessagesReader(shared.completedRegistry);
830
885
 
831
886
  // ── 12. Auto-create provider client and session ──
832
- const { client: providerClient, session: providerSession } =
887
+ const { client: providerClient, session: providerSession, cleanup: providerCleanup } =
833
888
  await initProviderClientAndSession(
834
889
  shared.agent,
835
890
  serverUrl,
@@ -837,6 +892,7 @@ function createSessionRunner(
837
892
  sessionId,
838
893
  clientOpts,
839
894
  sessionOpts,
895
+ isHeadless,
840
896
  );
841
897
 
842
898
  // ── 12a. Copilot: wrap send() to await session.idle ──
@@ -927,30 +983,48 @@ function createSessionRunner(
927
983
  await Bun.write(join(sessionDir, "error.txt"), message).catch(
928
984
  () => {},
929
985
  );
930
- shared.panel.sessionError(name, message);
986
+ if (!isHeadless) shared.panel.sessionError(name, message);
931
987
  throw error;
932
988
  } finally {
933
989
  // ── 14a. Auto-cleanup provider resources ──
934
990
  await cleanupProvider(shared.agent, providerClient, providerSession, paneId);
991
+ if (providerCleanup) {
992
+ try {
993
+ providerCleanup();
994
+ } catch {}
995
+ }
935
996
  }
936
997
 
937
998
  // ── 15. Mark session complete ──
938
- shared.panel.sessionSuccess(name);
999
+ if (isHeadless) {
1000
+ shared.panel.backgroundTaskFinished();
1001
+ } else {
1002
+ shared.panel.sessionSuccess(name);
1003
+ }
939
1004
  const result: SessionResult = { name, sessionId, sessionDir, paneId };
940
1005
  shared.completedRegistry.set(name, result);
941
1006
  shared.activeRegistry.delete(name);
942
1007
  resolveDone();
943
1008
 
944
1009
  // Update frontier so the next stage in this scope chains from us.
945
- graphTracker.onSettle(name);
1010
+ // Headless stages are transparent — they don't touch the frontier.
1011
+ if (!isHeadless) graphTracker.onSettle(name);
946
1012
  return { name, id: sessionId, result: callbackResult! };
947
1013
  } catch (error) {
948
1014
  const message = errorMessage(error);
949
1015
  if (panelSessionAdded) {
950
- shared.panel.sessionError(name, message);
1016
+ if (isHeadless) {
1017
+ shared.panel.backgroundTaskFinished();
1018
+ } else {
1019
+ shared.panel.sessionError(name, message);
1020
+ }
951
1021
  }
952
- if (paneId) {
953
- tmux.killWindow(shared.tmuxSessionName, name);
1022
+ // Kill the tmux window if one was created (visible stages and headless OpenCode).
1023
+ // Headless Claude/Copilot have virtual paneIds ("headless-...") — no window to kill.
1024
+ if (paneId && !paneId.startsWith("headless-")) {
1025
+ try {
1026
+ tmux.killWindow(shared.tmuxSessionName, name);
1027
+ } catch {}
954
1028
  }
955
1029
  // Ensure the done promise settles and the active entry is cleared.
956
1030
  shared.activeRegistry.delete(name);
@@ -958,7 +1032,8 @@ function createSessionRunner(
958
1032
  rejectDone(error);
959
1033
  // Update frontier even on failure — if the caller catches and
960
1034
  // continues, the next stage should still chain from this one.
961
- graphTracker.onSettle(name);
1035
+ // Headless stages are transparent — they don't touch the frontier.
1036
+ if (!isHeadless) graphTracker.onSettle(name);
962
1037
  throw error;
963
1038
  }
964
1039
  };
@@ -1098,10 +1173,14 @@ export async function runOrchestrator(): Promise<void> {
1098
1173
  await panel.waitForExit();
1099
1174
  shutdown(0);
1100
1175
  } catch (error) {
1101
- // Kill any active session tmux windows that didn't complete
1176
+ // Kill any active tmux windows that didn't complete.
1177
+ // Headless Claude/Copilot have virtual paneIds ("headless-...") — their
1178
+ // SDK-managed processes are cleaned up by cleanupProvider().
1102
1179
  for (const [, active] of shared.activeRegistry) {
1103
1180
  try {
1104
- tmux.killWindow(tmuxSessionName, active.name);
1181
+ if (active.paneId && !active.paneId.startsWith("headless-")) {
1182
+ tmux.killWindow(tmuxSessionName, active.name);
1183
+ }
1105
1184
  } catch {}
1106
1185
  }
1107
1186
 
package/src/sdk/types.ts CHANGED
@@ -240,6 +240,13 @@ export interface SessionRunOptions {
240
240
  name: string;
241
241
  /** Human-readable description */
242
242
  description?: string;
243
+ /**
244
+ * When true, spawn the CLI server as a background child process (Bun.spawn)
245
+ * instead of creating a tmux window. The provider client/session are still
246
+ * auto-created but the stage is invisible in the graph. Useful for
247
+ * Copilot/OpenCode SDKs that need a server but don't need a visible TUI.
248
+ */
249
+ headless?: boolean;
243
250
  }
244
251
 
245
252
  /**
@@ -5,26 +5,35 @@
5
5
  * so users can see each iteration's progress in real time. The loop
6
6
  * terminates when:
7
7
  * - {@link MAX_LOOPS} iterations have completed, OR
8
- * - Two consecutive reviewer passes return zero findings.
8
+ * - Two parallel reviewer passes both return zero findings.
9
+ *
10
+ * The reviewer stages use the Claude Agent SDK's structured output
11
+ * (`outputFormat`) to guarantee the review result matches the
12
+ * {@link ReviewResultSchema} — no manual JSON parsing required.
9
13
  *
10
14
  * Run: atomic workflow -n ralph -a claude "<your spec>"
11
15
  */
12
16
 
13
17
  import { defineWorkflow } from "../../../index.ts";
18
+ import { query as claudeSdkQuery } from "@anthropic-ai/claude-agent-sdk";
14
19
 
15
20
  import {
16
21
  buildPlannerPrompt,
17
22
  buildOrchestratorPrompt,
23
+ buildInfraDiscoveryPrompts,
18
24
  buildReviewPrompt,
19
25
  buildDebuggerReportPrompt,
20
- parseReviewResult,
21
26
  extractMarkdownBlock,
27
+ filterActionable,
28
+ mergeReviewResults,
29
+ REVIEW_RESULT_JSON_SCHEMA,
30
+ type ReviewResult,
31
+ type StructuredReviewResult,
22
32
  } from "../helpers/prompts.ts";
23
33
  import { hasActionableFindings } from "../helpers/review.ts";
24
- import { safeGitStatusS } from "../helpers/git.ts";
34
+ import { captureBranchChangeset } from "../helpers/git.ts";
25
35
 
26
36
  const MAX_LOOPS = 10;
27
- const CONSECUTIVE_CLEAN_THRESHOLD = 2;
28
37
 
29
38
  // The orchestrator stage implements the actual code changes and can run for
30
39
  // a very long time on large tasks. 24 hours prevents premature timeout.
@@ -35,24 +44,56 @@ function asAgentCall(agentName: string, prompt: string): string {
35
44
  return `@"${agentName} (agent)" ${prompt}`;
36
45
  }
37
46
 
47
+ /**
48
+ * Run the Claude Agent SDK's `query()` with structured output and collect
49
+ * the result. Returns a {@link StructuredReviewResult} with the SDK-validated
50
+ * structured output (when available) and the raw text fallback.
51
+ */
52
+ async function queryWithStructuredOutput(
53
+ prompt: string,
54
+ ): Promise<StructuredReviewResult> {
55
+ let structured: ReviewResult | null = null;
56
+ let raw = "";
57
+
58
+ for await (const msg of claudeSdkQuery({
59
+ prompt,
60
+ options: {
61
+ outputFormat: {
62
+ type: "json_schema",
63
+ schema: REVIEW_RESULT_JSON_SCHEMA,
64
+ },
65
+ },
66
+ })) {
67
+ if (msg.type === "result") {
68
+ raw = String((msg as Record<string, unknown>).output ?? "");
69
+ if (
70
+ msg.subtype === "success" &&
71
+ (msg as Record<string, unknown>).structured_output
72
+ ) {
73
+ structured = (msg as Record<string, unknown>).structured_output as ReviewResult;
74
+ }
75
+ }
76
+ }
77
+
78
+ return {
79
+ structured: structured ? filterActionable(structured) : null,
80
+ raw,
81
+ };
82
+ }
83
+
38
84
  export default defineWorkflow<"claude">({
39
85
  name: "ralph",
40
86
  description:
41
87
  "Plan → orchestrate → review → debug loop with bounded iteration",
42
88
  })
43
89
  .run(async (ctx) => {
44
- // Free-form workflows receive their positional prompt under
45
- // `inputs.prompt`; destructure once so every stage below can close
46
- // over a bare `prompt` string without re-reaching into ctx.inputs.
47
90
  const prompt = ctx.inputs.prompt ?? "";
48
- let consecutiveClean = 0;
49
91
  let debuggerReport = "";
50
92
 
51
93
  for (let iteration = 1; iteration <= MAX_LOOPS; iteration++) {
52
94
  // ── Plan ────────────────────────────────────────────────────────────
53
- const plannerName = `planner-${iteration}`;
54
95
  await ctx.stage(
55
- { name: plannerName },
96
+ { name: `planner-${iteration}` },
56
97
  {},
57
98
  {},
58
99
  async (s) => {
@@ -69,95 +110,110 @@ export default defineWorkflow<"claude">({
69
110
  },
70
111
  );
71
112
 
72
-
73
113
  // ── Orchestrate ─────────────────────────────────────────────────────
74
- const orchName = `orchestrator-${iteration}`;
75
114
  await ctx.stage(
76
- { name: orchName },
115
+ { name: `orchestrator-${iteration}` },
77
116
  {},
78
117
  {},
79
118
  async (s) => {
80
119
  await s.session.query(
81
- asAgentCall(
82
- "orchestrator",
83
- buildOrchestratorPrompt(prompt),
84
- ),
120
+ asAgentCall("orchestrator", buildOrchestratorPrompt(prompt)),
85
121
  { timeoutMs: ORCHESTRATOR_TIMEOUT_MS },
86
122
  );
87
123
  s.save(s.sessionId);
88
124
  },
89
125
  );
90
126
 
127
+ // ── Infrastructure Discovery (three parallel sub-agent stages) ────
128
+ const changeset = await captureBranchChangeset();
129
+ const discoveryPrompts = buildInfraDiscoveryPrompts();
91
130
 
92
- // ── Review (first pass) ─────────────────────────────────────────────
93
- let gitStatus = await safeGitStatusS();
94
- const reviewerName = `reviewer-${iteration}`;
95
- const review = await ctx.stage(
96
- { name: reviewerName },
97
- {},
98
- {},
99
- async (s) => {
100
- const result = await s.session.query(
101
- asAgentCall(
102
- "reviewer",
103
- buildReviewPrompt(prompt, { gitStatus, iteration }),
104
- ),
105
- );
106
- s.save(s.sessionId);
107
- return result.output;
108
- },
109
- );
110
-
111
-
112
- let reviewRaw = review.result;
113
- let parsed = parseReviewResult(reviewRaw);
114
-
115
- if (!hasActionableFindings(parsed, reviewRaw)) {
116
- consecutiveClean += 1;
117
- if (consecutiveClean >= CONSECUTIVE_CLEAN_THRESHOLD) break;
118
-
119
- // Confirmation pass — re-run reviewer only
120
- gitStatus = await safeGitStatusS();
121
- const confirmName = `reviewer-${iteration}-confirm`;
122
- const confirm = await ctx.stage(
123
- { name: confirmName },
131
+ const [locatorResult, analyzerResult, patternResult] = await Promise.all([
132
+ ctx.stage(
133
+ { name: `infra-locate-${iteration}`, headless: true },
124
134
  {},
125
135
  {},
126
136
  async (s) => {
127
137
  const result = await s.session.query(
128
- asAgentCall(
129
- "reviewer",
130
- buildReviewPrompt(prompt, {
131
- gitStatus,
132
- iteration,
133
- isConfirmationPass: true,
134
- }),
135
- ),
138
+ asAgentCall("codebase-locator", discoveryPrompts.locator),
136
139
  );
137
140
  s.save(s.sessionId);
138
- return result.output;
141
+ return String(result.output ?? "");
139
142
  },
140
- );
141
-
143
+ ),
144
+ ctx.stage(
145
+ { name: `infra-analyze-${iteration}`, headless: true },
146
+ {},
147
+ {},
148
+ async (s) => {
149
+ const result = await s.session.query(
150
+ asAgentCall("codebase-analyzer", discoveryPrompts.analyzer),
151
+ );
152
+ s.save(s.sessionId);
153
+ return String(result.output ?? "");
154
+ },
155
+ ),
156
+ ctx.stage(
157
+ { name: `infra-patterns-${iteration}`, headless: true },
158
+ {},
159
+ {},
160
+ async (s) => {
161
+ const result = await s.session.query(
162
+ asAgentCall("codebase-pattern-finder", discoveryPrompts.patternFinder),
163
+ );
164
+ s.save(s.sessionId);
165
+ return String(result.output ?? "");
166
+ },
167
+ ),
168
+ ]);
169
+
170
+ const discoveryContext = [
171
+ "### Infrastructure Files (codebase-locator)\n\n" + locatorResult.result,
172
+ "### Infrastructure Analysis (codebase-analyzer)\n\n" + analyzerResult.result,
173
+ "### Build & Test Patterns (codebase-pattern-finder)\n\n" + patternResult.result,
174
+ ].join("\n\n---\n\n");
175
+
176
+ // ── Review (two parallel passes) ────────────────────────────────────
177
+ const reviewPrompt = buildReviewPrompt(prompt, {
178
+ changeset,
179
+ iteration,
180
+ discoveryContext,
181
+ });
182
+
183
+ const [reviewA, reviewB] = await Promise.all([
184
+ ctx.stage(
185
+ { name: `reviewer-${iteration}-a` },
186
+ {},
187
+ {},
188
+ async (s) => {
189
+ const result = await queryWithStructuredOutput(reviewPrompt);
190
+ s.save(s.sessionId);
191
+ return result;
192
+ },
193
+ ),
194
+ ctx.stage(
195
+ { name: `reviewer-${iteration}-b` },
196
+ {},
197
+ {},
198
+ async (s) => {
199
+ const result = await queryWithStructuredOutput(reviewPrompt);
200
+ s.save(s.sessionId);
201
+ return result;
202
+ },
203
+ ),
204
+ ]);
142
205
 
143
- reviewRaw = confirm.result;
144
- parsed = parseReviewResult(reviewRaw);
206
+ const merged = mergeReviewResults(reviewA.result, reviewB.result);
207
+ const parsed = merged.structured;
208
+ const reviewRaw = merged.raw;
145
209
 
146
- if (!hasActionableFindings(parsed, reviewRaw)) {
147
- consecutiveClean += 1;
148
- if (consecutiveClean >= CONSECUTIVE_CLEAN_THRESHOLD) break;
149
- } else {
150
- consecutiveClean = 0;
151
- }
152
- } else {
153
- consecutiveClean = 0;
154
- }
210
+ // Both reviewers agree the code is clean → done
211
+ if (!hasActionableFindings(parsed, reviewRaw)) break;
155
212
 
156
- // ── Debug (only if findings remain AND another iteration is allowed)
157
- if (hasActionableFindings(parsed, reviewRaw) && iteration < MAX_LOOPS) {
158
- const debuggerName = `debugger-${iteration}`;
213
+ // ── Debug (only if another iteration is allowed) ────────────────────
214
+ if (iteration < MAX_LOOPS) {
159
215
  const debugger_ = await ctx.stage(
160
- { name: debuggerName },
216
+ { name: `debugger-${iteration}` },
161
217
  {},
162
218
  {},
163
219
  async (s) => {
@@ -166,7 +222,7 @@ export default defineWorkflow<"claude">({
166
222
  "debugger",
167
223
  buildDebuggerReportPrompt(parsed, reviewRaw, {
168
224
  iteration,
169
- gitStatus,
225
+ changeset,
170
226
  }),
171
227
  ),
172
228
  );