agent-framework-lib 0.8.8.post3__tar.gz → 0.8.8.post5__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.post3/agent_framework_lib.egg-info → agent_framework_lib-0.8.8.post5}/PKG-INFO +1 -1
  2. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/providers/graphiti_provider.py +23 -13
  3. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/security/authz.py +13 -12
  4. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/scripts/create_and_register.py +40 -22
  5. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/chart/SKILL.md +7 -3
  6. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/csv/SKILL.md +21 -5
  7. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/drawio/SKILL.md +7 -3
  8. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/excel/SKILL.md +7 -7
  9. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/file/SKILL.md +8 -2
  10. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/image_gen/SKILL.md +8 -9
  11. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/mermaid/SKILL.md +7 -3
  12. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/powerpoint/SKILL.md +8 -9
  13. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/table/SKILL.md +7 -3
  14. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +7 -3
  15. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/word/SKILL.md +7 -18
  16. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/tools/shell_tool.py +23 -12
  17. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5/agent_framework_lib.egg-info}/PKG-INFO +1 -1
  18. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/OPENSHELL_GATEWAY_HOST_SETUP.md +10 -2
  19. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/pyproject.toml +1 -1
  20. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/ARCHITECTURE.md +0 -0
  21. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/LICENSE +0 -0
  22. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/MANIFEST.in +0 -0
  23. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/README.md +0 -0
  24. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/__init__.py +0 -0
  25. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/__init__.py +0 -0
  26. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/base.py +0 -0
  27. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/endpoints/__init__.py +0 -0
  28. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
  29. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
  30. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
  31. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
  32. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
  33. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
  34. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
  35. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/models.py +0 -0
  36. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/providers/__init__.py +0 -0
  37. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
  38. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/a2a/providers/postgres_provider.py +0 -0
  39. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/capabilities/__init__.py +0 -0
  40. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/capabilities/resolver.py +0 -0
  41. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/code_delivery/__init__.py +0 -0
  42. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/code_delivery/audit.py +0 -0
  43. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/code_delivery/config.py +0 -0
  44. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/code_delivery/crypto.py +0 -0
  45. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/code_delivery/git_provider.py +0 -0
  46. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/code_delivery/herdr_client.py +0 -0
  47. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/code_delivery/models.py +0 -0
  48. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/code_delivery/orchestrator.py +0 -0
  49. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/code_delivery/store.py +0 -0
  50. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/code_delivery/tools.py +0 -0
  51. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/__init__.py +0 -0
  52. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/activity_formatter.py +0 -0
  53. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/agent_interface.py +0 -0
  54. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/agent_provider.py +0 -0
  55. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/base_agent.py +0 -0
  56. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/context_budget.py +0 -0
  57. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/context_summarizer.py +0 -0
  58. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/elasticsearch_config_provider.py +0 -0
  59. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/execution_controller.py +0 -0
  60. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/implementation_validator.py +0 -0
  61. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/interruption_message.py +0 -0
  62. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/knowledge_state.py +0 -0
  63. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/loop_detector.py +0 -0
  64. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/model_clients.py +0 -0
  65. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/model_config.py +0 -0
  66. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/model_router.py +0 -0
  67. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/models.py +0 -0
  68. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/prompt_builder.py +0 -0
  69. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/provider_calibration.py +0 -0
  70. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/scratchpad_compressor.py +0 -0
  71. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/scratchpad_serializer.py +0 -0
  72. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/state_manager.py +0 -0
  73. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/step_display_config.py +0 -0
  74. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/core/streaming_parts_accumulator.py +0 -0
  75. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/implementations/__init__.py +0 -0
  76. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/implementations/budget_aware_agent.py +0 -0
  77. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/implementations/llamaindex_agent.py +0 -0
  78. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
  79. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/implementations/microsoft_agent.py +0 -0
  80. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/__init__.py +0 -0
  81. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/agent_mixin.py +0 -0
  82. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/base.py +0 -0
  83. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/config.py +0 -0
  84. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/hypothesis_engine.py +0 -0
  85. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/implicit_feedback.py +0 -0
  86. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/manager.py +0 -0
  87. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/personalization.py +0 -0
  88. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/providers/__init__.py +0 -0
  89. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/providers/memori_provider.py +0 -0
  90. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/response_lessons.py +0 -0
  91. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/tools.py +0 -0
  92. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/memory/work_patterns.py +0 -0
  93. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/__init__.py +0 -0
  94. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/api_timing_tracker.py +0 -0
  95. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
  96. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
  97. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/error_handling.py +0 -0
  98. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/error_logging.py +0 -0
  99. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
  100. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/llm_metrics.py +0 -0
  101. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/llm_metrics_collector.py +0 -0
  102. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
  103. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/metrics_aggregator.py +0 -0
  104. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/metrics_config.py +0 -0
  105. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/observability_manager.py +0 -0
  106. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/otel_instrumentor.py +0 -0
  107. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/otel_logging_handler.py +0 -0
  108. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
  109. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/otel_setup.py +0 -0
  110. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/performance_monitor.py +0 -0
  111. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/progress_tracker.py +0 -0
  112. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/resource_manager.py +0 -0
  113. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
  114. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
  115. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/timing_tracker.py +0 -0
  116. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/token_counter.py +0 -0
  117. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/monitoring/tracing_context.py +0 -0
  118. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/notifications/__init__.py +0 -0
  119. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/notifications/hub.py +0 -0
  120. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/notifications/webhook_notifier.py +0 -0
  121. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/processing/__init__.py +0 -0
  122. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/processing/ai_content_management.py +0 -0
  123. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/processing/markdown_converter.py +0 -0
  124. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/processing/multimodal_integration.py +0 -0
  125. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/processing/rich_content_validation.py +0 -0
  126. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/py.typed +0 -0
  127. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/security/__init__.py +0 -0
  128. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/security/file_view_token.py +0 -0
  129. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/security/input_guard.py +0 -0
  130. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/security/openshell_policy.yaml +0 -0
  131. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/security/pii_redactor.py +0 -0
  132. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/security/sandbox.py +0 -0
  133. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/security/sandbox_provider.py +0 -0
  134. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/security/secret_redactor.py +0 -0
  135. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/security/shell_env.py +0 -0
  136. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/security/upload_token.py +0 -0
  137. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/session/__init__.py +0 -0
  138. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/session/elasticsearch_session_storage.py +0 -0
  139. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/session/session_storage.py +0 -0
  140. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/__init__.py +0 -0
  141. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/agent_mixin.py +0 -0
  142. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/base.py +0 -0
  143. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/__init__.py +0 -0
  144. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/scripts/__init__.py +0 -0
  145. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/scripts/register_to_storage.py +0 -0
  146. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/chart/chart_to_image.py +0 -0
  147. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/chart/vendor_chart.umd.min.js +0 -0
  148. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/code_delivery/SKILL.md +0 -0
  149. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/code_format/SKILL.md +0 -0
  150. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/code_format/format_python.py +0 -0
  151. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/csv/create_csv.py +0 -0
  152. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/csv/read_csv.py +0 -0
  153. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/csv/transform_csv.py +0 -0
  154. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/data_format/SKILL.md +0 -0
  155. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/data_format/json_to_yaml.py +0 -0
  156. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/data_format/yaml_to_json.py +0 -0
  157. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/drawio/create_drawio.py +0 -0
  158. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/email_template/SKILL.md +0 -0
  159. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/excel/create_excel.py +0 -0
  160. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/file/create_file.py +0 -0
  161. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/file/list_files.py +0 -0
  162. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/file/read_file.py +0 -0
  163. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/file_access/SKILL.md +0 -0
  164. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/file_access/download_to_local.py +0 -0
  165. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/file_access/get_file_path.py +0 -0
  166. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/form/SKILL.md +0 -0
  167. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/image_display/SKILL.md +0 -0
  168. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/image_gen/create_image.py +0 -0
  169. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/image_gen/generate_image.py +0 -0
  170. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +0 -0
  171. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/mermaid/vendor_mermaid.umd.min.js +0 -0
  172. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/multimodal/SKILL.md +0 -0
  173. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +0 -0
  174. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/powerpoint/create_powerpoint.py +0 -0
  175. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/powerpoint/templates/Big Data Infographics.pptx +0 -0
  176. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/powerpoint/templates/Executive Design Pitch Deck.pptx +0 -0
  177. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/powerpoint/templates/Management Consulting Toolkit.pptx +0 -0
  178. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/powerpoint/templates/__init__.py +0 -0
  179. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/powerpoint/templates/generate_templates.py +0 -0
  180. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/skill_creator/SKILL.md +0 -0
  181. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/skill_creator/skill_api.py +0 -0
  182. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/table/table_to_image.py +0 -0
  183. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +0 -0
  184. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/web_news_search/SKILL.md +0 -0
  185. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/web_news_search/web_news_search.py +0 -0
  186. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/builtin/skills/word/create_word.py +0 -0
  187. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/custom_skill_manager.py +0 -0
  188. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/discovery_prompt.py +0 -0
  189. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/markdown_loader.py +0 -0
  190. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/skills/tools.py +0 -0
  191. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/storage/__init__.py +0 -0
  192. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/storage/file_storages.py +0 -0
  193. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/storage/file_system_management.py +0 -0
  194. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/storage/storage_optimizer.py +0 -0
  195. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/subagents/__init__.py +0 -0
  196. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/subagents/executor.py +0 -0
  197. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/subagents/message_injector.py +0 -0
  198. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/subagents/message_queue.py +0 -0
  199. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/subagents/retrigger.py +0 -0
  200. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/subagents/spawn_tool.py +0 -0
  201. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/tools/__init__.py +0 -0
  202. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/tools/activity_callback.py +0 -0
  203. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/tools/adaptive_pdf_css.py +0 -0
  204. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/tools/base.py +0 -0
  205. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/tools/html_content_analyzer.py +0 -0
  206. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/tools/multimodal_tools.py +0 -0
  207. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/tools/pdf_image_scaler.py +0 -0
  208. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/tools/sizing_config.py +0 -0
  209. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/tools/web_fetch_tool.py +0 -0
  210. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/tools/web_search_tool.py +0 -0
  211. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/utils/__init__.py +0 -0
  212. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/utils/path_utils.py +0 -0
  213. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/utils/post_install.py +0 -0
  214. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/utils/session_title_generator.py +0 -0
  215. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/utils/source_detector.py +0 -0
  216. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/utils/special_blocks.py +0 -0
  217. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/__init__.py +0 -0
  218. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/admin_auth.py +0 -0
  219. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/admin_models.py +0 -0
  220. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/admin_router.py +0 -0
  221. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/admin_services.py +0 -0
  222. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/api_timing_middleware.py +0 -0
  223. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
  224. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  225. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/CREATING_AGENTS.md +0 -0
  226. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
  227. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
  228. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/Dockerfile +0 -0
  229. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/GETTING_STARTED.md +0 -0
  230. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/GITNEXUS_USER_GUIDE.md +0 -0
  231. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
  232. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/README.md +0 -0
  233. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  234. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/WORKSPACE_INTEGRATION.md +0 -0
  235. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/api-reference.md +0 -0
  236. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/configuration.md +0 -0
  237. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/docker-compose.yml +0 -0
  238. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/examples/agent_example_multi_skills.py +0 -0
  239. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/examples/agent_with_file_storage.py +0 -0
  240. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/examples/agent_with_mcp.py +0 -0
  241. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/examples/agent_with_memory.py +0 -0
  242. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/examples/agent_with_memory_graphiti.py +0 -0
  243. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/examples/agent_with_memory_hybrid.py +0 -0
  244. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/examples/agent_with_memory_simple.py +0 -0
  245. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/examples/custom_framework_agent.py +0 -0
  246. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/examples/simple_agent.py +0 -0
  247. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/examples/skills_demo_agent.py +0 -0
  248. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/docs/installation-guide.md +0 -0
  249. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/documentation_generator.py +0 -0
  250. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/gitnexus_client.py +0 -0
  251. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/helper_agent.py +0 -0
  252. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/helper_ui.html +0 -0
  253. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/modern_ui.html +0 -0
  254. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/observability/kibana-llm-dashboard-setup.json +0 -0
  255. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/observability/kibana-resource-metrics-dashboard.json +0 -0
  256. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/otel_tracing_middleware.py +0 -0
  257. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/server.py +0 -0
  258. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/skills_router.py +0 -0
  259. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/web/test_app.html +0 -0
  260. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/workspace/__init__.py +0 -0
  261. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/workspace/artefacts.py +0 -0
  262. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/workspace/client.py +0 -0
  263. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/workspace/config.py +0 -0
  264. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/workspace/context.py +0 -0
  265. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/workspace/cursor.py +0 -0
  266. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/workspace/memory.py +0 -0
  267. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/workspace/models.py +0 -0
  268. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/workspace/poller.py +0 -0
  269. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/workspace/preferences.py +0 -0
  270. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/workspace/router.py +0 -0
  271. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/workspace/session.py +0 -0
  272. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework/workspace/subscription.py +0 -0
  273. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework_lib.egg-info/SOURCES.txt +0 -0
  274. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
  275. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework_lib.egg-info/entry_points.txt +0 -0
  276. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework_lib.egg-info/requires.txt +0 -0
  277. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/agent_framework_lib.egg-info/top_level.txt +0 -0
  278. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/A2A_GUIDE.md +0 -0
  279. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
  280. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/ARCHITECTURE_DIAGRAM.md +0 -0
  281. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  282. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/CANCEL_AND_INTERRUPT_FRONTEND.md +0 -0
  283. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
  284. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/CREATING_AGENTS.md +0 -0
  285. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
  286. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/DEEPEVAL_TEST_REPORT.md +0 -0
  287. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/DIAGNOSTIC_SANDBOX_SKILLS.md +0 -0
  288. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/DOCKER_SETUP.md +0 -0
  289. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +0 -0
  290. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
  291. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/FILE_STORAGE_GUIDE.md +0 -0
  292. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/GETTING_STARTED.md +0 -0
  293. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/GITNEXUS_USER_GUIDE.md +0 -0
  294. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/HISTORY_MESSAGE_FORMAT.md +0 -0
  295. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
  296. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/MEMORY_INSTALLATION.md +0 -0
  297. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
  298. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/MULTIMODAL_TOOLS_GUIDE.md +0 -0
  299. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/OBSERVABILITY_GUIDE.md +0 -0
  300. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/PYPI_PUBLISHING.md +0 -0
  301. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/QA_STREAMING_LATENCY.md +0 -0
  302. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/SCREENSHOTS_GUIDE.md +0 -0
  303. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/SECRETS_MANAGEMENT.md +0 -0
  304. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/SECURITY_HARDENING.md +0 -0
  305. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
  306. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/SSE_NOTIFICATIONS_GUIDE.md +0 -0
  307. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/STREAMING_EVENTS_FRONTEND.md +0 -0
  308. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  309. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/WORKSPACE_INTEGRATION.md +0 -0
  310. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/api-reference.md +0 -0
  311. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/configuration.md +0 -0
  312. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/framework_audit_remarques.md +0 -0
  313. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/helper_agent.md +0 -0
  314. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/index.md +0 -0
  315. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/docs/installation-guide.md +0 -0
  316. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/README.md +0 -0
  317. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/agent_context_budget_test.py +0 -0
  318. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/agent_example_multi_skills.py +0 -0
  319. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/agent_exemple_test.py +0 -0
  320. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/agent_training_with_apo.py +0 -0
  321. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/agent_with_custom_tools_file_storage.py +0 -0
  322. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/agent_with_file_storage.py +0 -0
  323. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/agent_with_mcp.py +0 -0
  324. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/agent_with_memory_graphiti.py +0 -0
  325. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/agent_with_memory_hybrid.py +0 -0
  326. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/agent_with_memory_simple.py +0 -0
  327. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/agent_with_personalization.py +0 -0
  328. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/biagenttest.py +0 -0
  329. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/custom_framework_agent.py +0 -0
  330. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/dependencies/docker-compose.yaml +0 -0
  331. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/pyproject.toml +0 -0
  332. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/simple_agent.py +0 -0
  333. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/skills_demo_agent.py +0 -0
  334. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/test_work_patterns_live.py +0 -0
  335. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/examples/workspace_test_agent.py +0 -0
  336. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/setup.cfg +0 -0
  337. {agent_framework_lib-0.8.8.post3 → agent_framework_lib-0.8.8.post5}/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.post3
3
+ Version: 0.8.8.post5
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>
@@ -335,7 +335,6 @@ class GraphitiProvider(MemoryProviderInterface):
335
335
  """
336
336
  import os
337
337
 
338
- from graphiti_core.driver.driver import GraphDriver
339
338
  from graphiti_core.driver.neo4j_driver import Neo4jDriver
340
339
  from neo4j import AsyncGraphDatabase
341
340
 
@@ -351,9 +350,16 @@ class GraphitiProvider(MemoryProviderInterface):
351
350
 
352
351
  class _FailFastNeo4jDriver(Neo4jDriver):
353
352
  def __init__(self, uri: str, user, password, database: str = "neo4j") -> None:
354
- # Bypass Neo4jDriver.__init__ on purpose (untuned client + auto
355
- # index scheduling). Initialize the base, then a TUNED client.
356
- GraphDriver.__init__(self)
353
+ # Run the REAL Neo4jDriver.__init__ so every version-specific
354
+ # attribute exists (graphiti>=0.29 instantiates its Neo4j*Operations
355
+ # objects there — the previous bypass crashed at runtime with
356
+ # AttributeError: '_entity_node_ops'). The two stock behaviors we
357
+ # need to tame are handled differently: the UNTUNED client it
358
+ # builds is swapped for a tuned one right after, and the
359
+ # unconditional index scheduling is neutered via the
360
+ # build_indices_and_constraints override below.
361
+ super().__init__(uri, user, password, database)
362
+ untuned = self.client
357
363
  self.client = AsyncGraphDatabase.driver(
358
364
  uri=uri,
359
365
  auth=(user or "", password or ""),
@@ -361,15 +367,19 @@ class GraphitiProvider(MemoryProviderInterface):
361
367
  connection_acquisition_timeout=_f("NEO4J_CONN_ACQ_TIMEOUT", 5.0),
362
368
  connection_timeout=conn_timeout,
363
369
  )
364
- self._database = database
365
- self.aoss_client = None
366
- if not skip_indices:
367
- import asyncio
368
-
369
- try:
370
- asyncio.get_running_loop().create_task(self.build_indices_and_constraints())
371
- except RuntimeError:
372
- pass
370
+ import asyncio
371
+ import contextlib
372
+
373
+ with contextlib.suppress(RuntimeError):
374
+ asyncio.get_running_loop().create_task(untuned.close())
375
+
376
+ async def build_indices_and_constraints(self, delete_existing: bool = False):
377
+ # Scheduled unconditionally by Neo4jDriver.__init__ (the source of
378
+ # the CREATE INDEX boot storm); honor skip_index_creation here.
379
+ # When it does run, it uses self.client — already the tuned one.
380
+ if skip_indices:
381
+ return None
382
+ return await super().build_indices_and_constraints(delete_existing)
373
383
 
374
384
  driver = _FailFastNeo4jDriver(
375
385
  self.config.neo4j_uri,
@@ -58,19 +58,20 @@ def auth_required() -> bool:
58
58
  def trust_client_user_id() -> bool:
59
59
  """Le déployeur fait confiance au client pour fournir le ``user_id``.
60
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``.
61
+ Piloté par ``AUTH_TRUST_CLIENT_USER_ID`` (défaut ``true``). Cas d'usage
62
+ nominal : un backend de confiance authentifié par API key (un portail) qui
63
+ multiplexe plusieurs end-users et passe leur ``user_id`` en paramètre. Quand
64
+ actif, le serveur HONORE le ``user_id`` client (au lieu de le forcer au
65
+ principal authentifié), et ``is_owner`` autorise ce principal de confiance
66
+ sur toute ressource — l'auth (API key) reste exigée, mais le contrôle par
67
+ end-user est délégué au portail.
68
+
69
+ ⚠️ Tout détenteur d'une clé valide peut alors agir pour n'importe quel
70
+ ``user_id``. Pour un déploiement multi-tenant strict les clients ne sont
71
+ PAS de confiance, mettre ``AUTH_TRUST_CLIENT_USER_ID=false`` (le serveur lie
72
+ alors chaque requête au principal authentifié, anti-usurpation).
72
73
  """
73
- return _env_flag("AUTH_TRUST_CLIENT_USER_ID")
74
+ return os.environ.get("AUTH_TRUST_CLIENT_USER_ID", "true").strip().lower() == "true"
74
75
 
75
76
 
76
77
  def resolve_effective_user_id(current_user: str, requested_user_id: str | None) -> str:
@@ -164,12 +164,16 @@ def main() -> None:
164
164
 
165
165
  skill, filename, output_dir, extra_args = _parse_args(sys.argv[1:])
166
166
 
167
- # Default to the per-invocation AGENT_OUTPUT_DIR when no explicit directory
168
- # is given. This guarantees that generated files land where the ShellTool
169
- # passive finalizer scans, so they are registered (and their links surfaced)
170
- # even if this process is killed before it can upload them itself.
171
- if not output_dir:
172
- output_dir = os.environ.get("AGENT_OUTPUT_DIR") or None
167
+ # Always write the generated file INTO AGENT_OUTPUT_DIR when it is set (the
168
+ # per-command directory the ShellTool parent finalizer collects). We strip any
169
+ # directory from --filename and override a caller-supplied --output-dir so a
170
+ # generated file can NEVER land somewhere the finalizer does not look (e.g.
171
+ # /tmp). Outside a finalizer context (AGENT_OUTPUT_DIR unset) the caller's
172
+ # --output-dir is honored as before.
173
+ agent_output_dir = os.environ.get("AGENT_OUTPUT_DIR")
174
+ if agent_output_dir:
175
+ output_dir = agent_output_dir
176
+ filename = os.path.basename(filename)
173
177
 
174
178
  module = SKILL_MODULE_MAP.get(skill)
175
179
  if module is None:
@@ -179,23 +183,26 @@ def main() -> None:
179
183
 
180
184
  _verify_file(filepath)
181
185
 
182
- # In the per-session sandbox the network is cut: the in-shell HTTP upload
183
- # cannot reach the server. The file is left in AGENT_OUTPUT_DIR and the
184
- # ShellTool parent finalizer (which HAS network + creds) registers it. We
185
- # must NOT print a file_id here, otherwise the finalizer treats the file as
186
- # already uploaded and skips it → the link 404s.
187
- skip_upload = os.environ.get("AGENT_SKILL_SKIP_HTTP_UPLOAD", "").lower() in ("1", "true", "yes")
188
- upload_result = {} if skip_upload else _upload_file(filepath)
189
-
190
- # Local file is kept by default so downstream consumers (e.g. PowerPoint skill
191
- # embedding charts/mermaid) can still read it. Set AGENT_CLEANUP_LOCAL=1 in the
192
- # environment to delete it after successful upload.
186
+ # Delivery is the ShellTool parent finalizer's job (it has network + creds; the
187
+ # sandbox does not). The in-shell HTTP upload is OFF by default and never runs
188
+ # in the sandbox: it derails the agent (401 on an unreachable target) and a
189
+ # printed file_id makes the finalizer skip the file. Opt in explicitly with
190
+ # AGENT_SKILL_HTTP_UPLOAD=1 for legacy/local non-finalizer flows only.
191
+ do_upload = os.environ.get("AGENT_SKILL_HTTP_UPLOAD", "").lower() in ("1", "true", "yes")
192
+ upload_result = _upload_file(filepath) if do_upload else {}
193
+
194
+ # Keep the local file unless an explicit upload happened AND cleanup is asked:
195
+ # the finalizer needs the file on disk to deliver it. Never delete on the
196
+ # default (no-upload) path, or there would be nothing left to register.
193
197
  local_cleaned = False
194
- if os.environ.get("AGENT_CLEANUP_LOCAL", "").lower() in ("1", "true", "yes"):
198
+ if (
199
+ do_upload
200
+ and upload_result
201
+ and os.environ.get("AGENT_CLEANUP_LOCAL", "").lower() in ("1", "true", "yes")
202
+ ):
195
203
  local_cleaned = _cleanup(filepath)
196
204
 
197
205
  mime = _guess_mime(filepath)
198
- size_bytes = upload_result.get("size_bytes", 0)
199
206
 
200
207
  output = {
201
208
  "status": "success",
@@ -203,13 +210,24 @@ def main() -> None:
203
210
  # table, image_gen) so callers can embed the local PNG when needed.
204
211
  # Empty if local was cleaned up.
205
212
  "file": "" if local_cleaned else filepath,
206
- "file_id": upload_result.get("file_id", ""),
207
- "download_url": upload_result.get("download_url", ""),
208
213
  "filename": os.path.basename(filepath),
209
- "size_bytes": size_bytes,
210
214
  "mime_type": mime,
211
215
  "local_cleaned": local_cleaned,
216
+ # The file is created; the framework delivers it to storage automatically
217
+ # and appends the download link to this command's result. The agent must
218
+ # NOT try to upload or authenticate.
219
+ "delivery": "automatic",
220
+ "message": (
221
+ f"File '{os.path.basename(filepath)}' created successfully and is being "
222
+ "delivered to storage automatically — the download link appears in this "
223
+ "command's result. Do not upload or authenticate."
224
+ ),
212
225
  }
226
+ # Surface storage fields ONLY when an explicit upload actually happened.
227
+ if upload_result:
228
+ output["file_id"] = upload_result.get("file_id", "")
229
+ output["download_url"] = upload_result.get("download_url", "")
230
+ output["size_bytes"] = upload_result.get("size_bytes", 0)
213
231
  print(json.dumps(output))
214
232
 
215
233
 
@@ -224,13 +224,17 @@ echo '{
224
224
 
225
225
  ### Output Format (stdout)
226
226
 
227
- On success, the script prints a JSON object to stdout with the download URL:
227
+ On success, the script prints a JSON object confirming the file was created:
228
228
 
229
229
  ```json
230
- {"status": "success", "file_id": "uuid", "download_url": "/files/uuid/download", "filename": "monthly_sales.png", "size_bytes": 1234, "mime_type": "image/png", "local_cleaned": true}
230
+ {"status": "success", "filename": "monthly_sales.png", "mime_type": "image/png", "delivery": "automatic", "message": "File 'monthly_sales.png' created successfully and is being delivered to storage automatically — the download link appears in this command's result."}
231
231
  ```
232
232
 
233
- Use the `download_url` to provide the user with a download link: `[monthly_sales.png](/files/uuid/download)`
233
+ The file is delivered to storage **automatically** by the framework you do NOT
234
+ upload, register, or authenticate anything. The download link
235
+ (`/files/<uuid>/download`) is appended to this command's result; present it to the
236
+ user as `[monthly_sales.png](/files/<uuid>/download)`. Do not improvise an upload or
237
+ write the file elsewhere — just run the command above and read the link from the result.
234
238
 
235
239
  ### ⚠️ Generating MULTIPLE images — read this carefully
236
240
 
@@ -92,14 +92,15 @@ Widget C,39.99,200
92
92
 
93
93
  ### Output Format (stdout)
94
94
 
95
+ On success, the script prints a JSON object confirming the file was created:
96
+
95
97
  ```json
96
98
  {
97
99
  "status": "success",
98
- "file_id": "uuid",
99
- "download_url": "/files/uuid/download",
100
100
  "filename": "products.csv",
101
- "size_bytes": 124,
102
101
  "mime_type": "text/csv",
102
+ "delivery": "automatic",
103
+ "message": "File 'products.csv' created successfully and is being delivered to storage automatically — the download link appears in this command's result.",
103
104
  "metadata": {
104
105
  "rows": 3,
105
106
  "columns": 3,
@@ -108,6 +109,12 @@ Widget C,39.99,200
108
109
  }
109
110
  ```
110
111
 
112
+ The file is delivered to storage **automatically** by the framework — you do NOT
113
+ upload, register, or authenticate anything. The download link
114
+ (`/files/<uuid>/download`) is appended to this command's result; present it to the
115
+ user as `[products.csv](/files/<uuid>/download)`. Do not improvise an upload or write
116
+ the file elsewhere — just run the command above and read the link from the result.
117
+
111
118
  ---
112
119
 
113
120
  ## Operation 2: Read CSV to JSON
@@ -276,12 +283,15 @@ uv run python agent_framework/skills/builtin/skills/csv/transform_csv.py \
276
283
 
277
284
  ### Output Format (stdout)
278
285
 
286
+ On success, the script prints a JSON object confirming the file was created:
287
+
279
288
  ```json
280
289
  {
281
290
  "status": "success",
282
- "file_id": "uuid",
283
- "download_url": "/files/uuid/download",
284
291
  "filename": "filtered.csv",
292
+ "mime_type": "text/csv",
293
+ "delivery": "automatic",
294
+ "message": "File 'filtered.csv' created successfully and is being delivered to storage automatically — the download link appears in this command's result.",
285
295
  "metadata": {
286
296
  "input_rows": 100,
287
297
  "output_rows": 25,
@@ -290,6 +300,12 @@ uv run python agent_framework/skills/builtin/skills/csv/transform_csv.py \
290
300
  }
291
301
  ```
292
302
 
303
+ The file is delivered to storage **automatically** by the framework — you do NOT
304
+ upload, register, or authenticate anything. The download link
305
+ (`/files/<uuid>/download`) is appended to this command's result; present it to the
306
+ user as `[filtered.csv](/files/<uuid>/download)`. Do not improvise an upload or write
307
+ the file elsewhere — just run the command above and read the link from the result.
308
+
293
309
  ---
294
310
 
295
311
  ## Error Handling (stderr)
@@ -79,13 +79,17 @@ uv run python -m agent_framework.skills.builtin.scripts.create_and_register --sk
79
79
 
80
80
  ### Output Format (stdout)
81
81
 
82
- On success, the script prints a JSON object to stdout with the download URL:
82
+ On success, the script prints a JSON object confirming the file was created:
83
83
 
84
84
  ```json
85
- {"status": "success", "file_id": "uuid", "download_url": "/files/uuid/download", "filename": "order_flow.drawio", "size_bytes": 1234, "mime_type": "application/xml", "local_cleaned": true}
85
+ {"status": "success", "filename": "order_flow.drawio", "mime_type": "application/xml", "delivery": "automatic", "message": "File 'order_flow.drawio' created successfully and is being delivered to storage automatically — the download link appears in this command's result."}
86
86
  ```
87
87
 
88
- Use the `download_url` to provide the user with a download link: `[order_flow.drawio](/files/uuid/download)`
88
+ The file is delivered to storage **automatically** by the framework you do NOT
89
+ upload, register, or authenticate anything. The download link
90
+ (`/files/<uuid>/download`) is appended to this command's result; present it to the
91
+ user as `[order_flow.drawio](/files/<uuid>/download)`. Do not improvise an upload or
92
+ write the file elsewhere — just run the command above and read the link from the result.
89
93
 
90
94
  ### Error Handling (stderr)
91
95
 
@@ -74,17 +74,17 @@ echo '[
74
74
 
75
75
  ### Output Format (stdout)
76
76
 
77
- On success, the script prints a JSON object to stdout with the download URL:
77
+ On success, the script prints a JSON object confirming the file was created:
78
78
 
79
79
  ```json
80
- {"status": "success", "file_id": "uuid", "download_url": "/files/uuid/download", "filename": "sales_report.xlsx", "size_bytes": 1234, "mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "local_cleaned": true}
80
+ {"status": "success", "filename": "sales_report.xlsx", "mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "delivery": "automatic", "message": "File 'sales_report.xlsx' created successfully and is being delivered to storage automatically — the download link appears in this command's result."}
81
81
  ```
82
82
 
83
- Use the `download_url` from this response to provide the user with a download link:
84
-
85
- ```
86
- [sales_report.xlsx](/files/uuid/download)
87
- ```
83
+ The file is delivered to storage **automatically** by the framework you do NOT
84
+ upload, register, or authenticate anything. The download link
85
+ (`/files/<uuid>/download`) is appended to this command's result; present it to the
86
+ user as `[sales_report.xlsx](/files/<uuid>/download)`. Do not improvise an upload or
87
+ write the file elsewhere — just run the command above and read the link from the result.
88
88
 
89
89
  ### Error Handling (stderr)
90
90
 
@@ -76,11 +76,17 @@ echo "Hello, world!" | uv run python -m agent_framework.skills.builtin.scripts.c
76
76
 
77
77
  #### Output Format (stdout)
78
78
 
79
+ On success, the script prints a JSON object confirming the file was created:
80
+
79
81
  ```json
80
- {"status": "success", "file_id": "uuid", "download_url": "/files/uuid/download", "filename": "report.txt", "size_bytes": 1234, "mime_type": "text/plain", "local_cleaned": true}
82
+ {"status": "success", "filename": "report.txt", "mime_type": "text/plain", "delivery": "automatic", "message": "File 'report.txt' created successfully and is being delivered to storage automatically — the download link appears in this command's result."}
81
83
  ```
82
84
 
83
- Use the `download_url` to provide the user with a download link: `[report.txt](/files/uuid/download)`
85
+ The file is delivered to storage **automatically** by the framework you do NOT
86
+ upload, register, or authenticate anything. The download link
87
+ (`/files/<uuid>/download`) is appended to this command's result; present it to the
88
+ user as `[report.txt](/files/<uuid>/download)`. Do not improvise an upload or write
89
+ the file elsewhere — just run the command above and read the link from the result.
84
90
 
85
91
  #### Error Handling (stderr)
86
92
 
@@ -192,17 +192,15 @@ To use DALL-E 3 instead, set `"model": "dall-e-3"` (with `quality` `standard`/`h
192
192
 
193
193
  ## Output Format (stdout)
194
194
 
195
- On success, the script prints a JSON object with download information:
195
+ On success, the script prints a JSON object confirming the file was created:
196
196
 
197
197
  ```json
198
198
  {
199
199
  "status": "success",
200
- "file_id": "uuid",
201
- "download_url": "/files/uuid/download",
202
200
  "filename": "mountain_landscape.png",
203
- "size_bytes": 234567,
204
201
  "mime_type": "image/png",
205
- "local_cleaned": true,
202
+ "delivery": "automatic",
203
+ "message": "File 'mountain_landscape.png' created successfully and is being delivered to storage automatically — the download link appears in this command's result.",
206
204
  "metadata": {
207
205
  "model": "gpt-image-1",
208
206
  "size": "1536x1024",
@@ -214,10 +212,11 @@ On success, the script prints a JSON object with download information:
214
212
 
215
213
  **Note**: The `revised_prompt` field (when provided by the model) shows how OpenAI interpreted and enhanced your original prompt.
216
214
 
217
- Use the `download_url` to provide a download link:
218
- ```
219
- [Download image](/files/uuid/download)
220
- ```
215
+ The file is delivered to storage **automatically** by the framework — you do NOT
216
+ upload, register, or authenticate anything. The download link
217
+ (`/files/<uuid>/download`) is appended to this command's result; present it to the
218
+ user as `[mountain_landscape.png](/files/<uuid>/download)`. Do not improvise an upload or
219
+ write the file elsewhere — just run the command above and read the link from the result.
221
220
 
222
221
  ---
223
222
 
@@ -145,13 +145,17 @@ echo 'sequenceDiagram
145
145
 
146
146
  ### Output Format (stdout)
147
147
 
148
- On success, the script prints a JSON object to stdout with the download URL:
148
+ On success, the script prints a JSON object confirming the file was created:
149
149
 
150
150
  ```json
151
- {"status": "success", "file_id": "uuid", "download_url": "/files/uuid/download", "filename": "diagram.png", "size_bytes": 1234, "mime_type": "image/png", "local_cleaned": true}
151
+ {"status": "success", "filename": "diagram.png", "mime_type": "image/png", "delivery": "automatic", "message": "File 'diagram.png' created successfully and is being delivered to storage automatically — the download link appears in this command's result."}
152
152
  ```
153
153
 
154
- Use the `download_url` to provide the user with a download link: `[diagram.png](/files/uuid/download)`
154
+ The file is delivered to storage **automatically** by the framework you do NOT
155
+ upload, register, or authenticate anything. The download link
156
+ (`/files/<uuid>/download`) is appended to this command's result; present it to the
157
+ user as `[diagram.png](/files/<uuid>/download)`. Do not improvise an upload or write
158
+ the file elsewhere — just run the command above and read the link from the result.
155
159
 
156
160
  ### Error Handling (stderr)
157
161
 
@@ -770,17 +770,15 @@ echo '{
770
770
 
771
771
  ## Output Format (stdout)
772
772
 
773
- On success, the script prints a JSON object with download information:
773
+ On success, the script prints a JSON object confirming the file was created:
774
774
 
775
775
  ```json
776
776
  {
777
777
  "status": "success",
778
- "file_id": "uuid",
779
- "download_url": "/files/uuid/download",
780
778
  "filename": "Q4_review.pptx",
781
- "size_bytes": 45678,
782
779
  "mime_type": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
783
- "local_cleaned": true,
780
+ "delivery": "automatic",
781
+ "message": "File 'Q4_review.pptx' created successfully and is being delivered to storage automatically — the download link appears in this command's result.",
784
782
  "metadata": {
785
783
  "slide_count": 12,
786
784
  "theme": "consulting",
@@ -805,10 +803,11 @@ On success, the script prints a JSON object with download information:
805
803
  | `assets_generated` | int | Number of assets generated via external skills |
806
804
  | `suggested_structure` | array or null | Slide structure plan (deck strategy mode only) |
807
805
 
808
- Use the `download_url` to provide a download link:
809
- ```
810
- [Download presentation](/files/uuid/download)
811
- ```
806
+ The file is delivered to storage **automatically** by the framework — you do NOT
807
+ upload, register, or authenticate anything. The download link
808
+ (`/files/<uuid>/download`) is appended to this command's result; present it to the
809
+ user as `[Q4_review.pptx](/files/<uuid>/download)`. Do not improvise an upload or write
810
+ the file elsewhere — just run the command above and read the link from the result.
812
811
 
813
812
  ---
814
813
 
@@ -156,13 +156,17 @@ echo '{
156
156
 
157
157
  ### Output Format (stdout)
158
158
 
159
- On success, the script prints a JSON object to stdout with the download URL:
159
+ On success, the script prints a JSON object confirming the file was created:
160
160
 
161
161
  ```json
162
- {"status": "success", "file_id": "uuid", "download_url": "/files/uuid/download", "filename": "sales_table.png", "size_bytes": 1234, "mime_type": "image/png", "local_cleaned": true}
162
+ {"status": "success", "filename": "sales_table.png", "mime_type": "image/png", "delivery": "automatic", "message": "File 'sales_table.png' created successfully and is being delivered to storage automatically — the download link appears in this command's result."}
163
163
  ```
164
164
 
165
- Use the `download_url` to provide the user with a download link: `[sales_table.png](/files/uuid/download)`
165
+ The file is delivered to storage **automatically** by the framework you do NOT
166
+ upload, register, or authenticate anything. The download link
167
+ (`/files/<uuid>/download`) is appended to this command's result; present it to the
168
+ user as `[sales_table.png](/files/<uuid>/download)`. Do not improvise an upload or write
169
+ the file elsewhere — just run the command above and read the link from the result.
166
170
 
167
171
  ### Error Handling (stderr)
168
172
 
@@ -156,13 +156,17 @@ echo '<h1>Meeting Notes</h1>
156
156
 
157
157
  ### Output Format (stdout)
158
158
 
159
- On success, the script prints a JSON object to stdout with the download URL:
159
+ On success, the script prints a JSON object confirming the file was created:
160
160
 
161
161
  ```json
162
- {"status": "success", "file_id": "uuid", "download_url": "/files/uuid/download", "filename": "report.pdf", "size_bytes": 1234, "mime_type": "application/pdf", "local_cleaned": true}
162
+ {"status": "success", "filename": "report.pdf", "mime_type": "application/pdf", "delivery": "automatic", "message": "File 'report.pdf' created successfully and is being delivered to storage automatically — the download link appears in this command's result."}
163
163
  ```
164
164
 
165
- Use the `download_url` to provide the user with a download link: `[report.pdf](/files/uuid/download)`
165
+ The file is delivered to storage **automatically** by the framework you do NOT
166
+ upload, register, or authenticate anything. The download link
167
+ (`/files/<uuid>/download`) is appended to this command's result; present it to the
168
+ user as `[report.pdf](/files/<uuid>/download)`. Do not improvise an upload or write
169
+ the file elsewhere — just run the command above and read the link from the result.
166
170
 
167
171
  ### Error Handling (stderr)
168
172
 
@@ -335,28 +335,17 @@ echo '{
335
335
 
336
336
  ## Output Format (stdout)
337
337
 
338
- On success, the script prints a JSON object with download information:
338
+ On success, the script prints a JSON object confirming the file was created:
339
339
 
340
340
  ```json
341
- {
342
- "status": "success",
343
- "file_id": "uuid",
344
- "download_url": "/files/uuid/download",
345
- "filename": "Q4_2024_Report.docx",
346
- "size_bytes": 78456,
347
- "mime_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
348
- "local_cleaned": true,
349
- "metadata": {
350
- "section_count": 10,
351
- "page_count": 3
352
- }
353
- }
341
+ {"status": "success", "filename": "Q4_2024_Report.docx", "mime_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "delivery": "automatic", "message": "File 'Q4_2024_Report.docx' created successfully and is being delivered to storage automatically — the download link appears in this command's result."}
354
342
  ```
355
343
 
356
- Use the `download_url` to provide a download link:
357
- ```
358
- [Download document](/files/uuid/download)
359
- ```
344
+ The file is delivered to storage **automatically** by the framework — you do NOT
345
+ upload, register, or authenticate anything. The download link
346
+ (`/files/<uuid>/download`) is appended to this command's result; present it to the
347
+ user as `[Q4_2024_Report.docx](/files/<uuid>/download)`. Do not improvise an upload or
348
+ write the file elsewhere — just run the command above and read the link from the result.
360
349
 
361
350
  ---
362
351
 
@@ -175,6 +175,10 @@ class ShellTool(AgentTool):
175
175
  # Avoids rescanning os.environ + rebuilding the redactor on every command.
176
176
  self._redactor: SecretRedactor | None = None
177
177
  self._redactor_env_values: list[str] | None = None
178
+ # Per-command ephemeral secrets (e.g. the minted AGENT_SESSION_TOKEN). These
179
+ # never live in os.environ, so the env-scan redactor would miss them — they
180
+ # are registered here at mint time so they are masked in shell output.
181
+ self._ephemeral_secret_values: set[str] = set()
178
182
 
179
183
  def set_skill_env_provider(self, provider: Callable[[], Iterable[str]] | None) -> None:
180
184
  """Set the callback that lists env vars required by loaded skills.
@@ -250,7 +254,11 @@ class ShellTool(AgentTool):
250
254
 
251
255
  if self._redactor_env_values is None:
252
256
  self._redactor_env_values = sensitive_env_values(os.environ)
253
- values = [*self._redactor_env_values, *self._workspace_secrets.values()]
257
+ values = [
258
+ *self._redactor_env_values,
259
+ *self._workspace_secrets.values(),
260
+ *self._ephemeral_secret_values,
261
+ ]
254
262
  self._redactor = SecretRedactor(values)
255
263
  return self._redactor
256
264
 
@@ -347,9 +355,15 @@ class ShellTool(AgentTool):
347
355
  from agent_framework.security.upload_token import sign_upload_token
348
356
 
349
357
  ttl = _env_int("SHELL_SESSION_TOKEN_TTL", 1800)
350
- env["AGENT_SESSION_TOKEN"] = sign_upload_token(
358
+ token = sign_upload_token(
351
359
  self.current_user_id, self.current_session_id, ttl=ttl
352
360
  )
361
+ env["AGENT_SESSION_TOKEN"] = token
362
+ # Register the ephemeral token so it is masked in shell output
363
+ # (it is never in os.environ → the env-scan redactor would miss it,
364
+ # e.g. a leak via `env` in the shell). Invalidate the cached redactor.
365
+ self._ephemeral_secret_values.add(token)
366
+ self._redactor = None
353
367
  except Exception as e: # noqa: BLE001 — never let token minting break the shell
354
368
  logger.warning("ShellTool: session token minting failed: %s", e)
355
369
  # Ensure server connection info is available
@@ -754,15 +768,6 @@ class ShellTool(AgentTool):
754
768
  )
755
769
  env["AGENT_HOST"] = callback_host
756
770
  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"
766
771
  # Tell upload scripts whether to authenticate.
767
772
  env["REQUIRE_AUTH"] = os.environ.get("REQUIRE_AUTH", "false")
768
773
  # Scoped, short-lived session token (HMAC, user/session) so the sandbox
@@ -772,9 +777,15 @@ class ShellTool(AgentTool):
772
777
  from agent_framework.security.upload_token import sign_upload_token
773
778
 
774
779
  ttl = _env_int("SHELL_SESSION_TOKEN_TTL", 1800)
775
- env["AGENT_SESSION_TOKEN"] = sign_upload_token(
780
+ token = sign_upload_token(
776
781
  self.current_user_id, self.current_session_id, ttl=ttl
777
782
  )
783
+ env["AGENT_SESSION_TOKEN"] = token
784
+ # Register the ephemeral token so it is masked in shell output
785
+ # (it is never in os.environ → the env-scan redactor would miss it,
786
+ # e.g. a leak via `env` in the shell). Invalidate the cached redactor.
787
+ self._ephemeral_secret_values.add(token)
788
+ self._redactor = None
778
789
  except Exception as e: # noqa: BLE001 — never let token minting break the shell
779
790
  logger.warning("ShellTool: sandbox session token minting failed: %s", e)
780
791
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-framework-lib
3
- Version: 0.8.8.post3
3
+ Version: 0.8.8.post5
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>