From 4434fbf951d06a721597e805094069477851178e Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Sun, 21 Jun 2026 20:26:39 +0900 Subject: feat: standalone build + systemd install (Arch Linux) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bin/build: compiles standalone binaries (dispatch-server + dispatch CLI) via bun build --compile, builds the frontend static bundle with VITE_HTTP_PORT=24991 + VITE_WS_PORT=24990, copies to dist/web/. bin/install: installs binaries to /usr/bin/, frontend to /usr/share/dispatch/web/, systemd service to /etc/systemd/system/, config to /etc/dispatch/env, data dirs to /var/lib/dispatch/ + /var/log/dispatch/. Enables + starts the dispatch systemd service. Supports --uninstall and --no-build flags. systemd/dispatch.service: Type=simple, reads /etc/dispatch/env, restarts on failure, logs to journald. systemd/dispatch.env: template config (ports 24991 HTTP + 24990 WS, DISPATCH_WEB_DIR, API key, data paths). transport-http: optional webDir static file serving — unmatched GET requests fall through to Bun.file() serving with SPA index.html fallback. Gated on DISPATCH_WEB_DIR env var (backward compatible). --- systemd/dispatch.env | 29 +++++++++++++++++++++++++++++ systemd/dispatch.service | 17 +++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 systemd/dispatch.env create mode 100644 systemd/dispatch.service (limited to 'systemd') diff --git a/systemd/dispatch.env b/systemd/dispatch.env new file mode 100644 index 0000000..37887cb --- /dev/null +++ b/systemd/dispatch.env @@ -0,0 +1,29 @@ +# /etc/dispatch/env — Dispatch server configuration (systemd EnvironmentFile) +# Copy this to /etc/dispatch/env and fill in the values. + +# ─── Ports ─────────────────────────────────────────────────────────────────── +# Backend HTTP (serves API + frontend static files) +BACKEND_PORT=24991 +# Surface WebSocket (frontend live updates + surfaces) +SURFACE_WS_PORT=24990 + +# ─── Frontend ──────────────────────────────────────────────────────────────── +# Directory containing the built frontend static files (served by the backend) +DISPATCH_WEB_DIR=/usr/share/dispatch/web + +# ─── Provider (OpenCode Go / OpenAI-compatible) ────────────────────────────── +DISPATCH_API_KEY=sk-... +DISPATCH_BASE_URL=https://opencode.ai/zen/go/v1 +DISPATCH_MODEL=deepseek-v4-flash + +# ─── Umans provider (optional, set key to enable) ──────────────────────────── +# UMANS_API_KEY=sk-... + +# ─── Data paths ────────────────────────────────────────────────────────────── +DISPATCH_DB=/var/lib/dispatch/dispatch.db +DISPATCH_TRACE_DB=/var/lib/dispatch/traces.db +DISPATCH_JOURNAL=/var/log/dispatch/app.ndjson + +# ─── Observability ─────────────────────────────────────────────────────────── +# Trace DB path (defaults to ./traces.db if unset) +# DISPATCH_TRACE_DB=/var/lib/dispatch/traces.db diff --git a/systemd/dispatch.service b/systemd/dispatch.service new file mode 100644 index 0000000..88e8352 --- /dev/null +++ b/systemd/dispatch.service @@ -0,0 +1,17 @@ +[Unit] +Description=Dispatch AI Agent Server +After=network.target + +[Service] +Type=simple +ExecStart=/usr/bin/dispatch-server +EnvironmentFile=/etc/dispatch/env +WorkingDirectory=/var/lib/dispatch +Restart=on-failure +RestartSec=5 +# Journal the output +StandardOutput=journal +StandardError=journal + +[Install] +WantedBy=multi-user.target -- cgit v1.2.3