agent-framework-lib 0.7.1__tar.gz → 0.8.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 (296) hide show
  1. {agent_framework_lib-0.7.1/agent_framework_lib.egg-info → agent_framework_lib-0.8.0}/PKG-INFO +2 -2
  2. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/README.md +1 -1
  3. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/__init__.py +2 -2
  4. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/base_agent.py +118 -19
  5. agent_framework_lib-0.8.0/agent_framework/notifications/__init__.py +7 -0
  6. agent_framework_lib-0.8.0/agent_framework/notifications/hub.py +78 -0
  7. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/processing/rich_content_validation.py +223 -54
  8. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/session/session_storage.py +4 -0
  9. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/agent_mixin.py +18 -4
  10. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/discovery_prompt.py +28 -0
  11. agent_framework_lib-0.8.0/agent_framework/subagents/__init__.py +20 -0
  12. agent_framework_lib-0.8.0/agent_framework/subagents/executor.py +655 -0
  13. agent_framework_lib-0.8.0/agent_framework/subagents/message_injector.py +121 -0
  14. agent_framework_lib-0.8.0/agent_framework/subagents/message_queue.py +74 -0
  15. agent_framework_lib-0.8.0/agent_framework/subagents/retrigger.py +187 -0
  16. agent_framework_lib-0.8.0/agent_framework/subagents/spawn_tool.py +264 -0
  17. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/utils/post_install.py +21 -3
  18. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/CREATING_AGENTS.md +3 -0
  19. agent_framework_lib-0.8.0/agent_framework/web/docs/CUSTOM_SKILLS_GUIDE.md +1439 -0
  20. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/README.md +1 -1
  21. agent_framework_lib-0.8.0/agent_framework/web/docs/WORKSPACE_INTEGRATION.md +252 -0
  22. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/documentation_generator.py +48 -23
  23. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/modern_ui.html +395 -80
  24. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/server.py +129 -0
  25. agent_framework_lib-0.8.0/agent_framework/workspace/__init__.py +53 -0
  26. agent_framework_lib-0.8.0/agent_framework/workspace/artefacts.py +168 -0
  27. agent_framework_lib-0.8.0/agent_framework/workspace/client.py +391 -0
  28. agent_framework_lib-0.8.0/agent_framework/workspace/config.py +46 -0
  29. agent_framework_lib-0.8.0/agent_framework/workspace/context.py +97 -0
  30. agent_framework_lib-0.8.0/agent_framework/workspace/cursor.py +110 -0
  31. agent_framework_lib-0.8.0/agent_framework/workspace/memory.py +172 -0
  32. agent_framework_lib-0.8.0/agent_framework/workspace/models.py +71 -0
  33. agent_framework_lib-0.8.0/agent_framework/workspace/poller.py +175 -0
  34. agent_framework_lib-0.8.0/agent_framework/workspace/preferences.py +96 -0
  35. agent_framework_lib-0.8.0/agent_framework/workspace/router.py +420 -0
  36. agent_framework_lib-0.8.0/agent_framework/workspace/session.py +247 -0
  37. agent_framework_lib-0.8.0/agent_framework/workspace/subscription.py +85 -0
  38. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0/agent_framework_lib.egg-info}/PKG-INFO +2 -2
  39. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework_lib.egg-info/SOURCES.txt +26 -1
  40. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/CREATING_AGENTS.md +3 -0
  41. agent_framework_lib-0.8.0/docs/CUSTOM_SKILLS_GUIDE.md +1439 -0
  42. {agent_framework_lib-0.7.1/agent_framework/web → agent_framework_lib-0.8.0}/docs/GETTING_STARTED.md +12 -12
  43. agent_framework_lib-0.8.0/docs/SCREENSHOTS_GUIDE.md +201 -0
  44. agent_framework_lib-0.8.0/docs/SSE_NOTIFICATIONS_GUIDE.md +825 -0
  45. agent_framework_lib-0.8.0/docs/WORKSPACE_INTEGRATION.md +252 -0
  46. agent_framework_lib-0.8.0/examples/workspace_test_agent.py +135 -0
  47. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/pyproject.toml +1 -1
  48. agent_framework_lib-0.7.1/agent_framework/subagents/__init__.py +0 -10
  49. agent_framework_lib-0.7.1/agent_framework/subagents/spawn_tool.py +0 -187
  50. agent_framework_lib-0.7.1/docs/SKILLS_AND_SUBAGENTS_ANALYSIS.md +0 -367
  51. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/ARCHITECTURE.md +0 -0
  52. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/LICENSE +0 -0
  53. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/MANIFEST.in +0 -0
  54. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/__init__.py +0 -0
  55. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/base.py +0 -0
  56. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/__init__.py +0 -0
  57. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
  58. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
  59. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
  60. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
  61. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
  62. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
  63. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
  64. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/models.py +0 -0
  65. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/providers/__init__.py +0 -0
  66. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
  67. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/a2a/providers/postgres_provider.py +0 -0
  68. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/capabilities/__init__.py +0 -0
  69. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/capabilities/resolver.py +0 -0
  70. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/chart_generation/llm_refinement_loop.py +0 -0
  71. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/__init__.py +0 -0
  72. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/activity_formatter.py +0 -0
  73. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/agent_interface.py +0 -0
  74. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/agent_provider.py +0 -0
  75. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/context_budget.py +0 -0
  76. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/context_summarizer.py +0 -0
  77. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/elasticsearch_config_provider.py +0 -0
  78. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/implementation_validator.py +0 -0
  79. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/knowledge_state.py +0 -0
  80. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/loop_detector.py +0 -0
  81. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/model_clients.py +0 -0
  82. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/model_config.py +0 -0
  83. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/model_router.py +0 -0
  84. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/models.py +0 -0
  85. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/provider_calibration.py +0 -0
  86. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/rich_content_prompt_unsused_to_be_deleted.py +0 -0
  87. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/scratchpad_compressor.py +0 -0
  88. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/state_manager.py +0 -0
  89. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/step_display_config.py +0 -0
  90. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/core/streaming_parts_accumulator.py +0 -0
  91. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/implementations/__init__.py +0 -0
  92. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/implementations/budget_aware_agent.py +0 -0
  93. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/implementations/llamaindex_agent.py +0 -0
  94. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
  95. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/implementations/microsoft_agent.py +0 -0
  96. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/memory/__init__.py +0 -0
  97. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/memory/agent_mixin.py +0 -0
  98. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/memory/base.py +0 -0
  99. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/memory/config.py +0 -0
  100. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/memory/manager.py +0 -0
  101. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/memory/personalization.py +0 -0
  102. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/memory/providers/__init__.py +0 -0
  103. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/memory/providers/graphiti_provider.py +0 -0
  104. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/memory/providers/memori_provider.py +0 -0
  105. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/memory/tools.py +0 -0
  106. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/__init__.py +0 -0
  107. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/api_timing_tracker.py +0 -0
  108. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
  109. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
  110. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/error_handling.py +0 -0
  111. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/error_logging.py +0 -0
  112. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
  113. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/llm_metrics.py +0 -0
  114. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/llm_metrics_collector.py +0 -0
  115. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
  116. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/metrics_aggregator.py +0 -0
  117. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/metrics_config.py +0 -0
  118. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/observability_manager.py +0 -0
  119. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/otel_instrumentor.py +0 -0
  120. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/otel_logging_handler.py +0 -0
  121. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
  122. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/otel_setup.py +0 -0
  123. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/performance_monitor.py +0 -0
  124. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/progress_tracker.py +0 -0
  125. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/resource_manager.py +0 -0
  126. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
  127. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
  128. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/timing_tracker.py +0 -0
  129. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/token_counter.py +0 -0
  130. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/monitoring/tracing_context.py +0 -0
  131. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/processing/__init__.py +0 -0
  132. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/processing/ai_content_management.py +0 -0
  133. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/processing/markdown_converter.py +0 -0
  134. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/processing/multimodal_integration.py +0 -0
  135. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/py.typed +0 -0
  136. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/session/__init__.py +0 -0
  137. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/session/elasticsearch_session_storage.py +0 -0
  138. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/__init__.py +0 -0
  139. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/base.py +0 -0
  140. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/__init__.py +0 -0
  141. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/chart_skill.py +0 -0
  142. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/drawio_skill.py +0 -0
  143. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/excel_skill.py +0 -0
  144. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/file_access_skill.py +0 -0
  145. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/file_skill.py +0 -0
  146. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/form_skill.py +0 -0
  147. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/image_display_skill.py +0 -0
  148. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/mermaid_skill.py +0 -0
  149. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/multimodal_skill.py +0 -0
  150. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/optionsblock_skill.py +0 -0
  151. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/pdf_skill.py +0 -0
  152. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/pdf_with_images_skill.py +0 -0
  153. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/scripts/__init__.py +0 -0
  154. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/scripts/create_and_register.py +0 -0
  155. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/scripts/register_to_storage.py +0 -0
  156. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/chart/SKILL.md +0 -0
  157. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/chart/chart_to_image.py +0 -0
  158. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/drawio/SKILL.md +0 -0
  159. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/drawio/create_drawio.py +0 -0
  160. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/excel/SKILL.md +0 -0
  161. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/excel/create_excel.py +0 -0
  162. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/file/SKILL.md +0 -0
  163. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/file/create_file.py +0 -0
  164. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/file/list_files.py +0 -0
  165. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/file/read_file.py +0 -0
  166. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/file_access/SKILL.md +0 -0
  167. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/file_access/get_file_path.py +0 -0
  168. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/form/SKILL.md +0 -0
  169. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/image_display/SKILL.md +0 -0
  170. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/mermaid/SKILL.md +0 -0
  171. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +0 -0
  172. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/multimodal/SKILL.md +0 -0
  173. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +0 -0
  174. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/table/SKILL.md +0 -0
  175. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/table/table_to_image.py +0 -0
  176. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +0 -0
  177. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +0 -0
  178. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/web_search/SKILL.md +0 -0
  179. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/web_search/web_news_search.py +0 -0
  180. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/web_search/web_search.py +0 -0
  181. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/table_skill.py +0 -0
  182. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/unified_pdf_skill.py +0 -0
  183. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/web_search_skill.py +0 -0
  184. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/custom_skill_manager.py +0 -0
  185. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/markdown_loader.py +0 -0
  186. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/skills/tools.py +0 -0
  187. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/storage/__init__.py +0 -0
  188. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/storage/file_storages.py +0 -0
  189. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/storage/file_system_management.py +0 -0
  190. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/storage/storage_optimizer.py +0 -0
  191. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/__init__.py +0 -0
  192. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/activity_callback.py +0 -0
  193. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/adaptive_pdf_css.py +0 -0
  194. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/base.py +0 -0
  195. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/chart_tools.py +0 -0
  196. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/drawio_tools.py +0 -0
  197. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/excel_tools.py +0 -0
  198. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/file_access_tools.py +0 -0
  199. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/file_tools.py +0 -0
  200. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/html_content_analyzer.py +0 -0
  201. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/mermaid_tools.py +0 -0
  202. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/multimodal_tools.py +0 -0
  203. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/pdf_image_scaler.py +0 -0
  204. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/pdf_tools.py +0 -0
  205. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/pdf_with_images_tool.py +0 -0
  206. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/shell_tool.py +0 -0
  207. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/sizing_config.py +0 -0
  208. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/tabledata_tools.py +0 -0
  209. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/unified_pdf_tool.py +0 -0
  210. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/web_fetch_tool.py +0 -0
  211. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/tools/web_search_tools.py +0 -0
  212. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/utils/__init__.py +0 -0
  213. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/utils/path_utils.py +0 -0
  214. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/utils/session_title_generator.py +0 -0
  215. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/utils/source_detector.py +0 -0
  216. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/utils/special_blocks.py +0 -0
  217. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/__init__.py +0 -0
  218. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/admin_auth.py +0 -0
  219. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/admin_models.py +0 -0
  220. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/admin_router.py +0 -0
  221. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/admin_services.py +0 -0
  222. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/api_timing_middleware.py +0 -0
  223. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
  224. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
  225. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/Dockerfile +0 -0
  226. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0/agent_framework/web}/docs/GETTING_STARTED.md +0 -0
  227. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
  228. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  229. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/api-reference.md +0 -0
  230. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/configuration.md +0 -0
  231. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/docker-compose.yml +0 -0
  232. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_example_multi_skills.py +0 -0
  233. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_with_file_storage.py +0 -0
  234. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_with_mcp.py +0 -0
  235. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_with_memory.py +0 -0
  236. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_with_memory_graphiti.py +0 -0
  237. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_with_memory_hybrid.py +0 -0
  238. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_with_memory_simple.py +0 -0
  239. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/custom_framework_agent.py +0 -0
  240. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/simple_agent.py +0 -0
  241. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/skills_demo_agent.py +0 -0
  242. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/docs/installation-guide.md +0 -0
  243. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/helper_agent.py +0 -0
  244. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/helper_ui.html +0 -0
  245. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/observability/kibana-llm-dashboard-setup.json +0 -0
  246. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/observability/kibana-resource-metrics-dashboard.json +0 -0
  247. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/otel_tracing_middleware.py +0 -0
  248. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/skills_router.py +0 -0
  249. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework/web/test_app.html +0 -0
  250. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
  251. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework_lib.egg-info/entry_points.txt +0 -0
  252. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework_lib.egg-info/requires.txt +0 -0
  253. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/agent_framework_lib.egg-info/top_level.txt +0 -0
  254. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/A2A_GUIDE.md +0 -0
  255. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
  256. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/ARCHITECTURE_DIAGRAM.md +0 -0
  257. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
  258. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/DOCKER_SETUP.md +0 -0
  259. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +0 -0
  260. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
  261. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/FILE_STORAGE_GUIDE.md +0 -0
  262. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/HISTORY_MESSAGE_FORMAT.md +0 -0
  263. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
  264. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/MEMORY_INSTALLATION.md +0 -0
  265. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
  266. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/MULTIMODAL_TOOLS_GUIDE.md +0 -0
  267. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/OBSERVABILITY_GUIDE.md +0 -0
  268. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/PYPI_PUBLISHING.md +0 -0
  269. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/QA_STREAMING_LATENCY.md +0 -0
  270. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
  271. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/STREAMING_EVENTS_FRONTEND.md +0 -0
  272. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  273. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/api-reference.md +0 -0
  274. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/configuration.md +0 -0
  275. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/framework_audit_remarques.md +0 -0
  276. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/docs/installation-guide.md +0 -0
  277. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/README.md +0 -0
  278. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/agent_context_budget_test.py +0 -0
  279. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/agent_example_multi_skills.py +0 -0
  280. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/agent_exemple_test.py +0 -0
  281. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/agent_training_with_apo.py +0 -0
  282. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/agent_with_custom_tools_file_storage.py +0 -0
  283. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/agent_with_file_storage.py +0 -0
  284. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/agent_with_mcp.py +0 -0
  285. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/agent_with_memory_graphiti.py +0 -0
  286. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/agent_with_memory_hybrid.py +0 -0
  287. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/agent_with_memory_simple.py +0 -0
  288. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/agent_with_personalization.py +0 -0
  289. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/biagenttest.py +0 -0
  290. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/custom_framework_agent.py +0 -0
  291. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/dependencies/docker-compose.yaml +0 -0
  292. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/pyproject.toml +0 -0
  293. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/simple_agent.py +0 -0
  294. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/examples/skills_demo_agent.py +0 -0
  295. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/setup.cfg +0 -0
  296. {agent_framework_lib-0.7.1 → agent_framework_lib-0.8.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-framework-lib
3
- Version: 0.7.1
3
+ Version: 0.8.0
4
4
  Summary: A comprehensive Python framework for building and serving conversational AI agents with FastAPI
5
5
  Author-email: Sebastian Pavel <sebastian@cinco.ai>, Elliott Girard <elliott.girard@icloud.com>
6
6
  Maintainer-email: Sebastian Pavel <sebastian@cinco.ai>
@@ -999,7 +999,7 @@ class MySkillsAgent(LlamaIndexAgent):
999
999
  5. Agent executes via `shell_exec` → script generates the chart
1000
1000
  6. Optionally calls `unload_skill("chart")` when done
1001
1001
 
1002
- **More info:** See [Creating Agents Guide](docs/CREATING_AGENTS.md#skills-integration) and [skills_demo_agent.py](examples/skills_demo_agent.py)
1002
+ **More info:** See [Custom Skills Guide](docs/CUSTOM_SKILLS_GUIDE.md), [Creating Agents Guide](docs/CREATING_AGENTS.md#skills-integration) and [skills_demo_agent.py](examples/skills_demo_agent.py)
1003
1003
 
1004
1004
  ## 📝 Rich Content Capabilities (Automatic)
1005
1005
 
@@ -853,7 +853,7 @@ class MySkillsAgent(LlamaIndexAgent):
853
853
  5. Agent executes via `shell_exec` → script generates the chart
854
854
  6. Optionally calls `unload_skill("chart")` when done
855
855
 
856
- **More info:** See [Creating Agents Guide](docs/CREATING_AGENTS.md#skills-integration) and [skills_demo_agent.py](examples/skills_demo_agent.py)
856
+ **More info:** See [Custom Skills Guide](docs/CUSTOM_SKILLS_GUIDE.md), [Creating Agents Guide](docs/CREATING_AGENTS.md#skills-integration) and [skills_demo_agent.py](examples/skills_demo_agent.py)
857
857
 
858
858
  ## 📝 Rich Content Capabilities (Automatic)
859
859
 
@@ -32,7 +32,7 @@ Example Usage:
32
32
  create_basic_agent_server(MyAgent, port=8000)
33
33
  ```
34
34
 
35
- Version: 0.7.1
35
+ Version: 0.7.2
36
36
  Author: Cinco AI Team
37
37
  License: MIT
38
38
  """
@@ -88,7 +88,7 @@ def _auto_setup_dependencies() -> None:
88
88
  # Track if auto-setup has been done
89
89
  _AUTO_SETUP_DONE = False
90
90
 
91
- __version__ = "0.7.1"
91
+ __version__ = "0.7.2"
92
92
  __author__ = "Cinco AI Team"
93
93
  __license__ = "MIT"
94
94
  __email__ = "sebastian@cinco.ai"
@@ -22,7 +22,13 @@ import time
22
22
  from abc import abstractmethod
23
23
  from collections.abc import AsyncGenerator
24
24
  from datetime import datetime, timezone
25
- from typing import Any
25
+ from typing import TYPE_CHECKING, Any
26
+
27
+ if TYPE_CHECKING:
28
+ from ..capabilities.resolver import CapabilitySet
29
+ from ..subagents.executor import SubagentExecutor
30
+ from ..subagents.message_queue import SessionMessageQueue
31
+ from ..subagents.spawn_tool import SubagentSpawnTool
26
32
 
27
33
  from ..monitoring.streaming_latency_tracer import get_streaming_latency_tracer
28
34
  from ..utils.special_blocks import parse_special_blocks_from_text
@@ -231,6 +237,15 @@ class BaseAgent(SkillsMixin, MemoryMixin, AgentInterface):
231
237
  self._agent_built: bool = False
232
238
  self._state_ctx: Any | None = None
233
239
 
240
+ # Subagent execution support (optional, injected post-init)
241
+ self._subagent_executor: SubagentExecutor | None = None
242
+ self._capability_set: CapabilitySet | None = None
243
+ self._message_queue: SessionMessageQueue | None = None
244
+ self._current_session_id: str | None = None
245
+ self._current_user_id: str | None = None
246
+ self._current_spawn_depth: int = 0
247
+ self._file_storage_session_id: str | None = None
248
+
234
249
  # Initialize parent classes (including SkillsMixin and MemoryMixin if available)
235
250
  super().__init__()
236
251
 
@@ -334,6 +349,43 @@ class BaseAgent(SkillsMixin, MemoryMixin, AgentInterface):
334
349
  """
335
350
  return None
336
351
 
352
+ def set_subagent_executor(self, executor: "SubagentExecutor | None") -> None:
353
+ """Inject or remove the shared SubagentExecutor.
354
+
355
+ Automatically extracts the SessionMessageQueue from the executor's
356
+ MessageInjector when an executor is provided.
357
+ """
358
+ self._subagent_executor = executor
359
+ if executor is not None:
360
+ self._message_queue = executor._message_injector.get_queue()
361
+ else:
362
+ self._message_queue = None
363
+
364
+ def _create_subagent_spawn_tool(self) -> "SubagentSpawnTool | None":
365
+ """Create the SubagentSpawnTool if all conditions are met.
366
+
367
+ Returns None when the executor, capability_set, or the
368
+ 'subagent:spawn' capability is absent.
369
+ """
370
+ if self._subagent_executor is None:
371
+ return None
372
+ if self._capability_set is None:
373
+ return None
374
+ if "subagent:spawn" not in self._capability_set.native_tools:
375
+ return None
376
+
377
+ from ..subagents.spawn_tool import SubagentSpawnTool
378
+
379
+ return SubagentSpawnTool(
380
+ capability_set=self._capability_set,
381
+ current_depth=self._current_spawn_depth,
382
+ activity_callback=getattr(self, "_activity_callback", None),
383
+ executor=self._subagent_executor,
384
+ parent_session_id=self._current_session_id or "",
385
+ parent_user_id=self._current_user_id or "",
386
+ agent_class=type(self),
387
+ )
388
+
337
389
  async def process_streaming_event(self, event: Any) -> dict[str, Any] | None:
338
390
  """
339
391
  Convert framework-specific streaming events to unified format.
@@ -528,21 +580,16 @@ class BaseAgent(SkillsMixin, MemoryMixin, AgentInterface):
528
580
 
529
581
  async def _get_all_tools(self) -> list[callable]:
530
582
  """
531
- Get all tools including agent-defined tools, skill tools, and memory tools.
532
-
533
- When skills are enabled, ALL registered skill tools are included automatically.
534
- This ensures tools are available immediately without requiring load_skill() first.
583
+ Get all tools including agent-defined tools, skill management, memory, and spawn tools.
535
584
 
536
585
  Tool Loading Order:
537
586
  1. Agent's custom tools (from get_agent_tools())
538
587
  2. Skill management tools (list_skills, load_skill, unload_skill)
539
- 3. ALL registered skill tools (chart, mermaid, pdf, etc.)
540
- 4. Memory tools (if memory is configured)
541
-
542
- This order ensures no conflicts and proper tool availability.
588
+ 3. Memory tools (if memory is configured)
589
+ 4. SubagentSpawnTool (if executor + capability_set configured)
543
590
 
544
591
  Returns:
545
- Combined list of agent tools, skill management tools, skill tools, and memory tools
592
+ Combined list of all available tools for this agent.
546
593
  """
547
594
  # 1. Get base tools from agent implementation
548
595
  tools = self.get_agent_tools()
@@ -557,14 +604,18 @@ class BaseAgent(SkillsMixin, MemoryMixin, AgentInterface):
557
604
  f"🎯 Added {len(skill_mgmt_tools)} skill management tools to agent {self.agent_id}"
558
605
  )
559
606
 
560
- # 3. Add tools from ALL registered skills (not just loaded ones)
561
- # This is the key fix: tools must be available before load_skill() is called
562
- all_skill_tools = self.get_all_registered_skill_tools()
563
- if all_skill_tools:
564
- tools = tools + all_skill_tools
565
- logger.info(f"🔧 Added {len(all_skill_tools)} skill tools to agent {self.agent_id}")
607
+ # 2b. Add native skill tools (shell_exec, web_fetch, etc.)
608
+ try:
609
+ skill_tools = self.get_all_registered_skill_tools()
610
+ if skill_tools:
611
+ tools = tools + skill_tools
612
+ logger.info(
613
+ f"🔧 Added {len(skill_tools)} skill tools to agent {self.agent_id}"
614
+ )
615
+ except Exception as e:
616
+ logger.warning(f"Failed to collect skill tools: {e}")
566
617
 
567
- # 4. Add memory tools if memory is configured (AFTER skill tools)
618
+ # 3. Add memory tools if memory is configured
568
619
  if MEMORY_AVAILABLE and hasattr(self, "_ensure_memory_initialized"):
569
620
  try:
570
621
  # Initialize memory if configured (this is async)
@@ -579,6 +630,15 @@ class BaseAgent(SkillsMixin, MemoryMixin, AgentInterface):
579
630
  except Exception as e:
580
631
  logger.warning(f"Failed to add memory tools: {e}")
581
632
 
633
+ # 4. Add subagent spawn tool if configured
634
+ try:
635
+ spawn_tool = self._create_subagent_spawn_tool()
636
+ if spawn_tool is not None:
637
+ tools = tools + [spawn_tool.get_tool_function()]
638
+ logger.info(f"🤖 Added SubagentSpawnTool to agent {self.agent_id}")
639
+ except Exception as e:
640
+ logger.warning(f"Failed to create SubagentSpawnTool: {e}")
641
+
582
642
  logger.debug(f"📊 Total tools for agent {self.agent_id}: {len(tools)}")
583
643
  return tools
584
644
 
@@ -627,6 +687,21 @@ class BaseAgent(SkillsMixin, MemoryMixin, AgentInterface):
627
687
  if "model_name" in session_configuration:
628
688
  self._session_model_name = session_configuration["model_name"]
629
689
 
690
+ if "capability_set" in session_configuration:
691
+ self._capability_set = session_configuration["capability_set"]
692
+ if "session_id" in session_configuration:
693
+ self._current_session_id = session_configuration["session_id"]
694
+ if "user_id" in session_configuration:
695
+ self._current_user_id = session_configuration["user_id"]
696
+ if "spawn_depth" in session_configuration:
697
+ self._current_spawn_depth = session_configuration["spawn_depth"]
698
+
699
+ # Use parent's session_id for file storage if configured (subagent file sharing)
700
+ if "file_storage_session_id" in session_configuration:
701
+ self._file_storage_session_id = session_configuration["file_storage_session_id"]
702
+ else:
703
+ self._file_storage_session_id = None
704
+
630
705
  # --- Automatic personalization injection ---
631
706
  # Activated when PERSONALIZATION_ENABLED=true (default) AND memory is available.
632
707
  # If the prompt contains {{native_user_preferences}}, it is replaced with the user's facts.
@@ -846,6 +921,18 @@ class BaseAgent(SkillsMixin, MemoryMixin, AgentInterface):
846
921
  # Build full query including file content from parts
847
922
  full_query = self._build_full_query(agent_input)
848
923
 
924
+ # Drain pending subagent messages and prepend to query
925
+ if hasattr(self, '_message_queue') and self._message_queue is not None:
926
+ try:
927
+ pending = await self._message_queue.drain(session_id)
928
+ if pending:
929
+ injected = "\n\n".join(
930
+ f"[Résultat sous-agent]\n{msg}" for msg in pending
931
+ )
932
+ full_query = f"{injected}\n\n{full_query}"
933
+ except Exception:
934
+ logger.warning("Failed to drain subagent message queue", exc_info=True)
935
+
849
936
  # === PASSIVE MEMORY INJECTION ===
850
937
  # Inject memory context if memory is enabled and passive injection is configured
851
938
  if MEMORY_AVAILABLE and hasattr(self, "memory_enabled") and self.memory_enabled:
@@ -930,7 +1017,7 @@ class BaseAgent(SkillsMixin, MemoryMixin, AgentInterface):
930
1017
  try:
931
1018
  from ..processing.rich_content_validation import validate_rich_content
932
1019
 
933
- cleaned = validate_rich_content(cleaned)
1020
+ cleaned = await validate_rich_content(cleaned)
934
1021
  logger.debug("Rich content validation completed")
935
1022
  except ImportError:
936
1023
  logger.debug("Rich content validation module not available, skipping")
@@ -1105,6 +1192,18 @@ class BaseAgent(SkillsMixin, MemoryMixin, AgentInterface):
1105
1192
  logger.warning(f"Failed to inject memory context (streaming): {e}")
1106
1193
  # Continue without memory context - don't fail the message
1107
1194
 
1195
+ # Drain pending subagent messages and prepend to query
1196
+ if hasattr(self, '_message_queue') and self._message_queue is not None:
1197
+ try:
1198
+ pending = await self._message_queue.drain(session_id)
1199
+ if pending:
1200
+ injected = "\n\n".join(
1201
+ f"[Résultat sous-agent]\n{msg}" for msg in pending
1202
+ )
1203
+ full_query = f"{injected}\n\n{full_query}"
1204
+ except Exception:
1205
+ logger.warning("Failed to drain subagent message queue", exc_info=True)
1206
+
1108
1207
  # Use run_agent in streaming mode
1109
1208
  stream_generator = await self.run_agent(full_query, ctx, stream=True)
1110
1209
 
@@ -1310,7 +1409,7 @@ class BaseAgent(SkillsMixin, MemoryMixin, AgentInterface):
1310
1409
  try:
1311
1410
  from ..processing.rich_content_validation import validate_rich_content
1312
1411
 
1313
- cleaned = validate_rich_content(cleaned)
1412
+ cleaned = await validate_rich_content(cleaned)
1314
1413
  logger.debug("Rich content validation completed")
1315
1414
  except ImportError:
1316
1415
  logger.debug("Rich content validation module not available, skipping")
@@ -0,0 +1,7 @@
1
+ """Notification pub/sub components for real-time SSE event distribution."""
2
+
3
+ from agent_framework.notifications.hub import NotificationHub
4
+
5
+ __all__ = [
6
+ "NotificationHub",
7
+ ]
@@ -0,0 +1,78 @@
1
+ """In-memory pub/sub component for per-session SSE notifications."""
2
+
3
+ import asyncio
4
+ import logging
5
+ from typing import Any
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+
10
+ class NotificationHub:
11
+ """Per-session event pub/sub for SSE notifications.
12
+
13
+ Manages subscriber queues per session and distributes events
14
+ to all active subscribers using non-blocking put operations.
15
+ """
16
+
17
+ def __init__(self) -> None:
18
+ self._subscriptions: dict[str, set[asyncio.Queue[dict[str, Any]]]] = {}
19
+ self._lock = asyncio.Lock()
20
+
21
+ async def subscribe(self, session_id: str) -> asyncio.Queue[dict[str, Any]]:
22
+ """Register a new subscriber for a session.
23
+
24
+ Args:
25
+ session_id: The session to subscribe to.
26
+
27
+ Returns:
28
+ A queue to await events from. Bounded to 100 items.
29
+ """
30
+ queue: asyncio.Queue[dict[str, Any]] = asyncio.Queue(maxsize=100)
31
+ async with self._lock:
32
+ if session_id not in self._subscriptions:
33
+ self._subscriptions[session_id] = set()
34
+ self._subscriptions[session_id].add(queue)
35
+ return queue
36
+
37
+ async def unsubscribe(self, session_id: str, queue: asyncio.Queue[dict[str, Any]]) -> None:
38
+ """Remove a subscriber's queue from a session.
39
+
40
+ No-op if the queue was already removed or the session has no subscribers.
41
+
42
+ Args:
43
+ session_id: The session to unsubscribe from.
44
+ queue: The subscriber queue to remove.
45
+ """
46
+ async with self._lock:
47
+ subscribers = self._subscriptions.get(session_id)
48
+ if subscribers is None:
49
+ return
50
+ subscribers.discard(queue)
51
+ if not subscribers:
52
+ del self._subscriptions[session_id]
53
+
54
+ async def publish(self, session_id: str, event: dict[str, Any]) -> None:
55
+ """Distribute an event to all active subscribers for a session.
56
+
57
+ Non-blocking, best-effort delivery. If a subscriber's queue is full,
58
+ the event is dropped for that subscriber only.
59
+
60
+ Args:
61
+ session_id: The target session.
62
+ event: The event dict to distribute.
63
+ """
64
+ async with self._lock:
65
+ subscribers = self._subscriptions.get(session_id)
66
+ if subscribers is None:
67
+ return
68
+ # Snapshot to avoid mutation during iteration
69
+ queues = list(subscribers)
70
+
71
+ for queue in queues:
72
+ try:
73
+ queue.put_nowait(event)
74
+ except asyncio.QueueFull:
75
+ logger.warning(
76
+ "Dropping notification event for session %s: subscriber queue full",
77
+ session_id,
78
+ )