Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
6f302ce
fix(theme): repaint backdrop-filter layers when the tab becomes visib…
jaylfc Jun 14, 2026
b26e739
docs(status): freshness sweep -- reflect #889 release, #891 Safari fi…
jaylfc Jun 14, 2026
92f3437
docs(status): 3060 backend built but blocked on shared-GPU contention…
jaylfc Jun 14, 2026
f48418a
fix(theme): scope the repaint guard to WebKit + gate pageshow to bfca…
jaylfc Jun 14, 2026
8a85046
feat(projects): export_storybook agent tool -> illustrated children's…
jaylfc Jun 14, 2026
b84193e
docs(status): 3060 SD backend LIVE + wired end-to-end (task #34 done)…
jaylfc Jun 14, 2026
cee487e
docs(status): record architecture issues filed this session (#896 con…
jaylfc Jun 14, 2026
a74f12c
fix(theme): purple/indigo flash on load -- match the active theme
jaylfc Jun 14, 2026
7d2fbc5
fix(theme): kill the mobile-PWA purple (manifest splash + server logi…
jaylfc Jun 14, 2026
f20ee42
docs(status): wind-down handoff -- theming #899 (backend manifest/log…
jaylfc Jun 14, 2026
e279804
fix(theme): chat-pwa iOS splash + theme-color were still indigo (the …
jaylfc Jun 14, 2026
c6a089f
fix(theme): Safari top/bottom bars white -> dark document canvas + co…
jaylfc Jun 14, 2026
3965750
fix(theme): chat-pwa mobile top bar was hardcoded indigo -> theme gla…
jaylfc Jun 14, 2026
3599170
fix(deps): cap fastapi <0.137 (0.137.0 include_router regression)
jaylfc Jun 14, 2026
d99b6a9
Merge pull request #902 from jaylfc/fix/pin-fastapi-include-router
jaylfc Jun 14, 2026
adfd02a
Merge remote-tracking branch 'origin/dev' into fix/purple-flash-theme…
jaylfc Jun 14, 2026
04a46a6
Merge remote-tracking branch 'origin/dev' into feat/storybook-pdf-export
jaylfc Jun 14, 2026
ff4a3e3
Merge remote-tracking branch 'origin/dev' into fix/webkit-backdrop-re…
jaylfc Jun 14, 2026
9f7770a
Merge pull request #891 from jaylfc/fix/webkit-backdrop-repaint-on-vi…
jaylfc Jun 14, 2026
cbe4d53
Merge pull request #899 from jaylfc/fix/purple-flash-theme-aware-load
jaylfc Jun 14, 2026
f57edde
Merge pull request #895 from jaylfc/feat/storybook-pdf-export
jaylfc Jun 14, 2026
1efefdf
fix(catalog): write real install scripts for entries with missing scr…
jaylfc Jun 14, 2026
90439c2
docs(status): merge train landed on dev; #904 catalog scripts in flight
jaylfc Jun 14, 2026
288c729
fix(catalog): bind new services to the managed high port pool, not co…
jaylfc Jun 14, 2026
b55142e
fix(catalog): address gitar review on install scripts
jaylfc Jun 14, 2026
05f649e
fix(catalog): port hygiene for host-binding services + audit guard
jaylfc Jun 14, 2026
37b95db
Merge pull request #904 from jaylfc/fix/catalog-install-scripts
jaylfc Jun 14, 2026
e5ce894
fix(catalog): address gitar review on port-hygiene PR
jaylfc Jun 14, 2026
386bb5e
fix(catalog): tailscale SHA256 verification fail-closed by default
jaylfc Jun 14, 2026
b12fd1c
Merge pull request #905 from jaylfc/fix/catalog-port-hygiene
jaylfc Jun 14, 2026
e47dea9
docs(status): #904+#905 merged to dev; Images Studio app + Pi-on-dev
jaylfc Jun 14, 2026
1ad552d
feat(images): Images Studio app (Create / Library / Edit)
jaylfc Jun 14, 2026
950a2f7
feat(images): tier-aware AI edit backends (IOPaint + scheduler routing)
jaylfc Jun 14, 2026
a9d3663
docs(status): Images Studio verified (#906 ready) + edit backends (#9…
jaylfc Jun 14, 2026
774bdfd
feat(agents): glossy gradient identity tiles (Store DNA)
jaylfc Jun 14, 2026
7cf4e31
feat(agents): richer Store-style agent cards
jaylfc Jun 14, 2026
ab267d4
feat(contacts): bring Contacts up to the Store design bar
jaylfc Jun 14, 2026
255b69c
docs(status): design sweep batch 1 (Agents #908 ready, Contacts #909)…
jaylfc Jun 14, 2026
e0f47e4
fix(images): re-roll uses the source image's params, not stale state
jaylfc Jun 14, 2026
30fdbf8
fix(images-edit): dispatch by backend type + unique result filenames
jaylfc Jun 14, 2026
fd8dcaf
fix(agents): agent card actions stay visible on touch / no-hover devices
jaylfc Jun 14, 2026
46f3940
Merge pull request #906 from jaylfc/feat/images-studio
jaylfc Jun 14, 2026
a34b59b
Merge pull request #908 from jaylfc/feat/agents-cards
jaylfc Jun 14, 2026
d6eed13
Merge pull request #907 from jaylfc/feat/images-edit-backends
jaylfc Jun 14, 2026
fa64156
Merge pull request #909 from jaylfc/feat/contacts-polish
jaylfc Jun 14, 2026
2f0fb8c
docs(status): post-reset merge train -- #906/#907/#908/#909 on dev
jaylfc Jun 14, 2026
2ba4c32
feat(messages): read-only view of the taOSmd A2A coordination bus (#45)
jaylfc Jun 14, 2026
bf602a5
feat(files): right-click context menu with copy / cut / paste / delete
jaylfc Jun 14, 2026
4d198ae
fix(messages): a2a bus selection, scroll, and time-helper review fixes
jaylfc Jun 14, 2026
7475998
fix(files): workspace-only copy/rename, same-dir paste, off-thread copy
jaylfc Jun 14, 2026
9953022
feat(weather): bring Weather app up to the Store/Images design bar
jaylfc Jun 14, 2026
eaa8729
Merge pull request #910 from jaylfc/feat/a2a-bus-messages
jaylfc Jun 14, 2026
f32af22
Merge pull request #911 from jaylfc/feat/files-context-menu
jaylfc Jun 14, 2026
fed3864
Merge pull request #912 from jaylfc/feat/weather-polish
jaylfc Jun 14, 2026
7ea5e6f
docs(status): second merge batch (#910/#911/#912) on dev + mobile audit
jaylfc Jun 14, 2026
5a671a7
fix(mobile): app content and action bars clear the dock on phone view…
jaylfc Jun 14, 2026
4760c08
Merge pull request #913 from jaylfc/fix/mobile-dock-clipping
jaylfc Jun 14, 2026
c1ab1c1
docs(status): #913 mobile dock-clearing fix merged + verified at 390px
jaylfc Jun 14, 2026
aa66c7d
feat(apps): bring Activity and Media Player up to the Store design bar
jaylfc Jun 14, 2026
97310ed
Merge pull request #914 from jaylfc/feat/utility-apps-polish
jaylfc Jun 14, 2026
cd18d04
docs(status): #914 utility-app polish merged; mockups queued for GitH…
jaylfc Jun 14, 2026
3c7a3e4
fix(contextmenu): only reserve dock space on mobile, not desktop
jaylfc Jun 14, 2026
910f643
Merge pull request #915 from jaylfc/fix/contextmenu-desktop-reserve
jaylfc Jun 14, 2026
7fa15eb
feat(reddit): redesign to the approved Store/Images design bar
jaylfc Jun 14, 2026
c6b4b64
feat(messages): redesign to the approved Store/Images design bar
jaylfc Jun 14, 2026
f565ba5
feat(github): redesign to the approved Store/Images design bar
jaylfc Jun 14, 2026
8917df1
feat(deploy): inject agent-granted secrets into the agent environment
jaylfc Jun 14, 2026
5f9497f
docs(status): 3 approved redesigns + secrets-inject prerequisite in f…
jaylfc Jun 14, 2026
fa9dd7a
fix(reddit): monitored-item active state and clickable search submit
jaylfc Jun 14, 2026
a0c2f45
fix(messages): de-duplicate bus author header and register new tokens
jaylfc Jun 14, 2026
e92b1e2
fix(deploy): warn and skip on secret-to-secret env name collision
jaylfc Jun 14, 2026
22b6815
fix(github): restore status colors, issue tabs, and escape-to-back
jaylfc Jun 14, 2026
58a55ba
Merge pull request #919 from jaylfc/feat/secrets-inject-on-deploy
jaylfc Jun 15, 2026
2b6645e
Merge pull request #918 from jaylfc/feat/github-redesign
jaylfc Jun 15, 2026
ee72cd5
Merge pull request #916 from jaylfc/feat/reddit-redesign
jaylfc Jun 15, 2026
e95985a
Merge pull request #917 from jaylfc/feat/messages-redesign
jaylfc Jun 15, 2026
303c434
docs(status): 3 app redesigns + secrets-inject merged, gitar findings…
jaylfc Jun 15, 2026
96ceb3a
fix(github): format metadata date and make escape-to-back view-wide
jaylfc Jun 15, 2026
11e366a
Merge pull request #920 from jaylfc/fix/github-detail-polish
jaylfc Jun 15, 2026
0d0929b
docs(status): #920 GitHub detail polish merged; redesign batch findin…
jaylfc Jun 15, 2026
684fd07
feat(apps): polish game and terminal app chrome to the Store design bar
jaylfc Jun 15, 2026
586b402
fix(github): scope escape-to-back to the app, not the global window
jaylfc Jun 15, 2026
b261425
Merge pull request #921 from jaylfc/feat/games-terminal-polish
jaylfc Jun 15, 2026
d6f58f2
Merge pull request #922 from jaylfc/fix/github-escape-scope
jaylfc Jun 15, 2026
975876f
docs(status): #921/#922 merged; #44 design sweep complete
jaylfc Jun 15, 2026
78a3cb7
feat(images-edit): FLUX Fill client for the quality inpaint/outpaint …
jaylfc Jun 15, 2026
9ed199c
chore(deps): bump desktop spa-deps (supersedes #876)
jaylfc Jun 15, 2026
6fbeeff
feat(catalog): FLUX.1-Fill GPU edit backend install script + manifest…
jaylfc Jun 15, 2026
38897e7
fix(images-edit): send width and height in the FLUX Fill img2img payload
jaylfc Jun 15, 2026
ff92359
Merge pull request #924 from jaylfc/chore/spa-deps-bump
jaylfc Jun 15, 2026
7b3769a
Merge pull request #925 from jaylfc/feat/flux-fill-backend-install
jaylfc Jun 15, 2026
3563cc1
Merge pull request #923 from jaylfc/feat/flux-fill-client
jaylfc Jun 15, 2026
c845853
docs(status): #43 done (FLUX Fill verified + client + install script)…
jaylfc Jun 15, 2026
5449ddf
fix(catalog): harden flux-fill installer (bind, resume, curl check)
jaylfc Jun 15, 2026
717893b
feat(theme): add opt-in Indigo theme with neural wallpaper default
jaylfc Jun 15, 2026
4f7e71a
build(deps): commit a Python lockfile and install from it in CI (#40)
jaylfc Jun 15, 2026
d510129
feat(models): register arctic-embed-s in the model store (#27)
jaylfc Jun 15, 2026
e3f8c7e
Merge pull request #926 from jaylfc/fix/flux-fill-install-hardening
jaylfc Jun 15, 2026
cef24da
Merge pull request #927 from jaylfc/feat/indigo-theme
jaylfc Jun 15, 2026
aabdfc4
Merge pull request #929 from jaylfc/feat/register-arctic-embed-s
jaylfc Jun 15, 2026
0be3ded
fix(ci): install the tinyagentos package in the uv-based CI env
jaylfc Jun 15, 2026
ca0fbf6
docs(status): backlog push -- #927 indigo + #929 arctic-embed merged,…
jaylfc Jun 15, 2026
d07372c
fix: address gitar findings on merged backlog PRs (model url, theme w…
jaylfc Jun 15, 2026
4a441e4
Merge pull request #928 from jaylfc/feat/python-deps-lock
jaylfc Jun 15, 2026
d93ef73
fix(images-edit): strip mask data-uri, reject non-image responses, su…
jaylfc Jun 15, 2026
b1e2db6
fix(theme): do not clobber persisted wallpaper on theme restore
jaylfc Jun 15, 2026
d059984
fix(catalog): register image-edit backends via lifecycle so the edit …
jaylfc Jun 15, 2026
befe092
fix(flux-fill): bind sd-server to loopback by default (taOS-only)
jaylfc Jun 15, 2026
80db737
fix(test): repair the safety-regression test (root cause, not a skip)
jaylfc Jun 15, 2026
d98ac3d
feat(game-studio): app shell with live three.js preview, fullscreen +…
jaylfc Jun 15, 2026
9ab175c
fix(images-edit): scope degraded flag to quality downgrades, accept i…
jaylfc Jun 15, 2026
0750262
fix(game-studio): release keys on focus loss and scope key capture to…
jaylfc Jun 15, 2026
8333416
Merge pull request #932 from jaylfc/fix/edit-backend-autoregister
jaylfc Jun 15, 2026
419e2ce
Merge pull request #933 from jaylfc/fix/flux-fill-loopback
jaylfc Jun 15, 2026
cb0cf04
Merge pull request #934 from jaylfc/fix/safety-regression-test
jaylfc Jun 15, 2026
2527a24
Merge pull request #930 from jaylfc/fix/post-merge-gitar-findings
jaylfc Jun 15, 2026
b549267
Merge pull request #931 from jaylfc/fix/image-edit-reliability
jaylfc Jun 15, 2026
9aa235f
Merge pull request #935 from jaylfc/feat/game-studio-app
jaylfc Jun 15, 2026
9aaa767
docs(status): 6 PRs merged (audit fixes + Game Studio phase 1) + tool…
jaylfc Jun 15, 2026
51362c7
feat(store): popularity backend from GitHub stars, telemetry-ready (#13)
jaylfc Jun 15, 2026
c3be812
fix(store): non-blocking rate-limit-aware popularity fetch, strict re…
jaylfc Jun 15, 2026
ae2a316
docs(readme): document Game Studio + Image Studio, refresh app counts…
jaylfc Jun 15, 2026
3f749f7
feat(providers): add DeepSeek as a model provider (#937)
jaylfc Jun 15, 2026
51eb7b7
feat(store): store popularity backend (GitHub stars) (#936)
jaylfc Jun 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 18 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,18 @@ jobs:
with:
python-version: ${{ matrix.python-version }}

- name: Cache pip
uses: actions/cache@v5
- name: Set up uv
uses: astral-sh/setup-uv@v6
with:
path: ~/.cache/pip
key: pip-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }}
enable-cache: true

# Install the exact versions recorded in uv.lock (--frozen errors out
# if the lock is stale rather than silently re-resolving). This is the
# reproducibility guarantee: dependency versions come from the lock,
# not from a fresh unpinned resolve that can pull in a regressed
# release (see the fastapi 0.137 incident, #903).
- name: Install dependencies
run: pip install -e ".[dev]"
run: uv sync --frozen --extra dev --python ${{ matrix.python-version }}

# SPA bundle is stubbed by tests/conftest.py — see pytest_configure.
# The real build is exercised in the spa-build job below.
Expand All @@ -51,10 +55,10 @@ jobs:
# Run across all runner cores. The serial suite (4845 tests) took
# ~22 min; -n auto cuts it to a few minutes so "merge on green" is
# practical. Dropped -v so xdist worker output stays readable.
run: pytest tests/ --tb=short --ignore=tests/e2e -n auto
run: uv run --no-sync pytest tests/ --tb=short --ignore=tests/e2e -n auto

- name: Verify app starts
run: python -c "from tinyagentos.app import create_app; print('OK')"
run: uv run --no-sync python -c "from tinyagentos.app import create_app; print('OK')"

lint:
runs-on: ubuntu-latest
Expand All @@ -66,11 +70,16 @@ jobs:
with:
python-version: "3.12"

- name: Set up uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true

- name: Install dependencies
run: pip install -e ".[dev]"
run: uv sync --frozen --extra dev --python 3.12

- name: Check for syntax errors
run: python -m compileall tinyagentos/ -q
run: uv run --no-sync python -m compileall tinyagentos/ -q

spa-build:
runs-on: ubuntu-latest
Expand Down
21 changes: 14 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,13 +89,13 @@ taOS ships with a full browser-based desktop environment. Open it at `http://you
- **Standalone Chat PWA**. Messages available as a dedicated installable app at `/chat-pwa`
- **shadcn/ui primitives**. Button, Card, Input, Tabs, Switch, Toolbar

### 36 Bundled Desktop Apps
### 39 Bundled Desktop Apps

**Platform apps (24):** Messages (WebSocket chat), Projects (Kanban + A2A), Agents (deploy wizard + logs + skills), Store (47+ apps), Settings (multi-section with Memory capture toggles), Models, Providers (cloud LLM provider management, add/test/remove OpenAI, Anthropic, and compatible APIs), Memory (User + Agent sections), MCP (plugin manager), Channels, Secrets, Tasks, Import, Images, Dashboard (Activity), Cluster (worker management + health), Library (knowledge pipeline, document library with collections and search), Reddit (subreddit browser with saved threads and memory ingest), YouTube (video library with transcript extraction), GitHub (repository browser with code search), X (feed monitor with bookmarks and memory capture), Agent Browsers (manage agent browser sessions), Files (real VFS with workspace + shared folders), Guides.
**Platform apps (25):** Messages (WebSocket chat), Projects (Kanban + A2A), Agents (deploy wizard + logs + skills), Store (47+ apps), Settings (multi-section with Memory capture toggles), Models, Providers (cloud LLM provider management, add/test/remove OpenAI, Anthropic, DeepSeek, and compatible APIs), Memory (User + Agent sections), MCP (plugin manager), Channels, Secrets, Tasks, Import, Images (Image Studio: Create / Library / Edit with tier-aware inpaint + upscale backends), Dashboard (Activity), Cluster (worker management + health), Library (knowledge pipeline, document library with collections and search), Reddit (subreddit browser with saved threads and memory ingest), YouTube (video library with transcript extraction), GitHub (repository browser with code search), X (feed monitor with bookmarks and memory capture), Agent Browsers (manage agent browser sessions), Files (real VFS with workspace + shared folders), taOS Agent (Agent-as-a-Model endpoint), Guides.

**OS apps (9):** Weather, Calculator (math.js), Calendar (month view), Contacts (CRUD), Browser (URL-rewriting proxy, agent-ready), Media Player (Plyr), Text Editor (CodeMirror 6 with Obsidian-style theme), Image Viewer (zoom/rotate), Terminal (real PTY + SSH client).
**OS apps (10):** Weather, Calculator (math.js), Calendar (month view), Contacts (CRUD), Browser (URL-rewriting proxy, agent-ready), Browser (Streamed) (real WebRTC Chromium streamed from the host), Media Player (Plyr), Text Editor (CodeMirror 6 with Obsidian-style theme), Image Viewer (zoom/rotate), Terminal (real PTY + SSH client).

**Games (3):** Chess (plays against real agents via LLM), Wordle, Crosswords.
**Games & studios (4):** Game Studio (offline-AI game maker, three.js + react-three-fiber, fullscreen play with mandatory exit-to-taOS, test then optionally share to the Store), Chess (plays against real agents via LLM), Wordle, Crosswords.

The Activity app includes a Cluster overview panel showing live worker status and resource stats alongside the process monitor. The Model Browser surfaces cloud models (from configured providers) alongside local catalog models, with a provider badge per entry. The deploy wizard accepts cloud models as inference targets.

Expand All @@ -108,7 +108,7 @@ The Activity app includes a Cluster overview panel showing live worker status an
## Key Features

### Web Desktop Shell
Full browser-based desktop OS with window manager (float + snap), dock, launchpad, right-click context menu, wallpaper picker, notifications, widgets, and persistent sessions that follow you across devices. 36 bundled apps, platform tools, OS utilities, and games, plus an optional password login gate. See [Web Desktop Experience](#web-desktop-experience) above.
Full browser-based desktop OS with window manager (float + snap), dock, launchpad, right-click context menu, wallpaper picker, notifications, widgets, and persistent sessions that follow you across devices. 39 bundled apps, platform tools, OS utilities, and games, plus an optional password login gate. See [Web Desktop Experience](#web-desktop-experience) above.

### Mobile & Tablet Mode
Auto-detects touch devices and swaps the desktop for a widget-first home screen with customisable multi-page layout (swipe or tap dots to navigate), a persistent dock with app launcher and app switcher, and desktop-style app windows with close/minimise title bars. The top bar features iOS 26-style frosted glass buttons for search and notifications, with a "taOS" home button. Installable as a fullscreen PWA on iOS and Android. A standalone Chat PWA is available at `/chat-pwa` and installs like a private Discord.
Expand Down Expand Up @@ -214,10 +214,17 @@ Hidden internal gateway that unifies all inference providers behind a single Ope
### Dynamic Capabilities
Features unlock automatically based on your hardware and cluster. Solo Pi sees core features. Add a GPU worker and image generation, video, and training appear. No configuration, the platform just knows what's possible.

### Creative Studios
Two first-party studio apps turn the cluster's generation backends into something you can actually use, both built to the same design bar as the Store.

- **Image Studio.** Create, Library, and Edit in one app. Generate from a prompt on any discovered Stable Diffusion backend (NPU / GPU / CPU), browse a thumbnail library, and edit with tier-aware backends: inpaint and object removal, plus upscale. The platform picks the best installed backend per task and degrades gracefully when a higher tier is missing.
- **Game Studio.** An offline-AI game maker built on three.js and react-three-fiber. Less-capable, tool-calling-weak models get guided building blocks and templates; more capable local or cloud models can author scenes directly. Games run fullscreen on desktop and mobile with a mandatory exit-to-taOS control, can be playtested in place, and optionally shared to the Store.

### AI Generation
- **Images**. Stable Diffusion via NPU, GPU, or CPU (multi-backend auto-discovery)
- **Images**. Stable Diffusion via NPU, GPU, or CPU (multi-backend auto-discovery), surfaced through Image Studio
- **Video**. WanGP, LTX Video (unlocks with 6GB+ GPU worker)
- **Audio**. Kokoro TTS, Chatterbox, Piper, Whisper STT, MusicGPT
- **Games**. three.js + react-three-fiber scenes authored offline through Game Studio

### Training & Fine-Tuning
- **LoRA Training.** Train agent-specific adapters from the web UI (8GB+ GPU)
Expand Down Expand Up @@ -315,7 +322,7 @@ Search across agents, apps, messages, and files from a single endpoint. Finds an
- **System Updates.** Pull latest from GitHub via Settings page. taOS periodically checks for updates and reports an anonymous install count (a daily aggregate estimate, no identifiers); disable with `TAOS_NO_UPDATE_PING=1` or in Settings.
- **Provider Management.** Add/test/remove inference providers with live connectivity checks. The Providers desktop app manages cloud LLM credentials; the model browser reflects configured providers automatically.

## App Catalog (108 Catalog Apps + 36 Desktop Apps + 47 MCP Plugins)
## App Catalog (108 Catalog Apps + 39 Desktop Apps + 47 MCP Plugins)

| Category | Apps |
|----------|------|
Expand Down
166 changes: 166 additions & 0 deletions app-catalog/agents/agent-zero/scripts/install-agent-zero.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
#!/usr/bin/env bash
# install-agent-zero.sh — agent-zero AGENT FRAMEWORK installer
# id: agent-zero | verification_status: alpha
#
# Runs once inside a fresh Debian bookworm LXC container as root.
# Idempotent: safe to re-run on an already-provisioned container.
#
# Upstream: https://github.com/frdel/agent-zero (redirects to agent0ai/agent-zero)
# Project: Autonomous AI agent — self-correcting workflows, tool/skill
# creation, computer control. "A full Linux system for your agent."
# Install basis: OFFICIAL README + docs/setup/dev-setup.md (developer/source install).
# - README: https://github.com/frdel/agent-zero/blob/main/README.md
# - dev-setup: https://github.com/frdel/agent-zero/blob/main/docs/setup/dev-setup.md
# - requirements https://github.com/frdel/agent-zero/blob/main/requirements.txt
# - entrypoint https://github.com/frdel/agent-zero/blob/main/run_ui.py
#
# Official distribution is a Docker image (agent0ai/agent-zero; formerly
# frdel/agent-zero-run), run with:
# docker run -p 80:80 -v a0_usr:/a0/usr agent0ai/agent-zero
# Inside an LXC we instead do the documented SOURCE install (git clone + Python
# venv + pip install -r requirements.txt), per docs/setup/dev-setup.md. Python
# >=3.11 is required; upstream recommends 3.12. The web UI is started with
# `python run_ui.py` (default host localhost; port via WEB_UI_PORT/runtime).
set -euo pipefail

# ---- pinned release ---------------------------------------------------------
# Pin to the latest tagged release (https://github.com/frdel/agent-zero/releases).
AGENT_ZERO_REF="v1.20"
AGENT_ZERO_REPO="https://github.com/agent0ai/agent-zero"
AGENT_ZERO_HOME="/opt/agent-zero"
AGENT_ZERO_VENV="${AGENT_ZERO_HOME}/.venv"

echo "[agent-zero] installing agent-zero ${AGENT_ZERO_REF} (source install)"

die() { echo "[agent-zero] FATAL: $*" >&2; exit 1; }

# ---- idempotency guard ------------------------------------------------------
# If a previous run completed (clone at the pinned ref + venv with deps), stop.
if [ -f "${AGENT_ZERO_HOME}/.taos-install-complete" ]; then
echo "[agent-zero] already installed at ${AGENT_ZERO_HOME} (ref ${AGENT_ZERO_REF}); nothing to do"
exit 0
fi

# ---------------------------------------------------------------------------
# 1. System deps. Debian bookworm ships Python 3.11 (satisfies upstream's
# >=3.11 minimum). git to clone; build-essential + python3-dev for any
# packages that compile; ffmpeg + libmagic are commonly used by the
# framework's media/file tooling.
# ---------------------------------------------------------------------------
echo "[agent-zero] installing system dependencies (apt)"
export DEBIAN_FRONTEND=noninteractive
apt-get update -qq || die "apt-get update failed"
apt-get install -y -qq --no-install-recommends \
git \
python3 \
python3-venv \
python3-dev \
python3-pip \
build-essential \
ca-certificates \
curl \
ffmpeg \
libmagic1 \
|| die "apt-get install of system dependencies failed"

# Verify Python >=3.11 (upstream minimum; bookworm default is 3.11).
command -v python3 >/dev/null 2>&1 || die "python3 not on PATH after install"
PYVER="$(python3 -c 'import sys; print("%d.%d" % sys.version_info[:2])')"
PYMAJ="${PYVER%%.*}"; PYMIN="${PYVER#*.}"
if [ "$PYMAJ" -lt 3 ] || { [ "$PYMAJ" -eq 3 ] && [ "$PYMIN" -lt 11 ]; }; then
die "Python >=3.11 required, found ${PYVER}"
fi
echo "[agent-zero] using python ${PYVER}"

# ---------------------------------------------------------------------------
# 2. Clone the pinned release. Idempotent: if the dir already exists, fetch and
# hard-check out the pinned ref instead of re-cloning.
# Source: docs/setup/dev-setup.md — "git clone https://github.com/agent0ai/agent-zero"
# ---------------------------------------------------------------------------
if [ -d "${AGENT_ZERO_HOME}/.git" ]; then
echo "[agent-zero] repo present; fetching + checking out ${AGENT_ZERO_REF}"
git -C "${AGENT_ZERO_HOME}" fetch --tags --depth 1 origin "${AGENT_ZERO_REF}" \
|| die "git fetch of ${AGENT_ZERO_REF} failed"
git -C "${AGENT_ZERO_HOME}" checkout --force "${AGENT_ZERO_REF}" \
|| die "git checkout of ${AGENT_ZERO_REF} failed"
else
echo "[agent-zero] cloning ${AGENT_ZERO_REPO} @ ${AGENT_ZERO_REF}"
git clone --depth 1 --branch "${AGENT_ZERO_REF}" "${AGENT_ZERO_REPO}" "${AGENT_ZERO_HOME}" \
|| die "git clone of ${AGENT_ZERO_REPO} @ ${AGENT_ZERO_REF} failed"
fi

[ -f "${AGENT_ZERO_HOME}/requirements.txt" ] || die "requirements.txt missing in clone"
[ -f "${AGENT_ZERO_HOME}/run_ui.py" ] || die "run_ui.py missing in clone"

# ---------------------------------------------------------------------------
# 3. Python virtual environment + dependencies.
# Source: docs/setup/dev-setup.md — venv + "pip install -r requirements.txt"
# ---------------------------------------------------------------------------
if [ ! -x "${AGENT_ZERO_VENV}/bin/python" ]; then
echo "[agent-zero] creating virtualenv at ${AGENT_ZERO_VENV}"
python3 -m venv "${AGENT_ZERO_VENV}" || die "venv creation failed"
fi

echo "[agent-zero] upgrading pip"
"${AGENT_ZERO_VENV}/bin/pip" install --upgrade pip setuptools wheel \
|| die "pip self-upgrade failed"

echo "[agent-zero] installing Python requirements (this can take a while)"
"${AGENT_ZERO_VENV}/bin/pip" install -r "${AGENT_ZERO_HOME}/requirements.txt" \
|| die "pip install -r requirements.txt failed"

# ---------------------------------------------------------------------------
# 4. Playwright Chromium — agent-zero drives a browser for computer control.
# Source: docs/setup/dev-setup.md —
# "PLAYWRIGHT_BROWSERS_PATH=./tmp/playwright playwright install chromium"
# Best-effort: a missing browser doesn't block the framework from starting.
# ---------------------------------------------------------------------------
echo "[agent-zero] installing Playwright Chromium (best-effort)"
if "${AGENT_ZERO_VENV}/bin/python" -c 'import playwright' >/dev/null 2>&1; then
PLAYWRIGHT_BROWSERS_PATH="${AGENT_ZERO_HOME}/tmp/playwright" \
"${AGENT_ZERO_VENV}/bin/python" -m playwright install --with-deps chromium \
|| echo "[agent-zero] WARN: playwright chromium install failed; browser tools may be unavailable"
else
echo "[agent-zero] WARN: playwright not present in requirements; skipping browser install"
fi

# ---------------------------------------------------------------------------
# 5. Verify the entrypoint imports cleanly (sanity, not a full boot).
# ---------------------------------------------------------------------------
echo "[agent-zero] verifying entrypoint is present"
[ -f "${AGENT_ZERO_HOME}/run_ui.py" ] || die "run_ui.py vanished after install"

# ---------------------------------------------------------------------------
# 6. systemd unit for the web UI. Started with `python run_ui.py` per
# dev-setup.md; WEB_UI_HOST/WEB_UI_PORT are read by run_ui.py (run_ui.py
# uses runtime.get_arg("host")/WEB_UI_HOST and runtime.get_web_ui_port()).
# Enabled but NOT started — the deployer starts it after writing model/LLM
# config, matching the openclaw installer convention.
# ---------------------------------------------------------------------------
cat > /etc/systemd/system/agent-zero.service <<UNIT
[Unit]
Description=agent-zero web UI
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
WorkingDirectory=${AGENT_ZERO_HOME}
Environment=WEB_UI_HOST=0.0.0.0
Environment=PLAYWRIGHT_BROWSERS_PATH=${AGENT_ZERO_HOME}/tmp/playwright
ExecStart=${AGENT_ZERO_VENV}/bin/python ${AGENT_ZERO_HOME}/run_ui.py
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target
UNIT

systemctl daemon-reload
# Enable but do NOT start — deployer starts after writing LLM/model config.
systemctl enable agent-zero.service

# ---- completion marker (idempotency) ---------------------------------------
touch "${AGENT_ZERO_HOME}/.taos-install-complete"

echo "[agent-zero] install complete (ref ${AGENT_ZERO_REF}; service enabled, start deferred to deployer)"
4 changes: 2 additions & 2 deletions app-catalog/agents/moltis/manifest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ type: agent-framework
verification_status: alpha
version: 0.1.0
description: "Enterprise Rust agent framework — high performance, memory safe, production-grade"
homepage: https://github.com/moltis-ai/moltis
license: Apache-2.0
homepage: https://github.com/moltis-org/moltis
license: MIT
requires:
ram_mb: 64
install:
Expand Down
Loading
Loading