feat(config,mcps,policy,compose): komodo alerts with hold, vibegram and ha python_tools, vault rw home zones
This commit is contained in:
+44
-17
@@ -55,19 +55,15 @@ services:
|
||||
- ./policy.py:/config/policy.py:ro
|
||||
- ./mcps:/config/mcps:ro
|
||||
- ./config.json:/config/config.json:ro
|
||||
# §3.7: vault только на чтение, rw - подмонтирования зон агента.
|
||||
- vault:/vault:ro
|
||||
- type: volume
|
||||
source: vault
|
||||
target: /vault/мета/бобер
|
||||
volume:
|
||||
subpath: мета/бобер
|
||||
- type: volume
|
||||
source: vault
|
||||
target: /vault/💬 чаты
|
||||
volume:
|
||||
subpath: 💬 чаты
|
||||
# §3.7: vault - дом диспетчера, rw целиком; границы (`.obsidian`,
|
||||
# `мета` вне `бобер`, удаление чужого) держит policy.py (2026-08-30).
|
||||
- vault:/vault
|
||||
# клон репы комнаты вайбграма (сервис vibegram-repo), только читать
|
||||
- vibegram:/vibegram:ro
|
||||
- claude-home:/home/beaver-runner/.claude
|
||||
extra_hosts:
|
||||
# Home Assistant и прочее с network_mode: host
|
||||
- "host.docker.internal:host-gateway"
|
||||
healthcheck:
|
||||
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:62990/healthz', timeout=3)"]
|
||||
interval: 30s
|
||||
@@ -83,11 +79,10 @@ services:
|
||||
mkdir -p /home/$$runner/.claude
|
||||
[ -e /home/$$runner/.claude/.claude.json ] || echo '{}' > /home/$$runner/.claude/.claude.json
|
||||
chown -R $$runner /home/$$runner
|
||||
for d in "/vault/мета/бобер" "/vault/💬 чаты"; do
|
||||
setfacl -R -m "u:$$runner:rwX" -m "d:u:$$runner:rwX" "$$d" \
|
||||
|| chown -R $$runner "$$d" \
|
||||
|| echo "warning: cannot grant $$runner write access to $$d"
|
||||
done
|
||||
# ACL, не chown: Obsidian Sync переписывает файлы под root, а default-ACL
|
||||
# на папках даёт runner'у права и на то, что появится позже.
|
||||
setfacl -R -m "u:$$runner:rwX" -m "d:u:$$runner:rwX" /vault \
|
||||
|| echo "warning: cannot grant $$runner write access to /vault"
|
||||
exec python -m beaver_gateway
|
||||
|
||||
t3code-mcp:
|
||||
@@ -105,9 +100,41 @@ services:
|
||||
- ./t3code.toml:/config/t3code.toml:ro
|
||||
- t3code-state:/data
|
||||
|
||||
vibegram-repo:
|
||||
container_name: beaver-vibegram-repo
|
||||
image: alpine/git:latest
|
||||
profiles: [vibegram]
|
||||
<<: *restart
|
||||
env_file: .env
|
||||
volumes:
|
||||
- vibegram:/vibegram
|
||||
# Клон репы комнаты и pull раз в 10 минут. Токен - только заголовком
|
||||
# через GIT_CONFIG_*, в .git/config он не попадает: том читает модель.
|
||||
entrypoint:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- |
|
||||
repo="$${VIBEGRAM_REPO:?VIBEGRAM_REPO=org/repo}"
|
||||
dir="/vibegram/$${repo##*/}"
|
||||
if [ -n "$$VIBEGRAM_REPO_TOKEN" ]; then
|
||||
export GIT_CONFIG_COUNT=1
|
||||
export GIT_CONFIG_KEY_0="http.https://github.com/.extraheader"
|
||||
export GIT_CONFIG_VALUE_0="AUTHORIZATION: basic $$(printf 'x-access-token:%s' "$$VIBEGRAM_REPO_TOKEN" | base64 | tr -d '\n')"
|
||||
fi
|
||||
while true; do
|
||||
if [ -d "$$dir/.git" ]; then
|
||||
git -C "$$dir" pull -q --ff-only || echo "vibegram-repo: pull failed"
|
||||
else
|
||||
git clone -q "https://github.com/$$repo.git" "$$dir" || echo "vibegram-repo: clone failed"
|
||||
fi
|
||||
chmod -R a+rX "$$dir" 2>/dev/null
|
||||
sleep "$${VIBEGRAM_PULL_SECONDS:-600}"
|
||||
done
|
||||
|
||||
volumes:
|
||||
t3code-state:
|
||||
postgres-data:
|
||||
vault:
|
||||
vibegram:
|
||||
obsidian-config:
|
||||
claude-home:
|
||||
|
||||
Reference in New Issue
Block a user