agent-framework-lib 0.8.1__tar.gz → 0.8.1.post3__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 (287) hide show
  1. {agent_framework_lib-0.8.1/agent_framework_lib.egg-info → agent_framework_lib-0.8.1.post3}/PKG-INFO +8 -1
  2. {agent_framework_lib-0.8.1/agent_framework/web/docs → agent_framework_lib-0.8.1.post3}/README.md +7 -0
  3. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3/agent_framework/web/docs}/README.md +7 -0
  4. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/helper_agent.py +390 -10
  5. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/server.py +1 -0
  6. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/workspace/client.py +12 -0
  7. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/workspace/router.py +159 -13
  8. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3/agent_framework_lib.egg-info}/PKG-INFO +8 -1
  9. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework_lib.egg-info/SOURCES.txt +1 -0
  10. agent_framework_lib-0.8.1.post3/docs/index.md +222 -0
  11. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/pyproject.toml +1 -1
  12. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/ARCHITECTURE.md +0 -0
  13. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/LICENSE +0 -0
  14. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/MANIFEST.in +0 -0
  15. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/__init__.py +0 -0
  16. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/__init__.py +0 -0
  17. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/base.py +0 -0
  18. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/endpoints/__init__.py +0 -0
  19. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/endpoints/a2a_router.py +0 -0
  20. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/endpoints/agent_card_builder.py +0 -0
  21. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/endpoints/agent_card_skill_builder.py +0 -0
  22. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/endpoints/jsonrpc_dispatcher.py +0 -0
  23. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/endpoints/models_jsonrpc.py +0 -0
  24. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/endpoints/sse_wrapper.py +0 -0
  25. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/endpoints/translation_layer.py +0 -0
  26. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/models.py +0 -0
  27. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/providers/__init__.py +0 -0
  28. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/providers/elasticsearch_provider.py +0 -0
  29. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/a2a/providers/postgres_provider.py +0 -0
  30. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/capabilities/__init__.py +0 -0
  31. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/capabilities/resolver.py +0 -0
  32. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/chart_generation/llm_refinement_loop.py +0 -0
  33. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/__init__.py +0 -0
  34. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/activity_formatter.py +0 -0
  35. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/agent_interface.py +0 -0
  36. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/agent_provider.py +0 -0
  37. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/base_agent.py +0 -0
  38. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/context_budget.py +0 -0
  39. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/context_summarizer.py +0 -0
  40. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/elasticsearch_config_provider.py +0 -0
  41. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/implementation_validator.py +0 -0
  42. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/knowledge_state.py +0 -0
  43. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/loop_detector.py +0 -0
  44. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/model_clients.py +0 -0
  45. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/model_config.py +0 -0
  46. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/model_router.py +0 -0
  47. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/models.py +0 -0
  48. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/provider_calibration.py +0 -0
  49. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/scratchpad_compressor.py +0 -0
  50. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/state_manager.py +0 -0
  51. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/step_display_config.py +0 -0
  52. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/core/streaming_parts_accumulator.py +0 -0
  53. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/implementations/__init__.py +0 -0
  54. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/implementations/budget_aware_agent.py +0 -0
  55. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/implementations/llamaindex_agent.py +0 -0
  56. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/implementations/llamaindex_memory_adapter.py +0 -0
  57. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/implementations/microsoft_agent.py +0 -0
  58. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/memory/__init__.py +0 -0
  59. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/memory/agent_mixin.py +0 -0
  60. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/memory/base.py +0 -0
  61. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/memory/config.py +0 -0
  62. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/memory/manager.py +0 -0
  63. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/memory/personalization.py +0 -0
  64. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/memory/providers/__init__.py +0 -0
  65. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/memory/providers/graphiti_provider.py +0 -0
  66. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/memory/providers/memori_provider.py +0 -0
  67. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/memory/tools.py +0 -0
  68. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/__init__.py +0 -0
  69. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/api_timing_tracker.py +0 -0
  70. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/elasticsearch_circuit_breaker.py +0 -0
  71. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/elasticsearch_logging.py +0 -0
  72. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/error_handling.py +0 -0
  73. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/error_logging.py +0 -0
  74. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/llm_auto_instrumentor.py +0 -0
  75. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/llm_metrics.py +0 -0
  76. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/llm_metrics_collector.py +0 -0
  77. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/llm_metrics_extractor.py +0 -0
  78. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/metrics_aggregator.py +0 -0
  79. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/metrics_config.py +0 -0
  80. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/observability_manager.py +0 -0
  81. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/otel_instrumentor.py +0 -0
  82. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/otel_logging_handler.py +0 -0
  83. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/otel_metrics_recorder.py +0 -0
  84. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/otel_setup.py +0 -0
  85. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/performance_monitor.py +0 -0
  86. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/progress_tracker.py +0 -0
  87. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/resource_manager.py +0 -0
  88. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/resource_metrics_collector.py +0 -0
  89. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/streaming_latency_tracer.py +0 -0
  90. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/timing_tracker.py +0 -0
  91. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/token_counter.py +0 -0
  92. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/monitoring/tracing_context.py +0 -0
  93. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/notifications/__init__.py +0 -0
  94. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/notifications/hub.py +0 -0
  95. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/processing/__init__.py +0 -0
  96. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/processing/ai_content_management.py +0 -0
  97. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/processing/markdown_converter.py +0 -0
  98. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/processing/multimodal_integration.py +0 -0
  99. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/processing/rich_content_validation.py +0 -0
  100. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/py.typed +0 -0
  101. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/session/__init__.py +0 -0
  102. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/session/elasticsearch_session_storage.py +0 -0
  103. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/session/session_storage.py +0 -0
  104. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/__init__.py +0 -0
  105. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/agent_mixin.py +0 -0
  106. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/base.py +0 -0
  107. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/__init__.py +0 -0
  108. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/scripts/__init__.py +0 -0
  109. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/scripts/create_and_register.py +0 -0
  110. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/scripts/register_to_storage.py +0 -0
  111. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/chart/SKILL.md +0 -0
  112. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/chart/chart_to_image.py +0 -0
  113. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/code_format/SKILL.md +0 -0
  114. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/code_format/format_python.py +0 -0
  115. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/csv/SKILL.md +0 -0
  116. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/csv/create_csv.py +0 -0
  117. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/csv/read_csv.py +0 -0
  118. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/csv/transform_csv.py +0 -0
  119. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/data_format/SKILL.md +0 -0
  120. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/data_format/json_to_yaml.py +0 -0
  121. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/data_format/yaml_to_json.py +0 -0
  122. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/drawio/SKILL.md +0 -0
  123. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/drawio/create_drawio.py +0 -0
  124. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/email_template/SKILL.md +0 -0
  125. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/excel/SKILL.md +0 -0
  126. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/excel/create_excel.py +0 -0
  127. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/file/SKILL.md +0 -0
  128. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/file/create_file.py +0 -0
  129. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/file/list_files.py +0 -0
  130. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/file/read_file.py +0 -0
  131. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/file_access/SKILL.md +0 -0
  132. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/file_access/get_file_path.py +0 -0
  133. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/form/SKILL.md +0 -0
  134. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/image_display/SKILL.md +0 -0
  135. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/image_gen/SKILL.md +0 -0
  136. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/image_gen/create_image.py +0 -0
  137. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/image_gen/generate_image.py +0 -0
  138. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/mermaid/SKILL.md +0 -0
  139. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/mermaid/mermaid_to_image.py +0 -0
  140. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/multimodal/SKILL.md +0 -0
  141. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/optionsblock/SKILL.md +0 -0
  142. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/powerpoint/SKILL.md +0 -0
  143. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/powerpoint/create_powerpoint.py +0 -0
  144. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/skill_creator/SKILL.md +0 -0
  145. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/table/SKILL.md +0 -0
  146. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/table/table_to_image.py +0 -0
  147. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/unified_pdf/SKILL.md +0 -0
  148. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/unified_pdf/create_pdf.py +0 -0
  149. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/web_search/SKILL.md +0 -0
  150. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/web_search/web_news_search.py +0 -0
  151. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/web_search/web_search.py +0 -0
  152. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/word/SKILL.md +0 -0
  153. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/builtin/skills/word/create_word.py +0 -0
  154. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/custom_skill_manager.py +0 -0
  155. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/discovery_prompt.py +0 -0
  156. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/markdown_loader.py +0 -0
  157. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/skills/tools.py +0 -0
  158. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/storage/__init__.py +0 -0
  159. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/storage/file_storages.py +0 -0
  160. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/storage/file_system_management.py +0 -0
  161. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/storage/storage_optimizer.py +0 -0
  162. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/subagents/__init__.py +0 -0
  163. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/subagents/executor.py +0 -0
  164. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/subagents/message_injector.py +0 -0
  165. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/subagents/message_queue.py +0 -0
  166. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/subagents/retrigger.py +0 -0
  167. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/subagents/spawn_tool.py +0 -0
  168. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/tools/__init__.py +0 -0
  169. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/tools/activity_callback.py +0 -0
  170. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/tools/adaptive_pdf_css.py +0 -0
  171. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/tools/base.py +0 -0
  172. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/tools/html_content_analyzer.py +0 -0
  173. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/tools/multimodal_tools.py +0 -0
  174. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/tools/pdf_image_scaler.py +0 -0
  175. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/tools/shell_tool.py +0 -0
  176. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/tools/sizing_config.py +0 -0
  177. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/tools/web_fetch_tool.py +0 -0
  178. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/utils/__init__.py +0 -0
  179. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/utils/path_utils.py +0 -0
  180. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/utils/post_install.py +0 -0
  181. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/utils/session_title_generator.py +0 -0
  182. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/utils/source_detector.py +0 -0
  183. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/utils/special_blocks.py +0 -0
  184. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/__init__.py +0 -0
  185. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/admin_auth.py +0 -0
  186. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/admin_models.py +0 -0
  187. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/admin_router.py +0 -0
  188. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/admin_services.py +0 -0
  189. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/api_timing_middleware.py +0 -0
  190. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/A2A_GUIDE.md +0 -0
  191. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  192. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/CREATING_AGENTS.md +0 -0
  193. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
  194. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/DOCKER_SETUP.md +0 -0
  195. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/Dockerfile +0 -0
  196. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/GETTING_STARTED.md +0 -0
  197. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/MEMORY_INSTALLATION.md +0 -0
  198. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  199. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/WORKSPACE_INTEGRATION.md +0 -0
  200. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/api-reference.md +0 -0
  201. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/configuration.md +0 -0
  202. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/docker-compose.yml +0 -0
  203. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/examples/agent_example_multi_skills.py +0 -0
  204. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/examples/agent_with_file_storage.py +0 -0
  205. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/examples/agent_with_mcp.py +0 -0
  206. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/examples/agent_with_memory.py +0 -0
  207. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/examples/agent_with_memory_graphiti.py +0 -0
  208. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/examples/agent_with_memory_hybrid.py +0 -0
  209. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/examples/agent_with_memory_simple.py +0 -0
  210. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/examples/custom_framework_agent.py +0 -0
  211. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/examples/simple_agent.py +0 -0
  212. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/examples/skills_demo_agent.py +0 -0
  213. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/docs/installation-guide.md +0 -0
  214. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/documentation_generator.py +0 -0
  215. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/helper_ui.html +0 -0
  216. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/modern_ui.html +0 -0
  217. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/observability/kibana-llm-dashboard-setup.json +0 -0
  218. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/observability/kibana-resource-metrics-dashboard.json +0 -0
  219. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/otel_tracing_middleware.py +0 -0
  220. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/skills_router.py +0 -0
  221. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/web/test_app.html +0 -0
  222. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/workspace/__init__.py +0 -0
  223. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/workspace/artefacts.py +0 -0
  224. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/workspace/config.py +0 -0
  225. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/workspace/context.py +0 -0
  226. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/workspace/cursor.py +0 -0
  227. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/workspace/memory.py +0 -0
  228. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/workspace/models.py +0 -0
  229. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/workspace/poller.py +0 -0
  230. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/workspace/preferences.py +0 -0
  231. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/workspace/session.py +0 -0
  232. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework/workspace/subscription.py +0 -0
  233. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework_lib.egg-info/dependency_links.txt +0 -0
  234. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework_lib.egg-info/entry_points.txt +0 -0
  235. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework_lib.egg-info/requires.txt +0 -0
  236. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/agent_framework_lib.egg-info/top_level.txt +0 -0
  237. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/A2A_GUIDE.md +0 -0
  238. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/ACTIVITY_OUTPUT_PART.md +0 -0
  239. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/ARCHITECTURE_DIAGRAM.md +0 -0
  240. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/BUILTIN_SKILLS_REFERENCE.md +0 -0
  241. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/CONCURRENCE_VS_PARALLELISME_GUIDE.md +0 -0
  242. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/CREATING_AGENTS.md +0 -0
  243. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/CUSTOM_SKILLS_GUIDE.md +0 -0
  244. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/DOCKER_SETUP.md +0 -0
  245. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/ELASTICSEARCH_DATA_STRUCTURES.md +0 -0
  246. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/FILE_DOWNLOAD_LINKS.md +0 -0
  247. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/FILE_STORAGE_GUIDE.md +0 -0
  248. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/GETTING_STARTED.md +0 -0
  249. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/HISTORY_MESSAGE_FORMAT.md +0 -0
  250. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/IMPLEMENTATION_GUIDE_NEW_AGENT.md +0 -0
  251. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/MEMORY_INSTALLATION.md +0 -0
  252. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/MODIFICATIONS_CONCURRENCE.md +0 -0
  253. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/MULTIMODAL_TOOLS_GUIDE.md +0 -0
  254. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/OBSERVABILITY_GUIDE.md +0 -0
  255. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/PYPI_PUBLISHING.md +0 -0
  256. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/QA_STREAMING_LATENCY.md +0 -0
  257. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/SCREENSHOTS_GUIDE.md +0 -0
  258. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/SPEC_CROSS_MODEL_HISTORY_CONVERSION.md +0 -0
  259. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/SSE_NOTIFICATIONS_GUIDE.md +0 -0
  260. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/STREAMING_EVENTS_FRONTEND.md +0 -0
  261. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/TOOLS_AND_MCP_GUIDE.md +0 -0
  262. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/WORKSPACE_INTEGRATION.md +0 -0
  263. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/api-reference.md +0 -0
  264. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/configuration.md +0 -0
  265. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/framework_audit_remarques.md +0 -0
  266. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/docs/installation-guide.md +0 -0
  267. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/README.md +0 -0
  268. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/agent_context_budget_test.py +0 -0
  269. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/agent_example_multi_skills.py +0 -0
  270. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/agent_exemple_test.py +0 -0
  271. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/agent_training_with_apo.py +0 -0
  272. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/agent_with_custom_tools_file_storage.py +0 -0
  273. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/agent_with_file_storage.py +0 -0
  274. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/agent_with_mcp.py +0 -0
  275. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/agent_with_memory_graphiti.py +0 -0
  276. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/agent_with_memory_hybrid.py +0 -0
  277. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/agent_with_memory_simple.py +0 -0
  278. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/agent_with_personalization.py +0 -0
  279. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/biagenttest.py +0 -0
  280. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/custom_framework_agent.py +0 -0
  281. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/dependencies/docker-compose.yaml +0 -0
  282. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/pyproject.toml +0 -0
  283. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/simple_agent.py +0 -0
  284. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/skills_demo_agent.py +0 -0
  285. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/examples/workspace_test_agent.py +0 -0
  286. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/setup.cfg +0 -0
  287. {agent_framework_lib-0.8.1 → agent_framework_lib-0.8.1.post3}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-framework-lib
3
- Version: 0.8.1
3
+ Version: 0.8.1.post3
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>
@@ -149,6 +149,13 @@ Dynamic: license-file
149
149
 
150
150
  # Agent Framework Library
151
151
 
152
+ [![PyPI version](https://badge.fury.io/py/agent-framework-lib.svg)](https://pypi.org/project/agent-framework-lib/)
153
+ [![Tests](https://github.com/Cinco-AI/AgentFramework/workflows/Tests%20%26%20Coverage/badge.svg)](https://github.com/Cinco-AI/AgentFramework/actions)
154
+ [![Coverage](https://codecov.io/gh/Cinco-AI/AgentFramework/branch/main/graph/badge.svg)](https://codecov.io/gh/Cinco-AI/AgentFramework)
155
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
156
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
157
+ [![Documentation](https://img.shields.io/badge/docs-mkdocs-blue.svg)](https://cinco-ai.github.io/AgentFramework/)
158
+
152
159
  A comprehensive Python framework for building and serving conversational AI agents with FastAPI. Create production-ready AI agents in minutes with automatic session management, streaming responses, file storage, and easy MCP integration.
153
160
 
154
161
  **Key Features:**
@@ -1,5 +1,12 @@
1
1
  # Agent Framework Library
2
2
 
3
+ [![PyPI version](https://badge.fury.io/py/agent-framework-lib.svg)](https://pypi.org/project/agent-framework-lib/)
4
+ [![Tests](https://github.com/Cinco-AI/AgentFramework/workflows/Tests%20%26%20Coverage/badge.svg)](https://github.com/Cinco-AI/AgentFramework/actions)
5
+ [![Coverage](https://codecov.io/gh/Cinco-AI/AgentFramework/branch/main/graph/badge.svg)](https://codecov.io/gh/Cinco-AI/AgentFramework)
6
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
+ [![Documentation](https://img.shields.io/badge/docs-mkdocs-blue.svg)](https://cinco-ai.github.io/AgentFramework/)
9
+
3
10
  A comprehensive Python framework for building and serving conversational AI agents with FastAPI. Create production-ready AI agents in minutes with automatic session management, streaming responses, file storage, and easy MCP integration.
4
11
 
5
12
  **Key Features:**
@@ -1,5 +1,12 @@
1
1
  # Agent Framework Library
2
2
 
3
+ [![PyPI version](https://badge.fury.io/py/agent-framework-lib.svg)](https://pypi.org/project/agent-framework-lib/)
4
+ [![Tests](https://github.com/Cinco-AI/AgentFramework/workflows/Tests%20%26%20Coverage/badge.svg)](https://github.com/Cinco-AI/AgentFramework/actions)
5
+ [![Coverage](https://codecov.io/gh/Cinco-AI/AgentFramework/branch/main/graph/badge.svg)](https://codecov.io/gh/Cinco-AI/AgentFramework)
6
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
+ [![Documentation](https://img.shields.io/badge/docs-mkdocs-blue.svg)](https://cinco-ai.github.io/AgentFramework/)
9
+
3
10
  A comprehensive Python framework for building and serving conversational AI agents with FastAPI. Create production-ready AI agents in minutes with automatic session management, streaming responses, file storage, and easy MCP integration.
4
11
 
5
12
  **Key Features:**
@@ -91,6 +91,7 @@ class FrameworkHelperAgent(LlamaIndexAgent):
91
91
  _indexed_docs: list[str] = []
92
92
  _indexed_examples: list[str] = []
93
93
  _indexed_source: list[str] = []
94
+ _indexed_skills: list[str] = [] # SKILL.md files from builtin skills
94
95
  _graphiti_episode_count: int = 0 # Count from FalkorDB when reusing existing graph
95
96
 
96
97
  AGENT_ID = "framework_helper_v2"
@@ -212,6 +213,75 @@ class FrameworkHelperAgent(LlamaIndexAgent):
212
213
  logger.warning(f"[FrameworkHelperAgent] Failed to read tools guide: {e}")
213
214
  return ""
214
215
 
216
+ def _load_custom_skills_guide(self) -> str:
217
+ """
218
+ Load the CUSTOM_SKILLS_GUIDE.md documentation.
219
+
220
+ Returns:
221
+ Content of the custom skills guide, or empty string if not available.
222
+ """
223
+ docs_path = self._get_docs_path()
224
+ guide_path = docs_path / "CUSTOM_SKILLS_GUIDE.md"
225
+
226
+ if not guide_path.exists():
227
+ logger.debug(f"[FrameworkHelperAgent] Custom skills guide not found: {guide_path}")
228
+ return ""
229
+
230
+ try:
231
+ content = guide_path.read_text(encoding="utf-8", errors="ignore")
232
+ # Truncate if too long (keep first ~15000 chars to stay within context limits)
233
+ if len(content) > 15000:
234
+ content = content[:15000] + "\n\n... (truncated for brevity)"
235
+ return content
236
+ except Exception as e:
237
+ logger.warning(f"[FrameworkHelperAgent] Failed to read custom skills guide: {e}")
238
+ return ""
239
+
240
+ def _load_skill_examples(self) -> str:
241
+ """
242
+ Load representative SKILL.md examples from builtin skills.
243
+
244
+ Loads 3 representative skills to show the SKILL.md format:
245
+ - chart (Skill_Script with visualization)
246
+ - form (Skill_Markdown with UI)
247
+ - powerpoint (Skill_Script with document generation)
248
+
249
+ Returns:
250
+ Formatted markdown string with skill definition examples.
251
+ """
252
+ source_path = self._get_source_path()
253
+ skills_path = source_path / "skills" / "builtin" / "skills"
254
+
255
+ if not skills_path.exists():
256
+ logger.debug(f"[FrameworkHelperAgent] Skills path not found: {skills_path}")
257
+ return "# No skill examples available"
258
+
259
+ # Representative skills showing different types
260
+ example_skills = [
261
+ ("chart", "Skill_Script for visualization (Chart.js)"),
262
+ ("form", "Skill_Markdown for UI (interactive forms)"),
263
+ ("powerpoint", "Skill_Script for document generation"),
264
+ ]
265
+
266
+ examples: list[str] = []
267
+
268
+ for skill_name, description in example_skills:
269
+ skill_md = skills_path / skill_name / "SKILL.md"
270
+ if skill_md.exists():
271
+ try:
272
+ content = skill_md.read_text(encoding="utf-8", errors="ignore")
273
+ # Truncate very long skills (keep first 3000 chars)
274
+ if len(content) > 3000:
275
+ content = content[:3000] + "\n\n... (truncated for brevity)"
276
+ examples.append(f"### {skill_name} — {description}\n```markdown\n{content}\n```")
277
+ except Exception as e:
278
+ logger.warning(f"[FrameworkHelperAgent] Failed to read skill {skill_name}: {e}")
279
+
280
+ if not examples:
281
+ return "# No skill examples available"
282
+
283
+ return "\n\n".join(examples)
284
+
215
285
  def _get_base_prompt(self) -> str:
216
286
  """
217
287
  Return the base system prompt for framework assistance.
@@ -241,19 +311,75 @@ def get_agent_prompt(self) -> str:
241
311
  return \"\"\"You are a helpful assistant that...\"\"\"
242
312
  ```
243
313
 
244
- ### 2. `get_agent_tools()` - Add capabilities
314
+ ### 2. Skills System - Add Capabilities (RECOMMENDED)
315
+
316
+ **AgentFramework provides 21 builtin skills that agents can use on-demand:**
317
+
318
+ #### How Skills Work
319
+ - **Auto-loading**: Skills auto-load when user queries match trigger patterns (e.g., "create a chart" loads the `chart` skill)
320
+ - **On-demand**: Only loaded when needed, reducing token usage by ~80%
321
+ - **Two types**:
322
+ - **Skill_Markdown** (10 skills): Instructions-only, no executable code
323
+ - **Skill_Script** (11 skills): With executable Python scripts for file generation
324
+
325
+ #### Skills by Category
326
+
327
+ **Visualization (3 skills)**
328
+ - `chart` — Chart.js charts (bar, line, pie, etc.) or PNG export
329
+ - `mermaid` — Mermaid diagrams (flowcharts, sequence, UML, etc.)
330
+ - `table` — Formatted tables or PNG export
331
+
332
+ **Document (7 skills)**
333
+ - `file` — File operations (create, read, list)
334
+ - `unified_pdf` — PDF generation from HTML with embedded images
335
+ - `file_access` — Download URLs for stored files
336
+ - `excel` — Excel (.xlsx) generation with multi-sheet support
337
+ - `drawio` — Draw.io diagrams (.drawio)
338
+ - `powerpoint` — PowerPoint presentations (.pptx)
339
+ - `word` — Word documents (.docx)
340
+
341
+ **Data (2 skills)**
342
+ - `csv` — CSV manipulation (create, read, transform)
343
+ - `data_format` — JSON ↔ YAML conversion, schema validation
344
+
345
+ **Code (1 skill)**
346
+ - `code_format` — Code formatting (Python, JS, JSON, YAML)
347
+
348
+ **Web (1 skill)**
349
+ - `web_search` — DuckDuckGo web search and news
350
+
351
+ **Multimodal (2 skills)**
352
+ - `multimodal` — Multimodal processing instructions (images, audio)
353
+ - `image_gen` — AI image generation (DALL-E 3 and DALL-E 2)
354
+
355
+ **UI (5 skills)**
356
+ - `form` — Interactive forms (JSON formDefinition)
357
+ - `optionsblock` — Clickable option buttons
358
+ - `image_display` — Display images in chat
359
+ - `email_template` — Responsive HTML email templates
360
+ - `skill_creator` — Guide for creating custom skills
361
+
362
+ **Skills auto-load by default** — agents don't need to do anything special to use them!
363
+
364
+ ### 3. `get_agent_tools()` - Add Custom Tools (Optional)
365
+ For capabilities beyond the 21 builtin skills, you can define custom tools:
245
366
  ```python
246
367
  def get_agent_tools(self) -> List[callable]:
247
- def my_tool(param: str) -> str:
368
+ def my_custom_tool(param: str) -> str:
248
369
  \"\"\"Tool description for the LLM.\"\"\"
249
370
  return f"Result: {param}"
250
- return [my_tool]
371
+ return [my_custom_tool]
251
372
  ```
252
373
 
253
- ### 3. `initialize_agent()` - (Optional) Customize agent initialization
374
+ **When to use custom tools vs skills:**
375
+ - Use **builtin skills** for common tasks (charts, PDFs, Excel, search, etc.)
376
+ - Use **custom tools** for domain-specific logic unique to your agent
377
+ - Both can coexist: skills + custom tools work together seamlessly
378
+
379
+ ### 4. `initialize_agent()` - (Optional) Customize agent initialization
254
380
  The default implementation uses FunctionAgent. Override only if you need custom behavior.
255
381
 
256
- ### 4. `get_memory_config()` - (Optional) Enable memory
382
+ ### 5. `get_memory_config()` - (Optional) Enable memory
257
383
  ```python
258
384
  def get_memory_config(self) -> Optional[MemoryConfig]:
259
385
  return MemoryConfig.memori_simple(database_url="sqlite:///memory.db")
@@ -283,6 +409,8 @@ Be helpful, provide working code examples, and explain framework concepts clearl
283
409
  - LlamaIndexAgent source code (for accurate reference)
284
410
  - Example agent implementations from the docs
285
411
  - Tools and MCP integration guide
412
+ - Custom skills guide (how to create new skills)
413
+ - Skill definition examples (SKILL.md format reference)
286
414
 
287
415
  This ensures the agent has accurate, up-to-date information about
288
416
  the framework regardless of whether it's running from source or PyPI.
@@ -291,6 +419,8 @@ Be helpful, provide working code examples, and explain framework concepts clearl
291
419
  source_code = self._load_llamaindex_agent_source()
292
420
  examples = self._load_doc_examples()
293
421
  tools_guide = self._load_tools_and_mcp_guide()
422
+ skills_guide = self._load_custom_skills_guide()
423
+ skill_examples = self._load_skill_examples()
294
424
 
295
425
  prompt = f"""{base_prompt}
296
426
 
@@ -315,6 +445,24 @@ These are complete, runnable examples showing different agent patterns:
315
445
  Complete reference for creating tools and integrating MCP servers:
316
446
 
317
447
  {tools_guide}
448
+ """
449
+
450
+ if skills_guide:
451
+ prompt += f"""
452
+
453
+ ## Custom Skills Creation Guide
454
+ Complete guide for creating custom skills (both Skill_Markdown and Skill_Script):
455
+
456
+ {skills_guide}
457
+ """
458
+
459
+ if skill_examples:
460
+ prompt += f"""
461
+
462
+ ## Builtin Skill Examples (SKILL.md Format Reference)
463
+ These examples show the SKILL.md format used by builtin skills:
464
+
465
+ {skill_examples}
318
466
  """
319
467
 
320
468
  return prompt
@@ -357,7 +505,7 @@ Complete reference for creating tools and integrating MCP servers:
357
505
  are available for searching.
358
506
 
359
507
  Args:
360
- file_type: Filter by type - "docs", "examples", "source", or "all"
508
+ file_type: Filter by type - "docs", "examples", "skills", "source", or "all"
361
509
 
362
510
  Returns:
363
511
  List of indexed files by category
@@ -366,7 +514,7 @@ Complete reference for creating tools and integrating MCP servers:
366
514
  cls = FrameworkHelperAgent
367
515
 
368
516
  # Check if we're using a reused FalkorDB graph (lists are empty but episodes exist)
369
- has_local_lists = any([cls._indexed_docs, cls._indexed_examples, cls._indexed_source])
517
+ has_local_lists = any([cls._indexed_docs, cls._indexed_examples, cls._indexed_skills, cls._indexed_source])
370
518
 
371
519
  if not has_local_lists:
372
520
  # Try to get episode names from FalkorDB
@@ -385,6 +533,7 @@ Complete reference for creating tools and integrating MCP servers:
385
533
  "**Indexed content includes:**\n"
386
534
  "- Documentation files (docs/*.md)\n"
387
535
  "- Example agents (examples/*.py)\n"
536
+ "- Skill definitions (21 builtin skills)\n"
388
537
  "- Core source files (agent_framework/core/, implementations/, etc.)\n\n"
389
538
  "Use `search_knowledge(query)` to search across all indexed content."
390
539
  )
@@ -408,6 +557,13 @@ Complete reference for creating tools and integrating MCP servers:
408
557
  for f in examples:
409
558
  result.append(f" - {f}")
410
559
 
560
+ if file_type in ("all", "skills"):
561
+ skills = cls._indexed_skills or []
562
+ if skills:
563
+ result.append(f"\n**Skills ({len(skills)} builtin):**")
564
+ for f in skills:
565
+ result.append(f" - {f}")
566
+
411
567
  if file_type in ("all", "source"):
412
568
  source = cls._indexed_source or []
413
569
  if source:
@@ -478,6 +634,150 @@ Complete reference for creating tools and integrating MCP servers:
478
634
  logger.error(f"Web search error: {e}")
479
635
  return f"Search failed: {e}"
480
636
 
637
+ async def search_skills(query: str) -> str:
638
+ """
639
+ Search builtin skills by semantic query or trigger patterns.
640
+
641
+ Use this to find which skills are available for specific tasks.
642
+ Examples: "chart creation", "PDF generation", "image processing"
643
+
644
+ Args:
645
+ query: What capability you're looking for
646
+
647
+ Returns:
648
+ List of relevant skills with their descriptions and trigger patterns
649
+ """
650
+ try:
651
+ # Search Graphiti for skill episodes
652
+ if self._shared_graphiti_client is not None:
653
+ results = await self._search_graphiti(f"skill:{query}", num_results=5)
654
+ if results and "No relevant information found" not in results:
655
+ return f"Skills matching '{query}':\n\n{results}"
656
+
657
+ # Fallback: return list of all skills by category
658
+ cls = FrameworkHelperAgent
659
+ if cls._indexed_skills:
660
+ skills_list = ", ".join(sorted(cls._indexed_skills))
661
+ return (
662
+ f"Semantic search not available. All 21 builtin skills: {skills_list}\n\n"
663
+ f"Use `get_skill_details(skill_name)` to see full documentation for a specific skill.\n"
664
+ f"Or use `search_knowledge(\"{query}\")` for general search across all content."
665
+ )
666
+
667
+ return (
668
+ "Skills are indexed in the knowledge base. "
669
+ f"Use `search_knowledge(\"{query}\")` to find relevant skills."
670
+ )
671
+
672
+ except Exception as e:
673
+ logger.warning(f"Skill search failed: {e}")
674
+ return f"Skill search failed: {e}. Try `list_indexed_files('skills')` to see all skills."
675
+
676
+ async def get_skill_details(skill_name: str) -> str:
677
+ """
678
+ Get the complete SKILL.md content for a specific builtin skill.
679
+
680
+ Use this to see the full documentation, trigger patterns, usage examples,
681
+ and script entrypoints for a skill.
682
+
683
+ Args:
684
+ skill_name: Name of the skill (e.g., "chart", "pdf", "excel", "powerpoint")
685
+
686
+ Returns:
687
+ Full SKILL.md content with all usage instructions
688
+ """
689
+ source_path = self._get_source_path()
690
+ skill_md = source_path / "skills" / "builtin" / "skills" / skill_name / "SKILL.md"
691
+
692
+ if not skill_md.exists():
693
+ cls = FrameworkHelperAgent
694
+ available_skills = ", ".join(sorted(cls._indexed_skills)) if cls._indexed_skills else "unknown"
695
+ return (
696
+ f"Skill '{skill_name}' not found.\n\n"
697
+ f"Available skills: {available_skills}\n\n"
698
+ "Use `list_indexed_files('skills')` to see all indexed skills."
699
+ )
700
+
701
+ try:
702
+ content = skill_md.read_text(encoding="utf-8", errors="ignore")
703
+ return f"# {skill_name} Skill Documentation\n\n{content}"
704
+ except Exception as e:
705
+ logger.warning(f"Failed to read skill {skill_name}: {e}")
706
+ return f"Failed to read skill '{skill_name}': {e}"
707
+
708
+ async def recommend_skills_for_task(task_description: str) -> str:
709
+ """
710
+ Recommend the best builtin skills for a given agent task.
711
+
712
+ Use this when creating an agent to determine which skills it should have access to.
713
+
714
+ Args:
715
+ task_description: Description of what the agent needs to do
716
+ (e.g., "analyze sales data and create reports")
717
+
718
+ Returns:
719
+ List of recommended skills with justifications
720
+ """
721
+ # Keywords mapping to skills
722
+ skill_keywords = {
723
+ "chart": ["chart", "graph", "plot", "visualization", "bar", "line", "pie"],
724
+ "mermaid": ["diagram", "flowchart", "sequence", "uml", "architecture", "workflow"],
725
+ "table": ["table", "tabular", "grid", "data table"],
726
+ "file": ["file", "read file", "write file", "create file"],
727
+ "unified_pdf": ["pdf", "report", "document pdf", "generate pdf"],
728
+ "file_access": ["download", "file access", "get file"],
729
+ "excel": ["excel", "spreadsheet", "xlsx", "workbook"],
730
+ "drawio": ["drawio", "architecture diagram", "technical diagram"],
731
+ "powerpoint": ["powerpoint", "presentation", "slides", "pptx"],
732
+ "word": ["word", "document", "docx", "text document"],
733
+ "web_search": ["search", "web search", "internet", "lookup", "news"],
734
+ "multimodal": ["image", "audio", "multimodal", "vision", "picture"],
735
+ "image_gen": ["generate image", "create image", "dall-e", "ai image"],
736
+ "form": ["form", "input", "interactive form"],
737
+ "optionsblock": ["options", "buttons", "choices", "select"],
738
+ "image_display": ["show image", "display image"],
739
+ "email_template": ["email", "email template", "html email"],
740
+ "skill_creator": ["create skill", "custom skill", "new skill"],
741
+ "csv": ["csv", "comma separated", "data file"],
742
+ "data_format": ["json", "yaml", "convert", "schema", "validation"],
743
+ "code_format": ["format code", "code formatting", "prettier", "black"],
744
+ }
745
+
746
+ # Find matching skills
747
+ task_lower = task_description.lower()
748
+ recommendations = []
749
+
750
+ for skill_name, keywords in skill_keywords.items():
751
+ if any(keyword in task_lower for keyword in keywords):
752
+ recommendations.append(skill_name)
753
+
754
+ if not recommendations:
755
+ return (
756
+ f"No specific skills identified for: '{task_description}'\n\n"
757
+ "**General recommendation:** Most agents work well with auto-loaded skills.\n"
758
+ "Skills will automatically load when users mention trigger words (e.g., 'chart', 'pdf', 'excel').\n\n"
759
+ "Use `search_skills(query)` or `list_indexed_files('skills')` to explore all 21 builtin skills."
760
+ )
761
+
762
+ # Build detailed recommendations
763
+ result = [f"Recommended skills for '{task_description}':\n"]
764
+
765
+ for skill in recommendations[:5]: # Limit to top 5
766
+ # Get basic info about the skill
767
+ skill_info = await get_skill_details(skill)
768
+ # Extract just the first few lines for summary
769
+ lines = skill_info.split("\n")[:10]
770
+ summary = "\n".join(lines)
771
+ result.append(f"\n**{skill}**")
772
+ result.append(f"{summary}\n")
773
+
774
+ result.append(
775
+ "\n**Note:** Skills auto-load when needed. You don't need to explicitly configure them "
776
+ "unless you want to restrict which skills are available."
777
+ )
778
+
779
+ return "\n".join(result)
780
+
481
781
  # Create FunctionTool instances with async_fn (same pattern as memory tools)
482
782
  return [
483
783
  FunctionTool.from_defaults(
@@ -493,7 +793,7 @@ Complete reference for creating tools and integrating MCP servers:
493
793
  name="list_indexed_files",
494
794
  description=(
495
795
  "List all files indexed in the knowledge base. "
496
- "Filter by type: 'docs', 'examples', 'source', or 'all'."
796
+ "Filter by type: 'docs', 'examples', 'skills', 'source', or 'all'."
497
797
  )
498
798
  ),
499
799
  FunctionTool.from_defaults(
@@ -512,6 +812,30 @@ Complete reference for creating tools and integrating MCP servers:
512
812
  "Use for Python libraries, best practices, or topics not in framework docs."
513
813
  )
514
814
  ),
815
+ FunctionTool.from_defaults(
816
+ async_fn=search_skills,
817
+ name="search_skills",
818
+ description=(
819
+ "Search builtin skills by semantic query or trigger patterns. "
820
+ "Use to find which skills are available for specific tasks."
821
+ )
822
+ ),
823
+ FunctionTool.from_defaults(
824
+ async_fn=get_skill_details,
825
+ name="get_skill_details",
826
+ description=(
827
+ "Get complete SKILL.md documentation for a specific builtin skill. "
828
+ "Shows trigger patterns, usage examples, and script entrypoints."
829
+ )
830
+ ),
831
+ FunctionTool.from_defaults(
832
+ async_fn=recommend_skills_for_task,
833
+ name="recommend_skills_for_task",
834
+ description=(
835
+ "Recommend the best builtin skills for a given agent task. "
836
+ "Use when creating an agent to determine which skills it should have."
837
+ )
838
+ ),
515
839
  ]
516
840
 
517
841
  async def initialize_agent(
@@ -992,12 +1316,16 @@ Complete reference for creating tools and integrating MCP servers:
992
1316
  example_errors = await cls._index_examples_async()
993
1317
  indexing_errors.extend(example_errors)
994
1318
 
1319
+ # Index skill definitions (SKILL.md files)
1320
+ skill_errors = await cls._index_skill_definitions_async()
1321
+ indexing_errors.extend(skill_errors)
1322
+
995
1323
  # Index source files with relationship extraction
996
1324
  source_errors = await cls._index_source_files_async()
997
1325
  indexing_errors.extend(source_errors)
998
1326
 
999
1327
  cls._shared_knowledge_indexed = True
1000
- total = len(cls._indexed_docs) + len(cls._indexed_examples) + len(cls._indexed_source)
1328
+ total = len(cls._indexed_docs) + len(cls._indexed_examples) + len(cls._indexed_skills) + len(cls._indexed_source)
1001
1329
  logger.info(f"[FrameworkHelperAgent] Indexed {total} files successfully")
1002
1330
 
1003
1331
  if indexing_errors:
@@ -1089,6 +1417,58 @@ Complete reference for creating tools and integrating MCP servers:
1089
1417
  logger.info(f"[FrameworkHelperAgent] Indexed {len(cls._indexed_examples)} example files")
1090
1418
  return errors
1091
1419
 
1420
+ @classmethod
1421
+ async def _index_skill_definitions_async(cls) -> list[str]:
1422
+ """
1423
+ Index SKILL.md files from builtin skills directory into Graphiti.
1424
+
1425
+ This indexes all 21 builtin skill definitions with their:
1426
+ - Trigger patterns for discovery
1427
+ - Capabilities and usage instructions
1428
+ - Entrypoint commands (for Skill_Script types)
1429
+ - Examples and metadata
1430
+
1431
+ Returns:
1432
+ List of error messages for files that failed to index
1433
+ """
1434
+ errors: list[str] = []
1435
+ source_path = cls._get_source_path()
1436
+ skills_path = source_path / "skills" / "builtin" / "skills"
1437
+
1438
+ if not skills_path.exists():
1439
+ logger.warning(f"[FrameworkHelperAgent] Skills path not found: {skills_path}")
1440
+ return errors
1441
+
1442
+ # Find all SKILL.md files in subdirectories
1443
+ skill_md_files = list(skills_path.glob("*/SKILL.md"))
1444
+
1445
+ for skill_md in skill_md_files:
1446
+ try:
1447
+ content = skill_md.read_text(encoding="utf-8", errors="ignore")
1448
+ skill_name = skill_md.parent.name
1449
+ cls._indexed_skills.append(skill_name)
1450
+
1451
+ # Index into Graphiti if client is available
1452
+ if cls._shared_graphiti_client is not None:
1453
+ await cls._add_episode_to_graphiti(
1454
+ name=f"skill:{skill_name}",
1455
+ content=content,
1456
+ source_description=f"Skill definition: {skill_name}",
1457
+ chunk_type="skill_definition",
1458
+ )
1459
+ # Rate limit protection: wait between indexing operations
1460
+ await asyncio.sleep(2.0)
1461
+
1462
+ logger.debug(f"[FrameworkHelperAgent] Indexed skill: {skill_name}")
1463
+
1464
+ except Exception as e:
1465
+ error_msg = f"Error indexing skill {skill_md.parent.name}: {e}"
1466
+ logger.error(f"[FrameworkHelperAgent] {error_msg}")
1467
+ errors.append(error_msg)
1468
+
1469
+ logger.info(f"[FrameworkHelperAgent] Indexed {len(cls._indexed_skills)} skill definitions")
1470
+ return errors
1471
+
1092
1472
  @classmethod
1093
1473
  async def _index_source_files_async(cls) -> list[str]:
1094
1474
  """
@@ -1447,7 +1827,7 @@ Complete reference for creating tools and integrating MCP servers:
1447
1827
  @classmethod
1448
1828
  def get_indexed_files_count(cls) -> int:
1449
1829
  """Get total count of indexed files."""
1450
- local_count = len(cls._indexed_docs) + len(cls._indexed_examples) + len(cls._indexed_source)
1830
+ local_count = len(cls._indexed_docs) + len(cls._indexed_examples) + len(cls._indexed_skills) + len(cls._indexed_source)
1451
1831
  # If we have a count from FalkorDB (reused graph), use that if local is empty
1452
1832
  if local_count == 0 and cls._graphiti_episode_count > 0:
1453
1833
  return cls._graphiti_episode_count
@@ -703,6 +703,7 @@ async def lifespan(app: FastAPI):
703
703
  session_storage=session_storage,
704
704
  agent_class=agent_class,
705
705
  agent_manager=agent_manager,
706
+ app=app,
706
707
  )
707
708
  app.include_router(workspace_router)
708
709
  app.state.workspace_config = ws_config
@@ -382,6 +382,18 @@ class WorkspaceClient:
382
382
  """Remove a member from a workspace."""
383
383
  await self._request("DELETE", f"/workspaces/{workspace_id}/members/{member_id}")
384
384
 
385
+ # ------------------------------------------------------------------
386
+ # Typing indicator
387
+ # ------------------------------------------------------------------
388
+
389
+ async def start_writing(self, workspace_id: str) -> None:
390
+ """Signal that the agent started composing a response."""
391
+ await self._request("POST", f"/workspaces/{workspace_id}/writing/start")
392
+
393
+ async def stop_writing(self, workspace_id: str) -> None:
394
+ """Signal that the agent finished composing a response."""
395
+ await self._request("POST", f"/workspaces/{workspace_id}/writing/stop")
396
+
385
397
  # ------------------------------------------------------------------
386
398
  # Lifecycle
387
399
  # ------------------------------------------------------------------