databricks-agentbricks 0.3.0__tar.gz → 0.4.0__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.
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/PKG-INFO +159 -27
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/README.md +156 -25
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/pyproject.toml +3 -2
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/agent_project.py +24 -2
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/app_resources.py +198 -1
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/app.py +2 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/app_auth.py +11 -8
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/deploy.py +60 -10
- databricks_agentbricks-0.4.0/src/databricks_agentbricks/cli/doctor.py +1127 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/endpoint.py +14 -9
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/endpoint_examples.py +2 -2
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/help.py +43 -1
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/memory.py +4 -0
- databricks_agentbricks-0.4.0/src/databricks_agentbricks/cli/pipeline.py +200 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/tools.py +27 -2
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-bricks-migrate/SKILL.md +9 -6
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/AGENTKIT_CONTRACT.md +11 -1
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/README.md +12 -9
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/agent/agent.py +3 -1
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/pyproject.toml +1 -1
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/runtime/adapter.py +24 -14
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/tests/test_agent.py +21 -4
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/AGENTKIT_CONTRACT.md +7 -1
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/AGENTS.md +7 -5
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/README.md +12 -9
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/pyproject.toml +1 -1
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/runtime/adapter.py +8 -11
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/tests/test_agent.py +10 -5
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-langgraph/pyproject.toml +1 -1
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-openai/pyproject.toml +1 -1
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-langgraph/CHAT_APP.md +3 -3
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-langgraph/runtime/ui.py +2 -4
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-langgraph/tests/test_demo_ui.py +41 -3
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-langgraph/ui/app.js +18 -13
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-openai/CHAT_APP.md +3 -3
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-openai/runtime/ui.py +2 -4
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-openai/tests/test_demo_ui.py +41 -3
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-openai/ui/app.js +17 -12
- databricks_agentbricks-0.4.0/src/databricks_agentbricks/tool_access.py +364 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/_api_client.py +78 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/langgraph/mcp.py +2 -2
- databricks_agentbricks-0.4.0/src/databricks_agentkit/langgraph/responses.py +40 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/openai/mcp.py +9 -9
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/ARCHITECTURE.md +20 -3
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/README.md +9 -4
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/app.py +46 -21
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/auth.py +18 -5
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/durability/execution.py +42 -14
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/durability/lakebase_runtime_store.py +222 -43
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/execution.py +49 -14
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/runtime.py +39 -13
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/store.py +113 -18
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/tool_manifest.py +106 -9
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/types.py +9 -3
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/.gitignore +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/NOTICE +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/_group.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/auth.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/dev.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/endpoint_output.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/endpoint_request.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/endpoint_transport.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/init.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/mcp.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/sandbox.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/sessions.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/cli/tracing.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/databricks_cli.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/errors.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/lakebase_runtime_store.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/legacy_lakebase_runtime_store.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/project_config.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/project_types.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/py.typed +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/render.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/.env.example +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/.gitignore +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/AGENTS.md +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/CLAUDE.md +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/agent/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/agent/mcps.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/agent/tools/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/agent/tools/sample_tool.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/agent/tools/send_message.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/app.yaml +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/runtime/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/runtime/main.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/tests/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/tests/test_runtime.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-langgraph/tests/test_workspace.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/.env.example +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/.gitignore +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/CLAUDE.md +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/agent/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/agent/agent.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/agent/mcps.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/agent/tools/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/agent/tools/sample_tool.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/agent/tools/send_message.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/app.yaml +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/runtime/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/runtime/main.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/tests/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/tests/test_runtime.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/agent-openai/tests/test_workspace.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-langgraph/.env.example +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-langgraph/.gitignore +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-langgraph/README.md +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-langgraph/agent/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-langgraph/agent/agent.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-langgraph/app.yaml +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-langgraph/runtime/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-langgraph/runtime/main.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-langgraph/tests/test_runtime.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-openai/.env.example +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-openai/.gitignore +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-openai/README.md +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-openai/agent/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-openai/agent/agent.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-openai/app.yaml +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-openai/runtime/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-openai/runtime/main.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/custom-agent-openai/tests/test_runtime.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/sandbox_mcp.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/sandbox_mcp_langgraph.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-langgraph/runtime/main.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-langgraph/ui/agentbricks-mark.png +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-langgraph/ui/index.html +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-langgraph/ui/styles.css +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-openai/runtime/main.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-openai/ui/agentbricks-mark.png +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-openai/ui/index.html +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/templates/ui/agent-openai/ui/styles.css +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/theme.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentbricks/trace_tables.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/_pagination.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/client.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/langgraph/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/langgraph/genie.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/langgraph/memory.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/langgraph/session_store.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/memory_store.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/models.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/openai/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/openai/genie.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/openai/memory.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/openai/sessions.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/py.typed +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/durability/__init__.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/durability/heartbeat.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/durability/recovery.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/durability/store.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/genie.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/mcp_auth.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/model_services.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/session_store_client.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/tracing.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/runtime/workspace.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/session_store.py +0 -0
- {databricks_agentbricks-0.3.0 → databricks_agentbricks-0.4.0}/src/databricks_agentkit/timefmt.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: databricks-agentbricks
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Agent Bricks CLI and AgentKit SDK for custom agents on Databricks
|
|
5
5
|
Author-email: Databricks <agent-feedback@databricks.com>
|
|
6
6
|
License-File: NOTICE
|
|
@@ -10,6 +10,7 @@ Requires-Dist: databricks-ai-bridge[memory]>=0.22.0
|
|
|
10
10
|
Requires-Dist: databricks-sdk>=0.124.0
|
|
11
11
|
Requires-Dist: fastapi>=0.129.0
|
|
12
12
|
Requires-Dist: mlflow-skinny>=3.10.1
|
|
13
|
+
Requires-Dist: packaging>=23.2
|
|
13
14
|
Requires-Dist: psycopg[binary]>=3.1
|
|
14
15
|
Requires-Dist: pyyaml>=6.0
|
|
15
16
|
Requires-Dist: rich>=13.7
|
|
@@ -20,7 +21,7 @@ Requires-Dist: uvicorn>=0.20.0
|
|
|
20
21
|
Provides-Extra: langgraph
|
|
21
22
|
Requires-Dist: databricks-agents>=1.9.3; extra == 'langgraph'
|
|
22
23
|
Requires-Dist: databricks-langchain>=0.17.0; extra == 'langgraph'
|
|
23
|
-
Requires-Dist: langchain-mcp-adapters>=0.
|
|
24
|
+
Requires-Dist: langchain-mcp-adapters>=0.3.0; extra == 'langgraph'
|
|
24
25
|
Requires-Dist: langchain>=1.0.0; extra == 'langgraph'
|
|
25
26
|
Requires-Dist: langgraph>=1.1.0; extra == 'langgraph'
|
|
26
27
|
Requires-Dist: mlflow>=3.10.1; extra == 'langgraph'
|
|
@@ -162,9 +163,9 @@ agentbricks deploy my-agent # deploy to Databricks
|
|
|
162
163
|
local runtime so local behavior matches a deployment.
|
|
163
164
|
|
|
164
165
|
`agentbricks deploy my-agent` deploys a Databricks App named `agent-bricks-my-agent`, provisions the
|
|
165
|
-
stores declared in `agent.toml`, and grants the app's service principal access to
|
|
166
|
-
|
|
167
|
-
print an app's URL and status.
|
|
166
|
+
stores declared in `agent.toml`, and grants the app's service principal access to the stores and
|
|
167
|
+
direct App-auth tool resources declared there. Use `agentbricks deployments list` to find deployed
|
|
168
|
+
apps, and `agentbricks deployments get agent-bricks-my-agent` to print an app's URL and status.
|
|
168
169
|
|
|
169
170
|
`agentbricks init` declares default memory and session stores in `agent.toml`, so the deployed agent has
|
|
170
171
|
long-term memory and durable conversation history. It creates `<name>-<6-letter-token>-memory` and
|
|
@@ -263,12 +264,16 @@ Each managed run is an **invocation**. Send a client-generated UUID `id` and you
|
|
|
263
264
|
```json
|
|
264
265
|
{
|
|
265
266
|
"id": "550e8400-e29b-41d4-a716-446655440000",
|
|
267
|
+
"session_id": "support-case-123",
|
|
266
268
|
"input": {"messages": [{"role": "user", "content": "Hello"}]},
|
|
267
269
|
"background": true,
|
|
268
270
|
"stream": true
|
|
269
271
|
}
|
|
270
272
|
```
|
|
271
273
|
|
|
274
|
+
The optional top-level `session_id` groups invocations into one application session. It is distinct
|
|
275
|
+
from the invocation `id` and from the `X-Routing-Key` sticky-routing header.
|
|
276
|
+
|
|
272
277
|
| Endpoint | Behavior |
|
|
273
278
|
| --- | --- |
|
|
274
279
|
| `POST /api/invocations` | Defaults to synchronous execution: `200` with the result under `output`. `stream: true` returns SSE events. `background: true` returns `202` with a status URL; adding `stream: true` also includes an events URL. |
|
|
@@ -469,6 +474,7 @@ agentbricks [-p <profile>] [-o text|json]
|
|
|
469
474
|
[--disable-chat-app]
|
|
470
475
|
[--memory-store NAME] [--session-store NAME]
|
|
471
476
|
[--existing] [--profile P] [directory]
|
|
477
|
+
doctor [directory]
|
|
472
478
|
dev [--source PATH] [--prepare-environment] [--app-port PORT]
|
|
473
479
|
memory
|
|
474
480
|
bind STORE [--source PATH]
|
|
@@ -485,7 +491,8 @@ agentbricks [-p <profile>] [-o text|json]
|
|
|
485
491
|
unbind [--source PATH]
|
|
486
492
|
list | get [--experiment-name NAME | --experiment-id ID] [--source PATH]
|
|
487
493
|
tools
|
|
488
|
-
add sandbox --scope SCOPE [--scope SCOPE ...]
|
|
494
|
+
add sandbox --scope SCOPE [--scope SCOPE ...]
|
|
495
|
+
[--no-databricks-access-token-included] [--source PATH]
|
|
489
496
|
add mcp SERVICE [--name NAME] [--source PATH]
|
|
490
497
|
add uc-function FUNCTION [--name NAME] [--source PATH]
|
|
491
498
|
add genie-one [--name NAME] [--auth user|app] [--source PATH]
|
|
@@ -508,6 +515,26 @@ agentbricks init --framework langgraph --existing .
|
|
|
508
515
|
agentbricks init --framework openai --existing .
|
|
509
516
|
```
|
|
510
517
|
|
|
518
|
+
Before or after the conversion, inspect its progress without changing the repository or contacting
|
|
519
|
+
Databricks:
|
|
520
|
+
|
|
521
|
+
```sh
|
|
522
|
+
agentbricks doctor .
|
|
523
|
+
agentbricks -o json doctor .
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
Doctor exits 0 only when the project has a valid Agent Bricks manifest and matching project
|
|
527
|
+
metadata, uses the Agent Bricks server, declares the framework-appropriate `databricks-agentbricks`
|
|
528
|
+
extra and a non-empty `app.yaml` command, constructs `DurableAgentServer` with an `invoke` hook, and
|
|
529
|
+
calls a recognized adapter for the selected framework in production Python source. Test, example, and
|
|
530
|
+
old/stale directories do not count as source evidence. A failed report is the normal result for a
|
|
531
|
+
project that still needs migration; run
|
|
532
|
+
`agentbricks init --framework <framework_name> --existing <directory>` with the appropriate framework
|
|
533
|
+
to prepare the migration instructions. Doctor never imports or executes the target's source, and a
|
|
534
|
+
bounded source scan that exceeds a limit is reported while the evidence it already found still counts.
|
|
535
|
+
Its findings are static repository evidence, not proof that the configured startup command executes
|
|
536
|
+
the files it finds.
|
|
537
|
+
|
|
511
538
|
This writes `agent-bricks-migrate/` containing a skill, a prompt to paste into your coding agent,
|
|
512
539
|
`references/migration.json`, and a reference project generated from the templates bundled with the
|
|
513
540
|
installed CLI. The bundle sits outside any single agent's configuration directory; `.claude/skills/`
|
|
@@ -544,11 +571,11 @@ server.
|
|
|
544
571
|
```sh
|
|
545
572
|
agentbricks --profile <profile> endpoint invoke agent-bricks-my-agent \
|
|
546
573
|
--path /api/invocations \
|
|
547
|
-
--json '{"id":"00000000-0000-4000-8000-000000000001","input":[{"role":"user","content":"Hello"}]}'
|
|
574
|
+
--json '{"id":"00000000-0000-4000-8000-000000000001","session_id":"support-case-123","input":[{"role":"user","content":"Hello"}]}'
|
|
548
575
|
|
|
549
576
|
agentbricks endpoint invoke --url http://localhost:8000 \
|
|
550
577
|
--path /api/invocations \
|
|
551
|
-
--json '{"id":"00000000-0000-4000-8000-000000000001","input":[{"role":"user","content":"Hello"}]}'
|
|
578
|
+
--json '{"id":"00000000-0000-4000-8000-000000000001","session_id":"support-case-123","input":[{"role":"user","content":"Hello"}]}'
|
|
552
579
|
```
|
|
553
580
|
|
|
554
581
|
The JSON body remains explicit even for generated agents. For example, managed runtime agents require
|
|
@@ -556,21 +583,26 @@ a client-generated invocation ID, and streaming servers require their own stream
|
|
|
556
583
|
`--sse` so the CLI consumes the response as Server-Sent Events.
|
|
557
584
|
|
|
558
585
|
```sh
|
|
586
|
+
SESSION_ID=$(uuidgen)
|
|
559
587
|
INVOCATION_ID=$(uuidgen)
|
|
560
588
|
agentbricks --profile <profile> endpoint invoke agent-bricks-my-agent \
|
|
561
589
|
--path /api/invocations \
|
|
562
|
-
--
|
|
590
|
+
--routing-key "$SESSION_ID" \
|
|
591
|
+
--json "{\"id\":\"$INVOCATION_ID\",\"session_id\":\"$SESSION_ID\",\"input\":[{\"role\":\"user\",\"content\":\"Run the report\"}]}"
|
|
563
592
|
|
|
593
|
+
INVOCATION_ID=$(uuidgen)
|
|
564
594
|
agentbricks --profile <profile> endpoint invoke agent-bricks-my-agent \
|
|
565
595
|
--path /api/invocations \
|
|
596
|
+
--routing-key "$SESSION_ID" \
|
|
566
597
|
--sse \
|
|
567
|
-
--json "{\"id\":\"$INVOCATION_ID\",\"input\":[{\"role\":\"user\",\"content\":\"Hello\"}],\"stream\":true}"
|
|
598
|
+
--json "{\"id\":\"$INVOCATION_ID\",\"session_id\":\"$SESSION_ID\",\"input\":[{\"role\":\"user\",\"content\":\"Hello\"}],\"stream\":true}"
|
|
568
599
|
```
|
|
569
600
|
|
|
570
|
-
`--
|
|
571
|
-
|
|
572
|
-
session
|
|
573
|
-
|
|
601
|
+
`--routing-key` keeps a session on one app replica (sticky routing): set it to your stable session id
|
|
602
|
+
and it is sent verbatim in the `X-Routing-Key` request header. It is routing only and is never used
|
|
603
|
+
as the session id - put the session id at the top level of the `--json` body for session continuity. This
|
|
604
|
+
also works with a direct App URL and with the generated runtime on localhost. OAuth and session headers are managed by
|
|
605
|
+
the runtime; arbitrary custom request headers are intentionally not exposed by this command.
|
|
574
606
|
|
|
575
607
|
## Command help
|
|
576
608
|
|
|
@@ -620,9 +652,79 @@ Managed-tool add commands write the selected identity to `agent.toml`; inspect t
|
|
|
620
652
|
review configured bindings. Missing legacy auth continues to mean App identity at runtime; it is
|
|
621
653
|
never silently upgraded to user identity.
|
|
622
654
|
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
655
|
+
### Automatic App-identity access on deploy
|
|
656
|
+
|
|
657
|
+
`agentbricks deploy` reconciles least-privilege access for resources explicitly declared by App/default
|
|
658
|
+
identity tool bindings. It skips every `auth = "user"` binding because those calls use the request
|
|
659
|
+
user's permissions instead of the App service principal.
|
|
660
|
+
|
|
661
|
+
| Explicit `agent.toml` resource | Automatic App service-principal access |
|
|
662
|
+
| --- | --- |
|
|
663
|
+
| UC function | Apps `uc_securable`: `FUNCTION` / `EXECUTE` |
|
|
664
|
+
| Genie Agent space | Apps `genie_space`: `CAN_RUN` |
|
|
665
|
+
| Sandbox table scope | Apps `uc_securable`: `TABLE` / `SELECT` or `MODIFY` |
|
|
666
|
+
| Sandbox volume scope | Apps `uc_securable`: `VOLUME` / `READ_VOLUME` or `WRITE_VOLUME` |
|
|
667
|
+
| Sandbox Workspace path | Workspace ACL: `CAN_READ` or `CAN_EDIT` |
|
|
668
|
+
| External MCP service | Unity Catalog: effective `EXECUTE` plus `USE_SCHEMA` and `USE_CATALOG` on its named parents |
|
|
669
|
+
| Built-in `system.ai` MCP service, including Sandbox and Genie One | Platform-managed access defaults; Agent Bricks does not mutate system securables |
|
|
670
|
+
|
|
671
|
+
Native Genie One has no resource identifier in its binding, so it does not add a resource-specific
|
|
672
|
+
grant. Use a Genie Agent binding when the App identity should be scoped to one explicit Genie Space.
|
|
673
|
+
|
|
674
|
+
Apps-backed tool resources are named deterministically and reconciled to the manifest on each
|
|
675
|
+
deploy: removing a binding removes that Agent Bricks-owned Apps resource while preserving Runtime
|
|
676
|
+
Store, tracing, and user-owned resources. MCP and Workspace ACL grants are additive in this release
|
|
677
|
+
because their permission APIs do not expose trustworthy Agent Bricks ownership metadata; removing
|
|
678
|
+
those bindings does not revoke an independently valid grant.
|
|
679
|
+
|
|
680
|
+
Only direct resources are automatic. Agent Bricks never discovers or grants tables and warehouses
|
|
681
|
+
used by a Genie Space, objects called by a UC function, or resources wrapped by an MCP service.
|
|
682
|
+
Grant those transitive dependencies manually when the called service uses the App identity. If any
|
|
683
|
+
required direct grant cannot be read, applied, or verified, deploy stops before source upload and
|
|
684
|
+
leaves the currently deployed version untouched.
|
|
685
|
+
|
|
686
|
+
`DurableAgentServer` derives its request-auth policy directly from the managed tool bindings in
|
|
687
|
+
`agent.toml`. Projects do not maintain a separate request-auth contract marker: a managed tool with
|
|
688
|
+
`auth = "user"` requires a transient request-user credential. Code-first tools can declare any
|
|
689
|
+
additional API scopes that Agent Bricks cannot infer from Python:
|
|
690
|
+
|
|
691
|
+
```toml
|
|
692
|
+
[auth.user]
|
|
693
|
+
required = true
|
|
694
|
+
additional_api_scopes = ["sql"]
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
`additional_api_scopes` is additive: deploy unions it with scopes inferred from managed bindings,
|
|
698
|
+
deduplicates the result, and preserves unrelated scopes already configured on the App. Scope names
|
|
699
|
+
are not restricted to a client-side allowlist; Databricks Apps validates whether a requested scope
|
|
700
|
+
is supported. Entries must be non-empty strings without surrounding whitespace or control
|
|
701
|
+
characters, and a non-empty list requires `required = true`. This request-auth contract is supported
|
|
702
|
+
only with `[agent].server = "agentbricks"`.
|
|
703
|
+
|
|
704
|
+
Generated framework adapters pass the request-bound resolver to agent construction. A code-first
|
|
705
|
+
tool should obtain its user client from that resolver inside the active invocation rather than
|
|
706
|
+
creating or persisting a user credential:
|
|
707
|
+
|
|
708
|
+
```python
|
|
709
|
+
from langchain_core.tools import tool
|
|
710
|
+
|
|
711
|
+
|
|
712
|
+
def sql_tools(workspace_client_for):
|
|
713
|
+
@tool
|
|
714
|
+
def run_statement(statement: str) -> str:
|
|
715
|
+
client = workspace_client_for("user")
|
|
716
|
+
response = client.statement_execution.execute_statement(
|
|
717
|
+
warehouse_id="...",
|
|
718
|
+
statement=statement,
|
|
719
|
+
)
|
|
720
|
+
return str(response.result)
|
|
721
|
+
|
|
722
|
+
return [run_statement]
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
The resolver is request-bound and closes after the attempt. Agent Bricks does not inject it into
|
|
726
|
+
arbitrary auto-discovered decorated tools; build those tools from the resolver passed to the
|
|
727
|
+
generated request-aware agent function.
|
|
626
728
|
|
|
627
729
|
Request-user invocations use the same synchronous, streaming, background, status, event-replay,
|
|
628
730
|
and idempotency APIs as app-auth invocations. The Runtime Store records only token-free request
|
|
@@ -638,13 +740,18 @@ upgrade copied Python adapter code. Outdated adapters fail closed rather than si
|
|
|
638
740
|
identity. App-only legacy projects and generic bring-your-own source directories keep the existing
|
|
639
741
|
path.
|
|
640
742
|
|
|
641
|
-
Deploy derives Apps user scopes from explicit `auth = "user"` bindings
|
|
743
|
+
Deploy derives Apps user scopes from explicit `auth = "user"` bindings and unions them with
|
|
744
|
+
`[auth.user].additional_api_scopes`:
|
|
642
745
|
|
|
643
746
|
| Binding | Requested Apps scopes |
|
|
644
747
|
| --- | --- |
|
|
645
748
|
| Managed MCP (governed ingress) | `ai-gateway` |
|
|
749
|
+
| `system.ai.dbsql` | `ai-gateway`, `sql` |
|
|
646
750
|
| `system.ai.genie_one_mcp` | `ai-gateway`, `genie` |
|
|
751
|
+
| Sandbox with a Volume downscope | `ai-gateway`, `files` |
|
|
647
752
|
| First-class Genie One or Genie Agent | `genie` |
|
|
753
|
+
| Sandbox with token injection | `ai-gateway`, `workspace.workspace` |
|
|
754
|
+
| Sandbox with token injection disabled | `ai-gateway` |
|
|
648
755
|
|
|
649
756
|
For example, bind Genie tools in a current project with `server = "agentbricks"`:
|
|
650
757
|
|
|
@@ -653,7 +760,8 @@ agentbricks tools add mcp system.ai.genie_one_mcp --auth user
|
|
|
653
760
|
agentbricks tools add genie-agent SPACE_ID --auth user
|
|
654
761
|
```
|
|
655
762
|
|
|
656
|
-
Mixed bindings request the union. App-auth and legacy bindings add no user
|
|
763
|
+
Mixed bindings and explicit additions request the union. App-auth and legacy bindings add no user
|
|
764
|
+
scopes. These are
|
|
657
765
|
explicit service-consent scopes, not a claim that gateway access alone authorizes the downstream
|
|
658
766
|
resource. OAuth consent does not grant Unity Catalog privileges: the user still needs access to
|
|
659
767
|
the configured Genie Space and its underlying data.
|
|
@@ -670,10 +778,15 @@ The `system.ai.dbsql` managed MCP additionally requests the Apps `sql` user scop
|
|
|
670
778
|
API consent, not `sql:restricted-query`; read-only enforcement remains the service policy plus the
|
|
671
779
|
requesting user's Unity Catalog grants. DBSQL does not use Databricks Connect.
|
|
672
780
|
|
|
673
|
-
|
|
781
|
+
When a user-auth sandbox has `databricks_access_token_included = true`, it requests the Apps
|
|
782
|
+
`workspace.workspace` user scope so the injected credential can call workspace APIs. A sandbox
|
|
783
|
+
binding with a Volume downscope additionally requests the Apps `files` user scope.
|
|
674
784
|
OAuth consent does not grant Volume access: the requesting user still needs the corresponding
|
|
675
|
-
Unity Catalog privileges, and the sandbox downscope remains authoritative.
|
|
676
|
-
|
|
785
|
+
Unity Catalog privileges, and the sandbox downscope remains authoritative. A sandbox binding with
|
|
786
|
+
token injection disabled does not request `workspace.workspace`; its other resource-derived scopes
|
|
787
|
+
still apply. Databricks Apps rejects the legacy bare `workspace` scope, so Agent Bricks requests
|
|
788
|
+
`workspace.workspace`. These scopes are requested only for `auth = "user"`; `auth = "app"` uses
|
|
789
|
+
the App service principal's permissions instead.
|
|
677
790
|
|
|
678
791
|
Review the target App's scopes and coordinate with its other owners before allowing the update. Once
|
|
679
792
|
those scopes are present, later deploys do not need the flag. The CLI preserves unrelated scopes,
|
|
@@ -772,7 +885,24 @@ do not generate or patch Python tool code, and do not alter the manifest's `[[to
|
|
|
772
885
|
Sandbox scopes default to read-only access. Repeat `--scope` to allow more than one resource, use
|
|
773
886
|
`volume:` or `workspace:` for those resource types, and use `--permission read_write` only when the
|
|
774
887
|
agent needs writes. Every sandbox call carries this fixed downscope in MCP `_meta`, outside the tool
|
|
775
|
-
arguments controlled by the model.
|
|
888
|
+
arguments controlled by the model. New sandbox bindings also expose the selected Databricks
|
|
889
|
+
credential to sandbox code by default:
|
|
890
|
+
|
|
891
|
+
```toml
|
|
892
|
+
[[tools]]
|
|
893
|
+
id = "sandbox"
|
|
894
|
+
auth = "user"
|
|
895
|
+
source = { kind = "sandbox", service = "system.ai.sandbox" }
|
|
896
|
+
policy = { downscope = [{ resource = "workspace:/Workspace/Shared", permission = "read_only" }], databricks_access_token_included = true }
|
|
897
|
+
```
|
|
898
|
+
|
|
899
|
+
With `databricks_access_token_included = true`, the sandbox receives `DATABRICKS_HOST`, a short-lived
|
|
900
|
+
`DATABRICKS_TOKEN`, and `DATABRICKS_AUTH_TYPE`, so code such as
|
|
901
|
+
`WorkspaceClient().current_user.me()` can call workspace APIs. This policy does not choose the
|
|
902
|
+
identity: `auth = "user"` uses the request user's OBO credential, while `auth = "app"` uses the
|
|
903
|
+
Databricks App service principal. Use `--no-databricks-access-token-included` when adding a sandbox that
|
|
904
|
+
does not need workspace API access. Existing manifests that omit `databricks_access_token_included`
|
|
905
|
+
remain disabled until explicitly updated.
|
|
776
906
|
|
|
777
907
|
### Genie tools
|
|
778
908
|
|
|
@@ -880,10 +1010,12 @@ store and grants the app's service principal access to it. The memory store id f
|
|
|
880
1010
|
via the `AGENT_MEMORY_STORE` env var that `deploy` injects; `agentbricks dev` runs locally with memory off
|
|
881
1011
|
and does not inject it. The id is not persisted in `agent.toml`.)
|
|
882
1012
|
|
|
883
|
-
The chat UI generates a stable application session UUID in browser local storage,
|
|
884
|
-
|
|
885
|
-
`
|
|
886
|
-
|
|
1013
|
+
The chat UI generates a stable application session UUID in browser local storage, sends it as the
|
|
1014
|
+
invocation's top-level `session_id`, and creates a fresh invocation UUID per turn. The chat app also
|
|
1015
|
+
sends this session UUID in the `X-Routing-Key` request header, which is used verbatim to pin
|
|
1016
|
+
the session to one app replica (it must be non-blank and no more than 128 UTF-8 bytes). The header is neither
|
|
1017
|
+
authentication nor the template's application session state; it is independent sticky-routing
|
|
1018
|
+
plumbing.
|
|
887
1019
|
|
|
888
1020
|
The generated `README.md` documents every request the client makes: config discovery, sync and SSE
|
|
889
1021
|
invocations, background submission and polling, session transcript loading, HITL resume, and memory
|
|
@@ -127,9 +127,9 @@ agentbricks deploy my-agent # deploy to Databricks
|
|
|
127
127
|
local runtime so local behavior matches a deployment.
|
|
128
128
|
|
|
129
129
|
`agentbricks deploy my-agent` deploys a Databricks App named `agent-bricks-my-agent`, provisions the
|
|
130
|
-
stores declared in `agent.toml`, and grants the app's service principal access to
|
|
131
|
-
|
|
132
|
-
print an app's URL and status.
|
|
130
|
+
stores declared in `agent.toml`, and grants the app's service principal access to the stores and
|
|
131
|
+
direct App-auth tool resources declared there. Use `agentbricks deployments list` to find deployed
|
|
132
|
+
apps, and `agentbricks deployments get agent-bricks-my-agent` to print an app's URL and status.
|
|
133
133
|
|
|
134
134
|
`agentbricks init` declares default memory and session stores in `agent.toml`, so the deployed agent has
|
|
135
135
|
long-term memory and durable conversation history. It creates `<name>-<6-letter-token>-memory` and
|
|
@@ -228,12 +228,16 @@ Each managed run is an **invocation**. Send a client-generated UUID `id` and you
|
|
|
228
228
|
```json
|
|
229
229
|
{
|
|
230
230
|
"id": "550e8400-e29b-41d4-a716-446655440000",
|
|
231
|
+
"session_id": "support-case-123",
|
|
231
232
|
"input": {"messages": [{"role": "user", "content": "Hello"}]},
|
|
232
233
|
"background": true,
|
|
233
234
|
"stream": true
|
|
234
235
|
}
|
|
235
236
|
```
|
|
236
237
|
|
|
238
|
+
The optional top-level `session_id` groups invocations into one application session. It is distinct
|
|
239
|
+
from the invocation `id` and from the `X-Routing-Key` sticky-routing header.
|
|
240
|
+
|
|
237
241
|
| Endpoint | Behavior |
|
|
238
242
|
| --- | --- |
|
|
239
243
|
| `POST /api/invocations` | Defaults to synchronous execution: `200` with the result under `output`. `stream: true` returns SSE events. `background: true` returns `202` with a status URL; adding `stream: true` also includes an events URL. |
|
|
@@ -434,6 +438,7 @@ agentbricks [-p <profile>] [-o text|json]
|
|
|
434
438
|
[--disable-chat-app]
|
|
435
439
|
[--memory-store NAME] [--session-store NAME]
|
|
436
440
|
[--existing] [--profile P] [directory]
|
|
441
|
+
doctor [directory]
|
|
437
442
|
dev [--source PATH] [--prepare-environment] [--app-port PORT]
|
|
438
443
|
memory
|
|
439
444
|
bind STORE [--source PATH]
|
|
@@ -450,7 +455,8 @@ agentbricks [-p <profile>] [-o text|json]
|
|
|
450
455
|
unbind [--source PATH]
|
|
451
456
|
list | get [--experiment-name NAME | --experiment-id ID] [--source PATH]
|
|
452
457
|
tools
|
|
453
|
-
add sandbox --scope SCOPE [--scope SCOPE ...]
|
|
458
|
+
add sandbox --scope SCOPE [--scope SCOPE ...]
|
|
459
|
+
[--no-databricks-access-token-included] [--source PATH]
|
|
454
460
|
add mcp SERVICE [--name NAME] [--source PATH]
|
|
455
461
|
add uc-function FUNCTION [--name NAME] [--source PATH]
|
|
456
462
|
add genie-one [--name NAME] [--auth user|app] [--source PATH]
|
|
@@ -473,6 +479,26 @@ agentbricks init --framework langgraph --existing .
|
|
|
473
479
|
agentbricks init --framework openai --existing .
|
|
474
480
|
```
|
|
475
481
|
|
|
482
|
+
Before or after the conversion, inspect its progress without changing the repository or contacting
|
|
483
|
+
Databricks:
|
|
484
|
+
|
|
485
|
+
```sh
|
|
486
|
+
agentbricks doctor .
|
|
487
|
+
agentbricks -o json doctor .
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
Doctor exits 0 only when the project has a valid Agent Bricks manifest and matching project
|
|
491
|
+
metadata, uses the Agent Bricks server, declares the framework-appropriate `databricks-agentbricks`
|
|
492
|
+
extra and a non-empty `app.yaml` command, constructs `DurableAgentServer` with an `invoke` hook, and
|
|
493
|
+
calls a recognized adapter for the selected framework in production Python source. Test, example, and
|
|
494
|
+
old/stale directories do not count as source evidence. A failed report is the normal result for a
|
|
495
|
+
project that still needs migration; run
|
|
496
|
+
`agentbricks init --framework <framework_name> --existing <directory>` with the appropriate framework
|
|
497
|
+
to prepare the migration instructions. Doctor never imports or executes the target's source, and a
|
|
498
|
+
bounded source scan that exceeds a limit is reported while the evidence it already found still counts.
|
|
499
|
+
Its findings are static repository evidence, not proof that the configured startup command executes
|
|
500
|
+
the files it finds.
|
|
501
|
+
|
|
476
502
|
This writes `agent-bricks-migrate/` containing a skill, a prompt to paste into your coding agent,
|
|
477
503
|
`references/migration.json`, and a reference project generated from the templates bundled with the
|
|
478
504
|
installed CLI. The bundle sits outside any single agent's configuration directory; `.claude/skills/`
|
|
@@ -509,11 +535,11 @@ server.
|
|
|
509
535
|
```sh
|
|
510
536
|
agentbricks --profile <profile> endpoint invoke agent-bricks-my-agent \
|
|
511
537
|
--path /api/invocations \
|
|
512
|
-
--json '{"id":"00000000-0000-4000-8000-000000000001","input":[{"role":"user","content":"Hello"}]}'
|
|
538
|
+
--json '{"id":"00000000-0000-4000-8000-000000000001","session_id":"support-case-123","input":[{"role":"user","content":"Hello"}]}'
|
|
513
539
|
|
|
514
540
|
agentbricks endpoint invoke --url http://localhost:8000 \
|
|
515
541
|
--path /api/invocations \
|
|
516
|
-
--json '{"id":"00000000-0000-4000-8000-000000000001","input":[{"role":"user","content":"Hello"}]}'
|
|
542
|
+
--json '{"id":"00000000-0000-4000-8000-000000000001","session_id":"support-case-123","input":[{"role":"user","content":"Hello"}]}'
|
|
517
543
|
```
|
|
518
544
|
|
|
519
545
|
The JSON body remains explicit even for generated agents. For example, managed runtime agents require
|
|
@@ -521,21 +547,26 @@ a client-generated invocation ID, and streaming servers require their own stream
|
|
|
521
547
|
`--sse` so the CLI consumes the response as Server-Sent Events.
|
|
522
548
|
|
|
523
549
|
```sh
|
|
550
|
+
SESSION_ID=$(uuidgen)
|
|
524
551
|
INVOCATION_ID=$(uuidgen)
|
|
525
552
|
agentbricks --profile <profile> endpoint invoke agent-bricks-my-agent \
|
|
526
553
|
--path /api/invocations \
|
|
527
|
-
--
|
|
554
|
+
--routing-key "$SESSION_ID" \
|
|
555
|
+
--json "{\"id\":\"$INVOCATION_ID\",\"session_id\":\"$SESSION_ID\",\"input\":[{\"role\":\"user\",\"content\":\"Run the report\"}]}"
|
|
528
556
|
|
|
557
|
+
INVOCATION_ID=$(uuidgen)
|
|
529
558
|
agentbricks --profile <profile> endpoint invoke agent-bricks-my-agent \
|
|
530
559
|
--path /api/invocations \
|
|
560
|
+
--routing-key "$SESSION_ID" \
|
|
531
561
|
--sse \
|
|
532
|
-
--json "{\"id\":\"$INVOCATION_ID\",\"input\":[{\"role\":\"user\",\"content\":\"Hello\"}],\"stream\":true}"
|
|
562
|
+
--json "{\"id\":\"$INVOCATION_ID\",\"session_id\":\"$SESSION_ID\",\"input\":[{\"role\":\"user\",\"content\":\"Hello\"}],\"stream\":true}"
|
|
533
563
|
```
|
|
534
564
|
|
|
535
|
-
`--
|
|
536
|
-
|
|
537
|
-
session
|
|
538
|
-
|
|
565
|
+
`--routing-key` keeps a session on one app replica (sticky routing): set it to your stable session id
|
|
566
|
+
and it is sent verbatim in the `X-Routing-Key` request header. It is routing only and is never used
|
|
567
|
+
as the session id - put the session id at the top level of the `--json` body for session continuity. This
|
|
568
|
+
also works with a direct App URL and with the generated runtime on localhost. OAuth and session headers are managed by
|
|
569
|
+
the runtime; arbitrary custom request headers are intentionally not exposed by this command.
|
|
539
570
|
|
|
540
571
|
## Command help
|
|
541
572
|
|
|
@@ -585,9 +616,79 @@ Managed-tool add commands write the selected identity to `agent.toml`; inspect t
|
|
|
585
616
|
review configured bindings. Missing legacy auth continues to mean App identity at runtime; it is
|
|
586
617
|
never silently upgraded to user identity.
|
|
587
618
|
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
619
|
+
### Automatic App-identity access on deploy
|
|
620
|
+
|
|
621
|
+
`agentbricks deploy` reconciles least-privilege access for resources explicitly declared by App/default
|
|
622
|
+
identity tool bindings. It skips every `auth = "user"` binding because those calls use the request
|
|
623
|
+
user's permissions instead of the App service principal.
|
|
624
|
+
|
|
625
|
+
| Explicit `agent.toml` resource | Automatic App service-principal access |
|
|
626
|
+
| --- | --- |
|
|
627
|
+
| UC function | Apps `uc_securable`: `FUNCTION` / `EXECUTE` |
|
|
628
|
+
| Genie Agent space | Apps `genie_space`: `CAN_RUN` |
|
|
629
|
+
| Sandbox table scope | Apps `uc_securable`: `TABLE` / `SELECT` or `MODIFY` |
|
|
630
|
+
| Sandbox volume scope | Apps `uc_securable`: `VOLUME` / `READ_VOLUME` or `WRITE_VOLUME` |
|
|
631
|
+
| Sandbox Workspace path | Workspace ACL: `CAN_READ` or `CAN_EDIT` |
|
|
632
|
+
| External MCP service | Unity Catalog: effective `EXECUTE` plus `USE_SCHEMA` and `USE_CATALOG` on its named parents |
|
|
633
|
+
| Built-in `system.ai` MCP service, including Sandbox and Genie One | Platform-managed access defaults; Agent Bricks does not mutate system securables |
|
|
634
|
+
|
|
635
|
+
Native Genie One has no resource identifier in its binding, so it does not add a resource-specific
|
|
636
|
+
grant. Use a Genie Agent binding when the App identity should be scoped to one explicit Genie Space.
|
|
637
|
+
|
|
638
|
+
Apps-backed tool resources are named deterministically and reconciled to the manifest on each
|
|
639
|
+
deploy: removing a binding removes that Agent Bricks-owned Apps resource while preserving Runtime
|
|
640
|
+
Store, tracing, and user-owned resources. MCP and Workspace ACL grants are additive in this release
|
|
641
|
+
because their permission APIs do not expose trustworthy Agent Bricks ownership metadata; removing
|
|
642
|
+
those bindings does not revoke an independently valid grant.
|
|
643
|
+
|
|
644
|
+
Only direct resources are automatic. Agent Bricks never discovers or grants tables and warehouses
|
|
645
|
+
used by a Genie Space, objects called by a UC function, or resources wrapped by an MCP service.
|
|
646
|
+
Grant those transitive dependencies manually when the called service uses the App identity. If any
|
|
647
|
+
required direct grant cannot be read, applied, or verified, deploy stops before source upload and
|
|
648
|
+
leaves the currently deployed version untouched.
|
|
649
|
+
|
|
650
|
+
`DurableAgentServer` derives its request-auth policy directly from the managed tool bindings in
|
|
651
|
+
`agent.toml`. Projects do not maintain a separate request-auth contract marker: a managed tool with
|
|
652
|
+
`auth = "user"` requires a transient request-user credential. Code-first tools can declare any
|
|
653
|
+
additional API scopes that Agent Bricks cannot infer from Python:
|
|
654
|
+
|
|
655
|
+
```toml
|
|
656
|
+
[auth.user]
|
|
657
|
+
required = true
|
|
658
|
+
additional_api_scopes = ["sql"]
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
`additional_api_scopes` is additive: deploy unions it with scopes inferred from managed bindings,
|
|
662
|
+
deduplicates the result, and preserves unrelated scopes already configured on the App. Scope names
|
|
663
|
+
are not restricted to a client-side allowlist; Databricks Apps validates whether a requested scope
|
|
664
|
+
is supported. Entries must be non-empty strings without surrounding whitespace or control
|
|
665
|
+
characters, and a non-empty list requires `required = true`. This request-auth contract is supported
|
|
666
|
+
only with `[agent].server = "agentbricks"`.
|
|
667
|
+
|
|
668
|
+
Generated framework adapters pass the request-bound resolver to agent construction. A code-first
|
|
669
|
+
tool should obtain its user client from that resolver inside the active invocation rather than
|
|
670
|
+
creating or persisting a user credential:
|
|
671
|
+
|
|
672
|
+
```python
|
|
673
|
+
from langchain_core.tools import tool
|
|
674
|
+
|
|
675
|
+
|
|
676
|
+
def sql_tools(workspace_client_for):
|
|
677
|
+
@tool
|
|
678
|
+
def run_statement(statement: str) -> str:
|
|
679
|
+
client = workspace_client_for("user")
|
|
680
|
+
response = client.statement_execution.execute_statement(
|
|
681
|
+
warehouse_id="...",
|
|
682
|
+
statement=statement,
|
|
683
|
+
)
|
|
684
|
+
return str(response.result)
|
|
685
|
+
|
|
686
|
+
return [run_statement]
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
The resolver is request-bound and closes after the attempt. Agent Bricks does not inject it into
|
|
690
|
+
arbitrary auto-discovered decorated tools; build those tools from the resolver passed to the
|
|
691
|
+
generated request-aware agent function.
|
|
591
692
|
|
|
592
693
|
Request-user invocations use the same synchronous, streaming, background, status, event-replay,
|
|
593
694
|
and idempotency APIs as app-auth invocations. The Runtime Store records only token-free request
|
|
@@ -603,13 +704,18 @@ upgrade copied Python adapter code. Outdated adapters fail closed rather than si
|
|
|
603
704
|
identity. App-only legacy projects and generic bring-your-own source directories keep the existing
|
|
604
705
|
path.
|
|
605
706
|
|
|
606
|
-
Deploy derives Apps user scopes from explicit `auth = "user"` bindings
|
|
707
|
+
Deploy derives Apps user scopes from explicit `auth = "user"` bindings and unions them with
|
|
708
|
+
`[auth.user].additional_api_scopes`:
|
|
607
709
|
|
|
608
710
|
| Binding | Requested Apps scopes |
|
|
609
711
|
| --- | --- |
|
|
610
712
|
| Managed MCP (governed ingress) | `ai-gateway` |
|
|
713
|
+
| `system.ai.dbsql` | `ai-gateway`, `sql` |
|
|
611
714
|
| `system.ai.genie_one_mcp` | `ai-gateway`, `genie` |
|
|
715
|
+
| Sandbox with a Volume downscope | `ai-gateway`, `files` |
|
|
612
716
|
| First-class Genie One or Genie Agent | `genie` |
|
|
717
|
+
| Sandbox with token injection | `ai-gateway`, `workspace.workspace` |
|
|
718
|
+
| Sandbox with token injection disabled | `ai-gateway` |
|
|
613
719
|
|
|
614
720
|
For example, bind Genie tools in a current project with `server = "agentbricks"`:
|
|
615
721
|
|
|
@@ -618,7 +724,8 @@ agentbricks tools add mcp system.ai.genie_one_mcp --auth user
|
|
|
618
724
|
agentbricks tools add genie-agent SPACE_ID --auth user
|
|
619
725
|
```
|
|
620
726
|
|
|
621
|
-
Mixed bindings request the union. App-auth and legacy bindings add no user
|
|
727
|
+
Mixed bindings and explicit additions request the union. App-auth and legacy bindings add no user
|
|
728
|
+
scopes. These are
|
|
622
729
|
explicit service-consent scopes, not a claim that gateway access alone authorizes the downstream
|
|
623
730
|
resource. OAuth consent does not grant Unity Catalog privileges: the user still needs access to
|
|
624
731
|
the configured Genie Space and its underlying data.
|
|
@@ -635,10 +742,15 @@ The `system.ai.dbsql` managed MCP additionally requests the Apps `sql` user scop
|
|
|
635
742
|
API consent, not `sql:restricted-query`; read-only enforcement remains the service policy plus the
|
|
636
743
|
requesting user's Unity Catalog grants. DBSQL does not use Databricks Connect.
|
|
637
744
|
|
|
638
|
-
|
|
745
|
+
When a user-auth sandbox has `databricks_access_token_included = true`, it requests the Apps
|
|
746
|
+
`workspace.workspace` user scope so the injected credential can call workspace APIs. A sandbox
|
|
747
|
+
binding with a Volume downscope additionally requests the Apps `files` user scope.
|
|
639
748
|
OAuth consent does not grant Volume access: the requesting user still needs the corresponding
|
|
640
|
-
Unity Catalog privileges, and the sandbox downscope remains authoritative.
|
|
641
|
-
|
|
749
|
+
Unity Catalog privileges, and the sandbox downscope remains authoritative. A sandbox binding with
|
|
750
|
+
token injection disabled does not request `workspace.workspace`; its other resource-derived scopes
|
|
751
|
+
still apply. Databricks Apps rejects the legacy bare `workspace` scope, so Agent Bricks requests
|
|
752
|
+
`workspace.workspace`. These scopes are requested only for `auth = "user"`; `auth = "app"` uses
|
|
753
|
+
the App service principal's permissions instead.
|
|
642
754
|
|
|
643
755
|
Review the target App's scopes and coordinate with its other owners before allowing the update. Once
|
|
644
756
|
those scopes are present, later deploys do not need the flag. The CLI preserves unrelated scopes,
|
|
@@ -737,7 +849,24 @@ do not generate or patch Python tool code, and do not alter the manifest's `[[to
|
|
|
737
849
|
Sandbox scopes default to read-only access. Repeat `--scope` to allow more than one resource, use
|
|
738
850
|
`volume:` or `workspace:` for those resource types, and use `--permission read_write` only when the
|
|
739
851
|
agent needs writes. Every sandbox call carries this fixed downscope in MCP `_meta`, outside the tool
|
|
740
|
-
arguments controlled by the model.
|
|
852
|
+
arguments controlled by the model. New sandbox bindings also expose the selected Databricks
|
|
853
|
+
credential to sandbox code by default:
|
|
854
|
+
|
|
855
|
+
```toml
|
|
856
|
+
[[tools]]
|
|
857
|
+
id = "sandbox"
|
|
858
|
+
auth = "user"
|
|
859
|
+
source = { kind = "sandbox", service = "system.ai.sandbox" }
|
|
860
|
+
policy = { downscope = [{ resource = "workspace:/Workspace/Shared", permission = "read_only" }], databricks_access_token_included = true }
|
|
861
|
+
```
|
|
862
|
+
|
|
863
|
+
With `databricks_access_token_included = true`, the sandbox receives `DATABRICKS_HOST`, a short-lived
|
|
864
|
+
`DATABRICKS_TOKEN`, and `DATABRICKS_AUTH_TYPE`, so code such as
|
|
865
|
+
`WorkspaceClient().current_user.me()` can call workspace APIs. This policy does not choose the
|
|
866
|
+
identity: `auth = "user"` uses the request user's OBO credential, while `auth = "app"` uses the
|
|
867
|
+
Databricks App service principal. Use `--no-databricks-access-token-included` when adding a sandbox that
|
|
868
|
+
does not need workspace API access. Existing manifests that omit `databricks_access_token_included`
|
|
869
|
+
remain disabled until explicitly updated.
|
|
741
870
|
|
|
742
871
|
### Genie tools
|
|
743
872
|
|
|
@@ -845,10 +974,12 @@ store and grants the app's service principal access to it. The memory store id f
|
|
|
845
974
|
via the `AGENT_MEMORY_STORE` env var that `deploy` injects; `agentbricks dev` runs locally with memory off
|
|
846
975
|
and does not inject it. The id is not persisted in `agent.toml`.)
|
|
847
976
|
|
|
848
|
-
The chat UI generates a stable application session UUID in browser local storage,
|
|
849
|
-
|
|
850
|
-
`
|
|
851
|
-
|
|
977
|
+
The chat UI generates a stable application session UUID in browser local storage, sends it as the
|
|
978
|
+
invocation's top-level `session_id`, and creates a fresh invocation UUID per turn. The chat app also
|
|
979
|
+
sends this session UUID in the `X-Routing-Key` request header, which is used verbatim to pin
|
|
980
|
+
the session to one app replica (it must be non-blank and no more than 128 UTF-8 bytes). The header is neither
|
|
981
|
+
authentication nor the template's application session state; it is independent sticky-routing
|
|
982
|
+
plumbing.
|
|
852
983
|
|
|
853
984
|
The generated `README.md` documents every request the client makes: config discovery, sync and SSE
|
|
854
985
|
invocations, background submission and polling, session transcript loading, HITL resume, and memory
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "databricks-agentbricks"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.4.0"
|
|
4
4
|
description = "Agent Bricks CLI and AgentKit SDK for custom agents on Databricks"
|
|
5
5
|
authors = [
|
|
6
6
|
{ name="Databricks", email="agent-feedback@databricks.com" },
|
|
@@ -22,6 +22,7 @@ dependencies = [
|
|
|
22
22
|
# so this is a base dependency. Auth rides on databricks-sdk (above), so the heavier
|
|
23
23
|
# mlflow[databricks] extra (boto3/azure/gcs/databricks-agents, for artifact blob I/O) isn't needed.
|
|
24
24
|
"mlflow-skinny>=3.10.1",
|
|
25
|
+
"packaging>=23.2",
|
|
25
26
|
"psycopg[binary]>=3.1",
|
|
26
27
|
"PyYAML>=6.0",
|
|
27
28
|
"rich>=13.7",
|
|
@@ -35,7 +36,7 @@ langgraph = [
|
|
|
35
36
|
"databricks-langchain>=0.17.0",
|
|
36
37
|
"langgraph>=1.1.0",
|
|
37
38
|
"langchain>=1.0.0",
|
|
38
|
-
"langchain-mcp-adapters>=0.
|
|
39
|
+
"langchain-mcp-adapters>=0.3.0",
|
|
39
40
|
"mlflow>=3.10.1",
|
|
40
41
|
"opentelemetry-exporter-otlp-proto-grpc>=1.25.0",
|
|
41
42
|
"databricks-agents>=1.9.3",
|