PraisonAI 4.6.104__tar.gz → 4.6.111__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.104 → praisonai-4.6.111}/PKG-INFO +10 -3
- {praisonai-4.6.104 → praisonai-4.6.111}/PraisonAI.egg-info/PKG-INFO +10 -3
- {praisonai-4.6.104 → praisonai-4.6.111}/PraisonAI.egg-info/SOURCES.txt +6 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/PraisonAI.egg-info/requires.txt +10 -2
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/__init__.py +2 -2
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/__main__.py +6 -1
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/docs_generator.py +10 -6
- praisonai-4.6.111/praisonai/_framework_availability.py +14 -0
- praisonai-4.6.111/praisonai/_safe_loader.py +14 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/agent.py +7 -2
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/agents_generator.py +9 -5
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/api/call.py +22 -21
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/__init__.py +5 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_approval_base.py +46 -1
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_config_schema.py +32 -2
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_dead_targets.py +69 -4
- praisonai-4.6.111/praisonai/bots/_delivery_control_store.py +405 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_discord_approval.py +35 -3
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_outbound_messenger.py +31 -1
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_protocol_mixin.py +147 -15
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_rate_limit.py +72 -6
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_registry.py +25 -0
- praisonai-4.6.111/praisonai/bots/_reliability.py +190 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_slack_approval.py +35 -3
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_telegram_approval.py +58 -4
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/agentmail.py +4 -2
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/botos.py +272 -17
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/delivery.py +177 -2
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/discord.py +3 -1
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/email.py +4 -2
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/slack.py +12 -3
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/telegram.py +4 -2
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/whatsapp.py +10 -2
- praisonai-4.6.111/praisonai/cli/_warnings.py +11 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/gateway.py +34 -0
- praisonai-4.6.111/praisonai/cli/fallback_schema.py +11 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/features/gateway.py +47 -5
- praisonai-4.6.111/praisonai/cli/schema_provider.py +11 -0
- praisonai-4.6.111/praisonai/cli/unified_schema.py +11 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/autogen_adapter.py +2 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/crewai_adapter.py +2 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/praisonai_adapter.py +4 -1
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/registry.py +3 -2
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/server.py +312 -8
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/kanban/sqlite_store.py +5 -6
- praisonai-4.6.111/praisonai/llm/catalogue.py +14 -0
- praisonai-4.6.111/praisonai/llm/config.py +14 -0
- praisonai-4.6.111/praisonai/llm/credentials.py +14 -0
- praisonai-4.6.111/praisonai/llm/env.py +14 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/profiler.py +292 -1
- praisonai-4.6.111/praisonai/scheduler/_dispatch.py +56 -0
- praisonai-4.6.111/praisonai/tool_registry.py +14 -0
- praisonai-4.6.111/praisonai/tool_resolver.py +14 -0
- praisonai-4.6.111/praisonai/version.py +1 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/pyproject.toml +13 -2
- praisonai-4.6.104/praisonai/_framework_availability.py +0 -134
- praisonai-4.6.104/praisonai/_safe_loader.py +0 -100
- praisonai-4.6.104/praisonai/llm/catalogue.py +0 -462
- praisonai-4.6.104/praisonai/llm/config.py +0 -37
- praisonai-4.6.104/praisonai/llm/credentials.py +0 -286
- praisonai-4.6.104/praisonai/llm/env.py +0 -229
- praisonai-4.6.104/praisonai/scheduler/_dispatch.py +0 -28
- praisonai-4.6.104/praisonai/tool_registry.py +0 -118
- praisonai-4.6.104/praisonai/tool_resolver.py +0 -1241
- praisonai-4.6.104/praisonai/version.py +0 -1
- {praisonai-4.6.104 → praisonai-4.6.111}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/README.md +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_async_bridge.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_bootstrap.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/docs_extractor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/generator.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/python_extractor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/rust_extractor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/topic_normalizer.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/typescript_extractor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_entrypoint.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_lazy_cache.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_lockmap.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_logging.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/acp/config.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/acp/server.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/acp/session.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/api/agent_invoke.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/app/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/app/agentos.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/async_agent_scheduler.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/auto.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_ack.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_admission.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_approval.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_approval_store.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_chunk.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_commands.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_correlation.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_debounce.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_defaults.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_delivery.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_dlq.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_durable_adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_email_utils.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_http_approval.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_identity.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_ingress.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_media.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_metrics.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_mirror.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_outbound_media.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_outbound_resilience.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_outbox.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_pairing_ui.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_presentation_approval.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_presentation_approval_backend.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_presentation_renderer.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_relay_adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_reset_policy.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_resilience.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_run_control.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_session.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_status.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_streaming.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_typing.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_typing_indicator.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_unknown_user.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_webhook_approval.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/bot.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/linear.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/media.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/webhook_security.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/agent.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/benchmark.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/cdp_agent.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/cdp_utils.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/cli.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/diagnostics.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/launcher.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/playwright_agent.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/profiling.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/protocol.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/report.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/server.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/sessions.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/video.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/claw/default_app.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/_shim.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/app.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/approval_backend.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/branding.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/agent.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/attach.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/auth.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/checkpoint.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/command.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/context.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/daemon.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/identity.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/init.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/kanban.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/models.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/permissions.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/validate.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/configuration/config.schema.json +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/main.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/utils/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/config/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/config/schema.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/config/validator.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/_storage_path.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/config.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/history_store.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/queue.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/setup.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/daemon/launchd.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/daemon/systemd.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/daemon/windows.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/db/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/db/adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/api.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/docker.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/doctor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/main.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/models.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/providers/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/providers/_registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/providers/aws.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/providers/azure.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/providers/base.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/providers/gcp.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/schema.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/classifier.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/executor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/extractor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/reporter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/runner.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/workspace.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/openai_compat.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/client.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/converter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/_config_builder.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/base.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/validators.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/workflow_framework.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/auth.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/client.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/cookie_auth.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/exec_approval.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/forensics.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/gateway_approval.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/health_monitor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/home_channels.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/kanban_dispatcher.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/magic_link.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/origin_check.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/pairing.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/pairing_routes.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/port_utils.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/push_channels.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/push_delivery.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/push_polling.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/push_presence.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/rate_limiter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/redis_pubsub.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/supervisor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/unicode_utils.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/inc/config.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/inc/models.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/kanban_bridge.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/context_files.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/host_app.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/_unified_registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/backend_registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/base.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/managed_local.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/models.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/path_validation.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/router.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/server.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/store.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/kanban/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/kanban/models.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/kanban/paths.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/llm/gateways.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/llm/registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/agents.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/capabilities.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/knowledge.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/memory.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/prompts.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/resources.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/auth/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/auth/api_key.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/auth/oauth.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/auth/oidc.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/auth/scopes.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/cli.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/elicitation.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/icons.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/recipe_adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/recipe_cli.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/sampling.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/server.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/tasks.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/tool_index.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/transports/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/transports/http_stream.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/transports/stdio.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/n8n/client.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/observability/hooks.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/_valkey_client.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/config.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/_sql_base.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/tests/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/tests/test_all_backends.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/tests/test_registry_lazy.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/push/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/push/client.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/push/transports.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/core.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/history.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/models.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/security.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/server.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/applier.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/judge.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/plan.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/player.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/reader.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/storage.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/writer.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/runtime/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/runtime/__main__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/_compat.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/_registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/_shell.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/daytona.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/docker.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/e2b.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/modal.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/sandlock.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/ssh.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/subprocess.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/_base_scheduler.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/async_agent_scheduler.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/blueprint_catalogue.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/condition_gate.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/run_policy.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/suggestion_engine.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/security/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/security/audit.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/security/injection.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/security/protected.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/setup/build.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/setup.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/config.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/enhanced_templates.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/manifest.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/models.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/cache.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/loader.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/security.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/tool_override.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/audio.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/kanban_tools.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/_ollama.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/agents/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/agents/grader.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/agents/hook.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/agents/models.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/agents/orchestrator.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/agents/storage.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/llm/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/llm/trainer.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train_vision.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui/callbacks.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui/components/aicoder.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui/context.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/upload_vision.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/setup.cfg +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_approval_system.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_basic.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_cli_features.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_n8n_agent_invoke.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_recipe.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_registry.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_runner.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.6.104 → praisonai-4.6.111}/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.111
|
|
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,8 +11,8 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=1.6.
|
|
15
|
-
Requires-Dist: praisonai-code
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.111
|
|
15
|
+
Requires-Dist: praisonai-code>=0.0.9
|
|
16
16
|
Requires-Dist: python-dotenv>=0.19.0
|
|
17
17
|
Requires-Dist: litellm<2,>=1.83.14
|
|
18
18
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -36,6 +36,12 @@ Requires-Dist: fastapi>=0.115.0; extra == "os"
|
|
|
36
36
|
Requires-Dist: uvicorn>=0.34.0; extra == "os"
|
|
37
37
|
Requires-Dist: PyJWT>=2.8.0; extra == "os"
|
|
38
38
|
Requires-Dist: sse-starlette>=1.6.0; extra == "os"
|
|
39
|
+
Provides-Extra: gateway
|
|
40
|
+
Requires-Dist: fastapi>=0.115.0; extra == "gateway"
|
|
41
|
+
Requires-Dist: uvicorn>=0.34.0; extra == "gateway"
|
|
42
|
+
Requires-Dist: sse-starlette>=1.6.0; extra == "gateway"
|
|
43
|
+
Requires-Dist: websockets>=12.0; extra == "gateway"
|
|
44
|
+
Requires-Dist: watchdog>=3.0.0; extra == "gateway"
|
|
39
45
|
Provides-Extra: agentops
|
|
40
46
|
Requires-Dist: agentops>=0.3.12; extra == "agentops"
|
|
41
47
|
Provides-Extra: langfuse
|
|
@@ -123,6 +129,7 @@ Requires-Dist: fastapi>=0.115.0; extra == "all"
|
|
|
123
129
|
Requires-Dist: uvicorn>=0.34.0; extra == "all"
|
|
124
130
|
Requires-Dist: sse-starlette>=1.6.0; extra == "all"
|
|
125
131
|
Requires-Dist: websockets>=12.0; extra == "all"
|
|
132
|
+
Requires-Dist: watchdog>=3.0.0; extra == "all"
|
|
126
133
|
Requires-Dist: tavily-python==0.5.0; extra == "all"
|
|
127
134
|
Requires-Dist: crawl4ai>=0.7.0; extra == "all"
|
|
128
135
|
Requires-Dist: playwright>=1.47.0; extra == "all"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.111
|
|
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,8 +11,8 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=1.6.
|
|
15
|
-
Requires-Dist: praisonai-code
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.111
|
|
15
|
+
Requires-Dist: praisonai-code>=0.0.9
|
|
16
16
|
Requires-Dist: python-dotenv>=0.19.0
|
|
17
17
|
Requires-Dist: litellm<2,>=1.83.14
|
|
18
18
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -36,6 +36,12 @@ Requires-Dist: fastapi>=0.115.0; extra == "os"
|
|
|
36
36
|
Requires-Dist: uvicorn>=0.34.0; extra == "os"
|
|
37
37
|
Requires-Dist: PyJWT>=2.8.0; extra == "os"
|
|
38
38
|
Requires-Dist: sse-starlette>=1.6.0; extra == "os"
|
|
39
|
+
Provides-Extra: gateway
|
|
40
|
+
Requires-Dist: fastapi>=0.115.0; extra == "gateway"
|
|
41
|
+
Requires-Dist: uvicorn>=0.34.0; extra == "gateway"
|
|
42
|
+
Requires-Dist: sse-starlette>=1.6.0; extra == "gateway"
|
|
43
|
+
Requires-Dist: websockets>=12.0; extra == "gateway"
|
|
44
|
+
Requires-Dist: watchdog>=3.0.0; extra == "gateway"
|
|
39
45
|
Provides-Extra: agentops
|
|
40
46
|
Requires-Dist: agentops>=0.3.12; extra == "agentops"
|
|
41
47
|
Provides-Extra: langfuse
|
|
@@ -123,6 +129,7 @@ Requires-Dist: fastapi>=0.115.0; extra == "all"
|
|
|
123
129
|
Requires-Dist: uvicorn>=0.34.0; extra == "all"
|
|
124
130
|
Requires-Dist: sse-starlette>=1.6.0; extra == "all"
|
|
125
131
|
Requires-Dist: websockets>=12.0; extra == "all"
|
|
132
|
+
Requires-Dist: watchdog>=3.0.0; extra == "all"
|
|
126
133
|
Requires-Dist: tavily-python==0.5.0; extra == "all"
|
|
127
134
|
Requires-Dist: crawl4ai>=0.7.0; extra == "all"
|
|
128
135
|
Requires-Dist: playwright>=1.47.0; extra == "all"
|
|
@@ -74,6 +74,7 @@ praisonai/bots/_dead_targets.py
|
|
|
74
74
|
praisonai/bots/_debounce.py
|
|
75
75
|
praisonai/bots/_defaults.py
|
|
76
76
|
praisonai/bots/_delivery.py
|
|
77
|
+
praisonai/bots/_delivery_control_store.py
|
|
77
78
|
praisonai/bots/_discord_approval.py
|
|
78
79
|
praisonai/bots/_dlq.py
|
|
79
80
|
praisonai/bots/_durable_adapter.py
|
|
@@ -96,6 +97,7 @@ praisonai/bots/_protocol_mixin.py
|
|
|
96
97
|
praisonai/bots/_rate_limit.py
|
|
97
98
|
praisonai/bots/_registry.py
|
|
98
99
|
praisonai/bots/_relay_adapter.py
|
|
100
|
+
praisonai/bots/_reliability.py
|
|
99
101
|
praisonai/bots/_reset_policy.py
|
|
100
102
|
praisonai/bots/_resilience.py
|
|
101
103
|
praisonai/bots/_run_control.py
|
|
@@ -168,13 +170,17 @@ praisonai/claw/default_app.py
|
|
|
168
170
|
praisonai/cli/__init__.py
|
|
169
171
|
praisonai/cli/_paths.py
|
|
170
172
|
praisonai/cli/_shim.py
|
|
173
|
+
praisonai/cli/_warnings.py
|
|
171
174
|
praisonai/cli/app.py
|
|
172
175
|
praisonai/cli/approval_backend.py
|
|
173
176
|
praisonai/cli/branding.py
|
|
174
177
|
praisonai/cli/config_loader.py
|
|
178
|
+
praisonai/cli/fallback_schema.py
|
|
175
179
|
praisonai/cli/langfuse_client.py
|
|
176
180
|
praisonai/cli/main.py
|
|
177
181
|
praisonai/cli/schedule_cli.py
|
|
182
|
+
praisonai/cli/schema_provider.py
|
|
183
|
+
praisonai/cli/unified_schema.py
|
|
178
184
|
praisonai/cli/commands/__init__.py
|
|
179
185
|
praisonai/cli/commands/acp.py
|
|
180
186
|
praisonai/cli/commands/agent.py
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
rich>=13.7
|
|
2
2
|
markdown>=3.5
|
|
3
3
|
pyparsing>=3.0.0
|
|
4
|
-
praisonaiagents>=1.6.
|
|
5
|
-
praisonai-code
|
|
4
|
+
praisonaiagents>=1.6.111
|
|
5
|
+
praisonai-code>=0.0.9
|
|
6
6
|
python-dotenv>=0.19.0
|
|
7
7
|
litellm<2,>=1.83.14
|
|
8
8
|
PyYAML>=6.0
|
|
@@ -32,6 +32,7 @@ fastapi>=0.115.0
|
|
|
32
32
|
uvicorn>=0.34.0
|
|
33
33
|
sse-starlette>=1.6.0
|
|
34
34
|
websockets>=12.0
|
|
35
|
+
watchdog>=3.0.0
|
|
35
36
|
tavily-python==0.5.0
|
|
36
37
|
crawl4ai>=0.7.0
|
|
37
38
|
playwright>=1.47.0
|
|
@@ -152,6 +153,13 @@ boto3>=1.35.0
|
|
|
152
153
|
langflow>=1.0.0
|
|
153
154
|
requests>=2.31.0
|
|
154
155
|
|
|
156
|
+
[gateway]
|
|
157
|
+
fastapi>=0.115.0
|
|
158
|
+
uvicorn>=0.34.0
|
|
159
|
+
sse-starlette>=1.6.0
|
|
160
|
+
websockets>=12.0
|
|
161
|
+
watchdog>=3.0.0
|
|
162
|
+
|
|
155
163
|
[google-adk]
|
|
156
164
|
praisonai-frameworks[google-adk]>=0.1.8
|
|
157
165
|
praisonai-tools>=0.1.0
|
|
@@ -153,8 +153,8 @@ def __getattr__(name):
|
|
|
153
153
|
elif name == 'run_integrated_gateway':
|
|
154
154
|
from .integration.gateway_host import run_integrated_gateway
|
|
155
155
|
return run_integrated_gateway
|
|
156
|
-
elif name
|
|
157
|
-
#
|
|
156
|
+
elif name in ('AgentOS', 'AgentApp'):
|
|
157
|
+
# AgentApp is a silent alias for AgentOS (backward compatibility)
|
|
158
158
|
from .app import AgentOS
|
|
159
159
|
return AgentOS
|
|
160
160
|
elif name in ('ManagedAgent', 'ManagedAgentIntegration'):
|
|
@@ -116,7 +116,12 @@ def _run_typer(argv):
|
|
|
116
116
|
|
|
117
117
|
|
|
118
118
|
def _run_legacy(argv):
|
|
119
|
-
"""Dispatch to the legacy argparse CLI (prompts, YAML, deprecated flags).
|
|
119
|
+
"""Dispatch to the legacy argparse CLI (prompts, YAML, deprecated flags).
|
|
120
|
+
|
|
121
|
+
Wrapper-enhanced: multi-framework YAML and ``--framework crewai`` paths load
|
|
122
|
+
framework adapters via ``praisonai_code._wrapper_bridge`` (requires
|
|
123
|
+
``pip install praisonai``). Typer hot path remains in ``_run_typer``.
|
|
124
|
+
"""
|
|
120
125
|
from praisonai.cli.main import PraisonAI
|
|
121
126
|
|
|
122
127
|
original = sys.argv
|
|
@@ -195,7 +195,6 @@ PYTHON_DOC_ORPHAN_EXCLUSIONS = frozenset({
|
|
|
195
195
|
DOC_FEATURE_CATEGORY_ALIASES = {
|
|
196
196
|
'Callbacks': 'Hooks',
|
|
197
197
|
'Middleware': 'Hooks',
|
|
198
|
-
'Vector Store': 'Knowledge',
|
|
199
198
|
'Token Management': 'Context Management',
|
|
200
199
|
'Jobs': 'Workflows',
|
|
201
200
|
'Chat': 'Agent',
|
|
@@ -377,7 +376,9 @@ class DocsParityGenerator:
|
|
|
377
376
|
def _calculate_category_parity(
|
|
378
377
|
self,
|
|
379
378
|
feature_groups: Dict[str, List[str]],
|
|
380
|
-
doc_groups: Dict[str, tuple[List[str], int]]
|
|
379
|
+
doc_groups: Dict[str, tuple[List[str], int]],
|
|
380
|
+
*,
|
|
381
|
+
apply_python_doc_rules: bool = False,
|
|
381
382
|
) -> tuple[DocsParitySummary, List[CategoryParity]]:
|
|
382
383
|
"""Calculate parity at category level, grouped by display name."""
|
|
383
384
|
# Convert prefix-based groups to display-name-based groups
|
|
@@ -398,9 +399,10 @@ class DocsParityGenerator:
|
|
|
398
399
|
if prefix == 'other':
|
|
399
400
|
continue
|
|
400
401
|
display_name = FEATURE_CATEGORIES.get(prefix, prefix.title())
|
|
401
|
-
if
|
|
402
|
-
|
|
403
|
-
|
|
402
|
+
if apply_python_doc_rules:
|
|
403
|
+
if display_name in PYTHON_DOC_ORPHAN_EXCLUSIONS:
|
|
404
|
+
continue
|
|
405
|
+
display_name = DOC_FEATURE_CATEGORY_ALIASES.get(display_name, display_name)
|
|
404
406
|
if display_name not in result:
|
|
405
407
|
result[display_name] = ([], 0)
|
|
406
408
|
existing_names, existing_lines = result[display_name]
|
|
@@ -466,7 +468,9 @@ class DocsParityGenerator:
|
|
|
466
468
|
doc_groups = self._group_docs(docs)
|
|
467
469
|
|
|
468
470
|
# Calculate parity
|
|
469
|
-
summary, categories = self._calculate_category_parity(
|
|
471
|
+
summary, categories = self._calculate_category_parity(
|
|
472
|
+
feature_groups, doc_groups, apply_python_doc_rules=True
|
|
473
|
+
)
|
|
470
474
|
|
|
471
475
|
# Build category lists - stubs are separate from documented
|
|
472
476
|
documented = [c for c in categories if c.has_features and c.has_docs and not c.is_stub]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Backward-compatibility shim for :mod:`praisonai._framework_availability`.
|
|
2
|
+
|
|
3
|
+
The implementation moved to :mod:`praisonai_code._framework_availability` (C7).
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import sys as _sys
|
|
7
|
+
|
|
8
|
+
from praisonai._bootstrap import ensure_praisonai_code
|
|
9
|
+
|
|
10
|
+
ensure_praisonai_code()
|
|
11
|
+
|
|
12
|
+
import praisonai_code._framework_availability as _impl
|
|
13
|
+
|
|
14
|
+
_sys.modules[__name__] = _impl
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Backward-compatibility shim for :mod:`praisonai._safe_loader`.
|
|
2
|
+
|
|
3
|
+
The implementation moved to :mod:`praisonai_code._safe_loader` (C7).
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import sys as _sys
|
|
7
|
+
|
|
8
|
+
from praisonai._bootstrap import ensure_praisonai_code
|
|
9
|
+
|
|
10
|
+
ensure_praisonai_code()
|
|
11
|
+
|
|
12
|
+
import praisonai_code._safe_loader as _impl
|
|
13
|
+
|
|
14
|
+
_sys.modules[__name__] = _impl
|
|
@@ -40,8 +40,13 @@ class Agent(CoreAgent):
|
|
|
40
40
|
super().__init__(*args, cli_backend=cli_backend, **kwargs)
|
|
41
41
|
|
|
42
42
|
def _is_protocol_instance(self, obj) -> bool:
|
|
43
|
-
"""Check if object
|
|
44
|
-
|
|
43
|
+
"""Check if object is a pre-resolved CliBackendProtocol instance (duck typing).
|
|
44
|
+
|
|
45
|
+
A CliBackendProtocol instance exposes both ``execute()`` and ``stream()``.
|
|
46
|
+
Factory callables are intentionally NOT treated as protocol instances here
|
|
47
|
+
so that wrapper-level normalization in ``resolve_cli_backend_config`` runs.
|
|
48
|
+
"""
|
|
49
|
+
return hasattr(obj, "execute") and hasattr(obj, "stream")
|
|
45
50
|
|
|
46
51
|
|
|
47
52
|
# Export the wrapper Agent as the default for import from praisonai
|
|
@@ -205,11 +205,15 @@ def sanitize_agent_name_for_autogen_v4(name):
|
|
|
205
205
|
return sanitized
|
|
206
206
|
|
|
207
207
|
def _resolve_yaml_cli_backend(cli_backend_config, logger):
|
|
208
|
-
"""Resolve a YAML ``cli_backend`` field to a CliBackendProtocol instance.
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
208
|
+
"""Resolve a YAML ``cli_backend`` field to a CliBackendProtocol instance."""
|
|
209
|
+
if cli_backend_config is None:
|
|
210
|
+
return None
|
|
211
|
+
try:
|
|
212
|
+
from praisonai.cli_backends import resolve_cli_backend_config
|
|
213
|
+
return resolve_cli_backend_config(cli_backend_config)
|
|
214
|
+
except (ImportError, ValueError, TypeError) as exc:
|
|
215
|
+
logger.warning("Failed to resolve cli_backend %r: %s", cli_backend_config, exc)
|
|
216
|
+
return None
|
|
213
217
|
|
|
214
218
|
|
|
215
219
|
class AgentsGenerator:
|
|
@@ -235,23 +235,26 @@ async def handle_media_stream(websocket: WebSocket):
|
|
|
235
235
|
if openai_ws.open:
|
|
236
236
|
await openai_ws.close()
|
|
237
237
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
try:
|
|
238
|
+
async def send_to_twilio():
|
|
239
|
+
"""Receive events from the OpenAI Realtime API, send audio back to Twilio."""
|
|
240
|
+
nonlocal stream_sid
|
|
242
241
|
async for openai_message in openai_ws:
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
242
|
+
# Isolate per-event failures: a malformed message or an
|
|
243
|
+
# error handling a single event must not escape into
|
|
244
|
+
# asyncio.gather() and cancel the sibling Twilio task,
|
|
245
|
+
# which would drop the live call. Log and keep streaming.
|
|
246
|
+
try:
|
|
247
|
+
response = json.loads(openai_message)
|
|
248
|
+
if response['type'] in LOG_EVENT_TYPES:
|
|
249
|
+
print(f"Received event: {response['type']}", response)
|
|
250
|
+
if response['type'] == 'session.updated':
|
|
251
|
+
print("Session updated successfully:", response)
|
|
252
|
+
|
|
253
|
+
if response['type'] == 'response.done':
|
|
254
|
+
await handle_response_done(response, openai_ws)
|
|
255
|
+
|
|
256
|
+
if response['type'] == 'response.audio.delta' and response.get('delta'):
|
|
257
|
+
# Audio from OpenAI
|
|
255
258
|
audio_payload = base64.b64encode(base64.b64decode(response['delta'])).decode('utf-8')
|
|
256
259
|
audio_delta = {
|
|
257
260
|
"event": "media",
|
|
@@ -261,12 +264,10 @@ async def handle_media_stream(websocket: WebSocket):
|
|
|
261
264
|
}
|
|
262
265
|
}
|
|
263
266
|
await websocket.send_json(audio_delta)
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
except Exception as e:
|
|
267
|
-
print(f"Error in Sending to Phone: {e}")
|
|
267
|
+
except Exception:
|
|
268
|
+
logger.exception("Error processing OpenAI event; continuing stream")
|
|
268
269
|
|
|
269
|
-
|
|
270
|
+
await asyncio.gather(receive_from_twilio(), send_to_twilio())
|
|
270
271
|
finally:
|
|
271
272
|
active_connections -= 1
|
|
272
273
|
|
|
@@ -31,6 +31,7 @@ if TYPE_CHECKING:
|
|
|
31
31
|
from ._streaming import StreamingConfig, StreamingMode, DraftStreamer
|
|
32
32
|
from ._outbox import OutboundQueue, OutboundEntry
|
|
33
33
|
from ._approval_store import ApprovalStore
|
|
34
|
+
from ._delivery_control_store import DeliveryControlStore
|
|
34
35
|
from ._delivery import DurableDelivery, deliver_with_retry
|
|
35
36
|
from ._durable_adapter import DurableAdapterMixin
|
|
36
37
|
from ._outbound_resilience import OutboundResilienceMixin
|
|
@@ -141,6 +142,9 @@ def __getattr__(name: str):
|
|
|
141
142
|
if name == "ApprovalStore":
|
|
142
143
|
from ._approval_store import ApprovalStore
|
|
143
144
|
return ApprovalStore
|
|
145
|
+
if name == "DeliveryControlStore":
|
|
146
|
+
from ._delivery_control_store import DeliveryControlStore
|
|
147
|
+
return DeliveryControlStore
|
|
144
148
|
if name == "DurableDelivery":
|
|
145
149
|
from ._delivery import DurableDelivery
|
|
146
150
|
return DurableDelivery
|
|
@@ -188,6 +192,7 @@ __all__ = [
|
|
|
188
192
|
"InboundJournal", "JournalEntry",
|
|
189
193
|
"OutboundQueue", "OutboundEntry",
|
|
190
194
|
"ApprovalStore",
|
|
195
|
+
"DeliveryControlStore",
|
|
191
196
|
"DurableDelivery", "deliver_with_retry", "deliver_chunked",
|
|
192
197
|
"DurableAdapterMixin",
|
|
193
198
|
"OutboundResilienceMixin",
|
|
@@ -11,7 +11,7 @@ This is an internal module — end users import the concrete classes.
|
|
|
11
11
|
from __future__ import annotations
|
|
12
12
|
|
|
13
13
|
import logging
|
|
14
|
-
from typing import Set
|
|
14
|
+
from typing import Iterable, Optional, Set, Union
|
|
15
15
|
|
|
16
16
|
logger = logging.getLogger(__name__)
|
|
17
17
|
|
|
@@ -33,6 +33,51 @@ def classify_keyword(text: str) -> str | None:
|
|
|
33
33
|
return None
|
|
34
34
|
|
|
35
35
|
|
|
36
|
+
def normalize_approvers(
|
|
37
|
+
allowed_approvers: Optional[Union[Iterable[str], str]],
|
|
38
|
+
) -> Optional[Set[str]]:
|
|
39
|
+
"""Normalise an allowed-approver allowlist to a ``set`` of ``str`` IDs.
|
|
40
|
+
|
|
41
|
+
Returns ``None`` when *allowed_approvers* is ``None`` (no restriction —
|
|
42
|
+
legacy behaviour). Otherwise returns a set of stringified IDs so
|
|
43
|
+
cross-platform user IDs (int Telegram ids, str Slack/Discord ids) compare
|
|
44
|
+
consistently.
|
|
45
|
+
"""
|
|
46
|
+
if allowed_approvers is None:
|
|
47
|
+
return None
|
|
48
|
+
if isinstance(allowed_approvers, str):
|
|
49
|
+
allowed_approvers = allowed_approvers.split(",")
|
|
50
|
+
return {str(a).strip() for a in allowed_approvers if str(a).strip()}
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def is_authorized_actor(
|
|
54
|
+
actor: Optional[str],
|
|
55
|
+
allowed_approvers: Optional[Set[str]],
|
|
56
|
+
) -> bool:
|
|
57
|
+
"""Return whether *actor* may resolve an approval.
|
|
58
|
+
|
|
59
|
+
This is the security boundary for chat-native (inline button / keyword
|
|
60
|
+
reply) approvals: when an allowlist is configured, only an actor in it may
|
|
61
|
+
approve or deny a gated tool, so an unauthorised group member's tap/reply
|
|
62
|
+
can never resolve the request.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
actor: The resolving user's ID (may be ``None`` if the channel could
|
|
66
|
+
not determine it).
|
|
67
|
+
allowed_approvers: Normalised allowlist (see :func:`normalize_approvers`).
|
|
68
|
+
``None`` means no restriction (any actor allowed — legacy
|
|
69
|
+
behaviour). An empty set denies everyone.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
``True`` when there is no restriction, or *actor* is in the allowlist;
|
|
73
|
+
``False`` otherwise (including when *actor* is ``None`` but an
|
|
74
|
+
allowlist is configured).
|
|
75
|
+
"""
|
|
76
|
+
if allowed_approvers is None:
|
|
77
|
+
return True
|
|
78
|
+
return actor is not None and str(actor) in allowed_approvers
|
|
79
|
+
|
|
80
|
+
|
|
36
81
|
async def classify_with_llm(
|
|
37
82
|
text: str,
|
|
38
83
|
tool_name: str,
|
|
@@ -362,6 +362,15 @@ class GatewayConfigSchema(BaseModel):
|
|
|
362
362
|
# Routing and daemon config
|
|
363
363
|
routing: Optional[RoutingConfigSchema] = None
|
|
364
364
|
daemon: Optional[DaemonConfigSchema] = None
|
|
365
|
+
|
|
366
|
+
# Gateway server settings (host/port, drain_timeout, admission control,
|
|
367
|
+
# etc.) and inbound trigger hooks. These are read by
|
|
368
|
+
# ``gateway/server.py::load_gateway_config`` / ``_apply_hooks_from_config``
|
|
369
|
+
# rather than modelled field-by-field here; kept permissive so a real
|
|
370
|
+
# ``gateway.yaml`` with a top-level ``gateway:``/``hooks:`` block validates
|
|
371
|
+
# through this single schema instead of being rejected. See issue #2585.
|
|
372
|
+
gateway: Optional[Dict[str, Any]] = None
|
|
373
|
+
hooks: Optional[List[Dict[str, Any]]] = None
|
|
365
374
|
|
|
366
375
|
@model_validator(mode="after")
|
|
367
376
|
def normalize_and_validate(self):
|
|
@@ -390,8 +399,29 @@ class GatewayConfigSchema(BaseModel):
|
|
|
390
399
|
"(telegram, discord, slack, whatsapp) to your config"
|
|
391
400
|
)
|
|
392
401
|
|
|
393
|
-
# Validate platform names
|
|
394
|
-
|
|
402
|
+
# Validate platform names against the platform registry (single source
|
|
403
|
+
# of truth). This includes built-in platforms, entry-point discovered
|
|
404
|
+
# channels (``praisonai.channels`` / ``praisonai.bots``), and any
|
|
405
|
+
# channel registered at runtime via ``register_platform()``.
|
|
406
|
+
try:
|
|
407
|
+
from ._registry import list_platforms
|
|
408
|
+
valid_platforms = set(list_platforms())
|
|
409
|
+
except Exception:
|
|
410
|
+
import logging
|
|
411
|
+
logging.getLogger(__name__).debug(
|
|
412
|
+
"Platform registry unavailable; falling back to built-in "
|
|
413
|
+
"platform list.", exc_info=True
|
|
414
|
+
)
|
|
415
|
+
# Fall back to the built-in set (single source of truth) if the
|
|
416
|
+
# registry is unavailable.
|
|
417
|
+
try:
|
|
418
|
+
from ._registry import _BUILTIN_PLATFORMS
|
|
419
|
+
valid_platforms = set(_BUILTIN_PLATFORMS)
|
|
420
|
+
except Exception:
|
|
421
|
+
valid_platforms = {
|
|
422
|
+
"telegram", "discord", "slack", "whatsapp",
|
|
423
|
+
"email", "agentmail", "linear",
|
|
424
|
+
}
|
|
395
425
|
for name, channel in self.channels.items():
|
|
396
426
|
platform = (channel.platform or name).lower()
|
|
397
427
|
if platform not in valid_platforms:
|
|
@@ -43,7 +43,10 @@ import threading
|
|
|
43
43
|
import time
|
|
44
44
|
from dataclasses import dataclass
|
|
45
45
|
from pathlib import Path
|
|
46
|
-
from typing import Dict, List, Optional, Tuple
|
|
46
|
+
from typing import TYPE_CHECKING, Dict, List, Optional, Tuple
|
|
47
|
+
|
|
48
|
+
if TYPE_CHECKING:
|
|
49
|
+
from ._delivery_control_store import DeliveryControlStore
|
|
47
50
|
|
|
48
51
|
logger = logging.getLogger(__name__)
|
|
49
52
|
|
|
@@ -100,17 +103,33 @@ class DeadTargetRegistry:
|
|
|
100
103
|
max_size: int = _DEFAULT_MAX_SIZE,
|
|
101
104
|
ttl_seconds: int = _DEFAULT_TTL_SECONDS,
|
|
102
105
|
reprobe_seconds: int = _DEFAULT_REPROBE_SECONDS,
|
|
106
|
+
store: Optional["DeliveryControlStore"] = None,
|
|
103
107
|
) -> None:
|
|
104
108
|
state_dir = Path.home() / ".praisonai" / "state"
|
|
105
|
-
self._persist_path = Path(
|
|
106
|
-
persist_path or (state_dir / "dead_targets.json")
|
|
107
|
-
).expanduser()
|
|
108
109
|
self.max_size = int(max_size)
|
|
109
110
|
self.ttl_seconds = int(ttl_seconds)
|
|
110
111
|
self.reprobe_seconds = int(reprobe_seconds)
|
|
111
112
|
self._lock = threading.Lock()
|
|
112
113
|
# (platform, channel_id) -> DeadTarget
|
|
113
114
|
self._dead: Dict[Tuple[str, str], DeadTarget] = {}
|
|
115
|
+
# Shared SQLite store: when provided, dead targets are stored as rows
|
|
116
|
+
# (atomic upsert) that survive restart and are correct across workers,
|
|
117
|
+
# instead of the per-process in-memory dict + whole-file JSON rewrite
|
|
118
|
+
# (issue #2579). Single-process gateways keep the JSON path (default).
|
|
119
|
+
self._store = store
|
|
120
|
+
if store is not None:
|
|
121
|
+
# The store's dead-target TTL/bound sweeps are table-wide, so every
|
|
122
|
+
# registry sharing one store must agree on ``ttl_seconds`` /
|
|
123
|
+
# ``max_size``. Register this registry's bounds; a later registry
|
|
124
|
+
# attaching to the same store with divergent settings fails loudly
|
|
125
|
+
# instead of silently pruning this registry's suppressions
|
|
126
|
+
# (Greptile P1, issue #2579).
|
|
127
|
+
store.register_dead_config(self.ttl_seconds, self.max_size)
|
|
128
|
+
self._persist_path = None
|
|
129
|
+
return
|
|
130
|
+
self._persist_path = Path(
|
|
131
|
+
persist_path or (state_dir / "dead_targets.json")
|
|
132
|
+
).expanduser()
|
|
114
133
|
self._load()
|
|
115
134
|
|
|
116
135
|
# ── Helpers ─────────────────────────────────────────────────────
|
|
@@ -197,6 +216,14 @@ class DeadTargetRegistry:
|
|
|
197
216
|
def is_dead(self, platform: str, channel_id: str) -> bool:
|
|
198
217
|
"""Return True if the target is currently suppressed as dead."""
|
|
199
218
|
key = self._key(platform, channel_id)
|
|
219
|
+
if self._store is not None:
|
|
220
|
+
ts = self._store.dead_get_ts(key[0], key[1])
|
|
221
|
+
if ts is None:
|
|
222
|
+
return False
|
|
223
|
+
if self.ttl_seconds > 0 and ts < time.time() - self.ttl_seconds:
|
|
224
|
+
self._store.dead_clear(key[0], key[1])
|
|
225
|
+
return False
|
|
226
|
+
return True
|
|
200
227
|
with self._lock:
|
|
201
228
|
entry = self._dead.get(key)
|
|
202
229
|
if entry is None:
|
|
@@ -221,6 +248,11 @@ class DeadTargetRegistry:
|
|
|
221
248
|
if self.reprobe_seconds <= 0:
|
|
222
249
|
return False
|
|
223
250
|
key = self._key(platform, channel_id)
|
|
251
|
+
if self._store is not None:
|
|
252
|
+
ts = self._store.dead_get_ts(key[0], key[1])
|
|
253
|
+
if ts is None:
|
|
254
|
+
return False
|
|
255
|
+
return ts < time.time() - self.reprobe_seconds
|
|
224
256
|
with self._lock:
|
|
225
257
|
entry = self._dead.get(key)
|
|
226
258
|
if entry is None:
|
|
@@ -230,6 +262,18 @@ class DeadTargetRegistry:
|
|
|
230
262
|
def mark_dead(self, platform: str, channel_id: str, reason: str) -> None:
|
|
231
263
|
"""Record a confirmed-permanent failure, suppressing future sends."""
|
|
232
264
|
key = self._key(platform, channel_id)
|
|
265
|
+
if self._store is not None:
|
|
266
|
+
already = self._store.dead_get_ts(key[0], key[1]) is not None
|
|
267
|
+
self._store.dead_mark(key[0], key[1], str(reason))
|
|
268
|
+
self._store.dead_enforce_bound(self.max_size)
|
|
269
|
+
if not already:
|
|
270
|
+
logger.warning(
|
|
271
|
+
"DeadTargetRegistry: suppressing dead target %s:%s (%s)",
|
|
272
|
+
key[0],
|
|
273
|
+
key[1],
|
|
274
|
+
reason,
|
|
275
|
+
)
|
|
276
|
+
return
|
|
233
277
|
with self._lock:
|
|
234
278
|
already = key in self._dead
|
|
235
279
|
self._dead[key] = DeadTarget(
|
|
@@ -248,6 +292,16 @@ class DeadTargetRegistry:
|
|
|
248
292
|
def clear(self, platform: str, channel_id: str) -> None:
|
|
249
293
|
"""Un-suppress a target. Called on every successful send (self-healing)."""
|
|
250
294
|
key = self._key(platform, channel_id)
|
|
295
|
+
if self._store is not None:
|
|
296
|
+
if self._store.dead_get_ts(key[0], key[1]) is None:
|
|
297
|
+
return
|
|
298
|
+
self._store.dead_clear(key[0], key[1])
|
|
299
|
+
logger.info(
|
|
300
|
+
"DeadTargetRegistry: target %s:%s recovered — suppression cleared",
|
|
301
|
+
key[0],
|
|
302
|
+
key[1],
|
|
303
|
+
)
|
|
304
|
+
return
|
|
251
305
|
with self._lock:
|
|
252
306
|
if key not in self._dead:
|
|
253
307
|
return
|
|
@@ -261,6 +315,13 @@ class DeadTargetRegistry:
|
|
|
261
315
|
|
|
262
316
|
def list_dead(self) -> List[DeadTarget]:
|
|
263
317
|
"""Return a snapshot of currently-dead targets (expired ones pruned)."""
|
|
318
|
+
if self._store is not None:
|
|
319
|
+
if self.ttl_seconds > 0:
|
|
320
|
+
self._store.dead_expire(time.time() - self.ttl_seconds)
|
|
321
|
+
return [
|
|
322
|
+
DeadTarget(platform=p, channel_id=c, reason=r, ts=t)
|
|
323
|
+
for (p, c, r, t) in self._store.dead_list()
|
|
324
|
+
]
|
|
264
325
|
with self._lock:
|
|
265
326
|
if self._evict_expired_locked():
|
|
266
327
|
self._save_locked()
|
|
@@ -268,6 +329,10 @@ class DeadTargetRegistry:
|
|
|
268
329
|
|
|
269
330
|
def size(self) -> int:
|
|
270
331
|
"""Number of currently-suppressed targets (expired ones pruned)."""
|
|
332
|
+
if self._store is not None:
|
|
333
|
+
if self.ttl_seconds > 0:
|
|
334
|
+
self._store.dead_expire(time.time() - self.ttl_seconds)
|
|
335
|
+
return self._store.dead_count()
|
|
271
336
|
with self._lock:
|
|
272
337
|
if self._evict_expired_locked():
|
|
273
338
|
self._save_locked()
|