PraisonAI 4.6.150__tar.gz → 4.6.152__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.150 → praisonai-4.6.152}/PKG-INFO +11 -10
- {praisonai-4.6.150 → praisonai-4.6.152}/PraisonAI.egg-info/PKG-INFO +11 -10
- {praisonai-4.6.150 → praisonai-4.6.152}/PraisonAI.egg-info/SOURCES.txt +0 -11
- {praisonai-4.6.150 → praisonai-4.6.152}/PraisonAI.egg-info/requires.txt +10 -9
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_bootstrap.py +16 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/agents_generator.py +67 -34
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/api/agent_invoke.py +122 -6
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/auto.py +44 -36
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/sandbox_cli.py +31 -19
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/framework_adapters/crewai_adapter.py +17 -28
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/framework_adapters/praisonai_adapter.py +4 -15
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/framework_adapters/registry.py +7 -2
- praisonai-4.6.152/praisonai/framework_adapters/validators.py +45 -0
- praisonai-4.6.152/praisonai/sandbox/__init__.py +13 -0
- praisonai-4.6.152/praisonai/sandbox/_registry.py +13 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/_delivery.py +108 -16
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/agent_scheduler.py +7 -1
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/async_agent_scheduler.py +7 -1
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/templates/tool_override.py +129 -69
- praisonai-4.6.152/praisonai/version.py +1 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/pyproject.toml +11 -9
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_n8n_agent_invoke.py +135 -0
- praisonai-4.6.150/praisonai/framework_adapters/validators.py +0 -28
- praisonai-4.6.150/praisonai/sandbox/__init__.py +0 -51
- praisonai-4.6.150/praisonai/sandbox/_compat.py +0 -29
- praisonai-4.6.150/praisonai/sandbox/_registry.py +0 -67
- praisonai-4.6.150/praisonai/sandbox/_shell.py +0 -38
- praisonai-4.6.150/praisonai/sandbox/daytona.py +0 -440
- praisonai-4.6.150/praisonai/sandbox/docker.py +0 -466
- praisonai-4.6.150/praisonai/sandbox/e2b.py +0 -376
- praisonai-4.6.150/praisonai/sandbox/modal.py +0 -380
- praisonai-4.6.150/praisonai/sandbox/sandlock.py +0 -542
- praisonai-4.6.150/praisonai/sandbox/ssh.py +0 -554
- praisonai-4.6.150/praisonai/sandbox/subprocess.py +0 -496
- praisonai-4.6.150/praisonai/ui/callbacks.py +0 -57
- praisonai-4.6.150/praisonai/ui/components/aicoder.py +0 -343
- praisonai-4.6.150/praisonai/version.py +0 -1
- {praisonai-4.6.150 → praisonai-4.6.152}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/README.md +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/__main__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_async_bridge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_dev/parity/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_dev/parity/docs_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_dev/parity/docs_generator.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_dev/parity/generator.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_dev/parity/python_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_dev/parity/rust_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_dev/parity/topic_normalizer.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_dev/parity/typescript_extractor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_entrypoint.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_framework_availability.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_lazy_cache.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_logging.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/_safe_loader.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/acp/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/acp/server.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/acp/session.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/agent.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/api/call.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/app/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/app/agentos.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/async_agent_scheduler.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/bots/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/_shim.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/_warnings.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/approval_backend.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/branding.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/agent.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/attach.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/auth.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/checkpoint.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/command.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/context.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/daemon.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/gateway.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/identity.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/init.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/kanban.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/permissions.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/schedule.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/validate.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/configuration/config.schema.json +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/agent_scheduler.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/gateway.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/legacy/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/legacy/direct_prompt.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/legacy/framework_run.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/legacy/interactive_legacy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/legacy/subcommand_handlers.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/legacy/workflow_commands.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/main.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli/utils/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/config/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/config/schema.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/config/validator.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/context/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/context/_storage_path.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/context/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/context/history_store.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/context/queue.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/context/setup.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/db/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/db/adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/deploy/api.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/deploy/docker.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/deploy/doctor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/deploy/main.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/deploy/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/deploy/providers/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/deploy/providers/_registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/deploy/providers/aws.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/deploy/providers/azure.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/deploy/providers/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/deploy/providers/gcp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/deploy/schema.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/providers/openai_compat.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/flow/client.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/flow/converter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/framework_adapters/_config_builder.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/framework_adapters/autogen_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/framework_adapters/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/framework_adapters/workflow_framework.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/inc/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/inc/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/bridges/kanban_bridge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/context_files.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/host_app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/_cli_loaders.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/_unified_registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/backend_registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/managed_local.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/jobs/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/jobs/path_validation.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/jobs/router.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/jobs/server.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/jobs/store.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/kanban/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/llm/catalogue.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/llm/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/llm/credentials.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/llm/env.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/llm/gateways.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/llm/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/n8n/client.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/observability/hooks.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/_valkey_client.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/_sql_base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/json_store.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/tests/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/tests/test_all_backends.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/tests/test_registry_lazy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/profiler.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/push/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/push/client.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/push/transports.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/recipe/core.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/recipe/history.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/recipe/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/recipe/security.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/recipe/server.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/replay/applier.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/replay/judge.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/replay/plan.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/replay/player.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/replay/reader.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/replay/storage.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/replay/writer.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/runtime/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/runtime/__main__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/_base_scheduler.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/_dispatch.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/blueprint_catalogue.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/condition_gate.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/daemon_manager.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/run_policy.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/state_manager.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/suggestion_engine.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/security/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/security/audit.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/security/injection.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/security/protected.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/setup/build.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/setup.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/enhanced_templates.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/manifest.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/templates/cache.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/templates/loader.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/templates/registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/templates/security.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/tool_registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/tool_resolver.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/tools/audio.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/tools/kanban_tools.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/train/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/train.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/train_vision.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/ui/context.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/praisonai/upload_vision.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/setup.cfg +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_approval_system.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_basic.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_cli_features.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_recipe.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_registry.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_runner.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.6.150 → praisonai-4.6.152}/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.152
|
|
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,12 +11,13 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=1.6.
|
|
15
|
-
Requires-Dist: praisonai-code>=0.0.
|
|
16
|
-
Requires-Dist: praisonai-bot>=0.0.
|
|
17
|
-
Requires-Dist: praisonai-train>=0.0.
|
|
18
|
-
Requires-Dist: praisonai-browser>=0.0.
|
|
19
|
-
Requires-Dist: praisonai-mcp>=0.0.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.155
|
|
15
|
+
Requires-Dist: praisonai-code>=0.0.51
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.0.36
|
|
17
|
+
Requires-Dist: praisonai-train>=0.0.7
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.0.4
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.0.4
|
|
20
|
+
Requires-Dist: praisonai-sandbox>=0.0.2
|
|
20
21
|
Requires-Dist: python-dotenv>=0.19.0
|
|
21
22
|
Requires-Dist: litellm<2,>=1.83.14
|
|
22
23
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -60,11 +61,11 @@ Requires-Dist: tavily-python==0.5.0; extra == "code"
|
|
|
60
61
|
Requires-Dist: crawl4ai>=0.7.0; extra == "code"
|
|
61
62
|
Requires-Dist: playwright>=1.47.0; extra == "code"
|
|
62
63
|
Provides-Extra: sandbox
|
|
63
|
-
Requires-Dist:
|
|
64
|
+
Requires-Dist: praisonai-sandbox[all]; extra == "sandbox"
|
|
64
65
|
Provides-Extra: ssh
|
|
65
|
-
Requires-Dist:
|
|
66
|
+
Requires-Dist: praisonai-sandbox[ssh]; extra == "ssh"
|
|
66
67
|
Provides-Extra: modal
|
|
67
|
-
Requires-Dist: modal
|
|
68
|
+
Requires-Dist: praisonai-sandbox[modal]; extra == "modal"
|
|
68
69
|
Provides-Extra: daytona
|
|
69
70
|
Provides-Extra: realtime
|
|
70
71
|
Requires-Dist: aiui<0.4,>=0.3.121; extra == "realtime"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.152
|
|
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,12 +11,13 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
Requires-Dist: rich>=13.7
|
|
12
12
|
Requires-Dist: markdown>=3.5
|
|
13
13
|
Requires-Dist: pyparsing>=3.0.0
|
|
14
|
-
Requires-Dist: praisonaiagents>=1.6.
|
|
15
|
-
Requires-Dist: praisonai-code>=0.0.
|
|
16
|
-
Requires-Dist: praisonai-bot>=0.0.
|
|
17
|
-
Requires-Dist: praisonai-train>=0.0.
|
|
18
|
-
Requires-Dist: praisonai-browser>=0.0.
|
|
19
|
-
Requires-Dist: praisonai-mcp>=0.0.
|
|
14
|
+
Requires-Dist: praisonaiagents>=1.6.155
|
|
15
|
+
Requires-Dist: praisonai-code>=0.0.51
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.0.36
|
|
17
|
+
Requires-Dist: praisonai-train>=0.0.7
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.0.4
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.0.4
|
|
20
|
+
Requires-Dist: praisonai-sandbox>=0.0.2
|
|
20
21
|
Requires-Dist: python-dotenv>=0.19.0
|
|
21
22
|
Requires-Dist: litellm<2,>=1.83.14
|
|
22
23
|
Requires-Dist: PyYAML>=6.0
|
|
@@ -60,11 +61,11 @@ Requires-Dist: tavily-python==0.5.0; extra == "code"
|
|
|
60
61
|
Requires-Dist: crawl4ai>=0.7.0; extra == "code"
|
|
61
62
|
Requires-Dist: playwright>=1.47.0; extra == "code"
|
|
62
63
|
Provides-Extra: sandbox
|
|
63
|
-
Requires-Dist:
|
|
64
|
+
Requires-Dist: praisonai-sandbox[all]; extra == "sandbox"
|
|
64
65
|
Provides-Extra: ssh
|
|
65
|
-
Requires-Dist:
|
|
66
|
+
Requires-Dist: praisonai-sandbox[ssh]; extra == "ssh"
|
|
66
67
|
Provides-Extra: modal
|
|
67
|
-
Requires-Dist: modal
|
|
68
|
+
Requires-Dist: praisonai-sandbox[modal]; extra == "modal"
|
|
68
69
|
Provides-Extra: daytona
|
|
69
70
|
Provides-Extra: realtime
|
|
70
71
|
Requires-Dist: aiui<0.4,>=0.3.121; extra == "realtime"
|
|
@@ -471,16 +471,7 @@ praisonai/replay/writer.py
|
|
|
471
471
|
praisonai/runtime/__init__.py
|
|
472
472
|
praisonai/runtime/__main__.py
|
|
473
473
|
praisonai/sandbox/__init__.py
|
|
474
|
-
praisonai/sandbox/_compat.py
|
|
475
474
|
praisonai/sandbox/_registry.py
|
|
476
|
-
praisonai/sandbox/_shell.py
|
|
477
|
-
praisonai/sandbox/daytona.py
|
|
478
|
-
praisonai/sandbox/docker.py
|
|
479
|
-
praisonai/sandbox/e2b.py
|
|
480
|
-
praisonai/sandbox/modal.py
|
|
481
|
-
praisonai/sandbox/sandlock.py
|
|
482
|
-
praisonai/sandbox/ssh.py
|
|
483
|
-
praisonai/sandbox/subprocess.py
|
|
484
475
|
praisonai/scheduler/__init__.py
|
|
485
476
|
praisonai/scheduler/_base_scheduler.py
|
|
486
477
|
praisonai/scheduler/_delivery.py
|
|
@@ -558,10 +549,8 @@ praisonai/tools/skill_manage.py
|
|
|
558
549
|
praisonai/train/__init__.py
|
|
559
550
|
praisonai/ui/_aiui_datastore.py
|
|
560
551
|
praisonai/ui/_external_agents.py
|
|
561
|
-
praisonai/ui/callbacks.py
|
|
562
552
|
praisonai/ui/context.py
|
|
563
553
|
praisonai/ui/database_config.py
|
|
564
|
-
praisonai/ui/components/aicoder.py
|
|
565
554
|
praisonai/ui_agents/__init__.py
|
|
566
555
|
praisonai/ui_agents/default_app.py
|
|
567
556
|
praisonai/ui_bot/__init__.py
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
rich>=13.7
|
|
2
2
|
markdown>=3.5
|
|
3
3
|
pyparsing>=3.0.0
|
|
4
|
-
praisonaiagents>=1.6.
|
|
5
|
-
praisonai-code>=0.0.
|
|
6
|
-
praisonai-bot>=0.0.
|
|
7
|
-
praisonai-train>=0.0.
|
|
8
|
-
praisonai-browser>=0.0.
|
|
9
|
-
praisonai-mcp>=0.0.
|
|
4
|
+
praisonaiagents>=1.6.155
|
|
5
|
+
praisonai-code>=0.0.51
|
|
6
|
+
praisonai-bot>=0.0.36
|
|
7
|
+
praisonai-train>=0.0.7
|
|
8
|
+
praisonai-browser>=0.0.4
|
|
9
|
+
praisonai-mcp>=0.0.4
|
|
10
|
+
praisonai-sandbox>=0.0.2
|
|
10
11
|
python-dotenv>=0.19.0
|
|
11
12
|
litellm<2,>=1.83.14
|
|
12
13
|
PyYAML>=6.0
|
|
@@ -171,7 +172,7 @@ praisonai-tools>=0.1.0
|
|
|
171
172
|
praisonai-mcp[all]
|
|
172
173
|
|
|
173
174
|
[modal]
|
|
174
|
-
modal
|
|
175
|
+
praisonai-sandbox[modal]
|
|
175
176
|
|
|
176
177
|
[mongodb]
|
|
177
178
|
pymongo>=4.6.0
|
|
@@ -216,10 +217,10 @@ ddgs>=9.0.0
|
|
|
216
217
|
redis>=5.0.0
|
|
217
218
|
|
|
218
219
|
[sandbox]
|
|
219
|
-
|
|
220
|
+
praisonai-sandbox[all]
|
|
220
221
|
|
|
221
222
|
[ssh]
|
|
222
|
-
|
|
223
|
+
praisonai-sandbox[ssh]
|
|
223
224
|
|
|
224
225
|
[train]
|
|
225
226
|
praisonai-train[llm]
|
|
@@ -91,3 +91,19 @@ def ensure_praisonai_mcp() -> None:
|
|
|
91
91
|
root = str(mcp_src)
|
|
92
92
|
if root not in sys.path:
|
|
93
93
|
sys.path.insert(0, root)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def ensure_praisonai_sandbox() -> None:
|
|
97
|
+
"""Ensure ``praisonai_sandbox`` can be imported in monorepo dev layouts."""
|
|
98
|
+
try:
|
|
99
|
+
import praisonai_sandbox # noqa: F401
|
|
100
|
+
return
|
|
101
|
+
except ImportError:
|
|
102
|
+
pass
|
|
103
|
+
|
|
104
|
+
wrapper_src = Path(__file__).resolve().parents[1] # .../src/praisonai
|
|
105
|
+
sandbox_src = wrapper_src.parent / "praisonai-sandbox"
|
|
106
|
+
if (sandbox_src / "praisonai_sandbox").is_dir():
|
|
107
|
+
root = str(sandbox_src)
|
|
108
|
+
if root not in sys.path:
|
|
109
|
+
sys.path.insert(0, root)
|
|
@@ -401,7 +401,7 @@ def _resolve_yaml_cli_backend(cli_backend_config, logger):
|
|
|
401
401
|
|
|
402
402
|
|
|
403
403
|
class AgentsGenerator:
|
|
404
|
-
def __init__(self, agent_file, framework, config_list, log_level=None, agent_callback=None, task_callback=None, agent_yaml=None, tools=None, cli_config=None, adapter_registry=None, tool_timeout_executor=None):
|
|
404
|
+
def __init__(self, agent_file, framework, config_list, log_level=None, agent_callback=None, task_callback=None, agent_yaml=None, tools=None, cli_config=None, adapter_registry=None, tool_timeout_executor=None, tool_resolver=None):
|
|
405
405
|
"""
|
|
406
406
|
Initialize the AgentsGenerator object.
|
|
407
407
|
|
|
@@ -416,6 +416,7 @@ class AgentsGenerator:
|
|
|
416
416
|
tools (dict, optional): A dictionary containing the tools to be used for the agents. Defaults to None.
|
|
417
417
|
cli_config (dict, optional): CLI configuration to override YAML settings. Defaults to None.
|
|
418
418
|
adapter_registry (FrameworkAdapterRegistry, optional): Registry for framework adapters. Defaults to process default.
|
|
419
|
+
tool_resolver (ToolResolver, optional): Canonical tool resolver. Defaults to the shared context-local resolver so discovery runs once per run.
|
|
419
420
|
|
|
420
421
|
Attributes:
|
|
421
422
|
agent_file (str): The path to the agent file.
|
|
@@ -448,9 +449,14 @@ class AgentsGenerator:
|
|
|
448
449
|
elif os.environ.get('LOGLEVEL'):
|
|
449
450
|
self.logger.setLevel(getattr(logging, os.environ.get('LOGLEVEL', 'INFO').upper(), logging.INFO))
|
|
450
451
|
|
|
451
|
-
# Initialize tool resolver (single source of truth for tool resolution)
|
|
452
|
-
|
|
453
|
-
|
|
452
|
+
# Initialize tool resolver (single source of truth for tool resolution).
|
|
453
|
+
# DI-friendly: callers (e.g. AutoGenerator hand-off, tests) may pass a
|
|
454
|
+
# resolver; otherwise share the context-local default so tool discovery
|
|
455
|
+
# runs once per run instead of once per generator construction.
|
|
456
|
+
if tool_resolver is None:
|
|
457
|
+
from .tool_resolver import _get_default_resolver
|
|
458
|
+
tool_resolver = _get_default_resolver()
|
|
459
|
+
self.tool_resolver = tool_resolver
|
|
454
460
|
|
|
455
461
|
# DI-friendly: tests/multi-tenant runtimes pass their own registry;
|
|
456
462
|
# CLI users get the process default.
|
|
@@ -699,30 +705,40 @@ class AgentsGenerator:
|
|
|
699
705
|
framework_name = self.framework or config.get('framework', 'praisonai')
|
|
700
706
|
adapter = self._select_framework(framework_name, config)
|
|
701
707
|
|
|
702
|
-
# Validate framework availability
|
|
708
|
+
# Validate framework availability through the injected registry so a
|
|
709
|
+
# scoped/per-tenant adapter registered on this generator's registry is
|
|
710
|
+
# not rejected just because it is absent from the process default.
|
|
703
711
|
from .framework_adapters.validators import assert_framework_available
|
|
704
|
-
assert_framework_available(adapter.name)
|
|
712
|
+
assert_framework_available(adapter.name, registry=self._adapter_registry)
|
|
705
713
|
|
|
706
714
|
# Validate cli_backend compatibility
|
|
707
715
|
self._validate_cli_backend_compatibility(config, adapter.name, adapter=adapter)
|
|
708
|
-
|
|
709
|
-
# Initialize observability hooks
|
|
710
|
-
from .observability.hooks import init_observability
|
|
711
|
-
init_observability(adapter.name)
|
|
712
|
-
|
|
713
|
-
# Run adapter setup hooks
|
|
714
|
-
adapter.setup(framework_tag=adapter.name)
|
|
715
|
-
|
|
716
|
+
|
|
716
717
|
# Update framework reference if resolution changed it
|
|
717
718
|
self.framework = adapter.name
|
|
718
719
|
self.framework_adapter = adapter
|
|
719
|
-
|
|
720
|
+
|
|
721
|
+
# NB: adapter setup is intentionally NOT run here. The caller opens the
|
|
722
|
+
# observability_session (which owns init/finalize for every adapter) and
|
|
723
|
+
# then invokes _run_adapter_setup INSIDE that session, so setup events —
|
|
724
|
+
# and any setup/import failure — are recorded and finalized instead of
|
|
725
|
+
# slipping outside observability. See generate_crew_and_kickoff /
|
|
726
|
+
# agenerate_crew_and_kickoff.
|
|
720
727
|
return {
|
|
721
728
|
'adapter': adapter,
|
|
722
729
|
'config': config,
|
|
723
730
|
'topic': topic,
|
|
724
731
|
'tools_dict': tools_dict,
|
|
725
732
|
}
|
|
733
|
+
|
|
734
|
+
def _run_adapter_setup(self, adapter):
|
|
735
|
+
"""Run an adapter's setup hooks.
|
|
736
|
+
|
|
737
|
+
Kept as a tiny seam so both the sync and async run paths execute setup
|
|
738
|
+
*inside* the observability_session, keeping init/setup/run/finalize
|
|
739
|
+
bracketed together for every adapter.
|
|
740
|
+
"""
|
|
741
|
+
adapter.setup(framework_tag=adapter.name)
|
|
726
742
|
|
|
727
743
|
def _build_tools_dict(self, config):
|
|
728
744
|
"""Shared tool resolution logic for sync and async paths."""
|
|
@@ -991,15 +1007,22 @@ class AgentsGenerator:
|
|
|
991
1007
|
prep = self._prepare_for_run(config)
|
|
992
1008
|
|
|
993
1009
|
self.logger.info(f"Using framework: {prep['adapter'].name}")
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1010
|
+
# Own the observability lifecycle here so init and finalize are always
|
|
1011
|
+
# paired for every adapter (the CM finalizes on success and error alike).
|
|
1012
|
+
from .observability.hooks import observability_session
|
|
1013
|
+
with observability_session(prep['adapter'].name):
|
|
1014
|
+
# Run setup INSIDE the session so setup events and any setup/import
|
|
1015
|
+
# failure are recorded and finalized, not dropped outside observability.
|
|
1016
|
+
self._run_adapter_setup(prep['adapter'])
|
|
1017
|
+
return prep['adapter'].run(
|
|
1018
|
+
prep['config'],
|
|
1019
|
+
self.config_list,
|
|
1020
|
+
prep['topic'],
|
|
1021
|
+
tools_dict=prep['tools_dict'],
|
|
1022
|
+
agent_callback=getattr(self, 'agent_callback', None),
|
|
1023
|
+
task_callback=getattr(self, 'task_callback', None),
|
|
1024
|
+
cli_config=getattr(self, 'cli_config', None),
|
|
1025
|
+
)
|
|
1003
1026
|
|
|
1004
1027
|
async def _aload_config(self):
|
|
1005
1028
|
"""Async-safe config loading (blocking file I/O off the event loop)."""
|
|
@@ -1007,7 +1030,8 @@ class AgentsGenerator:
|
|
|
1007
1030
|
return await asyncio.to_thread(self._load_config)
|
|
1008
1031
|
|
|
1009
1032
|
async def _aprepare_for_run(self, config):
|
|
1010
|
-
"""Async-safe run preparation (heavy imports
|
|
1033
|
+
"""Async-safe run preparation (heavy imports off the loop). Adapter setup
|
|
1034
|
+
runs later, inside the observability_session (see agenerate_crew_and_kickoff)."""
|
|
1011
1035
|
import asyncio
|
|
1012
1036
|
return await asyncio.to_thread(self._prepare_for_run, config)
|
|
1013
1037
|
|
|
@@ -1026,15 +1050,24 @@ class AgentsGenerator:
|
|
|
1026
1050
|
prep = await self._aprepare_for_run(config)
|
|
1027
1051
|
|
|
1028
1052
|
self.logger.info(f"Using framework: {prep['adapter'].name}")
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1053
|
+
# Own the observability lifecycle here so init and finalize are always
|
|
1054
|
+
# paired for every adapter (the CM finalizes on success and error alike).
|
|
1055
|
+
import asyncio
|
|
1056
|
+
from .observability.hooks import observability_session
|
|
1057
|
+
with observability_session(prep['adapter'].name):
|
|
1058
|
+
# Run setup INSIDE the session (off the event loop, as it may block)
|
|
1059
|
+
# so setup events and any setup/import failure are recorded and
|
|
1060
|
+
# finalized, not dropped outside observability.
|
|
1061
|
+
await asyncio.to_thread(self._run_adapter_setup, prep['adapter'])
|
|
1062
|
+
return await prep['adapter'].arun(
|
|
1063
|
+
prep['config'],
|
|
1064
|
+
self.config_list,
|
|
1065
|
+
prep['topic'],
|
|
1066
|
+
tools_dict=prep['tools_dict'],
|
|
1067
|
+
agent_callback=getattr(self, 'agent_callback', None),
|
|
1068
|
+
task_callback=getattr(self, 'task_callback', None),
|
|
1069
|
+
cli_config=getattr(self, 'cli_config', None),
|
|
1070
|
+
)
|
|
1038
1071
|
|
|
1039
1072
|
|
|
1040
1073
|
def _build_yaml_workflow(self, config):
|
|
@@ -168,6 +168,109 @@ def list_registered_agents() -> list:
|
|
|
168
168
|
return list(_agent_registry.keys())
|
|
169
169
|
|
|
170
170
|
|
|
171
|
+
def _is_real_agent(agent: Any) -> bool:
|
|
172
|
+
"""Return True when ``agent`` is a genuine ``praisonaiagents`` ``Agent``.
|
|
173
|
+
|
|
174
|
+
Uses ``isinstance`` against the real ``Agent`` class so **subclasses defined
|
|
175
|
+
in application code** are recognised too (they inherit the per-session
|
|
176
|
+
machinery and ``clone_for_channel``). Plain mocks / lightweight callables are
|
|
177
|
+
not ``Agent`` instances, so they fall back to the shared instance for
|
|
178
|
+
backward compatibility. If ``praisonaiagents`` cannot be imported we treat
|
|
179
|
+
the object as non-isolatable.
|
|
180
|
+
"""
|
|
181
|
+
try:
|
|
182
|
+
from praisonaiagents import Agent
|
|
183
|
+
except Exception:
|
|
184
|
+
return False
|
|
185
|
+
return isinstance(agent, Agent)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def _supports_session_isolation(agent: Any) -> bool:
|
|
189
|
+
"""Return True when ``agent`` can be safely cloned per session.
|
|
190
|
+
|
|
191
|
+
A real ``Agent`` (or any subclass) exposes the per-session machinery
|
|
192
|
+
(``_session_id`` binding, ``chat_history`` and a safe clone path). Plain
|
|
193
|
+
mocks / lightweight callables do not, so they stay on the shared instance to
|
|
194
|
+
preserve backward compatibility.
|
|
195
|
+
"""
|
|
196
|
+
if not _is_real_agent(agent):
|
|
197
|
+
return False
|
|
198
|
+
if not hasattr(agent, "_session_id"):
|
|
199
|
+
return False
|
|
200
|
+
if not hasattr(agent, "chat_history"):
|
|
201
|
+
return False
|
|
202
|
+
return callable(getattr(agent, "clone_for_channel", None))
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def _clone_agent(agent: Any) -> Any:
|
|
206
|
+
"""Create an independent copy of a real ``Agent``.
|
|
207
|
+
|
|
208
|
+
Prefers ``clone_for_channel`` (purpose-built for multi-channel isolation
|
|
209
|
+
with fresh locks), falling back to ``deepcopy``.
|
|
210
|
+
"""
|
|
211
|
+
clone_for_channel = getattr(agent, "clone_for_channel", None)
|
|
212
|
+
if callable(clone_for_channel):
|
|
213
|
+
return clone_for_channel()
|
|
214
|
+
import copy as _copy
|
|
215
|
+
|
|
216
|
+
return _copy.deepcopy(agent)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def resolve_session_agent(agent_id: str, session_id: Optional[str]) -> Any:
|
|
220
|
+
"""Resolve an isolated, session-scoped agent for a single request.
|
|
221
|
+
|
|
222
|
+
The registry holds a *template* agent, not a live conversation. Every
|
|
223
|
+
request gets its own clone so concurrent callers never share mutable
|
|
224
|
+
``chat_history``:
|
|
225
|
+
|
|
226
|
+
- With a ``session_id``: the clone is bound to that session so its history
|
|
227
|
+
is loaded from (and persisted to) the shared, file-locked session store —
|
|
228
|
+
giving continuity across requests and isolation between sessions.
|
|
229
|
+
- Without a ``session_id``: the clone is ephemeral (no session binding), so
|
|
230
|
+
no global state is mutated.
|
|
231
|
+
|
|
232
|
+
Agents that don't support cloning/session binding (e.g. plain mocks) fall
|
|
233
|
+
back to the shared registry instance for backward compatibility.
|
|
234
|
+
"""
|
|
235
|
+
template = get_agent(agent_id)
|
|
236
|
+
if template is None:
|
|
237
|
+
return None
|
|
238
|
+
|
|
239
|
+
if not _supports_session_isolation(template):
|
|
240
|
+
return template
|
|
241
|
+
|
|
242
|
+
try:
|
|
243
|
+
agent = _clone_agent(template)
|
|
244
|
+
except Exception as e:
|
|
245
|
+
# A clone failure must never silently fall back to the shared template:
|
|
246
|
+
# doing so would leak one session's chat_history into another. Fail the
|
|
247
|
+
# request instead so isolation is guaranteed.
|
|
248
|
+
logger.error(
|
|
249
|
+
f"Failed to clone agent '{agent_id}' for session isolation: {e}"
|
|
250
|
+
)
|
|
251
|
+
raise RuntimeError(
|
|
252
|
+
f"Failed to isolate agent '{agent_id}' for session: {e}"
|
|
253
|
+
) from e
|
|
254
|
+
|
|
255
|
+
# Reset per-request conversation state so the clone starts clean and
|
|
256
|
+
# (re)loads the requested session's history lazily on first chat.
|
|
257
|
+
try:
|
|
258
|
+
agent.chat_history = []
|
|
259
|
+
except Exception:
|
|
260
|
+
pass
|
|
261
|
+
if hasattr(agent, "_session_store_initialized"):
|
|
262
|
+
agent._session_store_initialized = False
|
|
263
|
+
if session_id:
|
|
264
|
+
agent._session_id = session_id
|
|
265
|
+
if hasattr(agent, "_history_session_id"):
|
|
266
|
+
agent._history_session_id = session_id
|
|
267
|
+
else:
|
|
268
|
+
agent._session_id = None
|
|
269
|
+
if hasattr(agent, "_history_session_id"):
|
|
270
|
+
agent._history_session_id = None
|
|
271
|
+
return agent
|
|
272
|
+
|
|
273
|
+
|
|
171
274
|
def _supports_async_start(agent: Any) -> bool:
|
|
172
275
|
"""Return True if agent.astart is a coroutine function."""
|
|
173
276
|
astart = getattr(agent, "astart", None)
|
|
@@ -218,8 +321,17 @@ if FASTAPI_AVAILABLE and APIRouter is not None:
|
|
|
218
321
|
}
|
|
219
322
|
```
|
|
220
323
|
"""
|
|
221
|
-
#
|
|
222
|
-
|
|
324
|
+
# Resolve a per-session isolated agent view so concurrent callers never
|
|
325
|
+
# share mutable chat_history. A provided session_id gives continuity via
|
|
326
|
+
# the shared session store; its absence yields an ephemeral conversation.
|
|
327
|
+
try:
|
|
328
|
+
agent = resolve_session_agent(agent_id, request.session_id)
|
|
329
|
+
except Exception as e:
|
|
330
|
+
logger.error(f"Failed to isolate agent {agent_id}: {e}")
|
|
331
|
+
raise HTTPException(
|
|
332
|
+
status_code=500,
|
|
333
|
+
detail=f"Agent execution failed: {str(e)}"
|
|
334
|
+
)
|
|
223
335
|
if not agent:
|
|
224
336
|
logger.error(f"Agent not found: {agent_id}")
|
|
225
337
|
raise HTTPException(
|
|
@@ -228,7 +340,7 @@ if FASTAPI_AVAILABLE and APIRouter is not None:
|
|
|
228
340
|
)
|
|
229
341
|
|
|
230
342
|
try:
|
|
231
|
-
#
|
|
343
|
+
# Session ID echoed back to the caller
|
|
232
344
|
session_id = request.session_id or "default"
|
|
233
345
|
|
|
234
346
|
# Apply agent config overrides if provided
|
|
@@ -362,15 +474,19 @@ async def invoke_agent_standalone(
|
|
|
362
474
|
This can be used in environments where FastAPI is not available
|
|
363
475
|
or when integrating with other web frameworks.
|
|
364
476
|
"""
|
|
365
|
-
|
|
366
|
-
if not agent:
|
|
477
|
+
if get_agent(agent_id) is None:
|
|
367
478
|
return {
|
|
368
479
|
"error": f"Agent '{agent_id}' not found",
|
|
369
480
|
"status": "error",
|
|
370
481
|
"available_agents": list_registered_agents()
|
|
371
482
|
}
|
|
372
|
-
|
|
483
|
+
|
|
373
484
|
try:
|
|
485
|
+
# Per-session isolated agent view (see resolve_session_agent). Done
|
|
486
|
+
# inside the try so a clone/isolation failure returns a clean error
|
|
487
|
+
# rather than leaking one session's history into another.
|
|
488
|
+
agent = resolve_session_agent(agent_id, session_id)
|
|
489
|
+
|
|
374
490
|
# Apply config if provided
|
|
375
491
|
if agent_config:
|
|
376
492
|
logger.debug(f"Agent config provided: {agent_config}")
|
|
@@ -733,10 +733,50 @@ class BaseAutoGenerator:
|
|
|
733
733
|
raise error[0]
|
|
734
734
|
return result[0]
|
|
735
735
|
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
736
|
+
def _get_tool_resolver(self):
|
|
737
|
+
"""Lazily construct the canonical ToolResolver (single source of truth).
|
|
738
|
+
|
|
739
|
+
Uses the shared context-local resolver so every generator in a run
|
|
740
|
+
(auto phase + AgentsGenerator + workflow/job generators) reuses one
|
|
741
|
+
warm cache instead of repeating full tool discovery. Kept lazy so
|
|
742
|
+
importing auto.py stays cheap and so a resolver-construction failure
|
|
743
|
+
never blocks generation — callers fall back to keyword/legacy hints.
|
|
744
|
+
"""
|
|
745
|
+
resolver = getattr(self, "_tool_resolver", None)
|
|
746
|
+
if resolver is None:
|
|
747
|
+
try:
|
|
748
|
+
from .tool_resolver import _get_default_resolver
|
|
749
|
+
resolver = _get_default_resolver()
|
|
750
|
+
except Exception as e: # pragma: no cover - defensive
|
|
751
|
+
logger.debug("ToolResolver unavailable (%s); using keyword hints only.", e)
|
|
752
|
+
resolver = False # sentinel: attempted, not available
|
|
753
|
+
self._tool_resolver = resolver
|
|
754
|
+
return resolver or None
|
|
755
|
+
|
|
756
|
+
def _available_tools(self) -> List[str]:
|
|
757
|
+
"""Return the real, installed tool names from the canonical ToolResolver.
|
|
758
|
+
|
|
759
|
+
This is the single source of truth shared with AgentsGenerator. Returns
|
|
760
|
+
an empty list if the resolver is unavailable so callers can fall back.
|
|
761
|
+
"""
|
|
762
|
+
resolver = self._get_tool_resolver()
|
|
763
|
+
if resolver is None:
|
|
764
|
+
return []
|
|
765
|
+
try:
|
|
766
|
+
return sorted(resolver.list_available().keys())
|
|
767
|
+
except Exception as e: # pragma: no cover - defensive
|
|
768
|
+
logger.debug("ToolResolver.list_available() failed (%s).", e)
|
|
769
|
+
return []
|
|
770
|
+
|
|
771
|
+
def get_available_tools(self) -> List[str]:
|
|
772
|
+
"""Return list of available tools for agent assignment.
|
|
773
|
+
|
|
774
|
+
Routes through the canonical ToolResolver (single source of truth) so
|
|
775
|
+
the LLM is shown only tools that are actually installed. Falls back to
|
|
776
|
+
the frozen ``AVAILABLE_TOOLS`` list solely when the resolver is
|
|
777
|
+
unavailable or returns nothing.
|
|
778
|
+
"""
|
|
779
|
+
return self._available_tools() or AVAILABLE_TOOLS.copy()
|
|
740
780
|
|
|
741
781
|
@staticmethod
|
|
742
782
|
def analyze_complexity(topic: str) -> str:
|
|
@@ -1103,38 +1143,6 @@ class AutoGenerator(BaseAutoGenerator):
|
|
|
1103
1143
|
|
|
1104
1144
|
return merged_data
|
|
1105
1145
|
|
|
1106
|
-
def _get_tool_resolver(self):
|
|
1107
|
-
"""Lazily construct the canonical ToolResolver (single source of truth).
|
|
1108
|
-
|
|
1109
|
-
Kept lazy so importing auto.py stays cheap and so a resolver-construction
|
|
1110
|
-
failure never blocks generation — callers fall back to keyword hints.
|
|
1111
|
-
"""
|
|
1112
|
-
resolver = getattr(self, "_tool_resolver", None)
|
|
1113
|
-
if resolver is None:
|
|
1114
|
-
try:
|
|
1115
|
-
from .tool_resolver import ToolResolver
|
|
1116
|
-
resolver = ToolResolver()
|
|
1117
|
-
except Exception as e: # pragma: no cover - defensive
|
|
1118
|
-
logger.debug("ToolResolver unavailable (%s); using keyword hints only.", e)
|
|
1119
|
-
resolver = False # sentinel: attempted, not available
|
|
1120
|
-
self._tool_resolver = resolver
|
|
1121
|
-
return resolver or None
|
|
1122
|
-
|
|
1123
|
-
def _available_tools(self) -> List[str]:
|
|
1124
|
-
"""Return the real, installed tool names from the canonical ToolResolver.
|
|
1125
|
-
|
|
1126
|
-
This is the single source of truth shared with AgentsGenerator. Returns
|
|
1127
|
-
an empty list if the resolver is unavailable so callers can fall back.
|
|
1128
|
-
"""
|
|
1129
|
-
resolver = self._get_tool_resolver()
|
|
1130
|
-
if resolver is None:
|
|
1131
|
-
return []
|
|
1132
|
-
try:
|
|
1133
|
-
return sorted(resolver.list_available().keys())
|
|
1134
|
-
except Exception as e: # pragma: no cover - defensive
|
|
1135
|
-
logger.debug("ToolResolver.list_available() failed (%s).", e)
|
|
1136
|
-
return []
|
|
1137
|
-
|
|
1138
1146
|
def discover_tools_for_topic(self) -> List[str]:
|
|
1139
1147
|
"""
|
|
1140
1148
|
Discover appropriate tools for the topic.
|