PraisonAI 4.6.71__tar.gz → 4.6.74__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.71 → praisonai-4.6.74}/PKG-INFO +2 -2
- {praisonai-4.6.71 → praisonai-4.6.74}/PraisonAI.egg-info/PKG-INFO +2 -2
- {praisonai-4.6.71 → praisonai-4.6.74}/PraisonAI.egg-info/SOURCES.txt +9 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/PraisonAI.egg-info/requires.txt +1 -1
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/docs_generator.py +47 -3
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_lockmap.py +45 -27
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/agents_generator.py +29 -13
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/__init__.py +5 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_config_schema.py +41 -0
- praisonai-4.6.74/praisonai/bots/_identity.py +199 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_presentation_renderer.py +30 -22
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_protocol_mixin.py +191 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_session.py +198 -3
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/botos.py +42 -1
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/delivery.py +221 -3
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/app.py +16 -89
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/agent.py +2 -1
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/command.py +2 -1
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/config.py +78 -24
- praisonai-4.6.74/praisonai/cli/commands/identity.py +110 -0
- praisonai-4.6.74/praisonai/cli/commands/init.py +136 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/run.py +286 -6
- praisonai-4.6.74/praisonai/cli/commands/schedule.py +529 -0
- praisonai-4.6.74/praisonai/cli/configuration/config.schema.json +57 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/configuration/resolver.py +145 -5
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/custom_definitions.py +159 -2
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/output/__init__.py +10 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/output/console.py +8 -1
- praisonai-4.6.74/praisonai/cli/output/event_bridge.py +191 -0
- praisonai-4.6.74/praisonai/framework_adapters/crewai_adapter.py +183 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/framework_adapters/praisonai_adapter.py +28 -16
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/pairing_routes.py +20 -1
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/server.py +491 -59
- praisonai-4.6.74/praisonai/integration/context_files.py +129 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/llm/registry.py +4 -1
- praisonai-4.6.74/praisonai/observability/hooks.py +150 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/_valkey_client.py +0 -1
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/__init__.py +13 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/_base_scheduler.py +64 -1
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/agent_scheduler.py +128 -5
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/async_agent_scheduler.py +10 -5
- praisonai-4.6.74/praisonai/scheduler/blueprint_catalogue.py +364 -0
- praisonai-4.6.74/praisonai/scheduler/condition_gate.py +111 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/enhanced_executor.py +3 -0
- praisonai-4.6.74/praisonai/scheduler/executor.py +566 -0
- praisonai-4.6.74/praisonai/scheduler/run_policy.py +187 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/shared.py +43 -6
- praisonai-4.6.74/praisonai/scheduler/suggestion_engine.py +123 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/yaml_loader.py +1 -1
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tool_resolver.py +64 -56
- praisonai-4.6.74/praisonai/version.py +1 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/pyproject.toml +4 -1
- praisonai-4.6.71/praisonai/cli/commands/schedule.py +0 -209
- praisonai-4.6.71/praisonai/framework_adapters/crewai_adapter.py +0 -172
- praisonai-4.6.71/praisonai/integration/context_files.py +0 -22
- praisonai-4.6.71/praisonai/observability/hooks.py +0 -81
- praisonai-4.6.71/praisonai/scheduler/executor.py +0 -301
- praisonai-4.6.71/praisonai/version.py +0 -1
- {praisonai-4.6.71 → praisonai-4.6.74}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/README.md +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/__main__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_async_bridge.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/docs_extractor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/generator.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/python_extractor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/rust_extractor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/topic_normalizer.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/typescript_extractor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_entrypoint.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_framework_availability.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_lazy_cache.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_logging.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_safe_loader.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/acp/config.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/acp/server.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/acp/session.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/agent.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/api/agent_invoke.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/api/call.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/app/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/app/agentos.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/async_agent_scheduler.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/auto.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_ack.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_approval.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_approval_base.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_auth.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_chunk.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_commands.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_debounce.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_defaults.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_delivery.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_discord_approval.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_dlq.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_durable_adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_email_utils.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_http_approval.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_ingress.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_mirror.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_outbox.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_pairing_ui.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_presentation_approval.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_rate_limit.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_reset_policy.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_resilience.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_run_control.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_slack_approval.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_status.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_streaming.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_telegram_approval.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_typing.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_typing_indicator.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_unknown_user.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_webhook_approval.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/agentmail.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/bot.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/discord.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/email.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/linear.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/media.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/slack.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/telegram.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/webhook_security.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/whatsapp.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/agent.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/benchmark.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/cdp_agent.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/cdp_utils.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/diagnostics.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/launcher.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/playwright_agent.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/profiling.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/protocol.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/report.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/server.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/sessions.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/video.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/claw/default_app.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/_warnings.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/approval_backend.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/branding.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/auth.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/context.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/gateway.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/kanban.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/models.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/permissions.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/validate.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/configuration/credentials.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/configuration/loader.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/configuration/paths.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/configuration/schema.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/execution/core.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/execution/profiler.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/execution/request.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/execution/result.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/_endpoint_registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/_search_registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/action_orchestrator.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/agents.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/at_mentions.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/audit_cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/auto_memory.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/auto_mode.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/autonomy_mode.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/base.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/benchmark.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/capabilities.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/checkpoints.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/cli_profiler.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/code_intelligence.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/compaction.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/compare.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/config_hierarchy.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/context_manager.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/cost_tracker.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/csv_test_runner.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/debug.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/diag.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/display_jsonl.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/gateway_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/runtime_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/runtime_migration_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/engine.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/formatters.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/handler.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/models.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/examples.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/external_agents.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/fast_context.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/file_history.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/flow_display.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/gateway.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/git_attribution.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/git_integration.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/guardrail.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/handoff.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/hooks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/hybrid_workflow.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/image.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/interactive_core_headless.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/interactive_runtime.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/interactive_test_harness.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/interactive_tools.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/interactive_tui.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/job_workflow.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/jobs.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/knowledge.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/knowledge_cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/lite.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/logs.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/lsp_cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/lsp_diagnostics.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/mcp.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/message_queue.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/metrics.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/migrate.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/migration_flow.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/migration_spec.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/n8n.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/observability.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/output_modes.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/output_style.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/package.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/performance.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/plugin_cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/profile.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/profiler/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/profiler/core.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/profiler/optimizations.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/profiler/suite.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/profiling.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/queue/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/queue/manager.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/queue/models.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/queue/persistence.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/queue/scheduler.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/queue/worker.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/recipe_creator.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/recipe_prompts.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/recipes.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/repo_map.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/router.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/safe_shell.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/sandbox_cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/sandbox_executor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/sdk_knowledge.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/session.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/setup/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/setup/handler.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/setup/templates.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/skills.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/slash_commands.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/telemetry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/thinking.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/todo.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/config.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/debug.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/events.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/mock_provider.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/orchestrator.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/help.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/main.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/queue.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/session.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/settings.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/session_store.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/chat.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/composer.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/status.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/wizard.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/yaml_utils.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/config.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/events.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/frontends/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/praison_io.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/repl.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/split_tui.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/tui_app.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/main.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/session/unified.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/state/identifiers.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/state/project_sessions.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/state/sessions.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/ui/config.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/ui/events.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/ui/mg_backend.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/ui/plain.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/ui/rich_backend.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/utils/env_utils.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/utils/project.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli_backends/claude.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli_backends/registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/config/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/config/schema.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/config/validator.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/_storage_path.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/config.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/history_store.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/queue.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/setup.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/daemon/launchd.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/daemon/systemd.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/daemon/windows.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/db/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/db/adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/api.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/docker.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/doctor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/main.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/models.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/providers/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/providers/_registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/providers/aws.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/providers/azure.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/providers/base.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/providers/gcp.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/schema.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/classifier.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/executor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/extractor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/reporter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/runner.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/workspace.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/openai_compat.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/client.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/converter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/framework_adapters/autogen_adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/framework_adapters/base.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/framework_adapters/registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/framework_adapters/validators.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/auth.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/client.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/cookie_auth.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/exec_approval.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/gateway_approval.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/health_monitor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/home_channels.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/kanban_dispatcher.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/magic_link.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/origin_check.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/pairing.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/port_utils.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/push_channels.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/push_delivery.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/push_polling.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/push_presence.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/rate_limiter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/redis_pubsub.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/supervisor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/unicode_utils.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/inc/config.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/inc/models.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/kanban_bridge.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/host_app.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/_unified_registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/base.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/managed_local.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/models.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/path_validation.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/router.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/server.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/store.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/kanban/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/kanban/models.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/kanban/paths.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/kanban/sqlite_store.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/llm/catalogue.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/llm/credentials.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/llm/env.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/llm/gateways.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/agents.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/capabilities.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/knowledge.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/memory.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/prompts.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/resources.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/auth/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/auth/api_key.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/auth/oauth.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/auth/oidc.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/auth/scopes.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/elicitation.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/icons.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/recipe_adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/recipe_cli.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/sampling.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/server.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/tasks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/tool_index.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/transports/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/transports/http_stream.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/transports/stdio.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/n8n/client.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/config.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/_sql_base.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/tests/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/tests/test_all_backends.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/profiler.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/push/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/push/client.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/push/transports.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/core.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/history.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/models.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/security.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/server.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/applier.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/judge.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/plan.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/player.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/reader.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/storage.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/writer.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/_compat.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/_registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/_shell.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/daytona.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/docker.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/e2b.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/modal.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/sandlock.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/ssh.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/subprocess.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/_dispatch.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/security/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/security/audit.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/security/injection.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/security/protected.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/setup/build.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/setup.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/config.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/enhanced_templates.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/manifest.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/models.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/cache.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/loader.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/security.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/tool_override.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/test.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tool_registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/audio.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/kanban_tools.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/_ollama.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/agents/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/agents/grader.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/agents/hook.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/agents/models.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/agents/orchestrator.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/agents/storage.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/llm/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/llm/trainer.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train_vision.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui/callbacks.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui/components/aicoder.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui/context.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/upload_vision.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/setup.cfg +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_approval_system.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_basic.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_cli_features.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_n8n_agent_invoke.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_recipe.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_registry.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_runner.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.6.71 → praisonai-4.6.74}/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.74
|
|
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.74
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.74
|
|
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.74
|
|
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
|
|
@@ -76,6 +76,7 @@ praisonai/bots/_dlq.py
|
|
|
76
76
|
praisonai/bots/_durable_adapter.py
|
|
77
77
|
praisonai/bots/_email_utils.py
|
|
78
78
|
praisonai/bots/_http_approval.py
|
|
79
|
+
praisonai/bots/_identity.py
|
|
79
80
|
praisonai/bots/_ingress.py
|
|
80
81
|
praisonai/bots/_mirror.py
|
|
81
82
|
praisonai/bots/_outbox.py
|
|
@@ -201,6 +202,8 @@ praisonai/cli/commands/flow.py
|
|
|
201
202
|
praisonai/cli/commands/gateway.py
|
|
202
203
|
praisonai/cli/commands/github.py
|
|
203
204
|
praisonai/cli/commands/hooks.py
|
|
205
|
+
praisonai/cli/commands/identity.py
|
|
206
|
+
praisonai/cli/commands/init.py
|
|
204
207
|
praisonai/cli/commands/kanban.py
|
|
205
208
|
praisonai/cli/commands/knowledge.py
|
|
206
209
|
praisonai/cli/commands/langextract.py
|
|
@@ -252,6 +255,7 @@ praisonai/cli/commands/validate.py
|
|
|
252
255
|
praisonai/cli/commands/version.py
|
|
253
256
|
praisonai/cli/commands/workflow.py
|
|
254
257
|
praisonai/cli/configuration/__init__.py
|
|
258
|
+
praisonai/cli/configuration/config.schema.json
|
|
255
259
|
praisonai/cli/configuration/credentials.py
|
|
256
260
|
praisonai/cli/configuration/loader.py
|
|
257
261
|
praisonai/cli/configuration/paths.py
|
|
@@ -442,6 +446,7 @@ praisonai/cli/interactive/frontends/rich_frontend.py
|
|
|
442
446
|
praisonai/cli/interactive/frontends/textual_frontend.py
|
|
443
447
|
praisonai/cli/output/__init__.py
|
|
444
448
|
praisonai/cli/output/console.py
|
|
449
|
+
praisonai/cli/output/event_bridge.py
|
|
445
450
|
praisonai/cli/session/__init__.py
|
|
446
451
|
praisonai/cli/session/unified.py
|
|
447
452
|
praisonai/cli/state/__init__.py
|
|
@@ -762,12 +767,16 @@ praisonai/scheduler/_dispatch.py
|
|
|
762
767
|
praisonai/scheduler/agent_scheduler.py
|
|
763
768
|
praisonai/scheduler/async_agent_scheduler.py
|
|
764
769
|
praisonai/scheduler/base.py
|
|
770
|
+
praisonai/scheduler/blueprint_catalogue.py
|
|
771
|
+
praisonai/scheduler/condition_gate.py
|
|
765
772
|
praisonai/scheduler/daemon_manager.py
|
|
766
773
|
praisonai/scheduler/deployment.py
|
|
767
774
|
praisonai/scheduler/enhanced_executor.py
|
|
768
775
|
praisonai/scheduler/executor.py
|
|
776
|
+
praisonai/scheduler/run_policy.py
|
|
769
777
|
praisonai/scheduler/shared.py
|
|
770
778
|
praisonai/scheduler/state_manager.py
|
|
779
|
+
praisonai/scheduler/suggestion_engine.py
|
|
771
780
|
praisonai/scheduler/yaml_loader.py
|
|
772
781
|
praisonai/security/__init__.py
|
|
773
782
|
praisonai/security/audit.py
|
|
@@ -184,6 +184,40 @@ FEATURE_CATEGORIES = {
|
|
|
184
184
|
'resource': 'Sandbox', # ResourceLimits is part of sandbox execution
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
+
# Doc categories excluded from Python "Documentation Without Features" orphan reporting.
|
|
188
|
+
# These pages document infra, other SDKs, or user-facing tooling outside praisonaiagents exports.
|
|
189
|
+
PYTHON_DOC_ORPHAN_EXCLUSIONS = frozenset({
|
|
190
|
+
'Deployment', # docs/deploy — CI/infra guidance, not Python SDK feature exports
|
|
191
|
+
'AI SDK', # TypeScript SDK pages; tracked in docs/js/ parity separately
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
# Map doc-only category display names to SDK feature display names for parity matching.
|
|
195
|
+
DOC_FEATURE_CATEGORY_ALIASES = {
|
|
196
|
+
'Callbacks': 'Hooks',
|
|
197
|
+
'Middleware': 'Hooks',
|
|
198
|
+
'Vector Store': 'Knowledge',
|
|
199
|
+
'Token Management': 'Context Management',
|
|
200
|
+
'Jobs': 'Workflows',
|
|
201
|
+
'Chat': 'Agent',
|
|
202
|
+
'Streaming': 'LLM',
|
|
203
|
+
'Scheduler': 'Tools',
|
|
204
|
+
'Storage': 'Database',
|
|
205
|
+
'Process': 'Workflows',
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
# Module-path hints when export names do not match FEATURE_CATEGORIES prefixes.
|
|
209
|
+
MODULE_PATH_CATEGORY = (
|
|
210
|
+
('deep_research_agent', 'deep-research'),
|
|
211
|
+
('hooks', 'hook'),
|
|
212
|
+
('streaming', 'stream'),
|
|
213
|
+
('scheduler', 'scheduler'),
|
|
214
|
+
('storage', 'storage'),
|
|
215
|
+
('process', 'process'),
|
|
216
|
+
('context.tokens', 'token'),
|
|
217
|
+
('chat_handler', 'chat'),
|
|
218
|
+
('chat_mixin', 'chat'),
|
|
219
|
+
)
|
|
220
|
+
|
|
187
221
|
|
|
188
222
|
# Minimum lines for a doc to be considered "real" (not a stub)
|
|
189
223
|
MIN_DOC_LINES = 50
|
|
@@ -257,8 +291,14 @@ class DocsParityGenerator:
|
|
|
257
291
|
current = current.parent
|
|
258
292
|
return Path("/Users/praison/praisonai-package")
|
|
259
293
|
|
|
260
|
-
def _categorize_feature(self, feature_name: str) -> str:
|
|
261
|
-
"""Map a feature name to its category."""
|
|
294
|
+
def _categorize_feature(self, feature_name: str, module_path: str = '') -> str:
|
|
295
|
+
"""Map a feature name (and optional module path) to its category."""
|
|
296
|
+
if module_path:
|
|
297
|
+
path = module_path.replace('praisonaiagents.', '')
|
|
298
|
+
for hint, prefix in MODULE_PATH_CATEGORY:
|
|
299
|
+
if hint in path:
|
|
300
|
+
return prefix
|
|
301
|
+
|
|
262
302
|
normalized = normalize_topic(feature_name)
|
|
263
303
|
|
|
264
304
|
# Try to find a matching prefix
|
|
@@ -305,7 +345,8 @@ class DocsParityGenerator:
|
|
|
305
345
|
|
|
306
346
|
for export in exports:
|
|
307
347
|
name = export.name if hasattr(export, 'name') else str(export)
|
|
308
|
-
|
|
348
|
+
module_path = export.module_path if hasattr(export, 'module_path') else ''
|
|
349
|
+
category = self._categorize_feature(name, module_path)
|
|
309
350
|
if category not in groups:
|
|
310
351
|
groups[category] = []
|
|
311
352
|
groups[category].append(name)
|
|
@@ -357,6 +398,9 @@ class DocsParityGenerator:
|
|
|
357
398
|
if prefix == 'other':
|
|
358
399
|
continue
|
|
359
400
|
display_name = FEATURE_CATEGORIES.get(prefix, prefix.title())
|
|
401
|
+
if display_name in PYTHON_DOC_ORPHAN_EXCLUSIONS:
|
|
402
|
+
continue
|
|
403
|
+
display_name = DOC_FEATURE_CATEGORY_ALIASES.get(display_name, display_name)
|
|
360
404
|
if display_name not in result:
|
|
361
405
|
result[display_name] = ([], 0)
|
|
362
406
|
existing_names, existing_lines = result[display_name]
|
|
@@ -5,6 +5,7 @@ re-implementing the dict-of-Lock pattern.
|
|
|
5
5
|
"""
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
import asyncio
|
|
8
|
+
import threading
|
|
8
9
|
import time
|
|
9
10
|
import weakref
|
|
10
11
|
from collections import OrderedDict
|
|
@@ -17,9 +18,11 @@ class LockMap:
|
|
|
17
18
|
Provides a lock per key with LRU eviction and TTL-based cleanup to prevent
|
|
18
19
|
unbounded memory growth in long-running applications.
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
Buckets are keyed by event loop (one loop per OS thread). Structural
|
|
22
|
+
mutations of the bucket/loop maps are guarded by a ``threading.Lock`` so
|
|
23
|
+
the same instance can be safely shared across multiple OS threads, each
|
|
24
|
+
running its own event loop. Per-loop buckets are only ever touched from
|
|
25
|
+
their owning loop, so intra-loop access remains lock-free.
|
|
23
26
|
"""
|
|
24
27
|
|
|
25
28
|
def __init__(self, *, max_entries: int = 10_000, ttl_seconds: float = 3600.0):
|
|
@@ -32,6 +35,8 @@ class LockMap:
|
|
|
32
35
|
# Bucket locks by event loop to avoid cross-loop issues
|
|
33
36
|
self._buckets: Dict[int, "OrderedDict[Hashable, tuple[asyncio.Lock, float]]"] = {}
|
|
34
37
|
self._loop_refs: Dict[int, weakref.ref] = {}
|
|
38
|
+
# Guards structural mutations of _buckets / _loop_refs across OS threads.
|
|
39
|
+
self._struct_lock = threading.Lock()
|
|
35
40
|
self._max = max_entries
|
|
36
41
|
self._ttl = ttl_seconds
|
|
37
42
|
|
|
@@ -47,16 +52,25 @@ class LockMap:
|
|
|
47
52
|
# Get the current running loop
|
|
48
53
|
loop = asyncio.get_running_loop()
|
|
49
54
|
loop_id = id(loop)
|
|
50
|
-
|
|
51
|
-
#
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if
|
|
56
|
-
|
|
57
|
-
self.
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
|
|
56
|
+
# Fast path: a bucket for this loop already exists. The bucket is only
|
|
57
|
+
# ever mutated by its owning loop's thread, so a single dict read is
|
|
58
|
+
# safe under CPython's GIL without taking the cross-thread struct lock.
|
|
59
|
+
bucket = self._buckets.get(loop_id)
|
|
60
|
+
if bucket is None:
|
|
61
|
+
# Slow path: structural mutation shared across threads needs the lock.
|
|
62
|
+
with self._struct_lock:
|
|
63
|
+
# Clean up dead loops (only on first-touch to avoid per-call cost)
|
|
64
|
+
self._cleanup_dead_loops_locked()
|
|
65
|
+
|
|
66
|
+
# Re-check after acquiring the lock (another thread may have raced).
|
|
67
|
+
bucket = self._buckets.get(loop_id)
|
|
68
|
+
if bucket is None:
|
|
69
|
+
bucket = OrderedDict()
|
|
70
|
+
self._buckets[loop_id] = bucket
|
|
71
|
+
self._loop_refs[loop_id] = weakref.ref(loop)
|
|
72
|
+
|
|
73
|
+
# From here on only this loop's owning thread touches the bucket.
|
|
60
74
|
now = time.monotonic()
|
|
61
75
|
|
|
62
76
|
entry = bucket.get(key)
|
|
@@ -99,27 +113,31 @@ class LockMap:
|
|
|
99
113
|
bucket.popitem(last=False)
|
|
100
114
|
break
|
|
101
115
|
|
|
102
|
-
def
|
|
103
|
-
"""Remove buckets for event loops that no longer exist.
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
116
|
+
def _cleanup_dead_loops_locked(self) -> None:
|
|
117
|
+
"""Remove buckets for event loops that no longer exist.
|
|
118
|
+
|
|
119
|
+
Caller must hold ``self._struct_lock``.
|
|
120
|
+
"""
|
|
121
|
+
dead_loops = [
|
|
122
|
+
loop_id
|
|
123
|
+
for loop_id, ref in self._loop_refs.items()
|
|
124
|
+
if (loop := ref()) is None or loop.is_closed()
|
|
125
|
+
]
|
|
110
126
|
for loop_id in dead_loops:
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
del self._buckets[loop_id]
|
|
127
|
+
self._loop_refs.pop(loop_id, None)
|
|
128
|
+
self._buckets.pop(loop_id, None)
|
|
114
129
|
|
|
115
130
|
def drop(self, key: Hashable) -> None:
|
|
116
131
|
"""Manually remove a lock for the given key."""
|
|
117
132
|
# Get the current running loop
|
|
118
133
|
loop = asyncio.get_running_loop()
|
|
119
134
|
loop_id = id(loop)
|
|
120
|
-
|
|
121
|
-
self._buckets
|
|
135
|
+
with self._struct_lock:
|
|
136
|
+
bucket = self._buckets.get(loop_id)
|
|
137
|
+
if bucket is not None:
|
|
138
|
+
bucket.pop(key, None)
|
|
122
139
|
|
|
123
140
|
def size(self) -> int:
|
|
124
141
|
"""Return current number of cached locks across all buckets."""
|
|
125
|
-
|
|
142
|
+
with self._struct_lock:
|
|
143
|
+
return sum(len(bucket) for bucket in self._buckets.values())
|
|
@@ -1,25 +1,41 @@
|
|
|
1
1
|
# praisonai/agents_generator.py
|
|
2
2
|
|
|
3
3
|
import sys
|
|
4
|
-
from typing import Dict, Any, Optional, List
|
|
5
|
-
from .version import __version__
|
|
6
|
-
import yaml, os
|
|
7
|
-
from rich import print
|
|
8
|
-
import inspect
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
import importlib
|
|
11
|
-
import importlib.util
|
|
12
4
|
import os
|
|
5
|
+
import inspect
|
|
13
6
|
import logging
|
|
14
7
|
import re
|
|
15
8
|
import keyword
|
|
16
9
|
import difflib
|
|
10
|
+
import importlib
|
|
11
|
+
import importlib.util
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from typing import Dict, Any, Optional, List
|
|
14
|
+
|
|
15
|
+
from .version import __version__
|
|
17
16
|
|
|
18
17
|
# Import new architecture components
|
|
19
18
|
from .framework_adapters.base import FrameworkAdapter
|
|
20
|
-
from .framework_adapters.registry import FrameworkAdapterRegistry, get_default_registry
|
|
21
19
|
from .tool_registry import ToolRegistry
|
|
22
20
|
|
|
21
|
+
|
|
22
|
+
def _rich_print(*args, **kwargs):
|
|
23
|
+
"""Lazy alias for rich.print — pays the import cost only on first use."""
|
|
24
|
+
from rich import print as _rp
|
|
25
|
+
return _rp(*args, **kwargs)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _yaml_safe_load(stream):
|
|
29
|
+
"""Lazy alias for yaml.safe_load."""
|
|
30
|
+
import yaml
|
|
31
|
+
return yaml.safe_load(stream)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _get_default_adapter_registry():
|
|
35
|
+
"""Lazy import for the adapter registry — defers entry-point discovery."""
|
|
36
|
+
from .framework_adapters.registry import get_default_registry
|
|
37
|
+
return get_default_registry()
|
|
38
|
+
|
|
23
39
|
# Import availability flags
|
|
24
40
|
# Compatibility imports - now handled by centralized detection
|
|
25
41
|
# (inbuilt_tools still defines these but they're read-only compatibility)
|
|
@@ -233,7 +249,7 @@ class AgentsGenerator:
|
|
|
233
249
|
|
|
234
250
|
# DI-friendly: tests/multi-tenant runtimes pass their own registry;
|
|
235
251
|
# CLI users get the process default.
|
|
236
|
-
self._adapter_registry = adapter_registry or
|
|
252
|
+
self._adapter_registry = adapter_registry or _get_default_adapter_registry()
|
|
237
253
|
|
|
238
254
|
# Defer framework adapter creation until YAML is loaded
|
|
239
255
|
# This fixes the issue where empty framework string fails before YAML framework is read
|
|
@@ -543,15 +559,15 @@ class AgentsGenerator:
|
|
|
543
559
|
def _load_config(self):
|
|
544
560
|
"""Load configuration from agent file or agent_yaml."""
|
|
545
561
|
if self.agent_yaml:
|
|
546
|
-
config =
|
|
562
|
+
config = _yaml_safe_load(self.agent_yaml)
|
|
547
563
|
else:
|
|
548
564
|
if self.agent_file in ('/app/api:app', 'api:app'):
|
|
549
565
|
self.agent_file = 'agents.yaml'
|
|
550
566
|
try:
|
|
551
567
|
with open(self.agent_file, 'r') as f:
|
|
552
|
-
config =
|
|
568
|
+
config = _yaml_safe_load(f)
|
|
553
569
|
except FileNotFoundError:
|
|
554
|
-
|
|
570
|
+
_rich_print(f"File not found: {self.agent_file}")
|
|
555
571
|
return None
|
|
556
572
|
|
|
557
573
|
# Apply CLI config overrides to both paths (agent_yaml and agent_file)
|
|
@@ -18,6 +18,7 @@ if TYPE_CHECKING:
|
|
|
18
18
|
from .bot import Bot
|
|
19
19
|
from .botos import BotOS
|
|
20
20
|
from ._session import BotSessionManager
|
|
21
|
+
from ._identity import StoreBackedIdentityResolver
|
|
21
22
|
from ._dlq import InboundDLQ, DLQEntry
|
|
22
23
|
from ._ingress import InboundJournal, JournalEntry
|
|
23
24
|
from ._slack_approval import SlackApproval
|
|
@@ -81,6 +82,9 @@ def __getattr__(name: str):
|
|
|
81
82
|
if name == "BotSessionManager":
|
|
82
83
|
from ._session import BotSessionManager
|
|
83
84
|
return BotSessionManager
|
|
85
|
+
if name == "StoreBackedIdentityResolver":
|
|
86
|
+
from ._identity import StoreBackedIdentityResolver
|
|
87
|
+
return StoreBackedIdentityResolver
|
|
84
88
|
# N4 — inbound dead-letter queue
|
|
85
89
|
if name == "InboundDLQ":
|
|
86
90
|
from ._dlq import InboundDLQ
|
|
@@ -130,6 +134,7 @@ __all__ = [
|
|
|
130
134
|
"TelegramBot", "DiscordBot", "SlackBot", "WhatsAppBot", "LinearBot", "EmailBot", "AgentMailBot",
|
|
131
135
|
"Bot", "BotOS",
|
|
132
136
|
"BotSessionManager",
|
|
137
|
+
"StoreBackedIdentityResolver",
|
|
133
138
|
"InboundDLQ", "DLQEntry",
|
|
134
139
|
"InboundJournal", "JournalEntry",
|
|
135
140
|
"OutboundQueue", "OutboundEntry",
|
|
@@ -76,10 +76,50 @@ class SessionResetConfigSchema(BaseModel):
|
|
|
76
76
|
return self
|
|
77
77
|
|
|
78
78
|
|
|
79
|
+
class SessionCompactionConfigSchema(BaseModel):
|
|
80
|
+
"""Schema for session history compaction configuration.
|
|
81
|
+
|
|
82
|
+
When enabled, older turns in a long-lived bot/gateway session are
|
|
83
|
+
summarised (rather than hard-truncated) once the history exceeds the
|
|
84
|
+
configured budget, so context survives across weeks-long conversations
|
|
85
|
+
and restarts. Disabled by default to preserve legacy behaviour.
|
|
86
|
+
"""
|
|
87
|
+
enabled: bool = False
|
|
88
|
+
strategy: str = "summarize" # truncate | sliding | summarize | smart | prune | llm_summarize
|
|
89
|
+
max_messages: int = 100 # Approx. compaction threshold (converted to a token budget; max_history remains a hard cap)
|
|
90
|
+
max_tokens: Optional[int] = None # Optional token-based budget (overrides messages)
|
|
91
|
+
keep_recent: int = 10 # Number of most-recent messages kept verbatim
|
|
92
|
+
|
|
93
|
+
@field_validator("strategy")
|
|
94
|
+
@classmethod
|
|
95
|
+
def validate_strategy(cls, v: str) -> str:
|
|
96
|
+
allowed = {"truncate", "sliding", "summarize", "smart", "prune", "llm_summarize"}
|
|
97
|
+
if v not in allowed:
|
|
98
|
+
raise ValueError(
|
|
99
|
+
f"Invalid compaction strategy '{v}'. Must be one of: {', '.join(sorted(allowed))}"
|
|
100
|
+
)
|
|
101
|
+
return v
|
|
102
|
+
|
|
103
|
+
@field_validator("max_messages")
|
|
104
|
+
@classmethod
|
|
105
|
+
def validate_max_messages(cls, v: int) -> int:
|
|
106
|
+
if v < 1:
|
|
107
|
+
raise ValueError("max_messages must be at least 1")
|
|
108
|
+
return v
|
|
109
|
+
|
|
110
|
+
@field_validator("keep_recent")
|
|
111
|
+
@classmethod
|
|
112
|
+
def validate_keep_recent(cls, v: int) -> int:
|
|
113
|
+
if v < 0:
|
|
114
|
+
raise ValueError("keep_recent must be non-negative")
|
|
115
|
+
return v
|
|
116
|
+
|
|
117
|
+
|
|
79
118
|
class SessionConfigSchema(BaseModel):
|
|
80
119
|
"""Schema for session configuration."""
|
|
81
120
|
max_history: int = 100
|
|
82
121
|
reset: Optional[SessionResetConfigSchema] = None
|
|
122
|
+
compaction: Optional[SessionCompactionConfigSchema] = None
|
|
83
123
|
|
|
84
124
|
|
|
85
125
|
class StreamingConfigSchema(BaseModel):
|
|
@@ -156,6 +196,7 @@ class ChannelConfigSchema(BaseModel):
|
|
|
156
196
|
user_allowed_commands: Optional[str] = None # Comma-separated list of allowed commands
|
|
157
197
|
routes: Dict[str, str] = Field(default_factory=dict) # Context -> agent_id mapping
|
|
158
198
|
routing: Optional[Dict[str, str]] = None # Alias for routes
|
|
199
|
+
bindings: List[Dict[str, Any]] = Field(default_factory=list) # Priority-ordered route bindings (Issue #2225)
|
|
159
200
|
webhook_url: Optional[str] = None
|
|
160
201
|
webhook_port: int = 8080
|
|
161
202
|
streaming: Optional[StreamingConfigSchema] = None
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Store-backed cross-platform identity resolver (wrapper implementation).
|
|
3
|
+
|
|
4
|
+
The core SDK ships the ``IdentityResolverProtocol`` and lightweight
|
|
5
|
+
in-memory / file-backed resolvers (``praisonaiagents.session.identity``).
|
|
6
|
+
This module provides a *heavy* implementation that reuses the wrapper's
|
|
7
|
+
persistence and **pairing** data so a linked/paired user shares one
|
|
8
|
+
session, history and memory across channels **by default**.
|
|
9
|
+
|
|
10
|
+
``StoreBackedIdentityResolver``:
|
|
11
|
+
|
|
12
|
+
1. Keeps an explicit, persisted ``(platform, user_id) -> canonical_id``
|
|
13
|
+
link map (inherited from the core ``FileIdentityResolver``).
|
|
14
|
+
2. Falls back to the gateway pairing store: when two channels were paired
|
|
15
|
+
under the same label/canonical id, they resolve to that id.
|
|
16
|
+
3. Otherwise returns the per-platform id ``f"{platform}:{user_id}"`` — a
|
|
17
|
+
safe, non-merging default identical to the core resolver.
|
|
18
|
+
|
|
19
|
+
Construction::
|
|
20
|
+
|
|
21
|
+
from praisonai.bots import StoreBackedIdentityResolver
|
|
22
|
+
|
|
23
|
+
resolver = StoreBackedIdentityResolver.from_env()
|
|
24
|
+
botos = BotOS(agent=agent, platforms=[...], identity_resolver=resolver)
|
|
25
|
+
|
|
26
|
+
# Link two channels to one canonical id
|
|
27
|
+
resolver.link("telegram", "12345", "alice")
|
|
28
|
+
resolver.link("whatsapp", "+44...", "alice")
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
from __future__ import annotations
|
|
32
|
+
|
|
33
|
+
import logging
|
|
34
|
+
from pathlib import Path
|
|
35
|
+
from typing import Any, Optional
|
|
36
|
+
|
|
37
|
+
from praisonaiagents.session.identity import FileIdentityResolver
|
|
38
|
+
|
|
39
|
+
logger = logging.getLogger(__name__)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class StoreBackedIdentityResolver(FileIdentityResolver):
|
|
43
|
+
"""File-backed identity resolver augmented with pairing data.
|
|
44
|
+
|
|
45
|
+
Inherits the thread-safe, atomically-persisted link map from
|
|
46
|
+
:class:`praisonaiagents.session.identity.FileIdentityResolver` and adds
|
|
47
|
+
an optional read-through to a gateway :class:`PairingStore` so that
|
|
48
|
+
already-paired channels are recognised without an explicit ``link()``.
|
|
49
|
+
|
|
50
|
+
Resolution order for ``resolve(platform, user_id)``:
|
|
51
|
+
|
|
52
|
+
1. An explicit link registered via :meth:`link` (highest priority).
|
|
53
|
+
2. The pairing store's label for ``(user_id, platform)`` when that
|
|
54
|
+
channel is paired and carries a non-empty label (treated as the
|
|
55
|
+
canonical id) — lets paired users share a session out of the box.
|
|
56
|
+
3. ``f"{platform}:{user_id}"`` — the safe per-platform fallback.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
path: JSON file for the explicit link map. Defaults to the core
|
|
60
|
+
resolver default (``$PRAISONAI_IDENTITY_PATH`` or
|
|
61
|
+
``~/.praisonai/identity.json``).
|
|
62
|
+
pairing_store: Optional object exposing ``is_paired`` /
|
|
63
|
+
``list_paired`` (e.g. ``praisonai.gateway.pairing.PairingStore``).
|
|
64
|
+
When ``None``, behaviour matches the plain file resolver.
|
|
65
|
+
use_pairing_label: When ``True`` (default) a paired channel's
|
|
66
|
+
``label`` is used as its canonical id. Set ``False`` to ignore
|
|
67
|
+
labels and rely solely on explicit links.
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
def __init__(
|
|
71
|
+
self,
|
|
72
|
+
path: Optional[Path | str] = None,
|
|
73
|
+
pairing_store: Optional[Any] = None,
|
|
74
|
+
use_pairing_label: bool = True,
|
|
75
|
+
) -> None:
|
|
76
|
+
super().__init__(path=path)
|
|
77
|
+
self._pairing_store = pairing_store
|
|
78
|
+
self._use_pairing_label = use_pairing_label
|
|
79
|
+
|
|
80
|
+
@classmethod
|
|
81
|
+
def from_env(
|
|
82
|
+
cls,
|
|
83
|
+
path: Optional[Path | str] = None,
|
|
84
|
+
store_dir: Optional[str] = None,
|
|
85
|
+
use_pairing_label: bool = True,
|
|
86
|
+
) -> "StoreBackedIdentityResolver":
|
|
87
|
+
"""Build a resolver wired to the default gateway pairing store.
|
|
88
|
+
|
|
89
|
+
The pairing store is loaded lazily and any failure (e.g. optional
|
|
90
|
+
deps unavailable) degrades gracefully to a plain file resolver.
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
path: Override for the explicit link-map JSON path.
|
|
94
|
+
store_dir: Override for the pairing store directory.
|
|
95
|
+
use_pairing_label: Forwarded to ``__init__``.
|
|
96
|
+
"""
|
|
97
|
+
pairing_store = None
|
|
98
|
+
try:
|
|
99
|
+
from praisonai.gateway.pairing import PairingStore
|
|
100
|
+
|
|
101
|
+
pairing_store = PairingStore(store_dir=store_dir)
|
|
102
|
+
except Exception as e: # pragma: no cover — optional/degraded path
|
|
103
|
+
logger.warning(
|
|
104
|
+
"StoreBackedIdentityResolver: pairing store unavailable, "
|
|
105
|
+
"falling back to link-map only: %s",
|
|
106
|
+
e,
|
|
107
|
+
)
|
|
108
|
+
return cls(
|
|
109
|
+
path=path,
|
|
110
|
+
pairing_store=pairing_store,
|
|
111
|
+
use_pairing_label=use_pairing_label,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
def resolve(self, platform: str, platform_user_id: str) -> str:
|
|
115
|
+
# 1. Explicit links take precedence. The parent returns the
|
|
116
|
+
# per-platform fallback when no explicit link exists; detect
|
|
117
|
+
# that so we can consult the pairing store before giving up.
|
|
118
|
+
fallback = f"{platform}:{platform_user_id}"
|
|
119
|
+
with self._lock:
|
|
120
|
+
explicit = self._links.get((platform, platform_user_id))
|
|
121
|
+
if explicit is not None:
|
|
122
|
+
return explicit
|
|
123
|
+
|
|
124
|
+
# 2. Pairing-store read-through: a paired channel's label is the
|
|
125
|
+
# canonical id shared across channels paired under it.
|
|
126
|
+
if self._pairing_store is not None and self._use_pairing_label:
|
|
127
|
+
try:
|
|
128
|
+
canonical = self._canonical_from_pairing(platform, platform_user_id)
|
|
129
|
+
if canonical:
|
|
130
|
+
return canonical
|
|
131
|
+
except Exception as e: # pragma: no cover — defensive
|
|
132
|
+
logger.warning("identity pairing lookup failed: %s", e)
|
|
133
|
+
|
|
134
|
+
# 3. Safe per-platform fallback.
|
|
135
|
+
return fallback
|
|
136
|
+
|
|
137
|
+
def link_paired(self) -> int:
|
|
138
|
+
"""Materialise pairing-store labels as explicit links.
|
|
139
|
+
|
|
140
|
+
Scans the pairing store and registers an explicit link for every
|
|
141
|
+
paired channel whose label is non-empty, so paired users keep a
|
|
142
|
+
stable canonical id even if the pairing store later changes.
|
|
143
|
+
|
|
144
|
+
Returns the number of links created/updated.
|
|
145
|
+
"""
|
|
146
|
+
if self._pairing_store is None:
|
|
147
|
+
return 0
|
|
148
|
+
count = 0
|
|
149
|
+
try:
|
|
150
|
+
paired = self._pairing_store.list_paired()
|
|
151
|
+
except Exception as e: # pragma: no cover — defensive
|
|
152
|
+
logger.warning("identity link_paired failed to list pairings: %s", e)
|
|
153
|
+
return 0
|
|
154
|
+
for ch in paired:
|
|
155
|
+
label = getattr(ch, "label", "") or ""
|
|
156
|
+
channel_type = getattr(ch, "channel_type", "")
|
|
157
|
+
channel_id = getattr(ch, "channel_id", "")
|
|
158
|
+
if label and channel_type and channel_id:
|
|
159
|
+
# Write in-memory only; flush once after the loop to avoid
|
|
160
|
+
# N atomic disk writes when materialising many pairings.
|
|
161
|
+
with self._lock:
|
|
162
|
+
self._links[(channel_type, channel_id)] = label
|
|
163
|
+
count += 1
|
|
164
|
+
if count:
|
|
165
|
+
self._flush()
|
|
166
|
+
return count
|
|
167
|
+
|
|
168
|
+
def all_links(self) -> list[tuple[str, str, str]]:
|
|
169
|
+
"""Return every explicit link as ``(platform, user_id, canonical)``."""
|
|
170
|
+
with self._lock:
|
|
171
|
+
return [
|
|
172
|
+
(platform, user_id, canonical)
|
|
173
|
+
for (platform, user_id), canonical in self._links.items()
|
|
174
|
+
]
|
|
175
|
+
|
|
176
|
+
def _canonical_from_pairing(
|
|
177
|
+
self, platform: str, platform_user_id: str
|
|
178
|
+
) -> Optional[str]:
|
|
179
|
+
"""Return the pairing label (canonical id) for a paired channel."""
|
|
180
|
+
store = self._pairing_store
|
|
181
|
+
# Fast path: most messages come from unpaired users. ``is_paired`` is
|
|
182
|
+
# an O(1) dict lookup, so short-circuit before the O(n) scan below.
|
|
183
|
+
is_paired = getattr(store, "is_paired", None)
|
|
184
|
+
if callable(is_paired) and not is_paired(platform_user_id, platform):
|
|
185
|
+
return None
|
|
186
|
+
list_paired = getattr(store, "list_paired", None)
|
|
187
|
+
if not callable(list_paired):
|
|
188
|
+
return None
|
|
189
|
+
for ch in list_paired():
|
|
190
|
+
if (
|
|
191
|
+
getattr(ch, "channel_id", None) == platform_user_id
|
|
192
|
+
and getattr(ch, "channel_type", None) == platform
|
|
193
|
+
):
|
|
194
|
+
label = getattr(ch, "label", "") or ""
|
|
195
|
+
return label or None
|
|
196
|
+
return None
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
__all__ = ["StoreBackedIdentityResolver"]
|