PraisonAI 4.6.47__tar.gz → 4.6.48__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 (811) hide show
  1. {praisonai-4.6.47 → praisonai-4.6.48}/PKG-INFO +2 -2
  2. {praisonai-4.6.47 → praisonai-4.6.48}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.47 → praisonai-4.6.48}/PraisonAI.egg-info/SOURCES.txt +4 -0
  4. {praisonai-4.6.47 → praisonai-4.6.48}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/agents_generator.py +2 -2
  6. praisonai-4.6.48/praisonai/async_agent_scheduler.py +23 -0
  7. praisonai-4.6.48/praisonai/bots/_typing_indicator.py +116 -0
  8. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/telegram.py +26 -10
  9. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/gateway.py +48 -2
  10. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/bot_checks.py +138 -0
  11. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/gateway.py +105 -0
  12. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/interactive_tools.py +46 -33
  13. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/onboard.py +347 -170
  14. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/deploy.py +75 -45
  15. praisonai-4.6.48/praisonai/gateway/port_utils.py +216 -0
  16. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/server.py +67 -12
  17. praisonai-4.6.48/praisonai/gateway/unicode_utils.py +167 -0
  18. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/_valkey_client.py +3 -0
  19. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/sandbox/docker.py +15 -1
  20. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/sandbox/ssh.py +17 -7
  21. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/scheduler/__init__.py +6 -0
  22. {praisonai-4.6.47/praisonai → praisonai-4.6.48/praisonai/scheduler}/async_agent_scheduler.py +90 -46
  23. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/tool_resolver.py +26 -15
  24. praisonai-4.6.48/praisonai/version.py +1 -0
  25. {praisonai-4.6.47 → praisonai-4.6.48}/pyproject.toml +1 -1
  26. praisonai-4.6.47/praisonai/version.py +0 -1
  27. {praisonai-4.6.47 → praisonai-4.6.48}/PraisonAI.egg-info/dependency_links.txt +0 -0
  28. {praisonai-4.6.47 → praisonai-4.6.48}/PraisonAI.egg-info/entry_points.txt +0 -0
  29. {praisonai-4.6.47 → praisonai-4.6.48}/PraisonAI.egg-info/top_level.txt +0 -0
  30. {praisonai-4.6.47 → praisonai-4.6.48}/README.md +0 -0
  31. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/__init__.py +0 -0
  32. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/__main__.py +0 -0
  33. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_approval_spec.py +0 -0
  34. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_async_bridge.py +0 -0
  35. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_dev/__init__.py +0 -0
  36. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_dev/api_md.py +0 -0
  37. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_dev/parity/__init__.py +0 -0
  38. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_dev/parity/docs_extractor.py +0 -0
  39. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_dev/parity/docs_generator.py +0 -0
  40. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_dev/parity/generator.py +0 -0
  41. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  42. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_dev/parity/python_extractor.py +0 -0
  43. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  44. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_dev/parity/rust_extractor.py +0 -0
  45. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  46. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  47. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  48. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_entrypoint.py +0 -0
  49. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_framework_availability.py +0 -0
  50. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_logging.py +0 -0
  51. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_registry.py +0 -0
  52. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/_safe_loader.py +0 -0
  53. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/acp/__init__.py +0 -0
  54. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/acp/config.py +0 -0
  55. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/acp/safe_edit.py +0 -0
  56. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/acp/server.py +0 -0
  57. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/acp/session.py +0 -0
  58. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/adapters/__init__.py +0 -0
  59. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/adapters/readers.py +0 -0
  60. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/adapters/rerankers.py +0 -0
  61. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/adapters/retrievers.py +0 -0
  62. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/adapters/vector_stores.py +0 -0
  63. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/agent.py +0 -0
  64. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/agent_scheduler.py +0 -0
  65. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/api/agent_invoke.py +0 -0
  66. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/api/call.py +0 -0
  67. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/app/__init__.py +0 -0
  68. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/app/agentos.py +0 -0
  69. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/audit/__init__.py +0 -0
  70. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/audit/agent_centric.py +0 -0
  71. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/auto.py +0 -0
  72. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/__init__.py +0 -0
  73. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_ack.py +0 -0
  74. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_approval.py +0 -0
  75. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_approval_base.py +0 -0
  76. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_auth.py +0 -0
  77. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_chunk.py +0 -0
  78. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_commands.py +0 -0
  79. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_config_schema.py +0 -0
  80. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_debounce.py +0 -0
  81. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_defaults.py +0 -0
  82. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_discord_approval.py +0 -0
  83. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_dlq.py +0 -0
  84. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_email_utils.py +0 -0
  85. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_http_approval.py +0 -0
  86. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_mirror.py +0 -0
  87. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_pairing_ui.py +0 -0
  88. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_protocol_mixin.py +0 -0
  89. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_rate_limit.py +0 -0
  90. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_registry.py +0 -0
  91. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_resilience.py +0 -0
  92. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_session.py +0 -0
  93. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_slack_approval.py +0 -0
  94. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_telegram_approval.py +0 -0
  95. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_unknown_user.py +0 -0
  96. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_webhook_approval.py +0 -0
  97. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  98. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/agentmail.py +0 -0
  99. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/bot.py +0 -0
  100. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/botos.py +0 -0
  101. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/discord.py +0 -0
  102. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/email.py +0 -0
  103. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/linear.py +0 -0
  104. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/media.py +0 -0
  105. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/slack.py +0 -0
  106. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/bots/whatsapp.py +0 -0
  107. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/__init__.py +0 -0
  108. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/agent.py +0 -0
  109. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/benchmark.py +0 -0
  110. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/cdp_agent.py +0 -0
  111. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/cdp_utils.py +0 -0
  112. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/cli.py +0 -0
  113. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/diagnostics.py +0 -0
  114. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/launcher.py +0 -0
  115. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/playwright_agent.py +0 -0
  116. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/profiling.py +0 -0
  117. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/protocol.py +0 -0
  118. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/report.py +0 -0
  119. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/server.py +0 -0
  120. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/sessions.py +0 -0
  121. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/browser/video.py +0 -0
  122. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/__init__.py +0 -0
  123. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/a2a.py +0 -0
  124. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/assistants.py +0 -0
  125. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/audio.py +0 -0
  126. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/batches.py +0 -0
  127. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/completions.py +0 -0
  128. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/container_files.py +0 -0
  129. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/containers.py +0 -0
  130. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/embeddings.py +0 -0
  131. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/files.py +0 -0
  132. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/fine_tuning.py +0 -0
  133. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/guardrails.py +0 -0
  134. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/images.py +0 -0
  135. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/mcp.py +0 -0
  136. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/messages.py +0 -0
  137. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/moderations.py +0 -0
  138. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/ocr.py +0 -0
  139. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/passthrough.py +0 -0
  140. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/rag.py +0 -0
  141. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/realtime.py +0 -0
  142. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/rerank.py +0 -0
  143. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/responses.py +0 -0
  144. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/search.py +0 -0
  145. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/skills.py +0 -0
  146. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/vector_store_files.py +0 -0
  147. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/vector_stores.py +0 -0
  148. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/capabilities/videos.py +0 -0
  149. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/claw/__init__.py +0 -0
  150. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/claw/default_app.py +0 -0
  151. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/__init__.py +0 -0
  152. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/_paths.py +0 -0
  153. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/app.py +0 -0
  154. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/branding.py +0 -0
  155. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/__init__.py +0 -0
  156. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/acp.py +0 -0
  157. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/agents.py +0 -0
  158. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/app.py +0 -0
  159. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/audit.py +0 -0
  160. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/batch.py +0 -0
  161. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/benchmark.py +0 -0
  162. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/bot.py +0 -0
  163. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/browser.py +0 -0
  164. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/call.py +0 -0
  165. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/chat.py +0 -0
  166. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/claw.py +0 -0
  167. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/code.py +0 -0
  168. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/commit.py +0 -0
  169. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/completion.py +0 -0
  170. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/config.py +0 -0
  171. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/context.py +0 -0
  172. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/dashboard.py +0 -0
  173. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/debug.py +0 -0
  174. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/deploy.py +0 -0
  175. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/diag.py +0 -0
  176. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/docs.py +0 -0
  177. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/doctor.py +0 -0
  178. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/endpoints.py +0 -0
  179. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/environment.py +0 -0
  180. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/eval.py +0 -0
  181. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/examples.py +0 -0
  182. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/flow.py +0 -0
  183. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/github.py +0 -0
  184. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/hooks.py +0 -0
  185. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/knowledge.py +0 -0
  186. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/langextract.py +0 -0
  187. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/langfuse.py +0 -0
  188. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/loop.py +0 -0
  189. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/lsp.py +0 -0
  190. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/managed.py +0 -0
  191. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/mcp.py +0 -0
  192. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/memory.py +0 -0
  193. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/mint_link.py +0 -0
  194. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/n8n.py +0 -0
  195. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/obs.py +0 -0
  196. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/onboard.py +0 -0
  197. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/package.py +0 -0
  198. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/pairing.py +0 -0
  199. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/paths.py +0 -0
  200. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/plugins.py +0 -0
  201. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/port.py +0 -0
  202. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/profile.py +0 -0
  203. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/publish.py +0 -0
  204. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/rag.py +0 -0
  205. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/realtime.py +0 -0
  206. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/recipe.py +0 -0
  207. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/registry.py +0 -0
  208. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/replay.py +0 -0
  209. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/research.py +0 -0
  210. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/retrieval.py +0 -0
  211. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/rules.py +0 -0
  212. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/run.py +0 -0
  213. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/sandbox.py +0 -0
  214. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/schedule.py +0 -0
  215. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/serve.py +0 -0
  216. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/session.py +0 -0
  217. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/setup.py +0 -0
  218. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/skills.py +0 -0
  219. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/standardise.py +0 -0
  220. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/templates.py +0 -0
  221. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/test.py +0 -0
  222. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/todo.py +0 -0
  223. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/tools.py +0 -0
  224. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/traces.py +0 -0
  225. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/tracker.py +0 -0
  226. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/train.py +0 -0
  227. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/ui.py +0 -0
  228. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/up.py +0 -0
  229. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/version.py +0 -0
  230. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/commands/workflow.py +0 -0
  231. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/config_loader.py +0 -0
  232. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/configuration/__init__.py +0 -0
  233. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/configuration/loader.py +0 -0
  234. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/configuration/paths.py +0 -0
  235. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/configuration/schema.py +0 -0
  236. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/execution/__init__.py +0 -0
  237. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/execution/core.py +0 -0
  238. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/execution/profiler.py +0 -0
  239. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/execution/request.py +0 -0
  240. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/execution/result.py +0 -0
  241. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/fallback_schema.py +0 -0
  242. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/__init__.py +0 -0
  243. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/acp.py +0 -0
  244. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/action_orchestrator.py +0 -0
  245. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/agent_scheduler.py +0 -0
  246. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/agent_tools.py +0 -0
  247. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/agents.py +0 -0
  248. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/approval.py +0 -0
  249. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/at_mentions.py +0 -0
  250. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/audit_cli.py +0 -0
  251. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/auto_memory.py +0 -0
  252. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/auto_mode.py +0 -0
  253. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/autonomy_mode.py +0 -0
  254. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/background.py +0 -0
  255. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/base.py +0 -0
  256. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/benchmark.py +0 -0
  257. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/bots_cli.py +0 -0
  258. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/capabilities.py +0 -0
  259. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/checkpoints.py +0 -0
  260. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/cli_profiler.py +0 -0
  261. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/code_intelligence.py +0 -0
  262. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/compaction.py +0 -0
  263. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/compare.py +0 -0
  264. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/config_hierarchy.py +0 -0
  265. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/context_manager.py +0 -0
  266. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/cost_tracker.py +0 -0
  267. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/csv_test_runner.py +0 -0
  268. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/debug.py +0 -0
  269. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/deploy.py +0 -0
  270. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/diag.py +0 -0
  271. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/display_jsonl.py +0 -0
  272. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/__init__.py +0 -0
  273. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  274. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  275. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  276. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  277. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  278. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  279. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  280. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  281. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  282. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  283. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
  284. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  285. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  286. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  287. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  288. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  289. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  290. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/engine.py +0 -0
  291. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/formatters.py +0 -0
  292. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/handler.py +0 -0
  293. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/models.py +0 -0
  294. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/doctor/registry.py +0 -0
  295. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/endpoints.py +0 -0
  296. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/eval.py +0 -0
  297. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/examples.py +0 -0
  298. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/external_agents.py +0 -0
  299. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/fast_context.py +0 -0
  300. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/file_history.py +0 -0
  301. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/flow_display.py +0 -0
  302. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/git_attribution.py +0 -0
  303. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/git_integration.py +0 -0
  304. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/guardrail.py +0 -0
  305. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/handoff.py +0 -0
  306. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/hooks.py +0 -0
  307. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/hybrid_workflow.py +0 -0
  308. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/image.py +0 -0
  309. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/interactive_core_headless.py +0 -0
  310. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/interactive_runtime.py +0 -0
  311. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/interactive_test_harness.py +0 -0
  312. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/interactive_tui.py +0 -0
  313. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/job_workflow.py +0 -0
  314. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/jobs.py +0 -0
  315. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/knowledge.py +0 -0
  316. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/knowledge_cli.py +0 -0
  317. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/lite.py +0 -0
  318. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/logs.py +0 -0
  319. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/lsp_cli.py +0 -0
  320. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  321. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/mcp.py +0 -0
  322. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/message_queue.py +0 -0
  323. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/metrics.py +0 -0
  324. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/migrate.py +0 -0
  325. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/migration_flow.py +0 -0
  326. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/migration_spec.py +0 -0
  327. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/n8n.py +0 -0
  328. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/observability.py +0 -0
  329. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/ollama.py +0 -0
  330. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/output_modes.py +0 -0
  331. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/output_style.py +0 -0
  332. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/package.py +0 -0
  333. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/performance.py +0 -0
  334. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/persistence.py +0 -0
  335. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/plugin_cli.py +0 -0
  336. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/profile.py +0 -0
  337. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/profiler/__init__.py +0 -0
  338. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/profiler/core.py +0 -0
  339. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/profiler/optimizations.py +0 -0
  340. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/profiler/suite.py +0 -0
  341. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/profiling.py +0 -0
  342. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/queue/__init__.py +0 -0
  343. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/queue/manager.py +0 -0
  344. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/queue/models.py +0 -0
  345. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/queue/persistence.py +0 -0
  346. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/queue/scheduler.py +0 -0
  347. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/queue/worker.py +0 -0
  348. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/recipe.py +0 -0
  349. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/recipe_creator.py +0 -0
  350. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/recipe_optimizer.py +0 -0
  351. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/recipe_prompts.py +0 -0
  352. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/recipes.py +0 -0
  353. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/registry.py +0 -0
  354. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/repo_map.py +0 -0
  355. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/router.py +0 -0
  356. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/safe_shell.py +0 -0
  357. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/sandbox_cli.py +0 -0
  358. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/sandbox_executor.py +0 -0
  359. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/sdk_knowledge.py +0 -0
  360. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/serve.py +0 -0
  361. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/session.py +0 -0
  362. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/setup/__init__.py +0 -0
  363. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/setup/handler.py +0 -0
  364. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/setup/templates.py +0 -0
  365. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/skills.py +0 -0
  366. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/slash_commands.py +0 -0
  367. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/telemetry.py +0 -0
  368. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/templates.py +0 -0
  369. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/thinking.py +0 -0
  370. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/todo.py +0 -0
  371. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tools.py +0 -0
  372. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/__init__.py +0 -0
  373. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/app.py +0 -0
  374. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/cli.py +0 -0
  375. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/config.py +0 -0
  376. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/debug.py +0 -0
  377. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/events.py +0 -0
  378. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/mock_provider.py +0 -0
  379. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/orchestrator.py +0 -0
  380. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  381. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/screens/help.py +0 -0
  382. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/screens/main.py +0 -0
  383. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/screens/queue.py +0 -0
  384. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/screens/session.py +0 -0
  385. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/screens/settings.py +0 -0
  386. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/session_store.py +0 -0
  387. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  388. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  389. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  390. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  391. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  392. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  393. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/widgets/status.py +0 -0
  394. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  395. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/wizard.py +0 -0
  396. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/workflow.py +0 -0
  397. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/features/yaml_utils.py +0 -0
  398. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/interactive/__init__.py +0 -0
  399. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/interactive/async_tui.py +0 -0
  400. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/interactive/config.py +0 -0
  401. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/interactive/core.py +0 -0
  402. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/interactive/events.py +0 -0
  403. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  404. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  405. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  406. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/interactive/praison_io.py +0 -0
  407. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/interactive/repl.py +0 -0
  408. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/interactive/split_tui.py +0 -0
  409. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/interactive/tui_app.py +0 -0
  410. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/langfuse_client.py +0 -0
  411. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/legacy.py +0 -0
  412. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/main.py +0 -0
  413. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/output/__init__.py +0 -0
  414. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/output/console.py +0 -0
  415. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/schedule_cli.py +0 -0
  416. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/schema_provider.py +0 -0
  417. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/session/__init__.py +0 -0
  418. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/session/unified.py +0 -0
  419. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/state/__init__.py +0 -0
  420. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/state/identifiers.py +0 -0
  421. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/state/sessions.py +0 -0
  422. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/ui/__init__.py +0 -0
  423. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/ui/config.py +0 -0
  424. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/ui/events.py +0 -0
  425. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/ui/mg_backend.py +0 -0
  426. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/ui/plain.py +0 -0
  427. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/ui/rich_backend.py +0 -0
  428. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli/unified_schema.py +0 -0
  429. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli_backends/__init__.py +0 -0
  430. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli_backends/claude.py +0 -0
  431. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/cli_backends/registry.py +0 -0
  432. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/__init__.py +0 -0
  433. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/agent_tools.py +0 -0
  434. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/diff/__init__.py +0 -0
  435. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/diff/diff_strategy.py +0 -0
  436. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/tools/__init__.py +0 -0
  437. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/tools/apply_diff.py +0 -0
  438. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/tools/execute_command.py +0 -0
  439. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/tools/list_files.py +0 -0
  440. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/tools/read_file.py +0 -0
  441. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/tools/search_replace.py +0 -0
  442. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/tools/write_file.py +0 -0
  443. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/utils/__init__.py +0 -0
  444. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/utils/file_utils.py +0 -0
  445. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/utils/ignore_utils.py +0 -0
  446. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/code/utils/text_utils.py +0 -0
  447. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/context/__init__.py +0 -0
  448. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/context/artifact_store.py +0 -0
  449. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/context/config.py +0 -0
  450. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/context/history_store.py +0 -0
  451. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/context/queue.py +0 -0
  452. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/context/setup.py +0 -0
  453. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/context/terminal_logger.py +0 -0
  454. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/daemon/__init__.py +0 -0
  455. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/daemon/launchd.py +0 -0
  456. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/daemon/systemd.py +0 -0
  457. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/daemon/windows.py +0 -0
  458. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/db/__init__.py +0 -0
  459. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/db/adapter.py +0 -0
  460. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/deploy/__init__.py +0 -0
  461. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/deploy/api.py +0 -0
  462. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/deploy/docker.py +0 -0
  463. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/deploy/doctor.py +0 -0
  464. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/deploy/main.py +0 -0
  465. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/deploy/models.py +0 -0
  466. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/deploy/providers/__init__.py +0 -0
  467. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/deploy/providers/aws.py +0 -0
  468. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/deploy/providers/azure.py +0 -0
  469. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/deploy/providers/base.py +0 -0
  470. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/deploy/providers/gcp.py +0 -0
  471. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/deploy/schema.py +0 -0
  472. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/docs_runner/__init__.py +0 -0
  473. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/docs_runner/classifier.py +0 -0
  474. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/docs_runner/executor.py +0 -0
  475. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/docs_runner/extractor.py +0 -0
  476. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/docs_runner/reporter.py +0 -0
  477. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/docs_runner/runner.py +0 -0
  478. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/docs_runner/workspace.py +0 -0
  479. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/endpoints/__init__.py +0 -0
  480. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/endpoints/a2u_server.py +0 -0
  481. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/endpoints/discovery.py +0 -0
  482. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/endpoints/providers/__init__.py +0 -0
  483. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/endpoints/providers/a2a.py +0 -0
  484. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/endpoints/providers/a2u.py +0 -0
  485. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/endpoints/providers/agents_api.py +0 -0
  486. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/endpoints/providers/base.py +0 -0
  487. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/endpoints/providers/mcp.py +0 -0
  488. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/endpoints/providers/recipe.py +0 -0
  489. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  490. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/endpoints/registry.py +0 -0
  491. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/endpoints/server.py +0 -0
  492. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/flow/__init__.py +0 -0
  493. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/flow/client.py +0 -0
  494. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  495. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  496. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/flow/components/__init__.py +0 -0
  497. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/flow/converter.py +0 -0
  498. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/flow/helpers.py +0 -0
  499. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/framework_adapters/__init__.py +0 -0
  500. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  501. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/framework_adapters/base.py +0 -0
  502. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  503. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  504. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/framework_adapters/registry.py +0 -0
  505. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/framework_adapters/validators.py +0 -0
  506. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/__init__.py +0 -0
  507. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/auth.py +0 -0
  508. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/cookie_auth.py +0 -0
  509. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/exec_approval.py +0 -0
  510. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/gateway_approval.py +0 -0
  511. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/magic_link.py +0 -0
  512. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/origin_check.py +0 -0
  513. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/pairing.py +0 -0
  514. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/pairing_routes.py +0 -0
  515. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/push_channels.py +0 -0
  516. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/push_delivery.py +0 -0
  517. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/push_polling.py +0 -0
  518. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/push_presence.py +0 -0
  519. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/rate_limiter.py +0 -0
  520. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/gateway/redis_pubsub.py +0 -0
  521. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/inbuilt_tools/__init__.py +0 -0
  522. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  523. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/inc/__init__.py +0 -0
  524. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/inc/config.py +0 -0
  525. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/inc/models.py +0 -0
  526. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/__init__.py +0 -0
  527. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/_legacy_handlers.py +0 -0
  528. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/bridges/__init__.py +0 -0
  529. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  530. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/bridges/hooks_query.py +0 -0
  531. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/bridges/schedules_runner.py +0 -0
  532. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/bridges/usage_bridge.py +0 -0
  533. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/bridges/workflows_service.py +0 -0
  534. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/context_files.py +0 -0
  535. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/gateway_host.py +0 -0
  536. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/host_app.py +0 -0
  537. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/pages/__init__.py +0 -0
  538. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/pages/bot_health.py +0 -0
  539. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integration/pages/workflow_runs.py +0 -0
  540. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/__init__.py +0 -0
  541. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/_session_info.py +0 -0
  542. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/_tool_aliases.py +0 -0
  543. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/base.py +0 -0
  544. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/claude_code.py +0 -0
  545. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/codex_cli.py +0 -0
  546. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/compute/__init__.py +0 -0
  547. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/compute/daytona.py +0 -0
  548. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/compute/docker.py +0 -0
  549. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/compute/e2b.py +0 -0
  550. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/compute/flyio.py +0 -0
  551. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/compute/local.py +0 -0
  552. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/compute/modal_compute.py +0 -0
  553. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/cursor_cli.py +0 -0
  554. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/db_session_adapter.py +0 -0
  555. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/gemini_cli.py +0 -0
  556. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/hosted_agent.py +0 -0
  557. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/local_agent.py +0 -0
  558. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/managed_agents.py +0 -0
  559. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/managed_local.py +0 -0
  560. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/registry.py +0 -0
  561. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/integrations/sandboxed_agent.py +0 -0
  562. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/jobs/__init__.py +0 -0
  563. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/jobs/executor.py +0 -0
  564. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/jobs/models.py +0 -0
  565. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/jobs/router.py +0 -0
  566. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/jobs/server.py +0 -0
  567. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/jobs/store.py +0 -0
  568. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/llm/__init__.py +0 -0
  569. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/llm/env.py +0 -0
  570. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/llm/registry.py +0 -0
  571. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/__init__.py +0 -0
  572. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/adapters/__init__.py +0 -0
  573. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/adapters/agents.py +0 -0
  574. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  575. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  576. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  577. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  578. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/adapters/memory.py +0 -0
  579. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/adapters/prompts.py +0 -0
  580. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/adapters/resources.py +0 -0
  581. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  582. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/auth/__init__.py +0 -0
  583. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/auth/api_key.py +0 -0
  584. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/auth/oauth.py +0 -0
  585. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/auth/oidc.py +0 -0
  586. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/auth/scopes.py +0 -0
  587. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/cli.py +0 -0
  588. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/elicitation.py +0 -0
  589. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/icons.py +0 -0
  590. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/recipe_adapter.py +0 -0
  591. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/recipe_cli.py +0 -0
  592. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/registry.py +0 -0
  593. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/sampling.py +0 -0
  594. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/server.py +0 -0
  595. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/tasks.py +0 -0
  596. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/tool_index.py +0 -0
  597. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/transports/__init__.py +0 -0
  598. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/transports/http_stream.py +0 -0
  599. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/mcp_server/transports/stdio.py +0 -0
  600. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/n8n/__init__.py +0 -0
  601. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/n8n/client.py +0 -0
  602. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/n8n/converter.py +0 -0
  603. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/n8n/preview.py +0 -0
  604. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/n8n/reverse_converter.py +0 -0
  605. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/observability/__init__.py +0 -0
  606. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/observability/langextract.py +0 -0
  607. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/observability/langfuse.py +0 -0
  608. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/__init__.py +0 -0
  609. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/config.py +0 -0
  610. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/conversation/__init__.py +0 -0
  611. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/conversation/async_mysql.py +0 -0
  612. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/conversation/async_postgres.py +0 -0
  613. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  614. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/conversation/base.py +0 -0
  615. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/conversation/json_store.py +0 -0
  616. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/conversation/mysql.py +0 -0
  617. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/conversation/postgres.py +0 -0
  618. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/conversation/singlestore.py +0 -0
  619. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/conversation/sqlite.py +0 -0
  620. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/conversation/supabase.py +0 -0
  621. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/conversation/surrealdb.py +0 -0
  622. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/conversation/turso.py +0 -0
  623. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/factory.py +0 -0
  624. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/hooks/__init__.py +0 -0
  625. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  626. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/__init__.py +0 -0
  627. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/base.py +0 -0
  628. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/cassandra.py +0 -0
  629. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/chroma.py +0 -0
  630. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  631. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  632. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/couchbase.py +0 -0
  633. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/lancedb.py +0 -0
  634. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  635. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  636. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  637. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/milvus.py +0 -0
  638. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  639. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/pgvector.py +0 -0
  640. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/pinecone.py +0 -0
  641. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/qdrant.py +0 -0
  642. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  643. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  644. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  645. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  646. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  647. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/knowledge/weaviate.py +0 -0
  648. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/migrations/__init__.py +0 -0
  649. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/migrations/manager.py +0 -0
  650. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/orchestrator.py +0 -0
  651. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/registry.py +0 -0
  652. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/state/__init__.py +0 -0
  653. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/state/async_mongodb.py +0 -0
  654. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/state/base.py +0 -0
  655. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/state/dynamodb.py +0 -0
  656. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/state/firestore.py +0 -0
  657. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/state/gcs.py +0 -0
  658. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/state/memory.py +0 -0
  659. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/state/mongodb.py +0 -0
  660. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/state/redis.py +0 -0
  661. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/state/upstash.py +0 -0
  662. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/state/valkey.py +0 -0
  663. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/tests/__init__.py +0 -0
  664. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/tests/test_all_backends.py +0 -0
  665. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  666. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/profiler.py +0 -0
  667. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/push/__init__.py +0 -0
  668. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/push/client.py +0 -0
  669. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/push/transports.py +0 -0
  670. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/recipe/__init__.py +0 -0
  671. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/recipe/bridge.py +0 -0
  672. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/recipe/core.py +0 -0
  673. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/recipe/exceptions.py +0 -0
  674. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/recipe/history.py +0 -0
  675. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/recipe/models.py +0 -0
  676. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/recipe/operations.py +0 -0
  677. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/recipe/policy.py +0 -0
  678. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/recipe/registry.py +0 -0
  679. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/recipe/runtime.py +0 -0
  680. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/recipe/security.py +0 -0
  681. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/recipe/serve.py +0 -0
  682. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/recipe/server.py +0 -0
  683. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/replay/__init__.py +0 -0
  684. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/replay/analyzer.py +0 -0
  685. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/replay/applier.py +0 -0
  686. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/replay/judge.py +0 -0
  687. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/replay/plan.py +0 -0
  688. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/replay/player.py +0 -0
  689. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/replay/reader.py +0 -0
  690. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/replay/storage.py +0 -0
  691. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/replay/writer.py +0 -0
  692. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/sandbox/__init__.py +0 -0
  693. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/sandbox/_compat.py +0 -0
  694. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/sandbox/_shell.py +0 -0
  695. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/sandbox/daytona.py +0 -0
  696. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/sandbox/e2b.py +0 -0
  697. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/sandbox/modal.py +0 -0
  698. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/sandbox/sandlock.py +0 -0
  699. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/sandbox/subprocess.py +0 -0
  700. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/scheduler/agent_scheduler.py +0 -0
  701. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/scheduler/base.py +0 -0
  702. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/scheduler/daemon_manager.py +0 -0
  703. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/scheduler/deployment.py +0 -0
  704. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/scheduler/executor.py +0 -0
  705. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/scheduler/shared.py +0 -0
  706. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/scheduler/state_manager.py +0 -0
  707. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/scheduler/yaml_loader.py +0 -0
  708. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/security/__init__.py +0 -0
  709. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/security/audit.py +0 -0
  710. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/security/injection.py +0 -0
  711. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/security/protected.py +0 -0
  712. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/setup/__init__.py +0 -0
  713. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/setup/build.py +0 -0
  714. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/setup/post_install.py +0 -0
  715. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/setup/setup_conda_env.py +0 -0
  716. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/setup.py +0 -0
  717. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/__init__.py +0 -0
  718. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/ai_generator.py +0 -0
  719. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/config.py +0 -0
  720. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/dedupe.py +0 -0
  721. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/discovery.py +0 -0
  722. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/drift.py +0 -0
  723. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/engine.py +0 -0
  724. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/enhanced_templates.py +0 -0
  725. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/example_verifier.py +0 -0
  726. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/manifest.py +0 -0
  727. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/models.py +0 -0
  728. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/reports.py +0 -0
  729. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/templates.py +0 -0
  730. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/undo_redo.py +0 -0
  731. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/standardise/validator.py +0 -0
  732. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/storage/__init__.py +0 -0
  733. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/storage/dynamodb_adapter.py +0 -0
  734. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/storage/mongodb_adapter.py +0 -0
  735. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/storage/postgresql_adapter.py +0 -0
  736. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/storage/redis_adapter.py +0 -0
  737. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/storage/valkey_adapter.py +0 -0
  738. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/suite_runner/__init__.py +0 -0
  739. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/suite_runner/batch_source.py +0 -0
  740. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/suite_runner/cli_docs_source.py +0 -0
  741. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/suite_runner/discovery.py +0 -0
  742. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/suite_runner/docs_source.py +0 -0
  743. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/suite_runner/examples_source.py +0 -0
  744. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/suite_runner/executor.py +0 -0
  745. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/suite_runner/models.py +0 -0
  746. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/suite_runner/report_viewer.py +0 -0
  747. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/suite_runner/reporter.py +0 -0
  748. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/suite_runner/runner.py +0 -0
  749. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/templates/__init__.py +0 -0
  750. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/templates/cache.py +0 -0
  751. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/templates/dependency_checker.py +0 -0
  752. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/templates/discovery.py +0 -0
  753. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/templates/loader.py +0 -0
  754. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/templates/registry.py +0 -0
  755. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/templates/resolver.py +0 -0
  756. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/templates/security.py +0 -0
  757. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/templates/tool_override.py +0 -0
  758. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/templates/tools_doctor.py +0 -0
  759. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/test.py +0 -0
  760. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/tool_registry.py +0 -0
  761. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/tools/__init__.py +0 -0
  762. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/tools/audio.py +0 -0
  763. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/tools/glob_tool.py +0 -0
  764. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/tools/grep_tool.py +0 -0
  765. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/tools/multiedit.py +0 -0
  766. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/tools/skill_manage.py +0 -0
  767. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/train/__init__.py +0 -0
  768. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/train/_ollama.py +0 -0
  769. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/train/agents/__init__.py +0 -0
  770. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/train/agents/grader.py +0 -0
  771. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/train/agents/hook.py +0 -0
  772. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/train/agents/models.py +0 -0
  773. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/train/agents/orchestrator.py +0 -0
  774. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/train/agents/storage.py +0 -0
  775. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/train/llm/__init__.py +0 -0
  776. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/train/llm/trainer.py +0 -0
  777. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/train.py +0 -0
  778. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/train_vision.py +0 -0
  779. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui/_aiui_datastore.py +0 -0
  780. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui/_external_agents.py +0 -0
  781. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui/callbacks.py +0 -0
  782. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui/components/aicoder.py +0 -0
  783. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui/context.py +0 -0
  784. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui/database_config.py +0 -0
  785. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui_agents/__init__.py +0 -0
  786. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui_agents/default_app.py +0 -0
  787. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui_bot/__init__.py +0 -0
  788. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui_bot/default_app.py +0 -0
  789. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui_chat/__init__.py +0 -0
  790. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui_chat/default_app.py +0 -0
  791. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui_dashboard/default_app.py +0 -0
  792. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui_realtime/__init__.py +0 -0
  793. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/ui_realtime/default_app.py +0 -0
  794. {praisonai-4.6.47 → praisonai-4.6.48}/praisonai/upload_vision.py +0 -0
  795. {praisonai-4.6.47 → praisonai-4.6.48}/setup.cfg +0 -0
  796. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test.py +0 -0
  797. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_agents_playbook.py +0 -0
  798. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_approval_system.py +0 -0
  799. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_basic.py +0 -0
  800. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_cli_features.py +0 -0
  801. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_custom_tools_fix.py +0 -0
  802. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_double_api_fix.py +0 -0
  803. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_n8n_agent_invoke.py +0 -0
  804. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_n8n_cli_feature.py +0 -0
  805. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_n8n_integration.py +0 -0
  806. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_phase2_refactor.py +0 -0
  807. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_recipe.py +0 -0
  808. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_registry.py +0 -0
  809. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_runner.py +0 -0
  810. {praisonai-4.6.47 → praisonai-4.6.48}/tests/test_sandboxed_agent_compatibility.py +0 -0
  811. {praisonai-4.6.47 → praisonai-4.6.48}/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.47
3
+ Version: 4.6.48
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.47
14
+ Requires-Dist: praisonaiagents>=1.6.48
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.47
3
+ Version: 4.6.48
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.47
14
+ Requires-Dist: praisonaiagents>=1.6.48
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
@@ -82,6 +82,7 @@ praisonai/bots/_resilience.py
82
82
  praisonai/bots/_session.py
83
83
  praisonai/bots/_slack_approval.py
84
84
  praisonai/bots/_telegram_approval.py
85
+ praisonai/bots/_typing_indicator.py
85
86
  praisonai/bots/_unknown_user.py
86
87
  praisonai/bots/_webhook_approval.py
87
88
  praisonai/bots/_whatsapp_web_adapter.py
@@ -508,6 +509,7 @@ praisonai/gateway/magic_link.py
508
509
  praisonai/gateway/origin_check.py
509
510
  praisonai/gateway/pairing.py
510
511
  praisonai/gateway/pairing_routes.py
512
+ praisonai/gateway/port_utils.py
511
513
  praisonai/gateway/push_channels.py
512
514
  praisonai/gateway/push_delivery.py
513
515
  praisonai/gateway/push_polling.py
@@ -515,6 +517,7 @@ praisonai/gateway/push_presence.py
515
517
  praisonai/gateway/rate_limiter.py
516
518
  praisonai/gateway/redis_pubsub.py
517
519
  praisonai/gateway/server.py
520
+ praisonai/gateway/unicode_utils.py
518
521
  praisonai/inbuilt_tools/__init__.py
519
522
  praisonai/inbuilt_tools/autogen_tools.py
520
523
  praisonai/inc/__init__.py
@@ -698,6 +701,7 @@ praisonai/sandbox/ssh.py
698
701
  praisonai/sandbox/subprocess.py
699
702
  praisonai/scheduler/__init__.py
700
703
  praisonai/scheduler/agent_scheduler.py
704
+ praisonai/scheduler/async_agent_scheduler.py
701
705
  praisonai/scheduler/base.py
702
706
  praisonai/scheduler/daemon_manager.py
703
707
  praisonai/scheduler/deployment.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.47
4
+ praisonaiagents>=1.6.48
5
5
  python-dotenv>=0.19.0
6
6
  litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
@@ -555,7 +555,7 @@ class AgentsGenerator:
555
555
  for agent_name, agent_config in config['agents'].items():
556
556
  role_config = dict(agent_config) if agent_config else {}
557
557
  # Convert 'instructions' to 'backstory' if present
558
- # Note: preserve 'instructions' key for framework adapters
558
+ # Note: preserve 'instructions' key for adapters that pass it to PraisonAgent
559
559
  if 'instructions' in role_config and 'backstory' not in role_config:
560
560
  role_config['backstory'] = role_config['instructions']
561
561
  # Ensure required fields have defaults
@@ -736,4 +736,4 @@ class AgentsGenerator:
736
736
  if result.get("status") == "completed":
737
737
  return result.get("output", "Workflow completed successfully")
738
738
  else:
739
- return f"Workflow failed: {result.get('error', 'Unknown error')}"
739
+ return f"Workflow failed: {result.get('error', 'Unknown error')}"
@@ -0,0 +1,23 @@
1
+ """Backward-compatible re-export. Prefer `praisonai.scheduler`.
2
+
3
+ This module is deprecated. Use the canonical implementation in the
4
+ scheduler package for full functionality including async support.
5
+ """
6
+
7
+ import warnings
8
+
9
+ warnings.warn(
10
+ "praisonai.async_agent_scheduler is deprecated; "
11
+ "use 'from praisonai.scheduler import AsyncAgentScheduler' instead.",
12
+ DeprecationWarning,
13
+ stacklevel=2,
14
+ )
15
+
16
+ # Re-export from the canonical location
17
+ from .scheduler.async_agent_scheduler import ( # noqa: F401
18
+ AsyncAgentScheduler,
19
+ AsyncPraisonAgentExecutor,
20
+ AsyncAgentExecutorInterface,
21
+ create_async_agent_scheduler,
22
+ logger,
23
+ )
@@ -0,0 +1,116 @@
1
+ """
2
+ Telegram typing indicator renewal utility.
3
+
4
+ Provides a background task to periodically renew typing indicators
5
+ during long-running operations like agent.chat() calls.
6
+ """
7
+
8
+ import asyncio
9
+ import logging
10
+ from typing import Any, Callable, Coroutine, Optional, TypeVar
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+ T = TypeVar("T")
15
+
16
+
17
+ class TypingIndicator:
18
+ """Manages typing indicator renewal during long operations."""
19
+
20
+ def __init__(self, interval: float = 4.0):
21
+ """
22
+ Initialize typing indicator manager.
23
+
24
+ Args:
25
+ interval: Seconds between typing renewals (default 4.0 for Telegram)
26
+ """
27
+ self.interval = interval
28
+ self._task: Optional[asyncio.Task] = None
29
+ self._cancelled = False
30
+
31
+ async def start(self, typing_func: Callable[[], Any]) -> None:
32
+ """
33
+ Start typing indicator renewal task.
34
+
35
+ Args:
36
+ typing_func: Async function that sends typing action
37
+ """
38
+ if self._task and not self._task.done():
39
+ # Already running
40
+ return
41
+
42
+ self._cancelled = False
43
+ self._task = asyncio.create_task(self._typing_loop(typing_func))
44
+
45
+ def cancel(self) -> None:
46
+ """Cancel the typing indicator renewal."""
47
+ self._cancelled = True
48
+ if self._task and not self._task.done():
49
+ self._task.cancel()
50
+
51
+ async def _typing_loop(self, typing_func: Callable[[], Any]) -> None:
52
+ """
53
+ Background loop that periodically sends typing action.
54
+
55
+ Args:
56
+ typing_func: Function to call for sending typing indicator
57
+ """
58
+ try:
59
+ while not self._cancelled:
60
+ try:
61
+ # Send typing indicator
62
+ if asyncio.iscoroutinefunction(typing_func):
63
+ await typing_func()
64
+ else:
65
+ typing_func()
66
+
67
+ # Wait for interval or until cancelled
68
+ await asyncio.sleep(self.interval)
69
+
70
+ except asyncio.CancelledError:
71
+ break
72
+ except Exception as e:
73
+ logger.debug(f"Typing indicator send failed: {e}")
74
+ # Continue trying even if one fails
75
+ await asyncio.sleep(self.interval)
76
+ except asyncio.CancelledError:
77
+ pass
78
+ finally:
79
+ logger.debug("Typing indicator loop ended")
80
+
81
+
82
+ async def with_typing_renewal(
83
+ typing_func: Callable[[], Any],
84
+ operation_coro: Coroutine[Any, Any, T],
85
+ interval: float = 4.0,
86
+ ) -> T:
87
+ """
88
+ Execute an operation with typing indicator renewal.
89
+
90
+ Args:
91
+ typing_func: Function to call for typing indication
92
+ operation_coro: Coroutine to execute while showing typing
93
+ interval: Seconds between typing renewals
94
+
95
+ Returns:
96
+ Result of the operation
97
+ """
98
+ indicator = TypingIndicator(interval=interval)
99
+
100
+ try:
101
+ # Start typing renewal
102
+ await indicator.start(typing_func)
103
+
104
+ # Execute the operation
105
+ result = await operation_coro
106
+
107
+ return result
108
+
109
+ finally:
110
+ # Always cancel typing renewal and await cleanup
111
+ indicator.cancel()
112
+ if indicator._task is not None:
113
+ try:
114
+ await indicator._task
115
+ except (asyncio.CancelledError, Exception):
116
+ pass
@@ -33,6 +33,7 @@ from ._debounce import InboundDebouncer
33
33
  from ._ack import AckReactor
34
34
  from ._unknown_user import UnknownUserHandler, BotContext
35
35
  from ._pairing_ui import PairingUIBuilder, PairingCallbackHandler
36
+ from ..gateway.unicode_utils import safe_error_message, safe_log_message, extract_root_cause_from_error
36
37
  from ..gateway.pairing import PairingStore
37
38
 
38
39
  logger = logging.getLogger(__name__)
@@ -222,9 +223,6 @@ class TelegramBot(ChatCommandMixin, MessageHookMixin):
222
223
  logger.error(f"Message handler error: {e}")
223
224
 
224
225
  if self._agent and not message.is_command:
225
- if self.config.typing_indicator:
226
- await update.message.chat.send_action("typing")
227
-
228
226
  # Ack reaction
229
227
  ack_ctx = None
230
228
  if self._ack.enabled:
@@ -255,11 +253,28 @@ class TelegramBot(ChatCommandMixin, MessageHookMixin):
255
253
  ) if update.message.from_user else ""
256
254
  try:
257
255
  message_text = await self._debouncer.debounce(user_id, message_text)
258
- response = await self._session.chat(
259
- self._agent, user_id, message_text,
260
- chat_id=str(update.message.chat_id) if update.message.chat_id else "",
261
- user_name=user_name,
262
- )
256
+
257
+ # Show typing indicator with renewal during long operation
258
+ if self.config.typing_indicator:
259
+ from ._typing_indicator import with_typing_renewal
260
+
261
+ async def _typing_action():
262
+ await update.message.chat.send_action("typing")
263
+
264
+ response = await with_typing_renewal(
265
+ typing_func=_typing_action,
266
+ operation_coro=self._session.chat(
267
+ self._agent, user_id, message_text,
268
+ chat_id=str(update.message.chat_id) if update.message.chat_id else "",
269
+ user_name=user_name,
270
+ )
271
+ )
272
+ else:
273
+ response = await self._session.chat(
274
+ self._agent, user_id, message_text,
275
+ chat_id=str(update.message.chat_id) if update.message.chat_id else "",
276
+ user_name=user_name,
277
+ )
263
278
  send_result = self.fire_message_sending(
264
279
  str(update.message.chat_id), str(response),
265
280
  reply_to=str(update.message.message_id),
@@ -278,8 +293,9 @@ class TelegramBot(ChatCommandMixin, MessageHookMixin):
278
293
  if ack_ctx:
279
294
  await self._ack.done(ack_ctx, react_fn=_tg_react, unreact_fn=_tg_unreact)
280
295
  except Exception as e:
281
- logger.error(f"Agent error: {e}")
282
- await update.message.reply_text(f"Error: {str(e)}")
296
+ logger.error(f"Agent error: {safe_log_message(e)}")
297
+ user_error = extract_root_cause_from_error(str(e))
298
+ await update.message.reply_text(f"Error: {safe_error_message(user_error)}")
283
299
 
284
300
  async def handle_voice(update: Update, context: ContextTypes.DEFAULT_TYPE):
285
301
  """Handle voice messages."""
@@ -17,7 +17,7 @@ app = typer.Typer(
17
17
  @app.command("start")
18
18
  def gateway_start(
19
19
  host: str = typer.Option("127.0.0.1", "--host", help="Host to bind to"),
20
- port: int = typer.Option(8765, "--port", help="Port to listen on"),
20
+ port: Optional[int] = typer.Option(None, "--port", help="Port to listen on"),
21
21
  agents: Optional[str] = typer.Option(None, "--agents", help="Path to agent configuration file"),
22
22
  config: Optional[str] = typer.Option(None, "--config", help="Path to gateway.yaml for multi-bot mode"),
23
23
  ):
@@ -27,17 +27,54 @@ def gateway_start(
27
27
  praisonai gateway start
28
28
  praisonai gateway start --config gateway.yaml
29
29
  praisonai gateway start --agents agents.yaml --port 9000
30
+ GATEWAY_PORT=9000 praisonai gateway start
30
31
  """
32
+ import os
31
33
  from ..features.gateway import GatewayHandler
32
34
 
35
+ # Check for GATEWAY_PORT environment variable if port not specified
36
+ if port is None:
37
+ try:
38
+ port = int(os.environ.get("GATEWAY_PORT", "8765"))
39
+ except ValueError:
40
+ port = 8765
41
+
33
42
  handler = GatewayHandler()
34
43
  handler.start(host=host, port=port, agent_file=agents, config_file=config)
35
44
 
36
45
 
46
+ @app.command("stop")
47
+ def gateway_stop(
48
+ host: str = typer.Option("127.0.0.1", "--host", help="Gateway host"),
49
+ port: Optional[int] = typer.Option(None, "--port", help="Gateway port"),
50
+ force: bool = typer.Option(False, "--force", help="Force stop (kill process)"),
51
+ ):
52
+ """Stop a running gateway instance.
53
+
54
+ Examples:
55
+ praisonai gateway stop
56
+ praisonai gateway stop --port 9000
57
+ praisonai gateway stop --force
58
+ """
59
+ import os
60
+ from ..features.gateway import GatewayHandler
61
+ from ..output.console import get_output_controller
62
+
63
+ # Check for GATEWAY_PORT environment variable if port not specified
64
+ if port is None:
65
+ try:
66
+ port = int(os.environ.get("GATEWAY_PORT", "8765"))
67
+ except ValueError:
68
+ port = 8765
69
+
70
+ handler = GatewayHandler()
71
+ handler.stop(host=host, port=port, force=force)
72
+
73
+
37
74
  @app.command("status")
38
75
  def gateway_status(
39
76
  host: str = typer.Option("127.0.0.1", "--host", help="Gateway host"),
40
- port: int = typer.Option(8765, "--port", help="Gateway port"),
77
+ port: Optional[int] = typer.Option(None, "--port", help="Gateway port"),
41
78
  daemon_only: bool = typer.Option(False, "--daemon-only", help="Show only daemon status"),
42
79
  ):
43
80
  """Check gateway status and daemon service status.
@@ -47,10 +84,18 @@ def gateway_status(
47
84
  praisonai gateway status --port 9000
48
85
  praisonai gateway status --daemon-only
49
86
  """
87
+ import os
50
88
  from ..features.gateway import GatewayHandler
51
89
  from praisonai.daemon import get_daemon_status
52
90
  from ..output.console import get_output_controller
53
91
 
92
+ # Check for GATEWAY_PORT environment variable if port not specified
93
+ if port is None:
94
+ try:
95
+ port = int(os.environ.get("GATEWAY_PORT", "8765"))
96
+ except ValueError:
97
+ port = 8765
98
+
54
99
  output = get_output_controller()
55
100
 
56
101
  # Show daemon status
@@ -394,6 +439,7 @@ Manage the gateway server: praisonai gateway <command>
394
439
 
395
440
  [bold]Commands:[/bold]
396
441
  [green]start[/green] Start the gateway server
442
+ [green]stop[/green] Stop a running gateway instance
397
443
  [green]status[/green] Check gateway and daemon status
398
444
  [green]channels[/green] List channels from gateway.yaml
399
445
  [green]send[/green] Send a test message to a channel
@@ -200,3 +200,141 @@ def check_bot_security(config: DoctorConfig) -> CheckResult:
200
200
  )
201
201
 
202
202
 
203
+ @register_check(
204
+ id="multi_channel_tokens",
205
+ title="Multi-Channel Token Configuration",
206
+ description="Check for duplicate tokens across channels and validate multi-channel setup",
207
+ category=CheckCategory.BOTS,
208
+ severity=CheckSeverity.MEDIUM,
209
+ )
210
+ def check_multi_channel_tokens(config: DoctorConfig) -> CheckResult:
211
+ """Check multi-channel token configuration for duplicates and naming conventions."""
212
+ start = time.time()
213
+ from praisonai.cli._paths import resolve_bot_config_path
214
+ config_path = getattr(config, 'config_file', None) or resolve_bot_config_path("bot.yaml")
215
+
216
+ # Check if bot.yaml exists
217
+ if not os.path.exists(config_path):
218
+ return CheckResult(
219
+ id="multi_channel_tokens",
220
+ title="Multi-Channel Token Configuration",
221
+ category=CheckCategory.BOTS,
222
+ status=CheckStatus.SKIP,
223
+ message=f"{config_path} not found - multi-channel check skipped",
224
+ duration_ms=(time.time() - start) * 1000,
225
+ )
226
+
227
+ try:
228
+ from praisonai.bots._config_schema import load_and_validate_bot_yaml
229
+ config_data = load_and_validate_bot_yaml(config_path)
230
+
231
+ warnings = []
232
+ errors = []
233
+
234
+ # Extract token environment variables from channels
235
+ channel_tokens = {} # env_var -> [channel_keys_using_it]
236
+ channel_platforms = {} # platform -> [channel_keys]
237
+
238
+ for channel_name, channel_config in config_data.channels.items():
239
+ platform = channel_config.platform
240
+ token_ref = channel_config.token
241
+
242
+ # Track platforms
243
+ if platform not in channel_platforms:
244
+ channel_platforms[platform] = []
245
+ channel_platforms[platform].append(channel_name)
246
+
247
+ # Extract environment variable from token reference like ${TELEGRAM_BOT_TOKEN}
248
+ if token_ref and token_ref.startswith("${") and token_ref.endswith("}"):
249
+ env_var = token_ref[2:-1] # Remove ${ and }
250
+ if env_var not in channel_tokens:
251
+ channel_tokens[env_var] = []
252
+ channel_tokens[env_var].append(channel_name)
253
+
254
+ # Check for duplicate token usage by env var reference
255
+ for env_var, channels in channel_tokens.items():
256
+ if len(channels) > 1:
257
+ errors.append(f"Token {env_var} is used by multiple channels: {', '.join(channels)}")
258
+
259
+ # Also check duplicate token usage by resolved token value
260
+ token_value_to_channels = {} # token_value -> [channel_keys]
261
+ for env_var, channels in channel_tokens.items():
262
+ token_value = os.environ.get(env_var)
263
+ if token_value:
264
+ token_value_to_channels.setdefault(token_value, []).extend(channels)
265
+
266
+ for _, channels in token_value_to_channels.items():
267
+ unique_channels = sorted(set(channels))
268
+ if len(unique_channels) > 1:
269
+ errors.append(
270
+ f"Same bot token value is used by multiple channels: {', '.join(unique_channels)}"
271
+ )
272
+
273
+ # Check for multi-platform channels with good naming conventions
274
+ for platform, channels in channel_platforms.items():
275
+ if len(channels) > 1:
276
+ # Multiple channels on same platform - check naming convention
277
+ for channel_name in channels:
278
+ channel_config = config_data.channels[channel_name]
279
+ token_ref = channel_config.token
280
+ if token_ref and token_ref.startswith("${") and token_ref.endswith("}"):
281
+ env_var = token_ref[2:-1]
282
+
283
+ # Check if follows naming convention: PLATFORM_ROLE_BOT_TOKEN
284
+ expected_pattern = f"{platform.upper()}_"
285
+ if not env_var.startswith(expected_pattern) or not env_var.endswith("_BOT_TOKEN"):
286
+ warnings.append(f"Channel '{channel_name}' token '{env_var}' doesn't follow naming convention '{platform.upper()}_<ROLE>_BOT_TOKEN'")
287
+
288
+ # Check for missing tokens
289
+ missing_tokens = []
290
+ for env_var in channel_tokens.keys():
291
+ if not os.environ.get(env_var):
292
+ missing_tokens.append(env_var)
293
+
294
+ # Determine status
295
+ if errors:
296
+ return CheckResult(
297
+ id="multi_channel_tokens",
298
+ title="Multi-Channel Token Configuration",
299
+ category=CheckCategory.BOTS,
300
+ status=CheckStatus.FAIL,
301
+ message=f"Token configuration errors: {len(errors)} duplicate(s) found",
302
+ details='\n'.join(errors + warnings),
303
+ remediation="Each channel must have a unique bot token. Create separate bots in @BotFather and use unique environment variables.",
304
+ duration_ms=(time.time() - start) * 1000,
305
+ )
306
+ elif warnings or missing_tokens:
307
+ all_issues = warnings + [f"Missing token: {token}" for token in missing_tokens]
308
+ return CheckResult(
309
+ id="multi_channel_tokens",
310
+ title="Multi-Channel Token Configuration",
311
+ category=CheckCategory.BOTS,
312
+ status=CheckStatus.WARN,
313
+ message=f"Multi-channel setup with {len(all_issues)} recommendation(s)",
314
+ details='\n'.join(all_issues),
315
+ remediation="Consider following the naming convention PLATFORM_ROLE_BOT_TOKEN for clarity.",
316
+ duration_ms=(time.time() - start) * 1000,
317
+ )
318
+ else:
319
+ channel_count = sum(len(channels) for channels in channel_platforms.values())
320
+ return CheckResult(
321
+ id="multi_channel_tokens",
322
+ title="Multi-Channel Token Configuration",
323
+ category=CheckCategory.BOTS,
324
+ status=CheckStatus.PASS,
325
+ message=f"Multi-channel configuration looks good ({channel_count} channels)",
326
+ duration_ms=(time.time() - start) * 1000,
327
+ )
328
+
329
+ except Exception as e:
330
+ return CheckResult(
331
+ id="multi_channel_tokens",
332
+ title="Multi-Channel Token Configuration",
333
+ category=CheckCategory.BOTS,
334
+ status=CheckStatus.ERROR,
335
+ message=f"Error checking multi-channel config: {str(e)[:100]}",
336
+ remediation="Fix bot.yaml syntax errors first",
337
+ duration_ms=(time.time() - start) * 1000,
338
+ )
339
+
340
+
@@ -168,6 +168,82 @@ class GatewayHandler:
168
168
  except Exception as e:
169
169
  print(f"Error loading agents: {e}")
170
170
 
171
+ def stop(self, host: str = "127.0.0.1", port: int = 8765, force: bool = False) -> None:
172
+ """Stop a running gateway instance.
173
+
174
+ Args:
175
+ host: Gateway host
176
+ port: Gateway port
177
+ force: Force stop (kill process)
178
+ """
179
+ try:
180
+ from praisonai.gateway.port_utils import GatewayPIDLock
181
+ except ImportError as e:
182
+ print(f"Error: Gateway utilities not available. {e}")
183
+ return
184
+
185
+ pid_lock = GatewayPIDLock(host=host, port=port)
186
+ lock_info = pid_lock.get_lock_info()
187
+
188
+ if not lock_info:
189
+ print(f"No gateway PID lock found. Gateway may not be running on {host}:{port}")
190
+ return
191
+
192
+ pid = lock_info['pid']
193
+ is_running = lock_info['is_running']
194
+
195
+ if not is_running:
196
+ print(f"Gateway process (PID {pid}) is no longer running. Cleaning up stale lock.")
197
+ pid_lock.release_lock()
198
+ return
199
+
200
+ if force:
201
+ self._force_kill_process(pid)
202
+ else:
203
+ self._graceful_stop_process(pid)
204
+
205
+ # Clean up lock file
206
+ pid_lock.release_lock()
207
+ print(f"Gateway stopped (PID {pid})")
208
+
209
+ def _graceful_stop_process(self, pid: int) -> None:
210
+ """Gracefully stop a process by sending SIGTERM."""
211
+ import signal
212
+ import time
213
+ import os
214
+
215
+ try:
216
+ print(f"Sending stop signal to PID {pid}...")
217
+ os.kill(pid, signal.SIGTERM)
218
+
219
+ # Wait up to 10 seconds for graceful shutdown
220
+ for _ in range(100):
221
+ try:
222
+ os.kill(pid, 0) # Check if process exists
223
+ time.sleep(0.1)
224
+ except (OSError, ProcessLookupError):
225
+ return # Process has stopped
226
+
227
+ print(f"Process {pid} did not stop gracefully, forcing...")
228
+ self._force_kill_process(pid)
229
+
230
+ except (OSError, ProcessLookupError):
231
+ print(f"Process {pid} not found or already stopped")
232
+
233
+ def _force_kill_process(self, pid: int) -> None:
234
+ """Force kill a process with SIGKILL (Windows: SIGTERM)."""
235
+ import signal
236
+ import os
237
+ import sys
238
+
239
+ try:
240
+ print(f"Force killing PID {pid}...")
241
+ # Use SIGTERM on Windows since SIGKILL is not available
242
+ sig = signal.SIGTERM if sys.platform == "win32" else signal.SIGKILL
243
+ os.kill(pid, sig)
244
+ except (OSError, ProcessLookupError):
245
+ print(f"Process {pid} not found or already stopped")
246
+
171
247
  def status(self, host: str = "127.0.0.1", port: int = 8765) -> None:
172
248
  """Check gateway status.
173
249
 
@@ -178,6 +254,35 @@ class GatewayHandler:
178
254
  import urllib.request
179
255
  import json
180
256
 
257
+ # Check PID lock info first
258
+ try:
259
+ from praisonai.gateway.port_utils import GatewayPIDLock, is_port_in_use
260
+ pid_lock = GatewayPIDLock(host=host, port=port)
261
+ lock_info = pid_lock.get_lock_info()
262
+
263
+ if lock_info:
264
+ pid = lock_info['pid']
265
+ is_running = lock_info['is_running']
266
+ lock_host = lock_info['host']
267
+ lock_port = lock_info['port']
268
+
269
+ if is_running:
270
+ print(f"Gateway PID lock: Process {pid} running ({lock_host}:{lock_port})")
271
+ else:
272
+ print(f"Gateway PID lock: Stale lock (process {pid} not running)")
273
+ else:
274
+ print("Gateway PID lock: No lock file found")
275
+
276
+ # Check if port is in use
277
+ if is_port_in_use(host, port):
278
+ print(f"Port {host}:{port}: In use")
279
+ else:
280
+ print(f"Port {host}:{port}: Available")
281
+
282
+ except ImportError:
283
+ print("PID lock status: Utilities not available")
284
+
285
+ # Try to connect to health endpoint
181
286
  url = f"http://{host}:{port}/health"
182
287
 
183
288
  try: