PraisonAI 4.6.56__tar.gz → 4.6.57__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 (827) hide show
  1. {praisonai-4.6.56 → praisonai-4.6.57}/PKG-INFO +2 -2
  2. {praisonai-4.6.56 → praisonai-4.6.57}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.56 → praisonai-4.6.57}/PraisonAI.egg-info/SOURCES.txt +3 -0
  4. {praisonai-4.6.56 → praisonai-4.6.57}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/agents_generator.py +40 -51
  6. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/__init__.py +22 -0
  7. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_config_schema.py +34 -0
  8. praisonai-4.6.57/praisonai/bots/_ingress.py +382 -0
  9. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_session.py +140 -55
  10. praisonai-4.6.57/praisonai/bots/_streaming.py +300 -0
  11. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/agentmail.py +4 -0
  12. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/discord.py +2 -0
  13. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/email.py +4 -0
  14. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/slack.py +4 -0
  15. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/telegram.py +94 -27
  16. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/whatsapp.py +10 -2
  17. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/chat.py +2 -0
  18. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/gateway.py +126 -0
  19. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/run.py +5 -1
  20. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/configuration/schema.py +18 -1
  21. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/interactive/async_tui.py +33 -2
  22. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/main.py +60 -2
  23. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/kanban_dispatcher.py +36 -14
  24. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/server.py +147 -41
  25. praisonai-4.6.57/praisonai/gateway/supervisor.py +277 -0
  26. praisonai-4.6.57/praisonai/version.py +1 -0
  27. {praisonai-4.6.56 → praisonai-4.6.57}/pyproject.toml +1 -1
  28. praisonai-4.6.56/praisonai/version.py +0 -1
  29. {praisonai-4.6.56 → praisonai-4.6.57}/PraisonAI.egg-info/dependency_links.txt +0 -0
  30. {praisonai-4.6.56 → praisonai-4.6.57}/PraisonAI.egg-info/entry_points.txt +0 -0
  31. {praisonai-4.6.56 → praisonai-4.6.57}/PraisonAI.egg-info/top_level.txt +0 -0
  32. {praisonai-4.6.56 → praisonai-4.6.57}/README.md +0 -0
  33. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/__init__.py +0 -0
  34. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/__main__.py +0 -0
  35. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_approval_spec.py +0 -0
  36. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_async_bridge.py +0 -0
  37. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_dev/__init__.py +0 -0
  38. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_dev/api_md.py +0 -0
  39. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_dev/parity/__init__.py +0 -0
  40. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_dev/parity/docs_extractor.py +0 -0
  41. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_dev/parity/docs_generator.py +0 -0
  42. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_dev/parity/generator.py +0 -0
  43. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  44. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_dev/parity/python_extractor.py +0 -0
  45. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  46. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_dev/parity/rust_extractor.py +0 -0
  47. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  48. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  49. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  50. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_entrypoint.py +0 -0
  51. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_framework_availability.py +0 -0
  52. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_logging.py +0 -0
  53. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_registry.py +0 -0
  54. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/_safe_loader.py +0 -0
  55. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/acp/__init__.py +0 -0
  56. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/acp/config.py +0 -0
  57. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/acp/safe_edit.py +0 -0
  58. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/acp/server.py +0 -0
  59. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/acp/session.py +0 -0
  60. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/adapters/__init__.py +0 -0
  61. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/adapters/readers.py +0 -0
  62. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/adapters/rerankers.py +0 -0
  63. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/adapters/retrievers.py +0 -0
  64. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/adapters/vector_stores.py +0 -0
  65. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/agent.py +0 -0
  66. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/agent_scheduler.py +0 -0
  67. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/api/agent_invoke.py +0 -0
  68. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/api/call.py +0 -0
  69. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/app/__init__.py +0 -0
  70. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/app/agentos.py +0 -0
  71. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/async_agent_scheduler.py +0 -0
  72. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/audit/__init__.py +0 -0
  73. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/audit/agent_centric.py +0 -0
  74. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/auto.py +0 -0
  75. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_ack.py +0 -0
  76. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_approval.py +0 -0
  77. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_approval_base.py +0 -0
  78. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_auth.py +0 -0
  79. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_chunk.py +0 -0
  80. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_commands.py +0 -0
  81. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_debounce.py +0 -0
  82. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_defaults.py +0 -0
  83. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_discord_approval.py +0 -0
  84. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_dlq.py +0 -0
  85. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_email_utils.py +0 -0
  86. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_http_approval.py +0 -0
  87. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_mirror.py +0 -0
  88. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_pairing_ui.py +0 -0
  89. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_protocol_mixin.py +0 -0
  90. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_rate_limit.py +0 -0
  91. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_registry.py +0 -0
  92. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_resilience.py +0 -0
  93. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_slack_approval.py +0 -0
  94. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_telegram_approval.py +0 -0
  95. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_typing_indicator.py +0 -0
  96. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_unknown_user.py +0 -0
  97. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_webhook_approval.py +0 -0
  98. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  99. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/bot.py +0 -0
  100. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/botos.py +0 -0
  101. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/linear.py +0 -0
  102. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/bots/media.py +0 -0
  103. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/__init__.py +0 -0
  104. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/agent.py +0 -0
  105. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/benchmark.py +0 -0
  106. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/cdp_agent.py +0 -0
  107. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/cdp_utils.py +0 -0
  108. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/cli.py +0 -0
  109. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/diagnostics.py +0 -0
  110. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/launcher.py +0 -0
  111. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/playwright_agent.py +0 -0
  112. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/profiling.py +0 -0
  113. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/protocol.py +0 -0
  114. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/report.py +0 -0
  115. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/server.py +0 -0
  116. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/sessions.py +0 -0
  117. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/browser/video.py +0 -0
  118. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/__init__.py +0 -0
  119. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/a2a.py +0 -0
  120. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/assistants.py +0 -0
  121. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/audio.py +0 -0
  122. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/batches.py +0 -0
  123. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/completions.py +0 -0
  124. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/container_files.py +0 -0
  125. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/containers.py +0 -0
  126. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/embeddings.py +0 -0
  127. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/files.py +0 -0
  128. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/fine_tuning.py +0 -0
  129. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/guardrails.py +0 -0
  130. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/images.py +0 -0
  131. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/mcp.py +0 -0
  132. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/messages.py +0 -0
  133. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/moderations.py +0 -0
  134. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/ocr.py +0 -0
  135. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/passthrough.py +0 -0
  136. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/rag.py +0 -0
  137. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/realtime.py +0 -0
  138. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/rerank.py +0 -0
  139. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/responses.py +0 -0
  140. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/search.py +0 -0
  141. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/skills.py +0 -0
  142. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/vector_store_files.py +0 -0
  143. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/vector_stores.py +0 -0
  144. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/capabilities/videos.py +0 -0
  145. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/claw/__init__.py +0 -0
  146. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/claw/default_app.py +0 -0
  147. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/__init__.py +0 -0
  148. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/_paths.py +0 -0
  149. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/app.py +0 -0
  150. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/branding.py +0 -0
  151. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/__init__.py +0 -0
  152. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/acp.py +0 -0
  153. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/agents.py +0 -0
  154. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/app.py +0 -0
  155. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/audit.py +0 -0
  156. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/batch.py +0 -0
  157. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/benchmark.py +0 -0
  158. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/bot.py +0 -0
  159. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/browser.py +0 -0
  160. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/call.py +0 -0
  161. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/claw.py +0 -0
  162. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/code.py +0 -0
  163. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/commit.py +0 -0
  164. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/completion.py +0 -0
  165. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/config.py +0 -0
  166. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/context.py +0 -0
  167. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/dashboard.py +0 -0
  168. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/debug.py +0 -0
  169. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/deploy.py +0 -0
  170. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/diag.py +0 -0
  171. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/docs.py +0 -0
  172. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/doctor.py +0 -0
  173. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/endpoints.py +0 -0
  174. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/environment.py +0 -0
  175. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/eval.py +0 -0
  176. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/examples.py +0 -0
  177. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/flow.py +0 -0
  178. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/github.py +0 -0
  179. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/hooks.py +0 -0
  180. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/kanban.py +0 -0
  181. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/knowledge.py +0 -0
  182. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/langextract.py +0 -0
  183. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/langfuse.py +0 -0
  184. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/loop.py +0 -0
  185. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/lsp.py +0 -0
  186. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/managed.py +0 -0
  187. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/mcp.py +0 -0
  188. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/memory.py +0 -0
  189. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/mint_link.py +0 -0
  190. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/n8n.py +0 -0
  191. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/obs.py +0 -0
  192. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/onboard.py +0 -0
  193. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/package.py +0 -0
  194. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/pairing.py +0 -0
  195. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/paths.py +0 -0
  196. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/plugins.py +0 -0
  197. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/port.py +0 -0
  198. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/profile.py +0 -0
  199. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/publish.py +0 -0
  200. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/rag.py +0 -0
  201. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/realtime.py +0 -0
  202. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/recipe.py +0 -0
  203. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/registry.py +0 -0
  204. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/replay.py +0 -0
  205. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/research.py +0 -0
  206. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/retrieval.py +0 -0
  207. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/rules.py +0 -0
  208. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/sandbox.py +0 -0
  209. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/schedule.py +0 -0
  210. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/serve.py +0 -0
  211. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/session.py +0 -0
  212. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/setup.py +0 -0
  213. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/skills.py +0 -0
  214. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/standardise.py +0 -0
  215. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/templates.py +0 -0
  216. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/test.py +0 -0
  217. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/todo.py +0 -0
  218. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/tools.py +0 -0
  219. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/traces.py +0 -0
  220. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/tracker.py +0 -0
  221. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/train.py +0 -0
  222. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/ui.py +0 -0
  223. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/up.py +0 -0
  224. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/version.py +0 -0
  225. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/commands/workflow.py +0 -0
  226. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/config_loader.py +0 -0
  227. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/configuration/__init__.py +0 -0
  228. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/configuration/loader.py +0 -0
  229. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/configuration/paths.py +0 -0
  230. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/execution/__init__.py +0 -0
  231. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/execution/core.py +0 -0
  232. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/execution/profiler.py +0 -0
  233. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/execution/request.py +0 -0
  234. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/execution/result.py +0 -0
  235. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/fallback_schema.py +0 -0
  236. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/__init__.py +0 -0
  237. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/acp.py +0 -0
  238. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/action_orchestrator.py +0 -0
  239. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/agent_scheduler.py +0 -0
  240. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/agent_tools.py +0 -0
  241. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/agents.py +0 -0
  242. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/approval.py +0 -0
  243. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/at_mentions.py +0 -0
  244. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/audit_cli.py +0 -0
  245. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/auto_memory.py +0 -0
  246. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/auto_mode.py +0 -0
  247. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/autonomy_mode.py +0 -0
  248. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/background.py +0 -0
  249. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/base.py +0 -0
  250. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/benchmark.py +0 -0
  251. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/bots_cli.py +0 -0
  252. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/capabilities.py +0 -0
  253. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/checkpoints.py +0 -0
  254. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/cli_profiler.py +0 -0
  255. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/code_intelligence.py +0 -0
  256. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/compaction.py +0 -0
  257. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/compare.py +0 -0
  258. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/config_hierarchy.py +0 -0
  259. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/context_manager.py +0 -0
  260. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/cost_tracker.py +0 -0
  261. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/csv_test_runner.py +0 -0
  262. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/debug.py +0 -0
  263. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/deploy.py +0 -0
  264. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/diag.py +0 -0
  265. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/display_jsonl.py +0 -0
  266. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/__init__.py +0 -0
  267. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  268. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  269. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  270. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  271. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  272. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  273. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  274. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  275. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  276. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  277. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  278. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
  279. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  280. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  281. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  282. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  283. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  284. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  285. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/engine.py +0 -0
  286. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/formatters.py +0 -0
  287. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/handler.py +0 -0
  288. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/models.py +0 -0
  289. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/doctor/registry.py +0 -0
  290. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/endpoints.py +0 -0
  291. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/eval.py +0 -0
  292. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/examples.py +0 -0
  293. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/external_agents.py +0 -0
  294. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/fast_context.py +0 -0
  295. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/file_history.py +0 -0
  296. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/flow_display.py +0 -0
  297. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/gateway.py +0 -0
  298. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/git_attribution.py +0 -0
  299. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/git_integration.py +0 -0
  300. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/guardrail.py +0 -0
  301. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/handoff.py +0 -0
  302. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/hooks.py +0 -0
  303. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/hybrid_workflow.py +0 -0
  304. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/image.py +0 -0
  305. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/interactive_core_headless.py +0 -0
  306. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/interactive_runtime.py +0 -0
  307. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/interactive_test_harness.py +0 -0
  308. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/interactive_tools.py +0 -0
  309. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/interactive_tui.py +0 -0
  310. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/job_workflow.py +0 -0
  311. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/jobs.py +0 -0
  312. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/knowledge.py +0 -0
  313. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/knowledge_cli.py +0 -0
  314. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/lite.py +0 -0
  315. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/logs.py +0 -0
  316. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/lsp_cli.py +0 -0
  317. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  318. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/mcp.py +0 -0
  319. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/message_queue.py +0 -0
  320. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/metrics.py +0 -0
  321. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/migrate.py +0 -0
  322. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/migration_flow.py +0 -0
  323. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/migration_spec.py +0 -0
  324. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/n8n.py +0 -0
  325. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/observability.py +0 -0
  326. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/ollama.py +0 -0
  327. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/onboard.py +0 -0
  328. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/output_modes.py +0 -0
  329. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/output_style.py +0 -0
  330. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/package.py +0 -0
  331. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/performance.py +0 -0
  332. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/persistence.py +0 -0
  333. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/plugin_cli.py +0 -0
  334. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/profile.py +0 -0
  335. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/profiler/__init__.py +0 -0
  336. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/profiler/core.py +0 -0
  337. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/profiler/optimizations.py +0 -0
  338. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/profiler/suite.py +0 -0
  339. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/profiling.py +0 -0
  340. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/queue/__init__.py +0 -0
  341. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/queue/manager.py +0 -0
  342. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/queue/models.py +0 -0
  343. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/queue/persistence.py +0 -0
  344. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/queue/scheduler.py +0 -0
  345. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/queue/worker.py +0 -0
  346. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/recipe.py +0 -0
  347. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/recipe_creator.py +0 -0
  348. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/recipe_optimizer.py +0 -0
  349. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/recipe_prompts.py +0 -0
  350. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/recipes.py +0 -0
  351. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/registry.py +0 -0
  352. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/repo_map.py +0 -0
  353. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/router.py +0 -0
  354. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/safe_shell.py +0 -0
  355. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/sandbox_cli.py +0 -0
  356. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/sandbox_executor.py +0 -0
  357. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/sdk_knowledge.py +0 -0
  358. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/serve.py +0 -0
  359. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/session.py +0 -0
  360. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/setup/__init__.py +0 -0
  361. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/setup/handler.py +0 -0
  362. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/setup/templates.py +0 -0
  363. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/skills.py +0 -0
  364. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/slash_commands.py +0 -0
  365. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/telemetry.py +0 -0
  366. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/templates.py +0 -0
  367. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/thinking.py +0 -0
  368. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/todo.py +0 -0
  369. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tools.py +0 -0
  370. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/__init__.py +0 -0
  371. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/app.py +0 -0
  372. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/cli.py +0 -0
  373. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/config.py +0 -0
  374. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/debug.py +0 -0
  375. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/events.py +0 -0
  376. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/mock_provider.py +0 -0
  377. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/orchestrator.py +0 -0
  378. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  379. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/screens/help.py +0 -0
  380. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/screens/main.py +0 -0
  381. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/screens/queue.py +0 -0
  382. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/screens/session.py +0 -0
  383. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/screens/settings.py +0 -0
  384. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/session_store.py +0 -0
  385. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  386. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  387. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  388. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  389. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  390. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  391. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/widgets/status.py +0 -0
  392. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  393. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/wizard.py +0 -0
  394. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/workflow.py +0 -0
  395. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/features/yaml_utils.py +0 -0
  396. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/interactive/__init__.py +0 -0
  397. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/interactive/config.py +0 -0
  398. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/interactive/core.py +0 -0
  399. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/interactive/events.py +0 -0
  400. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  401. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  402. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  403. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/interactive/praison_io.py +0 -0
  404. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/interactive/repl.py +0 -0
  405. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/interactive/split_tui.py +0 -0
  406. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/interactive/tui_app.py +0 -0
  407. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/langfuse_client.py +0 -0
  408. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/legacy.py +0 -0
  409. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/output/__init__.py +0 -0
  410. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/output/console.py +0 -0
  411. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/schedule_cli.py +0 -0
  412. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/schema_provider.py +0 -0
  413. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/session/__init__.py +0 -0
  414. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/session/unified.py +0 -0
  415. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/state/__init__.py +0 -0
  416. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/state/identifiers.py +0 -0
  417. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/state/sessions.py +0 -0
  418. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/ui/__init__.py +0 -0
  419. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/ui/config.py +0 -0
  420. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/ui/events.py +0 -0
  421. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/ui/mg_backend.py +0 -0
  422. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/ui/plain.py +0 -0
  423. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/ui/rich_backend.py +0 -0
  424. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli/unified_schema.py +0 -0
  425. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli_backends/__init__.py +0 -0
  426. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli_backends/claude.py +0 -0
  427. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/cli_backends/registry.py +0 -0
  428. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/__init__.py +0 -0
  429. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/agent_tools.py +0 -0
  430. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/diff/__init__.py +0 -0
  431. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/diff/diff_strategy.py +0 -0
  432. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/tools/__init__.py +0 -0
  433. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/tools/apply_diff.py +0 -0
  434. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/tools/execute_command.py +0 -0
  435. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/tools/list_files.py +0 -0
  436. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/tools/read_file.py +0 -0
  437. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/tools/search_replace.py +0 -0
  438. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/tools/write_file.py +0 -0
  439. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/utils/__init__.py +0 -0
  440. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/utils/file_utils.py +0 -0
  441. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/utils/ignore_utils.py +0 -0
  442. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/code/utils/text_utils.py +0 -0
  443. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/context/__init__.py +0 -0
  444. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/context/artifact_store.py +0 -0
  445. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/context/config.py +0 -0
  446. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/context/history_store.py +0 -0
  447. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/context/queue.py +0 -0
  448. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/context/setup.py +0 -0
  449. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/context/terminal_logger.py +0 -0
  450. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/daemon/__init__.py +0 -0
  451. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/daemon/launchd.py +0 -0
  452. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/daemon/systemd.py +0 -0
  453. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/daemon/windows.py +0 -0
  454. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/db/__init__.py +0 -0
  455. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/db/adapter.py +0 -0
  456. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/deploy/__init__.py +0 -0
  457. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/deploy/api.py +0 -0
  458. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/deploy/docker.py +0 -0
  459. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/deploy/doctor.py +0 -0
  460. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/deploy/main.py +0 -0
  461. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/deploy/models.py +0 -0
  462. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/deploy/providers/__init__.py +0 -0
  463. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/deploy/providers/aws.py +0 -0
  464. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/deploy/providers/azure.py +0 -0
  465. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/deploy/providers/base.py +0 -0
  466. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/deploy/providers/gcp.py +0 -0
  467. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/deploy/schema.py +0 -0
  468. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/docs_runner/__init__.py +0 -0
  469. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/docs_runner/classifier.py +0 -0
  470. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/docs_runner/executor.py +0 -0
  471. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/docs_runner/extractor.py +0 -0
  472. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/docs_runner/reporter.py +0 -0
  473. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/docs_runner/runner.py +0 -0
  474. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/docs_runner/workspace.py +0 -0
  475. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/endpoints/__init__.py +0 -0
  476. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/endpoints/a2u_server.py +0 -0
  477. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/endpoints/discovery.py +0 -0
  478. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/endpoints/providers/__init__.py +0 -0
  479. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/endpoints/providers/a2a.py +0 -0
  480. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/endpoints/providers/a2u.py +0 -0
  481. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/endpoints/providers/agents_api.py +0 -0
  482. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/endpoints/providers/base.py +0 -0
  483. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/endpoints/providers/mcp.py +0 -0
  484. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/endpoints/providers/recipe.py +0 -0
  485. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  486. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/endpoints/registry.py +0 -0
  487. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/endpoints/server.py +0 -0
  488. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/flow/__init__.py +0 -0
  489. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/flow/client.py +0 -0
  490. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  491. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  492. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/flow/components/__init__.py +0 -0
  493. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/flow/converter.py +0 -0
  494. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/flow/helpers.py +0 -0
  495. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/framework_adapters/__init__.py +0 -0
  496. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  497. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/framework_adapters/base.py +0 -0
  498. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  499. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  500. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/framework_adapters/registry.py +0 -0
  501. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/framework_adapters/validators.py +0 -0
  502. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/__init__.py +0 -0
  503. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/auth.py +0 -0
  504. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/cookie_auth.py +0 -0
  505. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/exec_approval.py +0 -0
  506. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/gateway_approval.py +0 -0
  507. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/magic_link.py +0 -0
  508. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/origin_check.py +0 -0
  509. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/pairing.py +0 -0
  510. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/pairing_routes.py +0 -0
  511. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/port_utils.py +0 -0
  512. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/push_channels.py +0 -0
  513. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/push_delivery.py +0 -0
  514. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/push_polling.py +0 -0
  515. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/push_presence.py +0 -0
  516. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/rate_limiter.py +0 -0
  517. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/redis_pubsub.py +0 -0
  518. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/gateway/unicode_utils.py +0 -0
  519. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/inbuilt_tools/__init__.py +0 -0
  520. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  521. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/inc/__init__.py +0 -0
  522. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/inc/config.py +0 -0
  523. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/inc/models.py +0 -0
  524. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/__init__.py +0 -0
  525. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/_legacy_handlers.py +0 -0
  526. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/bridges/__init__.py +0 -0
  527. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  528. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/bridges/hooks_query.py +0 -0
  529. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  530. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/bridges/schedules_runner.py +0 -0
  531. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/bridges/usage_bridge.py +0 -0
  532. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/bridges/workflows_service.py +0 -0
  533. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/context_files.py +0 -0
  534. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/gateway_host.py +0 -0
  535. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/host_app.py +0 -0
  536. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/pages/__init__.py +0 -0
  537. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/pages/bot_health.py +0 -0
  538. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integration/pages/workflow_runs.py +0 -0
  539. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/__init__.py +0 -0
  540. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/_session_info.py +0 -0
  541. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/_tool_aliases.py +0 -0
  542. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/_unified_registry.py +0 -0
  543. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/base.py +0 -0
  544. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/claude_code.py +0 -0
  545. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/codex_cli.py +0 -0
  546. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/compute/__init__.py +0 -0
  547. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/compute/daytona.py +0 -0
  548. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/compute/docker.py +0 -0
  549. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/compute/e2b.py +0 -0
  550. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/compute/flyio.py +0 -0
  551. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/compute/local.py +0 -0
  552. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/compute/modal_compute.py +0 -0
  553. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/cursor_cli.py +0 -0
  554. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/db_session_adapter.py +0 -0
  555. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/gemini_cli.py +0 -0
  556. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/hosted_agent.py +0 -0
  557. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/local_agent.py +0 -0
  558. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/managed_agents.py +0 -0
  559. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/managed_local.py +0 -0
  560. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/registry.py +0 -0
  561. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/integrations/sandboxed_agent.py +0 -0
  562. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/jobs/__init__.py +0 -0
  563. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/jobs/executor.py +0 -0
  564. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/jobs/models.py +0 -0
  565. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/jobs/router.py +0 -0
  566. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/jobs/server.py +0 -0
  567. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/jobs/store.py +0 -0
  568. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/kanban/__init__.py +0 -0
  569. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/kanban/models.py +0 -0
  570. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/kanban/paths.py +0 -0
  571. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/kanban/sqlite_store.py +0 -0
  572. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/llm/__init__.py +0 -0
  573. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/llm/env.py +0 -0
  574. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/llm/registry.py +0 -0
  575. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/__init__.py +0 -0
  576. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/adapters/__init__.py +0 -0
  577. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/adapters/agents.py +0 -0
  578. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  579. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  580. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  581. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  582. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/adapters/memory.py +0 -0
  583. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/adapters/prompts.py +0 -0
  584. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/adapters/resources.py +0 -0
  585. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  586. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/auth/__init__.py +0 -0
  587. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/auth/api_key.py +0 -0
  588. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/auth/oauth.py +0 -0
  589. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/auth/oidc.py +0 -0
  590. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/auth/scopes.py +0 -0
  591. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/cli.py +0 -0
  592. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/elicitation.py +0 -0
  593. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/icons.py +0 -0
  594. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/recipe_adapter.py +0 -0
  595. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/recipe_cli.py +0 -0
  596. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/registry.py +0 -0
  597. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/sampling.py +0 -0
  598. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/server.py +0 -0
  599. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/tasks.py +0 -0
  600. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/tool_index.py +0 -0
  601. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/transports/__init__.py +0 -0
  602. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/transports/http_stream.py +0 -0
  603. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/mcp_server/transports/stdio.py +0 -0
  604. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/n8n/__init__.py +0 -0
  605. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/n8n/client.py +0 -0
  606. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/n8n/converter.py +0 -0
  607. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/n8n/preview.py +0 -0
  608. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/n8n/reverse_converter.py +0 -0
  609. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/observability/__init__.py +0 -0
  610. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/observability/hooks.py +0 -0
  611. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/observability/langextract.py +0 -0
  612. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/observability/langfuse.py +0 -0
  613. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/__init__.py +0 -0
  614. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/_valkey_client.py +0 -0
  615. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/config.py +0 -0
  616. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/__init__.py +0 -0
  617. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/_sql_base.py +0 -0
  618. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/async_mysql.py +0 -0
  619. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/async_postgres.py +0 -0
  620. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  621. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/base.py +0 -0
  622. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/json_store.py +0 -0
  623. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/mysql.py +0 -0
  624. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/mysql_new.py +0 -0
  625. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/postgres.py +0 -0
  626. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/singlestore.py +0 -0
  627. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/sqlite.py +0 -0
  628. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/supabase.py +0 -0
  629. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/surrealdb.py +0 -0
  630. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  631. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/conversation/turso.py +0 -0
  632. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/factory.py +0 -0
  633. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/hooks/__init__.py +0 -0
  634. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  635. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/__init__.py +0 -0
  636. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/base.py +0 -0
  637. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/cassandra.py +0 -0
  638. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/chroma.py +0 -0
  639. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  640. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  641. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/couchbase.py +0 -0
  642. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/lancedb.py +0 -0
  643. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  644. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  645. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  646. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/milvus.py +0 -0
  647. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  648. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/pgvector.py +0 -0
  649. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/pinecone.py +0 -0
  650. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/qdrant.py +0 -0
  651. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  652. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  653. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  654. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  655. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  656. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/knowledge/weaviate.py +0 -0
  657. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/migrations/__init__.py +0 -0
  658. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/migrations/manager.py +0 -0
  659. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/orchestrator.py +0 -0
  660. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/registry.py +0 -0
  661. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/state/__init__.py +0 -0
  662. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/state/async_mongodb.py +0 -0
  663. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/state/base.py +0 -0
  664. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/state/dynamodb.py +0 -0
  665. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/state/firestore.py +0 -0
  666. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/state/gcs.py +0 -0
  667. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/state/memory.py +0 -0
  668. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/state/mongodb.py +0 -0
  669. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/state/redis.py +0 -0
  670. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/state/upstash.py +0 -0
  671. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/state/valkey.py +0 -0
  672. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/tests/__init__.py +0 -0
  673. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/tests/test_all_backends.py +0 -0
  674. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  675. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/profiler.py +0 -0
  676. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/push/__init__.py +0 -0
  677. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/push/client.py +0 -0
  678. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/push/transports.py +0 -0
  679. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/recipe/__init__.py +0 -0
  680. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/recipe/bridge.py +0 -0
  681. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/recipe/core.py +0 -0
  682. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/recipe/exceptions.py +0 -0
  683. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/recipe/history.py +0 -0
  684. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/recipe/models.py +0 -0
  685. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/recipe/operations.py +0 -0
  686. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/recipe/policy.py +0 -0
  687. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/recipe/registry.py +0 -0
  688. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/recipe/runtime.py +0 -0
  689. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/recipe/security.py +0 -0
  690. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/recipe/serve.py +0 -0
  691. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/recipe/server.py +0 -0
  692. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/replay/__init__.py +0 -0
  693. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/replay/analyzer.py +0 -0
  694. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/replay/applier.py +0 -0
  695. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/replay/judge.py +0 -0
  696. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/replay/plan.py +0 -0
  697. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/replay/player.py +0 -0
  698. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/replay/reader.py +0 -0
  699. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/replay/storage.py +0 -0
  700. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/replay/writer.py +0 -0
  701. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/sandbox/__init__.py +0 -0
  702. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/sandbox/_compat.py +0 -0
  703. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/sandbox/_shell.py +0 -0
  704. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/sandbox/daytona.py +0 -0
  705. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/sandbox/docker.py +0 -0
  706. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/sandbox/e2b.py +0 -0
  707. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/sandbox/modal.py +0 -0
  708. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/sandbox/sandlock.py +0 -0
  709. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/sandbox/ssh.py +0 -0
  710. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/sandbox/subprocess.py +0 -0
  711. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/scheduler/__init__.py +0 -0
  712. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/scheduler/_base_scheduler.py +0 -0
  713. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/scheduler/agent_scheduler.py +0 -0
  714. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/scheduler/async_agent_scheduler.py +0 -0
  715. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/scheduler/base.py +0 -0
  716. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/scheduler/daemon_manager.py +0 -0
  717. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/scheduler/deployment.py +0 -0
  718. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/scheduler/executor.py +0 -0
  719. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/scheduler/shared.py +0 -0
  720. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/scheduler/state_manager.py +0 -0
  721. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/scheduler/yaml_loader.py +0 -0
  722. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/security/__init__.py +0 -0
  723. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/security/audit.py +0 -0
  724. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/security/injection.py +0 -0
  725. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/security/protected.py +0 -0
  726. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/setup/__init__.py +0 -0
  727. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/setup/build.py +0 -0
  728. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/setup/post_install.py +0 -0
  729. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/setup/setup_conda_env.py +0 -0
  730. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/setup.py +0 -0
  731. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/__init__.py +0 -0
  732. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/ai_generator.py +0 -0
  733. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/config.py +0 -0
  734. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/dedupe.py +0 -0
  735. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/discovery.py +0 -0
  736. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/drift.py +0 -0
  737. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/engine.py +0 -0
  738. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/enhanced_templates.py +0 -0
  739. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/example_verifier.py +0 -0
  740. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/manifest.py +0 -0
  741. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/models.py +0 -0
  742. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/reports.py +0 -0
  743. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/templates.py +0 -0
  744. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/undo_redo.py +0 -0
  745. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/standardise/validator.py +0 -0
  746. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/storage/__init__.py +0 -0
  747. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/storage/dynamodb_adapter.py +0 -0
  748. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/storage/mongodb_adapter.py +0 -0
  749. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/storage/postgresql_adapter.py +0 -0
  750. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/storage/redis_adapter.py +0 -0
  751. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/storage/valkey_adapter.py +0 -0
  752. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/suite_runner/__init__.py +0 -0
  753. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/suite_runner/batch_source.py +0 -0
  754. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/suite_runner/cli_docs_source.py +0 -0
  755. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/suite_runner/discovery.py +0 -0
  756. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/suite_runner/docs_source.py +0 -0
  757. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/suite_runner/examples_source.py +0 -0
  758. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/suite_runner/executor.py +0 -0
  759. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/suite_runner/models.py +0 -0
  760. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/suite_runner/report_viewer.py +0 -0
  761. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/suite_runner/reporter.py +0 -0
  762. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/suite_runner/runner.py +0 -0
  763. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/templates/__init__.py +0 -0
  764. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/templates/cache.py +0 -0
  765. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/templates/dependency_checker.py +0 -0
  766. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/templates/discovery.py +0 -0
  767. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/templates/loader.py +0 -0
  768. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/templates/registry.py +0 -0
  769. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/templates/resolver.py +0 -0
  770. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/templates/security.py +0 -0
  771. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/templates/tool_override.py +0 -0
  772. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/templates/tools_doctor.py +0 -0
  773. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/test.py +0 -0
  774. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/tool_registry.py +0 -0
  775. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/tool_resolver.py +0 -0
  776. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/tools/__init__.py +0 -0
  777. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/tools/audio.py +0 -0
  778. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/tools/glob_tool.py +0 -0
  779. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/tools/grep_tool.py +0 -0
  780. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/tools/kanban_tools.py +0 -0
  781. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/tools/multiedit.py +0 -0
  782. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/tools/skill_manage.py +0 -0
  783. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/train/__init__.py +0 -0
  784. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/train/_ollama.py +0 -0
  785. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/train/agents/__init__.py +0 -0
  786. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/train/agents/grader.py +0 -0
  787. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/train/agents/hook.py +0 -0
  788. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/train/agents/models.py +0 -0
  789. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/train/agents/orchestrator.py +0 -0
  790. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/train/agents/storage.py +0 -0
  791. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/train/llm/__init__.py +0 -0
  792. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/train/llm/trainer.py +0 -0
  793. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/train.py +0 -0
  794. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/train_vision.py +0 -0
  795. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui/_aiui_datastore.py +0 -0
  796. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui/_external_agents.py +0 -0
  797. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui/callbacks.py +0 -0
  798. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui/components/aicoder.py +0 -0
  799. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui/context.py +0 -0
  800. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui/database_config.py +0 -0
  801. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui_agents/__init__.py +0 -0
  802. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui_agents/default_app.py +0 -0
  803. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui_bot/__init__.py +0 -0
  804. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui_bot/default_app.py +0 -0
  805. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui_chat/__init__.py +0 -0
  806. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui_chat/default_app.py +0 -0
  807. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui_dashboard/default_app.py +0 -0
  808. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui_realtime/__init__.py +0 -0
  809. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/ui_realtime/default_app.py +0 -0
  810. {praisonai-4.6.56 → praisonai-4.6.57}/praisonai/upload_vision.py +0 -0
  811. {praisonai-4.6.56 → praisonai-4.6.57}/setup.cfg +0 -0
  812. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test.py +0 -0
  813. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_agents_playbook.py +0 -0
  814. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_approval_system.py +0 -0
  815. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_basic.py +0 -0
  816. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_cli_features.py +0 -0
  817. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_custom_tools_fix.py +0 -0
  818. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_double_api_fix.py +0 -0
  819. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_n8n_agent_invoke.py +0 -0
  820. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_n8n_cli_feature.py +0 -0
  821. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_n8n_integration.py +0 -0
  822. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_phase2_refactor.py +0 -0
  823. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_recipe.py +0 -0
  824. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_registry.py +0 -0
  825. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_runner.py +0 -0
  826. {praisonai-4.6.56 → praisonai-4.6.57}/tests/test_sandboxed_agent_compatibility.py +0 -0
  827. {praisonai-4.6.56 → praisonai-4.6.57}/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.56
3
+ Version: 4.6.57
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.56
14
+ Requires-Dist: praisonaiagents>=1.6.57
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.56
3
+ Version: 4.6.57
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.56
14
+ Requires-Dist: praisonaiagents>=1.6.57
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
@@ -72,6 +72,7 @@ praisonai/bots/_discord_approval.py
72
72
  praisonai/bots/_dlq.py
73
73
  praisonai/bots/_email_utils.py
74
74
  praisonai/bots/_http_approval.py
75
+ praisonai/bots/_ingress.py
75
76
  praisonai/bots/_mirror.py
76
77
  praisonai/bots/_pairing_ui.py
77
78
  praisonai/bots/_protocol_mixin.py
@@ -80,6 +81,7 @@ praisonai/bots/_registry.py
80
81
  praisonai/bots/_resilience.py
81
82
  praisonai/bots/_session.py
82
83
  praisonai/bots/_slack_approval.py
84
+ praisonai/bots/_streaming.py
83
85
  praisonai/bots/_telegram_approval.py
84
86
  praisonai/bots/_typing_indicator.py
85
87
  praisonai/bots/_unknown_user.py
@@ -518,6 +520,7 @@ praisonai/gateway/push_presence.py
518
520
  praisonai/gateway/rate_limiter.py
519
521
  praisonai/gateway/redis_pubsub.py
520
522
  praisonai/gateway/server.py
523
+ praisonai/gateway/supervisor.py
521
524
  praisonai/gateway/unicode_utils.py
522
525
  praisonai/inbuilt_tools/__init__.py
523
526
  praisonai/inbuilt_tools/autogen_tools.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.56
4
+ praisonaiagents>=1.6.57
5
5
  python-dotenv>=0.19.0
6
6
  litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
@@ -632,6 +632,37 @@ class AgentsGenerator:
632
632
  return tools_dict
633
633
 
634
634
 
635
+ def _load_config(self):
636
+ """Load configuration from agent file or agent_yaml."""
637
+ if self.agent_yaml:
638
+ config = yaml.safe_load(self.agent_yaml)
639
+ else:
640
+ if self.agent_file in ('/app/api:app', 'api:app'):
641
+ self.agent_file = 'agents.yaml'
642
+ try:
643
+ with open(self.agent_file, 'r') as f:
644
+ config = yaml.safe_load(f)
645
+ except FileNotFoundError:
646
+ print(f"File not found: {self.agent_file}")
647
+ return None
648
+
649
+ # Apply CLI config overrides to both paths (agent_yaml and agent_file)
650
+ if self.cli_config:
651
+ self._merge_cli_config(config, self.cli_config)
652
+ return config
653
+
654
+ def _is_workflow_yaml(self, config):
655
+ """Check if configuration is workflow mode YAML."""
656
+ process_type = config.get('process', 'sequential')
657
+ has_steps = 'steps' in config
658
+ has_workflow_config = 'workflow' in config
659
+ workflow_type = config.get('type')
660
+ return (
661
+ process_type == 'workflow'
662
+ or (has_steps and has_workflow_config)
663
+ or workflow_type in {'job', 'hybrid'}
664
+ )
665
+
635
666
  def generate_crew_and_kickoff(self):
636
667
  """
637
668
  Generates a crew of agents and initiates tasks based on the provided configuration.
@@ -649,30 +680,10 @@ class AgentsGenerator:
649
680
 
650
681
  This function first loads the agent configuration from the specified file. It then initializes the tools required for the agents based on the specified framework. If the specified framework is "autogen", it loads the LLM configuration dynamically and creates an AssistantAgent for each role in the configuration. It then adds tools to the agents if specified in the configuration. Finally, it prepares tasks for the agents based on the configuration and initiates the tasks using the crew of agents. If the specified framework is not "autogen", it creates a crew of agents and initiates tasks based on the configuration.
651
682
  """
652
- if self.agent_yaml:
653
- config = yaml.safe_load(self.agent_yaml)
654
- else:
655
- if self.agent_file == '/app/api:app' or self.agent_file == 'api:app':
656
- self.agent_file = 'agents.yaml'
657
- try:
658
- with open(self.agent_file, 'r') as f:
659
- config = yaml.safe_load(f)
660
- except FileNotFoundError:
661
- print(f"File not found: {self.agent_file}")
662
- return
663
-
664
- # Apply CLI configuration overrides to YAML config
665
- if self.cli_config:
666
- # Merge CLI configuration with YAML config
667
- self._merge_cli_config(config, self.cli_config)
668
-
669
- # Check if this is a workflow-mode YAML (process: workflow or has steps section)
670
- process_type = config.get('process', 'sequential')
671
- has_steps = 'steps' in config
672
- has_workflow_config = 'workflow' in config
673
-
674
- if process_type == 'workflow' or (has_steps and has_workflow_config):
675
- # Route to YAMLWorkflowParser for advanced workflow patterns
683
+ config = self._load_config()
684
+ if config is None:
685
+ return
686
+ if self._is_workflow_yaml(config):
676
687
  return self._run_yaml_workflow(config)
677
688
 
678
689
  # Use shared preparation logic
@@ -694,35 +705,12 @@ class AgentsGenerator:
694
705
  Async version of generate_crew_and_kickoff.
695
706
  Generates a crew of agents and initiates tasks based on the provided configuration.
696
707
  """
697
- if self.agent_yaml:
698
- config = yaml.safe_load(self.agent_yaml)
699
- else:
700
- if self.agent_file == '/app/api:app' or self.agent_file == 'api:app':
701
- self.agent_file = 'agents.yaml'
702
- try:
703
- with open(self.agent_file, 'r') as f:
704
- config = yaml.safe_load(f)
705
- except FileNotFoundError:
706
- print(f"File not found: {self.agent_file}")
707
- return
708
-
709
- # Apply CLI configuration overrides to YAML config
710
- if self.cli_config:
711
- # Merge CLI configuration with YAML config
712
- self._merge_cli_config(config, self.cli_config)
713
-
714
- # Check if this is a workflow-mode YAML (process: workflow or has steps section)
715
- process_type = config.get('process', 'sequential')
716
- has_steps = 'steps' in config
717
- has_workflow_config = 'workflow' in config
718
-
719
- if process_type == 'workflow' or (has_steps and has_workflow_config):
708
+ config = self._load_config()
709
+ if config is None:
710
+ return
711
+ if self._is_workflow_yaml(config):
720
712
  return await self._arun_yaml_workflow(config)
721
- else:
722
- return await self._arun_framework(config)
723
713
 
724
- async def _arun_framework(self, config):
725
- """Async version of _run_framework with shared preparation logic."""
726
714
  # Use shared preparation logic
727
715
  prep = self._prepare_for_run(config)
728
716
 
@@ -737,6 +725,7 @@ class AgentsGenerator:
737
725
  cli_config=getattr(self, 'cli_config', None),
738
726
  )
739
727
 
728
+
740
729
  async def _arun_yaml_workflow(self, config):
741
730
  """
742
731
  Async version of _run_yaml_workflow using YAMLWorkflowParser.
@@ -19,11 +19,13 @@ if TYPE_CHECKING:
19
19
  from .botos import BotOS
20
20
  from ._session import BotSessionManager
21
21
  from ._dlq import InboundDLQ, DLQEntry
22
+ from ._ingress import InboundJournal, JournalEntry
22
23
  from ._slack_approval import SlackApproval
23
24
  from ._telegram_approval import TelegramApproval
24
25
  from ._discord_approval import DiscordApproval
25
26
  from ._webhook_approval import WebhookApproval
26
27
  from ._http_approval import HTTPApproval
28
+ from ._streaming import StreamingConfig, StreamingMode, DraftStreamer
27
29
 
28
30
  def __getattr__(name: str):
29
31
  """Lazy loading of bot components."""
@@ -83,6 +85,23 @@ def __getattr__(name: str):
83
85
  if name == "DLQEntry":
84
86
  from ._dlq import DLQEntry
85
87
  return DLQEntry
88
+ # Inbound message journal for durable processing
89
+ if name == "InboundJournal":
90
+ from ._ingress import InboundJournal
91
+ return InboundJournal
92
+ if name == "JournalEntry":
93
+ from ._ingress import JournalEntry
94
+ return JournalEntry
95
+ # Streaming components
96
+ if name == "StreamingConfig":
97
+ from ._streaming import StreamingConfig
98
+ return StreamingConfig
99
+ if name == "StreamingMode":
100
+ from ._streaming import StreamingMode
101
+ return StreamingMode
102
+ if name == "DraftStreamer":
103
+ from ._streaming import DraftStreamer
104
+ return DraftStreamer
86
105
  raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
87
106
 
88
107
  __all__ = [
@@ -90,8 +109,11 @@ __all__ = [
90
109
  "Bot", "BotOS",
91
110
  "BotSessionManager",
92
111
  "InboundDLQ", "DLQEntry",
112
+ "InboundJournal", "JournalEntry",
93
113
  "SlackApproval", "TelegramApproval", "DiscordApproval",
94
114
  "WebhookApproval", "HTTPApproval",
115
+ # Streaming
116
+ "StreamingConfig", "StreamingMode", "DraftStreamer",
95
117
  # W1
96
118
  "mirror_to_session", "BotSessionManager",
97
119
  ]
@@ -21,6 +21,39 @@ class AgentConfigSchema(BaseModel):
21
21
  tools: List[str] = Field(default_factory=list)
22
22
 
23
23
 
24
+ class StreamingConfigSchema(BaseModel):
25
+ """Schema for streaming reply configuration."""
26
+ mode: str = "off" # off | draft | progress
27
+ min_interval: float = 1.5 # Minimum seconds between edits
28
+ min_delta: int = 120 # Minimum character delta before edit
29
+ placeholder_text: str = "🤔 Thinking..."
30
+ progress_prefix: str = "🤔 "
31
+
32
+ @field_validator("mode")
33
+ @classmethod
34
+ def validate_streaming_mode(cls, v: str) -> str:
35
+ allowed = {"off", "draft", "progress"}
36
+ if v not in allowed:
37
+ raise ValueError(
38
+ f"Invalid streaming mode '{v}'. Must be one of: {', '.join(sorted(allowed))}"
39
+ )
40
+ return v
41
+
42
+ @field_validator("min_interval")
43
+ @classmethod
44
+ def validate_min_interval(cls, v: float) -> float:
45
+ if v < 0.1:
46
+ raise ValueError("min_interval must be at least 0.1 seconds")
47
+ return v
48
+
49
+ @field_validator("min_delta")
50
+ @classmethod
51
+ def validate_min_delta(cls, v: int) -> int:
52
+ if v < 1:
53
+ raise ValueError("min_delta must be at least 1 character")
54
+ return v
55
+
56
+
24
57
  class ChannelConfigSchema(BaseModel):
25
58
  """Schema for a single channel configuration."""
26
59
  platform: Optional[str] = None
@@ -33,6 +66,7 @@ class ChannelConfigSchema(BaseModel):
33
66
  routes: Dict[str, str] = Field(default_factory=dict)
34
67
  webhook_url: Optional[str] = None
35
68
  webhook_port: int = 8080
69
+ streaming: Optional[StreamingConfigSchema] = None
36
70
 
37
71
  @field_validator("mode")
38
72
  @classmethod
@@ -0,0 +1,382 @@
1
+ """
2
+ Inbound Message Journal for PraisonAI bot adapters.
3
+
4
+ Provides durable inbound message processing with deduplication, persistent
5
+ ingress journal, and idempotent replay to prevent duplicate agent runs and
6
+ silent message loss during crashes or webhook redeliveries.
7
+
8
+ Design constraints (per PraisonAI principles):
9
+ - Wrapper-only — heavy implementation stays out of core SDK
10
+ - Lazy: sqlite3 is stdlib so no extra dependency
11
+ - Optional: BotSessionManager works exactly as before unless journal is provided
12
+ - Bounded: TTL + max_size prevent unbounded disk growth
13
+ - Thread-safe: per-instance threading.Lock guards SQLite writes
14
+ - Atomic: claim/complete mechanism ensures at-least-once with effective exactly-once
15
+
16
+ Storage schema::
17
+
18
+ ingress_journal(
19
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
20
+ ts REAL,
21
+ platform TEXT,
22
+ account TEXT,
23
+ channel_id TEXT,
24
+ message_id TEXT,
25
+ payload TEXT,
26
+ status TEXT, -- 'pending', 'claimed', 'completed'
27
+ claimed_at REAL,
28
+ completed_at REAL,
29
+ attempts INTEGER DEFAULT 0,
30
+ UNIQUE(platform, account, channel_id, message_id)
31
+ )
32
+
33
+ Public API:
34
+ - InboundJournal(path, *, max_size=50_000, ttl_seconds=30*86400, claim_timeout=300)
35
+ - receive(platform, account, channel_id, message_id, payload) -> Optional[str]
36
+ - claim(key) -> ClaimContext
37
+ - complete(key)
38
+ - replay() -> int
39
+ """
40
+
41
+ from __future__ import annotations
42
+
43
+ import json
44
+ import logging
45
+ import sqlite3
46
+ import threading
47
+ import time
48
+ from contextlib import asynccontextmanager, contextmanager
49
+ from dataclasses import dataclass
50
+ from pathlib import Path
51
+ from typing import Any, Dict, List, Optional, Union
52
+
53
+ logger = logging.getLogger(__name__)
54
+
55
+ # 30 days default — long enough for ops to investigate, short enough not to blow up disk
56
+ _DEFAULT_TTL_SECONDS = 30 * 86400
57
+ _DEFAULT_MAX_SIZE = 50_000
58
+ _DEFAULT_CLAIM_TIMEOUT = 300 # 5 minutes
59
+
60
+
61
+ @dataclass(frozen=True)
62
+ class JournalEntry:
63
+ """A journaled inbound message."""
64
+
65
+ id: int
66
+ ts: float
67
+ platform: str
68
+ account: str
69
+ channel_id: str
70
+ message_id: str
71
+ payload: str
72
+ status: str
73
+ claimed_at: Optional[float]
74
+ completed_at: Optional[float]
75
+ attempts: int
76
+
77
+
78
+ class ClaimContext:
79
+ """Context manager for claiming/releasing journal entries."""
80
+
81
+ def __init__(self, journal: "InboundJournal", key: str):
82
+ self._journal = journal
83
+ self._key = key
84
+
85
+ def __enter__(self):
86
+ return self
87
+
88
+ def __exit__(self, exc_type, exc_val, exc_tb):
89
+ # No longer needed - release is handled by the outer context managers
90
+ pass
91
+
92
+ async def __aenter__(self):
93
+ return self
94
+
95
+ async def __aexit__(self, exc_type, exc_val, exc_tb):
96
+ # No longer needed - release is handled by the outer context managers
97
+ pass
98
+
99
+
100
+ class InboundJournal:
101
+ """SQLite-backed inbound message journal for durable bot processing.
102
+
103
+ Args:
104
+ path: SQLite file path. Created if missing; parent dirs created.
105
+ max_size: Maximum entries kept; oldest completed entries evicted when exceeded.
106
+ ttl_seconds: Completed entries older than this are evicted.
107
+ claim_timeout: Claimed entries older than this are considered stale for replay.
108
+
109
+ Example::
110
+
111
+ from praisonai.bots import InboundJournal, BotSessionManager
112
+
113
+ journal = InboundJournal(path="~/.praisonai/state/ingress.sqlite")
114
+ session_mgr = BotSessionManager(platform="telegram", ingress_journal=journal)
115
+
116
+ # In message handler:
117
+ key = journal.receive("telegram", "bot123", chat_id, update.message.message_id, payload)
118
+ if key is None:
119
+ return # duplicate redelivery
120
+ async with journal.claim(key):
121
+ response = await session_mgr.chat(agent, user_id, text)
122
+ journal.complete(key)
123
+ """
124
+
125
+ def __init__(
126
+ self,
127
+ path: Union[str, Path],
128
+ *,
129
+ max_size: int = _DEFAULT_MAX_SIZE,
130
+ ttl_seconds: int = _DEFAULT_TTL_SECONDS,
131
+ claim_timeout: int = _DEFAULT_CLAIM_TIMEOUT,
132
+ ) -> None:
133
+ self.path = Path(path).expanduser()
134
+ self.max_size = int(max_size)
135
+ self.ttl_seconds = int(ttl_seconds)
136
+ self.claim_timeout = int(claim_timeout)
137
+ self._lock = threading.Lock()
138
+ self.path.parent.mkdir(parents=True, exist_ok=True)
139
+ self._init_schema()
140
+
141
+ # ── Schema ──────────────────────────────────────────────────────
142
+ def _connect(self) -> sqlite3.Connection:
143
+ conn = sqlite3.connect(str(self.path))
144
+ conn.execute("PRAGMA journal_mode=WAL")
145
+ conn.execute("PRAGMA synchronous=NORMAL")
146
+ return conn
147
+
148
+ def _init_schema(self) -> None:
149
+ with self._lock, self._connect() as conn:
150
+ conn.execute("""
151
+ CREATE TABLE IF NOT EXISTS ingress_journal (
152
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
153
+ ts REAL NOT NULL,
154
+ platform TEXT NOT NULL,
155
+ account TEXT NOT NULL,
156
+ channel_id TEXT NOT NULL,
157
+ message_id TEXT NOT NULL,
158
+ payload TEXT NOT NULL DEFAULT '',
159
+ status TEXT NOT NULL DEFAULT 'pending',
160
+ claimed_at REAL,
161
+ completed_at REAL,
162
+ attempts INTEGER DEFAULT 0,
163
+ UNIQUE(platform, account, channel_id, message_id)
164
+ )
165
+ """)
166
+ conn.execute("CREATE INDEX IF NOT EXISTS idx_status ON ingress_journal(status)")
167
+ conn.execute("CREATE INDEX IF NOT EXISTS idx_ts ON ingress_journal(ts)")
168
+ conn.execute("CREATE INDEX IF NOT EXISTS idx_claimed_at ON ingress_journal(claimed_at)")
169
+
170
+ # ── Core API ────────────────────────────────────────────────────
171
+ def receive(
172
+ self,
173
+ platform: str,
174
+ account: str,
175
+ channel_id: str,
176
+ message_id: str,
177
+ payload: Dict[str, Any] = None
178
+ ) -> Optional[str]:
179
+ """Journal an inbound message for durable processing.
180
+
181
+ Args:
182
+ platform: Bot platform ("telegram", "discord", "slack", etc.)
183
+ account: Bot account/instance identifier
184
+ channel_id: Platform channel/chat identifier
185
+ message_id: Platform message identifier
186
+ payload: Message data to store (will be JSON-serialized)
187
+
188
+ Returns:
189
+ str: Unique key for claim/complete, or None if duplicate
190
+ """
191
+ if payload is None:
192
+ payload = {}
193
+
194
+ with self._lock, self._connect() as conn:
195
+ try:
196
+ conn.execute("BEGIN IMMEDIATE")
197
+ self._evict_expired_locked(conn)
198
+
199
+ # Try to insert - will fail on duplicate (platform, account, channel_id, message_id)
200
+ cur = conn.execute("""
201
+ INSERT INTO ingress_journal(ts, platform, account, channel_id,
202
+ message_id, payload, status)
203
+ VALUES (?, ?, ?, ?, ?, ?, 'pending')
204
+ """, (
205
+ time.time(), platform, account, channel_id,
206
+ message_id, json.dumps(payload)
207
+ ))
208
+
209
+ entry_id = cur.lastrowid
210
+ self._evict_overflow_locked(conn)
211
+ conn.commit()
212
+
213
+ # Return a key for claim/complete operations
214
+ return f"{platform}:{account}:{channel_id}:{message_id}:{entry_id}"
215
+
216
+ except sqlite3.IntegrityError:
217
+ # Duplicate message - this is expected for webhook redeliveries
218
+ conn.rollback()
219
+ return None
220
+ except Exception:
221
+ conn.rollback()
222
+ raise
223
+
224
+ @contextmanager
225
+ def claim(self, key: str):
226
+ """Claim a journal entry for processing."""
227
+ self._claim_entry(key)
228
+ try:
229
+ yield ClaimContext(self, key)
230
+ finally:
231
+ # Release claim if not completed
232
+ self._release_claim(key)
233
+
234
+ @asynccontextmanager
235
+ async def aclaim(self, key: str):
236
+ """Async claim a journal entry for processing."""
237
+ self._claim_entry(key)
238
+ try:
239
+ yield ClaimContext(self, key)
240
+ finally:
241
+ # Release claim if not completed
242
+ self._release_claim(key)
243
+
244
+ def complete(self, key: str) -> None:
245
+ """Mark a journal entry as completed."""
246
+ entry_id = self._extract_id_from_key(key)
247
+
248
+ with self._lock, self._connect() as conn:
249
+ conn.execute("""
250
+ UPDATE ingress_journal
251
+ SET status = 'completed', completed_at = ?
252
+ WHERE id = ?
253
+ """, (time.time(), entry_id))
254
+
255
+ # ── Internal Implementation ────────────────────────────────────
256
+ def _claim_entry(self, key: str) -> None:
257
+ """Mark entry as claimed for processing."""
258
+ entry_id = self._extract_id_from_key(key)
259
+
260
+ with self._lock, self._connect() as conn:
261
+ conn.execute("""
262
+ UPDATE ingress_journal
263
+ SET status = 'claimed', claimed_at = ?, attempts = attempts + 1
264
+ WHERE id = ? AND status IN ('pending', 'claimed')
265
+ """, (time.time(), entry_id))
266
+
267
+ def _release_claim(self, key: str) -> None:
268
+ """Release claim without completing (for crash recovery)."""
269
+ entry_id = self._extract_id_from_key(key)
270
+
271
+ with self._lock, self._connect() as conn:
272
+ conn.execute("""
273
+ UPDATE ingress_journal
274
+ SET status = 'pending', claimed_at = NULL
275
+ WHERE id = ? AND status = 'claimed'
276
+ """, (entry_id,))
277
+
278
+ def _extract_id_from_key(self, key: str) -> int:
279
+ """Extract entry ID from journal key."""
280
+ try:
281
+ return int(key.split(":")[-1])
282
+ except (ValueError, IndexError):
283
+ raise ValueError(f"Invalid journal key format: {key}")
284
+
285
+ # ── Maintenance ─────────────────────────────────────────────────
286
+ def _evict_expired_locked(self, conn: sqlite3.Connection) -> int:
287
+ """Remove completed entries older than ttl_seconds."""
288
+ cutoff = time.time() - self.ttl_seconds
289
+ cur = conn.execute("""
290
+ DELETE FROM ingress_journal
291
+ WHERE status = 'completed' AND completed_at <= ?
292
+ """, (cutoff,))
293
+ return int(cur.rowcount or 0)
294
+
295
+ def _evict_overflow_locked(self, conn: sqlite3.Connection) -> int:
296
+ """Remove oldest entries if over max_size. Prefers completed, then oldest pending."""
297
+ n = conn.execute("SELECT COUNT(*) FROM ingress_journal").fetchone()[0]
298
+ if n <= self.max_size:
299
+ return 0
300
+
301
+ excess = n - self.max_size
302
+
303
+ # First try to delete completed entries
304
+ completed_cur = conn.execute("""
305
+ DELETE FROM ingress_journal WHERE id IN (
306
+ SELECT id FROM ingress_journal
307
+ WHERE status = 'completed'
308
+ ORDER BY completed_at ASC
309
+ LIMIT ?
310
+ )
311
+ """, (excess,))
312
+ deleted = int(completed_cur.rowcount or 0)
313
+
314
+ # If we still have excess after deleting completed entries, delete oldest pending
315
+ remaining_excess = excess - deleted
316
+ if remaining_excess > 0:
317
+ pending_cur = conn.execute("""
318
+ DELETE FROM ingress_journal WHERE id IN (
319
+ SELECT id FROM ingress_journal
320
+ WHERE status = 'pending'
321
+ ORDER BY ts ASC
322
+ LIMIT ?
323
+ )
324
+ """, (remaining_excess,))
325
+ deleted += int(pending_cur.rowcount or 0)
326
+
327
+ return deleted
328
+
329
+ def replay(self) -> int:
330
+ """Find and replay stale claimed entries. Returns count replayed."""
331
+ stale_cutoff = time.time() - self.claim_timeout
332
+
333
+ with self._lock, self._connect() as conn:
334
+ # Find stale claimed entries
335
+ cur = conn.execute("""
336
+ SELECT id FROM ingress_journal
337
+ WHERE status = 'claimed' AND claimed_at <= ?
338
+ """, (stale_cutoff,))
339
+
340
+ stale_ids = [row[0] for row in cur.fetchall()]
341
+
342
+ if stale_ids:
343
+ # Reset them to pending for replay
344
+ placeholders = ",".join("?" * len(stale_ids))
345
+ conn.execute(f"""
346
+ UPDATE ingress_journal
347
+ SET status = 'pending', claimed_at = NULL
348
+ WHERE id IN ({placeholders})
349
+ """, stale_ids)
350
+
351
+ logger.info(f"InboundJournal: reset {len(stale_ids)} stale claimed entries for replay")
352
+
353
+ return len(stale_ids)
354
+
355
+ def size(self) -> int:
356
+ """Return total number of entries."""
357
+ with self._lock, self._connect() as conn:
358
+ return int(conn.execute("SELECT COUNT(*) FROM ingress_journal").fetchone()[0])
359
+
360
+ def pending_count(self) -> int:
361
+ """Return number of pending entries."""
362
+ with self._lock, self._connect() as conn:
363
+ return int(conn.execute(
364
+ "SELECT COUNT(*) FROM ingress_journal WHERE status = 'pending'"
365
+ ).fetchone()[0])
366
+
367
+ def purge(self) -> int:
368
+ """Delete all entries. Returns count removed."""
369
+ with self._lock, self._connect() as conn:
370
+ n = conn.execute("SELECT COUNT(*) FROM ingress_journal").fetchone()[0]
371
+ conn.execute("DELETE FROM ingress_journal")
372
+ return int(n)
373
+
374
+ def __repr__(self) -> str:
375
+ return (
376
+ f"InboundJournal(path={str(self.path)!r}, "
377
+ f"size={self.size()}, pending={self.pending_count()}, "
378
+ f"max_size={self.max_size}, ttl={self.ttl_seconds}s)"
379
+ )
380
+
381
+
382
+ __all__ = ["InboundJournal", "JournalEntry", "ClaimContext"]