From 6ef31ab7b215aa90c23f04e424377c8e8c7c136d Mon Sep 17 00:00:00 2001 From: okxlin <61420215+okxlin@users.noreply.github.com> Date: Tue, 28 Jul 2026 00:03:47 +0800 Subject: [PATCH 1/2] Add OpenCode app --- apps/opencode/1.18.4/.env.sample | 6 ++ apps/opencode/1.18.4/data.yml | 86 ++++++++++++++++++++++ apps/opencode/1.18.4/docker-compose.yml | 35 +++++++++ apps/opencode/1.18.4/scripts/init.sh | 37 ++++++++++ apps/opencode/1.18.4/scripts/uninstall.sh | 2 + apps/opencode/1.18.4/scripts/upgrade.sh | 4 + apps/opencode/README.md | 79 ++++++++++++++++++++ apps/opencode/data.yml | 31 ++++++++ apps/opencode/latest/.env.sample | 6 ++ apps/opencode/latest/data.yml | 86 ++++++++++++++++++++++ apps/opencode/latest/docker-compose.yml | 35 +++++++++ apps/opencode/latest/scripts/init.sh | 37 ++++++++++ apps/opencode/latest/scripts/uninstall.sh | 2 + apps/opencode/latest/scripts/upgrade.sh | 4 + apps/opencode/logo.png | Bin 0 -> 3356 bytes 15 files changed, 450 insertions(+) create mode 100644 apps/opencode/1.18.4/.env.sample create mode 100644 apps/opencode/1.18.4/data.yml create mode 100644 apps/opencode/1.18.4/docker-compose.yml create mode 100644 apps/opencode/1.18.4/scripts/init.sh create mode 100644 apps/opencode/1.18.4/scripts/uninstall.sh create mode 100644 apps/opencode/1.18.4/scripts/upgrade.sh create mode 100644 apps/opencode/README.md create mode 100644 apps/opencode/data.yml create mode 100644 apps/opencode/latest/.env.sample create mode 100644 apps/opencode/latest/data.yml create mode 100644 apps/opencode/latest/docker-compose.yml create mode 100644 apps/opencode/latest/scripts/init.sh create mode 100644 apps/opencode/latest/scripts/uninstall.sh create mode 100644 apps/opencode/latest/scripts/upgrade.sh create mode 100644 apps/opencode/logo.png diff --git a/apps/opencode/1.18.4/.env.sample b/apps/opencode/1.18.4/.env.sample new file mode 100644 index 000000000..daccdabd7 --- /dev/null +++ b/apps/opencode/1.18.4/.env.sample @@ -0,0 +1,6 @@ +CONTAINER_NAME=opencode-compose-check +PANEL_APP_PORT_HTTP=4096 +APP_DATA_DIR=./data +OPENCODE_SERVER_USERNAME=opencode +OPENCODE_SERVER_PASSWORD=change-me-before-deploy +TZ=Asia/Shanghai diff --git a/apps/opencode/1.18.4/data.yml b/apps/opencode/1.18.4/data.yml new file mode 100644 index 000000000..54521c01a --- /dev/null +++ b/apps/opencode/1.18.4/data.yml @@ -0,0 +1,86 @@ +additionalProperties: + formFields: + - default: 4096 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Web Port + labelZh: Web 端口 + label: + en: Web Port + zh: Web 端口 + zh-Hant: Web 連接埠 + ja: Web ポート + ko: 웹 포트 + ru: Веб-порт + ms: Port Web + pt-br: Porta Web + required: true + rule: paramPort + type: number + - default: ./data + edit: true + envKey: APP_DATA_DIR + labelEn: Data Directory + labelZh: 数据目录 + label: + en: Data Directory + zh: 数据目录 + zh-Hant: 資料目錄 + ja: データディレクトリ + ko: 데이터 디렉터리 + ru: Каталог данных + ms: Direktori Data + pt-br: Diretório de Dados + required: true + type: text + - default: opencode + edit: true + envKey: OPENCODE_SERVER_USERNAME + labelEn: Server Username + labelZh: 服务器用户名 + label: + en: Server Username + zh: 服务器用户名 + zh-Hant: 伺服器使用者名稱 + ja: サーバーユーザー名 + ko: 서버 사용자 이름 + ru: Имя пользователя сервера + ms: Nama Pengguna Pelayan + pt-br: Nome de Usuario do Servidor + required: true + rule: paramCommon + type: text + - default: '' + edit: true + envKey: OPENCODE_SERVER_PASSWORD + labelEn: Server Password + labelZh: 服务器密码 + label: + en: Server Password + zh: 服务器密码 + zh-Hant: 伺服器密碼 + ja: サーバーパスワード + ko: 서버 비밀번호 + ru: Пароль сервера + ms: Kata Laluan Pelayan + pt-br: Senha do Servidor + random: true + required: true + rule: paramComplexity + type: password + - default: Asia/Shanghai + edit: true + envKey: TZ + labelEn: Timezone + labelZh: 时区 + label: + en: Timezone + zh: 时区 + zh-Hant: 時區 + ja: タイムゾーン + ko: 시간대 + ru: Часовой пояс + ms: Zon Waktu + pt-br: Fuso Horário + required: true + type: text diff --git a/apps/opencode/1.18.4/docker-compose.yml b/apps/opencode/1.18.4/docker-compose.yml new file mode 100644 index 000000000..fea8b2f65 --- /dev/null +++ b/apps/opencode/1.18.4/docker-compose.yml @@ -0,0 +1,35 @@ +services: + opencode: + image: "ghcr.io/anomalyco/opencode:1.18.4" + container_name: ${CONTAINER_NAME} + restart: unless-stopped + user: "1000:1000" + command: ["serve", "--hostname", "0.0.0.0", "--port", "4096"] + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:4096" + volumes: + - "${APP_DATA_DIR}:/home/opencode" + environment: + - HOME=/home/opencode + - OPENCODE_SERVER_USERNAME=${OPENCODE_SERVER_USERNAME} + - OPENCODE_SERVER_PASSWORD=${OPENCODE_SERVER_PASSWORD} + - TZ=${TZ} + stop_grace_period: 15s + healthcheck: + test: + - CMD-SHELL + - >- + auth="$$(printf '%s:%s' "$${OPENCODE_SERVER_USERNAME}" "$${OPENCODE_SERVER_PASSWORD}" | base64 | tr -d '\n')"; + wget -q -O /dev/null --header "Authorization: Basic $$auth" http://127.0.0.1:4096/global/health + interval: 1m + timeout: 5s + retries: 5 + start_period: 20s + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/opencode/1.18.4/scripts/init.sh b/apps/opencode/1.18.4/scripts/init.sh new file mode 100644 index 000000000..771c05f38 --- /dev/null +++ b/apps/opencode/1.18.4/scripts/init.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}" + +read_env_value() { + local value="" + [[ -f "$ENV_FILE" ]] || return 0 + value="$(sed -n "s/^APP_DATA_DIR=//p" "$ENV_FILE" | tail -n 1)" + value="${value#\"}" + value="${value%\"}" + value="${value#\'}" + value="${value%\'}" + printf '%s\n' "$value" +} + +data_dir_value="${APP_DATA_DIR:-$(read_env_value)}" +data_dir_value="${data_dir_value:-./data}" +data_dir_is_absolute=false +case "$data_dir_value" in + /) echo "refusing to use / as APP_DATA_DIR" >&2; exit 1 ;; + /*) data_dir="$data_dir_value"; data_dir_is_absolute=true ;; + *) data_dir="$ROOT_DIR/${data_dir_value#./}" ;; +esac + +data_dir="$(readlink -f -- "$data_dir")" +case "$data_dir" in + /) echo "refusing to use / as APP_DATA_DIR" >&2; exit 1 ;; +esac +if [[ "$data_dir_is_absolute" == false && "$data_dir" != "$ROOT_DIR/"* ]]; then + echo "refusing relative APP_DATA_DIR outside the app directory" >&2 + exit 1 +fi + +mkdir -p -- "$data_dir" +chown -R 1000:1000 -- "$data_dir" diff --git a/apps/opencode/1.18.4/scripts/uninstall.sh b/apps/opencode/1.18.4/scripts/uninstall.sh new file mode 100644 index 000000000..ab8a8d674 --- /dev/null +++ b/apps/opencode/1.18.4/scripts/uninstall.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker-compose down --volumes diff --git a/apps/opencode/1.18.4/scripts/upgrade.sh b/apps/opencode/1.18.4/scripts/upgrade.sh new file mode 100644 index 000000000..71e688940 --- /dev/null +++ b/apps/opencode/1.18.4/scripts/upgrade.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euo pipefail + +exec "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/init.sh" diff --git a/apps/opencode/README.md b/apps/opencode/README.md new file mode 100644 index 000000000..f302aa85d --- /dev/null +++ b/apps/opencode/README.md @@ -0,0 +1,79 @@ +# OpenCode + +## 产品介绍 + +OpenCode 是一个自托管 AI 编程助手,可通过浏览器管理 AI 编程会话。 + +## 主要功能 + +- 通过浏览器运行 OpenCode 的无头服务。 +- 为服务配置独立的 HTTP Basic Auth 凭据。 +- 在持久化数据目录中保存 OpenCode 状态。 + +## 访问说明 + +- 默认 Web 端口:`4096` +- 容器内部端口:`4096` +- 安装时必须设置服务器用户名和随机生成的密码。OpenCode 使用 HTTP Basic Auth 保护服务。 +- 直接端口访问使用 HTTP;公开访问前请在 1Panel 中配置 HTTPS 反向代理。 + +## 数据与备份 + +- `Data Directory` 映射到容器的 `/home/opencode`,其中包含 OpenCode 配置、会话和已配置的模型提供商凭据。 +- 升级或迁移前备份整个 `Data Directory`。 +- 卸载会停止并移除容器,但不会删除数据目录。 + +## 安全边界 + +- 此包不挂载 Docker socket、宿主机工作区或其他宿主机敏感路径。 +- 在 OpenCode 中配置的模型提供商凭据保存在持久化数据目录中;请将备份视为敏感数据。 + +## 版本 + +- `1.18.4` 固定到上游 OpenCode `v1.18.4` 镜像。 +- `latest` 跟随上游 OpenCode 的最新镜像。 + +## 参考资料 + +- 上游仓库: +- 官方文档: +- 服务命令与认证实现: + +## Introduction + +OpenCode is a self-hosted AI coding agent that manages AI-assisted coding sessions in the browser. + +## Features + +- Run OpenCode's headless service in the browser. +- Configure dedicated HTTP Basic Auth credentials for the service. +- Persist OpenCode state in a dedicated data directory. + +## Access + +- Default web port: `4096` +- Container port: `4096` +- Installation requires a server username and generated password. OpenCode protects the service with HTTP Basic Auth. +- Direct port access uses HTTP. Configure an HTTPS reverse proxy in 1Panel before public exposure. + +## Data and Backup + +- `Data Directory` maps to `/home/opencode` in the container and stores OpenCode configuration, sessions, and configured model-provider credentials. +- Back up the complete `Data Directory` before upgrades or migrations. +- Uninstall stops and removes the container but keeps the data directory. + +## Security Boundary + +- This package does not mount the Docker socket, a host workspace, or other sensitive host paths. +- Model-provider credentials configured in OpenCode live in the persistent data directory. Treat its backups as sensitive. + +## Versions + +- `1.18.4` is pinned to the upstream OpenCode `v1.18.4` image. +- `latest` follows the upstream OpenCode latest image. + +## Sources + +- Upstream repository: +- Official documentation: +- Serve command and authentication: diff --git a/apps/opencode/data.yml b/apps/opencode/data.yml new file mode 100644 index 000000000..fe96995ad --- /dev/null +++ b/apps/opencode/data.yml @@ -0,0 +1,31 @@ +name: OpenCode +tags: + - AI +title: 自托管 AI 编程助手 +description: 自托管 AI 编程助手 +additionalProperties: + key: opencode + name: OpenCode + tags: + - AI + shortDescZh: 自托管 AI 编程助手 + shortDescEn: A self-hosted AI coding agent + description: + en: A self-hosted AI coding agent. + zh: 自托管 AI 编程助手。 + zh-Hant: 自託管 AI 程式設計助理。 + ja: セルフホスト型 AI コーディングエージェントです。 + ko: 자체 호스팅 AI 코딩 에이전트입니다. + ru: Самостоятельно размещаемый ИИ-агент для программирования. + ms: Ejen pengekodan AI yang dihoskan sendiri. + pt-br: Agente de programacao por IA auto-hospedado. + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://opencode.ai/ + document: https://opencode.ai/docs + github: https://github.com/anomalyco/opencode + architectures: + - amd64 + - arm64 diff --git a/apps/opencode/latest/.env.sample b/apps/opencode/latest/.env.sample new file mode 100644 index 000000000..daccdabd7 --- /dev/null +++ b/apps/opencode/latest/.env.sample @@ -0,0 +1,6 @@ +CONTAINER_NAME=opencode-compose-check +PANEL_APP_PORT_HTTP=4096 +APP_DATA_DIR=./data +OPENCODE_SERVER_USERNAME=opencode +OPENCODE_SERVER_PASSWORD=change-me-before-deploy +TZ=Asia/Shanghai diff --git a/apps/opencode/latest/data.yml b/apps/opencode/latest/data.yml new file mode 100644 index 000000000..54521c01a --- /dev/null +++ b/apps/opencode/latest/data.yml @@ -0,0 +1,86 @@ +additionalProperties: + formFields: + - default: 4096 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Web Port + labelZh: Web 端口 + label: + en: Web Port + zh: Web 端口 + zh-Hant: Web 連接埠 + ja: Web ポート + ko: 웹 포트 + ru: Веб-порт + ms: Port Web + pt-br: Porta Web + required: true + rule: paramPort + type: number + - default: ./data + edit: true + envKey: APP_DATA_DIR + labelEn: Data Directory + labelZh: 数据目录 + label: + en: Data Directory + zh: 数据目录 + zh-Hant: 資料目錄 + ja: データディレクトリ + ko: 데이터 디렉터리 + ru: Каталог данных + ms: Direktori Data + pt-br: Diretório de Dados + required: true + type: text + - default: opencode + edit: true + envKey: OPENCODE_SERVER_USERNAME + labelEn: Server Username + labelZh: 服务器用户名 + label: + en: Server Username + zh: 服务器用户名 + zh-Hant: 伺服器使用者名稱 + ja: サーバーユーザー名 + ko: 서버 사용자 이름 + ru: Имя пользователя сервера + ms: Nama Pengguna Pelayan + pt-br: Nome de Usuario do Servidor + required: true + rule: paramCommon + type: text + - default: '' + edit: true + envKey: OPENCODE_SERVER_PASSWORD + labelEn: Server Password + labelZh: 服务器密码 + label: + en: Server Password + zh: 服务器密码 + zh-Hant: 伺服器密碼 + ja: サーバーパスワード + ko: 서버 비밀번호 + ru: Пароль сервера + ms: Kata Laluan Pelayan + pt-br: Senha do Servidor + random: true + required: true + rule: paramComplexity + type: password + - default: Asia/Shanghai + edit: true + envKey: TZ + labelEn: Timezone + labelZh: 时区 + label: + en: Timezone + zh: 时区 + zh-Hant: 時區 + ja: タイムゾーン + ko: 시간대 + ru: Часовой пояс + ms: Zon Waktu + pt-br: Fuso Horário + required: true + type: text diff --git a/apps/opencode/latest/docker-compose.yml b/apps/opencode/latest/docker-compose.yml new file mode 100644 index 000000000..fc43f0b38 --- /dev/null +++ b/apps/opencode/latest/docker-compose.yml @@ -0,0 +1,35 @@ +services: + opencode: + image: "ghcr.io/anomalyco/opencode:latest" + container_name: ${CONTAINER_NAME} + restart: unless-stopped + user: "1000:1000" + command: ["serve", "--hostname", "0.0.0.0", "--port", "4096"] + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:4096" + volumes: + - "${APP_DATA_DIR}:/home/opencode" + environment: + - HOME=/home/opencode + - OPENCODE_SERVER_USERNAME=${OPENCODE_SERVER_USERNAME} + - OPENCODE_SERVER_PASSWORD=${OPENCODE_SERVER_PASSWORD} + - TZ=${TZ} + stop_grace_period: 15s + healthcheck: + test: + - CMD-SHELL + - >- + auth="$$(printf '%s:%s' "$${OPENCODE_SERVER_USERNAME}" "$${OPENCODE_SERVER_PASSWORD}" | base64 | tr -d '\n')"; + wget -q -O /dev/null --header "Authorization: Basic $$auth" http://127.0.0.1:4096/global/health + interval: 1m + timeout: 5s + retries: 5 + start_period: 20s + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/opencode/latest/scripts/init.sh b/apps/opencode/latest/scripts/init.sh new file mode 100644 index 000000000..771c05f38 --- /dev/null +++ b/apps/opencode/latest/scripts/init.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}" + +read_env_value() { + local value="" + [[ -f "$ENV_FILE" ]] || return 0 + value="$(sed -n "s/^APP_DATA_DIR=//p" "$ENV_FILE" | tail -n 1)" + value="${value#\"}" + value="${value%\"}" + value="${value#\'}" + value="${value%\'}" + printf '%s\n' "$value" +} + +data_dir_value="${APP_DATA_DIR:-$(read_env_value)}" +data_dir_value="${data_dir_value:-./data}" +data_dir_is_absolute=false +case "$data_dir_value" in + /) echo "refusing to use / as APP_DATA_DIR" >&2; exit 1 ;; + /*) data_dir="$data_dir_value"; data_dir_is_absolute=true ;; + *) data_dir="$ROOT_DIR/${data_dir_value#./}" ;; +esac + +data_dir="$(readlink -f -- "$data_dir")" +case "$data_dir" in + /) echo "refusing to use / as APP_DATA_DIR" >&2; exit 1 ;; +esac +if [[ "$data_dir_is_absolute" == false && "$data_dir" != "$ROOT_DIR/"* ]]; then + echo "refusing relative APP_DATA_DIR outside the app directory" >&2 + exit 1 +fi + +mkdir -p -- "$data_dir" +chown -R 1000:1000 -- "$data_dir" diff --git a/apps/opencode/latest/scripts/uninstall.sh b/apps/opencode/latest/scripts/uninstall.sh new file mode 100644 index 000000000..ab8a8d674 --- /dev/null +++ b/apps/opencode/latest/scripts/uninstall.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker-compose down --volumes diff --git a/apps/opencode/latest/scripts/upgrade.sh b/apps/opencode/latest/scripts/upgrade.sh new file mode 100644 index 000000000..71e688940 --- /dev/null +++ b/apps/opencode/latest/scripts/upgrade.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euo pipefail + +exec "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/init.sh" diff --git a/apps/opencode/logo.png b/apps/opencode/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..490d4916bf5e85e64c9ae75b8ab1810c873af598 GIT binary patch literal 3356 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 Date: Tue, 28 Jul 2026 10:38:10 +0800 Subject: [PATCH 2/2] chore(opencode): refresh fixed version to 1.18.7 --- apps/opencode/{1.18.4 => 1.18.7}/.env.sample | 0 apps/opencode/{1.18.4 => 1.18.7}/data.yml | 0 apps/opencode/{1.18.4 => 1.18.7}/docker-compose.yml | 2 +- apps/opencode/{1.18.4 => 1.18.7}/scripts/init.sh | 0 apps/opencode/{1.18.4 => 1.18.7}/scripts/uninstall.sh | 0 apps/opencode/{1.18.4 => 1.18.7}/scripts/upgrade.sh | 0 apps/opencode/README.md | 8 ++++---- 7 files changed, 5 insertions(+), 5 deletions(-) rename apps/opencode/{1.18.4 => 1.18.7}/.env.sample (100%) rename apps/opencode/{1.18.4 => 1.18.7}/data.yml (100%) rename apps/opencode/{1.18.4 => 1.18.7}/docker-compose.yml (95%) rename apps/opencode/{1.18.4 => 1.18.7}/scripts/init.sh (100%) rename apps/opencode/{1.18.4 => 1.18.7}/scripts/uninstall.sh (100%) rename apps/opencode/{1.18.4 => 1.18.7}/scripts/upgrade.sh (100%) diff --git a/apps/opencode/1.18.4/.env.sample b/apps/opencode/1.18.7/.env.sample similarity index 100% rename from apps/opencode/1.18.4/.env.sample rename to apps/opencode/1.18.7/.env.sample diff --git a/apps/opencode/1.18.4/data.yml b/apps/opencode/1.18.7/data.yml similarity index 100% rename from apps/opencode/1.18.4/data.yml rename to apps/opencode/1.18.7/data.yml diff --git a/apps/opencode/1.18.4/docker-compose.yml b/apps/opencode/1.18.7/docker-compose.yml similarity index 95% rename from apps/opencode/1.18.4/docker-compose.yml rename to apps/opencode/1.18.7/docker-compose.yml index fea8b2f65..fb1e1008c 100644 --- a/apps/opencode/1.18.4/docker-compose.yml +++ b/apps/opencode/1.18.7/docker-compose.yml @@ -1,6 +1,6 @@ services: opencode: - image: "ghcr.io/anomalyco/opencode:1.18.4" + image: "ghcr.io/anomalyco/opencode:1.18.7" container_name: ${CONTAINER_NAME} restart: unless-stopped user: "1000:1000" diff --git a/apps/opencode/1.18.4/scripts/init.sh b/apps/opencode/1.18.7/scripts/init.sh similarity index 100% rename from apps/opencode/1.18.4/scripts/init.sh rename to apps/opencode/1.18.7/scripts/init.sh diff --git a/apps/opencode/1.18.4/scripts/uninstall.sh b/apps/opencode/1.18.7/scripts/uninstall.sh similarity index 100% rename from apps/opencode/1.18.4/scripts/uninstall.sh rename to apps/opencode/1.18.7/scripts/uninstall.sh diff --git a/apps/opencode/1.18.4/scripts/upgrade.sh b/apps/opencode/1.18.7/scripts/upgrade.sh similarity index 100% rename from apps/opencode/1.18.4/scripts/upgrade.sh rename to apps/opencode/1.18.7/scripts/upgrade.sh diff --git a/apps/opencode/README.md b/apps/opencode/README.md index f302aa85d..e1729f211 100644 --- a/apps/opencode/README.md +++ b/apps/opencode/README.md @@ -30,14 +30,14 @@ OpenCode 是一个自托管 AI 编程助手,可通过浏览器管理 AI 编程 ## 版本 -- `1.18.4` 固定到上游 OpenCode `v1.18.4` 镜像。 +- `1.18.7` 固定到上游 OpenCode `v1.18.7` 镜像。 - `latest` 跟随上游 OpenCode 的最新镜像。 ## 参考资料 - 上游仓库: - 官方文档: -- 服务命令与认证实现: +- 服务命令与认证实现: ## Introduction @@ -69,11 +69,11 @@ OpenCode is a self-hosted AI coding agent that manages AI-assisted coding sessio ## Versions -- `1.18.4` is pinned to the upstream OpenCode `v1.18.4` image. +- `1.18.7` is pinned to the upstream OpenCode `v1.18.7` image. - `latest` follows the upstream OpenCode latest image. ## Sources - Upstream repository: - Official documentation: -- Serve command and authentication: +- Serve command and authentication: