@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
@@ -0,0 +1,289 @@
1
+ # Workflow Authors: Getting Started
2
+
3
+ This guide covers the basics of creating workflows with the `defineWorkflow().run().compile()` API.
4
+
5
+ ## Quick-start example
6
+
7
+ Use `defineWorkflow<"agent">().run(callback).compile()` to define your workflow. Inside the `.run()` callback, use `ctx.stage()` to spawn agent sessions dynamically. Each session gets its own tmux window and graph node. Use native TypeScript control flow (`for`, `if`, `Promise.all()`) for orchestration.
8
+
9
+ The runtime manages the full session lifecycle automatically — it creates the client, creates the session, runs your callback, then cleans up. You never need to manually disconnect or stop anything.
10
+
11
+ ### Claude
12
+
13
+ ```ts
14
+ // .atomic/workflows/my-workflow/claude/index.ts
15
+ import { defineWorkflow } from "@bastani/atomic/workflows";
16
+
17
+ export default defineWorkflow<"claude">({
18
+ name: "my-workflow",
19
+ description: "A two-session pipeline",
20
+ })
21
+ .run(async (ctx) => {
22
+ // Free-form workflow: the positional CLI prompt lands under
23
+ // `inputs.prompt`. Destructure once and close over it in stages.
24
+ const prompt = ctx.inputs.prompt ?? "";
25
+
26
+ const describe = await ctx.stage(
27
+ { name: "describe", description: "Ask Claude to describe the project" },
28
+ {},
29
+ {},
30
+ async (s) => {
31
+ await s.session.query(prompt);
32
+ s.save(s.sessionId);
33
+ },
34
+ );
35
+
36
+ await ctx.stage(
37
+ { name: "summarize", description: "Summarize the previous session's output" },
38
+ {},
39
+ {},
40
+ async (s) => {
41
+ const research = await s.transcript(describe);
42
+ await s.session.query(
43
+ `Read ${research.path} and summarize it in 2-3 bullet points.`,
44
+ );
45
+ s.save(s.sessionId);
46
+ },
47
+ );
48
+ })
49
+ .compile();
50
+ ```
51
+
52
+ ### Copilot
53
+
54
+ ```ts
55
+ // .atomic/workflows/my-workflow/copilot/index.ts
56
+ import { defineWorkflow } from "@bastani/atomic/workflows";
57
+
58
+ export default defineWorkflow<"copilot">({
59
+ name: "my-workflow",
60
+ description: "A two-session pipeline",
61
+ })
62
+ .run(async (ctx) => {
63
+ const prompt = ctx.inputs.prompt ?? "";
64
+
65
+ const describe = await ctx.stage(
66
+ { name: "describe", description: "Ask the agent to describe the project" },
67
+ {},
68
+ {},
69
+ async (s) => {
70
+ await s.session.send({ prompt });
71
+ s.save(await s.session.getMessages());
72
+ },
73
+ );
74
+
75
+ await ctx.stage(
76
+ { name: "summarize", description: "Summarize the previous session's output" },
77
+ {},
78
+ {},
79
+ async (s) => {
80
+ const research = await s.transcript(describe);
81
+ await s.session.send({
82
+ prompt: `Summarize the following in 2-3 bullet points:\n\n${research.content}`,
83
+ });
84
+ s.save(await s.session.getMessages());
85
+ },
86
+ );
87
+ })
88
+ .compile();
89
+ ```
90
+
91
+ ### OpenCode
92
+
93
+ ```ts
94
+ // .atomic/workflows/my-workflow/opencode/index.ts
95
+ import { defineWorkflow } from "@bastani/atomic/workflows";
96
+
97
+ export default defineWorkflow<"opencode">({
98
+ name: "my-workflow",
99
+ description: "A two-session pipeline",
100
+ })
101
+ .run(async (ctx) => {
102
+ const prompt = ctx.inputs.prompt ?? "";
103
+
104
+ const describe = await ctx.stage(
105
+ { name: "describe", description: "Ask the agent to describe the project" },
106
+ {},
107
+ { title: "describe" },
108
+ async (s) => {
109
+ const result = await s.client.session.prompt({
110
+ sessionID: s.session.id,
111
+ parts: [{ type: "text", text: prompt }],
112
+ });
113
+ s.save(result.data!);
114
+ },
115
+ );
116
+
117
+ await ctx.stage(
118
+ { name: "summarize", description: "Summarize the previous session's output" },
119
+ {},
120
+ { title: "summarize" },
121
+ async (s) => {
122
+ const research = await s.transcript(describe);
123
+ const result = await s.client.session.prompt({
124
+ sessionID: s.session.id,
125
+ parts: [{ type: "text", text: `Summarize the following in 2-3 bullet points:\n\n${research.content}` }],
126
+ });
127
+ s.save(result.data!);
128
+ },
129
+ );
130
+ })
131
+ .compile();
132
+ ```
133
+
134
+ Reading top-to-bottom: `describe → summarize`. Each session spawns a graph node and tmux window.
135
+
136
+ ## Native TypeScript control flow
137
+
138
+ Sessions are spawned dynamically, so you can use loops, conditionals, and `Promise.all()`:
139
+
140
+ ```ts
141
+ // Parallel sessions
142
+ const [a, b] = await Promise.all([
143
+ ctx.stage({ name: "task-a" }, {}, {}, async (s) => { /* ... */ }),
144
+ ctx.stage({ name: "task-b" }, {}, {}, async (s) => { /* ... */ }),
145
+ ]);
146
+
147
+ // Loop with dynamic sessions
148
+ for (let i = 1; i <= maxIterations; i++) {
149
+ const result = await ctx.stage({ name: `step-${i}` }, {}, {}, async (s) => {
150
+ // ... do work ...
151
+ return someValue; // available as result.result
152
+ });
153
+ if (result.result === "done") break;
154
+ }
155
+
156
+ // Conditional sessions
157
+ if (needsReview) {
158
+ await ctx.stage({ name: "review" }, {}, {}, async (s) => { /* ... */ });
159
+ }
160
+ ```
161
+
162
+ ## Headless (background) stages
163
+
164
+ Stages can run in headless mode by setting `headless: true` in the first argument to `ctx.stage()`. Headless stages execute the provider SDK in-process instead of spawning a tmux window — they are invisible in the workflow graph but tracked via a background task counter in the statusline.
165
+
166
+ ```ts
167
+ // Headless stage — identical callback API, no tmux window
168
+ const result = await ctx.stage(
169
+ { name: "background-task", headless: true },
170
+ {}, {},
171
+ async (s) => {
172
+ // s.client, s.session, s.save(), s.transcript() all work identically
173
+ const result = await s.session.query("Analyze the codebase.");
174
+ s.save(s.sessionId);
175
+ return result.output;
176
+ },
177
+ );
178
+ // result.result contains the returned value
179
+ ```
180
+
181
+ The callback interface is identical to interactive stages. The only differences:
182
+ - No tmux window is created
183
+ - The stage does not appear as a node in the workflow graph
184
+ - The `paneId` is a virtual identifier: `headless-<name>-<sessionId>`
185
+ - Background stages are tracked by a counter in the orchestrator statusline
186
+
187
+ **Common pattern — visible seed, parallel headless gather, visible merge:**
188
+
189
+ ```ts
190
+ const seed = await ctx.stage({ name: "seed" }, {}, {}, async (s) => { /* ... */ });
191
+
192
+ const [a, b, c] = await Promise.all([
193
+ ctx.stage({ name: "gather-a", headless: true }, {}, {}, async (s) => { /* ... */ }),
194
+ ctx.stage({ name: "gather-b", headless: true }, {}, {}, async (s) => { /* ... */ }),
195
+ ctx.stage({ name: "gather-c", headless: true }, {}, {}, async (s) => { /* ... */ }),
196
+ ]);
197
+
198
+ await ctx.stage({ name: "merge" }, {}, {}, async (s) => {
199
+ await s.session.query(`Merge:\n${a.result}\n${b.result}\n${c.result}`);
200
+ s.save(s.sessionId);
201
+ });
202
+ ```
203
+
204
+ Headless stages are transparent to graph topology — `seed → [3 headless] → merge` renders as `seed → merge` in the graph.
205
+
206
+ ## SDK exports
207
+
208
+ The `@bastani/atomic/workflows` package exports the workflow authoring primitives. For native SDK types and utilities, install and import from the provider packages directly.
209
+
210
+ **Builder:**
211
+ - `defineWorkflow` — entry point, accepts an optional type parameter (`"claude"`, `"copilot"`, `"opencode"`) for type narrowing; returns a chainable `WorkflowBuilder`
212
+ - `WorkflowBuilder` — the builder class (rarely needed directly)
213
+
214
+ **Types** (import with `import type`):
215
+ - `AgentType` — `"copilot" | "opencode" | "claude"`
216
+ - `Transcript` — `{ path: string, content: string }` from `ctx.transcript()`
217
+ - `SavedMessage` — union of provider-specific message types
218
+ - `SaveTranscript` — overloaded save function type
219
+ - `SessionContext` — the context object passed to `ctx.stage()` callbacks
220
+ - `SessionHandle<T>` — returned by `ctx.stage()`, carries `{ name, id, result }`
221
+ - `SessionRunOptions` — `{ name, description?, headless? }` for `ctx.stage()` first argument
222
+ - `StageClientOptions<A>` — provider-specific client init options for `ctx.stage()` second argument
223
+ - `StageSessionOptions<A>` — provider-specific session create options for `ctx.stage()` third argument
224
+ - `ProviderClient<A>` — the `s.client` type, resolved by agent type
225
+ - `ProviderSession<A>` — the `s.session` type, resolved by agent type
226
+ - `ClaudeSessionWrapper` — Atomic wrapper for Claude sessions (exposes `s.session.query()`)
227
+ - `ClaudeQueryDefaults` — per-stage query defaults (timeouts, poll interval) for Claude sessions
228
+ - `SessionRef` — `string | SessionHandle<unknown>` for transcript/message lookups
229
+ - `WorkflowContext` — top-level context passed to `.run()` callback
230
+ - `WorkflowOptions` — `{ name, description? }` workflow metadata
231
+ - `WorkflowDefinition` — sealed output of `.compile()`
232
+
233
+ **Validation helpers:**
234
+ - `validateClaudeWorkflow` — static validation for Claude workflow source files; warns on direct `createClaudeSession` or `claudeQuery` usage
235
+ - `validateCopilotWorkflow` — static validation for Copilot workflow source files; warns on manual `new CopilotClient` or `client.createSession()` usage
236
+ - `validateOpenCodeWorkflow` — static validation for OpenCode workflow source files; warns on manual `createOpencodeClient()` or `client.session.create()` usage
237
+
238
+ **Native SDK dependencies:**
239
+
240
+ The Atomic runtime provides `s.client` and `s.session` with types resolved from the native SDKs. If you need to name those types in your own code, or use SDK utilities and advanced APIs, import them directly from the provider packages:
241
+
242
+ | Provider | Package | Key imports |
243
+ |----------|---------|-------------|
244
+ | Copilot | `@github/copilot-sdk` | `SessionEvent`, `CopilotClient`, `CopilotSession`, `approveAll`, `defineTool` |
245
+ | Claude | `@anthropic-ai/claude-agent-sdk` | `SessionMessage`, `query` |
246
+ | OpenCode | `@opencode-ai/sdk/v2` | `SessionPromptResponse`, `OpencodeClient`, `Session` |
247
+
248
+ ## `SessionContext` reference
249
+
250
+ | Field | Type | Description |
251
+ |-------|------|-------------|
252
+ | `client` | `ProviderClient<A>` | Pre-created SDK client (auto-managed by runtime) |
253
+ | `session` | `ProviderSession<A>` | Pre-created provider session (auto-managed by runtime) |
254
+ | `inputs` | `Record<string, string>` | Structured inputs for this run. Free-form workflows read `s.inputs.prompt`; structured workflows read their declared field names. See `workflow-inputs.md`. |
255
+ | `agent` | `AgentType` | Which agent is running |
256
+ | `transcript(ref)` | `(ref: SessionRef) => Promise<Transcript>` | Get prior session's transcript as `{ path, content }` |
257
+ | `getMessages(ref)` | `(ref: SessionRef) => Promise<SavedMessage[]>` | Get prior session's raw native messages |
258
+ | `save` | `SaveTranscript` | Save this session's output for downstream sessions |
259
+ | `sessionDir` | `string` | Path to session storage directory |
260
+ | `paneId` | `string` | tmux pane ID (or `headless-<name>-<id>` for headless stages) |
261
+ | `sessionId` | `string` | Session UUID |
262
+ | `stage(opts, clientOpts, sessionOpts, fn)` | `<T>(...) => Promise<SessionHandle<T>>` | Spawn a nested sub-session (child of this session in the graph) |
263
+
264
+ ## Reference files
265
+
266
+ | File | Topic |
267
+ |---|---|
268
+ | `workflow-inputs.md` | Declaring the `inputs: WorkflowInput[]` schema, the free-form vs structured decision, CLI flag + picker invocation surfaces, builtin protection |
269
+ | `agent-sessions.md` | Creating agent sessions with SDK calls per provider |
270
+ | `computation-and-validation.md` | Deterministic computation, parsing, validation inside `run()` |
271
+ | `user-input.md` | Collecting user input **mid-workflow** (for invocation-time inputs, see `workflow-inputs.md`) |
272
+ | `control-flow.md` | Loops, conditionals, early termination in plain TypeScript |
273
+ | `state-and-data-flow.md` | Data flow between sessions, transcripts, persistence |
274
+ | `session-config.md` | Per-SDK session configuration: model, tools, permissions, hooks |
275
+ | `discovery-and-verification.md` | Workflow file discovery, validation, TypeScript config |
276
+
277
+ ## Builtin reference implementations
278
+
279
+ The SDK ships two builtin workflows that demonstrate production patterns for all three SDKs:
280
+
281
+ - **`ralph`** (`src/sdk/workflows/builtin/ralph/`) — iterative plan → orchestrate → review → debug loop with consecutive clean-pass detection, shared helpers for prompts/parsing/git, and cross-SDK adaptation
282
+ - **`deep-research-codebase`** (`src/sdk/workflows/builtin/deep-research-codebase/`) — deterministic codebase scout → LOC-based heuristic explorer partitioning → parallel explorers → aggregator with file-based handoffs and context-aware prompt engineering
283
+ - **`headless-test`** (`.atomic/workflows/headless-test/`) — demonstrates the visible → [parallel headless] → visible merge pattern (all 3 SDKs)
284
+
285
+ Both include `helpers/` directories with SDK-agnostic logic (prompt builders, parsers, heuristics) and per-agent `index.ts` files showing how the same workflow topology adapts to Claude, Copilot, and OpenCode.
286
+
287
+ ## Type safety
288
+
289
+ The SDK is typed with **no `unknown` or `any`**. `SessionContext` fields are precisely typed, and native provider types may appear inside Atomic generic aliases and runtime values — if you need to name those types in your own code, import them from the provider SDK directly. Use `import type` for type-only imports. Use the `defineWorkflow<"agent">()` type parameter to narrow `s.client` and `s.session` to the correct provider types.
@@ -0,0 +1,355 @@
1
+ # Session Configuration
2
+
3
+ Each SDK has its own configuration options for controlling model selection, tools, permissions, hooks, and structured output. Pass these via `clientOpts` (2nd arg to `ctx.stage()`) and `sessionOpts` (3rd arg to `ctx.stage()`). The runtime uses them to create the client and session automatically — no manual client or session creation needed.
4
+
5
+ ## Claude Agent SDK
6
+
7
+ ### Client options (`clientOpts` — 2nd arg to `ctx.stage()`)
8
+
9
+ These control how the Claude TUI pane is started:
10
+
11
+ ```ts
12
+ await ctx.stage({ name: "..." }, {
13
+ chatFlags: ["--model", "opus", "--dangerously-skip-permissions"],
14
+ readyTimeoutMs: 60_000, // Wait up to 60s for TUI (default: 30s)
15
+ }, {}, async (s) => {
16
+ // s.client and s.session are ready
17
+ });
18
+ ```
19
+
20
+ ### Session options (`sessionOpts` — 3rd arg to `ctx.stage()`)
21
+
22
+ These are `ClaudeQueryDefaults` and set defaults for every `s.session.query()`
23
+ call inside the callback (`timeoutMs`, `pollIntervalMs`, etc.):
24
+
25
+ ```ts
26
+ await ctx.stage({ name: "..." }, {}, {
27
+ timeoutMs: 5 * 60 * 1000, // 5 minutes per query (default)
28
+ pollIntervalMs: 1_000, // Poll interval for output
29
+ }, async (s) => {
30
+ await s.session.query((ctx.inputs.prompt ?? ""));
31
+ s.save(s.sessionId);
32
+ });
33
+ ```
34
+
35
+ ### `query()` options
36
+
37
+ ```ts
38
+ import { query } from "@anthropic-ai/claude-agent-sdk";
39
+
40
+ const result = query({
41
+ prompt: (ctx.inputs.prompt ?? ""),
42
+ options: {
43
+ // Model selection
44
+ model: "claude-opus-4-6", // Full model ID or alias ("opus", "sonnet", "haiku")
45
+ effort: "high", // "low", "medium", "high", "max" (max is Opus 4.6 only)
46
+ thinking: { type: "adaptive" }, // Default for supported models; or { type: "enabled", budgetTokens: N }
47
+ maxTurns: 50, // Maximum conversation turns
48
+ maxBudgetUsd: 5.0, // Spending cap in USD
49
+
50
+ // Permissions
51
+ permissionMode: "acceptEdits", // "default", "dontAsk", "acceptEdits", "bypassPermissions", "plan"
52
+
53
+ // Tools — base set of available built-in tools
54
+ tools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob"], // or { type: "preset", preset: "claude_code" } for all defaults
55
+ allowedTools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob"], // auto-allowed without prompting
56
+ disallowedTools: ["AskUserQuestion"], // removed from model's context
57
+
58
+ // System prompt — string or preset with additions
59
+ systemPrompt: "You are a senior security auditor...",
60
+ // Or: { type: "preset", preset: "claude_code", append: "Always explain your reasoning." }
61
+
62
+ // Structured output
63
+ outputFormat: {
64
+ type: "json_schema",
65
+ schema: {
66
+ type: "object",
67
+ properties: {
68
+ tasks: { type: "array", items: { type: "string" } },
69
+ },
70
+ },
71
+ },
72
+
73
+ // Subagents — Record<string, AgentDefinition> keyed by name
74
+ agents: {
75
+ worker: { description: "Implement tasks", prompt: "You are a task implementer...", tools: ["Read", "Write", "Edit", "Bash"] },
76
+ },
77
+ agent: "worker", // Main thread agent name (optional)
78
+
79
+ // MCP servers
80
+ mcpServers: {
81
+ "my-server": { command: "node", args: ["server.js"] },
82
+ },
83
+
84
+ // Session continuity
85
+ resume: previousSessionId, // Resume a prior session
86
+ forkSession: true, // When true with resume, forks to new session
87
+ persistSession: true, // Persist session to disk (default: true)
88
+
89
+ // Sandbox — isolated command execution
90
+ sandbox: { enabled: true, autoAllowBashIfSandboxed: true },
91
+
92
+ // Beta features
93
+ betas: ["context-1m-2025-08-07"], // 1M context window (Sonnet 4/4.5 only)
94
+ },
95
+ });
96
+ ```
97
+
98
+ ### `s.session.query()` usage
99
+
100
+ `s.session.query()` sends text to the Claude pane, verifies delivery, and waits for output stabilization. It uses
101
+ the pane ID from `s.paneId` automatically. Call it inside the stage callback:
102
+
103
+ ```ts
104
+ await ctx.stage({ name: "..." }, {}, {}, async (s) => {
105
+ const result = await s.session.query("Your prompt");
106
+ // result.output — captured response text
107
+ s.save(s.sessionId);
108
+ });
109
+ ```
110
+
111
+ The query defaults (timeout, poll interval) can be configured via `sessionOpts`
112
+ as shown above.
113
+
114
+ ### Claude hooks
115
+
116
+ Hooks intercept tool usage, session events, and context management. The `hooks` option is `Partial<Record<HookEvent, HookCallbackMatcher[]>>` — each event maps to an array of matchers with callback arrays:
117
+
118
+ ```ts
119
+ const result = query({
120
+ prompt: (ctx.inputs.prompt ?? ""),
121
+ options: {
122
+ hooks: {
123
+ PreToolUse: [{
124
+ matcher: (input) => input.tool_name === "Bash", // Optional — filter which events trigger this hook
125
+ hooks: [async (input, toolUseID, { signal }) => {
126
+ // input.tool_name, input.tool_input available
127
+ if (input.tool_input?.command?.includes("rm -rf")) {
128
+ return { decision: "deny", reason: "Dangerous command" };
129
+ }
130
+ return { decision: "allow" };
131
+ // Return values: { decision: "allow" | "deny" | "ask" | "defer" }
132
+ }],
133
+ }],
134
+ PostToolUse: [{
135
+ hooks: [async (input) => {
136
+ // React after a tool completes
137
+ console.log(`Tool ${input.tool_name} completed`);
138
+ }],
139
+ }],
140
+ Stop: [{
141
+ hooks: [async (input) => {
142
+ // Called when the agent wants to stop
143
+ }],
144
+ }],
145
+ PreCompact: [{
146
+ hooks: [async (input) => {
147
+ // Before context compaction — inject durable context
148
+ return { additionalContext: "Remember: always run tests after edits." };
149
+ }],
150
+ }],
151
+ },
152
+ },
153
+ });
154
+ ```
155
+
156
+ **Hook events** (most commonly used): `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `Stop`, `SessionStart`, `SessionEnd`, `PreCompact`, `PostCompact`, `SubagentStart`, `SubagentStop`, `Notification`, `PermissionRequest`, `PermissionDenied`, `Elicitation`, `ElicitationResult`, `ConfigChange`, `FileChanged`, `CwdChanged`.
157
+
158
+ ## Copilot SDK
159
+
160
+ ### Session options (`sessionOpts` — 3rd arg to `ctx.stage()`)
161
+
162
+ All `client.createSession()` options are passed as `sessionOpts`. The runtime
163
+ forwards them to `client.createSession()`. `onPermissionRequest` defaults to
164
+ `approveAll` when not specified.
165
+
166
+ ```ts
167
+ import { approveAll, defineTool } from "@github/copilot-sdk";
168
+
169
+ await ctx.stage({ name: "plan" }, {}, {
170
+ // Model selection
171
+ model: "claude-sonnet-4.6",
172
+ reasoningEffort: "high",
173
+
174
+ // System prompt
175
+ systemMessage: "You are a security auditor...",
176
+
177
+ // Custom tools
178
+ tools: [
179
+ defineTool({
180
+ name: "check-coverage",
181
+ description: "Check test coverage",
182
+ parameters: { type: "object", properties: { path: { type: "string" } } },
183
+ execute: async (params) => ({ content: "Coverage: 85%" }),
184
+ }),
185
+ ],
186
+
187
+ // Permissions (defaults to approveAll if omitted)
188
+ onPermissionRequest: approveAll,
189
+
190
+ // User input
191
+ onUserInputRequest: async (request) => {
192
+ return "User's response";
193
+ },
194
+ onElicitationRequest: async (request) => {
195
+ return { action: "submit", values: { choice: "option-a" } };
196
+ },
197
+
198
+ // Hooks
199
+ hooks: {
200
+ onPreToolUse: (event) => { /* before tool */ },
201
+ onPostToolUse: (event) => { /* after tool */ },
202
+ onSessionStart: (event) => { /* session started */ },
203
+ onSessionEnd: (event) => { /* session ended */ },
204
+ onErrorOccurred: (event) => { /* error handling */ },
205
+ },
206
+
207
+ // Advanced
208
+ infiniteSessions: true, // Auto-manage context via compaction
209
+ }, async (s) => {
210
+ await s.session.send({ prompt: (ctx.inputs.prompt ?? "") });
211
+ s.save(await s.session.getMessages());
212
+ });
213
+ ```
214
+
215
+ ### Copilot permission modes
216
+
217
+ ```ts
218
+ // Approve everything (autonomous) — this is the default
219
+ await ctx.stage({ name: "plan" }, {}, { onPermissionRequest: approveAll }, async (s) => {
220
+ await s.session.send({ prompt: (ctx.inputs.prompt ?? "") });
221
+ s.save(await s.session.getMessages());
222
+ });
223
+
224
+ // Custom permission handler
225
+ await ctx.stage({ name: "plan" }, {}, {
226
+ onPermissionRequest: async (request) => {
227
+ // request.kind: "shell" | "write" | "read" | "mcp" | "custom-tool" | "url" | "memory" | "hook"
228
+ switch (request.kind) {
229
+ case "shell":
230
+ return request.command?.includes("rm")
231
+ ? { kind: "denied-permanently", reason: "Dangerous" }
232
+ : { kind: "approved" };
233
+ case "write":
234
+ return { kind: "approved" };
235
+ default:
236
+ return { kind: "approved" };
237
+ }
238
+ },
239
+ }, async (s) => {
240
+ await s.session.send({ prompt: (ctx.inputs.prompt ?? "") });
241
+ s.save(await s.session.getMessages());
242
+ });
243
+ ```
244
+
245
+ ## OpenCode SDK
246
+
247
+ ### Client options (`clientOpts` — 2nd arg to `ctx.stage()`)
248
+
249
+ The `baseUrl` is auto-injected by the runtime. Pass any additional client
250
+ options (such as `directory`) via `clientOpts`:
251
+
252
+ ```ts
253
+ await ctx.stage({ name: "..." }, {
254
+ directory: "/path/to/project", // Override working directory
255
+ }, {}, async (s) => {
256
+ // s.client is the OpencodeClient, already connected
257
+ });
258
+ ```
259
+
260
+ ### Session options (`sessionOpts` — 3rd arg to `ctx.stage()`)
261
+
262
+ These are forwarded to `client.session.create()`. Use them to set a title,
263
+ parentID, or workspaceID for the session:
264
+
265
+ ```ts
266
+ await ctx.stage({ name: "..." }, {}, {
267
+ title: "Feature implementation",
268
+ parentID: "parent-session-id",
269
+ workspaceID: "workspace-id",
270
+ }, async (s) => {
271
+ // s.session is the created OpencodeSession, s.session.id is the session ID
272
+ });
273
+ ```
274
+
275
+ ### Session prompting
276
+
277
+ Use `s.client` and `s.session.id` inside the callback:
278
+
279
+ ```ts
280
+ await ctx.stage({ name: "implement" }, {}, {}, async (s) => {
281
+ // Basic prompt
282
+ const result = await s.client.session.prompt({
283
+ sessionID: s.session.id,
284
+ parts: [{ type: "text", text: (ctx.inputs.prompt ?? "") }],
285
+ });
286
+
287
+ // Structured output
288
+ const structured = await s.client.session.prompt({
289
+ sessionID: s.session.id,
290
+ parts: [{ type: "text", text: "List endpoints as JSON" }],
291
+ format: {
292
+ type: "json_schema",
293
+ schema: { type: "object", properties: { endpoints: { type: "array" } } },
294
+ retryCount: 3,
295
+ },
296
+ });
297
+
298
+ // No-reply context injection
299
+ await s.client.session.prompt({
300
+ sessionID: s.session.id,
301
+ parts: [{ type: "text", text: "Background context..." }],
302
+ noReply: true,
303
+ });
304
+
305
+ s.save(result.data!);
306
+ });
307
+ ```
308
+
309
+ ### OpenCode session management
310
+
311
+ ```ts
312
+ await ctx.stage({ name: "..." }, {}, {}, async (s) => {
313
+ // Select session in TUI (auto-called by runtime, but can be called again)
314
+ await s.client.tui.selectSession({ sessionID: s.session.id });
315
+
316
+ // Fork session
317
+ await s.client.session.fork({ sessionID: s.session.id, messageID: "..." });
318
+
319
+ // Abort
320
+ await s.client.session.abort({ sessionID: s.session.id });
321
+
322
+ // Session messages
323
+ const messages = await s.client.session.messages({ sessionID: s.session.id });
324
+ });
325
+ ```
326
+
327
+ ### OpenCode event streaming
328
+
329
+ ```ts
330
+ await ctx.stage({ name: "..." }, {}, {}, async (s) => {
331
+ const unsubscribe = await s.client.event.subscribe((event) => {
332
+ switch (event.type) {
333
+ case "session.updated":
334
+ console.log("Session updated");
335
+ break;
336
+ case "message.created":
337
+ console.log("New message");
338
+ break;
339
+ }
340
+ });
341
+ });
342
+ ```
343
+
344
+ ### OpenCode permissions
345
+
346
+ ```ts
347
+ await ctx.stage({ name: "..." }, {}, {}, async (s) => {
348
+ // Handle permission requests
349
+ await s.client.session.permission({
350
+ sessionID: s.session.id,
351
+ permissionID: "...",
352
+ approved: true,
353
+ });
354
+ });
355
+ ```