PraisonAI 4.6.101__tar.gz → 4.6.102__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.101 → praisonai-4.6.102}/PKG-INFO +4 -2
- {praisonai-4.6.101 → praisonai-4.6.102}/PraisonAI.egg-info/PKG-INFO +4 -2
- {praisonai-4.6.101 → praisonai-4.6.102}/PraisonAI.egg-info/SOURCES.txt +1 -5
- {praisonai-4.6.101 → praisonai-4.6.102}/PraisonAI.egg-info/requires.txt +3 -1
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_registry.py +9 -2
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/adapters/vector_stores.py +9 -2
- praisonai-4.6.102/praisonai/cli_backends/__init__.py +40 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/__init__.py +7 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/factory.py +13 -4
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/registry.py +50 -4
- praisonai-4.6.102/praisonai/persistence/tests/test_registry_lazy.py +80 -0
- praisonai-4.6.102/praisonai/runtime/__init__.py +45 -0
- praisonai-4.6.102/praisonai/runtime/__main__.py +11 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/tool_resolver.py +127 -1
- praisonai-4.6.102/praisonai/version.py +1 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/pyproject.toml +7 -1
- praisonai-4.6.101/praisonai/cli_backends/__init__.py +0 -73
- praisonai-4.6.101/praisonai/cli_backends/claude.py +0 -373
- praisonai-4.6.101/praisonai/cli_backends/registry.py +0 -113
- praisonai-4.6.101/praisonai/runtime/__init__.py +0 -36
- praisonai-4.6.101/praisonai/runtime/__main__.py +0 -81
- praisonai-4.6.101/praisonai/runtime/client.py +0 -131
- praisonai-4.6.101/praisonai/runtime/descriptor.py +0 -209
- praisonai-4.6.101/praisonai/runtime/server.py +0 -356
- praisonai-4.6.101/praisonai/version.py +0 -1
- {praisonai-4.6.101 → praisonai-4.6.102}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/README.md +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/__main__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_async_bridge.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_dev/parity/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_dev/parity/docs_extractor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_dev/parity/docs_generator.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_dev/parity/generator.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_dev/parity/python_extractor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_dev/parity/rust_extractor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_dev/parity/topic_normalizer.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_dev/parity/typescript_extractor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_entrypoint.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_framework_availability.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_lazy_cache.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_lockmap.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_logging.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/_safe_loader.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/acp/config.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/acp/server.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/acp/session.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/agent.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/agents_generator.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/api/agent_invoke.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/api/call.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/app/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/app/agentos.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/async_agent_scheduler.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/auto.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_ack.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_admission.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_approval.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_approval_base.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_approval_store.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_chunk.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_commands.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_config_schema.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_correlation.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_dead_targets.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_debounce.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_defaults.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_delivery.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_discord_approval.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_dlq.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_durable_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_email_utils.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_http_approval.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_identity.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_ingress.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_media.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_metrics.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_mirror.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_outbound_media.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_outbound_messenger.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_outbound_resilience.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_outbox.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_pairing_ui.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_presentation_approval.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_presentation_approval_backend.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_presentation_renderer.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_protocol_mixin.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_rate_limit.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_relay_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_reset_policy.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_resilience.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_run_control.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_session.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_slack_approval.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_status.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_streaming.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_telegram_approval.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_typing.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_typing_indicator.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_unknown_user.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_webhook_approval.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/agentmail.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/bot.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/botos.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/delivery.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/discord.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/email.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/linear.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/media.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/slack.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/telegram.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/webhook_security.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/bots/whatsapp.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/agent.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/benchmark.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/cdp_agent.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/cdp_utils.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/cli.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/diagnostics.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/launcher.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/playwright_agent.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/profiling.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/protocol.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/report.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/server.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/sessions.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/browser/video.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/claw/default_app.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/_warnings.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/app.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/approval_backend.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/branding.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/agent.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/attach.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/auth.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/checkpoint.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/command.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/context.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/daemon.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/gateway.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/identity.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/init.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/kanban.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/models.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/permissions.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/validate.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/configuration/config.schema.json +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/configuration/credentials.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/configuration/loader.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/configuration/model_resolver.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/configuration/oauth.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/configuration/paths.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/configuration/resolver.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/configuration/schema.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/execution/core.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/execution/profiler.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/execution/request.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/execution/result.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/_endpoint_registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/_search_registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/action_orchestrator.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/agents.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/at_mentions.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/audit_cli.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/auto_memory.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/auto_mode.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/autonomy_mode.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/base.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/benchmark.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/capabilities.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/checkpoints.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/cli_profiler.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/code_intelligence.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/compaction.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/compare.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/config_hierarchy.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/context_manager.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/cost_tracker.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/csv_test_runner.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/custom_definitions.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/debug.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/diag.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/display_jsonl.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/gateway_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/runtime_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/runtime_migration_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/engine.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/formatters.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/handler.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/models.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/doctor/registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/examples.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/external_agents.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/fast_context.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/file_history.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/flow_display.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/gateway.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/git_attribution.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/git_integration.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/guardrail.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/handoff.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/hooks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/hybrid_workflow.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/image.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/interactive_core_headless.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/interactive_runtime.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/interactive_test_harness.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/interactive_tools.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/interactive_tui.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/job_workflow.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/jobs.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/knowledge.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/knowledge_cli.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/lite.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/logs.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/lsp_cli.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/lsp_diagnostics.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/mcp.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/message_queue.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/metrics.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/migrate.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/migration_flow.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/migration_spec.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/n8n.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/observability.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/output_modes.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/output_style.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/package.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/performance.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/profiler/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/profiler/core.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/profiler/optimizations.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/profiler/suite.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/queue/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/queue/manager.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/queue/models.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/queue/persistence.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/queue/scheduler.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/queue/worker.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/recipe_creator.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/recipe_prompts.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/repo_map.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/router.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/safe_shell.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/sandbox_cli.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/sandbox_executor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/sdk_knowledge.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/session.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/session_checkpoints.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/setup/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/setup/handler.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/setup/templates.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/skills.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/slash_commands.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/telemetry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/thinking.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/todo.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/cli.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/config.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/debug.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/events.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/mock_provider.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/orchestrator.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/screens/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/screens/help.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/screens/main.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/screens/queue.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/screens/session.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/screens/settings.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/session_store.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/widgets/chat.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/widgets/composer.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/widgets/status.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/wizard.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/features/yaml_utils.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/interactive/config.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/interactive/events.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/interactive/frontends/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/interactive/praison_io.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/interactive/repl.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/interactive/split_tui.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/interactive/tui_app.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/main.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/output/console.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/output/event_bridge.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/session/resume.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/session/unified.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/state/identifiers.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/state/project_sessions.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/state/sessions.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/ui/config.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/ui/events.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/ui/mg_backend.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/ui/plain.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/ui/rich_backend.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/utils/env_utils.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/cli/utils/project.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/config/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/config/schema.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/config/validator.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/context/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/context/_storage_path.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/context/config.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/context/history_store.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/context/queue.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/context/setup.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/daemon/launchd.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/daemon/systemd.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/daemon/windows.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/db/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/db/adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/deploy/api.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/deploy/docker.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/deploy/doctor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/deploy/main.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/deploy/models.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/deploy/providers/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/deploy/providers/_registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/deploy/providers/aws.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/deploy/providers/azure.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/deploy/providers/base.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/deploy/providers/gcp.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/deploy/schema.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/docs_runner/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/docs_runner/classifier.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/docs_runner/executor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/docs_runner/extractor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/docs_runner/reporter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/docs_runner/runner.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/docs_runner/workspace.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/providers/openai_compat.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/flow/client.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/flow/converter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/framework_adapters/_config_builder.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/framework_adapters/autogen_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/framework_adapters/base.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/framework_adapters/crewai_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/framework_adapters/registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/framework_adapters/validators.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/framework_adapters/workflow_framework.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/auth.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/client.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/cookie_auth.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/exec_approval.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/forensics.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/gateway_approval.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/health_monitor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/home_channels.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/kanban_dispatcher.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/magic_link.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/origin_check.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/pairing.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/pairing_routes.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/port_utils.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/push_channels.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/push_delivery.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/push_polling.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/push_presence.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/rate_limiter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/redis_pubsub.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/server.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/supervisor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/gateway/unicode_utils.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/inc/config.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/inc/models.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/bridges/kanban_bridge.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/context_files.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/host_app.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/_unified_registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/backend_registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/base.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/managed_local.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/jobs/models.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/jobs/path_validation.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/jobs/router.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/jobs/server.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/jobs/store.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/kanban/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/kanban/models.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/kanban/paths.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/kanban/sqlite_store.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/llm/catalogue.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/llm/config.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/llm/credentials.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/llm/env.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/llm/gateways.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/llm/registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/adapters/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/adapters/agents.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/adapters/capabilities.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/adapters/knowledge.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/adapters/memory.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/adapters/prompts.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/adapters/resources.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/auth/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/auth/api_key.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/auth/oauth.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/auth/oidc.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/auth/scopes.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/cli.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/elicitation.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/icons.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/recipe_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/recipe_cli.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/sampling.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/server.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/tasks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/tool_index.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/transports/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/transports/http_stream.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/mcp_server/transports/stdio.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/n8n/client.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/observability/hooks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/_valkey_client.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/config.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/_sql_base.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/tests/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/tests/test_all_backends.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/profiler.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/push/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/push/client.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/push/transports.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/recipe/core.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/recipe/history.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/recipe/models.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/recipe/security.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/recipe/server.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/replay/applier.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/replay/judge.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/replay/plan.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/replay/player.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/replay/reader.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/replay/storage.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/replay/writer.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/sandbox/_compat.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/sandbox/_registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/sandbox/_shell.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/sandbox/daytona.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/sandbox/docker.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/sandbox/e2b.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/sandbox/modal.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/sandbox/sandlock.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/sandbox/ssh.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/sandbox/subprocess.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/_base_scheduler.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/_dispatch.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/async_agent_scheduler.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/blueprint_catalogue.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/condition_gate.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/run_policy.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/suggestion_engine.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/security/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/security/audit.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/security/injection.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/security/protected.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/setup/build.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/setup.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/config.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/enhanced_templates.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/manifest.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/models.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/templates/cache.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/templates/loader.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/templates/registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/templates/security.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/templates/tool_override.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/tool_registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/tools/audio.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/tools/kanban_tools.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/train/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/train/_ollama.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/train/agents/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/train/agents/grader.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/train/agents/hook.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/train/agents/models.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/train/agents/orchestrator.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/train/agents/storage.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/train/llm/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/train/llm/trainer.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/train.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/train_vision.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui/callbacks.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui/components/aicoder.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui/context.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/praisonai/upload_vision.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/setup.cfg +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_approval_system.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_basic.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_cli_features.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_n8n_agent_invoke.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_recipe.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_registry.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_runner.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.6.101 → praisonai-4.6.102}/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.102
|
|
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,8 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=1.6.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.102
|
|
15
|
+
Requires-Dist: praisonai-code
|
|
15
16
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
17
|
Requires-Dist: litellm<2,>=1.83.14
|
|
17
18
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -21,6 +22,7 @@ Requires-Dist: click>=8.4.2
|
|
|
21
22
|
Requires-Dist: textual>=0.47.0
|
|
22
23
|
Requires-Dist: pydantic>=2.0.0
|
|
23
24
|
Requires-Dist: toml>=0.10.2
|
|
25
|
+
Requires-Dist: praisonai-code
|
|
24
26
|
Provides-Extra: ui
|
|
25
27
|
Requires-Dist: aiui<0.4,>=0.3.121; extra == "ui"
|
|
26
28
|
Provides-Extra: gradio
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.102
|
|
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,8 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=1.6.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.102
|
|
15
|
+
Requires-Dist: praisonai-code
|
|
15
16
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
17
|
Requires-Dist: litellm<2,>=1.83.14
|
|
17
18
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -21,6 +22,7 @@ Requires-Dist: click>=8.4.2
|
|
|
21
22
|
Requires-Dist: textual>=0.47.0
|
|
22
23
|
Requires-Dist: pydantic>=2.0.0
|
|
23
24
|
Requires-Dist: toml>=0.10.2
|
|
25
|
+
Requires-Dist: praisonai-code
|
|
24
26
|
Provides-Extra: ui
|
|
25
27
|
Requires-Dist: aiui<0.4,>=0.3.121; extra == "ui"
|
|
26
28
|
Provides-Extra: gradio
|
|
@@ -474,8 +474,6 @@ praisonai/cli/ui/rich_backend.py
|
|
|
474
474
|
praisonai/cli/utils/env_utils.py
|
|
475
475
|
praisonai/cli/utils/project.py
|
|
476
476
|
praisonai/cli_backends/__init__.py
|
|
477
|
-
praisonai/cli_backends/claude.py
|
|
478
|
-
praisonai/cli_backends/registry.py
|
|
479
477
|
praisonai/code/__init__.py
|
|
480
478
|
praisonai/code/agent_tools.py
|
|
481
479
|
praisonai/code/diff/__init__.py
|
|
@@ -742,6 +740,7 @@ praisonai/persistence/state/upstash.py
|
|
|
742
740
|
praisonai/persistence/state/valkey.py
|
|
743
741
|
praisonai/persistence/tests/__init__.py
|
|
744
742
|
praisonai/persistence/tests/test_all_backends.py
|
|
743
|
+
praisonai/persistence/tests/test_registry_lazy.py
|
|
745
744
|
praisonai/persistence/tests/test_valkey_backends.py
|
|
746
745
|
praisonai/push/__init__.py
|
|
747
746
|
praisonai/push/client.py
|
|
@@ -770,9 +769,6 @@ praisonai/replay/storage.py
|
|
|
770
769
|
praisonai/replay/writer.py
|
|
771
770
|
praisonai/runtime/__init__.py
|
|
772
771
|
praisonai/runtime/__main__.py
|
|
773
|
-
praisonai/runtime/client.py
|
|
774
|
-
praisonai/runtime/descriptor.py
|
|
775
|
-
praisonai/runtime/server.py
|
|
776
772
|
praisonai/sandbox/__init__.py
|
|
777
773
|
praisonai/sandbox/_compat.py
|
|
778
774
|
praisonai/sandbox/_registry.py
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
rich>=13.7
|
|
2
2
|
markdown>=3.5
|
|
3
3
|
pyparsing>=3.0.0
|
|
4
|
-
praisonaiagents>=1.6.
|
|
4
|
+
praisonaiagents>=1.6.102
|
|
5
|
+
praisonai-code
|
|
5
6
|
python-dotenv>=0.19.0
|
|
6
7
|
litellm<2,>=1.83.14
|
|
7
8
|
PyYAML>=6.0
|
|
@@ -11,6 +12,7 @@ click>=8.4.2
|
|
|
11
12
|
textual>=0.47.0
|
|
12
13
|
pydantic>=2.0.0
|
|
13
14
|
toml>=0.10.2
|
|
15
|
+
praisonai-code
|
|
14
16
|
|
|
15
17
|
[acp]
|
|
16
18
|
agent-client-protocol>=0.7.0
|
|
@@ -34,13 +34,19 @@ class PluginRegistry(Generic[T]):
|
|
|
34
34
|
self,
|
|
35
35
|
*,
|
|
36
36
|
entry_point_group: str,
|
|
37
|
-
builtins: Optional[Dict[str, Callable[[], Type[T]]]] = None
|
|
37
|
+
builtins: Optional[Dict[str, Callable[[], Type[T]]]] = None,
|
|
38
|
+
discover_entry_points: bool = True
|
|
38
39
|
) -> None:
|
|
39
40
|
"""Initialize the registry.
|
|
40
41
|
|
|
41
42
|
Args:
|
|
42
43
|
entry_point_group: Entry points group name for plugin discovery
|
|
43
44
|
builtins: Dict of name -> loader function for built-in plugins
|
|
45
|
+
discover_entry_points: When True (default) the registry scans the
|
|
46
|
+
``entry_point_group`` for third-party plugins on construction.
|
|
47
|
+
Pass False to build an isolated registry that only contains the
|
|
48
|
+
supplied builtins / explicitly registered plugins (useful for
|
|
49
|
+
opt-out and deterministic tests).
|
|
44
50
|
"""
|
|
45
51
|
self._entry_point_group = entry_point_group
|
|
46
52
|
self._loaders: Dict[str, Callable[[], Type[T]]] = {} # lazy loaders
|
|
@@ -53,7 +59,8 @@ class PluginRegistry(Generic[T]):
|
|
|
53
59
|
for name, loader in builtins.items():
|
|
54
60
|
self._add_loader(name, loader)
|
|
55
61
|
|
|
56
|
-
|
|
62
|
+
if discover_entry_points:
|
|
63
|
+
self._discover_entry_points()
|
|
57
64
|
|
|
58
65
|
def _add_loader(self, name: str, loader: Callable[[], Type[T]]) -> None:
|
|
59
66
|
"""Add a loader with normalized name."""
|
|
@@ -366,5 +366,12 @@ def register_default_vector_stores():
|
|
|
366
366
|
logger.debug("Registered default vector stores")
|
|
367
367
|
|
|
368
368
|
|
|
369
|
-
#
|
|
370
|
-
|
|
369
|
+
# NOTE: No auto-registration at import time. Mutating the core-SDK vector-store
|
|
370
|
+
# registry and probing for chromadb / pinecone on disk as an import side effect
|
|
371
|
+
# violates the "core stays lightweight, wrapper does the heavy work at call
|
|
372
|
+
# time" principle and makes this module unsafe to import in tests / multi-tenant
|
|
373
|
+
# runtimes. Callers that want these backends wired into the SDK registry must
|
|
374
|
+
# invoke ``register_default_vector_stores()`` explicitly, e.g.::
|
|
375
|
+
#
|
|
376
|
+
# from praisonai.adapters.vector_stores import register_default_vector_stores
|
|
377
|
+
# register_default_vector_stores()
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Backward-compatible shim for ``praisonai.cli_backends``.
|
|
2
|
+
|
|
3
|
+
The CLI backend implementations moved to :mod:`praisonai_code.cli_backends`
|
|
4
|
+
(parent tracking issue, step C1). This shim re-exports the public surface and
|
|
5
|
+
aliases the submodules so existing imports keep working:
|
|
6
|
+
|
|
7
|
+
from praisonai.cli_backends import resolve_cli_backend_config
|
|
8
|
+
from praisonai.cli_backends import ClaudeCodeBackend
|
|
9
|
+
from praisonai.cli_backends.registry import resolve_cli_backend
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import sys as _sys
|
|
13
|
+
|
|
14
|
+
import praisonai_code.cli_backends as _cli_backends
|
|
15
|
+
|
|
16
|
+
# Alias submodules so ``praisonai.cli_backends.<sub>`` resolves to the moved
|
|
17
|
+
# module. These submodules always exist in ``praisonai_code``; let any real
|
|
18
|
+
# import error surface here (with its original traceback) instead of being
|
|
19
|
+
# swallowed and re-raised later as a confusing missing-submodule error on the
|
|
20
|
+
# old path.
|
|
21
|
+
for _name in ("registry", "claude"):
|
|
22
|
+
_mod = __import__(f"praisonai_code.cli_backends.{_name}", fromlist=[_name])
|
|
23
|
+
_sys.modules[f"{__name__}.{_name}"] = _mod
|
|
24
|
+
# Bind on the package object too so ``import praisonai.cli_backends.<sub>``
|
|
25
|
+
# followed by attribute access works (sys.modules aliasing alone does not
|
|
26
|
+
# set the parent-package attribute when pre-inserted).
|
|
27
|
+
globals()[_name] = _mod
|
|
28
|
+
|
|
29
|
+
del _sys, _name, _mod
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def __getattr__(name: str):
|
|
33
|
+
return getattr(_cli_backends, name)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def __dir__():
|
|
37
|
+
return sorted(set(globals()) | set(dir(_cli_backends)))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
__all__ = getattr(_cli_backends, "__all__", [])
|
|
@@ -31,6 +31,9 @@ __all__ = [
|
|
|
31
31
|
"create_knowledge_store",
|
|
32
32
|
"create_state_store",
|
|
33
33
|
"create_stores_from_config",
|
|
34
|
+
# Registry (dependency-injection / advanced)
|
|
35
|
+
"StoreRegistry",
|
|
36
|
+
"get_default_registry",
|
|
34
37
|
# Config
|
|
35
38
|
"PersistenceConfig",
|
|
36
39
|
# Agent hooks
|
|
@@ -77,6 +80,10 @@ def __getattr__(name: str):
|
|
|
77
80
|
from .factory import create_stores_from_config
|
|
78
81
|
return create_stores_from_config
|
|
79
82
|
|
|
83
|
+
if name in ("StoreRegistry", "get_default_registry"):
|
|
84
|
+
from .registry import StoreRegistry, get_default_registry
|
|
85
|
+
return locals()[name]
|
|
86
|
+
|
|
80
87
|
if name in ("wrap_agent_with_persistence", "PersistentAgent", "create_persistent_session"):
|
|
81
88
|
from .hooks.agent_hooks import wrap_agent_with_persistence, PersistentAgent, create_persistent_session
|
|
82
89
|
return locals()[name]
|
|
@@ -9,7 +9,7 @@ import logging
|
|
|
9
9
|
from typing import Any, Dict, Literal, Optional
|
|
10
10
|
|
|
11
11
|
from .config import PersistenceConfig
|
|
12
|
-
from .registry import
|
|
12
|
+
from .registry import StoreRegistry, get_default_registry
|
|
13
13
|
|
|
14
14
|
logger = logging.getLogger(__name__)
|
|
15
15
|
|
|
@@ -18,6 +18,8 @@ def create_conversation_store(
|
|
|
18
18
|
backend: str,
|
|
19
19
|
url: Optional[str] = None,
|
|
20
20
|
mode: Literal["sync", "async", "auto"] = "auto",
|
|
21
|
+
*,
|
|
22
|
+
registry: Optional[StoreRegistry] = None,
|
|
21
23
|
**options: Any
|
|
22
24
|
):
|
|
23
25
|
"""
|
|
@@ -63,12 +65,15 @@ def create_conversation_store(
|
|
|
63
65
|
else:
|
|
64
66
|
backend_name = backend
|
|
65
67
|
|
|
66
|
-
|
|
68
|
+
registry = registry or get_default_registry("conversation")
|
|
69
|
+
return registry.create(backend_name, url=url, **options)
|
|
67
70
|
|
|
68
71
|
|
|
69
72
|
def create_knowledge_store(
|
|
70
73
|
backend: str,
|
|
71
74
|
url: Optional[str] = None,
|
|
75
|
+
*,
|
|
76
|
+
registry: Optional[StoreRegistry] = None,
|
|
72
77
|
**options: Any
|
|
73
78
|
):
|
|
74
79
|
"""
|
|
@@ -88,12 +93,15 @@ def create_knowledge_store(
|
|
|
88
93
|
url="http://localhost:6333"
|
|
89
94
|
)
|
|
90
95
|
"""
|
|
91
|
-
|
|
96
|
+
registry = registry or get_default_registry("knowledge")
|
|
97
|
+
return registry.create(backend, url=url, **options)
|
|
92
98
|
|
|
93
99
|
|
|
94
100
|
def create_state_store(
|
|
95
101
|
backend: str,
|
|
96
102
|
url: Optional[str] = None,
|
|
103
|
+
*,
|
|
104
|
+
registry: Optional[StoreRegistry] = None,
|
|
97
105
|
**options: Any
|
|
98
106
|
):
|
|
99
107
|
"""
|
|
@@ -113,7 +121,8 @@ def create_state_store(
|
|
|
113
121
|
url="redis://localhost:6379"
|
|
114
122
|
)
|
|
115
123
|
"""
|
|
116
|
-
|
|
124
|
+
registry = registry or get_default_registry("state")
|
|
125
|
+
return registry.create(backend, url=url, **options)
|
|
117
126
|
|
|
118
127
|
|
|
119
128
|
def create_stores_from_config(config: PersistenceConfig) -> Dict[str, Any]:
|
|
@@ -354,7 +354,53 @@ def _register_builtin_state_stores(registry: StoreRegistry):
|
|
|
354
354
|
registry.register("gcs", _gcs)
|
|
355
355
|
|
|
356
356
|
|
|
357
|
-
#
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
357
|
+
# Lazy, per-caller registry construction. Importing this module no longer walks
|
|
358
|
+
# entry points or registers ~40 built-in loaders as a side effect; that work is
|
|
359
|
+
# deferred until a store is actually requested. Multi-tenant runtimes can build
|
|
360
|
+
# their own StoreRegistry and inject it, keeping registrations isolated.
|
|
361
|
+
_KINDS = {
|
|
362
|
+
"conversation": "praisonai.conversation_stores",
|
|
363
|
+
"knowledge": "praisonai.knowledge_stores",
|
|
364
|
+
"state": "praisonai.state_stores",
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
_default_registries: Dict[str, StoreRegistry] = {}
|
|
368
|
+
_default_lock = threading.Lock()
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
def get_default_registry(kind: str) -> StoreRegistry:
|
|
372
|
+
"""Return the process-default registry for ``kind``, creating it on first use.
|
|
373
|
+
|
|
374
|
+
Prefer dependency-injection (pass your own :class:`StoreRegistry`) over
|
|
375
|
+
calling this. Valid kinds: ``"conversation"``, ``"knowledge"``, ``"state"``.
|
|
376
|
+
"""
|
|
377
|
+
if kind not in _KINDS:
|
|
378
|
+
raise ValueError(
|
|
379
|
+
f"Unknown store kind: {kind!r}. Expected one of {sorted(_KINDS)}"
|
|
380
|
+
)
|
|
381
|
+
registry = _default_registries.get(kind)
|
|
382
|
+
if registry is not None:
|
|
383
|
+
return registry
|
|
384
|
+
with _default_lock:
|
|
385
|
+
registry = _default_registries.get(kind)
|
|
386
|
+
if registry is None:
|
|
387
|
+
registry = StoreRegistry(kind, _KINDS[kind])
|
|
388
|
+
_default_registries[kind] = registry
|
|
389
|
+
return registry
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
# Backward-compatible module-level access. ``CONVERSATION_STORES`` /
|
|
393
|
+
# ``KNOWLEDGE_STORES`` / ``STATE_STORES`` still resolve, but only build (and pay
|
|
394
|
+
# for) their registry the first time they are referenced, not at import time.
|
|
395
|
+
_MODULE_ATTR_KIND = {
|
|
396
|
+
"CONVERSATION_STORES": "conversation",
|
|
397
|
+
"KNOWLEDGE_STORES": "knowledge",
|
|
398
|
+
"STATE_STORES": "state",
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
def __getattr__(name: str) -> Any:
|
|
403
|
+
kind = _MODULE_ATTR_KIND.get(name)
|
|
404
|
+
if kind is not None:
|
|
405
|
+
return get_default_registry(kind)
|
|
406
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""Tests for lazy persistence registries and DI-friendly factory (issue #2510).
|
|
2
|
+
|
|
3
|
+
Covers Gap 2a: importing ``praisonai.persistence.registry`` must not build the
|
|
4
|
+
process-default registries as a side effect, and ``get_default_registry`` must
|
|
5
|
+
return a stable, per-kind, lazily-created instance. Also verifies the factory
|
|
6
|
+
functions accept an injected ``registry=`` for multi-tenant isolation.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import pytest
|
|
10
|
+
|
|
11
|
+
from praisonai.persistence import registry as registry_module
|
|
12
|
+
from praisonai.persistence.registry import (
|
|
13
|
+
StoreRegistry,
|
|
14
|
+
get_default_registry,
|
|
15
|
+
)
|
|
16
|
+
from praisonai.persistence.factory import (
|
|
17
|
+
create_state_store,
|
|
18
|
+
create_conversation_store,
|
|
19
|
+
create_knowledge_store,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def test_import_has_no_module_level_singletons():
|
|
24
|
+
"""Import must not bind eager module-level registry constants.
|
|
25
|
+
|
|
26
|
+
The legacy names resolve lazily via module ``__getattr__``; they must never
|
|
27
|
+
appear in the module ``__dict__`` as an import-time side effect.
|
|
28
|
+
"""
|
|
29
|
+
assert "CONVERSATION_STORES" not in registry_module.__dict__
|
|
30
|
+
assert "KNOWLEDGE_STORES" not in registry_module.__dict__
|
|
31
|
+
assert "STATE_STORES" not in registry_module.__dict__
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def test_get_default_registry_is_lazy_and_stable():
|
|
35
|
+
r1 = get_default_registry("state")
|
|
36
|
+
r2 = get_default_registry("state")
|
|
37
|
+
assert r1 is r2
|
|
38
|
+
assert isinstance(r1, StoreRegistry)
|
|
39
|
+
# Different kinds are different instances.
|
|
40
|
+
assert get_default_registry("state") is not get_default_registry("knowledge")
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def test_get_default_registry_rejects_unknown_kind():
|
|
44
|
+
with pytest.raises(ValueError):
|
|
45
|
+
get_default_registry("bogus")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_backward_compat_module_attrs_resolve():
|
|
49
|
+
"""Legacy ``CONVERSATION_STORES`` etc. still resolve to the default registry."""
|
|
50
|
+
assert registry_module.CONVERSATION_STORES is get_default_registry("conversation")
|
|
51
|
+
assert registry_module.KNOWLEDGE_STORES is get_default_registry("knowledge")
|
|
52
|
+
assert registry_module.STATE_STORES is get_default_registry("state")
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def test_missing_module_attr_still_raises():
|
|
56
|
+
with pytest.raises(AttributeError):
|
|
57
|
+
registry_module.DOES_NOT_EXIST # noqa: B018
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def test_factory_accepts_injected_registry():
|
|
61
|
+
"""A caller-supplied registry is used instead of the process default."""
|
|
62
|
+
tenant = StoreRegistry("state", "praisonai.state_stores")
|
|
63
|
+
|
|
64
|
+
created = {}
|
|
65
|
+
|
|
66
|
+
def _fake(url=None, **kwargs):
|
|
67
|
+
created["called"] = True
|
|
68
|
+
return object()
|
|
69
|
+
|
|
70
|
+
tenant.register("memfake", _fake)
|
|
71
|
+
store = create_state_store("memfake", registry=tenant)
|
|
72
|
+
assert created.get("called") is True
|
|
73
|
+
assert store is not None
|
|
74
|
+
# The default registry is untouched by the tenant registration.
|
|
75
|
+
assert "memfake" not in get_default_registry("state").list_names()
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def test_factory_defaults_to_process_registry():
|
|
79
|
+
store = create_state_store("memory")
|
|
80
|
+
assert store is not None
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""Backward-compatible shim for ``praisonai.runtime``.
|
|
2
|
+
|
|
3
|
+
The warm local runtime moved to :mod:`praisonai_code.runtime` (parent tracking
|
|
4
|
+
issue, step C1). This shim re-exports the public surface and aliases the
|
|
5
|
+
submodules so existing imports keep working:
|
|
6
|
+
|
|
7
|
+
from praisonai.runtime import RuntimeDescriptor, RuntimeClient
|
|
8
|
+
from praisonai.runtime.descriptor import get_runtime_descriptor
|
|
9
|
+
python -m praisonai.runtime
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import sys as _sys
|
|
13
|
+
|
|
14
|
+
import praisonai_code.runtime as _runtime
|
|
15
|
+
|
|
16
|
+
# Alias submodules so ``praisonai.runtime.<sub>`` resolves to the moved module.
|
|
17
|
+
# These submodules always exist in ``praisonai_code``; let any real import
|
|
18
|
+
# error surface here (with its original traceback) instead of being swallowed
|
|
19
|
+
# and re-raised later as a confusing missing-submodule error on the old path.
|
|
20
|
+
#
|
|
21
|
+
# ``__main__`` is deliberately excluded: pre-inserting it into ``sys.modules``
|
|
22
|
+
# makes runpy see the old-path ``__main__`` as already loaded under a foreign
|
|
23
|
+
# loader, breaking ``python -m praisonai.runtime`` (RuntimeWarning + ImportError).
|
|
24
|
+
# The physical delegating shim ``praisonai/runtime/__main__.py`` handles that
|
|
25
|
+
# path instead.
|
|
26
|
+
for _name in ("descriptor", "client", "server"):
|
|
27
|
+
_mod = __import__(f"praisonai_code.runtime.{_name}", fromlist=[_name])
|
|
28
|
+
_sys.modules[f"{__name__}.{_name}"] = _mod
|
|
29
|
+
# Bind on the package object too so ``import praisonai.runtime.<sub>``
|
|
30
|
+
# followed by attribute access works (sys.modules aliasing alone does not
|
|
31
|
+
# set the parent-package attribute when pre-inserted).
|
|
32
|
+
globals()[_name] = _mod
|
|
33
|
+
|
|
34
|
+
del _sys, _name, _mod
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def __getattr__(name: str):
|
|
38
|
+
return getattr(_runtime, name)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def __dir__():
|
|
42
|
+
return sorted(set(globals()) | set(dir(_runtime)))
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
__all__ = getattr(_runtime, "__all__", [])
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Shim entrypoint: ``python -m praisonai.runtime`` boots the moved runtime.
|
|
2
|
+
|
|
3
|
+
Delegates to :mod:`praisonai_code.runtime.__main__` (moved in step C1).
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
|
|
8
|
+
from praisonai_code.runtime.__main__ import main
|
|
9
|
+
|
|
10
|
+
if __name__ == "__main__":
|
|
11
|
+
sys.exit(main())
|
|
@@ -41,6 +41,7 @@ from typing import (
|
|
|
41
41
|
)
|
|
42
42
|
from types import MappingProxyType
|
|
43
43
|
from ._safe_loader import load_user_module
|
|
44
|
+
from ._registry import PluginRegistry
|
|
44
45
|
|
|
45
46
|
if TYPE_CHECKING: # imported only for type annotations to avoid a runtime cycle
|
|
46
47
|
from .tool_registry import ToolRegistry
|
|
@@ -95,6 +96,104 @@ class _CallableSource:
|
|
|
95
96
|
return self._fn(name)
|
|
96
97
|
|
|
97
98
|
|
|
99
|
+
class ToolSourceRegistry(PluginRegistry["ToolSource"]):
|
|
100
|
+
"""Entry-point-driven registry for third-party :class:`ToolSource` plugins.
|
|
101
|
+
|
|
102
|
+
Mirrors the other extension surfaces in the wrapper
|
|
103
|
+
(``FrameworkAdapterRegistry`` / ``LLMProviderRegistry`` / ``StoreRegistry``)
|
|
104
|
+
so tool sources are discoverable via the ``praisonai.tool_sources``
|
|
105
|
+
entry-point group instead of requiring subclassing / monkeypatching of
|
|
106
|
+
:class:`ToolResolver`.
|
|
107
|
+
|
|
108
|
+
A registered entry point may resolve to either:
|
|
109
|
+
|
|
110
|
+
* a :class:`ToolSource` instance (used directly), or
|
|
111
|
+
* a zero-argument callable / class that returns a :class:`ToolSource`
|
|
112
|
+
(instantiated on first use).
|
|
113
|
+
|
|
114
|
+
Third-party packages register in ``pyproject.toml``::
|
|
115
|
+
|
|
116
|
+
[project.entry-points."praisonai.tool_sources"]
|
|
117
|
+
corp-tools = "praisonai_corp_tools:CorpToolsSource"
|
|
118
|
+
|
|
119
|
+
The built-in resolution chain (local tools.py, wrapper registry,
|
|
120
|
+
praisonaiagents, praisonai-tools, core registry) stays owned by
|
|
121
|
+
:meth:`ToolResolver.default_sources`; entry-point sources discovered here
|
|
122
|
+
are appended after it so third parties extend rather than replace it.
|
|
123
|
+
"""
|
|
124
|
+
|
|
125
|
+
def __init__(self, *, discover_entry_points: bool = True) -> None:
|
|
126
|
+
# No builtins: the historical chain is constructed by ToolResolver and
|
|
127
|
+
# bound to the resolver instance. This registry only carries pluggable,
|
|
128
|
+
# instance-independent third-party sources discovered via entry points.
|
|
129
|
+
#
|
|
130
|
+
# Pass ``discover_entry_points=False`` for a guaranteed-empty registry
|
|
131
|
+
# (opt out of third-party sources, or make tests deterministic
|
|
132
|
+
# regardless of what is installed in the environment).
|
|
133
|
+
super().__init__(
|
|
134
|
+
entry_point_group="praisonai.tool_sources",
|
|
135
|
+
builtins=None,
|
|
136
|
+
discover_entry_points=discover_entry_points,
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
def create_sources(self) -> List["ToolSource"]:
|
|
140
|
+
"""Instantiate every registered entry-point source, skipping failures.
|
|
141
|
+
|
|
142
|
+
A misbehaving plugin (bad import, constructor error) is logged and
|
|
143
|
+
skipped rather than breaking tool resolution for everyone.
|
|
144
|
+
"""
|
|
145
|
+
sources: List[ToolSource] = []
|
|
146
|
+
for name in self.list_names():
|
|
147
|
+
try:
|
|
148
|
+
obj = self.resolve(name)
|
|
149
|
+
sources.append(_coerce_source(obj))
|
|
150
|
+
except Exception: # pragma: no cover - defensive against bad plugins
|
|
151
|
+
logger.debug("Tool source plugin %r failed to load", name, exc_info=True)
|
|
152
|
+
return sources
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def _is_tool_source(candidate: Any) -> bool:
|
|
156
|
+
"""True if ``candidate`` satisfies the :class:`ToolSource` protocol."""
|
|
157
|
+
return (
|
|
158
|
+
callable(getattr(candidate, "lookup", None))
|
|
159
|
+
and isinstance(getattr(candidate, "name", None), str)
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def _coerce_source(obj: Any) -> "ToolSource":
|
|
164
|
+
"""Turn a resolved entry-point object into a :class:`ToolSource` instance.
|
|
165
|
+
|
|
166
|
+
A class (or other zero-arg callable *factory*) is instantiated; a ready-made
|
|
167
|
+
instance is used as-is. Classes are always instantiated even though the
|
|
168
|
+
class itself carries ``name`` / ``lookup`` attributes, because a class'
|
|
169
|
+
``lookup`` is an unbound function that would receive ``name`` as ``self``.
|
|
170
|
+
|
|
171
|
+
Raises:
|
|
172
|
+
TypeError: If the resolved object is not (and does not produce) a valid
|
|
173
|
+
:class:`ToolSource`. Raising here lets :meth:`create_sources` skip a
|
|
174
|
+
misbehaving plugin instead of appending a broken source that would
|
|
175
|
+
raise on every lookup and disable negative caching.
|
|
176
|
+
"""
|
|
177
|
+
if inspect.isclass(obj):
|
|
178
|
+
candidate = obj()
|
|
179
|
+
elif _is_tool_source(obj):
|
|
180
|
+
# Already a ToolSource instance.
|
|
181
|
+
candidate = obj
|
|
182
|
+
elif callable(obj):
|
|
183
|
+
# A factory function returning a ToolSource.
|
|
184
|
+
candidate = obj()
|
|
185
|
+
else:
|
|
186
|
+
candidate = obj
|
|
187
|
+
|
|
188
|
+
if _is_tool_source(candidate):
|
|
189
|
+
return candidate
|
|
190
|
+
|
|
191
|
+
raise TypeError(
|
|
192
|
+
"Tool source plugin must resolve to a ToolSource "
|
|
193
|
+
"(an object with a str 'name' and callable 'lookup')"
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
|
|
98
197
|
class ToolResolver:
|
|
99
198
|
"""Resolves tool names to callables from multiple sources.
|
|
100
199
|
|
|
@@ -115,6 +214,8 @@ class ToolResolver:
|
|
|
115
214
|
tools_py_path: Optional[str] = None,
|
|
116
215
|
registry: Optional["ToolRegistry"] = None,
|
|
117
216
|
sources: Optional[List[ToolSource]] = None,
|
|
217
|
+
*,
|
|
218
|
+
source_registry: Optional["ToolSourceRegistry"] = None,
|
|
118
219
|
):
|
|
119
220
|
"""Initialize the resolver.
|
|
120
221
|
|
|
@@ -122,6 +223,11 @@ class ToolResolver:
|
|
|
122
223
|
tools_py_path: Optional path to tools.py. If None, uses ./tools.py
|
|
123
224
|
registry: Optional ToolRegistry to include in resolution chain
|
|
124
225
|
sources: Optional list of ToolSource objects. If None, uses defaults.
|
|
226
|
+
source_registry: Optional ToolSourceRegistry supplying third-party
|
|
227
|
+
entry-point tool sources. When ``sources`` is not provided,
|
|
228
|
+
these are appended after the built-in resolution chain. Defaults
|
|
229
|
+
to the process-default registry (``praisonai.tool_sources``
|
|
230
|
+
entry-point group). Pass an empty registry to opt out.
|
|
125
231
|
"""
|
|
126
232
|
from pathlib import Path
|
|
127
233
|
# Resolve path eagerly in constructor to make binding explicit and inspectable
|
|
@@ -139,16 +245,19 @@ class ToolResolver:
|
|
|
139
245
|
self._local_tools_dir_cache: Dict[str, Dict[str, Any]] = {}
|
|
140
246
|
self._local_tools_dir_lock = threading.Lock()
|
|
141
247
|
self._registry = registry
|
|
248
|
+
self._source_registry = source_registry
|
|
142
249
|
|
|
143
250
|
# Resolution chain as an ordered list of ToolSource objects. When a
|
|
144
251
|
# caller supplies sources= they fully control resolution order; this is
|
|
145
252
|
# the documented extension point. Otherwise we build the default chain
|
|
146
|
-
# equivalent to the historical hardcoded order
|
|
253
|
+
# equivalent to the historical hardcoded order, then append any
|
|
254
|
+
# third-party entry-point sources discovered via ToolSourceRegistry.
|
|
147
255
|
if sources is not None:
|
|
148
256
|
self._sources: List[ToolSource] = list(sources)
|
|
149
257
|
self._uses_default_sources = False
|
|
150
258
|
else:
|
|
151
259
|
self._sources = self.default_sources(registry)
|
|
260
|
+
self._sources.extend(self._entry_point_sources())
|
|
152
261
|
self._uses_default_sources = True
|
|
153
262
|
|
|
154
263
|
# Auto-wire cache invalidation so register_function() on the registry
|
|
@@ -203,6 +312,23 @@ class ToolResolver:
|
|
|
203
312
|
lambda n: self._resolve_from_registry(n)),
|
|
204
313
|
]
|
|
205
314
|
|
|
315
|
+
def _entry_point_sources(self) -> List[ToolSource]:
|
|
316
|
+
"""Third-party tool sources discovered via ``praisonai.tool_sources``.
|
|
317
|
+
|
|
318
|
+
Returns an empty list when no plugins are installed, so single-tenant
|
|
319
|
+
callers pay nothing beyond a one-time entry-point scan. A caller can
|
|
320
|
+
pass ``source_registry=ToolSourceRegistry()`` for isolation, or an empty
|
|
321
|
+
custom registry to opt out entirely.
|
|
322
|
+
"""
|
|
323
|
+
registry = self._source_registry
|
|
324
|
+
if registry is None:
|
|
325
|
+
registry = ToolSourceRegistry.default()
|
|
326
|
+
try:
|
|
327
|
+
return registry.create_sources()
|
|
328
|
+
except Exception: # pragma: no cover - defensive; never break resolution
|
|
329
|
+
logger.debug("Failed to load entry-point tool sources", exc_info=True)
|
|
330
|
+
return []
|
|
331
|
+
|
|
206
332
|
def _load_local_tools(self) -> Mapping[str, Callable]:
|
|
207
333
|
"""Load tools from local tools.py file.
|
|
208
334
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "4.6.102"
|
|
@@ -12,7 +12,8 @@ dependencies = [
|
|
|
12
12
|
"rich>=13.7",
|
|
13
13
|
"markdown>=3.5",
|
|
14
14
|
"pyparsing>=3.0.0",
|
|
15
|
-
"praisonaiagents>=1.6.
|
|
15
|
+
"praisonaiagents>=1.6.102",
|
|
16
|
+
"praisonai-code",
|
|
16
17
|
"python-dotenv>=0.19.0",
|
|
17
18
|
"litellm>=1.83.14,<2",
|
|
18
19
|
"PyYAML>=6.0",
|
|
@@ -22,6 +23,7 @@ dependencies = [
|
|
|
22
23
|
"textual>=0.47.0",
|
|
23
24
|
"pydantic>=2.0.0",
|
|
24
25
|
"toml>=0.10.2",
|
|
26
|
+
"praisonai-code",
|
|
25
27
|
]
|
|
26
28
|
|
|
27
29
|
[project.scripts]
|
|
@@ -280,6 +282,10 @@ Repository = "https://github.com/mervinpraison/PraisonAI"
|
|
|
280
282
|
|
|
281
283
|
[tool.uv.sources]
|
|
282
284
|
praisonaiagents = { path = "../praisonai-agents" }
|
|
285
|
+
# praisonai-code hosts the agentic terminal CLI (extracted incrementally,
|
|
286
|
+
# see issue #2512). Editable path dep during migration; runtime/ and
|
|
287
|
+
# cli_backends/ have moved here (C1), old praisonai.* paths kept via shims.
|
|
288
|
+
praisonai-code = { path = "../praisonai-code", editable = true }
|
|
283
289
|
|
|
284
290
|
[tool.uv]
|
|
285
291
|
# Exclude from lock resolution — these cause cross-extra conflicts that
|