feat(agent-arka): add web-dashboard installer and instructions
Public curl|bash path for the daemon + browser UI at :4545. Binaries ship as release assets on this repo (private agent-arka source stays private).
This commit is contained in:
1 parent
84dc5874e4
commit
5170fab5e8
4 files changed
+360
No files matched your search
@@ -8,8 +8,17 @@
|
|||||||
|
|
||||||
| Папка | Что |
|
| Папка | Что |
|
||||||
|-------|-----|
|
|-------|-----|
|
||||||
|
| [`agent-arka/`](agent-arka/) | Agent Arka: демон + **веб-дашборд** (`http://127.0.0.1:4545`), установщик и пакеты |
|
||||||
| [`opencode/`](opencode/) | Провайдер OpenCode **Arka-AI**: установщик, плагин, skill, каталог чат-моделей |
|
| [`opencode/`](opencode/) | Провайдер OpenCode **Arka-AI**: установщик, плагин, skill, каталог чат-моделей |
|
||||||
|
|
||||||
|
Agent Arka (веб-интерфейс), Linux / WSL:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://git.arka-ai.ru/arka/public/raw/branch/main/agent-arka/install.sh | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Подробности: [agent-arka/README.md](agent-arka/README.md).
|
||||||
|
|
||||||
OpenCode, macOS / Linux / WSL:
|
OpenCode, macOS / Linux / WSL:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -0,0 +1,110 @@
|
|||||||
|
# Agent Arka — дистрибутив с веб-интерфейсом
|
||||||
|
|
||||||
|
Ставит CLI `agent-arka`, поднимает демон и открывает **веб-дашборд** на `http://127.0.0.1:4545`. Это не приложение Tauri (Dock / NSIS); это агент с браузерным UI.
|
||||||
|
|
||||||
|
Исходники приватны: [`arka/agent-arka`](https://git.arka-ai.ru/arka/agent-arka). Сборки и этот установщик публичные, без токена.
|
||||||
|
|
||||||
|
Версия пакета: **2026.9.1**.
|
||||||
|
|
||||||
|
## Установка (Linux / WSL)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://git.arka-ai.ru/arka/public/raw/branch/main/agent-arka/install.sh | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Скрипт:
|
||||||
|
|
||||||
|
1. Определяет OS/CPU и качает `agent-arka-<версия>-<platform>.tar.gz` из [релизов этого репозитория](https://git.arka-ai.ru/arka/public/releases).
|
||||||
|
2. Проверяет SHA-256.
|
||||||
|
3. Кладёт бинарник в `~/.agent-arka/bin` (если уже есть `~/.librefang` — туда). Совместимое имя `librefang` — симлинк.
|
||||||
|
4. Если нет `config.toml`, запускает `agent-arka init --quick` (Sign in with Arka, случайный пароль оператора печатается один раз).
|
||||||
|
5. Если порт **4545 свободен**, запускает `agent-arka start`.
|
||||||
|
|
||||||
|
Дальше в браузере: [http://127.0.0.1:4545](http://127.0.0.1:4545) → вкладка **Arka AI**.
|
||||||
|
|
||||||
|
Зафиксировать версию:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://git.arka-ai.ru/arka/public/raw/branch/main/agent-arka/install.sh \
|
||||||
|
| AGENT_ARKA_VERSION=2026.9.1 bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Не стартовать демон:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://git.arka-ai.ru/arka/public/raw/branch/main/agent-arka/install.sh \
|
||||||
|
| AGENT_ARKA_AUTO_START=0 bash
|
||||||
|
agent-arka start
|
||||||
|
```
|
||||||
|
|
||||||
|
## Что нужно
|
||||||
|
|
||||||
|
- `curl`, `tar`, `sha256sum` (Linux) или `shasum` (macOS)
|
||||||
|
- glibc: пакет `linux-x86_64` / `linux-aarch64` собран на Ubuntu 22.04 (glibc 2.35) — идёт на Debian/Ubuntu 22.04+
|
||||||
|
- Аккаунт [arka-ai.ru](https://arka-ai.ru) для входа в дашборд
|
||||||
|
- Ключ API для моделей: [arka-ai.ru → API keys](https://arka-ai.ru). Один раз показывается секрет. В `~/.agent-arka/secrets.env` (или `~/.librefang/secrets.env`):
|
||||||
|
|
||||||
|
```
|
||||||
|
ARKA_API_KEY=sk-...
|
||||||
|
```
|
||||||
|
|
||||||
|
После правки `secrets.env` перезапуск: `agent-arka restart`.
|
||||||
|
|
||||||
|
## Платформы
|
||||||
|
|
||||||
|
| Архив | Для кого |
|
||||||
|
|-------|----------|
|
||||||
|
| `agent-arka-*-linux-x86_64.tar.gz` | Linux / WSL, x86_64 (glibc ≥ 2.35) |
|
||||||
|
| `agent-arka-*-linux-aarch64.tar.gz` | Linux aarch64 (Orange Pi, PC162, Ampere; glibc ≥ 2.35) |
|
||||||
|
|
||||||
|
macOS и Windows native в этом релизе **нет** (установщик на Darwin честно завершится с ошибкой скачивания). На Mac — Desktop DMG, когда он опубликован; на Windows — WSL (`wsl --install`) и команда Linux выше.
|
||||||
|
|
||||||
|
## Команды после установки
|
||||||
|
|
||||||
|
```bash
|
||||||
|
agent-arka --version
|
||||||
|
agent-arka start # демон, веб на :4545
|
||||||
|
agent-arka stop
|
||||||
|
agent-arka restart
|
||||||
|
agent-arka doctor
|
||||||
|
```
|
||||||
|
|
||||||
|
Логи: `$HOME/.agent-arka/logs/` (или `.librefang`).
|
||||||
|
|
||||||
|
Порт занят — не убивайте чужой процесс. Либо остановите свой старый демон (`agent-arka stop`), либо задайте другой listen в `config.toml` (`api_listen`).
|
||||||
|
|
||||||
|
## Вход
|
||||||
|
|
||||||
|
На свежей установке в `config.toml` уже включён официальный OIDC-клиент `agent-arka` (PKCE, без секрета). Кнопка **Arka AI** должна быть на экране логина.
|
||||||
|
|
||||||
|
Колбэк по умолчанию: `http://127.0.0.1:4545/api/auth/callback` и `http://localhost:4545/api/auth/callback`. Если открываете дашборд по другому hostname, этот origin должен быть зарегистрирован на IdP — иначе будет «Redirect URI not registered». Для одного пользователя на своей машине открывайте именно `http://127.0.0.1:4545`.
|
||||||
|
|
||||||
|
Пароль вкладки Password — аварийный (`dashboard_user = operator`). Init печатает его один раз.
|
||||||
|
|
||||||
|
## Сборка из исходников (если нет пакета под вашу OS)
|
||||||
|
|
||||||
|
Репозиторий приватный. У кого есть доступ:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo install --git ssh://git@git.arka-ai.ru:4001/arka/agent-arka.git librefang-cli --bin agent-arka
|
||||||
|
agent-arka init --quick
|
||||||
|
agent-arka start
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Agent Arka — web UI distribution
|
||||||
|
|
||||||
|
Installs the `agent-arka` CLI, starts the daemon, and serves the **browser dashboard** at `http://127.0.0.1:4545`. This is not the Tauri desktop app.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://git.arka-ai.ru/arka/public/raw/branch/main/agent-arka/install.sh | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Then open [http://127.0.0.1:4545](http://127.0.0.1:4545) and use **Arka AI** to sign in.
|
||||||
|
|
||||||
|
Pin a version with `AGENT_ARKA_VERSION=2026.9.1`. Skip autostart with `AGENT_ARKA_AUTO_START=0`.
|
||||||
|
|
||||||
|
Put `ARKA_API_KEY` in `~/.agent-arka/secrets.env` (or `~/.librefang/secrets.env` if that home already exists). Create a key at [arka-ai.ru](https://arka-ai.ru).
|
||||||
|
|
||||||
|
Releases (tarballs + `SHA256SUMS`): <https://git.arka-ai.ru/arka/public/releases>
|
||||||
Executable
+233
@@ -0,0 +1,233 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Agent Arka — daemon + web dashboard installer (Linux / macOS / WSL).
|
||||||
|
#
|
||||||
|
# curl -fsSL https://git.arka-ai.ru/arka/public/raw/branch/main/agent-arka/install.sh | bash
|
||||||
|
#
|
||||||
|
# Environment:
|
||||||
|
# AGENT_ARKA_VERSION pin a release (e.g. 2026.9.1). Default: newest agent-arka-v* on git.arka-ai.ru/arka/public
|
||||||
|
# AGENT_ARKA_HOME data dir. Existing ~/.librefang is reused; else ~/.agent-arka
|
||||||
|
# AGENT_ARKA_INSTALL_DIR binary dir (default: $AGENT_ARKA_HOME/bin)
|
||||||
|
# AGENT_ARKA_AUTO_START 1/true/yes to run `agent-arka start` when :4545 is free (default: 1)
|
||||||
|
# AGENT_ARKA_INIT 1 to run `agent-arka init --quick` when no config.toml exists (default: 1)
|
||||||
|
# LIBREFANG_* names for the same keys still work.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
PUBLIC_API="${AGENT_ARKA_PUBLIC_API:-https://git.arka-ai.ru/api/v1}"
|
||||||
|
PUBLIC_DL="${AGENT_ARKA_PUBLIC_DL:-https://git.arka-ai.ru/arka/public/releases/download}"
|
||||||
|
REPO="arka/public"
|
||||||
|
TAG_PREFIX="agent-arka-v"
|
||||||
|
|
||||||
|
if [[ -t 1 && -z "${NO_COLOR:-}" ]]; then
|
||||||
|
C_GREEN=$'\033[32m'
|
||||||
|
C_YELLOW=$'\033[33m'
|
||||||
|
C_RED=$'\033[31m'
|
||||||
|
C_BOLD=$'\033[1m'
|
||||||
|
C_RESET=$'\033[0m'
|
||||||
|
else
|
||||||
|
C_GREEN='' C_YELLOW='' C_RED='' C_BOLD='' C_RESET=''
|
||||||
|
fi
|
||||||
|
|
||||||
|
info() { printf '%s\n' "$*"; }
|
||||||
|
ok() { printf '%s✓%s %s\n' "$C_GREEN" "$C_RESET" "$*"; }
|
||||||
|
warn() { printf '%s⚠%s %s\n' "$C_YELLOW" "$C_RESET" "$*"; }
|
||||||
|
die() { printf '%s✗%s %s\n' "$C_RED" "$C_RESET" "$*" >&2; exit 1; }
|
||||||
|
|
||||||
|
brand_env() {
|
||||||
|
local suffix="$1"
|
||||||
|
local new_name="AGENT_ARKA_${suffix}"
|
||||||
|
local old_name="LIBREFANG_${suffix}"
|
||||||
|
local value="${!new_name:-}"
|
||||||
|
if [[ -n "${value// }" ]]; then
|
||||||
|
printf '%s\n' "$value"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
value="${!old_name:-}"
|
||||||
|
if [[ -n "${value// }" ]]; then
|
||||||
|
printf '%s\n' "$value"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
is_on() {
|
||||||
|
case "${1:-}" in
|
||||||
|
1|true|TRUE|yes|YES|on|ON) return 0 ;;
|
||||||
|
*) return 1 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
detect_platform() {
|
||||||
|
local os arch
|
||||||
|
os=$(uname -s | tr '[:upper:]' '[:lower:]')
|
||||||
|
arch=$(uname -m)
|
||||||
|
case "$arch" in
|
||||||
|
x86_64|amd64) arch="x86_64" ;;
|
||||||
|
aarch64|arm64) arch="aarch64" ;;
|
||||||
|
*) die "Unsupported architecture: $arch" ;;
|
||||||
|
esac
|
||||||
|
case "$os" in
|
||||||
|
linux) PLATFORM="linux-${arch}" ;;
|
||||||
|
darwin) PLATFORM="darwin-${arch}" ;;
|
||||||
|
mingw*|msys*|cygwin*)
|
||||||
|
die "On Windows use WSL, then this installer, or wait for the Desktop NSIS build. PowerShell: wsl --install"
|
||||||
|
;;
|
||||||
|
*) die "Unsupported OS: $os" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve_home() {
|
||||||
|
local override
|
||||||
|
if override=$(brand_env HOME 2>/dev/null); then
|
||||||
|
HOME_DIR="$override"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
if [[ -d "${HOME}/.librefang" ]]; then
|
||||||
|
HOME_DIR="${HOME}/.librefang"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
HOME_DIR="${HOME}/.agent-arka"
|
||||||
|
}
|
||||||
|
|
||||||
|
port_in_use() {
|
||||||
|
local port="$1"
|
||||||
|
if command -v ss >/dev/null 2>&1; then
|
||||||
|
ss -ltn 2>/dev/null | grep -qE ":${port}([[:space:]]|$)"
|
||||||
|
return $?
|
||||||
|
fi
|
||||||
|
if command -v lsof >/dev/null 2>&1; then
|
||||||
|
lsof -iTCP:"$port" -sTCP:LISTEN >/dev/null 2>&1
|
||||||
|
return $?
|
||||||
|
fi
|
||||||
|
(echo >/dev/tcp/127.0.0.1/"$port") >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch_latest_version() {
|
||||||
|
local json tags
|
||||||
|
json=$(curl -fsSL "${PUBLIC_API}/repos/${REPO}/releases?limit=50") || die "Cannot list releases at ${PUBLIC_API}/repos/${REPO}/releases"
|
||||||
|
tags=$(printf '%s' "$json" | grep -oE '"tag_name":[[:space:]]*"'"${TAG_PREFIX}"'[^"]+"' | sed 's/.*"'"${TAG_PREFIX}"'//;s/"$//' || true)
|
||||||
|
if [[ -z "$tags" ]]; then
|
||||||
|
die "No ${TAG_PREFIX}* releases on ${REPO} yet"
|
||||||
|
fi
|
||||||
|
printf '%s\n' "$tags" | head -n 1
|
||||||
|
}
|
||||||
|
|
||||||
|
sha256_file() {
|
||||||
|
if command -v sha256sum >/dev/null 2>&1; then
|
||||||
|
sha256sum "$1" | awk '{print $1}'
|
||||||
|
elif command -v shasum >/dev/null 2>&1; then
|
||||||
|
shasum -a 256 "$1" | awk '{print $1}'
|
||||||
|
else
|
||||||
|
die "Need sha256sum or shasum"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_path() {
|
||||||
|
local bindir="$1"
|
||||||
|
case ":$PATH:" in
|
||||||
|
*":${bindir}:"*) return 0 ;;
|
||||||
|
esac
|
||||||
|
local line="export PATH=\"${bindir}:\$PATH\""
|
||||||
|
local rc
|
||||||
|
for rc in "${HOME}/.zprofile" "${HOME}/.zshrc" "${HOME}/.bash_profile" "${HOME}/.bashrc" "${HOME}/.profile"; do
|
||||||
|
[[ -f "$rc" ]] || continue
|
||||||
|
if grep -Fqs "$bindir" "$rc"; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [[ -n "${SHELL:-}" && "${SHELL}" == *zsh* ]]; then
|
||||||
|
rc="${HOME}/.zshrc"
|
||||||
|
else
|
||||||
|
rc="${HOME}/.bashrc"
|
||||||
|
[[ -f "$rc" ]] || rc="${HOME}/.profile"
|
||||||
|
fi
|
||||||
|
printf '\n# Agent Arka\n%s\n' "$line" >>"$rc"
|
||||||
|
warn "Added ${bindir} to PATH in ${rc} (open a new shell, or: source ${rc})"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
printf '%s\n' "${C_BOLD}Agent Arka${C_RESET} — web dashboard installer"
|
||||||
|
command -v curl >/dev/null 2>&1 || die "curl is required"
|
||||||
|
command -v tar >/dev/null 2>&1 || die "tar is required"
|
||||||
|
|
||||||
|
detect_platform
|
||||||
|
resolve_home
|
||||||
|
local bindir
|
||||||
|
if bindir=$(brand_env INSTALL_DIR 2>/dev/null); then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
bindir="${HOME_DIR}/bin"
|
||||||
|
fi
|
||||||
|
mkdir -p "$bindir" "$HOME_DIR"
|
||||||
|
|
||||||
|
local version
|
||||||
|
if version=$(brand_env VERSION 2>/dev/null); then
|
||||||
|
version="${version#v}"
|
||||||
|
version="${version#agent-arka-v}"
|
||||||
|
info "Using pinned version ${version}"
|
||||||
|
else
|
||||||
|
info "Resolving latest Agent Arka release…"
|
||||||
|
version=$(fetch_latest_version)
|
||||||
|
info "Latest: ${version}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local tag="${TAG_PREFIX}${version}"
|
||||||
|
local asset="agent-arka-${version}-${PLATFORM}.tar.gz"
|
||||||
|
local url="${PUBLIC_DL}/${tag}/${asset}"
|
||||||
|
local sums_url="${PUBLIC_DL}/${tag}/SHA256SUMS"
|
||||||
|
local tmp
|
||||||
|
tmp=$(mktemp -d)
|
||||||
|
trap 'rm -rf "$tmp"' EXIT
|
||||||
|
|
||||||
|
info "Downloading ${asset}"
|
||||||
|
if ! curl -fL --retry 3 -o "${tmp}/${asset}" "$url"; then
|
||||||
|
die "No package for ${PLATFORM} in ${tag}. See https://git.arka-ai.ru/arka/public/releases"
|
||||||
|
fi
|
||||||
|
curl -fsSL -o "${tmp}/SHA256SUMS" "$sums_url" || die "Missing SHA256SUMS for ${tag}"
|
||||||
|
local expected actual
|
||||||
|
expected=$(grep -E "[[:space:]]${asset}\$" "${tmp}/SHA256SUMS" | awk '{print $1}' | head -n 1)
|
||||||
|
[[ -n "$expected" ]] || die "SHA256SUMS has no entry for ${asset}"
|
||||||
|
actual=$(sha256_file "${tmp}/${asset}")
|
||||||
|
[[ "$expected" == "$actual" ]] || die "SHA256 mismatch for ${asset} (got ${actual}, want ${expected})"
|
||||||
|
ok "Checksum ok"
|
||||||
|
|
||||||
|
tar -xzf "${tmp}/${asset}" -C "$tmp"
|
||||||
|
[[ -f "${tmp}/agent-arka" ]] || die "Archive did not contain agent-arka"
|
||||||
|
chmod 755 "${tmp}/agent-arka"
|
||||||
|
"${tmp}/agent-arka" --version >/dev/null || die "Downloaded binary failed to run on this host"
|
||||||
|
cp -f "${tmp}/agent-arka" "${bindir}/agent-arka"
|
||||||
|
ln -sfn agent-arka "${bindir}/librefang"
|
||||||
|
ok "Installed ${bindir}/agent-arka ($("${bindir}/agent-arka" --version 2>/dev/null | head -n 1))"
|
||||||
|
|
||||||
|
ensure_path "$bindir"
|
||||||
|
export PATH="${bindir}:$PATH"
|
||||||
|
|
||||||
|
local do_init do_start
|
||||||
|
do_init=$(brand_env INIT 2>/dev/null || echo 1)
|
||||||
|
do_start=$(brand_env AUTO_START 2>/dev/null || echo 1)
|
||||||
|
|
||||||
|
if is_on "$do_init" && [[ ! -f "${HOME_DIR}/config.toml" ]]; then
|
||||||
|
info "First run: agent-arka init --quick"
|
||||||
|
AGENT_ARKA_HOME="${HOME_DIR}" LIBREFANG_HOME="${HOME_DIR}" "${bindir}/agent-arka" init --quick || warn "init --quick failed; run: agent-arka init"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if is_on "$do_start"; then
|
||||||
|
if port_in_use 4545; then
|
||||||
|
warn "Port 4545 is already in use — not starting a second daemon"
|
||||||
|
else
|
||||||
|
info "Starting daemon"
|
||||||
|
AGENT_ARKA_HOME="${HOME_DIR}" LIBREFANG_HOME="${HOME_DIR}" "${bindir}/agent-arka" start || warn "agent-arka start failed"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '\n'
|
||||||
|
ok "Open the web UI: ${C_BOLD}http://127.0.0.1:4545${C_RESET}"
|
||||||
|
info "Sign in with Arka AI (account at https://arka-ai.ru)."
|
||||||
|
info "For models, put ARKA_API_KEY in ${HOME_DIR}/secrets.env (create a key at https://arka-ai.ru)."
|
||||||
|
info "Docs: https://git.arka-ai.ru/arka/public/src/branch/main/agent-arka"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ "${AGENT_ARKA_INSTALLER_SOURCE_ONLY:-}" == 1 ]]; then
|
||||||
|
return 0 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
main "$@"
|
||||||
Executable
+8
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Compatibility stub. Canonical installer:
|
||||||
|
# https://git.arka-ai.ru/arka/public/raw/branch/main/agent-arka/install.sh
|
||||||
|
set -euo pipefail
|
||||||
|
echo "==> installer lives at agent-arka/install.sh" >&2
|
||||||
|
curl -fsSL \
|
||||||
|
'https://git.arka-ai.ru/arka/public/raw/branch/main/agent-arka/install.sh' \
|
||||||
|
| bash -s -- "$@"
|
||||||
Reference in new issue
Block a user