sganggs 24578cf2cb feedback5 WZ: the real-server equip-replace check waits until 取消 has drawn the item back on its bench slot before it drops it again (test/ui/leftovers.e2e.test.js)
The 0.2.0 candidate's full pass failed at the second drop ('Waiting for selector `.eqr .eqr__opt` failed'). The view
keeps a dropped piece on the drop tile for 1.3 s (render/app/tune.js DROP_PENDING_MS, unchanged since the first import)
and then flies it back in a frame-timed tween. The test picked the item up again 0.5 s after 取消, where it had been
drawn a moment before. Even alone the first try often grabbed nothing (the helper's retry hid it). With few frames
(software-rendered headless Chrome on a loaded machine; reproduced with frames ~600 ms apart) the press grabbed the
operator under the item, the operator dropped on its own tile opened the direction wheel, and the wheel swallowed the
retry. The dialog itself opens and renders as before (补位 / i18n / 自选 not involved).

Now 取消 is also checked to draw the item back on its bench slot, and the next drop waits for that; under the same slow
frames the drop succeeds at the first try. Alone: 5/5 twice; mock.e2e 32/32, devices.e2e 26/26. A test timing flake,
no product change; golden unchanged.
2026-10-06 22:00:26 +08:00

卫戍协议:盟约 · Stronghold Protocol: Alliance

Warning

开发版(dev 分支):不稳定,请勿用于公开服务器。 这里是 0.2.0 的开发中代码,规则、数据和存档格式随时会变,可能有未发现的问题。想玩或开服请使用 Releases 页面的正式版整合包,或 master 分支。反馈问题时请注明「dev」和版本号(标题页底部、启动横幅和 /healthz 都会显示 0.2.0-dev)。开发版与正式版在同一地址下共用浏览器里保存的设置和登录信息,来回切换后如果界面异常,清除这个网站的数据即可。开发版不提供整合包。

Development branch: unstable — do not run it as a public server. Rules, data and saved settings may change at any time. Play or host the latest release (or the master branch) instead; when you report a bug from this branch, say "dev" and the version shown on the title screen. It shares the browser's saved settings with a release served at the same address — clear the site's data if the interface misbehaves after switching. No release zips are built from this branch.

《明日方舟》季节性自走棋塔防玩法「卫戍协议:盟约」的非官方同人复刻:浏览器即开即玩,单人或 1–4 人联机合作。

version license node

声明

Important

  • 本项目是玩家自制的非官方同人作品,与上海鹰角网络科技有限公司(Hypergryph)、Yostar 及其关联方没有任何关系,未获其授权或认可。
  • 《明日方舟》及「卫戍协议」相关的名称、角色、美术、音乐、音效、文本与数据等素材,版权归原权利人所有。这些素材不适用本项目的 GPL-3.0 许可证;GPL 只覆盖本项目自己编写的代码。
  • 仅供学习交流与个人非商业使用。严禁任何形式的盈利,包括但不限于:售卖本项目或整合包、付费下载或付费分发、收费服务器或收费代开、广告 / 打赏 / 会员等变现方式,以及其他任何商业用途。
  • 仓库源码不包含游戏的美术与音频素材(只有由官方数据表生成的数据和几张游戏截图,同样不适用 GPL);Releases 中的完整包为了方便玩家附带了素材(精简包不带,首次启动时从公开镜像下载),下载即视为同意本声明。请勿将素材用于本项目以外的用途或单独再分发。完整条款见 NOTICE.md。
  • 权利人如认为本项目侵犯其权益,请通过 Issue 联系,我们会立即删除相关内容。
  • 本项目按「现状」提供,不提供任何担保,使用风险自负。

English summary: below.

同盟房间 策略轮选 休整期(商店 / 盟约)
房间 策略 休整期
部署方向轮盘 作战 最终攻势
方向 作战 最终攻势

目录

简介

「卫戍协议:盟约」是自走棋 + 塔防:休整期在调度中心招募干员、摆阵、配装备,作战期干员自动部署,迎击从红门涌来的敌人,漏过去的敌人扣目标生命值。本项目在浏览器里复刻了这一玩法,规则和数值尽量对照官方数据表与 PRTS 核对。

  • 独立模拟(单人)与同盟模拟(1–4 人合作,没有 PvP;空位可以加 AI 队友)。
  • 服务器是一个 Node.js 程序,战斗在各玩家的浏览器里模拟(和官方一样),服务器只管经济与回合,一台低功耗小主机就能开服。
  • 本分支是 0.2.0 开发版(未发布);最新正式版是 0.1.4,见 CHANGELOG.md。仍有少数规则按推断实现,与官方不一致的地方欢迎在 Issue 里反馈。

功能一览

  • 完整的一局:确认本局信息 → 策略轮选(40 名策略)→ 14 回合 → 结算称号;险境及以上满足条件时进入第 15 回合「隐秘核心」。
  • 4 种难度:标准 / 险境 / 绝境 / 终极,独立与同盟各一套参数,均取自官方数据。
  • 休整期:招募、刷新、冻结、升级调度中心;整备区与临时整备区;从整备区拖到棋盘部署,用方向轮盘选择朝向。同盟模拟的卡池共用。
  • 晋升精锐:3 名同名干员自动合成精锐,并获得一次高一阶的免费招募。
  • 干员与调配:112 名可招募干员(+ 精锐)及其技能、天赋和特质;开局前可以为每名干员选择携带的技能(283 个技能全部手工实现)和精锐的模组。
  • 盟约与层数:23 个盟约(8 个势力核心盟约 + 附加盟约),层数整局保留,每个盟约最多 999 层。
  • 装备与机变:装备与法术,同名装备合成、特定组合赋予盟约效果;已配发的装备锁定在干员身上。部分回合开始前有机变选卡(装备、资金、干员、层数、悬赏等)。
  • 自动作战:技能按官方「技能策略」自动释放;按接触半径阻挡,阻挡者倒下时由接触的干员接替;元素损伤与元素爆发;召唤物由玩家手动摆放;推开 / 拉拽按力度与重量计算;被击倒的干员留在原地显示再部署倒计时。
  • 地形与敌人:阻隔工事、射击台、源石流吹风机、沼泽、排气格栅、涨潮等地形装置;空中与近地悬浮敌人、悬赏敌人。
  • 联防:有人漏怪、又有人完美作战时,完美作战的队友带着阵容帮忙拦截漏掉的敌人。
  • 最终攻势与隐秘核心:两人共享一个战场,全队共同削减同一条领袖血条;10 个敌方领袖,巨型领袖约 5×3 格的受击范围,以及官方的限伤规则。
  • 结算称号:卫戍之星、不朽盟约、坚若磐石等 6 个称号。
  • 断线重连:同盟模拟断线后 10 分钟内重新打开页面即可回到原座位,掉线期间按原阵容自动作战,也可以「暂离」交给 AI 托管;独立模拟 24 小时内可以回来继续(同一个浏览器)。
  • 交互细节:漏怪时顶栏的目标生命值实时减少(结算时确定);点选、拖放和配发装备都按地上的方格;购买、升级和机变选卡都需要点两次确认;只有一名玩家时除作战外不计时。
  • 画面与声音:真实 Spine 小人、官方 BGM 与音效、表情(6 套 × 6 个)、作战特效;可选的官方 3D 棋盘(需要从本机客户端提取贴图)。
  • 手机与电脑:触摸拖拽、长按查看详情,推荐横屏;设置里可以调低画质。

快速开始

方式一:整合包(推荐)

Releases 里有两种整合包,代码和运行依赖完全相同,二选一:

  • 完整包 Stronghold-Protocol-v<版本>.zip(约 400 MB,解压后约 590 MB):附带全部美术 / 音频(含官方 3D 棋盘贴图),解压就能玩,不需要再下载任何东西。推荐。
  • 精简包 Stronghold-Protocol-v<版本>-lite.zip(约 21 MB):不带素材,第一次启动时自动从公开镜像下载美术、Spine 模型、音频、字体、表情和「玩法说明」教程图(约 440 MB,可中断,再次启动会续传);官方 3D 棋盘等本地客户端素材不在其中(见下面的「本地客户端素材」)。适合下载大文件不方便的情况。

两种包都只含运行和部署需要的文件(服务器、客户端、数据、启动脚本、setup / doctor / 素材下载工具、许可证与说明、docs/PLAYING.md 和 docs/DEPLOY.md);测试、开发工具和设计文档只在源码仓库里。

  1. 安装 Node.js 22 或 24(LTS)
    • Windows:在 PowerShell 里运行 winget install OpenJS.NodeJS.LTS,或到 https://nodejs.org/zh-cn/download 下载安装包。
    • macOS:brew install node@22,或到官网下载安装包。
    • Linux:发行版的包管理器、nvm 或 fnm。
  2. 下载:在 Releases 页面下载最新版本的完整包(或精简包),解压到一个路径较短的文件夹(Windows 上建议不要放在 OneDrive 同步的目录里)。
  3. 启动
    • Windows:双击 scripts\start-windows.bat。如果弹出「安全警告」,点「运行」;Windows 防火墙弹窗请勾选「专用网络」并允许。
    • macOS / Linux:在解压出的文件夹里运行 ./scripts/start.sh(或 bash scripts/start.sh)。
  4. 浏览器会自动打开 http://localhost:3000。窗口里列出的局域网地址可以直接发给同一网络的朋友。关闭窗口(或按 Ctrl+C)即停止服务器。

方式二:从源码运行

git clone https://github.com/sganggs/Stronghold-Protocol.git
cd Stronghold-Protocol
npm install        # 安装依赖(postinstall 会把 pixi / preact / three 复制到 public/vendor)
npm run setup      # 检查环境,并从公开镜像下载约 440 MB 美术 / 音频(可中断,再次运行会续传)
npm start          # 启动服务器:http://localhost:3000

也可以直接运行启动脚本(Windows scripts\start-windows.bat,macOS / Linux scripts/start.sh):首次会自动安装依赖、下载素材,然后启动服务器并打开浏览器。

  • 本地客户端素材(可选):官方 3D 棋盘、部分官方界面图标(交流按钮与表情面板的边框、模组类型图标等)、灼热 / 炽焰源石虫和 39 个召唤物(多数自选召唤物)的官方模型需要从本机的《明日方舟》PC 客户端提取(Windows 原生客户端、macOS 的 CrossOver 或 PlayCover)。npm run setup 检测到客户端时会询问是否提取(需要 Python 3.8+,依赖装在项目内的 .venv-extract,不影响系统);之后可以用 node tools/setup.mjs --local 重新提取,或用 --game "<…/StreamingAssets/AB/Windows>" 指定路径。没有客户端时游戏照常运行,这几样换成替代样式:2D 棋盘、样式相近的图标、染色的普通源石虫、召唤物头像。表情和「玩法说明」的教程图随上面的素材一起从公开镜像下载,不需要客户端。没有客户端的服务器(例如 Linux VPS)也可以从同一版本的整合包(完整包;精简包没有)里复制 public/assets/local/ 和 data/local-assets.json,见 docs/DEPLOY.md 的「本地客户端素材」。
  • 素材下载优先使用 GitHub,失败时自动改用 jsDelivr 镜像。
  • npm run doctor(即 node tools/doctor.mjs)可以随时诊断:Node 版本、素材是否完整、端口占用、局域网地址和防火墙。

系统要求

项目 要求
开服的电脑 Windows / macOS / Linux,Node.js 22 或 24(LTS);磁盘约 600–750 MB(素材、依赖与本地提取贴图:完整包解压后约 590 MB);内存空闲约 100 MB,每局再加几 MB
玩家 支持 WebGL 的现代浏览器(Chrome / Edge / Firefox / Safari 最新版),电脑、手机或平板(横屏)
网络 首次进入游戏时,每位玩家要从开服的电脑下载几十 MB 素材(之后走浏览器缓存);对局中流量很小

显卡较弱时可以在「设置」里调低画质,或在网址后加 ?board=2d(强制 2D 棋盘)/ ?render=fallback(不用 WebGL 的简化画面)。

端口与配置

默认监听 TCP 3000。换端口:启动脚本加 --port 3001,或设置环境变量 PORT。

环境变量 默认 说明
PORT 3000 监听端口
HOST 0.0.0.0 监听地址(127.0.0.1 = 只允许本机,放在反向代理后面时使用)
SP_COMBAT client client:各玩家浏览器模拟自己的战斗(服务器负载极低);server:由服务器模拟并推流
SP_VERIFY off 服务器复算客户端上报的战斗结果:off / sample(约 1/8 抽查)/ all(全部复算,更耗 CPU)
TRUST_PROXY auto 是否信任 X-Forwarded-For 等转发头:auto 只信任来自本机 / 内网的代理;1 总是;0 从不
DEBUG 空 设为任意值输出详细日志
SP_NO_BROWSER 空 设为 1 时启动脚本不自动打开浏览器

设置方式:macOS / Linux PORT=8080 npm start;PowerShell $env:PORT=8080; npm start;cmd set "PORT=8080" && npm start。健康检查:GET /healthz。

和朋友一起玩(局域网)

  1. 打开页面 → 输入昵称 → 同盟模拟 → 创建房间。房主选择难度,可以添加 / 移除 AI 队友;开始前也可以把其他博士移出房间(对方可凭密钥重新加入)。
  2. 把 4 位字母的同盟密钥,或「复制链接」得到的 http://<地址>:3000/?room=密钥 发给朋友。
  3. 所有人点「准备就绪」后房主开始。
  4. 同一 Wi-Fi / 路由器下的朋友打开启动窗口里列出的地址(形如 http://192.168.x.x:3000)即可。打不开时多半是防火墙:Windows 首次启动时在弹窗中允许「专用网络」,或运行 npm run doctor 查看具体命令;访客 Wi-Fi 常开启「AP 隔离」,也会导致连不上。

刷新页面或断线后,同盟模拟 10 分钟内、独立模拟 24 小时内重新打开即可回到原座位。服务器把房间和对局都保存在内存里,重启服务器会结束所有对局。

联机方式

朋友不在同一个局域网时,下面是几类常见做法,按自己的情况选一种即可。这里只做简单介绍,提到的工具和服务只是举例,本项目与它们没有任何关系,也不做推荐;具体的安装、费用和使用规则请以各自的官方说明为准。部署细节(防火墙、开机自启、反向代理与 HTTPS、Docker)见 docs/DEPLOY.md。

方式 怎么做 适合
同一局域网直连 把启动窗口里的局域网地址发给朋友 同一个家、宿舍或网吧
组网工具(虚拟局域网) 例如 Tailscale、ZeroTier、EasyTier、蒲公英:开服的人和朋友都安装同一个工具并加入同一个网络,朋友用开服电脑的虚拟 IP 访问 http://<虚拟 IP>:3000 固定的几个熟人;不暴露到公网。朋友也要装客户端,部分工具需要注册账号;跨地区时可能走中继而变慢
内网穿透 / 隧道 只有开服的人运行客户端,朋友直接打开网址。例如自建的 frp(需要一台有公网 IP 的服务器)、Cloudflare 的 cloudflared tunnel --url http://localhost:3000(临时地址,每次启动都会变;国内访问延迟可能较高)、国内的樱花 frp 一类公共穿透服务(通常需要实名,大陆节点承载网页可能有备案要求) 不想改路由器、没有公网 IP;免费线路带宽小时,首次加载素材会慢一些
云服务器 / VPS 直接部署 在 VPS 上运行整合包,或用仓库自带的 Dockerfile;用 Caddy / Nginx 加上 HTTPS。选离玩家近、线路好的地区(面向大陆玩家时,境外机房要关注回程线路,否则晚高峰延迟可能很高;大陆服务器绑定域名需要 ICP 备案) 想长期开服、玩家分布在不同地区

通用注意事项:

  • 游戏是单个常驻 Node.js 进程 + WebSocket(路径 /ws),只能跑一个实例,必须部署在域名根路径;Vercel 之类的 Serverless 平台和 GitHub Pages 之类的静态托管都不适用。反向代理要转发 WebSocket 升级。
  • 游戏没有账号系统,知道地址的人都能进来。请只把地址发给朋友,不要公开发布,也不要搭建公开大厅;这同时能降低素材版权方面的风险。
  • 有公网 IPv4 时也可以在路由器上做端口转发,但这会把家里的电脑直接暴露在公网上,优先考虑上面的方式。

操作

操作 方法
购买 / 升级调度中心 / 机变选卡 点一次选中,再点一次确认(D 升级)
部署 / 移动干员 从整备区拖到棋盘格 → 出现方向轮盘 → 往上 / 右 / 下 / 左滑动选择朝向后松手;松在中心或点「✕ 点击取消」取消。拖动时模型在指针 / 手指下,指针所在的格子就是落点
调整朝向 把干员拖回它自己的格子,再选方向
出售 / 撤退 / 销毁装备 点击单位所在的格子 → 底部按钮「出售 +1」「撤退」;也可以把棋盘上的干员拖回整备区撤退。整备区里的装备与法术只能「销毁」,已配发的装备锁定在干员身上(干员出售或合成精锐时退回整备区)
装备 把装备拖到干员所在的格子上(每人 2 件;满了会弹出替换窗口,被替换的一件会被销毁);法术拖到地块上并选方向
查看详情 右键或长按单位 / 卡牌(属性为实时数值,高于基础值为绿色、低于为红色)
快捷键 R 刷新 · F 冻结 · D 升级 · Space 准备就绪 · Esc 取消 / 关闭
方向轮盘键盘操作 方向键预览 · Enter 确认 · Esc 取消
暂停(独立模拟) 作战中(含最终攻势 / 隐秘核心)点顶栏的「暂停」或按 Space,再点「继续作战」(或 Space)继续;同盟模拟的作战不能暂停
表情 左下角「交流」,左右滑动(或方向键)换主题,冷却 1 秒
观战 自己的作战结束后(或休整期)点左侧队友头像 →「前往查看」;不参战的朋友可以在大厅输入同盟密钥点「观战」(每个同盟最多 2 名观战者,本作新增)

完整的规则、数值和小技巧见 docs/PLAYING.md(游戏内左下角也有「玩法说明」)。

文档

文档 内容
CHANGELOG.md 更新记录:每个版本修复了什么、哪些反馈经核实不是问题
docs/PLAYING.md 玩法指南:流程、经济、招募与晋升、摆阵、联防、盟约、最终攻势、结算称号
docs/DEPLOY.md 部署指南:Windows 开服与开机自启、防火墙、组网 / 隧道、反向代理与 HTTPS、Docker、systemd、排错
docs/WINDOWS.md Windows 便携包:怎么打一份「零安装」包(scripts/make-windows-bundle.mjs)、包里放了什么、授权注意事项
docs/DESIGN.md 架构与契约(英文):索引,按章节号找到文件;现行规则在 docs/design/(范围与目录分工、坐标与时间、战斗引擎、对局、网络协议、渲染与 UI),各次试玩和各版本的规则修订与依据在 docs/history/
docs/ARCHITECTURE.md 代码地图(英文):服务器、联机协议和前后端共用的战斗模拟,0.2.0 重构后的目录,数据流,黄金结果与导入边界,常见改动从哪里入手
CONTRIBUTING.md 参与贡献:准备环境、运行测试、忠实原则、提交与 PR 约定、怎样添加自选干员(中文,末尾附英文摘要)
docs/SIM.md 战斗模拟引擎参考(英文):钩子、技能描述格式、职业默认行为
docs/META.md 对局与经济引擎(英文):回合流程、商店、联防、最终攻势的实现细节
docs/DATA.md 由官方数据表生成的游戏数据(英文)
docs/ASSETS.md 素材来源、目录结构与清单(英文)
docs/I18N.md 中文 / English 界面(英文):界面文字、游戏文本与服务器消息怎样翻译,覆盖范围,切到英文后仍显示中文的内容
docs/BALANCE.md 难度模型与测量(英文)
docs/research/ 官方规则、数据与界面的调研记录

开发与测试

npm run dev                 # node --watch:改动服务器代码后自动重启
node --test                 # 单元 + 集成测试(约 3170 项;缺少素材 / 浏览器的用例会自动跳过)
SP_E2E=1 node --test test/ui/mock.e2e.test.js        # 浏览器端到端测试,需要本机 Chrome(CHROME_PATH 可指定路径)
SP_REAL_E2E=1 node --test test/ui/real.e2e.test.js   # 需要 Chrome + 已下载的素材
RENDER_E2E=1 node --test 'test/render/*.browser.test.js'   # 渲染测试,部分需要本地提取的棋盘贴图
GOLDEN_FULL=1 node --test test/golden.test.js           # 黄金结果:固定种子的整套战斗与人机对局摘要(默认只跑快速子集)
  • 游戏数据由 npm run build-data(tools/build-data.mjs)从官方数据表生成,不要手工修改 data/*.json。
  • 只重构、不改玩法的提交不能改变 test/golden/*.json;有意改变玩法时运行 npm run golden:update,检查差异后随改动一起提交(见 test/golden/README.md)。
  • GitHub Actions(.github/workflows/ci.yml)在 Ubuntu 与 Windows、Node 22 / 24 上运行 npm ci、node --test 和服务器冒烟测试。
  • 代码怎么分层、改某个规则该从哪个文件入手,见 docs/ARCHITECTURE.md。

项目结构

路径 内容
server/ 入口 index.js;Node HTTP 静态服务 + WebSocket(/ws,代码在 http/)、大厅、对局引擎(match/)、战斗模拟(sim/,浏览器与服务器共用)
shared/ 前后端共用的常量与网络协议
public/ 浏览器客户端(原生 ES 模块,PixiJS + pixi-spine、three.js 3D 棋盘、Preact + htm UI)
data/ 由官方数据表生成的游戏数据与素材清单 assets.json
tools/ setup.mjs / doctor.mjs、素材下载 fetch-assets.mjs、数据构建、本地提取 local-extract/
scripts/ 启动脚本(Windows / macOS / Linux)、Windows 开机自启
docs/ 文档与调研
test/ node:test 测试

许可证

  • 代码:本项目自己编写的代码以 GPL-3.0-or-later 发布,全文见 LICENSE;另附一条 GPL 第 7 条的附加许可,允许与 pixi-spine 中的 Spine Runtimes 组合分发(见 NOTICE.md)。
  • 游戏素材不在许可范围内:《明日方舟》相关的美术、音乐、音效、文本与数据等版权归原权利人所有,不适用 GPL,使用限制见上方的声明和 NOTICE.md。
  • 第三方组件各自遵循其许可证:通过 npm 安装的库(整合包的 node_modules 中附带各自的许可证文件)、tools/local-extract/aklz4.py 的算法(BSD-3-Clause),以及字体等,清单与许可证全文见 THIRD-PARTY-NOTICES.md。

致谢与数据来源

感谢以上项目的作者与维护者,以及鹰角网络带来的这款游戏。

贡献

欢迎提 Issue 反馈 bug、与官方规则不一致的地方或改进建议,也欢迎提交 Pull Request:

  • 准备环境、运行测试、忠实原则和提交约定见 CONTRIBUTING.md。
  • 提交前请运行 node --test,并同步更新相关文档;文档使用简体中文,代码与注释使用英文。
  • 提交的代码将以 GPL-3.0-or-later 发布。
  • 请不要提交任何游戏素材文件(public/assets/ 等目录已被 .gitignore 排除)。
  • 本项目坚持非商业:请不要提交广告、付费、打赏等任何形式的变现功能。

English

An unofficial, non-commercial fan remake of Arknights' seasonal auto-chess tower-defense mode Stronghold Protocol: Alliance, played in the browser: solo, or 1–4 player co-op (AI teammates can fill seats). Combat is simulated in each player's browser, so a low-power PC can host.

  • Run: download the full bundle Stronghold-Protocol-v<version>.zip (~400 MB, all the art inside) from Releases — or the lite one, …-lite.zip (~21 MB), which downloads the art (~440 MB) on its first start — install Node.js 22 or 24, then double-click scripts\start-windows.bat (Windows) or run ./scripts/start.sh (macOS / Linux) and open http://localhost:3000. From source: npm install && npm run setup && npm start (setup downloads ~440 MB of art from public mirrors, the emotes and the how-to-play pages included; the official 3D board, some official HUD icons and two enemy models are extracted from a local Arknights client — without one the game uses the 2D board and look-alike stand-ins, and a server can copy public/assets/local/ and data/local-assets.json from the full bundle of the same version).
  • Play with friends: create a co-op room and share the 4-letter key or the ?room=KEY link. On a LAN, use the address printed at start; otherwise use a virtual-LAN tool, a tunnel or a VPS — see docs/DEPLOY.md.
  • Disclaimer: not affiliated with or endorsed by Hypergryph or Yostar. All Arknights names, art, audio, text and data are © their respective owners and are not covered by this project's GPL licence. For study and personal non-commercial use only — no selling, paid distribution, paid servers or monetisation of any kind. Content will be removed on request of the rights holders. Provided "as is", without warranty.
  • License: code GPL-3.0-or-later (LICENSE); game assets excluded.
  • Contributing: CONTRIBUTING.md (an English summary at its end); the code map is docs/ARCHITECTURE.md.
S
Description
No description provided
Readme GPL-3.0
29 MiB
0 Stars 1 Watchers 0 Forks
Languages
JavaScript 97.1%
CSS 1.9%
Python 0.5%
HTML 0.4%