chore(deps): local extra installs ../beaver-gateway editable, prod extra from git

This commit is contained in:
hh
2026-08-28 02:16:43 +02:00
parent 62b8b1c14b
commit ef5adf231a
4 changed files with 145 additions and 15 deletions
+4 -1
View File
@@ -1,4 +1,7 @@
.PHONY: up recreate down restart rebuild gateway logs shell deploy .PHONY: sync up recreate down restart rebuild gateway logs shell deploy
sync:
uv sync --extra local
up: up:
docker compose up -d docker compose up -d
+7
View File
@@ -103,6 +103,13 @@ docker compose up -d
Set `PUBLIC_BASE_URL=https://<DOMAIN>` in beaver-agent's `.env`. For per-subdomain layout, rewrite the Caddyfile and pass full `public_base_url=...` per frontend in `config.py`. Set `PUBLIC_BASE_URL=https://<DOMAIN>` in beaver-agent's `.env`. For per-subdomain layout, rewrite the Caddyfile and pass full `public_base_url=...` per frontend in `config.py`.
## Editing config.py on the mac
`make sync` installs `../beaver-gateway` editable (extra `local`), so
imports in `config.py` resolve against the checkout you are working on;
`uv sync --extra prod` pulls the gateway from git instead. Neither is used
by the image - the container builds the gateway itself.
## Useful commands ## Useful commands
```bash ```bash
+19 -3
View File
@@ -1,13 +1,29 @@
# only for config.py development # Only for config.py development: the image builds beaver-gateway itself.
# `uv sync --extra local` - editable ../beaver-gateway; `--extra prod` - from git.
[project] [project]
name = "beaver-agent" name = "beaver-agent"
version = "0.1.0" version = "0.1.0"
requires-python = ">=3.13" requires-python = ">=3.13"
dependencies = [ dependencies = [
"beaver-gateway[prod]",
"raycast-api[discovery]", "raycast-api[discovery]",
] ]
[project.optional-dependencies]
local = [
"beaver-gateway",
]
prod = [
"beaver-gateway[prod]",
]
[tool.uv]
conflicts = [
[{ extra = "local" }, { extra = "prod" }],
]
[tool.uv.sources] [tool.uv.sources]
beaver-gateway = { git = "https://git.kotikot.com/beaver/beaver-gateway.git", branch = "main" } beaver-gateway = [
{ path = "../beaver-gateway", editable = true, extra = "local" },
{ git = "https://git.kotikot.com/beaver/beaver-gateway.git", branch = "main", extra = "prod" },
]
raycast-api = { git = "https://git.kotikot.com/beaver/raycast-api" } raycast-api = { git = "https://git.kotikot.com/beaver/raycast-api" }
Generated
+115 -11
View File
@@ -2,9 +2,16 @@ version = 1
revision = 3 revision = 3
requires-python = ">=3.13" requires-python = ">=3.13"
resolution-markers = [ resolution-markers = [
"python_full_version >= '3.14'", "python_full_version >= '3.14' and extra != 'extra-12-beaver-agent-local' and extra == 'extra-12-beaver-agent-prod'",
"python_full_version < '3.14'", "python_full_version < '3.14' and extra != 'extra-12-beaver-agent-local' and extra == 'extra-12-beaver-agent-prod'",
"python_full_version >= '3.14' and extra == 'extra-12-beaver-agent-local' and extra != 'extra-12-beaver-agent-prod'",
"python_full_version < '3.14' and extra == 'extra-12-beaver-agent-local' and extra != 'extra-12-beaver-agent-prod'",
"extra != 'extra-12-beaver-agent-local' and extra != 'extra-12-beaver-agent-prod'",
] ]
conflicts = [[
{ package = "beaver-agent", extra = "local" },
{ package = "beaver-agent", extra = "prod" },
]]
[[package]] [[package]]
name = "aiofile" name = "aiofile"
@@ -244,20 +251,33 @@ name = "beaver-agent"
version = "0.1.0" version = "0.1.0"
source = { virtual = "." } source = { virtual = "." }
dependencies = [ dependencies = [
{ name = "beaver-gateway", extra = ["prod"] },
{ name = "raycast-api", extra = ["discovery"] }, { name = "raycast-api", extra = ["discovery"] },
] ]
[package.optional-dependencies]
local = [
{ name = "beaver-gateway", version = "0.1.0", source = { editable = "../beaver-gateway" } },
]
prod = [
{ name = "beaver-gateway", version = "0.1.0", source = { git = "https://git.kotikot.com/beaver/beaver-gateway.git?branch=main#b83018b97e498a616debd12d2e6fe0f8a543cf56" }, extra = ["prod"], marker = "extra == 'extra-12-beaver-agent-prod'" },
]
[package.metadata] [package.metadata]
requires-dist = [ requires-dist = [
{ name = "beaver-gateway", extras = ["prod"], git = "https://git.kotikot.com/beaver/beaver-gateway.git?branch=main" }, { name = "beaver-gateway", marker = "extra == 'local'", editable = "../beaver-gateway" },
{ name = "beaver-gateway", extras = ["prod"], marker = "extra == 'prod'", git = "https://git.kotikot.com/beaver/beaver-gateway.git?branch=main" },
{ name = "raycast-api", extras = ["discovery"], git = "https://git.kotikot.com/beaver/raycast-api" }, { name = "raycast-api", extras = ["discovery"], git = "https://git.kotikot.com/beaver/raycast-api" },
] ]
provides-extras = ["local", "prod"]
[[package]] [[package]]
name = "beaver-gateway" name = "beaver-gateway"
version = "0.1.0" version = "0.1.0"
source = { git = "https://git.kotikot.com/beaver/beaver-gateway.git?branch=main#b83018b97e498a616debd12d2e6fe0f8a543cf56" } source = { git = "https://git.kotikot.com/beaver/beaver-gateway.git?branch=main#b83018b97e498a616debd12d2e6fe0f8a543cf56" }
resolution-markers = [
"python_full_version >= '3.14'",
"python_full_version < '3.14'",
]
dependencies = [ dependencies = [
{ name = "aiofile" }, { name = "aiofile" },
{ name = "aiohttp" }, { name = "aiohttp" },
@@ -270,12 +290,12 @@ dependencies = [
{ name = "greenlet" }, { name = "greenlet" },
{ name = "itsdangerous" }, { name = "itsdangerous" },
{ name = "jinja2" }, { name = "jinja2" },
{ name = "psycopg", extra = ["binary"] }, { name = "psycopg", extra = ["binary"], marker = "extra == 'extra-12-beaver-agent-prod'" },
{ name = "pydantic" }, { name = "pydantic" },
{ name = "pydantic-settings" }, { name = "pydantic-settings" },
{ name = "python-frontmatter" }, { name = "python-frontmatter" },
{ name = "sqlmodel" }, { name = "sqlmodel" },
{ name = "uvicorn", extra = ["standard"] }, { name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-12-beaver-agent-prod'" },
{ name = "uvloop" }, { name = "uvloop" },
] ]
@@ -285,6 +305,71 @@ prod = [
{ name = "raycast-api" }, { name = "raycast-api" },
] ]
[[package]]
name = "beaver-gateway"
version = "0.1.0"
source = { editable = "../beaver-gateway" }
resolution-markers = [
"python_full_version >= '3.14'",
"python_full_version < '3.14'",
]
dependencies = [
{ name = "aiofile" },
{ name = "aiohttp" },
{ name = "aiosqlite" },
{ name = "anthropic" },
{ name = "anyio" },
{ name = "argon2-cffi" },
{ name = "claude-agent-sdk" },
{ name = "fastapi" },
{ name = "fastmcp" },
{ name = "greenlet" },
{ name = "itsdangerous" },
{ name = "jinja2" },
{ name = "psycopg", extra = ["binary"], marker = "extra == 'extra-12-beaver-agent-local'" },
{ name = "pydantic" },
{ name = "pydantic-settings" },
{ name = "python-frontmatter" },
{ name = "sqlmodel" },
{ name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-12-beaver-agent-local'" },
{ name = "uvloop" },
]
[package.metadata]
requires-dist = [
{ name = "aiofile", specifier = ">=3.11.1" },
{ name = "aiohttp", specifier = ">=3.13.5" },
{ name = "aiosqlite", specifier = ">=0.22.1" },
{ name = "anthropic", specifier = ">=0.103.0" },
{ name = "anyio", specifier = ">=4.13.0" },
{ name = "argon2-cffi", specifier = ">=25.1.0" },
{ name = "claude-agent-sdk", specifier = ">=0.2.146" },
{ name = "fastapi", specifier = ">=0.136.1" },
{ name = "fastmcp", specifier = ">=3.3.1" },
{ name = "greenlet", specifier = ">=3.5.0" },
{ name = "itsdangerous", specifier = ">=2.2.0" },
{ name = "jinja2", specifier = ">=3.1.6" },
{ name = "psycopg", extras = ["binary"], specifier = ">=3.3.4" },
{ name = "pydantic", specifier = ">=2.13.4" },
{ name = "pydantic-settings", specifier = ">=2.14.1" },
{ name = "python-frontmatter", specifier = ">=1.2.0" },
{ name = "raycast-api", marker = "extra == 'local'", editable = "../raycast-api" },
{ name = "raycast-api", marker = "extra == 'prod'", git = "https://git.kotikot.com/beaver/raycast-api.git" },
{ name = "sqlmodel", specifier = ">=0.0.38" },
{ name = "uvicorn", extras = ["standard"], specifier = ">=0.47.0" },
{ name = "uvloop", specifier = ">=0.22.1" },
]
provides-extras = ["local", "prod"]
[package.metadata.requires-dev]
dev = [
{ name = "aioresponses", specifier = ">=0.7.8" },
{ name = "pytest", specifier = ">=9.0.3" },
{ name = "pytest-asyncio", specifier = ">=1.3.0" },
{ name = "ruff", specifier = ">=0.15.13" },
{ name = "ty", specifier = ">=0.0.37" },
]
[[package]] [[package]]
name = "cachetools" name = "cachetools"
version = "7.1.3" version = "7.1.3"
@@ -365,6 +450,25 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" },
] ]
[[package]]
name = "claude-agent-sdk"
version = "0.2.146"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
{ name = "jsonschema" },
{ name = "mcp" },
{ name = "sniffio" },
]
sdist = { url = "https://files.pythonhosted.org/packages/46/08/a79f73aad2156f4518ae6e0fffbcdb403cd5347d62b994b005a0c9bb12fb/claude_agent_sdk-0.2.146.tar.gz", hash = "sha256:9e402548466018421cfd0725a7601e14d9e3e879276a6a4a877c5a2ff6633546", size = 344704, upload-time = "2026-08-27T22:25:46.687Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e4/e2/7618d7ffd3d4580d53d1147e7baba005c3bf4359d8bb8ab9beab62b5a0ec/claude_agent_sdk-0.2.146-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7bcb91dd34c2e0e5b4f006648d457bbfba9aa1e44cf2e5d02abb441dcbbaff98", size = 84087716, upload-time = "2026-08-27T22:25:50.846Z" },
{ url = "https://files.pythonhosted.org/packages/1f/e6/004b957547e32f6df4948c3a5a3c06974c6c19539c357ebe40a1a23941d3/claude_agent_sdk-0.2.146-py3-none-macosx_11_0_x86_64.whl", hash = "sha256:9285b3dd900376b045a06d2d6f5e19bfd96a3f6cb88d21166bb840aff14ee505", size = 88567306, upload-time = "2026-08-27T22:25:54.876Z" },
{ url = "https://files.pythonhosted.org/packages/37/fa/1c1cb847ff8a92f6ec9a0176a984ec1902cf6eab6c027fd45059d211a96d/claude_agent_sdk-0.2.146-py3-none-manylinux_2_17_aarch64.whl", hash = "sha256:ad536806e6c6fc1972ae3950b1bb171f1494e6f47002c24dbc68f19af1c34997", size = 94195787, upload-time = "2026-08-27T22:25:59.367Z" },
{ url = "https://files.pythonhosted.org/packages/60/f9/48aa74e5a85ebe11b916a99b053cc64f47bea8409ec2b9ada5b5a1169a7a/claude_agent_sdk-0.2.146-py3-none-manylinux_2_17_x86_64.whl", hash = "sha256:1f2bae0759f3962be2714c786c1a6961824c5ce3d4b7f44f0828191bd44ccebe", size = 94385743, upload-time = "2026-08-27T22:26:03.218Z" },
{ url = "https://files.pythonhosted.org/packages/0d/d4/ff986dc35330146cba60a1bb6ee3f521cdec25ccc0306ef359b9d0cb59c4/claude_agent_sdk-0.2.146-py3-none-win_amd64.whl", hash = "sha256:dc2c4773dc02492b52c74f957a059ecbc0aec7063bd1a16c039b78613194b3cf", size = 97049829, upload-time = "2026-08-27T22:26:08.701Z" },
]
[[package]] [[package]]
name = "claude-code-api" name = "claude-code-api"
version = "0.1.0" version = "0.1.0"
@@ -538,7 +642,7 @@ name = "fastmcp"
version = "3.3.1" version = "3.3.1"
source = { registry = "https://pypi.org/simple" } source = { registry = "https://pypi.org/simple" }
dependencies = [ dependencies = [
{ name = "fastmcp-slim", extra = ["client", "server"] }, { name = "fastmcp-slim", extra = ["client", "server"], marker = "extra == 'extra-12-beaver-agent-local' or extra == 'extra-12-beaver-agent-prod'" },
] ]
sdist = { url = "https://files.pythonhosted.org/packages/3b/a9/5c5a01b6abd5346bf60b97cfd29e4a86661940c27dd562bfcda07fd03519/fastmcp-3.3.1.tar.gz", hash = "sha256:979362ea557de42a5f40342563c7e4b236bcc8e7cd192715f50030695d1a71cd", size = 28681699, upload-time = "2026-05-15T15:50:39.673Z" } sdist = { url = "https://files.pythonhosted.org/packages/3b/a9/5c5a01b6abd5346bf60b97cfd29e4a86661940c27dd562bfcda07fd03519/fastmcp-3.3.1.tar.gz", hash = "sha256:979362ea557de42a5f40342563c7e4b236bcc8e7cd192715f50030695d1a71cd", size = 28681699, upload-time = "2026-05-15T15:50:39.673Z" }
wheels = [ wheels = [
@@ -551,7 +655,7 @@ version = "3.3.1"
source = { registry = "https://pypi.org/simple" } source = { registry = "https://pypi.org/simple" }
dependencies = [ dependencies = [
{ name = "platformdirs" }, { name = "platformdirs" },
{ name = "pydantic", extra = ["email"] }, { name = "pydantic", extra = ["email"], marker = "extra == 'extra-12-beaver-agent-local' or extra == 'extra-12-beaver-agent-prod'" },
{ name = "pydantic-settings" }, { name = "pydantic-settings" },
{ name = "python-dotenv" }, { name = "python-dotenv" },
{ name = "rich" }, { name = "rich" },
@@ -569,7 +673,7 @@ client = [
{ name = "httpx" }, { name = "httpx" },
{ name = "mcp" }, { name = "mcp" },
{ name = "opentelemetry-api" }, { name = "opentelemetry-api" },
{ name = "py-key-value-aio", extra = ["filetree", "keyring", "memory"] }, { name = "py-key-value-aio", extra = ["filetree", "keyring", "memory"], marker = "extra == 'extra-12-beaver-agent-local' or extra == 'extra-12-beaver-agent-prod'" },
] ]
server = [ server = [
{ name = "authlib" }, { name = "authlib" },
@@ -583,7 +687,7 @@ server = [
{ name = "openapi-pydantic" }, { name = "openapi-pydantic" },
{ name = "opentelemetry-api" }, { name = "opentelemetry-api" },
{ name = "packaging" }, { name = "packaging" },
{ name = "py-key-value-aio", extra = ["filetree", "keyring", "memory"] }, { name = "py-key-value-aio", extra = ["filetree", "keyring", "memory"], marker = "extra == 'extra-12-beaver-agent-local' or extra == 'extra-12-beaver-agent-prod'" },
{ name = "pyperclip" }, { name = "pyperclip" },
{ name = "python-multipart" }, { name = "python-multipart" },
{ name = "pyyaml" }, { name = "pyyaml" },
@@ -1081,7 +1185,7 @@ dependencies = [
{ name = "jsonschema" }, { name = "jsonschema" },
{ name = "pydantic" }, { name = "pydantic" },
{ name = "pydantic-settings" }, { name = "pydantic-settings" },
{ name = "pyjwt", extra = ["crypto"] }, { name = "pyjwt", extra = ["crypto"], marker = "extra == 'extra-12-beaver-agent-local' or extra == 'extra-12-beaver-agent-prod'" },
{ name = "python-multipart" }, { name = "python-multipart" },
{ name = "pywin32", marker = "sys_platform == 'win32'" }, { name = "pywin32", marker = "sys_platform == 'win32'" },
{ name = "sse-starlette" }, { name = "sse-starlette" },