PraisonAI 4.7.12__tar.gz → 4.7.13__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.12 → praisonai-4.7.13}/PKG-INFO +9 -9
- {praisonai-4.7.12 → praisonai-4.7.13}/PraisonAI.egg-info/PKG-INFO +9 -9
- {praisonai-4.7.12 → praisonai-4.7.13}/PraisonAI.egg-info/SOURCES.txt +1 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/PraisonAI.egg-info/requires.txt +8 -8
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/acp/session.py +55 -12
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/agents_generator.py +80 -4
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/__init__.py +12 -0
- praisonai-4.7.13/praisonai/capabilities/decisions.py +31 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/schedule.py +1 -1
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/agent_scheduler.py +26 -9
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/praisonai_adapter.py +31 -1
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute_managed_agent.py +79 -31
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/json_store.py +57 -14
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/daemon_manager.py +35 -2
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/state_manager.py +87 -17
- praisonai-4.7.13/praisonai/version.py +1 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/pyproject.toml +8 -8
- praisonai-4.7.12/praisonai/version.py +0 -1
- {praisonai-4.7.12 → praisonai-4.7.13}/PraisonAI.egg-info/dependency_links.txt +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/PraisonAI.egg-info/entry_points.txt +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/PraisonAI.egg-info/top_level.txt +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/README.md +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/__main__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_api_auth.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_approval_spec.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_async_bridge.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_bootstrap.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_dev/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_dev/api_md.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_entrypoint.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_framework_availability.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_lazy_cache.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_logging.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/_safe_loader.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/acp/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/acp/config.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/acp/safe_edit.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/acp/server.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/adapters/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/adapters/readers.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/adapters/rerankers.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/adapters/retrievers.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/adapters/vector_stores.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/agent.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/agent_scheduler.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/api/agent_invoke.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/api/call.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/app/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/app/agentos.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/async_agent_scheduler.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/audit/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/audit/agent_centric.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/auto.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/bots/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/browser/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/a2a.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/assistants.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/audio.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/batches.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/completions.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/container_files.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/containers.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/embeddings.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/files.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/fine_tuning.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/guardrails.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/images.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/mcp.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/messages.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/moderations.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/ocr.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/passthrough.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/rag.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/realtime.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/rerank.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/responses.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/search.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/skills.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/vector_store_files.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/vector_stores.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/capabilities/videos.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/claw/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/_paths.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/_shim.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/_warnings.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/app.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/approval_backend.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/branding.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/_profiling.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/acp.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/agent.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/agents.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/app.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/attach.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/audit.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/auth.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/batch.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/benchmark.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/bot.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/browser.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/call.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/chat.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/checkpoint.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/claw.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/code.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/command.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/commit.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/completion.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/config.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/context.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/daemon.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/dashboard.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/debug.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/deploy.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/diag.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/docs.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/doctor.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/endpoints.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/environment.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/eval.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/examples.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/flow.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/gateway.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/github.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/hooks.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/identity.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/init.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/kanban.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/knowledge.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/langextract.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/langfuse.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/loop.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/lsp.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/managed.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/mcp.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/memory.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/mint_link.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/models.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/n8n.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/obs.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/onboard.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/package.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/pairing.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/paths.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/permissions.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/plugins.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/port.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/profile.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/publish.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/rag.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/realtime.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/recipe.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/replay.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/research.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/retrieval.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/rules.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/run.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/sandbox.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/serve.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/session.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/setup.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/skills.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/standardise.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/templates.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/test.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/todo.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/tools.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/traces.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/tracker.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/train.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/ui.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/up.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/validate.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/version.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/commands/workflow.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/config_loader.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/configuration/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/configuration/config.schema.json +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/execution/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/fallback_schema.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/acp.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/agent_tools.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/approval.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/background.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/bots_cli.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/deploy.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/endpoints.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/eval.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/gateway.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/ollama.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/onboard.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/persistence.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/recipe.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/recipe_optimizer.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/sandbox_cli.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/serve.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/templates.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/tools.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/tui/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/tui/app.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/features/workflow.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/interactive/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/interactive/async_tui.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/interactive/config.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/interactive/core.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/interactive/events.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/langfuse_client.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/direct_prompt.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/framework_run.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/interactive_legacy.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/subcommand_handlers.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/legacy/workflow_commands.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/main.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/output/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/schedule_cli.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/schema_provider.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/session/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/state/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/ui/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/unified_schema.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli/utils/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/cli_backends/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/agent_tools.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/diff/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/diff/diff_strategy.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/apply_diff.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/execute_command.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/list_files.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/read_file.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/search_replace.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/tools/write_file.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/utils/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/utils/file_utils.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/utils/ignore_utils.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/code/utils/text_utils.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/config/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/config/agents.schema.json +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/config/schema.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/config/validator.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/_storage_path.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/artifact_store.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/config.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/history_store.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/queue.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/setup.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/context/terminal_logger.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/daemon/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/db/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/db/adapter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/deploy/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/a2u_server.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/discovery.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/a2a.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/a2u.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/agents_api.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/base.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/mcp.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/openai_compat.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/recipe.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/providers/tools_mcp.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/endpoints/server.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/client.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/components/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/converter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/flow/helpers.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/_config_builder.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/autogen_adapter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/base.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/crewai_adapter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/validators.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/framework_adapters/workflow_framework.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/gateway/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/inbuilt_tools/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/inc/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/inc/config.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/inc/models.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/approvals_bridge.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/hooks_query.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/kanban_bridge.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/schedules_runner.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/usage_bridge.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/bridges/workflows_service.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/context_files.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/gateway_host.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/host_app.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/pages/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/pages/bot_health.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integration/pages/workflow_runs.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/_cli_loaders.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/_managed_base.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/_session_info.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/_tool_aliases.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/backend_registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/base.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/claude_code.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/codex_cli.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/_sync_base.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/daytona.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/docker.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/e2b.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/flyio.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/local.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/modal_compute.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/compute/tenki.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/cursor_cli.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/db_session_adapter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/gemini_cli.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/hosted_agent.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/local_agent.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/managed_agents.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/managed_local.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/integrations/sandboxed_agent.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/executor.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/models.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/path_validation.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/router.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/server.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/jobs/store.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/kanban/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/catalogue.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/config.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/credentials.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/env.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/gateways.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/llm/registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/mcp_server/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/n8n/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/n8n/client.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/n8n/converter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/n8n/preview.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/n8n/reverse_converter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/observability/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/observability/hooks.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/observability/langextract.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/observability/langfuse.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/_valkey_client.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/config.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/_ops.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/_sql_base.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/async_mysql.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/async_postgres.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/async_sqlite.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/base.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/mysql.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/postgres.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/singlestore.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/sqlite.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/supabase.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/surrealdb.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/conversation/turso.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/factory.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/hooks/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/hooks/agent_hooks.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/base.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/cassandra.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/chroma.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/clickhouse.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/couchbase.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/lancedb.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/milvus.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/pgvector.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/pinecone.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/qdrant.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/redis_vector.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/knowledge/weaviate.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/migrations/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/migrations/manager.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/orchestrator.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/async_mongodb.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/base.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/dynamodb.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/firestore.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/gcs.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/memory.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/mongodb.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/redis.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/upstash.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/persistence/state/valkey.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/profiler.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/push/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/push/client.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/push/transports.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/bridge.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/core.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/exceptions.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/history.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/models.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/operations.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/policy.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/runtime.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/security.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/serve.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/recipe/server.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/analyzer.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/applier.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/judge.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/plan.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/player.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/reader.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/storage.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/replay/writer.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/runtime/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/runtime/__main__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/sandbox/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/sandbox/_registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/_base_scheduler.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/_delivery.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/_dispatch.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/agent_scheduler.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/async_agent_scheduler.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/base.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/blueprint_catalogue.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/condition_gate.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/deployment.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/executor.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/run_policy.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/shared.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/suggestion_engine.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/scheduler/yaml_loader.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/security/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/security/audit.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/security/injection.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/security/protected.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/setup/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/setup/build.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/setup/post_install.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/setup/setup_conda_env.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/setup.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/ai_generator.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/config.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/dedupe.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/discovery.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/drift.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/engine.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/example_verifier.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/models.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/reports.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/templates.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/undo_redo.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/standardise/validator.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/storage/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/storage/dynamodb_adapter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/storage/mongodb_adapter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/storage/postgresql_adapter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/storage/redis_adapter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/storage/valkey_adapter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/batch_source.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/cli_docs_source.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/discovery.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/docs_source.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/examples_source.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/executor.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/models.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/report_viewer.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/reporter.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/suite_runner/runner.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/_tool_sources.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/cache.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/dependency_checker.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/discovery.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/loader.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/resolver.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/security.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/tool_override.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/templates/tools_doctor.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tool_registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tool_resolver.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/audio.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/glob_tool.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/grep_tool.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/kanban_tools.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/multiedit.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/tools/skill_manage.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/train/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/train.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/train_vision.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui/_aiui_datastore.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui/_external_agents.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui/context.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui/database_config.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_agents/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_agents/default_app.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_bot/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_bot/default_app.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_chat/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_chat/default_app.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_dashboard/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_dashboard/default_app.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_realtime/__init__.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/ui_realtime/default_app.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/praisonai/upload_vision.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/setup.cfg +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_agents_playbook.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_approval_system.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_basic.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_cli_features.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_custom_tools_fix.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_double_api_fix.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_n8n_agent_invoke.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_n8n_cli_feature.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_n8n_integration.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_phase2_refactor.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_recipe.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_registry.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_runner.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/tests/test_sandboxed_agent_compatibility.py +0 -0
- {praisonai-4.7.12 → praisonai-4.7.13}/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.13
|
|
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.11
|
|
15
|
+
Requires-Dist: praisonai-code>=0.1.10
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.1.10
|
|
17
|
+
Requires-Dist: praisonai-train>=0.1.10
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.1.10
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.1.12
|
|
20
|
+
Requires-Dist: praisonai-sandbox>=0.1.10
|
|
21
|
+
Requires-Dist: praisonai-deploy>=0.1.10
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 4.7.
|
|
3
|
+
Version: 4.7.13
|
|
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.11
|
|
15
|
+
Requires-Dist: praisonai-code>=0.1.10
|
|
16
|
+
Requires-Dist: praisonai-bot>=0.1.10
|
|
17
|
+
Requires-Dist: praisonai-train>=0.1.10
|
|
18
|
+
Requires-Dist: praisonai-browser>=0.1.10
|
|
19
|
+
Requires-Dist: praisonai-mcp>=0.1.12
|
|
20
|
+
Requires-Dist: praisonai-sandbox>=0.1.10
|
|
21
|
+
Requires-Dist: praisonai-deploy>=0.1.10
|
|
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
|
|
@@ -59,6 +59,7 @@ praisonai/capabilities/batches.py
|
|
|
59
59
|
praisonai/capabilities/completions.py
|
|
60
60
|
praisonai/capabilities/container_files.py
|
|
61
61
|
praisonai/capabilities/containers.py
|
|
62
|
+
praisonai/capabilities/decisions.py
|
|
62
63
|
praisonai/capabilities/embeddings.py
|
|
63
64
|
praisonai/capabilities/files.py
|
|
64
65
|
praisonai/capabilities/fine_tuning.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.11
|
|
5
|
+
praisonai-code>=0.1.10
|
|
6
|
+
praisonai-bot>=0.1.10
|
|
7
|
+
praisonai-train>=0.1.10
|
|
8
|
+
praisonai-browser>=0.1.10
|
|
9
|
+
praisonai-mcp>=0.1.12
|
|
10
|
+
praisonai-sandbox>=0.1.10
|
|
11
|
+
praisonai-deploy>=0.1.10
|
|
12
12
|
python-dotenv>=0.19.0
|
|
13
13
|
litellm<2,>=1.83.14
|
|
14
14
|
PyYAML>=6.0
|
|
@@ -6,6 +6,9 @@ Handles session creation, persistence, and resume functionality.
|
|
|
6
6
|
|
|
7
7
|
import json
|
|
8
8
|
import logging
|
|
9
|
+
import os
|
|
10
|
+
import re
|
|
11
|
+
import tempfile
|
|
9
12
|
import time
|
|
10
13
|
import uuid
|
|
11
14
|
from dataclasses import dataclass, field
|
|
@@ -14,6 +17,23 @@ from typing import Any, Dict, List, Optional
|
|
|
14
17
|
|
|
15
18
|
logger = logging.getLogger(__name__)
|
|
16
19
|
|
|
20
|
+
# Matches the ids minted by ``ACPSession.create`` (``sess_`` + 16 hex chars).
|
|
21
|
+
# Allowing up to 32 hex chars keeps forward-compat if the id width grows.
|
|
22
|
+
_SESSION_ID_RE = re.compile(r"^sess_[0-9a-f]{1,32}$")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _validate_session_id(session_id: str) -> str:
|
|
26
|
+
"""Reject anything that is not a server-minted session id.
|
|
27
|
+
|
|
28
|
+
``session_id`` arrives over JSON-RPC from an external peer and is
|
|
29
|
+
interpolated into a filesystem path, so an unvalidated value like
|
|
30
|
+
``"../../tmp/secret"`` would let the peer read or delete arbitrary
|
|
31
|
+
``*.json`` files. Only ids matching the ``create()`` format are allowed.
|
|
32
|
+
"""
|
|
33
|
+
if not isinstance(session_id, str) or not _SESSION_ID_RE.match(session_id):
|
|
34
|
+
raise ValueError(f"invalid session_id: {session_id!r}")
|
|
35
|
+
return session_id
|
|
36
|
+
|
|
17
37
|
|
|
18
38
|
@dataclass
|
|
19
39
|
class ACPSession:
|
|
@@ -124,23 +144,46 @@ class SessionStore:
|
|
|
124
144
|
self._last_session_file = self.storage_dir / ".last_session"
|
|
125
145
|
|
|
126
146
|
def _session_path(self, session_id: str) -> Path:
|
|
127
|
-
"""Get path for session file."""
|
|
128
|
-
|
|
129
|
-
|
|
147
|
+
"""Get path for session file (validated against traversal)."""
|
|
148
|
+
_validate_session_id(session_id)
|
|
149
|
+
# ``resolve`` anchors the path so a future id-format change can't
|
|
150
|
+
# silently re-open the traversal hole.
|
|
151
|
+
return (self.storage_dir / f"{session_id}.json").resolve()
|
|
152
|
+
|
|
153
|
+
@staticmethod
|
|
154
|
+
def _atomic_write(path: Path, text: str) -> None:
|
|
155
|
+
"""Write ``text`` to ``path`` atomically via a temp file + os.replace.
|
|
156
|
+
|
|
157
|
+
A crash or Ctrl-C mid-write can never leave the target empty or
|
|
158
|
+
half-written — the old content survives until the rename succeeds.
|
|
159
|
+
"""
|
|
160
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
161
|
+
fd, tmp = tempfile.mkstemp(prefix=".sess-", suffix=".tmp", dir=str(path.parent))
|
|
162
|
+
try:
|
|
163
|
+
with os.fdopen(fd, "w") as f:
|
|
164
|
+
f.write(text)
|
|
165
|
+
f.flush()
|
|
166
|
+
os.fsync(f.fileno())
|
|
167
|
+
os.replace(tmp, path)
|
|
168
|
+
except BaseException:
|
|
169
|
+
try:
|
|
170
|
+
os.unlink(tmp)
|
|
171
|
+
except OSError:
|
|
172
|
+
pass
|
|
173
|
+
raise
|
|
174
|
+
|
|
130
175
|
def save(self, session: ACPSession) -> None:
|
|
131
|
-
"""Save session to disk."""
|
|
176
|
+
"""Save session to disk atomically."""
|
|
132
177
|
try:
|
|
133
178
|
path = self._session_path(session.session_id)
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
f.write(session.session_id)
|
|
140
|
-
|
|
179
|
+
self._atomic_write(path, json.dumps(session.to_dict(), indent=2))
|
|
180
|
+
|
|
181
|
+
# Update last session pointer ONLY after the payload is durable.
|
|
182
|
+
self._atomic_write(self._last_session_file, session.session_id)
|
|
183
|
+
|
|
141
184
|
logger.debug(f"Saved session {session.session_id}")
|
|
142
185
|
except Exception as e:
|
|
143
|
-
logger.error(f"Failed to save session: {e}")
|
|
186
|
+
logger.error(f"Failed to save session {session.session_id}: {e}")
|
|
144
187
|
|
|
145
188
|
def load(self, session_id: str) -> Optional[ACPSession]:
|
|
146
189
|
"""Load session from disk."""
|
|
@@ -373,7 +373,7 @@ def _make_timeout_proxy(inner, wrapped_run=None, wrapped__run=None):
|
|
|
373
373
|
return proxy
|
|
374
374
|
|
|
375
375
|
|
|
376
|
-
def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory, on_leaked=None, owner_key=None):
|
|
376
|
+
def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory, on_leaked=None, owner_key=None, native_delegates_to_core=False):
|
|
377
377
|
"""Enforce a per-call timeout on a tool, sync or async.
|
|
378
378
|
|
|
379
379
|
For async tools the underlying task is cancelled on timeout. For sync tools
|
|
@@ -387,10 +387,33 @@ def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory, on_leaked
|
|
|
387
387
|
On timeout the wrapper raises :class:`ToolTimeoutError` rather than returning
|
|
388
388
|
a JSON string, so a tool's declared return-type contract is never silently
|
|
389
389
|
downgraded; the framework adapter decides how to surface the timeout.
|
|
390
|
+
|
|
391
|
+
``native_delegates_to_core``: when True, a *plain native callable* (not a
|
|
392
|
+
framework tool object) is returned unwrapped so core's own per-tool timeout
|
|
393
|
+
enforcement (``praisonaiagents`` ``agent/tool_execution.py`` /
|
|
394
|
+
``tools/call_executor.py``, configured via the agent's ``tool_config``
|
|
395
|
+
timeout) owns it — avoiding a second, duplicated abandon-on-timeout thread
|
|
396
|
+
pool for tools that already flow through core (#5650). Framework tool
|
|
397
|
+
objects (CrewAI/AutoGen/LangChain ``BaseTool``) never reach core's executor,
|
|
398
|
+
so they are *always* wrapped here to preserve their ``args_schema``.
|
|
390
399
|
"""
|
|
391
400
|
if timeout_seconds is None or timeout_seconds <= 0:
|
|
392
401
|
return tool
|
|
393
402
|
|
|
403
|
+
# praisonai-native path: a plain callable already flows through core's tool
|
|
404
|
+
# executor, which enforces the resolved per-tool timeout. Returning it
|
|
405
|
+
# unwrapped lets core own the abandon-on-expiry semantics instead of the
|
|
406
|
+
# wrapper standing up a second thread pool with the same behaviour. Only
|
|
407
|
+
# framework tool objects (which bypass core) still need wrapper wrapping, so
|
|
408
|
+
# they fall through to the logic below.
|
|
409
|
+
if (
|
|
410
|
+
native_delegates_to_core
|
|
411
|
+
and callable(tool)
|
|
412
|
+
and not isinstance(tool, type)
|
|
413
|
+
and not _looks_like_framework_tool(tool)
|
|
414
|
+
):
|
|
415
|
+
return tool
|
|
416
|
+
|
|
394
417
|
import asyncio
|
|
395
418
|
import concurrent.futures
|
|
396
419
|
import functools
|
|
@@ -775,14 +798,31 @@ class AgentsGenerator:
|
|
|
775
798
|
with self._tool_timeout_executor_lock:
|
|
776
799
|
self._leaked_workers += 1
|
|
777
800
|
|
|
778
|
-
def _wrap_tool_with_timeout(self, tool, timeout_seconds):
|
|
779
|
-
"""Wrap a tool with this generator's instance-owned timeout executor.
|
|
801
|
+
def _wrap_tool_with_timeout(self, tool, timeout_seconds, native_delegates_to_core=None):
|
|
802
|
+
"""Wrap a tool with this generator's instance-owned timeout executor.
|
|
803
|
+
|
|
804
|
+
On the praisonai-native framework the resolved per-tool timeout is
|
|
805
|
+
enforced by core (``praisonaiagents`` ``agent/tool_execution.py``, wired
|
|
806
|
+
via the agent's ``tool_config`` timeout), so a *native* callable is left
|
|
807
|
+
unwrapped here instead of being bound to a second wrapper-owned thread
|
|
808
|
+
pool with the same abandon-on-expiry semantics (#5650). Framework tool
|
|
809
|
+
objects (CrewAI/AutoGen/LangChain ``BaseTool``) bypass core, so they are
|
|
810
|
+
still wrapped.
|
|
811
|
+
|
|
812
|
+
``native_delegates_to_core``: callers that already know the resolved
|
|
813
|
+
framework (the per-run wrap/resolver closures) pass it explicitly;
|
|
814
|
+
otherwise it is inferred from ``self.framework`` (resolved to the chosen
|
|
815
|
+
adapter name by the time an adapter invokes a wrap closure at run time).
|
|
816
|
+
"""
|
|
817
|
+
if native_delegates_to_core is None:
|
|
818
|
+
native_delegates_to_core = (getattr(self, "framework", None) or "") == "praisonai"
|
|
780
819
|
return _wrap_with_timeout(
|
|
781
820
|
tool,
|
|
782
821
|
timeout_seconds,
|
|
783
822
|
self._get_tool_timeout_executor,
|
|
784
823
|
on_leaked=self._note_leaked_worker,
|
|
785
824
|
owner_key=self._timeout_owner_key,
|
|
825
|
+
native_delegates_to_core=native_delegates_to_core,
|
|
786
826
|
)
|
|
787
827
|
|
|
788
828
|
def close(self):
|
|
@@ -1080,11 +1120,35 @@ class AgentsGenerator:
|
|
|
1080
1120
|
# that when the *same* generator instance is reused with a different
|
|
1081
1121
|
# timeout layout, a stale closure from a previous run can never leak into
|
|
1082
1122
|
# the adapters and apply the wrong budget to the current run.
|
|
1123
|
+
# Resolve the chosen framework now (the same registry resolution the
|
|
1124
|
+
# run prep uses) so native-vs-framework tool handling is decided BEFORE
|
|
1125
|
+
# the uniform wrap is applied eagerly below — ``self.framework`` is not
|
|
1126
|
+
# yet updated to the resolved adapter name at this point in the run.
|
|
1127
|
+
_requested_framework = getattr(self, "framework", None) or config.get('framework')
|
|
1128
|
+
registry = getattr(self, "_adapter_registry", None)
|
|
1129
|
+
try:
|
|
1130
|
+
resolved_framework = (
|
|
1131
|
+
registry.resolve_or_default(_requested_framework)
|
|
1132
|
+
if registry is not None else _requested_framework
|
|
1133
|
+
)
|
|
1134
|
+
except Exception:
|
|
1135
|
+
resolved_framework = _requested_framework
|
|
1136
|
+
native = resolved_framework == "praisonai"
|
|
1137
|
+
|
|
1083
1138
|
uniform = self._resolve_uniform_tool_timeout(config)
|
|
1084
1139
|
wrap = None
|
|
1085
1140
|
resolver = None
|
|
1086
1141
|
if uniform and uniform > 0:
|
|
1087
|
-
|
|
1142
|
+
# On the native framework a *plain callable* is left unwrapped so
|
|
1143
|
+
# core enforces the budget (#5650) — the raw value is exposed below
|
|
1144
|
+
# so the native adapter configures each agent's tool_config timeout.
|
|
1145
|
+
# Framework tool *objects* are still wrapped here regardless, so
|
|
1146
|
+
# their args_schema survives for the LLM. ``native`` is passed
|
|
1147
|
+
# explicitly because ``self.framework`` is not yet resolved here.
|
|
1148
|
+
wrap = (
|
|
1149
|
+
lambda t, _sec=uniform, _n=native:
|
|
1150
|
+
self._wrap_tool_with_timeout(t, _sec, native_delegates_to_core=_n)
|
|
1151
|
+
)
|
|
1088
1152
|
tools_dict = {name: wrap(tool) for name, tool in tools_dict.items()}
|
|
1089
1153
|
else:
|
|
1090
1154
|
# No single uniform timeout. If any agent declared a per-agent
|
|
@@ -1105,9 +1169,21 @@ class AgentsGenerator:
|
|
|
1105
1169
|
# so adapters still read them via the same keys. Both are written every
|
|
1106
1170
|
# time so the inactive path is cleared rather than left holding a prior
|
|
1107
1171
|
# closure.
|
|
1172
|
+
# On the native framework, plain callables are no longer wrapped by the
|
|
1173
|
+
# wrapper's own executor (above) — core enforces the timeout instead
|
|
1174
|
+
# (#5650). Expose the resolved per-agent timeout (float seconds) so the
|
|
1175
|
+
# native adapter can configure each core Agent's ``tool_config`` timeout.
|
|
1176
|
+
# ``None`` for non-native frameworks, which keep wrapper-side wrapping.
|
|
1177
|
+
native_tool_timeout_resolver = None
|
|
1178
|
+
if native:
|
|
1179
|
+
native_tool_timeout_resolver = (
|
|
1180
|
+
lambda agent_key, _cfg=config: self.resolve_agent_tool_timeout(agent_key, _cfg)
|
|
1181
|
+
)
|
|
1182
|
+
|
|
1108
1183
|
self._run_ctx = {
|
|
1109
1184
|
"_tool_timeout_wrap": wrap,
|
|
1110
1185
|
"_agent_tool_wrap_resolver": resolver,
|
|
1186
|
+
"_native_tool_timeout_resolver": native_tool_timeout_resolver,
|
|
1111
1187
|
}
|
|
1112
1188
|
return tools_dict
|
|
1113
1189
|
|
|
@@ -68,6 +68,13 @@ __all__ = [
|
|
|
68
68
|
'aembed',
|
|
69
69
|
'embedding', # Alias for embed
|
|
70
70
|
'aembedding', # Alias for aembed
|
|
71
|
+
# System One / Jev decisions (Ollama /v1/systemone)
|
|
72
|
+
'system_one',
|
|
73
|
+
'asystem_one',
|
|
74
|
+
'choice_question',
|
|
75
|
+
'noul_question',
|
|
76
|
+
'score_question',
|
|
77
|
+
'is_decision_model',
|
|
71
78
|
# Rerank
|
|
72
79
|
'rerank',
|
|
73
80
|
'arerank',
|
|
@@ -155,6 +162,7 @@ __all__ = [
|
|
|
155
162
|
'BatchResult',
|
|
156
163
|
'VectorStoreResult',
|
|
157
164
|
'EmbeddingResult',
|
|
165
|
+
'SystemOneResult',
|
|
158
166
|
'RerankResult',
|
|
159
167
|
'ModerationResult',
|
|
160
168
|
'OCRResult',
|
|
@@ -197,6 +205,10 @@ _ATTR_TO_MODULE = {
|
|
|
197
205
|
# Embeddings
|
|
198
206
|
'embed': 'embeddings', 'aembed': 'embeddings', 'EmbeddingResult': 'embeddings',
|
|
199
207
|
'embedding': 'embeddings', 'aembedding': 'embeddings', # Aliases
|
|
208
|
+
# System One decisions
|
|
209
|
+
'system_one': 'decisions', 'asystem_one': 'decisions',
|
|
210
|
+
'choice_question': 'decisions', 'noul_question': 'decisions', 'score_question': 'decisions',
|
|
211
|
+
'is_decision_model': 'decisions', 'SystemOneResult': 'decisions',
|
|
200
212
|
# Rerank
|
|
201
213
|
'rerank': 'rerank_module', 'arerank': 'rerank_module', 'RerankResult': 'rerank_module',
|
|
202
214
|
# Moderations
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""
|
|
2
|
+
System One / Jev typed decision capabilities (Ollama ``/v1/systemone``).
|
|
3
|
+
|
|
4
|
+
Thin re-export of ``praisonaiagents.decisions`` for ``praisonai.capabilities`` parity.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from praisonaiagents.decisions import (
|
|
8
|
+
KNOWN_DECISION_MODELS,
|
|
9
|
+
SystemOneResult,
|
|
10
|
+
asystem_one,
|
|
11
|
+
choice_question,
|
|
12
|
+
is_decision_model,
|
|
13
|
+
noul_question,
|
|
14
|
+
resolve_system_one_base_url,
|
|
15
|
+
score_question,
|
|
16
|
+
system_one,
|
|
17
|
+
system_one_via_typesafe_sdk,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"KNOWN_DECISION_MODELS",
|
|
22
|
+
"SystemOneResult",
|
|
23
|
+
"asystem_one",
|
|
24
|
+
"choice_question",
|
|
25
|
+
"is_decision_model",
|
|
26
|
+
"noul_question",
|
|
27
|
+
"resolve_system_one_base_url",
|
|
28
|
+
"score_question",
|
|
29
|
+
"system_one",
|
|
30
|
+
"system_one_via_typesafe_sdk",
|
|
31
|
+
]
|
|
@@ -372,7 +372,7 @@ def _daemon_states_payload() -> list:
|
|
|
372
372
|
"source": "daemon",
|
|
373
373
|
"name": s.get("name", "unknown"),
|
|
374
374
|
"pid": pid,
|
|
375
|
-
"status": "running" if state_manager.is_process_alive(pid) else "stopped",
|
|
375
|
+
"status": "running" if state_manager.is_process_alive(pid, s.get("start_time")) else "stopped",
|
|
376
376
|
"interval": s.get("interval", "unknown"),
|
|
377
377
|
"task": s.get("task", ""),
|
|
378
378
|
})
|
|
@@ -74,7 +74,18 @@ class AgentSchedulerHandler:
|
|
|
74
74
|
|
|
75
75
|
# Parse arguments
|
|
76
76
|
name = unknown_args[0]
|
|
77
|
-
|
|
77
|
+
|
|
78
|
+
# Validate the name BEFORE launching any daemon: save_state rejects an
|
|
79
|
+
# unsafe name, and launching first would orphan a running daemon with no
|
|
80
|
+
# state file the CLI could use to stop it.
|
|
81
|
+
from praisonai.scheduler.state_manager import _validate_name
|
|
82
|
+
try:
|
|
83
|
+
_validate_name(name)
|
|
84
|
+
except ValueError:
|
|
85
|
+
print(f"❌ Error: Invalid scheduler name {name!r}")
|
|
86
|
+
print(" Use letters, digits, '_', '-', '.' (max 128 chars, no '..').")
|
|
87
|
+
return 1
|
|
88
|
+
|
|
78
89
|
# Check for --recipe flag in unknown_args
|
|
79
90
|
recipe_name = None
|
|
80
91
|
task = None
|
|
@@ -96,9 +107,13 @@ class AgentSchedulerHandler:
|
|
|
96
107
|
max_cost = getattr(args, 'max_cost', None)
|
|
97
108
|
deliver = getattr(args, 'schedule_deliver', None) or ''
|
|
98
109
|
|
|
99
|
-
# Check if name already exists
|
|
110
|
+
# Check if name already exists. Use is_process_alive with the recorded
|
|
111
|
+
# start_time (not a PID-only probe) so a stale state whose PID was reused
|
|
112
|
+
# by an unrelated process does not falsely block a fresh start.
|
|
100
113
|
existing = state_manager.load_state(name)
|
|
101
|
-
if existing and
|
|
114
|
+
if existing and state_manager.is_process_alive(
|
|
115
|
+
existing.get('pid', 0), existing.get('start_time')
|
|
116
|
+
):
|
|
102
117
|
print(f"❌ Error: Scheduler '{name}' is already running (PID: {existing['pid']})")
|
|
103
118
|
print(f" Use 'praisonai schedule stop {name}' to stop it first")
|
|
104
119
|
return 1
|
|
@@ -177,7 +192,7 @@ class AgentSchedulerHandler:
|
|
|
177
192
|
for state in states:
|
|
178
193
|
name = state.get('name', 'unknown')[:20]
|
|
179
194
|
pid = state.get('pid', 0)
|
|
180
|
-
status = "running" if state_manager.is_process_alive(pid) else "stopped"
|
|
195
|
+
status = "running" if state_manager.is_process_alive(pid, state.get('start_time')) else "stopped"
|
|
181
196
|
interval = state.get('interval', 'unknown')[:12]
|
|
182
197
|
task = state.get('task', '')[:40]
|
|
183
198
|
|
|
@@ -261,7 +276,7 @@ class AgentSchedulerHandler:
|
|
|
261
276
|
pid = state['pid']
|
|
262
277
|
|
|
263
278
|
try:
|
|
264
|
-
if daemon_manager.stop_daemon(pid):
|
|
279
|
+
if daemon_manager.stop_daemon(pid, expected_start_time=state.get('start_time')):
|
|
265
280
|
state_manager.delete_state(name)
|
|
266
281
|
print(f"✅ Stopped '{name}' (PID: {pid})")
|
|
267
282
|
stopped += 1
|
|
@@ -298,7 +313,7 @@ class AgentSchedulerHandler:
|
|
|
298
313
|
|
|
299
314
|
print(f"🛑 Stopping scheduler '{name}' (PID: {pid})...")
|
|
300
315
|
|
|
301
|
-
success = daemon_manager.stop_daemon(pid)
|
|
316
|
+
success = daemon_manager.stop_daemon(pid, expected_start_time=state.get('start_time'))
|
|
302
317
|
|
|
303
318
|
if success:
|
|
304
319
|
state['status'] = 'stopped'
|
|
@@ -365,8 +380,9 @@ class AgentSchedulerHandler:
|
|
|
365
380
|
|
|
366
381
|
# Stop if running
|
|
367
382
|
pid = state.get('pid')
|
|
368
|
-
|
|
369
|
-
|
|
383
|
+
start_time = state.get('start_time')
|
|
384
|
+
if pid and state_manager.is_process_alive(pid, start_time):
|
|
385
|
+
daemon_manager.stop_daemon(pid, expected_start_time=start_time)
|
|
370
386
|
time.sleep(1)
|
|
371
387
|
|
|
372
388
|
# Start again
|
|
@@ -384,6 +400,7 @@ class AgentSchedulerHandler:
|
|
|
384
400
|
state['pid'] = new_pid
|
|
385
401
|
state['status'] = 'running'
|
|
386
402
|
state['started_at'] = datetime.now().isoformat()
|
|
403
|
+
state.pop('start_time', None) # let save_state record the new process's identity
|
|
387
404
|
state_manager.save_state(name, state)
|
|
388
405
|
|
|
389
406
|
print(f"✅ Scheduler '{name}' restarted (PID: {new_pid})")
|
|
@@ -426,7 +443,7 @@ class AgentSchedulerHandler:
|
|
|
426
443
|
|
|
427
444
|
# Get process status
|
|
428
445
|
pid = state.get('pid', 0)
|
|
429
|
-
is_alive = state_manager.is_process_alive(pid)
|
|
446
|
+
is_alive = state_manager.is_process_alive(pid, state.get('start_time'))
|
|
430
447
|
status = "🟢 running" if is_alive else "🔴 stopped"
|
|
431
448
|
|
|
432
449
|
# Calculate uptime
|
|
@@ -596,7 +596,37 @@ class PraisonAIAdapter(BaseFrameworkAdapter):
|
|
|
596
596
|
# Add approval config if present
|
|
597
597
|
if agent_approval:
|
|
598
598
|
agent_kwargs['approval'] = agent_approval
|
|
599
|
-
|
|
599
|
+
|
|
600
|
+
# Forward the resolved per-agent tool_timeout to core so native
|
|
601
|
+
# tools are enforced by core's own per-tool timeout (#5650) instead
|
|
602
|
+
# of a duplicate wrapper-side executor. The generator exposes the
|
|
603
|
+
# resolved budget only on the native framework; framework tool
|
|
604
|
+
# objects keep wrapper-side wrapping. A user-supplied tool_config in
|
|
605
|
+
# YAML (details['llm'] etc.) is not overridden here — this only
|
|
606
|
+
# fills the timeout the wrapper would otherwise have enforced.
|
|
607
|
+
native_timeout_resolver = (cli_config or {}).get(
|
|
608
|
+
"_native_tool_timeout_resolver"
|
|
609
|
+
)
|
|
610
|
+
if callable(native_timeout_resolver) and 'tool_config' not in agent_kwargs:
|
|
611
|
+
budget = native_timeout_resolver(role)
|
|
612
|
+
if isinstance(budget, (int, float)) and not isinstance(budget, bool) and budget > 0:
|
|
613
|
+
try:
|
|
614
|
+
from praisonaiagents.config.feature_configs import ToolConfig
|
|
615
|
+
# Preserve the resolved budget as-is (float seconds).
|
|
616
|
+
# Core consumes ToolConfig.timeout directly as seconds in
|
|
617
|
+
# both the sync (future.result(timeout=...)) and async
|
|
618
|
+
# (asyncio.wait_for(timeout=...)) paths, so fractional
|
|
619
|
+
# budgets survive. Rounding to int would collapse a
|
|
620
|
+
# subsecond budget (e.g. 0.4 -> 0), and core treats a
|
|
621
|
+
# non-positive timeout as "no timeout" — silently dropping
|
|
622
|
+
# enforcement for native callables that are now unwrapped.
|
|
623
|
+
agent_kwargs['tool_config'] = ToolConfig(timeout=budget)
|
|
624
|
+
except Exception as _tc_err:
|
|
625
|
+
logger.warning(
|
|
626
|
+
"Could not set core tool_config timeout for agent %r: %s",
|
|
627
|
+
role_filled, _tc_err,
|
|
628
|
+
)
|
|
629
|
+
|
|
600
630
|
agent = PraisonAgent(**agent_kwargs)
|
|
601
631
|
|
|
602
632
|
if agent_callback:
|