PraisonAI 4.6.83__tar.gz → 4.6.95__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 (904) hide show
  1. {praisonai-4.6.83 → praisonai-4.6.95}/PKG-INFO +11 -2
  2. {praisonai-4.6.83 → praisonai-4.6.95}/PraisonAI.egg-info/PKG-INFO +11 -2
  3. {praisonai-4.6.83 → praisonai-4.6.95}/PraisonAI.egg-info/SOURCES.txt +4 -1
  4. {praisonai-4.6.83 → praisonai-4.6.95}/PraisonAI.egg-info/requires.txt +12 -1
  5. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_framework_availability.py +25 -0
  6. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/agents_generator.py +68 -30
  7. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/__init__.py +14 -0
  8. praisonai-4.6.95/praisonai/bots/_dead_targets.py +274 -0
  9. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_presentation_approval.py +20 -1
  10. praisonai-4.6.95/praisonai/bots/_presentation_approval_backend.py +153 -0
  11. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_presentation_renderer.py +32 -4
  12. praisonai-4.6.95/praisonai/bots/_relay_adapter.py +231 -0
  13. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_resilience.py +94 -0
  14. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/bot.py +45 -1
  15. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/delivery.py +60 -2
  16. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/telegram.py +104 -2
  17. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/tools.py +27 -26
  18. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/approval.py +29 -1
  19. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/runtime_checks.py +30 -4
  20. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/main.py +23 -31
  21. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/config/schema.py +41 -2
  22. praisonai-4.6.95/praisonai/framework_adapters/_config_builder.py +102 -0
  23. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/autogen_adapter.py +18 -29
  24. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/crewai_adapter.py +24 -29
  25. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/praisonai_adapter.py +31 -44
  26. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/registry.py +1 -1
  27. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tool_resolver.py +90 -12
  28. praisonai-4.6.95/praisonai/version.py +1 -0
  29. {praisonai-4.6.83 → praisonai-4.6.95}/pyproject.toml +12 -1
  30. praisonai-4.6.83/praisonai/bots/_auth.py +0 -140
  31. praisonai-4.6.83/praisonai/version.py +0 -1
  32. {praisonai-4.6.83 → praisonai-4.6.95}/PraisonAI.egg-info/dependency_links.txt +0 -0
  33. {praisonai-4.6.83 → praisonai-4.6.95}/PraisonAI.egg-info/entry_points.txt +0 -0
  34. {praisonai-4.6.83 → praisonai-4.6.95}/PraisonAI.egg-info/top_level.txt +0 -0
  35. {praisonai-4.6.83 → praisonai-4.6.95}/README.md +0 -0
  36. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/__init__.py +0 -0
  37. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/__main__.py +0 -0
  38. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_approval_spec.py +0 -0
  39. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_async_bridge.py +0 -0
  40. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/__init__.py +0 -0
  41. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/api_md.py +0 -0
  42. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/__init__.py +0 -0
  43. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/docs_extractor.py +0 -0
  44. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/docs_generator.py +0 -0
  45. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/generator.py +0 -0
  46. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  47. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/python_extractor.py +0 -0
  48. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  49. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/rust_extractor.py +0 -0
  50. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  51. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  52. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  53. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_entrypoint.py +0 -0
  54. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_lazy_cache.py +0 -0
  55. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_lockmap.py +0 -0
  56. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_logging.py +0 -0
  57. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_registry.py +0 -0
  58. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_safe_loader.py +0 -0
  59. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/acp/__init__.py +0 -0
  60. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/acp/config.py +0 -0
  61. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/acp/safe_edit.py +0 -0
  62. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/acp/server.py +0 -0
  63. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/acp/session.py +0 -0
  64. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/adapters/__init__.py +0 -0
  65. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/adapters/readers.py +0 -0
  66. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/adapters/rerankers.py +0 -0
  67. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/adapters/retrievers.py +0 -0
  68. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/adapters/vector_stores.py +0 -0
  69. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/agent.py +0 -0
  70. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/agent_scheduler.py +0 -0
  71. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/api/agent_invoke.py +0 -0
  72. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/api/call.py +0 -0
  73. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/app/__init__.py +0 -0
  74. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/app/agentos.py +0 -0
  75. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/async_agent_scheduler.py +0 -0
  76. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/audit/__init__.py +0 -0
  77. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/audit/agent_centric.py +0 -0
  78. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/auto.py +0 -0
  79. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_ack.py +0 -0
  80. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_admission.py +0 -0
  81. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_approval.py +0 -0
  82. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_approval_base.py +0 -0
  83. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_approval_store.py +0 -0
  84. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_chunk.py +0 -0
  85. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_commands.py +0 -0
  86. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_config_schema.py +0 -0
  87. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_correlation.py +0 -0
  88. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_debounce.py +0 -0
  89. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_defaults.py +0 -0
  90. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_delivery.py +0 -0
  91. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_discord_approval.py +0 -0
  92. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_dlq.py +0 -0
  93. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_durable_adapter.py +0 -0
  94. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_email_utils.py +0 -0
  95. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_http_approval.py +0 -0
  96. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_identity.py +0 -0
  97. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_ingress.py +0 -0
  98. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_media.py +0 -0
  99. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_metrics.py +0 -0
  100. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_mirror.py +0 -0
  101. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_outbound_media.py +0 -0
  102. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_outbound_messenger.py +0 -0
  103. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_outbound_resilience.py +0 -0
  104. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_outbox.py +0 -0
  105. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_pairing_ui.py +0 -0
  106. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_protocol_mixin.py +0 -0
  107. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_rate_limit.py +0 -0
  108. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_registry.py +0 -0
  109. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_reset_policy.py +0 -0
  110. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_run_control.py +0 -0
  111. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_session.py +0 -0
  112. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_slack_approval.py +0 -0
  113. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_status.py +0 -0
  114. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_streaming.py +0 -0
  115. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_telegram_approval.py +0 -0
  116. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_typing.py +0 -0
  117. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_typing_indicator.py +0 -0
  118. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_unknown_user.py +0 -0
  119. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_webhook_approval.py +0 -0
  120. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  121. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/agentmail.py +0 -0
  122. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/botos.py +0 -0
  123. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/discord.py +0 -0
  124. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/email.py +0 -0
  125. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/linear.py +0 -0
  126. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/media.py +0 -0
  127. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/slack.py +0 -0
  128. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/webhook_security.py +0 -0
  129. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/whatsapp.py +0 -0
  130. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/__init__.py +0 -0
  131. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/agent.py +0 -0
  132. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/benchmark.py +0 -0
  133. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/cdp_agent.py +0 -0
  134. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/cdp_utils.py +0 -0
  135. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/cli.py +0 -0
  136. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/diagnostics.py +0 -0
  137. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/launcher.py +0 -0
  138. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/playwright_agent.py +0 -0
  139. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/profiling.py +0 -0
  140. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/protocol.py +0 -0
  141. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/report.py +0 -0
  142. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/server.py +0 -0
  143. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/sessions.py +0 -0
  144. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/video.py +0 -0
  145. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/__init__.py +0 -0
  146. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/a2a.py +0 -0
  147. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/assistants.py +0 -0
  148. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/audio.py +0 -0
  149. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/batches.py +0 -0
  150. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/completions.py +0 -0
  151. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/container_files.py +0 -0
  152. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/containers.py +0 -0
  153. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/embeddings.py +0 -0
  154. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/files.py +0 -0
  155. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/fine_tuning.py +0 -0
  156. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/guardrails.py +0 -0
  157. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/images.py +0 -0
  158. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/mcp.py +0 -0
  159. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/messages.py +0 -0
  160. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/moderations.py +0 -0
  161. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/ocr.py +0 -0
  162. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/passthrough.py +0 -0
  163. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/rag.py +0 -0
  164. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/realtime.py +0 -0
  165. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/rerank.py +0 -0
  166. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/responses.py +0 -0
  167. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/search.py +0 -0
  168. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/skills.py +0 -0
  169. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/vector_store_files.py +0 -0
  170. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/vector_stores.py +0 -0
  171. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/videos.py +0 -0
  172. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/claw/__init__.py +0 -0
  173. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/claw/default_app.py +0 -0
  174. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/__init__.py +0 -0
  175. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/_paths.py +0 -0
  176. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/_warnings.py +0 -0
  177. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/app.py +0 -0
  178. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/approval_backend.py +0 -0
  179. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/branding.py +0 -0
  180. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/__init__.py +0 -0
  181. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/acp.py +0 -0
  182. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/agent.py +0 -0
  183. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/agents.py +0 -0
  184. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/app.py +0 -0
  185. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/attach.py +0 -0
  186. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/audit.py +0 -0
  187. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/auth.py +0 -0
  188. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/batch.py +0 -0
  189. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/benchmark.py +0 -0
  190. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/bot.py +0 -0
  191. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/browser.py +0 -0
  192. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/call.py +0 -0
  193. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/chat.py +0 -0
  194. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/checkpoint.py +0 -0
  195. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/claw.py +0 -0
  196. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/code.py +0 -0
  197. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/command.py +0 -0
  198. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/commit.py +0 -0
  199. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/completion.py +0 -0
  200. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/config.py +0 -0
  201. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/context.py +0 -0
  202. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/daemon.py +0 -0
  203. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/dashboard.py +0 -0
  204. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/debug.py +0 -0
  205. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/deploy.py +0 -0
  206. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/diag.py +0 -0
  207. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/docs.py +0 -0
  208. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/doctor.py +0 -0
  209. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/endpoints.py +0 -0
  210. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/environment.py +0 -0
  211. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/eval.py +0 -0
  212. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/examples.py +0 -0
  213. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/flow.py +0 -0
  214. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/gateway.py +0 -0
  215. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/github.py +0 -0
  216. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/hooks.py +0 -0
  217. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/identity.py +0 -0
  218. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/init.py +0 -0
  219. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/kanban.py +0 -0
  220. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/knowledge.py +0 -0
  221. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/langextract.py +0 -0
  222. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/langfuse.py +0 -0
  223. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/loop.py +0 -0
  224. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/lsp.py +0 -0
  225. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/managed.py +0 -0
  226. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/mcp.py +0 -0
  227. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/memory.py +0 -0
  228. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/mint_link.py +0 -0
  229. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/models.py +0 -0
  230. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/n8n.py +0 -0
  231. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/obs.py +0 -0
  232. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/onboard.py +0 -0
  233. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/package.py +0 -0
  234. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/pairing.py +0 -0
  235. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/paths.py +0 -0
  236. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/permissions.py +0 -0
  237. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/plugins.py +0 -0
  238. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/port.py +0 -0
  239. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/profile.py +0 -0
  240. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/publish.py +0 -0
  241. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/rag.py +0 -0
  242. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/realtime.py +0 -0
  243. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/recipe.py +0 -0
  244. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/registry.py +0 -0
  245. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/replay.py +0 -0
  246. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/research.py +0 -0
  247. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/retrieval.py +0 -0
  248. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/rules.py +0 -0
  249. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/run.py +0 -0
  250. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/sandbox.py +0 -0
  251. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/schedule.py +0 -0
  252. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/serve.py +0 -0
  253. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/session.py +0 -0
  254. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/setup.py +0 -0
  255. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/skills.py +0 -0
  256. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/standardise.py +0 -0
  257. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/templates.py +0 -0
  258. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/test.py +0 -0
  259. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/todo.py +0 -0
  260. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/traces.py +0 -0
  261. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/tracker.py +0 -0
  262. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/train.py +0 -0
  263. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/ui.py +0 -0
  264. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/up.py +0 -0
  265. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/validate.py +0 -0
  266. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/version.py +0 -0
  267. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/workflow.py +0 -0
  268. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/config_loader.py +0 -0
  269. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/__init__.py +0 -0
  270. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/config.schema.json +0 -0
  271. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/credentials.py +0 -0
  272. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/loader.py +0 -0
  273. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/model_resolver.py +0 -0
  274. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/oauth.py +0 -0
  275. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/paths.py +0 -0
  276. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/resolver.py +0 -0
  277. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/schema.py +0 -0
  278. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/execution/__init__.py +0 -0
  279. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/execution/core.py +0 -0
  280. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/execution/profiler.py +0 -0
  281. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/execution/request.py +0 -0
  282. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/execution/result.py +0 -0
  283. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/fallback_schema.py +0 -0
  284. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/__init__.py +0 -0
  285. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/_endpoint_registry.py +0 -0
  286. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/_search_registry.py +0 -0
  287. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/acp.py +0 -0
  288. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/action_orchestrator.py +0 -0
  289. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/agent_scheduler.py +0 -0
  290. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/agent_tools.py +0 -0
  291. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/agents.py +0 -0
  292. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/at_mentions.py +0 -0
  293. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/audit_cli.py +0 -0
  294. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/auto_memory.py +0 -0
  295. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/auto_mode.py +0 -0
  296. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/autonomy_mode.py +0 -0
  297. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/background.py +0 -0
  298. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/base.py +0 -0
  299. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/benchmark.py +0 -0
  300. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/bots_cli.py +0 -0
  301. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/capabilities.py +0 -0
  302. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/checkpoints.py +0 -0
  303. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/cli_profiler.py +0 -0
  304. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/code_intelligence.py +0 -0
  305. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/compaction.py +0 -0
  306. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/compare.py +0 -0
  307. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/config_hierarchy.py +0 -0
  308. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/context_manager.py +0 -0
  309. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/cost_tracker.py +0 -0
  310. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/csv_test_runner.py +0 -0
  311. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/custom_definitions.py +0 -0
  312. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/debug.py +0 -0
  313. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/deploy.py +0 -0
  314. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/diag.py +0 -0
  315. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/display_jsonl.py +0 -0
  316. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/__init__.py +0 -0
  317. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  318. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  319. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  320. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  321. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  322. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  323. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/gateway_checks.py +0 -0
  324. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  325. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  326. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  327. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  328. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  329. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
  330. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  331. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  332. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/runtime_migration_checks.py +0 -0
  333. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  334. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  335. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  336. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  337. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/engine.py +0 -0
  338. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/formatters.py +0 -0
  339. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/handler.py +0 -0
  340. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/models.py +0 -0
  341. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/registry.py +0 -0
  342. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/endpoints.py +0 -0
  343. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/eval.py +0 -0
  344. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/examples.py +0 -0
  345. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/external_agents.py +0 -0
  346. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/fast_context.py +0 -0
  347. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/file_history.py +0 -0
  348. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/flow_display.py +0 -0
  349. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/gateway.py +0 -0
  350. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/git_attribution.py +0 -0
  351. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/git_integration.py +0 -0
  352. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/guardrail.py +0 -0
  353. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/handoff.py +0 -0
  354. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/hooks.py +0 -0
  355. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/hybrid_workflow.py +0 -0
  356. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/image.py +0 -0
  357. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/interactive_core_headless.py +0 -0
  358. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/interactive_runtime.py +0 -0
  359. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/interactive_test_harness.py +0 -0
  360. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/interactive_tools.py +0 -0
  361. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/interactive_tui.py +0 -0
  362. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/job_workflow.py +0 -0
  363. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/jobs.py +0 -0
  364. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/knowledge.py +0 -0
  365. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/knowledge_cli.py +0 -0
  366. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/lite.py +0 -0
  367. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/logs.py +0 -0
  368. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/lsp_cli.py +0 -0
  369. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  370. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/mcp.py +0 -0
  371. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/message_queue.py +0 -0
  372. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/metrics.py +0 -0
  373. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/migrate.py +0 -0
  374. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/migration_flow.py +0 -0
  375. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/migration_spec.py +0 -0
  376. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/n8n.py +0 -0
  377. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/observability.py +0 -0
  378. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/ollama.py +0 -0
  379. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/onboard.py +0 -0
  380. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/output_modes.py +0 -0
  381. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/output_style.py +0 -0
  382. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/package.py +0 -0
  383. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/performance.py +0 -0
  384. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/persistence.py +0 -0
  385. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/profiler/__init__.py +0 -0
  386. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/profiler/core.py +0 -0
  387. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/profiler/optimizations.py +0 -0
  388. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/profiler/suite.py +0 -0
  389. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/queue/__init__.py +0 -0
  390. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/queue/manager.py +0 -0
  391. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/queue/models.py +0 -0
  392. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/queue/persistence.py +0 -0
  393. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/queue/scheduler.py +0 -0
  394. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/queue/worker.py +0 -0
  395. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/recipe.py +0 -0
  396. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/recipe_creator.py +0 -0
  397. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/recipe_optimizer.py +0 -0
  398. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/recipe_prompts.py +0 -0
  399. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/registry.py +0 -0
  400. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/repo_map.py +0 -0
  401. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/router.py +0 -0
  402. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/safe_shell.py +0 -0
  403. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/sandbox_cli.py +0 -0
  404. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/sandbox_executor.py +0 -0
  405. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/sdk_knowledge.py +0 -0
  406. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/serve.py +0 -0
  407. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/session.py +0 -0
  408. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/session_checkpoints.py +0 -0
  409. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/setup/__init__.py +0 -0
  410. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/setup/handler.py +0 -0
  411. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/setup/templates.py +0 -0
  412. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/skills.py +0 -0
  413. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/slash_commands.py +0 -0
  414. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/telemetry.py +0 -0
  415. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/templates.py +0 -0
  416. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/thinking.py +0 -0
  417. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/todo.py +0 -0
  418. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tools.py +0 -0
  419. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/__init__.py +0 -0
  420. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/app.py +0 -0
  421. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/cli.py +0 -0
  422. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/config.py +0 -0
  423. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/debug.py +0 -0
  424. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/events.py +0 -0
  425. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/mock_provider.py +0 -0
  426. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/orchestrator.py +0 -0
  427. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  428. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/screens/help.py +0 -0
  429. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/screens/main.py +0 -0
  430. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/screens/queue.py +0 -0
  431. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/screens/session.py +0 -0
  432. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/screens/settings.py +0 -0
  433. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/session_store.py +0 -0
  434. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  435. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  436. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  437. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  438. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  439. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  440. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/status.py +0 -0
  441. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  442. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/wizard.py +0 -0
  443. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/workflow.py +0 -0
  444. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/yaml_utils.py +0 -0
  445. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/__init__.py +0 -0
  446. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/async_tui.py +0 -0
  447. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/config.py +0 -0
  448. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/core.py +0 -0
  449. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/events.py +0 -0
  450. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  451. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  452. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  453. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/praison_io.py +0 -0
  454. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/repl.py +0 -0
  455. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/split_tui.py +0 -0
  456. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/tui_app.py +0 -0
  457. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/langfuse_client.py +0 -0
  458. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/output/__init__.py +0 -0
  459. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/output/console.py +0 -0
  460. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/output/event_bridge.py +0 -0
  461. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/schedule_cli.py +0 -0
  462. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/schema_provider.py +0 -0
  463. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/session/__init__.py +0 -0
  464. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/session/resume.py +0 -0
  465. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/session/unified.py +0 -0
  466. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/state/__init__.py +0 -0
  467. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/state/identifiers.py +0 -0
  468. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/state/project_sessions.py +0 -0
  469. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/state/sessions.py +0 -0
  470. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/ui/__init__.py +0 -0
  471. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/ui/config.py +0 -0
  472. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/ui/events.py +0 -0
  473. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/ui/mg_backend.py +0 -0
  474. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/ui/plain.py +0 -0
  475. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/ui/rich_backend.py +0 -0
  476. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/unified_schema.py +0 -0
  477. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/utils/env_utils.py +0 -0
  478. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/utils/project.py +0 -0
  479. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli_backends/__init__.py +0 -0
  480. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli_backends/claude.py +0 -0
  481. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli_backends/registry.py +0 -0
  482. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/__init__.py +0 -0
  483. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/agent_tools.py +0 -0
  484. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/diff/__init__.py +0 -0
  485. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/diff/diff_strategy.py +0 -0
  486. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/__init__.py +0 -0
  487. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/apply_diff.py +0 -0
  488. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/execute_command.py +0 -0
  489. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/list_files.py +0 -0
  490. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/read_file.py +0 -0
  491. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/search_replace.py +0 -0
  492. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/write_file.py +0 -0
  493. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/utils/__init__.py +0 -0
  494. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/utils/file_utils.py +0 -0
  495. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/utils/ignore_utils.py +0 -0
  496. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/utils/text_utils.py +0 -0
  497. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/config/__init__.py +0 -0
  498. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/config/validator.py +0 -0
  499. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/__init__.py +0 -0
  500. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/_storage_path.py +0 -0
  501. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/artifact_store.py +0 -0
  502. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/config.py +0 -0
  503. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/history_store.py +0 -0
  504. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/queue.py +0 -0
  505. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/setup.py +0 -0
  506. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/terminal_logger.py +0 -0
  507. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/daemon/__init__.py +0 -0
  508. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/daemon/launchd.py +0 -0
  509. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/daemon/systemd.py +0 -0
  510. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/daemon/windows.py +0 -0
  511. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/db/__init__.py +0 -0
  512. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/db/adapter.py +0 -0
  513. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/__init__.py +0 -0
  514. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/api.py +0 -0
  515. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/docker.py +0 -0
  516. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/doctor.py +0 -0
  517. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/main.py +0 -0
  518. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/models.py +0 -0
  519. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/providers/__init__.py +0 -0
  520. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/providers/_registry.py +0 -0
  521. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/providers/aws.py +0 -0
  522. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/providers/azure.py +0 -0
  523. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/providers/base.py +0 -0
  524. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/providers/gcp.py +0 -0
  525. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/schema.py +0 -0
  526. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/__init__.py +0 -0
  527. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/classifier.py +0 -0
  528. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/executor.py +0 -0
  529. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/extractor.py +0 -0
  530. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/reporter.py +0 -0
  531. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/runner.py +0 -0
  532. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/workspace.py +0 -0
  533. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/__init__.py +0 -0
  534. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/a2u_server.py +0 -0
  535. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/discovery.py +0 -0
  536. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/__init__.py +0 -0
  537. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/a2a.py +0 -0
  538. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/a2u.py +0 -0
  539. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/agents_api.py +0 -0
  540. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/base.py +0 -0
  541. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/mcp.py +0 -0
  542. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/openai_compat.py +0 -0
  543. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/recipe.py +0 -0
  544. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  545. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/registry.py +0 -0
  546. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/server.py +0 -0
  547. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/__init__.py +0 -0
  548. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/client.py +0 -0
  549. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  550. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  551. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/components/__init__.py +0 -0
  552. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/converter.py +0 -0
  553. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/helpers.py +0 -0
  554. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/__init__.py +0 -0
  555. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/base.py +0 -0
  556. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/validators.py +0 -0
  557. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/workflow_framework.py +0 -0
  558. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/__init__.py +0 -0
  559. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/auth.py +0 -0
  560. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/client.py +0 -0
  561. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/cookie_auth.py +0 -0
  562. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/exec_approval.py +0 -0
  563. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/forensics.py +0 -0
  564. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/gateway_approval.py +0 -0
  565. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/health_monitor.py +0 -0
  566. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/home_channels.py +0 -0
  567. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/kanban_dispatcher.py +0 -0
  568. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/magic_link.py +0 -0
  569. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/origin_check.py +0 -0
  570. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/pairing.py +0 -0
  571. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/pairing_routes.py +0 -0
  572. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/port_utils.py +0 -0
  573. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/push_channels.py +0 -0
  574. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/push_delivery.py +0 -0
  575. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/push_polling.py +0 -0
  576. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/push_presence.py +0 -0
  577. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/rate_limiter.py +0 -0
  578. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/redis_pubsub.py +0 -0
  579. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/server.py +0 -0
  580. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/supervisor.py +0 -0
  581. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/unicode_utils.py +0 -0
  582. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/inbuilt_tools/__init__.py +0 -0
  583. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  584. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/inc/__init__.py +0 -0
  585. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/inc/config.py +0 -0
  586. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/inc/models.py +0 -0
  587. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/__init__.py +0 -0
  588. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/__init__.py +0 -0
  589. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  590. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/hooks_query.py +0 -0
  591. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  592. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/schedules_runner.py +0 -0
  593. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/usage_bridge.py +0 -0
  594. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/workflows_service.py +0 -0
  595. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/context_files.py +0 -0
  596. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/gateway_host.py +0 -0
  597. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/host_app.py +0 -0
  598. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/pages/__init__.py +0 -0
  599. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/pages/bot_health.py +0 -0
  600. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/pages/workflow_runs.py +0 -0
  601. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/__init__.py +0 -0
  602. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/_session_info.py +0 -0
  603. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/_tool_aliases.py +0 -0
  604. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/_unified_registry.py +0 -0
  605. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/backend_registry.py +0 -0
  606. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/base.py +0 -0
  607. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/claude_code.py +0 -0
  608. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/codex_cli.py +0 -0
  609. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/__init__.py +0 -0
  610. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/daytona.py +0 -0
  611. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/docker.py +0 -0
  612. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/e2b.py +0 -0
  613. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/flyio.py +0 -0
  614. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/local.py +0 -0
  615. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/modal_compute.py +0 -0
  616. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/cursor_cli.py +0 -0
  617. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/db_session_adapter.py +0 -0
  618. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/gemini_cli.py +0 -0
  619. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/hosted_agent.py +0 -0
  620. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/local_agent.py +0 -0
  621. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/managed_agents.py +0 -0
  622. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/managed_local.py +0 -0
  623. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/registry.py +0 -0
  624. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/sandboxed_agent.py +0 -0
  625. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/__init__.py +0 -0
  626. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/executor.py +0 -0
  627. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/models.py +0 -0
  628. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/path_validation.py +0 -0
  629. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/router.py +0 -0
  630. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/server.py +0 -0
  631. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/store.py +0 -0
  632. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/kanban/__init__.py +0 -0
  633. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/kanban/models.py +0 -0
  634. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/kanban/paths.py +0 -0
  635. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/kanban/sqlite_store.py +0 -0
  636. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/__init__.py +0 -0
  637. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/catalogue.py +0 -0
  638. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/config.py +0 -0
  639. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/credentials.py +0 -0
  640. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/env.py +0 -0
  641. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/gateways.py +0 -0
  642. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/registry.py +0 -0
  643. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/__init__.py +0 -0
  644. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/__init__.py +0 -0
  645. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/agents.py +0 -0
  646. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  647. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  648. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  649. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  650. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/memory.py +0 -0
  651. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/prompts.py +0 -0
  652. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/resources.py +0 -0
  653. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  654. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/auth/__init__.py +0 -0
  655. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/auth/api_key.py +0 -0
  656. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/auth/oauth.py +0 -0
  657. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/auth/oidc.py +0 -0
  658. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/auth/scopes.py +0 -0
  659. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/cli.py +0 -0
  660. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/elicitation.py +0 -0
  661. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/icons.py +0 -0
  662. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/recipe_adapter.py +0 -0
  663. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/recipe_cli.py +0 -0
  664. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/registry.py +0 -0
  665. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/sampling.py +0 -0
  666. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/server.py +0 -0
  667. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/tasks.py +0 -0
  668. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/tool_index.py +0 -0
  669. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/transports/__init__.py +0 -0
  670. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/transports/http_stream.py +0 -0
  671. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/transports/stdio.py +0 -0
  672. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/n8n/__init__.py +0 -0
  673. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/n8n/client.py +0 -0
  674. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/n8n/converter.py +0 -0
  675. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/n8n/preview.py +0 -0
  676. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/n8n/reverse_converter.py +0 -0
  677. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/observability/__init__.py +0 -0
  678. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/observability/hooks.py +0 -0
  679. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/observability/langextract.py +0 -0
  680. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/observability/langfuse.py +0 -0
  681. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/__init__.py +0 -0
  682. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/_valkey_client.py +0 -0
  683. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/config.py +0 -0
  684. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/__init__.py +0 -0
  685. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/_sql_base.py +0 -0
  686. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
  687. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/async_mysql.py +0 -0
  688. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/async_postgres.py +0 -0
  689. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  690. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/base.py +0 -0
  691. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/json_store.py +0 -0
  692. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/mysql.py +0 -0
  693. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/postgres.py +0 -0
  694. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/singlestore.py +0 -0
  695. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/sqlite.py +0 -0
  696. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/supabase.py +0 -0
  697. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/surrealdb.py +0 -0
  698. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  699. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/turso.py +0 -0
  700. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/factory.py +0 -0
  701. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/hooks/__init__.py +0 -0
  702. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  703. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/__init__.py +0 -0
  704. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/base.py +0 -0
  705. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/cassandra.py +0 -0
  706. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/chroma.py +0 -0
  707. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  708. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  709. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/couchbase.py +0 -0
  710. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/lancedb.py +0 -0
  711. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  712. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  713. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  714. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/milvus.py +0 -0
  715. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  716. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/pgvector.py +0 -0
  717. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/pinecone.py +0 -0
  718. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/qdrant.py +0 -0
  719. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  720. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  721. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  722. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  723. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  724. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/weaviate.py +0 -0
  725. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/migrations/__init__.py +0 -0
  726. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/migrations/manager.py +0 -0
  727. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/orchestrator.py +0 -0
  728. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/registry.py +0 -0
  729. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/__init__.py +0 -0
  730. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/async_mongodb.py +0 -0
  731. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/base.py +0 -0
  732. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/dynamodb.py +0 -0
  733. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/firestore.py +0 -0
  734. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/gcs.py +0 -0
  735. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/memory.py +0 -0
  736. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/mongodb.py +0 -0
  737. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/redis.py +0 -0
  738. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/upstash.py +0 -0
  739. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/valkey.py +0 -0
  740. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/tests/__init__.py +0 -0
  741. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/tests/test_all_backends.py +0 -0
  742. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  743. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/profiler.py +0 -0
  744. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/push/__init__.py +0 -0
  745. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/push/client.py +0 -0
  746. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/push/transports.py +0 -0
  747. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/__init__.py +0 -0
  748. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/bridge.py +0 -0
  749. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/core.py +0 -0
  750. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/exceptions.py +0 -0
  751. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/history.py +0 -0
  752. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/models.py +0 -0
  753. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/operations.py +0 -0
  754. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/policy.py +0 -0
  755. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/registry.py +0 -0
  756. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/runtime.py +0 -0
  757. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/security.py +0 -0
  758. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/serve.py +0 -0
  759. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/server.py +0 -0
  760. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/__init__.py +0 -0
  761. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/analyzer.py +0 -0
  762. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/applier.py +0 -0
  763. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/judge.py +0 -0
  764. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/plan.py +0 -0
  765. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/player.py +0 -0
  766. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/reader.py +0 -0
  767. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/storage.py +0 -0
  768. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/writer.py +0 -0
  769. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/runtime/__init__.py +0 -0
  770. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/runtime/__main__.py +0 -0
  771. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/runtime/client.py +0 -0
  772. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/runtime/descriptor.py +0 -0
  773. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/runtime/server.py +0 -0
  774. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/__init__.py +0 -0
  775. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/_compat.py +0 -0
  776. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/_registry.py +0 -0
  777. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/_shell.py +0 -0
  778. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/daytona.py +0 -0
  779. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/docker.py +0 -0
  780. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/e2b.py +0 -0
  781. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/modal.py +0 -0
  782. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/sandlock.py +0 -0
  783. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/ssh.py +0 -0
  784. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/subprocess.py +0 -0
  785. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/__init__.py +0 -0
  786. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/_base_scheduler.py +0 -0
  787. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/_dispatch.py +0 -0
  788. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/agent_scheduler.py +0 -0
  789. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/async_agent_scheduler.py +0 -0
  790. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/base.py +0 -0
  791. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/blueprint_catalogue.py +0 -0
  792. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/condition_gate.py +0 -0
  793. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/daemon_manager.py +0 -0
  794. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/deployment.py +0 -0
  795. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/executor.py +0 -0
  796. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/run_policy.py +0 -0
  797. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/shared.py +0 -0
  798. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/state_manager.py +0 -0
  799. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/suggestion_engine.py +0 -0
  800. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/yaml_loader.py +0 -0
  801. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/security/__init__.py +0 -0
  802. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/security/audit.py +0 -0
  803. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/security/injection.py +0 -0
  804. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/security/protected.py +0 -0
  805. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/setup/__init__.py +0 -0
  806. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/setup/build.py +0 -0
  807. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/setup/post_install.py +0 -0
  808. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/setup/setup_conda_env.py +0 -0
  809. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/setup.py +0 -0
  810. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/__init__.py +0 -0
  811. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/ai_generator.py +0 -0
  812. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/config.py +0 -0
  813. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/dedupe.py +0 -0
  814. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/discovery.py +0 -0
  815. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/drift.py +0 -0
  816. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/engine.py +0 -0
  817. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/enhanced_templates.py +0 -0
  818. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/example_verifier.py +0 -0
  819. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/manifest.py +0 -0
  820. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/models.py +0 -0
  821. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/reports.py +0 -0
  822. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/templates.py +0 -0
  823. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/undo_redo.py +0 -0
  824. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/validator.py +0 -0
  825. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/storage/__init__.py +0 -0
  826. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/storage/dynamodb_adapter.py +0 -0
  827. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/storage/mongodb_adapter.py +0 -0
  828. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/storage/postgresql_adapter.py +0 -0
  829. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/storage/redis_adapter.py +0 -0
  830. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/storage/valkey_adapter.py +0 -0
  831. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/__init__.py +0 -0
  832. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/batch_source.py +0 -0
  833. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/cli_docs_source.py +0 -0
  834. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/discovery.py +0 -0
  835. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/docs_source.py +0 -0
  836. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/examples_source.py +0 -0
  837. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/executor.py +0 -0
  838. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/models.py +0 -0
  839. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/report_viewer.py +0 -0
  840. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/reporter.py +0 -0
  841. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/runner.py +0 -0
  842. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/__init__.py +0 -0
  843. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/cache.py +0 -0
  844. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/dependency_checker.py +0 -0
  845. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/discovery.py +0 -0
  846. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/loader.py +0 -0
  847. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/registry.py +0 -0
  848. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/resolver.py +0 -0
  849. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/security.py +0 -0
  850. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/tool_override.py +0 -0
  851. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/tools_doctor.py +0 -0
  852. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tool_registry.py +0 -0
  853. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/__init__.py +0 -0
  854. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/audio.py +0 -0
  855. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/glob_tool.py +0 -0
  856. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/grep_tool.py +0 -0
  857. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/kanban_tools.py +0 -0
  858. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/multiedit.py +0 -0
  859. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/skill_manage.py +0 -0
  860. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/__init__.py +0 -0
  861. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/_ollama.py +0 -0
  862. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/agents/__init__.py +0 -0
  863. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/agents/grader.py +0 -0
  864. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/agents/hook.py +0 -0
  865. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/agents/models.py +0 -0
  866. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/agents/orchestrator.py +0 -0
  867. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/agents/storage.py +0 -0
  868. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/llm/__init__.py +0 -0
  869. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/llm/trainer.py +0 -0
  870. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train.py +0 -0
  871. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train_vision.py +0 -0
  872. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui/_aiui_datastore.py +0 -0
  873. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui/_external_agents.py +0 -0
  874. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui/callbacks.py +0 -0
  875. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui/components/aicoder.py +0 -0
  876. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui/context.py +0 -0
  877. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui/database_config.py +0 -0
  878. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_agents/__init__.py +0 -0
  879. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_agents/default_app.py +0 -0
  880. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_bot/__init__.py +0 -0
  881. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_bot/default_app.py +0 -0
  882. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_chat/__init__.py +0 -0
  883. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_chat/default_app.py +0 -0
  884. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_dashboard/default_app.py +0 -0
  885. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_realtime/__init__.py +0 -0
  886. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_realtime/default_app.py +0 -0
  887. {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/upload_vision.py +0 -0
  888. {praisonai-4.6.83 → praisonai-4.6.95}/setup.cfg +0 -0
  889. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test.py +0 -0
  890. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_agents_playbook.py +0 -0
  891. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_approval_system.py +0 -0
  892. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_basic.py +0 -0
  893. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_cli_features.py +0 -0
  894. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_custom_tools_fix.py +0 -0
  895. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_double_api_fix.py +0 -0
  896. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_n8n_agent_invoke.py +0 -0
  897. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_n8n_cli_feature.py +0 -0
  898. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_n8n_integration.py +0 -0
  899. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_phase2_refactor.py +0 -0
  900. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_recipe.py +0 -0
  901. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_registry.py +0 -0
  902. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_runner.py +0 -0
  903. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_sandboxed_agent_compatibility.py +0 -0
  904. {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_serve_features.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.83
3
+ Version: 4.6.95
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,7 +11,7 @@ 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.6.90
14
+ Requires-Dist: praisonaiagents>=1.6.95
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<2,>=1.83.14
17
17
  Requires-Dist: PyYAML>=6.0
@@ -93,6 +93,15 @@ Requires-Dist: autogen-ext[openai]>=0.4.0; extra == "autogen-v4"
93
93
  Requires-Dist: autogen-core>=0.4.0; extra == "autogen-v4"
94
94
  Requires-Dist: praisonai-tools>=0.1.0; extra == "autogen-v4"
95
95
  Requires-Dist: crewai; extra == "autogen-v4"
96
+ Provides-Extra: langgraph
97
+ Requires-Dist: langgraph<2,>=0.2.0; extra == "langgraph"
98
+ Requires-Dist: langgraph-prebuilt<2,>=0.2.0; extra == "langgraph"
99
+ Requires-Dist: langchain-core<2,>=0.3.0; extra == "langgraph"
100
+ Requires-Dist: langchain-openai<2,>=0.2.0; extra == "langgraph"
101
+ Requires-Dist: praisonai-tools>=0.1.0; extra == "langgraph"
102
+ Provides-Extra: openai-agents
103
+ Requires-Dist: praisonai-frameworks[openai-agents]>=0.1.3; extra == "openai-agents"
104
+ Requires-Dist: praisonai-tools>=0.1.0; extra == "openai-agents"
96
105
  Provides-Extra: acp
97
106
  Requires-Dist: agent-client-protocol>=0.7.0; extra == "acp"
98
107
  Provides-Extra: flow
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.83
3
+ Version: 4.6.95
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,7 +11,7 @@ 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.6.90
14
+ Requires-Dist: praisonaiagents>=1.6.95
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<2,>=1.83.14
17
17
  Requires-Dist: PyYAML>=6.0
@@ -93,6 +93,15 @@ Requires-Dist: autogen-ext[openai]>=0.4.0; extra == "autogen-v4"
93
93
  Requires-Dist: autogen-core>=0.4.0; extra == "autogen-v4"
94
94
  Requires-Dist: praisonai-tools>=0.1.0; extra == "autogen-v4"
95
95
  Requires-Dist: crewai; extra == "autogen-v4"
96
+ Provides-Extra: langgraph
97
+ Requires-Dist: langgraph<2,>=0.2.0; extra == "langgraph"
98
+ Requires-Dist: langgraph-prebuilt<2,>=0.2.0; extra == "langgraph"
99
+ Requires-Dist: langchain-core<2,>=0.3.0; extra == "langgraph"
100
+ Requires-Dist: langchain-openai<2,>=0.2.0; extra == "langgraph"
101
+ Requires-Dist: praisonai-tools>=0.1.0; extra == "langgraph"
102
+ Provides-Extra: openai-agents
103
+ Requires-Dist: praisonai-frameworks[openai-agents]>=0.1.3; extra == "openai-agents"
104
+ Requires-Dist: praisonai-tools>=0.1.0; extra == "openai-agents"
96
105
  Provides-Extra: acp
97
106
  Requires-Dist: agent-client-protocol>=0.7.0; extra == "acp"
98
107
  Provides-Extra: flow
@@ -65,11 +65,11 @@ praisonai/bots/_admission.py
65
65
  praisonai/bots/_approval.py
66
66
  praisonai/bots/_approval_base.py
67
67
  praisonai/bots/_approval_store.py
68
- praisonai/bots/_auth.py
69
68
  praisonai/bots/_chunk.py
70
69
  praisonai/bots/_commands.py
71
70
  praisonai/bots/_config_schema.py
72
71
  praisonai/bots/_correlation.py
72
+ praisonai/bots/_dead_targets.py
73
73
  praisonai/bots/_debounce.py
74
74
  praisonai/bots/_defaults.py
75
75
  praisonai/bots/_delivery.py
@@ -89,10 +89,12 @@ praisonai/bots/_outbound_resilience.py
89
89
  praisonai/bots/_outbox.py
90
90
  praisonai/bots/_pairing_ui.py
91
91
  praisonai/bots/_presentation_approval.py
92
+ praisonai/bots/_presentation_approval_backend.py
92
93
  praisonai/bots/_presentation_renderer.py
93
94
  praisonai/bots/_protocol_mixin.py
94
95
  praisonai/bots/_rate_limit.py
95
96
  praisonai/bots/_registry.py
97
+ praisonai/bots/_relay_adapter.py
96
98
  praisonai/bots/_reset_policy.py
97
99
  praisonai/bots/_resilience.py
98
100
  praisonai/bots/_run_control.py
@@ -548,6 +550,7 @@ praisonai/flow/components/__init__.py
548
550
  praisonai/flow/components/PraisonAI/praisonai_agent.py
549
551
  praisonai/flow/components/PraisonAI/praisonai_agents.py
550
552
  praisonai/framework_adapters/__init__.py
553
+ praisonai/framework_adapters/_config_builder.py
551
554
  praisonai/framework_adapters/autogen_adapter.py
552
555
  praisonai/framework_adapters/base.py
553
556
  praisonai/framework_adapters/crewai_adapter.py
@@ -1,7 +1,7 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.6.90
4
+ praisonaiagents>=1.6.95
5
5
  python-dotenv>=0.19.0
6
6
  litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
@@ -156,6 +156,13 @@ langextract>=1.0.0
156
156
  [langfuse]
157
157
  langfuse>=3.0.0
158
158
 
159
+ [langgraph]
160
+ langgraph<2,>=0.2.0
161
+ langgraph-prebuilt<2,>=0.2.0
162
+ langchain-core<2,>=0.3.0
163
+ langchain-openai<2,>=0.2.0
164
+ praisonai-tools>=0.1.0
165
+
159
166
  [lite]
160
167
 
161
168
  [modal]
@@ -173,6 +180,10 @@ psycopg2-binary>=2.9.0
173
180
  [observability]
174
181
  langfuse>=3.0.0
175
182
 
183
+ [openai-agents]
184
+ praisonai-frameworks[openai-agents]>=0.1.3
185
+ praisonai-tools>=0.1.0
186
+
176
187
  [os]
177
188
  fastapi>=0.115.0
178
189
  uvicorn>=0.34.0
@@ -20,6 +20,29 @@ def _autogen_v4_probe() -> bool:
20
20
  return (importlib.util.find_spec("autogen_agentchat") is not None
21
21
  and importlib.util.find_spec("autogen_ext") is not None)
22
22
 
23
+ def _langgraph_probe() -> bool:
24
+ # find_spec on a submodule imports the parent package; guard against
25
+ # import-time errors in langgraph/its deps crashing the availability check.
26
+ try:
27
+ if importlib.util.find_spec("langgraph") is None:
28
+ return False
29
+ return importlib.util.find_spec("langgraph.prebuilt") is not None
30
+ except Exception:
31
+ return False
32
+
33
+ def _openai_agents_probe() -> bool:
34
+ try:
35
+ importlib.metadata.distribution("openai-agents")
36
+ except importlib.metadata.PackageNotFoundError:
37
+ return False
38
+ if importlib.util.find_spec("agents") is None:
39
+ return False
40
+ try:
41
+ from agents import Runner # noqa: F401
42
+ return True
43
+ except ImportError:
44
+ return False
45
+
23
46
  _PROBES: dict[str, Callable[[], bool]] = {
24
47
  "crewai": lambda: importlib.util.find_spec("crewai") is not None,
25
48
  "autogen": lambda: importlib.util.find_spec("autogen") is not None,
@@ -40,6 +63,8 @@ _PROBES: dict[str, Callable[[], bool]] = {
40
63
  "pinecone": lambda: importlib.util.find_spec("pinecone") is not None,
41
64
  "qdrant_client": lambda: importlib.util.find_spec("qdrant_client") is not None,
42
65
  "weaviate": lambda: importlib.util.find_spec("weaviate") is not None,
66
+ "langgraph": _langgraph_probe,
67
+ "openai_agents": _openai_agents_probe,
43
68
  }
44
69
 
45
70
  def is_available(name: str) -> bool:
@@ -80,10 +80,6 @@ def __dir__():
80
80
 
81
81
 
82
82
 
83
- _TOOL_TIMEOUT_EXECUTOR = None
84
- # Eagerly initialised so concurrent first-callers always share one lock (and
85
- # therefore one executor); a lazily-created lock would itself race.
86
- _TOOL_TIMEOUT_EXECUTOR_LOCK = threading.Lock()
87
83
  _DEFAULT_TOOL_TIMEOUT_WORKERS = 32
88
84
 
89
85
 
@@ -113,33 +109,15 @@ def _resolve_tool_timeout_workers():
113
109
  return workers
114
110
 
115
111
 
116
- def _get_tool_timeout_executor():
117
- """Lazily create a bounded, observable thread pool for sync tool timeouts.
118
-
119
- Using a bounded pool (instead of unbounded bare daemon threads) means any
120
- background work left running after a timeout is at least capped and named,
121
- so operators can enumerate it rather than accumulating phantom threads.
122
- """
123
- global _TOOL_TIMEOUT_EXECUTOR
124
- import concurrent.futures
125
-
126
- with _TOOL_TIMEOUT_EXECUTOR_LOCK:
127
- if _TOOL_TIMEOUT_EXECUTOR is None:
128
- _TOOL_TIMEOUT_EXECUTOR = concurrent.futures.ThreadPoolExecutor(
129
- max_workers=_resolve_tool_timeout_workers(),
130
- thread_name_prefix="praisonai-tool-timeout",
131
- )
132
- return _TOOL_TIMEOUT_EXECUTOR
133
-
134
-
135
- def _wrap_with_timeout(tool, timeout_seconds: float):
112
+ def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory):
136
113
  """Enforce a per-call timeout on a tool, sync or async.
137
114
 
138
115
  For async tools the underlying task is cancelled on timeout. For sync tools
139
- the call runs in a bounded thread pool; on timeout we best-effort cancel the
140
- future and log a warning. Note: a synchronous call that has already started
141
- cannot be forcibly interrupted, so background work may continue executing
142
- the returned payload flags this with ``background_work_may_continue``.
116
+ the call runs in an instance-owned bounded thread pool obtained from
117
+ ``executor_factory``; on timeout we best-effort cancel the future and log a
118
+ warning. Note: a synchronous call that has already started cannot be forcibly
119
+ interrupted, so background work may continue executing — the returned payload
120
+ flags this with ``background_work_may_continue``.
143
121
  """
144
122
  if timeout_seconds is None or timeout_seconds <= 0 or not callable(tool):
145
123
  return tool
@@ -165,7 +143,7 @@ def _wrap_with_timeout(tool, timeout_seconds: float):
165
143
 
166
144
  @functools.wraps(tool)
167
145
  def _sync_wrapped(*args, **kwargs):
168
- executor = _get_tool_timeout_executor()
146
+ executor = executor_factory()
169
147
  future = executor.submit(tool, *args, **kwargs)
170
148
  try:
171
149
  return future.result(timeout=timeout_seconds)
@@ -235,7 +213,7 @@ def _resolve_yaml_cli_backend(cli_backend_config, logger):
235
213
 
236
214
 
237
215
  class AgentsGenerator:
238
- def __init__(self, agent_file, framework, config_list, log_level=None, agent_callback=None, task_callback=None, agent_yaml=None, tools=None, cli_config=None, adapter_registry=None):
216
+ def __init__(self, agent_file, framework, config_list, log_level=None, agent_callback=None, task_callback=None, agent_yaml=None, tools=None, cli_config=None, adapter_registry=None, tool_timeout_executor=None):
239
217
  """
240
218
  Initialize the AgentsGenerator object.
241
219
 
@@ -289,11 +267,56 @@ class AgentsGenerator:
289
267
  # DI-friendly: tests/multi-tenant runtimes pass their own registry;
290
268
  # CLI users get the process default.
291
269
  self._adapter_registry = adapter_registry or _get_default_adapter_registry()
270
+
271
+ # Instance-owned tool-timeout executor so multi-tenant runtimes can scope
272
+ # it per session (no process-wide singleton). Created lazily on first use
273
+ # to avoid spawning threads for generators that never time a sync tool.
274
+ # A caller-supplied executor is treated as borrowed and never shut down.
275
+ self._tool_timeout_executor = tool_timeout_executor
276
+ self._owns_tool_timeout_executor = tool_timeout_executor is None
277
+ self._tool_timeout_executor_lock = threading.Lock()
292
278
 
293
279
  # Defer framework adapter creation until YAML is loaded
294
280
  # This fixes the issue where empty framework string fails before YAML framework is read
295
281
  self.framework_adapter = None
296
282
 
283
+ def _get_tool_timeout_executor(self):
284
+ """Lazily create this generator's bounded sync-tool-timeout thread pool.
285
+
286
+ The pool is owned by the instance (not a module global), so concurrent
287
+ sessions / tenants never share workers and a stuck tool in one session
288
+ cannot starve another.
289
+ """
290
+ import concurrent.futures
291
+
292
+ with self._tool_timeout_executor_lock:
293
+ if self._tool_timeout_executor is None:
294
+ self._tool_timeout_executor = concurrent.futures.ThreadPoolExecutor(
295
+ max_workers=_resolve_tool_timeout_workers(),
296
+ thread_name_prefix=f"praisonai-tool-timeout-{id(self):x}",
297
+ )
298
+ # Capture the reference inside the lock so a concurrent close() can
299
+ # never null the attribute out between the check and the return.
300
+ return self._tool_timeout_executor
301
+
302
+ def _wrap_tool_with_timeout(self, tool, timeout_seconds):
303
+ """Wrap a tool with this generator's instance-owned timeout executor."""
304
+ return _wrap_with_timeout(tool, timeout_seconds, self._get_tool_timeout_executor)
305
+
306
+ def close(self):
307
+ """Release the owned tool-timeout executor; safe to call repeatedly."""
308
+ with self._tool_timeout_executor_lock:
309
+ if self._owns_tool_timeout_executor and self._tool_timeout_executor is not None:
310
+ self._tool_timeout_executor.shutdown(wait=False, cancel_futures=True)
311
+ self._tool_timeout_executor = None
312
+
313
+ def __enter__(self):
314
+ return self
315
+
316
+ def __exit__(self, exc_type, exc, tb):
317
+ self.close()
318
+ return False
319
+
297
320
  def _get_framework_adapter(self, framework: str) -> FrameworkAdapter:
298
321
  """
299
322
  Get the appropriate framework adapter for the given framework.
@@ -339,6 +362,21 @@ class AgentsGenerator:
339
362
  # Handle agent-level overrides using unified approach
340
363
  agent_level_fields = ['tool_timeout', 'tool_retry_policy', 'planning_tools', 'autonomy', 'planning', 'web', 'web_fetch']
341
364
  agent_overrides = {k: v for k, v in cli_config.items() if k in agent_level_fields}
365
+
366
+ if "tool_retry_policy" in agent_overrides:
367
+ policy = agent_overrides["tool_retry_policy"]
368
+ try:
369
+ from praisonaiagents.tools.retry import RetryPolicy
370
+
371
+ if isinstance(policy, RetryPolicy):
372
+ agent_overrides["tool_retry_policy"] = {
373
+ "max_attempts": policy.max_attempts,
374
+ "delay": policy.initial_delay_ms / 1000.0,
375
+ "backoff_factor": policy.backoff_factor,
376
+ "max_delay": policy.max_delay_ms / 1000.0,
377
+ }
378
+ except (ImportError, AttributeError, TypeError):
379
+ pass
342
380
 
343
381
  # Handle handoff configuration - convert CLI flags into handoff dict
344
382
  handoff_fields = ['handoff', 'handoff_policy', 'handoff_timeout', 'handoff_max_depth', 'handoff_max_concurrent', 'handoff_detect_cycles']
@@ -20,12 +20,14 @@ if TYPE_CHECKING:
20
20
  from ._session import BotSessionManager
21
21
  from ._identity import StoreBackedIdentityResolver
22
22
  from ._dlq import InboundDLQ, DLQEntry
23
+ from ._dead_targets import DeadTargetRegistry, DeadTarget
23
24
  from ._ingress import InboundJournal, JournalEntry
24
25
  from ._slack_approval import SlackApproval
25
26
  from ._telegram_approval import TelegramApproval
26
27
  from ._discord_approval import DiscordApproval
27
28
  from ._webhook_approval import WebhookApproval
28
29
  from ._http_approval import HTTPApproval
30
+ from ._presentation_approval_backend import PresentationApprovalBackend
29
31
  from ._streaming import StreamingConfig, StreamingMode, DraftStreamer
30
32
  from ._outbox import OutboundQueue, OutboundEntry
31
33
  from ._approval_store import ApprovalStore
@@ -85,6 +87,9 @@ def __getattr__(name: str):
85
87
  if name == "HTTPApproval":
86
88
  from ._http_approval import HTTPApproval
87
89
  return HTTPApproval
90
+ if name == "PresentationApprovalBackend":
91
+ from ._presentation_approval_backend import PresentationApprovalBackend
92
+ return PresentationApprovalBackend
88
93
  # W1 — cross-platform mirror + identity
89
94
  if name == "mirror_to_session":
90
95
  from ._mirror import mirror_to_session
@@ -102,6 +107,13 @@ def __getattr__(name: str):
102
107
  if name == "DLQEntry":
103
108
  from ._dlq import DLQEntry
104
109
  return DLQEntry
110
+ # Self-healing dead-target registry (issue #2486)
111
+ if name == "DeadTargetRegistry":
112
+ from ._dead_targets import DeadTargetRegistry
113
+ return DeadTargetRegistry
114
+ if name == "DeadTarget":
115
+ from ._dead_targets import DeadTarget
116
+ return DeadTarget
105
117
  # Inbound message journal for durable processing
106
118
  if name == "InboundJournal":
107
119
  from ._ingress import InboundJournal
@@ -172,6 +184,7 @@ __all__ = [
172
184
  "BotSessionManager",
173
185
  "StoreBackedIdentityResolver",
174
186
  "InboundDLQ", "DLQEntry",
187
+ "DeadTargetRegistry", "DeadTarget",
175
188
  "InboundJournal", "JournalEntry",
176
189
  "OutboundQueue", "OutboundEntry",
177
190
  "ApprovalStore",
@@ -184,6 +197,7 @@ __all__ = [
184
197
  "use_correlation_id", "GatewayMetrics",
185
198
  "SlackApproval", "TelegramApproval", "DiscordApproval",
186
199
  "WebhookApproval", "HTTPApproval",
200
+ "PresentationApprovalBackend",
187
201
  # Streaming
188
202
  "StreamingConfig", "StreamingMode", "DraftStreamer",
189
203
  # W1
@@ -0,0 +1,274 @@
1
+ """
2
+ Self-healing dead-target registry for outbound delivery (issue #2486).
3
+
4
+ When a gateway delivers to a channel that has become *permanently* unreachable
5
+ — the bot was kicked/blocked, the group was deleted, the chat no longer exists
6
+ — there is otherwise no memory of that. Every subsequent proactive, scheduled
7
+ or broadcast send re-attempts the dead target from scratch: a fresh API call, a
8
+ fresh failure, and a fresh stack of log lines. For a long-lived gateway pushing
9
+ periodic updates to many channels this quietly burns rate-limit budget, slows
10
+ fan-out (every cycle waits on doomed calls), and floods logs with noise.
11
+
12
+ This module provides a small, bounded, **self-healing** registry:
13
+ - record a ``(platform, channel_id)`` as dead only on a *confirmed permanent*
14
+ failure (e.g. ``403 Forbidden``, ``404``/"chat not found"),
15
+ - short-circuit future sends to it (consulted by ``DeliveryRouter.deliver``),
16
+ - **automatically clear** the flag the moment any send to that target
17
+ succeeds again (user re-adds the bot, group is restored).
18
+
19
+ Design constraints (per PraisonAI principles):
20
+ - Wrapper-only — heavy code stays out of the core SDK.
21
+ - Lazy/stdlib only — JSON + atomic file replace, no extra dependency.
22
+ - Default OFF — ``DeliveryRouter`` works exactly as before unless a registry
23
+ is constructed and attached.
24
+ - Bounded: ``max_size`` + ``ttl_seconds`` prevent unbounded growth/staleness.
25
+ - Thread-safe: a per-instance ``threading.Lock`` guards mutation + persistence.
26
+ - Persistence is best-effort: failures are logged, never raised.
27
+
28
+ Public API:
29
+ - ``DeadTargetRegistry(persist_path=None, *, max_size=10_000, ttl_seconds=...)``
30
+ - ``is_dead(platform, channel_id) -> bool``
31
+ - ``should_reprobe(platform, channel_id) -> bool`` (periodic self-heal probe)
32
+ - ``mark_dead(platform, channel_id, reason) -> None``
33
+ - ``clear(platform, channel_id) -> None`` (called on every success)
34
+ - ``list_dead() -> list[DeadTarget]``
35
+ """
36
+
37
+ from __future__ import annotations
38
+
39
+ import json
40
+ import logging
41
+ import os
42
+ import threading
43
+ import time
44
+ from dataclasses import dataclass
45
+ from pathlib import Path
46
+ from typing import Dict, List, Optional, Tuple
47
+
48
+ logger = logging.getLogger(__name__)
49
+
50
+ # 30 days default — a kicked bot is rarely re-added within seconds, but we still
51
+ # want the registry to forget very old entries so a target that was dead long
52
+ # ago is re-probed eventually even if no traffic ever cleared it.
53
+ _DEFAULT_TTL_SECONDS = 30 * 86400
54
+ _DEFAULT_MAX_SIZE = 10_000
55
+ # How long to fully suppress a dead target before allowing a single re-probe.
56
+ # A kicked bot is rarely re-added within seconds, but waiting the full 30-day
57
+ # TTL to retry a *recovered* target is far too long. Letting one send through
58
+ # roughly once an hour bounds self-heal latency to ~1h while still suppressing
59
+ # the overwhelming majority of doomed cycles.
60
+ _DEFAULT_REPROBE_SECONDS = 3600
61
+
62
+
63
+ @dataclass(frozen=True)
64
+ class DeadTarget:
65
+ """A single target confirmed permanently unreachable."""
66
+
67
+ platform: str
68
+ channel_id: str
69
+ reason: str
70
+ ts: float
71
+
72
+
73
+ class DeadTargetRegistry:
74
+ """Persistent, bounded, self-healing registry of dead delivery targets.
75
+
76
+ Args:
77
+ persist_path: JSON file path for durability. Defaults to
78
+ ``~/.praisonai/state/dead_targets.json``. Pass ``None`` explicitly
79
+ via ``persist=False`` semantics is not supported; use a temp path
80
+ for ephemeral instances in tests.
81
+ max_size: Maximum dead entries kept; oldest evicted when exceeded.
82
+ ttl_seconds: Entries older than this are dropped on the next access so
83
+ a long-dead target is eventually re-probed.
84
+
85
+ Example::
86
+
87
+ from praisonai.bots import DeadTargetRegistry
88
+
89
+ reg = DeadTargetRegistry()
90
+ if reg.is_dead("telegram", "-1001234"):
91
+ ... # short-circuit
92
+ reg.mark_dead("telegram", "-1001234", reason="403 Forbidden: bot kicked")
93
+ reg.clear("telegram", "-1001234") # on next successful send
94
+ """
95
+
96
+ def __init__(
97
+ self,
98
+ persist_path: Optional[Path] = None,
99
+ *,
100
+ max_size: int = _DEFAULT_MAX_SIZE,
101
+ ttl_seconds: int = _DEFAULT_TTL_SECONDS,
102
+ reprobe_seconds: int = _DEFAULT_REPROBE_SECONDS,
103
+ ) -> None:
104
+ state_dir = Path.home() / ".praisonai" / "state"
105
+ self._persist_path = Path(
106
+ persist_path or (state_dir / "dead_targets.json")
107
+ ).expanduser()
108
+ self.max_size = int(max_size)
109
+ self.ttl_seconds = int(ttl_seconds)
110
+ self.reprobe_seconds = int(reprobe_seconds)
111
+ self._lock = threading.Lock()
112
+ # (platform, channel_id) -> DeadTarget
113
+ self._dead: Dict[Tuple[str, str], DeadTarget] = {}
114
+ self._load()
115
+
116
+ # ── Helpers ─────────────────────────────────────────────────────
117
+ @staticmethod
118
+ def _key(platform: str, channel_id: str) -> Tuple[str, str]:
119
+ return (str(platform).lower(), str(channel_id))
120
+
121
+ def _evict_expired_locked(self) -> bool:
122
+ """Drop expired entries. Caller must hold the lock. Returns True if changed."""
123
+ if self.ttl_seconds <= 0:
124
+ return False
125
+ cutoff = time.time() - self.ttl_seconds
126
+ stale = [k for k, v in self._dead.items() if v.ts < cutoff]
127
+ for k in stale:
128
+ self._dead.pop(k, None)
129
+ return bool(stale)
130
+
131
+ def _enforce_bound_locked(self) -> None:
132
+ """Evict oldest entries beyond ``max_size``. Caller must hold the lock."""
133
+ if self.max_size <= 0 or len(self._dead) <= self.max_size:
134
+ return
135
+ # Oldest first by timestamp.
136
+ ordered = sorted(self._dead.items(), key=lambda kv: kv[1].ts)
137
+ overflow = len(self._dead) - self.max_size
138
+ for k, _ in ordered[:overflow]:
139
+ self._dead.pop(k, None)
140
+
141
+ # ── Persistence (best-effort, atomic) ───────────────────────────
142
+ def _load(self) -> None:
143
+ if not self._persist_path.exists():
144
+ return
145
+ try:
146
+ with open(self._persist_path, "r") as f:
147
+ data = json.load(f)
148
+ except Exception as e:
149
+ logger.warning("DeadTargetRegistry: failed to load %s: %s", self._persist_path, e)
150
+ return
151
+ entries = data.get("dead", []) if isinstance(data, dict) else []
152
+ if not isinstance(entries, list):
153
+ return
154
+ for item in entries:
155
+ try:
156
+ platform = str(item["platform"]).lower()
157
+ channel_id = str(item["channel_id"])
158
+ reason = str(item.get("reason", ""))
159
+ ts = float(item.get("ts", time.time()))
160
+ except (KeyError, TypeError, ValueError):
161
+ continue
162
+ self._dead[(platform, channel_id)] = DeadTarget(
163
+ platform=platform, channel_id=channel_id, reason=reason, ts=ts
164
+ )
165
+ # Prune anything already expired/over-bound on load.
166
+ self._evict_expired_locked()
167
+ self._enforce_bound_locked()
168
+ logger.info(
169
+ "DeadTargetRegistry: loaded %d dead target(s) from %s",
170
+ len(self._dead),
171
+ self._persist_path,
172
+ )
173
+
174
+ def _save_locked(self) -> None:
175
+ """Persist current state. Caller must hold the lock."""
176
+ try:
177
+ data = {
178
+ "dead": [
179
+ {
180
+ "platform": v.platform,
181
+ "channel_id": v.channel_id,
182
+ "reason": v.reason,
183
+ "ts": v.ts,
184
+ }
185
+ for v in self._dead.values()
186
+ ]
187
+ }
188
+ self._persist_path.parent.mkdir(parents=True, exist_ok=True)
189
+ tmp_path = self._persist_path.with_suffix(self._persist_path.suffix + ".tmp")
190
+ with open(tmp_path, "w") as f:
191
+ json.dump(data, f, indent=2)
192
+ os.replace(tmp_path, self._persist_path)
193
+ except Exception as e:
194
+ logger.error("DeadTargetRegistry: failed to save %s: %s", self._persist_path, e)
195
+
196
+ # ── Public API ──────────────────────────────────────────────────
197
+ def is_dead(self, platform: str, channel_id: str) -> bool:
198
+ """Return True if the target is currently suppressed as dead."""
199
+ key = self._key(platform, channel_id)
200
+ with self._lock:
201
+ entry = self._dead.get(key)
202
+ if entry is None:
203
+ return False
204
+ # Honour TTL lazily so a long-dead target re-enters circulation.
205
+ if self.ttl_seconds > 0 and entry.ts < time.time() - self.ttl_seconds:
206
+ self._dead.pop(key, None)
207
+ self._save_locked()
208
+ return False
209
+ return True
210
+
211
+ def should_reprobe(self, platform: str, channel_id: str) -> bool:
212
+ """Return True if a dead target is due for a single self-healing re-probe.
213
+
214
+ A suppressed target can only prove it has recovered by being sent to, but
215
+ ``is_dead`` would otherwise block every send until the (long) TTL expires.
216
+ To bound self-heal latency, once ``reprobe_seconds`` has elapsed since the
217
+ target was last marked dead we allow *one* send through. If it succeeds,
218
+ :meth:`clear` un-suppresses it; if it fails permanently again,
219
+ :meth:`mark_dead` resets the clock for another ``reprobe_seconds`` window.
220
+ """
221
+ if self.reprobe_seconds <= 0:
222
+ return False
223
+ key = self._key(platform, channel_id)
224
+ with self._lock:
225
+ entry = self._dead.get(key)
226
+ if entry is None:
227
+ return False
228
+ return entry.ts < time.time() - self.reprobe_seconds
229
+
230
+ def mark_dead(self, platform: str, channel_id: str, reason: str) -> None:
231
+ """Record a confirmed-permanent failure, suppressing future sends."""
232
+ key = self._key(platform, channel_id)
233
+ with self._lock:
234
+ already = key in self._dead
235
+ self._dead[key] = DeadTarget(
236
+ platform=key[0], channel_id=key[1], reason=str(reason), ts=time.time()
237
+ )
238
+ self._enforce_bound_locked()
239
+ self._save_locked()
240
+ if not already:
241
+ logger.warning(
242
+ "DeadTargetRegistry: suppressing dead target %s:%s (%s)",
243
+ key[0],
244
+ key[1],
245
+ reason,
246
+ )
247
+
248
+ def clear(self, platform: str, channel_id: str) -> None:
249
+ """Un-suppress a target. Called on every successful send (self-healing)."""
250
+ key = self._key(platform, channel_id)
251
+ with self._lock:
252
+ if key not in self._dead:
253
+ return
254
+ self._dead.pop(key, None)
255
+ self._save_locked()
256
+ logger.info(
257
+ "DeadTargetRegistry: target %s:%s recovered — suppression cleared",
258
+ key[0],
259
+ key[1],
260
+ )
261
+
262
+ def list_dead(self) -> List[DeadTarget]:
263
+ """Return a snapshot of currently-dead targets (expired ones pruned)."""
264
+ with self._lock:
265
+ if self._evict_expired_locked():
266
+ self._save_locked()
267
+ return sorted(self._dead.values(), key=lambda d: d.ts)
268
+
269
+ def size(self) -> int:
270
+ """Number of currently-suppressed targets (expired ones pruned)."""
271
+ with self._lock:
272
+ if self._evict_expired_locked():
273
+ self._save_locked()
274
+ return len(self._dead)