chore(deps): local extra installs ../beaver-gateway editable, prod extra from git
This commit is contained in:
@@ -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:
|
||||
docker compose up -d
|
||||
|
||||
@@ -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`.
|
||||
|
||||
## 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
|
||||
|
||||
```bash
|
||||
|
||||
+19
-3
@@ -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]
|
||||
name = "beaver-agent"
|
||||
version = "0.1.0"
|
||||
requires-python = ">=3.13"
|
||||
dependencies = [
|
||||
"beaver-gateway[prod]",
|
||||
"raycast-api[discovery]",
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
local = [
|
||||
"beaver-gateway",
|
||||
]
|
||||
prod = [
|
||||
"beaver-gateway[prod]",
|
||||
]
|
||||
|
||||
[tool.uv]
|
||||
conflicts = [
|
||||
[{ extra = "local" }, { extra = "prod" }],
|
||||
]
|
||||
|
||||
[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" }
|
||||
|
||||
@@ -2,9 +2,16 @@ version = 1
|
||||
revision = 3
|
||||
requires-python = ">=3.13"
|
||||
resolution-markers = [
|
||||
"python_full_version >= '3.14'",
|
||||
"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'",
|
||||
"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]]
|
||||
name = "aiofile"
|
||||
@@ -244,20 +251,33 @@ name = "beaver-agent"
|
||||
version = "0.1.0"
|
||||
source = { virtual = "." }
|
||||
dependencies = [
|
||||
{ name = "beaver-gateway", extra = ["prod"] },
|
||||
{ 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]
|
||||
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" },
|
||||
]
|
||||
provides-extras = ["local", "prod"]
|
||||
|
||||
[[package]]
|
||||
name = "beaver-gateway"
|
||||
version = "0.1.0"
|
||||
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 = [
|
||||
{ name = "aiofile" },
|
||||
{ name = "aiohttp" },
|
||||
@@ -270,12 +290,12 @@ dependencies = [
|
||||
{ name = "greenlet" },
|
||||
{ name = "itsdangerous" },
|
||||
{ name = "jinja2" },
|
||||
{ name = "psycopg", extra = ["binary"] },
|
||||
{ name = "psycopg", extra = ["binary"], marker = "extra == 'extra-12-beaver-agent-prod'" },
|
||||
{ name = "pydantic" },
|
||||
{ name = "pydantic-settings" },
|
||||
{ name = "python-frontmatter" },
|
||||
{ name = "sqlmodel" },
|
||||
{ name = "uvicorn", extra = ["standard"] },
|
||||
{ name = "uvicorn", extra = ["standard"], marker = "extra == 'extra-12-beaver-agent-prod'" },
|
||||
{ name = "uvloop" },
|
||||
]
|
||||
|
||||
@@ -285,6 +305,71 @@ prod = [
|
||||
{ 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]]
|
||||
name = "cachetools"
|
||||
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" },
|
||||
]
|
||||
|
||||
[[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]]
|
||||
name = "claude-code-api"
|
||||
version = "0.1.0"
|
||||
@@ -538,7 +642,7 @@ name = "fastmcp"
|
||||
version = "3.3.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
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" }
|
||||
wheels = [
|
||||
@@ -551,7 +655,7 @@ version = "3.3.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ 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 = "python-dotenv" },
|
||||
{ name = "rich" },
|
||||
@@ -569,7 +673,7 @@ client = [
|
||||
{ name = "httpx" },
|
||||
{ name = "mcp" },
|
||||
{ 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 = [
|
||||
{ name = "authlib" },
|
||||
@@ -583,7 +687,7 @@ server = [
|
||||
{ name = "openapi-pydantic" },
|
||||
{ name = "opentelemetry-api" },
|
||||
{ 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 = "python-multipart" },
|
||||
{ name = "pyyaml" },
|
||||
@@ -1081,7 +1185,7 @@ dependencies = [
|
||||
{ name = "jsonschema" },
|
||||
{ name = "pydantic" },
|
||||
{ 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 = "pywin32", marker = "sys_platform == 'win32'" },
|
||||
{ name = "sse-starlette" },
|
||||
|
||||
Reference in New Issue
Block a user