PraisonAI 4.6.83__tar.gz → 4.6.95__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.83 → praisonai-4.6.95}/PKG-INFO +11 -2
- {praisonai-4.6.83 → praisonai-4.6.95}/PraisonAI.egg-info/PKG-INFO +11 -2
- {praisonai-4.6.83 → praisonai-4.6.95}/PraisonAI.egg-info/SOURCES.txt +4 -1
- {praisonai-4.6.83 → praisonai-4.6.95}/PraisonAI.egg-info/requires.txt +12 -1
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_framework_availability.py +25 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/agents_generator.py +68 -30
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/__init__.py +14 -0
- praisonai-4.6.95/praisonai/bots/_dead_targets.py +274 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_presentation_approval.py +20 -1
- praisonai-4.6.95/praisonai/bots/_presentation_approval_backend.py +153 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_presentation_renderer.py +32 -4
- praisonai-4.6.95/praisonai/bots/_relay_adapter.py +231 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_resilience.py +94 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/bot.py +45 -1
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/delivery.py +60 -2
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/telegram.py +104 -2
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/tools.py +27 -26
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/approval.py +29 -1
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/runtime_checks.py +30 -4
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/main.py +23 -31
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/config/schema.py +41 -2
- praisonai-4.6.95/praisonai/framework_adapters/_config_builder.py +102 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/autogen_adapter.py +18 -29
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/crewai_adapter.py +24 -29
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/praisonai_adapter.py +31 -44
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/registry.py +1 -1
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tool_resolver.py +90 -12
- praisonai-4.6.95/praisonai/version.py +1 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/pyproject.toml +12 -1
- praisonai-4.6.83/praisonai/bots/_auth.py +0 -140
- praisonai-4.6.83/praisonai/version.py +0 -1
- {praisonai-4.6.83 → praisonai-4.6.95}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/README.md +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/__main__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_async_bridge.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/docs_extractor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/docs_generator.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/generator.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/python_extractor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/rust_extractor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/topic_normalizer.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_dev/parity/typescript_extractor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_entrypoint.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_lazy_cache.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_lockmap.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_logging.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/_safe_loader.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/acp/config.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/acp/server.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/acp/session.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/agent.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/api/agent_invoke.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/api/call.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/app/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/app/agentos.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/async_agent_scheduler.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/auto.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_ack.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_admission.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_approval.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_approval_base.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_approval_store.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_chunk.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_commands.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_config_schema.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_correlation.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_debounce.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_defaults.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_delivery.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_discord_approval.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_dlq.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_durable_adapter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_email_utils.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_http_approval.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_identity.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_ingress.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_media.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_metrics.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_mirror.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_outbound_media.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_outbound_messenger.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_outbound_resilience.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_outbox.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_pairing_ui.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_protocol_mixin.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_rate_limit.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_reset_policy.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_run_control.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_session.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_slack_approval.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_status.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_streaming.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_telegram_approval.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_typing.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_typing_indicator.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_unknown_user.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_webhook_approval.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/agentmail.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/botos.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/discord.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/email.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/linear.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/media.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/slack.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/webhook_security.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/bots/whatsapp.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/agent.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/benchmark.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/cdp_agent.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/cdp_utils.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/cli.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/diagnostics.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/launcher.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/playwright_agent.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/profiling.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/protocol.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/report.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/server.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/sessions.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/browser/video.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/claw/default_app.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/_warnings.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/app.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/approval_backend.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/branding.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/agent.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/attach.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/auth.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/checkpoint.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/command.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/context.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/daemon.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/gateway.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/identity.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/init.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/kanban.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/models.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/permissions.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/validate.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/config.schema.json +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/credentials.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/loader.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/model_resolver.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/oauth.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/paths.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/resolver.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/configuration/schema.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/execution/core.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/execution/profiler.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/execution/request.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/execution/result.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/_endpoint_registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/_search_registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/action_orchestrator.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/agents.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/at_mentions.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/audit_cli.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/auto_memory.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/auto_mode.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/autonomy_mode.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/base.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/benchmark.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/capabilities.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/checkpoints.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/cli_profiler.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/code_intelligence.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/compaction.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/compare.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/config_hierarchy.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/context_manager.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/cost_tracker.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/csv_test_runner.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/custom_definitions.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/debug.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/diag.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/display_jsonl.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/gateway_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/runtime_migration_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/engine.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/formatters.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/handler.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/models.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/doctor/registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/examples.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/external_agents.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/fast_context.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/file_history.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/flow_display.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/gateway.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/git_attribution.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/git_integration.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/guardrail.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/handoff.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/hooks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/hybrid_workflow.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/image.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/interactive_core_headless.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/interactive_runtime.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/interactive_test_harness.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/interactive_tools.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/interactive_tui.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/job_workflow.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/jobs.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/knowledge.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/knowledge_cli.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/lite.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/logs.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/lsp_cli.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/lsp_diagnostics.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/mcp.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/message_queue.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/metrics.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/migrate.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/migration_flow.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/migration_spec.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/n8n.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/observability.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/output_modes.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/output_style.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/package.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/performance.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/profiler/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/profiler/core.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/profiler/optimizations.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/profiler/suite.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/queue/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/queue/manager.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/queue/models.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/queue/persistence.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/queue/scheduler.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/queue/worker.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/recipe_creator.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/recipe_prompts.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/repo_map.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/router.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/safe_shell.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/sandbox_cli.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/sandbox_executor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/sdk_knowledge.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/session.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/session_checkpoints.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/setup/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/setup/handler.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/setup/templates.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/skills.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/slash_commands.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/telemetry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/thinking.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/todo.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/cli.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/config.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/debug.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/events.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/mock_provider.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/orchestrator.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/screens/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/screens/help.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/screens/main.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/screens/queue.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/screens/session.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/screens/settings.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/session_store.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/chat.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/composer.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/status.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/wizard.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/features/yaml_utils.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/config.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/events.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/frontends/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/praison_io.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/repl.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/split_tui.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/interactive/tui_app.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/output/console.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/output/event_bridge.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/session/resume.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/session/unified.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/state/identifiers.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/state/project_sessions.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/state/sessions.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/ui/config.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/ui/events.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/ui/mg_backend.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/ui/plain.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/ui/rich_backend.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/utils/env_utils.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli/utils/project.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli_backends/claude.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/cli_backends/registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/config/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/config/validator.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/_storage_path.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/config.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/history_store.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/queue.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/setup.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/daemon/launchd.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/daemon/systemd.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/daemon/windows.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/db/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/db/adapter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/api.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/docker.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/doctor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/main.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/models.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/providers/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/providers/_registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/providers/aws.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/providers/azure.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/providers/base.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/providers/gcp.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/deploy/schema.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/classifier.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/executor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/extractor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/reporter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/runner.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/docs_runner/workspace.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/openai_compat.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/client.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/converter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/base.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/validators.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/framework_adapters/workflow_framework.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/auth.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/client.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/cookie_auth.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/exec_approval.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/forensics.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/gateway_approval.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/health_monitor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/home_channels.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/kanban_dispatcher.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/magic_link.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/origin_check.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/pairing.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/pairing_routes.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/port_utils.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/push_channels.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/push_delivery.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/push_polling.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/push_presence.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/rate_limiter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/redis_pubsub.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/server.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/supervisor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/gateway/unicode_utils.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/inc/config.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/inc/models.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/kanban_bridge.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/context_files.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/host_app.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/_unified_registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/backend_registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/base.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/managed_local.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/models.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/path_validation.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/router.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/server.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/jobs/store.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/kanban/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/kanban/models.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/kanban/paths.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/kanban/sqlite_store.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/catalogue.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/config.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/credentials.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/env.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/gateways.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/llm/registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/agents.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/capabilities.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/knowledge.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/memory.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/prompts.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/resources.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/auth/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/auth/api_key.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/auth/oauth.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/auth/oidc.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/auth/scopes.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/cli.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/elicitation.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/icons.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/recipe_adapter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/recipe_cli.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/sampling.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/server.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/tasks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/tool_index.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/transports/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/transports/http_stream.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/mcp_server/transports/stdio.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/n8n/client.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/observability/hooks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/_valkey_client.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/config.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/_sql_base.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/tests/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/tests/test_all_backends.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/profiler.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/push/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/push/client.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/push/transports.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/core.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/history.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/models.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/security.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/recipe/server.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/applier.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/judge.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/plan.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/player.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/reader.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/storage.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/replay/writer.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/runtime/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/runtime/__main__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/runtime/client.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/runtime/descriptor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/runtime/server.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/_compat.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/_registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/_shell.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/daytona.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/docker.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/e2b.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/modal.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/sandlock.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/ssh.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/sandbox/subprocess.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/_base_scheduler.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/_dispatch.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/async_agent_scheduler.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/blueprint_catalogue.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/condition_gate.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/run_policy.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/suggestion_engine.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/security/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/security/audit.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/security/injection.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/security/protected.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/setup/build.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/setup.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/config.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/enhanced_templates.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/manifest.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/models.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/cache.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/loader.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/security.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/tool_override.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tool_registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/audio.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/kanban_tools.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/_ollama.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/agents/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/agents/grader.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/agents/hook.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/agents/models.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/agents/orchestrator.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/agents/storage.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/llm/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train/llm/trainer.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/train_vision.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui/callbacks.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui/components/aicoder.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui/context.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/praisonai/upload_vision.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/setup.cfg +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_approval_system.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_basic.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_cli_features.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_n8n_agent_invoke.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_recipe.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_registry.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_runner.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.6.83 → praisonai-4.6.95}/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.95
|
|
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.95
|
|
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
|
|
@@ -93,6 +93,15 @@ Requires-Dist: autogen-ext[openai]>=0.4.0; extra == "autogen-v4"
|
|
|
93
93
|
Requires-Dist: autogen-core>=0.4.0; extra == "autogen-v4"
|
|
94
94
|
Requires-Dist: praisonai-tools>=0.1.0; extra == "autogen-v4"
|
|
95
95
|
Requires-Dist: crewai; extra == "autogen-v4"
|
|
96
|
+
Provides-Extra: langgraph
|
|
97
|
+
Requires-Dist: langgraph<2,>=0.2.0; extra == "langgraph"
|
|
98
|
+
Requires-Dist: langgraph-prebuilt<2,>=0.2.0; extra == "langgraph"
|
|
99
|
+
Requires-Dist: langchain-core<2,>=0.3.0; extra == "langgraph"
|
|
100
|
+
Requires-Dist: langchain-openai<2,>=0.2.0; extra == "langgraph"
|
|
101
|
+
Requires-Dist: praisonai-tools>=0.1.0; extra == "langgraph"
|
|
102
|
+
Provides-Extra: openai-agents
|
|
103
|
+
Requires-Dist: praisonai-frameworks[openai-agents]>=0.1.3; extra == "openai-agents"
|
|
104
|
+
Requires-Dist: praisonai-tools>=0.1.0; extra == "openai-agents"
|
|
96
105
|
Provides-Extra: acp
|
|
97
106
|
Requires-Dist: agent-client-protocol>=0.7.0; extra == "acp"
|
|
98
107
|
Provides-Extra: flow
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.95
|
|
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.95
|
|
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
|
|
@@ -93,6 +93,15 @@ Requires-Dist: autogen-ext[openai]>=0.4.0; extra == "autogen-v4"
|
|
|
93
93
|
Requires-Dist: autogen-core>=0.4.0; extra == "autogen-v4"
|
|
94
94
|
Requires-Dist: praisonai-tools>=0.1.0; extra == "autogen-v4"
|
|
95
95
|
Requires-Dist: crewai; extra == "autogen-v4"
|
|
96
|
+
Provides-Extra: langgraph
|
|
97
|
+
Requires-Dist: langgraph<2,>=0.2.0; extra == "langgraph"
|
|
98
|
+
Requires-Dist: langgraph-prebuilt<2,>=0.2.0; extra == "langgraph"
|
|
99
|
+
Requires-Dist: langchain-core<2,>=0.3.0; extra == "langgraph"
|
|
100
|
+
Requires-Dist: langchain-openai<2,>=0.2.0; extra == "langgraph"
|
|
101
|
+
Requires-Dist: praisonai-tools>=0.1.0; extra == "langgraph"
|
|
102
|
+
Provides-Extra: openai-agents
|
|
103
|
+
Requires-Dist: praisonai-frameworks[openai-agents]>=0.1.3; extra == "openai-agents"
|
|
104
|
+
Requires-Dist: praisonai-tools>=0.1.0; extra == "openai-agents"
|
|
96
105
|
Provides-Extra: acp
|
|
97
106
|
Requires-Dist: agent-client-protocol>=0.7.0; extra == "acp"
|
|
98
107
|
Provides-Extra: flow
|
|
@@ -65,11 +65,11 @@ praisonai/bots/_admission.py
|
|
|
65
65
|
praisonai/bots/_approval.py
|
|
66
66
|
praisonai/bots/_approval_base.py
|
|
67
67
|
praisonai/bots/_approval_store.py
|
|
68
|
-
praisonai/bots/_auth.py
|
|
69
68
|
praisonai/bots/_chunk.py
|
|
70
69
|
praisonai/bots/_commands.py
|
|
71
70
|
praisonai/bots/_config_schema.py
|
|
72
71
|
praisonai/bots/_correlation.py
|
|
72
|
+
praisonai/bots/_dead_targets.py
|
|
73
73
|
praisonai/bots/_debounce.py
|
|
74
74
|
praisonai/bots/_defaults.py
|
|
75
75
|
praisonai/bots/_delivery.py
|
|
@@ -89,10 +89,12 @@ praisonai/bots/_outbound_resilience.py
|
|
|
89
89
|
praisonai/bots/_outbox.py
|
|
90
90
|
praisonai/bots/_pairing_ui.py
|
|
91
91
|
praisonai/bots/_presentation_approval.py
|
|
92
|
+
praisonai/bots/_presentation_approval_backend.py
|
|
92
93
|
praisonai/bots/_presentation_renderer.py
|
|
93
94
|
praisonai/bots/_protocol_mixin.py
|
|
94
95
|
praisonai/bots/_rate_limit.py
|
|
95
96
|
praisonai/bots/_registry.py
|
|
97
|
+
praisonai/bots/_relay_adapter.py
|
|
96
98
|
praisonai/bots/_reset_policy.py
|
|
97
99
|
praisonai/bots/_resilience.py
|
|
98
100
|
praisonai/bots/_run_control.py
|
|
@@ -548,6 +550,7 @@ praisonai/flow/components/__init__.py
|
|
|
548
550
|
praisonai/flow/components/PraisonAI/praisonai_agent.py
|
|
549
551
|
praisonai/flow/components/PraisonAI/praisonai_agents.py
|
|
550
552
|
praisonai/framework_adapters/__init__.py
|
|
553
|
+
praisonai/framework_adapters/_config_builder.py
|
|
551
554
|
praisonai/framework_adapters/autogen_adapter.py
|
|
552
555
|
praisonai/framework_adapters/base.py
|
|
553
556
|
praisonai/framework_adapters/crewai_adapter.py
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
rich>=13.7
|
|
2
2
|
markdown>=3.5
|
|
3
3
|
pyparsing>=3.0.0
|
|
4
|
-
praisonaiagents>=1.6.
|
|
4
|
+
praisonaiagents>=1.6.95
|
|
5
5
|
python-dotenv>=0.19.0
|
|
6
6
|
litellm<2,>=1.83.14
|
|
7
7
|
PyYAML>=6.0
|
|
@@ -156,6 +156,13 @@ langextract>=1.0.0
|
|
|
156
156
|
[langfuse]
|
|
157
157
|
langfuse>=3.0.0
|
|
158
158
|
|
|
159
|
+
[langgraph]
|
|
160
|
+
langgraph<2,>=0.2.0
|
|
161
|
+
langgraph-prebuilt<2,>=0.2.0
|
|
162
|
+
langchain-core<2,>=0.3.0
|
|
163
|
+
langchain-openai<2,>=0.2.0
|
|
164
|
+
praisonai-tools>=0.1.0
|
|
165
|
+
|
|
159
166
|
[lite]
|
|
160
167
|
|
|
161
168
|
[modal]
|
|
@@ -173,6 +180,10 @@ psycopg2-binary>=2.9.0
|
|
|
173
180
|
[observability]
|
|
174
181
|
langfuse>=3.0.0
|
|
175
182
|
|
|
183
|
+
[openai-agents]
|
|
184
|
+
praisonai-frameworks[openai-agents]>=0.1.3
|
|
185
|
+
praisonai-tools>=0.1.0
|
|
186
|
+
|
|
176
187
|
[os]
|
|
177
188
|
fastapi>=0.115.0
|
|
178
189
|
uvicorn>=0.34.0
|
|
@@ -20,6 +20,29 @@ def _autogen_v4_probe() -> bool:
|
|
|
20
20
|
return (importlib.util.find_spec("autogen_agentchat") is not None
|
|
21
21
|
and importlib.util.find_spec("autogen_ext") is not None)
|
|
22
22
|
|
|
23
|
+
def _langgraph_probe() -> bool:
|
|
24
|
+
# find_spec on a submodule imports the parent package; guard against
|
|
25
|
+
# import-time errors in langgraph/its deps crashing the availability check.
|
|
26
|
+
try:
|
|
27
|
+
if importlib.util.find_spec("langgraph") is None:
|
|
28
|
+
return False
|
|
29
|
+
return importlib.util.find_spec("langgraph.prebuilt") is not None
|
|
30
|
+
except Exception:
|
|
31
|
+
return False
|
|
32
|
+
|
|
33
|
+
def _openai_agents_probe() -> bool:
|
|
34
|
+
try:
|
|
35
|
+
importlib.metadata.distribution("openai-agents")
|
|
36
|
+
except importlib.metadata.PackageNotFoundError:
|
|
37
|
+
return False
|
|
38
|
+
if importlib.util.find_spec("agents") is None:
|
|
39
|
+
return False
|
|
40
|
+
try:
|
|
41
|
+
from agents import Runner # noqa: F401
|
|
42
|
+
return True
|
|
43
|
+
except ImportError:
|
|
44
|
+
return False
|
|
45
|
+
|
|
23
46
|
_PROBES: dict[str, Callable[[], bool]] = {
|
|
24
47
|
"crewai": lambda: importlib.util.find_spec("crewai") is not None,
|
|
25
48
|
"autogen": lambda: importlib.util.find_spec("autogen") is not None,
|
|
@@ -40,6 +63,8 @@ _PROBES: dict[str, Callable[[], bool]] = {
|
|
|
40
63
|
"pinecone": lambda: importlib.util.find_spec("pinecone") is not None,
|
|
41
64
|
"qdrant_client": lambda: importlib.util.find_spec("qdrant_client") is not None,
|
|
42
65
|
"weaviate": lambda: importlib.util.find_spec("weaviate") is not None,
|
|
66
|
+
"langgraph": _langgraph_probe,
|
|
67
|
+
"openai_agents": _openai_agents_probe,
|
|
43
68
|
}
|
|
44
69
|
|
|
45
70
|
def is_available(name: str) -> bool:
|
|
@@ -80,10 +80,6 @@ def __dir__():
|
|
|
80
80
|
|
|
81
81
|
|
|
82
82
|
|
|
83
|
-
_TOOL_TIMEOUT_EXECUTOR = None
|
|
84
|
-
# Eagerly initialised so concurrent first-callers always share one lock (and
|
|
85
|
-
# therefore one executor); a lazily-created lock would itself race.
|
|
86
|
-
_TOOL_TIMEOUT_EXECUTOR_LOCK = threading.Lock()
|
|
87
83
|
_DEFAULT_TOOL_TIMEOUT_WORKERS = 32
|
|
88
84
|
|
|
89
85
|
|
|
@@ -113,33 +109,15 @@ def _resolve_tool_timeout_workers():
|
|
|
113
109
|
return workers
|
|
114
110
|
|
|
115
111
|
|
|
116
|
-
def
|
|
117
|
-
"""Lazily create a bounded, observable thread pool for sync tool timeouts.
|
|
118
|
-
|
|
119
|
-
Using a bounded pool (instead of unbounded bare daemon threads) means any
|
|
120
|
-
background work left running after a timeout is at least capped and named,
|
|
121
|
-
so operators can enumerate it rather than accumulating phantom threads.
|
|
122
|
-
"""
|
|
123
|
-
global _TOOL_TIMEOUT_EXECUTOR
|
|
124
|
-
import concurrent.futures
|
|
125
|
-
|
|
126
|
-
with _TOOL_TIMEOUT_EXECUTOR_LOCK:
|
|
127
|
-
if _TOOL_TIMEOUT_EXECUTOR is None:
|
|
128
|
-
_TOOL_TIMEOUT_EXECUTOR = concurrent.futures.ThreadPoolExecutor(
|
|
129
|
-
max_workers=_resolve_tool_timeout_workers(),
|
|
130
|
-
thread_name_prefix="praisonai-tool-timeout",
|
|
131
|
-
)
|
|
132
|
-
return _TOOL_TIMEOUT_EXECUTOR
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
def _wrap_with_timeout(tool, timeout_seconds: float):
|
|
112
|
+
def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory):
|
|
136
113
|
"""Enforce a per-call timeout on a tool, sync or async.
|
|
137
114
|
|
|
138
115
|
For async tools the underlying task is cancelled on timeout. For sync tools
|
|
139
|
-
the call runs in
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
116
|
+
the call runs in an instance-owned bounded thread pool obtained from
|
|
117
|
+
``executor_factory``; on timeout we best-effort cancel the future and log a
|
|
118
|
+
warning. Note: a synchronous call that has already started cannot be forcibly
|
|
119
|
+
interrupted, so background work may continue executing — the returned payload
|
|
120
|
+
flags this with ``background_work_may_continue``.
|
|
143
121
|
"""
|
|
144
122
|
if timeout_seconds is None or timeout_seconds <= 0 or not callable(tool):
|
|
145
123
|
return tool
|
|
@@ -165,7 +143,7 @@ def _wrap_with_timeout(tool, timeout_seconds: float):
|
|
|
165
143
|
|
|
166
144
|
@functools.wraps(tool)
|
|
167
145
|
def _sync_wrapped(*args, **kwargs):
|
|
168
|
-
executor =
|
|
146
|
+
executor = executor_factory()
|
|
169
147
|
future = executor.submit(tool, *args, **kwargs)
|
|
170
148
|
try:
|
|
171
149
|
return future.result(timeout=timeout_seconds)
|
|
@@ -235,7 +213,7 @@ def _resolve_yaml_cli_backend(cli_backend_config, logger):
|
|
|
235
213
|
|
|
236
214
|
|
|
237
215
|
class AgentsGenerator:
|
|
238
|
-
def __init__(self, agent_file, framework, config_list, log_level=None, agent_callback=None, task_callback=None, agent_yaml=None, tools=None, cli_config=None, adapter_registry=None):
|
|
216
|
+
def __init__(self, agent_file, framework, config_list, log_level=None, agent_callback=None, task_callback=None, agent_yaml=None, tools=None, cli_config=None, adapter_registry=None, tool_timeout_executor=None):
|
|
239
217
|
"""
|
|
240
218
|
Initialize the AgentsGenerator object.
|
|
241
219
|
|
|
@@ -289,11 +267,56 @@ class AgentsGenerator:
|
|
|
289
267
|
# DI-friendly: tests/multi-tenant runtimes pass their own registry;
|
|
290
268
|
# CLI users get the process default.
|
|
291
269
|
self._adapter_registry = adapter_registry or _get_default_adapter_registry()
|
|
270
|
+
|
|
271
|
+
# Instance-owned tool-timeout executor so multi-tenant runtimes can scope
|
|
272
|
+
# it per session (no process-wide singleton). Created lazily on first use
|
|
273
|
+
# to avoid spawning threads for generators that never time a sync tool.
|
|
274
|
+
# A caller-supplied executor is treated as borrowed and never shut down.
|
|
275
|
+
self._tool_timeout_executor = tool_timeout_executor
|
|
276
|
+
self._owns_tool_timeout_executor = tool_timeout_executor is None
|
|
277
|
+
self._tool_timeout_executor_lock = threading.Lock()
|
|
292
278
|
|
|
293
279
|
# Defer framework adapter creation until YAML is loaded
|
|
294
280
|
# This fixes the issue where empty framework string fails before YAML framework is read
|
|
295
281
|
self.framework_adapter = None
|
|
296
282
|
|
|
283
|
+
def _get_tool_timeout_executor(self):
|
|
284
|
+
"""Lazily create this generator's bounded sync-tool-timeout thread pool.
|
|
285
|
+
|
|
286
|
+
The pool is owned by the instance (not a module global), so concurrent
|
|
287
|
+
sessions / tenants never share workers and a stuck tool in one session
|
|
288
|
+
cannot starve another.
|
|
289
|
+
"""
|
|
290
|
+
import concurrent.futures
|
|
291
|
+
|
|
292
|
+
with self._tool_timeout_executor_lock:
|
|
293
|
+
if self._tool_timeout_executor is None:
|
|
294
|
+
self._tool_timeout_executor = concurrent.futures.ThreadPoolExecutor(
|
|
295
|
+
max_workers=_resolve_tool_timeout_workers(),
|
|
296
|
+
thread_name_prefix=f"praisonai-tool-timeout-{id(self):x}",
|
|
297
|
+
)
|
|
298
|
+
# Capture the reference inside the lock so a concurrent close() can
|
|
299
|
+
# never null the attribute out between the check and the return.
|
|
300
|
+
return self._tool_timeout_executor
|
|
301
|
+
|
|
302
|
+
def _wrap_tool_with_timeout(self, tool, timeout_seconds):
|
|
303
|
+
"""Wrap a tool with this generator's instance-owned timeout executor."""
|
|
304
|
+
return _wrap_with_timeout(tool, timeout_seconds, self._get_tool_timeout_executor)
|
|
305
|
+
|
|
306
|
+
def close(self):
|
|
307
|
+
"""Release the owned tool-timeout executor; safe to call repeatedly."""
|
|
308
|
+
with self._tool_timeout_executor_lock:
|
|
309
|
+
if self._owns_tool_timeout_executor and self._tool_timeout_executor is not None:
|
|
310
|
+
self._tool_timeout_executor.shutdown(wait=False, cancel_futures=True)
|
|
311
|
+
self._tool_timeout_executor = None
|
|
312
|
+
|
|
313
|
+
def __enter__(self):
|
|
314
|
+
return self
|
|
315
|
+
|
|
316
|
+
def __exit__(self, exc_type, exc, tb):
|
|
317
|
+
self.close()
|
|
318
|
+
return False
|
|
319
|
+
|
|
297
320
|
def _get_framework_adapter(self, framework: str) -> FrameworkAdapter:
|
|
298
321
|
"""
|
|
299
322
|
Get the appropriate framework adapter for the given framework.
|
|
@@ -339,6 +362,21 @@ class AgentsGenerator:
|
|
|
339
362
|
# Handle agent-level overrides using unified approach
|
|
340
363
|
agent_level_fields = ['tool_timeout', 'tool_retry_policy', 'planning_tools', 'autonomy', 'planning', 'web', 'web_fetch']
|
|
341
364
|
agent_overrides = {k: v for k, v in cli_config.items() if k in agent_level_fields}
|
|
365
|
+
|
|
366
|
+
if "tool_retry_policy" in agent_overrides:
|
|
367
|
+
policy = agent_overrides["tool_retry_policy"]
|
|
368
|
+
try:
|
|
369
|
+
from praisonaiagents.tools.retry import RetryPolicy
|
|
370
|
+
|
|
371
|
+
if isinstance(policy, RetryPolicy):
|
|
372
|
+
agent_overrides["tool_retry_policy"] = {
|
|
373
|
+
"max_attempts": policy.max_attempts,
|
|
374
|
+
"delay": policy.initial_delay_ms / 1000.0,
|
|
375
|
+
"backoff_factor": policy.backoff_factor,
|
|
376
|
+
"max_delay": policy.max_delay_ms / 1000.0,
|
|
377
|
+
}
|
|
378
|
+
except (ImportError, AttributeError, TypeError):
|
|
379
|
+
pass
|
|
342
380
|
|
|
343
381
|
# Handle handoff configuration - convert CLI flags into handoff dict
|
|
344
382
|
handoff_fields = ['handoff', 'handoff_policy', 'handoff_timeout', 'handoff_max_depth', 'handoff_max_concurrent', 'handoff_detect_cycles']
|
|
@@ -20,12 +20,14 @@ if TYPE_CHECKING:
|
|
|
20
20
|
from ._session import BotSessionManager
|
|
21
21
|
from ._identity import StoreBackedIdentityResolver
|
|
22
22
|
from ._dlq import InboundDLQ, DLQEntry
|
|
23
|
+
from ._dead_targets import DeadTargetRegistry, DeadTarget
|
|
23
24
|
from ._ingress import InboundJournal, JournalEntry
|
|
24
25
|
from ._slack_approval import SlackApproval
|
|
25
26
|
from ._telegram_approval import TelegramApproval
|
|
26
27
|
from ._discord_approval import DiscordApproval
|
|
27
28
|
from ._webhook_approval import WebhookApproval
|
|
28
29
|
from ._http_approval import HTTPApproval
|
|
30
|
+
from ._presentation_approval_backend import PresentationApprovalBackend
|
|
29
31
|
from ._streaming import StreamingConfig, StreamingMode, DraftStreamer
|
|
30
32
|
from ._outbox import OutboundQueue, OutboundEntry
|
|
31
33
|
from ._approval_store import ApprovalStore
|
|
@@ -85,6 +87,9 @@ def __getattr__(name: str):
|
|
|
85
87
|
if name == "HTTPApproval":
|
|
86
88
|
from ._http_approval import HTTPApproval
|
|
87
89
|
return HTTPApproval
|
|
90
|
+
if name == "PresentationApprovalBackend":
|
|
91
|
+
from ._presentation_approval_backend import PresentationApprovalBackend
|
|
92
|
+
return PresentationApprovalBackend
|
|
88
93
|
# W1 — cross-platform mirror + identity
|
|
89
94
|
if name == "mirror_to_session":
|
|
90
95
|
from ._mirror import mirror_to_session
|
|
@@ -102,6 +107,13 @@ def __getattr__(name: str):
|
|
|
102
107
|
if name == "DLQEntry":
|
|
103
108
|
from ._dlq import DLQEntry
|
|
104
109
|
return DLQEntry
|
|
110
|
+
# Self-healing dead-target registry (issue #2486)
|
|
111
|
+
if name == "DeadTargetRegistry":
|
|
112
|
+
from ._dead_targets import DeadTargetRegistry
|
|
113
|
+
return DeadTargetRegistry
|
|
114
|
+
if name == "DeadTarget":
|
|
115
|
+
from ._dead_targets import DeadTarget
|
|
116
|
+
return DeadTarget
|
|
105
117
|
# Inbound message journal for durable processing
|
|
106
118
|
if name == "InboundJournal":
|
|
107
119
|
from ._ingress import InboundJournal
|
|
@@ -172,6 +184,7 @@ __all__ = [
|
|
|
172
184
|
"BotSessionManager",
|
|
173
185
|
"StoreBackedIdentityResolver",
|
|
174
186
|
"InboundDLQ", "DLQEntry",
|
|
187
|
+
"DeadTargetRegistry", "DeadTarget",
|
|
175
188
|
"InboundJournal", "JournalEntry",
|
|
176
189
|
"OutboundQueue", "OutboundEntry",
|
|
177
190
|
"ApprovalStore",
|
|
@@ -184,6 +197,7 @@ __all__ = [
|
|
|
184
197
|
"use_correlation_id", "GatewayMetrics",
|
|
185
198
|
"SlackApproval", "TelegramApproval", "DiscordApproval",
|
|
186
199
|
"WebhookApproval", "HTTPApproval",
|
|
200
|
+
"PresentationApprovalBackend",
|
|
187
201
|
# Streaming
|
|
188
202
|
"StreamingConfig", "StreamingMode", "DraftStreamer",
|
|
189
203
|
# W1
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Self-healing dead-target registry for outbound delivery (issue #2486).
|
|
3
|
+
|
|
4
|
+
When a gateway delivers to a channel that has become *permanently* unreachable
|
|
5
|
+
— the bot was kicked/blocked, the group was deleted, the chat no longer exists
|
|
6
|
+
— there is otherwise no memory of that. Every subsequent proactive, scheduled
|
|
7
|
+
or broadcast send re-attempts the dead target from scratch: a fresh API call, a
|
|
8
|
+
fresh failure, and a fresh stack of log lines. For a long-lived gateway pushing
|
|
9
|
+
periodic updates to many channels this quietly burns rate-limit budget, slows
|
|
10
|
+
fan-out (every cycle waits on doomed calls), and floods logs with noise.
|
|
11
|
+
|
|
12
|
+
This module provides a small, bounded, **self-healing** registry:
|
|
13
|
+
- record a ``(platform, channel_id)`` as dead only on a *confirmed permanent*
|
|
14
|
+
failure (e.g. ``403 Forbidden``, ``404``/"chat not found"),
|
|
15
|
+
- short-circuit future sends to it (consulted by ``DeliveryRouter.deliver``),
|
|
16
|
+
- **automatically clear** the flag the moment any send to that target
|
|
17
|
+
succeeds again (user re-adds the bot, group is restored).
|
|
18
|
+
|
|
19
|
+
Design constraints (per PraisonAI principles):
|
|
20
|
+
- Wrapper-only — heavy code stays out of the core SDK.
|
|
21
|
+
- Lazy/stdlib only — JSON + atomic file replace, no extra dependency.
|
|
22
|
+
- Default OFF — ``DeliveryRouter`` works exactly as before unless a registry
|
|
23
|
+
is constructed and attached.
|
|
24
|
+
- Bounded: ``max_size`` + ``ttl_seconds`` prevent unbounded growth/staleness.
|
|
25
|
+
- Thread-safe: a per-instance ``threading.Lock`` guards mutation + persistence.
|
|
26
|
+
- Persistence is best-effort: failures are logged, never raised.
|
|
27
|
+
|
|
28
|
+
Public API:
|
|
29
|
+
- ``DeadTargetRegistry(persist_path=None, *, max_size=10_000, ttl_seconds=...)``
|
|
30
|
+
- ``is_dead(platform, channel_id) -> bool``
|
|
31
|
+
- ``should_reprobe(platform, channel_id) -> bool`` (periodic self-heal probe)
|
|
32
|
+
- ``mark_dead(platform, channel_id, reason) -> None``
|
|
33
|
+
- ``clear(platform, channel_id) -> None`` (called on every success)
|
|
34
|
+
- ``list_dead() -> list[DeadTarget]``
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
from __future__ import annotations
|
|
38
|
+
|
|
39
|
+
import json
|
|
40
|
+
import logging
|
|
41
|
+
import os
|
|
42
|
+
import threading
|
|
43
|
+
import time
|
|
44
|
+
from dataclasses import dataclass
|
|
45
|
+
from pathlib import Path
|
|
46
|
+
from typing import Dict, List, Optional, Tuple
|
|
47
|
+
|
|
48
|
+
logger = logging.getLogger(__name__)
|
|
49
|
+
|
|
50
|
+
# 30 days default — a kicked bot is rarely re-added within seconds, but we still
|
|
51
|
+
# want the registry to forget very old entries so a target that was dead long
|
|
52
|
+
# ago is re-probed eventually even if no traffic ever cleared it.
|
|
53
|
+
_DEFAULT_TTL_SECONDS = 30 * 86400
|
|
54
|
+
_DEFAULT_MAX_SIZE = 10_000
|
|
55
|
+
# How long to fully suppress a dead target before allowing a single re-probe.
|
|
56
|
+
# A kicked bot is rarely re-added within seconds, but waiting the full 30-day
|
|
57
|
+
# TTL to retry a *recovered* target is far too long. Letting one send through
|
|
58
|
+
# roughly once an hour bounds self-heal latency to ~1h while still suppressing
|
|
59
|
+
# the overwhelming majority of doomed cycles.
|
|
60
|
+
_DEFAULT_REPROBE_SECONDS = 3600
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@dataclass(frozen=True)
|
|
64
|
+
class DeadTarget:
|
|
65
|
+
"""A single target confirmed permanently unreachable."""
|
|
66
|
+
|
|
67
|
+
platform: str
|
|
68
|
+
channel_id: str
|
|
69
|
+
reason: str
|
|
70
|
+
ts: float
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class DeadTargetRegistry:
|
|
74
|
+
"""Persistent, bounded, self-healing registry of dead delivery targets.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
persist_path: JSON file path for durability. Defaults to
|
|
78
|
+
``~/.praisonai/state/dead_targets.json``. Pass ``None`` explicitly
|
|
79
|
+
via ``persist=False`` semantics is not supported; use a temp path
|
|
80
|
+
for ephemeral instances in tests.
|
|
81
|
+
max_size: Maximum dead entries kept; oldest evicted when exceeded.
|
|
82
|
+
ttl_seconds: Entries older than this are dropped on the next access so
|
|
83
|
+
a long-dead target is eventually re-probed.
|
|
84
|
+
|
|
85
|
+
Example::
|
|
86
|
+
|
|
87
|
+
from praisonai.bots import DeadTargetRegistry
|
|
88
|
+
|
|
89
|
+
reg = DeadTargetRegistry()
|
|
90
|
+
if reg.is_dead("telegram", "-1001234"):
|
|
91
|
+
... # short-circuit
|
|
92
|
+
reg.mark_dead("telegram", "-1001234", reason="403 Forbidden: bot kicked")
|
|
93
|
+
reg.clear("telegram", "-1001234") # on next successful send
|
|
94
|
+
"""
|
|
95
|
+
|
|
96
|
+
def __init__(
|
|
97
|
+
self,
|
|
98
|
+
persist_path: Optional[Path] = None,
|
|
99
|
+
*,
|
|
100
|
+
max_size: int = _DEFAULT_MAX_SIZE,
|
|
101
|
+
ttl_seconds: int = _DEFAULT_TTL_SECONDS,
|
|
102
|
+
reprobe_seconds: int = _DEFAULT_REPROBE_SECONDS,
|
|
103
|
+
) -> None:
|
|
104
|
+
state_dir = Path.home() / ".praisonai" / "state"
|
|
105
|
+
self._persist_path = Path(
|
|
106
|
+
persist_path or (state_dir / "dead_targets.json")
|
|
107
|
+
).expanduser()
|
|
108
|
+
self.max_size = int(max_size)
|
|
109
|
+
self.ttl_seconds = int(ttl_seconds)
|
|
110
|
+
self.reprobe_seconds = int(reprobe_seconds)
|
|
111
|
+
self._lock = threading.Lock()
|
|
112
|
+
# (platform, channel_id) -> DeadTarget
|
|
113
|
+
self._dead: Dict[Tuple[str, str], DeadTarget] = {}
|
|
114
|
+
self._load()
|
|
115
|
+
|
|
116
|
+
# ── Helpers ─────────────────────────────────────────────────────
|
|
117
|
+
@staticmethod
|
|
118
|
+
def _key(platform: str, channel_id: str) -> Tuple[str, str]:
|
|
119
|
+
return (str(platform).lower(), str(channel_id))
|
|
120
|
+
|
|
121
|
+
def _evict_expired_locked(self) -> bool:
|
|
122
|
+
"""Drop expired entries. Caller must hold the lock. Returns True if changed."""
|
|
123
|
+
if self.ttl_seconds <= 0:
|
|
124
|
+
return False
|
|
125
|
+
cutoff = time.time() - self.ttl_seconds
|
|
126
|
+
stale = [k for k, v in self._dead.items() if v.ts < cutoff]
|
|
127
|
+
for k in stale:
|
|
128
|
+
self._dead.pop(k, None)
|
|
129
|
+
return bool(stale)
|
|
130
|
+
|
|
131
|
+
def _enforce_bound_locked(self) -> None:
|
|
132
|
+
"""Evict oldest entries beyond ``max_size``. Caller must hold the lock."""
|
|
133
|
+
if self.max_size <= 0 or len(self._dead) <= self.max_size:
|
|
134
|
+
return
|
|
135
|
+
# Oldest first by timestamp.
|
|
136
|
+
ordered = sorted(self._dead.items(), key=lambda kv: kv[1].ts)
|
|
137
|
+
overflow = len(self._dead) - self.max_size
|
|
138
|
+
for k, _ in ordered[:overflow]:
|
|
139
|
+
self._dead.pop(k, None)
|
|
140
|
+
|
|
141
|
+
# ── Persistence (best-effort, atomic) ───────────────────────────
|
|
142
|
+
def _load(self) -> None:
|
|
143
|
+
if not self._persist_path.exists():
|
|
144
|
+
return
|
|
145
|
+
try:
|
|
146
|
+
with open(self._persist_path, "r") as f:
|
|
147
|
+
data = json.load(f)
|
|
148
|
+
except Exception as e:
|
|
149
|
+
logger.warning("DeadTargetRegistry: failed to load %s: %s", self._persist_path, e)
|
|
150
|
+
return
|
|
151
|
+
entries = data.get("dead", []) if isinstance(data, dict) else []
|
|
152
|
+
if not isinstance(entries, list):
|
|
153
|
+
return
|
|
154
|
+
for item in entries:
|
|
155
|
+
try:
|
|
156
|
+
platform = str(item["platform"]).lower()
|
|
157
|
+
channel_id = str(item["channel_id"])
|
|
158
|
+
reason = str(item.get("reason", ""))
|
|
159
|
+
ts = float(item.get("ts", time.time()))
|
|
160
|
+
except (KeyError, TypeError, ValueError):
|
|
161
|
+
continue
|
|
162
|
+
self._dead[(platform, channel_id)] = DeadTarget(
|
|
163
|
+
platform=platform, channel_id=channel_id, reason=reason, ts=ts
|
|
164
|
+
)
|
|
165
|
+
# Prune anything already expired/over-bound on load.
|
|
166
|
+
self._evict_expired_locked()
|
|
167
|
+
self._enforce_bound_locked()
|
|
168
|
+
logger.info(
|
|
169
|
+
"DeadTargetRegistry: loaded %d dead target(s) from %s",
|
|
170
|
+
len(self._dead),
|
|
171
|
+
self._persist_path,
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
def _save_locked(self) -> None:
|
|
175
|
+
"""Persist current state. Caller must hold the lock."""
|
|
176
|
+
try:
|
|
177
|
+
data = {
|
|
178
|
+
"dead": [
|
|
179
|
+
{
|
|
180
|
+
"platform": v.platform,
|
|
181
|
+
"channel_id": v.channel_id,
|
|
182
|
+
"reason": v.reason,
|
|
183
|
+
"ts": v.ts,
|
|
184
|
+
}
|
|
185
|
+
for v in self._dead.values()
|
|
186
|
+
]
|
|
187
|
+
}
|
|
188
|
+
self._persist_path.parent.mkdir(parents=True, exist_ok=True)
|
|
189
|
+
tmp_path = self._persist_path.with_suffix(self._persist_path.suffix + ".tmp")
|
|
190
|
+
with open(tmp_path, "w") as f:
|
|
191
|
+
json.dump(data, f, indent=2)
|
|
192
|
+
os.replace(tmp_path, self._persist_path)
|
|
193
|
+
except Exception as e:
|
|
194
|
+
logger.error("DeadTargetRegistry: failed to save %s: %s", self._persist_path, e)
|
|
195
|
+
|
|
196
|
+
# ── Public API ──────────────────────────────────────────────────
|
|
197
|
+
def is_dead(self, platform: str, channel_id: str) -> bool:
|
|
198
|
+
"""Return True if the target is currently suppressed as dead."""
|
|
199
|
+
key = self._key(platform, channel_id)
|
|
200
|
+
with self._lock:
|
|
201
|
+
entry = self._dead.get(key)
|
|
202
|
+
if entry is None:
|
|
203
|
+
return False
|
|
204
|
+
# Honour TTL lazily so a long-dead target re-enters circulation.
|
|
205
|
+
if self.ttl_seconds > 0 and entry.ts < time.time() - self.ttl_seconds:
|
|
206
|
+
self._dead.pop(key, None)
|
|
207
|
+
self._save_locked()
|
|
208
|
+
return False
|
|
209
|
+
return True
|
|
210
|
+
|
|
211
|
+
def should_reprobe(self, platform: str, channel_id: str) -> bool:
|
|
212
|
+
"""Return True if a dead target is due for a single self-healing re-probe.
|
|
213
|
+
|
|
214
|
+
A suppressed target can only prove it has recovered by being sent to, but
|
|
215
|
+
``is_dead`` would otherwise block every send until the (long) TTL expires.
|
|
216
|
+
To bound self-heal latency, once ``reprobe_seconds`` has elapsed since the
|
|
217
|
+
target was last marked dead we allow *one* send through. If it succeeds,
|
|
218
|
+
:meth:`clear` un-suppresses it; if it fails permanently again,
|
|
219
|
+
:meth:`mark_dead` resets the clock for another ``reprobe_seconds`` window.
|
|
220
|
+
"""
|
|
221
|
+
if self.reprobe_seconds <= 0:
|
|
222
|
+
return False
|
|
223
|
+
key = self._key(platform, channel_id)
|
|
224
|
+
with self._lock:
|
|
225
|
+
entry = self._dead.get(key)
|
|
226
|
+
if entry is None:
|
|
227
|
+
return False
|
|
228
|
+
return entry.ts < time.time() - self.reprobe_seconds
|
|
229
|
+
|
|
230
|
+
def mark_dead(self, platform: str, channel_id: str, reason: str) -> None:
|
|
231
|
+
"""Record a confirmed-permanent failure, suppressing future sends."""
|
|
232
|
+
key = self._key(platform, channel_id)
|
|
233
|
+
with self._lock:
|
|
234
|
+
already = key in self._dead
|
|
235
|
+
self._dead[key] = DeadTarget(
|
|
236
|
+
platform=key[0], channel_id=key[1], reason=str(reason), ts=time.time()
|
|
237
|
+
)
|
|
238
|
+
self._enforce_bound_locked()
|
|
239
|
+
self._save_locked()
|
|
240
|
+
if not already:
|
|
241
|
+
logger.warning(
|
|
242
|
+
"DeadTargetRegistry: suppressing dead target %s:%s (%s)",
|
|
243
|
+
key[0],
|
|
244
|
+
key[1],
|
|
245
|
+
reason,
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
def clear(self, platform: str, channel_id: str) -> None:
|
|
249
|
+
"""Un-suppress a target. Called on every successful send (self-healing)."""
|
|
250
|
+
key = self._key(platform, channel_id)
|
|
251
|
+
with self._lock:
|
|
252
|
+
if key not in self._dead:
|
|
253
|
+
return
|
|
254
|
+
self._dead.pop(key, None)
|
|
255
|
+
self._save_locked()
|
|
256
|
+
logger.info(
|
|
257
|
+
"DeadTargetRegistry: target %s:%s recovered — suppression cleared",
|
|
258
|
+
key[0],
|
|
259
|
+
key[1],
|
|
260
|
+
)
|
|
261
|
+
|
|
262
|
+
def list_dead(self) -> List[DeadTarget]:
|
|
263
|
+
"""Return a snapshot of currently-dead targets (expired ones pruned)."""
|
|
264
|
+
with self._lock:
|
|
265
|
+
if self._evict_expired_locked():
|
|
266
|
+
self._save_locked()
|
|
267
|
+
return sorted(self._dead.values(), key=lambda d: d.ts)
|
|
268
|
+
|
|
269
|
+
def size(self) -> int:
|
|
270
|
+
"""Number of currently-suppressed targets (expired ones pruned)."""
|
|
271
|
+
with self._lock:
|
|
272
|
+
if self._evict_expired_locked():
|
|
273
|
+
self._save_locked()
|
|
274
|
+
return len(self._dead)
|