feat(config,compose): t3code-mcp as dispatcher hands on mac and dell
This commit is contained in:
+9
-6
@@ -5,8 +5,9 @@
|
||||
|
||||
### Compose ###################################################################
|
||||
|
||||
# Какие сервисы поднимать: db (postgres), gateway, obsidian (obsidian-headless)
|
||||
COMPOSE_PROFILES=db,gateway,obsidian
|
||||
# Какие сервисы поднимать: db (postgres), gateway, obsidian (obsidian-headless),
|
||||
# t3 (t3code-mcp - руки диспетчера на маке и dell)
|
||||
COMPOSE_PROFILES=db,gateway,obsidian,t3
|
||||
|
||||
# Ветка/тег beaver-gateway, из которого собирается образ шлюза
|
||||
GATEWAY_REF=main
|
||||
@@ -65,10 +66,12 @@ BEAVERGRAM_MCP=
|
||||
|
||||
### t3code (руки диспетчера, с S10) ###########################################
|
||||
|
||||
# `t3 serve --tailscale-serve --host <tailnet-ip>` на маке → адрес
|
||||
T3_URL=
|
||||
# `t3 auth session issue --token-only`
|
||||
T3_TOKEN=
|
||||
# t3code-mcp - сервис compose (профиль t3), машины и allowlist - ./t3code.toml.
|
||||
# На каждой машине: `t3 auth session issue --token-only --ttl 365d --label beaver`
|
||||
T3_MAC_TOKEN=
|
||||
T3_DELL_TOKEN=
|
||||
# Ветка/тег t3code-mcp, из которого собирается образ
|
||||
T3CODE_MCP_REF=main
|
||||
|
||||
### Komodo (python_tool с перечисленными действиями, с S8) ####################
|
||||
|
||||
|
||||
@@ -169,6 +169,16 @@ komodo_mcps = (
|
||||
)
|
||||
komodo_exposed = (ExposedMcp(name="komodo"),) if KOMODO else ()
|
||||
|
||||
# §5: t3code-mcp - сосед по compose (профиль t3), машины и allowlist проектов
|
||||
# в его t3code.toml; токены t3 живут в его env, gateway их не видит.
|
||||
T3CODE_MCP = os.environ.get("T3CODE_MCP", "http://t3code-mcp:8000/mcp")
|
||||
t3code_mcps = (
|
||||
[McpServer.http(name="t3code", url=T3CODE_MCP)]
|
||||
if "t3" in os.environ.get("COMPOSE_PROFILES", "").split(",")
|
||||
else []
|
||||
)
|
||||
t3code_exposed = (ExposedMcp(name="t3code"),) if t3code_mcps else ()
|
||||
|
||||
# Секреты MCP - только через env подпроцесса (mcp stdio даёт ему белый список
|
||||
# + это), никогда argv: процесс модели видит `ps` всего контейнера.
|
||||
mcps: list[McpServerT] = [
|
||||
@@ -189,6 +199,7 @@ mcps: list[McpServerT] = [
|
||||
McpServer.http(name="telegram", url=os.environ["BEAVERGRAM_MCP"]),
|
||||
*calendar_mcps,
|
||||
*komodo_mcps,
|
||||
*t3code_mcps,
|
||||
]
|
||||
|
||||
# Руки глубокого (§4.4): firefly без delete_*, obsidian-fs не даётся - свои
|
||||
@@ -216,7 +227,8 @@ def dispatcher(name: str, model: str, effort: str | None = None) -> ClaudeAgent:
|
||||
gateway_tools=("read_conversation", "spawn", "say", "schedule"),
|
||||
options=ClaudeOptions(effort=effort, disallowed_tools=DISPATCHER_DISALLOWED),
|
||||
policy=VAULT_POLICY,
|
||||
expose_mcps=CLAUDE_MCPS,
|
||||
# §4.4: t3code - рука диспетчера (мастер, ветки), глубоким не даётся.
|
||||
expose_mcps=(*CLAUDE_MCPS, *t3code_exposed),
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -90,6 +90,16 @@ services:
|
||||
done
|
||||
exec python -m beaver_gateway
|
||||
|
||||
t3code-mcp:
|
||||
container_name: beaver-t3code-mcp
|
||||
build:
|
||||
context: https://git.kotikot.com/beaver/t3code-mcp.git#${T3CODE_MCP_REF:-main}
|
||||
profiles: [t3]
|
||||
<<: *restart
|
||||
env_file: .env
|
||||
volumes:
|
||||
- ./t3code.toml:/config/t3code.toml:ro
|
||||
|
||||
volumes:
|
||||
postgres-data:
|
||||
vault:
|
||||
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
# t3code-mcp (§5): машины с T3 Code и allowlist проектов на каждой.
|
||||
# Токены - только в .env (T3_MAC_TOKEN, T3_DELL_TOKEN), сюда не писать.
|
||||
# projects - fnmatch по названию проекта и по его workspace root.
|
||||
|
||||
[machines.mac]
|
||||
url = "http://mac:3773"
|
||||
token_env = "T3_MAC_TOKEN"
|
||||
projects = ["t3-smoke", "/Users/h/projects/openprise/beaver/*"]
|
||||
model = "claudeAgent/claude-opus-5"
|
||||
options = { effort = "high", contextWindow = "1m" }
|
||||
|
||||
[machines.dell]
|
||||
url = "http://dell:3773"
|
||||
token_env = "T3_DELL_TOKEN"
|
||||
projects = ["/root/projects", "/root/projects/*"]
|
||||
model = "claudeAgent/claude-opus-5"
|
||||
options = { effort = "high", contextWindow = "1m" }
|
||||
Reference in New Issue
Block a user