make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
# AnyBot — build and install from source. make help lists everything.
|
|
|
|
|
|
#
|
One-step install: install.sh, fixed Linux and server builds, clearer README
- install.sh (curl | sh): app, hands, server and deps modes; installs system packages
(right names per release, e.g. libasound2t64 on Ubuntu 24.04), Rust via rustup (1.95+),
Docker for the server; limits parallel compiles on small machines
- Server Docker image: add the ALSA build/runtime packages (the build failed), cache the
cargo registry and target between rebuilds, JOBS build arg
- 加一台電腦 now gives a line that installs AnyBot on a blank computer before joining it
- Makefile: make deps installs Rust too, make doctor, clear message when Rust is missing/old
- README rewritten: one line per use, getting started, update/remove, troubleshooting,
deployment options; docs/install.md and multi-device.md follow it
- Tested on fresh ubuntu:24.04 (app) and debian:12 (curl | sh hands) containers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 16:52:10 +00:00
|
|
|
|
# git clone https://code.30cm.net/daniel.w/AnyBot.git && cd AnyBot
|
|
|
|
|
|
# make deps everything the build needs (system packages, Rust) — once
|
|
|
|
|
|
# make install build and install: ~/Applications/AnyBot.app on a Mac, ~/.local/bin on Linux
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
# make run open it without installing
|
One-step install: install.sh, fixed Linux and server builds, clearer README
- install.sh (curl | sh): app, hands, server and deps modes; installs system packages
(right names per release, e.g. libasound2t64 on Ubuntu 24.04), Rust via rustup (1.95+),
Docker for the server; limits parallel compiles on small machines
- Server Docker image: add the ALSA build/runtime packages (the build failed), cache the
cargo registry and target between rebuilds, JOBS build arg
- 加一台電腦 now gives a line that installs AnyBot on a blank computer before joining it
- Makefile: make deps installs Rust too, make doctor, clear message when Rust is missing/old
- README rewritten: one line per use, getting started, update/remove, troubleshooting,
deployment options; docs/install.md and multi-device.md follow it
- Tested on fresh ubuntu:24.04 (app) and debian:12 (curl | sh hands) containers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 16:52:10 +00:00
|
|
|
|
#
|
|
|
|
|
|
# The one-step version of all of this is ./install.sh (README.md).
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
|
One-step install: install.sh, fixed Linux and server builds, clearer README
- install.sh (curl | sh): app, hands, server and deps modes; installs system packages
(right names per release, e.g. libasound2t64 on Ubuntu 24.04), Rust via rustup (1.95+),
Docker for the server; limits parallel compiles on small machines
- Server Docker image: add the ALSA build/runtime packages (the build failed), cache the
cargo registry and target between rebuilds, JOBS build arg
- 加一台電腦 now gives a line that installs AnyBot on a blank computer before joining it
- Makefile: make deps installs Rust too, make doctor, clear message when Rust is missing/old
- README rewritten: one line per use, getting started, update/remove, troubleshooting,
deployment options; docs/install.md and multi-device.md follow it
- Tested on fresh ubuntu:24.04 (app) and debian:12 (curl | sh hands) containers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 16:52:10 +00:00
|
|
|
|
# Rust installed by rustup lives in ~/.cargo/bin, which a fresh shell may not have on PATH yet.
|
|
|
|
|
|
export PATH := $(HOME)/.cargo/bin:$(PATH)
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
CARGO ?= cargo
|
|
|
|
|
|
UNAME := $(shell uname -s)
|
2026-11-05 07:48:22 +00:00
|
|
|
|
# `git describe` prints nothing outside a repo; sed passes the empty string through with
|
|
|
|
|
|
# status 0, so "|| echo dev" never fired and VERSION came out blank ("AnyBot ", dist files
|
|
|
|
|
|
# named ".tar.gz"). grep . fails on empty input, which makes the fallback work.
|
|
|
|
|
|
VERSION ?= $(shell git describe --tags --always 2>/dev/null | sed 's/^v//' | grep . || echo dev)
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
TARGET := $(or $(CARGO_TARGET_DIR),target)
|
|
|
|
|
|
APPDIR ?= $(HOME)/Applications
|
|
|
|
|
|
BIN := $(TARGET)/release/anybot
|
|
|
|
|
|
RELAY := $(if $(CARGO_TARGET_DIR),$(CARGO_TARGET_DIR),relay/target)/release/anybot-relay
|
|
|
|
|
|
|
2026-11-10 06:32:56 +00:00
|
|
|
|
.PHONY: all build app relay run serve setup relay-run test deps doctor install uninstall hands server dist clean help check-rust lint-sh
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
|
|
|
|
|
|
all: build
|
|
|
|
|
|
|
|
|
|
|
|
help:
|
|
|
|
|
|
@echo "AnyBot $(VERSION)"
|
|
|
|
|
|
@echo ""
|
|
|
|
|
|
@echo " make 建置 AnyBot 和帳號伺服器(正式版)"
|
|
|
|
|
|
@echo " make run 直接打開 AnyBot(不安裝)"
|
|
|
|
|
|
@echo " make install 安裝:Mac → $(APPDIR)/AnyBot.app;Linux → ~/.local/bin/anybot 和選單"
|
|
|
|
|
|
@echo " make uninstall 移除安裝的程式(你的 Bot 和聊天不會刪)"
|
One-step install: install.sh, fixed Linux and server builds, clearer README
- install.sh (curl | sh): app, hands, server and deps modes; installs system packages
(right names per release, e.g. libasound2t64 on Ubuntu 24.04), Rust via rustup (1.95+),
Docker for the server; limits parallel compiles on small machines
- Server Docker image: add the ALSA build/runtime packages (the build failed), cache the
cargo registry and target between rebuilds, JOBS build arg
- 加一台電腦 now gives a line that installs AnyBot on a blank computer before joining it
- Makefile: make deps installs Rust too, make doctor, clear message when Rust is missing/old
- README rewritten: one line per use, getting started, update/remove, troubleshooting,
deployment options; docs/install.md and multi-device.md follow it
- Tested on fresh ubuntu:24.04 (app) and debian:12 (curl | sh hands) containers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 16:52:10 +00:00
|
|
|
|
@echo " make deps 裝好建置需要的東西:系統套件和 Rust(Linux 會問 sudo 密碼)"
|
|
|
|
|
|
@echo " make doctor 檢查這台缺什麼"
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
@echo " make test 跑測試"
|
2026-11-10 06:32:56 +00:00
|
|
|
|
@echo " make lint-sh 檢查 shell 腳本(語法、中文標點黏變數)"
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
@echo ""
|
|
|
|
|
|
@echo " make serve 不開視窗執行(伺服器、一直開著的電腦)"
|
|
|
|
|
|
@echo " make setup 把這台接到你的 AnyBot(終端機裡的引導畫面)"
|
|
|
|
|
|
@echo " make hands Linux:裝好虛擬螢幕等,再接成大腦的手腳"
|
|
|
|
|
|
@echo " make relay-run 在這台跑帳號伺服器(埠 8080,資料在 ./relay-data)"
|
|
|
|
|
|
@echo " make server 在伺服器上架好帳號伺服器 + 大腦 + HTTPS(Docker)"
|
|
|
|
|
|
@echo ""
|
|
|
|
|
|
@echo " make dist 打包發行檔到 dist/(Mac:.app 的 zip;Linux:三個 tar.gz)"
|
|
|
|
|
|
@echo " make clean 清掉建置結果"
|
|
|
|
|
|
|
|
|
|
|
|
build: app relay
|
|
|
|
|
|
|
One-step install: install.sh, fixed Linux and server builds, clearer README
- install.sh (curl | sh): app, hands, server and deps modes; installs system packages
(right names per release, e.g. libasound2t64 on Ubuntu 24.04), Rust via rustup (1.95+),
Docker for the server; limits parallel compiles on small machines
- Server Docker image: add the ALSA build/runtime packages (the build failed), cache the
cargo registry and target between rebuilds, JOBS build arg
- 加一台電腦 now gives a line that installs AnyBot on a blank computer before joining it
- Makefile: make deps installs Rust too, make doctor, clear message when Rust is missing/old
- README rewritten: one line per use, getting started, update/remove, troubleshooting,
deployment options; docs/install.md and multi-device.md follow it
- Tested on fresh ubuntu:24.04 (app) and debian:12 (curl | sh hands) containers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 16:52:10 +00:00
|
|
|
|
check-rust:
|
|
|
|
|
|
@command -v $(CARGO) >/dev/null 2>&1 || { echo; echo " ✗ 找不到 Rust(cargo)。先執行:make deps"; echo; exit 1; }
|
2026-11-05 07:48:22 +00:00
|
|
|
|
@set -- $$(rustc --version | sed -n 's/^rustc \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1 \2/p'); { [ "$${1:-0}" -gt 1 ] || { [ "$${1:-0}" -eq 1 ] && [ "$${2:-0}" -ge 95 ]; }; } || { echo; echo " ✗ Rust 太舊($$(rustc --version)),要 1.95 以上。執行:rustup update stable(或 make deps)"; echo; exit 1; }
|
One-step install: install.sh, fixed Linux and server builds, clearer README
- install.sh (curl | sh): app, hands, server and deps modes; installs system packages
(right names per release, e.g. libasound2t64 on Ubuntu 24.04), Rust via rustup (1.95+),
Docker for the server; limits parallel compiles on small machines
- Server Docker image: add the ALSA build/runtime packages (the build failed), cache the
cargo registry and target between rebuilds, JOBS build arg
- 加一台電腦 now gives a line that installs AnyBot on a blank computer before joining it
- Makefile: make deps installs Rust too, make doctor, clear message when Rust is missing/old
- README rewritten: one line per use, getting started, update/remove, troubleshooting,
deployment options; docs/install.md and multi-device.md follow it
- Tested on fresh ubuntu:24.04 (app) and debian:12 (curl | sh hands) containers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 16:52:10 +00:00
|
|
|
|
|
|
|
|
|
|
app: check-rust
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
$(CARGO) build --release --bin anybot
|
|
|
|
|
|
|
One-step install: install.sh, fixed Linux and server builds, clearer README
- install.sh (curl | sh): app, hands, server and deps modes; installs system packages
(right names per release, e.g. libasound2t64 on Ubuntu 24.04), Rust via rustup (1.95+),
Docker for the server; limits parallel compiles on small machines
- Server Docker image: add the ALSA build/runtime packages (the build failed), cache the
cargo registry and target between rebuilds, JOBS build arg
- 加一台電腦 now gives a line that installs AnyBot on a blank computer before joining it
- Makefile: make deps installs Rust too, make doctor, clear message when Rust is missing/old
- README rewritten: one line per use, getting started, update/remove, troubleshooting,
deployment options; docs/install.md and multi-device.md follow it
- Tested on fresh ubuntu:24.04 (app) and debian:12 (curl | sh hands) containers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 16:52:10 +00:00
|
|
|
|
relay: check-rust
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
cd relay && $(CARGO) build --release
|
|
|
|
|
|
|
|
|
|
|
|
run: app
|
|
|
|
|
|
$(BIN)
|
|
|
|
|
|
|
|
|
|
|
|
serve: app
|
|
|
|
|
|
$(BIN) --serve
|
|
|
|
|
|
|
|
|
|
|
|
setup: app
|
|
|
|
|
|
$(BIN) setup
|
|
|
|
|
|
|
|
|
|
|
|
relay-run: relay
|
|
|
|
|
|
$(RELAY) --port 8080 --data relay-data
|
|
|
|
|
|
|
One-step install: install.sh, fixed Linux and server builds, clearer README
- install.sh (curl | sh): app, hands, server and deps modes; installs system packages
(right names per release, e.g. libasound2t64 on Ubuntu 24.04), Rust via rustup (1.95+),
Docker for the server; limits parallel compiles on small machines
- Server Docker image: add the ALSA build/runtime packages (the build failed), cache the
cargo registry and target between rebuilds, JOBS build arg
- 加一台電腦 now gives a line that installs AnyBot on a blank computer before joining it
- Makefile: make deps installs Rust too, make doctor, clear message when Rust is missing/old
- README rewritten: one line per use, getting started, update/remove, troubleshooting,
deployment options; docs/install.md and multi-device.md follow it
- Tested on fresh ubuntu:24.04 (app) and debian:12 (curl | sh hands) containers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 16:52:10 +00:00
|
|
|
|
test: check-rust
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
$(CARGO) test --bin anybot
|
|
|
|
|
|
cd relay && $(CARGO) test
|
|
|
|
|
|
|
2026-11-10 06:32:56 +00:00
|
|
|
|
lint-sh:
|
|
|
|
|
|
@sh deploy/ci/lint-sh.sh
|
|
|
|
|
|
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
deps:
|
One-step install: install.sh, fixed Linux and server builds, clearer README
- install.sh (curl | sh): app, hands, server and deps modes; installs system packages
(right names per release, e.g. libasound2t64 on Ubuntu 24.04), Rust via rustup (1.95+),
Docker for the server; limits parallel compiles on small machines
- Server Docker image: add the ALSA build/runtime packages (the build failed), cache the
cargo registry and target between rebuilds, JOBS build arg
- 加一台電腦 now gives a line that installs AnyBot on a blank computer before joining it
- Makefile: make deps installs Rust too, make doctor, clear message when Rust is missing/old
- README rewritten: one line per use, getting started, update/remove, troubleshooting,
deployment options; docs/install.md and multi-device.md follow it
- Tested on fresh ubuntu:24.04 (app) and debian:12 (curl | sh hands) containers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 16:52:10 +00:00
|
|
|
|
sh ./install.sh deps
|
|
|
|
|
|
|
|
|
|
|
|
doctor:
|
|
|
|
|
|
@echo "AnyBot $(VERSION) · $(UNAME) $$(uname -m)"
|
|
|
|
|
|
@command -v git >/dev/null && echo " ✓ git" || echo " ✗ git:make deps"
|
|
|
|
|
|
@command -v cc >/dev/null && echo " ✓ C 編譯器" || echo " ✗ C 編譯器:make deps"
|
|
|
|
|
|
@command -v $(CARGO) >/dev/null && echo " ✓ $$(rustc --version)" || echo " ✗ Rust:make deps"
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
ifeq ($(UNAME),Linux)
|
One-step install: install.sh, fixed Linux and server builds, clearer README
- install.sh (curl | sh): app, hands, server and deps modes; installs system packages
(right names per release, e.g. libasound2t64 on Ubuntu 24.04), Rust via rustup (1.95+),
Docker for the server; limits parallel compiles on small machines
- Server Docker image: add the ALSA build/runtime packages (the build failed), cache the
cargo registry and target between rebuilds, JOBS build arg
- 加一台電腦 now gives a line that installs AnyBot on a blank computer before joining it
- Makefile: make deps installs Rust too, make doctor, clear message when Rust is missing/old
- README rewritten: one line per use, getting started, update/remove, troubleshooting,
deployment options; docs/install.md and multi-device.md follow it
- Tested on fresh ubuntu:24.04 (app) and debian:12 (curl | sh hands) containers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 16:52:10 +00:00
|
|
|
|
@pkg-config --exists alsa 2>/dev/null && echo " ✓ ALSA(libasound2-dev)" || echo " ✗ ALSA 開發套件:make deps"
|
|
|
|
|
|
@command -v docker >/dev/null && echo " ✓ $$(docker --version)" || echo " · 沒有 Docker(只有伺服器和 Bot 自己的電腦需要;make server 會自動裝)"
|
|
|
|
|
|
endif
|
|
|
|
|
|
ifeq ($(UNAME),Darwin)
|
|
|
|
|
|
@xcode-select -p >/dev/null 2>&1 && echo " ✓ Xcode Command Line Tools" || echo " ✗ Xcode Command Line Tools:make deps"
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
endif
|
One-step install: install.sh, fixed Linux and server builds, clearer README
- install.sh (curl | sh): app, hands, server and deps modes; installs system packages
(right names per release, e.g. libasound2t64 on Ubuntu 24.04), Rust via rustup (1.95+),
Docker for the server; limits parallel compiles on small machines
- Server Docker image: add the ALSA build/runtime packages (the build failed), cache the
cargo registry and target between rebuilds, JOBS build arg
- 加一台電腦 now gives a line that installs AnyBot on a blank computer before joining it
- Makefile: make deps installs Rust too, make doctor, clear message when Rust is missing/old
- README rewritten: one line per use, getting started, update/remove, troubleshooting,
deployment options; docs/install.md and multi-device.md follow it
- Tested on fresh ubuntu:24.04 (app) and debian:12 (curl | sh hands) containers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 16:52:10 +00:00
|
|
|
|
@test -x $(BIN) && echo " ✓ 已建置 $(BIN)" || echo " · 還沒建置:make"
|
Bots do a planned sequence in one step; the box's screen settles by what it shows; no login is ever the only copy
- computer_use_batch: up to 8 planned actions run in one docker exec (steps chained with && and a
done-marker each), the first failure stops the rest, one picture comes back at the end. Typed
text rides inside the script quoted (one stdin for the chain). The prompt tells the model when
to use it (a form whose fields are all visible) and when not to (step 2 needs step 1's screen).
- The box waits for the screen to stop changing, not the clock: two matching small probes (~60 ms
each) mean settled — ~160 ms on a still screen where every step paid a fixed 500 ms, and a page
mid-load is waited for (up to ~0.9 s) instead of captured mid-change. The picture is JPEG, and
the a11y read runs in parallel with the capture (look ~307 ms; two steps with pictures 1102 ms).
(SETTLE_SH is a group command: dash needs ';' after it — found by box_screen_is_exact.)
- The home volume (every bot's logins) is never one command from loss: snapshots keep generations
(last 7 days, then one per week; the old single snapshot migrates by file date), Reset and
Restore save the running box first and refuse to wipe if saving fails, a box built on an empty
volume re-fills itself from the newest snapshot, and a sleeping holder container keeps the
volume attached so `docker volume prune` can't take it. make doctor shows volume and snapshot
state; the 電腦 card shows the box's average step times and says resets save first.
- box_batch_in_one_round_trip (ignored): three typed steps, ASCII and Chinese, land in one trip.
On the real box after upgrading v3→v5: box_update_keeps_files (files survive, snapshot 2 代),
box_numbers_are_exact, box_screen_is_exact, box_end_to_end, box_traffic_via_mac pass; 155 unit tests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 01:47:37 +00:00
|
|
|
|
@command -v docker >/dev/null 2>&1 && { docker volume inspect anybot-box-home >/dev/null 2>&1 && echo " ✓ Bot 的電腦的資料碟 anybot-box-home(檔案和登入都在裡面)" || echo " · 沒有 anybot-box-home 資料碟(Bot 的電腦還沒建立過,或被清除過——有快照會在下次建立時自動還原)"; } || true
|
|
|
|
|
|
@d="$${HOME}/Library/Application Support/AnyBot/box/snapshots"; [ -d "$$d" ] || d="$${HOME}/.local/share/AnyBot/box/snapshots"; [ -d "$$d" ] && echo " ✓ 快照 $$(ls "$$d" 2>/dev/null | grep -c '^snapshot-') 份(留最近 7 天+之前每週一份;重設前也會先存)" || echo " · 還沒有快照(Bot 的電腦每天自動存,重設前也會先存)"
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
|
|
|
|
|
|
install: app
|
|
|
|
|
|
ifeq ($(UNAME),Darwin)
|
|
|
|
|
|
KEEP_APP=1 sh deploy/mac/bundle.sh $(VERSION)
|
|
|
|
|
|
mkdir -p "$(APPDIR)"
|
|
|
|
|
|
rm -rf "$(APPDIR)/AnyBot.app"
|
|
|
|
|
|
mv dist/AnyBot.app "$(APPDIR)/AnyBot.app"
|
One installer for every platform, first run included
install.sh now covers every common Linux distro (apt, dnf, yum, pacman,
zypper, apk, xbps), macOS on arm64/x86_64, and hands off to install.ps1
under Git Bash. install.ps1 + install.cmd give Windows a double-click.
Autostart: systemd user unit on Linux, launchd on macOS, Task Scheduler
on Windows. A terminal guides the role choice and the first key or bot;
agents get --print JSON and ANYBOT_NONINTERACTIVE=1 with env seeding.
`加一台電腦` shows the Windows and the Mac/Linux line together.
2026-11-10 06:07:01 +00:00
|
|
|
|
mkdir -p "$(HOME)/.local/bin"
|
|
|
|
|
|
ln -sfn "$(APPDIR)/AnyBot.app/Contents/MacOS/AnyBot" "$(HOME)/.local/bin/anybot"
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
@echo "已安裝 $(APPDIR)/AnyBot.app(第一次打開:按右鍵 › 打開)"
|
One installer for every platform, first run included
install.sh now covers every common Linux distro (apt, dnf, yum, pacman,
zypper, apk, xbps), macOS on arm64/x86_64, and hands off to install.ps1
under Git Bash. install.ps1 + install.cmd give Windows a double-click.
Autostart: systemd user unit on Linux, launchd on macOS, Task Scheduler
on Windows. A terminal guides the role choice and the first key or bot;
agents get --print JSON and ANYBOT_NONINTERACTIVE=1 with env seeding.
`加一台電腦` shows the Windows and the Mac/Linux line together.
2026-11-10 06:07:01 +00:00
|
|
|
|
else ifneq ($(findstring MINGW,$(UNAME)),)
|
|
|
|
|
|
powershell.exe -NoProfile -ExecutionPolicy Bypass -File install.ps1 app
|
|
|
|
|
|
else ifeq ($(OS),Windows_NT)
|
|
|
|
|
|
powershell.exe -NoProfile -ExecutionPolicy Bypass -File install.ps1 app
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
else
|
|
|
|
|
|
sh deploy/linux/install.sh
|
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
uninstall:
|
|
|
|
|
|
ifeq ($(UNAME),Darwin)
|
|
|
|
|
|
rm -rf "$(APPDIR)/AnyBot.app"
|
|
|
|
|
|
else
|
|
|
|
|
|
rm -f "$(HOME)/.local/bin/anybot" "$(HOME)/.local/share/applications/anybot.desktop"
|
|
|
|
|
|
rm -f "$(HOME)/.local/share/icons/hicolor/scalable/apps/anybot.svg" "$(HOME)/.local/share/icons/hicolor/256x256/apps/anybot.png" "$(HOME)/.local/share/icons/hicolor/128x128/apps/anybot.png"
|
|
|
|
|
|
endif
|
|
|
|
|
|
@echo "已移除程式。你的 Bot、聊天和設定還在(要全部刪掉請看 docs/install.md)。"
|
|
|
|
|
|
|
|
|
|
|
|
hands: app
|
|
|
|
|
|
sh deploy/linux/hands.sh --deps
|
|
|
|
|
|
|
|
|
|
|
|
server:
|
One-step install: install.sh, fixed Linux and server builds, clearer README
- install.sh (curl | sh): app, hands, server and deps modes; installs system packages
(right names per release, e.g. libasound2t64 on Ubuntu 24.04), Rust via rustup (1.95+),
Docker for the server; limits parallel compiles on small machines
- Server Docker image: add the ALSA build/runtime packages (the build failed), cache the
cargo registry and target between rebuilds, JOBS build arg
- 加一台電腦 now gives a line that installs AnyBot on a blank computer before joining it
- Makefile: make deps installs Rust too, make doctor, clear message when Rust is missing/old
- README rewritten: one line per use, getting started, update/remove, troubleshooting,
deployment options; docs/install.md and multi-device.md follow it
- Tested on fresh ubuntu:24.04 (app) and debian:12 (curl | sh hands) containers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 16:52:10 +00:00
|
|
|
|
sh ./install.sh server
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
|
|
|
|
|
|
dist: build
|
|
|
|
|
|
ifeq ($(UNAME),Darwin)
|
|
|
|
|
|
sh deploy/mac/bundle.sh $(VERSION)
|
|
|
|
|
|
else
|
|
|
|
|
|
sh deploy/ci/package-linux.sh $(VERSION)
|
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
clean:
|
|
|
|
|
|
$(CARGO) clean
|
|
|
|
|
|
cd relay && $(CARGO) clean
|
|
|
|
|
|
rm -rf dist
|