@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,614 @@
1
+ """
2
+ Context Degradation Detection — Public API
3
+ ============================================
4
+
5
+ Detect, measure, and diagnose context degradation patterns in LLM agent systems.
6
+
7
+ Public API:
8
+ measure_attention_distribution — Map attention weight across context positions.
9
+ detect_lost_in_middle — Flag critical information in degraded-attention regions.
10
+ analyze_context_structure — Assess structural degradation risk factors.
11
+ PoisoningDetector — Detect context poisoning indicators (error accumulation,
12
+ contradictions, hallucination markers).
13
+ ContextHealthAnalyzer — Run composite health analysis combining attention,
14
+ poisoning, and utilization metrics.
15
+ analyze_agent_context — One-call convenience function for agent sessions.
16
+
17
+ PRODUCTION NOTES:
18
+ - The attention estimation functions simulate U-shaped attention curves for demonstration
19
+ purposes. Production systems should extract actual attention weights from model internals
20
+ when available (e.g., via TransformerLens or model-specific APIs).
21
+ - Token estimation uses simplified heuristics (~1 token per whitespace-split word).
22
+ Production systems should use model-specific tokenizers for accurate counts.
23
+ - Poisoning and hallucination detection uses pattern matching as a proxy. Production
24
+ systems may benefit from fine-tuned classifiers or model-based detection.
25
+ """
26
+
27
+ import random
28
+ import re
29
+ from typing import Dict, List, Optional
30
+
31
+ __all__ = [
32
+ "measure_attention_distribution",
33
+ "detect_lost_in_middle",
34
+ "analyze_context_structure",
35
+ "PoisoningDetector",
36
+ "ContextHealthAnalyzer",
37
+ "analyze_agent_context",
38
+ ]
39
+
40
+
41
+ # ---------------------------------------------------------------------------
42
+ # Attention Distribution Analysis
43
+ # ---------------------------------------------------------------------------
44
+
45
+ def measure_attention_distribution(
46
+ context_tokens: List[str],
47
+ query: str,
48
+ ) -> List[Dict[str, object]]:
49
+ """Map simulated attention weight to each context position.
50
+
51
+ Use when: diagnosing whether critical information sits in the
52
+ low-attention middle region of a long context.
53
+
54
+ Args:
55
+ context_tokens: Whitespace-split tokens (or chunks) of the context.
56
+ query: The query or task description the context is meant to support.
57
+
58
+ Returns:
59
+ List of dicts, one per position, each containing:
60
+ position (int), attention (float), region (str), tokens (str | None).
61
+ """
62
+ n = len(context_tokens)
63
+ attention_by_position: List[Dict[str, object]] = []
64
+
65
+ for position in range(n):
66
+ is_beginning = position < n * 0.1
67
+ is_end = position > n * 0.9
68
+
69
+ attention = _estimate_attention(position, n, is_beginning, is_end)
70
+
71
+ attention_by_position.append({
72
+ "position": position,
73
+ "attention": attention,
74
+ "region": "attention_favored" if (is_beginning or is_end) else "attention_degraded",
75
+ "tokens": context_tokens[position][:50] if position < 5 or position > n - 5 else None,
76
+ })
77
+
78
+ return attention_by_position
79
+
80
+
81
+ def _estimate_attention(
82
+ position: int,
83
+ total: int,
84
+ is_beginning: bool,
85
+ is_end: bool,
86
+ ) -> float:
87
+ """Estimate attention weight for a single position.
88
+
89
+ Simulates the U-shaped attention curve documented in lost-in-middle research:
90
+ - Beginning tokens receive high attention (primacy / attention-sink effect).
91
+ - End tokens receive high attention (recency effect).
92
+ - Middle tokens receive degraded attention.
93
+
94
+ IMPORTANT: This is a simulation for demonstration. Production systems should
95
+ extract actual attention weights from model forward passes or use
96
+ interpretability libraries (e.g., TransformerLens).
97
+ """
98
+ if is_beginning:
99
+ return 0.8 + random.random() * 0.2
100
+ elif is_end:
101
+ return 0.7 + random.random() * 0.3
102
+ else:
103
+ middle_progress = (position - total * 0.1) / (total * 0.8)
104
+ base_attention = 0.3 * (1 - middle_progress) + 0.1 * middle_progress
105
+ return base_attention + random.random() * 0.1
106
+
107
+
108
+ # ---------------------------------------------------------------------------
109
+ # Lost-in-Middle Detection
110
+ # ---------------------------------------------------------------------------
111
+
112
+ def detect_lost_in_middle(
113
+ critical_positions: List[int],
114
+ attention_distribution: List[Dict[str, object]],
115
+ ) -> Dict[str, object]:
116
+ """Check if critical information sits in attention-degraded positions.
117
+
118
+ Use when: context has been assembled and you need to verify that
119
+ high-priority content is not buried in the low-attention middle zone.
120
+
121
+ Args:
122
+ critical_positions: Indices into the context that hold critical info.
123
+ attention_distribution: Output of ``measure_attention_distribution``.
124
+
125
+ Returns:
126
+ Dict with keys: at_risk (list[int]), safe (list[int]),
127
+ recommendations (list[str]), degradation_score (float 0-1).
128
+ """
129
+ results: Dict[str, object] = {
130
+ "at_risk": [],
131
+ "safe": [],
132
+ "recommendations": [],
133
+ "degradation_score": 0.0,
134
+ }
135
+
136
+ at_risk_count = 0
137
+ total_critical = len(critical_positions)
138
+
139
+ for pos in critical_positions:
140
+ if pos < len(attention_distribution):
141
+ region = attention_distribution[pos]["region"]
142
+ if region == "attention_degraded":
143
+ results["at_risk"].append(pos)
144
+ at_risk_count += 1
145
+ else:
146
+ results["safe"].append(pos)
147
+
148
+ if total_critical > 0:
149
+ results["degradation_score"] = at_risk_count / total_critical
150
+
151
+ if results["at_risk"]:
152
+ results["recommendations"].extend([
153
+ "Move critical information to attention-favored positions",
154
+ "Use explicit markers to highlight critical information",
155
+ "Consider splitting context to reduce middle section",
156
+ f"{at_risk_count}/{total_critical} critical items are in degraded region",
157
+ ])
158
+
159
+ return results
160
+
161
+
162
+ # ---------------------------------------------------------------------------
163
+ # Context Structure Analysis
164
+ # ---------------------------------------------------------------------------
165
+
166
+ def analyze_context_structure(context: str) -> Dict[str, object]:
167
+ """Assess structural degradation risk factors in a context string.
168
+
169
+ Use when: evaluating whether a context layout puts too much content
170
+ in the low-attention middle zone before sending it to a model.
171
+
172
+ Args:
173
+ context: The full context string to analyze.
174
+
175
+ Returns:
176
+ Dict with total_lines, sections list, middle_content_ratio,
177
+ and degradation_risk level (low / medium / high).
178
+ """
179
+ lines = context.split("\n")
180
+ sections: List[Dict[str, object]] = []
181
+
182
+ current_section: Dict[str, object] = {"start": 0, "type": "unknown", "length": 0}
183
+
184
+ for i, line in enumerate(lines):
185
+ if line.startswith("#"):
186
+ if current_section["length"] > 0:
187
+ sections.append(current_section)
188
+ current_section = {
189
+ "start": i,
190
+ "type": "header",
191
+ "length": 1,
192
+ "header": line.lstrip("#").strip(),
193
+ }
194
+ else:
195
+ current_section["length"] += 1
196
+
197
+ sections.append(current_section)
198
+
199
+ n = len(lines)
200
+ middle_start = int(n * 0.3)
201
+ middle_end = int(n * 0.7)
202
+
203
+ middle_content = sum(
204
+ s["length"] for s in sections
205
+ if s["start"] >= middle_start and s["start"] <= middle_end
206
+ )
207
+
208
+ middle_ratio = middle_content / n if n > 0 else 0
209
+ return {
210
+ "total_lines": n,
211
+ "sections": sections,
212
+ "middle_content_ratio": middle_ratio,
213
+ "degradation_risk": (
214
+ "high" if middle_ratio > 0.5
215
+ else "medium" if middle_ratio > 0.3
216
+ else "low"
217
+ ),
218
+ }
219
+
220
+
221
+ # ---------------------------------------------------------------------------
222
+ # Context Poisoning Detection
223
+ # ---------------------------------------------------------------------------
224
+
225
+ class PoisoningDetector:
226
+ """Detect context poisoning indicators via pattern matching.
227
+
228
+ Use when: context quality is suspect — outputs degrade on previously
229
+ successful tasks, tool calls misalign, or hallucinations persist
230
+ despite corrections.
231
+ """
232
+
233
+ def __init__(self) -> None:
234
+ self.claims: List[Dict[str, object]] = []
235
+ self.error_patterns: List[str] = [
236
+ r"error",
237
+ r"failed",
238
+ r"exception",
239
+ r"cannot",
240
+ r"unable",
241
+ r"invalid",
242
+ r"not found",
243
+ ]
244
+
245
+ def extract_claims(self, text: str) -> List[Dict[str, object]]:
246
+ """Extract claims from text for verification tracking.
247
+
248
+ Use when: building a provenance chain to trace which claims
249
+ entered context and whether they have been verified.
250
+
251
+ Args:
252
+ text: Raw text to extract claims from.
253
+
254
+ Returns:
255
+ List of claim dicts with id, text, verified status, and
256
+ error indicator flag.
257
+ """
258
+ sentences = text.split(".")
259
+ claims: List[Dict[str, object]] = []
260
+
261
+ for i, sentence in enumerate(sentences):
262
+ sentence = sentence.strip()
263
+ if len(sentence) < 10:
264
+ continue
265
+
266
+ claims.append({
267
+ "id": i,
268
+ "text": sentence,
269
+ "verified": None,
270
+ "has_error_indicator": any(
271
+ re.search(pattern, sentence, re.IGNORECASE)
272
+ for pattern in self.error_patterns
273
+ ),
274
+ })
275
+
276
+ self.claims.extend(claims)
277
+ return claims
278
+
279
+ def detect_poisoning(self, context: str) -> Dict[str, object]:
280
+ """Detect potential context poisoning indicators.
281
+
282
+ Use when: agent output quality has degraded and context
283
+ contamination is suspected. Checks for error accumulation,
284
+ contradictions, and hallucination markers.
285
+
286
+ Args:
287
+ context: The full context string to analyze.
288
+
289
+ Returns:
290
+ Dict with poisoning_risk (bool), indicators (list),
291
+ and overall_risk level (low / medium / high).
292
+ """
293
+ indicators: List[Dict[str, object]] = []
294
+
295
+ # Check for error accumulation
296
+ error_count = sum(
297
+ 1 for pattern in self.error_patterns
298
+ if re.search(pattern, context, re.IGNORECASE)
299
+ )
300
+
301
+ if error_count > 3:
302
+ indicators.append({
303
+ "type": "error_accumulation",
304
+ "count": error_count,
305
+ "severity": "high" if error_count > 5 else "medium",
306
+ "message": f"Found {error_count} error indicators in context",
307
+ })
308
+
309
+ # Check for contradiction patterns
310
+ contradictions = self._detect_contradictions(context)
311
+ if contradictions:
312
+ indicators.append({
313
+ "type": "contradictions",
314
+ "count": len(contradictions),
315
+ "examples": contradictions[:3],
316
+ "severity": "high",
317
+ "message": f"Found {len(contradictions)} potential contradictions",
318
+ })
319
+
320
+ # Check for hallucination markers
321
+ hallucination_markers = self._detect_hallucination_markers(context)
322
+ if hallucination_markers:
323
+ indicators.append({
324
+ "type": "hallucination_markers",
325
+ "count": len(hallucination_markers),
326
+ "severity": "medium",
327
+ "message": f"Found {len(hallucination_markers)} phrases associated with uncertain claims",
328
+ })
329
+
330
+ return {
331
+ "poisoning_risk": len(indicators) > 0,
332
+ "indicators": indicators,
333
+ "overall_risk": (
334
+ "high" if len(indicators) > 2
335
+ else "medium" if len(indicators) > 0
336
+ else "low"
337
+ ),
338
+ }
339
+
340
+ def _detect_contradictions(self, text: str) -> List[str]:
341
+ """Detect potential contradictions in text."""
342
+ contradictions: List[str] = []
343
+
344
+ conflict_patterns = [
345
+ (r"however", r"but"),
346
+ (r"on the other hand", r"instead"),
347
+ (r"although", r"yet"),
348
+ (r"despite", r"nevertheless"),
349
+ ]
350
+
351
+ for pattern1, pattern2 in conflict_patterns:
352
+ if re.search(pattern1, text, re.IGNORECASE) and re.search(pattern2, text, re.IGNORECASE):
353
+ sentences = text.split(".")
354
+ for sentence in sentences:
355
+ if (re.search(pattern1, sentence, re.IGNORECASE)
356
+ or re.search(pattern2, sentence, re.IGNORECASE)):
357
+ stripped = sentence.strip()
358
+ if stripped and len(stripped) < 200:
359
+ contradictions.append(stripped[:100])
360
+
361
+ return contradictions[:5]
362
+
363
+ def _detect_hallucination_markers(self, text: str) -> List[str]:
364
+ """Detect phrases associated with uncertain or hallucinated claims."""
365
+ markers = [
366
+ "may have been",
367
+ "might have",
368
+ "could potentially",
369
+ "possibly",
370
+ "apparently",
371
+ "reportedly",
372
+ "it is said that",
373
+ "sources suggest",
374
+ "believed to be",
375
+ "thought to be",
376
+ ]
377
+
378
+ return [marker for marker in markers if marker in text.lower()]
379
+
380
+
381
+ # ---------------------------------------------------------------------------
382
+ # Context Health Analyzer
383
+ # ---------------------------------------------------------------------------
384
+
385
+ class ContextHealthAnalyzer:
386
+ """Run composite health analysis on a context string.
387
+
388
+ Use when: performing routine health checks on agent context during
389
+ long-running sessions, or when setting up automated monitoring that
390
+ triggers compaction or isolation before degradation hits.
391
+
392
+ Combines attention distribution, poisoning detection, and utilization
393
+ metrics into a single 0-1 health score with status interpretation.
394
+ """
395
+
396
+ def __init__(self, context_limit: int = 100_000) -> None:
397
+ self.context_limit: int = context_limit
398
+ self.metrics_history: List[Dict[str, object]] = []
399
+
400
+ def analyze(
401
+ self,
402
+ context: str,
403
+ critical_positions: Optional[List[int]] = None,
404
+ ) -> Dict[str, object]:
405
+ """Perform comprehensive context health analysis.
406
+
407
+ Use when: a single health-check call is needed that covers
408
+ attention, poisoning, and utilization in one pass.
409
+
410
+ Args:
411
+ context: The full context string to analyze.
412
+ critical_positions: Indices of tokens holding critical info.
413
+ Defaults to the first 10 positions if not provided.
414
+
415
+ Returns:
416
+ Dict with health_score (float 0-1), status (str),
417
+ metrics (dict), issues (dict), and recommendations (list[str]).
418
+ """
419
+ tokens = context.split()
420
+
421
+ token_count = len(tokens)
422
+ utilization = token_count / self.context_limit
423
+
424
+ attention_dist = measure_attention_distribution(
425
+ tokens[:1000], # Sample for efficiency
426
+ "current_task",
427
+ )
428
+
429
+ degradation = detect_lost_in_middle(
430
+ critical_positions or list(range(10)),
431
+ attention_dist,
432
+ )
433
+
434
+ poisoning = PoisoningDetector().detect_poisoning(context)
435
+
436
+ health_score = self._calculate_health_score(
437
+ utilization=utilization,
438
+ degradation=degradation["degradation_score"],
439
+ poisoning_risk=1.0 if poisoning["poisoning_risk"] else 0.0,
440
+ )
441
+
442
+ result: Dict[str, object] = {
443
+ "health_score": health_score,
444
+ "status": self._interpret_score(health_score),
445
+ "metrics": {
446
+ "token_count": token_count,
447
+ "utilization": utilization,
448
+ "degradation_score": degradation["degradation_score"],
449
+ "poisoning_risk": poisoning["overall_risk"],
450
+ },
451
+ "issues": {
452
+ "lost_in_middle": degradation,
453
+ "poisoning": poisoning,
454
+ },
455
+ "recommendations": self._generate_recommendations(
456
+ utilization, degradation, poisoning
457
+ ),
458
+ }
459
+
460
+ self.metrics_history.append(result)
461
+ return result
462
+
463
+ def _calculate_health_score(
464
+ self,
465
+ utilization: float,
466
+ degradation: float,
467
+ poisoning_risk: float,
468
+ ) -> float:
469
+ """Calculate composite health score (0-1, higher is healthier)."""
470
+ utilization_penalty = min(utilization * 0.5, 0.3)
471
+ degradation_penalty = degradation * 0.3
472
+ poisoning_penalty = poisoning_risk * 0.2
473
+
474
+ score = 1.0 - utilization_penalty - degradation_penalty - poisoning_penalty
475
+ return max(0.0, min(1.0, score))
476
+
477
+ def _interpret_score(self, score: float) -> str:
478
+ """Map numeric score to human-readable status."""
479
+ if score > 0.8:
480
+ return "healthy"
481
+ elif score > 0.6:
482
+ return "warning"
483
+ elif score > 0.4:
484
+ return "degraded"
485
+ else:
486
+ return "critical"
487
+
488
+ def _generate_recommendations(
489
+ self,
490
+ utilization: float,
491
+ degradation: Dict[str, object],
492
+ poisoning: Dict[str, object],
493
+ ) -> List[str]:
494
+ """Generate actionable recommendations based on analysis."""
495
+ recommendations: List[str] = []
496
+
497
+ if utilization > 0.8:
498
+ recommendations.append("Context near limit - consider compaction")
499
+ recommendations.append("Implement observation masking for tool outputs")
500
+
501
+ if degradation.get("at_risk"):
502
+ recommendations.append("Critical information in degraded attention region")
503
+ recommendations.append("Move key information to beginning or end of context")
504
+
505
+ if poisoning["poisoning_risk"]:
506
+ recommendations.append("Context poisoning indicators detected")
507
+ recommendations.append("Review and remove potentially erroneous information")
508
+
509
+ if not recommendations:
510
+ recommendations.append("Context appears healthy - continue monitoring")
511
+
512
+ return recommendations
513
+
514
+
515
+ # ---------------------------------------------------------------------------
516
+ # Convenience Function
517
+ # ---------------------------------------------------------------------------
518
+
519
+ def analyze_agent_context(
520
+ context: str,
521
+ context_limit: int = 80_000,
522
+ critical_positions: Optional[List[int]] = None,
523
+ ) -> Dict[str, object]:
524
+ """One-call health analysis for an agent session.
525
+
526
+ Use when: a quick health check is needed without manually configuring
527
+ an analyzer instance. Prints a summary and returns the full result dict.
528
+
529
+ Args:
530
+ context: The full context string to analyze.
531
+ context_limit: Maximum token budget for this agent's context window.
532
+ critical_positions: Indices of critical tokens. Defaults to [0..4].
533
+
534
+ Returns:
535
+ Full health analysis dict from ``ContextHealthAnalyzer.analyze``.
536
+ """
537
+ analyzer = ContextHealthAnalyzer(context_limit=context_limit)
538
+
539
+ if critical_positions is None:
540
+ critical_positions = list(range(5))
541
+
542
+ result = analyzer.analyze(context, critical_positions)
543
+
544
+ print(f"Health Score: {result['health_score']:.2f}")
545
+ print(f"Status: {result['status']}")
546
+ print("Recommendations:")
547
+ for rec in result["recommendations"]:
548
+ print(f" - {rec}")
549
+
550
+ return result
551
+
552
+
553
+ # ---------------------------------------------------------------------------
554
+ # CLI Demo
555
+ # ---------------------------------------------------------------------------
556
+
557
+ if __name__ == "__main__":
558
+ # Demonstrate the public API with synthetic context
559
+ print("=" * 60)
560
+ print("Context Degradation Detector — Demo")
561
+ print("=" * 60)
562
+
563
+ # Build a synthetic context with identifiable sections
564
+ intro = "System prompt: Analyze quarterly revenue data and produce a report. "
565
+ middle = "Background information. " * 200 # Filler to simulate long context
566
+ conclusion = "Key finding: Revenue increased 15% year-over-year. "
567
+ sample_context = intro + middle + conclusion
568
+
569
+ print(f"\nSample context length: {len(sample_context.split())} tokens")
570
+
571
+ # 1. Structure analysis
572
+ print("\n--- Structure Analysis ---")
573
+ structure = analyze_context_structure(sample_context)
574
+ print(f" Lines: {structure['total_lines']}")
575
+ print(f" Middle content ratio: {structure['middle_content_ratio']:.2f}")
576
+ print(f" Degradation risk: {structure['degradation_risk']}")
577
+
578
+ # 2. Attention distribution (first 50 tokens for brevity)
579
+ print("\n--- Attention Distribution (first 50 tokens) ---")
580
+ tokens = sample_context.split()[:50]
581
+ attention = measure_attention_distribution(tokens, "quarterly revenue")
582
+ favored = sum(1 for a in attention if a["region"] == "attention_favored")
583
+ degraded = sum(1 for a in attention if a["region"] == "attention_degraded")
584
+ print(f" Favored positions: {favored}")
585
+ print(f" Degraded positions: {degraded}")
586
+
587
+ # 3. Lost-in-middle detection
588
+ print("\n--- Lost-in-Middle Detection ---")
589
+ critical = [0, 1, 2, 25, 26, 48, 49] # Start, middle, end
590
+ lim_result = detect_lost_in_middle(critical, attention)
591
+ print(f" At risk: {lim_result['at_risk']}")
592
+ print(f" Safe: {lim_result['safe']}")
593
+ print(f" Degradation score: {lim_result['degradation_score']:.2f}")
594
+
595
+ # 4. Poisoning detection
596
+ print("\n--- Poisoning Detection ---")
597
+ poisoned_context = (
598
+ "The API returned an error. However, the system reportedly "
599
+ "recovered. But the error persisted and the request failed. "
600
+ "Unable to parse the response. Sources suggest the endpoint "
601
+ "may have been deprecated. Although retries succeeded, yet "
602
+ "the invalid token caused an exception."
603
+ )
604
+ detector = PoisoningDetector()
605
+ poisoning = detector.detect_poisoning(poisoned_context)
606
+ print(f" Poisoning risk: {poisoning['poisoning_risk']}")
607
+ print(f" Overall risk: {poisoning['overall_risk']}")
608
+ for indicator in poisoning["indicators"]:
609
+ print(f" [{indicator['severity']}] {indicator['message']}")
610
+
611
+ # 5. Full health analysis
612
+ print("\n--- Full Health Analysis ---")
613
+ result = analyze_agent_context(sample_context)
614
+ print(f"\n Full result keys: {list(result.keys())}")