PraisonAI 4.6.145__tar.gz → 4.6.146__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.
- {praisonai-4.6.145 → praisonai-4.6.146}/PKG-INFO +4 -4
- {praisonai-4.6.145 → praisonai-4.6.146}/PraisonAI.egg-info/PKG-INFO +4 -4
- {praisonai-4.6.145 → praisonai-4.6.146}/PraisonAI.egg-info/SOURCES.txt +1 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/PraisonAI.egg-info/requires.txt +3 -3
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_entrypoint.py +30 -19
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/agents_generator.py +93 -41
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/agent_scheduler.py +25 -4
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/direct_prompt.py +124 -72
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/subcommand_handlers.py +10 -11
- praisonai-4.6.146/praisonai/framework_adapters/base.py +138 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/crewai_adapter.py +11 -2
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/cli.py +48 -2
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/server.py +73 -1
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/transports/http_stream.py +120 -27
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/observability/hooks.py +169 -31
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/_base_scheduler.py +7 -0
- praisonai-4.6.146/praisonai/scheduler/_delivery.py +204 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/agent_scheduler.py +44 -3
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/async_agent_scheduler.py +39 -1
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/daemon_manager.py +8 -1
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/yaml_loader.py +8 -2
- praisonai-4.6.146/praisonai/version.py +1 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/pyproject.toml +3 -3
- praisonai-4.6.145/praisonai/framework_adapters/base.py +0 -66
- praisonai-4.6.145/praisonai/version.py +0 -1
- {praisonai-4.6.145 → praisonai-4.6.146}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/README.md +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/__main__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_async_bridge.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_bootstrap.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/docs_extractor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/docs_generator.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/generator.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/python_extractor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/rust_extractor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/topic_normalizer.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/typescript_extractor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_framework_availability.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_lazy_cache.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_logging.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_safe_loader.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/acp/config.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/acp/server.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/acp/session.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/agent.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/api/agent_invoke.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/api/call.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/app/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/app/agentos.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/async_agent_scheduler.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/auto.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/bots/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/agent.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/benchmark.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/cdp_agent.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/cdp_utils.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/cli.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/diagnostics.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/launcher.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/playwright_agent.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/profiling.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/protocol.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/report.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/server.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/sessions.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/video.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/_shim.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/_warnings.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/app.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/approval_backend.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/branding.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/agent.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/attach.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/auth.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/checkpoint.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/command.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/context.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/daemon.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/gateway.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/identity.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/init.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/kanban.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/models.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/permissions.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/validate.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/configuration/config.schema.json +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/gateway.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/sandbox_cli.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/framework_run.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/interactive_legacy.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/workflow_commands.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/main.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/utils/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/config/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/config/schema.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/config/validator.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/_storage_path.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/config.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/history_store.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/queue.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/setup.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/db/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/db/adapter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/api.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/docker.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/doctor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/main.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/models.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/providers/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/providers/_registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/providers/aws.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/providers/azure.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/providers/base.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/providers/gcp.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/schema.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/openai_compat.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/client.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/converter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/_config_builder.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/autogen_adapter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/validators.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/workflow_framework.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/inc/config.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/inc/models.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/kanban_bridge.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/context_files.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/host_app.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/_cli_loaders.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/_unified_registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/backend_registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/base.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/managed_local.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/models.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/path_validation.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/router.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/server.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/store.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/kanban/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/catalogue.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/config.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/credentials.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/env.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/gateways.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/agents.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/capabilities.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/knowledge.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/memory.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/prompts.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/resources.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/auth/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/auth/api_key.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/auth/oauth.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/auth/oidc.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/auth/scopes.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/elicitation.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/icons.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/recipe_adapter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/recipe_cli.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/sampling.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/tasks.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/tool_index.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/transports/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/transports/stdio.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/n8n/client.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/_valkey_client.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/config.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/_sql_base.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/tests/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/tests/test_all_backends.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/tests/test_registry_lazy.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/profiler.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/push/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/push/client.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/push/transports.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/core.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/history.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/models.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/security.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/server.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/applier.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/judge.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/plan.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/player.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/reader.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/storage.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/writer.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/runtime/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/runtime/__main__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/_compat.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/_registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/_shell.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/daytona.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/docker.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/e2b.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/modal.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/sandlock.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/ssh.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/subprocess.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/_dispatch.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/blueprint_catalogue.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/condition_gate.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/run_policy.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/suggestion_engine.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/security/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/security/audit.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/security/injection.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/security/protected.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/setup/build.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/setup.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/config.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/enhanced_templates.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/manifest.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/models.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/cache.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/loader.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/security.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/tool_override.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tool_registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tool_resolver.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/audio.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/kanban_tools.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/_ollama.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/agents/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/agents/grader.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/agents/hook.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/agents/models.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/agents/orchestrator.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/agents/storage.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/llm/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/llm/trainer.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train_vision.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui/callbacks.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui/components/aicoder.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui/context.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/upload_vision.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/setup.cfg +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_approval_system.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_basic.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_cli_features.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_n8n_agent_invoke.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_recipe.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_registry.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_runner.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.6.145 → praisonai-4.6.146}/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.
|
|
3
|
+
Version: 4.6.146
|
|
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,9 +11,9 @@ 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.
|
|
15
|
-
Requires-Dist: praisonai-code>=0.0.
|
|
16
|
-
Requires-Dist: praisonai-bot>=0.0.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.149
|
|
15
|
+
Requires-Dist: praisonai-code>=0.0.45
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.0.30
|
|
17
17
|
Requires-Dist: python-dotenv>=0.19.0
|
|
18
18
|
Requires-Dist: litellm<2,>=1.83.14
|
|
19
19
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.146
|
|
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,9 +11,9 @@ 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.
|
|
15
|
-
Requires-Dist: praisonai-code>=0.0.
|
|
16
|
-
Requires-Dist: praisonai-bot>=0.0.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.149
|
|
15
|
+
Requires-Dist: praisonai-code>=0.0.45
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.0.30
|
|
17
17
|
Requires-Dist: python-dotenv>=0.19.0
|
|
18
18
|
Requires-Dist: litellm<2,>=1.83.14
|
|
19
19
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -525,6 +525,7 @@ praisonai/sandbox/ssh.py
|
|
|
525
525
|
praisonai/sandbox/subprocess.py
|
|
526
526
|
praisonai/scheduler/__init__.py
|
|
527
527
|
praisonai/scheduler/_base_scheduler.py
|
|
528
|
+
praisonai/scheduler/_delivery.py
|
|
528
529
|
praisonai/scheduler/_dispatch.py
|
|
529
530
|
praisonai/scheduler/agent_scheduler.py
|
|
530
531
|
praisonai/scheduler/async_agent_scheduler.py
|
|
@@ -14,14 +14,14 @@ def _build_config_list() -> list[dict[str, Any]]:
|
|
|
14
14
|
return build_config_list()
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
def
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
17
|
+
def _resolve_run_inputs(framework: str | None) -> tuple[str, list[dict[str, Any]]]:
|
|
18
|
+
"""Single source of truth for wrapper entry-point resolution.
|
|
19
|
+
|
|
20
|
+
Resolves the framework (default selection or explicit validation) and builds
|
|
21
|
+
the LLM config list. This performs synchronous work — including credential /
|
|
22
|
+
config file I/O via ``_build_config_list`` — so async callers must invoke it
|
|
23
|
+
off the event loop (see ``arun``).
|
|
24
|
+
"""
|
|
25
25
|
from .framework_adapters.registry import get_default_registry
|
|
26
26
|
|
|
27
27
|
if framework is None:
|
|
@@ -33,10 +33,24 @@ def run(agent_file: str,
|
|
|
33
33
|
from .framework_adapters.validators import assert_framework_available
|
|
34
34
|
assert_framework_available(framework)
|
|
35
35
|
|
|
36
|
+
return framework, _build_config_list()
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def run(agent_file: str,
|
|
40
|
+
framework: str | None = None,
|
|
41
|
+
*,
|
|
42
|
+
tools: list | None = None,
|
|
43
|
+
agent_yaml: str | None = None,
|
|
44
|
+
cli_config: dict | None = None) -> str:
|
|
45
|
+
"""One-line Python entry point. Equivalent to `praisonai <agent_file>`."""
|
|
46
|
+
from .agents_generator import AgentsGenerator
|
|
47
|
+
|
|
48
|
+
framework, config_list = _resolve_run_inputs(framework)
|
|
49
|
+
|
|
36
50
|
gen = AgentsGenerator(
|
|
37
51
|
agent_file=agent_file,
|
|
38
52
|
framework=framework,
|
|
39
|
-
config_list=
|
|
53
|
+
config_list=config_list,
|
|
40
54
|
tools=tools,
|
|
41
55
|
agent_yaml=agent_yaml,
|
|
42
56
|
cli_config=cli_config,
|
|
@@ -51,22 +65,19 @@ async def arun(agent_file: str,
|
|
|
51
65
|
agent_yaml: str | None = None,
|
|
52
66
|
cli_config: dict | None = None) -> str:
|
|
53
67
|
"""Async equivalent of `run()` using native async framework adapters."""
|
|
68
|
+
import asyncio
|
|
69
|
+
|
|
54
70
|
from .agents_generator import AgentsGenerator
|
|
55
|
-
from .framework_adapters.registry import get_default_registry
|
|
56
71
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
else:
|
|
62
|
-
# Validate explicit framework like CLI does
|
|
63
|
-
from .framework_adapters.validators import assert_framework_available
|
|
64
|
-
assert_framework_available(framework)
|
|
72
|
+
# Resolve framework + build config_list off the caller's event loop so the
|
|
73
|
+
# synchronous credential/config-file I/O does not block it. This is the
|
|
74
|
+
# reason arun exists: a FastAPI handler awaiting arun must not stall the loop.
|
|
75
|
+
framework, config_list = await asyncio.to_thread(_resolve_run_inputs, framework)
|
|
65
76
|
|
|
66
77
|
gen = AgentsGenerator(
|
|
67
78
|
agent_file=agent_file,
|
|
68
79
|
framework=framework,
|
|
69
|
-
config_list=
|
|
80
|
+
config_list=config_list,
|
|
70
81
|
tools=tools,
|
|
71
82
|
agent_yaml=agent_yaml,
|
|
72
83
|
cli_config=cli_config,
|
|
@@ -182,6 +182,26 @@ def _resolve_tool_timeout_workers():
|
|
|
182
182
|
return workers
|
|
183
183
|
|
|
184
184
|
|
|
185
|
+
def _looks_like_framework_tool(tool) -> bool:
|
|
186
|
+
"""Whether ``tool`` is a framework tool object carrying a typed schema.
|
|
187
|
+
|
|
188
|
+
CrewAI / LangChain ``BaseTool`` instances and praisonai ``@tool`` objects
|
|
189
|
+
expose ``name``/``description`` plus an ``args_schema`` (or a dedicated
|
|
190
|
+
``_run``/``run`` execution method). Such metadata is what the downstream
|
|
191
|
+
framework uses to advertise the tool to the LLM, so it must survive
|
|
192
|
+
timeout-wrapping. A bare function or a plain class returns False.
|
|
193
|
+
"""
|
|
194
|
+
if isinstance(tool, type):
|
|
195
|
+
return False
|
|
196
|
+
has_schema = any(
|
|
197
|
+
hasattr(tool, attr) for attr in ("args_schema", "name", "description")
|
|
198
|
+
)
|
|
199
|
+
has_exec_method = any(
|
|
200
|
+
callable(getattr(tool, m, None)) for m in ("_run", "run")
|
|
201
|
+
)
|
|
202
|
+
return has_schema and has_exec_method
|
|
203
|
+
|
|
204
|
+
|
|
185
205
|
def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory, on_leaked=None):
|
|
186
206
|
"""Enforce a per-call timeout on a tool, sync or async.
|
|
187
207
|
|
|
@@ -197,56 +217,88 @@ def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory, on_leaked
|
|
|
197
217
|
a JSON string, so a tool's declared return-type contract is never silently
|
|
198
218
|
downgraded; the framework adapter decides how to surface the timeout.
|
|
199
219
|
"""
|
|
200
|
-
if timeout_seconds is None or timeout_seconds <= 0
|
|
220
|
+
if timeout_seconds is None or timeout_seconds <= 0:
|
|
201
221
|
return tool
|
|
202
|
-
|
|
222
|
+
|
|
203
223
|
import asyncio
|
|
204
224
|
import concurrent.futures
|
|
205
225
|
import functools
|
|
206
226
|
import inspect
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
227
|
+
|
|
228
|
+
def _wrap_callable(fn):
|
|
229
|
+
"""Return a timeout-enforcing wrapper around a bare callable."""
|
|
230
|
+
if not callable(fn):
|
|
231
|
+
return fn
|
|
232
|
+
|
|
233
|
+
if inspect.iscoroutinefunction(fn):
|
|
234
|
+
@functools.wraps(fn)
|
|
235
|
+
async def _async_wrapped(*args, **kwargs):
|
|
236
|
+
try:
|
|
237
|
+
return await asyncio.wait_for(fn(*args, **kwargs), timeout=timeout_seconds)
|
|
238
|
+
except asyncio.TimeoutError:
|
|
239
|
+
# asyncio.wait_for cancels the underlying task, so no work leaks.
|
|
240
|
+
raise ToolTimeoutError(
|
|
241
|
+
tool_name=getattr(fn, "__name__", repr(fn)),
|
|
242
|
+
timeout_seconds=timeout_seconds,
|
|
243
|
+
background_work_may_continue=False,
|
|
244
|
+
)
|
|
245
|
+
return _async_wrapped
|
|
246
|
+
|
|
247
|
+
@functools.wraps(fn)
|
|
248
|
+
def _sync_wrapped(*args, **kwargs):
|
|
249
|
+
executor = executor_factory()
|
|
250
|
+
future = executor.submit(fn, *args, **kwargs)
|
|
211
251
|
try:
|
|
212
|
-
return
|
|
213
|
-
except
|
|
214
|
-
#
|
|
252
|
+
return future.result(timeout=timeout_seconds)
|
|
253
|
+
except concurrent.futures.TimeoutError:
|
|
254
|
+
# Best-effort cancel; only effective if the future has not started.
|
|
255
|
+
# A started sync call cannot be interrupted, so warn operators that
|
|
256
|
+
# the worker may keep running (and its side effects may still occur).
|
|
257
|
+
cancelled = future.cancel()
|
|
258
|
+
if not cancelled and on_leaked is not None:
|
|
259
|
+
# The worker is stuck and OS-owned; let the generator recycle
|
|
260
|
+
# the pool so new submissions are not permanently queued behind
|
|
261
|
+
# leaked threads.
|
|
262
|
+
on_leaked()
|
|
263
|
+
logger.warning(
|
|
264
|
+
"Tool %r exceeded %.1fs (cancel=%s); worker may continue "
|
|
265
|
+
"executing in the background.",
|
|
266
|
+
getattr(fn, "__name__", repr(fn)),
|
|
267
|
+
timeout_seconds, cancelled,
|
|
268
|
+
)
|
|
215
269
|
raise ToolTimeoutError(
|
|
216
|
-
tool_name=getattr(
|
|
270
|
+
tool_name=getattr(fn, "__name__", repr(fn)),
|
|
217
271
|
timeout_seconds=timeout_seconds,
|
|
218
|
-
background_work_may_continue=
|
|
272
|
+
background_work_may_continue=not cancelled,
|
|
219
273
|
)
|
|
220
|
-
return
|
|
221
|
-
|
|
222
|
-
@
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
)
|
|
249
|
-
return _sync_wrapped
|
|
274
|
+
return _sync_wrapped
|
|
275
|
+
|
|
276
|
+
# Framework tool object (CrewAI/LangChain BaseTool, praisonai @tool). These
|
|
277
|
+
# carry name / description / args_schema that the downstream framework needs
|
|
278
|
+
# to advertise the tool to the LLM. Replacing them with a bare function
|
|
279
|
+
# (functools.wraps copies only __name__/__doc__ etc., NOT args_schema) makes
|
|
280
|
+
# the framework infer a (*args, **kwargs) schema and the LLM emits malformed
|
|
281
|
+
# tool_calls. Instead, wrap only the execution method IN PLACE so the object
|
|
282
|
+
# — and its schema — survive.
|
|
283
|
+
if not callable(tool) or _looks_like_framework_tool(tool):
|
|
284
|
+
for method_name in ("_run", "run"):
|
|
285
|
+
method = getattr(tool, method_name, None)
|
|
286
|
+
if callable(method):
|
|
287
|
+
wrapped = _wrap_callable(method)
|
|
288
|
+
if wrapped is method:
|
|
289
|
+
continue
|
|
290
|
+
try:
|
|
291
|
+
object.__setattr__(tool, method_name, wrapped) # bypass pydantic frozen
|
|
292
|
+
return tool
|
|
293
|
+
except (AttributeError, TypeError):
|
|
294
|
+
break # fall through to callable wrapping below
|
|
295
|
+
# No patchable execution method or non-callable object; return as-is so
|
|
296
|
+
# we never silently drop a tool object we couldn't safely wrap.
|
|
297
|
+
if not callable(tool):
|
|
298
|
+
return tool
|
|
299
|
+
|
|
300
|
+
# Plain callable — safe to wrap as a function.
|
|
301
|
+
return _wrap_callable(tool)
|
|
250
302
|
|
|
251
303
|
|
|
252
304
|
def noop(*args, **kwargs):
|
|
@@ -94,6 +94,7 @@ class AgentSchedulerHandler:
|
|
|
94
94
|
max_retries = getattr(args, 'schedule_max_retries', None) or 3
|
|
95
95
|
timeout = getattr(args, 'timeout', None)
|
|
96
96
|
max_cost = getattr(args, 'max_cost', None)
|
|
97
|
+
deliver = getattr(args, 'schedule_deliver', None) or ''
|
|
97
98
|
|
|
98
99
|
# Check if name already exists
|
|
99
100
|
existing = state_manager.load_state(name)
|
|
@@ -121,7 +122,8 @@ class AgentSchedulerHandler:
|
|
|
121
122
|
interval=interval,
|
|
122
123
|
max_cost=max_cost,
|
|
123
124
|
timeout=timeout,
|
|
124
|
-
max_retries=max_retries
|
|
125
|
+
max_retries=max_retries,
|
|
126
|
+
deliver=deliver
|
|
125
127
|
)
|
|
126
128
|
|
|
127
129
|
# Save state
|
|
@@ -134,6 +136,7 @@ class AgentSchedulerHandler:
|
|
|
134
136
|
"timeout": timeout,
|
|
135
137
|
"max_cost": max_cost,
|
|
136
138
|
"max_retries": max_retries,
|
|
139
|
+
"deliver": deliver,
|
|
137
140
|
"status": "running",
|
|
138
141
|
"started_at": datetime.now().isoformat(),
|
|
139
142
|
"executions": 0,
|
|
@@ -370,10 +373,12 @@ class AgentSchedulerHandler:
|
|
|
370
373
|
new_pid = daemon_manager.start_scheduler_daemon(
|
|
371
374
|
name=name,
|
|
372
375
|
task=state['task'],
|
|
376
|
+
recipe_name=state.get('recipe_name'),
|
|
373
377
|
interval=state['interval'],
|
|
374
378
|
max_cost=state.get('max_cost'),
|
|
375
379
|
timeout=state.get('timeout'),
|
|
376
|
-
max_retries=state.get('max_retries', 3)
|
|
380
|
+
max_retries=state.get('max_retries', 3),
|
|
381
|
+
deliver=state.get('deliver', '')
|
|
377
382
|
)
|
|
378
383
|
|
|
379
384
|
state['pid'] = new_pid
|
|
@@ -557,6 +562,7 @@ class AgentSchedulerHandler:
|
|
|
557
562
|
max_retries_override = getattr(args, 'schedule_max_retries', None) or 3
|
|
558
563
|
timeout_override = getattr(args, 'timeout', None)
|
|
559
564
|
max_cost_override = getattr(args, 'max_cost', None)
|
|
565
|
+
deliver_override = getattr(args, 'schedule_deliver', None) or ''
|
|
560
566
|
verbose = getattr(args, 'verbose', False)
|
|
561
567
|
|
|
562
568
|
# Set up logging - only show logs if verbose
|
|
@@ -630,9 +636,14 @@ class AgentSchedulerHandler:
|
|
|
630
636
|
agent=agent,
|
|
631
637
|
task=task,
|
|
632
638
|
timeout=timeout_override,
|
|
633
|
-
max_cost=max_cost_override
|
|
639
|
+
max_cost=max_cost_override,
|
|
640
|
+
deliver=deliver_override
|
|
634
641
|
)
|
|
635
|
-
|
|
642
|
+
|
|
643
|
+
# A CLI --deliver overrides any target resolved from YAML/recipe.
|
|
644
|
+
if deliver_override:
|
|
645
|
+
scheduler.deliver = deliver_override
|
|
646
|
+
|
|
636
647
|
# Get configuration
|
|
637
648
|
interval = interval_override
|
|
638
649
|
max_retries = max_retries_override
|
|
@@ -754,6 +765,16 @@ schedule:
|
|
|
754
765
|
help='Override maximum retry attempts (default: from YAML or 3)'
|
|
755
766
|
)
|
|
756
767
|
|
|
768
|
+
schedule_parser.add_argument(
|
|
769
|
+
'--deliver', '-d',
|
|
770
|
+
dest='schedule_deliver',
|
|
771
|
+
type=str,
|
|
772
|
+
help=(
|
|
773
|
+
"Deliver each result to a chat target "
|
|
774
|
+
"(e.g. 'telegram:123456', 'telegram', 'telegram:123:thread')"
|
|
775
|
+
),
|
|
776
|
+
)
|
|
777
|
+
|
|
757
778
|
schedule_parser.add_argument(
|
|
758
779
|
'--verbose', '-v',
|
|
759
780
|
action='store_true',
|
|
@@ -54,17 +54,18 @@ def _rewrite_query(self, query: str, rewrite_tools: str = None, verbose: bool =
|
|
|
54
54
|
if os.path.isfile(rewrite_tools):
|
|
55
55
|
# Load from file
|
|
56
56
|
try:
|
|
57
|
-
import
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
57
|
+
from praisonai_code.tool_resolver import ToolResolver
|
|
58
|
+
funcs = ToolResolver().load_functions_from_module(
|
|
59
|
+
rewrite_tools,
|
|
60
|
+
functions_only=True,
|
|
61
|
+
skip_private=True,
|
|
62
|
+
module_name="rewrite_tools_module",
|
|
63
|
+
)
|
|
64
|
+
if funcs:
|
|
65
|
+
rewrite_tools_list.extend(funcs.values())
|
|
66
|
+
print(f"[cyan]Loaded {len(rewrite_tools_list)} tools for query rewriter[/cyan]")
|
|
66
67
|
else:
|
|
67
|
-
print(f"[yellow]Warning:
|
|
68
|
+
print(f"[yellow]Warning: No rewrite tools loaded from {rewrite_tools} (module has no public functions, or local tools loading is disabled — set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable).[/yellow]")
|
|
68
69
|
except Exception as e:
|
|
69
70
|
print(f"[yellow]Warning: Failed to load rewrite tools: {e}[/yellow]")
|
|
70
71
|
else:
|
|
@@ -149,17 +150,18 @@ def _expand_prompt(self, prompt: str, expand_tools: str = None, verbose: bool =
|
|
|
149
150
|
if os.path.isfile(expand_tools):
|
|
150
151
|
# Load from file
|
|
151
152
|
try:
|
|
152
|
-
import
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
153
|
+
from praisonai_code.tool_resolver import ToolResolver
|
|
154
|
+
funcs = ToolResolver().load_functions_from_module(
|
|
155
|
+
expand_tools,
|
|
156
|
+
functions_only=True,
|
|
157
|
+
skip_private=True,
|
|
158
|
+
module_name="expand_tools_module",
|
|
159
|
+
)
|
|
160
|
+
if funcs:
|
|
161
|
+
expand_tools_list.extend(funcs.values())
|
|
162
|
+
print(f"[cyan]Loaded {len(expand_tools_list)} tools for prompt expander[/cyan]")
|
|
161
163
|
else:
|
|
162
|
-
print(f"[yellow]Warning:
|
|
164
|
+
print(f"[yellow]Warning: No expand tools loaded from {expand_tools} (module has no public functions, or local tools loading is disabled — set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable).[/yellow]")
|
|
163
165
|
except Exception as e:
|
|
164
166
|
print(f"[yellow]Warning: Failed to load expand tools: {e}[/yellow]")
|
|
165
167
|
else:
|
|
@@ -237,17 +239,17 @@ def _load_tools(self, tools_path: str) -> list:
|
|
|
237
239
|
if os.path.isfile(tools_path):
|
|
238
240
|
# Load from file
|
|
239
241
|
try:
|
|
240
|
-
import
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
242
|
+
from praisonai_code.tool_resolver import ToolResolver
|
|
243
|
+
funcs = ToolResolver().load_functions_from_module(
|
|
244
|
+
tools_path,
|
|
245
|
+
functions_only=True,
|
|
246
|
+
skip_private=True,
|
|
247
|
+
)
|
|
248
|
+
if funcs:
|
|
249
|
+
tools_list.extend(funcs.values())
|
|
250
|
+
print(f"[cyan]Loaded {len(tools_list)} tools from {tools_path}[/cyan]")
|
|
249
251
|
else:
|
|
250
|
-
print(f"[yellow]Warning:
|
|
252
|
+
print(f"[yellow]Warning: No tools loaded from {tools_path} (module has no public functions, or local tools loading is disabled — set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable).[/yellow]")
|
|
251
253
|
except Exception as e:
|
|
252
254
|
print(f"[yellow]Warning: Failed to load tools from {tools_path}: {e}[/yellow]")
|
|
253
255
|
else:
|
|
@@ -326,6 +328,68 @@ def _save_output(self, prompt: str, result: str):
|
|
|
326
328
|
|
|
327
329
|
print(f"[green]✅ Output saved to: {filepath}[/green]")
|
|
328
330
|
|
|
331
|
+
def _run_direct_prompt_via_adapter(self, prompt):
|
|
332
|
+
"""Run a one-shot direct prompt through the FrameworkAdapterRegistry.
|
|
333
|
+
|
|
334
|
+
This keeps default framework selection in a single place (the registry's
|
|
335
|
+
priority + entry-point discovery) and routes execution through the adapter
|
|
336
|
+
contract so telemetry suppression, ``_resolve_llm`` normalisation and
|
|
337
|
+
``expected_output`` handling all apply — none of which the previous
|
|
338
|
+
hardcoded ``from crewai import ...`` / ``from autogen import ...`` chain did.
|
|
339
|
+
"""
|
|
340
|
+
from praisonai.framework_adapters.registry import get_default_registry
|
|
341
|
+
|
|
342
|
+
registry = get_default_registry()
|
|
343
|
+
try:
|
|
344
|
+
framework = registry.pick_default()
|
|
345
|
+
except RuntimeError as e:
|
|
346
|
+
print(f"[red]ERROR: {e}[/red]")
|
|
347
|
+
sys.exit(1)
|
|
348
|
+
|
|
349
|
+
adapter = registry.create(framework)
|
|
350
|
+
# AutoGen exposes a family router that resolves to a concrete version.
|
|
351
|
+
if hasattr(adapter, "resolve"):
|
|
352
|
+
adapter = adapter.resolve(config={})
|
|
353
|
+
|
|
354
|
+
llm = getattr(getattr(self, "args", None), "llm", None)
|
|
355
|
+
config_list = getattr(self, "config_list", None) or [{"model": llm or "gpt-4o"}]
|
|
356
|
+
# Preserve the full first config entry so credentials/endpoint fields
|
|
357
|
+
# (base_url, api_key, api_type, ...) that the adapter's _resolve_llm and the
|
|
358
|
+
# AutoGen config_list depend on survive. Only the explicit --llm override
|
|
359
|
+
# replaces the model; a missing model falls back to a sane default.
|
|
360
|
+
llm_config = [dict(config_list[0])]
|
|
361
|
+
if llm:
|
|
362
|
+
llm_config[0]["model"] = llm
|
|
363
|
+
llm_config[0].setdefault("model", "gpt-4o")
|
|
364
|
+
|
|
365
|
+
# Canonical one-shot config shape shared with the YAML path; the adapter's
|
|
366
|
+
# spec builder turns this into agents/tasks with a proper expected_output.
|
|
367
|
+
config = {
|
|
368
|
+
"roles": {
|
|
369
|
+
"director": {
|
|
370
|
+
"role": "Assistant",
|
|
371
|
+
"goal": "Complete the given task",
|
|
372
|
+
"backstory": "You are a helpful AI assistant",
|
|
373
|
+
"tasks": {
|
|
374
|
+
"direct_task": {
|
|
375
|
+
"description": prompt,
|
|
376
|
+
"expected_output": "A complete response to the task.",
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
"tools": [],
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
return adapter.run(
|
|
385
|
+
config,
|
|
386
|
+
llm_config,
|
|
387
|
+
prompt,
|
|
388
|
+
tools_dict={},
|
|
389
|
+
cli_config=vars(self.args) if hasattr(self, "args") and self.args else None,
|
|
390
|
+
)
|
|
391
|
+
|
|
392
|
+
|
|
329
393
|
def handle_direct_prompt(self, prompt):
|
|
330
394
|
"""
|
|
331
395
|
Handle direct prompt by creating a single agent and running it.
|
|
@@ -523,7 +587,29 @@ def handle_direct_prompt(self, prompt):
|
|
|
523
587
|
agent_config["tools"] = existing_tools
|
|
524
588
|
else:
|
|
525
589
|
agent_config["tools"] = tools_list
|
|
526
|
-
|
|
590
|
+
|
|
591
|
+
# Auto-discover project-local .praisonai/tools/*.py (additive; mirrors
|
|
592
|
+
# the agents/commands convention). Explicit --tools above take
|
|
593
|
+
# precedence; discovery is gated by PRAISONAI_ALLOW_LOCAL_TOOLS and
|
|
594
|
+
# skipped when --no-tools is set.
|
|
595
|
+
if not getattr(self.args, 'no_tools', False):
|
|
596
|
+
try:
|
|
597
|
+
from praisonai_code.cli.features.custom_definitions import (
|
|
598
|
+
discover_project_tools,
|
|
599
|
+
)
|
|
600
|
+
project_tools = discover_project_tools()
|
|
601
|
+
except Exception:
|
|
602
|
+
project_tools = []
|
|
603
|
+
if project_tools:
|
|
604
|
+
existing_tools = agent_config.get('tools', [])
|
|
605
|
+
if not isinstance(existing_tools, list):
|
|
606
|
+
existing_tools = [existing_tools] if existing_tools else []
|
|
607
|
+
seen = {id(t) for t in existing_tools}
|
|
608
|
+
existing_tools.extend(
|
|
609
|
+
t for t in project_tools if id(t) not in seen
|
|
610
|
+
)
|
|
611
|
+
agent_config["tools"] = existing_tools
|
|
612
|
+
|
|
527
613
|
# Load toolsets if specified (--toolset flag)
|
|
528
614
|
if getattr(self.args, 'toolset', None):
|
|
529
615
|
toolset_names = [name.strip() for name in self.args.toolset.split(',') if name.strip()]
|
|
@@ -1243,47 +1329,13 @@ Now, {final_instruction.lower()}:"""
|
|
|
1243
1329
|
print(json.dumps({"cost_usd": 0.0, "tokens_in": 0, "tokens_out": 0, "model": "unknown", "request_count": 0}))
|
|
1244
1330
|
|
|
1245
1331
|
return result
|
|
1246
|
-
elif _availability_flag("CREWAI_AVAILABLE"):
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
}
|
|
1254
|
-
|
|
1255
|
-
# Add llm if specified
|
|
1256
|
-
if hasattr(self, 'args') and self.args.llm:
|
|
1257
|
-
agent_config["llm"] = self.args.llm
|
|
1258
|
-
|
|
1259
|
-
agent = Agent(**agent_config)
|
|
1260
|
-
task = Task(
|
|
1261
|
-
description=prompt,
|
|
1262
|
-
agent=agent
|
|
1263
|
-
)
|
|
1264
|
-
crew = Crew(
|
|
1265
|
-
agents=[agent],
|
|
1266
|
-
tasks=[task]
|
|
1267
|
-
)
|
|
1268
|
-
return crew.kickoff()
|
|
1269
|
-
elif _availability_flag("AUTOGEN_AVAILABLE"):
|
|
1270
|
-
# Lazy import autogen only when needed
|
|
1271
|
-
autogen = _get_autogen()
|
|
1272
|
-
config_list = self.config_list
|
|
1273
|
-
# Add llm if specified
|
|
1274
|
-
if hasattr(self, 'args') and self.args.llm:
|
|
1275
|
-
config_list[0]['model'] = self.args.llm
|
|
1276
|
-
|
|
1277
|
-
assistant = autogen.AssistantAgent(
|
|
1278
|
-
name="DirectAgent",
|
|
1279
|
-
llm_config={"config_list": config_list}
|
|
1280
|
-
)
|
|
1281
|
-
user_proxy = autogen.UserProxyAgent(
|
|
1282
|
-
name="UserProxy",
|
|
1283
|
-
code_execution_config={"work_dir": "coding"}
|
|
1284
|
-
)
|
|
1285
|
-
user_proxy.initiate_chat(assistant, message=prompt)
|
|
1286
|
-
return "Task completed"
|
|
1332
|
+
elif _availability_flag("CREWAI_AVAILABLE") or _availability_flag("AUTOGEN_AVAILABLE"):
|
|
1333
|
+
# Route non-praisonai frameworks through the FrameworkAdapterRegistry so
|
|
1334
|
+
# the single source of truth for selection (priority + entry-point
|
|
1335
|
+
# plugins) and the full adapter contract (scoped_telemetry_disable,
|
|
1336
|
+
# _resolve_llm, expected_output, cli_config/callbacks) apply here too —
|
|
1337
|
+
# instead of a hardcoded chain that bypassed every adapter.
|
|
1338
|
+
return _run_direct_prompt_via_adapter(self, prompt)
|
|
1287
1339
|
else:
|
|
1288
1340
|
print("[red]ERROR: No framework is installed. Please install at least one framework:[/red]")
|
|
1289
1341
|
print("\npip install \"praisonai-frameworks\\[crewai]\" # For CrewAI")
|