symfonic-core 4.9.0__tar.gz

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 (481) hide show
  1. symfonic_core-4.9.0/.claude/settings.local.json +124 -0
  2. symfonic_core-4.9.0/.env.example +8 -0
  3. symfonic_core-4.9.0/.gitignore +36 -0
  4. symfonic_core-4.9.0/CHANGELOG.md +73 -0
  5. symfonic_core-4.9.0/CLAUDE.md +159 -0
  6. symfonic_core-4.9.0/PKG-INFO +289 -0
  7. symfonic_core-4.9.0/README.md +213 -0
  8. symfonic_core-4.9.0/docker-compose.yml +79 -0
  9. symfonic_core-4.9.0/docs/concepts/agent.md +307 -0
  10. symfonic_core-4.9.0/docs/concepts/api-reference.md +524 -0
  11. symfonic_core-4.9.0/docs/concepts/architecture.md +212 -0
  12. symfonic_core-4.9.0/docs/concepts/capabilities.md +102 -0
  13. symfonic_core-4.9.0/docs/concepts/examples.md +342 -0
  14. symfonic_core-4.9.0/docs/concepts/integration.md +380 -0
  15. symfonic_core-4.9.0/docs/concepts/memory.md +267 -0
  16. symfonic_core-4.9.0/docs/ideas/santo-grial.md +20 -0
  17. symfonic_core-4.9.0/examples/advanced/README.md +29 -0
  18. symfonic_core-4.9.0/examples/agent/basic_agent.py +43 -0
  19. symfonic_core-4.9.0/examples/agent/fastapi_app.py +54 -0
  20. symfonic_core-4.9.0/examples/agent_with_memory/__main__.py +99 -0
  21. symfonic_core-4.9.0/examples/callback_logging/__main__.py +66 -0
  22. symfonic_core-4.9.0/examples/demo_app/__init__.py +1 -0
  23. symfonic_core-4.9.0/examples/demo_app/__main__.py +207 -0
  24. symfonic_core-4.9.0/examples/demo_app/capabilities/__init__.py +0 -0
  25. symfonic_core-4.9.0/examples/demo_app/capabilities/demo_fetch.py +29 -0
  26. symfonic_core-4.9.0/examples/demo_app/capabilities/demo_search.py +45 -0
  27. symfonic_core-4.9.0/examples/demo_app/deps.py +18 -0
  28. symfonic_core-4.9.0/examples/demo_app/e2e_demo.py +82 -0
  29. symfonic_core-4.9.0/examples/demo_app/fixtures/fetch/example.html +1 -0
  30. symfonic_core-4.9.0/examples/demo_app/fixtures/search/results.json +5 -0
  31. symfonic_core-4.9.0/examples/demo_app/real_demo.py +127 -0
  32. symfonic_core-4.9.0/examples/demo_app/sections/__init__.py +0 -0
  33. symfonic_core-4.9.0/examples/demo_app/sections/agent_instructions.py +25 -0
  34. symfonic_core-4.9.0/examples/demo_app/sections/context_loader.py +29 -0
  35. symfonic_core-4.9.0/examples/demo_app/sections/memory_section.py +21 -0
  36. symfonic_core-4.9.0/examples/demo_app/sections/skills_section.py +22 -0
  37. symfonic_core-4.9.0/examples/demo_app/state.py +23 -0
  38. symfonic_core-4.9.0/examples/demo_app/utils/__init__.py +0 -0
  39. symfonic_core-4.9.0/examples/demo_app/utils/fixtures.py +9 -0
  40. symfonic_core-4.9.0/examples/demo_app/utils/stdout_hook.py +45 -0
  41. symfonic_core-4.9.0/examples/e2e_basic_agent/__main__.py +161 -0
  42. symfonic_core-4.9.0/examples/full_demo/Dockerfile.worker +16 -0
  43. symfonic_core-4.9.0/examples/full_demo/README.md +309 -0
  44. symfonic_core-4.9.0/examples/full_demo/__init__.py +1 -0
  45. symfonic_core-4.9.0/examples/full_demo/__main__.py +5 -0
  46. symfonic_core-4.9.0/examples/full_demo/domain_config.py +281 -0
  47. symfonic_core-4.9.0/examples/full_demo/exports/.gitignore +2 -0
  48. symfonic_core-4.9.0/examples/full_demo/exports/ads_chart_03938efc.png +0 -0
  49. symfonic_core-4.9.0/examples/full_demo/exports/daily_trend_a61de88c.png +0 -0
  50. symfonic_core-4.9.0/examples/full_demo/exports/daily_trend_a7c3cbbb.png +0 -0
  51. symfonic_core-4.9.0/examples/full_demo/exports/daily_trend_fe675672.png +0 -0
  52. symfonic_core-4.9.0/examples/full_demo/exports/executive_report_2281d87d.pdf +0 -0
  53. symfonic_core-4.9.0/examples/full_demo/exports/executive_report_cda82f8a.pdf +0 -0
  54. symfonic_core-4.9.0/examples/full_demo/exports/inventory_chart_264a2e4c.png +0 -0
  55. symfonic_core-4.9.0/examples/full_demo/exports/inventory_chart_ec10ec94.png +0 -0
  56. symfonic_core-4.9.0/examples/full_demo/exports/inventory_report_a92e3cfd.pdf +0 -0
  57. symfonic_core-4.9.0/examples/full_demo/exports/sales_chart_068506d6.png +0 -0
  58. symfonic_core-4.9.0/examples/full_demo/exports/sales_chart_58851c78.png +0 -0
  59. symfonic_core-4.9.0/examples/full_demo/exports/sales_chart_b2cb926e.png +0 -0
  60. symfonic_core-4.9.0/examples/full_demo/exports/sales_chart_de2b72c4.png +0 -0
  61. symfonic_core-4.9.0/examples/full_demo/infra/__init__.py +10 -0
  62. symfonic_core-4.9.0/examples/full_demo/infra/celery_adapter.py +112 -0
  63. symfonic_core-4.9.0/examples/full_demo/infra/celery_app.py +44 -0
  64. symfonic_core-4.9.0/examples/full_demo/infra/tasks.py +218 -0
  65. symfonic_core-4.9.0/examples/full_demo/infra/telemetry.py +246 -0
  66. symfonic_core-4.9.0/examples/full_demo/mock_provider.py +240 -0
  67. symfonic_core-4.9.0/examples/full_demo/models/__init__.py +79 -0
  68. symfonic_core-4.9.0/examples/full_demo/models/billing.py +250 -0
  69. symfonic_core-4.9.0/examples/full_demo/models/chat.py +157 -0
  70. symfonic_core-4.9.0/examples/full_demo/models/finding.py +173 -0
  71. symfonic_core-4.9.0/examples/full_demo/models/migrations.py +308 -0
  72. symfonic_core-4.9.0/examples/full_demo/models/prompt_versions.py +78 -0
  73. symfonic_core-4.9.0/examples/full_demo/models/trace.py +294 -0
  74. symfonic_core-4.9.0/examples/full_demo/observability.py +178 -0
  75. symfonic_core-4.9.0/examples/full_demo/requirements.txt +6 -0
  76. symfonic_core-4.9.0/examples/full_demo/seed.py +71 -0
  77. symfonic_core-4.9.0/examples/full_demo/server.py +1334 -0
  78. symfonic_core-4.9.0/examples/full_demo/static/app.js +1740 -0
  79. symfonic_core-4.9.0/examples/full_demo/static/index.html +777 -0
  80. symfonic_core-4.9.0/examples/full_demo/static/observability.css +389 -0
  81. symfonic_core-4.9.0/examples/full_demo/static/observability.js +1275 -0
  82. symfonic_core-4.9.0/examples/full_demo/static/workflows.js +222 -0
  83. symfonic_core-4.9.0/examples/full_demo/tools/__init__.py +12 -0
  84. symfonic_core-4.9.0/examples/full_demo/tools/amazon_fetch.py +208 -0
  85. symfonic_core-4.9.0/examples/full_demo/tools/anomaly_detection.py +170 -0
  86. symfonic_core-4.9.0/examples/full_demo/tools/chart_gen.py +209 -0
  87. symfonic_core-4.9.0/examples/full_demo/tools/demo_knowledge.py +235 -0
  88. symfonic_core-4.9.0/examples/full_demo/tools/executor.py +299 -0
  89. symfonic_core-4.9.0/examples/full_demo/tools/knowledge_search.py +61 -0
  90. symfonic_core-4.9.0/examples/full_demo/tools/langchain_tools.py +91 -0
  91. symfonic_core-4.9.0/examples/full_demo/tools/multimodal_report.py +199 -0
  92. symfonic_core-4.9.0/examples/full_demo/tools/pdf_report.py +286 -0
  93. symfonic_core-4.9.0/examples/full_demo/tools/resolvers.py +64 -0
  94. symfonic_core-4.9.0/examples/full_demo/tools/sync_pg_to_mongo.py +100 -0
  95. symfonic_core-4.9.0/examples/memory_agent/__init__.py +0 -0
  96. symfonic_core-4.9.0/examples/memory_agent/__main__.py +44 -0
  97. symfonic_core-4.9.0/examples/minimal_agent/__main__.py +42 -0
  98. symfonic_core-4.9.0/examples/plugins/__init__.py +28 -0
  99. symfonic_core-4.9.0/examples/plugins/amazon_growth.py +191 -0
  100. symfonic_core-4.9.0/examples/plugins/penal_mexicano.py +233 -0
  101. symfonic_core-4.9.0/examples/real_agent/__main__.py +52 -0
  102. symfonic_core-4.9.0/examples/real_agent_with_memory/__init__.py +0 -0
  103. symfonic_core-4.9.0/examples/real_agent_with_memory/__main__.py +106 -0
  104. symfonic_core-4.9.0/examples/real_skill_registry/__init__.py +0 -0
  105. symfonic_core-4.9.0/examples/real_skill_registry/__main__.py +94 -0
  106. symfonic_core-4.9.0/examples/real_tool_registry/__init__.py +0 -0
  107. symfonic_core-4.9.0/examples/real_tool_registry/__main__.py +132 -0
  108. symfonic_core-4.9.0/examples/server_v1.py +49 -0
  109. symfonic_core-4.9.0/examples/skill_agent/__init__.py +0 -0
  110. symfonic_core-4.9.0/examples/skill_agent/__main__.py +42 -0
  111. symfonic_core-4.9.0/examples/skill_registry/__main__.py +89 -0
  112. symfonic_core-4.9.0/examples/tool_agent/__init__.py +0 -0
  113. symfonic_core-4.9.0/examples/tool_agent/__main__.py +49 -0
  114. symfonic_core-4.9.0/examples/tool_registry_demo/__main__.py +120 -0
  115. symfonic_core-4.9.0/pyproject.toml +130 -0
  116. symfonic_core-4.9.0/scripts/generate_docs.sh +36 -0
  117. symfonic_core-4.9.0/services/amazon_mock/Dockerfile +11 -0
  118. symfonic_core-4.9.0/services/amazon_mock/__init__.py +1 -0
  119. symfonic_core-4.9.0/services/amazon_mock/app.py +133 -0
  120. symfonic_core-4.9.0/services/amazon_mock/generators.py +260 -0
  121. symfonic_core-4.9.0/src/symfonic/agent/__init__.py +66 -0
  122. symfonic_core-4.9.0/src/symfonic/agent/cli/__init__.py +1 -0
  123. symfonic_core-4.9.0/src/symfonic/agent/cli/main.py +119 -0
  124. symfonic_core-4.9.0/src/symfonic/agent/config.py +103 -0
  125. symfonic_core-4.9.0/src/symfonic/agent/domain.py +74 -0
  126. symfonic_core-4.9.0/src/symfonic/agent/engine.py +1496 -0
  127. symfonic_core-4.9.0/src/symfonic/agent/factory.py +161 -0
  128. symfonic_core-4.9.0/src/symfonic/agent/fastapi/__init__.py +4 -0
  129. symfonic_core-4.9.0/src/symfonic/agent/fastapi/dependencies.py +45 -0
  130. symfonic_core-4.9.0/src/symfonic/agent/fastapi/router.py +531 -0
  131. symfonic_core-4.9.0/src/symfonic/agent/observability.py +154 -0
  132. symfonic_core-4.9.0/src/symfonic/agent/prompts/__init__.py +16 -0
  133. symfonic_core-4.9.0/src/symfonic/agent/prompts/db_section.py +167 -0
  134. symfonic_core-4.9.0/src/symfonic/agent/prompts/extraction_prompt.py +107 -0
  135. symfonic_core-4.9.0/src/symfonic/agent/prompts/system_prompt.py +159 -0
  136. symfonic_core-4.9.0/src/symfonic/agent/prompts/templates/__init__.py +1 -0
  137. symfonic_core-4.9.0/src/symfonic/agent/prompts/templates/extraction.txt +148 -0
  138. symfonic_core-4.9.0/src/symfonic/agent/prompts/templates/hms_system.txt +118 -0
  139. symfonic_core-4.9.0/src/symfonic/agent/scheduler.py +143 -0
  140. symfonic_core-4.9.0/src/symfonic/agent/sessions.py +84 -0
  141. symfonic_core-4.9.0/src/symfonic/agent/types.py +185 -0
  142. symfonic_core-4.9.0/src/symfonic/core/__init__.py +56 -0
  143. symfonic_core-4.9.0/src/symfonic/core/agents/__init__.py +5 -0
  144. symfonic_core-4.9.0/src/symfonic/core/agents/in_memory.py +35 -0
  145. symfonic_core-4.9.0/src/symfonic/core/agents/loader.py +14 -0
  146. symfonic_core-4.9.0/src/symfonic/core/agents/schema.py +26 -0
  147. symfonic_core-4.9.0/src/symfonic/core/callbacks/__init__.py +7 -0
  148. symfonic_core-4.9.0/src/symfonic/core/callbacks/manager.py +79 -0
  149. symfonic_core-4.9.0/src/symfonic/core/callbacks/noop.py +37 -0
  150. symfonic_core-4.9.0/src/symfonic/core/callbacks/protocol.py +36 -0
  151. symfonic_core-4.9.0/src/symfonic/core/capabilities/__init__.py +10 -0
  152. symfonic_core-4.9.0/src/symfonic/core/capabilities/firecrawl.py +73 -0
  153. symfonic_core-4.9.0/src/symfonic/core/capabilities/openai_search.py +75 -0
  154. symfonic_core-4.9.0/src/symfonic/core/capabilities/protocols.py +43 -0
  155. symfonic_core-4.9.0/src/symfonic/core/config.py +61 -0
  156. symfonic_core-4.9.0/src/symfonic/core/contracts/__init__.py +47 -0
  157. symfonic_core-4.9.0/src/symfonic/core/contracts/callbacks.py +58 -0
  158. symfonic_core-4.9.0/src/symfonic/core/contracts/errors.py +61 -0
  159. symfonic_core-4.9.0/src/symfonic/core/contracts/types.py +108 -0
  160. symfonic_core-4.9.0/src/symfonic/core/deps.py +145 -0
  161. symfonic_core-4.9.0/src/symfonic/core/documents/__init__.py +5 -0
  162. symfonic_core-4.9.0/src/symfonic/core/documents/in_memory.py +44 -0
  163. symfonic_core-4.9.0/src/symfonic/core/documents/loader.py +14 -0
  164. symfonic_core-4.9.0/src/symfonic/core/documents/schema.py +5 -0
  165. symfonic_core-4.9.0/src/symfonic/core/documents/truncation.py +21 -0
  166. symfonic_core-4.9.0/src/symfonic/core/edges/__init__.py +1 -0
  167. symfonic_core-4.9.0/src/symfonic/core/edges/tool_condition.py +27 -0
  168. symfonic_core-4.9.0/src/symfonic/core/events.py +28 -0
  169. symfonic_core-4.9.0/src/symfonic/core/graph.py +142 -0
  170. symfonic_core-4.9.0/src/symfonic/core/learning/__init__.py +12 -0
  171. symfonic_core-4.9.0/src/symfonic/core/learning/consolidation.py +176 -0
  172. symfonic_core-4.9.0/src/symfonic/core/learning/models.py +33 -0
  173. symfonic_core-4.9.0/src/symfonic/core/learning/phases.py +329 -0
  174. symfonic_core-4.9.0/src/symfonic/core/learning/refiner.py +154 -0
  175. symfonic_core-4.9.0/src/symfonic/core/logging/__init__.py +6 -0
  176. symfonic_core-4.9.0/src/symfonic/core/logging/console.py +34 -0
  177. symfonic_core-4.9.0/src/symfonic/core/logging/protocol.py +22 -0
  178. symfonic_core-4.9.0/src/symfonic/core/models.py +51 -0
  179. symfonic_core-4.9.0/src/symfonic/core/nodes/__init__.py +1 -0
  180. symfonic_core-4.9.0/src/symfonic/core/nodes/compaction.py +116 -0
  181. symfonic_core-4.9.0/src/symfonic/core/nodes/context_injection.py +102 -0
  182. symfonic_core-4.9.0/src/symfonic/core/nodes/react.py +143 -0
  183. symfonic_core-4.9.0/src/symfonic/core/observability/__init__.py +19 -0
  184. symfonic_core-4.9.0/src/symfonic/core/observability/decorators.py +147 -0
  185. symfonic_core-4.9.0/src/symfonic/core/observability/hooks.py +68 -0
  186. symfonic_core-4.9.0/src/symfonic/core/observability/protocol.py +73 -0
  187. symfonic_core-4.9.0/src/symfonic/core/orchestration.py +28 -0
  188. symfonic_core-4.9.0/src/symfonic/core/plugins/__init__.py +15 -0
  189. symfonic_core-4.9.0/src/symfonic/core/plugins/base.py +73 -0
  190. symfonic_core-4.9.0/src/symfonic/core/plugins/section.py +76 -0
  191. symfonic_core-4.9.0/src/symfonic/core/presets.py +116 -0
  192. symfonic_core-4.9.0/src/symfonic/core/prompt/__init__.py +6 -0
  193. symfonic_core-4.9.0/src/symfonic/core/prompt/_timeout.py +21 -0
  194. symfonic_core-4.9.0/src/symfonic/core/prompt/builder.py +132 -0
  195. symfonic_core-4.9.0/src/symfonic/core/prompt/caching.py +50 -0
  196. symfonic_core-4.9.0/src/symfonic/core/prompt/sections.py +130 -0
  197. symfonic_core-4.9.0/src/symfonic/core/protocols.py +128 -0
  198. symfonic_core-4.9.0/src/symfonic/core/providers.py +56 -0
  199. symfonic_core-4.9.0/src/symfonic/core/py.typed +0 -0
  200. symfonic_core-4.9.0/src/symfonic/core/resilience.py +21 -0
  201. symfonic_core-4.9.0/src/symfonic/core/runtime.py +255 -0
  202. symfonic_core-4.9.0/src/symfonic/core/scope.py +34 -0
  203. symfonic_core-4.9.0/src/symfonic/core/skills/__init__.py +5 -0
  204. symfonic_core-4.9.0/src/symfonic/core/skills/filter.py +15 -0
  205. symfonic_core-4.9.0/src/symfonic/core/skills/formatter.py +15 -0
  206. symfonic_core-4.9.0/src/symfonic/core/skills/in_memory.py +29 -0
  207. symfonic_core-4.9.0/src/symfonic/core/skills/loader.py +31 -0
  208. symfonic_core-4.9.0/src/symfonic/core/skills/markdown_utils.py +15 -0
  209. symfonic_core-4.9.0/src/symfonic/core/skills/schema.py +5 -0
  210. symfonic_core-4.9.0/src/symfonic/core/state.py +60 -0
  211. symfonic_core-4.9.0/src/symfonic/core/streaming/__init__.py +30 -0
  212. symfonic_core-4.9.0/src/symfonic/core/streaming/adapters/__init__.py +6 -0
  213. symfonic_core-4.9.0/src/symfonic/core/streaming/adapters/_shared.py +12 -0
  214. symfonic_core-4.9.0/src/symfonic/core/streaming/adapters/anthropic_adapter.py +112 -0
  215. symfonic_core-4.9.0/src/symfonic/core/streaming/adapters/openai_adapter.py +96 -0
  216. symfonic_core-4.9.0/src/symfonic/core/streaming/event_processor.py +37 -0
  217. symfonic_core-4.9.0/src/symfonic/core/streaming/transpiler.py +216 -0
  218. symfonic_core-4.9.0/src/symfonic/core/testing/__init__.py +76 -0
  219. symfonic_core-4.9.0/src/symfonic/core/tool_interface.py +76 -0
  220. symfonic_core-4.9.0/src/symfonic/core/tools/__init__.py +1 -0
  221. symfonic_core-4.9.0/src/symfonic/core/tools/_resolve.py +60 -0
  222. symfonic_core-4.9.0/src/symfonic/core/tools/agent_tools.py +39 -0
  223. symfonic_core-4.9.0/src/symfonic/core/tools/chart_tools.py +23 -0
  224. symfonic_core-4.9.0/src/symfonic/core/tools/helpers.py +21 -0
  225. symfonic_core-4.9.0/src/symfonic/core/tools/memory_tools.py +48 -0
  226. symfonic_core-4.9.0/src/symfonic/core/tools/registry.py +197 -0
  227. symfonic_core-4.9.0/src/symfonic/core/tools/skill_tools.py +43 -0
  228. symfonic_core-4.9.0/src/symfonic/core/tools/web_tools.py +43 -0
  229. symfonic_core-4.9.0/src/symfonic/infra/__init__.py +22 -0
  230. symfonic_core-4.9.0/src/symfonic/infra/protocols.py +121 -0
  231. symfonic_core-4.9.0/src/symfonic/infra/trace.py +168 -0
  232. symfonic_core-4.9.0/src/symfonic/knowledge/__init__.py +18 -0
  233. symfonic_core-4.9.0/src/symfonic/knowledge/adapters/__init__.py +16 -0
  234. symfonic_core-4.9.0/src/symfonic/knowledge/adapters/chroma.py +117 -0
  235. symfonic_core-4.9.0/src/symfonic/knowledge/models.py +41 -0
  236. symfonic_core-4.9.0/src/symfonic/knowledge/protocols.py +51 -0
  237. symfonic_core-4.9.0/src/symfonic/memory/__init__.py +54 -0
  238. symfonic_core-4.9.0/src/symfonic/memory/_internal/__init__.py +0 -0
  239. symfonic_core-4.9.0/src/symfonic/memory/_internal/extraction/__init__.py +1 -0
  240. symfonic_core-4.9.0/src/symfonic/memory/_internal/extraction/service.py +93 -0
  241. symfonic_core-4.9.0/src/symfonic/memory/_internal/llm/__init__.py +1 -0
  242. symfonic_core-4.9.0/src/symfonic/memory/_internal/llm/response_parser.py +36 -0
  243. symfonic_core-4.9.0/src/symfonic/memory/backends/__init__.py +14 -0
  244. symfonic_core-4.9.0/src/symfonic/memory/backends/chroma.py +108 -0
  245. symfonic_core-4.9.0/src/symfonic/memory/backends/in_memory.py +232 -0
  246. symfonic_core-4.9.0/src/symfonic/memory/backends/mongodb.py +375 -0
  247. symfonic_core-4.9.0/src/symfonic/memory/backends/pool.py +122 -0
  248. symfonic_core-4.9.0/src/symfonic/memory/backends/postgres_graph.py +353 -0
  249. symfonic_core-4.9.0/src/symfonic/memory/backends/postgres_vector.py +142 -0
  250. symfonic_core-4.9.0/src/symfonic/memory/compaction/__init__.py +1 -0
  251. symfonic_core-4.9.0/src/symfonic/memory/compaction/engine.py +129 -0
  252. symfonic_core-4.9.0/src/symfonic/memory/compaction/strategies.py +68 -0
  253. symfonic_core-4.9.0/src/symfonic/memory/graph/__init__.py +1 -0
  254. symfonic_core-4.9.0/src/symfonic/memory/graph/scoring.py +141 -0
  255. symfonic_core-4.9.0/src/symfonic/memory/graph/store.py +125 -0
  256. symfonic_core-4.9.0/src/symfonic/memory/graph/traversal.py +125 -0
  257. symfonic_core-4.9.0/src/symfonic/memory/janitor.py +269 -0
  258. symfonic_core-4.9.0/src/symfonic/memory/layers/__init__.py +18 -0
  259. symfonic_core-4.9.0/src/symfonic/memory/layers/episodic.py +127 -0
  260. symfonic_core-4.9.0/src/symfonic/memory/layers/procedural/__init__.py +11 -0
  261. symfonic_core-4.9.0/src/symfonic/memory/layers/procedural/catalog.py +63 -0
  262. symfonic_core-4.9.0/src/symfonic/memory/layers/procedural/layer.py +123 -0
  263. symfonic_core-4.9.0/src/symfonic/memory/layers/procedural/router.py +143 -0
  264. symfonic_core-4.9.0/src/symfonic/memory/layers/prospective.py +106 -0
  265. symfonic_core-4.9.0/src/symfonic/memory/layers/semantic.py +127 -0
  266. symfonic_core-4.9.0/src/symfonic/memory/layers/working.py +123 -0
  267. symfonic_core-4.9.0/src/symfonic/memory/models/__init__.py +21 -0
  268. symfonic_core-4.9.0/src/symfonic/memory/models/context.py +84 -0
  269. symfonic_core-4.9.0/src/symfonic/memory/models/edge.py +47 -0
  270. symfonic_core-4.9.0/src/symfonic/memory/models/entry.py +74 -0
  271. symfonic_core-4.9.0/src/symfonic/memory/models/node.py +60 -0
  272. symfonic_core-4.9.0/src/symfonic/memory/models/operation.py +72 -0
  273. symfonic_core-4.9.0/src/symfonic/memory/orchestrator/__init__.py +1 -0
  274. symfonic_core-4.9.0/src/symfonic/memory/orchestrator/config.py +98 -0
  275. symfonic_core-4.9.0/src/symfonic/memory/orchestrator/factory.py +303 -0
  276. symfonic_core-4.9.0/src/symfonic/memory/orchestrator/orchestrator.py +227 -0
  277. symfonic_core-4.9.0/src/symfonic/memory/prompts/__init__.py +42 -0
  278. symfonic_core-4.9.0/src/symfonic/memory/prompts/compaction.txt +46 -0
  279. symfonic_core-4.9.0/src/symfonic/memory/prompts/router.txt +27 -0
  280. symfonic_core-4.9.0/src/symfonic/memory/prompts/system.txt +64 -0
  281. symfonic_core-4.9.0/src/symfonic/memory/protocols.py +204 -0
  282. symfonic_core-4.9.0/src/symfonic/memory/py.typed +0 -0
  283. symfonic_core-4.9.0/src/symfonic/memory/retrieval/__init__.py +1 -0
  284. symfonic_core-4.9.0/src/symfonic/memory/retrieval/discovery.py +110 -0
  285. symfonic_core-4.9.0/src/symfonic/memory/retrieval/engine.py +186 -0
  286. symfonic_core-4.9.0/src/symfonic/memory/retrieval/filters.py +60 -0
  287. symfonic_core-4.9.0/src/symfonic/memory/retrieval/spreading.py +111 -0
  288. symfonic_core-4.9.0/src/symfonic/memory/types.py +106 -0
  289. symfonic_core-4.9.0/src/symfonic/tools/__init__.py +1 -0
  290. symfonic_core-4.9.0/src/symfonic/tools/learning.py +103 -0
  291. symfonic_core-4.9.0/src/symfonic/tools/mcp/__init__.py +20 -0
  292. symfonic_core-4.9.0/src/symfonic/tools/mcp/models.py +40 -0
  293. symfonic_core-4.9.0/src/symfonic/tools/mcp/protocol.py +58 -0
  294. symfonic_core-4.9.0/src/symfonic/tools/mcp/provider.py +272 -0
  295. symfonic_core-4.9.0/tests/__init__.py +0 -0
  296. symfonic_core-4.9.0/tests/agent/__init__.py +0 -0
  297. symfonic_core-4.9.0/tests/agent/test_activation_engine.py +113 -0
  298. symfonic_core-4.9.0/tests/agent/test_cli.py +83 -0
  299. symfonic_core-4.9.0/tests/agent/test_consolidation_e2e.py +319 -0
  300. symfonic_core-4.9.0/tests/agent/test_db_section.py +334 -0
  301. symfonic_core-4.9.0/tests/agent/test_domain.py +116 -0
  302. symfonic_core-4.9.0/tests/agent/test_e2e.py +237 -0
  303. symfonic_core-4.9.0/tests/agent/test_engine.py +1086 -0
  304. symfonic_core-4.9.0/tests/agent/test_factory.py +152 -0
  305. symfonic_core-4.9.0/tests/agent/test_fastapi.py +530 -0
  306. symfonic_core-4.9.0/tests/agent/test_history_injection.py +197 -0
  307. symfonic_core-4.9.0/tests/agent/test_janitor.py +409 -0
  308. symfonic_core-4.9.0/tests/agent/test_procedures.py +306 -0
  309. symfonic_core-4.9.0/tests/agent/test_prompts.py +425 -0
  310. symfonic_core-4.9.0/tests/agent/test_rich_hydration.py +160 -0
  311. symfonic_core-4.9.0/tests/agent/test_scheduler.py +159 -0
  312. symfonic_core-4.9.0/tests/agent/test_sessions.py +107 -0
  313. symfonic_core-4.9.0/tests/agent/test_stream_typed.py +505 -0
  314. symfonic_core-4.9.0/tests/agent/test_types.py +258 -0
  315. symfonic_core-4.9.0/tests/cassettes/__init__.py +0 -0
  316. symfonic_core-4.9.0/tests/cassettes/fixtures/bare_json_extract.json +31 -0
  317. symfonic_core-4.9.0/tests/cassettes/fixtures/graph_ops_bare_keyword.json +26 -0
  318. symfonic_core-4.9.0/tests/cassettes/fixtures/greeting.json +64 -0
  319. symfonic_core-4.9.0/tests/cassettes/fixtures/identity_graph_ops.json +31 -0
  320. symfonic_core-4.9.0/tests/cassettes/fixtures/identity_store.json +57 -0
  321. symfonic_core-4.9.0/tests/cassettes/record.py +71 -0
  322. symfonic_core-4.9.0/tests/cassettes/recorder.py +50 -0
  323. symfonic_core-4.9.0/tests/contracts/__init__.py +0 -0
  324. symfonic_core-4.9.0/tests/contracts/conftest.py +31 -0
  325. symfonic_core-4.9.0/tests/contracts/test_agent_store_contract.py +51 -0
  326. symfonic_core-4.9.0/tests/contracts/test_document_store_contract.py +63 -0
  327. symfonic_core-4.9.0/tests/contracts/test_skill_store_contract.py +42 -0
  328. symfonic_core-4.9.0/tests/doubles.py +124 -0
  329. symfonic_core-4.9.0/tests/integration/__init__.py +0 -0
  330. symfonic_core-4.9.0/tests/integration/test_callback_integration.py +203 -0
  331. symfonic_core-4.9.0/tests/integration/test_example_validation.py +147 -0
  332. symfonic_core-4.9.0/tests/integration/test_minimal_agent.py +114 -0
  333. symfonic_core-4.9.0/tests/integration/test_phase2_examples.py +235 -0
  334. symfonic_core-4.9.0/tests/integration/test_phase3_integration.py +290 -0
  335. symfonic_core-4.9.0/tests/integration/test_tool_store_integration.py +209 -0
  336. symfonic_core-4.9.0/tests/integration/test_vcr_agent.py +260 -0
  337. symfonic_core-4.9.0/tests/memory/__init__.py +0 -0
  338. symfonic_core-4.9.0/tests/memory/conftest.py +124 -0
  339. symfonic_core-4.9.0/tests/memory/integration/__init__.py +0 -0
  340. symfonic_core-4.9.0/tests/memory/integration/test_orchestrator.py +443 -0
  341. symfonic_core-4.9.0/tests/memory/integration/test_postgres_integration.py +242 -0
  342. symfonic_core-4.9.0/tests/memory/unit/__init__.py +0 -0
  343. symfonic_core-4.9.0/tests/memory/unit/test_catalog.py +67 -0
  344. symfonic_core-4.9.0/tests/memory/unit/test_compaction.py +172 -0
  345. symfonic_core-4.9.0/tests/memory/unit/test_config.py +72 -0
  346. symfonic_core-4.9.0/tests/memory/unit/test_discovery.py +225 -0
  347. symfonic_core-4.9.0/tests/memory/unit/test_extraction_service.py +44 -0
  348. symfonic_core-4.9.0/tests/memory/unit/test_factory_gaps.py +50 -0
  349. symfonic_core-4.9.0/tests/memory/unit/test_graph.py +109 -0
  350. symfonic_core-4.9.0/tests/memory/unit/test_in_memory.py +317 -0
  351. symfonic_core-4.9.0/tests/memory/unit/test_layers.py +341 -0
  352. symfonic_core-4.9.0/tests/memory/unit/test_models.py +122 -0
  353. symfonic_core-4.9.0/tests/memory/unit/test_mongodb.py +639 -0
  354. symfonic_core-4.9.0/tests/memory/unit/test_pool_gaps.py +54 -0
  355. symfonic_core-4.9.0/tests/memory/unit/test_postgres.py +511 -0
  356. symfonic_core-4.9.0/tests/memory/unit/test_prompts.py +35 -0
  357. symfonic_core-4.9.0/tests/memory/unit/test_response_parser.py +44 -0
  358. symfonic_core-4.9.0/tests/memory/unit/test_retrieval.py +116 -0
  359. symfonic_core-4.9.0/tests/memory/unit/test_router.py +94 -0
  360. symfonic_core-4.9.0/tests/memory/unit/test_scoring.py +128 -0
  361. symfonic_core-4.9.0/tests/memory/unit/test_small_gaps.py +404 -0
  362. symfonic_core-4.9.0/tests/memory/unit/test_spreading.py +276 -0
  363. symfonic_core-4.9.0/tests/memory/unit/test_store_distinct.py +117 -0
  364. symfonic_core-4.9.0/tests/memory/unit/test_traversal.py +128 -0
  365. symfonic_core-4.9.0/tests/memory/unit/test_types.py +66 -0
  366. symfonic_core-4.9.0/tests/unit/__init__.py +0 -0
  367. symfonic_core-4.9.0/tests/unit/agents/__init__.py +0 -0
  368. symfonic_core-4.9.0/tests/unit/agents/test_in_memory_agent_store.py +57 -0
  369. symfonic_core-4.9.0/tests/unit/agents/test_loader.py +33 -0
  370. symfonic_core-4.9.0/tests/unit/agents/test_schema.py +39 -0
  371. symfonic_core-4.9.0/tests/unit/capabilities/__init__.py +0 -0
  372. symfonic_core-4.9.0/tests/unit/capabilities/test_capabilities.py +125 -0
  373. symfonic_core-4.9.0/tests/unit/capabilities/test_firecrawl.py +167 -0
  374. symfonic_core-4.9.0/tests/unit/capabilities/test_openai_search.py +115 -0
  375. symfonic_core-4.9.0/tests/unit/core/__init__.py +0 -0
  376. symfonic_core-4.9.0/tests/unit/core/test_config.py +62 -0
  377. symfonic_core-4.9.0/tests/unit/core/test_contracts.py +323 -0
  378. symfonic_core-4.9.0/tests/unit/core/test_deps.py +123 -0
  379. symfonic_core-4.9.0/tests/unit/core/test_doubles.py +138 -0
  380. symfonic_core-4.9.0/tests/unit/core/test_events.py +62 -0
  381. symfonic_core-4.9.0/tests/unit/core/test_graph.py +103 -0
  382. symfonic_core-4.9.0/tests/unit/core/test_logging.py +49 -0
  383. symfonic_core-4.9.0/tests/unit/core/test_models.py +116 -0
  384. symfonic_core-4.9.0/tests/unit/core/test_orchestration.py +31 -0
  385. symfonic_core-4.9.0/tests/unit/core/test_package.py +37 -0
  386. symfonic_core-4.9.0/tests/unit/core/test_protocol_memory_flusher.py +38 -0
  387. symfonic_core-4.9.0/tests/unit/core/test_protocols.py +160 -0
  388. symfonic_core-4.9.0/tests/unit/core/test_providers.py +38 -0
  389. symfonic_core-4.9.0/tests/unit/core/test_resilience.py +45 -0
  390. symfonic_core-4.9.0/tests/unit/core/test_scope.py +37 -0
  391. symfonic_core-4.9.0/tests/unit/core/test_state.py +38 -0
  392. symfonic_core-4.9.0/tests/unit/core/test_testing.py +69 -0
  393. symfonic_core-4.9.0/tests/unit/core/test_tool_interface.py +153 -0
  394. symfonic_core-4.9.0/tests/unit/demo/__init__.py +0 -0
  395. symfonic_core-4.9.0/tests/unit/demo/test_anomaly_detection.py +400 -0
  396. symfonic_core-4.9.0/tests/unit/demo/test_billing.py +480 -0
  397. symfonic_core-4.9.0/tests/unit/demo/test_capabilities.py +80 -0
  398. symfonic_core-4.9.0/tests/unit/demo/test_celery_adapter.py +424 -0
  399. symfonic_core-4.9.0/tests/unit/demo/test_deps.py +29 -0
  400. symfonic_core-4.9.0/tests/unit/demo/test_dual_write.py +293 -0
  401. symfonic_core-4.9.0/tests/unit/demo/test_fixtures.py +24 -0
  402. symfonic_core-4.9.0/tests/unit/demo/test_jarvio_learning.py +102 -0
  403. symfonic_core-4.9.0/tests/unit/demo/test_knowledge_search.py +184 -0
  404. symfonic_core-4.9.0/tests/unit/demo/test_memory_graph.py +128 -0
  405. symfonic_core-4.9.0/tests/unit/demo/test_migrations.py +76 -0
  406. symfonic_core-4.9.0/tests/unit/demo/test_multimodal_report.py +366 -0
  407. symfonic_core-4.9.0/tests/unit/demo/test_resolvers.py +240 -0
  408. symfonic_core-4.9.0/tests/unit/demo/test_sections.py +119 -0
  409. symfonic_core-4.9.0/tests/unit/demo/test_state.py +44 -0
  410. symfonic_core-4.9.0/tests/unit/demo/test_sync_pg_to_mongo.py +247 -0
  411. symfonic_core-4.9.0/tests/unit/demo/test_telemetry.py +291 -0
  412. symfonic_core-4.9.0/tests/unit/demo/test_trace_store.py +312 -0
  413. symfonic_core-4.9.0/tests/unit/documents/__init__.py +0 -0
  414. symfonic_core-4.9.0/tests/unit/documents/test_in_memory_document_store.py +99 -0
  415. symfonic_core-4.9.0/tests/unit/documents/test_loader.py +34 -0
  416. symfonic_core-4.9.0/tests/unit/documents/test_truncation.py +42 -0
  417. symfonic_core-4.9.0/tests/unit/edges/__init__.py +0 -0
  418. symfonic_core-4.9.0/tests/unit/edges/test_tool_condition.py +33 -0
  419. symfonic_core-4.9.0/tests/unit/infra/__init__.py +0 -0
  420. symfonic_core-4.9.0/tests/unit/infra/test_protocols.py +109 -0
  421. symfonic_core-4.9.0/tests/unit/infra/test_trace.py +203 -0
  422. symfonic_core-4.9.0/tests/unit/knowledge/__init__.py +0 -0
  423. symfonic_core-4.9.0/tests/unit/knowledge/test_knowledge.py +344 -0
  424. symfonic_core-4.9.0/tests/unit/learning/__init__.py +0 -0
  425. symfonic_core-4.9.0/tests/unit/learning/test_learning.py +445 -0
  426. symfonic_core-4.9.0/tests/unit/nodes/__init__.py +0 -0
  427. symfonic_core-4.9.0/tests/unit/nodes/test_compaction.py +377 -0
  428. symfonic_core-4.9.0/tests/unit/nodes/test_compaction_flush.py +52 -0
  429. symfonic_core-4.9.0/tests/unit/nodes/test_context_injection.py +134 -0
  430. symfonic_core-4.9.0/tests/unit/nodes/test_react.py +247 -0
  431. symfonic_core-4.9.0/tests/unit/observability/__init__.py +0 -0
  432. symfonic_core-4.9.0/tests/unit/observability/test_decorators.py +206 -0
  433. symfonic_core-4.9.0/tests/unit/observability/test_hooks.py +36 -0
  434. symfonic_core-4.9.0/tests/unit/observability/test_protocol_isp.py +129 -0
  435. symfonic_core-4.9.0/tests/unit/plugins/__init__.py +0 -0
  436. symfonic_core-4.9.0/tests/unit/plugins/test_domain_plugins.py +324 -0
  437. symfonic_core-4.9.0/tests/unit/plugins/test_plugin_base.py +354 -0
  438. symfonic_core-4.9.0/tests/unit/prompt/__init__.py +0 -0
  439. symfonic_core-4.9.0/tests/unit/prompt/test_builder.py +142 -0
  440. symfonic_core-4.9.0/tests/unit/prompt/test_caching.py +350 -0
  441. symfonic_core-4.9.0/tests/unit/prompt/test_sections.py +134 -0
  442. symfonic_core-4.9.0/tests/unit/prompt/test_timeout.py +44 -0
  443. symfonic_core-4.9.0/tests/unit/skills/__init__.py +0 -0
  444. symfonic_core-4.9.0/tests/unit/skills/test_filter.py +41 -0
  445. symfonic_core-4.9.0/tests/unit/skills/test_formatter.py +39 -0
  446. symfonic_core-4.9.0/tests/unit/skills/test_in_memory_skill_store.py +53 -0
  447. symfonic_core-4.9.0/tests/unit/skills/test_loader.py +63 -0
  448. symfonic_core-4.9.0/tests/unit/skills/test_markdown_utils.py +49 -0
  449. symfonic_core-4.9.0/tests/unit/streaming/__init__.py +0 -0
  450. symfonic_core-4.9.0/tests/unit/streaming/test_anthropic_adapter.py +180 -0
  451. symfonic_core-4.9.0/tests/unit/streaming/test_event_processor.py +110 -0
  452. symfonic_core-4.9.0/tests/unit/streaming/test_openai_adapter.py +183 -0
  453. symfonic_core-4.9.0/tests/unit/streaming/test_streaming_init.py +72 -0
  454. symfonic_core-4.9.0/tests/unit/streaming/test_transpiler.py +545 -0
  455. symfonic_core-4.9.0/tests/unit/test_activation_log.py +94 -0
  456. symfonic_core-4.9.0/tests/unit/test_callback_contracts.py +131 -0
  457. symfonic_core-4.9.0/tests/unit/test_callback_deps.py +56 -0
  458. symfonic_core-4.9.0/tests/unit/test_callback_manager.py +205 -0
  459. symfonic_core-4.9.0/tests/unit/test_callback_protocol.py +78 -0
  460. symfonic_core-4.9.0/tests/unit/test_critical_paths.py +222 -0
  461. symfonic_core-4.9.0/tests/unit/test_decorator_bug_fixes.py +234 -0
  462. symfonic_core-4.9.0/tests/unit/test_import_graph.py +66 -0
  463. symfonic_core-4.9.0/tests/unit/test_mock_blindspot_audit.py +1072 -0
  464. symfonic_core-4.9.0/tests/unit/test_observed_node_callbacks.py +199 -0
  465. symfonic_core-4.9.0/tests/unit/test_phase2_coverage_gaps.py +570 -0
  466. symfonic_core-4.9.0/tests/unit/test_phase3_critical_paths.py +578 -0
  467. symfonic_core-4.9.0/tests/unit/test_public_api.py +72 -0
  468. symfonic_core-4.9.0/tests/unit/test_runtime_callbacks.py +237 -0
  469. symfonic_core-4.9.0/tests/unit/test_runtime_timeout.py +66 -0
  470. symfonic_core-4.9.0/tests/unit/test_sleep_consolidation.py +440 -0
  471. symfonic_core-4.9.0/tests/unit/test_thinking_memory.py +336 -0
  472. symfonic_core-4.9.0/tests/unit/tools/__init__.py +0 -0
  473. symfonic_core-4.9.0/tests/unit/tools/test_agent_tools.py +139 -0
  474. symfonic_core-4.9.0/tests/unit/tools/test_chart_tools.py +58 -0
  475. symfonic_core-4.9.0/tests/unit/tools/test_helpers.py +84 -0
  476. symfonic_core-4.9.0/tests/unit/tools/test_mcp.py +414 -0
  477. symfonic_core-4.9.0/tests/unit/tools/test_memory_tools.py +140 -0
  478. symfonic_core-4.9.0/tests/unit/tools/test_registry.py +120 -0
  479. symfonic_core-4.9.0/tests/unit/tools/test_resolve.py +90 -0
  480. symfonic_core-4.9.0/tests/unit/tools/test_skill_tools.py +124 -0
  481. symfonic_core-4.9.0/tests/unit/tools/test_web_tools.py +155 -0
@@ -0,0 +1,124 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "mcp__claude_ai_Notion__notion-fetch",
5
+ "mcp__claude_ai_Notion__notion-search",
6
+ "Bash(python3 -m venv .venv)",
7
+ "Bash(source .venv/bin/activate)",
8
+ "Bash(pip install:*)",
9
+ "Bash(python -c \":*)",
10
+ "Bash(python -c \"import langgraph.graph; print\\(dir\\(langgraph.graph\\)\\)\")",
11
+ "Bash(pytest tests/ -v --tb=long)",
12
+ "Bash(pytest tests/ -v --tb=line)",
13
+ "Bash(pytest tests/ -v --tb=short)",
14
+ "Bash(pytest tests/ --cov=symfonic.core --cov-report=term-missing)",
15
+ "Bash(python -m examples.minimal_agent)",
16
+ "mcp__claude_ai_Notion__notion-update-page",
17
+ "Bash(mcm team:*)",
18
+ "Bash(mcm store:*)",
19
+ "Bash(mcm query:*)",
20
+ "Bash(ruff check:*)",
21
+ "Bash(git add:*)",
22
+ "Bash(git push:*)",
23
+ "Bash(git commit:*)",
24
+ "Bash(find src/symfonic/core -name \"*.py\" -exec wc -l {} +)",
25
+ "Bash(find tests:*)",
26
+ "Bash(pytest tests/unit/observability/test_decorators.py -v --tb=short)",
27
+ "Bash(python -m examples.real_agent \"What is 2+2? Answer in one word.\")",
28
+ "Bash(pytest tests/ --cov=symfonic.core --cov-report=term-missing -v)",
29
+ "Bash(pytest tests/ -v)",
30
+ "Bash(pytest tests/ -q --tb=line)",
31
+ "WebFetch(domain:www.notion.so)",
32
+ "Bash(source /Users/amielsinue/Development/amsidev/products/symfonic/.venv/bin/activate)",
33
+ "Bash(pytest tests/ -v --tb=short --cov=symfonic.core --cov-report=term-missing)",
34
+ "Bash(python3 -c \"import sys,json; d=json.load\\(sys.stdin\\); print\\(json.dumps\\({k:v for k,v in d.items\\(\\) if ''''mcp'''' in k.lower\\(\\) or ''''server'''' in k.lower\\(\\) or ''''notion'''' in str\\(v\\).lower\\(\\)}, indent=2\\)\\)\")",
35
+ "Bash(python3 -c \"import sys,json; d=json.load\\(sys.stdin\\); print\\(json.dumps\\(d, indent=2\\)\\)\")",
36
+ "Bash(python -c \"import pydantic; print\\(pydantic.__version__\\)\")",
37
+ "Bash(pytest tests/ --co -q)",
38
+ "Bash(pytest tests/ --cov=symfonic.core --cov-report=term-missing -q)",
39
+ "Bash(pytest tests/ -v --tb=no -q)",
40
+ "Bash(python -m examples.agent_with_memory)",
41
+ "Bash(python -m examples.skill_registry)",
42
+ "Bash(python -m examples.tool_registry_demo)",
43
+ "Bash(pytest tests/integration/test_phase2_examples.py -v --tb=short)",
44
+ "Bash(pytest tests/ --cov=symfonic.core --cov-report=term-missing --tb=short)",
45
+ "Bash(python -m examples.real_agent_with_memory)",
46
+ "Bash(python -m examples.real_skill_registry)",
47
+ "Bash(python -m examples.real_tool_registry)",
48
+ "Bash(grep -rn 'def has' /Users/amielsinue/Development/amsidev/products/symfonic/src/symfonic/core/ --include=*.py)",
49
+ "Bash(pytest /Users/amielsinue/Development/amsidev/products/symfonic/tests/ -q --tb=line)",
50
+ "Bash(pytest tests/unit/test_import_graph.py tests/unit/streaming/ tests/unit/capabilities/ -v --tb=short)",
51
+ "Bash(pytest tests/unit/prompt/ tests/unit/streaming/test_event_processor.py tests/unit/capabilities/test_firecrawl.py tests/unit/capabilities/test_openai_search.py -v --tb=short)",
52
+ "Bash(pytest tests/ -q --tb=short)",
53
+ "Bash(python -m examples.e2e_basic_agent)",
54
+ "Bash(grep -E \"Miss|FAIL|[0-9]+$\")",
55
+ "Bash(python -m examples.demo_app)",
56
+ "Bash(python -m examples.demo_app \"What is symfonic?\" --mode degraded --verbose)",
57
+ "Bash(python -m examples.demo_app \"Test error\" --mode capability_error --verbose)",
58
+ "Bash(ls:*)",
59
+ "Bash(.venv/bin/python -c \"import dotenv; print\\('ok'\\)\" 2>&1)",
60
+ "Bash(.venv/bin/python -m examples.demo_app \"What skills do you have?\" 2>&1)",
61
+ "Bash(.venv/bin/python -m examples.demo_app \"Test\" --verbose --mode capability_error 2>&1)",
62
+ "Bash(ANTHROPIC_API_KEY= .venv/bin/python -m examples.demo_app \"Test\" --real)",
63
+ "Bash(echo \"EXIT: $?\")",
64
+ "Bash(.venv/bin/python -m pytest tests/unit/demo/ -q --tb=short 2>&1)",
65
+ "Bash(.venv/bin/python -m pytest tests/ -q --tb=line 2>&1)",
66
+ "Bash(python -m examples.demo_app \"What skills do you have?\" --verbose)",
67
+ "Bash(python -m examples.demo_app \"What skills do you have?\" --real)",
68
+ "Bash(python -m examples.demo_app \"What skills?\" --verbose)",
69
+ "Bash(python -m examples.demo_app \"Fetch data\" --mode capability_error --verbose)",
70
+ "Bash(pytest tests/unit/demo/ tests/integration/ -q --tb=short)",
71
+ "Bash(.venv/bin/pip index:*)",
72
+ "Bash(python -m examples.demo_app --verbose)",
73
+ "Bash(python -m examples.memory_agent)",
74
+ "Bash(python -m examples.skill_agent)",
75
+ "Bash(python -m examples.tool_agent)",
76
+ "Bash(python -m examples.demo_app --mode capability_error)",
77
+ "Bash(pdoc symfonic.core --output-dir docs/api)",
78
+ "Bash(for d:*)",
79
+ "Bash(do echo:*)",
80
+ "Read(//Users/amielsinue/Development/amsidev/products/symfonic/examples/**)",
81
+ "Bash(done)",
82
+ "Bash(.venv/bin/python -m pytest --co -q)",
83
+ "Bash(.venv/bin/python -m build --help)",
84
+ "Bash(.venv/bin/pip install:*)",
85
+ "Bash(.venv/bin/python -m build 2>&1)",
86
+ "Bash(chmod:*)",
87
+ "Bash(PYTHONPATH=src .venv/bin/python -m pdoc --output-directory docs/api --docformat google symfonic.core 2>&1)",
88
+ "Bash(PYTHONPATH=src .venv/bin/python -m pytest tests/integration/test_example_validation.py -v 2>&1)",
89
+ "Bash(PYTHONPATH=src .venv/bin/python -m pytest --tb=short -q 2>&1)",
90
+ "Bash(python -m build)",
91
+ "Bash(twine upload:*)",
92
+ "Bash(pytest tests/unit/test_callback_contracts.py tests/unit/test_callback_protocol.py -q --tb=short)",
93
+ "Bash(pip show:*)",
94
+ "Bash(python -c \"import symfonic.core; print\\(symfonic.core.__file__\\)\")",
95
+ "Bash(python -c \"import sys; print\\([p for p in sys.path if ''symfonic'' in p or ''src'' in p]\\)\")",
96
+ "Bash(python -c \"import symfonic.core.contracts; print\\(symfonic.core.contracts.__file__\\)\")",
97
+ "Bash(python -c \"from symfonic.core.contracts.callbacks import AgentStartEvent; print\\(AgentStartEvent\\)\")",
98
+ "Bash(python -m pytest tests/unit/test_callback_contracts.py -q --tb=short)",
99
+ "Bash(source /Users/amielsinue/Development/amsidev/products/symfonic-core/.venv/bin/activate)",
100
+ "Bash(pytest tests/unit/test_callback_contracts.py -q --tb=short)",
101
+ "Bash(python -c \"import symfonic.core.contracts.callbacks; print\\(''ok''\\)\")",
102
+ "Bash(pytest --co tests/unit/test_critical_paths.py)",
103
+ "Bash(python:*)",
104
+ "Bash(/Users/amielsinue/.pyenv/versions/3.12.9/envs/venv/bin/python -c \"import symfonic.core.contracts.callbacks; print\\('ok'\\)\" 2>&1)",
105
+ "Bash(/Users/amielsinue/.pyenv/versions/3.12.9/envs/venv/bin/pip install:*)",
106
+ "Bash(/Users/amielsinue/.pyenv/versions/3.12.9/envs/venv/bin/python -c \"from symfonic.core.contracts.callbacks import AgentStartEvent; print\\('ok'\\)\" 2>&1)",
107
+ "Bash(pytest:*)",
108
+ "Bash(python3 -c \":*)",
109
+ "Bash(poetry run:*)",
110
+ "Bash(.venv/bin/pytest --tb=short -q)",
111
+ "Bash(/Users/amielsinue/Development/amsidev/products/symfonic-core/.venv/bin/python -m pytest --tb=short -q)",
112
+ "Bash(uv run:*)",
113
+ "Bash(.venv/bin/pytest tests/ --tb=short -q)",
114
+ "Bash(find /Users/amielsinue/Development/amsidev/products/symfonic-core/src -name testing* -type f)",
115
+ "Bash(find /Users/amielsinue/Development/amsidev/products/symfonic-core/src -path */testing*)",
116
+ "Bash(find . -name doubles.py -path */tests/*)",
117
+ "Bash(git checkout:*)",
118
+ "Bash(gh pr:*)",
119
+ "Bash(grep -rn from.*nodes src/symfonic/core/deps.py src/symfonic/core/providers.py src/symfonic/core/graph.py src/symfonic/core/runtime.py)",
120
+ "Bash(.venv/bin/pytest --co -q)",
121
+ "Bash(python3 -m pytest --co -q)"
122
+ ]
123
+ }
124
+ }
@@ -0,0 +1,8 @@
1
+ # Symfonic Core — Environment Variables
2
+ # Copy to .env and fill in your values: cp .env.example .env
3
+
4
+ # Required for examples/real_agent and AnthropicProvider
5
+ ANTHROPIC_API_KEY=sk-ant-your-key-here
6
+
7
+ # Optional: Override default model (default: claude-sonnet-4-20250514)
8
+ # SYMFONIC_MODEL_NAME=claude-sonnet-4-20250514
@@ -0,0 +1,36 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ dist/
6
+ build/
7
+ *.egg
8
+
9
+ # Virtual environments
10
+ .venv/
11
+ venv/
12
+
13
+ # Testing
14
+ .coverage
15
+ htmlcov/
16
+ .pytest_cache/
17
+
18
+ # IDE
19
+ .idea/
20
+ .vscode/
21
+ *.swp
22
+
23
+ # Tools
24
+ .ruff_cache/
25
+ .mypy_cache/
26
+
27
+ # Environment
28
+ .env
29
+
30
+ # Generated docs
31
+ docs/api/
32
+
33
+ # Agent memory (per-developer)
34
+ .agent/
35
+ **/__pycache__/
36
+ .DS_Store
@@ -0,0 +1,73 @@
1
+ # Changelog
2
+
3
+ All notable changes to symfonic-core will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.1.0] - 2026-03-19
9
+
10
+ Initial release of symfonic-core.
11
+
12
+ ### Added
13
+
14
+ #### Phase 1 -- Graph Primitives
15
+ - `AgentGraph` for declarative node/edge wiring
16
+ - `AgentRuntime` execution engine with LangGraph compilation
17
+ - `BaseAgentDeps` protocol-based dependency injection container
18
+ - `BaseAgentState` TypedDict-based state schema
19
+ - `TenantScope` for multi-tenant isolation
20
+ - `ModelProvider` abstract LLM provider interface
21
+ - `GraphPreset` pre-built graph configurations
22
+ - `AgentConfig`, `ModelConfig`, `CompactionConfig` configuration models
23
+ - Node implementations: context injection, compaction, react
24
+ - Edge definitions with tool condition routing
25
+ - `ObservabilityHook` lifecycle tracing
26
+
27
+ #### Phase 2 -- Tools & Storage
28
+ - `ToolRegistry` with capability-based tool filtering
29
+ - `DocumentStore` protocol and `InMemoryDocumentStore` implementation
30
+ - `SkillStore` protocol and `InMemorySkillStore` implementation
31
+ - `AgentStore` protocol and `InMemoryAgentStore` implementation
32
+ - Memory tools: `memory_read`, `memory_write`, `memory_search`
33
+ - Skill tools: filtering, formatting, markdown utilities
34
+ - Agent tools and chart tools
35
+ - Web tools with capability-gated access
36
+ - `MissingCapabilityError` for clear DI failure messages
37
+
38
+ #### Phase 3 -- Prompt & Streaming
39
+ - `PromptBuilder` with composable, prioritized sections
40
+ - Built-in sections: `ScopeSection`, `MemorySection`, `SkillsSection`, `StaticSection`
41
+ - Stream event types: `TextDeltaEvent`, `MessageEndEvent`, `ExtensionEvent`
42
+ - `process_stream_events` for stream consumption
43
+ - Anthropic and OpenAI streaming adapters
44
+ - `CapabilityError` with structured error codes and metadata
45
+ - External capability contracts (Firecrawl, OpenAI Search)
46
+ - `ContextCollisionError` for context injection conflicts
47
+
48
+ #### Phase 4 -- Hardening
49
+ - 700 unit and integration tests
50
+ - Contract tests for `DocumentStore`, `SkillStore`, `AgentStore`
51
+ - Mock blindspot audit (41 tests verifying test doubles)
52
+ - Critical path tests across all phases
53
+ - Phase 2 and Phase 3 coverage gap tests
54
+ - Import graph validation (no circular dependencies)
55
+ - Public API surface test
56
+
57
+ #### Phase 5 -- Documentation & Examples
58
+ - 5 curated examples: `minimal_agent`, `tool_agent`, `skill_agent`,
59
+ `agent_with_memory`, `e2e_basic_agent`
60
+ - `demo_app` with mock, real, and e2e modes
61
+ - CI example validation test suite (25 tests)
62
+ - API reference generation via pdoc
63
+ - Conceptual documentation: architecture, capabilities, examples learning path
64
+ - Advanced examples directory structure
65
+ - `pyproject.toml` with hatch build and internal PyPI publish config
66
+ - README with installation, quickstart, and API surface overview
67
+
68
+ ### Infrastructure
69
+ - Python 3.11+ with `py.typed` marker for PEP 561
70
+ - Hatchling build backend
71
+ - pytest + pytest-asyncio + pytest-cov test stack
72
+ - ruff linter and mypy strict type checking
73
+ - Internal PyPI at `https://gitea-teotl.amsiops.io/api/packages/AmSiDev/pypi`
@@ -0,0 +1,159 @@
1
+ <!-- MCM:BEGIN - Auto-generated by mcm init. Edit freely, MCM section preserved on updates. -->
2
+ # symfonic - Claude Instructions
3
+
4
+ ## Core Policies (Quick Reference)
5
+
6
+ ### Code Quality
7
+ - **SOLID principles** - Single Responsibility, Open/Closed, Liskov, Interface Segregation, Dependency Inversion
8
+ - **Max 300 lines per file** - Split larger files into modules
9
+ - **One class per file** - Favor composition over inheritance
10
+
11
+ ### Testing
12
+ - **Prefer TDD when feasible** - test first, then implementation
13
+ - **If tests exist:** add/update tests for changed behavior and run relevant suites
14
+ - **If tests do not exist:** propose minimal test setup and commands
15
+
16
+ ### Output (Memory-First)
17
+ - **Default:** Verbal response + memory entry (importance 6-8)
18
+ - **Create files only when:** User explicitly requests
19
+ - **Code files:** Full implementations to `src/`, `tests/` (never summarize)
20
+
21
+ ### Memory
22
+ - **Personal DB:** `.agent/memory/memory.db` (per-developer, gitignored)
23
+ - **Team Memory:** `.agent/team/*.md` (shared, git-committed)
24
+ - **Never store:** API keys, passwords, credentials, PII
25
+ - **Importance:** 9-10 critical, 7-8 significant, 5-6 context
26
+
27
+ ---
28
+
29
+ ## Auto-Delegation
30
+
31
+ When requests match these domains, delegate to specialized agents via Task tool.
32
+
33
+ | Request Contains | Spawn Agent | Example |
34
+ |-----------------|-------------|---------|
35
+ | Docker, CI/CD, containers | `devops-engineer` | "Add Docker config" |
36
+ | Terraform, AWS, IaC | `terraform-engineer` | "Create S3 bucket" |
37
+ | FastAPI, Pydantic | `python-fastapi-pro` | "Add API endpoint" |
38
+ | React, TypeScript | `react-typescript-specialist` | "Create React form" |
39
+ | Flutter, Dart | `flutter-expert` | "Build Flutter screen" |
40
+ | Laravel, PHP | `php-pro` | "Add migration" |
41
+ | pytest, API tests | `api-backend-tester` | "Write API tests" |
42
+ | E2E, Playwright | `api-frontend-tester` | "Add E2E tests" |
43
+ | Architecture | `system-architect` | "Design microservice" |
44
+
45
+ ---
46
+
47
+ ## File Discovery (Token Efficiency)
48
+
49
+ ### 1. Memory Query (Preferred)
50
+ ```bash
51
+ mcm query "authentication login" --claude
52
+ ```
53
+
54
+ ### 2. Code Structure Search
55
+ ```bash
56
+ mcm query "function_name" --tags "code-structure" --claude
57
+ ```
58
+
59
+ ### 3. Glob/Grep (For pattern matching)
60
+ ```bash
61
+ Glob("**/*.go")
62
+ Grep("func authenticate", type="go")
63
+ ```
64
+
65
+ ---
66
+
67
+ ## Memory-First Workflow
68
+
69
+ **Before starting any task:**
70
+
71
+ 1. **Check auto-injected context** - Use it if relevant
72
+ 2. **Query memory** - `mcm query "topic" --claude`
73
+ 3. **Targeted reads only** - Read specific lines, not entire files
74
+ 4. **Store insights** - Important decisions (importance 7-8)
75
+
76
+ **Decision Tree:**
77
+ - Looking for past decisions? -> `mcm query "topic" --claude`
78
+ - Looking for code by concept? -> `mcm query --tags "code-structure"`
79
+ - Need to discover files? -> Glob/Grep
80
+ - None work? -> broader exploration
81
+
82
+ ---
83
+
84
+ ## Memory System
85
+
86
+ - **Personal DB:** `.agent/memory/memory.db` (per-developer, gitignored)
87
+ - **Team Memory:** `.agent/team/*.md` (shared, git-committed)
88
+ - **Hooks:** Auto-injected context via SessionStart, UserPromptSubmit, PreCompact
89
+
90
+ ### Commands
91
+ ```bash
92
+ mcm query "search terms" --claude # Search memory
93
+ mcm store "insight" --importance 7 # Store personal entry
94
+ mcm stats # View statistics
95
+ mcm index # Index code structure
96
+ ```
97
+
98
+ ### Team Memory
99
+
100
+ Store team-worthy decisions so all developers and agents share context:
101
+ ```bash
102
+ mcm team add --type decision --title "Use RS256 JWT" --importance 9 \
103
+ --tags auth,security "We chose RS256 over HS256 because..."
104
+ mcm team list # Show active entries
105
+ mcm team supersede <old-id> --by <new-id> # Mark as replaced
106
+ ```
107
+
108
+ **Store to TEAM memory (`mcm team add`) when another developer would need this.**
109
+ Choose the type based on what the entry IS, not where you found it:
110
+
111
+ | Type | When to use | Ask yourself |
112
+ |------|-------------|--------------|
113
+ | `decision` | A choice was made between alternatives | "Why did we pick X over Y?" |
114
+ | `convention` | A pattern or rule the team must follow | "Should everyone do it this way?" |
115
+ | `infrastructure` | A fact about servers, services, or deployment | "Where is X? How do I connect to Y?" |
116
+ | `issue` | A bug, gotcha, or workaround | "Will someone else hit this same problem?" |
117
+ | `api-contract` | An API shape, endpoint, or schema | "What does this endpoint expect/return?" |
118
+ | `plan` | A feature plan or roadmap item | "What are we building and in what order?" |
119
+
120
+ **Store to PERSONAL memory (`mcm store`) when:**
121
+ - Session-specific debugging notes
122
+ - Local deployment paths and personal workflow
123
+ - Exploration results that may not be final
124
+ - Temporary context for current task
125
+
126
+ ---
127
+
128
+ ## Project-Specific
129
+
130
+ ### Technology Stack
131
+ <!-- List your tech stack -->
132
+
133
+ ### Code Style
134
+ <!-- Describe coding conventions -->
135
+
136
+ ### Architecture Notes
137
+ <!-- Key architectural decisions -->
138
+
139
+ ### Common Tasks
140
+ <!-- Frequent operations -->
141
+
142
+ ---
143
+
144
+ ## Quick Reference
145
+
146
+ | Need To | Action |
147
+ |---------|--------|
148
+ | Find past decisions | `mcm query "topic" --claude` |
149
+ | Find code by concept | `mcm query --tags "code-structure"` |
150
+ | Find code by pattern | Use Grep tool |
151
+ | Store personal insight | `mcm store "insight" --importance 7` |
152
+ | Store team decision | `mcm team add --type decision --title "..." "body"` |
153
+ | List team knowledge | `mcm team list` |
154
+ | Index codebase | `mcm index` |
155
+
156
+ ---
157
+
158
+ *Edit this file for your project. Run `mcm index` after setup.*
159
+ <!-- MCM:END -->