PraisonAI 4.7.12__tar.gz → 4.7.13__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 (564) hide show
  1. {praisonai-4.7.12 → praisonai-4.7.13}/PKG-INFO +9 -9
  2. {praisonai-4.7.12 → praisonai-4.7.13}/PraisonAI.egg-info/PKG-INFO +9 -9
  3. {praisonai-4.7.12 → praisonai-4.7.13}/PraisonAI.egg-info/SOURCES.txt +1 -0
  4. {praisonai-4.7.12 → praisonai-4.7.13}/PraisonAI.egg-info/requires.txt +8 -8
  5. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/acp/session.py +55 -12
  6. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/agents_generator.py +80 -4
  7. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/__init__.py +12 -0
  8. praisonai-4.7.13/praisonai/capabilities/decisions.py +31 -0
  9. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/schedule.py +1 -1
  10. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/agent_scheduler.py +26 -9
  11. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/praisonai_adapter.py +31 -1
  12. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute_managed_agent.py +79 -31
  13. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/json_store.py +57 -14
  14. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/daemon_manager.py +35 -2
  15. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/state_manager.py +87 -17
  16. praisonai-4.7.13/praisonai/version.py +1 -0
  17. {praisonai-4.7.12 → praisonai-4.7.13}/pyproject.toml +8 -8
  18. praisonai-4.7.12/praisonai/version.py +0 -1
  19. {praisonai-4.7.12 → praisonai-4.7.13}/PraisonAI.egg-info/dependency_links.txt +0 -0
  20. {praisonai-4.7.12 → praisonai-4.7.13}/PraisonAI.egg-info/entry_points.txt +0 -0
  21. {praisonai-4.7.12 → praisonai-4.7.13}/PraisonAI.egg-info/top_level.txt +0 -0
  22. {praisonai-4.7.12 → praisonai-4.7.13}/README.md +0 -0
  23. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/__init__.py +0 -0
  24. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/__main__.py +0 -0
  25. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_api_auth.py +0 -0
  26. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_approval_spec.py +0 -0
  27. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_async_bridge.py +0 -0
  28. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_bootstrap.py +0 -0
  29. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_dev/__init__.py +0 -0
  30. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_dev/api_md.py +0 -0
  31. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_entrypoint.py +0 -0
  32. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_framework_availability.py +0 -0
  33. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_lazy_cache.py +0 -0
  34. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_logging.py +0 -0
  35. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_registry.py +0 -0
  36. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_safe_loader.py +0 -0
  37. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/acp/__init__.py +0 -0
  38. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/acp/config.py +0 -0
  39. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/acp/safe_edit.py +0 -0
  40. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/acp/server.py +0 -0
  41. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/adapters/__init__.py +0 -0
  42. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/adapters/readers.py +0 -0
  43. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/adapters/rerankers.py +0 -0
  44. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/adapters/retrievers.py +0 -0
  45. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/adapters/vector_stores.py +0 -0
  46. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/agent.py +0 -0
  47. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/agent_scheduler.py +0 -0
  48. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/api/agent_invoke.py +0 -0
  49. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/api/call.py +0 -0
  50. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/app/__init__.py +0 -0
  51. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/app/agentos.py +0 -0
  52. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/async_agent_scheduler.py +0 -0
  53. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/audit/__init__.py +0 -0
  54. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/audit/agent_centric.py +0 -0
  55. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/auto.py +0 -0
  56. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/bots/__init__.py +0 -0
  57. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/browser/__init__.py +0 -0
  58. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/a2a.py +0 -0
  59. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/assistants.py +0 -0
  60. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/audio.py +0 -0
  61. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/batches.py +0 -0
  62. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/completions.py +0 -0
  63. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/container_files.py +0 -0
  64. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/containers.py +0 -0
  65. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/embeddings.py +0 -0
  66. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/files.py +0 -0
  67. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/fine_tuning.py +0 -0
  68. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/guardrails.py +0 -0
  69. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/images.py +0 -0
  70. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/mcp.py +0 -0
  71. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/messages.py +0 -0
  72. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/moderations.py +0 -0
  73. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/ocr.py +0 -0
  74. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/passthrough.py +0 -0
  75. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/rag.py +0 -0
  76. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/realtime.py +0 -0
  77. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/rerank.py +0 -0
  78. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/responses.py +0 -0
  79. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/search.py +0 -0
  80. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/skills.py +0 -0
  81. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/vector_store_files.py +0 -0
  82. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/vector_stores.py +0 -0
  83. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/videos.py +0 -0
  84. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/claw/__init__.py +0 -0
  85. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/__init__.py +0 -0
  86. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/_paths.py +0 -0
  87. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/_shim.py +0 -0
  88. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/_warnings.py +0 -0
  89. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/app.py +0 -0
  90. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/approval_backend.py +0 -0
  91. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/branding.py +0 -0
  92. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/__init__.py +0 -0
  93. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/_profiling.py +0 -0
  94. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/acp.py +0 -0
  95. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/agent.py +0 -0
  96. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/agents.py +0 -0
  97. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/app.py +0 -0
  98. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/attach.py +0 -0
  99. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/audit.py +0 -0
  100. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/auth.py +0 -0
  101. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/batch.py +0 -0
  102. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/benchmark.py +0 -0
  103. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/bot.py +0 -0
  104. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/browser.py +0 -0
  105. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/call.py +0 -0
  106. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/chat.py +0 -0
  107. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/checkpoint.py +0 -0
  108. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/claw.py +0 -0
  109. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/code.py +0 -0
  110. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/command.py +0 -0
  111. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/commit.py +0 -0
  112. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/completion.py +0 -0
  113. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/config.py +0 -0
  114. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/context.py +0 -0
  115. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/daemon.py +0 -0
  116. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/dashboard.py +0 -0
  117. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/debug.py +0 -0
  118. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/deploy.py +0 -0
  119. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/diag.py +0 -0
  120. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/docs.py +0 -0
  121. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/doctor.py +0 -0
  122. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/endpoints.py +0 -0
  123. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/environment.py +0 -0
  124. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/eval.py +0 -0
  125. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/examples.py +0 -0
  126. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/flow.py +0 -0
  127. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/gateway.py +0 -0
  128. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/github.py +0 -0
  129. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/hooks.py +0 -0
  130. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/identity.py +0 -0
  131. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/init.py +0 -0
  132. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/kanban.py +0 -0
  133. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/knowledge.py +0 -0
  134. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/langextract.py +0 -0
  135. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/langfuse.py +0 -0
  136. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/loop.py +0 -0
  137. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/lsp.py +0 -0
  138. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/managed.py +0 -0
  139. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/mcp.py +0 -0
  140. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/memory.py +0 -0
  141. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/mint_link.py +0 -0
  142. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/models.py +0 -0
  143. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/n8n.py +0 -0
  144. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/obs.py +0 -0
  145. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/onboard.py +0 -0
  146. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/package.py +0 -0
  147. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/pairing.py +0 -0
  148. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/paths.py +0 -0
  149. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/permissions.py +0 -0
  150. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/plugins.py +0 -0
  151. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/port.py +0 -0
  152. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/profile.py +0 -0
  153. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/publish.py +0 -0
  154. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/rag.py +0 -0
  155. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/realtime.py +0 -0
  156. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/recipe.py +0 -0
  157. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/registry.py +0 -0
  158. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/replay.py +0 -0
  159. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/research.py +0 -0
  160. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/retrieval.py +0 -0
  161. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/rules.py +0 -0
  162. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/run.py +0 -0
  163. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/sandbox.py +0 -0
  164. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/serve.py +0 -0
  165. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/session.py +0 -0
  166. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/setup.py +0 -0
  167. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/skills.py +0 -0
  168. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/standardise.py +0 -0
  169. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/templates.py +0 -0
  170. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/test.py +0 -0
  171. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/todo.py +0 -0
  172. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/tools.py +0 -0
  173. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/traces.py +0 -0
  174. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/tracker.py +0 -0
  175. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/train.py +0 -0
  176. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/ui.py +0 -0
  177. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/up.py +0 -0
  178. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/validate.py +0 -0
  179. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/version.py +0 -0
  180. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/workflow.py +0 -0
  181. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/config_loader.py +0 -0
  182. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/configuration/__init__.py +0 -0
  183. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/configuration/config.schema.json +0 -0
  184. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/execution/__init__.py +0 -0
  185. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/fallback_schema.py +0 -0
  186. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/__init__.py +0 -0
  187. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/acp.py +0 -0
  188. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/agent_tools.py +0 -0
  189. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/approval.py +0 -0
  190. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/background.py +0 -0
  191. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/bots_cli.py +0 -0
  192. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/deploy.py +0 -0
  193. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/endpoints.py +0 -0
  194. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/eval.py +0 -0
  195. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/gateway.py +0 -0
  196. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/ollama.py +0 -0
  197. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/onboard.py +0 -0
  198. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/persistence.py +0 -0
  199. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/recipe.py +0 -0
  200. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/recipe_optimizer.py +0 -0
  201. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/registry.py +0 -0
  202. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/sandbox_cli.py +0 -0
  203. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/serve.py +0 -0
  204. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/templates.py +0 -0
  205. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/tools.py +0 -0
  206. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/tui/__init__.py +0 -0
  207. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/tui/app.py +0 -0
  208. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/workflow.py +0 -0
  209. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/interactive/__init__.py +0 -0
  210. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/interactive/async_tui.py +0 -0
  211. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/interactive/config.py +0 -0
  212. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/interactive/core.py +0 -0
  213. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/interactive/events.py +0 -0
  214. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/langfuse_client.py +0 -0
  215. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/__init__.py +0 -0
  216. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/direct_prompt.py +0 -0
  217. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
  218. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
  219. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
  220. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/framework_run.py +0 -0
  221. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
  222. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/interactive_legacy.py +0 -0
  223. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/subcommand_handlers.py +0 -0
  224. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/workflow_commands.py +0 -0
  225. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/main.py +0 -0
  226. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/output/__init__.py +0 -0
  227. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/schedule_cli.py +0 -0
  228. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/schema_provider.py +0 -0
  229. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/session/__init__.py +0 -0
  230. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/state/__init__.py +0 -0
  231. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/ui/__init__.py +0 -0
  232. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/unified_schema.py +0 -0
  233. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/utils/__init__.py +0 -0
  234. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli_backends/__init__.py +0 -0
  235. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/__init__.py +0 -0
  236. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/agent_tools.py +0 -0
  237. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/diff/__init__.py +0 -0
  238. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/diff/diff_strategy.py +0 -0
  239. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/__init__.py +0 -0
  240. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/apply_diff.py +0 -0
  241. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/execute_command.py +0 -0
  242. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/list_files.py +0 -0
  243. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/read_file.py +0 -0
  244. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/search_replace.py +0 -0
  245. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/write_file.py +0 -0
  246. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/utils/__init__.py +0 -0
  247. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/utils/file_utils.py +0 -0
  248. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/utils/ignore_utils.py +0 -0
  249. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/utils/text_utils.py +0 -0
  250. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/config/__init__.py +0 -0
  251. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/config/agents.schema.json +0 -0
  252. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/config/schema.py +0 -0
  253. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/config/validator.py +0 -0
  254. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/__init__.py +0 -0
  255. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/_storage_path.py +0 -0
  256. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/artifact_store.py +0 -0
  257. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/config.py +0 -0
  258. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/history_store.py +0 -0
  259. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/queue.py +0 -0
  260. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/setup.py +0 -0
  261. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/terminal_logger.py +0 -0
  262. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/daemon/__init__.py +0 -0
  263. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/db/__init__.py +0 -0
  264. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/db/adapter.py +0 -0
  265. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/deploy/__init__.py +0 -0
  266. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/__init__.py +0 -0
  267. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/a2u_server.py +0 -0
  268. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/discovery.py +0 -0
  269. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/__init__.py +0 -0
  270. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/a2a.py +0 -0
  271. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/a2u.py +0 -0
  272. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/agents_api.py +0 -0
  273. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/base.py +0 -0
  274. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/mcp.py +0 -0
  275. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/openai_compat.py +0 -0
  276. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/recipe.py +0 -0
  277. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  278. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/registry.py +0 -0
  279. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/server.py +0 -0
  280. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/__init__.py +0 -0
  281. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/client.py +0 -0
  282. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  283. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  284. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/components/__init__.py +0 -0
  285. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/converter.py +0 -0
  286. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/helpers.py +0 -0
  287. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/__init__.py +0 -0
  288. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/_config_builder.py +0 -0
  289. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  290. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/base.py +0 -0
  291. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  292. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/registry.py +0 -0
  293. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/validators.py +0 -0
  294. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/workflow_framework.py +0 -0
  295. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/gateway/__init__.py +0 -0
  296. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/inbuilt_tools/__init__.py +0 -0
  297. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  298. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/inc/__init__.py +0 -0
  299. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/inc/config.py +0 -0
  300. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/inc/models.py +0 -0
  301. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/__init__.py +0 -0
  302. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/__init__.py +0 -0
  303. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  304. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/hooks_query.py +0 -0
  305. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  306. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/schedules_runner.py +0 -0
  307. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/usage_bridge.py +0 -0
  308. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/workflows_service.py +0 -0
  309. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/context_files.py +0 -0
  310. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/gateway_host.py +0 -0
  311. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/host_app.py +0 -0
  312. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/pages/__init__.py +0 -0
  313. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/pages/bot_health.py +0 -0
  314. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/pages/workflow_runs.py +0 -0
  315. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/__init__.py +0 -0
  316. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/_cli_loaders.py +0 -0
  317. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/_managed_base.py +0 -0
  318. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/_session_info.py +0 -0
  319. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/_tool_aliases.py +0 -0
  320. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/backend_registry.py +0 -0
  321. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/base.py +0 -0
  322. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/claude_code.py +0 -0
  323. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/codex_cli.py +0 -0
  324. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/__init__.py +0 -0
  325. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/_sync_base.py +0 -0
  326. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/daytona.py +0 -0
  327. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/docker.py +0 -0
  328. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/e2b.py +0 -0
  329. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/flyio.py +0 -0
  330. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/local.py +0 -0
  331. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/modal_compute.py +0 -0
  332. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/tenki.py +0 -0
  333. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/cursor_cli.py +0 -0
  334. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/db_session_adapter.py +0 -0
  335. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/gemini_cli.py +0 -0
  336. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/hosted_agent.py +0 -0
  337. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/local_agent.py +0 -0
  338. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/managed_agents.py +0 -0
  339. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/managed_local.py +0 -0
  340. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/registry.py +0 -0
  341. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/sandboxed_agent.py +0 -0
  342. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/__init__.py +0 -0
  343. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/executor.py +0 -0
  344. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/models.py +0 -0
  345. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/path_validation.py +0 -0
  346. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/router.py +0 -0
  347. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/server.py +0 -0
  348. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/store.py +0 -0
  349. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/kanban/__init__.py +0 -0
  350. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/__init__.py +0 -0
  351. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/catalogue.py +0 -0
  352. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/config.py +0 -0
  353. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/credentials.py +0 -0
  354. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/env.py +0 -0
  355. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/gateways.py +0 -0
  356. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/registry.py +0 -0
  357. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/mcp_server/__init__.py +0 -0
  358. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/n8n/__init__.py +0 -0
  359. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/n8n/client.py +0 -0
  360. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/n8n/converter.py +0 -0
  361. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/n8n/preview.py +0 -0
  362. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/n8n/reverse_converter.py +0 -0
  363. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/observability/__init__.py +0 -0
  364. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/observability/hooks.py +0 -0
  365. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/observability/langextract.py +0 -0
  366. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/observability/langfuse.py +0 -0
  367. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/__init__.py +0 -0
  368. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/_valkey_client.py +0 -0
  369. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/config.py +0 -0
  370. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/__init__.py +0 -0
  371. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/_ops.py +0 -0
  372. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/_sql_base.py +0 -0
  373. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
  374. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/async_mysql.py +0 -0
  375. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/async_postgres.py +0 -0
  376. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  377. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/base.py +0 -0
  378. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/mysql.py +0 -0
  379. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/postgres.py +0 -0
  380. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/singlestore.py +0 -0
  381. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/sqlite.py +0 -0
  382. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/supabase.py +0 -0
  383. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/surrealdb.py +0 -0
  384. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  385. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/turso.py +0 -0
  386. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/factory.py +0 -0
  387. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/hooks/__init__.py +0 -0
  388. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  389. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/__init__.py +0 -0
  390. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/base.py +0 -0
  391. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/cassandra.py +0 -0
  392. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/chroma.py +0 -0
  393. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  394. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  395. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/couchbase.py +0 -0
  396. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/lancedb.py +0 -0
  397. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  398. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  399. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  400. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/milvus.py +0 -0
  401. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  402. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/pgvector.py +0 -0
  403. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/pinecone.py +0 -0
  404. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/qdrant.py +0 -0
  405. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  406. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  407. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  408. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  409. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  410. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/weaviate.py +0 -0
  411. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/migrations/__init__.py +0 -0
  412. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/migrations/manager.py +0 -0
  413. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/orchestrator.py +0 -0
  414. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/registry.py +0 -0
  415. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/__init__.py +0 -0
  416. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/async_mongodb.py +0 -0
  417. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/base.py +0 -0
  418. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/dynamodb.py +0 -0
  419. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/firestore.py +0 -0
  420. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/gcs.py +0 -0
  421. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/memory.py +0 -0
  422. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/mongodb.py +0 -0
  423. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/redis.py +0 -0
  424. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/upstash.py +0 -0
  425. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/valkey.py +0 -0
  426. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/profiler.py +0 -0
  427. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/push/__init__.py +0 -0
  428. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/push/client.py +0 -0
  429. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/push/transports.py +0 -0
  430. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/__init__.py +0 -0
  431. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/bridge.py +0 -0
  432. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/core.py +0 -0
  433. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/exceptions.py +0 -0
  434. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/history.py +0 -0
  435. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/models.py +0 -0
  436. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/operations.py +0 -0
  437. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/policy.py +0 -0
  438. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/registry.py +0 -0
  439. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/runtime.py +0 -0
  440. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/security.py +0 -0
  441. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/serve.py +0 -0
  442. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/server.py +0 -0
  443. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/__init__.py +0 -0
  444. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/analyzer.py +0 -0
  445. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/applier.py +0 -0
  446. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/judge.py +0 -0
  447. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/plan.py +0 -0
  448. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/player.py +0 -0
  449. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/reader.py +0 -0
  450. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/storage.py +0 -0
  451. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/writer.py +0 -0
  452. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/runtime/__init__.py +0 -0
  453. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/runtime/__main__.py +0 -0
  454. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/sandbox/__init__.py +0 -0
  455. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/sandbox/_registry.py +0 -0
  456. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/__init__.py +0 -0
  457. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/_base_scheduler.py +0 -0
  458. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/_delivery.py +0 -0
  459. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/_dispatch.py +0 -0
  460. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/agent_scheduler.py +0 -0
  461. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/async_agent_scheduler.py +0 -0
  462. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/base.py +0 -0
  463. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/blueprint_catalogue.py +0 -0
  464. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/condition_gate.py +0 -0
  465. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/deployment.py +0 -0
  466. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/executor.py +0 -0
  467. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/run_policy.py +0 -0
  468. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/shared.py +0 -0
  469. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/suggestion_engine.py +0 -0
  470. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/yaml_loader.py +0 -0
  471. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/security/__init__.py +0 -0
  472. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/security/audit.py +0 -0
  473. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/security/injection.py +0 -0
  474. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/security/protected.py +0 -0
  475. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/setup/__init__.py +0 -0
  476. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/setup/build.py +0 -0
  477. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/setup/post_install.py +0 -0
  478. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/setup/setup_conda_env.py +0 -0
  479. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/setup.py +0 -0
  480. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/__init__.py +0 -0
  481. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/ai_generator.py +0 -0
  482. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/config.py +0 -0
  483. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/dedupe.py +0 -0
  484. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/discovery.py +0 -0
  485. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/drift.py +0 -0
  486. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/engine.py +0 -0
  487. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/example_verifier.py +0 -0
  488. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/models.py +0 -0
  489. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/reports.py +0 -0
  490. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/templates.py +0 -0
  491. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/undo_redo.py +0 -0
  492. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/validator.py +0 -0
  493. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/storage/__init__.py +0 -0
  494. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/storage/dynamodb_adapter.py +0 -0
  495. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/storage/mongodb_adapter.py +0 -0
  496. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/storage/postgresql_adapter.py +0 -0
  497. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/storage/redis_adapter.py +0 -0
  498. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/storage/valkey_adapter.py +0 -0
  499. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/__init__.py +0 -0
  500. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/batch_source.py +0 -0
  501. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/cli_docs_source.py +0 -0
  502. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/discovery.py +0 -0
  503. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/docs_source.py +0 -0
  504. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/examples_source.py +0 -0
  505. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/executor.py +0 -0
  506. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/models.py +0 -0
  507. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/report_viewer.py +0 -0
  508. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/reporter.py +0 -0
  509. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/runner.py +0 -0
  510. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/__init__.py +0 -0
  511. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/_tool_sources.py +0 -0
  512. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/cache.py +0 -0
  513. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/dependency_checker.py +0 -0
  514. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/discovery.py +0 -0
  515. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/loader.py +0 -0
  516. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/registry.py +0 -0
  517. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/resolver.py +0 -0
  518. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/security.py +0 -0
  519. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/tool_override.py +0 -0
  520. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/tools_doctor.py +0 -0
  521. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tool_registry.py +0 -0
  522. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tool_resolver.py +0 -0
  523. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/__init__.py +0 -0
  524. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/audio.py +0 -0
  525. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/glob_tool.py +0 -0
  526. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/grep_tool.py +0 -0
  527. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/kanban_tools.py +0 -0
  528. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/multiedit.py +0 -0
  529. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/skill_manage.py +0 -0
  530. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/train/__init__.py +0 -0
  531. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/train.py +0 -0
  532. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/train_vision.py +0 -0
  533. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui/_aiui_datastore.py +0 -0
  534. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui/_external_agents.py +0 -0
  535. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui/context.py +0 -0
  536. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui/database_config.py +0 -0
  537. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_agents/__init__.py +0 -0
  538. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_agents/default_app.py +0 -0
  539. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_bot/__init__.py +0 -0
  540. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_bot/default_app.py +0 -0
  541. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_chat/__init__.py +0 -0
  542. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_chat/default_app.py +0 -0
  543. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_dashboard/__init__.py +0 -0
  544. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_dashboard/default_app.py +0 -0
  545. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_realtime/__init__.py +0 -0
  546. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_realtime/default_app.py +0 -0
  547. {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/upload_vision.py +0 -0
  548. {praisonai-4.7.12 → praisonai-4.7.13}/setup.cfg +0 -0
  549. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test.py +0 -0
  550. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_agents_playbook.py +0 -0
  551. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_approval_system.py +0 -0
  552. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_basic.py +0 -0
  553. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_cli_features.py +0 -0
  554. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_custom_tools_fix.py +0 -0
  555. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_double_api_fix.py +0 -0
  556. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_n8n_agent_invoke.py +0 -0
  557. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_n8n_cli_feature.py +0 -0
  558. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_n8n_integration.py +0 -0
  559. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_phase2_refactor.py +0 -0
  560. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_recipe.py +0 -0
  561. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_registry.py +0 -0
  562. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_runner.py +0 -0
  563. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_sandboxed_agent_compatibility.py +0 -0
  564. {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_serve_features.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.7.12
3
+ Version: 4.7.13
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,14 +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.7.10
15
- Requires-Dist: praisonai-code>=0.1.9
16
- Requires-Dist: praisonai-bot>=0.1.9
17
- Requires-Dist: praisonai-train>=0.1.9
18
- Requires-Dist: praisonai-browser>=0.1.9
19
- Requires-Dist: praisonai-mcp>=0.1.11
20
- Requires-Dist: praisonai-sandbox>=0.1.9
21
- Requires-Dist: praisonai-deploy>=0.1.9
14
+ Requires-Dist: praisonaiagents>=1.7.11
15
+ Requires-Dist: praisonai-code>=0.1.10
16
+ Requires-Dist: praisonai-bot>=0.1.10
17
+ Requires-Dist: praisonai-train>=0.1.10
18
+ Requires-Dist: praisonai-browser>=0.1.10
19
+ Requires-Dist: praisonai-mcp>=0.1.12
20
+ Requires-Dist: praisonai-sandbox>=0.1.10
21
+ Requires-Dist: praisonai-deploy>=0.1.10
22
22
  Requires-Dist: python-dotenv>=0.19.0
23
23
  Requires-Dist: litellm<2,>=1.83.14
24
24
  Requires-Dist: PyYAML>=6.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.7.12
3
+ Version: 4.7.13
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,14 +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.7.10
15
- Requires-Dist: praisonai-code>=0.1.9
16
- Requires-Dist: praisonai-bot>=0.1.9
17
- Requires-Dist: praisonai-train>=0.1.9
18
- Requires-Dist: praisonai-browser>=0.1.9
19
- Requires-Dist: praisonai-mcp>=0.1.11
20
- Requires-Dist: praisonai-sandbox>=0.1.9
21
- Requires-Dist: praisonai-deploy>=0.1.9
14
+ Requires-Dist: praisonaiagents>=1.7.11
15
+ Requires-Dist: praisonai-code>=0.1.10
16
+ Requires-Dist: praisonai-bot>=0.1.10
17
+ Requires-Dist: praisonai-train>=0.1.10
18
+ Requires-Dist: praisonai-browser>=0.1.10
19
+ Requires-Dist: praisonai-mcp>=0.1.12
20
+ Requires-Dist: praisonai-sandbox>=0.1.10
21
+ Requires-Dist: praisonai-deploy>=0.1.10
22
22
  Requires-Dist: python-dotenv>=0.19.0
23
23
  Requires-Dist: litellm<2,>=1.83.14
24
24
  Requires-Dist: PyYAML>=6.0
@@ -59,6 +59,7 @@ praisonai/capabilities/batches.py
59
59
  praisonai/capabilities/completions.py
60
60
  praisonai/capabilities/container_files.py
61
61
  praisonai/capabilities/containers.py
62
+ praisonai/capabilities/decisions.py
62
63
  praisonai/capabilities/embeddings.py
63
64
  praisonai/capabilities/files.py
64
65
  praisonai/capabilities/fine_tuning.py
@@ -1,14 +1,14 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.7.10
5
- praisonai-code>=0.1.9
6
- praisonai-bot>=0.1.9
7
- praisonai-train>=0.1.9
8
- praisonai-browser>=0.1.9
9
- praisonai-mcp>=0.1.11
10
- praisonai-sandbox>=0.1.9
11
- praisonai-deploy>=0.1.9
4
+ praisonaiagents>=1.7.11
5
+ praisonai-code>=0.1.10
6
+ praisonai-bot>=0.1.10
7
+ praisonai-train>=0.1.10
8
+ praisonai-browser>=0.1.10
9
+ praisonai-mcp>=0.1.12
10
+ praisonai-sandbox>=0.1.10
11
+ praisonai-deploy>=0.1.10
12
12
  python-dotenv>=0.19.0
13
13
  litellm<2,>=1.83.14
14
14
  PyYAML>=6.0
@@ -6,6 +6,9 @@ Handles session creation, persistence, and resume functionality.
6
6
 
7
7
  import json
8
8
  import logging
9
+ import os
10
+ import re
11
+ import tempfile
9
12
  import time
10
13
  import uuid
11
14
  from dataclasses import dataclass, field
@@ -14,6 +17,23 @@ from typing import Any, Dict, List, Optional
14
17
 
15
18
  logger = logging.getLogger(__name__)
16
19
 
20
+ # Matches the ids minted by ``ACPSession.create`` (``sess_`` + 16 hex chars).
21
+ # Allowing up to 32 hex chars keeps forward-compat if the id width grows.
22
+ _SESSION_ID_RE = re.compile(r"^sess_[0-9a-f]{1,32}$")
23
+
24
+
25
+ def _validate_session_id(session_id: str) -> str:
26
+ """Reject anything that is not a server-minted session id.
27
+
28
+ ``session_id`` arrives over JSON-RPC from an external peer and is
29
+ interpolated into a filesystem path, so an unvalidated value like
30
+ ``"../../tmp/secret"`` would let the peer read or delete arbitrary
31
+ ``*.json`` files. Only ids matching the ``create()`` format are allowed.
32
+ """
33
+ if not isinstance(session_id, str) or not _SESSION_ID_RE.match(session_id):
34
+ raise ValueError(f"invalid session_id: {session_id!r}")
35
+ return session_id
36
+
17
37
 
18
38
  @dataclass
19
39
  class ACPSession:
@@ -124,23 +144,46 @@ class SessionStore:
124
144
  self._last_session_file = self.storage_dir / ".last_session"
125
145
 
126
146
  def _session_path(self, session_id: str) -> Path:
127
- """Get path for session file."""
128
- return self.storage_dir / f"{session_id}.json"
129
-
147
+ """Get path for session file (validated against traversal)."""
148
+ _validate_session_id(session_id)
149
+ # ``resolve`` anchors the path so a future id-format change can't
150
+ # silently re-open the traversal hole.
151
+ return (self.storage_dir / f"{session_id}.json").resolve()
152
+
153
+ @staticmethod
154
+ def _atomic_write(path: Path, text: str) -> None:
155
+ """Write ``text`` to ``path`` atomically via a temp file + os.replace.
156
+
157
+ A crash or Ctrl-C mid-write can never leave the target empty or
158
+ half-written — the old content survives until the rename succeeds.
159
+ """
160
+ path.parent.mkdir(parents=True, exist_ok=True)
161
+ fd, tmp = tempfile.mkstemp(prefix=".sess-", suffix=".tmp", dir=str(path.parent))
162
+ try:
163
+ with os.fdopen(fd, "w") as f:
164
+ f.write(text)
165
+ f.flush()
166
+ os.fsync(f.fileno())
167
+ os.replace(tmp, path)
168
+ except BaseException:
169
+ try:
170
+ os.unlink(tmp)
171
+ except OSError:
172
+ pass
173
+ raise
174
+
130
175
  def save(self, session: ACPSession) -> None:
131
- """Save session to disk."""
176
+ """Save session to disk atomically."""
132
177
  try:
133
178
  path = self._session_path(session.session_id)
134
- with open(path, "w") as f:
135
- json.dump(session.to_dict(), f, indent=2)
136
-
137
- # Update last session pointer
138
- with open(self._last_session_file, "w") as f:
139
- f.write(session.session_id)
140
-
179
+ self._atomic_write(path, json.dumps(session.to_dict(), indent=2))
180
+
181
+ # Update last session pointer ONLY after the payload is durable.
182
+ self._atomic_write(self._last_session_file, session.session_id)
183
+
141
184
  logger.debug(f"Saved session {session.session_id}")
142
185
  except Exception as e:
143
- logger.error(f"Failed to save session: {e}")
186
+ logger.error(f"Failed to save session {session.session_id}: {e}")
144
187
 
145
188
  def load(self, session_id: str) -> Optional[ACPSession]:
146
189
  """Load session from disk."""
@@ -373,7 +373,7 @@ def _make_timeout_proxy(inner, wrapped_run=None, wrapped__run=None):
373
373
  return proxy
374
374
 
375
375
 
376
- def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory, on_leaked=None, owner_key=None):
376
+ def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory, on_leaked=None, owner_key=None, native_delegates_to_core=False):
377
377
  """Enforce a per-call timeout on a tool, sync or async.
378
378
 
379
379
  For async tools the underlying task is cancelled on timeout. For sync tools
@@ -387,10 +387,33 @@ def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory, on_leaked
387
387
  On timeout the wrapper raises :class:`ToolTimeoutError` rather than returning
388
388
  a JSON string, so a tool's declared return-type contract is never silently
389
389
  downgraded; the framework adapter decides how to surface the timeout.
390
+
391
+ ``native_delegates_to_core``: when True, a *plain native callable* (not a
392
+ framework tool object) is returned unwrapped so core's own per-tool timeout
393
+ enforcement (``praisonaiagents`` ``agent/tool_execution.py`` /
394
+ ``tools/call_executor.py``, configured via the agent's ``tool_config``
395
+ timeout) owns it — avoiding a second, duplicated abandon-on-timeout thread
396
+ pool for tools that already flow through core (#5650). Framework tool
397
+ objects (CrewAI/AutoGen/LangChain ``BaseTool``) never reach core's executor,
398
+ so they are *always* wrapped here to preserve their ``args_schema``.
390
399
  """
391
400
  if timeout_seconds is None or timeout_seconds <= 0:
392
401
  return tool
393
402
 
403
+ # praisonai-native path: a plain callable already flows through core's tool
404
+ # executor, which enforces the resolved per-tool timeout. Returning it
405
+ # unwrapped lets core own the abandon-on-expiry semantics instead of the
406
+ # wrapper standing up a second thread pool with the same behaviour. Only
407
+ # framework tool objects (which bypass core) still need wrapper wrapping, so
408
+ # they fall through to the logic below.
409
+ if (
410
+ native_delegates_to_core
411
+ and callable(tool)
412
+ and not isinstance(tool, type)
413
+ and not _looks_like_framework_tool(tool)
414
+ ):
415
+ return tool
416
+
394
417
  import asyncio
395
418
  import concurrent.futures
396
419
  import functools
@@ -775,14 +798,31 @@ class AgentsGenerator:
775
798
  with self._tool_timeout_executor_lock:
776
799
  self._leaked_workers += 1
777
800
 
778
- def _wrap_tool_with_timeout(self, tool, timeout_seconds):
779
- """Wrap a tool with this generator's instance-owned timeout executor."""
801
+ def _wrap_tool_with_timeout(self, tool, timeout_seconds, native_delegates_to_core=None):
802
+ """Wrap a tool with this generator's instance-owned timeout executor.
803
+
804
+ On the praisonai-native framework the resolved per-tool timeout is
805
+ enforced by core (``praisonaiagents`` ``agent/tool_execution.py``, wired
806
+ via the agent's ``tool_config`` timeout), so a *native* callable is left
807
+ unwrapped here instead of being bound to a second wrapper-owned thread
808
+ pool with the same abandon-on-expiry semantics (#5650). Framework tool
809
+ objects (CrewAI/AutoGen/LangChain ``BaseTool``) bypass core, so they are
810
+ still wrapped.
811
+
812
+ ``native_delegates_to_core``: callers that already know the resolved
813
+ framework (the per-run wrap/resolver closures) pass it explicitly;
814
+ otherwise it is inferred from ``self.framework`` (resolved to the chosen
815
+ adapter name by the time an adapter invokes a wrap closure at run time).
816
+ """
817
+ if native_delegates_to_core is None:
818
+ native_delegates_to_core = (getattr(self, "framework", None) or "") == "praisonai"
780
819
  return _wrap_with_timeout(
781
820
  tool,
782
821
  timeout_seconds,
783
822
  self._get_tool_timeout_executor,
784
823
  on_leaked=self._note_leaked_worker,
785
824
  owner_key=self._timeout_owner_key,
825
+ native_delegates_to_core=native_delegates_to_core,
786
826
  )
787
827
 
788
828
  def close(self):
@@ -1080,11 +1120,35 @@ class AgentsGenerator:
1080
1120
  # that when the *same* generator instance is reused with a different
1081
1121
  # timeout layout, a stale closure from a previous run can never leak into
1082
1122
  # the adapters and apply the wrong budget to the current run.
1123
+ # Resolve the chosen framework now (the same registry resolution the
1124
+ # run prep uses) so native-vs-framework tool handling is decided BEFORE
1125
+ # the uniform wrap is applied eagerly below — ``self.framework`` is not
1126
+ # yet updated to the resolved adapter name at this point in the run.
1127
+ _requested_framework = getattr(self, "framework", None) or config.get('framework')
1128
+ registry = getattr(self, "_adapter_registry", None)
1129
+ try:
1130
+ resolved_framework = (
1131
+ registry.resolve_or_default(_requested_framework)
1132
+ if registry is not None else _requested_framework
1133
+ )
1134
+ except Exception:
1135
+ resolved_framework = _requested_framework
1136
+ native = resolved_framework == "praisonai"
1137
+
1083
1138
  uniform = self._resolve_uniform_tool_timeout(config)
1084
1139
  wrap = None
1085
1140
  resolver = None
1086
1141
  if uniform and uniform > 0:
1087
- wrap = lambda t, _sec=uniform: self._wrap_tool_with_timeout(t, _sec)
1142
+ # On the native framework a *plain callable* is left unwrapped so
1143
+ # core enforces the budget (#5650) — the raw value is exposed below
1144
+ # so the native adapter configures each agent's tool_config timeout.
1145
+ # Framework tool *objects* are still wrapped here regardless, so
1146
+ # their args_schema survives for the LLM. ``native`` is passed
1147
+ # explicitly because ``self.framework`` is not yet resolved here.
1148
+ wrap = (
1149
+ lambda t, _sec=uniform, _n=native:
1150
+ self._wrap_tool_with_timeout(t, _sec, native_delegates_to_core=_n)
1151
+ )
1088
1152
  tools_dict = {name: wrap(tool) for name, tool in tools_dict.items()}
1089
1153
  else:
1090
1154
  # No single uniform timeout. If any agent declared a per-agent
@@ -1105,9 +1169,21 @@ class AgentsGenerator:
1105
1169
  # so adapters still read them via the same keys. Both are written every
1106
1170
  # time so the inactive path is cleared rather than left holding a prior
1107
1171
  # closure.
1172
+ # On the native framework, plain callables are no longer wrapped by the
1173
+ # wrapper's own executor (above) — core enforces the timeout instead
1174
+ # (#5650). Expose the resolved per-agent timeout (float seconds) so the
1175
+ # native adapter can configure each core Agent's ``tool_config`` timeout.
1176
+ # ``None`` for non-native frameworks, which keep wrapper-side wrapping.
1177
+ native_tool_timeout_resolver = None
1178
+ if native:
1179
+ native_tool_timeout_resolver = (
1180
+ lambda agent_key, _cfg=config: self.resolve_agent_tool_timeout(agent_key, _cfg)
1181
+ )
1182
+
1108
1183
  self._run_ctx = {
1109
1184
  "_tool_timeout_wrap": wrap,
1110
1185
  "_agent_tool_wrap_resolver": resolver,
1186
+ "_native_tool_timeout_resolver": native_tool_timeout_resolver,
1111
1187
  }
1112
1188
  return tools_dict
1113
1189
 
@@ -68,6 +68,13 @@ __all__ = [
68
68
  'aembed',
69
69
  'embedding', # Alias for embed
70
70
  'aembedding', # Alias for aembed
71
+ # System One / Jev decisions (Ollama /v1/systemone)
72
+ 'system_one',
73
+ 'asystem_one',
74
+ 'choice_question',
75
+ 'noul_question',
76
+ 'score_question',
77
+ 'is_decision_model',
71
78
  # Rerank
72
79
  'rerank',
73
80
  'arerank',
@@ -155,6 +162,7 @@ __all__ = [
155
162
  'BatchResult',
156
163
  'VectorStoreResult',
157
164
  'EmbeddingResult',
165
+ 'SystemOneResult',
158
166
  'RerankResult',
159
167
  'ModerationResult',
160
168
  'OCRResult',
@@ -197,6 +205,10 @@ _ATTR_TO_MODULE = {
197
205
  # Embeddings
198
206
  'embed': 'embeddings', 'aembed': 'embeddings', 'EmbeddingResult': 'embeddings',
199
207
  'embedding': 'embeddings', 'aembedding': 'embeddings', # Aliases
208
+ # System One decisions
209
+ 'system_one': 'decisions', 'asystem_one': 'decisions',
210
+ 'choice_question': 'decisions', 'noul_question': 'decisions', 'score_question': 'decisions',
211
+ 'is_decision_model': 'decisions', 'SystemOneResult': 'decisions',
200
212
  # Rerank
201
213
  'rerank': 'rerank_module', 'arerank': 'rerank_module', 'RerankResult': 'rerank_module',
202
214
  # Moderations
@@ -0,0 +1,31 @@
1
+ """
2
+ System One / Jev typed decision capabilities (Ollama ``/v1/systemone``).
3
+
4
+ Thin re-export of ``praisonaiagents.decisions`` for ``praisonai.capabilities`` parity.
5
+ """
6
+
7
+ from praisonaiagents.decisions import (
8
+ KNOWN_DECISION_MODELS,
9
+ SystemOneResult,
10
+ asystem_one,
11
+ choice_question,
12
+ is_decision_model,
13
+ noul_question,
14
+ resolve_system_one_base_url,
15
+ score_question,
16
+ system_one,
17
+ system_one_via_typesafe_sdk,
18
+ )
19
+
20
+ __all__ = [
21
+ "KNOWN_DECISION_MODELS",
22
+ "SystemOneResult",
23
+ "asystem_one",
24
+ "choice_question",
25
+ "is_decision_model",
26
+ "noul_question",
27
+ "resolve_system_one_base_url",
28
+ "score_question",
29
+ "system_one",
30
+ "system_one_via_typesafe_sdk",
31
+ ]
@@ -372,7 +372,7 @@ def _daemon_states_payload() -> list:
372
372
  "source": "daemon",
373
373
  "name": s.get("name", "unknown"),
374
374
  "pid": pid,
375
- "status": "running" if state_manager.is_process_alive(pid) else "stopped",
375
+ "status": "running" if state_manager.is_process_alive(pid, s.get("start_time")) else "stopped",
376
376
  "interval": s.get("interval", "unknown"),
377
377
  "task": s.get("task", ""),
378
378
  })
@@ -74,7 +74,18 @@ class AgentSchedulerHandler:
74
74
 
75
75
  # Parse arguments
76
76
  name = unknown_args[0]
77
-
77
+
78
+ # Validate the name BEFORE launching any daemon: save_state rejects an
79
+ # unsafe name, and launching first would orphan a running daemon with no
80
+ # state file the CLI could use to stop it.
81
+ from praisonai.scheduler.state_manager import _validate_name
82
+ try:
83
+ _validate_name(name)
84
+ except ValueError:
85
+ print(f"❌ Error: Invalid scheduler name {name!r}")
86
+ print(" Use letters, digits, '_', '-', '.' (max 128 chars, no '..').")
87
+ return 1
88
+
78
89
  # Check for --recipe flag in unknown_args
79
90
  recipe_name = None
80
91
  task = None
@@ -96,9 +107,13 @@ class AgentSchedulerHandler:
96
107
  max_cost = getattr(args, 'max_cost', None)
97
108
  deliver = getattr(args, 'schedule_deliver', None) or ''
98
109
 
99
- # Check if name already exists
110
+ # Check if name already exists. Use is_process_alive with the recorded
111
+ # start_time (not a PID-only probe) so a stale state whose PID was reused
112
+ # by an unrelated process does not falsely block a fresh start.
100
113
  existing = state_manager.load_state(name)
101
- if existing and daemon_manager.get_status(existing.get('pid', 0))['is_alive']:
114
+ if existing and state_manager.is_process_alive(
115
+ existing.get('pid', 0), existing.get('start_time')
116
+ ):
102
117
  print(f"❌ Error: Scheduler '{name}' is already running (PID: {existing['pid']})")
103
118
  print(f" Use 'praisonai schedule stop {name}' to stop it first")
104
119
  return 1
@@ -177,7 +192,7 @@ class AgentSchedulerHandler:
177
192
  for state in states:
178
193
  name = state.get('name', 'unknown')[:20]
179
194
  pid = state.get('pid', 0)
180
- status = "running" if state_manager.is_process_alive(pid) else "stopped"
195
+ status = "running" if state_manager.is_process_alive(pid, state.get('start_time')) else "stopped"
181
196
  interval = state.get('interval', 'unknown')[:12]
182
197
  task = state.get('task', '')[:40]
183
198
 
@@ -261,7 +276,7 @@ class AgentSchedulerHandler:
261
276
  pid = state['pid']
262
277
 
263
278
  try:
264
- if daemon_manager.stop_daemon(pid):
279
+ if daemon_manager.stop_daemon(pid, expected_start_time=state.get('start_time')):
265
280
  state_manager.delete_state(name)
266
281
  print(f"✅ Stopped '{name}' (PID: {pid})")
267
282
  stopped += 1
@@ -298,7 +313,7 @@ class AgentSchedulerHandler:
298
313
 
299
314
  print(f"🛑 Stopping scheduler '{name}' (PID: {pid})...")
300
315
 
301
- success = daemon_manager.stop_daemon(pid)
316
+ success = daemon_manager.stop_daemon(pid, expected_start_time=state.get('start_time'))
302
317
 
303
318
  if success:
304
319
  state['status'] = 'stopped'
@@ -365,8 +380,9 @@ class AgentSchedulerHandler:
365
380
 
366
381
  # Stop if running
367
382
  pid = state.get('pid')
368
- if pid and state_manager.is_process_alive(pid):
369
- daemon_manager.stop_daemon(pid)
383
+ start_time = state.get('start_time')
384
+ if pid and state_manager.is_process_alive(pid, start_time):
385
+ daemon_manager.stop_daemon(pid, expected_start_time=start_time)
370
386
  time.sleep(1)
371
387
 
372
388
  # Start again
@@ -384,6 +400,7 @@ class AgentSchedulerHandler:
384
400
  state['pid'] = new_pid
385
401
  state['status'] = 'running'
386
402
  state['started_at'] = datetime.now().isoformat()
403
+ state.pop('start_time', None) # let save_state record the new process's identity
387
404
  state_manager.save_state(name, state)
388
405
 
389
406
  print(f"✅ Scheduler '{name}' restarted (PID: {new_pid})")
@@ -426,7 +443,7 @@ class AgentSchedulerHandler:
426
443
 
427
444
  # Get process status
428
445
  pid = state.get('pid', 0)
429
- is_alive = state_manager.is_process_alive(pid)
446
+ is_alive = state_manager.is_process_alive(pid, state.get('start_time'))
430
447
  status = "🟢 running" if is_alive else "🔴 stopped"
431
448
 
432
449
  # Calculate uptime
@@ -596,7 +596,37 @@ class PraisonAIAdapter(BaseFrameworkAdapter):
596
596
  # Add approval config if present
597
597
  if agent_approval:
598
598
  agent_kwargs['approval'] = agent_approval
599
-
599
+
600
+ # Forward the resolved per-agent tool_timeout to core so native
601
+ # tools are enforced by core's own per-tool timeout (#5650) instead
602
+ # of a duplicate wrapper-side executor. The generator exposes the
603
+ # resolved budget only on the native framework; framework tool
604
+ # objects keep wrapper-side wrapping. A user-supplied tool_config in
605
+ # YAML (details['llm'] etc.) is not overridden here — this only
606
+ # fills the timeout the wrapper would otherwise have enforced.
607
+ native_timeout_resolver = (cli_config or {}).get(
608
+ "_native_tool_timeout_resolver"
609
+ )
610
+ if callable(native_timeout_resolver) and 'tool_config' not in agent_kwargs:
611
+ budget = native_timeout_resolver(role)
612
+ if isinstance(budget, (int, float)) and not isinstance(budget, bool) and budget > 0:
613
+ try:
614
+ from praisonaiagents.config.feature_configs import ToolConfig
615
+ # Preserve the resolved budget as-is (float seconds).
616
+ # Core consumes ToolConfig.timeout directly as seconds in
617
+ # both the sync (future.result(timeout=...)) and async
618
+ # (asyncio.wait_for(timeout=...)) paths, so fractional
619
+ # budgets survive. Rounding to int would collapse a
620
+ # subsecond budget (e.g. 0.4 -> 0), and core treats a
621
+ # non-positive timeout as "no timeout" — silently dropping
622
+ # enforcement for native callables that are now unwrapped.
623
+ agent_kwargs['tool_config'] = ToolConfig(timeout=budget)
624
+ except Exception as _tc_err:
625
+ logger.warning(
626
+ "Could not set core tool_config timeout for agent %r: %s",
627
+ role_filled, _tc_err,
628
+ )
629
+
600
630
  agent = PraisonAgent(**agent_kwargs)
601
631
 
602
632
  if agent_callback: