PraisonAI 4.6.32__tar.gz → 4.6.34__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.32 → praisonai-4.6.34}/PKG-INFO +2 -2
- {praisonai-4.6.32 → praisonai-4.6.34}/PraisonAI.egg-info/PKG-INFO +2 -2
- {praisonai-4.6.32 → praisonai-4.6.34}/PraisonAI.egg-info/SOURCES.txt +1 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/PraisonAI.egg-info/requires.txt +1 -1
- praisonai-4.6.34/praisonai/_safe_loader.py +100 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/agents_generator.py +37 -12
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/api/call.py +19 -5
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/async_agent_scheduler.py +18 -12
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/auto.py +22 -36
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_http_approval.py +8 -13
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_webhook_approval.py +8 -13
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/job_workflow.py +74 -8
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/main.py +30 -26
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/api.py +20 -7
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/models.py +1 -1
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/schema.py +2 -2
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy.py +1 -1
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/framework_adapters/autogen_adapter.py +6 -10
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/framework_adapters/base.py +18 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/framework_adapters/crewai_adapter.py +2 -10
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/framework_adapters/praisonai_adapter.py +2 -10
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/pairing_routes.py +6 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/base.py +2 -20
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/cli_tools.py +50 -16
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/base.py +23 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/cassandra.py +13 -1
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/pgvector.py +9 -1
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/singlestore_vector.py +14 -1
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/test.py +6 -2
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train.py +35 -8
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train_vision.py +33 -7
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui/components/aicoder.py +24 -5
- praisonai-4.6.34/praisonai/version.py +1 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/pyproject.toml +1 -1
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_custom_tools_fix.py +1 -1
- praisonai-4.6.32/praisonai/version.py +0 -1
- {praisonai-4.6.32 → praisonai-4.6.34}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/README.md +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/__main__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_async_bridge.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/docs_extractor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/docs_generator.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/generator.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/python_extractor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/rust_extractor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/topic_normalizer.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/typescript_extractor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_logging.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/acp/config.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/acp/server.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/acp/session.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/agent.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/api/agent_invoke.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/app/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/app/agentos.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_ack.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_approval.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_approval_base.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_auth.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_chunk.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_commands.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_config_schema.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_debounce.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_defaults.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_discord_approval.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_email_utils.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_pairing_ui.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_protocol_mixin.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_rate_limit.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_resilience.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_session.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_slack_approval.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_telegram_approval.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_unknown_user.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/agentmail.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/bot.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/botos.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/discord.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/email.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/media.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/slack.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/telegram.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/whatsapp.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/agent.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/benchmark.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/cdp_agent.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/cdp_utils.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/diagnostics.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/launcher.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/playwright_agent.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/profiling.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/protocol.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/report.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/server.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/sessions.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/video.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/claw/default_app.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/app.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/branding.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/context.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/gateway.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/configuration/loader.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/configuration/paths.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/configuration/schema.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/execution/core.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/execution/profiler.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/execution/request.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/execution/result.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/action_orchestrator.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/agents.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/at_mentions.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/audit_cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/auto_memory.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/auto_mode.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/autonomy_mode.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/base.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/benchmark.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/capabilities.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/checkpoints.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/cli_profiler.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/code_intelligence.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/compaction.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/compare.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/config_hierarchy.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/context_manager.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/cost_tracker.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/csv_test_runner.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/debug.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/diag.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/display_jsonl.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/engine.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/formatters.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/handler.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/models.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/examples.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/external_agents.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/fast_context.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/file_history.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/flow_display.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/gateway.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/git_attribution.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/git_integration.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/guardrail.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/handoff.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/hooks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/hybrid_workflow.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/image.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/interactive_core_headless.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/interactive_runtime.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/interactive_test_harness.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/interactive_tools.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/interactive_tui.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/jobs.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/knowledge.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/knowledge_cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/lite.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/logs.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/lsp_cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/lsp_diagnostics.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/mcp.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/message_queue.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/metrics.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/migrate.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/migration_flow.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/migration_spec.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/n8n.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/observability.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/output_modes.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/output_style.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/package.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/performance.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/plugin_cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/profile.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/profiler/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/profiler/core.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/profiler/optimizations.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/profiler/suite.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/profiling.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/queue/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/queue/manager.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/queue/models.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/queue/persistence.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/queue/scheduler.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/queue/worker.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/recipe_creator.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/recipe_prompts.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/recipes.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/repo_map.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/router.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/safe_shell.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/sandbox_cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/sandbox_executor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/sdk_knowledge.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/session.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/setup/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/setup/handler.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/setup/templates.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/skills.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/slash_commands.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/telemetry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/thinking.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/todo.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/config.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/debug.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/events.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/mock_provider.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/orchestrator.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/screens/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/screens/help.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/screens/main.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/screens/queue.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/screens/session.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/screens/settings.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/session_store.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/chat.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/composer.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/status.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/wizard.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/yaml_utils.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/config.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/events.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/frontends/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/praison_io.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/repl.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/split_tui.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/tui_app.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/legacy.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/output/console.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/session/unified.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/state/identifiers.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/state/sessions.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/ui/config.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/ui/events.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/ui/mg_backend.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/ui/plain.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/ui/rich_backend.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli_backends/claude.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli_backends/registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/config.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/history_store.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/queue.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/setup.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/daemon/launchd.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/daemon/systemd.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/daemon/windows.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/db/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/db/adapter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/docker.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/doctor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/main.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/providers/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/providers/aws.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/providers/azure.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/providers/base.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/providers/gcp.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/classifier.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/executor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/extractor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/reporter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/runner.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/workspace.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/client.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/converter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/framework_adapters/registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/auth.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/cookie_auth.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/exec_approval.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/gateway_approval.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/magic_link.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/origin_check.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/pairing.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/push_channels.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/push_delivery.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/push_polling.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/push_presence.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/rate_limiter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/redis_pubsub.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/server.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/inc/config.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/inc/models.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/managed_local.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/jobs/models.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/jobs/router.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/jobs/server.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/jobs/store.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/llm/registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/agents.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/capabilities.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/knowledge.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/memory.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/prompts.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/resources.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/auth/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/auth/api_key.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/auth/oauth.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/auth/oidc.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/auth/scopes.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/elicitation.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/icons.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/recipe_adapter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/recipe_cli.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/sampling.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/server.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/tasks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/tool_index.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/transports/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/transports/http_stream.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/transports/stdio.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/n8n/client.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/config.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/tests/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/tests/test_all_backends.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/profiler.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/push/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/push/client.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/push/transports.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/core.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/history.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/models.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/security.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/server.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/applier.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/judge.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/plan.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/player.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/reader.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/storage.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/writer.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/daytona.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/docker.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/modal.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/sandlock.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/ssh.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/subprocess.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/security/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/security/audit.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/security/injection.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/security/protected.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/setup/build.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/setup.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/config.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/enhanced_templates.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/manifest.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/models.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/cache.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/loader.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/security.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/tool_override.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tool_registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tool_resolver.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tools/audio.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/agents/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/agents/grader.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/agents/hook.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/agents/models.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/agents/orchestrator.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/agents/storage.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/llm/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/llm/trainer.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui/callbacks.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui/context.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/upload_vision.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/setup.cfg +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_approval_system.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_basic.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_cli_features.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_n8n_agent_invoke.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_recipe.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_registry.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_runner.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.6.32 → praisonai-4.6.34}/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.34
|
|
4
4
|
Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
|
|
5
5
|
Author: Mervin Praison
|
|
6
6
|
License: MIT
|
|
@@ -11,7 +11,7 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=1.6.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.34
|
|
15
15
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
16
|
Requires-Dist: litellm<=1.82.6,>=1.81.0
|
|
17
17
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.34
|
|
4
4
|
Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
|
|
5
5
|
Author: Mervin Praison
|
|
6
6
|
License: MIT
|
|
@@ -11,7 +11,7 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=1.6.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.34
|
|
15
15
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
16
|
Requires-Dist: litellm<=1.82.6,>=1.81.0
|
|
17
17
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Safe module loader with PRAISONAI_ALLOW_LOCAL_TOOLS opt-in.
|
|
3
|
+
|
|
4
|
+
This module provides a safe way to load user-supplied .py files with the same
|
|
5
|
+
security posture as tool_resolver.py. All exec_module() calls should route
|
|
6
|
+
through this helper to ensure consistent opt-in behavior.
|
|
7
|
+
"""
|
|
8
|
+
import importlib.util
|
|
9
|
+
import logging
|
|
10
|
+
import os
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
from types import ModuleType
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class LocalToolsDisabled(RuntimeError):
|
|
18
|
+
"""Raised when local tools loading is disabled but required."""
|
|
19
|
+
pass
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def load_user_module(module_path: str | Path, *, name: str) -> ModuleType | None:
|
|
23
|
+
"""Load a user-supplied .py file with the same opt-in tool_resolver enforces.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
module_path: Path to the .py file to load
|
|
27
|
+
name: Module name to use for the spec
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
Loaded module or None if loading is disabled or the file is missing.
|
|
31
|
+
|
|
32
|
+
Raises:
|
|
33
|
+
LocalToolsDisabled: If caller wants strict behavior when disabled.
|
|
34
|
+
"""
|
|
35
|
+
if os.environ.get("PRAISONAI_ALLOW_LOCAL_TOOLS", "").lower() != "true":
|
|
36
|
+
logger.warning(
|
|
37
|
+
"Refusing to exec %s: set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable.",
|
|
38
|
+
module_path,
|
|
39
|
+
)
|
|
40
|
+
return None
|
|
41
|
+
|
|
42
|
+
path = Path(module_path).resolve()
|
|
43
|
+
if not path.is_file():
|
|
44
|
+
return None
|
|
45
|
+
|
|
46
|
+
# Optional: enforce that the path is under CWD or an explicit allowlist
|
|
47
|
+
# to prevent ../-style traversal from API/network inputs.
|
|
48
|
+
cwd = Path.cwd().resolve()
|
|
49
|
+
try:
|
|
50
|
+
path.relative_to(cwd)
|
|
51
|
+
except ValueError:
|
|
52
|
+
logger.warning("Refusing to exec %s: outside working directory.", path)
|
|
53
|
+
return None
|
|
54
|
+
|
|
55
|
+
spec = importlib.util.spec_from_file_location(name, str(path))
|
|
56
|
+
if spec is None or spec.loader is None:
|
|
57
|
+
return None
|
|
58
|
+
|
|
59
|
+
module = importlib.util.module_from_spec(spec)
|
|
60
|
+
spec.loader.exec_module(module)
|
|
61
|
+
return module
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def load_user_module_strict(module_path: str | Path, *, name: str) -> ModuleType:
|
|
65
|
+
"""Load a user-supplied .py file, raising LocalToolsDisabled if disabled.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
module_path: Path to the .py file to load
|
|
69
|
+
name: Module name to use for the spec
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
Loaded module
|
|
73
|
+
|
|
74
|
+
Raises:
|
|
75
|
+
LocalToolsDisabled: If PRAISONAI_ALLOW_LOCAL_TOOLS is not set to 'true'
|
|
76
|
+
FileNotFoundError: If the file doesn't exist
|
|
77
|
+
"""
|
|
78
|
+
if os.environ.get("PRAISONAI_ALLOW_LOCAL_TOOLS", "").lower() != "true":
|
|
79
|
+
raise LocalToolsDisabled(
|
|
80
|
+
f"Refusing to exec {module_path}: set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable."
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
path = Path(module_path).resolve()
|
|
84
|
+
if not path.is_file():
|
|
85
|
+
raise FileNotFoundError(f"Module file not found: {path}")
|
|
86
|
+
|
|
87
|
+
# Security: enforce that the path is under CWD
|
|
88
|
+
cwd = Path.cwd().resolve()
|
|
89
|
+
try:
|
|
90
|
+
path.relative_to(cwd)
|
|
91
|
+
except ValueError:
|
|
92
|
+
raise LocalToolsDisabled(f"Refusing to exec {path}: outside working directory.")
|
|
93
|
+
|
|
94
|
+
spec = importlib.util.spec_from_file_location(name, str(path))
|
|
95
|
+
if spec is None or spec.loader is None:
|
|
96
|
+
raise ImportError(f"Could not create spec for {path}")
|
|
97
|
+
|
|
98
|
+
module = importlib.util.module_from_spec(spec)
|
|
99
|
+
spec.loader.exec_module(module)
|
|
100
|
+
return module
|
|
@@ -351,6 +351,24 @@ class AgentsGenerator:
|
|
|
351
351
|
spec.loader.exec_module(module)
|
|
352
352
|
return {name: obj for name, obj in inspect.getmembers(module, self.is_function_or_decorated)}
|
|
353
353
|
|
|
354
|
+
def _extract_tool_classes(self, module):
|
|
355
|
+
"""
|
|
356
|
+
Extract tool classes from a loaded module that inherit from BaseTool
|
|
357
|
+
or are part of langchain_community.tools package.
|
|
358
|
+
"""
|
|
359
|
+
result = {}
|
|
360
|
+
for name, obj in inspect.getmembers(module,
|
|
361
|
+
lambda x: inspect.isclass(x) and (
|
|
362
|
+
x.__module__.startswith('langchain_community.tools') or
|
|
363
|
+
(PRAISONAI_TOOLS_AVAILABLE and BaseTool and issubclass(x, BaseTool))
|
|
364
|
+
) and x is not BaseTool):
|
|
365
|
+
try:
|
|
366
|
+
result[name] = obj()
|
|
367
|
+
except Exception as e:
|
|
368
|
+
self.logger.warning(f"Error instantiating tool class {name}: {e}")
|
|
369
|
+
continue
|
|
370
|
+
return result
|
|
371
|
+
|
|
354
372
|
def load_tools_from_module_class(self, module_path):
|
|
355
373
|
"""
|
|
356
374
|
Loads tools from a specified module path containing classes that inherit from BaseTool
|
|
@@ -403,16 +421,13 @@ class AgentsGenerator:
|
|
|
403
421
|
"""
|
|
404
422
|
tools_list = []
|
|
405
423
|
try:
|
|
406
|
-
# Try to import tools.py from current directory
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
if
|
|
410
|
-
self.logger.debug("tools.py not found
|
|
424
|
+
# Try to import tools.py from current directory using safe loading
|
|
425
|
+
from ._safe_loader import load_user_module
|
|
426
|
+
module = load_user_module("tools.py", name="tools")
|
|
427
|
+
if module is None:
|
|
428
|
+
self.logger.debug("tools.py not found or local tools loading disabled")
|
|
411
429
|
return tools_list
|
|
412
430
|
|
|
413
|
-
module = importlib.util.module_from_spec(spec)
|
|
414
|
-
spec.loader.exec_module(module)
|
|
415
|
-
|
|
416
431
|
# Register functions in the tool registry instead of globals()
|
|
417
432
|
registered_tools = self.tool_registry.register_from_module(module)
|
|
418
433
|
tools_list = [self.tool_registry.get_function(name) for name in registered_tools]
|
|
@@ -532,11 +547,21 @@ class AgentsGenerator:
|
|
|
532
547
|
tools_dir_path = Path(root_directory) / 'tools'
|
|
533
548
|
|
|
534
549
|
if os.path.isfile(tools_py_path):
|
|
535
|
-
|
|
536
|
-
|
|
550
|
+
from ._safe_loader import load_user_module
|
|
551
|
+
module = load_user_module(tools_py_path, name="tools_module")
|
|
552
|
+
if module is not None:
|
|
553
|
+
tools_dict.update(self._extract_tool_classes(module))
|
|
554
|
+
self.logger.debug("tools.py exists in the root directory. Loading tools.py and skipping tools folder.")
|
|
537
555
|
elif tools_dir_path.is_dir():
|
|
538
|
-
|
|
539
|
-
|
|
556
|
+
from ._safe_loader import load_user_module
|
|
557
|
+
for py_file in tools_dir_path.glob("*.py"):
|
|
558
|
+
if py_file.name.startswith("__"):
|
|
559
|
+
continue
|
|
560
|
+
module = load_user_module(py_file, name=f"tools_{py_file.stem}")
|
|
561
|
+
if module is not None:
|
|
562
|
+
tools_dict.update(self._extract_tool_classes(module))
|
|
563
|
+
if tools_dict:
|
|
564
|
+
self.logger.debug("tools folder exists in the root directory")
|
|
540
565
|
|
|
541
566
|
framework = self.framework or config.get('framework', 'crewai')
|
|
542
567
|
|
|
@@ -69,11 +69,25 @@ tools_path = os.path.join(os.getcwd(), 'tools.py')
|
|
|
69
69
|
logger.debug(f"Tools path: {tools_path}")
|
|
70
70
|
|
|
71
71
|
def import_tools_from_file(file_path):
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
"""Import tools from file with PRAISONAI_ALLOW_LOCAL_TOOLS opt-in.
|
|
73
|
+
|
|
74
|
+
This function is reachable from network input via API requests.
|
|
75
|
+
Additional security: only allow files under the current working directory.
|
|
76
|
+
"""
|
|
77
|
+
from .._safe_loader import load_user_module_strict, LocalToolsDisabled
|
|
78
|
+
try:
|
|
79
|
+
custom_tools_module = load_user_module_strict(file_path, name="custom_tools")
|
|
80
|
+
logger.debug(f"Imported tools from {file_path}")
|
|
81
|
+
return custom_tools_module
|
|
82
|
+
except LocalToolsDisabled as e:
|
|
83
|
+
logger.warning(f"Tools loading disabled: {e}")
|
|
84
|
+
raise ValueError("Local tools loading disabled. Set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable.")
|
|
85
|
+
except FileNotFoundError as e:
|
|
86
|
+
logger.warning(f"Tools file not found: {e}")
|
|
87
|
+
raise ValueError(f"Tools file not found: {file_path}")
|
|
88
|
+
except Exception as e:
|
|
89
|
+
logger.error("Failed to import tools from %s", file_path, exc_info=True)
|
|
90
|
+
raise ValueError(f"Failed to import tools from {file_path}") from e
|
|
77
91
|
|
|
78
92
|
try:
|
|
79
93
|
# Security: Require explicit opt-in for local tools loading
|
|
@@ -116,7 +116,6 @@ class AsyncAgentScheduler:
|
|
|
116
116
|
|
|
117
117
|
self.is_running = False
|
|
118
118
|
self._task: Optional[asyncio.Task] = None
|
|
119
|
-
self._stop_event = asyncio.Event()
|
|
120
119
|
self._executor = AsyncPraisonAgentExecutor(agent)
|
|
121
120
|
self._execution_count = 0
|
|
122
121
|
self._success_count = 0
|
|
@@ -124,6 +123,7 @@ class AsyncAgentScheduler:
|
|
|
124
123
|
|
|
125
124
|
# Sync lock for async primitives creation and bound loop tracking
|
|
126
125
|
self._primitives_lock = threading.Lock()
|
|
126
|
+
self._stop_event: Optional[asyncio.Event] = None
|
|
127
127
|
self._cancel_event: Optional[asyncio.Event] = None
|
|
128
128
|
self._stats_lock: Optional[asyncio.Lock] = None
|
|
129
129
|
self._bound_loop: Optional[asyncio.AbstractEventLoop] = None
|
|
@@ -138,6 +138,7 @@ class AsyncAgentScheduler:
|
|
|
138
138
|
|
|
139
139
|
with self._primitives_lock:
|
|
140
140
|
if self._bound_loop is not loop:
|
|
141
|
+
self._stop_event = asyncio.Event()
|
|
141
142
|
self._cancel_event = asyncio.Event()
|
|
142
143
|
self._stats_lock = asyncio.Lock()
|
|
143
144
|
self._bound_loop = loop
|
|
@@ -167,6 +168,7 @@ class AsyncAgentScheduler:
|
|
|
167
168
|
try:
|
|
168
169
|
interval = ScheduleParser.parse(schedule_expr)
|
|
169
170
|
self.is_running = True
|
|
171
|
+
self._ensure_async_primitives() # NEW — bind to the loop start() runs on
|
|
170
172
|
self._stop_event.clear()
|
|
171
173
|
|
|
172
174
|
logger.info(f"Starting async agent scheduler: {getattr(self.agent, 'name', 'Agent')}")
|
|
@@ -208,19 +210,22 @@ class AsyncAgentScheduler:
|
|
|
208
210
|
logger.info("Async scheduler is not running")
|
|
209
211
|
return True
|
|
210
212
|
|
|
213
|
+
logger.info("Stopping async agent scheduler...")
|
|
214
|
+
|
|
215
|
+
# _stop_event is guaranteed non-None after a successful start()
|
|
216
|
+
if self._stop_event is None:
|
|
217
|
+
logger.warning("stop() called before start(); nothing to stop.")
|
|
218
|
+
self.is_running = False
|
|
219
|
+
return True
|
|
220
|
+
|
|
211
221
|
# Ensure we're on the same loop that was bound during start()
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
)
|
|
219
|
-
except RuntimeError:
|
|
220
|
-
# No running loop - this is fine if scheduler was never started
|
|
221
|
-
pass
|
|
222
|
+
current_loop = asyncio.get_running_loop()
|
|
223
|
+
if self._bound_loop is not None and current_loop is not self._bound_loop:
|
|
224
|
+
raise RuntimeError(
|
|
225
|
+
"stop() must be called from the same event loop as start(). "
|
|
226
|
+
f"Expected: {self._bound_loop}, got: {current_loop}"
|
|
227
|
+
)
|
|
222
228
|
|
|
223
|
-
logger.info("Stopping async agent scheduler...")
|
|
224
229
|
self._stop_event.set()
|
|
225
230
|
|
|
226
231
|
try:
|
|
@@ -266,6 +271,7 @@ class AsyncAgentScheduler:
|
|
|
266
271
|
async def _run_schedule(self, interval: int, max_retries: int):
|
|
267
272
|
"""Internal method to run scheduled agent executions."""
|
|
268
273
|
try:
|
|
274
|
+
self._ensure_async_primitives()
|
|
269
275
|
while not self._stop_event.is_set():
|
|
270
276
|
logger.info(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Starting async scheduled agent execution")
|
|
271
277
|
|
|
@@ -649,42 +649,28 @@ class AutoGenerator(BaseAutoGenerator):
|
|
|
649
649
|
# Initialize base class first (handles config_list and client)
|
|
650
650
|
super().__init__(config_list=config_list)
|
|
651
651
|
|
|
652
|
-
# Validate framework availability
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
raise ImportError(
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
""
|
|
674
|
-
|
|
675
|
-
# Only show tools message if using a framework and tools are needed
|
|
676
|
-
if (framework in ["crewai", "autogen"]) and not _check_praisonai_tools_available():
|
|
677
|
-
if framework == "autogen":
|
|
678
|
-
logger.warning("""
|
|
679
|
-
Tools are not available for autogen. To use tools, install:
|
|
680
|
-
pip install "praisonai[autogen]" for v0.2
|
|
681
|
-
pip install "praisonai[autogen-v4]" for v0.4
|
|
682
|
-
""")
|
|
683
|
-
else:
|
|
684
|
-
logger.warning(f"""
|
|
685
|
-
Tools are not available for {framework}. To use tools, install:
|
|
686
|
-
pip install "praisonai[{framework}]"
|
|
687
|
-
""")
|
|
652
|
+
# Validate framework availability using adapter registry
|
|
653
|
+
from .framework_adapters.registry import FrameworkAdapterRegistry
|
|
654
|
+
|
|
655
|
+
registry = FrameworkAdapterRegistry.get_instance()
|
|
656
|
+
try:
|
|
657
|
+
adapter = registry.create(framework)
|
|
658
|
+
except ValueError as e:
|
|
659
|
+
raise ImportError(
|
|
660
|
+
f"Unknown framework '{framework}'. Available frameworks: "
|
|
661
|
+
f"{', '.join(registry.list_registered())}"
|
|
662
|
+
) from e
|
|
663
|
+
|
|
664
|
+
# Use safe fallbacks for new adapter attributes
|
|
665
|
+
install_hint = getattr(adapter, "install_hint", f"pip install {framework}")
|
|
666
|
+
requires_tools_extra = bool(getattr(adapter, "requires_tools_extra", False))
|
|
667
|
+
|
|
668
|
+
if not adapter.is_available():
|
|
669
|
+
raise ImportError(f"{adapter.name} is not installed. Please install with:\n {install_hint}")
|
|
670
|
+
|
|
671
|
+
# Check tools availability if required by this framework
|
|
672
|
+
if requires_tools_extra and not _check_praisonai_tools_available():
|
|
673
|
+
logger.warning(f"Tools are not available for {framework}. To use tools, install:\n {install_hint}")
|
|
688
674
|
|
|
689
675
|
self.topic = topic
|
|
690
676
|
self.agent_file = agent_file
|
|
@@ -233,19 +233,14 @@ async function decide(d) {{
|
|
|
233
233
|
)
|
|
234
234
|
|
|
235
235
|
def request_approval_sync(self, request) -> Any:
|
|
236
|
-
"""Synchronous wrapper —
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
with concurrent.futures.ThreadPoolExecutor(max_workers=1) as pool:
|
|
245
|
-
future = pool.submit(asyncio.run, self.request_approval(request))
|
|
246
|
-
return future.result(timeout=self._timeout + 10)
|
|
247
|
-
else:
|
|
248
|
-
return asyncio.run(self.request_approval(request))
|
|
236
|
+
"""Synchronous wrapper — delegates to the shared async bridge."""
|
|
237
|
+
from .._async_bridge import run_sync
|
|
238
|
+
# run_sync raises RuntimeError if called from a running loop, so callers
|
|
239
|
+
# in async contexts get a clear error instead of a silent thread cold-start.
|
|
240
|
+
return run_sync(
|
|
241
|
+
self.request_approval(request),
|
|
242
|
+
timeout=self._timeout + 10,
|
|
243
|
+
)
|
|
249
244
|
|
|
250
245
|
async def shutdown(self) -> None:
|
|
251
246
|
"""Stop the HTTP server gracefully."""
|
|
@@ -178,19 +178,14 @@ class WebhookApproval:
|
|
|
178
178
|
)
|
|
179
179
|
|
|
180
180
|
def request_approval_sync(self, request) -> Any:
|
|
181
|
-
"""Synchronous wrapper —
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
with concurrent.futures.ThreadPoolExecutor(max_workers=1) as pool:
|
|
190
|
-
future = pool.submit(asyncio.run, self.request_approval(request))
|
|
191
|
-
return future.result(timeout=self._timeout + 10)
|
|
192
|
-
else:
|
|
193
|
-
return asyncio.run(self.request_approval(request))
|
|
181
|
+
"""Synchronous wrapper — delegates to the shared async bridge."""
|
|
182
|
+
from .._async_bridge import run_sync
|
|
183
|
+
# run_sync raises RuntimeError if called from a running loop, so callers
|
|
184
|
+
# in async contexts get a clear error instead of a silent thread cold-start.
|
|
185
|
+
return run_sync(
|
|
186
|
+
self.request_approval(request),
|
|
187
|
+
timeout=self._timeout + 10,
|
|
188
|
+
)
|
|
194
189
|
|
|
195
190
|
# ── Polling ─────────────────────────────────────────────────────────
|
|
196
191
|
|
|
@@ -294,8 +294,30 @@ class JobWorkflowExecutor:
|
|
|
294
294
|
return {"ok": True, "output": result.stdout.strip()}
|
|
295
295
|
|
|
296
296
|
def _exec_inline_python(self, code: str, step: Dict, flags: Dict) -> Dict:
|
|
297
|
-
"""Execute
|
|
298
|
-
|
|
297
|
+
"""Execute Python code safely using AST validation.
|
|
298
|
+
|
|
299
|
+
Supports both expressions and limited statements for backward compatibility.
|
|
300
|
+
"""
|
|
301
|
+
import ast
|
|
302
|
+
|
|
303
|
+
# Allowed AST node types for safe execution
|
|
304
|
+
_ALLOWED_NODES = (
|
|
305
|
+
# Expressions
|
|
306
|
+
ast.Expression, ast.BoolOp, ast.BinOp, ast.UnaryOp, ast.Compare,
|
|
307
|
+
ast.IfExp, ast.Constant, ast.Name, ast.Load, ast.Store, ast.Subscript,
|
|
308
|
+
ast.List, ast.Tuple, ast.Dict, ast.Set,
|
|
309
|
+
ast.And, ast.Or, ast.Not, ast.Eq, ast.NotEq, ast.Lt, ast.LtE,
|
|
310
|
+
ast.Gt, ast.GtE, ast.In, ast.NotIn, ast.Add, ast.Sub, ast.Mult,
|
|
311
|
+
ast.Div, ast.Mod, ast.FloorDiv, ast.USub, ast.UAdd,
|
|
312
|
+
# Calls and attribute access (security enforced via safe builtins whitelist)
|
|
313
|
+
ast.Call, ast.Attribute, ast.keyword, ast.Starred,
|
|
314
|
+
# Limited statements for backward compatibility
|
|
315
|
+
ast.Module, ast.Assign, ast.Import, ast.ImportFrom,
|
|
316
|
+
ast.alias,
|
|
317
|
+
)
|
|
318
|
+
|
|
319
|
+
# Safe builtins whitelist — no __import__, exec, eval, open, compile
|
|
320
|
+
_SAFE_BUILTINS = {
|
|
299
321
|
"True": True, "False": False, "None": None,
|
|
300
322
|
"int": int, "float": float, "str": str, "bool": bool,
|
|
301
323
|
"list": list, "dict": dict, "tuple": tuple, "set": set,
|
|
@@ -305,20 +327,64 @@ class JobWorkflowExecutor:
|
|
|
305
327
|
"min": min, "max": max, "sum": sum, "abs": abs, "round": round,
|
|
306
328
|
"isinstance": isinstance, "type": type,
|
|
307
329
|
"print": print, "repr": repr,
|
|
308
|
-
"hasattr": hasattr, "getattr": getattr,
|
|
330
|
+
"hasattr": hasattr, "getattr": getattr,
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
# Safe namespace with whitelisted environment variables only
|
|
334
|
+
safe_env = {
|
|
335
|
+
k: v for k, v in os.environ.items()
|
|
336
|
+
if k.startswith(('PRAISON', 'HOME', 'USER', 'PATH')) and
|
|
337
|
+
not k.upper().endswith(('KEY', 'SECRET', 'TOKEN', 'PASSWORD'))
|
|
309
338
|
}
|
|
339
|
+
|
|
310
340
|
namespace = {
|
|
311
341
|
"flags": flags,
|
|
312
342
|
"vars": {k: self._resolve_var_value(v) for k, v in self._vars.items()},
|
|
313
|
-
"env":
|
|
343
|
+
"env": safe_env, # Whitelisted env vars only
|
|
314
344
|
"cwd": self._cwd,
|
|
315
|
-
"__builtins__":
|
|
345
|
+
"__builtins__": _SAFE_BUILTINS,
|
|
316
346
|
}
|
|
347
|
+
|
|
317
348
|
try:
|
|
318
|
-
|
|
319
|
-
|
|
349
|
+
# First try parsing as expression
|
|
350
|
+
try:
|
|
351
|
+
tree = ast.parse(code.strip(), mode="eval")
|
|
352
|
+
is_expression = True
|
|
353
|
+
except SyntaxError:
|
|
354
|
+
# Fall back to exec mode for statements
|
|
355
|
+
tree = ast.parse(code.strip(), mode="exec")
|
|
356
|
+
is_expression = False
|
|
357
|
+
|
|
358
|
+
# Validate all nodes are in allowlist
|
|
359
|
+
for node in ast.walk(tree):
|
|
360
|
+
if not isinstance(node, _ALLOWED_NODES):
|
|
361
|
+
return {"ok": False, "error": f"Disallowed code node: {type(node).__name__}. Only safe expressions and limited statements are allowed."}
|
|
362
|
+
|
|
363
|
+
# Additional safety checks for imports
|
|
364
|
+
if isinstance(node, (ast.Import, ast.ImportFrom)):
|
|
365
|
+
# Only allow standard library modules commonly used in workflows
|
|
366
|
+
allowed_modules = {'os', 'datetime', 'time', 'json', 'math', 're', 'collections', 'itertools'}
|
|
367
|
+
if isinstance(node, ast.Import):
|
|
368
|
+
for alias in node.names:
|
|
369
|
+
if alias.name.split('.')[0] not in allowed_modules:
|
|
370
|
+
return {"ok": False, "error": f"Import of '{alias.name}' not allowed. Only standard library modules are permitted."}
|
|
371
|
+
elif node.module and node.module.split('.')[0] not in allowed_modules:
|
|
372
|
+
return {"ok": False, "error": f"Import of '{node.module}' not allowed. Only standard library modules are permitted."}
|
|
373
|
+
|
|
374
|
+
# Execute within safe namespace
|
|
375
|
+
if is_expression:
|
|
376
|
+
result = eval(compile(tree, "<workflow>", "eval"), namespace)
|
|
377
|
+
return {"ok": True, "output": str(result)}
|
|
378
|
+
else:
|
|
379
|
+
exec(compile(tree, "<workflow>", "exec"), namespace)
|
|
380
|
+
# Return the 'result' variable if it was set (backward compatibility)
|
|
381
|
+
result = namespace.get("result", "")
|
|
382
|
+
return {"ok": True, "output": str(result)}
|
|
383
|
+
|
|
384
|
+
except SyntaxError as e:
|
|
385
|
+
return {"ok": False, "error": f"Syntax error: {e}"}
|
|
320
386
|
except Exception as e:
|
|
321
|
-
return {"ok": False, "error":
|
|
387
|
+
return {"ok": False, "error": f"Evaluation error: {e}"}
|
|
322
388
|
|
|
323
389
|
def _exec_action(self, action_name: str, step: Dict, flags: Dict) -> Dict:
|
|
324
390
|
"""
|