agentkernel 0.7.0__tar.gz → 0.8.1__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.
- {agentkernel-0.7.0 → agentkernel-0.8.1}/PKG-INFO +19 -5
- {agentkernel-0.7.0 → agentkernel-0.8.1}/README.md +14 -4
- {agentkernel-0.7.0 → agentkernel-0.8.1}/pyproject.toml +9 -3
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/cli/cli.py +28 -2
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/base.py +134 -1
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/config.py +32 -3
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/azure/akfunction.py +2 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/framework/adk/adk.py +89 -36
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/framework/crewai/crewai.py +8 -6
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/framework/langgraph/langgraph.py +33 -2
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/framework/openai/openai.py +20 -8
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/framework/pydanticai/pydanticai.py +20 -2
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/framework/smolagents/smolagents.py +14 -1
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/__init__.py +7 -5
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/base.py +44 -2
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/broker/__init__.py +2 -2
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/broker/base.py +13 -13
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/broker/embedded.py +7 -5
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/broker/thread.py +11 -11
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/broker/worker.py +32 -15
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/errors.py +1 -1
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/factory.py +67 -7
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/hooks.py +8 -8
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/manager.py +23 -16
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/model.py +4 -2
- agentkernel-0.8.1/src/agentkernel/sandbox/providers/daytona.py +196 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/providers/docker.py +1 -0
- agentkernel-0.8.1/src/agentkernel/sandbox/providers/e2b.py +138 -0
- agentkernel-0.8.1/src/agentkernel/sandbox/providers/ec2_ssm.py +234 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/tools.py +28 -10
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/ak-add-capabilities/SKILL.md +59 -23
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/ak-add-capabilities/evals/evals.json +33 -1
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/ak-add-integration/SKILL.md +8 -8
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/ak-add-integration/evals/evals.json +1 -1
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/ak-build/SKILL.md +1 -1
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/ak-build/evals/evals.json +1 -1
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/ak-cloud-deploy/SKILL.md +19 -19
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/ak-cloud-deploy/evals/evals.json +1 -1
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/ak-init/SKILL.md +2 -2
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/ak-init/evals/evals.json +2 -2
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/ak-test/SKILL.md +2 -2
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/ak-test/evals/evals.json +1 -1
- agentkernel-0.8.1/src/agentkernel/trace/langfuse/langgraph.py +49 -0
- agentkernel-0.7.0/src/agentkernel/trace/langfuse/langgraph.py +0 -70
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/adk.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/api/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/api/a2a/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/api/a2a/a2a.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/api/a2a/handler.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/api/handler.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/api/http.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/api/mcp/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/api/mcp/akmcp.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/api/thread.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/auth/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/auth/handler.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/auth.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/aws.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/azure.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/cli/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/cli/ak.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/builder.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/chat_service.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/hooks.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/logger.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/model.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/module.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/multimodal/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/multimodal/factory.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/multimodal/hooks.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/multimodal/storage/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/multimodal/storage/base.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/multimodal/storage/dynamodb.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/multimodal/storage/in_memory.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/multimodal/storage/redis.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/multimodal/storage/session_cache.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/multimodal/storage/storage_manager.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/multimodal/tools.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/runtime.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/service.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/session/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/session/base.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/session/cosmosdb.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/session/dynamodb.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/session/firestore.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/session/in_memory.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/session/redis.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/session/serde.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/session/valkey.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/thread/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/thread/authoriser.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/thread/manager.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/thread/model.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/thread/naming.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/thread/store/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/thread/store/base.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/thread/store/cosmosdb.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/thread/store/dynamodb.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/thread/store/firestore.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/thread/store/in_memory.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/thread/store/redis.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/tool.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/util/config_yaml_util.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/util/driver/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/util/driver/base.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/util/driver/cosmosdb.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/util/driver/dynamodb.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/util/driver/firestore.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/util/driver/redis.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/util/driver/redis_like.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/util/driver/valkey.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/util/error_util.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/util/factory.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/core/util/key_value_cache.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/crewai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/containerized/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/containerized/akagentrunner.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/containerized/akoutputconsumer.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/containerized/core/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/containerized/core/sqs_consumer.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/containerized/ecs_io_handler.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/containerized/ecs_queue_handler.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/core/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/core/response_store/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/core/response_store/dynamodb.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/core/response_store/handler.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/core/response_store/redis.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/core/response_store/valkey.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/core/sqs_handler.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/core/websocket_service.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/serverless/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/serverless/akagentrunner.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/serverless/akauthorizer.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/serverless/aklambda.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/serverless/akresponsehandler.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/serverless/akwsconnectionhandler.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/serverless/core/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/serverless/core/router/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/serverless/core/router/common.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/serverless/core/router/rest_lambda.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/serverless/core/router/ws_lambda.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/aws/serverless/core/sqs_consumer.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/azure/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/common/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/common/queue_consumer.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/common/queue_handler.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/common/queue_request_handler.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/common/response_store.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/common/thread_runner.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/common/websocket_connection_store.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/gcp/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/gcp/akauthorizer.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/deployment/gcp/akcloudrun.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/framework/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/framework/adk/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/framework/crewai/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/framework/langgraph/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/framework/openai/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/framework/pydanticai/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/framework/smolagents/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/gcp.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/gmail.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/guardrail/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/guardrail/bedrock.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/guardrail/guardrail.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/guardrail/openai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/guardrail/walledai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/instagram.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/gmail/README.md +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/gmail/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/gmail/gmail_chat.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/instagram/README.md +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/instagram/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/instagram/instagram_chat.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/messenger/README.md +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/messenger/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/messenger/messenger_chat.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/slack/README.md +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/slack/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/slack/slack_chat.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/teams/README.md +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/teams/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/teams/teams_chat.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/telegram/README.md +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/telegram/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/telegram/telegram_chat.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/whatsapp/README.md +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/whatsapp/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/integration/whatsapp/whatsapp_chat.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/knowledgebase/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/knowledgebase/base.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/knowledgebase/chroma.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/knowledgebase/knowledgebuilder.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/knowledgebase/neo4j.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/knowledgebase/starburst.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/langgraph.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/mcp.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/messenger.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/openai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/pydanticai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/principal.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/providers/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/providers/local_subprocess.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/sandbox/testing.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/skills/skills.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/slack.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/smolagents.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/teams.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/telegram.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/test/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/test/config.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/test/test.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/base.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/langfuse/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/langfuse/adk.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/langfuse/crewai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/langfuse/langfuse.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/langfuse/openai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/langfuse/pydanticai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/langfuse/smolagents.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/logfire/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/logfire/adk.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/logfire/crewai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/logfire/langgraph.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/logfire/logfire.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/logfire/openai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/logfire/pydanticai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/logfire/smolagents.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/openllmetry/__init__.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/openllmetry/adk.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/openllmetry/crewai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/openllmetry/langgraph.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/openllmetry/openai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/openllmetry/openllmetry.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/openllmetry/pydanticai.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/openllmetry/smolagents.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/trace/trace.py +0 -0
- {agentkernel-0.7.0 → agentkernel-0.8.1}/src/agentkernel/whatsapp.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: agentkernel
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.1
|
|
4
4
|
Summary: Agent Kernel - Unified AI Agents Runtime
|
|
5
5
|
Author: Yaala Labs
|
|
6
6
|
Author-email: Yaala Labs <agentkernel@yaalalabs.com>
|
|
@@ -26,6 +26,8 @@ Requires-Dist: chromadb>=0.4.0 ; extra == 'chromadb'
|
|
|
26
26
|
Requires-Dist: crewai>=1.15.0 ; extra == 'crewai'
|
|
27
27
|
Requires-Dist: openinference-instrumentation-crewai>=0.1.16 ; extra == 'crewai'
|
|
28
28
|
Requires-Dist: openinference-instrumentation-litellm>=0.1.28 ; extra == 'crewai'
|
|
29
|
+
Requires-Dist: daytona>=0.198.0,<0.199 ; extra == 'daytona'
|
|
30
|
+
Requires-Dist: e2b-code-interpreter>=2.8.0 ; extra == 'e2b'
|
|
29
31
|
Requires-Dist: google-cloud-firestore>=2.19.0 ; extra == 'gcp'
|
|
30
32
|
Requires-Dist: google-auth>=2.0.0 ; extra == 'gmail'
|
|
31
33
|
Requires-Dist: google-auth-oauthlib>=1.0.0 ; extra == 'gmail'
|
|
@@ -86,6 +88,8 @@ Provides-Extra: azure
|
|
|
86
88
|
Provides-Extra: chromadb
|
|
87
89
|
Provides-Extra: cli
|
|
88
90
|
Provides-Extra: crewai
|
|
91
|
+
Provides-Extra: daytona
|
|
92
|
+
Provides-Extra: e2b
|
|
89
93
|
Provides-Extra: gcp
|
|
90
94
|
Provides-Extra: gmail
|
|
91
95
|
Provides-Extra: instagram
|
|
@@ -126,7 +130,7 @@ Agent Kernel is a lightweight **AI agent runtime** and adapter layer for buildin
|
|
|
126
130
|
- **Multi-Framework Support**: OpenAI Agents SDK, CrewAI, LangGraph, Google ADK, Smolagents, and Pydantic AI
|
|
127
131
|
- **Session Management**: Built-in session abstraction with pluggable storage backends
|
|
128
132
|
- **Knowledge Bases**: Unified `KnowledgeBase` interface with ChromaDB, Neo4j, and Starburst/Trino backends via `KnowledgeBuilder`
|
|
129
|
-
- **Sandbox**: Execute agent-generated code and shell commands in an isolated, permission-bounded environment with pluggable providers (`local_subprocess`, `docker`), workload profiles, policy enforcement, and per-user identity
|
|
133
|
+
- **Sandbox**: Execute agent-generated code and shell commands in an isolated, permission-bounded environment with pluggable providers (`local_subprocess`, `docker`, `e2b`, `daytona`, `ec2_ssm`), workload profiles, policy enforcement, and per-user identity
|
|
130
134
|
- **Flexible Deployment**: Interactive CLI, REST API, serverless, or containerized deployment — see the "Multi-Cloud Deployment" section below
|
|
131
135
|
- **Pluggable Architecture**: Easy to extend with custom framework adapters
|
|
132
136
|
- **MCP Server**: Built-in Model Context Protocol server for exposing agents as MCP tools and exposing any custom tool
|
|
@@ -154,10 +158,14 @@ For LLM-based thread naming with Conversation Thread Support:
|
|
|
154
158
|
pip install "agentkernel[thread]"
|
|
155
159
|
```
|
|
156
160
|
|
|
157
|
-
For the
|
|
161
|
+
For the sandbox providers (the `local_subprocess` provider needs no extra; `ec2_ssm` rides
|
|
162
|
+
the `aws` extra):
|
|
158
163
|
|
|
159
164
|
```bash
|
|
160
|
-
pip install "agentkernel[sandbox-docker]"
|
|
165
|
+
pip install "agentkernel[sandbox-docker]" # docker provider
|
|
166
|
+
pip install "agentkernel[e2b]" # e2b cloud provider
|
|
167
|
+
pip install "agentkernel[daytona]" # daytona cloud provider
|
|
168
|
+
pip install "agentkernel[aws]" # ec2_ssm provider (boto3)
|
|
161
169
|
```
|
|
162
170
|
|
|
163
171
|
**Requirements:**
|
|
@@ -1124,9 +1132,15 @@ Key fields:
|
|
|
1124
1132
|
- **`enabled`** (`AK_SANDBOX__ENABLED`, default `false`) — master switch; inert when off.
|
|
1125
1133
|
- **`agents`** — agent names the tools/prompt attach to; omit for all agents.
|
|
1126
1134
|
- **`type`** (per profile) — `local_subprocess` (no isolation; dev/test), `docker`
|
|
1127
|
-
(container isolation; `sandbox-docker` extra),
|
|
1135
|
+
(container isolation; `sandbox-docker` extra), `e2b` (managed micro-VMs; `e2b` extra),
|
|
1136
|
+
`daytona` (cloud containers; `daytona` extra), `ec2_ssm` (attach to an existing EC2
|
|
1137
|
+
instance via SSM; `aws` extra), or a dotted path to your own `SandboxProvider`.
|
|
1128
1138
|
- **`scope`** — `per_call` (fresh per execution), `per_session` (persists across turns),
|
|
1129
1139
|
`per_runtime` (one shared sandbox per profile).
|
|
1140
|
+
- **`environment`** — `managed` (default; the provider creates and disposes sandboxes) or
|
|
1141
|
+
`attached` (deliberately connect to an existing environment the framework never owns,
|
|
1142
|
+
e.g. an EC2 instance via `ec2_ssm`; requires the provider's `attach_to` and is validated
|
|
1143
|
+
against the provider's lifecycle capabilities at startup).
|
|
1130
1144
|
- **`policy`** — network egress, filesystem paths, cpu/memory, timeout; enforced per provider,
|
|
1131
1145
|
fail-closed under `strict`.
|
|
1132
1146
|
- **`identity.mode`** + **`principal_resolver`** — run code under the agent's or the invoking
|
|
@@ -11,7 +11,7 @@ Agent Kernel is a lightweight **AI agent runtime** and adapter layer for buildin
|
|
|
11
11
|
- **Multi-Framework Support**: OpenAI Agents SDK, CrewAI, LangGraph, Google ADK, Smolagents, and Pydantic AI
|
|
12
12
|
- **Session Management**: Built-in session abstraction with pluggable storage backends
|
|
13
13
|
- **Knowledge Bases**: Unified `KnowledgeBase` interface with ChromaDB, Neo4j, and Starburst/Trino backends via `KnowledgeBuilder`
|
|
14
|
-
- **Sandbox**: Execute agent-generated code and shell commands in an isolated, permission-bounded environment with pluggable providers (`local_subprocess`, `docker`), workload profiles, policy enforcement, and per-user identity
|
|
14
|
+
- **Sandbox**: Execute agent-generated code and shell commands in an isolated, permission-bounded environment with pluggable providers (`local_subprocess`, `docker`, `e2b`, `daytona`, `ec2_ssm`), workload profiles, policy enforcement, and per-user identity
|
|
15
15
|
- **Flexible Deployment**: Interactive CLI, REST API, serverless, or containerized deployment — see the "Multi-Cloud Deployment" section below
|
|
16
16
|
- **Pluggable Architecture**: Easy to extend with custom framework adapters
|
|
17
17
|
- **MCP Server**: Built-in Model Context Protocol server for exposing agents as MCP tools and exposing any custom tool
|
|
@@ -39,10 +39,14 @@ For LLM-based thread naming with Conversation Thread Support:
|
|
|
39
39
|
pip install "agentkernel[thread]"
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
For the
|
|
42
|
+
For the sandbox providers (the `local_subprocess` provider needs no extra; `ec2_ssm` rides
|
|
43
|
+
the `aws` extra):
|
|
43
44
|
|
|
44
45
|
```bash
|
|
45
|
-
pip install "agentkernel[sandbox-docker]"
|
|
46
|
+
pip install "agentkernel[sandbox-docker]" # docker provider
|
|
47
|
+
pip install "agentkernel[e2b]" # e2b cloud provider
|
|
48
|
+
pip install "agentkernel[daytona]" # daytona cloud provider
|
|
49
|
+
pip install "agentkernel[aws]" # ec2_ssm provider (boto3)
|
|
46
50
|
```
|
|
47
51
|
|
|
48
52
|
**Requirements:**
|
|
@@ -1009,9 +1013,15 @@ Key fields:
|
|
|
1009
1013
|
- **`enabled`** (`AK_SANDBOX__ENABLED`, default `false`) — master switch; inert when off.
|
|
1010
1014
|
- **`agents`** — agent names the tools/prompt attach to; omit for all agents.
|
|
1011
1015
|
- **`type`** (per profile) — `local_subprocess` (no isolation; dev/test), `docker`
|
|
1012
|
-
(container isolation; `sandbox-docker` extra),
|
|
1016
|
+
(container isolation; `sandbox-docker` extra), `e2b` (managed micro-VMs; `e2b` extra),
|
|
1017
|
+
`daytona` (cloud containers; `daytona` extra), `ec2_ssm` (attach to an existing EC2
|
|
1018
|
+
instance via SSM; `aws` extra), or a dotted path to your own `SandboxProvider`.
|
|
1013
1019
|
- **`scope`** — `per_call` (fresh per execution), `per_session` (persists across turns),
|
|
1014
1020
|
`per_runtime` (one shared sandbox per profile).
|
|
1021
|
+
- **`environment`** — `managed` (default; the provider creates and disposes sandboxes) or
|
|
1022
|
+
`attached` (deliberately connect to an existing environment the framework never owns,
|
|
1023
|
+
e.g. an EC2 instance via `ec2_ssm`; requires the provider's `attach_to` and is validated
|
|
1024
|
+
against the provider's lifecycle capabilities at startup).
|
|
1015
1025
|
- **`policy`** — network egress, filesystem paths, cpu/memory, timeout; enforced per provider,
|
|
1016
1026
|
fail-closed under `strict`.
|
|
1017
1027
|
- **`identity.mode`** + **`principal_resolver`** — run code under the agent's or the invoking
|
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agentkernel"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.8.1"
|
|
8
8
|
description = "Agent Kernel - Unified AI Agents Runtime"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12,<3.14"
|
|
@@ -162,8 +162,14 @@ multimodal = [
|
|
|
162
162
|
sandbox-docker = [
|
|
163
163
|
"docker>=7.0.0",
|
|
164
164
|
]
|
|
165
|
-
|
|
166
|
-
|
|
165
|
+
e2b = [
|
|
166
|
+
"e2b-code-interpreter>=2.8.0",
|
|
167
|
+
]
|
|
168
|
+
daytona = [
|
|
169
|
+
# <0.199: from 0.199 the daytona api clients require pydantic>=2.13.4, which conflicts
|
|
170
|
+
# with crewai's pydantic<2.13 pin; 0.198 accepts pydantic>=2.11 and has the same SDK surface.
|
|
171
|
+
"daytona>=0.198.0,<0.199",
|
|
172
|
+
]
|
|
167
173
|
|
|
168
174
|
[project.scripts]
|
|
169
175
|
ak = "agentkernel.cli.ak:main"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import logging
|
|
3
3
|
import readline # Enables line editing and history features for input() in the CLI
|
|
4
|
+
import threading
|
|
4
5
|
|
|
5
6
|
from ..core import AgentService
|
|
6
|
-
from ..core.config import AKConfig
|
|
7
7
|
|
|
8
8
|
ak_cli_logger = logging.getLogger("ak.cli")
|
|
9
9
|
|
|
@@ -47,6 +47,32 @@ class CLI:
|
|
|
47
47
|
self._print(f" {agent.name}")
|
|
48
48
|
self._print()
|
|
49
49
|
|
|
50
|
+
@staticmethod
|
|
51
|
+
async def _ainput(prompt: str) -> str:
|
|
52
|
+
"""
|
|
53
|
+
Reads a line of input without blocking the event loop, so background tasks keep running between turns.
|
|
54
|
+
The reader is a daemon thread, so Ctrl+C exits instead of waiting on a thread parked in `input()`.
|
|
55
|
+
:param prompt: The prompt to display to the user.
|
|
56
|
+
:return: The line entered by the user.
|
|
57
|
+
"""
|
|
58
|
+
loop = asyncio.get_running_loop()
|
|
59
|
+
future: asyncio.Future[str] = loop.create_future()
|
|
60
|
+
|
|
61
|
+
def resolve(setter, value):
|
|
62
|
+
if not future.done():
|
|
63
|
+
setter(value)
|
|
64
|
+
|
|
65
|
+
def read():
|
|
66
|
+
try:
|
|
67
|
+
line = input(prompt)
|
|
68
|
+
except BaseException as e: # noqa: BLE001 - relayed to the awaiting caller
|
|
69
|
+
loop.call_soon_threadsafe(resolve, future.set_exception, e)
|
|
70
|
+
else:
|
|
71
|
+
loop.call_soon_threadsafe(resolve, future.set_result, line)
|
|
72
|
+
|
|
73
|
+
threading.Thread(target=read, daemon=True, name="ak-cli-input").start()
|
|
74
|
+
return await future
|
|
75
|
+
|
|
50
76
|
async def run(self):
|
|
51
77
|
self._print("AgentKernel CLI (type !help for commands or !quit to exit):")
|
|
52
78
|
self._service.select()
|
|
@@ -57,7 +83,7 @@ class CLI:
|
|
|
57
83
|
while True:
|
|
58
84
|
try:
|
|
59
85
|
name = self._service.agent.name if self._service.agent else "none"
|
|
60
|
-
prompt =
|
|
86
|
+
prompt = await self._ainput(f"({name}) >> ")
|
|
61
87
|
if not prompt.strip():
|
|
62
88
|
continue
|
|
63
89
|
if prompt.startswith("!"):
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import contextvars
|
|
3
|
+
import copy
|
|
3
4
|
import logging
|
|
5
|
+
import pickle
|
|
4
6
|
from abc import ABC, abstractmethod
|
|
5
|
-
from collections.abc import AsyncGenerator, Iterator
|
|
7
|
+
from collections.abc import AsyncGenerator, Iterator, Mapping
|
|
6
8
|
from enum import Enum
|
|
7
9
|
from typing import Any, ClassVar, Self, cast
|
|
8
10
|
|
|
@@ -10,6 +12,8 @@ from .hooks import PostHook, PreHook
|
|
|
10
12
|
from .model import AgentReply, AgentRequest
|
|
11
13
|
from .util.key_value_cache import KeyValueCache
|
|
12
14
|
|
|
15
|
+
_log = logging.getLogger("ak.core.runner")
|
|
16
|
+
|
|
13
17
|
|
|
14
18
|
class Session:
|
|
15
19
|
"""
|
|
@@ -39,6 +43,7 @@ class Session:
|
|
|
39
43
|
|
|
40
44
|
VOLATILE_CACHE = "v_cache"
|
|
41
45
|
NON_VOLATILE_CACHE = "nv_cache"
|
|
46
|
+
FRAMEWORK_CONTEXT = "framework_context"
|
|
42
47
|
|
|
43
48
|
current_session: ClassVar[contextvars.ContextVar[Self | None]] = contextvars.ContextVar("current_session", default=None)
|
|
44
49
|
|
|
@@ -157,6 +162,35 @@ class Session:
|
|
|
157
162
|
"""
|
|
158
163
|
return cast(KeyValueCache, self.get(Session.Keys.NON_VOLATILE_CACHE.value))
|
|
159
164
|
|
|
165
|
+
def get_framework_context(self) -> dict | None:
|
|
166
|
+
"""
|
|
167
|
+
Returns the live per-run framework context dict, so hooks can edit it in place.
|
|
168
|
+
Never auto-creates the key: absent means "nothing injected", {} means "injected but empty".
|
|
169
|
+
:return: The stored framework context dict, or None when the key is absent.
|
|
170
|
+
"""
|
|
171
|
+
return self.get(Session.Keys.FRAMEWORK_CONTEXT.value)
|
|
172
|
+
|
|
173
|
+
def set_framework_context(self, context: dict) -> dict:
|
|
174
|
+
"""
|
|
175
|
+
Seeds or replaces the per-run framework context carried across turns.
|
|
176
|
+
:param context: The context dict to store. Must be picklable, since sessions are persisted with pickle.
|
|
177
|
+
:return: The stored context dict.
|
|
178
|
+
:raises TypeError: If context is not a dict.
|
|
179
|
+
"""
|
|
180
|
+
if not isinstance(context, dict):
|
|
181
|
+
raise TypeError(
|
|
182
|
+
f"Session '{self._id}' framework_context must be a dict, got "
|
|
183
|
+
f"{type(context).__name__}. The reserved framework_context key carries a "
|
|
184
|
+
f"per-run context/state dict; wrap the value in a dict before setting it."
|
|
185
|
+
)
|
|
186
|
+
return self.set(Session.Keys.FRAMEWORK_CONTEXT.value, context)
|
|
187
|
+
|
|
188
|
+
def clear_framework_context(self) -> None:
|
|
189
|
+
"""
|
|
190
|
+
Deletes the per-run framework context, so nothing is injected on the next turn.
|
|
191
|
+
"""
|
|
192
|
+
self.delete(Session.Keys.FRAMEWORK_CONTEXT.value)
|
|
193
|
+
|
|
160
194
|
def set(self, key: str, value: Any) -> Any:
|
|
161
195
|
"""
|
|
162
196
|
Sets a session data object for the specified key.
|
|
@@ -220,6 +254,92 @@ class Runner(ABC):
|
|
|
220
254
|
"""
|
|
221
255
|
return self._name
|
|
222
256
|
|
|
257
|
+
def _load_framework_context(self, session: Session | None) -> dict | None:
|
|
258
|
+
"""
|
|
259
|
+
Loads the per-run framework context to inject into this run.
|
|
260
|
+
Returns a deep copy, so a failed run leaves the stored context intact.
|
|
261
|
+
:param session: The session to read the framework context from, or None.
|
|
262
|
+
:return: A deep copy of the stored dict, or None when nothing is stored.
|
|
263
|
+
:raises TypeError: If the stored value is not a dict.
|
|
264
|
+
"""
|
|
265
|
+
if session is None:
|
|
266
|
+
return None
|
|
267
|
+
stored = session.get_framework_context()
|
|
268
|
+
if stored is None:
|
|
269
|
+
return None
|
|
270
|
+
if not isinstance(stored, dict):
|
|
271
|
+
raise TypeError(
|
|
272
|
+
f"Session '{session.id}' framework_context must be a dict, got "
|
|
273
|
+
f"{type(stored).__name__}. The reserved framework_context key carries a "
|
|
274
|
+
f"per-run context/state dict; wrap the value in a dict before setting it."
|
|
275
|
+
)
|
|
276
|
+
return copy.deepcopy(stored)
|
|
277
|
+
|
|
278
|
+
def _store_framework_context(self, session: Session | None, incoming: dict | None, produced: Mapping[str, Any] | None) -> None:
|
|
279
|
+
"""
|
|
280
|
+
Merges the framework's post-run state over the context loaded this turn and stores the result.
|
|
281
|
+
Keys the framework touched win; untouched caller keys are preserved. No-op when nothing was loaded.
|
|
282
|
+
:param session: The session to write the merged context back to, or None.
|
|
283
|
+
:param incoming: The context loaded this turn, or None when nothing was stored.
|
|
284
|
+
:param produced: The framework's post-run state, or None.
|
|
285
|
+
"""
|
|
286
|
+
if session is None or incoming is None:
|
|
287
|
+
return
|
|
288
|
+
merged = dict(incoming)
|
|
289
|
+
if produced:
|
|
290
|
+
merged.update(produced)
|
|
291
|
+
self._ensure_framework_context_picklable(session, merged)
|
|
292
|
+
session.set_framework_context(merged)
|
|
293
|
+
|
|
294
|
+
@staticmethod
|
|
295
|
+
def _not_picklable(value: Any) -> bool:
|
|
296
|
+
"""
|
|
297
|
+
Checks whether the given value can be pickled.
|
|
298
|
+
:param value: The value to test.
|
|
299
|
+
:return: True if the value cannot be pickled.
|
|
300
|
+
"""
|
|
301
|
+
try:
|
|
302
|
+
pickle.dumps(value)
|
|
303
|
+
return False
|
|
304
|
+
except Exception:
|
|
305
|
+
return True
|
|
306
|
+
|
|
307
|
+
@classmethod
|
|
308
|
+
def _ensure_framework_context_picklable(cls, session: Session, ctx: Mapping[str, Any]) -> None:
|
|
309
|
+
"""
|
|
310
|
+
Fails fast if the context cannot be pickled, before it can break the session store.
|
|
311
|
+
:param session: The session whose id is named in the error.
|
|
312
|
+
:param ctx: The framework context to validate.
|
|
313
|
+
:raises TypeError: If any value in ctx is not pickle-serializable.
|
|
314
|
+
"""
|
|
315
|
+
try:
|
|
316
|
+
pickle.dumps(ctx)
|
|
317
|
+
except Exception as exc:
|
|
318
|
+
offender = next(
|
|
319
|
+
(f"{k!r} ({type(v).__name__})" for k, v in ctx.items() if cls._not_picklable(v)),
|
|
320
|
+
"<unknown key>",
|
|
321
|
+
)
|
|
322
|
+
raise TypeError(
|
|
323
|
+
f"Session '{session.id}' framework_context is not picklable; "
|
|
324
|
+
f"offending entry: {offender}. framework_context values must be "
|
|
325
|
+
f"pickle-serializable so the session can be persisted."
|
|
326
|
+
) from exc
|
|
327
|
+
|
|
328
|
+
@staticmethod
|
|
329
|
+
def _log_framework_context_stream_failure(session: Session | None, error: Exception) -> None:
|
|
330
|
+
"""
|
|
331
|
+
Logs a framework context write-back failure at the end of a streamed run instead of raising it.
|
|
332
|
+
Raising here would surface as a transport error and skip the turn's session store.
|
|
333
|
+
:param session: The session whose write-back failed.
|
|
334
|
+
:param error: The exception raised while producing or storing the context.
|
|
335
|
+
"""
|
|
336
|
+
session_id = session.id if session is not None else "<none>"
|
|
337
|
+
_log.error(
|
|
338
|
+
f"Session '{session_id}': framework_context write-back was skipped at the end of a "
|
|
339
|
+
f"streamed run; the previously stored context is left intact. Error: {error}",
|
|
340
|
+
exc_info=error,
|
|
341
|
+
)
|
|
342
|
+
|
|
223
343
|
@abstractmethod
|
|
224
344
|
async def run(self, agent: Any, session: Session, requests: list[AgentRequest]) -> AgentReply:
|
|
225
345
|
"""
|
|
@@ -351,3 +471,16 @@ class Agent(ABC):
|
|
|
351
471
|
|
|
352
472
|
for tool in SystemToolFactory.get_all(self.name):
|
|
353
473
|
self.attach_tool(tool.func)
|
|
474
|
+
|
|
475
|
+
@staticmethod
|
|
476
|
+
def _append_tools(agent: Any, wrapped: list[Any]) -> None:
|
|
477
|
+
"""
|
|
478
|
+
Appends already-wrapped tools to a framework agent's list-based `tools` attribute, skipping duplicates.
|
|
479
|
+
:param agent: The framework-native agent holding the `tools` attribute.
|
|
480
|
+
:param wrapped: The wrapped tools to attach.
|
|
481
|
+
"""
|
|
482
|
+
for w in wrapped:
|
|
483
|
+
if not hasattr(agent, "tools") or agent.tools is None:
|
|
484
|
+
agent.tools = []
|
|
485
|
+
if w not in agent.tools:
|
|
486
|
+
agent.tools.append(w)
|
|
@@ -427,6 +427,22 @@ class _SandboxE2BConfig(BaseModel):
|
|
|
427
427
|
class _SandboxDaytonaConfig(BaseModel):
|
|
428
428
|
api_key_env: str = Field(default="DAYTONA_API_KEY", description="Name of the environment variable holding the Daytona API key")
|
|
429
429
|
target: Optional[str] = Field(default=None, description="Daytona target/region; None uses the SDK default")
|
|
430
|
+
image: Optional[str] = Field(
|
|
431
|
+
default=None,
|
|
432
|
+
description="Container image for the sandbox (e.g. 'python:3.12-slim' or a registry image). Mutually exclusive with 'snapshot'; when neither is set Daytona uses its default snapshot.",
|
|
433
|
+
)
|
|
434
|
+
snapshot: Optional[str] = Field(
|
|
435
|
+
default=None,
|
|
436
|
+
description="Named Daytona snapshot to launch from. Mutually exclusive with 'image'; when neither is set Daytona uses its default snapshot.",
|
|
437
|
+
)
|
|
438
|
+
env_vars: dict[str, str] = Field(default_factory=dict, description="Environment variables set inside the sandbox")
|
|
439
|
+
|
|
440
|
+
@model_validator(mode="after")
|
|
441
|
+
def _image_snapshot_exclusive(self) -> "_SandboxDaytonaConfig":
|
|
442
|
+
"""A sandbox launches from exactly one base — reject configuring both."""
|
|
443
|
+
if self.image and self.snapshot:
|
|
444
|
+
raise ValueError("daytona config sets both 'image' and 'snapshot'; they are mutually exclusive — pick one")
|
|
445
|
+
return self
|
|
430
446
|
|
|
431
447
|
|
|
432
448
|
class _SandboxBedrockAgentCoreConfig(BaseModel):
|
|
@@ -446,10 +462,10 @@ class _SandboxEC2SSMConfig(BaseModel):
|
|
|
446
462
|
attach_to: Optional[str] = Field(default=None, description="EC2 instance id to run commands against via SSM (attach-only)")
|
|
447
463
|
|
|
448
464
|
|
|
449
|
-
class
|
|
465
|
+
class _ExecutionBrokerConfig(BaseModel):
|
|
450
466
|
flavor: str = Field(
|
|
451
467
|
default="thread",
|
|
452
|
-
description="Broker flavor: 'embedded' | 'thread' (in-process, available now) | a dotted path to
|
|
468
|
+
description="Broker flavor: 'embedded' | 'thread' (in-process, available now) | a dotted path to an ExecutionBroker subclass. The AWS 'sqs' flavor is planned in a later iteration.",
|
|
453
469
|
)
|
|
454
470
|
wait_timeout: float = Field(default=60.0, description="Max seconds a synchronous wait blocks before promotion to a task (0 = always promote)")
|
|
455
471
|
inline_payload_max_bytes: int = Field(
|
|
@@ -478,6 +494,12 @@ class _SandboxProfileConfig(BaseModel):
|
|
|
478
494
|
pattern="^(per_call|per_session|per_runtime)$",
|
|
479
495
|
description="Sandbox lifetime: 'per_call' (new per execution), 'per_session' (per AK session), or 'per_runtime' (shared)",
|
|
480
496
|
)
|
|
497
|
+
environment: str = Field(
|
|
498
|
+
default="managed",
|
|
499
|
+
pattern="^(managed|attached)$",
|
|
500
|
+
description="Environment lifecycle: 'managed' (the provider creates and disposes sandboxes) or 'attached' "
|
|
501
|
+
"(deliberately connect to an existing environment the framework never owns; requires the provider's attach_to)",
|
|
502
|
+
)
|
|
481
503
|
idle_timeout: int = Field(default=1800, description="Seconds of inactivity before a sandbox session is closed on next touch")
|
|
482
504
|
identity: _SandboxIdentityConfig = Field(default_factory=_SandboxIdentityConfig, description="Execution identity configuration")
|
|
483
505
|
policy: _SandboxPolicyConfig = Field(
|
|
@@ -508,7 +530,7 @@ class _SandboxConfig(BaseModel):
|
|
|
508
530
|
default=None, description="Dotted path to a PrincipalResolver mapping the session/agent to a SandboxPrincipal"
|
|
509
531
|
)
|
|
510
532
|
tool_output_max_chars: int = Field(default=8000, description="Maximum characters of tool output returned to the agent before truncation")
|
|
511
|
-
broker:
|
|
533
|
+
broker: _ExecutionBrokerConfig = Field(default_factory=_ExecutionBrokerConfig, description="Sandbox broker configuration")
|
|
512
534
|
profiles: dict[str, _SandboxProfileConfig] = Field(
|
|
513
535
|
default_factory=dict, description="Named workload profiles, each selecting a provider and its policy/identity"
|
|
514
536
|
)
|
|
@@ -522,6 +544,11 @@ class _SandboxConfig(BaseModel):
|
|
|
522
544
|
pattern="^(per_call|per_session|per_runtime)$",
|
|
523
545
|
description="Single-backend sugar: scope for the synthesized default profile",
|
|
524
546
|
)
|
|
547
|
+
environment: Optional[str] = Field(
|
|
548
|
+
default=None,
|
|
549
|
+
pattern="^(managed|attached)$",
|
|
550
|
+
description="Single-backend sugar: environment lifecycle for the synthesized default profile",
|
|
551
|
+
)
|
|
525
552
|
local_subprocess: Optional[_SandboxLocalSubprocessConfig] = Field(
|
|
526
553
|
default=None, description="Single-backend sugar: 'local_subprocess' provider configuration"
|
|
527
554
|
)
|
|
@@ -554,6 +581,8 @@ class _SandboxConfig(BaseModel):
|
|
|
554
581
|
}
|
|
555
582
|
if self.scope is not None:
|
|
556
583
|
profile_kwargs["scope"] = self.scope
|
|
584
|
+
if self.environment is not None:
|
|
585
|
+
profile_kwargs["environment"] = self.environment
|
|
557
586
|
self.profiles = {self.default_profile: _SandboxProfileConfig(**profile_kwargs)}
|
|
558
587
|
return self
|
|
559
588
|
|
|
@@ -41,6 +41,8 @@ class AzureFunctions:
|
|
|
41
41
|
|
|
42
42
|
if isinstance(body, dict) and body.get("body") is not None:
|
|
43
43
|
body = BaseRunRequest.model_validate(body["body"])
|
|
44
|
+
elif isinstance(body, dict) and body:
|
|
45
|
+
body = BaseRunRequest.model_validate(body)
|
|
44
46
|
else:
|
|
45
47
|
raise ValueError("Invalid request, request body cannot be empty or null")
|
|
46
48
|
|