PraisonAI 4.6.47__tar.gz → 4.6.50__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.47 → praisonai-4.6.50}/PKG-INFO +3 -3
- {praisonai-4.6.47 → praisonai-4.6.50}/PraisonAI.egg-info/PKG-INFO +3 -3
- {praisonai-4.6.47 → praisonai-4.6.50}/PraisonAI.egg-info/SOURCES.txt +12 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/PraisonAI.egg-info/requires.txt +1 -1
- {praisonai-4.6.47 → praisonai-4.6.50}/README.md +1 -1
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_async_bridge.py +22 -15
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_registry.py +53 -44
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/agents_generator.py +31 -12
- praisonai-4.6.50/praisonai/async_agent_scheduler.py +23 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/auto.py +6 -36
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_config_schema.py +10 -4
- praisonai-4.6.50/praisonai/bots/_typing_indicator.py +116 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/telegram.py +26 -10
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/claw/default_app.py +2 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/app.py +2 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/gateway.py +48 -2
- praisonai-4.6.50/praisonai/cli/commands/kanban.py +452 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/bot_checks.py +138 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/gateway.py +105 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/interactive_tools.py +46 -33
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/onboard.py +347 -170
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/deploy.py +75 -45
- praisonai-4.6.50/praisonai/gateway/kanban_dispatcher.py +417 -0
- praisonai-4.6.50/praisonai/gateway/port_utils.py +216 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/server.py +67 -12
- praisonai-4.6.50/praisonai/gateway/unicode_utils.py +167 -0
- praisonai-4.6.50/praisonai/integration/bridges/kanban_bridge.py +113 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/host_app.py +6 -1
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/managed_local.py +11 -5
- praisonai-4.6.50/praisonai/kanban/__init__.py +12 -0
- praisonai-4.6.50/praisonai/kanban/models.py +198 -0
- praisonai-4.6.50/praisonai/kanban/paths.py +71 -0
- praisonai-4.6.50/praisonai/kanban/sqlite_store.py +565 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/_valkey_client.py +4 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/hooks/agent_hooks.py +103 -7
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/orchestrator.py +159 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/sandbox/docker.py +15 -1
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/sandbox/ssh.py +17 -7
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/scheduler/__init__.py +6 -0
- {praisonai-4.6.47/praisonai → praisonai-4.6.50/praisonai/scheduler}/async_agent_scheduler.py +272 -54
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/tool_registry.py +57 -22
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/tool_resolver.py +26 -27
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/tools/__init__.py +12 -0
- praisonai-4.6.50/praisonai/tools/kanban_tools.py +399 -0
- praisonai-4.6.50/praisonai/version.py +1 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/pyproject.toml +1 -1
- praisonai-4.6.47/praisonai/version.py +0 -1
- {praisonai-4.6.47 → praisonai-4.6.50}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/__main__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_dev/parity/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_dev/parity/docs_extractor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_dev/parity/docs_generator.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_dev/parity/generator.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_dev/parity/python_extractor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_dev/parity/rust_extractor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_dev/parity/topic_normalizer.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_dev/parity/typescript_extractor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_entrypoint.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_framework_availability.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_logging.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/_safe_loader.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/acp/config.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/acp/server.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/acp/session.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/agent.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/api/agent_invoke.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/api/call.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/app/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/app/agentos.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_ack.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_approval.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_approval_base.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_auth.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_chunk.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_commands.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_debounce.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_defaults.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_discord_approval.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_dlq.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_email_utils.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_http_approval.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_mirror.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_pairing_ui.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_protocol_mixin.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_rate_limit.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_resilience.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_session.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_slack_approval.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_telegram_approval.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_unknown_user.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_webhook_approval.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/agentmail.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/bot.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/botos.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/discord.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/email.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/linear.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/media.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/slack.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/bots/whatsapp.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/agent.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/benchmark.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/cdp_agent.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/cdp_utils.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/diagnostics.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/launcher.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/playwright_agent.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/profiling.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/protocol.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/report.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/server.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/sessions.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/browser/video.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/branding.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/context.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/configuration/loader.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/configuration/paths.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/configuration/schema.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/execution/core.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/execution/profiler.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/execution/request.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/execution/result.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/action_orchestrator.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/agents.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/at_mentions.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/audit_cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/auto_memory.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/auto_mode.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/autonomy_mode.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/base.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/benchmark.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/capabilities.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/checkpoints.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/cli_profiler.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/code_intelligence.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/compaction.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/compare.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/config_hierarchy.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/context_manager.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/cost_tracker.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/csv_test_runner.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/debug.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/diag.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/display_jsonl.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/engine.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/formatters.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/handler.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/models.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/doctor/registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/examples.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/external_agents.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/fast_context.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/file_history.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/flow_display.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/git_attribution.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/git_integration.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/guardrail.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/handoff.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/hooks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/hybrid_workflow.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/image.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/interactive_core_headless.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/interactive_runtime.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/interactive_test_harness.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/interactive_tui.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/job_workflow.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/jobs.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/knowledge.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/knowledge_cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/lite.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/logs.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/lsp_cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/lsp_diagnostics.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/mcp.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/message_queue.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/metrics.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/migrate.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/migration_flow.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/migration_spec.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/n8n.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/observability.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/output_modes.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/output_style.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/package.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/performance.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/plugin_cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/profile.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/profiler/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/profiler/core.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/profiler/optimizations.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/profiler/suite.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/profiling.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/queue/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/queue/manager.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/queue/models.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/queue/persistence.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/queue/scheduler.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/queue/worker.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/recipe_creator.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/recipe_prompts.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/recipes.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/repo_map.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/router.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/safe_shell.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/sandbox_cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/sandbox_executor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/sdk_knowledge.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/session.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/setup/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/setup/handler.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/setup/templates.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/skills.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/slash_commands.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/telemetry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/thinking.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/todo.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/config.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/debug.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/events.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/mock_provider.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/orchestrator.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/screens/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/screens/help.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/screens/main.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/screens/queue.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/screens/session.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/screens/settings.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/session_store.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/widgets/chat.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/widgets/composer.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/widgets/status.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/wizard.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/features/yaml_utils.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/interactive/config.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/interactive/events.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/interactive/frontends/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/interactive/praison_io.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/interactive/repl.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/interactive/split_tui.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/interactive/tui_app.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/legacy.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/main.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/output/console.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/session/unified.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/state/identifiers.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/state/sessions.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/ui/config.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/ui/events.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/ui/mg_backend.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/ui/plain.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/ui/rich_backend.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli_backends/claude.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/cli_backends/registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/context/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/context/config.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/context/history_store.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/context/queue.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/context/setup.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/daemon/launchd.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/daemon/systemd.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/daemon/windows.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/db/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/db/adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/deploy/api.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/deploy/docker.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/deploy/doctor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/deploy/main.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/deploy/models.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/deploy/providers/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/deploy/providers/aws.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/deploy/providers/azure.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/deploy/providers/base.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/deploy/providers/gcp.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/deploy/schema.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/docs_runner/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/docs_runner/classifier.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/docs_runner/executor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/docs_runner/extractor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/docs_runner/reporter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/docs_runner/runner.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/docs_runner/workspace.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/flow/client.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/flow/converter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/framework_adapters/autogen_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/framework_adapters/base.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/framework_adapters/crewai_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/framework_adapters/registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/framework_adapters/validators.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/auth.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/cookie_auth.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/exec_approval.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/gateway_approval.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/magic_link.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/origin_check.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/pairing.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/pairing_routes.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/push_channels.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/push_delivery.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/push_polling.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/push_presence.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/rate_limiter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/gateway/redis_pubsub.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/inc/config.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/inc/models.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/_legacy_handlers.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/context_files.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/base.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/jobs/models.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/jobs/router.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/jobs/server.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/jobs/store.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/llm/env.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/llm/registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/adapters/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/adapters/agents.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/adapters/capabilities.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/adapters/knowledge.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/adapters/memory.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/adapters/prompts.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/adapters/resources.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/auth/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/auth/api_key.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/auth/oauth.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/auth/oidc.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/auth/scopes.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/elicitation.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/icons.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/recipe_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/recipe_cli.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/sampling.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/server.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/tasks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/tool_index.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/transports/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/transports/http_stream.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/mcp_server/transports/stdio.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/n8n/client.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/config.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/tests/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/tests/test_all_backends.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/profiler.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/push/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/push/client.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/push/transports.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/recipe/core.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/recipe/history.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/recipe/models.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/recipe/security.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/recipe/server.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/replay/applier.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/replay/judge.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/replay/plan.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/replay/player.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/replay/reader.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/replay/storage.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/replay/writer.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/sandbox/_compat.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/sandbox/_shell.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/sandbox/daytona.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/sandbox/e2b.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/sandbox/modal.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/sandbox/sandlock.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/sandbox/subprocess.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/security/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/security/audit.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/security/injection.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/security/protected.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/setup/build.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/setup.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/config.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/enhanced_templates.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/manifest.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/models.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/templates/cache.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/templates/loader.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/templates/registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/templates/security.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/templates/tool_override.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/test.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/tools/audio.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/train/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/train/_ollama.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/train/agents/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/train/agents/grader.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/train/agents/hook.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/train/agents/models.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/train/agents/orchestrator.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/train/agents/storage.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/train/llm/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/train/llm/trainer.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/train.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/train_vision.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui/callbacks.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui/components/aicoder.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui/context.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/praisonai/upload_vision.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/setup.cfg +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_approval_system.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_basic.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_cli_features.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_n8n_agent_invoke.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_recipe.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_registry.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_runner.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.6.47 → praisonai-4.6.50}/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.50
|
|
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.50
|
|
15
15
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
16
|
Requires-Dist: litellm<2,>=1.83.14
|
|
17
17
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -564,7 +564,7 @@ praisonai flow
|
|
|
564
564
|
|
|
565
565
|
Open **http://localhost:7861** — use the **Agent** and **Agent Team** components to create sequential or parallel workflows. Connect Chat Input → Agent Team → Chat Output for instant multi-agent pipelines.
|
|
566
566
|
|
|
567
|
-
> 📖 [Full Flow docs](https://docs.praison.ai/docs/concepts/
|
|
567
|
+
> 📖 [Full Flow docs](https://docs.praison.ai/docs/concepts/agentflow) — visual agent building, component reference, and deployment
|
|
568
568
|
|
|
569
569
|
### 8. PraisonAI UI 🤖 (Clean Chat)
|
|
570
570
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.50
|
|
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.50
|
|
15
15
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
16
|
Requires-Dist: litellm<2,>=1.83.14
|
|
17
17
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -564,7 +564,7 @@ praisonai flow
|
|
|
564
564
|
|
|
565
565
|
Open **http://localhost:7861** — use the **Agent** and **Agent Team** components to create sequential or parallel workflows. Connect Chat Input → Agent Team → Chat Output for instant multi-agent pipelines.
|
|
566
566
|
|
|
567
|
-
> 📖 [Full Flow docs](https://docs.praison.ai/docs/concepts/
|
|
567
|
+
> 📖 [Full Flow docs](https://docs.praison.ai/docs/concepts/agentflow) — visual agent building, component reference, and deployment
|
|
568
568
|
|
|
569
569
|
### 8. PraisonAI UI 🤖 (Clean Chat)
|
|
570
570
|
|
|
@@ -82,6 +82,7 @@ praisonai/bots/_resilience.py
|
|
|
82
82
|
praisonai/bots/_session.py
|
|
83
83
|
praisonai/bots/_slack_approval.py
|
|
84
84
|
praisonai/bots/_telegram_approval.py
|
|
85
|
+
praisonai/bots/_typing_indicator.py
|
|
85
86
|
praisonai/bots/_unknown_user.py
|
|
86
87
|
praisonai/bots/_webhook_approval.py
|
|
87
88
|
praisonai/bots/_whatsapp_web_adapter.py
|
|
@@ -182,6 +183,7 @@ praisonai/cli/commands/flow.py
|
|
|
182
183
|
praisonai/cli/commands/gateway.py
|
|
183
184
|
praisonai/cli/commands/github.py
|
|
184
185
|
praisonai/cli/commands/hooks.py
|
|
186
|
+
praisonai/cli/commands/kanban.py
|
|
185
187
|
praisonai/cli/commands/knowledge.py
|
|
186
188
|
praisonai/cli/commands/langextract.py
|
|
187
189
|
praisonai/cli/commands/langfuse.py
|
|
@@ -504,10 +506,12 @@ praisonai/gateway/auth.py
|
|
|
504
506
|
praisonai/gateway/cookie_auth.py
|
|
505
507
|
praisonai/gateway/exec_approval.py
|
|
506
508
|
praisonai/gateway/gateway_approval.py
|
|
509
|
+
praisonai/gateway/kanban_dispatcher.py
|
|
507
510
|
praisonai/gateway/magic_link.py
|
|
508
511
|
praisonai/gateway/origin_check.py
|
|
509
512
|
praisonai/gateway/pairing.py
|
|
510
513
|
praisonai/gateway/pairing_routes.py
|
|
514
|
+
praisonai/gateway/port_utils.py
|
|
511
515
|
praisonai/gateway/push_channels.py
|
|
512
516
|
praisonai/gateway/push_delivery.py
|
|
513
517
|
praisonai/gateway/push_polling.py
|
|
@@ -515,6 +519,7 @@ praisonai/gateway/push_presence.py
|
|
|
515
519
|
praisonai/gateway/rate_limiter.py
|
|
516
520
|
praisonai/gateway/redis_pubsub.py
|
|
517
521
|
praisonai/gateway/server.py
|
|
522
|
+
praisonai/gateway/unicode_utils.py
|
|
518
523
|
praisonai/inbuilt_tools/__init__.py
|
|
519
524
|
praisonai/inbuilt_tools/autogen_tools.py
|
|
520
525
|
praisonai/inc/__init__.py
|
|
@@ -528,6 +533,7 @@ praisonai/integration/host_app.py
|
|
|
528
533
|
praisonai/integration/bridges/__init__.py
|
|
529
534
|
praisonai/integration/bridges/approvals_bridge.py
|
|
530
535
|
praisonai/integration/bridges/hooks_query.py
|
|
536
|
+
praisonai/integration/bridges/kanban_bridge.py
|
|
531
537
|
praisonai/integration/bridges/schedules_runner.py
|
|
532
538
|
praisonai/integration/bridges/usage_bridge.py
|
|
533
539
|
praisonai/integration/bridges/workflows_service.py
|
|
@@ -562,6 +568,10 @@ praisonai/jobs/models.py
|
|
|
562
568
|
praisonai/jobs/router.py
|
|
563
569
|
praisonai/jobs/server.py
|
|
564
570
|
praisonai/jobs/store.py
|
|
571
|
+
praisonai/kanban/__init__.py
|
|
572
|
+
praisonai/kanban/models.py
|
|
573
|
+
praisonai/kanban/paths.py
|
|
574
|
+
praisonai/kanban/sqlite_store.py
|
|
565
575
|
praisonai/llm/__init__.py
|
|
566
576
|
praisonai/llm/env.py
|
|
567
577
|
praisonai/llm/registry.py
|
|
@@ -698,6 +708,7 @@ praisonai/sandbox/ssh.py
|
|
|
698
708
|
praisonai/sandbox/subprocess.py
|
|
699
709
|
praisonai/scheduler/__init__.py
|
|
700
710
|
praisonai/scheduler/agent_scheduler.py
|
|
711
|
+
praisonai/scheduler/async_agent_scheduler.py
|
|
701
712
|
praisonai/scheduler/base.py
|
|
702
713
|
praisonai/scheduler/daemon_manager.py
|
|
703
714
|
praisonai/scheduler/deployment.py
|
|
@@ -759,6 +770,7 @@ praisonai/tools/__init__.py
|
|
|
759
770
|
praisonai/tools/audio.py
|
|
760
771
|
praisonai/tools/glob_tool.py
|
|
761
772
|
praisonai/tools/grep_tool.py
|
|
773
|
+
praisonai/tools/kanban_tools.py
|
|
762
774
|
praisonai/tools/multiedit.py
|
|
763
775
|
praisonai/tools/skill_manage.py
|
|
764
776
|
praisonai/train/__init__.py
|
|
@@ -382,7 +382,7 @@ praisonai flow
|
|
|
382
382
|
|
|
383
383
|
Open **http://localhost:7861** — use the **Agent** and **Agent Team** components to create sequential or parallel workflows. Connect Chat Input → Agent Team → Chat Output for instant multi-agent pipelines.
|
|
384
384
|
|
|
385
|
-
> 📖 [Full Flow docs](https://docs.praison.ai/docs/concepts/
|
|
385
|
+
> 📖 [Full Flow docs](https://docs.praison.ai/docs/concepts/agentflow) — visual agent building, component reference, and deployment
|
|
386
386
|
|
|
387
387
|
### 8. PraisonAI UI 🤖 (Clean Chat)
|
|
388
388
|
|
|
@@ -31,12 +31,8 @@ class _BackgroundLoop:
|
|
|
31
31
|
server processes should call :func:`shutdown` explicitly to cancel
|
|
32
32
|
in-flight tasks before process exit.
|
|
33
33
|
"""
|
|
34
|
-
#
|
|
35
|
-
#
|
|
36
|
-
# that the only callers are :py:meth:`get` and :py:meth:`get_unlocked`
|
|
37
|
-
# (the latter only invoked from inside ``run_sync`` while holding
|
|
38
|
-
# the lock), this catches the "forgot to hold the lock" mistake.
|
|
39
|
-
assert self._lock.locked(), "_spawn_locked() requires self._lock to be held"
|
|
34
|
+
# Create the loop+thread; caller must hold self._lock.
|
|
35
|
+
# The lock contract is now enforced structurally by submit() method.
|
|
40
36
|
if self._loop is None or self._loop.is_closed():
|
|
41
37
|
self._loop = asyncio.new_event_loop()
|
|
42
38
|
self._thread = threading.Thread(
|
|
@@ -51,9 +47,11 @@ class _BackgroundLoop:
|
|
|
51
47
|
with self._lock:
|
|
52
48
|
return self._spawn_locked()
|
|
53
49
|
|
|
54
|
-
def
|
|
55
|
-
"""
|
|
56
|
-
|
|
50
|
+
def submit(self, coro):
|
|
51
|
+
"""Atomically (re)spawn loop if needed and submit coro. Returns concurrent.futures.Future."""
|
|
52
|
+
with self._lock:
|
|
53
|
+
loop = self._spawn_locked()
|
|
54
|
+
return asyncio.run_coroutine_threadsafe(coro, loop)
|
|
57
55
|
|
|
58
56
|
def shutdown(self, timeout: float = 5.0) -> None:
|
|
59
57
|
with self._lock:
|
|
@@ -77,7 +75,16 @@ class _BackgroundLoop:
|
|
|
77
75
|
self._loop = None
|
|
78
76
|
self._thread = None
|
|
79
77
|
|
|
80
|
-
_BG =
|
|
78
|
+
_BG: "_BackgroundLoop | None" = None
|
|
79
|
+
_BG_LOCK = threading.Lock()
|
|
80
|
+
|
|
81
|
+
def _get_bg() -> "_BackgroundLoop":
|
|
82
|
+
global _BG
|
|
83
|
+
if _BG is None:
|
|
84
|
+
with _BG_LOCK:
|
|
85
|
+
if _BG is None:
|
|
86
|
+
_BG = _BackgroundLoop()
|
|
87
|
+
return _BG
|
|
81
88
|
|
|
82
89
|
|
|
83
90
|
def run_sync(coro: Awaitable[T], *, timeout: float | None = _DEFAULT_TIMEOUT) -> T:
|
|
@@ -109,10 +116,8 @@ def run_sync(coro: Awaitable[T], *, timeout: float | None = _DEFAULT_TIMEOUT) ->
|
|
|
109
116
|
"await the coroutine directly instead."
|
|
110
117
|
)
|
|
111
118
|
|
|
112
|
-
# Submit the coroutine
|
|
113
|
-
|
|
114
|
-
loop = _BG.get_unlocked()
|
|
115
|
-
fut: Future = asyncio.run_coroutine_threadsafe(coro, loop)
|
|
119
|
+
# Submit the coroutine atomically
|
|
120
|
+
fut = _get_bg().submit(coro)
|
|
116
121
|
|
|
117
122
|
try:
|
|
118
123
|
return fut.result(timeout=timeout)
|
|
@@ -139,4 +144,6 @@ def run_sync(coro: Awaitable[T], *, timeout: float | None = _DEFAULT_TIMEOUT) ->
|
|
|
139
144
|
|
|
140
145
|
def shutdown() -> None:
|
|
141
146
|
"""Public hook for long-running server processes to stop the bridge cleanly."""
|
|
142
|
-
_BG
|
|
147
|
+
bg = _BG
|
|
148
|
+
if bg is not None:
|
|
149
|
+
bg.shutdown()
|
|
@@ -41,39 +41,28 @@ class PluginRegistry(Generic[T]):
|
|
|
41
41
|
builtins: Dict of name -> loader function for built-in plugins
|
|
42
42
|
"""
|
|
43
43
|
self._entry_point_group = entry_point_group
|
|
44
|
-
self.
|
|
44
|
+
self._loaders: Dict[str, Callable[[], Type[T]]] = {} # lazy loaders
|
|
45
|
+
self._items: Dict[str, Type[T]] = {} # resolved cache
|
|
45
46
|
self._aliases: Dict[str, str] = {} # alias -> canonical name
|
|
46
|
-
self._lock = threading.
|
|
47
|
+
self._lock = threading.RLock() # Use RLock for re-entrant access
|
|
47
48
|
|
|
48
|
-
#
|
|
49
|
+
# Store built-in loaders (normalized) without calling them
|
|
49
50
|
if builtins:
|
|
50
51
|
for name, loader in builtins.items():
|
|
51
|
-
|
|
52
|
-
self._items[name] = loader()
|
|
53
|
-
except ImportError:
|
|
54
|
-
# Built-in plugin dependencies not available, skip
|
|
55
|
-
pass
|
|
56
|
-
except Exception:
|
|
57
|
-
# Log other errors but don't crash initialization
|
|
58
|
-
logger.warning("Failed to load built-in plugin %r", name, exc_info=True)
|
|
52
|
+
self._add_loader(name, loader)
|
|
59
53
|
|
|
60
|
-
self.
|
|
54
|
+
self._discover_entry_points()
|
|
61
55
|
|
|
62
|
-
def
|
|
63
|
-
"""
|
|
56
|
+
def _add_loader(self, name: str, loader: Callable[[], Type[T]]) -> None:
|
|
57
|
+
"""Add a loader with normalized name."""
|
|
58
|
+
normalized_name = name.lower()
|
|
59
|
+
self._loaders[normalized_name] = loader
|
|
60
|
+
|
|
61
|
+
def _discover_entry_points(self) -> None:
|
|
62
|
+
"""Discover entry point loaders without loading them."""
|
|
64
63
|
try:
|
|
65
64
|
for ep in entry_points(group=self._entry_point_group):
|
|
66
|
-
|
|
67
|
-
plugin_class = ep.load()
|
|
68
|
-
with self._lock:
|
|
69
|
-
self._items[ep.name] = plugin_class
|
|
70
|
-
except Exception:
|
|
71
|
-
# Do not break plugin dispatch because one plugin is broken
|
|
72
|
-
logger.warning(
|
|
73
|
-
"Failed to load plugin %r from entry point",
|
|
74
|
-
ep.name,
|
|
75
|
-
exc_info=True,
|
|
76
|
-
)
|
|
65
|
+
self._add_loader(ep.name, ep.load)
|
|
77
66
|
except Exception:
|
|
78
67
|
# entry_points() might not be available in older Python versions
|
|
79
68
|
logger.debug("Entry points not available for group %s", self._entry_point_group)
|
|
@@ -94,6 +83,8 @@ class PluginRegistry(Generic[T]):
|
|
|
94
83
|
"""
|
|
95
84
|
with self._lock:
|
|
96
85
|
canonical_name = name.lower()
|
|
86
|
+
# Store both in loaders (for consistency with discovery) and items (for immediate access)
|
|
87
|
+
self._loaders[canonical_name] = lambda: cls
|
|
97
88
|
self._items[canonical_name] = cls
|
|
98
89
|
|
|
99
90
|
# Register aliases
|
|
@@ -120,7 +111,7 @@ class PluginRegistry(Generic[T]):
|
|
|
120
111
|
return True
|
|
121
112
|
|
|
122
113
|
# Check if it's a canonical name
|
|
123
|
-
if normalized_name in self.
|
|
114
|
+
if normalized_name in self._loaders:
|
|
124
115
|
# Remove all aliases pointing to this plugin
|
|
125
116
|
aliases_to_remove = [
|
|
126
117
|
alias for alias, canonical in self._aliases.items()
|
|
@@ -129,7 +120,9 @@ class PluginRegistry(Generic[T]):
|
|
|
129
120
|
for alias in aliases_to_remove:
|
|
130
121
|
del self._aliases[alias]
|
|
131
122
|
|
|
132
|
-
|
|
123
|
+
# Remove from both loaders and items cache
|
|
124
|
+
del self._loaders[normalized_name]
|
|
125
|
+
self._items.pop(normalized_name, None)
|
|
133
126
|
return True
|
|
134
127
|
|
|
135
128
|
return False
|
|
@@ -146,28 +139,44 @@ class PluginRegistry(Generic[T]):
|
|
|
146
139
|
Raises:
|
|
147
140
|
ValueError: If plugin is not found
|
|
148
141
|
"""
|
|
142
|
+
normalized_name = name.lower()
|
|
143
|
+
|
|
149
144
|
with self._lock:
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
# Resolve alias to canonical name
|
|
145
|
+
# Check cache first
|
|
153
146
|
canonical_name = self._aliases.get(normalized_name, normalized_name)
|
|
154
147
|
cls = self._items.get(canonical_name)
|
|
155
148
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
149
|
+
if cls is not None:
|
|
150
|
+
return cls
|
|
151
|
+
|
|
152
|
+
# Try to load from loaders
|
|
153
|
+
loader = self._loaders.get(canonical_name)
|
|
154
|
+
if loader is None:
|
|
155
|
+
# Capture available plugins snapshot while holding lock
|
|
156
|
+
available_loaders = sorted(self._loaders.keys())
|
|
160
157
|
available_aliases = sorted(self._aliases.keys())
|
|
161
|
-
available_snapshot =
|
|
162
|
-
|
|
163
|
-
|
|
158
|
+
available_snapshot = available_loaders + available_aliases
|
|
159
|
+
raise ValueError(
|
|
160
|
+
f"Unknown {self._entry_point_group} plugin: {name!r}. "
|
|
161
|
+
f"Available: {available_snapshot}"
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
# Load and cache the plugin (release lock during loading to prevent deadlock)
|
|
165
|
+
pass
|
|
164
166
|
|
|
165
|
-
if
|
|
167
|
+
# Load outside the lock to prevent deadlock if loader calls back into registry
|
|
168
|
+
try:
|
|
169
|
+
cls = loader()
|
|
170
|
+
except ImportError as e:
|
|
166
171
|
raise ValueError(
|
|
167
|
-
f"
|
|
168
|
-
f"
|
|
169
|
-
)
|
|
170
|
-
|
|
172
|
+
f"Plugin {name!r} is registered but its dependencies "
|
|
173
|
+
f"are not installed: {e}"
|
|
174
|
+
) from e
|
|
175
|
+
|
|
176
|
+
# Re-acquire lock to cache the result
|
|
177
|
+
with self._lock:
|
|
178
|
+
self._items[canonical_name] = cls
|
|
179
|
+
return cls
|
|
171
180
|
|
|
172
181
|
def create(self, name: str, *args, **kwargs) -> T:
|
|
173
182
|
"""Create an instance of the specified plugin.
|
|
@@ -192,7 +201,7 @@ class PluginRegistry(Generic[T]):
|
|
|
192
201
|
Sorted list of plugin names
|
|
193
202
|
"""
|
|
194
203
|
with self._lock:
|
|
195
|
-
return sorted(self.
|
|
204
|
+
return sorted(self._loaders.keys())
|
|
196
205
|
|
|
197
206
|
def is_available(self, name: str) -> bool:
|
|
198
207
|
"""Check if a plugin is available.
|
|
@@ -225,4 +234,4 @@ class PluginRegistry(Generic[T]):
|
|
|
225
234
|
Sorted list of all registered names and aliases
|
|
226
235
|
"""
|
|
227
236
|
with self._lock:
|
|
228
|
-
return sorted(list(self.
|
|
237
|
+
return sorted(list(self._loaders.keys()) + list(self._aliases.keys()))
|
|
@@ -28,14 +28,33 @@ from .tool_registry import ToolRegistry
|
|
|
28
28
|
|
|
29
29
|
# BaseTool import is now handled centrally by ToolResolver
|
|
30
30
|
|
|
31
|
-
#
|
|
31
|
+
# Framework availability detection (lazy via __getattr__)
|
|
32
32
|
from ._framework_availability import is_available
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
|
|
34
|
+
# Lazy constants mapping for backward compatibility
|
|
35
|
+
_AVAIL = {
|
|
36
|
+
"PRAISONAI_TOOLS_AVAILABLE": "praisonai_tools",
|
|
37
|
+
"CREWAI_AVAILABLE": "crewai",
|
|
38
|
+
"AUTOGEN_AVAILABLE": "autogen",
|
|
39
|
+
"AG2_AVAILABLE": "ag2",
|
|
40
|
+
"PRAISONAI_AVAILABLE": "praisonaiagents",
|
|
41
|
+
"AGENTOPS_AVAILABLE": "agentops",
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
__all__ = list(_AVAIL.keys())
|
|
45
|
+
|
|
46
|
+
def __getattr__(name):
|
|
47
|
+
"""Lazy attribute access for framework availability constants.
|
|
48
|
+
|
|
49
|
+
This allows backward compatibility while avoiding import-time probing.
|
|
50
|
+
Only probes the framework when the constant is actually accessed.
|
|
51
|
+
"""
|
|
52
|
+
if name in _AVAIL:
|
|
53
|
+
return is_available(_AVAIL[name])
|
|
54
|
+
raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
|
|
55
|
+
|
|
56
|
+
def __dir__():
|
|
57
|
+
return sorted(set(globals()) | set(_AVAIL))
|
|
39
58
|
|
|
40
59
|
# Framework adapter registry - now uses proper registry pattern
|
|
41
60
|
# This replaces the hardcoded FRAMEWORK_ADAPTERS dict
|
|
@@ -282,7 +301,7 @@ class AgentsGenerator:
|
|
|
282
301
|
|
|
283
302
|
# Keep tool registry for backward compatibility with autogen adapters
|
|
284
303
|
self.tool_registry = ToolRegistry()
|
|
285
|
-
self.tool_registry.register_builtin_autogen_adapters()
|
|
304
|
+
self.tool_registry.register_builtin_autogen_adapters(_suppress_deprecation_warning=True)
|
|
286
305
|
|
|
287
306
|
# Initialize tool resolver with the registry wired in (single source of truth for tool resolution)
|
|
288
307
|
from .tool_resolver import ToolResolver
|
|
@@ -555,7 +574,7 @@ class AgentsGenerator:
|
|
|
555
574
|
for agent_name, agent_config in config['agents'].items():
|
|
556
575
|
role_config = dict(agent_config) if agent_config else {}
|
|
557
576
|
# Convert 'instructions' to 'backstory' if present
|
|
558
|
-
# Note: preserve 'instructions' key for
|
|
577
|
+
# Note: preserve 'instructions' key for adapters that pass it to PraisonAgent
|
|
559
578
|
if 'instructions' in role_config and 'backstory' not in role_config:
|
|
560
579
|
role_config['backstory'] = role_config['instructions']
|
|
561
580
|
# Ensure required fields have defaults
|
|
@@ -576,7 +595,7 @@ class AgentsGenerator:
|
|
|
576
595
|
tools_dict = {}
|
|
577
596
|
|
|
578
597
|
# Demand-driven tool resolution - only resolve tools actually used in YAML
|
|
579
|
-
if
|
|
598
|
+
if is_available("crewai") or is_available("autogen") or is_available("praisonaiagents") or is_available("ag2"):
|
|
580
599
|
try:
|
|
581
600
|
# Collect all tool names mentioned in the YAML config
|
|
582
601
|
needed_tools: set[str] = set()
|
|
@@ -696,7 +715,7 @@ class AgentsGenerator:
|
|
|
696
715
|
Returns:
|
|
697
716
|
str: Result of the workflow execution
|
|
698
717
|
"""
|
|
699
|
-
if not
|
|
718
|
+
if not is_available("praisonaiagents"):
|
|
700
719
|
raise ImportError("PraisonAI is not installed. Please install it with 'pip install praisonaiagents'")
|
|
701
720
|
|
|
702
721
|
try:
|
|
@@ -736,4 +755,4 @@ class AgentsGenerator:
|
|
|
736
755
|
if result.get("status") == "completed":
|
|
737
756
|
return result.get("output", "Workflow completed successfully")
|
|
738
757
|
else:
|
|
739
|
-
return f"Workflow failed: {result.get('error', 'Unknown error')}"
|
|
758
|
+
return f"Workflow failed: {result.get('error', 'Unknown error')}"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""Backward-compatible re-export. Prefer `praisonai.scheduler`.
|
|
2
|
+
|
|
3
|
+
This module is deprecated. Use the canonical implementation in the
|
|
4
|
+
scheduler package for full functionality including async support.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import warnings
|
|
8
|
+
|
|
9
|
+
warnings.warn(
|
|
10
|
+
"praisonai.async_agent_scheduler is deprecated; "
|
|
11
|
+
"use 'from praisonai.scheduler import AsyncAgentScheduler' instead.",
|
|
12
|
+
DeprecationWarning,
|
|
13
|
+
stacklevel=2,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
# Re-export from the canonical location
|
|
17
|
+
from .scheduler.async_agent_scheduler import ( # noqa: F401
|
|
18
|
+
AsyncAgentScheduler,
|
|
19
|
+
AsyncPraisonAgentExecutor,
|
|
20
|
+
AsyncAgentExecutorInterface,
|
|
21
|
+
create_async_agent_scheduler,
|
|
22
|
+
logger,
|
|
23
|
+
)
|
|
@@ -65,37 +65,7 @@ def _load_optional(key: str, loader):
|
|
|
65
65
|
# Availability checks now delegated to centralized module
|
|
66
66
|
from ._framework_availability import is_available
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
"""Check if crewai is available (cached, thread-safe)."""
|
|
70
|
-
return is_available("crewai")
|
|
71
|
-
|
|
72
|
-
def _check_autogen_available() -> bool:
|
|
73
|
-
"""Check if autogen v0.2 is available (cached, thread-safe)."""
|
|
74
|
-
return is_available("autogen")
|
|
75
|
-
|
|
76
|
-
def _check_autogen_v4_available() -> bool:
|
|
77
|
-
"""Check if autogen v0.4 is available (cached, thread-safe)."""
|
|
78
|
-
return is_available("autogen_v4")
|
|
79
|
-
|
|
80
|
-
def _check_ag2_available() -> bool:
|
|
81
|
-
"""Check if AG2 (community fork of AutoGen) is available (cached, thread-safe)."""
|
|
82
|
-
return is_available("ag2")
|
|
83
|
-
|
|
84
|
-
def _check_praisonai_available() -> bool:
|
|
85
|
-
"""Check if praisonaiagents is available (cached, thread-safe)."""
|
|
86
|
-
return is_available("praisonaiagents")
|
|
87
|
-
|
|
88
|
-
def _check_praisonai_tools_available() -> bool:
|
|
89
|
-
"""Check if praisonai_tools is available (cached, thread-safe)."""
|
|
90
|
-
return is_available("praisonai_tools")
|
|
91
|
-
|
|
92
|
-
def _check_litellm_available() -> bool:
|
|
93
|
-
"""Check if litellm is available (cached, thread-safe)."""
|
|
94
|
-
return is_available("litellm")
|
|
95
|
-
|
|
96
|
-
def _check_openai_available() -> bool:
|
|
97
|
-
"""Check if openai is available (cached, thread-safe)."""
|
|
98
|
-
return is_available("openai")
|
|
68
|
+
# Redundant wrapper functions removed - use is_available() directly
|
|
99
69
|
|
|
100
70
|
|
|
101
71
|
def _get_crewai():
|
|
@@ -504,7 +474,7 @@ class BaseAutoGenerator:
|
|
|
504
474
|
model_name = self.config_list[0]['model']
|
|
505
475
|
|
|
506
476
|
# Try LiteLLM first (preferred - supports 100+ providers)
|
|
507
|
-
if
|
|
477
|
+
if is_available("litellm"):
|
|
508
478
|
litellm = _get_litellm()
|
|
509
479
|
response = litellm.completion(
|
|
510
480
|
model=model_name,
|
|
@@ -516,7 +486,7 @@ class BaseAutoGenerator:
|
|
|
516
486
|
return response_model.model_validate_json(content)
|
|
517
487
|
|
|
518
488
|
# Fallback to OpenAI SDK (uses beta.chat.completions.parse)
|
|
519
|
-
if
|
|
489
|
+
if is_available("openai"):
|
|
520
490
|
client = self._get_openai_client()
|
|
521
491
|
response = client.beta.chat.completions.parse(
|
|
522
492
|
model=model_name,
|
|
@@ -554,7 +524,7 @@ class BaseAutoGenerator:
|
|
|
554
524
|
model_name = self.config_list[0]['model']
|
|
555
525
|
|
|
556
526
|
# Try LiteLLM async first (preferred - supports 100+ providers)
|
|
557
|
-
if
|
|
527
|
+
if is_available("litellm"):
|
|
558
528
|
litellm = _get_litellm()
|
|
559
529
|
response = await litellm.acompletion(
|
|
560
530
|
model=model_name,
|
|
@@ -566,7 +536,7 @@ class BaseAutoGenerator:
|
|
|
566
536
|
return response_model.model_validate_json(content)
|
|
567
537
|
|
|
568
538
|
# Fallback to OpenAI AsyncSDK (uses beta.chat.completions.parse)
|
|
569
|
-
if
|
|
539
|
+
if is_available("openai"):
|
|
570
540
|
if self._async_openai_client is None:
|
|
571
541
|
with self._client_lock:
|
|
572
542
|
if self._async_openai_client is None:
|
|
@@ -728,7 +698,7 @@ class AutoGenerator(BaseAutoGenerator):
|
|
|
728
698
|
raise ImportError(f"{adapter.name} is not installed. Please install with:\n {install_hint}")
|
|
729
699
|
|
|
730
700
|
# Check tools availability if required by this framework
|
|
731
|
-
if requires_tools_extra and not
|
|
701
|
+
if requires_tools_extra and not is_available("praisonai_tools"):
|
|
732
702
|
logger.warning(f"Tools are not available for {framework}. To use tools, install:\n {install_hint}")
|
|
733
703
|
|
|
734
704
|
self.topic = topic
|
|
@@ -23,11 +23,14 @@ class AgentConfigSchema(BaseModel):
|
|
|
23
23
|
|
|
24
24
|
class ChannelConfigSchema(BaseModel):
|
|
25
25
|
"""Schema for a single channel configuration."""
|
|
26
|
+
platform: Optional[str] = None
|
|
26
27
|
token: str = ""
|
|
27
28
|
mode: str = "poll" # poll | ws | webhook | hybrid
|
|
28
29
|
group_policy: str = "respond_all" # respond_all, mention_only, command_only
|
|
29
30
|
allowlist: List[str] = Field(default_factory=list)
|
|
30
31
|
blocklist: List[str] = Field(default_factory=list)
|
|
32
|
+
allowed_users: Optional[str] = None
|
|
33
|
+
routes: Dict[str, str] = Field(default_factory=dict)
|
|
31
34
|
webhook_url: Optional[str] = None
|
|
32
35
|
webhook_port: int = 8080
|
|
33
36
|
|
|
@@ -102,12 +105,15 @@ class BotYamlSchema(BaseModel):
|
|
|
102
105
|
"No channels configured. Add at least one channel "
|
|
103
106
|
"(telegram, discord, slack, whatsapp) to your bot.yaml"
|
|
104
107
|
)
|
|
105
|
-
#
|
|
108
|
+
# Channel keys may be platform names (telegram) or custom ids (telegram_cfo)
|
|
109
|
+
# when ``platform`` is set on the channel block (gateway / multi-bot YAML).
|
|
106
110
|
valid_platforms = {"telegram", "discord", "slack", "whatsapp", "email", "agentmail"}
|
|
107
|
-
for name in self.channels:
|
|
108
|
-
|
|
111
|
+
for name, channel in self.channels.items():
|
|
112
|
+
platform = (channel.platform or name).lower()
|
|
113
|
+
if platform not in valid_platforms:
|
|
109
114
|
raise ValueError(
|
|
110
|
-
f"Unknown channel '{name}'
|
|
115
|
+
f"Unknown channel '{name}' (platform '{platform}'). "
|
|
116
|
+
f"Supported platforms: {', '.join(sorted(valid_platforms))}"
|
|
111
117
|
)
|
|
112
118
|
return self
|
|
113
119
|
|