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