@bastani/atomic 0.5.11 → 0.5.12-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/.agents/skills/adapt/SKILL.md +199 -0
  2. package/.agents/skills/advanced-evaluation/SKILL.md +402 -0
  3. package/.agents/skills/advanced-evaluation/references/bias-mitigation.md +288 -0
  4. package/.agents/skills/advanced-evaluation/references/evaluation-pipeline.md +43 -0
  5. package/.agents/skills/advanced-evaluation/references/implementation-patterns.md +315 -0
  6. package/.agents/skills/advanced-evaluation/references/metrics-guide.md +331 -0
  7. package/.agents/skills/advanced-evaluation/scripts/evaluation_example.py +392 -0
  8. package/.agents/skills/animate/SKILL.md +175 -0
  9. package/.agents/skills/arrange/SKILL.md +124 -0
  10. package/.agents/skills/audit/SKILL.md +148 -0
  11. package/.agents/skills/bdi-mental-states/SKILL.md +311 -0
  12. package/.agents/skills/bdi-mental-states/references/bdi-ontology-core.md +207 -0
  13. package/.agents/skills/bdi-mental-states/references/framework-integration.md +582 -0
  14. package/.agents/skills/bdi-mental-states/references/rdf-examples.md +315 -0
  15. package/.agents/skills/bdi-mental-states/references/sparql-competency.md +420 -0
  16. package/.agents/skills/bolder/SKILL.md +117 -0
  17. package/.agents/skills/bun/SKILL.md +199 -0
  18. package/.agents/skills/clarify/SKILL.md +183 -0
  19. package/.agents/skills/colorize/SKILL.md +143 -0
  20. package/.agents/skills/context-compression/SKILL.md +272 -0
  21. package/.agents/skills/context-compression/references/evaluation-framework.md +213 -0
  22. package/.agents/skills/context-compression/scripts/compression_evaluator.py +862 -0
  23. package/.agents/skills/context-compression/tests/test_compression_evaluator.py +56 -0
  24. package/.agents/skills/context-degradation/SKILL.md +206 -0
  25. package/.agents/skills/context-degradation/references/patterns.md +314 -0
  26. package/.agents/skills/context-degradation/scripts/degradation_detector.py +614 -0
  27. package/.agents/skills/context-fundamentals/SKILL.md +201 -0
  28. package/.agents/skills/context-fundamentals/references/context-components.md +283 -0
  29. package/.agents/skills/context-fundamentals/scripts/context_manager.py +533 -0
  30. package/.agents/skills/context-optimization/SKILL.md +195 -0
  31. package/.agents/skills/context-optimization/references/optimization_techniques.md +272 -0
  32. package/.agents/skills/context-optimization/scripts/compaction.py +562 -0
  33. package/.agents/skills/create-spec/SKILL.md +244 -0
  34. package/.agents/skills/critique/SKILL.md +225 -0
  35. package/.agents/skills/critique/reference/cognitive-load.md +106 -0
  36. package/.agents/skills/critique/reference/heuristics-scoring.md +234 -0
  37. package/.agents/skills/critique/reference/personas.md +178 -0
  38. package/.agents/skills/delight/SKILL.md +304 -0
  39. package/.agents/skills/distill/SKILL.md +122 -0
  40. package/.agents/skills/docx/LICENSE.txt +30 -0
  41. package/.agents/skills/docx/SKILL.md +590 -0
  42. package/.agents/skills/docx/scripts/__init__.py +1 -0
  43. package/.agents/skills/docx/scripts/accept_changes.py +135 -0
  44. package/.agents/skills/docx/scripts/comment.py +318 -0
  45. package/.agents/skills/docx/scripts/office/helpers/__init__.py +0 -0
  46. package/.agents/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
  47. package/.agents/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
  48. package/.agents/skills/docx/scripts/office/pack.py +159 -0
  49. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  50. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  51. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  52. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  53. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  54. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  55. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  56. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  57. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  58. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  59. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  60. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  61. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  62. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  63. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  64. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  65. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  66. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  67. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  68. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  69. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  70. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  71. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  72. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  73. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  74. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  75. package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  76. package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  77. package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  78. package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  79. package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  80. package/.agents/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  81. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  82. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  83. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  84. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  85. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  86. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  87. package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  88. package/.agents/skills/docx/scripts/office/soffice.py +183 -0
  89. package/.agents/skills/docx/scripts/office/unpack.py +132 -0
  90. package/.agents/skills/docx/scripts/office/validate.py +111 -0
  91. package/.agents/skills/docx/scripts/office/validators/__init__.py +15 -0
  92. package/.agents/skills/docx/scripts/office/validators/base.py +847 -0
  93. package/.agents/skills/docx/scripts/office/validators/docx.py +446 -0
  94. package/.agents/skills/docx/scripts/office/validators/pptx.py +275 -0
  95. package/.agents/skills/docx/scripts/office/validators/redlining.py +247 -0
  96. package/.agents/skills/docx/scripts/templates/comments.xml +3 -0
  97. package/.agents/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  98. package/.agents/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  99. package/.agents/skills/docx/scripts/templates/commentsIds.xml +3 -0
  100. package/.agents/skills/docx/scripts/templates/people.xml +3 -0
  101. package/.agents/skills/evaluation/SKILL.md +251 -0
  102. package/.agents/skills/evaluation/references/metrics.md +339 -0
  103. package/.agents/skills/evaluation/scripts/evaluator.py +627 -0
  104. package/.agents/skills/explain-code/SKILL.md +230 -0
  105. package/.agents/skills/extract/SKILL.md +91 -0
  106. package/.agents/skills/filesystem-context/SKILL.md +287 -0
  107. package/.agents/skills/filesystem-context/references/implementation-patterns.md +549 -0
  108. package/.agents/skills/filesystem-context/scripts/filesystem_context.py +425 -0
  109. package/.agents/skills/find-skills/SKILL.md +142 -0
  110. package/.agents/skills/frontend-design/SKILL.md +147 -0
  111. package/.agents/skills/frontend-design/reference/color-and-contrast.md +132 -0
  112. package/.agents/skills/frontend-design/reference/interaction-design.md +195 -0
  113. package/.agents/skills/frontend-design/reference/motion-design.md +99 -0
  114. package/.agents/skills/frontend-design/reference/responsive-design.md +114 -0
  115. package/.agents/skills/frontend-design/reference/spatial-design.md +100 -0
  116. package/.agents/skills/frontend-design/reference/typography.md +133 -0
  117. package/.agents/skills/frontend-design/reference/ux-writing.md +107 -0
  118. package/.agents/skills/gh-commit/SKILL.md +243 -0
  119. package/.agents/skills/gh-create-pr/SKILL.md +93 -0
  120. package/.agents/skills/harden/SKILL.md +354 -0
  121. package/.agents/skills/hosted-agents/SKILL.md +260 -0
  122. package/.agents/skills/hosted-agents/references/infrastructure-patterns.md +700 -0
  123. package/.agents/skills/hosted-agents/scripts/sandbox_manager.py +590 -0
  124. package/.agents/skills/impeccable/SKILL.md +365 -0
  125. package/.agents/skills/impeccable/reference/color-and-contrast.md +105 -0
  126. package/.agents/skills/impeccable/reference/craft.md +70 -0
  127. package/.agents/skills/impeccable/reference/extract.md +70 -0
  128. package/.agents/skills/impeccable/reference/interaction-design.md +195 -0
  129. package/.agents/skills/impeccable/reference/motion-design.md +99 -0
  130. package/.agents/skills/impeccable/reference/responsive-design.md +114 -0
  131. package/.agents/skills/impeccable/reference/spatial-design.md +100 -0
  132. package/.agents/skills/impeccable/reference/typography.md +142 -0
  133. package/.agents/skills/impeccable/reference/ux-writing.md +107 -0
  134. package/.agents/skills/impeccable/scripts/cleanup-deprecated.mjs +214 -0
  135. package/.agents/skills/init/SKILL.md +138 -0
  136. package/.agents/skills/layout/SKILL.md +125 -0
  137. package/.agents/skills/liteparse/SKILL.md +222 -0
  138. package/.agents/skills/memory-systems/SKILL.md +219 -0
  139. package/.agents/skills/memory-systems/references/implementation.md +551 -0
  140. package/.agents/skills/memory-systems/scripts/memory_store.py +616 -0
  141. package/.agents/skills/multi-agent-patterns/SKILL.md +257 -0
  142. package/.agents/skills/multi-agent-patterns/references/frameworks.md +433 -0
  143. package/.agents/skills/multi-agent-patterns/scripts/coordination.py +613 -0
  144. package/.agents/skills/normalize/SKILL.md +70 -0
  145. package/.agents/skills/onboard/SKILL.md +245 -0
  146. package/.agents/skills/opentui/SKILL.md +201 -0
  147. package/.agents/skills/opentui/references/animation/REFERENCE.md +431 -0
  148. package/.agents/skills/opentui/references/components/REFERENCE.md +144 -0
  149. package/.agents/skills/opentui/references/components/code-diff.md +672 -0
  150. package/.agents/skills/opentui/references/components/containers.md +417 -0
  151. package/.agents/skills/opentui/references/components/inputs.md +531 -0
  152. package/.agents/skills/opentui/references/components/text-display.md +386 -0
  153. package/.agents/skills/opentui/references/core/REFERENCE.md +145 -0
  154. package/.agents/skills/opentui/references/core/api.md +543 -0
  155. package/.agents/skills/opentui/references/core/configuration.md +168 -0
  156. package/.agents/skills/opentui/references/core/gotchas.md +393 -0
  157. package/.agents/skills/opentui/references/core/patterns.md +449 -0
  158. package/.agents/skills/opentui/references/keyboard/REFERENCE.md +617 -0
  159. package/.agents/skills/opentui/references/layout/REFERENCE.md +337 -0
  160. package/.agents/skills/opentui/references/layout/patterns.md +444 -0
  161. package/.agents/skills/opentui/references/react/REFERENCE.md +174 -0
  162. package/.agents/skills/opentui/references/react/api.md +436 -0
  163. package/.agents/skills/opentui/references/react/configuration.md +302 -0
  164. package/.agents/skills/opentui/references/react/gotchas.md +443 -0
  165. package/.agents/skills/opentui/references/react/patterns.md +501 -0
  166. package/.agents/skills/opentui/references/solid/REFERENCE.md +201 -0
  167. package/.agents/skills/opentui/references/solid/api.md +564 -0
  168. package/.agents/skills/opentui/references/solid/configuration.md +316 -0
  169. package/.agents/skills/opentui/references/solid/gotchas.md +427 -0
  170. package/.agents/skills/opentui/references/solid/patterns.md +560 -0
  171. package/.agents/skills/opentui/references/testing/REFERENCE.md +614 -0
  172. package/.agents/skills/optimize/SKILL.md +266 -0
  173. package/.agents/skills/overdrive/SKILL.md +142 -0
  174. package/.agents/skills/pdf/LICENSE.txt +30 -0
  175. package/.agents/skills/pdf/SKILL.md +314 -0
  176. package/.agents/skills/pdf/forms.md +294 -0
  177. package/.agents/skills/pdf/reference.md +612 -0
  178. package/.agents/skills/pdf/scripts/check_bounding_boxes.py +65 -0
  179. package/.agents/skills/pdf/scripts/check_fillable_fields.py +11 -0
  180. package/.agents/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
  181. package/.agents/skills/pdf/scripts/create_validation_image.py +37 -0
  182. package/.agents/skills/pdf/scripts/extract_form_field_info.py +122 -0
  183. package/.agents/skills/pdf/scripts/extract_form_structure.py +115 -0
  184. package/.agents/skills/pdf/scripts/fill_fillable_fields.py +98 -0
  185. package/.agents/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
  186. package/.agents/skills/playwright-cli/SKILL.md +344 -0
  187. package/.agents/skills/playwright-cli/references/element-attributes.md +23 -0
  188. package/.agents/skills/playwright-cli/references/playwright-tests.md +39 -0
  189. package/.agents/skills/playwright-cli/references/request-mocking.md +87 -0
  190. package/.agents/skills/playwright-cli/references/running-code.md +231 -0
  191. package/.agents/skills/playwright-cli/references/session-management.md +169 -0
  192. package/.agents/skills/playwright-cli/references/storage-state.md +275 -0
  193. package/.agents/skills/playwright-cli/references/test-generation.md +88 -0
  194. package/.agents/skills/playwright-cli/references/tracing.md +139 -0
  195. package/.agents/skills/playwright-cli/references/video-recording.md +143 -0
  196. package/.agents/skills/polish/SKILL.md +224 -0
  197. package/.agents/skills/pptx/LICENSE.txt +30 -0
  198. package/.agents/skills/pptx/SKILL.md +232 -0
  199. package/.agents/skills/pptx/editing.md +205 -0
  200. package/.agents/skills/pptx/pptxgenjs.md +420 -0
  201. package/.agents/skills/pptx/scripts/__init__.py +0 -0
  202. package/.agents/skills/pptx/scripts/add_slide.py +195 -0
  203. package/.agents/skills/pptx/scripts/clean.py +286 -0
  204. package/.agents/skills/pptx/scripts/office/helpers/__init__.py +0 -0
  205. package/.agents/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
  206. package/.agents/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
  207. package/.agents/skills/pptx/scripts/office/pack.py +159 -0
  208. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  209. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  210. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  211. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  212. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  213. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  214. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  215. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  216. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  217. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  218. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  219. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  220. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  221. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  222. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  223. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  224. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  225. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  226. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  227. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  228. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  229. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  230. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  231. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  232. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  233. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  234. package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  235. package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  236. package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  237. package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  238. package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  239. package/.agents/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
  240. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  241. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  242. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  243. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  244. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  245. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  246. package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  247. package/.agents/skills/pptx/scripts/office/soffice.py +183 -0
  248. package/.agents/skills/pptx/scripts/office/unpack.py +132 -0
  249. package/.agents/skills/pptx/scripts/office/validate.py +111 -0
  250. package/.agents/skills/pptx/scripts/office/validators/__init__.py +15 -0
  251. package/.agents/skills/pptx/scripts/office/validators/base.py +847 -0
  252. package/.agents/skills/pptx/scripts/office/validators/docx.py +446 -0
  253. package/.agents/skills/pptx/scripts/office/validators/pptx.py +275 -0
  254. package/.agents/skills/pptx/scripts/office/validators/redlining.py +247 -0
  255. package/.agents/skills/pptx/scripts/thumbnail.py +289 -0
  256. package/.agents/skills/project-development/SKILL.md +291 -0
  257. package/.agents/skills/project-development/references/case-studies.md +388 -0
  258. package/.agents/skills/project-development/references/pipeline-patterns.md +610 -0
  259. package/.agents/skills/project-development/scripts/pipeline_template.py +796 -0
  260. package/.agents/skills/prompt-engineer/SKILL.md +263 -0
  261. package/.agents/skills/prompt-engineer/references/advanced_patterns.md +271 -0
  262. package/.agents/skills/prompt-engineer/references/core_prompting.md +137 -0
  263. package/.agents/skills/prompt-engineer/references/quality_improvement.md +193 -0
  264. package/.agents/skills/quieter/SKILL.md +103 -0
  265. package/.agents/skills/research-codebase/SKILL.md +227 -0
  266. package/.agents/skills/shape/SKILL.md +96 -0
  267. package/.agents/skills/skill-creator/LICENSE.txt +202 -0
  268. package/.agents/skills/skill-creator/SKILL.md +485 -0
  269. package/.agents/skills/skill-creator/agents/analyzer.md +274 -0
  270. package/.agents/skills/skill-creator/agents/comparator.md +202 -0
  271. package/.agents/skills/skill-creator/agents/grader.md +223 -0
  272. package/.agents/skills/skill-creator/assets/eval_review.html +146 -0
  273. package/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  274. package/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  275. package/.agents/skills/skill-creator/references/schemas.md +430 -0
  276. package/.agents/skills/skill-creator/scripts/__init__.py +0 -0
  277. package/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  278. package/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
  279. package/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
  280. package/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
  281. package/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
  282. package/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
  283. package/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
  284. package/.agents/skills/skill-creator/scripts/utils.py +47 -0
  285. package/.agents/skills/sl-commit/SKILL.md +51 -0
  286. package/.agents/skills/sl-submit-diff/SKILL.md +55 -0
  287. package/.agents/skills/teach-impeccable/SKILL.md +71 -0
  288. package/.agents/skills/test-driven-development/SKILL.md +371 -0
  289. package/.agents/skills/test-driven-development/testing-anti-patterns.md +299 -0
  290. package/.agents/skills/tool-design/SKILL.md +271 -0
  291. package/.agents/skills/tool-design/references/architectural_reduction.md +210 -0
  292. package/.agents/skills/tool-design/references/best_practices.md +176 -0
  293. package/.agents/skills/tool-design/scripts/description_generator.py +528 -0
  294. package/.agents/skills/typescript-advanced-types/SKILL.md +719 -0
  295. package/.agents/skills/typescript-expert/SKILL.md +428 -0
  296. package/.agents/skills/typescript-expert/references/tsconfig-strict.json +92 -0
  297. package/.agents/skills/typescript-expert/references/typescript-cheatsheet.md +383 -0
  298. package/.agents/skills/typescript-expert/references/utility-types.ts +335 -0
  299. package/.agents/skills/typescript-expert/scripts/ts_diagnostic.py +203 -0
  300. package/.agents/skills/typescript-react-reviewer/SKILL.md +200 -0
  301. package/.agents/skills/typescript-react-reviewer/references/antipatterns.md +510 -0
  302. package/.agents/skills/typescript-react-reviewer/references/checklist.md +267 -0
  303. package/.agents/skills/typescript-react-reviewer/references/react19-patterns.md +305 -0
  304. package/.agents/skills/typeset/SKILL.md +116 -0
  305. package/.agents/skills/workflow-creator/SKILL.md +337 -0
  306. package/.agents/skills/workflow-creator/references/agent-sessions.md +789 -0
  307. package/.agents/skills/workflow-creator/references/computation-and-validation.md +224 -0
  308. package/.agents/skills/workflow-creator/references/control-flow.md +450 -0
  309. package/.agents/skills/workflow-creator/references/discovery-and-verification.md +156 -0
  310. package/.agents/skills/workflow-creator/references/failure-modes.md +732 -0
  311. package/.agents/skills/workflow-creator/references/getting-started.md +289 -0
  312. package/.agents/skills/workflow-creator/references/session-config.md +355 -0
  313. package/.agents/skills/workflow-creator/references/state-and-data-flow.md +374 -0
  314. package/.agents/skills/workflow-creator/references/user-input.md +206 -0
  315. package/.agents/skills/workflow-creator/references/workflow-inputs.md +274 -0
  316. package/.agents/skills/xlsx/LICENSE.txt +30 -0
  317. package/.agents/skills/xlsx/SKILL.md +292 -0
  318. package/.agents/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  319. package/.agents/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
  320. package/.agents/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
  321. package/.agents/skills/xlsx/scripts/office/pack.py +159 -0
  322. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  323. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  324. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  325. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  326. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  327. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  328. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  329. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  330. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  331. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  332. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  333. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  334. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  335. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  336. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  337. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  338. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  339. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  340. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  341. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  342. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  343. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  344. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  345. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  346. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  347. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  348. package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  349. package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  350. package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  351. package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  352. package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  353. package/.agents/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
  354. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  355. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  356. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  357. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  358. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  359. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  360. package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  361. package/.agents/skills/xlsx/scripts/office/soffice.py +183 -0
  362. package/.agents/skills/xlsx/scripts/office/unpack.py +132 -0
  363. package/.agents/skills/xlsx/scripts/office/validate.py +111 -0
  364. package/.agents/skills/xlsx/scripts/office/validators/__init__.py +15 -0
  365. package/.agents/skills/xlsx/scripts/office/validators/base.py +847 -0
  366. package/.agents/skills/xlsx/scripts/office/validators/docx.py +446 -0
  367. package/.agents/skills/xlsx/scripts/office/validators/pptx.py +275 -0
  368. package/.agents/skills/xlsx/scripts/office/validators/redlining.py +247 -0
  369. package/.agents/skills/xlsx/scripts/recalc.py +184 -0
  370. package/.claude/agents/reviewer.md +1 -0
  371. package/.github/agents/reviewer.md +1 -0
  372. package/.opencode/agents/reviewer.md +1 -0
  373. package/README.md +274 -169
  374. package/package.json +6 -7
  375. package/src/commands/cli/init/index.ts +2 -2
  376. package/src/commands/cli/init/scm.ts +7 -8
  377. package/src/commands/cli/workflow-command.test.ts +74 -0
  378. package/src/commands/cli/workflow.ts +7 -2
  379. package/src/scripts/bundle-configs.ts +128 -0
  380. package/src/sdk/components/compact-switcher.tsx +1 -1
  381. package/src/sdk/components/orchestrator-panel-store.ts +13 -0
  382. package/src/sdk/components/orchestrator-panel.tsx +10 -0
  383. package/src/sdk/components/statusline.tsx +13 -1
  384. package/src/sdk/components/workflow-picker-panel.tsx +407 -296
  385. package/src/sdk/providers/claude.ts +50 -0
  386. package/src/sdk/runtime/executor.ts +111 -32
  387. package/src/sdk/types.ts +7 -0
  388. package/src/sdk/workflows/builtin/ralph/claude/index.ts +132 -76
  389. package/src/sdk/workflows/builtin/ralph/copilot/index.ts +129 -71
  390. package/src/sdk/workflows/builtin/ralph/helpers/git.ts +184 -17
  391. package/src/sdk/workflows/builtin/ralph/helpers/prompts.ts +463 -79
  392. package/src/sdk/workflows/builtin/ralph/opencode/index.ts +124 -80
  393. package/src/services/system/auto-sync.ts +31 -51
  394. package/src/services/system/skills.ts +56 -60
  395. package/dist/lib/path-root-guard.d.ts +0 -4
  396. package/dist/lib/path-root-guard.d.ts.map +0 -1
  397. package/dist/sdk/components/color-utils.d.ts +0 -4
  398. package/dist/sdk/components/color-utils.d.ts.map +0 -1
  399. package/dist/sdk/components/compact-switcher.d.ts +0 -10
  400. package/dist/sdk/components/compact-switcher.d.ts.map +0 -1
  401. package/dist/sdk/components/connectors.d.ts +0 -15
  402. package/dist/sdk/components/connectors.d.ts.map +0 -1
  403. package/dist/sdk/components/connectors.test.d.ts +0 -2
  404. package/dist/sdk/components/connectors.test.d.ts.map +0 -1
  405. package/dist/sdk/components/edge.d.ts +0 -4
  406. package/dist/sdk/components/edge.d.ts.map +0 -1
  407. package/dist/sdk/components/error-boundary.d.ts +0 -23
  408. package/dist/sdk/components/error-boundary.d.ts.map +0 -1
  409. package/dist/sdk/components/graph-theme.d.ts +0 -17
  410. package/dist/sdk/components/graph-theme.d.ts.map +0 -1
  411. package/dist/sdk/components/header.d.ts +0 -3
  412. package/dist/sdk/components/header.d.ts.map +0 -1
  413. package/dist/sdk/components/hooks.d.ts +0 -15
  414. package/dist/sdk/components/hooks.d.ts.map +0 -1
  415. package/dist/sdk/components/layout.d.ts +0 -27
  416. package/dist/sdk/components/layout.d.ts.map +0 -1
  417. package/dist/sdk/components/layout.test.d.ts +0 -2
  418. package/dist/sdk/components/layout.test.d.ts.map +0 -1
  419. package/dist/sdk/components/node-card.d.ts +0 -10
  420. package/dist/sdk/components/node-card.d.ts.map +0 -1
  421. package/dist/sdk/components/orchestrator-panel-contexts.d.ts +0 -16
  422. package/dist/sdk/components/orchestrator-panel-contexts.d.ts.map +0 -1
  423. package/dist/sdk/components/orchestrator-panel-store.d.ts +0 -46
  424. package/dist/sdk/components/orchestrator-panel-store.d.ts.map +0 -1
  425. package/dist/sdk/components/orchestrator-panel-store.test.d.ts +0 -2
  426. package/dist/sdk/components/orchestrator-panel-store.test.d.ts.map +0 -1
  427. package/dist/sdk/components/orchestrator-panel-types.d.ts +0 -18
  428. package/dist/sdk/components/orchestrator-panel-types.d.ts.map +0 -1
  429. package/dist/sdk/components/orchestrator-panel.d.ts +0 -52
  430. package/dist/sdk/components/orchestrator-panel.d.ts.map +0 -1
  431. package/dist/sdk/components/session-graph-panel.d.ts +0 -7
  432. package/dist/sdk/components/session-graph-panel.d.ts.map +0 -1
  433. package/dist/sdk/components/status-helpers.d.ts +0 -6
  434. package/dist/sdk/components/status-helpers.d.ts.map +0 -1
  435. package/dist/sdk/components/statusline.d.ts +0 -7
  436. package/dist/sdk/components/statusline.d.ts.map +0 -1
  437. package/dist/sdk/components/workflow-picker-panel.d.ts +0 -123
  438. package/dist/sdk/components/workflow-picker-panel.d.ts.map +0 -1
  439. package/dist/sdk/define-workflow.d.ts +0 -78
  440. package/dist/sdk/define-workflow.d.ts.map +0 -1
  441. package/dist/sdk/define-workflow.test.d.ts +0 -2
  442. package/dist/sdk/define-workflow.test.d.ts.map +0 -1
  443. package/dist/sdk/errors.d.ts +0 -24
  444. package/dist/sdk/errors.d.ts.map +0 -1
  445. package/dist/sdk/errors.test.d.ts +0 -2
  446. package/dist/sdk/errors.test.d.ts.map +0 -1
  447. package/dist/sdk/index.d.ts +0 -13
  448. package/dist/sdk/index.d.ts.map +0 -1
  449. package/dist/sdk/providers/claude.d.ts +0 -170
  450. package/dist/sdk/providers/claude.d.ts.map +0 -1
  451. package/dist/sdk/providers/copilot.d.ts +0 -11
  452. package/dist/sdk/providers/copilot.d.ts.map +0 -1
  453. package/dist/sdk/providers/opencode.d.ts +0 -11
  454. package/dist/sdk/providers/opencode.d.ts.map +0 -1
  455. package/dist/sdk/runtime/discovery.d.ts +0 -86
  456. package/dist/sdk/runtime/discovery.d.ts.map +0 -1
  457. package/dist/sdk/runtime/executor-entry.d.ts +0 -11
  458. package/dist/sdk/runtime/executor-entry.d.ts.map +0 -1
  459. package/dist/sdk/runtime/executor.d.ts +0 -72
  460. package/dist/sdk/runtime/executor.d.ts.map +0 -1
  461. package/dist/sdk/runtime/executor.test.d.ts +0 -2
  462. package/dist/sdk/runtime/executor.test.d.ts.map +0 -1
  463. package/dist/sdk/runtime/graph-inference.d.ts +0 -35
  464. package/dist/sdk/runtime/graph-inference.d.ts.map +0 -1
  465. package/dist/sdk/runtime/loader.d.ts +0 -70
  466. package/dist/sdk/runtime/loader.d.ts.map +0 -1
  467. package/dist/sdk/runtime/panel.d.ts +0 -9
  468. package/dist/sdk/runtime/panel.d.ts.map +0 -1
  469. package/dist/sdk/runtime/theme.d.ts +0 -28
  470. package/dist/sdk/runtime/theme.d.ts.map +0 -1
  471. package/dist/sdk/runtime/tmux.d.ts +0 -297
  472. package/dist/sdk/runtime/tmux.d.ts.map +0 -1
  473. package/dist/sdk/types.d.ts +0 -295
  474. package/dist/sdk/types.d.ts.map +0 -1
  475. package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts +0 -62
  476. package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts.map +0 -1
  477. package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts +0 -46
  478. package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts.map +0 -1
  479. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts +0 -26
  480. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts.map +0 -1
  481. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts +0 -92
  482. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts.map +0 -1
  483. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts +0 -57
  484. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts.map +0 -1
  485. package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts +0 -49
  486. package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts.map +0 -1
  487. package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts +0 -14
  488. package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts.map +0 -1
  489. package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts +0 -14
  490. package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts.map +0 -1
  491. package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts +0 -17
  492. package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts.map +0 -1
  493. package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts +0 -119
  494. package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts.map +0 -1
  495. package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts +0 -20
  496. package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts.map +0 -1
  497. package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts +0 -14
  498. package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts.map +0 -1
  499. package/dist/sdk/workflows/index.d.ts +0 -24
  500. package/dist/sdk/workflows/index.d.ts.map +0 -1
  501. package/dist/services/config/definitions.d.ts +0 -85
  502. package/dist/services/config/definitions.d.ts.map +0 -1
  503. package/dist/services/system/copy.d.ts +0 -77
  504. package/dist/services/system/copy.d.ts.map +0 -1
  505. package/dist/services/system/detect.d.ts +0 -75
  506. package/dist/services/system/detect.d.ts.map +0 -1
  507. package/tsconfig.json +0 -33
@@ -0,0 +1,616 @@
1
+ """Memory System Implementation.
2
+
3
+ Provides composable building blocks for agent memory: vector stores with
4
+ metadata indexing, property graphs for entity relationships, and temporal
5
+ knowledge graphs for facts that change over time.
6
+
7
+ Use when:
8
+ - Building a memory persistence layer for an agent that must retain
9
+ knowledge across sessions.
10
+ - Prototyping memory architectures before committing to a production
11
+ framework (Mem0, Zep/Graphiti, Letta, Cognee).
12
+ - Combining semantic search with graph-based entity retrieval in a
13
+ single integrated system.
14
+
15
+ Typical usage::
16
+
17
+ from memory_store import IntegratedMemorySystem
18
+ mem = IntegratedMemorySystem()
19
+ mem.start_session("session-001")
20
+ mem.store_fact("Alice prefers dark mode", entity="Alice")
21
+ results = mem.retrieve_memories("theme preference")
22
+ """
23
+
24
+ import hashlib
25
+ import json
26
+ from datetime import datetime
27
+ from typing import Any, Dict, List, Optional
28
+
29
+ import numpy as np
30
+
31
+ __all__ = [
32
+ "VectorStore",
33
+ "PropertyGraph",
34
+ "TemporalKnowledgeGraph",
35
+ "IntegratedMemorySystem",
36
+ ]
37
+
38
+
39
+ class VectorStore:
40
+ """Simple vector store with metadata indexing.
41
+
42
+ Use when: the agent needs semantic similarity search over stored facts
43
+ with optional entity and temporal filtering.
44
+ """
45
+
46
+ def __init__(self, dimension: int = 768) -> None:
47
+ self.dimension: int = dimension
48
+ self.vectors: List[np.ndarray] = []
49
+ self.metadata: List[Dict[str, Any]] = []
50
+ self.entity_index: Dict[str, List[int]] = {}
51
+ self.time_index: Dict[str, List[int]] = {}
52
+
53
+ def add(self, text: str, metadata: Optional[Dict[str, Any]] = None) -> int:
54
+ """Add document to store.
55
+
56
+ Use when: persisting a new fact or observation that the agent should
57
+ be able to retrieve later via semantic search.
58
+ """
59
+ metadata = metadata or {}
60
+ embedding: np.ndarray = self._embed(text)
61
+ index: int = len(self.vectors)
62
+
63
+ self.vectors.append(embedding)
64
+ self.metadata.append(metadata)
65
+
66
+ # Index by entity
67
+ if "entity" in metadata:
68
+ entity: str = metadata["entity"]
69
+ if entity not in self.entity_index:
70
+ self.entity_index[entity] = []
71
+ self.entity_index[entity].append(index)
72
+
73
+ # Index by time
74
+ if "valid_from" in metadata:
75
+ time_key: str = self._time_key(metadata["valid_from"])
76
+ if time_key not in self.time_index:
77
+ self.time_index[time_key] = []
78
+ self.time_index[time_key].append(index)
79
+
80
+ return index
81
+
82
+ def search(
83
+ self,
84
+ query: str,
85
+ limit: int = 5,
86
+ filters: Optional[Dict[str, Any]] = None,
87
+ ) -> List[Dict[str, Any]]:
88
+ """Search for similar documents.
89
+
90
+ Use when: retrieving memories relevant to a query, optionally
91
+ narrowed by metadata filters (entity, session, time range).
92
+ """
93
+ query_embedding: np.ndarray = self._embed(query)
94
+
95
+ scores: List[tuple[int, float]] = []
96
+ for i, vec in enumerate(self.vectors):
97
+ score: float = float(
98
+ np.dot(query_embedding, vec)
99
+ / (np.linalg.norm(query_embedding) * np.linalg.norm(vec) + 1e-8)
100
+ )
101
+
102
+ # Apply filters
103
+ if filters and not self._matches_filters(self.metadata[i], filters):
104
+ score = -1.0
105
+
106
+ scores.append((i, score))
107
+
108
+ scores.sort(key=lambda x: x[1], reverse=True)
109
+
110
+ results: List[Dict[str, Any]] = []
111
+ for idx, score in scores[:limit]:
112
+ if score > 0:
113
+ results.append(
114
+ {
115
+ "index": idx,
116
+ "score": score,
117
+ "text": self.metadata[idx].get("text", ""),
118
+ "metadata": self.metadata[idx],
119
+ }
120
+ )
121
+
122
+ return results
123
+
124
+ def search_by_entity(
125
+ self, entity: str, query: str = "", limit: int = 5
126
+ ) -> List[Dict[str, Any]]:
127
+ """Search within specific entity.
128
+
129
+ Use when: the agent needs all memories associated with a known
130
+ entity, optionally ranked by relevance to a query.
131
+ """
132
+ indices: List[int] = self.entity_index.get(entity, [])
133
+
134
+ if not indices:
135
+ return []
136
+
137
+ if query:
138
+ query_embedding: np.ndarray = self._embed(query)
139
+ scored: List[tuple[int, float, Dict[str, Any]]] = []
140
+ for i in indices:
141
+ vec: np.ndarray = self.vectors[i]
142
+ score: float = float(
143
+ np.dot(query_embedding, vec)
144
+ / (np.linalg.norm(query_embedding) * np.linalg.norm(vec) + 1e-8)
145
+ )
146
+ scored.append((i, score, self.metadata[i]))
147
+
148
+ scored.sort(key=lambda x: x[1], reverse=True)
149
+ return [
150
+ {"index": i, "score": s, "metadata": m}
151
+ for i, s, m in scored[:limit]
152
+ ]
153
+ else:
154
+ return [
155
+ {"index": i, "score": 1.0, "metadata": self.metadata[i]}
156
+ for i in indices[:limit]
157
+ ]
158
+
159
+ def _embed(self, text: str) -> np.ndarray:
160
+ """Generate embedding for text.
161
+
162
+ In production, replace with an actual embedding model. This
163
+ deterministic stub uses the text hash as a random seed so that
164
+ identical texts always produce identical vectors. Uses a local
165
+ RNG to avoid corrupting global numpy random state.
166
+ """
167
+ rng = np.random.default_rng(hash(text) % (2**32))
168
+ return rng.standard_normal(self.dimension)
169
+
170
+ def _time_key(self, timestamp: Any) -> str:
171
+ """Create time key for indexing."""
172
+ if isinstance(timestamp, datetime):
173
+ return timestamp.strftime("%Y-%m")
174
+ return str(timestamp)
175
+
176
+ def _matches_filters(self, metadata: Dict[str, Any], filters: Dict[str, Any]) -> bool:
177
+ """Check if metadata matches filters."""
178
+ for key, value in filters.items():
179
+ if key not in metadata:
180
+ return False
181
+ if isinstance(value, list):
182
+ if metadata[key] not in value:
183
+ return False
184
+ elif metadata[key] != value:
185
+ return False
186
+ return True
187
+
188
+
189
+ class PropertyGraph:
190
+ """Simple property graph storage.
191
+
192
+ Use when: the agent needs to maintain entity relationships and
193
+ traverse connections between nodes (e.g., "find all projects
194
+ associated with this user").
195
+ """
196
+
197
+ def __init__(self) -> None:
198
+ self.nodes: Dict[str, Dict[str, Any]] = {}
199
+ self.edges: Dict[str, Dict[str, Any]] = {}
200
+ self.entity_registry: Dict[str, str] = {} # name -> node_id
201
+ self.node_index: Dict[str, List[str]] = {} # label -> node_ids
202
+ self.edge_index: Dict[str, List[str]] = {} # type -> edge_ids
203
+
204
+ def get_or_create_node(
205
+ self, name: str, label: str = "Entity", properties: Optional[Dict[str, Any]] = None
206
+ ) -> str:
207
+ """Get existing node by name, or create a new one.
208
+
209
+ Use when: storing an entity that may already exist. The entity
210
+ registry ensures identity is maintained across interactions
211
+ ("John Doe" always maps to the same node).
212
+ """
213
+ if name in self.entity_registry:
214
+ node_id: str = self.entity_registry[name]
215
+ if properties:
216
+ self.nodes[node_id]["properties"].update(properties)
217
+ return node_id
218
+ node_id = self.create_node(label, {**(properties or {}), "name": name})
219
+ self.entity_registry[name] = node_id
220
+ return node_id
221
+
222
+ def create_node(self, label: str, properties: Optional[Dict[str, Any]] = None) -> str:
223
+ """Create node with label and properties.
224
+
225
+ Use when: adding a new entity to the graph that does not need
226
+ identity deduplication (prefer get_or_create_node otherwise).
227
+ """
228
+ node_id: str = hashlib.md5(f"{label}{datetime.now().isoformat()}".encode()).hexdigest()[:16]
229
+
230
+ self.nodes[node_id] = {
231
+ "id": node_id,
232
+ "label": label,
233
+ "properties": properties or {},
234
+ "created_at": datetime.now().isoformat(),
235
+ }
236
+
237
+ if label not in self.node_index:
238
+ self.node_index[label] = []
239
+ self.node_index[label].append(node_id)
240
+
241
+ return node_id
242
+
243
+ def create_relationship(
244
+ self,
245
+ source_id: str,
246
+ rel_type: str,
247
+ target_id: str,
248
+ properties: Optional[Dict[str, Any]] = None,
249
+ ) -> str:
250
+ """Create directed relationship between nodes.
251
+
252
+ Use when: recording a connection between two entities (e.g.,
253
+ WORKS_AT, LIVES_IN, DEPENDS_ON).
254
+ """
255
+ if source_id not in self.nodes:
256
+ raise ValueError(f"Unknown source node: {source_id}")
257
+ if target_id not in self.nodes:
258
+ raise ValueError(f"Unknown target node: {target_id}")
259
+
260
+ edge_id: str = hashlib.md5(
261
+ f"{source_id}{rel_type}{target_id}{datetime.now().isoformat()}".encode()
262
+ ).hexdigest()[:16]
263
+
264
+ self.edges[edge_id] = {
265
+ "id": edge_id,
266
+ "source": source_id,
267
+ "target": target_id,
268
+ "type": rel_type,
269
+ "properties": properties or {},
270
+ "created_at": datetime.now().isoformat(),
271
+ }
272
+
273
+ if rel_type not in self.edge_index:
274
+ self.edge_index[rel_type] = []
275
+ self.edge_index[rel_type].append(edge_id)
276
+
277
+ return edge_id
278
+
279
+ def query(self, pattern: Dict[str, Any]) -> List[Dict[str, Any]]:
280
+ """Query graph with simple pattern matching.
281
+
282
+ Use when: finding relationships that match a structural pattern
283
+ (e.g., all WORKS_AT edges from Person nodes).
284
+ """
285
+ results: List[Dict[str, Any]] = []
286
+
287
+ # Match by edge type
288
+ if "type" in pattern:
289
+ edge_ids: List[str] = self.edge_index.get(pattern["type"], [])
290
+ for eid in edge_ids:
291
+ edge: Dict[str, Any] = self.edges[eid]
292
+ source: Dict[str, Any] = self.nodes.get(edge["source"], {})
293
+ target: Dict[str, Any] = self.nodes.get(edge["target"], {})
294
+
295
+ # Match source label
296
+ if "source_label" in pattern:
297
+ if source.get("label") != pattern["source_label"]:
298
+ continue
299
+
300
+ # Match target label
301
+ if "target_label" in pattern:
302
+ if target.get("label") != pattern["target_label"]:
303
+ continue
304
+
305
+ results.append({"source": source, "edge": edge, "target": target})
306
+
307
+ return results
308
+
309
+ def get_node(self, node_id: str) -> Optional[Dict[str, Any]]:
310
+ """Get node by ID."""
311
+ return self.nodes.get(node_id)
312
+
313
+ def get_relationships(
314
+ self, node_id: str, direction: str = "both"
315
+ ) -> List[Dict[str, Any]]:
316
+ """Get relationships for a node.
317
+
318
+ Use when: retrieving all connections for a given entity to build
319
+ a complete entity context.
320
+ """
321
+ relationships: List[Dict[str, Any]] = []
322
+
323
+ for edge in self.edges.values():
324
+ if direction in ["outgoing", "both"] and edge["source"] == node_id:
325
+ relationships.append(
326
+ {
327
+ "edge": edge,
328
+ "target": self.nodes.get(edge["target"]),
329
+ "direction": "outgoing",
330
+ }
331
+ )
332
+ if direction in ["incoming", "both"] and edge["target"] == node_id:
333
+ relationships.append(
334
+ {
335
+ "edge": edge,
336
+ "source": self.nodes.get(edge["source"]),
337
+ "direction": "incoming",
338
+ }
339
+ )
340
+
341
+ return relationships
342
+
343
+
344
+ class TemporalKnowledgeGraph(PropertyGraph):
345
+ """Property graph with temporal validity for facts.
346
+
347
+ Use when: the agent must track facts that change over time and
348
+ answer time-scoped queries (e.g., "where did the user live in
349
+ March 2024?").
350
+ """
351
+
352
+ def create_temporal_relationship(
353
+ self,
354
+ source_id: str,
355
+ rel_type: str,
356
+ target_id: str,
357
+ valid_from: datetime,
358
+ valid_until: Optional[datetime] = None,
359
+ properties: Optional[Dict[str, Any]] = None,
360
+ ) -> str:
361
+ """Create relationship with temporal validity.
362
+
363
+ Use when: recording a fact that has a known start time and
364
+ may expire (e.g., employment, address, subscription status).
365
+ """
366
+ edge_id: str = super().create_relationship(
367
+ source_id, rel_type, target_id, properties
368
+ )
369
+
370
+ # Add temporal properties
371
+ self.edges[edge_id]["valid_from"] = valid_from.isoformat()
372
+ self.edges[edge_id]["valid_until"] = (
373
+ valid_until.isoformat() if valid_until else None
374
+ )
375
+
376
+ return edge_id
377
+
378
+ def query_at_time(
379
+ self, query: Dict[str, Any], query_time: datetime
380
+ ) -> List[Dict[str, Any]]:
381
+ """Query graph state at specific time.
382
+
383
+ Use when: answering point-in-time questions about entities
384
+ (e.g., "what was true on date X?").
385
+ """
386
+ results: List[Dict[str, Any]] = []
387
+
388
+ # Get base query results
389
+ base_results: List[Dict[str, Any]] = self.query(query)
390
+
391
+ for result in base_results:
392
+ edge: Dict[str, Any] = result["edge"]
393
+ valid_from: datetime = datetime.fromisoformat(
394
+ edge.get("valid_from", "1970-01-01")
395
+ )
396
+ valid_until: Optional[str] = edge.get("valid_until")
397
+
398
+ # Check temporal validity
399
+ if valid_from <= query_time:
400
+ if valid_until is None or datetime.fromisoformat(valid_until) > query_time:
401
+ results.append(
402
+ {
403
+ **result,
404
+ "valid_from": valid_from,
405
+ "valid_until": valid_until,
406
+ }
407
+ )
408
+
409
+ return results
410
+
411
+ def query_time_range(
412
+ self,
413
+ query: Dict[str, Any],
414
+ start_time: datetime,
415
+ end_time: datetime,
416
+ ) -> List[Dict[str, Any]]:
417
+ """Query facts valid during time range.
418
+
419
+ Use when: retrieving all facts that overlap with a given time
420
+ window (e.g., "what changed between January and June?").
421
+ """
422
+ results: List[Dict[str, Any]] = []
423
+
424
+ base_results: List[Dict[str, Any]] = self.query(query)
425
+
426
+ for result in base_results:
427
+ edge: Dict[str, Any] = result["edge"]
428
+ valid_from: datetime = datetime.fromisoformat(
429
+ edge.get("valid_from", "1970-01-01")
430
+ )
431
+ valid_until: Optional[str] = edge.get("valid_until")
432
+
433
+ # Check if overlaps with query range
434
+ until_dt: datetime = (
435
+ datetime.fromisoformat(valid_until) if valid_until else datetime.max
436
+ )
437
+
438
+ if until_dt >= start_time and valid_from <= end_time:
439
+ results.append(
440
+ {
441
+ **result,
442
+ "valid_from": valid_from,
443
+ "valid_until": valid_until,
444
+ }
445
+ )
446
+
447
+ return results
448
+
449
+
450
+ # ---------------------------------------------------------------------------
451
+ # Memory System Integration
452
+ # ---------------------------------------------------------------------------
453
+
454
+
455
+ class IntegratedMemorySystem:
456
+ """Integrated memory system combining vector store and graph.
457
+
458
+ Use when: the agent needs both semantic search over facts and
459
+ graph-based entity relationship traversal in a single unified
460
+ interface. This class composes VectorStore and TemporalKnowledgeGraph,
461
+ enriching vector search results with graph context.
462
+ """
463
+
464
+ def __init__(self) -> None:
465
+ self.vector_store: VectorStore = VectorStore()
466
+ self.graph: TemporalKnowledgeGraph = TemporalKnowledgeGraph()
467
+ self.session_id: str = ""
468
+
469
+ def start_session(self, session_id: str) -> None:
470
+ """Start a new memory session.
471
+
472
+ Use when: beginning a new conversation or task that should
473
+ scope its memories to a distinct session identifier.
474
+ """
475
+ self.session_id = session_id
476
+
477
+ def store_fact(
478
+ self,
479
+ fact: str,
480
+ entity: str,
481
+ timestamp: Optional[datetime] = None,
482
+ relationships: Optional[List[Dict[str, Any]]] = None,
483
+ ) -> None:
484
+ """Store a fact with entity and relationships.
485
+
486
+ Use when: the agent observes a new piece of information that
487
+ should be persisted for future retrieval. Stores in both the
488
+ vector store (for semantic search) and the graph (for entity
489
+ traversal).
490
+ """
491
+ # Store in vector store
492
+ self.vector_store.add(
493
+ fact,
494
+ {
495
+ "text": fact,
496
+ "entity": entity,
497
+ "valid_from": (timestamp or datetime.now()).isoformat(),
498
+ "session_id": self.session_id,
499
+ },
500
+ )
501
+
502
+ # Get or create entity node (uses registry for identity)
503
+ entity_node_id: str = self.graph.get_or_create_node(entity)
504
+
505
+ # Create relationships
506
+ if relationships:
507
+ for rel in relationships:
508
+ target_node_id: str = self.graph.get_or_create_node(rel["target"])
509
+ self.graph.create_relationship(
510
+ entity_node_id,
511
+ rel["type"],
512
+ target_node_id,
513
+ properties=rel.get("properties", {}),
514
+ )
515
+
516
+ def retrieve_memories(
517
+ self,
518
+ query: str,
519
+ entity_filter: Optional[str] = None,
520
+ time_filter: Optional[Dict[str, Any]] = None,
521
+ limit: int = 5,
522
+ ) -> List[Dict[str, Any]]:
523
+ """Retrieve memories matching query.
524
+
525
+ Use when: the agent needs to recall previously stored facts,
526
+ optionally filtered by entity or time. Results are enriched
527
+ with graph relationships for each matched entity.
528
+ """
529
+ # Vector search
530
+ filters: Dict[str, Any] = {"session_id": self.session_id}
531
+ if entity_filter:
532
+ filters["entity"] = entity_filter
533
+
534
+ results: List[Dict[str, Any]] = self.vector_store.search(
535
+ query, limit=limit, filters=filters
536
+ )
537
+
538
+ # Enrich with graph relationships
539
+ for result in results:
540
+ entity: Optional[str] = result["metadata"].get("entity")
541
+ if entity:
542
+ node_id: Optional[str] = self.graph.entity_registry.get(entity)
543
+ if node_id:
544
+ result["relationships"] = self.graph.get_relationships(node_id)
545
+
546
+ return results
547
+
548
+ def retrieve_entity_context(self, entity: str) -> Dict[str, Any]:
549
+ """Retrieve complete context for an entity.
550
+
551
+ Use when: the agent needs a full picture of a single entity
552
+ including its properties, all relationships, and associated
553
+ vector memories.
554
+ """
555
+ node_id: Optional[str] = self.graph.entity_registry.get(entity)
556
+
557
+ # Get entity node
558
+ entity_node: Optional[Dict[str, Any]] = (
559
+ self.graph.get_node(node_id) if node_id else None
560
+ )
561
+
562
+ # Get relationships
563
+ relationships: List[Dict[str, Any]] = (
564
+ self.graph.get_relationships(node_id) if node_id else []
565
+ )
566
+
567
+ # Get vector memories
568
+ memories: List[Dict[str, Any]] = self.vector_store.search_by_entity(
569
+ entity, limit=10
570
+ )
571
+
572
+ return {
573
+ "entity": entity_node,
574
+ "relationships": relationships,
575
+ "memories": memories,
576
+ }
577
+
578
+ def consolidate(self) -> None:
579
+ """Consolidate memories and remove outdated information.
580
+
581
+ Use when: memory count exceeds a threshold, retrieval quality
582
+ degrades, or on a scheduled interval. In production, implement:
583
+ - Merge related facts into summaries
584
+ - Update validity periods on stale entries
585
+ - Archive obsolete facts (invalidate, do not discard)
586
+ """
587
+ pass
588
+
589
+
590
+ if __name__ == "__main__":
591
+ # Quick smoke test demonstrating the integrated memory system.
592
+ mem = IntegratedMemorySystem()
593
+ mem.start_session("demo-session")
594
+
595
+ # Store facts with entity relationships
596
+ mem.store_fact(
597
+ "Alice prefers dark mode",
598
+ entity="Alice",
599
+ relationships=[{"target": "dark mode", "type": "PREFERS"}],
600
+ )
601
+ mem.store_fact(
602
+ "Alice works at Acme Corp",
603
+ entity="Alice",
604
+ relationships=[{"target": "Acme Corp", "type": "WORKS_AT"}],
605
+ )
606
+
607
+ # Semantic retrieval
608
+ results = mem.retrieve_memories("theme preference")
609
+ print(f"Search results: {len(results)} memories found")
610
+ for r in results:
611
+ print(f" score={r['score']:.3f} text={r['text']}")
612
+
613
+ # Entity context
614
+ context = mem.retrieve_entity_context("Alice")
615
+ print(f"\nAlice context: {len(context['relationships'])} relationships, "
616
+ f"{len(context['memories'])} memories")