agent-framework-lib 0.8.7.post6__tar.gz → 0.8.7.post7__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 (324) hide show
  1. {agent_framework_lib-0.8.7.post6/agent_framework_lib.egg-info → agent_framework_lib-0.8.7.post7}/PKG-INFO +1 -1
  2. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/image_gen/SKILL.md +60 -27
  3. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/image_gen/create_image.py +92 -19
  4. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +3 -3
  5. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +151 -13
  6. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7/agent_framework_lib.egg-info}/PKG-INFO +1 -1
  7. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/pyproject.toml +1 -1
  8. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/ARCHITECTURE.md +0 -0
  9. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/LICENSE +0 -0
  10. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/MANIFEST.in +0 -0
  11. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/README.md +0 -0
  12. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/__init__.py +0 -0
  13. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/__init__.py +0 -0
  14. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/base.py +0 -0
  15. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/__init__.py +0 -0
  16. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
  17. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
  18. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
  19. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
  20. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
  21. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
  22. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
  23. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/models.py +0 -0
  24. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/providers/__init__.py +0 -0
  25. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
  26. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/a2a/providers/postgres_provider.py +0 -0
  27. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/capabilities/__init__.py +0 -0
  28. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/capabilities/resolver.py +0 -0
  29. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/__init__.py +0 -0
  30. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/audit.py +0 -0
  31. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/config.py +0 -0
  32. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/crypto.py +0 -0
  33. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/git_provider.py +0 -0
  34. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/herdr_client.py +0 -0
  35. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/models.py +0 -0
  36. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/orchestrator.py +0 -0
  37. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/store.py +0 -0
  38. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/code_delivery/tools.py +0 -0
  39. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/__init__.py +0 -0
  40. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/activity_formatter.py +0 -0
  41. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/agent_interface.py +0 -0
  42. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/agent_provider.py +0 -0
  43. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/base_agent.py +0 -0
  44. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/context_budget.py +0 -0
  45. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/context_summarizer.py +0 -0
  46. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/elasticsearch_config_provider.py +0 -0
  47. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/execution_controller.py +0 -0
  48. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/implementation_validator.py +0 -0
  49. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/interruption_message.py +0 -0
  50. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/knowledge_state.py +0 -0
  51. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/loop_detector.py +0 -0
  52. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/model_clients.py +0 -0
  53. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/model_config.py +0 -0
  54. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/model_router.py +0 -0
  55. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/models.py +0 -0
  56. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/prompt_builder.py +0 -0
  57. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/provider_calibration.py +0 -0
  58. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/scratchpad_compressor.py +0 -0
  59. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/scratchpad_serializer.py +0 -0
  60. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/state_manager.py +0 -0
  61. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/step_display_config.py +0 -0
  62. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/core/streaming_parts_accumulator.py +0 -0
  63. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/implementations/__init__.py +0 -0
  64. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/implementations/budget_aware_agent.py +0 -0
  65. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/implementations/llamaindex_agent.py +0 -0
  66. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
  67. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/implementations/microsoft_agent.py +0 -0
  68. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/__init__.py +0 -0
  69. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/agent_mixin.py +0 -0
  70. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/base.py +0 -0
  71. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/config.py +0 -0
  72. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/hypothesis_engine.py +0 -0
  73. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/implicit_feedback.py +0 -0
  74. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/manager.py +0 -0
  75. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/personalization.py +0 -0
  76. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/providers/__init__.py +0 -0
  77. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/providers/graphiti_provider.py +0 -0
  78. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/providers/memori_provider.py +0 -0
  79. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/response_lessons.py +0 -0
  80. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/tools.py +0 -0
  81. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/memory/work_patterns.py +0 -0
  82. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/__init__.py +0 -0
  83. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/api_timing_tracker.py +0 -0
  84. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
  85. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
  86. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/error_handling.py +0 -0
  87. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/error_logging.py +0 -0
  88. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
  89. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/llm_metrics.py +0 -0
  90. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/llm_metrics_collector.py +0 -0
  91. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
  92. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/metrics_aggregator.py +0 -0
  93. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/metrics_config.py +0 -0
  94. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/observability_manager.py +0 -0
  95. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/otel_instrumentor.py +0 -0
  96. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/otel_logging_handler.py +0 -0
  97. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
  98. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/otel_setup.py +0 -0
  99. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/performance_monitor.py +0 -0
  100. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/progress_tracker.py +0 -0
  101. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/resource_manager.py +0 -0
  102. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
  103. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
  104. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/timing_tracker.py +0 -0
  105. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/token_counter.py +0 -0
  106. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/monitoring/tracing_context.py +0 -0
  107. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/notifications/__init__.py +0 -0
  108. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/notifications/hub.py +0 -0
  109. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/notifications/webhook_notifier.py +0 -0
  110. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/processing/__init__.py +0 -0
  111. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/processing/ai_content_management.py +0 -0
  112. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/processing/markdown_converter.py +0 -0
  113. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/processing/multimodal_integration.py +0 -0
  114. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/processing/rich_content_validation.py +0 -0
  115. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/py.typed +0 -0
  116. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/security/__init__.py +0 -0
  117. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/security/secret_redactor.py +0 -0
  118. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/security/shell_env.py +0 -0
  119. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/session/__init__.py +0 -0
  120. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/session/elasticsearch_session_storage.py +0 -0
  121. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/session/session_storage.py +0 -0
  122. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/__init__.py +0 -0
  123. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/agent_mixin.py +0 -0
  124. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/base.py +0 -0
  125. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/__init__.py +0 -0
  126. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/scripts/__init__.py +0 -0
  127. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/scripts/create_and_register.py +0 -0
  128. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/scripts/register_to_storage.py +0 -0
  129. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/chart/SKILL.md +0 -0
  130. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/chart/chart_to_image.py +0 -0
  131. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/chart/vendor_chart.umd.min.js +0 -0
  132. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/code_delivery/SKILL.md +0 -0
  133. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/code_format/SKILL.md +0 -0
  134. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/code_format/format_python.py +0 -0
  135. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/csv/SKILL.md +0 -0
  136. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/csv/create_csv.py +0 -0
  137. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/csv/read_csv.py +0 -0
  138. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/csv/transform_csv.py +0 -0
  139. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/data_format/SKILL.md +0 -0
  140. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/data_format/json_to_yaml.py +0 -0
  141. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/data_format/yaml_to_json.py +0 -0
  142. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/drawio/SKILL.md +0 -0
  143. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/drawio/create_drawio.py +0 -0
  144. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/email_template/SKILL.md +0 -0
  145. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/excel/SKILL.md +0 -0
  146. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/excel/create_excel.py +0 -0
  147. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file/SKILL.md +0 -0
  148. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file/create_file.py +0 -0
  149. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file/list_files.py +0 -0
  150. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file/read_file.py +0 -0
  151. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file_access/SKILL.md +0 -0
  152. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file_access/download_to_local.py +0 -0
  153. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/file_access/get_file_path.py +0 -0
  154. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/form/SKILL.md +0 -0
  155. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/image_display/SKILL.md +0 -0
  156. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/image_gen/generate_image.py +0 -0
  157. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/mermaid/SKILL.md +0 -0
  158. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +0 -0
  159. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/multimodal/SKILL.md +0 -0
  160. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +0 -0
  161. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/SKILL.md +0 -0
  162. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/create_powerpoint.py +0 -0
  163. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/templates/Big Data Infographics.pptx +0 -0
  164. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/templates/Executive Design Pitch Deck.pptx +0 -0
  165. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/templates/Management Consulting Toolkit.pptx +0 -0
  166. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/templates/__init__.py +0 -0
  167. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/powerpoint/templates/generate_templates.py +0 -0
  168. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/skill_creator/SKILL.md +0 -0
  169. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/skill_creator/skill_api.py +0 -0
  170. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/table/SKILL.md +0 -0
  171. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/table/table_to_image.py +0 -0
  172. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/web_news_search/SKILL.md +0 -0
  173. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/web_news_search/web_news_search.py +0 -0
  174. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/word/SKILL.md +0 -0
  175. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/builtin/skills/word/create_word.py +0 -0
  176. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/custom_skill_manager.py +0 -0
  177. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/discovery_prompt.py +0 -0
  178. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/markdown_loader.py +0 -0
  179. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/skills/tools.py +0 -0
  180. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/storage/__init__.py +0 -0
  181. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/storage/file_storages.py +0 -0
  182. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/storage/file_system_management.py +0 -0
  183. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/storage/storage_optimizer.py +0 -0
  184. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/subagents/__init__.py +0 -0
  185. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/subagents/executor.py +0 -0
  186. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/subagents/message_injector.py +0 -0
  187. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/subagents/message_queue.py +0 -0
  188. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/subagents/retrigger.py +0 -0
  189. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/subagents/spawn_tool.py +0 -0
  190. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/__init__.py +0 -0
  191. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/activity_callback.py +0 -0
  192. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/adaptive_pdf_css.py +0 -0
  193. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/base.py +0 -0
  194. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/html_content_analyzer.py +0 -0
  195. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/multimodal_tools.py +0 -0
  196. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/pdf_image_scaler.py +0 -0
  197. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/shell_tool.py +0 -0
  198. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/sizing_config.py +0 -0
  199. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/web_fetch_tool.py +0 -0
  200. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/tools/web_search_tool.py +0 -0
  201. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/utils/__init__.py +0 -0
  202. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/utils/path_utils.py +0 -0
  203. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/utils/post_install.py +0 -0
  204. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/utils/session_title_generator.py +0 -0
  205. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/utils/source_detector.py +0 -0
  206. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/utils/special_blocks.py +0 -0
  207. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/__init__.py +0 -0
  208. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/admin_auth.py +0 -0
  209. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/admin_models.py +0 -0
  210. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/admin_router.py +0 -0
  211. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/admin_services.py +0 -0
  212. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/api_timing_middleware.py +0 -0
  213. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
  214. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  215. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/CREATING_AGENTS.md +0 -0
  216. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
  217. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
  218. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/Dockerfile +0 -0
  219. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/GETTING_STARTED.md +0 -0
  220. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/GITNEXUS_USER_GUIDE.md +0 -0
  221. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
  222. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/README.md +0 -0
  223. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  224. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/WORKSPACE_INTEGRATION.md +0 -0
  225. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/api-reference.md +0 -0
  226. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/configuration.md +0 -0
  227. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/docker-compose.yml +0 -0
  228. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_example_multi_skills.py +0 -0
  229. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_with_file_storage.py +0 -0
  230. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_with_mcp.py +0 -0
  231. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_with_memory.py +0 -0
  232. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_with_memory_graphiti.py +0 -0
  233. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_with_memory_hybrid.py +0 -0
  234. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/agent_with_memory_simple.py +0 -0
  235. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/custom_framework_agent.py +0 -0
  236. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/simple_agent.py +0 -0
  237. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/examples/skills_demo_agent.py +0 -0
  238. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/docs/installation-guide.md +0 -0
  239. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/documentation_generator.py +0 -0
  240. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/gitnexus_client.py +0 -0
  241. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/helper_agent.py +0 -0
  242. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/helper_ui.html +0 -0
  243. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/modern_ui.html +0 -0
  244. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/observability/kibana-llm-dashboard-setup.json +0 -0
  245. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/observability/kibana-resource-metrics-dashboard.json +0 -0
  246. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/otel_tracing_middleware.py +0 -0
  247. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/server.py +0 -0
  248. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/skills_router.py +0 -0
  249. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/web/test_app.html +0 -0
  250. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/__init__.py +0 -0
  251. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/artefacts.py +0 -0
  252. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/client.py +0 -0
  253. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/config.py +0 -0
  254. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/context.py +0 -0
  255. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/cursor.py +0 -0
  256. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/memory.py +0 -0
  257. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/models.py +0 -0
  258. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/poller.py +0 -0
  259. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/preferences.py +0 -0
  260. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/router.py +0 -0
  261. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/session.py +0 -0
  262. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework/workspace/subscription.py +0 -0
  263. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework_lib.egg-info/SOURCES.txt +0 -0
  264. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
  265. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework_lib.egg-info/entry_points.txt +0 -0
  266. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework_lib.egg-info/requires.txt +0 -0
  267. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/agent_framework_lib.egg-info/top_level.txt +0 -0
  268. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/A2A_GUIDE.md +0 -0
  269. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
  270. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/ARCHITECTURE_DIAGRAM.md +0 -0
  271. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  272. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/CANCEL_AND_INTERRUPT_FRONTEND.md +0 -0
  273. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
  274. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/CREATING_AGENTS.md +0 -0
  275. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
  276. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/DEEPEVAL_TEST_REPORT.md +0 -0
  277. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/DOCKER_SETUP.md +0 -0
  278. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +0 -0
  279. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
  280. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/FILE_STORAGE_GUIDE.md +0 -0
  281. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/GETTING_STARTED.md +0 -0
  282. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/GITNEXUS_USER_GUIDE.md +0 -0
  283. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/HISTORY_MESSAGE_FORMAT.md +0 -0
  284. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
  285. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/MEMORY_INSTALLATION.md +0 -0
  286. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
  287. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/MULTIMODAL_TOOLS_GUIDE.md +0 -0
  288. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/OBSERVABILITY_GUIDE.md +0 -0
  289. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/PYPI_PUBLISHING.md +0 -0
  290. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/QA_STREAMING_LATENCY.md +0 -0
  291. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/SCREENSHOTS_GUIDE.md +0 -0
  292. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
  293. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/SSE_NOTIFICATIONS_GUIDE.md +0 -0
  294. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/STREAMING_EVENTS_FRONTEND.md +0 -0
  295. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  296. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/WORKSPACE_INTEGRATION.md +0 -0
  297. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/api-reference.md +0 -0
  298. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/configuration.md +0 -0
  299. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/framework_audit_remarques.md +0 -0
  300. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/helper_agent.md +0 -0
  301. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/index.md +0 -0
  302. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/docs/installation-guide.md +0 -0
  303. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/README.md +0 -0
  304. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_context_budget_test.py +0 -0
  305. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_example_multi_skills.py +0 -0
  306. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_exemple_test.py +0 -0
  307. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_training_with_apo.py +0 -0
  308. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_custom_tools_file_storage.py +0 -0
  309. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_file_storage.py +0 -0
  310. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_mcp.py +0 -0
  311. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_memory_graphiti.py +0 -0
  312. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_memory_hybrid.py +0 -0
  313. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_memory_simple.py +0 -0
  314. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/agent_with_personalization.py +0 -0
  315. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/biagenttest.py +0 -0
  316. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/custom_framework_agent.py +0 -0
  317. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/dependencies/docker-compose.yaml +0 -0
  318. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/pyproject.toml +0 -0
  319. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/simple_agent.py +0 -0
  320. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/skills_demo_agent.py +0 -0
  321. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/test_work_patterns_live.py +0 -0
  322. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/examples/workspace_test_agent.py +0 -0
  323. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/setup.cfg +0 -0
  324. {agent_framework_lib-0.8.7.post6 → agent_framework_lib-0.8.7.post7}/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.post6
3
+ Version: 0.8.7.post7
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>
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: image_gen
3
- description: "Generate images using AI image generation APIs (DALL-E 3, DALL-E 2). Create custom illustrations, diagrams, and visual content from text descriptions."
3
+ description: "Generate images using AI image generation APIs (gpt-image-1, DALL-E 3, DALL-E 2). Create custom illustrations, diagrams, and visual content from text descriptions."
4
4
  display_name: "Génération d'images par IA"
5
5
  metadata:
6
6
  config:
@@ -13,6 +13,7 @@ metadata:
13
13
  - ai image
14
14
  - dall-e
15
15
  - dalle
16
+ - gpt-image
16
17
  - image generation
17
18
  - create picture
18
19
  - generate illustration
@@ -27,9 +28,11 @@ metadata:
27
28
 
28
29
  ## AI Image Generation
29
30
 
30
- Generate images using OpenAI's DALL-E models by running the `generate_image.py` script via `shell_exec`.
31
+ Generate images using OpenAI's image models by running the `create_image.py` script via `shell_exec`.
31
32
 
32
- The script supports DALL-E 3 (latest, highest quality) and DALL-E 2 (faster, more affordable) with customizable parameters for size, quality, and style.
33
+ The default model is **gpt-image-1** (OpenAI's current image model: best quality, reliable text rendering, transparent backgrounds). **DALL-E 3** and **DALL-E 2** remain available as alternatives.
34
+
35
+ > **gpt-image-1 requires a verified OpenAI organization.** If the org is not verified the API returns a 403; in that case set `IMAGE_GEN_DEFAULT_MODEL=dall-e-3` (env var) or pass `"model": "dall-e-3"` in the request to fall back.
33
36
 
34
37
  ---
35
38
 
@@ -38,9 +41,11 @@ The script supports DALL-E 3 (latest, highest quality) and DALL-E 2 (faster, mor
38
41
  Pipe a JSON generation request to stdin and specify the target filename:
39
42
 
40
43
  ```bash
41
- echo '{"prompt": "A futuristic cityscape at sunset", "model": "dall-e-3", "size": "1024x1024"}' | uv run python -m agent_framework.skills.builtin.scripts.create_and_register --skill image_gen --filename "cityscape.png" --output-dir "/path/to/output"
44
+ echo '{"prompt": "A futuristic cityscape at sunset", "size": "1536x1024", "quality": "high"}' | uv run python -m agent_framework.skills.builtin.scripts.create_and_register --skill image_gen --filename "cityscape.png" --output-dir "/path/to/output"
42
45
  ```
43
46
 
47
+ The default model (`gpt-image-1`) is used when `model` is omitted.
48
+
44
49
  ---
45
50
 
46
51
  ## Arguments
@@ -58,20 +63,35 @@ Provide a JSON object on stdin with the following structure:
58
63
 
59
64
  | Field | Type | Required | Description |
60
65
  |-------|------|----------|-------------|
61
- | `prompt` | string | Yes | Text description of the image to generate (max 4000 characters for DALL-E 3, 1000 for DALL-E 2) |
62
- | `model` | string | No | AI model: `"dall-e-3"` (default), `"dall-e-2"` |
66
+ | `prompt` | string | Yes | Text description of the image to generate (max 32000 chars for gpt-image-1, 4000 for DALL-E 3, 1000 for DALL-E 2) |
67
+ | `model` | string | No | AI model: `"gpt-image-1"` (default), `"dall-e-3"`, `"dall-e-2"` |
63
68
  | `size` | string | No | Image size (see Size Options below) |
64
- | `quality` | string | No | Image quality: `"standard"` (default), `"hd"` (DALL-E 3 only) |
69
+ | `quality` | string | No | gpt-image-1: `low`/`medium`/`high`(default)/`auto` DALL-E 3: `standard`(default)/`hd` |
65
70
  | `style` | string | No | Image style: `"vivid"` (default), `"natural"` (DALL-E 3 only) |
66
- | `n` | integer | No | Number of images to generate (1-10 for DALL-E 2, always 1 for DALL-E 3) |
71
+ | `n` | integer | No | Number of images to generate (1-10 for gpt-image-1 and DALL-E 2, always 1 for DALL-E 3) |
67
72
 
68
73
  ---
69
74
 
70
75
  ## Model Comparison
71
76
 
72
- ### DALL-E 3 (Recommended)
77
+ ### gpt-image-1 (Default, Recommended)
73
78
 
74
- **Best for**: High-quality, detailed images with better prompt following
79
+ **Best for**: Highest-quality images, accurate text rendering, transparent backgrounds.
80
+
81
+ | Feature | Value |
82
+ |---------|-------|
83
+ | Quality | Best available (`low`/`medium`/`high`/`auto`) |
84
+ | Prompt adherence | Excellent — handles long, complex prompts (up to 32000 chars) |
85
+ | Available sizes | `1024x1024`, `1536x1024` (landscape), `1024x1536` (portrait), `auto` |
86
+ | Output | Always returned as base64 (handled transparently by the script) |
87
+ | Requirement | **Verified OpenAI organization** (else 403 — fall back to dall-e-3) |
88
+ | Cost / speed | Higher cost, slower than DALL-E 2 |
89
+
90
+ **Use gpt-image-1 when**: you want the best quality, images with legible text, or transparent backgrounds. This is the default.
91
+
92
+ ### DALL-E 3
93
+
94
+ **Best for**: High-quality, detailed images with better prompt following (alternative to gpt-image-1).
75
95
 
76
96
  | Feature | Value |
77
97
  |---------|-------|
@@ -83,10 +103,9 @@ Provide a JSON object on stdin with the following structure:
83
103
  | Speed | Slower (~10-30 seconds) |
84
104
 
85
105
  **Use DALL-E 3 when**:
86
- - You need high-quality, detailed images
106
+ - gpt-image-1 is unavailable (org not verified)
107
+ - You need the `vivid`/`natural` style control
87
108
  - Prompt contains complex or specific requirements
88
- - Image will be used professionally (presentations, marketing)
89
- - You want HDproperty quality output
90
109
 
91
110
  ### DALL-E 2
92
111
 
@@ -111,6 +130,12 @@ Provide a JSON object on stdin with the following structure:
111
130
 
112
131
  ## Size Options
113
132
 
133
+ ### gpt-image-1 Sizes
134
+ - `1024x1024` — Square (default) — General purpose
135
+ - `1536x1024` — Landscape — Presentations, web banners
136
+ - `1024x1536` — Portrait — Mobile screens, posters
137
+ - `auto` — Let the model pick the best size for the prompt
138
+
114
139
  ### DALL-E 3 Sizes
115
140
  - `1024x1024` — Square (default) — General purpose
116
141
  - `1024x1792` — Portrait (9:16 aspect ratio) — Mobile screens, posters
@@ -123,19 +148,26 @@ Provide a JSON object on stdin with the following structure:
123
148
 
124
149
  ---
125
150
 
126
- ## Quality & Style (DALL-E 3 Only)
151
+ ## Quality & Style
152
+
153
+ ### Quality (gpt-image-1)
127
154
 
128
- ### Quality
155
+ - `"low"` — Fastest, lowest cost
156
+ - `"medium"` — Balanced
157
+ - `"high"` (default) — Best detail
158
+ - `"auto"` — Let the model decide
159
+
160
+ ### Quality (DALL-E 3)
129
161
 
130
162
  - `"standard"` (default) — Good quality, faster, lower cost
131
163
  - `"hd"` — Highest quality, more detail, slower, higher cost
132
164
 
133
- **Use HD quality for**:
165
+ **Use higher quality for**:
134
166
  - Professional presentations and marketing materials
135
167
  - Large format prints or displays
136
168
  - Images requiring fine details (textures, faces, text)
137
169
 
138
- ### Style
170
+ ### Style (DALL-E 3 only)
139
171
 
140
172
  - `"vivid"` (default) — Vibrant, hyper-real, dramatic — Good for eye-catching visuals
141
173
  - `"natural"` — More subdued, realistic, natural tones — Good for professional/corporate content
@@ -144,18 +176,18 @@ Provide a JSON object on stdin with the following structure:
144
176
 
145
177
  ## Complete Example
146
178
 
147
- Generate a high-quality landscape illustration for a presentation:
179
+ Generate a high-quality landscape illustration for a presentation (default model gpt-image-1):
148
180
 
149
181
  ```bash
150
182
  echo '{
151
183
  "prompt": "A serene mountain landscape with a crystal-clear lake reflecting snow-capped peaks, surrounded by pine forests, during golden hour. Photorealistic style with soft lighting and vibrant colors.",
152
- "model": "dall-e-3",
153
- "size": "1792x1024",
154
- "quality": "hd",
155
- "style": "natural"
184
+ "size": "1536x1024",
185
+ "quality": "high"
156
186
  }' | uv run python -m agent_framework.skills.builtin.scripts.create_and_register --skill image_gen --filename "mountain_landscape.png"
157
187
  ```
158
188
 
189
+ To use DALL-E 3 instead, set `"model": "dall-e-3"` (with `quality` `standard`/`hd` and an optional `style`).
190
+
159
191
  ---
160
192
 
161
193
  ## Output Format (stdout)
@@ -172,15 +204,15 @@ On success, the script prints a JSON object with download information:
172
204
  "mime_type": "image/png",
173
205
  "local_cleaned": true,
174
206
  "metadata": {
175
- "model": "dall-e-3",
176
- "size": "1792x1024",
177
- "quality": "hd",
207
+ "model": "gpt-image-1",
208
+ "size": "1536x1024",
209
+ "quality": "high",
178
210
  "revised_prompt": "A tranquil mountain vista featuring..."
179
211
  }
180
212
  }
181
213
  ```
182
214
 
183
- **Note**: The `revised_prompt` field (DALL-E 3 only) shows how OpenAI interpreted and enhanced your original prompt.
215
+ **Note**: The `revised_prompt` field (when provided by the model) shows how OpenAI interpreted and enhanced your original prompt.
184
216
 
185
217
  Use the `download_url` to provide a download link:
186
218
  ```
@@ -209,6 +241,7 @@ On failure, the script prints a JSON error to stderr and exits with non-zero cod
209
241
  | 1 | Invalid size | `"Invalid size '2048x2048' for dall-e-3. Must be one of: 1024x1024, 1024x1792, 1792x1024"` |
210
242
  | 1 | Missing API key | `"OPENAI_API_KEY environment variable is not set"` |
211
243
  | 1 | API error | `"OpenAI API error: Rate limit exceeded"` |
244
+ | 1 | Org not verified (gpt-image-1) | `"model 'gpt-image-1' requires a verified OpenAI organization. Set IMAGE_GEN_DEFAULT_MODEL=dall-e-3 ..."` |
212
245
  | 1 | Content policy violation | `"Image generation failed: Content policy violation"` |
213
246
 
214
247
  ---
@@ -371,7 +404,7 @@ If your prompt violates the content policy, the API will return an error.
371
404
  When helping users generate images:
372
405
 
373
406
  1. **Clarify requirements**: Ask about purpose, style, dimensions, quality needs
374
- 2. **Suggest model**: DALL-E 3 for quality, DALL-E 2 for speed/cost
407
+ 2. **Suggest model**: gpt-image-1 (default) for best quality and text rendering; DALL-E 3 if you need vivid/natural style control or the org isn't verified; DALL-E 2 for cheap, fast iterations
375
408
  3. **Recommend size**: Based on use case (presentation → landscape, social media → square, poster → portrait)
376
409
  4. **Craft detailed prompts**: Include style, mood, lighting, composition
377
410
  5. **Set expectations**: Mention generation time (~10-30s for DALL-E 3)
@@ -8,6 +8,7 @@ downloads it, and saves it to the specified output directory.
8
8
  This script is designed to be called by create_and_register.py wrapper.
9
9
  """
10
10
  import argparse
11
+ import base64
11
12
  import json
12
13
  import os
13
14
  import sys
@@ -28,8 +29,21 @@ except ImportError:
28
29
  sys.exit(1)
29
30
 
30
31
 
32
+ # Default model. gpt-image-1 is OpenAI's current image model (best quality,
33
+ # reliable text rendering, transparency). Requires a verified OpenAI org.
34
+ # Override via IMAGE_GEN_DEFAULT_MODEL (e.g. set to "dall-e-3" if the org is
35
+ # not verified).
36
+ DEFAULT_MODEL = os.getenv("IMAGE_GEN_DEFAULT_MODEL", "gpt-image-1")
37
+
31
38
  # Model configurations
32
39
  MODEL_CONFIGS = {
40
+ "gpt-image-1": {
41
+ "sizes": ["1024x1024", "1536x1024", "1024x1536", "auto"],
42
+ "qualities": ["low", "medium", "high", "auto"],
43
+ "max_prompt_length": 32000,
44
+ "n_images_max": 10,
45
+ # Always returns base64 (no response_format param accepted).
46
+ },
33
47
  "dall-e-3": {
34
48
  "sizes": ["1024x1024", "1024x1792", "1792x1024"],
35
49
  "qualities": ["standard", "hd"],
@@ -52,7 +66,7 @@ def validate_request(data: dict[str, Any]) -> tuple[bool, str]:
52
66
  return False, "prompt field is required"
53
67
 
54
68
  prompt = data["prompt"]
55
- model = data.get("model", "dall-e-3")
69
+ model = data.get("model", DEFAULT_MODEL)
56
70
 
57
71
  # Validate model
58
72
  if model not in MODEL_CONFIGS:
@@ -76,13 +90,14 @@ def validate_request(data: dict[str, Any]) -> tuple[bool, str]:
76
90
  f"Invalid size '{size}' for {model}. Must be one of: {', '.join(config['sizes'])}",
77
91
  )
78
92
 
79
- # Validate quality (DALL-E 3 only)
80
- if model == "dall-e-3" and "quality" in data:
93
+ # Validate quality (gpt-image-1 and dall-e-3 have their own scales)
94
+ if "quality" in data and "qualities" in config:
81
95
  quality = data["quality"]
82
96
  if quality not in config["qualities"]:
83
97
  return (
84
98
  False,
85
- f"Invalid quality '{quality}'. Must be one of: {', '.join(config['qualities'])}",
99
+ f"Invalid quality '{quality}' for {model}. "
100
+ f"Must be one of: {', '.join(config['qualities'])}",
86
101
  )
87
102
 
88
103
  # Validate style (DALL-E 3 only)
@@ -91,14 +106,14 @@ def validate_request(data: dict[str, Any]) -> tuple[bool, str]:
91
106
  if style not in config["styles"]:
92
107
  return False, f"Invalid style '{style}'. Must be one of: {', '.join(config['styles'])}"
93
108
 
94
- # Validate n (DALL-E 2 only)
109
+ # Validate n
95
110
  if "n" in data:
96
111
  n = data["n"]
97
112
  if model == "dall-e-3" and n != 1:
98
113
  return False, "DALL-E 3 can only generate 1 image at a time (n=1)"
99
- if model == "dall-e-2":
100
- if not isinstance(n, int) or n < 1 or n > config["n_images_max"]:
101
- return False, f"n must be between 1 and {config['n_images_max']} for DALL-E 2"
114
+ max_n = config.get("n_images_max")
115
+ if max_n is not None and (not isinstance(n, int) or n < 1 or n > max_n):
116
+ return False, f"n must be between 1 and {max_n} for {model}"
102
117
 
103
118
  return True, ""
104
119
 
@@ -115,14 +130,19 @@ def generate_image(data: dict[str, Any]) -> dict[str, Any]:
115
130
 
116
131
  # Extract parameters
117
132
  prompt = data["prompt"]
118
- model = data.get("model", "dall-e-3")
133
+ model = data.get("model", DEFAULT_MODEL)
119
134
  size = data.get("size")
120
135
  quality = data.get("quality")
121
136
  style = data.get("style")
122
137
  n = data.get("n", 1)
123
138
 
124
139
  # Set defaults based on model
125
- if model == "dall-e-3":
140
+ if model == "gpt-image-1":
141
+ if not size:
142
+ size = "1024x1024"
143
+ if not quality:
144
+ quality = "high"
145
+ elif model == "dall-e-3":
126
146
  if not size:
127
147
  size = "1024x1024"
128
148
  if not quality:
@@ -135,16 +155,23 @@ def generate_image(data: dict[str, Any]) -> dict[str, Any]:
135
155
  size = "1024x1024"
136
156
 
137
157
  # Build API request parameters
138
- api_params = {
158
+ api_params: dict[str, Any] = {
139
159
  "model": model,
140
160
  "prompt": prompt,
141
161
  "n": n,
142
162
  "size": size,
143
- "response_format": "url", # Get URL instead of base64
144
163
  }
145
164
 
146
- # Add DALL-E 3 specific parameters
147
- if model == "dall-e-3":
165
+ # `response_format` (url | b64_json) is only accepted by the dall-e-* models.
166
+ # gpt-image-1 rejects it and always returns base64. Only send it for the
167
+ # dall-e family; otherwise let the API use its default.
168
+ if model.startswith("dall-e"):
169
+ api_params["response_format"] = "url"
170
+
171
+ # Model-specific parameters
172
+ if model == "gpt-image-1":
173
+ api_params["quality"] = quality
174
+ elif model == "dall-e-3":
148
175
  api_params["quality"] = quality
149
176
  api_params["style"] = style
150
177
 
@@ -162,20 +189,35 @@ def generate_image(data: dict[str, Any]) -> dict[str, Any]:
162
189
  raise ValueError("OpenAI API error: Rate limit exceeded. Please try again later.")
163
190
  elif "insufficient_quota" in error_message.lower():
164
191
  raise ValueError("OpenAI API error: Insufficient quota. Please check your API credits.")
192
+ elif "must be verified" in error_message.lower() or "organization must be verified" in (
193
+ error_message.lower()
194
+ ):
195
+ raise ValueError(
196
+ f"OpenAI API error: model '{model}' requires a verified OpenAI organization. "
197
+ f"Set IMAGE_GEN_DEFAULT_MODEL=dall-e-3 or pass \"model\": \"dall-e-3\" to fall back. "
198
+ f"({error_message})"
199
+ )
165
200
  else:
166
201
  raise ValueError(f"OpenAI API error: {error_message}")
167
202
 
168
- # Extract response data
203
+ # Extract response data. The API may return either a hosted URL or inline
204
+ # base64 (b64_json), depending on the model and whether response_format was
205
+ # honored. gpt-image-1 always returns base64. Support both.
169
206
  image_data = response.data[0]
170
- image_url = image_data.url
207
+ image_url = getattr(image_data, "url", None)
208
+ image_b64 = getattr(image_data, "b64_json", None)
171
209
  revised_prompt = getattr(image_data, "revised_prompt", None)
172
210
 
211
+ if not image_url and not image_b64:
212
+ raise ValueError("OpenAI API error: response contained neither an image URL nor base64 data")
213
+
173
214
  return {
174
215
  "url": image_url,
216
+ "b64_json": image_b64,
175
217
  "revised_prompt": revised_prompt,
176
218
  "model": model,
177
219
  "size": size,
178
- "quality": quality if model == "dall-e-3" else None,
220
+ "quality": quality if model in ("gpt-image-1", "dall-e-3") else None,
179
221
  "style": style if model == "dall-e-3" else None,
180
222
  }
181
223
 
@@ -202,6 +244,37 @@ def download_image(url: str, output_path: Path) -> int:
202
244
  raise ValueError(f"Failed to download image: {e}")
203
245
 
204
246
 
247
+ def save_image(result: dict[str, Any], output_path: Path) -> int:
248
+ """Persist a generated image to disk from either a URL or base64 payload.
249
+
250
+ Args:
251
+ result: The dict returned by generate_image (carries 'url' and/or
252
+ 'b64_json').
253
+ output_path: Path where the image should be saved.
254
+
255
+ Returns:
256
+ Size of the written file in bytes.
257
+
258
+ Raises:
259
+ ValueError: If neither a URL nor base64 data is available, or if
260
+ decoding/downloading fails.
261
+ """
262
+ b64_data = result.get("b64_json")
263
+ if b64_data:
264
+ try:
265
+ image_bytes = base64.b64decode(b64_data)
266
+ except (ValueError, TypeError) as e:
267
+ raise ValueError(f"Failed to decode base64 image data: {e}")
268
+ output_path.write_bytes(image_bytes)
269
+ return len(image_bytes)
270
+
271
+ url = result.get("url")
272
+ if url:
273
+ return download_image(url, output_path)
274
+
275
+ raise ValueError("No image data to save (neither URL nor base64 returned)")
276
+
277
+
205
278
  def main() -> None:
206
279
  """Main entry point for the image generation script."""
207
280
  parser = argparse.ArgumentParser(description="Generate AI images using DALL-E")
@@ -250,8 +323,8 @@ def main() -> None:
250
323
  # Generate image via OpenAI API
251
324
  result = generate_image(data)
252
325
 
253
- # Download image to local file
254
- file_size = download_image(result["url"], output_path)
326
+ # Persist image to local file (handles both URL and base64 responses)
327
+ file_size = save_image(result, output_path)
255
328
 
256
329
  # Output success result
257
330
  output = {
@@ -30,7 +30,7 @@ metadata:
30
30
 
31
31
  Generate PDF documents from HTML content by running the `create_pdf.py` script via `shell_exec`.
32
32
 
33
- The script uses Playwright to render HTML in a headless Chromium browser and produce an A4 PDF. HTML fragments are automatically wrapped in a minimal document shell.
33
+ The script uses Playwright to render HTML in a headless Chromium browser and produce an A4 PDF. HTML fragments are automatically wrapped in a **professionally styled** document shell (clean typography, styled headings/tables/figures). Images are **automatically scaled to fit the page width** — you never need to set image dimensions or worry about a large chart PNG overflowing the page.
34
34
 
35
35
  ### Usage
36
36
 
@@ -51,8 +51,8 @@ echo '<h1>Hello World</h1><p>This is a PDF.</p>' | uv run python -m agent_framew
51
51
 
52
52
  Provide raw HTML content on stdin. This can be either:
53
53
 
54
- - A **complete HTML document** (starts with `<!DOCTYPE` or contains `<html`): used as-is.
55
- - An **HTML fragment** (anything else): automatically wrapped in a minimal HTML document with sensible defaults (sans-serif font, neutral colors, 1.6 line-height).
54
+ - A **complete HTML document** (starts with `<!DOCTYPE` or contains `<html`): used as-is, but print-safety CSS is still injected so oversized images are scaled to the page.
55
+ - An **HTML fragment** (anything else): automatically wrapped in a professionally styled document (clean typography, styled headings, tables, and figures with captions). Recommended for most reports — just provide the body content.
56
56
 
57
57
  ### Recommended HTML Structure
58
58
 
@@ -21,6 +21,145 @@ import urllib.request
21
21
  VIEWPORT_WIDTH = 1280
22
22
  VIEWPORT_HEIGHT = 1024
23
23
 
24
+ # Critical print-safety CSS. Injected into EVERY document (fragments and complete
25
+ # HTML alike) so that oversized raster images (e.g. 3200px-wide chart PNGs) are
26
+ # scaled to the page width instead of overflowing and spilling across pages.
27
+ _PRINT_SAFETY_CSS = """
28
+ img, svg, canvas, video {
29
+ max-width: 100% !important;
30
+ height: auto !important;
31
+ }
32
+ figure {
33
+ margin: 1.2em 0;
34
+ text-align: center;
35
+ page-break-inside: avoid;
36
+ break-inside: avoid;
37
+ }
38
+ figure img {
39
+ margin: 0 auto;
40
+ }
41
+ table, pre, blockquote {
42
+ page-break-inside: avoid;
43
+ break-inside: avoid;
44
+ }
45
+ h1, h2, h3, h4 {
46
+ page-break-after: avoid;
47
+ break-after: avoid;
48
+ }
49
+ """
50
+
51
+ # Professional baseline styling applied when wrapping a bare HTML fragment.
52
+ _PROFESSIONAL_CSS = """
53
+ :root {
54
+ --accent: #2563eb;
55
+ --ink: #1f2937;
56
+ --muted: #6b7280;
57
+ --border: #e5e7eb;
58
+ }
59
+ * { box-sizing: border-box; }
60
+ body {
61
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
62
+ "Helvetica Neue", Arial, sans-serif;
63
+ margin: 0;
64
+ padding: 0;
65
+ color: var(--ink);
66
+ line-height: 1.6;
67
+ font-size: 11pt;
68
+ }
69
+ h1 {
70
+ font-size: 24pt;
71
+ font-weight: 700;
72
+ margin: 0 0 0.4em;
73
+ padding-bottom: 0.3em;
74
+ border-bottom: 3px solid var(--accent);
75
+ }
76
+ h2 {
77
+ font-size: 16pt;
78
+ font-weight: 700;
79
+ margin: 1.4em 0 0.5em;
80
+ color: var(--ink);
81
+ }
82
+ h3 {
83
+ font-size: 13pt;
84
+ font-weight: 600;
85
+ margin: 1.1em 0 0.4em;
86
+ }
87
+ p { margin: 0.6em 0; }
88
+ a { color: var(--accent); text-decoration: none; }
89
+ ul, ol { margin: 0.6em 0; padding-left: 1.4em; }
90
+ li { margin: 0.25em 0; }
91
+ table {
92
+ width: 100%;
93
+ border-collapse: collapse;
94
+ margin: 1em 0;
95
+ font-size: 10pt;
96
+ }
97
+ th, td {
98
+ border: 1px solid var(--border);
99
+ padding: 8px 10px;
100
+ text-align: left;
101
+ }
102
+ th {
103
+ background: #f3f4f6;
104
+ font-weight: 600;
105
+ }
106
+ tr:nth-child(even) td { background: #fafafa; }
107
+ figure {
108
+ margin: 1.4em 0;
109
+ text-align: center;
110
+ }
111
+ figcaption {
112
+ font-size: 9.5pt;
113
+ color: var(--muted);
114
+ margin-top: 0.5em;
115
+ font-style: italic;
116
+ }
117
+ blockquote {
118
+ margin: 1em 0;
119
+ padding: 0.4em 1em;
120
+ border-left: 4px solid var(--accent);
121
+ color: var(--muted);
122
+ }
123
+ pre, code {
124
+ font-family: "SF Mono", Menlo, Consolas, monospace;
125
+ font-size: 9.5pt;
126
+ }
127
+ pre {
128
+ background: #f6f8fa;
129
+ padding: 12px 14px;
130
+ border-radius: 6px;
131
+ overflow-x: auto;
132
+ }
133
+ .section { margin-bottom: 1.2em; }
134
+ .break-before { page-break-before: always; break-before: page; }
135
+ """
136
+
137
+
138
+ def _inject_into_head(html: str, style_block: str) -> str:
139
+ """Insert a <style> block into a complete HTML document.
140
+
141
+ Tries to place it just before </head>; falls back to after <html>, or
142
+ prepends it if neither tag is present. Case-insensitive.
143
+
144
+ Args:
145
+ html: A complete HTML document.
146
+ style_block: The CSS (without <style> tags) to inject.
147
+
148
+ Returns:
149
+ The document with the style block inserted.
150
+ """
151
+ tag = f"<style>{style_block}</style>"
152
+ lower = html.lower()
153
+ head_close = lower.find("</head>")
154
+ if head_close != -1:
155
+ return html[:head_close] + tag + html[head_close:]
156
+ html_open = lower.find("<html")
157
+ if html_open != -1:
158
+ insert_at = lower.find(">", html_open)
159
+ if insert_at != -1:
160
+ return html[: insert_at + 1] + tag + html[insert_at + 1 :]
161
+ return tag + html
162
+
24
163
  _IMG_SRC_RE = re.compile(r'(<img\b[^>]*?\bsrc\s*=\s*)(["\'])(.*?)\2', re.IGNORECASE)
25
164
  _FILES_DOWNLOAD_RE = re.compile(r"/files/[A-Za-z0-9_-]+/download")
26
165
 
@@ -168,8 +307,12 @@ async def render_pdf(html_content: str, filename: str, output_dir: str) -> str:
168
307
  # would otherwise silently fail to load and the PDF would show no image.
169
308
  html_content = _inline_images(html_content)
170
309
 
171
- # Wrap fragment in a basic HTML document if needed
172
- if not _is_complete_html(html_content):
310
+ # Wrap fragment in a basic HTML document if needed. Complete documents get
311
+ # the print-safety CSS injected so that oversized images are still scaled
312
+ # to the page (the #1 cause of charts overflowing / being cropped in PDFs).
313
+ if _is_complete_html(html_content):
314
+ html_content = _inject_into_head(html_content, _PRINT_SAFETY_CSS)
315
+ else:
173
316
  html_content = _wrap_html_fragment(html_content)
174
317
 
175
318
  # Sanitize filename
@@ -223,7 +366,10 @@ def _is_complete_html(content: str) -> bool:
223
366
 
224
367
 
225
368
  def _wrap_html_fragment(fragment: str) -> str:
226
- """Wrap an HTML fragment in a minimal HTML document.
369
+ """Wrap an HTML fragment in a professionally styled HTML document.
370
+
371
+ Applies a clean report stylesheet plus the print-safety CSS so that
372
+ embedded charts and images are scaled to the page width.
227
373
 
228
374
  Args:
229
375
  fragment: HTML fragment to wrap.
@@ -235,16 +381,8 @@ def _wrap_html_fragment(fragment: str) -> str:
235
381
  <html>
236
382
  <head>
237
383
  <meta charset="UTF-8">
238
- <style>
239
- body {{
240
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
241
- "Helvetica Neue", Arial, sans-serif;
242
- margin: 0;
243
- padding: 0;
244
- color: #333;
245
- line-height: 1.6;
246
- }}
247
- </style>
384
+ <style>{_PROFESSIONAL_CSS}
385
+ {_PRINT_SAFETY_CSS}</style>
248
386
  </head>
249
387
  <body>
250
388
  {fragment}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-framework-lib
3
- Version: 0.8.7.post6
3
+ Version: 0.8.7.post7
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>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "agent-framework-lib"
7
- version = "0.8.7post6"
7
+ version = "0.8.7post7"
8
8
  description = "A comprehensive Python framework for building and serving conversational AI agents with FastAPI"
9
9
  readme = {file = "README.md", content-type = "text/markdown"}
10
10
  license = {text = "MIT"}