agent-framework-lib 0.8.6__tar.gz → 0.8.7__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 (318) hide show
  1. {agent_framework_lib-0.8.6/agent_framework_lib.egg-info → agent_framework_lib-0.8.7}/PKG-INFO +1 -1
  2. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/__init__.py +36 -6
  3. agent_framework_lib-0.8.7/agent_framework/code_delivery/__init__.py +45 -0
  4. agent_framework_lib-0.8.7/agent_framework/code_delivery/audit.py +371 -0
  5. agent_framework_lib-0.8.7/agent_framework/code_delivery/config.py +146 -0
  6. agent_framework_lib-0.8.7/agent_framework/code_delivery/git_provider.py +267 -0
  7. agent_framework_lib-0.8.7/agent_framework/code_delivery/herdr_client.py +223 -0
  8. agent_framework_lib-0.8.7/agent_framework/code_delivery/models.py +163 -0
  9. agent_framework_lib-0.8.7/agent_framework/code_delivery/orchestrator.py +579 -0
  10. agent_framework_lib-0.8.7/agent_framework/code_delivery/tools.py +172 -0
  11. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/prompt_builder.py +9 -1
  12. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/implementations/budget_aware_agent.py +37 -2
  13. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/session/elasticsearch_session_storage.py +39 -4
  14. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/session/session_storage.py +22 -0
  15. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/__init__.py +27 -0
  16. agent_framework_lib-0.8.7/agent_framework/skills/builtin/skills/code_delivery/SKILL.md +74 -0
  17. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/markdown_loader.py +48 -1
  18. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/tools.py +22 -6
  19. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/CUSTOM_SKILLS_GUIDE.md +2 -1
  20. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7/agent_framework/web/docs}/examples/agent_example_multi_skills.py +4 -1
  21. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/server.py +155 -57
  22. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/workspace/__init__.py +2 -0
  23. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/workspace/client.py +34 -0
  24. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/workspace/models.py +8 -0
  25. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/workspace/router.py +29 -5
  26. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7/agent_framework_lib.egg-info}/PKG-INFO +1 -1
  27. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework_lib.egg-info/SOURCES.txt +9 -0
  28. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/CUSTOM_SKILLS_GUIDE.md +2 -1
  29. {agent_framework_lib-0.8.6/agent_framework/web/docs → agent_framework_lib-0.8.7}/examples/agent_example_multi_skills.py +4 -1
  30. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/pyproject.toml +1 -1
  31. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/ARCHITECTURE.md +0 -0
  32. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/LICENSE +0 -0
  33. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/MANIFEST.in +0 -0
  34. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/README.md +0 -0
  35. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/__init__.py +0 -0
  36. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/base.py +0 -0
  37. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/endpoints/__init__.py +0 -0
  38. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
  39. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
  40. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
  41. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
  42. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
  43. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
  44. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
  45. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/models.py +0 -0
  46. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/providers/__init__.py +0 -0
  47. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
  48. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/a2a/providers/postgres_provider.py +0 -0
  49. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/capabilities/__init__.py +0 -0
  50. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/capabilities/resolver.py +0 -0
  51. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/__init__.py +0 -0
  52. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/activity_formatter.py +0 -0
  53. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/agent_interface.py +0 -0
  54. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/agent_provider.py +0 -0
  55. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/base_agent.py +0 -0
  56. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/context_budget.py +0 -0
  57. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/context_summarizer.py +0 -0
  58. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/elasticsearch_config_provider.py +0 -0
  59. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/execution_controller.py +0 -0
  60. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/implementation_validator.py +0 -0
  61. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/interruption_message.py +0 -0
  62. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/knowledge_state.py +0 -0
  63. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/loop_detector.py +0 -0
  64. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/model_clients.py +0 -0
  65. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/model_config.py +0 -0
  66. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/model_router.py +0 -0
  67. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/models.py +0 -0
  68. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/provider_calibration.py +0 -0
  69. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/scratchpad_compressor.py +0 -0
  70. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/scratchpad_serializer.py +0 -0
  71. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/state_manager.py +0 -0
  72. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/step_display_config.py +0 -0
  73. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/core/streaming_parts_accumulator.py +0 -0
  74. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/implementations/__init__.py +0 -0
  75. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/implementations/llamaindex_agent.py +0 -0
  76. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
  77. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/implementations/microsoft_agent.py +0 -0
  78. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/__init__.py +0 -0
  79. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/agent_mixin.py +0 -0
  80. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/base.py +0 -0
  81. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/config.py +0 -0
  82. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/hypothesis_engine.py +0 -0
  83. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/implicit_feedback.py +0 -0
  84. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/manager.py +0 -0
  85. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/personalization.py +0 -0
  86. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/providers/__init__.py +0 -0
  87. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/providers/graphiti_provider.py +0 -0
  88. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/providers/memori_provider.py +0 -0
  89. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/response_lessons.py +0 -0
  90. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/tools.py +0 -0
  91. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/memory/work_patterns.py +0 -0
  92. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/__init__.py +0 -0
  93. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/api_timing_tracker.py +0 -0
  94. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
  95. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
  96. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/error_handling.py +0 -0
  97. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/error_logging.py +0 -0
  98. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
  99. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/llm_metrics.py +0 -0
  100. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/llm_metrics_collector.py +0 -0
  101. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
  102. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/metrics_aggregator.py +0 -0
  103. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/metrics_config.py +0 -0
  104. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/observability_manager.py +0 -0
  105. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/otel_instrumentor.py +0 -0
  106. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/otel_logging_handler.py +0 -0
  107. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
  108. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/otel_setup.py +0 -0
  109. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/performance_monitor.py +0 -0
  110. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/progress_tracker.py +0 -0
  111. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/resource_manager.py +0 -0
  112. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
  113. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
  114. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/timing_tracker.py +0 -0
  115. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/token_counter.py +0 -0
  116. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/monitoring/tracing_context.py +0 -0
  117. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/notifications/__init__.py +0 -0
  118. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/notifications/hub.py +0 -0
  119. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/notifications/webhook_notifier.py +0 -0
  120. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/processing/__init__.py +0 -0
  121. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/processing/ai_content_management.py +0 -0
  122. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/processing/markdown_converter.py +0 -0
  123. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/processing/multimodal_integration.py +0 -0
  124. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/processing/rich_content_validation.py +0 -0
  125. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/py.typed +0 -0
  126. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/session/__init__.py +0 -0
  127. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/__init__.py +0 -0
  128. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/agent_mixin.py +0 -0
  129. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/base.py +0 -0
  130. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/scripts/__init__.py +0 -0
  131. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/scripts/create_and_register.py +0 -0
  132. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/scripts/register_to_storage.py +0 -0
  133. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/chart/SKILL.md +0 -0
  134. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/chart/chart_to_image.py +0 -0
  135. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/code_format/SKILL.md +0 -0
  136. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/code_format/format_python.py +0 -0
  137. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/csv/SKILL.md +0 -0
  138. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/csv/create_csv.py +0 -0
  139. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/csv/read_csv.py +0 -0
  140. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/csv/transform_csv.py +0 -0
  141. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/data_format/SKILL.md +0 -0
  142. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/data_format/json_to_yaml.py +0 -0
  143. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/data_format/yaml_to_json.py +0 -0
  144. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/drawio/SKILL.md +0 -0
  145. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/drawio/create_drawio.py +0 -0
  146. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/email_template/SKILL.md +0 -0
  147. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/excel/SKILL.md +0 -0
  148. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/excel/create_excel.py +0 -0
  149. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/file/SKILL.md +0 -0
  150. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/file/create_file.py +0 -0
  151. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/file/list_files.py +0 -0
  152. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/file/read_file.py +0 -0
  153. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/file_access/SKILL.md +0 -0
  154. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/file_access/download_to_local.py +0 -0
  155. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/file_access/get_file_path.py +0 -0
  156. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/form/SKILL.md +0 -0
  157. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/image_display/SKILL.md +0 -0
  158. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/image_gen/SKILL.md +0 -0
  159. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/image_gen/create_image.py +0 -0
  160. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/image_gen/generate_image.py +0 -0
  161. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/mermaid/SKILL.md +0 -0
  162. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +0 -0
  163. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/multimodal/SKILL.md +0 -0
  164. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +0 -0
  165. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/powerpoint/SKILL.md +0 -0
  166. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/powerpoint/create_powerpoint.py +0 -0
  167. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/powerpoint/templates/Big Data Infographics.pptx +0 -0
  168. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/powerpoint/templates/Executive Design Pitch Deck.pptx +0 -0
  169. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/powerpoint/templates/Management Consulting Toolkit.pptx +0 -0
  170. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/powerpoint/templates/__init__.py +0 -0
  171. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/powerpoint/templates/generate_templates.py +0 -0
  172. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/skill_creator/SKILL.md +0 -0
  173. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/skill_creator/skill_api.py +0 -0
  174. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/table/SKILL.md +0 -0
  175. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/table/table_to_image.py +0 -0
  176. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +0 -0
  177. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +0 -0
  178. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/web_news_search/SKILL.md +0 -0
  179. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/web_news_search/web_news_search.py +0 -0
  180. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/word/SKILL.md +0 -0
  181. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/builtin/skills/word/create_word.py +0 -0
  182. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/custom_skill_manager.py +0 -0
  183. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/skills/discovery_prompt.py +0 -0
  184. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/storage/__init__.py +0 -0
  185. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/storage/file_storages.py +0 -0
  186. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/storage/file_system_management.py +0 -0
  187. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/storage/storage_optimizer.py +0 -0
  188. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/subagents/__init__.py +0 -0
  189. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/subagents/executor.py +0 -0
  190. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/subagents/message_injector.py +0 -0
  191. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/subagents/message_queue.py +0 -0
  192. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/subagents/retrigger.py +0 -0
  193. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/subagents/spawn_tool.py +0 -0
  194. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/tools/__init__.py +0 -0
  195. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/tools/activity_callback.py +0 -0
  196. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/tools/adaptive_pdf_css.py +0 -0
  197. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/tools/base.py +0 -0
  198. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/tools/html_content_analyzer.py +0 -0
  199. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/tools/multimodal_tools.py +0 -0
  200. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/tools/pdf_image_scaler.py +0 -0
  201. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/tools/shell_tool.py +0 -0
  202. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/tools/sizing_config.py +0 -0
  203. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/tools/web_fetch_tool.py +0 -0
  204. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/tools/web_search_tool.py +0 -0
  205. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/utils/__init__.py +0 -0
  206. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/utils/path_utils.py +0 -0
  207. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/utils/post_install.py +0 -0
  208. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/utils/session_title_generator.py +0 -0
  209. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/utils/source_detector.py +0 -0
  210. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/utils/special_blocks.py +0 -0
  211. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/__init__.py +0 -0
  212. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/admin_auth.py +0 -0
  213. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/admin_models.py +0 -0
  214. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/admin_router.py +0 -0
  215. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/admin_services.py +0 -0
  216. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/api_timing_middleware.py +0 -0
  217. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
  218. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  219. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/CREATING_AGENTS.md +0 -0
  220. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
  221. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/Dockerfile +0 -0
  222. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/GETTING_STARTED.md +0 -0
  223. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/GITNEXUS_USER_GUIDE.md +0 -0
  224. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
  225. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/README.md +0 -0
  226. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  227. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/WORKSPACE_INTEGRATION.md +0 -0
  228. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/api-reference.md +0 -0
  229. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/configuration.md +0 -0
  230. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/docker-compose.yml +0 -0
  231. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/examples/agent_with_file_storage.py +0 -0
  232. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/examples/agent_with_mcp.py +0 -0
  233. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/examples/agent_with_memory.py +0 -0
  234. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/examples/agent_with_memory_graphiti.py +0 -0
  235. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/examples/agent_with_memory_hybrid.py +0 -0
  236. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/examples/agent_with_memory_simple.py +0 -0
  237. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/examples/custom_framework_agent.py +0 -0
  238. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/examples/simple_agent.py +0 -0
  239. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/examples/skills_demo_agent.py +0 -0
  240. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/docs/installation-guide.md +0 -0
  241. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/documentation_generator.py +0 -0
  242. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/gitnexus_client.py +0 -0
  243. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/helper_agent.py +0 -0
  244. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/helper_ui.html +0 -0
  245. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/modern_ui.html +0 -0
  246. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/observability/kibana-llm-dashboard-setup.json +0 -0
  247. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/observability/kibana-resource-metrics-dashboard.json +0 -0
  248. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/otel_tracing_middleware.py +0 -0
  249. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/skills_router.py +0 -0
  250. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/web/test_app.html +0 -0
  251. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/workspace/artefacts.py +0 -0
  252. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/workspace/config.py +0 -0
  253. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/workspace/context.py +0 -0
  254. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/workspace/cursor.py +0 -0
  255. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/workspace/memory.py +0 -0
  256. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/workspace/poller.py +0 -0
  257. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/workspace/preferences.py +0 -0
  258. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/workspace/session.py +0 -0
  259. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework/workspace/subscription.py +0 -0
  260. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
  261. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework_lib.egg-info/entry_points.txt +0 -0
  262. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework_lib.egg-info/requires.txt +0 -0
  263. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/agent_framework_lib.egg-info/top_level.txt +0 -0
  264. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/A2A_GUIDE.md +0 -0
  265. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
  266. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/ARCHITECTURE_DIAGRAM.md +0 -0
  267. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  268. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/CANCEL_AND_INTERRUPT_FRONTEND.md +0 -0
  269. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
  270. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/CREATING_AGENTS.md +0 -0
  271. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/DEEPEVAL_TEST_REPORT.md +0 -0
  272. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/DOCKER_SETUP.md +0 -0
  273. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +0 -0
  274. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
  275. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/FILE_STORAGE_GUIDE.md +0 -0
  276. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/GETTING_STARTED.md +0 -0
  277. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/GITNEXUS_USER_GUIDE.md +0 -0
  278. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/HISTORY_MESSAGE_FORMAT.md +0 -0
  279. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
  280. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/MEMORY_INSTALLATION.md +0 -0
  281. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
  282. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/MULTIMODAL_TOOLS_GUIDE.md +0 -0
  283. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/OBSERVABILITY_GUIDE.md +0 -0
  284. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/PYPI_PUBLISHING.md +0 -0
  285. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/QA_STREAMING_LATENCY.md +0 -0
  286. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/SCREENSHOTS_GUIDE.md +0 -0
  287. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
  288. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/SSE_NOTIFICATIONS_GUIDE.md +0 -0
  289. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/STREAMING_EVENTS_FRONTEND.md +0 -0
  290. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  291. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/WORKSPACE_INTEGRATION.md +0 -0
  292. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/api-reference.md +0 -0
  293. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/configuration.md +0 -0
  294. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/framework_audit_remarques.md +0 -0
  295. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/helper_agent.md +0 -0
  296. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/index.md +0 -0
  297. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/docs/installation-guide.md +0 -0
  298. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/README.md +0 -0
  299. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/agent_context_budget_test.py +0 -0
  300. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/agent_exemple_test.py +0 -0
  301. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/agent_training_with_apo.py +0 -0
  302. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/agent_with_custom_tools_file_storage.py +0 -0
  303. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/agent_with_file_storage.py +0 -0
  304. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/agent_with_mcp.py +0 -0
  305. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/agent_with_memory_graphiti.py +0 -0
  306. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/agent_with_memory_hybrid.py +0 -0
  307. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/agent_with_memory_simple.py +0 -0
  308. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/agent_with_personalization.py +0 -0
  309. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/biagenttest.py +0 -0
  310. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/custom_framework_agent.py +0 -0
  311. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/dependencies/docker-compose.yaml +0 -0
  312. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/pyproject.toml +0 -0
  313. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/simple_agent.py +0 -0
  314. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/skills_demo_agent.py +0 -0
  315. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/test_work_patterns_live.py +0 -0
  316. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/examples/workspace_test_agent.py +0 -0
  317. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/setup.cfg +0 -0
  318. {agent_framework_lib-0.8.6 → agent_framework_lib-0.8.7}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-framework-lib
3
- Version: 0.8.6
3
+ Version: 0.8.7
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>
@@ -32,7 +32,7 @@ Example Usage:
32
32
  create_basic_agent_server(MyAgent, port=8000)
33
33
  ```
34
34
 
35
- Version: 0.8.6
35
+ Version: 0.8.7
36
36
  Author: Cinco AI Team
37
37
  License: MIT
38
38
  """
@@ -48,22 +48,52 @@ logger = logging.getLogger(__name__)
48
48
 
49
49
  def _auto_setup_dependencies() -> None:
50
50
  """
51
- Automatically check and install required dependencies at import time.
51
+ Check and install required dependencies (Playwright browsers, Deno).
52
52
 
53
- This runs synchronously when the package is first imported, ensuring
54
- Playwright browsers and Deno are available before any async tools try to use them.
53
+ Behaviour is controlled by ``AGENT_FRAMEWORK_AUTO_SETUP`` (default
54
+ ``background``):
55
55
 
56
- Set AGENT_FRAMEWORK_SKIP_AUTO_SETUP=1 to disable this behavior.
56
+ - ``skip`` / ``0`` / ``false`` / ``no``: do nothing. Dependencies are still
57
+ installed lazily on first tool use (Playwright) or first MCP run (Deno).
58
+ - ``background`` (default): run the setup in a daemon thread so importing
59
+ the package and starting the server are never blocked. The lazy paths
60
+ remain the safety net if a tool is used before the thread finishes.
61
+ - ``blocking`` / ``1`` / ``true`` / ``yes``: run synchronously at import
62
+ time (legacy behaviour).
63
+
64
+ ``AGENT_FRAMEWORK_SKIP_AUTO_SETUP`` is still honoured for backward
65
+ compatibility and forces ``skip``.
57
66
  """
67
+ # Backward-compatible hard skip flag.
58
68
  if os.environ.get("AGENT_FRAMEWORK_SKIP_AUTO_SETUP", "").lower() in ("1", "true", "yes"):
59
69
  return
60
70
 
71
+ mode = os.environ.get("AGENT_FRAMEWORK_AUTO_SETUP", "background").lower()
72
+ if mode in ("skip", "0", "false", "no", "off"):
73
+ return
74
+
61
75
  # Only run once per process
62
76
  global _AUTO_SETUP_DONE
63
77
  if "_AUTO_SETUP_DONE" in globals() and _AUTO_SETUP_DONE:
64
78
  return
65
79
  _AUTO_SETUP_DONE = True
66
80
 
81
+ if mode in ("blocking", "1", "true", "yes", "sync"):
82
+ _run_auto_setup()
83
+ return
84
+
85
+ # Default: run in a background daemon thread so import/startup is not blocked.
86
+ import threading
87
+
88
+ threading.Thread(
89
+ target=_run_auto_setup,
90
+ name="agent-framework-auto-setup",
91
+ daemon=True,
92
+ ).start()
93
+
94
+
95
+ def _run_auto_setup() -> None:
96
+ """Perform the actual dependency checks/installs (idempotent, cached)."""
67
97
  try:
68
98
  from .utils.post_install import ensure_deno, ensure_playwright_browsers
69
99
 
@@ -89,7 +119,7 @@ def _auto_setup_dependencies() -> None:
89
119
  # Track if auto-setup has been done
90
120
  _AUTO_SETUP_DONE = False
91
121
 
92
- __version__ = "0.8.6"
122
+ __version__ = "0.8.7"
93
123
  __author__ = "Cinco AI Team"
94
124
  __license__ = "MIT"
95
125
  __email__ = "sebastian@cinco.ai"
@@ -0,0 +1,45 @@
1
+ """Code-delivery skill — launch coding runs via Herdr and deliver PRs.
2
+
3
+ This module provides:
4
+ - Domain models (RunState, CodingSpec, CodingRun)
5
+ - Configuration (CodeDeliveryConfig, load_config)
6
+ - Herdr client (HerdrClient)
7
+ - Git provider (GitProvider, GitHubCLIProvider)
8
+ - ES audit logger (CodeDeliveryAuditLogger)
9
+ - Orchestrator (CodeDeliveryOrchestrator)
10
+ - Tool factory (create_code_delivery_tools)
11
+ """
12
+
13
+ from agent_framework.code_delivery.audit import CodeDeliveryAuditLogger
14
+ from agent_framework.code_delivery.config import CodeDeliveryConfig, load_config
15
+ from agent_framework.code_delivery.git_provider import (
16
+ GitHubCLIProvider,
17
+ GitProvider,
18
+ )
19
+ from agent_framework.code_delivery.herdr_client import HerdrClient
20
+ from agent_framework.code_delivery.models import (
21
+ CodingRun,
22
+ CodingSpec,
23
+ RunState,
24
+ StateTransition,
25
+ VALID_TRANSITIONS,
26
+ )
27
+ from agent_framework.code_delivery.orchestrator import CodeDeliveryOrchestrator
28
+ from agent_framework.code_delivery.tools import create_code_delivery_tools
29
+
30
+
31
+ __all__ = [
32
+ "CodeDeliveryAuditLogger",
33
+ "CodeDeliveryConfig",
34
+ "CodeDeliveryOrchestrator",
35
+ "CodingRun",
36
+ "CodingSpec",
37
+ "GitHubCLIProvider",
38
+ "GitProvider",
39
+ "HerdrClient",
40
+ "RunState",
41
+ "StateTransition",
42
+ "VALID_TRANSITIONS",
43
+ "create_code_delivery_tools",
44
+ "load_config",
45
+ ]
@@ -0,0 +1,371 @@
1
+ """Elasticsearch audit logger for code-delivery runs.
2
+
3
+ Provides end-to-end traceability from human request through Herdr actions,
4
+ coding agent work, git operations, and PR delivery. Every event is indexed
5
+ in a daily-rotated ES index (``code-delivery-runs-{date}``).
6
+
7
+ If Elasticsearch is unavailable the logger falls back to the Python logging
8
+ system at DEBUG level — the main flow is never blocked or disrupted by audit
9
+ failures.
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ import logging
15
+ import traceback
16
+ import uuid
17
+ from datetime import datetime, timezone
18
+ from typing import Any
19
+
20
+ from .models import CodingRun, RunState
21
+
22
+
23
+ logger = logging.getLogger(__name__)
24
+
25
+ _INDEX_PREFIX_DEFAULT = "code-delivery-runs"
26
+
27
+ #: Elasticsearch index mapping for code-delivery audit events.
28
+ _INDEX_MAPPING: dict[str, Any] = {
29
+ "mappings": {
30
+ "properties": {
31
+ # Identity & correlation
32
+ "run_id": {"type": "keyword"},
33
+ "event_id": {"type": "keyword"},
34
+ "event_type": {"type": "keyword"},
35
+ "timestamp": {"type": "date"},
36
+ "phase": {"type": "keyword"},
37
+ # Origin tracing
38
+ "session_id": {"type": "keyword"},
39
+ "user_id": {"type": "keyword"},
40
+ "agent_id": {"type": "keyword"},
41
+ "correlation_id": {"type": "keyword"},
42
+ "trace_id": {"type": "keyword"},
43
+ "span_id": {"type": "keyword"},
44
+ # Run context
45
+ "repo_id": {"type": "keyword"},
46
+ "backend": {"type": "keyword"},
47
+ "branch_name": {"type": "keyword"},
48
+ "base_branch": {"type": "keyword"},
49
+ "pr_url": {"type": "keyword"},
50
+ # Event payload
51
+ "detail": {"type": "text"},
52
+ "spec_snapshot": {"type": "object", "enabled": False},
53
+ "herdr_request": {"type": "object", "enabled": False},
54
+ "herdr_response": {"type": "object", "enabled": False},
55
+ "git_command": {"type": "keyword"},
56
+ "git_stdout": {"type": "text"},
57
+ "git_exit_code": {"type": "integer"},
58
+ "blocked_question": {"type": "text"},
59
+ "answer_provided": {"type": "text"},
60
+ "error_message": {"type": "text"},
61
+ "error_type": {"type": "keyword"},
62
+ "error_traceback": {"type": "text", "index": False},
63
+ # Metrics
64
+ "duration_ms": {"type": "long"},
65
+ "cumulative_ms": {"type": "long"},
66
+ "tokens_used": {"type": "object", "enabled": False},
67
+ }
68
+ },
69
+ "settings": {
70
+ "number_of_shards": 1,
71
+ "number_of_replicas": 1,
72
+ },
73
+ }
74
+
75
+
76
+ def _now_iso() -> str:
77
+ return datetime.now(timezone.utc).isoformat()
78
+
79
+
80
+ def _get_otel_context() -> tuple[str | None, str | None]:
81
+ """Extract trace_id and span_id from the current OTel context, if any."""
82
+ try:
83
+ from opentelemetry import trace as otel_trace
84
+
85
+ span = otel_trace.get_current_span()
86
+ ctx = span.get_span_context()
87
+ if ctx and ctx.trace_id:
88
+ return (
89
+ format(ctx.trace_id, "032x"),
90
+ format(ctx.span_id, "016x"),
91
+ )
92
+ except Exception:
93
+ pass
94
+ return None, None
95
+
96
+
97
+ class CodeDeliveryAuditLogger:
98
+ """Indexes every code-delivery event into Elasticsearch.
99
+
100
+ Safe to use even when ES is disabled or unavailable — all public methods
101
+ swallow exceptions and fall back to Python logging.
102
+ """
103
+
104
+ def __init__(self, index_prefix: str = _INDEX_PREFIX_DEFAULT) -> None:
105
+ self._index_prefix = index_prefix
106
+ self._es_client: Any | None = None
107
+ self._available = False
108
+
109
+ # ------------------------------------------------------------------
110
+ # Lifecycle
111
+ # ------------------------------------------------------------------
112
+
113
+ async def initialize(self) -> bool:
114
+ """Create the index template if needed.
115
+
116
+ Returns True if ES is available, False otherwise.
117
+ """
118
+ try:
119
+ from agent_framework.session.session_storage import (
120
+ get_shared_elasticsearch_client,
121
+ )
122
+
123
+ self._es_client = await get_shared_elasticsearch_client()
124
+ if self._es_client is None:
125
+ logger.info(
126
+ "Elasticsearch not available — code-delivery audit will use Python logging"
127
+ )
128
+ self._available = False
129
+ return False
130
+
131
+ # Create today's index if it doesn't exist (idempotent)
132
+ index_name = self._today_index()
133
+ exists = await self._es_client.indices.exists(index=index_name)
134
+ if not exists:
135
+ await self._es_client.indices.create(
136
+ index=index_name, body=_INDEX_MAPPING
137
+ )
138
+ logger.info("Created code-delivery audit index: %s", index_name)
139
+
140
+ self._available = True
141
+ return True
142
+
143
+ except Exception as exc:
144
+ logger.warning("Failed to initialize code-delivery audit: %s", exc)
145
+ self._available = False
146
+ return False
147
+
148
+ # ------------------------------------------------------------------
149
+ # Core logging
150
+ # ------------------------------------------------------------------
151
+
152
+ async def log_event(
153
+ self,
154
+ run: CodingRun,
155
+ event_type: str,
156
+ **kwargs: Any,
157
+ ) -> None:
158
+ """Log a single audit event.
159
+
160
+ Auto-populates run context fields. Extra kwargs are merged into the
161
+ document (e.g. ``spec_snapshot``, ``herdr_request``, ``duration_ms``).
162
+ """
163
+ trace_id, span_id = _get_otel_context()
164
+
165
+ doc: dict[str, Any] = {
166
+ "run_id": run.run_id,
167
+ "event_id": str(uuid.uuid4()),
168
+ "event_type": event_type,
169
+ "timestamp": _now_iso(),
170
+ "phase": run.state.value,
171
+ # Origin tracing
172
+ "session_id": run.session_id,
173
+ "user_id": run.user_id,
174
+ "agent_id": run.agent_id,
175
+ "correlation_id": run.correlation_id,
176
+ "trace_id": trace_id,
177
+ "span_id": span_id,
178
+ # Run context
179
+ "repo_id": run.repo_id,
180
+ "backend": run.backend,
181
+ "branch_name": run.branch_name,
182
+ "base_branch": run.spec.base_branch if run.spec else None,
183
+ "pr_url": run.pr_url,
184
+ }
185
+ doc.update(kwargs)
186
+
187
+ await self._index(doc, event_type)
188
+
189
+ # ------------------------------------------------------------------
190
+ # Convenience methods
191
+ # ------------------------------------------------------------------
192
+
193
+ async def log_herdr_call(
194
+ self,
195
+ run: CodingRun,
196
+ event_type: str,
197
+ request: dict[str, Any] | None,
198
+ response: dict[str, Any] | None,
199
+ duration_ms: int,
200
+ ) -> None:
201
+ """Log a Herdr API call with request/response payloads."""
202
+ await self.log_event(
203
+ run,
204
+ event_type,
205
+ herdr_request=request,
206
+ herdr_response=response,
207
+ duration_ms=duration_ms,
208
+ )
209
+
210
+ async def log_git_call(
211
+ self,
212
+ run: CodingRun,
213
+ event_type: str,
214
+ command: str,
215
+ stdout: str,
216
+ exit_code: int,
217
+ duration_ms: int,
218
+ ) -> None:
219
+ """Log a git/gh CLI call."""
220
+ await self.log_event(
221
+ run,
222
+ event_type,
223
+ git_command=command,
224
+ git_stdout=stdout,
225
+ git_exit_code=exit_code,
226
+ duration_ms=duration_ms,
227
+ )
228
+
229
+ async def log_transition(
230
+ self,
231
+ run: CodingRun,
232
+ from_state: RunState,
233
+ to_state: RunState,
234
+ detail: str | None = None,
235
+ ) -> None:
236
+ """Log a state transition."""
237
+ await self.log_event(
238
+ run,
239
+ "transition",
240
+ detail=detail or f"{from_state.value} -> {to_state.value}",
241
+ )
242
+
243
+ async def log_error(
244
+ self,
245
+ run: CodingRun,
246
+ event_type: str,
247
+ error: Exception,
248
+ ) -> None:
249
+ """Log an error event with exception details."""
250
+ await self.log_event(
251
+ run,
252
+ event_type,
253
+ error_message=str(error),
254
+ error_type=type(error).__name__,
255
+ error_traceback=traceback.format_exc(),
256
+ )
257
+
258
+ # ------------------------------------------------------------------
259
+ # Query methods
260
+ # ------------------------------------------------------------------
261
+
262
+ async def get_run_timeline(self, run_id: str) -> list[dict[str, Any]]:
263
+ """Return all events for a run, sorted chronologically."""
264
+ return await self._search(
265
+ query={"term": {"run_id": run_id}},
266
+ sort=[{"timestamp": "asc"}],
267
+ size=500,
268
+ )
269
+
270
+ async def get_runs_by_session(self, session_id: str) -> list[dict[str, Any]]:
271
+ """Return events for all runs initiated from a session."""
272
+ return await self._search(
273
+ query={"term": {"session_id": session_id}},
274
+ sort=[{"timestamp": "desc"}],
275
+ size=200,
276
+ )
277
+
278
+ async def get_runs_by_user(
279
+ self, user_id: str, limit: int = 50
280
+ ) -> list[dict[str, Any]]:
281
+ """Return recent events for runs by a user."""
282
+ return await self._search(
283
+ query={"term": {"user_id": user_id}},
284
+ sort=[{"timestamp": "desc"}],
285
+ size=limit,
286
+ )
287
+
288
+ async def search_runs(
289
+ self, query_text: str, limit: int = 20
290
+ ) -> list[dict[str, Any]]:
291
+ """Full-text search across detail, questions, errors, and specs."""
292
+ return await self._search(
293
+ query={
294
+ "multi_match": {
295
+ "query": query_text,
296
+ "fields": [
297
+ "detail",
298
+ "blocked_question",
299
+ "answer_provided",
300
+ "error_message",
301
+ "git_stdout",
302
+ ],
303
+ }
304
+ },
305
+ sort=[{"timestamp": "desc"}],
306
+ size=limit,
307
+ )
308
+
309
+ # ------------------------------------------------------------------
310
+ # Internal helpers
311
+ # ------------------------------------------------------------------
312
+
313
+ def _today_index(self) -> str:
314
+ date_str = datetime.now(timezone.utc).strftime("%Y.%m.%d")
315
+ return f"{self._index_prefix}-{date_str}"
316
+
317
+ async def _index(self, doc: dict[str, Any], event_type: str) -> None:
318
+ """Index a document. Falls back to Python logging on failure."""
319
+ if self._available and self._es_client:
320
+ try:
321
+ await self._es_client.index(
322
+ index=self._today_index(),
323
+ document=doc,
324
+ refresh=False,
325
+ )
326
+ return
327
+ except Exception as exc:
328
+ logger.debug(
329
+ "ES audit index failed (%s), falling back to logging: %s",
330
+ event_type,
331
+ exc,
332
+ )
333
+
334
+ # Fallback: log the event at DEBUG level
335
+ logger.debug(
336
+ "AUDIT [%s] run=%s phase=%s %s",
337
+ event_type,
338
+ doc.get("run_id"),
339
+ doc.get("phase"),
340
+ {k: v for k, v in doc.items() if v is not None and k not in (
341
+ "run_id", "event_id", "event_type", "timestamp", "phase",
342
+ "trace_id", "span_id",
343
+ )},
344
+ )
345
+
346
+ async def _search(
347
+ self,
348
+ query: dict[str, Any],
349
+ sort: list[dict[str, str]],
350
+ size: int = 100,
351
+ ) -> list[dict[str, Any]]:
352
+ """Execute an ES search. Returns empty list on any failure."""
353
+ if not self._available or not self._es_client:
354
+ return []
355
+
356
+ try:
357
+ resp = await self._es_client.search(
358
+ index=f"{self._index_prefix}-*",
359
+ query=query,
360
+ sort=sort,
361
+ size=size,
362
+ )
363
+ return [hit["_source"] for hit in resp["hits"]["hits"]]
364
+ except Exception as exc:
365
+ logger.debug("ES audit search failed: %s", exc)
366
+ return []
367
+
368
+
369
+ __all__ = [
370
+ "CodeDeliveryAuditLogger",
371
+ ]
@@ -0,0 +1,146 @@
1
+ """Configuration for the code-delivery skill.
2
+
3
+ Loads from a YAML file (``.code-delivery.yml``) or falls back to environment
4
+ variables.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import logging
10
+ import os
11
+ from pathlib import Path
12
+ from typing import Any, Literal
13
+
14
+ import yaml
15
+ from pydantic import BaseModel, Field
16
+
17
+
18
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ class HerdrConfig(BaseModel):
22
+ """Connection settings for the Herdr substrate."""
23
+
24
+ base_url: str = Field("http://127.0.0.1:9876", description="Herdr API base URL")
25
+ timeout: float = Field(120.0, description="Default request timeout in seconds")
26
+
27
+
28
+ class GitHubConfig(BaseModel):
29
+ """GitHub provider settings."""
30
+
31
+ default_base_branch: str = Field("main", description="Default base branch for PRs")
32
+ branch_prefix: str = Field("agent/", description="Prefix for run branches")
33
+ protected_branches: list[str] = Field(
34
+ default_factory=lambda: ["main", "master", "develop", "release/*"],
35
+ description="Branch patterns that must never be pushed to",
36
+ )
37
+
38
+
39
+ class BackendConfig(BaseModel):
40
+ """Coding backend settings."""
41
+
42
+ provider: Literal["claude", "codex", "opencode"] = Field(
43
+ "claude", description="Which coding backend to use"
44
+ )
45
+ model: str = Field(
46
+ "claude-sonnet-4-20250514", description="Model to use in the backend"
47
+ )
48
+
49
+
50
+ class CodeDeliveryConfig(BaseModel):
51
+ """Top-level code-delivery configuration."""
52
+
53
+ herdr: HerdrConfig = Field(default_factory=HerdrConfig)
54
+ github: GitHubConfig = Field(default_factory=GitHubConfig)
55
+ backend: BackendConfig = Field(default_factory=BackendConfig)
56
+ max_concurrent_runs: int = Field(2, description="Max parallel runs")
57
+ verify_command: str = Field("", description="Gate command (empty = no gate)")
58
+ retry_on_verify_fail: int = Field(0, description="Retries on verify failure")
59
+
60
+
61
+ def _config_from_env() -> dict[str, Any]:
62
+ """Build a config dict from environment variables."""
63
+ cfg: dict[str, Any] = {}
64
+
65
+ # Herdr
66
+ herdr: dict[str, Any] = {}
67
+ if v := os.environ.get("HERDR_BASE_URL"):
68
+ herdr["base_url"] = v
69
+ if v := os.environ.get("HERDR_TIMEOUT"):
70
+ herdr["timeout"] = float(v)
71
+ if herdr:
72
+ cfg["herdr"] = herdr
73
+
74
+ # GitHub
75
+ github: dict[str, Any] = {}
76
+ if v := os.environ.get("CODE_DELIVERY_BASE_BRANCH"):
77
+ github["default_base_branch"] = v
78
+ if v := os.environ.get("CODE_DELIVERY_BRANCH_PREFIX"):
79
+ github["branch_prefix"] = v
80
+ if v := os.environ.get("CODE_DELIVERY_PROTECTED_BRANCHES"):
81
+ github["protected_branches"] = [b.strip() for b in v.split(",")]
82
+ if github:
83
+ cfg["github"] = github
84
+
85
+ # Backend
86
+ backend: dict[str, Any] = {}
87
+ if v := os.environ.get("CODE_DELIVERY_BACKEND"):
88
+ backend["provider"] = v
89
+ if v := os.environ.get("CODE_DELIVERY_MODEL"):
90
+ backend["model"] = v
91
+ if backend:
92
+ cfg["backend"] = backend
93
+
94
+ # Top-level
95
+ if v := os.environ.get("CODE_DELIVERY_MAX_CONCURRENT"):
96
+ cfg["max_concurrent_runs"] = int(v)
97
+ if v := os.environ.get("CODE_DELIVERY_VERIFY_COMMAND"):
98
+ cfg["verify_command"] = v
99
+ if v := os.environ.get("CODE_DELIVERY_RETRY_ON_VERIFY_FAIL"):
100
+ cfg["retry_on_verify_fail"] = int(v)
101
+
102
+ return cfg
103
+
104
+
105
+ def load_config(path: Path | None = None) -> CodeDeliveryConfig:
106
+ """Load code-delivery configuration.
107
+
108
+ Resolution order:
109
+ 1. Explicit *path* (YAML file).
110
+ 2. ``.code-delivery.yml`` in the current working directory.
111
+ 3. Environment variables.
112
+
113
+ YAML keys and env vars are merged (env wins on conflict).
114
+ """
115
+ yaml_data: dict[str, Any] = {}
116
+
117
+ candidates = [path] if path else [Path.cwd() / ".code-delivery.yml"]
118
+ for candidate in candidates:
119
+ if candidate and candidate.is_file():
120
+ try:
121
+ yaml_data = yaml.safe_load(candidate.read_text(encoding="utf-8")) or {}
122
+ logger.info("Loaded code-delivery config from %s", candidate)
123
+ except Exception as exc:
124
+ logger.warning("Failed to parse %s: %s", candidate, exc)
125
+ break
126
+
127
+ env_data = _config_from_env()
128
+
129
+ # Shallow merge: env overrides YAML at section level
130
+ merged: dict[str, Any] = {**yaml_data}
131
+ for key, value in env_data.items():
132
+ if isinstance(value, dict) and key in merged and isinstance(merged[key], dict):
133
+ merged[key] = {**merged[key], **value}
134
+ else:
135
+ merged[key] = value
136
+
137
+ return CodeDeliveryConfig(**merged)
138
+
139
+
140
+ __all__ = [
141
+ "BackendConfig",
142
+ "CodeDeliveryConfig",
143
+ "GitHubConfig",
144
+ "HerdrConfig",
145
+ "load_config",
146
+ ]