PraisonAI 4.6.70__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 (878) hide show
  1. {praisonai-4.6.70 → praisonai-4.6.72}/PKG-INFO +3 -2
  2. {praisonai-4.6.70 → praisonai-4.6.72}/PraisonAI.egg-info/PKG-INFO +3 -2
  3. {praisonai-4.6.70 → praisonai-4.6.72}/PraisonAI.egg-info/SOURCES.txt +9 -0
  4. {praisonai-4.6.70 → praisonai-4.6.72}/PraisonAI.egg-info/requires.txt +2 -1
  5. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_dev/parity/docs_generator.py +47 -3
  6. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/agents_generator.py +67 -97
  7. {praisonai-4.6.70 → 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.70 → praisonai-4.6.72}/praisonai/bots/_presentation_renderer.py +30 -22
  10. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_protocol_mixin.py +191 -0
  11. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_session.py +75 -1
  12. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/botos.py +42 -1
  13. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/delivery.py +221 -3
  14. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/app.py +5 -0
  15. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/agent.py +2 -1
  16. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/command.py +2 -1
  17. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/doctor.py +57 -127
  18. praisonai-4.6.72/praisonai/cli/commands/identity.py +110 -0
  19. praisonai-4.6.72/praisonai/cli/commands/init.py +132 -0
  20. praisonai-4.6.72/praisonai/cli/commands/validate.py +291 -0
  21. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/__init__.py +1 -0
  22. praisonai-4.6.72/praisonai/cli/features/doctor/checks/runtime_migration_checks.py +220 -0
  23. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/handler.py +9 -1
  24. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/models.py +2 -1
  25. praisonai-4.6.72/praisonai/config/__init__.py +40 -0
  26. praisonai-4.6.72/praisonai/config/schema.py +402 -0
  27. praisonai-4.6.72/praisonai/config/validator.py +310 -0
  28. praisonai-4.6.72/praisonai/framework_adapters/autogen_adapter.py +342 -0
  29. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/framework_adapters/base.py +10 -0
  30. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/framework_adapters/registry.py +30 -2
  31. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/pairing_routes.py +20 -1
  32. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/server.py +341 -29
  33. praisonai-4.6.72/praisonai/integration/context_files.py +129 -0
  34. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/llm/registry.py +4 -1
  35. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/_valkey_client.py +0 -1
  36. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/scheduler/__init__.py +5 -0
  37. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/scheduler/_base_scheduler.py +64 -1
  38. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/scheduler/agent_scheduler.py +10 -5
  39. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/scheduler/async_agent_scheduler.py +10 -5
  40. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/scheduler/enhanced_executor.py +3 -0
  41. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/scheduler/executor.py +194 -8
  42. praisonai-4.6.72/praisonai/scheduler/run_policy.py +187 -0
  43. praisonai-4.6.72/praisonai/version.py +1 -0
  44. {praisonai-4.6.70 → praisonai-4.6.72}/pyproject.toml +2 -1
  45. praisonai-4.6.70/praisonai/framework_adapters/autogen_adapter.py +0 -560
  46. praisonai-4.6.70/praisonai/integration/context_files.py +0 -22
  47. praisonai-4.6.70/praisonai/version.py +0 -1
  48. {praisonai-4.6.70 → praisonai-4.6.72}/PraisonAI.egg-info/dependency_links.txt +0 -0
  49. {praisonai-4.6.70 → praisonai-4.6.72}/PraisonAI.egg-info/entry_points.txt +0 -0
  50. {praisonai-4.6.70 → praisonai-4.6.72}/PraisonAI.egg-info/top_level.txt +0 -0
  51. {praisonai-4.6.70 → praisonai-4.6.72}/README.md +0 -0
  52. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/__init__.py +0 -0
  53. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/__main__.py +0 -0
  54. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_approval_spec.py +0 -0
  55. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_async_bridge.py +0 -0
  56. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_dev/__init__.py +0 -0
  57. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_dev/api_md.py +0 -0
  58. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_dev/parity/__init__.py +0 -0
  59. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_dev/parity/docs_extractor.py +0 -0
  60. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_dev/parity/generator.py +0 -0
  61. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  62. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_dev/parity/python_extractor.py +0 -0
  63. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  64. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_dev/parity/rust_extractor.py +0 -0
  65. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  66. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  67. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  68. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_entrypoint.py +0 -0
  69. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_framework_availability.py +0 -0
  70. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_lazy_cache.py +0 -0
  71. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_lockmap.py +0 -0
  72. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_logging.py +0 -0
  73. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_registry.py +0 -0
  74. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/_safe_loader.py +0 -0
  75. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/acp/__init__.py +0 -0
  76. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/acp/config.py +0 -0
  77. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/acp/safe_edit.py +0 -0
  78. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/acp/server.py +0 -0
  79. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/acp/session.py +0 -0
  80. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/adapters/__init__.py +0 -0
  81. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/adapters/readers.py +0 -0
  82. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/adapters/rerankers.py +0 -0
  83. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/adapters/retrievers.py +0 -0
  84. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/adapters/vector_stores.py +0 -0
  85. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/agent.py +0 -0
  86. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/agent_scheduler.py +0 -0
  87. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/api/agent_invoke.py +0 -0
  88. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/api/call.py +0 -0
  89. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/app/__init__.py +0 -0
  90. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/app/agentos.py +0 -0
  91. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/async_agent_scheduler.py +0 -0
  92. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/audit/__init__.py +0 -0
  93. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/audit/agent_centric.py +0 -0
  94. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/auto.py +0 -0
  95. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_ack.py +0 -0
  96. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_approval.py +0 -0
  97. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_approval_base.py +0 -0
  98. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_auth.py +0 -0
  99. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_chunk.py +0 -0
  100. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_commands.py +0 -0
  101. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_config_schema.py +0 -0
  102. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_debounce.py +0 -0
  103. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_defaults.py +0 -0
  104. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_delivery.py +0 -0
  105. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_discord_approval.py +0 -0
  106. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_dlq.py +0 -0
  107. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_durable_adapter.py +0 -0
  108. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_email_utils.py +0 -0
  109. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_http_approval.py +0 -0
  110. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_ingress.py +0 -0
  111. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_mirror.py +0 -0
  112. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_outbox.py +0 -0
  113. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_pairing_ui.py +0 -0
  114. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_presentation_approval.py +0 -0
  115. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_rate_limit.py +0 -0
  116. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_registry.py +0 -0
  117. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_reset_policy.py +0 -0
  118. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_resilience.py +0 -0
  119. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_run_control.py +0 -0
  120. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_slack_approval.py +0 -0
  121. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_status.py +0 -0
  122. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_streaming.py +0 -0
  123. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_telegram_approval.py +0 -0
  124. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_typing.py +0 -0
  125. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_typing_indicator.py +0 -0
  126. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_unknown_user.py +0 -0
  127. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_webhook_approval.py +0 -0
  128. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  129. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/agentmail.py +0 -0
  130. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/bot.py +0 -0
  131. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/discord.py +0 -0
  132. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/email.py +0 -0
  133. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/linear.py +0 -0
  134. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/media.py +0 -0
  135. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/slack.py +0 -0
  136. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/telegram.py +0 -0
  137. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/webhook_security.py +0 -0
  138. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/bots/whatsapp.py +0 -0
  139. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/__init__.py +0 -0
  140. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/agent.py +0 -0
  141. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/benchmark.py +0 -0
  142. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/cdp_agent.py +0 -0
  143. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/cdp_utils.py +0 -0
  144. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/cli.py +0 -0
  145. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/diagnostics.py +0 -0
  146. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/launcher.py +0 -0
  147. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/playwright_agent.py +0 -0
  148. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/profiling.py +0 -0
  149. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/protocol.py +0 -0
  150. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/report.py +0 -0
  151. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/server.py +0 -0
  152. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/sessions.py +0 -0
  153. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/browser/video.py +0 -0
  154. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/__init__.py +0 -0
  155. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/a2a.py +0 -0
  156. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/assistants.py +0 -0
  157. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/audio.py +0 -0
  158. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/batches.py +0 -0
  159. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/completions.py +0 -0
  160. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/container_files.py +0 -0
  161. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/containers.py +0 -0
  162. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/embeddings.py +0 -0
  163. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/files.py +0 -0
  164. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/fine_tuning.py +0 -0
  165. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/guardrails.py +0 -0
  166. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/images.py +0 -0
  167. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/mcp.py +0 -0
  168. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/messages.py +0 -0
  169. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/moderations.py +0 -0
  170. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/ocr.py +0 -0
  171. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/passthrough.py +0 -0
  172. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/rag.py +0 -0
  173. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/realtime.py +0 -0
  174. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/rerank.py +0 -0
  175. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/responses.py +0 -0
  176. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/search.py +0 -0
  177. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/skills.py +0 -0
  178. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/vector_store_files.py +0 -0
  179. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/vector_stores.py +0 -0
  180. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/capabilities/videos.py +0 -0
  181. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/claw/__init__.py +0 -0
  182. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/claw/default_app.py +0 -0
  183. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/__init__.py +0 -0
  184. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/_paths.py +0 -0
  185. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/_warnings.py +0 -0
  186. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/approval_backend.py +0 -0
  187. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/branding.py +0 -0
  188. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/__init__.py +0 -0
  189. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/acp.py +0 -0
  190. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/agents.py +0 -0
  191. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/app.py +0 -0
  192. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/audit.py +0 -0
  193. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/auth.py +0 -0
  194. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/batch.py +0 -0
  195. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/benchmark.py +0 -0
  196. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/bot.py +0 -0
  197. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/browser.py +0 -0
  198. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/call.py +0 -0
  199. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/chat.py +0 -0
  200. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/claw.py +0 -0
  201. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/code.py +0 -0
  202. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/commit.py +0 -0
  203. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/completion.py +0 -0
  204. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/config.py +0 -0
  205. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/context.py +0 -0
  206. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/dashboard.py +0 -0
  207. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/debug.py +0 -0
  208. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/deploy.py +0 -0
  209. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/diag.py +0 -0
  210. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/docs.py +0 -0
  211. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/endpoints.py +0 -0
  212. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/environment.py +0 -0
  213. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/eval.py +0 -0
  214. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/examples.py +0 -0
  215. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/flow.py +0 -0
  216. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/gateway.py +0 -0
  217. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/github.py +0 -0
  218. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/hooks.py +0 -0
  219. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/kanban.py +0 -0
  220. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/knowledge.py +0 -0
  221. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/langextract.py +0 -0
  222. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/langfuse.py +0 -0
  223. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/loop.py +0 -0
  224. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/lsp.py +0 -0
  225. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/managed.py +0 -0
  226. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/mcp.py +0 -0
  227. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/memory.py +0 -0
  228. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/mint_link.py +0 -0
  229. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/models.py +0 -0
  230. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/n8n.py +0 -0
  231. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/obs.py +0 -0
  232. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/onboard.py +0 -0
  233. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/package.py +0 -0
  234. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/pairing.py +0 -0
  235. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/paths.py +0 -0
  236. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/permissions.py +0 -0
  237. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/plugins.py +0 -0
  238. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/port.py +0 -0
  239. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/profile.py +0 -0
  240. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/publish.py +0 -0
  241. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/rag.py +0 -0
  242. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/realtime.py +0 -0
  243. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/recipe.py +0 -0
  244. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/registry.py +0 -0
  245. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/replay.py +0 -0
  246. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/research.py +0 -0
  247. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/retrieval.py +0 -0
  248. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/rules.py +0 -0
  249. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/run.py +0 -0
  250. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/sandbox.py +0 -0
  251. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/schedule.py +0 -0
  252. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/serve.py +0 -0
  253. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/session.py +0 -0
  254. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/setup.py +0 -0
  255. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/skills.py +0 -0
  256. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/standardise.py +0 -0
  257. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/templates.py +0 -0
  258. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/test.py +0 -0
  259. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/todo.py +0 -0
  260. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/tools.py +0 -0
  261. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/traces.py +0 -0
  262. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/tracker.py +0 -0
  263. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/train.py +0 -0
  264. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/ui.py +0 -0
  265. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/up.py +0 -0
  266. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/version.py +0 -0
  267. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/commands/workflow.py +0 -0
  268. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/config_loader.py +0 -0
  269. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/configuration/__init__.py +0 -0
  270. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/configuration/credentials.py +0 -0
  271. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/configuration/loader.py +0 -0
  272. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/configuration/paths.py +0 -0
  273. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/configuration/resolver.py +0 -0
  274. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/configuration/schema.py +0 -0
  275. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/execution/__init__.py +0 -0
  276. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/execution/core.py +0 -0
  277. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/execution/profiler.py +0 -0
  278. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/execution/request.py +0 -0
  279. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/execution/result.py +0 -0
  280. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/fallback_schema.py +0 -0
  281. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/__init__.py +0 -0
  282. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/_endpoint_registry.py +0 -0
  283. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/_search_registry.py +0 -0
  284. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/acp.py +0 -0
  285. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/action_orchestrator.py +0 -0
  286. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/agent_scheduler.py +0 -0
  287. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/agent_tools.py +0 -0
  288. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/agents.py +0 -0
  289. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/approval.py +0 -0
  290. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/at_mentions.py +0 -0
  291. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/audit_cli.py +0 -0
  292. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/auto_memory.py +0 -0
  293. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/auto_mode.py +0 -0
  294. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/autonomy_mode.py +0 -0
  295. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/background.py +0 -0
  296. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/base.py +0 -0
  297. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/benchmark.py +0 -0
  298. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/bots_cli.py +0 -0
  299. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/capabilities.py +0 -0
  300. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/checkpoints.py +0 -0
  301. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/cli_profiler.py +0 -0
  302. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/code_intelligence.py +0 -0
  303. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/compaction.py +0 -0
  304. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/compare.py +0 -0
  305. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/config_hierarchy.py +0 -0
  306. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/context_manager.py +0 -0
  307. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/cost_tracker.py +0 -0
  308. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/csv_test_runner.py +0 -0
  309. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/custom_definitions.py +0 -0
  310. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/debug.py +0 -0
  311. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/deploy.py +0 -0
  312. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/diag.py +0 -0
  313. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/display_jsonl.py +0 -0
  314. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/__init__.py +0 -0
  315. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  316. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  317. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  318. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  319. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  320. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/gateway_checks.py +0 -0
  321. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  322. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  323. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  324. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  325. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  326. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
  327. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  328. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  329. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/runtime_checks.py +0 -0
  330. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  331. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  332. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  333. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  334. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/engine.py +0 -0
  335. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/formatters.py +0 -0
  336. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/doctor/registry.py +0 -0
  337. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/endpoints.py +0 -0
  338. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/eval.py +0 -0
  339. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/examples.py +0 -0
  340. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/external_agents.py +0 -0
  341. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/fast_context.py +0 -0
  342. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/file_history.py +0 -0
  343. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/flow_display.py +0 -0
  344. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/gateway.py +0 -0
  345. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/git_attribution.py +0 -0
  346. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/git_integration.py +0 -0
  347. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/guardrail.py +0 -0
  348. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/handoff.py +0 -0
  349. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/hooks.py +0 -0
  350. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/hybrid_workflow.py +0 -0
  351. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/image.py +0 -0
  352. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/interactive_core_headless.py +0 -0
  353. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/interactive_runtime.py +0 -0
  354. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/interactive_test_harness.py +0 -0
  355. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/interactive_tools.py +0 -0
  356. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/interactive_tui.py +0 -0
  357. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/job_workflow.py +0 -0
  358. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/jobs.py +0 -0
  359. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/knowledge.py +0 -0
  360. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/knowledge_cli.py +0 -0
  361. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/lite.py +0 -0
  362. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/logs.py +0 -0
  363. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/lsp_cli.py +0 -0
  364. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  365. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/mcp.py +0 -0
  366. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/message_queue.py +0 -0
  367. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/metrics.py +0 -0
  368. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/migrate.py +0 -0
  369. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/migration_flow.py +0 -0
  370. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/migration_spec.py +0 -0
  371. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/n8n.py +0 -0
  372. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/observability.py +0 -0
  373. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/ollama.py +0 -0
  374. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/onboard.py +0 -0
  375. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/output_modes.py +0 -0
  376. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/output_style.py +0 -0
  377. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/package.py +0 -0
  378. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/performance.py +0 -0
  379. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/persistence.py +0 -0
  380. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/plugin_cli.py +0 -0
  381. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/profile.py +0 -0
  382. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/profiler/__init__.py +0 -0
  383. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/profiler/core.py +0 -0
  384. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/profiler/optimizations.py +0 -0
  385. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/profiler/suite.py +0 -0
  386. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/profiling.py +0 -0
  387. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/queue/__init__.py +0 -0
  388. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/queue/manager.py +0 -0
  389. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/queue/models.py +0 -0
  390. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/queue/persistence.py +0 -0
  391. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/queue/scheduler.py +0 -0
  392. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/queue/worker.py +0 -0
  393. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/recipe.py +0 -0
  394. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/recipe_creator.py +0 -0
  395. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/recipe_optimizer.py +0 -0
  396. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/recipe_prompts.py +0 -0
  397. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/recipes.py +0 -0
  398. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/registry.py +0 -0
  399. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/repo_map.py +0 -0
  400. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/router.py +0 -0
  401. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/safe_shell.py +0 -0
  402. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/sandbox_cli.py +0 -0
  403. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/sandbox_executor.py +0 -0
  404. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/sdk_knowledge.py +0 -0
  405. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/serve.py +0 -0
  406. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/session.py +0 -0
  407. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/setup/__init__.py +0 -0
  408. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/setup/handler.py +0 -0
  409. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/setup/templates.py +0 -0
  410. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/skills.py +0 -0
  411. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/slash_commands.py +0 -0
  412. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/telemetry.py +0 -0
  413. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/templates.py +0 -0
  414. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/thinking.py +0 -0
  415. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/todo.py +0 -0
  416. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tools.py +0 -0
  417. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/__init__.py +0 -0
  418. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/app.py +0 -0
  419. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/cli.py +0 -0
  420. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/config.py +0 -0
  421. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/debug.py +0 -0
  422. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/events.py +0 -0
  423. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/mock_provider.py +0 -0
  424. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/orchestrator.py +0 -0
  425. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  426. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/screens/help.py +0 -0
  427. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/screens/main.py +0 -0
  428. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/screens/queue.py +0 -0
  429. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/screens/session.py +0 -0
  430. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/screens/settings.py +0 -0
  431. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/session_store.py +0 -0
  432. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  433. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  434. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  435. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  436. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  437. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  438. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/status.py +0 -0
  439. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  440. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/wizard.py +0 -0
  441. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/workflow.py +0 -0
  442. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/features/yaml_utils.py +0 -0
  443. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/interactive/__init__.py +0 -0
  444. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/interactive/async_tui.py +0 -0
  445. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/interactive/config.py +0 -0
  446. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/interactive/core.py +0 -0
  447. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/interactive/events.py +0 -0
  448. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  449. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  450. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  451. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/interactive/praison_io.py +0 -0
  452. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/interactive/repl.py +0 -0
  453. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/interactive/split_tui.py +0 -0
  454. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/interactive/tui_app.py +0 -0
  455. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/langfuse_client.py +0 -0
  456. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/main.py +0 -0
  457. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/output/__init__.py +0 -0
  458. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/output/console.py +0 -0
  459. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/schedule_cli.py +0 -0
  460. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/schema_provider.py +0 -0
  461. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/session/__init__.py +0 -0
  462. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/session/unified.py +0 -0
  463. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/state/__init__.py +0 -0
  464. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/state/identifiers.py +0 -0
  465. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/state/project_sessions.py +0 -0
  466. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/state/sessions.py +0 -0
  467. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/ui/__init__.py +0 -0
  468. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/ui/config.py +0 -0
  469. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/ui/events.py +0 -0
  470. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/ui/mg_backend.py +0 -0
  471. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/ui/plain.py +0 -0
  472. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/ui/rich_backend.py +0 -0
  473. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/unified_schema.py +0 -0
  474. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/utils/env_utils.py +0 -0
  475. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli/utils/project.py +0 -0
  476. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli_backends/__init__.py +0 -0
  477. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli_backends/claude.py +0 -0
  478. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/cli_backends/registry.py +0 -0
  479. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/__init__.py +0 -0
  480. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/agent_tools.py +0 -0
  481. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/diff/__init__.py +0 -0
  482. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/diff/diff_strategy.py +0 -0
  483. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/tools/__init__.py +0 -0
  484. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/tools/apply_diff.py +0 -0
  485. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/tools/execute_command.py +0 -0
  486. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/tools/list_files.py +0 -0
  487. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/tools/read_file.py +0 -0
  488. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/tools/search_replace.py +0 -0
  489. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/tools/write_file.py +0 -0
  490. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/utils/__init__.py +0 -0
  491. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/utils/file_utils.py +0 -0
  492. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/utils/ignore_utils.py +0 -0
  493. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/code/utils/text_utils.py +0 -0
  494. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/context/__init__.py +0 -0
  495. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/context/_storage_path.py +0 -0
  496. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/context/artifact_store.py +0 -0
  497. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/context/config.py +0 -0
  498. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/context/history_store.py +0 -0
  499. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/context/queue.py +0 -0
  500. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/context/setup.py +0 -0
  501. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/context/terminal_logger.py +0 -0
  502. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/daemon/__init__.py +0 -0
  503. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/daemon/launchd.py +0 -0
  504. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/daemon/systemd.py +0 -0
  505. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/daemon/windows.py +0 -0
  506. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/db/__init__.py +0 -0
  507. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/db/adapter.py +0 -0
  508. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/deploy/__init__.py +0 -0
  509. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/deploy/api.py +0 -0
  510. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/deploy/docker.py +0 -0
  511. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/deploy/doctor.py +0 -0
  512. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/deploy/main.py +0 -0
  513. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/deploy/models.py +0 -0
  514. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/deploy/providers/__init__.py +0 -0
  515. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/deploy/providers/_registry.py +0 -0
  516. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/deploy/providers/aws.py +0 -0
  517. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/deploy/providers/azure.py +0 -0
  518. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/deploy/providers/base.py +0 -0
  519. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/deploy/providers/gcp.py +0 -0
  520. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/deploy/schema.py +0 -0
  521. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/docs_runner/__init__.py +0 -0
  522. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/docs_runner/classifier.py +0 -0
  523. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/docs_runner/executor.py +0 -0
  524. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/docs_runner/extractor.py +0 -0
  525. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/docs_runner/reporter.py +0 -0
  526. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/docs_runner/runner.py +0 -0
  527. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/docs_runner/workspace.py +0 -0
  528. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/__init__.py +0 -0
  529. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/a2u_server.py +0 -0
  530. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/discovery.py +0 -0
  531. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/providers/__init__.py +0 -0
  532. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/providers/a2a.py +0 -0
  533. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/providers/a2u.py +0 -0
  534. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/providers/agents_api.py +0 -0
  535. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/providers/base.py +0 -0
  536. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/providers/mcp.py +0 -0
  537. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/providers/openai_compat.py +0 -0
  538. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/providers/recipe.py +0 -0
  539. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  540. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/registry.py +0 -0
  541. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/endpoints/server.py +0 -0
  542. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/flow/__init__.py +0 -0
  543. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/flow/client.py +0 -0
  544. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  545. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  546. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/flow/components/__init__.py +0 -0
  547. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/flow/converter.py +0 -0
  548. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/flow/helpers.py +0 -0
  549. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/framework_adapters/__init__.py +0 -0
  550. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  551. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  552. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/framework_adapters/validators.py +0 -0
  553. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/__init__.py +0 -0
  554. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/auth.py +0 -0
  555. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/client.py +0 -0
  556. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/cookie_auth.py +0 -0
  557. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/exec_approval.py +0 -0
  558. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/gateway_approval.py +0 -0
  559. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/health_monitor.py +0 -0
  560. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/home_channels.py +0 -0
  561. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/kanban_dispatcher.py +0 -0
  562. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/magic_link.py +0 -0
  563. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/origin_check.py +0 -0
  564. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/pairing.py +0 -0
  565. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/port_utils.py +0 -0
  566. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/push_channels.py +0 -0
  567. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/push_delivery.py +0 -0
  568. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/push_polling.py +0 -0
  569. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/push_presence.py +0 -0
  570. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/rate_limiter.py +0 -0
  571. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/redis_pubsub.py +0 -0
  572. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/supervisor.py +0 -0
  573. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/gateway/unicode_utils.py +0 -0
  574. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/inbuilt_tools/__init__.py +0 -0
  575. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  576. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/inc/__init__.py +0 -0
  577. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/inc/config.py +0 -0
  578. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/inc/models.py +0 -0
  579. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integration/__init__.py +0 -0
  580. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integration/bridges/__init__.py +0 -0
  581. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  582. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integration/bridges/hooks_query.py +0 -0
  583. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  584. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integration/bridges/schedules_runner.py +0 -0
  585. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integration/bridges/usage_bridge.py +0 -0
  586. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integration/bridges/workflows_service.py +0 -0
  587. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integration/gateway_host.py +0 -0
  588. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integration/host_app.py +0 -0
  589. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integration/pages/__init__.py +0 -0
  590. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integration/pages/bot_health.py +0 -0
  591. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integration/pages/workflow_runs.py +0 -0
  592. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/__init__.py +0 -0
  593. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/_session_info.py +0 -0
  594. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/_tool_aliases.py +0 -0
  595. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/_unified_registry.py +0 -0
  596. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/base.py +0 -0
  597. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/claude_code.py +0 -0
  598. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/codex_cli.py +0 -0
  599. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/compute/__init__.py +0 -0
  600. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/compute/daytona.py +0 -0
  601. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/compute/docker.py +0 -0
  602. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/compute/e2b.py +0 -0
  603. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/compute/flyio.py +0 -0
  604. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/compute/local.py +0 -0
  605. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/compute/modal_compute.py +0 -0
  606. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/cursor_cli.py +0 -0
  607. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/db_session_adapter.py +0 -0
  608. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/gemini_cli.py +0 -0
  609. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/hosted_agent.py +0 -0
  610. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/local_agent.py +0 -0
  611. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/managed_agents.py +0 -0
  612. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/managed_local.py +0 -0
  613. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/registry.py +0 -0
  614. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/integrations/sandboxed_agent.py +0 -0
  615. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/jobs/__init__.py +0 -0
  616. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/jobs/executor.py +0 -0
  617. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/jobs/models.py +0 -0
  618. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/jobs/path_validation.py +0 -0
  619. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/jobs/router.py +0 -0
  620. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/jobs/server.py +0 -0
  621. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/jobs/store.py +0 -0
  622. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/kanban/__init__.py +0 -0
  623. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/kanban/models.py +0 -0
  624. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/kanban/paths.py +0 -0
  625. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/kanban/sqlite_store.py +0 -0
  626. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/llm/__init__.py +0 -0
  627. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/llm/catalogue.py +0 -0
  628. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/llm/credentials.py +0 -0
  629. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/llm/env.py +0 -0
  630. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/llm/gateways.py +0 -0
  631. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/__init__.py +0 -0
  632. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/adapters/__init__.py +0 -0
  633. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/adapters/agents.py +0 -0
  634. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  635. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  636. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  637. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  638. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/adapters/memory.py +0 -0
  639. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/adapters/prompts.py +0 -0
  640. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/adapters/resources.py +0 -0
  641. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  642. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/auth/__init__.py +0 -0
  643. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/auth/api_key.py +0 -0
  644. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/auth/oauth.py +0 -0
  645. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/auth/oidc.py +0 -0
  646. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/auth/scopes.py +0 -0
  647. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/cli.py +0 -0
  648. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/elicitation.py +0 -0
  649. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/icons.py +0 -0
  650. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/recipe_adapter.py +0 -0
  651. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/recipe_cli.py +0 -0
  652. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/registry.py +0 -0
  653. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/sampling.py +0 -0
  654. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/server.py +0 -0
  655. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/tasks.py +0 -0
  656. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/tool_index.py +0 -0
  657. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/transports/__init__.py +0 -0
  658. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/transports/http_stream.py +0 -0
  659. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/mcp_server/transports/stdio.py +0 -0
  660. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/n8n/__init__.py +0 -0
  661. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/n8n/client.py +0 -0
  662. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/n8n/converter.py +0 -0
  663. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/n8n/preview.py +0 -0
  664. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/n8n/reverse_converter.py +0 -0
  665. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/observability/__init__.py +0 -0
  666. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/observability/hooks.py +0 -0
  667. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/observability/langextract.py +0 -0
  668. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/observability/langfuse.py +0 -0
  669. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/__init__.py +0 -0
  670. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/config.py +0 -0
  671. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/__init__.py +0 -0
  672. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/_sql_base.py +0 -0
  673. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/async_mysql.py +0 -0
  674. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/async_postgres.py +0 -0
  675. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  676. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/base.py +0 -0
  677. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/json_store.py +0 -0
  678. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/mysql.py +0 -0
  679. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/postgres.py +0 -0
  680. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/singlestore.py +0 -0
  681. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/sqlite.py +0 -0
  682. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/supabase.py +0 -0
  683. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/surrealdb.py +0 -0
  684. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  685. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/conversation/turso.py +0 -0
  686. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/factory.py +0 -0
  687. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/hooks/__init__.py +0 -0
  688. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  689. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/__init__.py +0 -0
  690. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/base.py +0 -0
  691. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/cassandra.py +0 -0
  692. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/chroma.py +0 -0
  693. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  694. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  695. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/couchbase.py +0 -0
  696. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/lancedb.py +0 -0
  697. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  698. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  699. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  700. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/milvus.py +0 -0
  701. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  702. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/pgvector.py +0 -0
  703. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/pinecone.py +0 -0
  704. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/qdrant.py +0 -0
  705. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  706. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  707. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  708. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  709. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  710. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/knowledge/weaviate.py +0 -0
  711. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/migrations/__init__.py +0 -0
  712. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/migrations/manager.py +0 -0
  713. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/orchestrator.py +0 -0
  714. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/registry.py +0 -0
  715. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/state/__init__.py +0 -0
  716. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/state/async_mongodb.py +0 -0
  717. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/state/base.py +0 -0
  718. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/state/dynamodb.py +0 -0
  719. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/state/firestore.py +0 -0
  720. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/state/gcs.py +0 -0
  721. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/state/memory.py +0 -0
  722. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/state/mongodb.py +0 -0
  723. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/state/redis.py +0 -0
  724. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/state/upstash.py +0 -0
  725. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/state/valkey.py +0 -0
  726. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/tests/__init__.py +0 -0
  727. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/tests/test_all_backends.py +0 -0
  728. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  729. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/profiler.py +0 -0
  730. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/push/__init__.py +0 -0
  731. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/push/client.py +0 -0
  732. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/push/transports.py +0 -0
  733. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/recipe/__init__.py +0 -0
  734. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/recipe/bridge.py +0 -0
  735. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/recipe/core.py +0 -0
  736. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/recipe/exceptions.py +0 -0
  737. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/recipe/history.py +0 -0
  738. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/recipe/models.py +0 -0
  739. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/recipe/operations.py +0 -0
  740. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/recipe/policy.py +0 -0
  741. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/recipe/registry.py +0 -0
  742. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/recipe/runtime.py +0 -0
  743. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/recipe/security.py +0 -0
  744. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/recipe/serve.py +0 -0
  745. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/recipe/server.py +0 -0
  746. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/replay/__init__.py +0 -0
  747. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/replay/analyzer.py +0 -0
  748. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/replay/applier.py +0 -0
  749. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/replay/judge.py +0 -0
  750. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/replay/plan.py +0 -0
  751. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/replay/player.py +0 -0
  752. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/replay/reader.py +0 -0
  753. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/replay/storage.py +0 -0
  754. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/replay/writer.py +0 -0
  755. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/sandbox/__init__.py +0 -0
  756. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/sandbox/_compat.py +0 -0
  757. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/sandbox/_registry.py +0 -0
  758. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/sandbox/_shell.py +0 -0
  759. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/sandbox/daytona.py +0 -0
  760. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/sandbox/docker.py +0 -0
  761. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/sandbox/e2b.py +0 -0
  762. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/sandbox/modal.py +0 -0
  763. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/sandbox/sandlock.py +0 -0
  764. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/sandbox/ssh.py +0 -0
  765. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/sandbox/subprocess.py +0 -0
  766. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/scheduler/_dispatch.py +0 -0
  767. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/scheduler/base.py +0 -0
  768. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/scheduler/daemon_manager.py +0 -0
  769. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/scheduler/deployment.py +0 -0
  770. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/scheduler/shared.py +0 -0
  771. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/scheduler/state_manager.py +0 -0
  772. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/scheduler/yaml_loader.py +0 -0
  773. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/security/__init__.py +0 -0
  774. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/security/audit.py +0 -0
  775. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/security/injection.py +0 -0
  776. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/security/protected.py +0 -0
  777. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/setup/__init__.py +0 -0
  778. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/setup/build.py +0 -0
  779. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/setup/post_install.py +0 -0
  780. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/setup/setup_conda_env.py +0 -0
  781. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/setup.py +0 -0
  782. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/__init__.py +0 -0
  783. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/ai_generator.py +0 -0
  784. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/config.py +0 -0
  785. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/dedupe.py +0 -0
  786. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/discovery.py +0 -0
  787. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/drift.py +0 -0
  788. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/engine.py +0 -0
  789. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/enhanced_templates.py +0 -0
  790. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/example_verifier.py +0 -0
  791. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/manifest.py +0 -0
  792. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/models.py +0 -0
  793. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/reports.py +0 -0
  794. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/templates.py +0 -0
  795. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/undo_redo.py +0 -0
  796. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/standardise/validator.py +0 -0
  797. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/storage/__init__.py +0 -0
  798. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/storage/dynamodb_adapter.py +0 -0
  799. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/storage/mongodb_adapter.py +0 -0
  800. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/storage/postgresql_adapter.py +0 -0
  801. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/storage/redis_adapter.py +0 -0
  802. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/storage/valkey_adapter.py +0 -0
  803. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/suite_runner/__init__.py +0 -0
  804. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/suite_runner/batch_source.py +0 -0
  805. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/suite_runner/cli_docs_source.py +0 -0
  806. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/suite_runner/discovery.py +0 -0
  807. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/suite_runner/docs_source.py +0 -0
  808. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/suite_runner/examples_source.py +0 -0
  809. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/suite_runner/executor.py +0 -0
  810. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/suite_runner/models.py +0 -0
  811. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/suite_runner/report_viewer.py +0 -0
  812. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/suite_runner/reporter.py +0 -0
  813. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/suite_runner/runner.py +0 -0
  814. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/templates/__init__.py +0 -0
  815. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/templates/cache.py +0 -0
  816. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/templates/dependency_checker.py +0 -0
  817. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/templates/discovery.py +0 -0
  818. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/templates/loader.py +0 -0
  819. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/templates/registry.py +0 -0
  820. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/templates/resolver.py +0 -0
  821. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/templates/security.py +0 -0
  822. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/templates/tool_override.py +0 -0
  823. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/templates/tools_doctor.py +0 -0
  824. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/test.py +0 -0
  825. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/tool_registry.py +0 -0
  826. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/tool_resolver.py +0 -0
  827. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/tools/__init__.py +0 -0
  828. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/tools/audio.py +0 -0
  829. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/tools/glob_tool.py +0 -0
  830. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/tools/grep_tool.py +0 -0
  831. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/tools/kanban_tools.py +0 -0
  832. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/tools/multiedit.py +0 -0
  833. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/tools/skill_manage.py +0 -0
  834. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/train/__init__.py +0 -0
  835. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/train/_ollama.py +0 -0
  836. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/train/agents/__init__.py +0 -0
  837. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/train/agents/grader.py +0 -0
  838. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/train/agents/hook.py +0 -0
  839. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/train/agents/models.py +0 -0
  840. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/train/agents/orchestrator.py +0 -0
  841. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/train/agents/storage.py +0 -0
  842. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/train/llm/__init__.py +0 -0
  843. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/train/llm/trainer.py +0 -0
  844. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/train.py +0 -0
  845. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/train_vision.py +0 -0
  846. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui/_aiui_datastore.py +0 -0
  847. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui/_external_agents.py +0 -0
  848. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui/callbacks.py +0 -0
  849. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui/components/aicoder.py +0 -0
  850. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui/context.py +0 -0
  851. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui/database_config.py +0 -0
  852. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui_agents/__init__.py +0 -0
  853. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui_agents/default_app.py +0 -0
  854. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui_bot/__init__.py +0 -0
  855. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui_bot/default_app.py +0 -0
  856. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui_chat/__init__.py +0 -0
  857. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui_chat/default_app.py +0 -0
  858. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui_dashboard/default_app.py +0 -0
  859. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui_realtime/__init__.py +0 -0
  860. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/ui_realtime/default_app.py +0 -0
  861. {praisonai-4.6.70 → praisonai-4.6.72}/praisonai/upload_vision.py +0 -0
  862. {praisonai-4.6.70 → praisonai-4.6.72}/setup.cfg +0 -0
  863. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test.py +0 -0
  864. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_agents_playbook.py +0 -0
  865. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_approval_system.py +0 -0
  866. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_basic.py +0 -0
  867. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_cli_features.py +0 -0
  868. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_custom_tools_fix.py +0 -0
  869. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_double_api_fix.py +0 -0
  870. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_n8n_agent_invoke.py +0 -0
  871. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_n8n_cli_feature.py +0 -0
  872. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_n8n_integration.py +0 -0
  873. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_phase2_refactor.py +0 -0
  874. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_recipe.py +0 -0
  875. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_registry.py +0 -0
  876. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_runner.py +0 -0
  877. {praisonai-4.6.70 → praisonai-4.6.72}/tests/test_sandboxed_agent_compatibility.py +0 -0
  878. {praisonai-4.6.70 → 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.70
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,13 +11,14 @@ Description-Content-Type: text/markdown
11
11
  Requires-Dist: rich>=13.7
12
12
  Requires-Dist: markdown>=3.5
13
13
  Requires-Dist: pyparsing>=3.0.0
14
- Requires-Dist: praisonaiagents>=1.6.70
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
18
18
  Requires-Dist: mcp>=1.20.0
19
19
  Requires-Dist: typer>=0.9.0
20
20
  Requires-Dist: textual>=0.47.0
21
+ Requires-Dist: pydantic>=2.0.0
21
22
  Provides-Extra: ui
22
23
  Requires-Dist: aiui<0.4,>=0.3.121; extra == "ui"
23
24
  Provides-Extra: gradio
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.70
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,13 +11,14 @@ Description-Content-Type: text/markdown
11
11
  Requires-Dist: rich>=13.7
12
12
  Requires-Dist: markdown>=3.5
13
13
  Requires-Dist: pyparsing>=3.0.0
14
- Requires-Dist: praisonaiagents>=1.6.70
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
18
18
  Requires-Dist: mcp>=1.20.0
19
19
  Requires-Dist: typer>=0.9.0
20
20
  Requires-Dist: textual>=0.47.0
21
+ Requires-Dist: pydantic>=2.0.0
21
22
  Provides-Extra: ui
22
23
  Requires-Dist: aiui<0.4,>=0.3.121; extra == "ui"
23
24
  Provides-Extra: gradio
@@ -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
@@ -248,6 +251,7 @@ praisonai/cli/commands/tracker.py
248
251
  praisonai/cli/commands/train.py
249
252
  praisonai/cli/commands/ui.py
250
253
  praisonai/cli/commands/up.py
254
+ praisonai/cli/commands/validate.py
251
255
  praisonai/cli/commands/version.py
252
256
  praisonai/cli/commands/workflow.py
253
257
  praisonai/cli/configuration/__init__.py
@@ -386,6 +390,7 @@ praisonai/cli/features/doctor/checks/packaging_checks.py
386
390
  praisonai/cli/features/doctor/checks/performance_checks.py
387
391
  praisonai/cli/features/doctor/checks/permissions_checks.py
388
392
  praisonai/cli/features/doctor/checks/runtime_checks.py
393
+ praisonai/cli/features/doctor/checks/runtime_migration_checks.py
389
394
  praisonai/cli/features/doctor/checks/selftest_checks.py
390
395
  praisonai/cli/features/doctor/checks/serve_checks.py
391
396
  praisonai/cli/features/doctor/checks/skills_checks.py
@@ -472,6 +477,9 @@ praisonai/code/utils/__init__.py
472
477
  praisonai/code/utils/file_utils.py
473
478
  praisonai/code/utils/ignore_utils.py
474
479
  praisonai/code/utils/text_utils.py
480
+ praisonai/config/__init__.py
481
+ praisonai/config/schema.py
482
+ praisonai/config/validator.py
475
483
  praisonai/context/__init__.py
476
484
  praisonai/context/_storage_path.py
477
485
  praisonai/context/artifact_store.py
@@ -761,6 +769,7 @@ praisonai/scheduler/daemon_manager.py
761
769
  praisonai/scheduler/deployment.py
762
770
  praisonai/scheduler/enhanced_executor.py
763
771
  praisonai/scheduler/executor.py
772
+ praisonai/scheduler/run_policy.py
764
773
  praisonai/scheduler/shared.py
765
774
  praisonai/scheduler/state_manager.py
766
775
  praisonai/scheduler/yaml_loader.py
@@ -1,13 +1,14 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.6.70
4
+ praisonaiagents>=1.6.72
5
5
  python-dotenv>=0.19.0
6
6
  litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
8
8
  mcp>=1.20.0
9
9
  typer>=0.9.0
10
10
  textual>=0.47.0
11
+ pydantic>=2.0.0
11
12
 
12
13
  [acp]
13
14
  agent-client-protocol>=0.7.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,11 +249,16 @@ 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
240
256
  self.framework_adapter = None
257
+
258
+ # Only autogen-family adapters need the autogen tool shim
259
+ # Note: autogen_v2 is also part of the autogen family
260
+ if framework and framework in {"autogen", "autogen_v2", "autogen_v4", "ag2"}:
261
+ self.tool_registry.register_builtin_autogen_adapters()
241
262
 
242
263
  def _get_framework_adapter(self, framework: str) -> FrameworkAdapter:
243
264
  """
@@ -493,111 +514,60 @@ class AgentsGenerator:
493
514
 
494
515
  def _validate_agents_config(self, config):
495
516
  """
496
- Validate agent configuration for typos in field names and provide suggestions.
517
+ Validate agent configuration with fail-fast validation and aggregated errors.
497
518
 
498
519
  Args:
499
520
  config (dict): The parsed YAML configuration
521
+
522
+ Raises:
523
+ ValueError: If configuration has validation errors
500
524
  """
501
- known_fields = {
502
- 'role', 'goal', 'instructions', 'backstory', 'tools', 'toolsets', 'tasks', 'llm',
503
- 'function_calling_llm', 'allow_delegation', 'max_iter', 'max_rpm',
504
- 'max_execution_time', 'verbose', 'cache', 'system_template',
505
- 'prompt_template', 'response_template', 'tool_timeout', 'tool_retry_policy',
506
- 'planning_tools', 'planning', 'autonomy', 'guardrails', 'streaming', 'stream',
507
- 'approval', 'skills', 'cli_backend', 'runtime', 'reflection', 'handoff', 'web', 'web_fetch'
508
- }
525
+ # Use the new comprehensive validator
526
+ from .config.validator import ConfigValidator
509
527
 
510
- # Collect YAML-local model aliases (valid even if not in global catalogue)
511
- local_model_aliases = set()
512
- models_cfg = config.get("models", {})
513
- if isinstance(models_cfg, dict):
514
- local_model_aliases = {k for k in models_cfg.keys() if isinstance(k, str)}
528
+ # Use existing tool resolver if available
529
+ validator = ConfigValidator(tool_resolver=self.tool_resolver)
515
530
 
516
- # Try to load model catalogue for validation
517
- model_catalogue = None
518
- try:
519
- from .llm.catalogue import ModelCatalogue
520
- model_catalogue = ModelCatalogue()
521
- except ImportError:
522
- pass # Catalogue not available
523
-
524
- for section_name in ('agents', 'roles'):
525
- section = config.get(section_name, {})
526
- if not isinstance(section, dict):
527
- continue
528
-
529
- entity_name = 'agent' if section_name == 'agents' else 'role'
530
- for name, section_config in section.items():
531
- if not isinstance(section_config, dict):
532
- continue
533
-
534
- for field_name in section_config:
535
- if field_name in known_fields:
536
- continue
537
-
538
- close_matches = difflib.get_close_matches(
539
- field_name,
540
- known_fields,
541
- n=1,
542
- cutoff=0.6
543
- )
544
- suggestion = f" Did you mean '{close_matches[0]}'?" if close_matches else ""
545
- self.logger.warning(
546
- f"Unknown field '{field_name}' in {entity_name} '{name}'.{suggestion}"
547
- )
548
-
549
- # Validate model/llm values if catalogue available
550
- if model_catalogue:
551
- for model_field in ('llm', 'function_calling_llm'):
552
- model_value = section_config.get(model_field)
553
- if model_value and isinstance(model_value, str):
554
- # Skip validation for local model aliases defined in YAML
555
- if model_value in local_model_aliases:
556
- continue
557
- try:
558
- model_catalogue.validate_model(model_value)
559
- except ValueError as e:
560
- self.logger.warning(
561
- f"Invalid model '{model_value}' in {entity_name} '{name}' field '{model_field}': {e}"
562
- )
563
-
564
- # Check for tools configured with non-tool-calling models
565
- if section_config.get('tools'):
566
- llm_value = section_config.get('llm')
567
- if llm_value:
568
- model_info = model_catalogue.describe_model(llm_value)
569
- if model_info and not model_info.get('supports_tools'):
570
- self.logger.warning(
571
- f"{entity_name.capitalize()} '{name}' has tools configured but model '{llm_value}' does not support tool calling"
572
- )
573
-
574
- # Also validate top-level llm/model config
575
- if model_catalogue:
576
- for model_field in ('llm', 'model'):
577
- model_value = config.get(model_field)
578
- if model_value and isinstance(model_value, str):
579
- # Skip validation for local model aliases defined in YAML
580
- if model_value in local_model_aliases:
581
- continue
582
- try:
583
- model_catalogue.validate_model(model_value)
584
- except ValueError as e:
585
- self.logger.warning(f"Invalid model '{model_value}' in top-level '{model_field}': {e}")
531
+ # Check for strict mode from environment or config
532
+ import os
533
+ strict_mode = os.getenv('PRAISONAI_VALIDATE_STRICT', 'false').lower() == 'true'
534
+
535
+ # Validate configuration
536
+ result = validator.validate_config(config, strict=strict_mode)
537
+
538
+ # Log warnings
539
+ for warning in result.warnings:
540
+ self.logger.warning(warning)
541
+
542
+ # If there are errors, fail fast with aggregated error message
543
+ if not result.valid:
544
+ error_msg = f"Configuration validation failed with {len(result.errors)} error(s):\n"
545
+ for i, error in enumerate(result.errors, 1):
546
+ error_msg += f" {i}. {error}\n"
547
+
548
+ # Include warnings if any
549
+ if result.warnings:
550
+ error_msg += f"\nAdditionally, there are {len(result.warnings)} warning(s):\n"
551
+ for i, warning in enumerate(result.warnings, 1):
552
+ error_msg += f" {i}. {warning}\n"
553
+
554
+ self.logger.error(error_msg)
555
+ raise ValueError(error_msg)
586
556
 
587
557
 
588
558
 
589
559
  def _load_config(self):
590
560
  """Load configuration from agent file or agent_yaml."""
591
561
  if self.agent_yaml:
592
- config = yaml.safe_load(self.agent_yaml)
562
+ config = _yaml_safe_load(self.agent_yaml)
593
563
  else:
594
564
  if self.agent_file in ('/app/api:app', 'api:app'):
595
565
  self.agent_file = 'agents.yaml'
596
566
  try:
597
567
  with open(self.agent_file, 'r') as f:
598
- config = yaml.safe_load(f)
568
+ config = _yaml_safe_load(f)
599
569
  except FileNotFoundError:
600
- print(f"File not found: {self.agent_file}")
570
+ _rich_print(f"File not found: {self.agent_file}")
601
571
  return None
602
572
 
603
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"]