agent-framework-lib 0.8.8.post2__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.
Files changed (337) hide show
  1. {agent_framework_lib-0.8.8.post2/agent_framework_lib.egg-info → agent_framework_lib-0.8.8.post3}/PKG-INFO +1 -1
  2. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/security/authz.py +36 -3
  3. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/security/sandbox_provider.py +14 -3
  4. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/shell_tool.py +22 -1
  5. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/server.py +18 -17
  6. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3/agent_framework_lib.egg-info}/PKG-INFO +1 -1
  7. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework_lib.egg-info/SOURCES.txt +1 -0
  8. agent_framework_lib-0.8.8.post3/docs/OPENSHELL_GATEWAY_HOST_SETUP.md +195 -0
  9. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/pyproject.toml +1 -1
  10. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/ARCHITECTURE.md +0 -0
  11. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/LICENSE +0 -0
  12. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/MANIFEST.in +0 -0
  13. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/README.md +0 -0
  14. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/__init__.py +0 -0
  15. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/__init__.py +0 -0
  16. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/base.py +0 -0
  17. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/__init__.py +0 -0
  18. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
  19. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
  20. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
  21. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
  22. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
  23. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
  24. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
  25. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/models.py +0 -0
  26. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/providers/__init__.py +0 -0
  27. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
  28. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/a2a/providers/postgres_provider.py +0 -0
  29. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/capabilities/__init__.py +0 -0
  30. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/capabilities/resolver.py +0 -0
  31. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/__init__.py +0 -0
  32. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/audit.py +0 -0
  33. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/config.py +0 -0
  34. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/crypto.py +0 -0
  35. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/git_provider.py +0 -0
  36. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/herdr_client.py +0 -0
  37. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/models.py +0 -0
  38. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/orchestrator.py +0 -0
  39. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/store.py +0 -0
  40. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/code_delivery/tools.py +0 -0
  41. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/__init__.py +0 -0
  42. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/activity_formatter.py +0 -0
  43. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/agent_interface.py +0 -0
  44. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/agent_provider.py +0 -0
  45. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/base_agent.py +0 -0
  46. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/context_budget.py +0 -0
  47. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/context_summarizer.py +0 -0
  48. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/elasticsearch_config_provider.py +0 -0
  49. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/execution_controller.py +0 -0
  50. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/implementation_validator.py +0 -0
  51. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/interruption_message.py +0 -0
  52. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/knowledge_state.py +0 -0
  53. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/loop_detector.py +0 -0
  54. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/model_clients.py +0 -0
  55. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/model_config.py +0 -0
  56. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/model_router.py +0 -0
  57. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/models.py +0 -0
  58. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/prompt_builder.py +0 -0
  59. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/provider_calibration.py +0 -0
  60. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/scratchpad_compressor.py +0 -0
  61. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/scratchpad_serializer.py +0 -0
  62. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/state_manager.py +0 -0
  63. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/step_display_config.py +0 -0
  64. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/core/streaming_parts_accumulator.py +0 -0
  65. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/implementations/__init__.py +0 -0
  66. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/implementations/budget_aware_agent.py +0 -0
  67. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/implementations/llamaindex_agent.py +0 -0
  68. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
  69. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/implementations/microsoft_agent.py +0 -0
  70. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/__init__.py +0 -0
  71. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/agent_mixin.py +0 -0
  72. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/base.py +0 -0
  73. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/config.py +0 -0
  74. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/hypothesis_engine.py +0 -0
  75. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/implicit_feedback.py +0 -0
  76. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/manager.py +0 -0
  77. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/personalization.py +0 -0
  78. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/providers/__init__.py +0 -0
  79. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/providers/graphiti_provider.py +0 -0
  80. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/providers/memori_provider.py +0 -0
  81. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/response_lessons.py +0 -0
  82. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/tools.py +0 -0
  83. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/memory/work_patterns.py +0 -0
  84. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/__init__.py +0 -0
  85. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/api_timing_tracker.py +0 -0
  86. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
  87. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
  88. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/error_handling.py +0 -0
  89. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/error_logging.py +0 -0
  90. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
  91. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/llm_metrics.py +0 -0
  92. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/llm_metrics_collector.py +0 -0
  93. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
  94. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/metrics_aggregator.py +0 -0
  95. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/metrics_config.py +0 -0
  96. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/observability_manager.py +0 -0
  97. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/otel_instrumentor.py +0 -0
  98. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/otel_logging_handler.py +0 -0
  99. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
  100. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/otel_setup.py +0 -0
  101. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/performance_monitor.py +0 -0
  102. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/progress_tracker.py +0 -0
  103. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/resource_manager.py +0 -0
  104. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
  105. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
  106. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/timing_tracker.py +0 -0
  107. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/token_counter.py +0 -0
  108. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/monitoring/tracing_context.py +0 -0
  109. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/notifications/__init__.py +0 -0
  110. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/notifications/hub.py +0 -0
  111. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/notifications/webhook_notifier.py +0 -0
  112. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/processing/__init__.py +0 -0
  113. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/processing/ai_content_management.py +0 -0
  114. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/processing/markdown_converter.py +0 -0
  115. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/processing/multimodal_integration.py +0 -0
  116. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/processing/rich_content_validation.py +0 -0
  117. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/py.typed +0 -0
  118. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/security/__init__.py +0 -0
  119. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/security/file_view_token.py +0 -0
  120. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/security/input_guard.py +0 -0
  121. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/security/openshell_policy.yaml +0 -0
  122. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/security/pii_redactor.py +0 -0
  123. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/security/sandbox.py +0 -0
  124. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/security/secret_redactor.py +0 -0
  125. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/security/shell_env.py +0 -0
  126. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/security/upload_token.py +0 -0
  127. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/session/__init__.py +0 -0
  128. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/session/elasticsearch_session_storage.py +0 -0
  129. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/session/session_storage.py +0 -0
  130. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/__init__.py +0 -0
  131. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/agent_mixin.py +0 -0
  132. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/base.py +0 -0
  133. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/__init__.py +0 -0
  134. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/scripts/__init__.py +0 -0
  135. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/scripts/create_and_register.py +0 -0
  136. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/scripts/register_to_storage.py +0 -0
  137. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/chart/SKILL.md +0 -0
  138. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/chart/chart_to_image.py +0 -0
  139. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/chart/vendor_chart.umd.min.js +0 -0
  140. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/code_delivery/SKILL.md +0 -0
  141. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/code_format/SKILL.md +0 -0
  142. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/code_format/format_python.py +0 -0
  143. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/csv/SKILL.md +0 -0
  144. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/csv/create_csv.py +0 -0
  145. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/csv/read_csv.py +0 -0
  146. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/csv/transform_csv.py +0 -0
  147. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/data_format/SKILL.md +0 -0
  148. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/data_format/json_to_yaml.py +0 -0
  149. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/data_format/yaml_to_json.py +0 -0
  150. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/drawio/SKILL.md +0 -0
  151. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/drawio/create_drawio.py +0 -0
  152. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/email_template/SKILL.md +0 -0
  153. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/excel/SKILL.md +0 -0
  154. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/excel/create_excel.py +0 -0
  155. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file/SKILL.md +0 -0
  156. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file/create_file.py +0 -0
  157. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file/list_files.py +0 -0
  158. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file/read_file.py +0 -0
  159. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file_access/SKILL.md +0 -0
  160. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file_access/download_to_local.py +0 -0
  161. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/file_access/get_file_path.py +0 -0
  162. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/form/SKILL.md +0 -0
  163. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/image_display/SKILL.md +0 -0
  164. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/image_gen/SKILL.md +0 -0
  165. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/image_gen/create_image.py +0 -0
  166. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/image_gen/generate_image.py +0 -0
  167. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/mermaid/SKILL.md +0 -0
  168. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +0 -0
  169. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/mermaid/vendor_mermaid.umd.min.js +0 -0
  170. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/multimodal/SKILL.md +0 -0
  171. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +0 -0
  172. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/SKILL.md +0 -0
  173. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/create_powerpoint.py +0 -0
  174. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/templates/Big Data Infographics.pptx +0 -0
  175. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/templates/Executive Design Pitch Deck.pptx +0 -0
  176. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/templates/Management Consulting Toolkit.pptx +0 -0
  177. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/templates/__init__.py +0 -0
  178. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/powerpoint/templates/generate_templates.py +0 -0
  179. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/skill_creator/SKILL.md +0 -0
  180. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/skill_creator/skill_api.py +0 -0
  181. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/table/SKILL.md +0 -0
  182. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/table/table_to_image.py +0 -0
  183. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +0 -0
  184. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +0 -0
  185. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/web_news_search/SKILL.md +0 -0
  186. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/web_news_search/web_news_search.py +0 -0
  187. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/word/SKILL.md +0 -0
  188. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/builtin/skills/word/create_word.py +0 -0
  189. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/custom_skill_manager.py +0 -0
  190. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/discovery_prompt.py +0 -0
  191. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/markdown_loader.py +0 -0
  192. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/skills/tools.py +0 -0
  193. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/storage/__init__.py +0 -0
  194. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/storage/file_storages.py +0 -0
  195. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/storage/file_system_management.py +0 -0
  196. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/storage/storage_optimizer.py +0 -0
  197. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/subagents/__init__.py +0 -0
  198. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/subagents/executor.py +0 -0
  199. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/subagents/message_injector.py +0 -0
  200. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/subagents/message_queue.py +0 -0
  201. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/subagents/retrigger.py +0 -0
  202. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/subagents/spawn_tool.py +0 -0
  203. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/__init__.py +0 -0
  204. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/activity_callback.py +0 -0
  205. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/adaptive_pdf_css.py +0 -0
  206. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/base.py +0 -0
  207. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/html_content_analyzer.py +0 -0
  208. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/multimodal_tools.py +0 -0
  209. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/pdf_image_scaler.py +0 -0
  210. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/sizing_config.py +0 -0
  211. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/web_fetch_tool.py +0 -0
  212. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/tools/web_search_tool.py +0 -0
  213. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/utils/__init__.py +0 -0
  214. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/utils/path_utils.py +0 -0
  215. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/utils/post_install.py +0 -0
  216. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/utils/session_title_generator.py +0 -0
  217. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/utils/source_detector.py +0 -0
  218. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/utils/special_blocks.py +0 -0
  219. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/__init__.py +0 -0
  220. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/admin_auth.py +0 -0
  221. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/admin_models.py +0 -0
  222. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/admin_router.py +0 -0
  223. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/admin_services.py +0 -0
  224. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/api_timing_middleware.py +0 -0
  225. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
  226. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  227. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/CREATING_AGENTS.md +0 -0
  228. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
  229. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
  230. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/Dockerfile +0 -0
  231. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/GETTING_STARTED.md +0 -0
  232. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/GITNEXUS_USER_GUIDE.md +0 -0
  233. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
  234. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/README.md +0 -0
  235. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  236. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/WORKSPACE_INTEGRATION.md +0 -0
  237. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/api-reference.md +0 -0
  238. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/configuration.md +0 -0
  239. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/docker-compose.yml +0 -0
  240. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_example_multi_skills.py +0 -0
  241. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_with_file_storage.py +0 -0
  242. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_with_mcp.py +0 -0
  243. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_with_memory.py +0 -0
  244. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_with_memory_graphiti.py +0 -0
  245. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_with_memory_hybrid.py +0 -0
  246. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/agent_with_memory_simple.py +0 -0
  247. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/custom_framework_agent.py +0 -0
  248. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/simple_agent.py +0 -0
  249. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/examples/skills_demo_agent.py +0 -0
  250. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/docs/installation-guide.md +0 -0
  251. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/documentation_generator.py +0 -0
  252. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/gitnexus_client.py +0 -0
  253. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/helper_agent.py +0 -0
  254. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/helper_ui.html +0 -0
  255. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/modern_ui.html +0 -0
  256. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/observability/kibana-llm-dashboard-setup.json +0 -0
  257. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/observability/kibana-resource-metrics-dashboard.json +0 -0
  258. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/otel_tracing_middleware.py +0 -0
  259. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/skills_router.py +0 -0
  260. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/web/test_app.html +0 -0
  261. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/__init__.py +0 -0
  262. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/artefacts.py +0 -0
  263. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/client.py +0 -0
  264. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/config.py +0 -0
  265. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/context.py +0 -0
  266. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/cursor.py +0 -0
  267. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/memory.py +0 -0
  268. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/models.py +0 -0
  269. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/poller.py +0 -0
  270. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/preferences.py +0 -0
  271. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/router.py +0 -0
  272. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/session.py +0 -0
  273. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework/workspace/subscription.py +0 -0
  274. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
  275. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework_lib.egg-info/entry_points.txt +0 -0
  276. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework_lib.egg-info/requires.txt +0 -0
  277. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/agent_framework_lib.egg-info/top_level.txt +0 -0
  278. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/A2A_GUIDE.md +0 -0
  279. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
  280. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/ARCHITECTURE_DIAGRAM.md +0 -0
  281. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  282. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/CANCEL_AND_INTERRUPT_FRONTEND.md +0 -0
  283. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
  284. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/CREATING_AGENTS.md +0 -0
  285. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
  286. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/DEEPEVAL_TEST_REPORT.md +0 -0
  287. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/DIAGNOSTIC_SANDBOX_SKILLS.md +0 -0
  288. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/DOCKER_SETUP.md +0 -0
  289. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +0 -0
  290. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
  291. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/FILE_STORAGE_GUIDE.md +0 -0
  292. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/GETTING_STARTED.md +0 -0
  293. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/GITNEXUS_USER_GUIDE.md +0 -0
  294. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/HISTORY_MESSAGE_FORMAT.md +0 -0
  295. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
  296. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/MEMORY_INSTALLATION.md +0 -0
  297. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
  298. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/MULTIMODAL_TOOLS_GUIDE.md +0 -0
  299. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/OBSERVABILITY_GUIDE.md +0 -0
  300. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/PYPI_PUBLISHING.md +0 -0
  301. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/QA_STREAMING_LATENCY.md +0 -0
  302. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/SCREENSHOTS_GUIDE.md +0 -0
  303. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/SECRETS_MANAGEMENT.md +0 -0
  304. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/SECURITY_HARDENING.md +0 -0
  305. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
  306. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/SSE_NOTIFICATIONS_GUIDE.md +0 -0
  307. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/STREAMING_EVENTS_FRONTEND.md +0 -0
  308. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  309. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/WORKSPACE_INTEGRATION.md +0 -0
  310. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/api-reference.md +0 -0
  311. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/configuration.md +0 -0
  312. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/framework_audit_remarques.md +0 -0
  313. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/helper_agent.md +0 -0
  314. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/index.md +0 -0
  315. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/docs/installation-guide.md +0 -0
  316. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/README.md +0 -0
  317. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/agent_context_budget_test.py +0 -0
  318. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/agent_example_multi_skills.py +0 -0
  319. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/agent_exemple_test.py +0 -0
  320. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/agent_training_with_apo.py +0 -0
  321. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/agent_with_custom_tools_file_storage.py +0 -0
  322. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/agent_with_file_storage.py +0 -0
  323. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/agent_with_mcp.py +0 -0
  324. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/agent_with_memory_graphiti.py +0 -0
  325. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/agent_with_memory_hybrid.py +0 -0
  326. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/agent_with_memory_simple.py +0 -0
  327. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/agent_with_personalization.py +0 -0
  328. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/biagenttest.py +0 -0
  329. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/custom_framework_agent.py +0 -0
  330. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/dependencies/docker-compose.yaml +0 -0
  331. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/pyproject.toml +0 -0
  332. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/simple_agent.py +0 -0
  333. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/skills_demo_agent.py +0 -0
  334. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/test_work_patterns_live.py +0 -0
  335. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/examples/workspace_test_agent.py +0 -0
  336. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/setup.cfg +0 -0
  337. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post3}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-framework-lib
3
- Version: 0.8.8.post2
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>
@@ -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, ou si le mode
68
- développement est actif et que le principal est ``"anonymous"``
69
- (compat mono-utilisateur).
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.debug(
479
- "openshell download (no output?) for %s: %s",
484
+ logger.warning(
485
+ "[sandbox] download failed for %s (src=%s) rc=%s — generated files "
486
+ "may be lost: %s",
480
487
  name,
481
- (proc.stdout + proc.stderr).strip()[:200],
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:
@@ -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
- with contextlib.suppress(Exception):
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
@@ -2330,7 +2331,7 @@ async def handle_message_endpoint(
2330
2331
  # mismatch that made uploaded files 404 on download. In dev-mode (auth
2331
2332
  # disabled) the query param is honored for single-user compatibility.
2332
2333
  # Mirrors /files/upload (see effective_user_id there).
2333
- user_id = current_user if auth_required() else user_id
2334
+ user_id = resolve_effective_user_id(current_user, user_id)
2334
2335
 
2335
2336
  # Determine session_id: query param > body.session_id > new UUID
2336
2337
  session_id_from_query = request.query_params.get("session_id")
@@ -2744,7 +2745,7 @@ async def handle_stream_endpoint(
2744
2745
  # user_id query param — bind the session (and every file it stores) to the
2745
2746
  # authenticated principal. In dev-mode (auth disabled) the query param is
2746
2747
  # honored for single-user compatibility. Mirrors /files/upload.
2747
- user_id = current_user if auth_required() else user_id
2748
+ user_id = resolve_effective_user_id(current_user, user_id)
2748
2749
 
2749
2750
  # Support both /sessions/{session_id}/stream and /stream?session_id=...
2750
2751
  # If session_id is not provided as a path parameter, try to get it from query/body
@@ -4099,7 +4100,7 @@ async def list_sessions_endpoint(
4099
4100
 
4100
4101
  # Multi-tenant: under auth, list only the authenticated principal's sessions
4101
4102
  # (ignore client user_id). Keeps the UI consistent with /message + /stream.
4102
- user_id = current_user if auth_required() else user_id
4103
+ user_id = resolve_effective_user_id(current_user, user_id)
4103
4104
 
4104
4105
  if not session_storage:
4105
4106
  raise HTTPException(status_code=500, detail="Session storage not available")
@@ -4151,7 +4152,7 @@ async def list_sessions_with_info_endpoint(
4151
4152
 
4152
4153
  # Multi-tenant: under auth, list only the authenticated principal's sessions
4153
4154
  # (ignore client user_id). Keeps the UI consistent with /message + /stream.
4154
- user_id = current_user if auth_required() else user_id
4155
+ user_id = resolve_effective_user_id(current_user, user_id)
4155
4156
 
4156
4157
  if not session_storage:
4157
4158
  raise HTTPException(status_code=500, detail="Session storage not available")
@@ -4256,7 +4257,7 @@ async def cancel_execution_endpoint(
4256
4257
 
4257
4258
  # Multi-tenant: under auth, only the authenticated principal may cancel their
4258
4259
  # own session (ignore client user_id). Matches /message + /stream ownership.
4259
- user_id = current_user if auth_required() else user_id
4260
+ user_id = resolve_effective_user_id(current_user, user_id)
4260
4261
 
4261
4262
  if not session_storage:
4262
4263
  raise HTTPException(status_code=500, detail="Session storage not available")
@@ -4332,7 +4333,7 @@ async def get_execution_state_endpoint(
4332
4333
 
4333
4334
  # Multi-tenant: under auth, scope to the authenticated principal (ignore
4334
4335
  # client user_id) so ownership matches /message + /stream.
4335
- user_id = current_user if auth_required() else user_id
4336
+ user_id = resolve_effective_user_id(current_user, user_id)
4336
4337
 
4337
4338
  if not session_storage:
4338
4339
  raise HTTPException(status_code=500, detail="Session storage not available")
@@ -4423,7 +4424,7 @@ async def get_history_endpoint(
4423
4424
  # Multi-tenant: under auth, scope reads to the authenticated principal and
4424
4425
  # ignore the client-supplied user_id. Mirrors the write side (/message,
4425
4426
  # /stream) so sessions created there are visible to the same UI identity.
4426
- user_id = current_user if auth_required() else user_id
4427
+ user_id = resolve_effective_user_id(current_user, user_id)
4427
4428
 
4428
4429
  if not session_storage:
4429
4430
  raise HTTPException(status_code=500, detail="Session storage not available")
@@ -5059,7 +5060,7 @@ async def get_code_delivery_config_endpoint(
5059
5060
  # The client-provided user_id query param is only honored in dev-mode to
5060
5061
  # preserve single-user/finalizer compatibility (cannot be used to read or
5061
5062
  # mutate another user's code-delivery config when auth is enabled).
5062
- effective_user_id = current_user if auth_required() else user_id
5063
+ effective_user_id = resolve_effective_user_id(current_user, user_id)
5063
5064
 
5064
5065
  resolved = await get_shared_store().resolve(effective_user_id, session_id)
5065
5066
  meta = resolved.github_auth
@@ -5103,7 +5104,7 @@ async def set_code_delivery_github_auth_endpoint(
5103
5104
  )
5104
5105
  # Storage identity bound to the authenticated principal (query param honored
5105
5106
  # only in dev-mode) so a user cannot store a token under another identity.
5106
- effective_user_id = current_user if auth_required() else user_id
5107
+ effective_user_id = resolve_effective_user_id(current_user, user_id)
5107
5108
  try:
5108
5109
  await get_shared_store().set_github_token(
5109
5110
  effective_user_id, body.token, meta, session_id=body.session_id
@@ -5128,7 +5129,7 @@ async def delete_code_delivery_github_auth_endpoint(
5128
5129
  from agent_framework.code_delivery.store import get_shared_store
5129
5130
 
5130
5131
  # Storage identity bound to the authenticated principal (dev-mode honors the query param).
5131
- effective_user_id = current_user if auth_required() else user_id
5132
+ effective_user_id = resolve_effective_user_id(current_user, user_id)
5132
5133
  await get_shared_store().clear_github_token(effective_user_id, session_id=session_id)
5133
5134
  return {"success": True, "scope": "session" if session_id else "user"}
5134
5135
 
@@ -5143,7 +5144,7 @@ async def get_code_delivery_repos_endpoint(
5143
5144
  from agent_framework.code_delivery.store import get_shared_store
5144
5145
 
5145
5146
  # Storage identity bound to the authenticated principal (dev-mode honors the query param).
5146
- effective_user_id = current_user if auth_required() else user_id
5147
+ effective_user_id = resolve_effective_user_id(current_user, user_id)
5147
5148
  resolved = await get_shared_store().resolve(effective_user_id, session_id)
5148
5149
  return {"repos": [r.model_dump() for r in resolved.repos]}
5149
5150
 
@@ -5160,7 +5161,7 @@ async def set_code_delivery_repos_endpoint(
5160
5161
 
5161
5162
  repos = [RepoEntry(**r.model_dump()) for r in body.repos]
5162
5163
  # Storage identity bound to the authenticated principal (dev-mode honors the query param).
5163
- effective_user_id = current_user if auth_required() else user_id
5164
+ effective_user_id = resolve_effective_user_id(current_user, user_id)
5164
5165
  await get_shared_store().set_repos(effective_user_id, repos, session_id=body.session_id)
5165
5166
  return {"success": True, "count": len(repos)}
5166
5167
 
@@ -5211,7 +5212,7 @@ async def set_code_delivery_herdr_endpoint(
5211
5212
  if body.mode not in ("local", "remote"):
5212
5213
  raise HTTPException(status_code=400, detail="mode must be 'local' or 'remote'")
5213
5214
  # Storage identity bound to the authenticated principal (dev-mode honors the query param).
5214
- effective_user_id = current_user if auth_required() else user_id
5215
+ effective_user_id = resolve_effective_user_id(current_user, user_id)
5215
5216
  fields: dict[str, Any] = {"mode": body.mode}
5216
5217
  if body.base_url is not None:
5217
5218
  # SSRF / token-exfiltration guard before persistence or use.
@@ -5244,7 +5245,7 @@ async def set_code_delivery_settings_endpoint(
5244
5245
  model=body.backend_model or "claude-sonnet-4-20250514",
5245
5246
  )
5246
5247
  # Storage identity bound to the authenticated principal (dev-mode honors the query param).
5247
- effective_user_id = current_user if auth_required() else user_id
5248
+ effective_user_id = resolve_effective_user_id(current_user, user_id)
5248
5249
  await get_shared_store().set_settings(
5249
5250
  effective_user_id,
5250
5251
  enabled=body.enabled,
@@ -5317,7 +5318,7 @@ async def upload_file(
5317
5318
  # spoofing another user's ownership. In dev-mode the query param is
5318
5319
  # honored (passive finalizer uploads via localhost using the
5319
5320
  # AGENT_USER_ID wiring), preserving single-user compatibility.
5320
- effective_user_id = current_user if auth_required() else user_id
5321
+ effective_user_id = resolve_effective_user_id(current_user, user_id)
5321
5322
 
5322
5323
  file_id = await app.state.file_storage_manager.store_file(
5323
5324
  content=content,
@@ -5665,7 +5666,7 @@ async def list_files(
5665
5666
  # Multi-tenant: under auth, list only the authenticated principal's files
5666
5667
  # (ignore the client user_id) so the UI sees the files uploaded by skills,
5667
5668
  # which are owned by the same principal. Mirrors /files/upload + download.
5668
- user_id = current_user if auth_required() else user_id
5669
+ user_id = resolve_effective_user_id(current_user, user_id)
5669
5670
  try:
5670
5671
  logger.info(
5671
5672
  f"🔍 FILES ENDPOINT - Parameters: user_id={user_id}, session_id={session_id}, is_generated={is_generated}"
@@ -6973,7 +6974,7 @@ async def get_session_response_times_endpoint(
6973
6974
  # Multi-tenant: under auth, scope to the authenticated principal (ignore the
6974
6975
  # client user_id) so the ownership check below matches sessions created by
6975
6976
  # /message and /stream under the same identity.
6976
- user_id = current_user if auth_required() else user_id
6977
+ user_id = resolve_effective_user_id(current_user, user_id)
6977
6978
 
6978
6979
  if session_storage is None:
6979
6980
  raise HTTPException(status_code=500, detail="Session storage not available")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-framework-lib
3
- Version: 0.8.8.post2
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.8post2"
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"}