agent-framework-lib 0.8.8__tar.gz → 0.8.8.post3__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.8.8/agent_framework_lib.egg-info → agent_framework_lib-0.8.8.post3}/PKG-INFO +1 -1
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/security/authz.py +36 -3
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/security/sandbox_provider.py +14 -3
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/shell_tool.py +22 -1
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/server.py +68 -23
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3/agent_framework_lib.egg-info}/PKG-INFO +1 -1
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework_lib.egg-info/SOURCES.txt +1 -0
- agent_framework_lib-0.8.8.post3/docs/OPENSHELL_GATEWAY_HOST_SETUP.md +195 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/pyproject.toml +1 -1
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/ARCHITECTURE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/LICENSE +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/MANIFEST.in +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/README.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/base.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/models.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/providers/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/providers/postgres_provider.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/capabilities/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/capabilities/resolver.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/audit.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/config.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/crypto.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/git_provider.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/herdr_client.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/models.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/orchestrator.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/store.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/tools.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/activity_formatter.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/agent_interface.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/agent_provider.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/base_agent.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/context_budget.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/context_summarizer.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/elasticsearch_config_provider.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/execution_controller.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/implementation_validator.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/interruption_message.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/knowledge_state.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/loop_detector.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/model_clients.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/model_config.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/model_router.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/models.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/prompt_builder.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/provider_calibration.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/scratchpad_compressor.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/scratchpad_serializer.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/state_manager.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/step_display_config.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/core/streaming_parts_accumulator.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/implementations/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/implementations/budget_aware_agent.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/implementations/llamaindex_agent.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/implementations/microsoft_agent.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/agent_mixin.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/base.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/config.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/hypothesis_engine.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/implicit_feedback.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/manager.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/personalization.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/providers/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/providers/graphiti_provider.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/providers/memori_provider.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/response_lessons.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/tools.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/work_patterns.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/api_timing_tracker.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/error_handling.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/error_logging.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/llm_metrics.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/llm_metrics_collector.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/metrics_aggregator.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/metrics_config.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/observability_manager.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/otel_instrumentor.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/otel_logging_handler.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/otel_setup.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/performance_monitor.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/progress_tracker.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/resource_manager.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/timing_tracker.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/token_counter.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/tracing_context.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/notifications/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/notifications/hub.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/notifications/webhook_notifier.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/processing/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/processing/ai_content_management.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/processing/markdown_converter.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/processing/multimodal_integration.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/processing/rich_content_validation.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/py.typed +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/security/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/security/file_view_token.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/security/input_guard.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/security/openshell_policy.yaml +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/security/pii_redactor.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/security/sandbox.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/security/secret_redactor.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/security/shell_env.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/security/upload_token.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/session/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/session/elasticsearch_session_storage.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/session/session_storage.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/agent_mixin.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/base.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/scripts/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/scripts/create_and_register.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/scripts/register_to_storage.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/chart/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/chart/chart_to_image.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/chart/vendor_chart.umd.min.js +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/code_delivery/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/code_format/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/code_format/format_python.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/csv/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/csv/create_csv.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/csv/read_csv.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/csv/transform_csv.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/data_format/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/data_format/json_to_yaml.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/data_format/yaml_to_json.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/drawio/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/drawio/create_drawio.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/email_template/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/excel/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/excel/create_excel.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file/create_file.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file/list_files.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file/read_file.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file_access/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file_access/download_to_local.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file_access/get_file_path.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/form/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/image_display/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/image_gen/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/image_gen/create_image.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/image_gen/generate_image.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/mermaid/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/mermaid/vendor_mermaid.umd.min.js +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/multimodal/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/create_powerpoint.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/templates/Big Data Infographics.pptx +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/templates/Executive Design Pitch Deck.pptx +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/templates/Management Consulting Toolkit.pptx +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/templates/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/templates/generate_templates.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/skill_creator/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/skill_creator/skill_api.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/table/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/table/table_to_image.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/web_news_search/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/web_news_search/web_news_search.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/word/SKILL.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/word/create_word.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/custom_skill_manager.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/discovery_prompt.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/markdown_loader.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/tools.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/storage/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/storage/file_storages.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/storage/file_system_management.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/storage/storage_optimizer.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/subagents/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/subagents/executor.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/subagents/message_injector.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/subagents/message_queue.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/subagents/retrigger.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/subagents/spawn_tool.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/activity_callback.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/adaptive_pdf_css.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/base.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/html_content_analyzer.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/multimodal_tools.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/pdf_image_scaler.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/sizing_config.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/web_fetch_tool.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/web_search_tool.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/utils/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/utils/path_utils.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/utils/post_install.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/utils/session_title_generator.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/utils/source_detector.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/utils/special_blocks.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/admin_auth.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/admin_models.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/admin_router.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/admin_services.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/api_timing_middleware.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/CREATING_AGENTS.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/Dockerfile +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/GETTING_STARTED.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/GITNEXUS_USER_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/README.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/WORKSPACE_INTEGRATION.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/api-reference.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/configuration.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/docker-compose.yml +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_example_multi_skills.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_with_file_storage.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_with_mcp.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_with_memory.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_with_memory_graphiti.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_with_memory_hybrid.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_with_memory_simple.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/custom_framework_agent.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/simple_agent.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/skills_demo_agent.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/installation-guide.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/documentation_generator.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/gitnexus_client.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/helper_agent.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/helper_ui.html +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/modern_ui.html +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/observability/kibana-llm-dashboard-setup.json +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/observability/kibana-resource-metrics-dashboard.json +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/otel_tracing_middleware.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/skills_router.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/web/test_app.html +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/__init__.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/artefacts.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/client.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/config.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/context.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/cursor.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/memory.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/models.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/poller.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/preferences.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/router.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/session.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/subscription.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework_lib.egg-info/entry_points.txt +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework_lib.egg-info/requires.txt +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework_lib.egg-info/top_level.txt +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/A2A_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/ARCHITECTURE_DIAGRAM.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/CANCEL_AND_INTERRUPT_FRONTEND.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/CREATING_AGENTS.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/DEEPEVAL_TEST_REPORT.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/DIAGNOSTIC_SANDBOX_SKILLS.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/DOCKER_SETUP.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/FILE_STORAGE_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/GETTING_STARTED.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/GITNEXUS_USER_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/HISTORY_MESSAGE_FORMAT.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/MEMORY_INSTALLATION.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/MULTIMODAL_TOOLS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/OBSERVABILITY_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/PYPI_PUBLISHING.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/QA_STREAMING_LATENCY.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/SCREENSHOTS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/SECRETS_MANAGEMENT.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/SECURITY_HARDENING.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/SSE_NOTIFICATIONS_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/STREAMING_EVENTS_FRONTEND.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/WORKSPACE_INTEGRATION.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/api-reference.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/configuration.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/framework_audit_remarques.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/helper_agent.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/index.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/docs/installation-guide.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/README.md +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/agent_context_budget_test.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/agent_example_multi_skills.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/agent_exemple_test.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/agent_training_with_apo.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/agent_with_custom_tools_file_storage.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/agent_with_file_storage.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/agent_with_mcp.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/agent_with_memory_graphiti.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/agent_with_memory_hybrid.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/agent_with_memory_simple.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/agent_with_personalization.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/biagenttest.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/custom_framework_agent.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/dependencies/docker-compose.yaml +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/pyproject.toml +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/simple_agent.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/skills_demo_agent.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/test_work_patterns_live.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/examples/workspace_test_agent.py +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/setup.cfg +0 -0
- {agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/setup.py +0 -0
{agent_framework_lib-0.8.8/agent_framework_lib.egg-info → agent_framework_lib-0.8.8.post3}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-framework-lib
|
|
3
|
-
Version: 0.8.8
|
|
3
|
+
Version: 0.8.8.post3
|
|
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>
|
{agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/security/authz.py
RENAMED
|
@@ -55,6 +55,36 @@ def auth_required() -> bool:
|
|
|
55
55
|
return not dev_mode_enabled()
|
|
56
56
|
|
|
57
57
|
|
|
58
|
+
def trust_client_user_id() -> bool:
|
|
59
|
+
"""Le déployeur fait confiance au client pour fournir le ``user_id``.
|
|
60
|
+
|
|
61
|
+
Activé via ``AUTH_TRUST_CLIENT_USER_ID``. Cas d'usage : un backend de
|
|
62
|
+
confiance authentifié par API key (un portail) qui multiplexe plusieurs
|
|
63
|
+
end-users et passe leur ``user_id`` en paramètre. Quand actif, le serveur
|
|
64
|
+
HONORE le ``user_id`` client (au lieu de le forcer au principal authentifié),
|
|
65
|
+
et ``is_owner`` autorise ce principal de confiance sur toute ressource —
|
|
66
|
+
l'auth (API key) reste exigée, mais le contrôle par end-user est délégué au
|
|
67
|
+
portail.
|
|
68
|
+
|
|
69
|
+
⚠️ N'activer QUE si le client est de confiance et applique lui-même le
|
|
70
|
+
contrôle d'accès par end-user — sinon tout détenteur de la clé peut réclamer
|
|
71
|
+
n'importe quel ``user_id``.
|
|
72
|
+
"""
|
|
73
|
+
return _env_flag("AUTH_TRUST_CLIENT_USER_ID")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def resolve_effective_user_id(current_user: str, requested_user_id: str | None) -> str:
|
|
77
|
+
"""Identité effective pour scoper sessions/fichiers.
|
|
78
|
+
|
|
79
|
+
Honore le ``user_id`` client quand l'auth est désactivée (dev mode) OU que le
|
|
80
|
+
déployeur fait confiance au client (``AUTH_TRUST_CLIENT_USER_ID``). Sinon, lie
|
|
81
|
+
au principal authentifié (anti-usurpation multi-tenant).
|
|
82
|
+
"""
|
|
83
|
+
if requested_user_id and (not auth_required() or trust_client_user_id()):
|
|
84
|
+
return requested_user_id
|
|
85
|
+
return current_user
|
|
86
|
+
|
|
87
|
+
|
|
58
88
|
def is_owner(resource_user_id: str | None, principal: str) -> bool:
|
|
59
89
|
"""Vérifie que ``principal`` possède la ressource.
|
|
60
90
|
|
|
@@ -64,14 +94,17 @@ def is_owner(resource_user_id: str | None, principal: str) -> bool:
|
|
|
64
94
|
principal: Identité authentifiée demandant l'accès.
|
|
65
95
|
|
|
66
96
|
Returns:
|
|
67
|
-
``True`` si le principal possède la ressource,
|
|
68
|
-
|
|
69
|
-
(
|
|
97
|
+
``True`` si le principal possède la ressource, si le mode développement
|
|
98
|
+
est actif et que le principal est ``"anonymous"`` (compat mono-utilisateur),
|
|
99
|
+
ou si le client est de confiance (``AUTH_TRUST_CLIENT_USER_ID`` — le portail
|
|
100
|
+
de confiance peut accéder aux ressources de n'importe quel end-user).
|
|
70
101
|
"""
|
|
71
102
|
if resource_user_id is not None and resource_user_id == principal:
|
|
72
103
|
return True
|
|
73
104
|
if dev_mode_enabled() and principal == ANONYMOUS_PRINCIPAL:
|
|
74
105
|
return True
|
|
106
|
+
if trust_client_user_id():
|
|
107
|
+
return True
|
|
75
108
|
return False
|
|
76
109
|
|
|
77
110
|
|
|
@@ -474,12 +474,23 @@ class OpenShellProvider(SandboxProvider):
|
|
|
474
474
|
src = f"{SANDBOX_OUTPUT}/{_safe_name(out_subdir)}" if out_subdir else SANDBOX_OUTPUT
|
|
475
475
|
# Source dir may not exist if the command wrote nothing — tolerate failure.
|
|
476
476
|
proc = self._run_cli(["sandbox", "download", name, src, dest_dir], timeout=120)
|
|
477
|
+
# Visibility: this PULL is the only file-delivery path in the sandboxed
|
|
478
|
+
# topology, so its outcome must be observable (was DEBUG → silent file loss).
|
|
479
|
+
try:
|
|
480
|
+
pulled = sum(len(files) for _, _, files in os.walk(dest_dir))
|
|
481
|
+
except OSError:
|
|
482
|
+
pulled = -1
|
|
477
483
|
if proc.returncode != 0:
|
|
478
|
-
logger.
|
|
479
|
-
"
|
|
484
|
+
logger.warning(
|
|
485
|
+
"[sandbox] download failed for %s (src=%s) rc=%s — generated files "
|
|
486
|
+
"may be lost: %s",
|
|
480
487
|
name,
|
|
481
|
-
|
|
488
|
+
src,
|
|
489
|
+
proc.returncode,
|
|
490
|
+
(proc.stdout + proc.stderr).strip()[:300],
|
|
482
491
|
)
|
|
492
|
+
else:
|
|
493
|
+
logger.info("[sandbox] pulled %d file(s) from %s for %s", pulled, src, name)
|
|
483
494
|
# Best-effort: remove the per-command subdir so a long-lived session does
|
|
484
495
|
# not accumulate output slices in /sandbox/output.
|
|
485
496
|
if out_subdir:
|
{agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/shell_tool.py
RENAMED
|
@@ -754,6 +754,15 @@ class ShellTool(AgentTool):
|
|
|
754
754
|
)
|
|
755
755
|
env["AGENT_HOST"] = callback_host
|
|
756
756
|
env["AGENT_PORT"] = str(callback_port)
|
|
757
|
+
# In the per-session sandbox the in-shell HTTP upload is the WRONG path:
|
|
758
|
+
# the sandbox is a sibling container with no reliable route back to the
|
|
759
|
+
# agent (in Coolify the agent port is not published — host.docker.internal
|
|
760
|
+
# :8000 is NOT the agent → 401/wrong server). The skill therefore only
|
|
761
|
+
# WRITES its file to AGENT_OUTPUT_DIR; the parent ShellTool finalizer pulls
|
|
762
|
+
# it out via the gateway (collect_out) and registers it to the agent itself
|
|
763
|
+
# (localhost) with the session token. Forcing skip also prevents the skill
|
|
764
|
+
# from printing a file_id that would make the finalizer skip the file.
|
|
765
|
+
env["AGENT_SKILL_SKIP_HTTP_UPLOAD"] = "true"
|
|
757
766
|
# Tell upload scripts whether to authenticate.
|
|
758
767
|
env["REQUIRE_AUTH"] = os.environ.get("REQUIRE_AUTH", "false")
|
|
759
768
|
# Scoped, short-lived session token (HMAC, user/session) so the sandbox
|
|
@@ -846,8 +855,20 @@ class ShellTool(AgentTool):
|
|
|
846
855
|
)
|
|
847
856
|
return out
|
|
848
857
|
|
|
849
|
-
|
|
858
|
+
# Pull the files the sandbox produced out via the gateway. This is the
|
|
859
|
+
# ONLY delivery path in the sandboxed topology (the sandbox itself has
|
|
860
|
+
# no route to register them). Failures here = lost files, so they MUST
|
|
861
|
+
# be visible (previously swallowed silently → undiagnosable file loss).
|
|
862
|
+
try:
|
|
850
863
|
provider.collect_out(session_id, collect_dir, out_subdir=out_subdir)
|
|
864
|
+
except Exception as e: # noqa: BLE001 — never raise into the agent
|
|
865
|
+
logger.warning(
|
|
866
|
+
"[ShellTool] collect_out failed (session=%s, out_subdir=%s) — "
|
|
867
|
+
"generated files may not be delivered: %s",
|
|
868
|
+
session_id,
|
|
869
|
+
out_subdir,
|
|
870
|
+
e,
|
|
871
|
+
)
|
|
851
872
|
|
|
852
873
|
stdout = result.stdout or ""
|
|
853
874
|
stderr = result.stderr or ""
|
|
@@ -193,6 +193,7 @@ from ..security.authz import (
|
|
|
193
193
|
OutboundURLValidationError,
|
|
194
194
|
auth_required,
|
|
195
195
|
is_owner,
|
|
196
|
+
resolve_effective_user_id,
|
|
196
197
|
validate_outbound_url,
|
|
197
198
|
)
|
|
198
199
|
from ..security.file_view_token import verify_file_token
|
|
@@ -667,6 +668,30 @@ async def _load_session_or_raise(storage: Any, user_id: str, session_id: str) ->
|
|
|
667
668
|
return session_data
|
|
668
669
|
|
|
669
670
|
|
|
671
|
+
def _matches_status_filter(
|
|
672
|
+
metadata: dict[str, Any] | None, include_closed: bool, only_closed: bool
|
|
673
|
+
) -> bool:
|
|
674
|
+
"""Decide whether a session matches the requested open/closed filter.
|
|
675
|
+
|
|
676
|
+
A session is considered closed when ``metadata.status == "closed"``; any
|
|
677
|
+
other value (including a missing status) is treated as open.
|
|
678
|
+
|
|
679
|
+
Args:
|
|
680
|
+
metadata: Session metadata dict (may be None).
|
|
681
|
+
include_closed: Return both open and closed sessions.
|
|
682
|
+
only_closed: Return only closed sessions (takes precedence).
|
|
683
|
+
|
|
684
|
+
Returns:
|
|
685
|
+
True if the session should be included in the result.
|
|
686
|
+
"""
|
|
687
|
+
is_closed = (metadata or {}).get("status") == "closed"
|
|
688
|
+
if only_closed:
|
|
689
|
+
return is_closed
|
|
690
|
+
if include_closed:
|
|
691
|
+
return True
|
|
692
|
+
return not is_closed
|
|
693
|
+
|
|
694
|
+
|
|
670
695
|
# Pydantic model for incoming messages, now uses content list
|
|
671
696
|
class MessageRequest(BaseModel):
|
|
672
697
|
# This model directly mirrors StructuredAgentInput for the request body
|
|
@@ -2306,7 +2331,7 @@ async def handle_message_endpoint(
|
|
|
2306
2331
|
# mismatch that made uploaded files 404 on download. In dev-mode (auth
|
|
2307
2332
|
# disabled) the query param is honored for single-user compatibility.
|
|
2308
2333
|
# Mirrors /files/upload (see effective_user_id there).
|
|
2309
|
-
user_id = current_user
|
|
2334
|
+
user_id = resolve_effective_user_id(current_user, user_id)
|
|
2310
2335
|
|
|
2311
2336
|
# Determine session_id: query param > body.session_id > new UUID
|
|
2312
2337
|
session_id_from_query = request.query_params.get("session_id")
|
|
@@ -2720,7 +2745,7 @@ async def handle_stream_endpoint(
|
|
|
2720
2745
|
# user_id query param — bind the session (and every file it stores) to the
|
|
2721
2746
|
# authenticated principal. In dev-mode (auth disabled) the query param is
|
|
2722
2747
|
# honored for single-user compatibility. Mirrors /files/upload.
|
|
2723
|
-
user_id = current_user
|
|
2748
|
+
user_id = resolve_effective_user_id(current_user, user_id)
|
|
2724
2749
|
|
|
2725
2750
|
# Support both /sessions/{session_id}/stream and /stream?session_id=...
|
|
2726
2751
|
# If session_id is not provided as a path parameter, try to get it from query/body
|
|
@@ -4055,14 +4080,27 @@ async def list_sessions_endpoint(
|
|
|
4055
4080
|
user_id: str = Query(
|
|
4056
4081
|
DEFAULT_USER_ID, description="Identifier for the user whose sessions to list"
|
|
4057
4082
|
),
|
|
4083
|
+
include_closed: bool = Query(
|
|
4084
|
+
False,
|
|
4085
|
+
description="When true, return both open and closed sessions instead of open only.",
|
|
4086
|
+
),
|
|
4087
|
+
only_closed: bool = Query(
|
|
4088
|
+
False,
|
|
4089
|
+
description="When true, return only closed sessions. Takes precedence over include_closed.",
|
|
4090
|
+
),
|
|
4058
4091
|
current_user: str = Depends(get_current_user),
|
|
4059
4092
|
):
|
|
4060
|
-
"""Lists
|
|
4093
|
+
"""Lists session IDs for a given user_id, filtered by current agent ID.
|
|
4094
|
+
|
|
4095
|
+
By default only open sessions (status != "closed") are returned. Use
|
|
4096
|
+
``only_closed=true`` to list only closed sessions, or ``include_closed=true``
|
|
4097
|
+
to list both open and closed sessions.
|
|
4098
|
+
"""
|
|
4061
4099
|
global session_storage
|
|
4062
4100
|
|
|
4063
4101
|
# Multi-tenant: under auth, list only the authenticated principal's sessions
|
|
4064
4102
|
# (ignore client user_id). Keeps the UI consistent with /message + /stream.
|
|
4065
|
-
user_id = current_user
|
|
4103
|
+
user_id = resolve_effective_user_id(current_user, user_id)
|
|
4066
4104
|
|
|
4067
4105
|
if not session_storage:
|
|
4068
4106
|
raise HTTPException(status_code=500, detail="Session storage not available")
|
|
@@ -4073,13 +4111,20 @@ async def list_sessions_endpoint(
|
|
|
4073
4111
|
agent_identity = StateManager.create_agent_identity(temp_agent)
|
|
4074
4112
|
current_agent_id = agent_identity.agent_id
|
|
4075
4113
|
|
|
4076
|
-
# Use
|
|
4077
|
-
|
|
4078
|
-
|
|
4079
|
-
|
|
4114
|
+
# Use session info (includes metadata.status) so we can filter by status.
|
|
4115
|
+
# Already sorted by updated_at desc across all backends.
|
|
4116
|
+
sessions_info = await session_storage.list_user_sessions_with_info(user_id)
|
|
4117
|
+
|
|
4118
|
+
user_sessions = [
|
|
4119
|
+
info["session_id"]
|
|
4120
|
+
for info in sessions_info
|
|
4121
|
+
if info.get("agent_id") == current_agent_id
|
|
4122
|
+
and _matches_status_filter(info.get("metadata"), include_closed, only_closed)
|
|
4123
|
+
]
|
|
4124
|
+
|
|
4080
4125
|
# An empty list during a storage outage would look like "no sessions".
|
|
4081
4126
|
# Surface the outage as 503 instead so the client can retry.
|
|
4082
|
-
if not
|
|
4127
|
+
if not sessions_info and not await session_storage.is_available():
|
|
4083
4128
|
raise HTTPException(
|
|
4084
4129
|
status_code=503,
|
|
4085
4130
|
detail=STORAGE_UNAVAILABLE_DETAIL,
|
|
@@ -4107,7 +4152,7 @@ async def list_sessions_with_info_endpoint(
|
|
|
4107
4152
|
|
|
4108
4153
|
# Multi-tenant: under auth, list only the authenticated principal's sessions
|
|
4109
4154
|
# (ignore client user_id). Keeps the UI consistent with /message + /stream.
|
|
4110
|
-
user_id = current_user
|
|
4155
|
+
user_id = resolve_effective_user_id(current_user, user_id)
|
|
4111
4156
|
|
|
4112
4157
|
if not session_storage:
|
|
4113
4158
|
raise HTTPException(status_code=500, detail="Session storage not available")
|
|
@@ -4212,7 +4257,7 @@ async def cancel_execution_endpoint(
|
|
|
4212
4257
|
|
|
4213
4258
|
# Multi-tenant: under auth, only the authenticated principal may cancel their
|
|
4214
4259
|
# own session (ignore client user_id). Matches /message + /stream ownership.
|
|
4215
|
-
user_id = current_user
|
|
4260
|
+
user_id = resolve_effective_user_id(current_user, user_id)
|
|
4216
4261
|
|
|
4217
4262
|
if not session_storage:
|
|
4218
4263
|
raise HTTPException(status_code=500, detail="Session storage not available")
|
|
@@ -4288,7 +4333,7 @@ async def get_execution_state_endpoint(
|
|
|
4288
4333
|
|
|
4289
4334
|
# Multi-tenant: under auth, scope to the authenticated principal (ignore
|
|
4290
4335
|
# client user_id) so ownership matches /message + /stream.
|
|
4291
|
-
user_id = current_user
|
|
4336
|
+
user_id = resolve_effective_user_id(current_user, user_id)
|
|
4292
4337
|
|
|
4293
4338
|
if not session_storage:
|
|
4294
4339
|
raise HTTPException(status_code=500, detail="Session storage not available")
|
|
@@ -4379,7 +4424,7 @@ async def get_history_endpoint(
|
|
|
4379
4424
|
# Multi-tenant: under auth, scope reads to the authenticated principal and
|
|
4380
4425
|
# ignore the client-supplied user_id. Mirrors the write side (/message,
|
|
4381
4426
|
# /stream) so sessions created there are visible to the same UI identity.
|
|
4382
|
-
user_id = current_user
|
|
4427
|
+
user_id = resolve_effective_user_id(current_user, user_id)
|
|
4383
4428
|
|
|
4384
4429
|
if not session_storage:
|
|
4385
4430
|
raise HTTPException(status_code=500, detail="Session storage not available")
|
|
@@ -5015,7 +5060,7 @@ async def get_code_delivery_config_endpoint(
|
|
|
5015
5060
|
# The client-provided user_id query param is only honored in dev-mode to
|
|
5016
5061
|
# preserve single-user/finalizer compatibility (cannot be used to read or
|
|
5017
5062
|
# mutate another user's code-delivery config when auth is enabled).
|
|
5018
|
-
effective_user_id = current_user
|
|
5063
|
+
effective_user_id = resolve_effective_user_id(current_user, user_id)
|
|
5019
5064
|
|
|
5020
5065
|
resolved = await get_shared_store().resolve(effective_user_id, session_id)
|
|
5021
5066
|
meta = resolved.github_auth
|
|
@@ -5059,7 +5104,7 @@ async def set_code_delivery_github_auth_endpoint(
|
|
|
5059
5104
|
)
|
|
5060
5105
|
# Storage identity bound to the authenticated principal (query param honored
|
|
5061
5106
|
# only in dev-mode) so a user cannot store a token under another identity.
|
|
5062
|
-
effective_user_id = current_user
|
|
5107
|
+
effective_user_id = resolve_effective_user_id(current_user, user_id)
|
|
5063
5108
|
try:
|
|
5064
5109
|
await get_shared_store().set_github_token(
|
|
5065
5110
|
effective_user_id, body.token, meta, session_id=body.session_id
|
|
@@ -5084,7 +5129,7 @@ async def delete_code_delivery_github_auth_endpoint(
|
|
|
5084
5129
|
from agent_framework.code_delivery.store import get_shared_store
|
|
5085
5130
|
|
|
5086
5131
|
# Storage identity bound to the authenticated principal (dev-mode honors the query param).
|
|
5087
|
-
effective_user_id = current_user
|
|
5132
|
+
effective_user_id = resolve_effective_user_id(current_user, user_id)
|
|
5088
5133
|
await get_shared_store().clear_github_token(effective_user_id, session_id=session_id)
|
|
5089
5134
|
return {"success": True, "scope": "session" if session_id else "user"}
|
|
5090
5135
|
|
|
@@ -5099,7 +5144,7 @@ async def get_code_delivery_repos_endpoint(
|
|
|
5099
5144
|
from agent_framework.code_delivery.store import get_shared_store
|
|
5100
5145
|
|
|
5101
5146
|
# Storage identity bound to the authenticated principal (dev-mode honors the query param).
|
|
5102
|
-
effective_user_id = current_user
|
|
5147
|
+
effective_user_id = resolve_effective_user_id(current_user, user_id)
|
|
5103
5148
|
resolved = await get_shared_store().resolve(effective_user_id, session_id)
|
|
5104
5149
|
return {"repos": [r.model_dump() for r in resolved.repos]}
|
|
5105
5150
|
|
|
@@ -5116,7 +5161,7 @@ async def set_code_delivery_repos_endpoint(
|
|
|
5116
5161
|
|
|
5117
5162
|
repos = [RepoEntry(**r.model_dump()) for r in body.repos]
|
|
5118
5163
|
# Storage identity bound to the authenticated principal (dev-mode honors the query param).
|
|
5119
|
-
effective_user_id = current_user
|
|
5164
|
+
effective_user_id = resolve_effective_user_id(current_user, user_id)
|
|
5120
5165
|
await get_shared_store().set_repos(effective_user_id, repos, session_id=body.session_id)
|
|
5121
5166
|
return {"success": True, "count": len(repos)}
|
|
5122
5167
|
|
|
@@ -5167,7 +5212,7 @@ async def set_code_delivery_herdr_endpoint(
|
|
|
5167
5212
|
if body.mode not in ("local", "remote"):
|
|
5168
5213
|
raise HTTPException(status_code=400, detail="mode must be 'local' or 'remote'")
|
|
5169
5214
|
# Storage identity bound to the authenticated principal (dev-mode honors the query param).
|
|
5170
|
-
effective_user_id = current_user
|
|
5215
|
+
effective_user_id = resolve_effective_user_id(current_user, user_id)
|
|
5171
5216
|
fields: dict[str, Any] = {"mode": body.mode}
|
|
5172
5217
|
if body.base_url is not None:
|
|
5173
5218
|
# SSRF / token-exfiltration guard before persistence or use.
|
|
@@ -5200,7 +5245,7 @@ async def set_code_delivery_settings_endpoint(
|
|
|
5200
5245
|
model=body.backend_model or "claude-sonnet-4-20250514",
|
|
5201
5246
|
)
|
|
5202
5247
|
# Storage identity bound to the authenticated principal (dev-mode honors the query param).
|
|
5203
|
-
effective_user_id = current_user
|
|
5248
|
+
effective_user_id = resolve_effective_user_id(current_user, user_id)
|
|
5204
5249
|
await get_shared_store().set_settings(
|
|
5205
5250
|
effective_user_id,
|
|
5206
5251
|
enabled=body.enabled,
|
|
@@ -5273,7 +5318,7 @@ async def upload_file(
|
|
|
5273
5318
|
# spoofing another user's ownership. In dev-mode the query param is
|
|
5274
5319
|
# honored (passive finalizer uploads via localhost using the
|
|
5275
5320
|
# AGENT_USER_ID wiring), preserving single-user compatibility.
|
|
5276
|
-
effective_user_id = current_user
|
|
5321
|
+
effective_user_id = resolve_effective_user_id(current_user, user_id)
|
|
5277
5322
|
|
|
5278
5323
|
file_id = await app.state.file_storage_manager.store_file(
|
|
5279
5324
|
content=content,
|
|
@@ -5621,7 +5666,7 @@ async def list_files(
|
|
|
5621
5666
|
# Multi-tenant: under auth, list only the authenticated principal's files
|
|
5622
5667
|
# (ignore the client user_id) so the UI sees the files uploaded by skills,
|
|
5623
5668
|
# which are owned by the same principal. Mirrors /files/upload + download.
|
|
5624
|
-
user_id = current_user
|
|
5669
|
+
user_id = resolve_effective_user_id(current_user, user_id)
|
|
5625
5670
|
try:
|
|
5626
5671
|
logger.info(
|
|
5627
5672
|
f"🔍 FILES ENDPOINT - Parameters: user_id={user_id}, session_id={session_id}, is_generated={is_generated}"
|
|
@@ -6929,7 +6974,7 @@ async def get_session_response_times_endpoint(
|
|
|
6929
6974
|
# Multi-tenant: under auth, scope to the authenticated principal (ignore the
|
|
6930
6975
|
# client user_id) so the ownership check below matches sessions created by
|
|
6931
6976
|
# /message and /stream under the same identity.
|
|
6932
|
-
user_id = current_user
|
|
6977
|
+
user_id = resolve_effective_user_id(current_user, user_id)
|
|
6933
6978
|
|
|
6934
6979
|
if session_storage is None:
|
|
6935
6980
|
raise HTTPException(status_code=500, detail="Session storage not available")
|
{agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3/agent_framework_lib.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-framework-lib
|
|
3
|
-
Version: 0.8.8
|
|
3
|
+
Version: 0.8.8.post3
|
|
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>
|
|
@@ -296,6 +296,7 @@ docs/MEMORY_INSTALLATION.md
|
|
|
296
296
|
docs/MODIFICATIONS_CONCURRENCE.md
|
|
297
297
|
docs/MULTIMODAL_TOOLS_GUIDE.md
|
|
298
298
|
docs/OBSERVABILITY_GUIDE.md
|
|
299
|
+
docs/OPENSHELL_GATEWAY_HOST_SETUP.md
|
|
299
300
|
docs/PYPI_PUBLISHING.md
|
|
300
301
|
docs/QA_STREAMING_LATENCY.md
|
|
301
302
|
docs/SCREENSHOTS_GUIDE.md
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# OpenShell sandbox — host gateway setup (Docker deployments)
|
|
2
|
+
|
|
3
|
+
How to run the per-session OpenShell sandbox when the agent is deployed in a
|
|
4
|
+
**Docker container** (docker-compose, Coolify, plain `docker run`, …) on a Linux
|
|
5
|
+
host. This is the configuration that makes `shell_exec` run untrusted code in an
|
|
6
|
+
isolated sandbox in production — without it the shell silently degrades to the
|
|
7
|
+
**local path with no FS/network jail**.
|
|
8
|
+
|
|
9
|
+
## TL;DR — one script per host
|
|
10
|
+
|
|
11
|
+
On each deployment host (dev, staging, prod), as the user that owns Docker
|
|
12
|
+
(e.g. `ubuntu`):
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
bash scripts/setup-openshell-host.sh
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
It is idempotent and does everything below (install, JWT keys, config, persistent
|
|
19
|
+
systemd service, smoke test) and prints the exact env vars to set on each agent.
|
|
20
|
+
The rest of this doc explains what it does and how to debug it. The agent
|
|
21
|
+
container side is in the agent `docker-compose.prod.yml` / `openshell-entrypoint.sh`.
|
|
22
|
+
|
|
23
|
+
## Why the gateway runs on the HOST (not in the agent container)
|
|
24
|
+
|
|
25
|
+
OpenShell has two parts: the **CLI** (the agent calls it) and the **gateway**
|
|
26
|
+
server, which drives Docker to create the per-session sandbox containers.
|
|
27
|
+
|
|
28
|
+
On native Linux Docker, the gateway's Docker driver must bind the **Docker
|
|
29
|
+
bridge gateway IP** (e.g. `172.16.x.1`) so the sandbox containers can reach it.
|
|
30
|
+
Only the **host** owns that address — a gateway running *inside* the agent
|
|
31
|
+
container cannot bind it and crashes with:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
Error: failed to bind to 172.16.21.1:17670: Cannot assign requested address (os error 99)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
(It "just works" on a Mac because Docker Desktop's networking is different.)
|
|
38
|
+
|
|
39
|
+
So the supported topology on Linux is:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
┌─ Host (has Docker) ───────────────────────────────────────────┐
|
|
43
|
+
│ openshell-gateway (binds 0.0.0.0:17670, drives Docker) │
|
|
44
|
+
│ ▲ │ creates │
|
|
45
|
+
│ │ http (insecure, LAN) ▼ │
|
|
46
|
+
│ ┌─ Agent container ─┐ ┌─ Sandbox containers (per session)─┐│
|
|
47
|
+
│ │ openshell CLI │ │ jailed; reach the gateway via the ││
|
|
48
|
+
│ │ + docker.sock │ │ host bridge IP ││
|
|
49
|
+
│ └───────────────────┘ └───────────────────────────────────┘│
|
|
50
|
+
└───────────────────────────────────────────────────────────────┘
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 1. Host setup
|
|
54
|
+
|
|
55
|
+
Prereq: the host runs Docker, and the user that will run the gateway can use it
|
|
56
|
+
**without sudo** (`docker info` works → that user is in the `docker` group). If
|
|
57
|
+
not, one-time: `sudo usermod -aG docker <user>` then re-login. No sudo is needed
|
|
58
|
+
at runtime.
|
|
59
|
+
|
|
60
|
+
Install the OpenShell CLI + gateway:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
curl -fsSL https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Write a gateway config. With TLS off there is no mTLS user auth, so we must
|
|
67
|
+
(a) allow unauthenticated callers (the agent CLI), and (b) still give the gateway
|
|
68
|
+
a JWT signing key — **Docker sandboxes require a gateway-minted JWT** to
|
|
69
|
+
authenticate their supervisor back to the gateway, otherwise `sandbox create`
|
|
70
|
+
fails with `docker sandboxes require gateway JWT auth`. The install already
|
|
71
|
+
generated the JWT keys under `~/.local/state/openshell/tls/jwt/`.
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# JWT signing keys (created by the installer; regenerate if missing):
|
|
75
|
+
ls ~/.local/state/openshell/tls/jwt/ \
|
|
76
|
+
|| openshell-gateway generate-certs --output-dir ~/.local/state/openshell/tls
|
|
77
|
+
|
|
78
|
+
cat > ~/openshell-gateway.toml <<EOF
|
|
79
|
+
[openshell.gateway.auth]
|
|
80
|
+
allow_unauthenticated_users = true
|
|
81
|
+
|
|
82
|
+
[openshell.gateway.gateway_jwt]
|
|
83
|
+
signing_key_path = "$HOME/.local/state/openshell/tls/jwt/signing.pem"
|
|
84
|
+
public_key_path = "$HOME/.local/state/openshell/tls/jwt/public.pem"
|
|
85
|
+
kid_path = "$HOME/.local/state/openshell/tls/jwt/kid"
|
|
86
|
+
EOF
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Run the gateway with **TLS disabled** (the agent reaches it over the trusted
|
|
90
|
+
internal Docker network), bound to all interfaces, with that config:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# the installer's systemd --user service starts with mTLS + 127.0.0.1 and may
|
|
94
|
+
# crash (no certs / no docker group in the unit) — run it ourselves instead:
|
|
95
|
+
systemctl --user stop openshell-gateway 2>/dev/null || true
|
|
96
|
+
pkill -f openshell-gateway 2>/dev/null || true
|
|
97
|
+
|
|
98
|
+
nohup openshell-gateway --disable-tls --bind-address 0.0.0.0 \
|
|
99
|
+
--config ~/openshell-gateway.toml >~/openshell-gateway.log 2>&1 &
|
|
100
|
+
disown
|
|
101
|
+
|
|
102
|
+
ss -ltnp | grep 17670 # expect: LISTEN 0.0.0.0:17670
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
A healthy log shows three lines: `Unauthenticated user access enabled`,
|
|
106
|
+
`gateway-minted sandbox JWT enabled`, and `Server listening address=0.0.0.0:17670`
|
|
107
|
+
— and it stays up (`Using compute driver driver=docker`).
|
|
108
|
+
|
|
109
|
+
### Make it permanent (survive logout/reboot)
|
|
110
|
+
|
|
111
|
+
Override the installed `systemd --user` unit to use the same flags:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
mkdir -p ~/.config/systemd/user/openshell-gateway.service.d
|
|
115
|
+
cat > ~/.config/systemd/user/openshell-gateway.service.d/override.conf <<'EOF'
|
|
116
|
+
[Service]
|
|
117
|
+
ExecStartPre=
|
|
118
|
+
ExecStart=
|
|
119
|
+
ExecStart=/usr/bin/openshell-gateway --disable-tls --bind-address 0.0.0.0 --config %h/openshell-gateway.toml
|
|
120
|
+
Restart=always
|
|
121
|
+
EOF
|
|
122
|
+
systemctl --user daemon-reload
|
|
123
|
+
systemctl --user restart openshell-gateway
|
|
124
|
+
systemctl --user status openshell-gateway --no-pager
|
|
125
|
+
|
|
126
|
+
sudo loginctl enable-linger "$USER" # one-time: keep the user service alive after logout/reboot
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
If the service still fails on `query Docker daemon version: Connect`, the user
|
|
130
|
+
manager was started before the `docker` group was granted — re-login (or reboot)
|
|
131
|
+
so it picks up the group, then `systemctl --user restart openshell-gateway`.
|
|
132
|
+
|
|
133
|
+
## 2. Agent container setup (docker-compose)
|
|
134
|
+
|
|
135
|
+
The agent needs the Docker socket (to build the sandbox image on the host Docker
|
|
136
|
+
and pass the framework's `docker info` check) and the gateway endpoint. See the
|
|
137
|
+
agent compose files for a full example; the OpenShell-relevant parts:
|
|
138
|
+
|
|
139
|
+
```yaml
|
|
140
|
+
services:
|
|
141
|
+
agent:
|
|
142
|
+
environment:
|
|
143
|
+
- SHELL_SANDBOX_PROVIDER=openshell
|
|
144
|
+
- OPENSHELL_GATEWAY_ENDPOINT=http://host.docker.internal:17670
|
|
145
|
+
- OPENSHELL_GATEWAY_INSECURE=true
|
|
146
|
+
volumes:
|
|
147
|
+
- /var/run/docker.sock:/var/run/docker.sock
|
|
148
|
+
group_add:
|
|
149
|
+
- "${DOCKER_GID}" # host: getent group docker | cut -d: -f3 (or: stat -c %g /var/run/docker.sock)
|
|
150
|
+
extra_hosts:
|
|
151
|
+
- "host.docker.internal:host-gateway" # resolves to the host (Linux)
|
|
152
|
+
# NO `ports:` under Coolify — its proxy owns the host ports (publishing
|
|
153
|
+
# 0.0.0.0:<port> here fails with "port is already allocated").
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Set `DOCKER_GID` in the deployment env to the host's docker group GID. The agent
|
|
157
|
+
`openshell-entrypoint.sh` ships with the image; it does NOT start a local gateway
|
|
158
|
+
— it just verifies the remote one and starts the agent.
|
|
159
|
+
|
|
160
|
+
## 3. Validation
|
|
161
|
+
|
|
162
|
+
Agent boot log should print:
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
[openshell] using remote gateway http://host.docker.internal:17670
|
|
166
|
+
[openshell] gateway connected — per-session sandbox ACTIVE.
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
instead of `[sandbox] SECURITY DEGRADED ...`. Then exercise a file-generating
|
|
170
|
+
skill and confirm it runs (the shell is jailed; generated files still land in
|
|
171
|
+
storage via the parent finalizer).
|
|
172
|
+
|
|
173
|
+
## 4. Security
|
|
174
|
+
|
|
175
|
+
- The gateway runs with `--disable-tls` and no auth. **Do NOT expose port 17670**
|
|
176
|
+
beyond the host/VPC — keep it out of the cloud security group / firewall. It is
|
|
177
|
+
reachable by the agent over the internal Docker network only. Anyone who can
|
|
178
|
+
reach `:17670` can create sandboxes (i.e. run code) through it.
|
|
179
|
+
- For a hardened multi-host setup, use OpenShell's mTLS gateway (generate certs,
|
|
180
|
+
distribute the client cert to the agent) or its Helm chart for Kubernetes
|
|
181
|
+
instead of `--disable-tls`.
|
|
182
|
+
|
|
183
|
+
## Troubleshooting (errors seen in practice)
|
|
184
|
+
|
|
185
|
+
| Symptom | Cause | Fix |
|
|
186
|
+
|---------|-------|-----|
|
|
187
|
+
| `--tls-cert is required when TLS is enabled` | gateway started with mTLS but no certs | run with `--disable-tls` |
|
|
188
|
+
| `failed to bind to 172.16.x.1:17670: Cannot assign requested address` | gateway running *inside* a container can't bind the bridge IP | run the gateway on the **host** (this doc) |
|
|
189
|
+
| `failed to query Docker daemon version: ... Connect` | the gateway process has no Docker socket access | run as a user in the `docker` group (no sudo at runtime); for the systemd `--user` unit, re-login so it inherits the group |
|
|
190
|
+
| Agent log: `Docker not available` | the agent container can't reach Docker | mount `/var/run/docker.sock` + set `DOCKER_GID` to the host docker group GID |
|
|
191
|
+
| `Bind for 0.0.0.0:<port> failed: port is already allocated` (Coolify) | a `ports:` publish collides with Coolify's proxy | remove `ports:` — Coolify routes the domain via its own proxy |
|
|
192
|
+
| Agent log: `cannot reach …:17670` | gateway down, or `host.docker.internal` doesn't resolve | confirm the host gateway is up (`ss -ltnp | grep 17670`) and `extra_hosts: host.docker.internal:host-gateway` is set |
|
|
193
|
+
| `error: invalid value '1' for '--gateway-insecure'` | `OPENSHELL_GATEWAY_INSECURE` set to `1`/`0` | the value must be `true`/`false` → `OPENSHELL_GATEWAY_INSECURE=true` |
|
|
194
|
+
| `sandbox create failed: ... missing authorization header` | gateway has no auth mechanism, but rejects unauthenticated callers | add `[openshell.gateway.auth] allow_unauthenticated_users = true` to the gateway config |
|
|
195
|
+
| `sandbox create failed: docker sandboxes require gateway JWT auth` | the gateway can't mint the sandbox supervisor's JWT | add `[openshell.gateway.gateway_jwt]` (signing/public/kid paths) to the gateway config |
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agent-framework-lib"
|
|
7
|
-
version = "0.8.
|
|
7
|
+
version = "0.8.8post3"
|
|
8
8
|
description = "A comprehensive Python framework for building and serving conversational AI agents with FastAPI"
|
|
9
9
|
readme = {file = "README.md", content-type = "text/markdown"}
|
|
10
10
|
license = {text = "MIT"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agent_framework_lib-0.8.8 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/audit.py
RENAMED
|
File without changes
|