PraisonAI 4.7.6__tar.gz → 4.7.7__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.7.6 → praisonai-4.7.7}/PKG-INFO +11 -10
- {praisonai-4.7.6 → praisonai-4.7.7}/PraisonAI.egg-info/PKG-INFO +11 -10
- {praisonai-4.7.6 → praisonai-4.7.7}/PraisonAI.egg-info/SOURCES.txt +0 -1
- {praisonai-4.7.6 → praisonai-4.7.7}/PraisonAI.egg-info/requires.txt +10 -9
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_async_bridge.py +152 -14
- praisonai-4.7.7/praisonai/_lazy_cache.py +95 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/agents_generator.py +16 -9
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/auto.py +92 -29
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/context.py +42 -4
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/recipe.py +10 -2
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/interactive_legacy.py +19 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/subcommand_handlers.py +30 -10
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/workflow_commands.py +61 -32
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/db/adapter.py +86 -69
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/crewai_adapter.py +97 -16
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/observability/hooks.py +59 -23
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/judge.py +13 -3
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/tool_override.py +20 -14
- praisonai-4.7.7/praisonai/version.py +1 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/pyproject.toml +10 -9
- praisonai-4.7.6/praisonai/_lazy_cache.py +0 -51
- praisonai-4.7.6/praisonai/standardise/manifest.py +0 -201
- praisonai-4.7.6/praisonai/version.py +0 -1
- {praisonai-4.7.6 → praisonai-4.7.7}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/README.md +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/__main__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_api_auth.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_bootstrap.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_entrypoint.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_framework_availability.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_logging.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/_safe_loader.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/acp/config.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/acp/server.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/acp/session.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/agent.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/api/agent_invoke.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/api/call.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/app/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/app/agentos.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/async_agent_scheduler.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/bots/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/_shim.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/_warnings.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/app.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/approval_backend.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/branding.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/_profiling.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/agent.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/attach.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/auth.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/checkpoint.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/command.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/daemon.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/gateway.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/identity.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/init.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/kanban.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/models.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/permissions.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/validate.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/configuration/config.schema.json +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/gateway.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/sandbox_cli.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/interactive/config.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/interactive/events.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/direct_prompt.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/framework_run.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/main.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli/utils/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/config/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/config/agents.schema.json +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/config/schema.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/config/validator.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/_storage_path.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/config.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/history_store.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/queue.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/setup.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/db/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/openai_compat.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/client.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/converter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/_config_builder.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/autogen_adapter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/base.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/validators.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/framework_adapters/workflow_framework.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/inc/config.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/inc/models.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/kanban_bridge.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/context_files.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/host_app.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/_cli_loaders.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/backend_registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/base.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/_sync_base.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute/tenki.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/compute_managed_agent.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/managed_local.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/models.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/path_validation.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/router.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/server.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/jobs/store.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/kanban/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/catalogue.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/config.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/credentials.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/env.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/gateways.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/llm/registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/n8n/client.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/_valkey_client.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/config.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/_ops.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/_sql_base.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/profiler.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/push/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/push/client.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/push/transports.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/core.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/history.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/models.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/security.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/recipe/server.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/applier.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/plan.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/player.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/reader.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/storage.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/replay/writer.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/runtime/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/runtime/__main__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/sandbox/_registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/_base_scheduler.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/_delivery.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/_dispatch.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/async_agent_scheduler.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/blueprint_catalogue.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/condition_gate.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/run_policy.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/suggestion_engine.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/security/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/security/audit.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/security/injection.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/security/protected.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/setup/build.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/setup.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/config.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/models.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/_tool_sources.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/cache.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/loader.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/security.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tool_registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tool_resolver.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/audio.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/kanban_tools.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/train/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/train.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/train_vision.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui/context.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_dashboard/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/praisonai/upload_vision.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/setup.cfg +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_approval_system.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_basic.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_cli_features.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_n8n_agent_invoke.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_recipe.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_registry.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_runner.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.7.6 → praisonai-4.7.7}/tests/test_serve_features.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.7.
|
|
3
|
+
Version: 4.7.7
|
|
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,14 +11,14 @@ 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.7.
|
|
15
|
-
Requires-Dist: praisonai-code>=0.1.
|
|
16
|
-
Requires-Dist: praisonai-bot>=0.1.
|
|
17
|
-
Requires-Dist: praisonai-train>=0.1.
|
|
18
|
-
Requires-Dist: praisonai-browser>=0.1.
|
|
19
|
-
Requires-Dist: praisonai-mcp>=0.1.
|
|
20
|
-
Requires-Dist: praisonai-sandbox>=0.1.
|
|
21
|
-
Requires-Dist: praisonai-deploy>=0.1.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.7.5
|
|
15
|
+
Requires-Dist: praisonai-code>=0.1.4
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.1.4
|
|
17
|
+
Requires-Dist: praisonai-train>=0.1.4
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.1.4
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.1.6
|
|
20
|
+
Requires-Dist: praisonai-sandbox>=0.1.4
|
|
21
|
+
Requires-Dist: praisonai-deploy>=0.1.4
|
|
22
22
|
Requires-Dist: python-dotenv>=0.19.0
|
|
23
23
|
Requires-Dist: litellm<2,>=1.83.14
|
|
24
24
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -129,7 +129,8 @@ Provides-Extra: agno
|
|
|
129
129
|
Requires-Dist: praisonai-frameworks[agno]>=0.1.8; extra == "agno"
|
|
130
130
|
Requires-Dist: praisonai-tools>=0.1.0; extra == "agno"
|
|
131
131
|
Provides-Extra: google-adk
|
|
132
|
-
Requires-Dist: praisonai-frameworks
|
|
132
|
+
Requires-Dist: praisonai-frameworks>=0.1.8; extra == "google-adk"
|
|
133
|
+
Requires-Dist: google-adk[extensions]<3,>=2.5; extra == "google-adk"
|
|
133
134
|
Requires-Dist: praisonai-tools>=0.1.0; extra == "google-adk"
|
|
134
135
|
Provides-Extra: pydantic-ai
|
|
135
136
|
Requires-Dist: praisonai-frameworks[pydantic-ai]>=0.1.9; extra == "pydantic-ai"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.7.
|
|
3
|
+
Version: 4.7.7
|
|
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,14 +11,14 @@ 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.7.
|
|
15
|
-
Requires-Dist: praisonai-code>=0.1.
|
|
16
|
-
Requires-Dist: praisonai-bot>=0.1.
|
|
17
|
-
Requires-Dist: praisonai-train>=0.1.
|
|
18
|
-
Requires-Dist: praisonai-browser>=0.1.
|
|
19
|
-
Requires-Dist: praisonai-mcp>=0.1.
|
|
20
|
-
Requires-Dist: praisonai-sandbox>=0.1.
|
|
21
|
-
Requires-Dist: praisonai-deploy>=0.1.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.7.5
|
|
15
|
+
Requires-Dist: praisonai-code>=0.1.4
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.1.4
|
|
17
|
+
Requires-Dist: praisonai-train>=0.1.4
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.1.4
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.1.6
|
|
20
|
+
Requires-Dist: praisonai-sandbox>=0.1.4
|
|
21
|
+
Requires-Dist: praisonai-deploy>=0.1.4
|
|
22
22
|
Requires-Dist: python-dotenv>=0.19.0
|
|
23
23
|
Requires-Dist: litellm<2,>=1.83.14
|
|
24
24
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -129,7 +129,8 @@ Provides-Extra: agno
|
|
|
129
129
|
Requires-Dist: praisonai-frameworks[agno]>=0.1.8; extra == "agno"
|
|
130
130
|
Requires-Dist: praisonai-tools>=0.1.0; extra == "agno"
|
|
131
131
|
Provides-Extra: google-adk
|
|
132
|
-
Requires-Dist: praisonai-frameworks
|
|
132
|
+
Requires-Dist: praisonai-frameworks>=0.1.8; extra == "google-adk"
|
|
133
|
+
Requires-Dist: google-adk[extensions]<3,>=2.5; extra == "google-adk"
|
|
133
134
|
Requires-Dist: praisonai-tools>=0.1.0; extra == "google-adk"
|
|
134
135
|
Provides-Extra: pydantic-ai
|
|
135
136
|
Requires-Dist: praisonai-frameworks[pydantic-ai]>=0.1.9; extra == "pydantic-ai"
|
|
@@ -486,7 +486,6 @@ praisonai/standardise/discovery.py
|
|
|
486
486
|
praisonai/standardise/drift.py
|
|
487
487
|
praisonai/standardise/engine.py
|
|
488
488
|
praisonai/standardise/example_verifier.py
|
|
489
|
-
praisonai/standardise/manifest.py
|
|
490
489
|
praisonai/standardise/models.py
|
|
491
490
|
praisonai/standardise/reports.py
|
|
492
491
|
praisonai/standardise/templates.py
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
rich>=13.7
|
|
2
2
|
markdown>=3.5
|
|
3
3
|
pyparsing>=3.0.0
|
|
4
|
-
praisonaiagents>=1.7.
|
|
5
|
-
praisonai-code>=0.1.
|
|
6
|
-
praisonai-bot>=0.1.
|
|
7
|
-
praisonai-train>=0.1.
|
|
8
|
-
praisonai-browser>=0.1.
|
|
9
|
-
praisonai-mcp>=0.1.
|
|
10
|
-
praisonai-sandbox>=0.1.
|
|
11
|
-
praisonai-deploy>=0.1.
|
|
4
|
+
praisonaiagents>=1.7.5
|
|
5
|
+
praisonai-code>=0.1.4
|
|
6
|
+
praisonai-bot>=0.1.4
|
|
7
|
+
praisonai-train>=0.1.4
|
|
8
|
+
praisonai-browser>=0.1.4
|
|
9
|
+
praisonai-mcp>=0.1.6
|
|
10
|
+
praisonai-sandbox>=0.1.4
|
|
11
|
+
praisonai-deploy>=0.1.4
|
|
12
12
|
python-dotenv>=0.19.0
|
|
13
13
|
litellm<2,>=1.83.14
|
|
14
14
|
PyYAML>=6.0
|
|
@@ -158,7 +158,8 @@ requests>=2.31.0
|
|
|
158
158
|
praisonai-bot[gateway]
|
|
159
159
|
|
|
160
160
|
[google-adk]
|
|
161
|
-
praisonai-frameworks
|
|
161
|
+
praisonai-frameworks>=0.1.8
|
|
162
|
+
google-adk[extensions]<3,>=2.5
|
|
162
163
|
praisonai-tools>=0.1.0
|
|
163
164
|
|
|
164
165
|
[gradio]
|
|
@@ -9,15 +9,66 @@ import asyncio
|
|
|
9
9
|
import atexit
|
|
10
10
|
import contextlib
|
|
11
11
|
import contextvars
|
|
12
|
+
import enum
|
|
13
|
+
import inspect
|
|
14
|
+
import logging
|
|
12
15
|
import os
|
|
13
16
|
import threading
|
|
17
|
+
import weakref
|
|
14
18
|
import concurrent.futures
|
|
15
19
|
from concurrent.futures import CancelledError as FutureCancelledError, Future
|
|
16
|
-
from typing import Awaitable, Iterator, Optional, TypeVar
|
|
20
|
+
from typing import Any, Awaitable, Iterator, Optional, TypeVar
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
17
23
|
|
|
18
24
|
T = TypeVar("T")
|
|
19
25
|
|
|
20
|
-
|
|
26
|
+
|
|
27
|
+
class _Unset:
|
|
28
|
+
"""Sentinel for an *omitted* timeout argument.
|
|
29
|
+
|
|
30
|
+
Distinguishes "caller did not pass a timeout" (resolve the configured
|
|
31
|
+
default via :func:`_default_timeout`) from an explicit ``timeout=None``
|
|
32
|
+
(an intentional request for an *unbounded* wait). The scheduler bridges
|
|
33
|
+
(``integration/bridges/schedules_runner.py``, ``cli/commands/schedule.py``)
|
|
34
|
+
rely on the latter so a long-running claimed job is never cancelled after
|
|
35
|
+
the 300s default.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
__slots__ = ()
|
|
39
|
+
|
|
40
|
+
def __repr__(self) -> str: # pragma: no cover - debug aid only
|
|
41
|
+
return "<unset>"
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
_UNSET = _Unset()
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _resolve_timeout(timeout: "float | None | _Unset") -> Optional[float]:
|
|
48
|
+
"""Map an omitted timeout to the configured default, preserving explicit None.
|
|
49
|
+
|
|
50
|
+
- ``_UNSET`` (argument omitted) → :func:`_default_timeout` (e.g. 300s).
|
|
51
|
+
- explicit ``None`` → ``None`` (unbounded wait; caller opted in).
|
|
52
|
+
- a number → itself.
|
|
53
|
+
"""
|
|
54
|
+
if isinstance(timeout, _Unset):
|
|
55
|
+
return _default_timeout()
|
|
56
|
+
return timeout
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _default_timeout() -> float:
|
|
60
|
+
"""Resolve the default run_sync timeout lazily, per call.
|
|
61
|
+
|
|
62
|
+
Read at call time (not import time) so a malformed ``PRAISONAI_RUN_SYNC_TIMEOUT``
|
|
63
|
+
cannot crash ``import praisonai`` with an unrelated ``ValueError``, and so a
|
|
64
|
+
value set after import (dotenv loaded late, per-request reconfig) is honoured.
|
|
65
|
+
Falls back to 300s on a malformed value.
|
|
66
|
+
"""
|
|
67
|
+
raw = os.environ.get("PRAISONAI_RUN_SYNC_TIMEOUT", "300")
|
|
68
|
+
try:
|
|
69
|
+
return float(raw)
|
|
70
|
+
except ValueError:
|
|
71
|
+
return 300.0
|
|
21
72
|
|
|
22
73
|
class AsyncBridge:
|
|
23
74
|
"""Per-instance async runner. The module-level `run_sync()` keeps the
|
|
@@ -38,6 +89,9 @@ class AsyncBridge:
|
|
|
38
89
|
# lock by ``get()``/``submit()`` so ``_spawn_locked()`` can verify the
|
|
39
90
|
# *caller* (not merely *someone*) owns the lock.
|
|
40
91
|
self._lock_owner: int | None = None
|
|
92
|
+
# The shared default registers its atexit teardown lazily, on first use,
|
|
93
|
+
# so a bare ``import praisonai`` installs no process-wide hook.
|
|
94
|
+
self._atexit_registered = False
|
|
41
95
|
|
|
42
96
|
def _spawn_locked(self) -> asyncio.AbstractEventLoop:
|
|
43
97
|
"""Create the loop+thread; caller must hold ``self._lock``.
|
|
@@ -74,6 +128,13 @@ class AsyncBridge:
|
|
|
74
128
|
daemon=True,
|
|
75
129
|
)
|
|
76
130
|
self._thread.start()
|
|
131
|
+
# Register the process-exit teardown lazily and only for the shared
|
|
132
|
+
# default. Doing it here (first real use) rather than at import keeps
|
|
133
|
+
# ``import praisonai`` free of an unrequested atexit hook that would
|
|
134
|
+
# compete with hosts like Django/Airflow/Streamlit for shutdown order.
|
|
135
|
+
if not self._atexit_registered and self is globals().get("_BG"):
|
|
136
|
+
atexit.register(self.shutdown)
|
|
137
|
+
self._atexit_registered = True
|
|
77
138
|
return self._loop
|
|
78
139
|
|
|
79
140
|
def get(self) -> asyncio.AbstractEventLoop:
|
|
@@ -94,7 +155,11 @@ class AsyncBridge:
|
|
|
94
155
|
finally:
|
|
95
156
|
self._lock_owner = None
|
|
96
157
|
|
|
97
|
-
def run_sync(
|
|
158
|
+
def run_sync(
|
|
159
|
+
self, coro: Awaitable[T], *, timeout: "float | None | _Unset" = _UNSET
|
|
160
|
+
) -> T:
|
|
161
|
+
# Omitted → configured default; explicit ``None`` → unbounded wait.
|
|
162
|
+
timeout = _resolve_timeout(timeout)
|
|
98
163
|
try:
|
|
99
164
|
asyncio.get_running_loop()
|
|
100
165
|
except RuntimeError:
|
|
@@ -245,19 +310,18 @@ def scoped_bridge(bridge: Optional[AsyncBridge] = None) -> Iterator[AsyncBridge]
|
|
|
245
310
|
def _shutdown_default() -> None:
|
|
246
311
|
"""Private process-exit hook: tear down the shared default bridge.
|
|
247
312
|
|
|
248
|
-
Registered with :mod:`atexit
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
313
|
+
Registered with :mod:`atexit` lazily (on the shared default's first real use
|
|
314
|
+
in :meth:`AsyncBridge._spawn_locked`), not at import, so a bare
|
|
315
|
+
``import praisonai`` installs no process-wide hook. This is the ONLY
|
|
316
|
+
sanctioned way the shared default is shut down; it is deliberately absent
|
|
317
|
+
from the public module surface so a single caller cannot terminate async
|
|
318
|
+
work for the whole process. Embedders needing explicit lifecycle control own
|
|
319
|
+
their own :class:`AsyncBridge` instance.
|
|
253
320
|
"""
|
|
254
321
|
_BG.shutdown()
|
|
255
322
|
|
|
256
323
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
def run_sync(coro: Awaitable[T], *, timeout: float | None = _DEFAULT_TIMEOUT) -> T:
|
|
324
|
+
def run_sync(coro: Awaitable[T], *, timeout: "float | None | _Unset" = _UNSET) -> T:
|
|
261
325
|
"""
|
|
262
326
|
Run a coroutine synchronously using the background loop.
|
|
263
327
|
|
|
@@ -282,7 +346,7 @@ def run_sync(coro: Awaitable[T], *, timeout: float | None = _DEFAULT_TIMEOUT) ->
|
|
|
282
346
|
def run_sync_or_offload(
|
|
283
347
|
coro: Awaitable[T],
|
|
284
348
|
*,
|
|
285
|
-
timeout: float | None =
|
|
349
|
+
timeout: "float | None | _Unset" = _UNSET,
|
|
286
350
|
thread_name: str = "praisonai-sync-offload",
|
|
287
351
|
) -> T:
|
|
288
352
|
"""Run ``coro`` to completion from *any* calling context.
|
|
@@ -303,6 +367,8 @@ def run_sync_or_offload(
|
|
|
303
367
|
(it fails loudly inside a loop). Async callers should ``await``
|
|
304
368
|
:func:`arun_sync_or_offload`, which never blocks the loop.
|
|
305
369
|
"""
|
|
370
|
+
# Omitted → configured default; explicit ``None`` → unbounded wait.
|
|
371
|
+
timeout = _resolve_timeout(timeout)
|
|
306
372
|
try:
|
|
307
373
|
asyncio.get_running_loop()
|
|
308
374
|
except RuntimeError:
|
|
@@ -383,7 +449,7 @@ def run_sync_or_offload(
|
|
|
383
449
|
async def arun_sync_or_offload(
|
|
384
450
|
coro: Awaitable[T],
|
|
385
451
|
*,
|
|
386
|
-
timeout: float | None =
|
|
452
|
+
timeout: "float | None | _Unset" = _UNSET,
|
|
387
453
|
) -> T:
|
|
388
454
|
"""Awaitable sibling of :func:`run_sync_or_offload` for async callers.
|
|
389
455
|
|
|
@@ -397,6 +463,9 @@ async def arun_sync_or_offload(
|
|
|
397
463
|
``asyncio.new_event_loop()``), so a caller-installed :func:`scoped_bridge`
|
|
398
464
|
binding still wins and per-loop connection pools are preserved.
|
|
399
465
|
"""
|
|
466
|
+
# Omitted → configured default; explicit ``None`` → unbounded wait
|
|
467
|
+
# (``asyncio.wait_for(..., timeout=None)`` waits indefinitely).
|
|
468
|
+
timeout = _resolve_timeout(timeout)
|
|
400
469
|
fut = _default_bridge().submit(coro)
|
|
401
470
|
wrapped = asyncio.wrap_future(fut)
|
|
402
471
|
try:
|
|
@@ -404,3 +473,72 @@ async def arun_sync_or_offload(
|
|
|
404
473
|
except (asyncio.TimeoutError, asyncio.CancelledError):
|
|
405
474
|
fut.cancel()
|
|
406
475
|
raise
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
class DispatchKind(str, enum.Enum):
|
|
479
|
+
"""How a sync caller consumes the result of a (possibly async) store op.
|
|
480
|
+
|
|
481
|
+
Making read-vs-write intent explicit at the *call site* removes the need for
|
|
482
|
+
a name-string allow-list (the old ``_READ_OPS`` frozenset) that silently
|
|
483
|
+
dropped a new read-shaped method's return value under a running loop.
|
|
484
|
+
"""
|
|
485
|
+
|
|
486
|
+
READ = "read" #: caller consumes the returned value (never fire-and-forget)
|
|
487
|
+
WRITE = "write" #: caller only cares that it eventually completes
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
def dispatch_maybe_awaitable(
|
|
491
|
+
value: Any,
|
|
492
|
+
*,
|
|
493
|
+
kind: DispatchKind,
|
|
494
|
+
tracker: "weakref.WeakSet | None" = None,
|
|
495
|
+
tracker_lock: "threading.Lock | None" = None,
|
|
496
|
+
op_name: str = "op",
|
|
497
|
+
) -> Any:
|
|
498
|
+
"""Single owner of "a sync call may return a coroutine; run it correctly".
|
|
499
|
+
|
|
500
|
+
This consolidates the submit/track/callback scaffolding that lifecycle hooks
|
|
501
|
+
would otherwise hand-roll per op. Behaviour:
|
|
502
|
+
|
|
503
|
+
- **Not awaitable**: returned as-is.
|
|
504
|
+
- **No running loop**: block on the shared bridge via :func:`run_sync`.
|
|
505
|
+
- **Running loop + READ**: route through :func:`run_sync_or_offload`, which
|
|
506
|
+
returns the value on a sync path and fails loudly inside a loop instead of
|
|
507
|
+
corrupting a read-modify-write with a silent ``None``.
|
|
508
|
+
- **Running loop + WRITE**: submit to the active bridge as tracked
|
|
509
|
+
fire-and-forget (uuid-keyed store writes are idempotent, so completing them
|
|
510
|
+
slightly later is safe), attach a warning done-callback, and return
|
|
511
|
+
``None``.
|
|
512
|
+
|
|
513
|
+
Args:
|
|
514
|
+
value: The result of calling the store method (may be a coroutine).
|
|
515
|
+
kind: :class:`DispatchKind.READ` or :class:`DispatchKind.WRITE`.
|
|
516
|
+
tracker: Optional ``WeakSet`` of in-flight futures so a ``close()`` path
|
|
517
|
+
can flush them; only used on the running-loop WRITE branch.
|
|
518
|
+
tracker_lock: Lock guarding ``tracker``.
|
|
519
|
+
op_name: Human-readable op name for log/thread naming.
|
|
520
|
+
"""
|
|
521
|
+
if not inspect.isawaitable(value):
|
|
522
|
+
return value
|
|
523
|
+
|
|
524
|
+
try:
|
|
525
|
+
asyncio.get_running_loop()
|
|
526
|
+
except RuntimeError:
|
|
527
|
+
return run_sync(value)
|
|
528
|
+
|
|
529
|
+
if kind is DispatchKind.READ:
|
|
530
|
+
return run_sync_or_offload(value, thread_name=f"praisonai-db-read-{op_name}")
|
|
531
|
+
|
|
532
|
+
fut = current_bridge().submit(value)
|
|
533
|
+
if tracker is not None and tracker_lock is not None:
|
|
534
|
+
with tracker_lock:
|
|
535
|
+
tracker.add(fut)
|
|
536
|
+
|
|
537
|
+
def _on_done(f, name=op_name):
|
|
538
|
+
try:
|
|
539
|
+
f.result()
|
|
540
|
+
except Exception:
|
|
541
|
+
logger.warning("Deferred %s failed", name, exc_info=True)
|
|
542
|
+
|
|
543
|
+
fut.add_done_callback(_on_done)
|
|
544
|
+
return None
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""Single source of truth for thread-safe lazy loading of optional deps."""
|
|
2
|
+
import threading
|
|
3
|
+
import time
|
|
4
|
+
from typing import Callable, Dict, Optional, Tuple, Type, TypeVar
|
|
5
|
+
|
|
6
|
+
T = TypeVar("T")
|
|
7
|
+
|
|
8
|
+
#: Failures we treat as *transient* — an environment blip that may resolve on
|
|
9
|
+
#: its own (a keyring read racing a plugin install, a half-installed optional
|
|
10
|
+
#: dep, a one-shot config error on first import). These get a cool-down window
|
|
11
|
+
#: before the loader is retried, instead of being memoised for the process
|
|
12
|
+
#: lifetime. Structural failures (``ImportError``/``ValueError``/…) still fail
|
|
13
|
+
#: fast and stay cached.
|
|
14
|
+
_TRANSIENT_EXCEPTIONS: Tuple[Type[BaseException], ...] = (
|
|
15
|
+
OSError,
|
|
16
|
+
ConnectionError,
|
|
17
|
+
TimeoutError,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class LazyCache:
|
|
22
|
+
"""Thread-safe double-checked lazy cache. Caches and re-raises terminal loader failures.
|
|
23
|
+
|
|
24
|
+
Structural loader failures are cached permanently so a broken optional dep
|
|
25
|
+
fails fast. Transient failures (see :data:`_TRANSIENT_EXCEPTIONS`) are cached
|
|
26
|
+
only for ``retry_cooldown`` seconds so a long-lived process (``praisonai
|
|
27
|
+
serve``) recovers automatically once the underlying condition clears, mirror-
|
|
28
|
+
ing the cool-down ``PraisonAIDB._init_stores`` already uses. See #4945.
|
|
29
|
+
|
|
30
|
+
Prefer constructing a scoped instance for multi-tenant callers instead of
|
|
31
|
+
sharing the module-level singleton.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def __init__(self, retry_cooldown: float = 30.0) -> None:
|
|
35
|
+
self._cache: Dict[str, object] = {}
|
|
36
|
+
self._error_ts: Dict[str, float] = {}
|
|
37
|
+
self._retry_cooldown = retry_cooldown
|
|
38
|
+
self._lock = threading.Lock()
|
|
39
|
+
|
|
40
|
+
def _raise_if_valid_cached_error(self, key: str, cached: BaseException) -> bool:
|
|
41
|
+
"""Re-raise a cached error unless its transient cool-down has expired.
|
|
42
|
+
|
|
43
|
+
Returns ``True`` when the cool-down expired and the loader should be
|
|
44
|
+
retried; otherwise raises the cached error.
|
|
45
|
+
"""
|
|
46
|
+
if isinstance(cached, _TRANSIENT_EXCEPTIONS):
|
|
47
|
+
if time.monotonic() - self._error_ts.get(key, 0.0) < self._retry_cooldown:
|
|
48
|
+
raise cached
|
|
49
|
+
return True # cool-down expired: retry
|
|
50
|
+
raise cached
|
|
51
|
+
|
|
52
|
+
def get(self, key: str, loader: Callable[[], T]) -> Optional[T]:
|
|
53
|
+
cached = self._cache.get(key, _MISSING)
|
|
54
|
+
if cached is not _MISSING:
|
|
55
|
+
if isinstance(cached, BaseException):
|
|
56
|
+
self._raise_if_valid_cached_error(key, cached) # may raise
|
|
57
|
+
else:
|
|
58
|
+
return cached # type: ignore[return-value]
|
|
59
|
+
with self._lock:
|
|
60
|
+
cached = self._cache.get(key, _MISSING)
|
|
61
|
+
if cached is not _MISSING:
|
|
62
|
+
if isinstance(cached, BaseException):
|
|
63
|
+
self._raise_if_valid_cached_error(key, cached) # may raise
|
|
64
|
+
else:
|
|
65
|
+
return cached # type: ignore[return-value]
|
|
66
|
+
try:
|
|
67
|
+
value: object = loader()
|
|
68
|
+
except (KeyboardInterrupt, SystemExit):
|
|
69
|
+
# Control-flow exceptions must propagate cleanly, never memoised.
|
|
70
|
+
raise
|
|
71
|
+
except BaseException as e:
|
|
72
|
+
# Cache terminal loader failures so a broken optional dep fails
|
|
73
|
+
# fast. Transient failures are timestamped so they expire.
|
|
74
|
+
self._cache[key] = e
|
|
75
|
+
self._error_ts[key] = time.monotonic()
|
|
76
|
+
raise
|
|
77
|
+
self._cache[key] = value
|
|
78
|
+
self._error_ts.pop(key, None)
|
|
79
|
+
return value # type: ignore[return-value]
|
|
80
|
+
|
|
81
|
+
def reset(self, key: Optional[str] = None) -> None:
|
|
82
|
+
with self._lock:
|
|
83
|
+
if key is None:
|
|
84
|
+
self._cache.clear()
|
|
85
|
+
self._error_ts.clear()
|
|
86
|
+
else:
|
|
87
|
+
self._cache.pop(key, None)
|
|
88
|
+
self._error_ts.pop(key, None)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
_MISSING = object()
|
|
92
|
+
|
|
93
|
+
_GLOBAL = LazyCache()
|
|
94
|
+
lazy_get = _GLOBAL.get
|
|
95
|
+
lazy_reset = _GLOBAL.reset
|
|
@@ -1389,19 +1389,26 @@ class AgentsGenerator:
|
|
|
1389
1389
|
self.logger.info(f"Using framework: {prep['adapter'].name}")
|
|
1390
1390
|
# Own the observability lifecycle here so init and finalize are always
|
|
1391
1391
|
# paired for every adapter (the CM finalizes on success and error alike).
|
|
1392
|
+
from ._async_bridge import scoped_bridge
|
|
1392
1393
|
with observability_session(prep['adapter'].name):
|
|
1393
1394
|
# Run setup INSIDE the session so setup events and any setup/import
|
|
1394
1395
|
# failure are recorded and finalized, not dropped outside observability.
|
|
1395
1396
|
self._run_adapter_setup(prep['adapter'])
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1397
|
+
# Isolate this sync run's sync→async work (adapter internals call
|
|
1398
|
+
# run_sync) onto its own loop+thread so a stuck coroutine in one
|
|
1399
|
+
# agent/tenant does not park the shared default loop for the rest.
|
|
1400
|
+
# Async callers use agenerate_crew_and_kickoff (awaits arun directly)
|
|
1401
|
+
# and are intentionally not wrapped here.
|
|
1402
|
+
with scoped_bridge():
|
|
1403
|
+
return prep['adapter'].run(
|
|
1404
|
+
prep['config'],
|
|
1405
|
+
self.config_list,
|
|
1406
|
+
prep['topic'],
|
|
1407
|
+
tools_dict=prep['tools_dict'],
|
|
1408
|
+
agent_callback=getattr(self, 'agent_callback', None),
|
|
1409
|
+
task_callback=getattr(self, 'task_callback', None),
|
|
1410
|
+
cli_config=getattr(self, 'cli_config', None),
|
|
1411
|
+
)
|
|
1405
1412
|
|
|
1406
1413
|
async def _aload_config(self):
|
|
1407
1414
|
"""Async-safe config loading (blocking file I/O off the event loop)."""
|