ai-server is now something Dev Updater can install, start and stop from the phone: the project declares a Server component naming ./server/service, and that script is where knowing about systemd and OpenRC lives. Detection asks rather than looks -- `systemctl --user show-environment` answering, or `rc-service --user` existing -- because a machine can carry both binaries and an OpenRC below 0.60 has rc-service without --user. Neither present is an error with a message, not a guess at a fallback. Two things the script will not do. It never prompts: Dev Updater runs it with stdin closed, so a sudo prompt would hang rather than fail, and anything needing root exits telling you to run it yourself once. And on OpenRC it refuses when XDG_RUNTIME_DIR is unset rather than proceeding -- user services store their state there, and the failure otherwise reads as a broken service instead of a missing variable. The server is declared before the app so it is built and delivered first; a failed APK build then leaves the phone with the APK it already had rather than half of a matched pair. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QQz6R4kBQcWSHBNZMgBnjL
22 lines
740 B
Plaintext
22 lines
740 B
Plaintext
// Read by Dev Updater. Structured as the body of the config: no outer
|
|
// parentheses, so nothing here is indented for the sake of a wrapper.
|
|
|
|
label: "AI Sessions",
|
|
|
|
// The server is built and delivered before the APK: if the APK build then
|
|
// fails, the phone keeps being offered the one it already had rather than
|
|
// half of a matched pair.
|
|
components: [
|
|
Server(
|
|
name: "backend",
|
|
build: "cargo build --release --manifest-path ../server/Cargo.toml",
|
|
// Installs into whichever user-service manager is here, and is how
|
|
// this server is started, stopped and asked about. See the script.
|
|
service: "../server/service",
|
|
),
|
|
Apk(
|
|
name: "app",
|
|
build: "./build-apk.sh",
|
|
),
|
|
]
|