agent-framework-lib 0.8.8.post2__tar.gz → 0.8.8.post4__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.post4}/PKG-INFO +1 -1
  2. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/security/authz.py +36 -3
  3. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/security/sandbox_provider.py +14 -3
  4. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/scripts/create_and_register.py +40 -22
  5. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/chart/SKILL.md +7 -3
  6. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/csv/SKILL.md +21 -5
  7. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/drawio/SKILL.md +7 -3
  8. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/excel/SKILL.md +7 -7
  9. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/file/SKILL.md +8 -2
  10. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/image_gen/SKILL.md +8 -9
  11. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/mermaid/SKILL.md +7 -3
  12. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/powerpoint/SKILL.md +8 -9
  13. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/table/SKILL.md +7 -3
  14. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +7 -3
  15. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/word/SKILL.md +7 -18
  16. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/tools/shell_tool.py +36 -4
  17. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/server.py +18 -17
  18. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4/agent_framework_lib.egg-info}/PKG-INFO +1 -1
  19. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework_lib.egg-info/SOURCES.txt +1 -0
  20. agent_framework_lib-0.8.8.post4/docs/OPENSHELL_GATEWAY_HOST_SETUP.md +195 -0
  21. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/pyproject.toml +1 -1
  22. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/ARCHITECTURE.md +0 -0
  23. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/LICENSE +0 -0
  24. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/MANIFEST.in +0 -0
  25. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/README.md +0 -0
  26. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/__init__.py +0 -0
  27. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/__init__.py +0 -0
  28. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/base.py +0 -0
  29. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/endpoints/__init__.py +0 -0
  30. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
  31. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
  32. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
  33. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
  34. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
  35. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
  36. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
  37. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/models.py +0 -0
  38. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/providers/__init__.py +0 -0
  39. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
  40. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/a2a/providers/postgres_provider.py +0 -0
  41. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/capabilities/__init__.py +0 -0
  42. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/capabilities/resolver.py +0 -0
  43. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/code_delivery/__init__.py +0 -0
  44. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/code_delivery/audit.py +0 -0
  45. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/code_delivery/config.py +0 -0
  46. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/code_delivery/crypto.py +0 -0
  47. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/code_delivery/git_provider.py +0 -0
  48. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/code_delivery/herdr_client.py +0 -0
  49. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/code_delivery/models.py +0 -0
  50. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/code_delivery/orchestrator.py +0 -0
  51. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/code_delivery/store.py +0 -0
  52. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/code_delivery/tools.py +0 -0
  53. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/__init__.py +0 -0
  54. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/activity_formatter.py +0 -0
  55. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/agent_interface.py +0 -0
  56. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/agent_provider.py +0 -0
  57. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/base_agent.py +0 -0
  58. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/context_budget.py +0 -0
  59. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/context_summarizer.py +0 -0
  60. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/elasticsearch_config_provider.py +0 -0
  61. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/execution_controller.py +0 -0
  62. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/implementation_validator.py +0 -0
  63. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/interruption_message.py +0 -0
  64. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/knowledge_state.py +0 -0
  65. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/loop_detector.py +0 -0
  66. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/model_clients.py +0 -0
  67. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/model_config.py +0 -0
  68. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/model_router.py +0 -0
  69. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/models.py +0 -0
  70. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/prompt_builder.py +0 -0
  71. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/provider_calibration.py +0 -0
  72. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/scratchpad_compressor.py +0 -0
  73. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/scratchpad_serializer.py +0 -0
  74. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/state_manager.py +0 -0
  75. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/step_display_config.py +0 -0
  76. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/core/streaming_parts_accumulator.py +0 -0
  77. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/implementations/__init__.py +0 -0
  78. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/implementations/budget_aware_agent.py +0 -0
  79. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/implementations/llamaindex_agent.py +0 -0
  80. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
  81. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/implementations/microsoft_agent.py +0 -0
  82. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/__init__.py +0 -0
  83. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/agent_mixin.py +0 -0
  84. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/base.py +0 -0
  85. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/config.py +0 -0
  86. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/hypothesis_engine.py +0 -0
  87. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/implicit_feedback.py +0 -0
  88. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/manager.py +0 -0
  89. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/personalization.py +0 -0
  90. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/providers/__init__.py +0 -0
  91. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/providers/graphiti_provider.py +0 -0
  92. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/providers/memori_provider.py +0 -0
  93. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/response_lessons.py +0 -0
  94. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/tools.py +0 -0
  95. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/memory/work_patterns.py +0 -0
  96. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/__init__.py +0 -0
  97. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/api_timing_tracker.py +0 -0
  98. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
  99. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
  100. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/error_handling.py +0 -0
  101. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/error_logging.py +0 -0
  102. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
  103. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/llm_metrics.py +0 -0
  104. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/llm_metrics_collector.py +0 -0
  105. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
  106. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/metrics_aggregator.py +0 -0
  107. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/metrics_config.py +0 -0
  108. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/observability_manager.py +0 -0
  109. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/otel_instrumentor.py +0 -0
  110. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/otel_logging_handler.py +0 -0
  111. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
  112. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/otel_setup.py +0 -0
  113. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/performance_monitor.py +0 -0
  114. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/progress_tracker.py +0 -0
  115. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/resource_manager.py +0 -0
  116. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
  117. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
  118. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/timing_tracker.py +0 -0
  119. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/token_counter.py +0 -0
  120. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/monitoring/tracing_context.py +0 -0
  121. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/notifications/__init__.py +0 -0
  122. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/notifications/hub.py +0 -0
  123. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/notifications/webhook_notifier.py +0 -0
  124. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/processing/__init__.py +0 -0
  125. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/processing/ai_content_management.py +0 -0
  126. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/processing/markdown_converter.py +0 -0
  127. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/processing/multimodal_integration.py +0 -0
  128. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/processing/rich_content_validation.py +0 -0
  129. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/py.typed +0 -0
  130. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/security/__init__.py +0 -0
  131. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/security/file_view_token.py +0 -0
  132. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/security/input_guard.py +0 -0
  133. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/security/openshell_policy.yaml +0 -0
  134. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/security/pii_redactor.py +0 -0
  135. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/security/sandbox.py +0 -0
  136. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/security/secret_redactor.py +0 -0
  137. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/security/shell_env.py +0 -0
  138. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/security/upload_token.py +0 -0
  139. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/session/__init__.py +0 -0
  140. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/session/elasticsearch_session_storage.py +0 -0
  141. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/session/session_storage.py +0 -0
  142. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/__init__.py +0 -0
  143. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/agent_mixin.py +0 -0
  144. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/base.py +0 -0
  145. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/__init__.py +0 -0
  146. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/scripts/__init__.py +0 -0
  147. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/scripts/register_to_storage.py +0 -0
  148. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/chart/chart_to_image.py +0 -0
  149. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/chart/vendor_chart.umd.min.js +0 -0
  150. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/code_delivery/SKILL.md +0 -0
  151. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/code_format/SKILL.md +0 -0
  152. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/code_format/format_python.py +0 -0
  153. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/csv/create_csv.py +0 -0
  154. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/csv/read_csv.py +0 -0
  155. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/csv/transform_csv.py +0 -0
  156. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/data_format/SKILL.md +0 -0
  157. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/data_format/json_to_yaml.py +0 -0
  158. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/data_format/yaml_to_json.py +0 -0
  159. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/drawio/create_drawio.py +0 -0
  160. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/email_template/SKILL.md +0 -0
  161. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/excel/create_excel.py +0 -0
  162. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/file/create_file.py +0 -0
  163. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/file/list_files.py +0 -0
  164. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/file/read_file.py +0 -0
  165. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/file_access/SKILL.md +0 -0
  166. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/file_access/download_to_local.py +0 -0
  167. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/file_access/get_file_path.py +0 -0
  168. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/form/SKILL.md +0 -0
  169. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/image_display/SKILL.md +0 -0
  170. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/image_gen/create_image.py +0 -0
  171. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/image_gen/generate_image.py +0 -0
  172. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +0 -0
  173. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/mermaid/vendor_mermaid.umd.min.js +0 -0
  174. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/multimodal/SKILL.md +0 -0
  175. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +0 -0
  176. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/powerpoint/create_powerpoint.py +0 -0
  177. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/powerpoint/templates/Big Data Infographics.pptx +0 -0
  178. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/powerpoint/templates/Executive Design Pitch Deck.pptx +0 -0
  179. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/powerpoint/templates/Management Consulting Toolkit.pptx +0 -0
  180. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/powerpoint/templates/__init__.py +0 -0
  181. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/powerpoint/templates/generate_templates.py +0 -0
  182. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/skill_creator/SKILL.md +0 -0
  183. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/skill_creator/skill_api.py +0 -0
  184. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/table/table_to_image.py +0 -0
  185. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +0 -0
  186. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/web_news_search/SKILL.md +0 -0
  187. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/builtin/skills/web_news_search/web_news_search.py +0 -0
  188. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/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.post4}/agent_framework/skills/custom_skill_manager.py +0 -0
  190. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/discovery_prompt.py +0 -0
  191. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/markdown_loader.py +0 -0
  192. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/skills/tools.py +0 -0
  193. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/storage/__init__.py +0 -0
  194. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/storage/file_storages.py +0 -0
  195. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/storage/file_system_management.py +0 -0
  196. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/storage/storage_optimizer.py +0 -0
  197. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/subagents/__init__.py +0 -0
  198. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/subagents/executor.py +0 -0
  199. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/subagents/message_injector.py +0 -0
  200. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/subagents/message_queue.py +0 -0
  201. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/subagents/retrigger.py +0 -0
  202. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/subagents/spawn_tool.py +0 -0
  203. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/tools/__init__.py +0 -0
  204. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/tools/activity_callback.py +0 -0
  205. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/tools/adaptive_pdf_css.py +0 -0
  206. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/tools/base.py +0 -0
  207. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/tools/html_content_analyzer.py +0 -0
  208. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/tools/multimodal_tools.py +0 -0
  209. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/tools/pdf_image_scaler.py +0 -0
  210. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/tools/sizing_config.py +0 -0
  211. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/tools/web_fetch_tool.py +0 -0
  212. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/tools/web_search_tool.py +0 -0
  213. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/utils/__init__.py +0 -0
  214. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/utils/path_utils.py +0 -0
  215. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/utils/post_install.py +0 -0
  216. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/utils/session_title_generator.py +0 -0
  217. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/utils/source_detector.py +0 -0
  218. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/utils/special_blocks.py +0 -0
  219. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/__init__.py +0 -0
  220. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/admin_auth.py +0 -0
  221. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/admin_models.py +0 -0
  222. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/admin_router.py +0 -0
  223. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/admin_services.py +0 -0
  224. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/api_timing_middleware.py +0 -0
  225. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
  226. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  227. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/docs/CREATING_AGENTS.md +0 -0
  228. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
  229. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
  230. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/docs/Dockerfile +0 -0
  231. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/docs/GETTING_STARTED.md +0 -0
  232. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/docs/GITNEXUS_USER_GUIDE.md +0 -0
  233. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
  234. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/docs/README.md +0 -0
  235. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/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.post4}/agent_framework/web/docs/WORKSPACE_INTEGRATION.md +0 -0
  237. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/docs/api-reference.md +0 -0
  238. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/docs/configuration.md +0 -0
  239. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/docs/docker-compose.yml +0 -0
  240. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/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.post4}/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.post4}/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.post4}/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.post4}/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.post4}/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.post4}/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.post4}/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.post4}/agent_framework/web/docs/examples/simple_agent.py +0 -0
  249. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/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.post4}/agent_framework/web/docs/installation-guide.md +0 -0
  251. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/documentation_generator.py +0 -0
  252. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/gitnexus_client.py +0 -0
  253. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/helper_agent.py +0 -0
  254. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/helper_ui.html +0 -0
  255. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/modern_ui.html +0 -0
  256. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/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.post4}/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.post4}/agent_framework/web/otel_tracing_middleware.py +0 -0
  259. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/skills_router.py +0 -0
  260. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/web/test_app.html +0 -0
  261. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/workspace/__init__.py +0 -0
  262. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/workspace/artefacts.py +0 -0
  263. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/workspace/client.py +0 -0
  264. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/workspace/config.py +0 -0
  265. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/workspace/context.py +0 -0
  266. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/workspace/cursor.py +0 -0
  267. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/workspace/memory.py +0 -0
  268. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/workspace/models.py +0 -0
  269. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/workspace/poller.py +0 -0
  270. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/workspace/preferences.py +0 -0
  271. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/workspace/router.py +0 -0
  272. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/workspace/session.py +0 -0
  273. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework/workspace/subscription.py +0 -0
  274. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
  275. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework_lib.egg-info/entry_points.txt +0 -0
  276. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework_lib.egg-info/requires.txt +0 -0
  277. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/agent_framework_lib.egg-info/top_level.txt +0 -0
  278. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/A2A_GUIDE.md +0 -0
  279. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
  280. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/ARCHITECTURE_DIAGRAM.md +0 -0
  281. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  282. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/CANCEL_AND_INTERRUPT_FRONTEND.md +0 -0
  283. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
  284. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/CREATING_AGENTS.md +0 -0
  285. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
  286. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/DEEPEVAL_TEST_REPORT.md +0 -0
  287. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/DIAGNOSTIC_SANDBOX_SKILLS.md +0 -0
  288. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/DOCKER_SETUP.md +0 -0
  289. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +0 -0
  290. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
  291. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/FILE_STORAGE_GUIDE.md +0 -0
  292. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/GETTING_STARTED.md +0 -0
  293. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/GITNEXUS_USER_GUIDE.md +0 -0
  294. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/HISTORY_MESSAGE_FORMAT.md +0 -0
  295. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
  296. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/MEMORY_INSTALLATION.md +0 -0
  297. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
  298. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/MULTIMODAL_TOOLS_GUIDE.md +0 -0
  299. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/OBSERVABILITY_GUIDE.md +0 -0
  300. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/PYPI_PUBLISHING.md +0 -0
  301. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/QA_STREAMING_LATENCY.md +0 -0
  302. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/SCREENSHOTS_GUIDE.md +0 -0
  303. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/SECRETS_MANAGEMENT.md +0 -0
  304. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/SECURITY_HARDENING.md +0 -0
  305. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
  306. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/SSE_NOTIFICATIONS_GUIDE.md +0 -0
  307. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/STREAMING_EVENTS_FRONTEND.md +0 -0
  308. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  309. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/WORKSPACE_INTEGRATION.md +0 -0
  310. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/api-reference.md +0 -0
  311. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/configuration.md +0 -0
  312. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/framework_audit_remarques.md +0 -0
  313. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/helper_agent.md +0 -0
  314. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/index.md +0 -0
  315. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/docs/installation-guide.md +0 -0
  316. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/README.md +0 -0
  317. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/agent_context_budget_test.py +0 -0
  318. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/agent_example_multi_skills.py +0 -0
  319. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/agent_exemple_test.py +0 -0
  320. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/agent_training_with_apo.py +0 -0
  321. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/agent_with_custom_tools_file_storage.py +0 -0
  322. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/agent_with_file_storage.py +0 -0
  323. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/agent_with_mcp.py +0 -0
  324. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/agent_with_memory_graphiti.py +0 -0
  325. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/agent_with_memory_hybrid.py +0 -0
  326. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/agent_with_memory_simple.py +0 -0
  327. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/agent_with_personalization.py +0 -0
  328. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/biagenttest.py +0 -0
  329. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/custom_framework_agent.py +0 -0
  330. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/dependencies/docker-compose.yaml +0 -0
  331. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/pyproject.toml +0 -0
  332. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/simple_agent.py +0 -0
  333. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/skills_demo_agent.py +0 -0
  334. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/test_work_patterns_live.py +0 -0
  335. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/examples/workspace_test_agent.py +0 -0
  336. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/setup.cfg +0 -0
  337. {agent_framework_lib-0.8.8.post2 → agent_framework_lib-0.8.8.post4}/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.post4
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:
@@ -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
@@ -763,9 +777,15 @@ class ShellTool(AgentTool):
763
777
  from agent_framework.security.upload_token import sign_upload_token
764
778
 
765
779
  ttl = _env_int("SHELL_SESSION_TOKEN_TTL", 1800)
766
- env["AGENT_SESSION_TOKEN"] = sign_upload_token(
780
+ token = sign_upload_token(
767
781
  self.current_user_id, self.current_session_id, ttl=ttl
768
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
769
789
  except Exception as e: # noqa: BLE001 — never let token minting break the shell
770
790
  logger.warning("ShellTool: sandbox session token minting failed: %s", e)
771
791
 
@@ -846,8 +866,20 @@ class ShellTool(AgentTool):
846
866
  )
847
867
  return out
848
868
 
849
- with contextlib.suppress(Exception):
869
+ # Pull the files the sandbox produced out via the gateway. This is the
870
+ # ONLY delivery path in the sandboxed topology (the sandbox itself has
871
+ # no route to register them). Failures here = lost files, so they MUST
872
+ # be visible (previously swallowed silently → undiagnosable file loss).
873
+ try:
850
874
  provider.collect_out(session_id, collect_dir, out_subdir=out_subdir)
875
+ except Exception as e: # noqa: BLE001 — never raise into the agent
876
+ logger.warning(
877
+ "[ShellTool] collect_out failed (session=%s, out_subdir=%s) — "
878
+ "generated files may not be delivered: %s",
879
+ session_id,
880
+ out_subdir,
881
+ e,
882
+ )
851
883
 
852
884
  stdout = result.stdout or ""
853
885
  stderr = result.stderr or ""