PraisonAI 4.6.74__tar.gz → 4.6.75__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.74 → praisonai-4.6.75}/PKG-INFO +2 -2
- {praisonai-4.6.74 → praisonai-4.6.75}/PraisonAI.egg-info/PKG-INFO +2 -2
- {praisonai-4.6.74 → praisonai-4.6.75}/PraisonAI.egg-info/SOURCES.txt +0 -1
- {praisonai-4.6.74 → praisonai-4.6.75}/PraisonAI.egg-info/requires.txt +1 -1
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/agents_generator.py +3 -14
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_commands.py +261 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_protocol_mixin.py +31 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_run_control.py +39 -5
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_session.py +49 -2
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/agentmail.py +1 -14
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/discord.py +36 -11
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/email.py +1 -14
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/slack.py +34 -11
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/telegram.py +71 -13
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/ui.py +1 -62
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/config/validator.py +1 -4
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/base.py +0 -24
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/sandlock.py +210 -162
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/_base_scheduler.py +138 -1
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/agent_scheduler.py +34 -92
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/async_agent_scheduler.py +43 -100
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/storage/__init__.py +10 -1
- praisonai-4.6.75/praisonai/tool_registry.py +118 -0
- praisonai-4.6.75/praisonai/version.py +1 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/pyproject.toml +1 -1
- praisonai-4.6.74/praisonai/test.py +0 -113
- praisonai-4.6.74/praisonai/tool_registry.py +0 -197
- praisonai-4.6.74/praisonai/version.py +0 -1
- {praisonai-4.6.74 → praisonai-4.6.75}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/README.md +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/__main__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_async_bridge.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/docs_extractor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/docs_generator.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/generator.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/python_extractor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/rust_extractor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/topic_normalizer.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/typescript_extractor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_entrypoint.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_framework_availability.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_lazy_cache.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_lockmap.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_logging.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_safe_loader.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/acp/config.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/acp/server.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/acp/session.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/agent.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/api/agent_invoke.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/api/call.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/app/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/app/agentos.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/async_agent_scheduler.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/auto.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_ack.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_approval.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_approval_base.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_auth.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_chunk.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_config_schema.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_debounce.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_defaults.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_delivery.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_discord_approval.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_dlq.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_durable_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_email_utils.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_http_approval.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_identity.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_ingress.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_mirror.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_outbox.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_pairing_ui.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_presentation_approval.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_presentation_renderer.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_rate_limit.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_reset_policy.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_resilience.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_slack_approval.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_status.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_streaming.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_telegram_approval.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_typing.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_typing_indicator.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_unknown_user.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_webhook_approval.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/bot.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/botos.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/delivery.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/linear.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/media.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/webhook_security.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/whatsapp.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/agent.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/benchmark.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/cdp_agent.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/cdp_utils.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/diagnostics.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/launcher.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/playwright_agent.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/profiling.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/protocol.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/report.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/server.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/sessions.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/video.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/claw/default_app.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/_warnings.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/app.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/approval_backend.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/branding.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/agent.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/auth.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/command.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/context.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/gateway.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/identity.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/init.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/kanban.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/models.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/permissions.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/validate.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/config.schema.json +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/credentials.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/loader.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/paths.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/resolver.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/schema.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/execution/core.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/execution/profiler.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/execution/request.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/execution/result.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/_endpoint_registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/_search_registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/action_orchestrator.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/agents.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/at_mentions.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/audit_cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/auto_memory.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/auto_mode.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/autonomy_mode.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/base.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/benchmark.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/capabilities.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/checkpoints.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/cli_profiler.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/code_intelligence.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/compaction.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/compare.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/config_hierarchy.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/context_manager.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/cost_tracker.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/csv_test_runner.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/custom_definitions.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/debug.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/diag.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/display_jsonl.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/gateway_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/runtime_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/runtime_migration_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/engine.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/formatters.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/handler.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/models.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/examples.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/external_agents.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/fast_context.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/file_history.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/flow_display.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/gateway.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/git_attribution.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/git_integration.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/guardrail.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/handoff.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/hooks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/hybrid_workflow.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/image.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/interactive_core_headless.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/interactive_runtime.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/interactive_test_harness.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/interactive_tools.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/interactive_tui.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/job_workflow.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/jobs.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/knowledge.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/knowledge_cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/lite.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/logs.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/lsp_cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/lsp_diagnostics.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/mcp.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/message_queue.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/metrics.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/migrate.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/migration_flow.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/migration_spec.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/n8n.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/observability.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/output_modes.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/output_style.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/package.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/performance.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/plugin_cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/profile.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/profiler/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/profiler/core.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/profiler/optimizations.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/profiler/suite.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/profiling.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/queue/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/queue/manager.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/queue/models.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/queue/persistence.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/queue/scheduler.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/queue/worker.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/recipe_creator.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/recipe_prompts.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/recipes.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/repo_map.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/router.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/safe_shell.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/sandbox_cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/sandbox_executor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/sdk_knowledge.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/session.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/setup/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/setup/handler.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/setup/templates.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/skills.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/slash_commands.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/telemetry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/thinking.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/todo.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/config.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/debug.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/events.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/mock_provider.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/orchestrator.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/help.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/main.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/queue.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/session.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/settings.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/session_store.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/chat.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/composer.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/status.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/wizard.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/yaml_utils.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/config.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/events.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/frontends/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/praison_io.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/repl.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/split_tui.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/tui_app.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/main.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/output/console.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/output/event_bridge.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/session/unified.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/state/identifiers.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/state/project_sessions.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/state/sessions.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/ui/config.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/ui/events.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/ui/mg_backend.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/ui/plain.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/ui/rich_backend.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/utils/env_utils.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/utils/project.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli_backends/claude.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli_backends/registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/config/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/config/schema.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/_storage_path.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/config.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/history_store.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/queue.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/setup.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/daemon/launchd.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/daemon/systemd.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/daemon/windows.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/db/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/db/adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/api.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/docker.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/doctor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/main.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/models.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/providers/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/providers/_registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/providers/aws.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/providers/azure.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/providers/base.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/providers/gcp.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/schema.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/classifier.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/executor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/extractor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/reporter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/runner.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/workspace.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/openai_compat.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/client.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/converter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/autogen_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/crewai_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/validators.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/auth.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/client.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/cookie_auth.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/exec_approval.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/gateway_approval.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/health_monitor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/home_channels.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/kanban_dispatcher.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/magic_link.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/origin_check.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/pairing.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/pairing_routes.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/port_utils.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/push_channels.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/push_delivery.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/push_polling.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/push_presence.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/rate_limiter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/redis_pubsub.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/server.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/supervisor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/unicode_utils.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/inc/config.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/inc/models.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/kanban_bridge.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/context_files.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/host_app.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/_unified_registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/base.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/managed_local.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/models.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/path_validation.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/router.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/server.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/store.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/kanban/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/kanban/models.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/kanban/paths.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/kanban/sqlite_store.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/llm/catalogue.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/llm/credentials.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/llm/env.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/llm/gateways.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/llm/registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/agents.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/capabilities.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/knowledge.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/memory.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/prompts.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/resources.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/auth/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/auth/api_key.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/auth/oauth.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/auth/oidc.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/auth/scopes.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/elicitation.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/icons.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/recipe_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/recipe_cli.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/sampling.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/server.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/tasks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/tool_index.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/transports/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/transports/http_stream.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/transports/stdio.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/n8n/client.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/observability/hooks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/_valkey_client.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/config.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/_sql_base.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/tests/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/tests/test_all_backends.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/profiler.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/push/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/push/client.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/push/transports.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/core.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/history.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/models.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/security.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/server.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/applier.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/judge.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/plan.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/player.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/reader.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/storage.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/writer.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/_compat.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/_registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/_shell.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/daytona.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/docker.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/e2b.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/modal.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/ssh.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/subprocess.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/_dispatch.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/blueprint_catalogue.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/condition_gate.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/enhanced_executor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/run_policy.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/suggestion_engine.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/security/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/security/audit.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/security/injection.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/security/protected.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/setup/build.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/setup.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/config.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/enhanced_templates.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/manifest.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/models.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/cache.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/loader.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/security.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/tool_override.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tool_resolver.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/audio.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/kanban_tools.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/_ollama.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/agents/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/agents/grader.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/agents/hook.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/agents/models.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/agents/orchestrator.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/agents/storage.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/llm/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/llm/trainer.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train_vision.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui/callbacks.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui/components/aicoder.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui/context.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/upload_vision.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/setup.cfg +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_approval_system.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_basic.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_cli_features.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_n8n_agent_invoke.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_recipe.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_registry.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_runner.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.6.74 → praisonai-4.6.75}/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.75
|
|
4
4
|
Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
|
|
5
5
|
Author: Mervin Praison
|
|
6
6
|
License: MIT
|
|
@@ -11,7 +11,7 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=1.6.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.75
|
|
15
15
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
16
|
Requires-Dist: litellm<2,>=1.83.14
|
|
17
17
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.75
|
|
4
4
|
Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
|
|
5
5
|
Author: Mervin Praison
|
|
6
6
|
License: MIT
|
|
@@ -11,7 +11,7 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=1.6.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.75
|
|
15
15
|
Requires-Dist: python-dotenv>=0.19.0
|
|
16
16
|
Requires-Dist: litellm<2,>=1.83.14
|
|
17
17
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -16,7 +16,7 @@ from .version import __version__
|
|
|
16
16
|
|
|
17
17
|
# Import new architecture components
|
|
18
18
|
from .framework_adapters.base import FrameworkAdapter
|
|
19
|
-
from .
|
|
19
|
+
from .framework_adapters.registry import FrameworkAdapterRegistry, get_default_registry
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
def _rich_print(*args, **kwargs):
|
|
@@ -237,15 +237,9 @@ class AgentsGenerator:
|
|
|
237
237
|
elif os.environ.get('LOGLEVEL'):
|
|
238
238
|
self.logger.setLevel(getattr(logging, os.environ.get('LOGLEVEL', 'INFO').upper(), logging.INFO))
|
|
239
239
|
|
|
240
|
-
#
|
|
241
|
-
self.tool_registry = ToolRegistry()
|
|
242
|
-
|
|
243
|
-
# Initialize tool resolver with the registry wired in (single source of truth for tool resolution)
|
|
240
|
+
# Initialize tool resolver (single source of truth for tool resolution)
|
|
244
241
|
from .tool_resolver import ToolResolver
|
|
245
|
-
self.tool_resolver = ToolResolver(
|
|
246
|
-
|
|
247
|
-
# Wire resolver back to registry for cache invalidation
|
|
248
|
-
self.tool_registry.set_resolver(self.tool_resolver)
|
|
242
|
+
self.tool_resolver = ToolResolver()
|
|
249
243
|
|
|
250
244
|
# DI-friendly: tests/multi-tenant runtimes pass their own registry;
|
|
251
245
|
# CLI users get the process default.
|
|
@@ -254,11 +248,6 @@ class AgentsGenerator:
|
|
|
254
248
|
# Defer framework adapter creation until YAML is loaded
|
|
255
249
|
# This fixes the issue where empty framework string fails before YAML framework is read
|
|
256
250
|
self.framework_adapter = None
|
|
257
|
-
|
|
258
|
-
# Only autogen-family adapters need the autogen tool shim
|
|
259
|
-
# Note: autogen_v2 is also part of the autogen family
|
|
260
|
-
if framework and framework in {"autogen", "autogen_v2", "autogen_v4", "ag2"}:
|
|
261
|
-
self.tool_registry.register_builtin_autogen_adapters()
|
|
262
251
|
|
|
263
252
|
def _get_framework_adapter(self, framework: str) -> FrameworkAdapter:
|
|
264
253
|
"""
|
|
@@ -95,6 +95,11 @@ class CommandRegistry:
|
|
|
95
95
|
self.register("stop", {"description": "Cancel current agent task", "builtin": True})
|
|
96
96
|
self.register("whoami", {"description": "Show your user info and permissions", "builtin": True})
|
|
97
97
|
self.register("sethome", {"description": "Set this chat as the home channel for scheduled deliveries", "builtin": True})
|
|
98
|
+
# New runtime control commands
|
|
99
|
+
self.register("model", {"description": "Switch LLM model for this session", "builtin": True})
|
|
100
|
+
self.register("usage", {"description": "Show token usage and estimated cost", "builtin": True})
|
|
101
|
+
self.register("compress", {"description": "Compress conversation to free context window", "builtin": True})
|
|
102
|
+
self.register("queue", {"description": "Queue a follow-up message", "builtin": True})
|
|
98
103
|
|
|
99
104
|
def register(
|
|
100
105
|
self,
|
|
@@ -412,3 +417,259 @@ def handle_run_status_command(
|
|
|
412
417
|
return f"⚡ Task running for {elapsed_str}{pending_info}"
|
|
413
418
|
except Exception as e:
|
|
414
419
|
return f"Error getting status: {e}"
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
def handle_model_command(
|
|
423
|
+
session_manager,
|
|
424
|
+
user_id: str,
|
|
425
|
+
model_name: Optional[str] = None,
|
|
426
|
+
agent: Optional["Agent"] = None,
|
|
427
|
+
) -> str:
|
|
428
|
+
"""Handle /model command for runtime model switching.
|
|
429
|
+
|
|
430
|
+
Args:
|
|
431
|
+
session_manager: BotSessionManager instance
|
|
432
|
+
user_id: User ID
|
|
433
|
+
model_name: Optional model name to switch to
|
|
434
|
+
agent: Current agent instance
|
|
435
|
+
|
|
436
|
+
Returns:
|
|
437
|
+
Response message
|
|
438
|
+
"""
|
|
439
|
+
# Resolve the storage key so the override is keyed identically to how
|
|
440
|
+
# chat() looks it up (handles cross-platform identity resolution).
|
|
441
|
+
storage_key = user_id
|
|
442
|
+
if hasattr(session_manager, '_storage_key'):
|
|
443
|
+
try:
|
|
444
|
+
storage_key = session_manager._storage_key(user_id)
|
|
445
|
+
except Exception:
|
|
446
|
+
storage_key = user_id
|
|
447
|
+
|
|
448
|
+
if not model_name:
|
|
449
|
+
# Show current model — prefer the per-user override if one is set,
|
|
450
|
+
# otherwise fall back to the agent's configured model.
|
|
451
|
+
overrides = getattr(session_manager, '_model_overrides', {})
|
|
452
|
+
current = overrides.get(storage_key)
|
|
453
|
+
if not current and agent and hasattr(agent, 'llm'):
|
|
454
|
+
current = agent.llm if isinstance(agent.llm, str) else "default"
|
|
455
|
+
if not current:
|
|
456
|
+
return "No model configured. Use /model <name> to set one."
|
|
457
|
+
return f"Current model: {current}\nUse /model <name> to switch (e.g., /model gpt-4o)"
|
|
458
|
+
|
|
459
|
+
# Store the override per user. chat() applies it inside the per-agent lock
|
|
460
|
+
# and restores the original afterwards, so the shared Agent instance is
|
|
461
|
+
# never mutated for other concurrent users.
|
|
462
|
+
if not hasattr(session_manager, '_model_overrides'):
|
|
463
|
+
session_manager._model_overrides = {}
|
|
464
|
+
session_manager._model_overrides[storage_key] = model_name
|
|
465
|
+
|
|
466
|
+
return f"✅ Model switched to {model_name} for this conversation."
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
def handle_usage_command(
|
|
470
|
+
session_manager,
|
|
471
|
+
user_id: str,
|
|
472
|
+
agent: Optional["Agent"] = None,
|
|
473
|
+
) -> str:
|
|
474
|
+
"""Handle /usage command to show token usage and cost.
|
|
475
|
+
|
|
476
|
+
Args:
|
|
477
|
+
session_manager: BotSessionManager instance
|
|
478
|
+
user_id: User ID
|
|
479
|
+
agent: Current agent instance
|
|
480
|
+
|
|
481
|
+
Returns:
|
|
482
|
+
Response message with usage info
|
|
483
|
+
"""
|
|
484
|
+
# Check for usage tracking via hooks or session metadata
|
|
485
|
+
usage_info = {}
|
|
486
|
+
|
|
487
|
+
# Try to get usage from session metadata if tracked
|
|
488
|
+
if hasattr(session_manager, '_usage_tracker'):
|
|
489
|
+
usage_info = session_manager._usage_tracker.get(user_id, {})
|
|
490
|
+
|
|
491
|
+
# Check agent's token tracking if available
|
|
492
|
+
if agent and hasattr(agent, 'get_token_usage'):
|
|
493
|
+
try:
|
|
494
|
+
agent_usage = agent.get_token_usage()
|
|
495
|
+
usage_info.update(agent_usage)
|
|
496
|
+
except Exception:
|
|
497
|
+
pass
|
|
498
|
+
|
|
499
|
+
# Format usage response
|
|
500
|
+
if not usage_info:
|
|
501
|
+
return "No usage data available. Usage tracking may not be enabled."
|
|
502
|
+
|
|
503
|
+
total_tokens = usage_info.get('total_tokens', 0)
|
|
504
|
+
prompt_tokens = usage_info.get('prompt_tokens', 0)
|
|
505
|
+
completion_tokens = usage_info.get('completion_tokens', 0)
|
|
506
|
+
|
|
507
|
+
# Estimate cost (rough estimates, would need model-specific pricing)
|
|
508
|
+
cost_estimate = total_tokens * 0.00002 # Default estimate
|
|
509
|
+
|
|
510
|
+
lines = [
|
|
511
|
+
"📊 Token Usage",
|
|
512
|
+
f"Total: {total_tokens:,} tokens",
|
|
513
|
+
]
|
|
514
|
+
|
|
515
|
+
if prompt_tokens or completion_tokens:
|
|
516
|
+
lines.append(f"Prompt: {prompt_tokens:,} | Completion: {completion_tokens:,}")
|
|
517
|
+
|
|
518
|
+
lines.append(f"Est. cost: ${cost_estimate:.4f}")
|
|
519
|
+
|
|
520
|
+
return "\n".join(lines)
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
def handle_compress_command(
|
|
524
|
+
session_manager,
|
|
525
|
+
user_id: str,
|
|
526
|
+
agent: Optional["Agent"] = None,
|
|
527
|
+
) -> str:
|
|
528
|
+
"""Handle /compress command for context window management.
|
|
529
|
+
|
|
530
|
+
Args:
|
|
531
|
+
session_manager: BotSessionManager instance
|
|
532
|
+
user_id: User ID
|
|
533
|
+
agent: Current agent instance
|
|
534
|
+
|
|
535
|
+
Returns:
|
|
536
|
+
Response message
|
|
537
|
+
"""
|
|
538
|
+
try:
|
|
539
|
+
# Get user's chat history
|
|
540
|
+
if not hasattr(session_manager, '_histories'):
|
|
541
|
+
return "❌ No conversation history to compress."
|
|
542
|
+
|
|
543
|
+
storage_key = user_id
|
|
544
|
+
if hasattr(session_manager, '_storage_key'):
|
|
545
|
+
storage_key = session_manager._storage_key(user_id)
|
|
546
|
+
|
|
547
|
+
history = session_manager._histories.get(storage_key, [])
|
|
548
|
+
if len(history) < 10:
|
|
549
|
+
return "ℹ️ Conversation too short to compress (need at least 10 messages)."
|
|
550
|
+
|
|
551
|
+
# Import optimizer
|
|
552
|
+
try:
|
|
553
|
+
from praisonaiagents.context.optimizer import SummarizeOptimizer
|
|
554
|
+
from praisonaiagents.context.tokens import estimate_messages_tokens
|
|
555
|
+
except ImportError:
|
|
556
|
+
# Fallback to simple truncation
|
|
557
|
+
original_len = len(history)
|
|
558
|
+
# Keep system messages and last 5 exchanges
|
|
559
|
+
system_msgs = [m for m in history if m.get("role") == "system"]
|
|
560
|
+
other_msgs = [m for m in history if m.get("role") != "system"]
|
|
561
|
+
compressed = system_msgs + other_msgs[-10:] # Keep last 5 exchanges (10 messages)
|
|
562
|
+
|
|
563
|
+
session_manager._histories[storage_key] = compressed
|
|
564
|
+
removed = original_len - len(compressed)
|
|
565
|
+
|
|
566
|
+
return f"✅ Compressed conversation: removed {removed} older messages."
|
|
567
|
+
|
|
568
|
+
# Use SummarizeOptimizer if available
|
|
569
|
+
original_tokens = estimate_messages_tokens(history)
|
|
570
|
+
optimizer = SummarizeOptimizer(preserve_recent=10)
|
|
571
|
+
|
|
572
|
+
# Target 50% reduction
|
|
573
|
+
target_tokens = original_tokens // 2
|
|
574
|
+
compressed_history, result = optimizer.optimize(history, target_tokens)
|
|
575
|
+
|
|
576
|
+
# Update history
|
|
577
|
+
session_manager._histories[storage_key] = compressed_history
|
|
578
|
+
|
|
579
|
+
# Persist if store available
|
|
580
|
+
if hasattr(session_manager, '_store') and session_manager._store:
|
|
581
|
+
try:
|
|
582
|
+
session_manager._persist(storage_key)
|
|
583
|
+
except Exception:
|
|
584
|
+
pass
|
|
585
|
+
|
|
586
|
+
tokens_saved = result.tokens_saved if hasattr(result, 'tokens_saved') else 0
|
|
587
|
+
messages_removed = len(history) - len(compressed_history)
|
|
588
|
+
|
|
589
|
+
return f"✅ Compressed {messages_removed} messages, freed ~{tokens_saved:,} tokens."
|
|
590
|
+
|
|
591
|
+
except Exception as e:
|
|
592
|
+
logger.error(f"Compression failed: {e}")
|
|
593
|
+
return f"❌ Compression failed: {e}"
|
|
594
|
+
|
|
595
|
+
|
|
596
|
+
def handle_queue_command(
|
|
597
|
+
session_manager,
|
|
598
|
+
user_id: str,
|
|
599
|
+
message_text: Optional[str] = None,
|
|
600
|
+
run_control: Optional["SessionRunControl"] = None,
|
|
601
|
+
) -> str:
|
|
602
|
+
"""Handle /queue command for message queuing.
|
|
603
|
+
|
|
604
|
+
Delegates to the canonical :class:`SessionRunControl` pending slot, which
|
|
605
|
+
is the only mechanism that is actually drained by the gateway run loop
|
|
606
|
+
(``chat_with_run_control`` calls ``next_pending``/``finish_run``). A
|
|
607
|
+
message is only meaningful to queue while a run is in flight; if the bot
|
|
608
|
+
is idle there is nothing to run "after", so the user is told to just send
|
|
609
|
+
the message normally instead of being given a false promise.
|
|
610
|
+
|
|
611
|
+
Args:
|
|
612
|
+
session_manager: BotSessionManager instance
|
|
613
|
+
user_id: User ID
|
|
614
|
+
message_text: Optional message to queue
|
|
615
|
+
run_control: SessionRunControl instance (falls back to
|
|
616
|
+
``session_manager._run_control`` when not supplied)
|
|
617
|
+
|
|
618
|
+
Returns:
|
|
619
|
+
Response message
|
|
620
|
+
"""
|
|
621
|
+
# Resolve run control from the explicit arg or the session manager.
|
|
622
|
+
if run_control is None:
|
|
623
|
+
run_control = getattr(session_manager, "_run_control", None)
|
|
624
|
+
|
|
625
|
+
if run_control is None:
|
|
626
|
+
return (
|
|
627
|
+
"ℹ️ Message queuing isn't enabled for this bot. "
|
|
628
|
+
"Just send your message and it will be processed."
|
|
629
|
+
)
|
|
630
|
+
|
|
631
|
+
if not message_text:
|
|
632
|
+
# Show whether a follow-up is currently pending for this user.
|
|
633
|
+
try:
|
|
634
|
+
status = run_control.get_run_status(user_id)
|
|
635
|
+
except Exception:
|
|
636
|
+
status = {}
|
|
637
|
+
if status.get("has_pending"):
|
|
638
|
+
preview = status.get("pending_preview", "")
|
|
639
|
+
return f"📝 Pending follow-up: {preview}"
|
|
640
|
+
return "No follow-up queued. Use /queue <message> to add one while a task is running."
|
|
641
|
+
|
|
642
|
+
# Submit through run control so the message is parked in the pending slot
|
|
643
|
+
# that the run loop actually drains after the current turn completes.
|
|
644
|
+
import asyncio
|
|
645
|
+
|
|
646
|
+
from ._run_control import RunDecision
|
|
647
|
+
|
|
648
|
+
async def _submit() -> "RunDecision":
|
|
649
|
+
return await run_control.submit(user_id, message_text)
|
|
650
|
+
|
|
651
|
+
try:
|
|
652
|
+
try:
|
|
653
|
+
loop = asyncio.get_running_loop()
|
|
654
|
+
except RuntimeError:
|
|
655
|
+
loop = None
|
|
656
|
+
|
|
657
|
+
if loop is not None and loop.is_running():
|
|
658
|
+
# Schedule on the running loop; we can't block-await from here.
|
|
659
|
+
loop.create_task(_submit())
|
|
660
|
+
return "⏳ Follow-up noted — it will run after the current task completes."
|
|
661
|
+
|
|
662
|
+
decision = asyncio.run(_submit())
|
|
663
|
+
except Exception as e: # noqa: BLE001 - surface a friendly message
|
|
664
|
+
return f"❌ Could not queue message: {e}"
|
|
665
|
+
|
|
666
|
+
if decision == RunDecision.RUN_NOW:
|
|
667
|
+
return (
|
|
668
|
+
"ℹ️ No task is currently running, so there's nothing to queue behind. "
|
|
669
|
+
"Send your message normally to run it now."
|
|
670
|
+
)
|
|
671
|
+
if decision == RunDecision.MERGED:
|
|
672
|
+
return "⏳ Added to your pending follow-up — it will run after the current task completes."
|
|
673
|
+
if decision == RunDecision.STEERED:
|
|
674
|
+
return "🧭 Injected into the running task as live guidance."
|
|
675
|
+
return "⏳ Follow-up queued — it will run after the current task completes."
|
|
@@ -118,6 +118,37 @@ class MessageHookMixin:
|
|
|
118
118
|
return None
|
|
119
119
|
return getattr(agent, '_hook_runner', None)
|
|
120
120
|
|
|
121
|
+
async def _default_health(self) -> Any:
|
|
122
|
+
"""Build a :class:`HealthResult` shared by all bot adapters (DRY).
|
|
123
|
+
|
|
124
|
+
Combines ``self.probe()`` liveness with ``self._is_running``,
|
|
125
|
+
``self._started_at`` and ``self._session``. The only per-adapter
|
|
126
|
+
difference is ``self.platform``, which each adapter already exposes.
|
|
127
|
+
Adapters delegate via ``health()`` but may override for bespoke needs.
|
|
128
|
+
"""
|
|
129
|
+
from praisonaiagents.bots import HealthResult
|
|
130
|
+
|
|
131
|
+
probe_result = await self.probe() # type: ignore[attr-defined]
|
|
132
|
+
started_at = getattr(self, '_started_at', None)
|
|
133
|
+
uptime = (time.time() - started_at) if started_at else None
|
|
134
|
+
session = getattr(self, '_session', None)
|
|
135
|
+
if session is not None and hasattr(session, '_histories'):
|
|
136
|
+
session_count = len(session._histories)
|
|
137
|
+
elif session is not None and hasattr(session, 'active_count'):
|
|
138
|
+
session_count = session.active_count()
|
|
139
|
+
else:
|
|
140
|
+
session_count = 0
|
|
141
|
+
is_running = getattr(self, '_is_running', False)
|
|
142
|
+
return HealthResult(
|
|
143
|
+
ok=is_running and probe_result.ok,
|
|
144
|
+
platform=self.platform, # type: ignore[attr-defined]
|
|
145
|
+
is_running=is_running,
|
|
146
|
+
uptime_seconds=uptime,
|
|
147
|
+
probe=probe_result,
|
|
148
|
+
sessions=session_count,
|
|
149
|
+
error=probe_result.error if not probe_result.ok else None,
|
|
150
|
+
)
|
|
151
|
+
|
|
121
152
|
def fire_message_received(self, message: Any) -> None:
|
|
122
153
|
"""Fire MESSAGE_RECEIVED hook when an incoming message arrives.
|
|
123
154
|
|
|
@@ -52,6 +52,7 @@ class RunDecision(Enum):
|
|
|
52
52
|
QUEUED = "queued" # Current run active, message queued for next turn
|
|
53
53
|
MERGED = "merged" # Message merged into existing pending slot
|
|
54
54
|
INTERRUPTED = "interrupted" # Current run was interrupted, start new run
|
|
55
|
+
STEERED = "steered" # Message injected into the live run via steering
|
|
55
56
|
|
|
56
57
|
|
|
57
58
|
class BusyMode(Enum):
|
|
@@ -71,6 +72,7 @@ class SessionRunState:
|
|
|
71
72
|
self.interrupt_controller: Optional["InterruptController"] = None
|
|
72
73
|
self.start_time: Optional[float] = None
|
|
73
74
|
self.last_activity: float = time.time() # Always track activity for cleanup
|
|
75
|
+
self.agent: Optional[Any] = None # Live agent handle for STEER mode
|
|
74
76
|
|
|
75
77
|
|
|
76
78
|
class SessionRunControl:
|
|
@@ -163,11 +165,25 @@ class SessionRunControl:
|
|
|
163
165
|
return RunDecision.INTERRUPTED
|
|
164
166
|
|
|
165
167
|
elif self._busy_mode == BusyMode.STEER:
|
|
166
|
-
#
|
|
167
|
-
#
|
|
168
|
-
#
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
# Inject the message into the running agent via steering so the
|
|
169
|
+
# current turn folds in the new guidance (preserving partial
|
|
170
|
+
# progress) instead of cancelling or waiting for the run to end.
|
|
171
|
+
agent = session.agent
|
|
172
|
+
if agent is not None and getattr(agent, "message_steering_enabled", False):
|
|
173
|
+
try:
|
|
174
|
+
# priority 30 == SteeringPriority.INTERRUPT (immediate)
|
|
175
|
+
msg_id = agent.steer(text, priority=30)
|
|
176
|
+
except Exception as exc: # noqa: BLE001 - fall back safely
|
|
177
|
+
logger.warning("Steering injection failed (%s), falling back to queue", exc)
|
|
178
|
+
else:
|
|
179
|
+
if msg_id:
|
|
180
|
+
return RunDecision.STEERED
|
|
181
|
+
logger.warning("Steering returned no message id, falling back to queue")
|
|
182
|
+
else:
|
|
183
|
+
logger.warning(
|
|
184
|
+
"Steer mode requested but agent has no steering enabled, falling back to queue"
|
|
185
|
+
)
|
|
186
|
+
# Safe fallback: queue the message below.
|
|
171
187
|
|
|
172
188
|
# Default to queue mode (or steer fallback)
|
|
173
189
|
if session.pending_message is None:
|
|
@@ -196,6 +212,8 @@ class SessionRunControl:
|
|
|
196
212
|
action = "added to pending request"
|
|
197
213
|
elif decision == RunDecision.INTERRUPTED:
|
|
198
214
|
return "⚠️ Previous task cancelled, starting your new request"
|
|
215
|
+
elif decision == RunDecision.STEERED:
|
|
216
|
+
return "🧭 Steering the current task with your new guidance"
|
|
199
217
|
else:
|
|
200
218
|
return "" # No ack needed for RUN_NOW
|
|
201
219
|
|
|
@@ -235,6 +253,7 @@ class SessionRunControl:
|
|
|
235
253
|
session.pending_message = None
|
|
236
254
|
session.interrupt_controller = None
|
|
237
255
|
session.start_time = None
|
|
256
|
+
session.agent = None
|
|
238
257
|
|
|
239
258
|
return True
|
|
240
259
|
|
|
@@ -269,6 +288,21 @@ class SessionRunControl:
|
|
|
269
288
|
session.is_running = False
|
|
270
289
|
session.interrupt_controller = None
|
|
271
290
|
session.start_time = None
|
|
291
|
+
session.agent = None
|
|
292
|
+
|
|
293
|
+
def register_agent(self, user_id: str, agent: Any) -> None:
|
|
294
|
+
"""Register the live agent handle for a user's run (for STEER mode).
|
|
295
|
+
|
|
296
|
+
The gateway calls this once the run is active so that subsequent
|
|
297
|
+
mid-run messages in STEER mode can be injected into the agent's
|
|
298
|
+
steering queue via ``agent.steer(...)``.
|
|
299
|
+
|
|
300
|
+
Args:
|
|
301
|
+
user_id: User identifier
|
|
302
|
+
agent: The Agent instance handling this user's run
|
|
303
|
+
"""
|
|
304
|
+
session = self._get_session(user_id)
|
|
305
|
+
session.agent = agent
|
|
272
306
|
|
|
273
307
|
def get_interrupt_controller(self, user_id: str) -> Optional["InterruptController"]:
|
|
274
308
|
"""Get the interrupt controller for a user's current run.
|
|
@@ -110,6 +110,11 @@ class BotSessionManager:
|
|
|
110
110
|
# Run timeout and active run tracking for cancellation support
|
|
111
111
|
self._run_timeout = run_timeout
|
|
112
112
|
self._active_runs: Dict[str, Any] = {} # user_id -> InterruptController
|
|
113
|
+
# Per-user model overrides set via the /model command. Applied per-turn
|
|
114
|
+
# inside the agent lock in chat() and restored afterwards so a shared
|
|
115
|
+
# Agent instance never leaks one user's model to another. Keyed by
|
|
116
|
+
# storage_key (same as _histories).
|
|
117
|
+
self._model_overrides: Dict[str, Any] = {}
|
|
113
118
|
# Session reset policy for automatic lifecycle management
|
|
114
119
|
self._reset_policy = reset_policy or SessionResetPolicy(mode="none")
|
|
115
120
|
# Track storage keys we've already fired SESSION_START for, so the
|
|
@@ -525,7 +530,21 @@ class BotSessionManager:
|
|
|
525
530
|
async with agent_lock:
|
|
526
531
|
saved_history = agent.chat_history
|
|
527
532
|
agent.chat_history = user_history
|
|
528
|
-
|
|
533
|
+
|
|
534
|
+
# Apply a per-user model override (set via the /model
|
|
535
|
+
# command) for the duration of this turn only. The swap
|
|
536
|
+
# happens inside the per-agent lock and is restored in
|
|
537
|
+
# the finally below, so a shared Agent instance never
|
|
538
|
+
# leaks one user's model to another concurrent user.
|
|
539
|
+
_model_overridden = False
|
|
540
|
+
_saved_llm = None
|
|
541
|
+
_override = self._model_overrides.get(self._storage_key(user_id))
|
|
542
|
+
if _override is not None and hasattr(agent, "llm"):
|
|
543
|
+
_saved_llm = agent.llm
|
|
544
|
+
if _override != _saved_llm:
|
|
545
|
+
agent.llm = _override
|
|
546
|
+
_model_overridden = True
|
|
547
|
+
|
|
529
548
|
# Create interrupt controller for this run and register it
|
|
530
549
|
try:
|
|
531
550
|
from praisonaiagents.agent.interrupt import InterruptController
|
|
@@ -628,6 +647,10 @@ class BotSessionManager:
|
|
|
628
647
|
raise
|
|
629
648
|
finally:
|
|
630
649
|
agent.chat_history = saved_history
|
|
650
|
+
# Restore the agent's original model if we applied a
|
|
651
|
+
# per-user override for this turn.
|
|
652
|
+
if _model_overridden:
|
|
653
|
+
agent.llm = _saved_llm
|
|
631
654
|
# Clean up active run tracking
|
|
632
655
|
if controller:
|
|
633
656
|
self._active_runs.pop(storage_key, None)
|
|
@@ -702,6 +725,19 @@ class BotSessionManager:
|
|
|
702
725
|
# Submit message to run control
|
|
703
726
|
decision = await self._run_control.submit(user_id, prompt)
|
|
704
727
|
|
|
728
|
+
if decision == RunDecision.STEERED:
|
|
729
|
+
# Message was injected into the live run via steering; the running
|
|
730
|
+
# turn folds in the new guidance without a separate response here.
|
|
731
|
+
ack_msg = await self._run_control.get_busy_ack_message(user_id, decision)
|
|
732
|
+
return {
|
|
733
|
+
"response": ack_msg,
|
|
734
|
+
"metadata": {
|
|
735
|
+
"run_control": True,
|
|
736
|
+
"decision": decision.value,
|
|
737
|
+
"steered": True,
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
|
|
705
741
|
if decision in (RunDecision.QUEUED, RunDecision.MERGED):
|
|
706
742
|
# Message was queued or merged, return acknowledgment
|
|
707
743
|
ack_msg = await self._run_control.get_busy_ack_message(user_id, decision)
|
|
@@ -713,7 +749,7 @@ class BotSessionManager:
|
|
|
713
749
|
"queued": True
|
|
714
750
|
}
|
|
715
751
|
}
|
|
716
|
-
|
|
752
|
+
|
|
717
753
|
# We're running now (RUN_NOW or INTERRUPTED)
|
|
718
754
|
current_prompt = prompt
|
|
719
755
|
last_response = ""
|
|
@@ -725,6 +761,17 @@ class BotSessionManager:
|
|
|
725
761
|
interrupt_controller = None
|
|
726
762
|
|
|
727
763
|
if last_decision in (RunDecision.RUN_NOW, RunDecision.INTERRUPTED):
|
|
764
|
+
# Register the live agent for each fresh run so that mid-run
|
|
765
|
+
# STEER messages can be injected into it. finish_run() clears the
|
|
766
|
+
# handle after every turn, so re-register on each pending iteration
|
|
767
|
+
# too (otherwise STEER silently falls back to QUEUE after the
|
|
768
|
+
# first run).
|
|
769
|
+
if hasattr(self._run_control, "register_agent"):
|
|
770
|
+
try:
|
|
771
|
+
self._run_control.register_agent(user_id, agent)
|
|
772
|
+
except Exception: # noqa: BLE001 - registration is best-effort
|
|
773
|
+
logger.debug("Failed to register agent for steering", exc_info=True)
|
|
774
|
+
|
|
728
775
|
interrupt_controller = self._run_control.get_interrupt_controller(user_id)
|
|
729
776
|
|
|
730
777
|
status = self._run_control.get_run_status(user_id)
|
|
@@ -919,17 +919,4 @@ class AgentMailBot(ChatCommandMixin, MessageHookMixin):
|
|
|
919
919
|
|
|
920
920
|
async def health(self) -> HealthResult:
|
|
921
921
|
"""Get health status of the AgentMail bot."""
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
uptime = 0.0
|
|
925
|
-
if self._started_at:
|
|
926
|
-
uptime = time.time() - self._started_at
|
|
927
|
-
|
|
928
|
-
return HealthResult(
|
|
929
|
-
ok=self._is_running and probe_result.ok,
|
|
930
|
-
platform="agentmail",
|
|
931
|
-
is_running=self._is_running,
|
|
932
|
-
uptime_seconds=uptime,
|
|
933
|
-
probe=probe_result,
|
|
934
|
-
sessions=self._session.active_count() if hasattr(self._session, 'active_count') else 0,
|
|
935
|
-
)
|
|
922
|
+
return await self._default_health()
|
|
@@ -25,7 +25,15 @@ from praisonaiagents.bots import (
|
|
|
25
25
|
PlatformCapabilities,
|
|
26
26
|
)
|
|
27
27
|
|
|
28
|
-
from ._commands import
|
|
28
|
+
from ._commands import (
|
|
29
|
+
format_status,
|
|
30
|
+
format_help,
|
|
31
|
+
handle_stop_command,
|
|
32
|
+
handle_model_command,
|
|
33
|
+
handle_usage_command,
|
|
34
|
+
handle_compress_command,
|
|
35
|
+
handle_queue_command
|
|
36
|
+
)
|
|
29
37
|
from ._session import BotSessionManager
|
|
30
38
|
from ._debounce import InboundDebouncer
|
|
31
39
|
from ._ack import AckReactor
|
|
@@ -244,6 +252,32 @@ class DiscordBot(ChatCommandMixin, MessageHookMixin):
|
|
|
244
252
|
response = handle_stop_command(self._session, user_id)
|
|
245
253
|
await message.reply(response)
|
|
246
254
|
return
|
|
255
|
+
elif command == "model":
|
|
256
|
+
user_id = str(message.author.id)
|
|
257
|
+
# Extract model name from message
|
|
258
|
+
parts = bot_message.text.split(maxsplit=1)
|
|
259
|
+
model_name = parts[1] if len(parts) > 1 else None
|
|
260
|
+
response = handle_model_command(self._session, user_id, model_name, self._agent)
|
|
261
|
+
await message.reply(response)
|
|
262
|
+
return
|
|
263
|
+
elif command == "usage":
|
|
264
|
+
user_id = str(message.author.id)
|
|
265
|
+
response = handle_usage_command(self._session, user_id, self._agent)
|
|
266
|
+
await message.reply(response)
|
|
267
|
+
return
|
|
268
|
+
elif command == "compress":
|
|
269
|
+
user_id = str(message.author.id)
|
|
270
|
+
response = handle_compress_command(self._session, user_id, self._agent)
|
|
271
|
+
await message.reply(response)
|
|
272
|
+
return
|
|
273
|
+
elif command == "queue":
|
|
274
|
+
user_id = str(message.author.id)
|
|
275
|
+
# Extract message text from command
|
|
276
|
+
parts = bot_message.text.split(maxsplit=1)
|
|
277
|
+
message_text = parts[1] if len(parts) > 1 else None
|
|
278
|
+
response = handle_queue_command(self._session, user_id, message_text)
|
|
279
|
+
await message.reply(response)
|
|
280
|
+
return
|
|
247
281
|
elif command and command in self._command_handlers:
|
|
248
282
|
handler = self._command_handlers[command]
|
|
249
283
|
try:
|
|
@@ -550,16 +584,7 @@ class DiscordBot(ChatCommandMixin, MessageHookMixin):
|
|
|
550
584
|
|
|
551
585
|
async def health(self):
|
|
552
586
|
"""Get detailed health status of the Discord bot."""
|
|
553
|
-
|
|
554
|
-
probe_result = await self.probe()
|
|
555
|
-
uptime = (time.time() - self._started_at) if self._started_at else None
|
|
556
|
-
session_count = len(self._session._histories) if hasattr(self._session, '_histories') else 0
|
|
557
|
-
return HealthResult(
|
|
558
|
-
ok=self._is_running and probe_result.ok, platform="discord",
|
|
559
|
-
is_running=self._is_running, uptime_seconds=uptime,
|
|
560
|
-
probe=probe_result, sessions=session_count,
|
|
561
|
-
error=probe_result.error if not probe_result.ok else None,
|
|
562
|
-
)
|
|
587
|
+
return await self._default_health()
|
|
563
588
|
|
|
564
589
|
def _format_status(self) -> str:
|
|
565
590
|
"""Format /status response."""
|