agent-framework-lib 0.7.0.post2__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.
- {agent_framework_lib-0.7.0.post2/agent_framework_lib.egg-info → agent_framework_lib-0.8.0}/PKG-INFO +2 -2
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/README.md +1 -1
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/__init__.py +2 -2
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/base_agent.py +118 -19
- agent_framework_lib-0.8.0/agent_framework/notifications/__init__.py +7 -0
- agent_framework_lib-0.8.0/agent_framework/notifications/hub.py +78 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/processing/rich_content_validation.py +223 -54
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/session/session_storage.py +4 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/agent_mixin.py +18 -4
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/base.py +4 -2
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/custom_skill_manager.py +34 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/discovery_prompt.py +28 -0
- agent_framework_lib-0.8.0/agent_framework/subagents/__init__.py +20 -0
- agent_framework_lib-0.8.0/agent_framework/subagents/executor.py +655 -0
- agent_framework_lib-0.8.0/agent_framework/subagents/message_injector.py +121 -0
- agent_framework_lib-0.8.0/agent_framework/subagents/message_queue.py +74 -0
- agent_framework_lib-0.8.0/agent_framework/subagents/retrigger.py +187 -0
- agent_framework_lib-0.8.0/agent_framework/subagents/spawn_tool.py +264 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/utils/post_install.py +21 -3
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/CREATING_AGENTS.md +3 -0
- agent_framework_lib-0.8.0/agent_framework/web/docs/CUSTOM_SKILLS_GUIDE.md +1439 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/README.md +1 -1
- agent_framework_lib-0.8.0/agent_framework/web/docs/WORKSPACE_INTEGRATION.md +252 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/documentation_generator.py +48 -23
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/modern_ui.html +395 -80
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/server.py +129 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/skills_router.py +5 -0
- agent_framework_lib-0.8.0/agent_framework/workspace/__init__.py +53 -0
- agent_framework_lib-0.8.0/agent_framework/workspace/artefacts.py +168 -0
- agent_framework_lib-0.8.0/agent_framework/workspace/client.py +391 -0
- agent_framework_lib-0.8.0/agent_framework/workspace/config.py +46 -0
- agent_framework_lib-0.8.0/agent_framework/workspace/context.py +97 -0
- agent_framework_lib-0.8.0/agent_framework/workspace/cursor.py +110 -0
- agent_framework_lib-0.8.0/agent_framework/workspace/memory.py +172 -0
- agent_framework_lib-0.8.0/agent_framework/workspace/models.py +71 -0
- agent_framework_lib-0.8.0/agent_framework/workspace/poller.py +175 -0
- agent_framework_lib-0.8.0/agent_framework/workspace/preferences.py +96 -0
- agent_framework_lib-0.8.0/agent_framework/workspace/router.py +420 -0
- agent_framework_lib-0.8.0/agent_framework/workspace/session.py +247 -0
- agent_framework_lib-0.8.0/agent_framework/workspace/subscription.py +85 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0/agent_framework_lib.egg-info}/PKG-INFO +2 -2
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework_lib.egg-info/SOURCES.txt +26 -1
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/CREATING_AGENTS.md +3 -0
- agent_framework_lib-0.8.0/docs/CUSTOM_SKILLS_GUIDE.md +1439 -0
- {agent_framework_lib-0.7.0.post2/agent_framework/web → agent_framework_lib-0.8.0}/docs/GETTING_STARTED.md +12 -12
- agent_framework_lib-0.8.0/docs/SCREENSHOTS_GUIDE.md +201 -0
- agent_framework_lib-0.8.0/docs/SSE_NOTIFICATIONS_GUIDE.md +825 -0
- agent_framework_lib-0.8.0/docs/WORKSPACE_INTEGRATION.md +252 -0
- agent_framework_lib-0.8.0/examples/workspace_test_agent.py +135 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/pyproject.toml +1 -1
- agent_framework_lib-0.7.0.post2/agent_framework/subagents/__init__.py +0 -10
- agent_framework_lib-0.7.0.post2/agent_framework/subagents/spawn_tool.py +0 -187
- agent_framework_lib-0.7.0.post2/docs/SKILLS_AND_SUBAGENTS_ANALYSIS.md +0 -367
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/ARCHITECTURE.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/LICENSE +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/MANIFEST.in +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/base.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/models.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/providers/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/a2a/providers/postgres_provider.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/capabilities/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/capabilities/resolver.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/chart_generation/llm_refinement_loop.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/activity_formatter.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/agent_interface.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/agent_provider.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/context_budget.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/context_summarizer.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/elasticsearch_config_provider.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/implementation_validator.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/knowledge_state.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/loop_detector.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/model_clients.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/model_config.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/model_router.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/models.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/provider_calibration.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/rich_content_prompt_unsused_to_be_deleted.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/scratchpad_compressor.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/state_manager.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/step_display_config.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/streaming_parts_accumulator.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/implementations/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/implementations/budget_aware_agent.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/implementations/llamaindex_agent.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/implementations/microsoft_agent.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/memory/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/memory/agent_mixin.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/memory/base.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/memory/config.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/memory/manager.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/memory/personalization.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/memory/providers/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/memory/providers/graphiti_provider.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/memory/providers/memori_provider.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/memory/tools.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/api_timing_tracker.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/error_handling.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/error_logging.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/llm_metrics.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/llm_metrics_collector.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/metrics_aggregator.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/metrics_config.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/observability_manager.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/otel_instrumentor.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/otel_logging_handler.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/otel_setup.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/performance_monitor.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/progress_tracker.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/resource_manager.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/timing_tracker.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/token_counter.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/monitoring/tracing_context.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/processing/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/processing/ai_content_management.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/processing/markdown_converter.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/processing/multimodal_integration.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/py.typed +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/session/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/session/elasticsearch_session_storage.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/chart_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/drawio_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/excel_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/file_access_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/file_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/form_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/image_display_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/mermaid_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/multimodal_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/optionsblock_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/pdf_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/pdf_with_images_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/scripts/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/scripts/create_and_register.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/scripts/register_to_storage.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/chart/SKILL.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/chart/chart_to_image.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/drawio/SKILL.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/drawio/create_drawio.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/excel/SKILL.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/excel/create_excel.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/file/SKILL.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/file/create_file.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/file/list_files.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/file/read_file.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/file_access/SKILL.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/file_access/get_file_path.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/form/SKILL.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/image_display/SKILL.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/mermaid/SKILL.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/multimodal/SKILL.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/table/SKILL.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/table/table_to_image.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/web_search/SKILL.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/web_search/web_news_search.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/skills/web_search/web_search.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/table_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/unified_pdf_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/builtin/web_search_skill.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/markdown_loader.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/skills/tools.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/storage/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/storage/file_storages.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/storage/file_system_management.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/storage/storage_optimizer.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/activity_callback.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/adaptive_pdf_css.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/base.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/chart_tools.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/drawio_tools.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/excel_tools.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/file_access_tools.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/file_tools.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/html_content_analyzer.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/mermaid_tools.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/multimodal_tools.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/pdf_image_scaler.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/pdf_tools.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/pdf_with_images_tool.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/shell_tool.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/sizing_config.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/tabledata_tools.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/unified_pdf_tool.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/web_fetch_tool.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/tools/web_search_tools.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/utils/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/utils/path_utils.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/utils/session_title_generator.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/utils/source_detector.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/utils/special_blocks.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/__init__.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/admin_auth.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/admin_models.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/admin_router.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/admin_services.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/api_timing_middleware.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/Dockerfile +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0/agent_framework/web}/docs/GETTING_STARTED.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/api-reference.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/configuration.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/docker-compose.yml +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_example_multi_skills.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_with_file_storage.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_with_mcp.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_with_memory.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_with_memory_graphiti.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_with_memory_hybrid.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/agent_with_memory_simple.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/custom_framework_agent.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/simple_agent.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/examples/skills_demo_agent.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/docs/installation-guide.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/helper_agent.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/helper_ui.html +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/observability/kibana-llm-dashboard-setup.json +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/observability/kibana-resource-metrics-dashboard.json +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/otel_tracing_middleware.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/web/test_app.html +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework_lib.egg-info/entry_points.txt +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework_lib.egg-info/requires.txt +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework_lib.egg-info/top_level.txt +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/A2A_GUIDE.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/ARCHITECTURE_DIAGRAM.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/DOCKER_SETUP.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/FILE_STORAGE_GUIDE.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/HISTORY_MESSAGE_FORMAT.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/MEMORY_INSTALLATION.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/MULTIMODAL_TOOLS_GUIDE.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/OBSERVABILITY_GUIDE.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/PYPI_PUBLISHING.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/QA_STREAMING_LATENCY.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/STREAMING_EVENTS_FRONTEND.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/api-reference.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/configuration.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/framework_audit_remarques.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/docs/installation-guide.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/README.md +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/agent_context_budget_test.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/agent_example_multi_skills.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/agent_exemple_test.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/agent_training_with_apo.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/agent_with_custom_tools_file_storage.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/agent_with_file_storage.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/agent_with_mcp.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/agent_with_memory_graphiti.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/agent_with_memory_hybrid.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/agent_with_memory_simple.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/agent_with_personalization.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/biagenttest.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/custom_framework_agent.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/dependencies/docker-compose.yaml +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/pyproject.toml +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/simple_agent.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/examples/skills_demo_agent.py +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/setup.cfg +0 -0
- {agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/setup.py +0 -0
{agent_framework_lib-0.7.0.post2/agent_framework_lib.egg-info → agent_framework_lib-0.8.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-framework-lib
|
|
3
|
-
Version: 0.
|
|
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.
|
|
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.
|
|
91
|
+
__version__ = "0.7.2"
|
|
92
92
|
__author__ = "Cinco AI Team"
|
|
93
93
|
__license__ = "MIT"
|
|
94
94
|
__email__ = "sebastian@cinco.ai"
|
{agent_framework_lib-0.7.0.post2 → agent_framework_lib-0.8.0}/agent_framework/core/base_agent.py
RENAMED
|
@@ -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
|
|
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.
|
|
540
|
-
4.
|
|
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
|
|
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
|
-
#
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
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
|
-
#
|
|
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,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
|
+
)
|