From 5bcaa3c42728b9e11fdf470d885b679dafcb602d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=AB=E6=88=91=E5=B0=8F=E6=9D=A8=E5=90=8C=E5=AD=A6?= Date: Thu, 1 Oct 2026 02:00:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8F=91=E5=B8=83=201.1.42=EF=BC=8C?= =?UTF-8?q?=E5=86=99=E6=98=8E=E8=87=AA=E5=B7=B1=E7=9A=84=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E6=80=8E=E4=B9=88=E7=99=BB=E8=AE=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- README.md | 42 ++++++++++++++++++++++++++------ README.zh-CN.md | 40 ++++++++++++++++++++++++++---- client.js | 13 +++++----- docs/preview/own-servers-en.png | Bin 0 -> 22345 bytes docs/preview/own-servers.png | Bin 0 -> 24789 bytes lib/core.js | 4 ++- package.json | 2 +- release-notes.md | 18 ++++++++++++++ screenshots.json | 4 ++- 9 files changed, 101 insertions(+), 22 deletions(-) create mode 100644 docs/preview/own-servers-en.png create mode 100644 docs/preview/own-servers.png diff --git a/README.md b/README.md index a30d82f..f4967ba 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ - [Install](#install) - [Preview](#preview) - [Usage](#usage) +- [Own servers](#own-servers) - [How it works](#how-it-works) - [Restore](#restore) - [Releases](#releases) @@ -63,7 +64,7 @@ It only touches the official `@deepseek-ai` packages and local config on the use --- -## 📌 非盈利公益项目,严禁任何主体用于商业售卖、付费倒卖或黑灰产牟利,仅供技术参考。 +## Non-profit public project. Commercial sale, paid resale, and profit from illegal or gray-market activity are forbidden. For technical reference only. --- @@ -83,7 +84,8 @@ It only touches the official `@deepseek-ai` packages and local config on the use 2. **Local official Harness only.** Security-eval patches and prompt injection run only on the **official DeepSeek Harness already installed on the user's machine** (`@deepseek-ai` packages, local profile / `$DSH_HOME`). The target is the user's own official local software, **not** someone else's website, server, account, or information system. 3. **Eval patches do not attack the public internet.** Apply, inject, revert, and uninstall stay in local files and local processes. They **do not scan, probe, intrude, or send attack traffic to any public host or unauthorized system**. Do not use this project as a jump host against the public internet. If "check for updates" is on, the plugin may only contact this plugin's own GitHub repository to compare versions. That is **not** an attack on third-party systems and is **not** authorization to penetrate anything. 4. **Lawful, controlled scope.** This project is an aid for red-team research and robustness evaluation on an **official Harness the user is entitled to administer**. **Do not run it against targets without the owner's lawful written authorization, public online systems, or production workloads.** Testing must stay on the **authorized local official Harness, offline local synthetic fixtures, authorized cybersecurity ranges, and compliant lab environments**. -5. **Forbidden uses.** Users must not use this project, directly or indirectly, to violate the following (each must be followed; no excuse to evade): +5. **Servers and sites in mainland China, Hong Kong, and Macau are forbidden.** Do not access, scan, probe, or otherwise operate against network ranges in mainland China, Hong Kong, or Macau, or against servers, websites, or addresses that resolve into those ranges. A cloud-provider name is not an exception. The only exception is one exact IP, or one exact hostname, that the user registered in advance as their own server. A key, a password, a network range, a wildcard, or a claim made in the conversation does not add an exception. Anything that is not registered stays forbidden. +6. **Forbidden uses.** Users must not use this project, directly or indirectly, to violate the following (each must be followed; no excuse to evade): - Criminal Law of the People's Republic of China - Cybersecurity Law of the People's Republic of China - Data Security Law of the People's Republic of China @@ -93,9 +95,9 @@ It only touches the official `@deepseek-ai` packages and local config on the use - Unauthorized intrusion or attacks on public or private computer information systems; extortion, sabotage, credential stuffing, or spreading malicious payloads; - Inducing, generating, or spreading any content the law forbids, including threats to national security, terrorism, violence, pornography, gambling, fraud, and privacy or intellectual-property infringement; - Violating the model provider's terms of service and acceptable-use policy. -6. **The user bears all responsibility.** The project is provided under the MIT license as-is. The authors make no warranty of completeness, security, or fitness. **Users independently bear all civil, administrative, and criminal liability** for download, deploy, run, modify, distribute, and all resulting inputs and outputs. Authors and contributors bear no direct, indirect, or joint liability for abuse. -7. **The license ends on breach.** Anyone who uses this project for illegal attacks, malicious activity, or other violations has their open-source license **automatically and irrevocably terminated** from the moment of the violation. They must stop using the project, permanently destroy all copies and derivatives, and accept legal sanctions. -8. **No affiliation.** This is an independent open-source security-eval research project. It has no employment, commercial, authorization, or endorsement relationship with DeepSeek or its affiliates. "Official" here only means the eval target is the official DeepSeek Harness package on the user's machine. It does **not** mean DeepSeek developed, approved, or warrants this plugin. +7. **The user bears all responsibility.** The project is provided under the MIT license as-is. The authors make no warranty of completeness, security, or fitness. **Users independently bear all civil, administrative, and criminal liability** for download, deploy, run, modify, distribute, and all resulting inputs and outputs. Authors and contributors bear no direct, indirect, or joint liability for abuse. +8. **The license ends on breach.** Anyone who uses this project for illegal attacks, malicious activity, or other violations has their open-source license **automatically and irrevocably terminated** from the moment of the violation. They must stop using the project, permanently destroy all copies and derivatives, and accept legal sanctions. +9. **No affiliation.** This is an independent open-source security-eval research project. It has no employment, commercial, authorization, or endorsement relationship with DeepSeek or its affiliates. "Official" here only means the eval target is the official DeepSeek Harness package on the user's machine. It does **not** mean DeepSeek developed, approved, or warrants this plugin. @@ -601,9 +603,11 @@ The first time you open Drill you read the notice, wait out the countdown, scrol ![Patches](docs/preview/settings.png) -**Rule sets** +**Own servers** -![Rule sets](docs/preview/rules.png) +On the Clean page, under Prompt. One host per line, then Save list. Steps are in [Own servers](#own-servers). + +![Own servers](docs/preview/own-servers-en.png) | Area | What it shows | |---|---| @@ -613,6 +617,7 @@ The first time you open Drill you read the notice, wait out the countdown, scrol | Light / Ink | card appearance | | Patches | grouped status, Apply, Restore, or Uninstall | | Prompt | edit `prompt-inject.md` as the session override | +| Own servers | one IP or exact hostname per line, saved to `$DSH_HOME/net-scope-allow.txt` | | Rule sets | multiple `AGENTS.md` / `CLAUDE.md`; Enable writes under `$DSH_HOME`, Delete removes the row | | Skills | import a zip or folder into this host’s official `$DSH_HOME/skills//SKILL.md` (web and desktop each use their own home; no drive letter is hardcoded); DSH owns match, load, and `/name`. You can also delete that folder yourself | @@ -631,6 +636,8 @@ dsh-purge/ │ ├── dock-auth.png │ ├── dock-clean.png │ ├── dock-drill.png +│ ├── own-servers.png +│ ├── own-servers-en.png │ ├── rules.png │ └── settings.png ├── lib/ @@ -656,7 +663,7 @@ dsh-purge/ └── README.zh-CN.md ``` -Runtime user files: `$DSH_HOME/prompt-inject.md`, `$DSH_HOME/rules/`, `$DSH_HOME/skills/`. If `DSH_HOME` is unset, the launcher-adjacent `.dsh` wins over `~/.dsh`. Skills are not part of the `dsh-purge` inject section and do not replace the prompt. +Runtime user files: `$DSH_HOME/prompt-inject.md`, `$DSH_HOME/rules/`, `$DSH_HOME/skills/`, `$DSH_HOME/net-scope-allow.txt`. If `DSH_HOME` is unset, the launcher-adjacent `.dsh` wins over `~/.dsh`. Skills are not part of the `dsh-purge` inject section and do not replace the prompt. --- @@ -681,6 +688,25 @@ After a successful Apply, the host restarts so patched packages load; you can al The composer **Undo** button drops the last turn and puts the last user sentence back in the input. On the main agent you can rewind once or the whole last round (including subagents). After rewind, send only what is in the box now. `/rewind` does the same. The host cannot truncate a session in place, so rewind opens another session for the shortened transcript and removes the old one from the sidebar. Repeating undo does not leave a stack of branches in the list. +### Own servers + +Addresses in mainland China, Hong Kong, and Macau stay forbidden unless that one host was registered first. Saying “this is my server” in chat does not allow it. A key or a password does not allow it either. + +The box sits under Prompt. If the dock does not show it yet, quit DeepSeek Harness completely and open it again. + +1. Click **dsh-purge** beside the session title and stay on **Clean**. +2. Scroll past **Prompt**. **Own servers** is the next block. +3. Put one host on each line, in one of these forms: + - `203.0.113.10` — one IP. + - `my-vps.example.com` — one exact hostname. After you save, the addresses that hostname resolves to at lookup time are allowed too. + - `alice@my-vps.example.com` — the account only identifies this form. It does not prove the machine is yours. +4. Click **Save list**. The list is written to `$DSH_HOME/net-scope-allow.txt`. +5. Keys, passwords, ranges, and wildcards are dropped on save. Unlisted mainland China, Hong Kong, and Macau addresses stay forbidden. + +`203.0.113.10` and `example.com` above are only examples of the form. Replace them with your own host before you save. + +![Own servers](docs/preview/own-servers-en.png) + --- ## Local checks diff --git a/README.zh-CN.md b/README.zh-CN.md index 4fb3767..d7ce019 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -37,6 +37,7 @@ - [安装](#安装) - [界面](#界面预览) - [使用](#使用) +- [自己的服务器](#自己的服务器) - [工作原理](#工作原理) - [还原](#还原) - [更新](#更新) @@ -83,7 +84,8 @@ Harness 不只是把问题交给模型。它还会在运行时改提示词、审 2. **只作用于本机官方 Harness**:安全评测补丁、提示词注入全部发生在使用者**本机已安装的官方 DeepSeek Harness**(`@deepseek-ai` 包、本机 profile / `$DSH_HOME`)上。对象是使用者自己的官方本地软件,**不是**他人的网站、服务器、账号或信息系统。 3. **评测补丁不对外网目标联网**:应用补丁、写入注入、回滚、卸载均在本机文件与本机进程内完成,**不对任何公网主机、未授权系统进行扫描、探测、入侵或攻击发包**。不得把本项目当作跳板去打外网。插件若开启「检测更新」,仅可能访问本插件自己的 GitHub 仓库以核对版本,**与对第三方系统的网络攻击无关**,也不能被解释为授权对外渗透。 4. **合法受控范围限定**:本项目定位为使用者在**自己有权管理的本机官方 Harness**上,进行红队科研与鲁棒性评测的辅助工具。**严禁在未经所有者合法书面授权的目标、公网在线系统或生产业务上运行本项目**。一切测试必须限制在**本机已授权安装的官方 Harness、离线本地合成靶标、授权网络安全演练靶场及合规实验室受控环境**中进行。 -5. **严禁违法与违禁用途**:使用者严禁利用本项目直接或间接从事任何违反下列法律法规的行为(必须逐条遵守,不得以任何理由规避): +5. **禁止中国大陆、香港、澳门的服务器与网站。** 不得对中国大陆、香港、澳门网段,以及解析进这些网段的服务器、网站或地址进行访问、扫描、探测或任何操作。云厂商的名字不能当作例外。唯一例外是使用者事先登记为自己的服务器的那一个确切 IP,或那一个完整主机名。密钥、密码、网段、通配符,以及对话里的口头说明,都不能增加例外。没有登记的,一律禁止。 +6. **严禁违法与违禁用途**:使用者严禁利用本项目直接或间接从事任何违反下列法律法规的行为(必须逐条遵守,不得以任何理由规避): - 《中华人民共和国刑法》 - 《中华人民共和国网络安全法》 - 《中华人民共和国数据安全法》 @@ -93,9 +95,9 @@ Harness 不只是把问题交给模型。它还会在运行时改提示词、审 - 未经授权渗透、攻击公私机构计算机信息系统,实施勒索、破坏、撞库或传播恶意载荷; - 诱导、生成或传播危害国家安全、恐怖主义、暴力血腥、涉黄涉赌、诈骗、侵犯公民隐私或知识产权等任何法律明令禁止的违法违禁内容; - 违反相关大模型提供商的《服务条款》与《滥用政策》。 -6. **使用者独立承担全部责任**:本项目依据 MIT 开源协议“按现状”提供,开发者不对软件的完整性、安全性与适用性作任何明示或暗示的保证。**使用者应对自身的所有下载、部署、运行、修改、传播行为以及由此产生的全部输入与输出后果承担独立、完全的民事、行政及刑事法律责任**。项目作者与贡献团队绝不承担任何因使用者滥用导致的直接、间接或连带责任。 -7. **违约即终止授权**:任何将本项目用于非法攻击、恶意活动或违规行为的个人或实体,其开源软件使用许可将自违法违规行为发生之日起**自动且不可撤销地立即终止**。该主体须立即停止使用并永久销毁本项目的所有代码、脚本与衍生数据,并依法承担相应法律制裁。 -8. **第三方独立性声明**:本项目属于完全独立的开源安全评测研究项目,与 DeepSeek 官方或其关联主体无任何隶属、商业合作、授权或官方背书关系。文中「官方」仅指评测对象为使用者本机安装的官方 DeepSeek Harness 软件包,**不代表** DeepSeek 官方开发、认可或担保本插件。 +7. **使用者独立承担全部责任**:本项目依据 MIT 开源协议“按现状”提供,开发者不对软件的完整性、安全性与适用性作任何明示或暗示的保证。**使用者应对自身的所有下载、部署、运行、修改、传播行为以及由此产生的全部输入与输出后果承担独立、完全的民事、行政及刑事法律责任**。项目作者与贡献团队绝不承担任何因使用者滥用导致的直接、间接或连带责任。 +8. **违约即终止授权**:任何将本项目用于非法攻击、恶意活动或违规行为的个人或实体,其开源软件使用许可将自违法违规行为发生之日起**自动且不可撤销地立即终止**。该主体须立即停止使用并永久销毁本项目的所有代码、脚本与衍生数据,并依法承担相应法律制裁。 +9. **第三方独立性声明**:本项目属于完全独立的开源安全评测研究项目,与 DeepSeek 官方或其关联主体无任何隶属、商业合作、授权或官方背书关系。文中「官方」仅指评测对象为使用者本机安装的官方 DeepSeek Harness 软件包,**不代表** DeepSeek 官方开发、认可或担保本插件。 @@ -605,6 +607,12 @@ dsh-purge --uninstall ![规则集](docs/preview/rules.png) +**自己的服务器** + +在清洗页,提示词下面。每行一台,点保存名单。步骤见 [自己的服务器](#自己的服务器)。 + +![自己的服务器](docs/preview/own-servers.png) + | 区域 | 说明 | |---|---| | dsh-purge | 会话标题旁的按钮,打开或收起右侧栏 | @@ -613,6 +621,7 @@ dsh-purge --uninstall | 白 / 墨 | 设置卡片外观 | | 补丁 | 分组查看状态,应用、还原或卸载 | | 提示词 | 编辑 `prompt-inject.md`,作为会话覆盖段 | +| 自己的服务器 | 每行登记一个 IP 或完整主机名,保存后写入 `$DSH_HOME/net-scope-allow.txt` | | 规则集 | 多套 `AGENTS.md` / `CLAUDE.md`;启用写入 `$DSH_HOME`,删除从列表去掉 | | Skill | 导入压缩包或文件夹到当前宿主官方目录 `$DSH_HOME/skills//SKILL.md`(Web / 桌面各用自己的主目录,不写死盘符);命中、加载、`/名称` 由 DSH 负责。也可自己删该文件夹 | @@ -631,6 +640,8 @@ dsh-purge/ │ ├── dock-auth.png │ ├── dock-clean.png │ ├── dock-drill.png +│ ├── own-servers.png +│ ├── own-servers-en.png │ ├── rules.png │ └── settings.png ├── lib/ @@ -656,7 +667,7 @@ dsh-purge/ └── README.zh-CN.md ``` -运行时用户文件:`$DSH_HOME/prompt-inject.md`、`$DSH_HOME/rules/`、`$DSH_HOME/skills/`。未设 `DSH_HOME` 时,优先用 dsh 安装目录旁边的 `.dsh`,再退回 `~/.dsh`。Skill 不进 `dsh-purge` 注入段,也不顶替提示词。 +运行时用户文件:`$DSH_HOME/prompt-inject.md`、`$DSH_HOME/rules/`、`$DSH_HOME/skills/`、`$DSH_HOME/net-scope-allow.txt`。未设 `DSH_HOME` 时,优先用 dsh 安装目录旁边的 `.dsh`,再退回 `~/.dsh`。Skill 不进 `dsh-purge` 注入段,也不顶替提示词。 --- @@ -684,6 +695,25 @@ purge_status purge_apply purge_revert 输入框旁的「回退」会丢掉最近一轮对话,并把上一句填回输入框;聊天里 `/rewind` 同样可用。宿主不能在原会话里截断,所以回退会另开一条承载截断后的内容,并把原来那条从侧边栏移出。多退几次不会在列表里堆出一串分支。 +### 自己的服务器 + +中国大陆、香港、澳门的地址默认禁止。只有事先登记的那一台可以例外。在对话里说「这是我的服务器」不会放行。密钥和密码也不会。 + +这一栏在提示词下面。若侧栏里还没有它,先完全退出 DeepSeek Harness,再重新打开。 + +1. 点会话标题旁的 **dsh-purge**,停在 **清洗**。 +2. 往下滚过 **提示词**,下面就是 **自己的服务器**。 +3. 每行只写一台,用下面三种写法之一: + - `203.0.113.10`:一个 IP。 + - `my-vps.example.com`:一个完整主机名。保存后,这个主机名当时解析出来的地址也会放行。 + - `alice@my-vps.example.com`:账号只用来认出这种写法,不能证明这台机器属于你。 +4. 点 **保存名单**。名单写在 `$DSH_HOME/net-scope-allow.txt`。 +5. 密钥、密码、网段和通配符会在保存时丢掉。没有写进名单的大陆、香港、澳门地址仍然禁止。 + +上面的 `203.0.113.10` 和 `example.com` 只是写法示例,不是放行地址。把它们换成你自己的那一台再保存。 + +![自己的服务器](docs/preview/own-servers.png) + --- ## 本地校验 diff --git a/client.js b/client.js index 382d5fc..97aeeef 100644 --- a/client.js +++ b/client.js @@ -179,7 +179,8 @@ window.__ModuleLoader__.load({ id: "dsh-purge", factory: (require) => { "own.save": "保存名单", "saved.own": "已保存自己的服务器", "saved.own.dropped": "已保存。有 {n} 行不是单个 IP 或主机名,已丢掉", - "metric.purged": "补丁", + "metric.purged": "已应用", + "metric.purged.skip": "已应用,另有 {n} 项跳过", "metric.shim": "shim", "metric.bak.yes": "有备份", "metric.bak.no": "无备份", @@ -430,7 +431,8 @@ window.__ModuleLoader__.load({ id: "dsh-purge", factory: (require) => { "own.save": "Save list", "saved.own": "Own servers saved", "saved.own.dropped": "Saved. {n} lines were not a single IP or hostname and were dropped", - "metric.purged": "Patches", + "metric.purged": "Applied", + "metric.purged.skip": "Applied, {n} skipped", "metric.shim": "shim", "metric.bak.yes": "Backup", "metric.bak.no": "No backup", @@ -1495,8 +1497,7 @@ body .dshp-dock:has(.dshp-root[data-theme="dusk"]) .dshp-dock-body .dshp-switch const total = s && s.patches_total ? s.patches_total : 26; const applied = s && typeof s.patches_applied === "number" ? s.patches_applied : 0; const skipped = s && typeof s.patches_skipped === "number" ? s.patches_skipped : 0; - const settled = Math.min(total, applied + skipped); - const pct = total ? Math.round((settled / total) * 100) : 0; + const pct = total ? Math.round((applied / total) * 100) : 0; const hostSurface = hostSurfaceOf(s); const versions = (updateInfo && updateInfo.versions) || []; @@ -1580,8 +1581,8 @@ body .dshp-dock:has(.dshp-root[data-theme="dusk"]) .dshp-dock-body .dshp-switch ), s ? h("div", { className: "dshp-metrics" }, h("div", { className: "dshp-metric" }, - h("b", null, settled + " / " + total), - h("span", null, t("metric.purged")), + h("b", null, applied + " / " + total), + h("span", null, skipped > 0 ? t("metric.purged.skip", { n: skipped }) : t("metric.purged")), ), h("div", { className: "dshp-metric" }, h("b", { style: { fontSize: 13, fontFamily: "var(--dshp-mono)", fontWeight: 500 } }, diff --git a/docs/preview/own-servers-en.png b/docs/preview/own-servers-en.png new file mode 100644 index 0000000000000000000000000000000000000000..7b743481387dd546aeb1fed46fd01ec7097013b1 GIT binary patch literal 22345 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 MX&Y(PYS>5pA91GR{{R30 literal 0 HcmV?d00001 diff --git a/docs/preview/own-servers.png b/docs/preview/own-servers.png new file mode 100644 index 0000000000000000000000000000000000000000..a97112ea3e0f7f8a1538ddb158f1c812cbedf577 GIT binary patch literal 24789 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�d0BAP* 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 literal 0 HcmV?d00001 diff --git a/lib/core.js b/lib/core.js index e8ef97a..760d6bd 100644 --- a/lib/core.js +++ b/lib/core.js @@ -2681,9 +2681,11 @@ const NEW_TOOL_PATCHES = [ 'description: "Canonical local URL of the web GUI serving this session." /* [dsh-purge] web surface identity neutralized */', }, ], + // #53 会把前一句再收成 Local web GUI,不能再要求两句标记同时在。 + markersAny: true, markers: [ - "through the local web GUI at ${webUrl}.", "[dsh-purge] web surface identity neutralized", + "through the local web GUI at ${webUrl}.", ], }, { diff --git a/package.json b/package.json index 89a9efb..e2d906a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dsh-purge", - "version": "1.1.41", + "version": "1.1.42", "description": "DeepSeek Harness 网络安全红队工具:本机官方 Harness 受控评测与清洗,内嵌演练台;不同模型可换不同提示词;默认提示词面向国模「小码酱」。求 Star ⭐", "type": "module", "main": "lib/index.js", diff --git a/release-notes.md b/release-notes.md index 90a7df1..c87b186 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,3 +1,21 @@ +# 1.1.42 + +## 中文 + +- 版本升级到 1.1.42。 +- 清洗页提示词下面可以登记自己的服务器:每行一个 IP 或完整主机名,点保存名单。说明里写了步骤,并附了截图。 +- 新对话把提示词放在系统提示最前。面板改为白墨玻璃,两种主题都能看清字。 +- 补丁进度只计已应用的项。网页身份那条在后一条改写句子之后,仍显示已应用。 +- 补上 0.1.x 的入口针。已经打过的 0.2.0 不会被重写。 + +## English + +- Version 1.1.42. +- Under Prompt on the Clean page, register your own server: one IP or exact hostname per line, then Save list. The docs include the steps and a screenshot. +- New chats place the prompt at the front of the system prompt. The dock is frosted glass, and both the light and ink themes stay readable. +- The patch count includes only applied items. The web-surface identity row stays applied after the later sentence rewrite. +- Needles for 0.1.x entry points were added. An already patched 0.2.0 host is not rewritten. + # 1.1.41 ## 中文 diff --git a/screenshots.json b/screenshots.json index a426749..121fd13 100644 --- a/screenshots.json +++ b/screenshots.json @@ -3,5 +3,7 @@ "docs/preview/dock-auth.png", "docs/preview/dock-drill.png", "docs/preview/settings.png", - "docs/preview/rules.png" + "docs/preview/rules.png", + "docs/preview/own-servers.png", + "docs/preview/own-servers-en.png" ]