agent-framework-lib 0.8.7.post4__tar.gz → 0.8.7.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 (321) hide show
  1. {agent_framework_lib-0.8.7.post4/agent_framework_lib.egg-info → agent_framework_lib-0.8.7.post5}/PKG-INFO +1 -1
  2. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/agent_interface.py +16 -0
  3. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/base_agent.py +40 -1
  4. agent_framework_lib-0.8.7.post5/agent_framework/security/__init__.py +17 -0
  5. agent_framework_lib-0.8.7.post5/agent_framework/security/secret_redactor.py +291 -0
  6. agent_framework_lib-0.8.7.post5/agent_framework/security/shell_env.py +195 -0
  7. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/tools/shell_tool.py +70 -3
  8. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/server.py +141 -16
  9. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5/agent_framework_lib.egg-info}/PKG-INFO +1 -1
  10. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework_lib.egg-info/SOURCES.txt +3 -0
  11. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/pyproject.toml +1 -1
  12. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/ARCHITECTURE.md +0 -0
  13. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/LICENSE +0 -0
  14. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/MANIFEST.in +0 -0
  15. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/README.md +0 -0
  16. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/__init__.py +0 -0
  17. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/__init__.py +0 -0
  18. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/base.py +0 -0
  19. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/endpoints/__init__.py +0 -0
  20. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
  21. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
  22. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
  23. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
  24. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
  25. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
  26. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
  27. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/models.py +0 -0
  28. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/providers/__init__.py +0 -0
  29. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
  30. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/a2a/providers/postgres_provider.py +0 -0
  31. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/capabilities/__init__.py +0 -0
  32. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/capabilities/resolver.py +0 -0
  33. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/code_delivery/__init__.py +0 -0
  34. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/code_delivery/audit.py +0 -0
  35. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/code_delivery/config.py +0 -0
  36. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/code_delivery/git_provider.py +0 -0
  37. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/code_delivery/herdr_client.py +0 -0
  38. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/code_delivery/models.py +0 -0
  39. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/code_delivery/orchestrator.py +0 -0
  40. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/code_delivery/tools.py +0 -0
  41. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/__init__.py +0 -0
  42. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/activity_formatter.py +0 -0
  43. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/agent_provider.py +0 -0
  44. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/context_budget.py +0 -0
  45. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/context_summarizer.py +0 -0
  46. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/elasticsearch_config_provider.py +0 -0
  47. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/execution_controller.py +0 -0
  48. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/implementation_validator.py +0 -0
  49. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/interruption_message.py +0 -0
  50. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/knowledge_state.py +0 -0
  51. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/loop_detector.py +0 -0
  52. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/model_clients.py +0 -0
  53. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/model_config.py +0 -0
  54. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/model_router.py +0 -0
  55. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/models.py +0 -0
  56. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/prompt_builder.py +0 -0
  57. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/provider_calibration.py +0 -0
  58. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/scratchpad_compressor.py +0 -0
  59. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/scratchpad_serializer.py +0 -0
  60. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/state_manager.py +0 -0
  61. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/step_display_config.py +0 -0
  62. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/core/streaming_parts_accumulator.py +0 -0
  63. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/implementations/__init__.py +0 -0
  64. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/implementations/budget_aware_agent.py +0 -0
  65. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/implementations/llamaindex_agent.py +0 -0
  66. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
  67. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/implementations/microsoft_agent.py +0 -0
  68. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/__init__.py +0 -0
  69. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/agent_mixin.py +0 -0
  70. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/base.py +0 -0
  71. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/config.py +0 -0
  72. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/hypothesis_engine.py +0 -0
  73. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/implicit_feedback.py +0 -0
  74. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/manager.py +0 -0
  75. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/personalization.py +0 -0
  76. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/providers/__init__.py +0 -0
  77. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/providers/graphiti_provider.py +0 -0
  78. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/providers/memori_provider.py +0 -0
  79. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/response_lessons.py +0 -0
  80. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/tools.py +0 -0
  81. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/memory/work_patterns.py +0 -0
  82. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/__init__.py +0 -0
  83. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/api_timing_tracker.py +0 -0
  84. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
  85. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
  86. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/error_handling.py +0 -0
  87. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/error_logging.py +0 -0
  88. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
  89. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/llm_metrics.py +0 -0
  90. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/llm_metrics_collector.py +0 -0
  91. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
  92. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/metrics_aggregator.py +0 -0
  93. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/metrics_config.py +0 -0
  94. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/observability_manager.py +0 -0
  95. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/otel_instrumentor.py +0 -0
  96. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/otel_logging_handler.py +0 -0
  97. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
  98. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/otel_setup.py +0 -0
  99. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/performance_monitor.py +0 -0
  100. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/progress_tracker.py +0 -0
  101. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/resource_manager.py +0 -0
  102. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
  103. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
  104. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/timing_tracker.py +0 -0
  105. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/token_counter.py +0 -0
  106. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/monitoring/tracing_context.py +0 -0
  107. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/notifications/__init__.py +0 -0
  108. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/notifications/hub.py +0 -0
  109. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/notifications/webhook_notifier.py +0 -0
  110. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/processing/__init__.py +0 -0
  111. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/processing/ai_content_management.py +0 -0
  112. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/processing/markdown_converter.py +0 -0
  113. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/processing/multimodal_integration.py +0 -0
  114. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/processing/rich_content_validation.py +0 -0
  115. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/py.typed +0 -0
  116. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/session/__init__.py +0 -0
  117. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/session/elasticsearch_session_storage.py +0 -0
  118. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/session/session_storage.py +0 -0
  119. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/__init__.py +0 -0
  120. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/agent_mixin.py +0 -0
  121. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/base.py +0 -0
  122. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/__init__.py +0 -0
  123. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/scripts/__init__.py +0 -0
  124. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/scripts/create_and_register.py +0 -0
  125. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/scripts/register_to_storage.py +0 -0
  126. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/chart/SKILL.md +0 -0
  127. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/chart/chart_to_image.py +0 -0
  128. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/code_delivery/SKILL.md +0 -0
  129. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/code_format/SKILL.md +0 -0
  130. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/code_format/format_python.py +0 -0
  131. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/csv/SKILL.md +0 -0
  132. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/csv/create_csv.py +0 -0
  133. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/csv/read_csv.py +0 -0
  134. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/csv/transform_csv.py +0 -0
  135. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/data_format/SKILL.md +0 -0
  136. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/data_format/json_to_yaml.py +0 -0
  137. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/data_format/yaml_to_json.py +0 -0
  138. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/drawio/SKILL.md +0 -0
  139. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/drawio/create_drawio.py +0 -0
  140. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/email_template/SKILL.md +0 -0
  141. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/excel/SKILL.md +0 -0
  142. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/excel/create_excel.py +0 -0
  143. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/file/SKILL.md +0 -0
  144. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/file/create_file.py +0 -0
  145. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/file/list_files.py +0 -0
  146. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/file/read_file.py +0 -0
  147. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/file_access/SKILL.md +0 -0
  148. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/file_access/download_to_local.py +0 -0
  149. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/file_access/get_file_path.py +0 -0
  150. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/form/SKILL.md +0 -0
  151. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/image_display/SKILL.md +0 -0
  152. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/image_gen/SKILL.md +0 -0
  153. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/image_gen/create_image.py +0 -0
  154. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/image_gen/generate_image.py +0 -0
  155. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/mermaid/SKILL.md +0 -0
  156. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +0 -0
  157. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/multimodal/SKILL.md +0 -0
  158. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +0 -0
  159. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/powerpoint/SKILL.md +0 -0
  160. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/powerpoint/create_powerpoint.py +0 -0
  161. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/powerpoint/templates/Big Data Infographics.pptx +0 -0
  162. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/powerpoint/templates/Executive Design Pitch Deck.pptx +0 -0
  163. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/powerpoint/templates/Management Consulting Toolkit.pptx +0 -0
  164. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/powerpoint/templates/__init__.py +0 -0
  165. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/powerpoint/templates/generate_templates.py +0 -0
  166. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/skill_creator/SKILL.md +0 -0
  167. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/skill_creator/skill_api.py +0 -0
  168. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/table/SKILL.md +0 -0
  169. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/table/table_to_image.py +0 -0
  170. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +0 -0
  171. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +0 -0
  172. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/web_news_search/SKILL.md +0 -0
  173. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/web_news_search/web_news_search.py +0 -0
  174. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/word/SKILL.md +0 -0
  175. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/builtin/skills/word/create_word.py +0 -0
  176. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/custom_skill_manager.py +0 -0
  177. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/discovery_prompt.py +0 -0
  178. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/markdown_loader.py +0 -0
  179. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/skills/tools.py +0 -0
  180. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/storage/__init__.py +0 -0
  181. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/storage/file_storages.py +0 -0
  182. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/storage/file_system_management.py +0 -0
  183. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/storage/storage_optimizer.py +0 -0
  184. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/subagents/__init__.py +0 -0
  185. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/subagents/executor.py +0 -0
  186. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/subagents/message_injector.py +0 -0
  187. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/subagents/message_queue.py +0 -0
  188. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/subagents/retrigger.py +0 -0
  189. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/subagents/spawn_tool.py +0 -0
  190. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/tools/__init__.py +0 -0
  191. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/tools/activity_callback.py +0 -0
  192. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/tools/adaptive_pdf_css.py +0 -0
  193. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/tools/base.py +0 -0
  194. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/tools/html_content_analyzer.py +0 -0
  195. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/tools/multimodal_tools.py +0 -0
  196. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/tools/pdf_image_scaler.py +0 -0
  197. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/tools/sizing_config.py +0 -0
  198. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/tools/web_fetch_tool.py +0 -0
  199. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/tools/web_search_tool.py +0 -0
  200. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/utils/__init__.py +0 -0
  201. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/utils/path_utils.py +0 -0
  202. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/utils/post_install.py +0 -0
  203. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/utils/session_title_generator.py +0 -0
  204. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/utils/source_detector.py +0 -0
  205. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/utils/special_blocks.py +0 -0
  206. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/__init__.py +0 -0
  207. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/admin_auth.py +0 -0
  208. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/admin_models.py +0 -0
  209. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/admin_router.py +0 -0
  210. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/admin_services.py +0 -0
  211. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/api_timing_middleware.py +0 -0
  212. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
  213. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  214. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/CREATING_AGENTS.md +0 -0
  215. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
  216. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
  217. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/Dockerfile +0 -0
  218. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/GETTING_STARTED.md +0 -0
  219. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/GITNEXUS_USER_GUIDE.md +0 -0
  220. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
  221. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/README.md +0 -0
  222. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  223. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/WORKSPACE_INTEGRATION.md +0 -0
  224. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/api-reference.md +0 -0
  225. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/configuration.md +0 -0
  226. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/docker-compose.yml +0 -0
  227. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/examples/agent_example_multi_skills.py +0 -0
  228. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/examples/agent_with_file_storage.py +0 -0
  229. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/examples/agent_with_mcp.py +0 -0
  230. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/examples/agent_with_memory.py +0 -0
  231. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/examples/agent_with_memory_graphiti.py +0 -0
  232. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/examples/agent_with_memory_hybrid.py +0 -0
  233. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/examples/agent_with_memory_simple.py +0 -0
  234. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/examples/custom_framework_agent.py +0 -0
  235. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/examples/simple_agent.py +0 -0
  236. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/examples/skills_demo_agent.py +0 -0
  237. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/docs/installation-guide.md +0 -0
  238. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/documentation_generator.py +0 -0
  239. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/gitnexus_client.py +0 -0
  240. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/helper_agent.py +0 -0
  241. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/helper_ui.html +0 -0
  242. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/modern_ui.html +0 -0
  243. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/observability/kibana-llm-dashboard-setup.json +0 -0
  244. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/observability/kibana-resource-metrics-dashboard.json +0 -0
  245. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/otel_tracing_middleware.py +0 -0
  246. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/skills_router.py +0 -0
  247. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/web/test_app.html +0 -0
  248. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/workspace/__init__.py +0 -0
  249. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/workspace/artefacts.py +0 -0
  250. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/workspace/client.py +0 -0
  251. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/workspace/config.py +0 -0
  252. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/workspace/context.py +0 -0
  253. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/workspace/cursor.py +0 -0
  254. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/workspace/memory.py +0 -0
  255. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/workspace/models.py +0 -0
  256. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/workspace/poller.py +0 -0
  257. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/workspace/preferences.py +0 -0
  258. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/workspace/router.py +0 -0
  259. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/workspace/session.py +0 -0
  260. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework/workspace/subscription.py +0 -0
  261. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
  262. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework_lib.egg-info/entry_points.txt +0 -0
  263. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework_lib.egg-info/requires.txt +0 -0
  264. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/agent_framework_lib.egg-info/top_level.txt +0 -0
  265. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/A2A_GUIDE.md +0 -0
  266. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
  267. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/ARCHITECTURE_DIAGRAM.md +0 -0
  268. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  269. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/CANCEL_AND_INTERRUPT_FRONTEND.md +0 -0
  270. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
  271. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/CREATING_AGENTS.md +0 -0
  272. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
  273. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/DEEPEVAL_TEST_REPORT.md +0 -0
  274. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/DOCKER_SETUP.md +0 -0
  275. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +0 -0
  276. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
  277. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/FILE_STORAGE_GUIDE.md +0 -0
  278. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/GETTING_STARTED.md +0 -0
  279. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/GITNEXUS_USER_GUIDE.md +0 -0
  280. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/HISTORY_MESSAGE_FORMAT.md +0 -0
  281. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
  282. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/MEMORY_INSTALLATION.md +0 -0
  283. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
  284. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/MULTIMODAL_TOOLS_GUIDE.md +0 -0
  285. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/OBSERVABILITY_GUIDE.md +0 -0
  286. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/PYPI_PUBLISHING.md +0 -0
  287. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/QA_STREAMING_LATENCY.md +0 -0
  288. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/SCREENSHOTS_GUIDE.md +0 -0
  289. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
  290. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/SSE_NOTIFICATIONS_GUIDE.md +0 -0
  291. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/STREAMING_EVENTS_FRONTEND.md +0 -0
  292. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  293. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/WORKSPACE_INTEGRATION.md +0 -0
  294. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/api-reference.md +0 -0
  295. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/configuration.md +0 -0
  296. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/framework_audit_remarques.md +0 -0
  297. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/helper_agent.md +0 -0
  298. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/index.md +0 -0
  299. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/docs/installation-guide.md +0 -0
  300. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/README.md +0 -0
  301. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/agent_context_budget_test.py +0 -0
  302. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/agent_example_multi_skills.py +0 -0
  303. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/agent_exemple_test.py +0 -0
  304. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/agent_training_with_apo.py +0 -0
  305. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/agent_with_custom_tools_file_storage.py +0 -0
  306. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/agent_with_file_storage.py +0 -0
  307. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/agent_with_mcp.py +0 -0
  308. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/agent_with_memory_graphiti.py +0 -0
  309. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/agent_with_memory_hybrid.py +0 -0
  310. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/agent_with_memory_simple.py +0 -0
  311. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/agent_with_personalization.py +0 -0
  312. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/biagenttest.py +0 -0
  313. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/custom_framework_agent.py +0 -0
  314. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/dependencies/docker-compose.yaml +0 -0
  315. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/pyproject.toml +0 -0
  316. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/simple_agent.py +0 -0
  317. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/skills_demo_agent.py +0 -0
  318. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/test_work_patterns_live.py +0 -0
  319. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/examples/workspace_test_agent.py +0 -0
  320. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.post5}/setup.cfg +0 -0
  321. {agent_framework_lib-0.8.7.post4 → agent_framework_lib-0.8.7.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.7.post4
3
+ Version: 0.8.7.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>
@@ -892,6 +892,22 @@ class AgentInterface(abc.ABC):
892
892
  "memory_adapter": None,
893
893
  }
894
894
 
895
+ def get_secret_redactor(self) -> Any:
896
+ """Return a redactor used to mask secret values in outgoing data.
897
+
898
+ The redactor exposes ``redact_text``, ``redact_parts``, ``feed`` and
899
+ ``flush`` and is used by the server as a last-line defense to strip
900
+ secret values (container env keys, workspace secrets) from responses,
901
+ persisted data, and logs.
902
+
903
+ The default implementation returns an inert redactor (nothing to mask).
904
+ ``BaseAgent`` overrides this to build a redactor from the sensitive
905
+ environment values and the current workspace secrets.
906
+ """
907
+ from ..security.secret_redactor import SecretRedactor
908
+
909
+ return SecretRedactor([])
910
+
895
911
  def get_custom_tool_display_info(self) -> dict[str, Any]:
896
912
  """
897
913
  Returns custom display info for agent-specific tools (e.g., MCP tools).
@@ -29,6 +29,7 @@ if TYPE_CHECKING:
29
29
  from collections.abc import AsyncGenerator
30
30
 
31
31
  from ..capabilities.resolver import CapabilitySet
32
+ from ..security.secret_redactor import SecretRedactor
32
33
  from ..subagents.executor import SubagentExecutor
33
34
  from ..subagents.message_queue import SessionMessageQueue
34
35
  from ..subagents.spawn_tool import SubagentSpawnTool
@@ -377,6 +378,41 @@ class BaseAgent(SkillsMixin, MemoryMixin, AgentInterface):
377
378
  except Exception as e:
378
379
  logger.warning(f"Could not propagate workspace secrets to live ShellTool: {e}")
379
380
 
381
+ def _loaded_skill_env_keys(self) -> set[str]:
382
+ """Return env-var names declared by currently loaded skills.
383
+
384
+ Reads ``requires_env`` from the metadata of every loaded skill so that
385
+ ``ShellTool`` can expose those variables to the shell while everything
386
+ else is scrubbed. Returns an empty set if skills are unavailable.
387
+ """
388
+ if not SKILLS_AVAILABLE or not getattr(self, "_enable_skills", False):
389
+ return set()
390
+ keys: set[str] = set()
391
+ try:
392
+ registry = self._skill_registry
393
+ for name in registry.list_loaded():
394
+ skill = registry.get(name)
395
+ if skill is not None:
396
+ keys.update(skill.metadata.requires_env)
397
+ except Exception as e: # noqa: BLE001 — never break shell wiring
398
+ logger.warning(f"Could not collect loaded skill env keys: {e}")
399
+ return keys
400
+
401
+ def get_secret_redactor(self) -> SecretRedactor:
402
+ """Build a redactor masking sensitive env values + workspace secrets.
403
+
404
+ The returned redactor masks any occurrence of a sensitive container
405
+ environment value (LLM keys, infra creds, ``API_KEYS``) or workspace
406
+ secret in outgoing text, parts, persisted data, and logs. Rebuilt on
407
+ demand so it always reflects the current environment and workspace.
408
+ """
409
+ from ..security.secret_redactor import SecretRedactor
410
+ from ..security.shell_env import sensitive_env_values
411
+
412
+ env_values = sensitive_env_values(os.environ)
413
+ workspace_values = list(self._workspace_secrets.values())
414
+ return SecretRedactor(env_values + workspace_values)
415
+
380
416
  def set_subagent_executor(self, executor: SubagentExecutor | None) -> None:
381
417
  """Inject or remove the shared SubagentExecutor.
382
418
 
@@ -641,7 +677,10 @@ class BaseAgent(SkillsMixin, MemoryMixin, AgentInterface):
641
677
  try:
642
678
  from ..tools.shell_tool import ShellTool
643
679
 
644
- shell_tool = ShellTool(default_timeout=120)
680
+ shell_tool = ShellTool(
681
+ default_timeout=120,
682
+ skill_env_provider=self._loaded_skill_env_keys,
683
+ )
645
684
  # Inject session context so that AGENT_USER_ID / AGENT_SESSION_ID are
646
685
  # propagated to subprocesses (register_to_storage / create_and_register).
647
686
  # Without this, generated files are uploaded without session_id and
@@ -0,0 +1,17 @@
1
+ """Security utilities for the agent framework.
2
+
3
+ Provides secret redaction (masking secret values in any output reaching the
4
+ client, persistence, or logs) and the shell environment allowlist used to
5
+ prevent the shell sandbox from reading container secrets it does not need.
6
+ """
7
+
8
+ from .secret_redactor import SecretRedactor, build_redaction_value_set
9
+ from .shell_env import build_shell_env, sensitive_env_values
10
+
11
+
12
+ __all__ = [
13
+ "SecretRedactor",
14
+ "build_redaction_value_set",
15
+ "build_shell_env",
16
+ "sensitive_env_values",
17
+ ]
@@ -0,0 +1,291 @@
1
+ """Masquage des valeurs de secrets dans les chaînes et les output parts.
2
+
3
+ Le ``SecretRedactor`` remplace toute occurrence d'une valeur secrète connue par
4
+ un masque fixe (``********``), avant que la donnée n'atteigne le client, le
5
+ stockage de session/Elasticsearch ou les logs.
6
+
7
+ Deux sources de valeurs à masquer :
8
+ - les variables d'environnement sensibles du conteneur (clés LLM, creds infra) ;
9
+ - les secrets workspace injectés dans le shell.
10
+
11
+ Le masquage est littéral (pas de regex sur la valeur), insensible à rien
12
+ d'autre que la casse exacte, et trie les valeurs par longueur décroissante pour
13
+ éviter qu'un secret court inclus dans un secret long ne soit masqué de façon
14
+ incohérente.
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ import os
20
+ from typing import TYPE_CHECKING, Any
21
+
22
+
23
+ if TYPE_CHECKING:
24
+ from collections.abc import Iterable, Sequence
25
+
26
+
27
+ MASK = "********"
28
+
29
+ DEFAULT_MIN_LEN = 4
30
+ """Longueur minimale d'une valeur pour être masquée (sous ce seuil = bruit)."""
31
+
32
+
33
+ def _redaction_min_len() -> int:
34
+ """Lit le seuil de longueur minimale depuis l'environnement."""
35
+ raw = os.environ.get("SECRET_REDACTION_MIN_LEN", "")
36
+ try:
37
+ value = int(raw)
38
+ except (TypeError, ValueError):
39
+ return DEFAULT_MIN_LEN
40
+ return value if value > 0 else DEFAULT_MIN_LEN
41
+
42
+
43
+ def build_redaction_value_set(
44
+ *value_groups: Iterable[str] | None,
45
+ min_len: int | None = None,
46
+ ) -> list[str]:
47
+ """Construit la liste triée des valeurs à masquer.
48
+
49
+ Fusionne plusieurs groupes de valeurs, retire les doublons, ignore les
50
+ valeurs vides ou trop courtes, puis trie par longueur décroissante.
51
+
52
+ Args:
53
+ *value_groups: Itérables de valeurs candidates (env sensibles,
54
+ secrets workspace, etc.). Les ``None`` sont tolérés.
55
+ min_len: Longueur minimale d'une valeur pour être retenue. Si ``None``,
56
+ lit ``SECRET_REDACTION_MIN_LEN`` (défaut 4).
57
+
58
+ Returns:
59
+ Liste de valeurs uniques triées par longueur décroissante.
60
+ """
61
+ threshold = min_len if min_len is not None else _redaction_min_len()
62
+ seen: set[str] = set()
63
+ for group in value_groups:
64
+ if not group:
65
+ continue
66
+ for raw in group:
67
+ if raw is None:
68
+ continue
69
+ value = str(raw)
70
+ if len(value) < threshold:
71
+ continue
72
+ seen.add(value)
73
+ return sorted(seen, key=len, reverse=True)
74
+
75
+
76
+ class SecretRedactor:
77
+ """Masque des valeurs secrètes dans des chaînes et des output parts.
78
+
79
+ Stateless vis-à-vis de la session, sauf pour le buffer de ``feed()`` utilisé
80
+ en streaming. Construire un nouveau redacteur par session (ou réutiliser tant
81
+ que l'ensemble des secrets ne change pas).
82
+ """
83
+
84
+ def __init__(self, secret_values: Iterable[str] | None = None) -> None:
85
+ """Initialise le redacteur.
86
+
87
+ Args:
88
+ secret_values: Valeurs à masquer. Filtrées/triées via
89
+ ``build_redaction_value_set``.
90
+ """
91
+ self._values: list[str] = build_redaction_value_set(secret_values)
92
+ self._max_len: int = self._values[0].__len__() if self._values else 0
93
+ self._buffer: str = ""
94
+
95
+ @property
96
+ def active(self) -> bool:
97
+ """``True`` si au moins une valeur est à masquer."""
98
+ return bool(self._values)
99
+
100
+ @property
101
+ def secret_values(self) -> list[str]:
102
+ """Copie de la liste des valeurs masquées (triée par longueur décr.)."""
103
+ return list(self._values)
104
+
105
+ def redact_text(self, text: str | None) -> str | None:
106
+ """Masque toutes les occurrences des valeurs secrètes dans ``text``.
107
+
108
+ Args:
109
+ text: Texte à nettoyer. ``None`` est renvoyé tel quel.
110
+
111
+ Returns:
112
+ Le texte avec chaque valeur secrète remplacée par ``********``.
113
+ """
114
+ if text is None or not self._values:
115
+ return text
116
+ if not text:
117
+ return text
118
+ result = text
119
+ for value in self._values:
120
+ if value in result:
121
+ result = result.replace(value, MASK)
122
+ return result
123
+
124
+ def redact_obj(self, obj: Any) -> Any:
125
+ """Masque récursivement les valeurs secrètes dans une structure JSON.
126
+
127
+ Gère str, dict, list, tuple. Les autres types sont renvoyés tels quels.
128
+ """
129
+ if not self._values:
130
+ return obj
131
+ if isinstance(obj, str):
132
+ return self.redact_text(obj)
133
+ if isinstance(obj, dict):
134
+ return {k: self.redact_obj(v) for k, v in obj.items()}
135
+ if isinstance(obj, list):
136
+ return [self.redact_obj(v) for v in obj]
137
+ if isinstance(obj, tuple):
138
+ return tuple(self.redact_obj(v) for v in obj)
139
+ return obj
140
+
141
+ def redact_parts(self, parts: Sequence[Any] | None) -> list[Any]:
142
+ """Masque les champs textuels de chaque output part.
143
+
144
+ Couvre ``TextOutputPart.text``, ``TextOutputStreamPart.text``,
145
+ ``ActivityOutputPart.content``/``results``/``tools``, et
146
+ ``TechnicalDetails.raw_result``/``error_message``. Retourne de nouvelles
147
+ instances (immutabilité) — les parts non concernées sont conservées.
148
+
149
+ Args:
150
+ parts: Liste d'output parts (modèles Pydantic) ou de dicts.
151
+
152
+ Returns:
153
+ Nouvelle liste avec les valeurs secrètes masquées.
154
+ """
155
+ if not parts:
156
+ return list(parts) if parts is not None else []
157
+ if not self._values:
158
+ return list(parts)
159
+ return [self._redact_part(part) for part in parts]
160
+
161
+ def _redact_part(self, part: Any) -> Any:
162
+ """Masque une seule part (dict ou modèle Pydantic)."""
163
+ if isinstance(part, dict):
164
+ return self.redact_obj(part)
165
+
166
+ part_type = getattr(part, "type", None)
167
+
168
+ if part_type in ("text_output", "text_output_stream"):
169
+ text = getattr(part, "text", None)
170
+ redacted = self.redact_text(text)
171
+ if redacted != text:
172
+ return part.model_copy(update={"text": redacted})
173
+ return part
174
+
175
+ if part_type == "activity":
176
+ return self._redact_activity_part(part)
177
+
178
+ return part
179
+
180
+ def _redact_activity_part(self, part: Any) -> Any:
181
+ """Masque le contenu textuel et les détails techniques d'une activité."""
182
+ updates: dict[str, Any] = {}
183
+
184
+ content = getattr(part, "content", None)
185
+ redacted_content = self.redact_text(content)
186
+ if redacted_content != content:
187
+ updates["content"] = redacted_content
188
+
189
+ for field in ("results", "tools"):
190
+ value = getattr(part, field, None)
191
+ if value:
192
+ redacted = self.redact_obj(value)
193
+ if redacted != value:
194
+ updates[field] = redacted
195
+
196
+ td = getattr(part, "technical_details", None)
197
+ if td is not None:
198
+ td_updates: dict[str, Any] = {}
199
+ raw_result = getattr(td, "raw_result", None)
200
+ redacted_raw = self.redact_text(raw_result)
201
+ if redacted_raw != raw_result:
202
+ td_updates["raw_result"] = redacted_raw
203
+ err = getattr(td, "error_message", None)
204
+ redacted_err = self.redact_text(err)
205
+ if redacted_err != err:
206
+ td_updates["error_message"] = redacted_err
207
+ args = getattr(td, "arguments", None)
208
+ if args:
209
+ redacted_args = self.redact_obj(args)
210
+ if redacted_args != args:
211
+ td_updates["arguments"] = redacted_args
212
+ if td_updates:
213
+ updates["technical_details"] = td.model_copy(update=td_updates)
214
+
215
+ if updates:
216
+ return part.model_copy(update=updates)
217
+ return part
218
+
219
+ def feed(self, delta: str) -> str:
220
+ """Masquage incrémental pour le streaming.
221
+
222
+ Conserve un buffer brut et n'émet que le préfixe qui ne peut plus être
223
+ affecté par les caractères futurs. On retient au minimum
224
+ ``max_len - 1`` caractères (longueur du plus long secret moins un), puis
225
+ on abaisse la coupure pour ne jamais scinder une occurrence présente
226
+ dans le buffer. Le préfixe émis est masqué ; le reste est conservé.
227
+
228
+ Args:
229
+ delta: Nouveau fragment de texte.
230
+
231
+ Returns:
232
+ Portion masquée et sûre à émettre immédiatement (peut être vide).
233
+ """
234
+ if not self._values:
235
+ return delta
236
+ self._buffer += delta
237
+ buf = self._buffer
238
+ margin = self._max_len - 1
239
+ cut = len(buf) - margin
240
+ if cut <= 0:
241
+ return ""
242
+
243
+ cut = self._safe_cut(buf, cut)
244
+ if cut <= 0:
245
+ return ""
246
+
247
+ emitted = self.redact_text(buf[:cut]) or ""
248
+ self._buffer = buf[cut:]
249
+ return emitted
250
+
251
+ def _safe_cut(self, buf: str, cut: int) -> int:
252
+ """Abaisse ``cut`` jusqu'à ce qu'aucune occurrence ne le chevauche.
253
+
254
+ Une occurrence ``buf[start:start+len(v)]`` chevauche ``cut`` si
255
+ ``start < cut < start + len(v)``. On ramène ``cut`` au début de la
256
+ première occurrence chevauchante, en itérant jusqu'au point fixe car
257
+ abaisser ``cut`` peut révéler des occurrences plus précoces.
258
+ """
259
+ changed = True
260
+ while changed and cut > 0:
261
+ changed = False
262
+ for value in self._values:
263
+ lv = len(value)
264
+ start = 0
265
+ while True:
266
+ idx = buf.find(value, start)
267
+ if idx == -1 or idx >= cut:
268
+ break
269
+ if idx + lv > cut:
270
+ cut = idx
271
+ changed = True
272
+ break
273
+ start = idx + 1
274
+ if cut <= 0:
275
+ return 0
276
+ return cut
277
+
278
+ def flush(self) -> str:
279
+ """Vide le buffer de streaming en masquant le résidu.
280
+
281
+ Returns:
282
+ Le reste du buffer, masqué.
283
+ """
284
+ if not self._buffer:
285
+ return ""
286
+ remaining = self.redact_text(self._buffer) or ""
287
+ self._buffer = ""
288
+ return remaining
289
+
290
+
291
+ __all__ = ["SecretRedactor", "build_redaction_value_set", "MASK"]
@@ -0,0 +1,195 @@
1
+ """Construction de l'environnement exposé à la sandbox ``shell_exec``.
2
+
3
+ Le shell ne doit voir que les variables dont il a réellement besoin :
4
+ - un socle système (PATH, HOME, locale, runtime ``uv``…) ;
5
+ - le wiring framework (``AGENT_*``) injecté explicitement ailleurs ;
6
+ - l'auth requise par les scripts d'upload (``REQUIRE_AUTH``/``API_KEYS``) ;
7
+ - les variables déclarées par les skills chargées (``requires_env``) ;
8
+ - les secrets workspace (injectés volontairement pour usage) ;
9
+ - un override d'exploitation (``SHELL_ENV_ALLOWLIST``).
10
+
11
+ Toute autre variable de ``os.environ`` (clés LLM, creds DB/cloud, mots de passe)
12
+ est retirée : ``echo $OPENAI_API_KEY`` renvoie une chaîne vide en conversation
13
+ normale. Les valeurs qui restent exposées mais sensibles (``API_KEYS``,
14
+ ``OPENAI_API_KEY`` quand ``image_gen`` est chargée) sont masquées en sortie par
15
+ le ``SecretRedactor``.
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ import os
21
+ from typing import TYPE_CHECKING
22
+
23
+
24
+ if TYPE_CHECKING:
25
+ from collections.abc import Iterable
26
+
27
+
28
+ # Socle système toujours exposé. Préfixes via _ALLOW_PREFIXES.
29
+ _BASE_ALLOW: frozenset[str] = frozenset(
30
+ {
31
+ "PATH",
32
+ "HOME",
33
+ "USER",
34
+ "LOGNAME",
35
+ "SHELL",
36
+ "PWD",
37
+ "OLDPWD",
38
+ "TERM",
39
+ "TZ",
40
+ "TMPDIR",
41
+ "TEMP",
42
+ "TMP",
43
+ "HOSTNAME",
44
+ "LANG",
45
+ "LANGUAGE",
46
+ "PYTHONPATH",
47
+ "PYTHONHOME",
48
+ "PYTHONUNBUFFERED",
49
+ "PYTHONDONTWRITEBYTECODE",
50
+ "PYTHONIOENCODING",
51
+ "VIRTUAL_ENV",
52
+ "CONDA_PREFIX",
53
+ "NODE_PATH",
54
+ "SSL_CERT_FILE",
55
+ "SSL_CERT_DIR",
56
+ "REQUESTS_CA_BUNDLE",
57
+ "CURL_CA_BUNDLE",
58
+ }
59
+ )
60
+
61
+ # Préfixes système exposés en bloc (locale + chaînes d'outils courantes).
62
+ _ALLOW_PREFIXES: tuple[str, ...] = (
63
+ "LC_",
64
+ "UV_",
65
+ "XDG_",
66
+ "DENO_",
67
+ "NODE_",
68
+ "NPM_",
69
+ "PLAYWRIGHT_",
70
+ "NODEENV_",
71
+ )
72
+
73
+ # Wiring framework + auth requise par les scripts d'upload (process séparés qui
74
+ # lisent ces variables depuis l'environnement). API_KEYS reste exposé mais sa
75
+ # valeur est masquée en sortie par le SecretRedactor.
76
+ _FRAMEWORK_ALLOW: frozenset[str] = frozenset(
77
+ {
78
+ "AGENT_USER_ID",
79
+ "AGENT_SESSION_ID",
80
+ "AGENT_HOST",
81
+ "AGENT_PORT",
82
+ "AGENT_OUTPUT_DIR",
83
+ "AGENT_CLEANUP_LOCAL",
84
+ "REQUIRE_AUTH",
85
+ "API_KEYS",
86
+ }
87
+ )
88
+
89
+
90
+ def _allow_prefixes() -> tuple[str, ...]:
91
+ return tuple(p for p in _ALLOW_PREFIXES if p)
92
+
93
+
94
+ def shell_env_mode() -> str:
95
+ """Mode de filtrage de l'environnement shell.
96
+
97
+ Returns:
98
+ ``"allowlist"`` (défaut), ``"passthrough"`` (legacy, debug uniquement).
99
+ """
100
+ mode = os.environ.get("SHELL_ENV_MODE", "allowlist").strip().lower()
101
+ return mode if mode in ("allowlist", "passthrough") else "allowlist"
102
+
103
+
104
+ def _extra_allowlist() -> set[str]:
105
+ """Clés additionnelles exposées via ``SHELL_ENV_ALLOWLIST`` (CSV)."""
106
+ raw = os.environ.get("SHELL_ENV_ALLOWLIST", "")
107
+ return {k.strip() for k in raw.split(",") if k.strip()}
108
+
109
+
110
+ def _is_allowed(key: str, allow_exact: frozenset[str] | set[str]) -> bool:
111
+ if key in allow_exact:
112
+ return True
113
+ return any(key.startswith(prefix) for prefix in _allow_prefixes())
114
+
115
+
116
+ def build_shell_env(
117
+ source_env: dict[str, str] | None = None,
118
+ *,
119
+ skill_env_keys: Iterable[str] | None = None,
120
+ extra_keys: Iterable[str] | None = None,
121
+ ) -> dict[str, str]:
122
+ """Construit l'environnement filtré pour le sous-processus shell.
123
+
124
+ Args:
125
+ source_env: Environnement source (défaut ``os.environ``).
126
+ skill_env_keys: Variables déclarées par les skills chargées
127
+ (``requires_env``). Exposées car nécessaires à l'exécution des skills.
128
+ extra_keys: Clés additionnelles à exposer (override programmatique).
129
+
130
+ Returns:
131
+ Dictionnaire d'environnement ne contenant que les clés autorisées.
132
+ En mode ``passthrough``, renvoie une copie complète de ``source_env``.
133
+ """
134
+ src = dict(source_env if source_env is not None else os.environ)
135
+
136
+ if shell_env_mode() == "passthrough":
137
+ return src
138
+
139
+ allow_exact: set[str] = set(_BASE_ALLOW) | set(_FRAMEWORK_ALLOW)
140
+ allow_exact |= _extra_allowlist()
141
+ if skill_env_keys:
142
+ allow_exact |= {str(k).strip() for k in skill_env_keys if str(k).strip()}
143
+ if extra_keys:
144
+ allow_exact |= {str(k).strip() for k in extra_keys if str(k).strip()}
145
+
146
+ return {key: value for key, value in src.items() if _is_allowed(key, allow_exact)}
147
+
148
+
149
+ def sensitive_env_values(
150
+ source_env: dict[str, str] | None = None,
151
+ *,
152
+ extra_allowed: Iterable[str] | None = None,
153
+ ) -> list[str]:
154
+ """Renvoie les valeurs des variables d'env considérées sensibles.
155
+
156
+ Utilisé pour alimenter le ``SecretRedactor`` : toute variable qui n'est pas
157
+ dans le socle système / wiring framework est considérée comme potentiellement
158
+ secrète, plus les variables sensibles qui restent exposées au shell
159
+ (``API_KEYS`` notamment).
160
+
161
+ Args:
162
+ source_env: Environnement source (défaut ``os.environ``).
163
+ extra_allowed: Clés exposées au shell (skills chargées) dont la valeur
164
+ doit malgré tout être masquée si elle ressemble à un secret.
165
+
166
+ Returns:
167
+ Liste de valeurs (chaînes) à masquer. Doublons et vides inclus — le
168
+ ``SecretRedactor`` les filtre et déduplique.
169
+ """
170
+ src = dict(source_env if source_env is not None else os.environ)
171
+ allow_exact: set[str] = set(_BASE_ALLOW)
172
+ values: list[str] = []
173
+ for key, value in src.items():
174
+ if not value:
175
+ continue
176
+ # Variables système non sensibles: ignorées.
177
+ if _is_allowed(key, allow_exact):
178
+ continue
179
+ # Wiring framework non secret: ne pas masquer (sinon on masque host/port,
180
+ # session_id, etc.). Seul API_KEYS du framework est secret.
181
+ if key in _FRAMEWORK_ALLOW and key != "API_KEYS":
182
+ continue
183
+ values.append(value)
184
+ # API_KEYS peut contenir plusieurs clés séparées par des virgules.
185
+ api_keys = src.get("API_KEYS", "").strip()
186
+ if api_keys:
187
+ values.extend(k.strip() for k in api_keys.split(",") if k.strip())
188
+ return values
189
+
190
+
191
+ __all__ = [
192
+ "build_shell_env",
193
+ "sensitive_env_values",
194
+ "shell_env_mode",
195
+ ]