PraisonAI 4.7.6__tar.gz → 4.7.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (564) hide show
  1. {praisonai-4.7.6 → praisonai-4.7.7}/PKG-INFO +11 -10
  2. {praisonai-4.7.6 → praisonai-4.7.7}/PraisonAI.egg-info/PKG-INFO +11 -10
  3. {praisonai-4.7.6 → praisonai-4.7.7}/PraisonAI.egg-info/SOURCES.txt +0 -1
  4. {praisonai-4.7.6 → praisonai-4.7.7}/PraisonAI.egg-info/requires.txt +10 -9
  5. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_async_bridge.py +152 -14
  6. praisonai-4.7.7/praisonai/_lazy_cache.py +95 -0
  7. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/agents_generator.py +16 -9
  8. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/auto.py +92 -29
  9. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/context.py +42 -4
  10. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/recipe.py +10 -2
  11. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/interactive_legacy.py +19 -0
  12. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/subcommand_handlers.py +30 -10
  13. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/workflow_commands.py +61 -32
  14. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/db/adapter.py +86 -69
  15. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/crewai_adapter.py +97 -16
  16. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/observability/hooks.py +59 -23
  17. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/judge.py +13 -3
  18. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/tool_override.py +20 -14
  19. praisonai-4.7.7/praisonai/version.py +1 -0
  20. {praisonai-4.7.6 → praisonai-4.7.7}/pyproject.toml +10 -9
  21. praisonai-4.7.6/praisonai/_lazy_cache.py +0 -51
  22. praisonai-4.7.6/praisonai/standardise/manifest.py +0 -201
  23. praisonai-4.7.6/praisonai/version.py +0 -1
  24. {praisonai-4.7.6 → praisonai-4.7.7}/PraisonAI.egg-info/dependency_links.txt +0 -0
  25. {praisonai-4.7.6 → praisonai-4.7.7}/PraisonAI.egg-info/entry_points.txt +0 -0
  26. {praisonai-4.7.6 → praisonai-4.7.7}/PraisonAI.egg-info/top_level.txt +0 -0
  27. {praisonai-4.7.6 → praisonai-4.7.7}/README.md +0 -0
  28. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/__init__.py +0 -0
  29. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/__main__.py +0 -0
  30. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_api_auth.py +0 -0
  31. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_approval_spec.py +0 -0
  32. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_bootstrap.py +0 -0
  33. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_dev/__init__.py +0 -0
  34. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_dev/api_md.py +0 -0
  35. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_entrypoint.py +0 -0
  36. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_framework_availability.py +0 -0
  37. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_logging.py +0 -0
  38. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_registry.py +0 -0
  39. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_safe_loader.py +0 -0
  40. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/acp/__init__.py +0 -0
  41. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/acp/config.py +0 -0
  42. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/acp/safe_edit.py +0 -0
  43. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/acp/server.py +0 -0
  44. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/acp/session.py +0 -0
  45. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/adapters/__init__.py +0 -0
  46. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/adapters/readers.py +0 -0
  47. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/adapters/rerankers.py +0 -0
  48. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/adapters/retrievers.py +0 -0
  49. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/adapters/vector_stores.py +0 -0
  50. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/agent.py +0 -0
  51. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/agent_scheduler.py +0 -0
  52. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/api/agent_invoke.py +0 -0
  53. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/api/call.py +0 -0
  54. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/app/__init__.py +0 -0
  55. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/app/agentos.py +0 -0
  56. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/async_agent_scheduler.py +0 -0
  57. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/audit/__init__.py +0 -0
  58. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/audit/agent_centric.py +0 -0
  59. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/bots/__init__.py +0 -0
  60. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/browser/__init__.py +0 -0
  61. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/__init__.py +0 -0
  62. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/a2a.py +0 -0
  63. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/assistants.py +0 -0
  64. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/audio.py +0 -0
  65. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/batches.py +0 -0
  66. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/completions.py +0 -0
  67. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/container_files.py +0 -0
  68. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/containers.py +0 -0
  69. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/embeddings.py +0 -0
  70. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/files.py +0 -0
  71. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/fine_tuning.py +0 -0
  72. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/guardrails.py +0 -0
  73. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/images.py +0 -0
  74. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/mcp.py +0 -0
  75. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/messages.py +0 -0
  76. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/moderations.py +0 -0
  77. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/ocr.py +0 -0
  78. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/passthrough.py +0 -0
  79. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/rag.py +0 -0
  80. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/realtime.py +0 -0
  81. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/rerank.py +0 -0
  82. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/responses.py +0 -0
  83. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/search.py +0 -0
  84. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/skills.py +0 -0
  85. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/vector_store_files.py +0 -0
  86. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/vector_stores.py +0 -0
  87. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/videos.py +0 -0
  88. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/claw/__init__.py +0 -0
  89. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/__init__.py +0 -0
  90. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/_paths.py +0 -0
  91. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/_shim.py +0 -0
  92. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/_warnings.py +0 -0
  93. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/app.py +0 -0
  94. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/approval_backend.py +0 -0
  95. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/branding.py +0 -0
  96. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/__init__.py +0 -0
  97. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/_profiling.py +0 -0
  98. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/acp.py +0 -0
  99. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/agent.py +0 -0
  100. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/agents.py +0 -0
  101. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/app.py +0 -0
  102. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/attach.py +0 -0
  103. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/audit.py +0 -0
  104. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/auth.py +0 -0
  105. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/batch.py +0 -0
  106. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/benchmark.py +0 -0
  107. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/bot.py +0 -0
  108. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/browser.py +0 -0
  109. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/call.py +0 -0
  110. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/chat.py +0 -0
  111. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/checkpoint.py +0 -0
  112. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/claw.py +0 -0
  113. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/code.py +0 -0
  114. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/command.py +0 -0
  115. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/commit.py +0 -0
  116. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/completion.py +0 -0
  117. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/config.py +0 -0
  118. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/daemon.py +0 -0
  119. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/dashboard.py +0 -0
  120. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/debug.py +0 -0
  121. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/deploy.py +0 -0
  122. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/diag.py +0 -0
  123. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/docs.py +0 -0
  124. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/doctor.py +0 -0
  125. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/endpoints.py +0 -0
  126. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/environment.py +0 -0
  127. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/eval.py +0 -0
  128. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/examples.py +0 -0
  129. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/flow.py +0 -0
  130. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/gateway.py +0 -0
  131. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/github.py +0 -0
  132. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/hooks.py +0 -0
  133. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/identity.py +0 -0
  134. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/init.py +0 -0
  135. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/kanban.py +0 -0
  136. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/knowledge.py +0 -0
  137. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/langextract.py +0 -0
  138. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/langfuse.py +0 -0
  139. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/loop.py +0 -0
  140. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/lsp.py +0 -0
  141. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/managed.py +0 -0
  142. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/mcp.py +0 -0
  143. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/memory.py +0 -0
  144. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/mint_link.py +0 -0
  145. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/models.py +0 -0
  146. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/n8n.py +0 -0
  147. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/obs.py +0 -0
  148. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/onboard.py +0 -0
  149. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/package.py +0 -0
  150. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/pairing.py +0 -0
  151. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/paths.py +0 -0
  152. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/permissions.py +0 -0
  153. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/plugins.py +0 -0
  154. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/port.py +0 -0
  155. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/profile.py +0 -0
  156. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/publish.py +0 -0
  157. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/rag.py +0 -0
  158. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/realtime.py +0 -0
  159. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/registry.py +0 -0
  160. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/replay.py +0 -0
  161. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/research.py +0 -0
  162. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/retrieval.py +0 -0
  163. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/rules.py +0 -0
  164. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/run.py +0 -0
  165. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/sandbox.py +0 -0
  166. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/schedule.py +0 -0
  167. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/serve.py +0 -0
  168. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/session.py +0 -0
  169. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/setup.py +0 -0
  170. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/skills.py +0 -0
  171. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/standardise.py +0 -0
  172. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/templates.py +0 -0
  173. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/test.py +0 -0
  174. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/todo.py +0 -0
  175. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/tools.py +0 -0
  176. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/traces.py +0 -0
  177. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/tracker.py +0 -0
  178. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/train.py +0 -0
  179. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/ui.py +0 -0
  180. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/up.py +0 -0
  181. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/validate.py +0 -0
  182. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/version.py +0 -0
  183. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/workflow.py +0 -0
  184. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/config_loader.py +0 -0
  185. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/configuration/__init__.py +0 -0
  186. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/configuration/config.schema.json +0 -0
  187. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/execution/__init__.py +0 -0
  188. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/fallback_schema.py +0 -0
  189. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/__init__.py +0 -0
  190. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/acp.py +0 -0
  191. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/agent_scheduler.py +0 -0
  192. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/agent_tools.py +0 -0
  193. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/approval.py +0 -0
  194. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/background.py +0 -0
  195. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/bots_cli.py +0 -0
  196. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/deploy.py +0 -0
  197. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/endpoints.py +0 -0
  198. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/eval.py +0 -0
  199. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/gateway.py +0 -0
  200. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/ollama.py +0 -0
  201. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/onboard.py +0 -0
  202. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/persistence.py +0 -0
  203. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/recipe.py +0 -0
  204. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/recipe_optimizer.py +0 -0
  205. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/registry.py +0 -0
  206. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/sandbox_cli.py +0 -0
  207. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/serve.py +0 -0
  208. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/templates.py +0 -0
  209. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/tools.py +0 -0
  210. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/tui/__init__.py +0 -0
  211. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/tui/app.py +0 -0
  212. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/workflow.py +0 -0
  213. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/interactive/__init__.py +0 -0
  214. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/interactive/async_tui.py +0 -0
  215. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/interactive/config.py +0 -0
  216. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/interactive/core.py +0 -0
  217. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/interactive/events.py +0 -0
  218. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/langfuse_client.py +0 -0
  219. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/__init__.py +0 -0
  220. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/direct_prompt.py +0 -0
  221. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
  222. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
  223. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
  224. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/framework_run.py +0 -0
  225. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
  226. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/main.py +0 -0
  227. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/output/__init__.py +0 -0
  228. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/schedule_cli.py +0 -0
  229. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/schema_provider.py +0 -0
  230. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/session/__init__.py +0 -0
  231. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/state/__init__.py +0 -0
  232. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/ui/__init__.py +0 -0
  233. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/unified_schema.py +0 -0
  234. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/utils/__init__.py +0 -0
  235. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli_backends/__init__.py +0 -0
  236. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/__init__.py +0 -0
  237. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/agent_tools.py +0 -0
  238. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/diff/__init__.py +0 -0
  239. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/diff/diff_strategy.py +0 -0
  240. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/__init__.py +0 -0
  241. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/apply_diff.py +0 -0
  242. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/execute_command.py +0 -0
  243. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/list_files.py +0 -0
  244. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/read_file.py +0 -0
  245. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/search_replace.py +0 -0
  246. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/write_file.py +0 -0
  247. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/utils/__init__.py +0 -0
  248. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/utils/file_utils.py +0 -0
  249. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/utils/ignore_utils.py +0 -0
  250. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/utils/text_utils.py +0 -0
  251. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/config/__init__.py +0 -0
  252. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/config/agents.schema.json +0 -0
  253. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/config/schema.py +0 -0
  254. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/config/validator.py +0 -0
  255. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/__init__.py +0 -0
  256. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/_storage_path.py +0 -0
  257. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/artifact_store.py +0 -0
  258. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/config.py +0 -0
  259. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/history_store.py +0 -0
  260. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/queue.py +0 -0
  261. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/setup.py +0 -0
  262. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/terminal_logger.py +0 -0
  263. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/daemon/__init__.py +0 -0
  264. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/db/__init__.py +0 -0
  265. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/deploy/__init__.py +0 -0
  266. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/__init__.py +0 -0
  267. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/a2u_server.py +0 -0
  268. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/discovery.py +0 -0
  269. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/__init__.py +0 -0
  270. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/a2a.py +0 -0
  271. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/a2u.py +0 -0
  272. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/agents_api.py +0 -0
  273. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/base.py +0 -0
  274. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/mcp.py +0 -0
  275. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/openai_compat.py +0 -0
  276. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/recipe.py +0 -0
  277. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  278. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/registry.py +0 -0
  279. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/server.py +0 -0
  280. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/__init__.py +0 -0
  281. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/client.py +0 -0
  282. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  283. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  284. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/components/__init__.py +0 -0
  285. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/converter.py +0 -0
  286. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/helpers.py +0 -0
  287. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/__init__.py +0 -0
  288. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/_config_builder.py +0 -0
  289. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  290. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/base.py +0 -0
  291. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  292. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/registry.py +0 -0
  293. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/validators.py +0 -0
  294. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/workflow_framework.py +0 -0
  295. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/gateway/__init__.py +0 -0
  296. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/inbuilt_tools/__init__.py +0 -0
  297. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  298. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/inc/__init__.py +0 -0
  299. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/inc/config.py +0 -0
  300. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/inc/models.py +0 -0
  301. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/__init__.py +0 -0
  302. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/__init__.py +0 -0
  303. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  304. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/hooks_query.py +0 -0
  305. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  306. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/schedules_runner.py +0 -0
  307. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/usage_bridge.py +0 -0
  308. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/workflows_service.py +0 -0
  309. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/context_files.py +0 -0
  310. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/gateway_host.py +0 -0
  311. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/host_app.py +0 -0
  312. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/pages/__init__.py +0 -0
  313. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/pages/bot_health.py +0 -0
  314. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/pages/workflow_runs.py +0 -0
  315. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/__init__.py +0 -0
  316. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/_cli_loaders.py +0 -0
  317. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/_session_info.py +0 -0
  318. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/_tool_aliases.py +0 -0
  319. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/backend_registry.py +0 -0
  320. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/base.py +0 -0
  321. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/claude_code.py +0 -0
  322. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/codex_cli.py +0 -0
  323. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/__init__.py +0 -0
  324. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/_sync_base.py +0 -0
  325. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/daytona.py +0 -0
  326. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/docker.py +0 -0
  327. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/e2b.py +0 -0
  328. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/flyio.py +0 -0
  329. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/local.py +0 -0
  330. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/modal_compute.py +0 -0
  331. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/tenki.py +0 -0
  332. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute_managed_agent.py +0 -0
  333. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/cursor_cli.py +0 -0
  334. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/db_session_adapter.py +0 -0
  335. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/gemini_cli.py +0 -0
  336. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/hosted_agent.py +0 -0
  337. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/local_agent.py +0 -0
  338. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/managed_agents.py +0 -0
  339. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/managed_local.py +0 -0
  340. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/registry.py +0 -0
  341. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/sandboxed_agent.py +0 -0
  342. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/__init__.py +0 -0
  343. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/executor.py +0 -0
  344. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/models.py +0 -0
  345. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/path_validation.py +0 -0
  346. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/router.py +0 -0
  347. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/server.py +0 -0
  348. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/store.py +0 -0
  349. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/kanban/__init__.py +0 -0
  350. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/__init__.py +0 -0
  351. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/catalogue.py +0 -0
  352. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/config.py +0 -0
  353. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/credentials.py +0 -0
  354. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/env.py +0 -0
  355. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/gateways.py +0 -0
  356. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/registry.py +0 -0
  357. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/mcp_server/__init__.py +0 -0
  358. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/n8n/__init__.py +0 -0
  359. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/n8n/client.py +0 -0
  360. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/n8n/converter.py +0 -0
  361. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/n8n/preview.py +0 -0
  362. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/n8n/reverse_converter.py +0 -0
  363. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/observability/__init__.py +0 -0
  364. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/observability/langextract.py +0 -0
  365. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/observability/langfuse.py +0 -0
  366. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/__init__.py +0 -0
  367. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/_valkey_client.py +0 -0
  368. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/config.py +0 -0
  369. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/__init__.py +0 -0
  370. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/_ops.py +0 -0
  371. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/_sql_base.py +0 -0
  372. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
  373. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/async_mysql.py +0 -0
  374. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/async_postgres.py +0 -0
  375. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  376. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/base.py +0 -0
  377. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/json_store.py +0 -0
  378. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/mysql.py +0 -0
  379. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/postgres.py +0 -0
  380. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/singlestore.py +0 -0
  381. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/sqlite.py +0 -0
  382. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/supabase.py +0 -0
  383. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/surrealdb.py +0 -0
  384. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  385. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/turso.py +0 -0
  386. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/factory.py +0 -0
  387. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/hooks/__init__.py +0 -0
  388. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  389. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/__init__.py +0 -0
  390. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/base.py +0 -0
  391. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/cassandra.py +0 -0
  392. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/chroma.py +0 -0
  393. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  394. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  395. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/couchbase.py +0 -0
  396. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/lancedb.py +0 -0
  397. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  398. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  399. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  400. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/milvus.py +0 -0
  401. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  402. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/pgvector.py +0 -0
  403. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/pinecone.py +0 -0
  404. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/qdrant.py +0 -0
  405. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  406. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  407. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  408. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  409. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  410. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/weaviate.py +0 -0
  411. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/migrations/__init__.py +0 -0
  412. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/migrations/manager.py +0 -0
  413. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/orchestrator.py +0 -0
  414. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/registry.py +0 -0
  415. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/__init__.py +0 -0
  416. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/async_mongodb.py +0 -0
  417. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/base.py +0 -0
  418. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/dynamodb.py +0 -0
  419. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/firestore.py +0 -0
  420. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/gcs.py +0 -0
  421. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/memory.py +0 -0
  422. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/mongodb.py +0 -0
  423. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/redis.py +0 -0
  424. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/upstash.py +0 -0
  425. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/valkey.py +0 -0
  426. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/profiler.py +0 -0
  427. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/push/__init__.py +0 -0
  428. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/push/client.py +0 -0
  429. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/push/transports.py +0 -0
  430. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/__init__.py +0 -0
  431. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/bridge.py +0 -0
  432. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/core.py +0 -0
  433. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/exceptions.py +0 -0
  434. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/history.py +0 -0
  435. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/models.py +0 -0
  436. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/operations.py +0 -0
  437. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/policy.py +0 -0
  438. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/registry.py +0 -0
  439. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/runtime.py +0 -0
  440. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/security.py +0 -0
  441. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/serve.py +0 -0
  442. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/server.py +0 -0
  443. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/__init__.py +0 -0
  444. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/analyzer.py +0 -0
  445. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/applier.py +0 -0
  446. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/plan.py +0 -0
  447. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/player.py +0 -0
  448. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/reader.py +0 -0
  449. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/storage.py +0 -0
  450. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/writer.py +0 -0
  451. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/runtime/__init__.py +0 -0
  452. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/runtime/__main__.py +0 -0
  453. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/sandbox/__init__.py +0 -0
  454. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/sandbox/_registry.py +0 -0
  455. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/__init__.py +0 -0
  456. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/_base_scheduler.py +0 -0
  457. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/_delivery.py +0 -0
  458. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/_dispatch.py +0 -0
  459. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/agent_scheduler.py +0 -0
  460. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/async_agent_scheduler.py +0 -0
  461. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/base.py +0 -0
  462. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/blueprint_catalogue.py +0 -0
  463. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/condition_gate.py +0 -0
  464. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/daemon_manager.py +0 -0
  465. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/deployment.py +0 -0
  466. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/executor.py +0 -0
  467. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/run_policy.py +0 -0
  468. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/shared.py +0 -0
  469. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/state_manager.py +0 -0
  470. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/suggestion_engine.py +0 -0
  471. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/yaml_loader.py +0 -0
  472. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/security/__init__.py +0 -0
  473. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/security/audit.py +0 -0
  474. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/security/injection.py +0 -0
  475. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/security/protected.py +0 -0
  476. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/setup/__init__.py +0 -0
  477. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/setup/build.py +0 -0
  478. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/setup/post_install.py +0 -0
  479. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/setup/setup_conda_env.py +0 -0
  480. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/setup.py +0 -0
  481. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/__init__.py +0 -0
  482. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/ai_generator.py +0 -0
  483. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/config.py +0 -0
  484. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/dedupe.py +0 -0
  485. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/discovery.py +0 -0
  486. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/drift.py +0 -0
  487. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/engine.py +0 -0
  488. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/example_verifier.py +0 -0
  489. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/models.py +0 -0
  490. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/reports.py +0 -0
  491. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/templates.py +0 -0
  492. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/undo_redo.py +0 -0
  493. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/validator.py +0 -0
  494. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/storage/__init__.py +0 -0
  495. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/storage/dynamodb_adapter.py +0 -0
  496. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/storage/mongodb_adapter.py +0 -0
  497. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/storage/postgresql_adapter.py +0 -0
  498. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/storage/redis_adapter.py +0 -0
  499. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/storage/valkey_adapter.py +0 -0
  500. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/__init__.py +0 -0
  501. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/batch_source.py +0 -0
  502. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/cli_docs_source.py +0 -0
  503. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/discovery.py +0 -0
  504. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/docs_source.py +0 -0
  505. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/examples_source.py +0 -0
  506. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/executor.py +0 -0
  507. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/models.py +0 -0
  508. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/report_viewer.py +0 -0
  509. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/reporter.py +0 -0
  510. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/runner.py +0 -0
  511. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/__init__.py +0 -0
  512. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/_tool_sources.py +0 -0
  513. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/cache.py +0 -0
  514. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/dependency_checker.py +0 -0
  515. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/discovery.py +0 -0
  516. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/loader.py +0 -0
  517. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/registry.py +0 -0
  518. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/resolver.py +0 -0
  519. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/security.py +0 -0
  520. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/tools_doctor.py +0 -0
  521. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tool_registry.py +0 -0
  522. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tool_resolver.py +0 -0
  523. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/__init__.py +0 -0
  524. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/audio.py +0 -0
  525. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/glob_tool.py +0 -0
  526. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/grep_tool.py +0 -0
  527. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/kanban_tools.py +0 -0
  528. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/multiedit.py +0 -0
  529. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/skill_manage.py +0 -0
  530. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/train/__init__.py +0 -0
  531. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/train.py +0 -0
  532. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/train_vision.py +0 -0
  533. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui/_aiui_datastore.py +0 -0
  534. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui/_external_agents.py +0 -0
  535. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui/context.py +0 -0
  536. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui/database_config.py +0 -0
  537. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_agents/__init__.py +0 -0
  538. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_agents/default_app.py +0 -0
  539. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_bot/__init__.py +0 -0
  540. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_bot/default_app.py +0 -0
  541. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_chat/__init__.py +0 -0
  542. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_chat/default_app.py +0 -0
  543. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_dashboard/__init__.py +0 -0
  544. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_dashboard/default_app.py +0 -0
  545. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_realtime/__init__.py +0 -0
  546. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_realtime/default_app.py +0 -0
  547. {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/upload_vision.py +0 -0
  548. {praisonai-4.7.6 → praisonai-4.7.7}/setup.cfg +0 -0
  549. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test.py +0 -0
  550. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_agents_playbook.py +0 -0
  551. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_approval_system.py +0 -0
  552. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_basic.py +0 -0
  553. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_cli_features.py +0 -0
  554. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_custom_tools_fix.py +0 -0
  555. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_double_api_fix.py +0 -0
  556. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_n8n_agent_invoke.py +0 -0
  557. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_n8n_cli_feature.py +0 -0
  558. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_n8n_integration.py +0 -0
  559. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_phase2_refactor.py +0 -0
  560. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_recipe.py +0 -0
  561. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_registry.py +0 -0
  562. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_runner.py +0 -0
  563. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_sandboxed_agent_compatibility.py +0 -0
  564. {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_serve_features.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.7.6
3
+ Version: 4.7.7
4
4
  Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
5
5
  Author: Mervin Praison
6
6
  License: MIT
@@ -11,14 +11,14 @@ Description-Content-Type: text/markdown
11
11
  Requires-Dist: rich>=13.7
12
12
  Requires-Dist: markdown>=3.5
13
13
  Requires-Dist: pyparsing>=3.0.0
14
- Requires-Dist: praisonaiagents>=1.7.4
15
- Requires-Dist: praisonai-code>=0.1.3
16
- Requires-Dist: praisonai-bot>=0.1.3
17
- Requires-Dist: praisonai-train>=0.1.3
18
- Requires-Dist: praisonai-browser>=0.1.3
19
- Requires-Dist: praisonai-mcp>=0.1.5
20
- Requires-Dist: praisonai-sandbox>=0.1.3
21
- Requires-Dist: praisonai-deploy>=0.1.3
14
+ Requires-Dist: praisonaiagents>=1.7.5
15
+ Requires-Dist: praisonai-code>=0.1.4
16
+ Requires-Dist: praisonai-bot>=0.1.4
17
+ Requires-Dist: praisonai-train>=0.1.4
18
+ Requires-Dist: praisonai-browser>=0.1.4
19
+ Requires-Dist: praisonai-mcp>=0.1.6
20
+ Requires-Dist: praisonai-sandbox>=0.1.4
21
+ Requires-Dist: praisonai-deploy>=0.1.4
22
22
  Requires-Dist: python-dotenv>=0.19.0
23
23
  Requires-Dist: litellm<2,>=1.83.14
24
24
  Requires-Dist: PyYAML>=6.0
@@ -129,7 +129,8 @@ Provides-Extra: agno
129
129
  Requires-Dist: praisonai-frameworks[agno]>=0.1.8; extra == "agno"
130
130
  Requires-Dist: praisonai-tools>=0.1.0; extra == "agno"
131
131
  Provides-Extra: google-adk
132
- Requires-Dist: praisonai-frameworks[google-adk]>=0.1.8; extra == "google-adk"
132
+ Requires-Dist: praisonai-frameworks>=0.1.8; extra == "google-adk"
133
+ Requires-Dist: google-adk[extensions]<3,>=2.5; extra == "google-adk"
133
134
  Requires-Dist: praisonai-tools>=0.1.0; extra == "google-adk"
134
135
  Provides-Extra: pydantic-ai
135
136
  Requires-Dist: praisonai-frameworks[pydantic-ai]>=0.1.9; extra == "pydantic-ai"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.7.6
3
+ Version: 4.7.7
4
4
  Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
5
5
  Author: Mervin Praison
6
6
  License: MIT
@@ -11,14 +11,14 @@ Description-Content-Type: text/markdown
11
11
  Requires-Dist: rich>=13.7
12
12
  Requires-Dist: markdown>=3.5
13
13
  Requires-Dist: pyparsing>=3.0.0
14
- Requires-Dist: praisonaiagents>=1.7.4
15
- Requires-Dist: praisonai-code>=0.1.3
16
- Requires-Dist: praisonai-bot>=0.1.3
17
- Requires-Dist: praisonai-train>=0.1.3
18
- Requires-Dist: praisonai-browser>=0.1.3
19
- Requires-Dist: praisonai-mcp>=0.1.5
20
- Requires-Dist: praisonai-sandbox>=0.1.3
21
- Requires-Dist: praisonai-deploy>=0.1.3
14
+ Requires-Dist: praisonaiagents>=1.7.5
15
+ Requires-Dist: praisonai-code>=0.1.4
16
+ Requires-Dist: praisonai-bot>=0.1.4
17
+ Requires-Dist: praisonai-train>=0.1.4
18
+ Requires-Dist: praisonai-browser>=0.1.4
19
+ Requires-Dist: praisonai-mcp>=0.1.6
20
+ Requires-Dist: praisonai-sandbox>=0.1.4
21
+ Requires-Dist: praisonai-deploy>=0.1.4
22
22
  Requires-Dist: python-dotenv>=0.19.0
23
23
  Requires-Dist: litellm<2,>=1.83.14
24
24
  Requires-Dist: PyYAML>=6.0
@@ -129,7 +129,8 @@ Provides-Extra: agno
129
129
  Requires-Dist: praisonai-frameworks[agno]>=0.1.8; extra == "agno"
130
130
  Requires-Dist: praisonai-tools>=0.1.0; extra == "agno"
131
131
  Provides-Extra: google-adk
132
- Requires-Dist: praisonai-frameworks[google-adk]>=0.1.8; extra == "google-adk"
132
+ Requires-Dist: praisonai-frameworks>=0.1.8; extra == "google-adk"
133
+ Requires-Dist: google-adk[extensions]<3,>=2.5; extra == "google-adk"
133
134
  Requires-Dist: praisonai-tools>=0.1.0; extra == "google-adk"
134
135
  Provides-Extra: pydantic-ai
135
136
  Requires-Dist: praisonai-frameworks[pydantic-ai]>=0.1.9; extra == "pydantic-ai"
@@ -486,7 +486,6 @@ praisonai/standardise/discovery.py
486
486
  praisonai/standardise/drift.py
487
487
  praisonai/standardise/engine.py
488
488
  praisonai/standardise/example_verifier.py
489
- praisonai/standardise/manifest.py
490
489
  praisonai/standardise/models.py
491
490
  praisonai/standardise/reports.py
492
491
  praisonai/standardise/templates.py
@@ -1,14 +1,14 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.7.4
5
- praisonai-code>=0.1.3
6
- praisonai-bot>=0.1.3
7
- praisonai-train>=0.1.3
8
- praisonai-browser>=0.1.3
9
- praisonai-mcp>=0.1.5
10
- praisonai-sandbox>=0.1.3
11
- praisonai-deploy>=0.1.3
4
+ praisonaiagents>=1.7.5
5
+ praisonai-code>=0.1.4
6
+ praisonai-bot>=0.1.4
7
+ praisonai-train>=0.1.4
8
+ praisonai-browser>=0.1.4
9
+ praisonai-mcp>=0.1.6
10
+ praisonai-sandbox>=0.1.4
11
+ praisonai-deploy>=0.1.4
12
12
  python-dotenv>=0.19.0
13
13
  litellm<2,>=1.83.14
14
14
  PyYAML>=6.0
@@ -158,7 +158,8 @@ requests>=2.31.0
158
158
  praisonai-bot[gateway]
159
159
 
160
160
  [google-adk]
161
- praisonai-frameworks[google-adk]>=0.1.8
161
+ praisonai-frameworks>=0.1.8
162
+ google-adk[extensions]<3,>=2.5
162
163
  praisonai-tools>=0.1.0
163
164
 
164
165
  [gradio]
@@ -9,15 +9,66 @@ import asyncio
9
9
  import atexit
10
10
  import contextlib
11
11
  import contextvars
12
+ import enum
13
+ import inspect
14
+ import logging
12
15
  import os
13
16
  import threading
17
+ import weakref
14
18
  import concurrent.futures
15
19
  from concurrent.futures import CancelledError as FutureCancelledError, Future
16
- from typing import Awaitable, Iterator, Optional, TypeVar
20
+ from typing import Any, Awaitable, Iterator, Optional, TypeVar
21
+
22
+ logger = logging.getLogger(__name__)
17
23
 
18
24
  T = TypeVar("T")
19
25
 
20
- _DEFAULT_TIMEOUT = float(os.environ.get("PRAISONAI_RUN_SYNC_TIMEOUT", "300"))
26
+
27
+ class _Unset:
28
+ """Sentinel for an *omitted* timeout argument.
29
+
30
+ Distinguishes "caller did not pass a timeout" (resolve the configured
31
+ default via :func:`_default_timeout`) from an explicit ``timeout=None``
32
+ (an intentional request for an *unbounded* wait). The scheduler bridges
33
+ (``integration/bridges/schedules_runner.py``, ``cli/commands/schedule.py``)
34
+ rely on the latter so a long-running claimed job is never cancelled after
35
+ the 300s default.
36
+ """
37
+
38
+ __slots__ = ()
39
+
40
+ def __repr__(self) -> str: # pragma: no cover - debug aid only
41
+ return "<unset>"
42
+
43
+
44
+ _UNSET = _Unset()
45
+
46
+
47
+ def _resolve_timeout(timeout: "float | None | _Unset") -> Optional[float]:
48
+ """Map an omitted timeout to the configured default, preserving explicit None.
49
+
50
+ - ``_UNSET`` (argument omitted) → :func:`_default_timeout` (e.g. 300s).
51
+ - explicit ``None`` → ``None`` (unbounded wait; caller opted in).
52
+ - a number → itself.
53
+ """
54
+ if isinstance(timeout, _Unset):
55
+ return _default_timeout()
56
+ return timeout
57
+
58
+
59
+ def _default_timeout() -> float:
60
+ """Resolve the default run_sync timeout lazily, per call.
61
+
62
+ Read at call time (not import time) so a malformed ``PRAISONAI_RUN_SYNC_TIMEOUT``
63
+ cannot crash ``import praisonai`` with an unrelated ``ValueError``, and so a
64
+ value set after import (dotenv loaded late, per-request reconfig) is honoured.
65
+ Falls back to 300s on a malformed value.
66
+ """
67
+ raw = os.environ.get("PRAISONAI_RUN_SYNC_TIMEOUT", "300")
68
+ try:
69
+ return float(raw)
70
+ except ValueError:
71
+ return 300.0
21
72
 
22
73
  class AsyncBridge:
23
74
  """Per-instance async runner. The module-level `run_sync()` keeps the
@@ -38,6 +89,9 @@ class AsyncBridge:
38
89
  # lock by ``get()``/``submit()`` so ``_spawn_locked()`` can verify the
39
90
  # *caller* (not merely *someone*) owns the lock.
40
91
  self._lock_owner: int | None = None
92
+ # The shared default registers its atexit teardown lazily, on first use,
93
+ # so a bare ``import praisonai`` installs no process-wide hook.
94
+ self._atexit_registered = False
41
95
 
42
96
  def _spawn_locked(self) -> asyncio.AbstractEventLoop:
43
97
  """Create the loop+thread; caller must hold ``self._lock``.
@@ -74,6 +128,13 @@ class AsyncBridge:
74
128
  daemon=True,
75
129
  )
76
130
  self._thread.start()
131
+ # Register the process-exit teardown lazily and only for the shared
132
+ # default. Doing it here (first real use) rather than at import keeps
133
+ # ``import praisonai`` free of an unrequested atexit hook that would
134
+ # compete with hosts like Django/Airflow/Streamlit for shutdown order.
135
+ if not self._atexit_registered and self is globals().get("_BG"):
136
+ atexit.register(self.shutdown)
137
+ self._atexit_registered = True
77
138
  return self._loop
78
139
 
79
140
  def get(self) -> asyncio.AbstractEventLoop:
@@ -94,7 +155,11 @@ class AsyncBridge:
94
155
  finally:
95
156
  self._lock_owner = None
96
157
 
97
- def run_sync(self, coro: Awaitable[T], *, timeout: float | None = _DEFAULT_TIMEOUT) -> T:
158
+ def run_sync(
159
+ self, coro: Awaitable[T], *, timeout: "float | None | _Unset" = _UNSET
160
+ ) -> T:
161
+ # Omitted → configured default; explicit ``None`` → unbounded wait.
162
+ timeout = _resolve_timeout(timeout)
98
163
  try:
99
164
  asyncio.get_running_loop()
100
165
  except RuntimeError:
@@ -245,19 +310,18 @@ def scoped_bridge(bridge: Optional[AsyncBridge] = None) -> Iterator[AsyncBridge]
245
310
  def _shutdown_default() -> None:
246
311
  """Private process-exit hook: tear down the shared default bridge.
247
312
 
248
- Registered with :mod:`atexit`. This is the ONLY sanctioned way the shared
249
- default is shut down; it is deliberately absent from the public module
250
- surface so a single caller cannot terminate async work for the whole
251
- process. Embedders needing explicit lifecycle control own their own
252
- :class:`AsyncBridge` instance.
313
+ Registered with :mod:`atexit` lazily (on the shared default's first real use
314
+ in :meth:`AsyncBridge._spawn_locked`), not at import, so a bare
315
+ ``import praisonai`` installs no process-wide hook. This is the ONLY
316
+ sanctioned way the shared default is shut down; it is deliberately absent
317
+ from the public module surface so a single caller cannot terminate async
318
+ work for the whole process. Embedders needing explicit lifecycle control own
319
+ their own :class:`AsyncBridge` instance.
253
320
  """
254
321
  _BG.shutdown()
255
322
 
256
323
 
257
- atexit.register(_shutdown_default)
258
-
259
-
260
- def run_sync(coro: Awaitable[T], *, timeout: float | None = _DEFAULT_TIMEOUT) -> T:
324
+ def run_sync(coro: Awaitable[T], *, timeout: "float | None | _Unset" = _UNSET) -> T:
261
325
  """
262
326
  Run a coroutine synchronously using the background loop.
263
327
 
@@ -282,7 +346,7 @@ def run_sync(coro: Awaitable[T], *, timeout: float | None = _DEFAULT_TIMEOUT) ->
282
346
  def run_sync_or_offload(
283
347
  coro: Awaitable[T],
284
348
  *,
285
- timeout: float | None = _DEFAULT_TIMEOUT,
349
+ timeout: "float | None | _Unset" = _UNSET,
286
350
  thread_name: str = "praisonai-sync-offload",
287
351
  ) -> T:
288
352
  """Run ``coro`` to completion from *any* calling context.
@@ -303,6 +367,8 @@ def run_sync_or_offload(
303
367
  (it fails loudly inside a loop). Async callers should ``await``
304
368
  :func:`arun_sync_or_offload`, which never blocks the loop.
305
369
  """
370
+ # Omitted → configured default; explicit ``None`` → unbounded wait.
371
+ timeout = _resolve_timeout(timeout)
306
372
  try:
307
373
  asyncio.get_running_loop()
308
374
  except RuntimeError:
@@ -383,7 +449,7 @@ def run_sync_or_offload(
383
449
  async def arun_sync_or_offload(
384
450
  coro: Awaitable[T],
385
451
  *,
386
- timeout: float | None = _DEFAULT_TIMEOUT,
452
+ timeout: "float | None | _Unset" = _UNSET,
387
453
  ) -> T:
388
454
  """Awaitable sibling of :func:`run_sync_or_offload` for async callers.
389
455
 
@@ -397,6 +463,9 @@ async def arun_sync_or_offload(
397
463
  ``asyncio.new_event_loop()``), so a caller-installed :func:`scoped_bridge`
398
464
  binding still wins and per-loop connection pools are preserved.
399
465
  """
466
+ # Omitted → configured default; explicit ``None`` → unbounded wait
467
+ # (``asyncio.wait_for(..., timeout=None)`` waits indefinitely).
468
+ timeout = _resolve_timeout(timeout)
400
469
  fut = _default_bridge().submit(coro)
401
470
  wrapped = asyncio.wrap_future(fut)
402
471
  try:
@@ -404,3 +473,72 @@ async def arun_sync_or_offload(
404
473
  except (asyncio.TimeoutError, asyncio.CancelledError):
405
474
  fut.cancel()
406
475
  raise
476
+
477
+
478
+ class DispatchKind(str, enum.Enum):
479
+ """How a sync caller consumes the result of a (possibly async) store op.
480
+
481
+ Making read-vs-write intent explicit at the *call site* removes the need for
482
+ a name-string allow-list (the old ``_READ_OPS`` frozenset) that silently
483
+ dropped a new read-shaped method's return value under a running loop.
484
+ """
485
+
486
+ READ = "read" #: caller consumes the returned value (never fire-and-forget)
487
+ WRITE = "write" #: caller only cares that it eventually completes
488
+
489
+
490
+ def dispatch_maybe_awaitable(
491
+ value: Any,
492
+ *,
493
+ kind: DispatchKind,
494
+ tracker: "weakref.WeakSet | None" = None,
495
+ tracker_lock: "threading.Lock | None" = None,
496
+ op_name: str = "op",
497
+ ) -> Any:
498
+ """Single owner of "a sync call may return a coroutine; run it correctly".
499
+
500
+ This consolidates the submit/track/callback scaffolding that lifecycle hooks
501
+ would otherwise hand-roll per op. Behaviour:
502
+
503
+ - **Not awaitable**: returned as-is.
504
+ - **No running loop**: block on the shared bridge via :func:`run_sync`.
505
+ - **Running loop + READ**: route through :func:`run_sync_or_offload`, which
506
+ returns the value on a sync path and fails loudly inside a loop instead of
507
+ corrupting a read-modify-write with a silent ``None``.
508
+ - **Running loop + WRITE**: submit to the active bridge as tracked
509
+ fire-and-forget (uuid-keyed store writes are idempotent, so completing them
510
+ slightly later is safe), attach a warning done-callback, and return
511
+ ``None``.
512
+
513
+ Args:
514
+ value: The result of calling the store method (may be a coroutine).
515
+ kind: :class:`DispatchKind.READ` or :class:`DispatchKind.WRITE`.
516
+ tracker: Optional ``WeakSet`` of in-flight futures so a ``close()`` path
517
+ can flush them; only used on the running-loop WRITE branch.
518
+ tracker_lock: Lock guarding ``tracker``.
519
+ op_name: Human-readable op name for log/thread naming.
520
+ """
521
+ if not inspect.isawaitable(value):
522
+ return value
523
+
524
+ try:
525
+ asyncio.get_running_loop()
526
+ except RuntimeError:
527
+ return run_sync(value)
528
+
529
+ if kind is DispatchKind.READ:
530
+ return run_sync_or_offload(value, thread_name=f"praisonai-db-read-{op_name}")
531
+
532
+ fut = current_bridge().submit(value)
533
+ if tracker is not None and tracker_lock is not None:
534
+ with tracker_lock:
535
+ tracker.add(fut)
536
+
537
+ def _on_done(f, name=op_name):
538
+ try:
539
+ f.result()
540
+ except Exception:
541
+ logger.warning("Deferred %s failed", name, exc_info=True)
542
+
543
+ fut.add_done_callback(_on_done)
544
+ return None
@@ -0,0 +1,95 @@
1
+ """Single source of truth for thread-safe lazy loading of optional deps."""
2
+ import threading
3
+ import time
4
+ from typing import Callable, Dict, Optional, Tuple, Type, TypeVar
5
+
6
+ T = TypeVar("T")
7
+
8
+ #: Failures we treat as *transient* — an environment blip that may resolve on
9
+ #: its own (a keyring read racing a plugin install, a half-installed optional
10
+ #: dep, a one-shot config error on first import). These get a cool-down window
11
+ #: before the loader is retried, instead of being memoised for the process
12
+ #: lifetime. Structural failures (``ImportError``/``ValueError``/…) still fail
13
+ #: fast and stay cached.
14
+ _TRANSIENT_EXCEPTIONS: Tuple[Type[BaseException], ...] = (
15
+ OSError,
16
+ ConnectionError,
17
+ TimeoutError,
18
+ )
19
+
20
+
21
+ class LazyCache:
22
+ """Thread-safe double-checked lazy cache. Caches and re-raises terminal loader failures.
23
+
24
+ Structural loader failures are cached permanently so a broken optional dep
25
+ fails fast. Transient failures (see :data:`_TRANSIENT_EXCEPTIONS`) are cached
26
+ only for ``retry_cooldown`` seconds so a long-lived process (``praisonai
27
+ serve``) recovers automatically once the underlying condition clears, mirror-
28
+ ing the cool-down ``PraisonAIDB._init_stores`` already uses. See #4945.
29
+
30
+ Prefer constructing a scoped instance for multi-tenant callers instead of
31
+ sharing the module-level singleton.
32
+ """
33
+
34
+ def __init__(self, retry_cooldown: float = 30.0) -> None:
35
+ self._cache: Dict[str, object] = {}
36
+ self._error_ts: Dict[str, float] = {}
37
+ self._retry_cooldown = retry_cooldown
38
+ self._lock = threading.Lock()
39
+
40
+ def _raise_if_valid_cached_error(self, key: str, cached: BaseException) -> bool:
41
+ """Re-raise a cached error unless its transient cool-down has expired.
42
+
43
+ Returns ``True`` when the cool-down expired and the loader should be
44
+ retried; otherwise raises the cached error.
45
+ """
46
+ if isinstance(cached, _TRANSIENT_EXCEPTIONS):
47
+ if time.monotonic() - self._error_ts.get(key, 0.0) < self._retry_cooldown:
48
+ raise cached
49
+ return True # cool-down expired: retry
50
+ raise cached
51
+
52
+ def get(self, key: str, loader: Callable[[], T]) -> Optional[T]:
53
+ cached = self._cache.get(key, _MISSING)
54
+ if cached is not _MISSING:
55
+ if isinstance(cached, BaseException):
56
+ self._raise_if_valid_cached_error(key, cached) # may raise
57
+ else:
58
+ return cached # type: ignore[return-value]
59
+ with self._lock:
60
+ cached = self._cache.get(key, _MISSING)
61
+ if cached is not _MISSING:
62
+ if isinstance(cached, BaseException):
63
+ self._raise_if_valid_cached_error(key, cached) # may raise
64
+ else:
65
+ return cached # type: ignore[return-value]
66
+ try:
67
+ value: object = loader()
68
+ except (KeyboardInterrupt, SystemExit):
69
+ # Control-flow exceptions must propagate cleanly, never memoised.
70
+ raise
71
+ except BaseException as e:
72
+ # Cache terminal loader failures so a broken optional dep fails
73
+ # fast. Transient failures are timestamped so they expire.
74
+ self._cache[key] = e
75
+ self._error_ts[key] = time.monotonic()
76
+ raise
77
+ self._cache[key] = value
78
+ self._error_ts.pop(key, None)
79
+ return value # type: ignore[return-value]
80
+
81
+ def reset(self, key: Optional[str] = None) -> None:
82
+ with self._lock:
83
+ if key is None:
84
+ self._cache.clear()
85
+ self._error_ts.clear()
86
+ else:
87
+ self._cache.pop(key, None)
88
+ self._error_ts.pop(key, None)
89
+
90
+
91
+ _MISSING = object()
92
+
93
+ _GLOBAL = LazyCache()
94
+ lazy_get = _GLOBAL.get
95
+ lazy_reset = _GLOBAL.reset
@@ -1389,19 +1389,26 @@ class AgentsGenerator:
1389
1389
  self.logger.info(f"Using framework: {prep['adapter'].name}")
1390
1390
  # Own the observability lifecycle here so init and finalize are always
1391
1391
  # paired for every adapter (the CM finalizes on success and error alike).
1392
+ from ._async_bridge import scoped_bridge
1392
1393
  with observability_session(prep['adapter'].name):
1393
1394
  # Run setup INSIDE the session so setup events and any setup/import
1394
1395
  # failure are recorded and finalized, not dropped outside observability.
1395
1396
  self._run_adapter_setup(prep['adapter'])
1396
- return prep['adapter'].run(
1397
- prep['config'],
1398
- self.config_list,
1399
- prep['topic'],
1400
- tools_dict=prep['tools_dict'],
1401
- agent_callback=getattr(self, 'agent_callback', None),
1402
- task_callback=getattr(self, 'task_callback', None),
1403
- cli_config=getattr(self, 'cli_config', None),
1404
- )
1397
+ # Isolate this sync run's sync→async work (adapter internals call
1398
+ # run_sync) onto its own loop+thread so a stuck coroutine in one
1399
+ # agent/tenant does not park the shared default loop for the rest.
1400
+ # Async callers use agenerate_crew_and_kickoff (awaits arun directly)
1401
+ # and are intentionally not wrapped here.
1402
+ with scoped_bridge():
1403
+ return prep['adapter'].run(
1404
+ prep['config'],
1405
+ self.config_list,
1406
+ prep['topic'],
1407
+ tools_dict=prep['tools_dict'],
1408
+ agent_callback=getattr(self, 'agent_callback', None),
1409
+ task_callback=getattr(self, 'task_callback', None),
1410
+ cli_config=getattr(self, 'cli_config', None),
1411
+ )
1405
1412
 
1406
1413
  async def _aload_config(self):
1407
1414
  """Async-safe config loading (blocking file I/O off the event loop)."""