@bastani/atomic 0.5.11-0 → 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,562 @@
1
+ """
2
+ Context Optimization Utilities — compaction, masking, budgeting, and cache optimization.
3
+
4
+ Public API
5
+ ----------
6
+ Functions:
7
+ estimate_token_count(text) -> int
8
+ estimate_message_tokens(messages) -> int
9
+ categorize_messages(messages) -> dict
10
+ summarize_content(content, category, max_length) -> str
11
+ design_stable_prompt(template, dynamic_values) -> str
12
+ calculate_cache_metrics(requests, cache) -> dict
13
+
14
+ Classes:
15
+ ObservationStore — Store and mask verbose tool outputs with retrievable references.
16
+ ContextBudget — Token budget allocation and optimization trigger detection.
17
+
18
+ PRODUCTION NOTES:
19
+ - Token estimation uses simplified heuristics (~4 chars/token for English).
20
+ Production systems should use model-specific tokenizers:
21
+ - OpenAI: tiktoken library
22
+ - Anthropic: anthropic tokenizer
23
+ - Local models: HuggingFace tokenizers
24
+
25
+ - Summarization functions use simple heuristics for demonstration.
26
+ Production systems should use:
27
+ - LLM-based summarization for high-quality compression
28
+ - Domain-specific summarization models
29
+ - Schema-based summarization for structured outputs
30
+
31
+ - Cache metrics are illustrative. Production systems should integrate
32
+ with actual inference infrastructure metrics.
33
+ """
34
+
35
+ from typing import List, Dict, Optional, Tuple
36
+ import hashlib
37
+ import re
38
+ import time
39
+
40
+ __all__ = [
41
+ "estimate_token_count",
42
+ "estimate_message_tokens",
43
+ "categorize_messages",
44
+ "summarize_content",
45
+ "summarize_tool_output",
46
+ "summarize_conversation",
47
+ "summarize_document",
48
+ "summarize_general",
49
+ "ObservationStore",
50
+ "ContextBudget",
51
+ "design_stable_prompt",
52
+ "calculate_cache_metrics",
53
+ "generate_cache_recommendations",
54
+ ]
55
+
56
+
57
+ # ---------------------------------------------------------------------------
58
+ # Token estimation
59
+ # ---------------------------------------------------------------------------
60
+
61
+ def estimate_token_count(text: str) -> int:
62
+ """
63
+ Estimate token count for text.
64
+
65
+ Use when: a quick token budget check is needed and a model-specific
66
+ tokenizer is unavailable or too slow for the hot path.
67
+
68
+ Uses approximation: ~4 characters per token for English.
69
+
70
+ WARNING: This is a rough estimate. Actual tokenization varies by:
71
+ - Model (GPT-5.2, Claude 4.5, Gemini 3 have different tokenizers)
72
+ - Content type (code typically has higher token density)
73
+ - Language (non-English may have 2-3x higher token/char ratio)
74
+
75
+ Production usage::
76
+
77
+ import tiktoken
78
+ enc = tiktoken.encoding_for_model("gpt-4")
79
+ token_count = len(enc.encode(text))
80
+ """
81
+ return len(text) // 4
82
+
83
+
84
+ def estimate_message_tokens(messages: List[Dict[str, str]]) -> int:
85
+ """
86
+ Estimate token count for a message list.
87
+
88
+ Use when: checking whether the current conversation is approaching
89
+ the context budget threshold before deciding to compact or mask.
90
+ """
91
+ total = 0
92
+ for msg in messages:
93
+ content = msg.get("content", "")
94
+ total += estimate_token_count(content)
95
+ # Add overhead for role/formatting
96
+ total += 10
97
+ return total
98
+
99
+
100
+ # ---------------------------------------------------------------------------
101
+ # Compaction functions
102
+ # ---------------------------------------------------------------------------
103
+
104
+ def categorize_messages(messages: List[Dict]) -> Dict[str, List[Dict]]:
105
+ """
106
+ Categorize messages for selective compaction.
107
+
108
+ Use when: preparing to compact context and needing to apply different
109
+ summarization strategies per category (tool outputs first, then old
110
+ conversation turns, then retrieved documents — never the system prompt).
111
+
112
+ Returns a dict mapping category name to list of messages.
113
+ """
114
+ categories: Dict[str, List[Dict]] = {
115
+ "system_prompt": [],
116
+ "tool_definition": [],
117
+ "tool_output": [],
118
+ "conversation": [],
119
+ "retrieved_document": [],
120
+ "other": [],
121
+ }
122
+
123
+ for msg in messages:
124
+ role = msg.get("role", "user")
125
+ content = msg.get("content", "")
126
+
127
+ if role == "system":
128
+ categories["system_prompt"].append({**msg, "category": "system_prompt"})
129
+ elif "tool_use" in msg.get("type", ""):
130
+ categories["tool_output"].append({**msg, "category": "tool_output"})
131
+ elif role == "user":
132
+ categories["conversation"].append({**msg, "category": "conversation"})
133
+ elif "retrieved" in msg.get("tags", []):
134
+ categories["retrieved_document"].append({**msg, "category": "retrieved_document"})
135
+ else:
136
+ categories["other"].append({**msg, "category": "other"})
137
+
138
+ return categories
139
+
140
+
141
+ def summarize_content(content: str, category: str, max_length: int = 500) -> str:
142
+ """
143
+ Summarize content for compaction, dispatching by category.
144
+
145
+ Use when: compacting context and needing category-aware summarization
146
+ (tool outputs get metric extraction, conversations get decision
147
+ extraction, documents get lead-paragraph extraction).
148
+ """
149
+ if category == "tool_output":
150
+ return summarize_tool_output(content, max_length)
151
+ elif category == "conversation":
152
+ return summarize_conversation(content, max_length)
153
+ elif category == "retrieved_document":
154
+ return summarize_document(content, max_length)
155
+ else:
156
+ return summarize_general(content, max_length)
157
+
158
+
159
+ def summarize_tool_output(content: str, max_length: int = 500) -> str:
160
+ """
161
+ Summarize tool output by extracting metrics and key findings.
162
+
163
+ Use when: a tool output has served its immediate purpose and needs
164
+ to be compacted while preserving actionable data points.
165
+ """
166
+ # Look for metrics (numbers with context)
167
+ metrics = re.findall(r'(\w+):\s*([\d.,]+)', content)
168
+
169
+ # Look for key findings (lines with important keywords)
170
+ keywords = ["result", "found", "total", "success", "error", "value"]
171
+ findings = []
172
+ for line in content.split('\n'):
173
+ if any(kw in line.lower() for kw in keywords):
174
+ findings.append(line.strip())
175
+
176
+ summary_parts = []
177
+ if metrics:
178
+ summary_parts.append(f"Metrics: {', '.join([f'{k}={v}' for k, v in metrics])}")
179
+ if findings:
180
+ summary_parts.append("Key findings: " + "; ".join(findings[:3]))
181
+
182
+ result = " | ".join(summary_parts) if summary_parts else "[Tool output summarized]"
183
+ return result[:max_length]
184
+
185
+
186
+ def summarize_conversation(content: str, max_length: int = 500) -> str:
187
+ """
188
+ Summarize conversational content by extracting decisions and questions.
189
+
190
+ Use when: older conversation turns need compaction and the key
191
+ decisions/commitments must survive while filler is removed.
192
+ """
193
+ decisions = re.findall(r'(?i)(?:decided|decision|chose|chosen)[:\s]+([^.]+)', content)
194
+ questions = re.findall(r'(?:\?|question)[:\s]+([^.]+)', content)
195
+
196
+ summary_parts = []
197
+ if decisions:
198
+ decision_texts = [d.strip() for d in decisions[:5]]
199
+ summary_parts.append(f"Decisions: {'; '.join(decision_texts)}")
200
+ if questions:
201
+ question_texts = [q.strip() for q in questions[:3]]
202
+ summary_parts.append(f"Open questions: {'; '.join(question_texts)}")
203
+
204
+ if not summary_parts:
205
+ # Fallback: extract the first few substantive sentences
206
+ sentences = [s.strip() for s in content.split('.') if len(s.strip()) > 20]
207
+ if sentences:
208
+ summary_parts.append('. '.join(sentences[:3]) + '.')
209
+
210
+ result = " | ".join(summary_parts) if summary_parts else "[Conversation summarized]"
211
+ return result[:max_length]
212
+
213
+
214
+ def summarize_document(content: str, max_length: int = 500) -> str:
215
+ """
216
+ Summarize document content using lead-paragraph extraction.
217
+
218
+ Use when: a retrieved document has been consumed for reasoning and
219
+ only a brief reference needs to remain in context.
220
+ """
221
+ paragraphs = content.split('\n\n')
222
+ if paragraphs:
223
+ first_para = paragraphs[0].strip()
224
+ sentences = first_para.split('. ')
225
+ if len(sentences) > 2:
226
+ first_para = '. '.join(sentences[:2]) + '.'
227
+ return first_para[:max_length]
228
+ return "[Document summarized]"
229
+
230
+
231
+ def summarize_general(content: str, max_length: int = 500) -> str:
232
+ """
233
+ General-purpose summarization via truncation.
234
+
235
+ Use when: content does not fit a specific category and a simple
236
+ truncation with ellipsis is acceptable.
237
+ """
238
+ return content[:max_length] + "..." if len(content) > max_length else content
239
+
240
+
241
+ # ---------------------------------------------------------------------------
242
+ # Observation masking
243
+ # ---------------------------------------------------------------------------
244
+
245
+ class ObservationStore:
246
+ """
247
+ Store and mask verbose tool outputs with retrievable references.
248
+
249
+ Use when: tool outputs dominate context (>50% of tokens) and older
250
+ observations have already served their reasoning purpose. Stores the
251
+ full content externally and replaces it with a compact reference
252
+ containing a key-point summary.
253
+
254
+ Example::
255
+
256
+ store = ObservationStore(max_size=500)
257
+ masked, ref_id = store.mask(long_tool_output, max_length=200)
258
+ # masked: "[Obs:a1b2c3d4 elided. Key: ... Full content retrievable.]"
259
+ # Later retrieval:
260
+ original = store.retrieve(ref_id)
261
+ """
262
+
263
+ def __init__(self, max_size: int = 1000) -> None:
264
+ self.observations: Dict[str, Dict] = {}
265
+ self.order: List[str] = []
266
+ self.max_size = max_size
267
+
268
+ def store(self, content: str, metadata: Optional[Dict] = None) -> str:
269
+ """Store observation and return reference ID."""
270
+ ref_id = self._generate_ref_id(content)
271
+
272
+ self.observations[ref_id] = {
273
+ "content": content,
274
+ "metadata": metadata or {},
275
+ "stored_at": time.time(),
276
+ "last_accessed": time.time(),
277
+ }
278
+ self.order.append(ref_id)
279
+
280
+ # Evict oldest if over limit
281
+ if len(self.order) > self.max_size:
282
+ oldest = self.order.pop(0)
283
+ del self.observations[oldest]
284
+
285
+ return ref_id
286
+
287
+ def retrieve(self, ref_id: str) -> Optional[str]:
288
+ """Retrieve observation by reference ID."""
289
+ if ref_id in self.observations:
290
+ self.observations[ref_id]["last_accessed"] = time.time()
291
+ return self.observations[ref_id]["content"]
292
+ return None
293
+
294
+ def mask(self, content: str, max_length: int = 200) -> Tuple[str, Optional[str]]:
295
+ """
296
+ Mask observation if longer than max_length.
297
+
298
+ Use when: deciding per-observation whether to keep inline or
299
+ replace with a compact reference. Returns (masked_content, ref_id)
300
+ where ref_id is None if the content was short enough to keep.
301
+ """
302
+ if len(content) <= max_length:
303
+ return content, None
304
+
305
+ ref_id = self.store(content)
306
+ key_point = self._extract_key_point(content)
307
+ masked = f"[Obs:{ref_id} elided. Key: {key_point}. Full content retrievable.]"
308
+ return masked, ref_id
309
+
310
+ def _generate_ref_id(self, content: str) -> str:
311
+ """Generate unique reference ID."""
312
+ hash_input = f"{content[:100]}{time.time()}"
313
+ return hashlib.md5(hash_input.encode()).hexdigest()[:8]
314
+
315
+ def _extract_key_point(self, content: str) -> str:
316
+ """Extract key point from observation."""
317
+ lines = [line for line in content.split('\n') if len(line) > 20]
318
+ if lines:
319
+ return lines[0][:50] + "..."
320
+ sentences = content.split('. ')
321
+ if sentences:
322
+ return sentences[0][:50] + "..."
323
+ return content[:50] + "..."
324
+
325
+
326
+ # ---------------------------------------------------------------------------
327
+ # Context budget management
328
+ # ---------------------------------------------------------------------------
329
+
330
+ class ContextBudget:
331
+ """
332
+ Token budget allocation and optimization trigger detection.
333
+
334
+ Use when: building an agent loop that needs to monitor context usage
335
+ across categories and trigger compaction/masking at the right thresholds
336
+ rather than waiting until the window overflows.
337
+
338
+ Example::
339
+
340
+ budget = ContextBudget(total_limit=128_000)
341
+ budget.allocate("system_prompt", 1500)
342
+ budget.allocate("tool_definitions", 3000)
343
+ # ... after each agent turn:
344
+ should_act, reasons = budget.should_optimize(current_usage)
345
+ if should_act:
346
+ # apply masking or compaction based on reasons
347
+ pass
348
+ """
349
+
350
+ def __init__(self, total_limit: int) -> None:
351
+ self.total_limit = total_limit
352
+ self.allocated: Dict[str, int] = {
353
+ "system_prompt": 0,
354
+ "tool_definitions": 0,
355
+ "retrieved_docs": 0,
356
+ "message_history": 0,
357
+ "tool_outputs": 0,
358
+ "other": 0,
359
+ }
360
+ self.reserved = 5000 # Reserved buffer
361
+ self.reservation_limit = total_limit - self.reserved
362
+
363
+ def allocate(self, category: str, amount: int) -> bool:
364
+ """
365
+ Allocate budget to category. Returns True on success, False if
366
+ the allocation would exceed the reservation limit.
367
+ """
368
+ if category not in self.allocated:
369
+ category = "other"
370
+
371
+ current = sum(self.allocated.values())
372
+ proposed = current + amount
373
+
374
+ if proposed > self.reservation_limit:
375
+ return False
376
+
377
+ self.allocated[category] += amount
378
+ return True
379
+
380
+ def remaining(self) -> int:
381
+ """Get remaining unallocated budget."""
382
+ current = sum(self.allocated.values())
383
+ return self.reservation_limit - current
384
+
385
+ def get_usage(self) -> Dict[str, object]:
386
+ """
387
+ Get current usage breakdown.
388
+
389
+ Use when: logging or displaying context budget state for
390
+ monitoring dashboards or debug output.
391
+ """
392
+ total = sum(self.allocated.values())
393
+ return {
394
+ "total_used": total,
395
+ "total_limit": self.total_limit,
396
+ "remaining": self.remaining(),
397
+ "by_category": dict(self.allocated),
398
+ "utilization_ratio": total / self.total_limit,
399
+ }
400
+
401
+ def should_optimize(
402
+ self, current_usage: int, metrics: Optional[Dict[str, float]] = None
403
+ ) -> Tuple[bool, List[Tuple[str, object]]]:
404
+ """
405
+ Determine if optimization should trigger.
406
+
407
+ Use when: called at the end of each agent loop iteration to
408
+ decide whether to apply compaction, masking, or both before
409
+ the next model call.
410
+
411
+ Returns (should_optimize, list_of_reasons).
412
+ """
413
+ reasons: List[Tuple[str, object]] = []
414
+
415
+ # Check utilization
416
+ utilization = current_usage / self.total_limit
417
+ if utilization > 0.8:
418
+ reasons.append(("high_utilization", utilization))
419
+
420
+ # Check degradation metrics if provided
421
+ if metrics:
422
+ if metrics.get("attention_degradation", 0) > 0.3:
423
+ reasons.append(("attention_degradation", True))
424
+ if metrics.get("quality_score", 1.0) < 0.8:
425
+ reasons.append(("quality_degradation", True))
426
+
427
+ return len(reasons) > 0, reasons
428
+
429
+
430
+ # ---------------------------------------------------------------------------
431
+ # Cache optimization
432
+ # ---------------------------------------------------------------------------
433
+
434
+ def design_stable_prompt(template: str, dynamic_values: Optional[Dict] = None) -> str:
435
+ """
436
+ Stabilize a prompt template for maximum KV-cache hit rate.
437
+
438
+ Use when: constructing system prompts or few-shot prefixes that will
439
+ be reused across many requests. Replaces dynamic content (timestamps,
440
+ session IDs, counters) with stable placeholders so the prefix hash
441
+ remains constant.
442
+ """
443
+ result = template
444
+
445
+ # Replace timestamps
446
+ date_pattern = r'\d{4}-\d{2}-\d{2}'
447
+ result = re.sub(date_pattern, '[DATE_STABLE]', result)
448
+
449
+ # Replace session IDs
450
+ session_pattern = r'Session \d+'
451
+ result = re.sub(session_pattern, 'Session [STABLE]', result)
452
+
453
+ # Replace counters
454
+ counter_pattern = r'\d+/\d+'
455
+ result = re.sub(counter_pattern, '[COUNTER_STABLE]', result)
456
+
457
+ return result
458
+
459
+
460
+ def calculate_cache_metrics(
461
+ requests: List[Dict], cache: Dict[str, Dict]
462
+ ) -> Dict[str, object]:
463
+ """
464
+ Calculate KV-cache hit metrics for a request sequence.
465
+
466
+ Use when: evaluating whether prompt restructuring improved cache
467
+ utilization. Feed in the request log and current cache state to
468
+ get hit/miss rates and actionable recommendations.
469
+ """
470
+ hits = 0
471
+ misses = 0
472
+
473
+ for req in requests:
474
+ prefix = req.get("prefix_hash", "")
475
+ token_count = req.get("token_count", 0)
476
+
477
+ if prefix in cache:
478
+ hits += token_count * cache[prefix].get("hit_ratio", 0)
479
+ else:
480
+ misses += token_count
481
+
482
+ total = hits + misses
483
+
484
+ return {
485
+ "hit_rate": hits / total if total > 0 else 0,
486
+ "cache_hits": hits,
487
+ "cache_misses": misses,
488
+ "recommendations": generate_cache_recommendations(hits, misses),
489
+ }
490
+
491
+
492
+ def generate_cache_recommendations(hits: int, misses: int) -> List[str]:
493
+ """
494
+ Generate recommendations for cache optimization based on hit/miss ratio.
495
+
496
+ Use when: cache metrics indicate sub-optimal hit rates and concrete
497
+ next steps are needed.
498
+ """
499
+ recommendations: List[str] = []
500
+
501
+ hit_rate = hits / (hits + misses) if (hits + misses) > 0 else 0
502
+
503
+ if hit_rate < 0.5:
504
+ recommendations.append("Consider stabilizing system prompts")
505
+ recommendations.append("Reduce variation in request prefixes")
506
+
507
+ if hit_rate < 0.8:
508
+ recommendations.append("Group similar requests together")
509
+ recommendations.append("Use consistent formatting across requests")
510
+
511
+ return recommendations
512
+
513
+
514
+ # ---------------------------------------------------------------------------
515
+ # Demo / smoke test
516
+ # ---------------------------------------------------------------------------
517
+
518
+ if __name__ == "__main__":
519
+ print("=== Context Optimization Utilities — Demo ===\n")
520
+
521
+ # 1. Token estimation
522
+ sample_text = "The quick brown fox jumps over the lazy dog. " * 20
523
+ tokens = estimate_token_count(sample_text)
524
+ print(f"1. Token estimate for {len(sample_text)}-char text: ~{tokens} tokens\n")
525
+
526
+ # 2. Observation masking
527
+ store = ObservationStore(max_size=100)
528
+ long_output = (
529
+ "Result: 42 items found\n"
530
+ "Total processing time: 3.2s\n"
531
+ "Details:\n" + "\n".join([f" Item {i}: value={i*10}" for i in range(20)])
532
+ )
533
+ masked, ref_id = store.mask(long_output, max_length=100)
534
+ print(f"2. Masked observation:\n {masked}")
535
+ print(f" Ref ID: {ref_id}")
536
+ retrieved = store.retrieve(ref_id)
537
+ print(f" Retrievable: {retrieved is not None}\n")
538
+
539
+ # 3. Context budget
540
+ budget = ContextBudget(total_limit=128_000)
541
+ budget.allocate("system_prompt", 1500)
542
+ budget.allocate("tool_definitions", 3000)
543
+ budget.allocate("message_history", 95_000)
544
+ usage = budget.get_usage()
545
+ print(f"3. Budget utilization: {usage['utilization_ratio']:.1%}")
546
+ should_opt, reasons = budget.should_optimize(
547
+ current_usage=int(128_000 * 0.85)
548
+ )
549
+ print(f" Should optimize: {should_opt}, reasons: {reasons}\n")
550
+
551
+ # 4. Cache-stable prompt
552
+ raw_prompt = "Session 42 started on 2025-12-20. Progress: 3/10 tasks."
553
+ stable = design_stable_prompt(raw_prompt)
554
+ print(f"4. Original prompt: {raw_prompt}")
555
+ print(f" Stabilized: {stable}\n")
556
+
557
+ # 5. Summarization
558
+ tool_out = "count: 150\nstatus: success\nFound 3 errors in module A."
559
+ summary = summarize_content(tool_out, "tool_output", max_length=200)
560
+ print(f"5. Tool output summary: {summary}\n")
561
+
562
+ print("=== Demo complete ===")