PraisonAI 4.6.71__tar.gz → 4.6.72__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 (877) hide show
  1. {praisonai-4.6.71 → praisonai-4.6.72}/PKG-INFO +2 -2
  2. {praisonai-4.6.71 → praisonai-4.6.72}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.71 → praisonai-4.6.72}/PraisonAI.egg-info/SOURCES.txt +4 -0
  4. {praisonai-4.6.71 → praisonai-4.6.72}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_dev/parity/docs_generator.py +47 -3
  6. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/agents_generator.py +29 -13
  7. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/__init__.py +5 -0
  8. praisonai-4.6.72/praisonai/bots/_identity.py +199 -0
  9. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_presentation_renderer.py +30 -22
  10. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_protocol_mixin.py +191 -0
  11. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_session.py +75 -1
  12. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/botos.py +42 -1
  13. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/delivery.py +221 -3
  14. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/app.py +4 -0
  15. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/agent.py +2 -1
  16. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/command.py +2 -1
  17. praisonai-4.6.72/praisonai/cli/commands/identity.py +110 -0
  18. praisonai-4.6.72/praisonai/cli/commands/init.py +132 -0
  19. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/pairing_routes.py +20 -1
  20. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/server.py +258 -21
  21. praisonai-4.6.72/praisonai/integration/context_files.py +129 -0
  22. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/llm/registry.py +4 -1
  23. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/_valkey_client.py +0 -1
  24. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/scheduler/__init__.py +5 -0
  25. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/scheduler/_base_scheduler.py +64 -1
  26. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/scheduler/agent_scheduler.py +10 -5
  27. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/scheduler/async_agent_scheduler.py +10 -5
  28. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/scheduler/enhanced_executor.py +3 -0
  29. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/scheduler/executor.py +194 -8
  30. praisonai-4.6.72/praisonai/scheduler/run_policy.py +187 -0
  31. praisonai-4.6.72/praisonai/version.py +1 -0
  32. {praisonai-4.6.71 → praisonai-4.6.72}/pyproject.toml +1 -1
  33. praisonai-4.6.71/praisonai/integration/context_files.py +0 -22
  34. praisonai-4.6.71/praisonai/version.py +0 -1
  35. {praisonai-4.6.71 → praisonai-4.6.72}/PraisonAI.egg-info/dependency_links.txt +0 -0
  36. {praisonai-4.6.71 → praisonai-4.6.72}/PraisonAI.egg-info/entry_points.txt +0 -0
  37. {praisonai-4.6.71 → praisonai-4.6.72}/PraisonAI.egg-info/top_level.txt +0 -0
  38. {praisonai-4.6.71 → praisonai-4.6.72}/README.md +0 -0
  39. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/__init__.py +0 -0
  40. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/__main__.py +0 -0
  41. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_approval_spec.py +0 -0
  42. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_async_bridge.py +0 -0
  43. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_dev/__init__.py +0 -0
  44. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_dev/api_md.py +0 -0
  45. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_dev/parity/__init__.py +0 -0
  46. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_dev/parity/docs_extractor.py +0 -0
  47. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_dev/parity/generator.py +0 -0
  48. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  49. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_dev/parity/python_extractor.py +0 -0
  50. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  51. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_dev/parity/rust_extractor.py +0 -0
  52. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  53. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  54. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  55. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_entrypoint.py +0 -0
  56. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_framework_availability.py +0 -0
  57. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_lazy_cache.py +0 -0
  58. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_lockmap.py +0 -0
  59. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_logging.py +0 -0
  60. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_registry.py +0 -0
  61. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/_safe_loader.py +0 -0
  62. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/acp/__init__.py +0 -0
  63. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/acp/config.py +0 -0
  64. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/acp/safe_edit.py +0 -0
  65. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/acp/server.py +0 -0
  66. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/acp/session.py +0 -0
  67. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/adapters/__init__.py +0 -0
  68. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/adapters/readers.py +0 -0
  69. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/adapters/rerankers.py +0 -0
  70. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/adapters/retrievers.py +0 -0
  71. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/adapters/vector_stores.py +0 -0
  72. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/agent.py +0 -0
  73. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/agent_scheduler.py +0 -0
  74. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/api/agent_invoke.py +0 -0
  75. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/api/call.py +0 -0
  76. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/app/__init__.py +0 -0
  77. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/app/agentos.py +0 -0
  78. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/async_agent_scheduler.py +0 -0
  79. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/audit/__init__.py +0 -0
  80. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/audit/agent_centric.py +0 -0
  81. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/auto.py +0 -0
  82. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_ack.py +0 -0
  83. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_approval.py +0 -0
  84. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_approval_base.py +0 -0
  85. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_auth.py +0 -0
  86. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_chunk.py +0 -0
  87. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_commands.py +0 -0
  88. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_config_schema.py +0 -0
  89. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_debounce.py +0 -0
  90. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_defaults.py +0 -0
  91. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_delivery.py +0 -0
  92. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_discord_approval.py +0 -0
  93. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_dlq.py +0 -0
  94. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_durable_adapter.py +0 -0
  95. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_email_utils.py +0 -0
  96. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_http_approval.py +0 -0
  97. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_ingress.py +0 -0
  98. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_mirror.py +0 -0
  99. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_outbox.py +0 -0
  100. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_pairing_ui.py +0 -0
  101. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_presentation_approval.py +0 -0
  102. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_rate_limit.py +0 -0
  103. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_registry.py +0 -0
  104. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_reset_policy.py +0 -0
  105. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_resilience.py +0 -0
  106. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_run_control.py +0 -0
  107. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_slack_approval.py +0 -0
  108. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_status.py +0 -0
  109. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_streaming.py +0 -0
  110. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_telegram_approval.py +0 -0
  111. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_typing.py +0 -0
  112. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_typing_indicator.py +0 -0
  113. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_unknown_user.py +0 -0
  114. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_webhook_approval.py +0 -0
  115. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  116. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/agentmail.py +0 -0
  117. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/bot.py +0 -0
  118. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/discord.py +0 -0
  119. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/email.py +0 -0
  120. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/linear.py +0 -0
  121. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/media.py +0 -0
  122. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/slack.py +0 -0
  123. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/telegram.py +0 -0
  124. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/webhook_security.py +0 -0
  125. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/bots/whatsapp.py +0 -0
  126. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/__init__.py +0 -0
  127. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/agent.py +0 -0
  128. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/benchmark.py +0 -0
  129. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/cdp_agent.py +0 -0
  130. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/cdp_utils.py +0 -0
  131. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/cli.py +0 -0
  132. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/diagnostics.py +0 -0
  133. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/launcher.py +0 -0
  134. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/playwright_agent.py +0 -0
  135. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/profiling.py +0 -0
  136. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/protocol.py +0 -0
  137. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/report.py +0 -0
  138. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/server.py +0 -0
  139. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/sessions.py +0 -0
  140. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/browser/video.py +0 -0
  141. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/__init__.py +0 -0
  142. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/a2a.py +0 -0
  143. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/assistants.py +0 -0
  144. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/audio.py +0 -0
  145. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/batches.py +0 -0
  146. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/completions.py +0 -0
  147. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/container_files.py +0 -0
  148. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/containers.py +0 -0
  149. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/embeddings.py +0 -0
  150. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/files.py +0 -0
  151. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/fine_tuning.py +0 -0
  152. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/guardrails.py +0 -0
  153. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/images.py +0 -0
  154. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/mcp.py +0 -0
  155. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/messages.py +0 -0
  156. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/moderations.py +0 -0
  157. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/ocr.py +0 -0
  158. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/passthrough.py +0 -0
  159. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/rag.py +0 -0
  160. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/realtime.py +0 -0
  161. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/rerank.py +0 -0
  162. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/responses.py +0 -0
  163. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/search.py +0 -0
  164. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/skills.py +0 -0
  165. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/vector_store_files.py +0 -0
  166. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/vector_stores.py +0 -0
  167. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/capabilities/videos.py +0 -0
  168. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/claw/__init__.py +0 -0
  169. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/claw/default_app.py +0 -0
  170. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/__init__.py +0 -0
  171. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/_paths.py +0 -0
  172. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/_warnings.py +0 -0
  173. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/approval_backend.py +0 -0
  174. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/branding.py +0 -0
  175. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/__init__.py +0 -0
  176. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/acp.py +0 -0
  177. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/agents.py +0 -0
  178. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/app.py +0 -0
  179. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/audit.py +0 -0
  180. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/auth.py +0 -0
  181. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/batch.py +0 -0
  182. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/benchmark.py +0 -0
  183. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/bot.py +0 -0
  184. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/browser.py +0 -0
  185. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/call.py +0 -0
  186. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/chat.py +0 -0
  187. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/claw.py +0 -0
  188. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/code.py +0 -0
  189. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/commit.py +0 -0
  190. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/completion.py +0 -0
  191. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/config.py +0 -0
  192. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/context.py +0 -0
  193. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/dashboard.py +0 -0
  194. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/debug.py +0 -0
  195. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/deploy.py +0 -0
  196. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/diag.py +0 -0
  197. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/docs.py +0 -0
  198. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/doctor.py +0 -0
  199. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/endpoints.py +0 -0
  200. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/environment.py +0 -0
  201. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/eval.py +0 -0
  202. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/examples.py +0 -0
  203. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/flow.py +0 -0
  204. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/gateway.py +0 -0
  205. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/github.py +0 -0
  206. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/hooks.py +0 -0
  207. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/kanban.py +0 -0
  208. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/knowledge.py +0 -0
  209. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/langextract.py +0 -0
  210. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/langfuse.py +0 -0
  211. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/loop.py +0 -0
  212. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/lsp.py +0 -0
  213. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/managed.py +0 -0
  214. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/mcp.py +0 -0
  215. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/memory.py +0 -0
  216. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/mint_link.py +0 -0
  217. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/models.py +0 -0
  218. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/n8n.py +0 -0
  219. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/obs.py +0 -0
  220. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/onboard.py +0 -0
  221. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/package.py +0 -0
  222. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/pairing.py +0 -0
  223. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/paths.py +0 -0
  224. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/permissions.py +0 -0
  225. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/plugins.py +0 -0
  226. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/port.py +0 -0
  227. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/profile.py +0 -0
  228. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/publish.py +0 -0
  229. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/rag.py +0 -0
  230. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/realtime.py +0 -0
  231. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/recipe.py +0 -0
  232. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/registry.py +0 -0
  233. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/replay.py +0 -0
  234. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/research.py +0 -0
  235. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/retrieval.py +0 -0
  236. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/rules.py +0 -0
  237. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/run.py +0 -0
  238. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/sandbox.py +0 -0
  239. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/schedule.py +0 -0
  240. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/serve.py +0 -0
  241. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/session.py +0 -0
  242. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/setup.py +0 -0
  243. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/skills.py +0 -0
  244. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/standardise.py +0 -0
  245. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/templates.py +0 -0
  246. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/test.py +0 -0
  247. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/todo.py +0 -0
  248. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/tools.py +0 -0
  249. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/traces.py +0 -0
  250. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/tracker.py +0 -0
  251. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/train.py +0 -0
  252. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/ui.py +0 -0
  253. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/up.py +0 -0
  254. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/validate.py +0 -0
  255. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/version.py +0 -0
  256. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/commands/workflow.py +0 -0
  257. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/config_loader.py +0 -0
  258. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/configuration/__init__.py +0 -0
  259. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/configuration/credentials.py +0 -0
  260. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/configuration/loader.py +0 -0
  261. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/configuration/paths.py +0 -0
  262. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/configuration/resolver.py +0 -0
  263. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/configuration/schema.py +0 -0
  264. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/execution/__init__.py +0 -0
  265. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/execution/core.py +0 -0
  266. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/execution/profiler.py +0 -0
  267. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/execution/request.py +0 -0
  268. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/execution/result.py +0 -0
  269. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/fallback_schema.py +0 -0
  270. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/__init__.py +0 -0
  271. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/_endpoint_registry.py +0 -0
  272. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/_search_registry.py +0 -0
  273. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/acp.py +0 -0
  274. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/action_orchestrator.py +0 -0
  275. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/agent_scheduler.py +0 -0
  276. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/agent_tools.py +0 -0
  277. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/agents.py +0 -0
  278. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/approval.py +0 -0
  279. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/at_mentions.py +0 -0
  280. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/audit_cli.py +0 -0
  281. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/auto_memory.py +0 -0
  282. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/auto_mode.py +0 -0
  283. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/autonomy_mode.py +0 -0
  284. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/background.py +0 -0
  285. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/base.py +0 -0
  286. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/benchmark.py +0 -0
  287. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/bots_cli.py +0 -0
  288. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/capabilities.py +0 -0
  289. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/checkpoints.py +0 -0
  290. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/cli_profiler.py +0 -0
  291. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/code_intelligence.py +0 -0
  292. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/compaction.py +0 -0
  293. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/compare.py +0 -0
  294. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/config_hierarchy.py +0 -0
  295. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/context_manager.py +0 -0
  296. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/cost_tracker.py +0 -0
  297. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/csv_test_runner.py +0 -0
  298. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/custom_definitions.py +0 -0
  299. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/debug.py +0 -0
  300. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/deploy.py +0 -0
  301. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/diag.py +0 -0
  302. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/display_jsonl.py +0 -0
  303. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/__init__.py +0 -0
  304. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  305. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  306. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  307. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  308. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  309. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  310. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/gateway_checks.py +0 -0
  311. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  312. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  313. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  314. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  315. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  316. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
  317. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  318. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  319. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/runtime_checks.py +0 -0
  320. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/runtime_migration_checks.py +0 -0
  321. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  322. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  323. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  324. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  325. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/engine.py +0 -0
  326. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/formatters.py +0 -0
  327. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/handler.py +0 -0
  328. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/models.py +0 -0
  329. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/doctor/registry.py +0 -0
  330. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/endpoints.py +0 -0
  331. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/eval.py +0 -0
  332. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/examples.py +0 -0
  333. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/external_agents.py +0 -0
  334. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/fast_context.py +0 -0
  335. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/file_history.py +0 -0
  336. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/flow_display.py +0 -0
  337. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/gateway.py +0 -0
  338. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/git_attribution.py +0 -0
  339. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/git_integration.py +0 -0
  340. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/guardrail.py +0 -0
  341. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/handoff.py +0 -0
  342. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/hooks.py +0 -0
  343. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/hybrid_workflow.py +0 -0
  344. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/image.py +0 -0
  345. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/interactive_core_headless.py +0 -0
  346. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/interactive_runtime.py +0 -0
  347. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/interactive_test_harness.py +0 -0
  348. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/interactive_tools.py +0 -0
  349. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/interactive_tui.py +0 -0
  350. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/job_workflow.py +0 -0
  351. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/jobs.py +0 -0
  352. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/knowledge.py +0 -0
  353. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/knowledge_cli.py +0 -0
  354. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/lite.py +0 -0
  355. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/logs.py +0 -0
  356. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/lsp_cli.py +0 -0
  357. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  358. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/mcp.py +0 -0
  359. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/message_queue.py +0 -0
  360. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/metrics.py +0 -0
  361. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/migrate.py +0 -0
  362. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/migration_flow.py +0 -0
  363. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/migration_spec.py +0 -0
  364. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/n8n.py +0 -0
  365. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/observability.py +0 -0
  366. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/ollama.py +0 -0
  367. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/onboard.py +0 -0
  368. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/output_modes.py +0 -0
  369. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/output_style.py +0 -0
  370. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/package.py +0 -0
  371. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/performance.py +0 -0
  372. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/persistence.py +0 -0
  373. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/plugin_cli.py +0 -0
  374. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/profile.py +0 -0
  375. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/profiler/__init__.py +0 -0
  376. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/profiler/core.py +0 -0
  377. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/profiler/optimizations.py +0 -0
  378. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/profiler/suite.py +0 -0
  379. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/profiling.py +0 -0
  380. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/queue/__init__.py +0 -0
  381. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/queue/manager.py +0 -0
  382. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/queue/models.py +0 -0
  383. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/queue/persistence.py +0 -0
  384. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/queue/scheduler.py +0 -0
  385. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/queue/worker.py +0 -0
  386. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/recipe.py +0 -0
  387. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/recipe_creator.py +0 -0
  388. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/recipe_optimizer.py +0 -0
  389. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/recipe_prompts.py +0 -0
  390. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/recipes.py +0 -0
  391. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/registry.py +0 -0
  392. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/repo_map.py +0 -0
  393. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/router.py +0 -0
  394. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/safe_shell.py +0 -0
  395. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/sandbox_cli.py +0 -0
  396. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/sandbox_executor.py +0 -0
  397. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/sdk_knowledge.py +0 -0
  398. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/serve.py +0 -0
  399. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/session.py +0 -0
  400. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/setup/__init__.py +0 -0
  401. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/setup/handler.py +0 -0
  402. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/setup/templates.py +0 -0
  403. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/skills.py +0 -0
  404. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/slash_commands.py +0 -0
  405. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/telemetry.py +0 -0
  406. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/templates.py +0 -0
  407. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/thinking.py +0 -0
  408. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/todo.py +0 -0
  409. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tools.py +0 -0
  410. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/__init__.py +0 -0
  411. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/app.py +0 -0
  412. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/cli.py +0 -0
  413. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/config.py +0 -0
  414. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/debug.py +0 -0
  415. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/events.py +0 -0
  416. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/mock_provider.py +0 -0
  417. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/orchestrator.py +0 -0
  418. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  419. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/screens/help.py +0 -0
  420. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/screens/main.py +0 -0
  421. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/screens/queue.py +0 -0
  422. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/screens/session.py +0 -0
  423. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/screens/settings.py +0 -0
  424. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/session_store.py +0 -0
  425. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  426. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  427. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  428. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  429. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  430. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  431. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/status.py +0 -0
  432. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  433. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/wizard.py +0 -0
  434. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/workflow.py +0 -0
  435. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/features/yaml_utils.py +0 -0
  436. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/interactive/__init__.py +0 -0
  437. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/interactive/async_tui.py +0 -0
  438. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/interactive/config.py +0 -0
  439. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/interactive/core.py +0 -0
  440. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/interactive/events.py +0 -0
  441. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  442. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  443. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  444. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/interactive/praison_io.py +0 -0
  445. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/interactive/repl.py +0 -0
  446. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/interactive/split_tui.py +0 -0
  447. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/interactive/tui_app.py +0 -0
  448. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/langfuse_client.py +0 -0
  449. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/main.py +0 -0
  450. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/output/__init__.py +0 -0
  451. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/output/console.py +0 -0
  452. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/schedule_cli.py +0 -0
  453. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/schema_provider.py +0 -0
  454. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/session/__init__.py +0 -0
  455. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/session/unified.py +0 -0
  456. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/state/__init__.py +0 -0
  457. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/state/identifiers.py +0 -0
  458. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/state/project_sessions.py +0 -0
  459. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/state/sessions.py +0 -0
  460. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/ui/__init__.py +0 -0
  461. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/ui/config.py +0 -0
  462. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/ui/events.py +0 -0
  463. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/ui/mg_backend.py +0 -0
  464. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/ui/plain.py +0 -0
  465. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/ui/rich_backend.py +0 -0
  466. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/unified_schema.py +0 -0
  467. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/utils/env_utils.py +0 -0
  468. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli/utils/project.py +0 -0
  469. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli_backends/__init__.py +0 -0
  470. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli_backends/claude.py +0 -0
  471. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/cli_backends/registry.py +0 -0
  472. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/__init__.py +0 -0
  473. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/agent_tools.py +0 -0
  474. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/diff/__init__.py +0 -0
  475. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/diff/diff_strategy.py +0 -0
  476. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/tools/__init__.py +0 -0
  477. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/tools/apply_diff.py +0 -0
  478. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/tools/execute_command.py +0 -0
  479. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/tools/list_files.py +0 -0
  480. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/tools/read_file.py +0 -0
  481. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/tools/search_replace.py +0 -0
  482. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/tools/write_file.py +0 -0
  483. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/utils/__init__.py +0 -0
  484. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/utils/file_utils.py +0 -0
  485. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/utils/ignore_utils.py +0 -0
  486. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/code/utils/text_utils.py +0 -0
  487. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/config/__init__.py +0 -0
  488. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/config/schema.py +0 -0
  489. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/config/validator.py +0 -0
  490. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/context/__init__.py +0 -0
  491. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/context/_storage_path.py +0 -0
  492. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/context/artifact_store.py +0 -0
  493. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/context/config.py +0 -0
  494. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/context/history_store.py +0 -0
  495. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/context/queue.py +0 -0
  496. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/context/setup.py +0 -0
  497. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/context/terminal_logger.py +0 -0
  498. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/daemon/__init__.py +0 -0
  499. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/daemon/launchd.py +0 -0
  500. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/daemon/systemd.py +0 -0
  501. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/daemon/windows.py +0 -0
  502. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/db/__init__.py +0 -0
  503. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/db/adapter.py +0 -0
  504. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/deploy/__init__.py +0 -0
  505. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/deploy/api.py +0 -0
  506. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/deploy/docker.py +0 -0
  507. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/deploy/doctor.py +0 -0
  508. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/deploy/main.py +0 -0
  509. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/deploy/models.py +0 -0
  510. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/deploy/providers/__init__.py +0 -0
  511. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/deploy/providers/_registry.py +0 -0
  512. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/deploy/providers/aws.py +0 -0
  513. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/deploy/providers/azure.py +0 -0
  514. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/deploy/providers/base.py +0 -0
  515. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/deploy/providers/gcp.py +0 -0
  516. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/deploy/schema.py +0 -0
  517. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/docs_runner/__init__.py +0 -0
  518. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/docs_runner/classifier.py +0 -0
  519. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/docs_runner/executor.py +0 -0
  520. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/docs_runner/extractor.py +0 -0
  521. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/docs_runner/reporter.py +0 -0
  522. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/docs_runner/runner.py +0 -0
  523. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/docs_runner/workspace.py +0 -0
  524. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/__init__.py +0 -0
  525. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/a2u_server.py +0 -0
  526. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/discovery.py +0 -0
  527. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/providers/__init__.py +0 -0
  528. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/providers/a2a.py +0 -0
  529. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/providers/a2u.py +0 -0
  530. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/providers/agents_api.py +0 -0
  531. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/providers/base.py +0 -0
  532. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/providers/mcp.py +0 -0
  533. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/providers/openai_compat.py +0 -0
  534. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/providers/recipe.py +0 -0
  535. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  536. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/registry.py +0 -0
  537. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/endpoints/server.py +0 -0
  538. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/flow/__init__.py +0 -0
  539. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/flow/client.py +0 -0
  540. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  541. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  542. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/flow/components/__init__.py +0 -0
  543. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/flow/converter.py +0 -0
  544. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/flow/helpers.py +0 -0
  545. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/framework_adapters/__init__.py +0 -0
  546. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  547. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/framework_adapters/base.py +0 -0
  548. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  549. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  550. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/framework_adapters/registry.py +0 -0
  551. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/framework_adapters/validators.py +0 -0
  552. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/__init__.py +0 -0
  553. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/auth.py +0 -0
  554. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/client.py +0 -0
  555. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/cookie_auth.py +0 -0
  556. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/exec_approval.py +0 -0
  557. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/gateway_approval.py +0 -0
  558. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/health_monitor.py +0 -0
  559. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/home_channels.py +0 -0
  560. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/kanban_dispatcher.py +0 -0
  561. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/magic_link.py +0 -0
  562. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/origin_check.py +0 -0
  563. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/pairing.py +0 -0
  564. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/port_utils.py +0 -0
  565. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/push_channels.py +0 -0
  566. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/push_delivery.py +0 -0
  567. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/push_polling.py +0 -0
  568. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/push_presence.py +0 -0
  569. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/rate_limiter.py +0 -0
  570. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/redis_pubsub.py +0 -0
  571. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/supervisor.py +0 -0
  572. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/gateway/unicode_utils.py +0 -0
  573. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/inbuilt_tools/__init__.py +0 -0
  574. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  575. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/inc/__init__.py +0 -0
  576. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/inc/config.py +0 -0
  577. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/inc/models.py +0 -0
  578. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integration/__init__.py +0 -0
  579. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integration/bridges/__init__.py +0 -0
  580. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  581. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integration/bridges/hooks_query.py +0 -0
  582. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  583. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integration/bridges/schedules_runner.py +0 -0
  584. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integration/bridges/usage_bridge.py +0 -0
  585. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integration/bridges/workflows_service.py +0 -0
  586. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integration/gateway_host.py +0 -0
  587. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integration/host_app.py +0 -0
  588. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integration/pages/__init__.py +0 -0
  589. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integration/pages/bot_health.py +0 -0
  590. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integration/pages/workflow_runs.py +0 -0
  591. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/__init__.py +0 -0
  592. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/_session_info.py +0 -0
  593. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/_tool_aliases.py +0 -0
  594. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/_unified_registry.py +0 -0
  595. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/base.py +0 -0
  596. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/claude_code.py +0 -0
  597. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/codex_cli.py +0 -0
  598. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/compute/__init__.py +0 -0
  599. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/compute/daytona.py +0 -0
  600. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/compute/docker.py +0 -0
  601. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/compute/e2b.py +0 -0
  602. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/compute/flyio.py +0 -0
  603. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/compute/local.py +0 -0
  604. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/compute/modal_compute.py +0 -0
  605. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/cursor_cli.py +0 -0
  606. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/db_session_adapter.py +0 -0
  607. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/gemini_cli.py +0 -0
  608. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/hosted_agent.py +0 -0
  609. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/local_agent.py +0 -0
  610. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/managed_agents.py +0 -0
  611. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/managed_local.py +0 -0
  612. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/registry.py +0 -0
  613. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/integrations/sandboxed_agent.py +0 -0
  614. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/jobs/__init__.py +0 -0
  615. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/jobs/executor.py +0 -0
  616. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/jobs/models.py +0 -0
  617. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/jobs/path_validation.py +0 -0
  618. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/jobs/router.py +0 -0
  619. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/jobs/server.py +0 -0
  620. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/jobs/store.py +0 -0
  621. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/kanban/__init__.py +0 -0
  622. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/kanban/models.py +0 -0
  623. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/kanban/paths.py +0 -0
  624. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/kanban/sqlite_store.py +0 -0
  625. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/llm/__init__.py +0 -0
  626. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/llm/catalogue.py +0 -0
  627. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/llm/credentials.py +0 -0
  628. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/llm/env.py +0 -0
  629. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/llm/gateways.py +0 -0
  630. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/__init__.py +0 -0
  631. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/adapters/__init__.py +0 -0
  632. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/adapters/agents.py +0 -0
  633. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  634. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  635. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  636. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  637. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/adapters/memory.py +0 -0
  638. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/adapters/prompts.py +0 -0
  639. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/adapters/resources.py +0 -0
  640. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  641. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/auth/__init__.py +0 -0
  642. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/auth/api_key.py +0 -0
  643. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/auth/oauth.py +0 -0
  644. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/auth/oidc.py +0 -0
  645. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/auth/scopes.py +0 -0
  646. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/cli.py +0 -0
  647. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/elicitation.py +0 -0
  648. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/icons.py +0 -0
  649. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/recipe_adapter.py +0 -0
  650. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/recipe_cli.py +0 -0
  651. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/registry.py +0 -0
  652. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/sampling.py +0 -0
  653. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/server.py +0 -0
  654. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/tasks.py +0 -0
  655. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/tool_index.py +0 -0
  656. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/transports/__init__.py +0 -0
  657. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/transports/http_stream.py +0 -0
  658. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/mcp_server/transports/stdio.py +0 -0
  659. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/n8n/__init__.py +0 -0
  660. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/n8n/client.py +0 -0
  661. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/n8n/converter.py +0 -0
  662. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/n8n/preview.py +0 -0
  663. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/n8n/reverse_converter.py +0 -0
  664. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/observability/__init__.py +0 -0
  665. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/observability/hooks.py +0 -0
  666. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/observability/langextract.py +0 -0
  667. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/observability/langfuse.py +0 -0
  668. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/__init__.py +0 -0
  669. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/config.py +0 -0
  670. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/__init__.py +0 -0
  671. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/_sql_base.py +0 -0
  672. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/async_mysql.py +0 -0
  673. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/async_postgres.py +0 -0
  674. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  675. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/base.py +0 -0
  676. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/json_store.py +0 -0
  677. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/mysql.py +0 -0
  678. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/postgres.py +0 -0
  679. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/singlestore.py +0 -0
  680. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/sqlite.py +0 -0
  681. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/supabase.py +0 -0
  682. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/surrealdb.py +0 -0
  683. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  684. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/conversation/turso.py +0 -0
  685. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/factory.py +0 -0
  686. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/hooks/__init__.py +0 -0
  687. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  688. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/__init__.py +0 -0
  689. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/base.py +0 -0
  690. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/cassandra.py +0 -0
  691. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/chroma.py +0 -0
  692. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  693. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  694. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/couchbase.py +0 -0
  695. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/lancedb.py +0 -0
  696. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  697. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  698. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  699. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/milvus.py +0 -0
  700. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  701. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/pgvector.py +0 -0
  702. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/pinecone.py +0 -0
  703. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/qdrant.py +0 -0
  704. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  705. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  706. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  707. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  708. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  709. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/knowledge/weaviate.py +0 -0
  710. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/migrations/__init__.py +0 -0
  711. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/migrations/manager.py +0 -0
  712. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/orchestrator.py +0 -0
  713. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/registry.py +0 -0
  714. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/state/__init__.py +0 -0
  715. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/state/async_mongodb.py +0 -0
  716. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/state/base.py +0 -0
  717. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/state/dynamodb.py +0 -0
  718. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/state/firestore.py +0 -0
  719. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/state/gcs.py +0 -0
  720. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/state/memory.py +0 -0
  721. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/state/mongodb.py +0 -0
  722. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/state/redis.py +0 -0
  723. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/state/upstash.py +0 -0
  724. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/state/valkey.py +0 -0
  725. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/tests/__init__.py +0 -0
  726. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/tests/test_all_backends.py +0 -0
  727. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  728. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/profiler.py +0 -0
  729. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/push/__init__.py +0 -0
  730. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/push/client.py +0 -0
  731. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/push/transports.py +0 -0
  732. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/recipe/__init__.py +0 -0
  733. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/recipe/bridge.py +0 -0
  734. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/recipe/core.py +0 -0
  735. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/recipe/exceptions.py +0 -0
  736. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/recipe/history.py +0 -0
  737. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/recipe/models.py +0 -0
  738. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/recipe/operations.py +0 -0
  739. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/recipe/policy.py +0 -0
  740. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/recipe/registry.py +0 -0
  741. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/recipe/runtime.py +0 -0
  742. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/recipe/security.py +0 -0
  743. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/recipe/serve.py +0 -0
  744. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/recipe/server.py +0 -0
  745. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/replay/__init__.py +0 -0
  746. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/replay/analyzer.py +0 -0
  747. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/replay/applier.py +0 -0
  748. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/replay/judge.py +0 -0
  749. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/replay/plan.py +0 -0
  750. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/replay/player.py +0 -0
  751. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/replay/reader.py +0 -0
  752. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/replay/storage.py +0 -0
  753. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/replay/writer.py +0 -0
  754. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/sandbox/__init__.py +0 -0
  755. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/sandbox/_compat.py +0 -0
  756. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/sandbox/_registry.py +0 -0
  757. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/sandbox/_shell.py +0 -0
  758. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/sandbox/daytona.py +0 -0
  759. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/sandbox/docker.py +0 -0
  760. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/sandbox/e2b.py +0 -0
  761. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/sandbox/modal.py +0 -0
  762. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/sandbox/sandlock.py +0 -0
  763. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/sandbox/ssh.py +0 -0
  764. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/sandbox/subprocess.py +0 -0
  765. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/scheduler/_dispatch.py +0 -0
  766. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/scheduler/base.py +0 -0
  767. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/scheduler/daemon_manager.py +0 -0
  768. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/scheduler/deployment.py +0 -0
  769. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/scheduler/shared.py +0 -0
  770. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/scheduler/state_manager.py +0 -0
  771. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/scheduler/yaml_loader.py +0 -0
  772. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/security/__init__.py +0 -0
  773. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/security/audit.py +0 -0
  774. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/security/injection.py +0 -0
  775. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/security/protected.py +0 -0
  776. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/setup/__init__.py +0 -0
  777. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/setup/build.py +0 -0
  778. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/setup/post_install.py +0 -0
  779. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/setup/setup_conda_env.py +0 -0
  780. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/setup.py +0 -0
  781. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/__init__.py +0 -0
  782. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/ai_generator.py +0 -0
  783. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/config.py +0 -0
  784. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/dedupe.py +0 -0
  785. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/discovery.py +0 -0
  786. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/drift.py +0 -0
  787. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/engine.py +0 -0
  788. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/enhanced_templates.py +0 -0
  789. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/example_verifier.py +0 -0
  790. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/manifest.py +0 -0
  791. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/models.py +0 -0
  792. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/reports.py +0 -0
  793. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/templates.py +0 -0
  794. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/undo_redo.py +0 -0
  795. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/standardise/validator.py +0 -0
  796. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/storage/__init__.py +0 -0
  797. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/storage/dynamodb_adapter.py +0 -0
  798. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/storage/mongodb_adapter.py +0 -0
  799. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/storage/postgresql_adapter.py +0 -0
  800. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/storage/redis_adapter.py +0 -0
  801. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/storage/valkey_adapter.py +0 -0
  802. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/suite_runner/__init__.py +0 -0
  803. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/suite_runner/batch_source.py +0 -0
  804. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/suite_runner/cli_docs_source.py +0 -0
  805. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/suite_runner/discovery.py +0 -0
  806. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/suite_runner/docs_source.py +0 -0
  807. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/suite_runner/examples_source.py +0 -0
  808. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/suite_runner/executor.py +0 -0
  809. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/suite_runner/models.py +0 -0
  810. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/suite_runner/report_viewer.py +0 -0
  811. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/suite_runner/reporter.py +0 -0
  812. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/suite_runner/runner.py +0 -0
  813. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/templates/__init__.py +0 -0
  814. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/templates/cache.py +0 -0
  815. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/templates/dependency_checker.py +0 -0
  816. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/templates/discovery.py +0 -0
  817. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/templates/loader.py +0 -0
  818. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/templates/registry.py +0 -0
  819. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/templates/resolver.py +0 -0
  820. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/templates/security.py +0 -0
  821. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/templates/tool_override.py +0 -0
  822. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/templates/tools_doctor.py +0 -0
  823. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/test.py +0 -0
  824. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/tool_registry.py +0 -0
  825. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/tool_resolver.py +0 -0
  826. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/tools/__init__.py +0 -0
  827. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/tools/audio.py +0 -0
  828. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/tools/glob_tool.py +0 -0
  829. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/tools/grep_tool.py +0 -0
  830. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/tools/kanban_tools.py +0 -0
  831. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/tools/multiedit.py +0 -0
  832. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/tools/skill_manage.py +0 -0
  833. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/train/__init__.py +0 -0
  834. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/train/_ollama.py +0 -0
  835. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/train/agents/__init__.py +0 -0
  836. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/train/agents/grader.py +0 -0
  837. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/train/agents/hook.py +0 -0
  838. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/train/agents/models.py +0 -0
  839. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/train/agents/orchestrator.py +0 -0
  840. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/train/agents/storage.py +0 -0
  841. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/train/llm/__init__.py +0 -0
  842. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/train/llm/trainer.py +0 -0
  843. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/train.py +0 -0
  844. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/train_vision.py +0 -0
  845. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui/_aiui_datastore.py +0 -0
  846. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui/_external_agents.py +0 -0
  847. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui/callbacks.py +0 -0
  848. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui/components/aicoder.py +0 -0
  849. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui/context.py +0 -0
  850. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui/database_config.py +0 -0
  851. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui_agents/__init__.py +0 -0
  852. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui_agents/default_app.py +0 -0
  853. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui_bot/__init__.py +0 -0
  854. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui_bot/default_app.py +0 -0
  855. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui_chat/__init__.py +0 -0
  856. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui_chat/default_app.py +0 -0
  857. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui_dashboard/default_app.py +0 -0
  858. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui_realtime/__init__.py +0 -0
  859. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/ui_realtime/default_app.py +0 -0
  860. {praisonai-4.6.71 → praisonai-4.6.72}/praisonai/upload_vision.py +0 -0
  861. {praisonai-4.6.71 → praisonai-4.6.72}/setup.cfg +0 -0
  862. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test.py +0 -0
  863. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_agents_playbook.py +0 -0
  864. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_approval_system.py +0 -0
  865. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_basic.py +0 -0
  866. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_cli_features.py +0 -0
  867. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_custom_tools_fix.py +0 -0
  868. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_double_api_fix.py +0 -0
  869. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_n8n_agent_invoke.py +0 -0
  870. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_n8n_cli_feature.py +0 -0
  871. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_n8n_integration.py +0 -0
  872. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_phase2_refactor.py +0 -0
  873. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_recipe.py +0 -0
  874. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_registry.py +0 -0
  875. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_runner.py +0 -0
  876. {praisonai-4.6.71 → praisonai-4.6.72}/tests/test_sandboxed_agent_compatibility.py +0 -0
  877. {praisonai-4.6.71 → praisonai-4.6.72}/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.71
3
+ Version: 4.6.72
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.71
14
+ Requires-Dist: praisonaiagents>=1.6.72
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.71
3
+ Version: 4.6.72
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.71
14
+ Requires-Dist: praisonaiagents>=1.6.72
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
@@ -76,6 +76,7 @@ praisonai/bots/_dlq.py
76
76
  praisonai/bots/_durable_adapter.py
77
77
  praisonai/bots/_email_utils.py
78
78
  praisonai/bots/_http_approval.py
79
+ praisonai/bots/_identity.py
79
80
  praisonai/bots/_ingress.py
80
81
  praisonai/bots/_mirror.py
81
82
  praisonai/bots/_outbox.py
@@ -201,6 +202,8 @@ praisonai/cli/commands/flow.py
201
202
  praisonai/cli/commands/gateway.py
202
203
  praisonai/cli/commands/github.py
203
204
  praisonai/cli/commands/hooks.py
205
+ praisonai/cli/commands/identity.py
206
+ praisonai/cli/commands/init.py
204
207
  praisonai/cli/commands/kanban.py
205
208
  praisonai/cli/commands/knowledge.py
206
209
  praisonai/cli/commands/langextract.py
@@ -766,6 +769,7 @@ praisonai/scheduler/daemon_manager.py
766
769
  praisonai/scheduler/deployment.py
767
770
  praisonai/scheduler/enhanced_executor.py
768
771
  praisonai/scheduler/executor.py
772
+ praisonai/scheduler/run_policy.py
769
773
  praisonai/scheduler/shared.py
770
774
  praisonai/scheduler/state_manager.py
771
775
  praisonai/scheduler/yaml_loader.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.71
4
+ praisonaiagents>=1.6.72
5
5
  python-dotenv>=0.19.0
6
6
  litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
@@ -184,6 +184,40 @@ FEATURE_CATEGORIES = {
184
184
  'resource': 'Sandbox', # ResourceLimits is part of sandbox execution
185
185
  }
186
186
 
187
+ # Doc categories excluded from Python "Documentation Without Features" orphan reporting.
188
+ # These pages document infra, other SDKs, or user-facing tooling outside praisonaiagents exports.
189
+ PYTHON_DOC_ORPHAN_EXCLUSIONS = frozenset({
190
+ 'Deployment', # docs/deploy — CI/infra guidance, not Python SDK feature exports
191
+ 'AI SDK', # TypeScript SDK pages; tracked in docs/js/ parity separately
192
+ })
193
+
194
+ # Map doc-only category display names to SDK feature display names for parity matching.
195
+ DOC_FEATURE_CATEGORY_ALIASES = {
196
+ 'Callbacks': 'Hooks',
197
+ 'Middleware': 'Hooks',
198
+ 'Vector Store': 'Knowledge',
199
+ 'Token Management': 'Context Management',
200
+ 'Jobs': 'Workflows',
201
+ 'Chat': 'Agent',
202
+ 'Streaming': 'LLM',
203
+ 'Scheduler': 'Tools',
204
+ 'Storage': 'Database',
205
+ 'Process': 'Workflows',
206
+ }
207
+
208
+ # Module-path hints when export names do not match FEATURE_CATEGORIES prefixes.
209
+ MODULE_PATH_CATEGORY = (
210
+ ('deep_research_agent', 'deep-research'),
211
+ ('hooks', 'hook'),
212
+ ('streaming', 'stream'),
213
+ ('scheduler', 'scheduler'),
214
+ ('storage', 'storage'),
215
+ ('process', 'process'),
216
+ ('context.tokens', 'token'),
217
+ ('chat_handler', 'chat'),
218
+ ('chat_mixin', 'chat'),
219
+ )
220
+
187
221
 
188
222
  # Minimum lines for a doc to be considered "real" (not a stub)
189
223
  MIN_DOC_LINES = 50
@@ -257,8 +291,14 @@ class DocsParityGenerator:
257
291
  current = current.parent
258
292
  return Path("/Users/praison/praisonai-package")
259
293
 
260
- def _categorize_feature(self, feature_name: str) -> str:
261
- """Map a feature name to its category."""
294
+ def _categorize_feature(self, feature_name: str, module_path: str = '') -> str:
295
+ """Map a feature name (and optional module path) to its category."""
296
+ if module_path:
297
+ path = module_path.replace('praisonaiagents.', '')
298
+ for hint, prefix in MODULE_PATH_CATEGORY:
299
+ if hint in path:
300
+ return prefix
301
+
262
302
  normalized = normalize_topic(feature_name)
263
303
 
264
304
  # Try to find a matching prefix
@@ -305,7 +345,8 @@ class DocsParityGenerator:
305
345
 
306
346
  for export in exports:
307
347
  name = export.name if hasattr(export, 'name') else str(export)
308
- category = self._categorize_feature(name)
348
+ module_path = export.module_path if hasattr(export, 'module_path') else ''
349
+ category = self._categorize_feature(name, module_path)
309
350
  if category not in groups:
310
351
  groups[category] = []
311
352
  groups[category].append(name)
@@ -357,6 +398,9 @@ class DocsParityGenerator:
357
398
  if prefix == 'other':
358
399
  continue
359
400
  display_name = FEATURE_CATEGORIES.get(prefix, prefix.title())
401
+ if display_name in PYTHON_DOC_ORPHAN_EXCLUSIONS:
402
+ continue
403
+ display_name = DOC_FEATURE_CATEGORY_ALIASES.get(display_name, display_name)
360
404
  if display_name not in result:
361
405
  result[display_name] = ([], 0)
362
406
  existing_names, existing_lines = result[display_name]
@@ -1,25 +1,41 @@
1
1
  # praisonai/agents_generator.py
2
2
 
3
3
  import sys
4
- from typing import Dict, Any, Optional, List
5
- from .version import __version__
6
- import yaml, os
7
- from rich import print
8
- import inspect
9
- from pathlib import Path
10
- import importlib
11
- import importlib.util
12
4
  import os
5
+ import inspect
13
6
  import logging
14
7
  import re
15
8
  import keyword
16
9
  import difflib
10
+ import importlib
11
+ import importlib.util
12
+ from pathlib import Path
13
+ from typing import Dict, Any, Optional, List
14
+
15
+ from .version import __version__
17
16
 
18
17
  # Import new architecture components
19
18
  from .framework_adapters.base import FrameworkAdapter
20
- from .framework_adapters.registry import FrameworkAdapterRegistry, get_default_registry
21
19
  from .tool_registry import ToolRegistry
22
20
 
21
+
22
+ def _rich_print(*args, **kwargs):
23
+ """Lazy alias for rich.print — pays the import cost only on first use."""
24
+ from rich import print as _rp
25
+ return _rp(*args, **kwargs)
26
+
27
+
28
+ def _yaml_safe_load(stream):
29
+ """Lazy alias for yaml.safe_load."""
30
+ import yaml
31
+ return yaml.safe_load(stream)
32
+
33
+
34
+ def _get_default_adapter_registry():
35
+ """Lazy import for the adapter registry — defers entry-point discovery."""
36
+ from .framework_adapters.registry import get_default_registry
37
+ return get_default_registry()
38
+
23
39
  # Import availability flags
24
40
  # Compatibility imports - now handled by centralized detection
25
41
  # (inbuilt_tools still defines these but they're read-only compatibility)
@@ -233,7 +249,7 @@ class AgentsGenerator:
233
249
 
234
250
  # DI-friendly: tests/multi-tenant runtimes pass their own registry;
235
251
  # CLI users get the process default.
236
- self._adapter_registry = adapter_registry or get_default_registry()
252
+ self._adapter_registry = adapter_registry or _get_default_adapter_registry()
237
253
 
238
254
  # Defer framework adapter creation until YAML is loaded
239
255
  # This fixes the issue where empty framework string fails before YAML framework is read
@@ -543,15 +559,15 @@ class AgentsGenerator:
543
559
  def _load_config(self):
544
560
  """Load configuration from agent file or agent_yaml."""
545
561
  if self.agent_yaml:
546
- config = yaml.safe_load(self.agent_yaml)
562
+ config = _yaml_safe_load(self.agent_yaml)
547
563
  else:
548
564
  if self.agent_file in ('/app/api:app', 'api:app'):
549
565
  self.agent_file = 'agents.yaml'
550
566
  try:
551
567
  with open(self.agent_file, 'r') as f:
552
- config = yaml.safe_load(f)
568
+ config = _yaml_safe_load(f)
553
569
  except FileNotFoundError:
554
- print(f"File not found: {self.agent_file}")
570
+ _rich_print(f"File not found: {self.agent_file}")
555
571
  return None
556
572
 
557
573
  # Apply CLI config overrides to both paths (agent_yaml and agent_file)
@@ -18,6 +18,7 @@ if TYPE_CHECKING:
18
18
  from .bot import Bot
19
19
  from .botos import BotOS
20
20
  from ._session import BotSessionManager
21
+ from ._identity import StoreBackedIdentityResolver
21
22
  from ._dlq import InboundDLQ, DLQEntry
22
23
  from ._ingress import InboundJournal, JournalEntry
23
24
  from ._slack_approval import SlackApproval
@@ -81,6 +82,9 @@ def __getattr__(name: str):
81
82
  if name == "BotSessionManager":
82
83
  from ._session import BotSessionManager
83
84
  return BotSessionManager
85
+ if name == "StoreBackedIdentityResolver":
86
+ from ._identity import StoreBackedIdentityResolver
87
+ return StoreBackedIdentityResolver
84
88
  # N4 — inbound dead-letter queue
85
89
  if name == "InboundDLQ":
86
90
  from ._dlq import InboundDLQ
@@ -130,6 +134,7 @@ __all__ = [
130
134
  "TelegramBot", "DiscordBot", "SlackBot", "WhatsAppBot", "LinearBot", "EmailBot", "AgentMailBot",
131
135
  "Bot", "BotOS",
132
136
  "BotSessionManager",
137
+ "StoreBackedIdentityResolver",
133
138
  "InboundDLQ", "DLQEntry",
134
139
  "InboundJournal", "JournalEntry",
135
140
  "OutboundQueue", "OutboundEntry",
@@ -0,0 +1,199 @@
1
+ """
2
+ Store-backed cross-platform identity resolver (wrapper implementation).
3
+
4
+ The core SDK ships the ``IdentityResolverProtocol`` and lightweight
5
+ in-memory / file-backed resolvers (``praisonaiagents.session.identity``).
6
+ This module provides a *heavy* implementation that reuses the wrapper's
7
+ persistence and **pairing** data so a linked/paired user shares one
8
+ session, history and memory across channels **by default**.
9
+
10
+ ``StoreBackedIdentityResolver``:
11
+
12
+ 1. Keeps an explicit, persisted ``(platform, user_id) -> canonical_id``
13
+ link map (inherited from the core ``FileIdentityResolver``).
14
+ 2. Falls back to the gateway pairing store: when two channels were paired
15
+ under the same label/canonical id, they resolve to that id.
16
+ 3. Otherwise returns the per-platform id ``f"{platform}:{user_id}"`` — a
17
+ safe, non-merging default identical to the core resolver.
18
+
19
+ Construction::
20
+
21
+ from praisonai.bots import StoreBackedIdentityResolver
22
+
23
+ resolver = StoreBackedIdentityResolver.from_env()
24
+ botos = BotOS(agent=agent, platforms=[...], identity_resolver=resolver)
25
+
26
+ # Link two channels to one canonical id
27
+ resolver.link("telegram", "12345", "alice")
28
+ resolver.link("whatsapp", "+44...", "alice")
29
+ """
30
+
31
+ from __future__ import annotations
32
+
33
+ import logging
34
+ from pathlib import Path
35
+ from typing import Any, Optional
36
+
37
+ from praisonaiagents.session.identity import FileIdentityResolver
38
+
39
+ logger = logging.getLogger(__name__)
40
+
41
+
42
+ class StoreBackedIdentityResolver(FileIdentityResolver):
43
+ """File-backed identity resolver augmented with pairing data.
44
+
45
+ Inherits the thread-safe, atomically-persisted link map from
46
+ :class:`praisonaiagents.session.identity.FileIdentityResolver` and adds
47
+ an optional read-through to a gateway :class:`PairingStore` so that
48
+ already-paired channels are recognised without an explicit ``link()``.
49
+
50
+ Resolution order for ``resolve(platform, user_id)``:
51
+
52
+ 1. An explicit link registered via :meth:`link` (highest priority).
53
+ 2. The pairing store's label for ``(user_id, platform)`` when that
54
+ channel is paired and carries a non-empty label (treated as the
55
+ canonical id) — lets paired users share a session out of the box.
56
+ 3. ``f"{platform}:{user_id}"`` — the safe per-platform fallback.
57
+
58
+ Args:
59
+ path: JSON file for the explicit link map. Defaults to the core
60
+ resolver default (``$PRAISONAI_IDENTITY_PATH`` or
61
+ ``~/.praisonai/identity.json``).
62
+ pairing_store: Optional object exposing ``is_paired`` /
63
+ ``list_paired`` (e.g. ``praisonai.gateway.pairing.PairingStore``).
64
+ When ``None``, behaviour matches the plain file resolver.
65
+ use_pairing_label: When ``True`` (default) a paired channel's
66
+ ``label`` is used as its canonical id. Set ``False`` to ignore
67
+ labels and rely solely on explicit links.
68
+ """
69
+
70
+ def __init__(
71
+ self,
72
+ path: Optional[Path | str] = None,
73
+ pairing_store: Optional[Any] = None,
74
+ use_pairing_label: bool = True,
75
+ ) -> None:
76
+ super().__init__(path=path)
77
+ self._pairing_store = pairing_store
78
+ self._use_pairing_label = use_pairing_label
79
+
80
+ @classmethod
81
+ def from_env(
82
+ cls,
83
+ path: Optional[Path | str] = None,
84
+ store_dir: Optional[str] = None,
85
+ use_pairing_label: bool = True,
86
+ ) -> "StoreBackedIdentityResolver":
87
+ """Build a resolver wired to the default gateway pairing store.
88
+
89
+ The pairing store is loaded lazily and any failure (e.g. optional
90
+ deps unavailable) degrades gracefully to a plain file resolver.
91
+
92
+ Args:
93
+ path: Override for the explicit link-map JSON path.
94
+ store_dir: Override for the pairing store directory.
95
+ use_pairing_label: Forwarded to ``__init__``.
96
+ """
97
+ pairing_store = None
98
+ try:
99
+ from praisonai.gateway.pairing import PairingStore
100
+
101
+ pairing_store = PairingStore(store_dir=store_dir)
102
+ except Exception as e: # pragma: no cover — optional/degraded path
103
+ logger.warning(
104
+ "StoreBackedIdentityResolver: pairing store unavailable, "
105
+ "falling back to link-map only: %s",
106
+ e,
107
+ )
108
+ return cls(
109
+ path=path,
110
+ pairing_store=pairing_store,
111
+ use_pairing_label=use_pairing_label,
112
+ )
113
+
114
+ def resolve(self, platform: str, platform_user_id: str) -> str:
115
+ # 1. Explicit links take precedence. The parent returns the
116
+ # per-platform fallback when no explicit link exists; detect
117
+ # that so we can consult the pairing store before giving up.
118
+ fallback = f"{platform}:{platform_user_id}"
119
+ with self._lock:
120
+ explicit = self._links.get((platform, platform_user_id))
121
+ if explicit is not None:
122
+ return explicit
123
+
124
+ # 2. Pairing-store read-through: a paired channel's label is the
125
+ # canonical id shared across channels paired under it.
126
+ if self._pairing_store is not None and self._use_pairing_label:
127
+ try:
128
+ canonical = self._canonical_from_pairing(platform, platform_user_id)
129
+ if canonical:
130
+ return canonical
131
+ except Exception as e: # pragma: no cover — defensive
132
+ logger.warning("identity pairing lookup failed: %s", e)
133
+
134
+ # 3. Safe per-platform fallback.
135
+ return fallback
136
+
137
+ def link_paired(self) -> int:
138
+ """Materialise pairing-store labels as explicit links.
139
+
140
+ Scans the pairing store and registers an explicit link for every
141
+ paired channel whose label is non-empty, so paired users keep a
142
+ stable canonical id even if the pairing store later changes.
143
+
144
+ Returns the number of links created/updated.
145
+ """
146
+ if self._pairing_store is None:
147
+ return 0
148
+ count = 0
149
+ try:
150
+ paired = self._pairing_store.list_paired()
151
+ except Exception as e: # pragma: no cover — defensive
152
+ logger.warning("identity link_paired failed to list pairings: %s", e)
153
+ return 0
154
+ for ch in paired:
155
+ label = getattr(ch, "label", "") or ""
156
+ channel_type = getattr(ch, "channel_type", "")
157
+ channel_id = getattr(ch, "channel_id", "")
158
+ if label and channel_type and channel_id:
159
+ # Write in-memory only; flush once after the loop to avoid
160
+ # N atomic disk writes when materialising many pairings.
161
+ with self._lock:
162
+ self._links[(channel_type, channel_id)] = label
163
+ count += 1
164
+ if count:
165
+ self._flush()
166
+ return count
167
+
168
+ def all_links(self) -> list[tuple[str, str, str]]:
169
+ """Return every explicit link as ``(platform, user_id, canonical)``."""
170
+ with self._lock:
171
+ return [
172
+ (platform, user_id, canonical)
173
+ for (platform, user_id), canonical in self._links.items()
174
+ ]
175
+
176
+ def _canonical_from_pairing(
177
+ self, platform: str, platform_user_id: str
178
+ ) -> Optional[str]:
179
+ """Return the pairing label (canonical id) for a paired channel."""
180
+ store = self._pairing_store
181
+ # Fast path: most messages come from unpaired users. ``is_paired`` is
182
+ # an O(1) dict lookup, so short-circuit before the O(n) scan below.
183
+ is_paired = getattr(store, "is_paired", None)
184
+ if callable(is_paired) and not is_paired(platform_user_id, platform):
185
+ return None
186
+ list_paired = getattr(store, "list_paired", None)
187
+ if not callable(list_paired):
188
+ return None
189
+ for ch in list_paired():
190
+ if (
191
+ getattr(ch, "channel_id", None) == platform_user_id
192
+ and getattr(ch, "channel_type", None) == platform
193
+ ):
194
+ label = getattr(ch, "label", "") or ""
195
+ return label or None
196
+ return None
197
+
198
+
199
+ __all__ = ["StoreBackedIdentityResolver"]
@@ -43,7 +43,13 @@ class TelegramPresentationRenderer:
43
43
  Returns:
44
44
  Dict with 'text' and optional 'reply_markup'
45
45
  """
46
- from praisonaiagents.bots.presentation import BlockType
46
+ from praisonaiagents.bots.presentation import (
47
+ BlockType,
48
+ PresentationLimits,
49
+ adapt_presentation,
50
+ )
51
+
52
+ presentation = adapt_presentation(presentation, PresentationLimits.telegram())
47
53
 
48
54
  text_parts = []
49
55
  inline_keyboard = []
@@ -70,8 +76,8 @@ class TelegramPresentationRenderer:
70
76
  inline_keyboard.append(current_row)
71
77
  current_row = []
72
78
 
73
- # Truncate label if needed
74
- label = button.label[:64] if len(button.label) > 64 else button.label
79
+ # Label is pre-truncated by adapt_presentation()
80
+ label = button.label
75
81
 
76
82
  # Create button data based on action type
77
83
  button_data = {"text": label}
@@ -98,19 +104,9 @@ class TelegramPresentationRenderer:
98
104
  if current_row:
99
105
  inline_keyboard.append(current_row)
100
106
 
101
- elif block.type == BlockType.SELECT or block.type == "select":
102
- # Telegram doesn't have native select menus, convert to buttons
103
- if block.options:
104
- for option in block.options[:100]: # Limit options
105
- label = option.label
106
- if option.emoji:
107
- label = f"{option.emoji} {label}"
108
- label = label[:64]
109
-
110
- inline_keyboard.append([{
111
- "text": label,
112
- "callback_data": f"select:{block.action_id}:{option.value[:32]}"
113
- }])
107
+ # Note: SELECT blocks are converted to BUTTONS by adapt_presentation()
108
+ # before this loop runs (Telegram has supports_select=False), so no
109
+ # separate SELECT branch is needed here.
114
110
 
115
111
  result = {"text": "\n\n".join(text_parts) if text_parts else "\u200B"} # Zero-width space if no text
116
112
 
@@ -139,7 +135,13 @@ class SlackPresentationRenderer:
139
135
  Returns:
140
136
  Dict with 'blocks' for Slack Block Kit
141
137
  """
142
- from praisonaiagents.bots.presentation import BlockType
138
+ from praisonaiagents.bots.presentation import (
139
+ BlockType,
140
+ PresentationLimits,
141
+ adapt_presentation,
142
+ )
143
+
144
+ presentation = adapt_presentation(presentation, PresentationLimits.slack())
143
145
 
144
146
  blocks = []
145
147
 
@@ -169,14 +171,14 @@ class SlackPresentationRenderer:
169
171
 
170
172
  elif block.type == BlockType.BUTTONS or block.type == "buttons":
171
173
  if block.buttons:
172
- # Slack allows max 5 buttons per actions block
174
+ # Presentation is pre-adapted to Slack limits (priority-aware)
173
175
  elements = []
174
- for button in block.buttons[:5]:
176
+ for button in block.buttons:
175
177
  button_element = {
176
178
  "type": "button",
177
179
  "text": {
178
180
  "type": "plain_text",
179
- "text": button.label[:75]
181
+ "text": button.label
180
182
  }
181
183
  }
182
184
 
@@ -265,7 +267,13 @@ class DiscordPresentationRenderer:
265
267
  Returns:
266
268
  Dict with 'content' and optional 'components'
267
269
  """
268
- from praisonaiagents.bots.presentation import BlockType
270
+ from praisonaiagents.bots.presentation import (
271
+ BlockType,
272
+ PresentationLimits,
273
+ adapt_presentation,
274
+ )
275
+
276
+ presentation = adapt_presentation(presentation, PresentationLimits.discord())
269
277
 
270
278
  text_parts = []
271
279
  components = []
@@ -288,7 +296,7 @@ class DiscordPresentationRenderer:
288
296
  action_rows = []
289
297
  current_row = []
290
298
 
291
- for button in block.buttons[:25]: # Max 25 buttons total
299
+ for button in block.buttons: # Pre-capped by adapt_presentation()
292
300
  if len(current_row) >= 5:
293
301
  action_rows.append({
294
302
  "type": 1, # ACTION_ROW