Feature: strukturerade verktygsgodkännanden
- shared: protokoll för approval (daemon:approval, server:approval[-resolved],
web:approval-decision, server:approval-decision)
- daemon: hook-läge ('agent-helm hook' — samma binär), lokal 127.0.0.1-endpoint
som hooken POST:ar till, long-poll tills beslut; graceful default (allow) när
ingen UI; timeout-fallback; skickar AGENT_HELM_HOOK_PORT till agentens env
- server: routar daemon:approval -> prenumeranter, beslut -> daemon + döljer kort
- web: reaktiv approvals-lista + kort-overlay (Tillåt/Neka), mobilanpassad
CI:
- release.yaml triggar nu även på master-push -> rullande 'latest'-release
(versionerade releaser kvar på v*-taggar); install.sh hämtar 'latest'
Docs: hook-konfig (gemini settings.json) + hook-env i .env.example + DEPLOY.md.
Säkerhet: hook-endpoint binder endast 127.0.0.1; inga hemligheter i repot.
Verifierat lokalt: hook->daemon->server->kort->beslut->hook ger {"decision":"allow"};
alla paket typecheckar; web bygger.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
94 lines
2.8 KiB
Bash
Executable File
94 lines
2.8 KiB
Bash
Executable File
#!/bin/sh
|
|
# agent-helm — klient-installer (självständig binär, Node + node-pty inbäddat).
|
|
#
|
|
# curl -fsSL https://gitea.brasse-pc.eu/brasse/agent-helm/raw/branch/main/install.sh | sh
|
|
#
|
|
# Valfria env-vars (annars defaults / fyll i config efteråt):
|
|
# AGENT_HELM_TOKEN=... delad token mot servern
|
|
# AGENT_HELM_SERVER=wss://... server-URL (default wss://rcai.brasse-pc.eu)
|
|
# AGENT_CMD=gemini kommandot som körs i pty:n
|
|
# PREFIX=/usr/local install-prefix för binären
|
|
set -eu
|
|
|
|
OWNER=brasse
|
|
REPO=agent-helm
|
|
BASE=https://gitea.brasse-pc.eu
|
|
API="$BASE/api/v1/repos/$OWNER/$REPO"
|
|
|
|
# --- OS + arkitektur ---
|
|
[ "$(uname -s)" = "Linux" ] || { echo "agent-helm: bara Linux stöds just nu"; exit 1; }
|
|
case "$(uname -m)" in
|
|
x86_64|amd64) ARCH=x64 ;;
|
|
aarch64|arm64) ARCH=arm64 ;;
|
|
*) echo "agent-helm: arkitektur $(uname -m) stöds inte (endast x64/arm64)"; exit 1 ;;
|
|
esac
|
|
ASSET="agent-helm-linux-$ARCH"
|
|
|
|
command -v curl >/dev/null 2>&1 || { echo "agent-helm: curl krävs"; exit 1; }
|
|
|
|
# --- version: 'latest' (rullande master-bygge) om inget annat anges ---
|
|
TAG="${AGENT_HELM_VERSION:-latest}"
|
|
URL="$BASE/$OWNER/$REPO/releases/download/$TAG/$ASSET"
|
|
|
|
# --- bin-katalog: /usr/local/bin om root/skrivbar, annars ~/.local/bin (ingen sudo).
|
|
# För system-wide utan att vara root: curl -fsSL ... | sudo sh
|
|
PREFIX="${PREFIX:-/usr/local}"
|
|
if [ "$(id -u)" = 0 ] || { mkdir -p "$PREFIX/bin" 2>/dev/null && [ -w "$PREFIX/bin" ]; }; then
|
|
BIN="$PREFIX/bin"
|
|
else
|
|
BIN="$HOME/.local/bin"
|
|
fi
|
|
mkdir -p "$BIN"
|
|
|
|
echo "agent-helm: hämtar $ASSET ($TAG) -> $BIN/agent-helm"
|
|
tmp=$(mktemp)
|
|
curl -fSL "$URL" -o "$tmp"
|
|
chmod +x "$tmp"
|
|
install -m 0755 "$tmp" "$BIN/agent-helm"
|
|
rm -f "$tmp"
|
|
|
|
# --- config ---
|
|
CFGDIR="$HOME/.config/agent-helm"
|
|
CFG="$CFGDIR/config.env"
|
|
mkdir -p "$CFGDIR"
|
|
if [ ! -f "$CFG" ]; then
|
|
cat > "$CFG" <<EOF
|
|
# agent-helm klient-config
|
|
AGENT_HELM_TOKEN=${AGENT_HELM_TOKEN:-}
|
|
SERVER_URL=${AGENT_HELM_SERVER:-wss://rcai.brasse-pc.eu}
|
|
AGENT_CMD=${AGENT_CMD:-gemini}
|
|
# AGENT_CWD=/sökväg/till/projekt
|
|
EOF
|
|
chmod 600 "$CFG"
|
|
echo "agent-helm: config skapad: $CFG"
|
|
else
|
|
echo "agent-helm: behåller befintlig config: $CFG"
|
|
fi
|
|
|
|
# --- systemd user-service (valfri) ---
|
|
UNITDIR="$HOME/.config/systemd/user"
|
|
mkdir -p "$UNITDIR"
|
|
cat > "$UNITDIR/agent-helm.service" <<EOF
|
|
[Unit]
|
|
Description=agent-helm klient (daemon)
|
|
After=network-online.target
|
|
|
|
[Service]
|
|
EnvironmentFile=$CFG
|
|
ExecStart=$BIN/agent-helm
|
|
Restart=on-failure
|
|
RestartSec=3
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
EOF
|
|
|
|
echo ""
|
|
echo " ✓ installerad: $BIN/agent-helm (version $TAG, $ARCH)"
|
|
case ":$PATH:" in *":$BIN:"*) ;; *) echo " ⚠ lägg till $BIN i din PATH";; esac
|
|
echo ""
|
|
echo " Nästa steg:"
|
|
echo " 1) sätt token: \${EDITOR:-nano} $CFG"
|
|
echo " 2a) kör direkt: set -a; . $CFG; agent-helm"
|
|
echo " 2b) eller som tjänst: systemctl --user daemon-reload && systemctl --user enable --now agent-helm"
|