dsh-splash-launcher 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/DSH-GUI.exe CHANGED
Binary file
package/LICENSE CHANGED
@@ -1,28 +1,28 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Isilsolme and contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
22
-
23
- ---
24
-
25
- Brand assets notice: `whale.png`, `deepseek-wordmark.svg` and `whale-anim.svg`
26
- are derived from the DeepSeek Harness (`@deepseek-ai/dsh`, MIT, © 2026 DeepSeek)
27
- web frontend favicon / wordmark assets. They remain DeepSeek brand assets; the
28
- DeepSeek name and whale logo are trademarks of their respective owner.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Isilsolme and contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ ---
24
+
25
+ Brand assets notice: `whale.png`, `deepseek-wordmark.svg` and `whale-anim.svg`
26
+ are derived from the DeepSeek Harness (`@deepseek-ai/dsh`, MIT, © 2026 DeepSeek)
27
+ web frontend favicon / wordmark assets. They remain DeepSeek brand assets; the
28
+ DeepSeek name and whale logo are trademarks of their respective owner.
package/README.en.md CHANGED
@@ -1,30 +1,41 @@
1
- # DSH GUI
2
-
3
- A one-click Windows launcher for the DeepSeek Harness (`dsh`) Web GUI with a borderless WPF startup animation (stroke-by-stroke "HARNESS" lettering inspired by SPlayer-Next). It starts `dsh web` in the background, preloads the real GUI behind the animation, and fades into it only when the GUI is actually ready. Closing the window stops the service it started.
4
-
5
- ## Build
6
-
7
- ```bat
8
- build.cmd
9
- ```
10
-
11
- Produces `DSH-GUI.exe` using the Windows built-in `csc.exe` (no external toolchain).
12
-
13
- ## Requirements
14
-
15
- - Windows 10/11
16
- - Node.js + global `npm install -g @deepseek-ai/dsh`
17
- - Microsoft Edge or Google Chrome
18
-
19
- ## Configuration
20
-
21
- - `DSH_GUI_WORKSPACE` env var, or a `workspace.txt` next to the exe — working directory for `dsh web` (default `D:\VSCode`)
22
- - `DSH_GUI_PORT` — port (default `3080`)
23
-
24
- ## Known issues
25
-
26
- 1. The taskbar briefly shows the Chrome/Edge default icon before the page favicon (black whale) loads; this is a browser-level placeholder and cannot be preset via command line.
27
- 2. Startup takes a while (dsh boot + browser cold start + plugin loading). The animation covers the whole wait and only fades out when the GUI is ready.
28
- 3. Unsigned launchers that start hidden processes / stop process trees may trigger behavior-based antivirus heuristics; add the folder to your AV exclusions or code-sign the exe.
29
-
30
- See the Chinese [README](README.md) for full details. Code is MIT; brand assets derive from DeepSeek Harness (MIT, © 2026 DeepSeek).
1
+ # DSH GUI
2
+
3
+ A one-click Windows launcher for the DeepSeek Harness (`dsh`) Web GUI with a borderless WPF startup animation (stroke-by-stroke "HARNESS" lettering inspired by SPlayer-Next). It starts `dsh web` in the background, preloads the real GUI behind the animation, and fades into it only when the GUI is actually ready. Closing the window stops the service it started.
4
+
5
+ ## Quick start
6
+
7
+ ### Option A: Download the portable build (recommended, no build required)
8
+
9
+ 1. Download `dsh-splash-launcher-vX.Y.Z.zip` (or just the single-file `DSH-GUI.exe`) from [Releases](https://github.com/Isilsolme/dsh-splash-launcher/releases);
10
+ 2. Unzip (or drop the exe) anywhere — the exe is self-contained, all splash assets are embedded, **a single file is enough**;
11
+ 3. Double-click `DSH-GUI.exe`.
12
+
13
+ > If SmartScreen shows "Windows protected your PC" on first run: click **More info → Run anyway** (the exe is unsigned).
14
+
15
+ ### Option B: Build from source
16
+
17
+ ```bat
18
+ build.cmd
19
+ ```
20
+
21
+ Produces a self-contained `DSH-GUI.exe` (black-whale icon, assets embedded as resources) using the Windows built-in `csc.exe` (no external toolchain).
22
+
23
+ ## Requirements
24
+
25
+ - Windows 10/11
26
+ - Node.js + global `npm install -g @deepseek-ai/dsh`
27
+ - Microsoft Edge or Google Chrome
28
+
29
+ ## Configuration
30
+
31
+ - `DSH_GUI_WORKSPACE` env var, or a `workspace.txt` next to the exe — working directory for `dsh web` (default: your user profile `%USERPROFILE%`)
32
+ - `DSH_GUI_PORT` — port (default `3080`)
33
+ - Splash assets are embedded in the exe; drop the same-named files (`splash.html`, `*.svg`, `whale.png`) next to the exe to override them (custom splash, no rebuild needed).
34
+
35
+ ## Known issues
36
+
37
+ 1. The taskbar briefly shows the Chrome/Edge default icon before the page favicon (black whale) loads; this is a browser-level placeholder and cannot be preset via command line.
38
+ 2. Startup takes a while (dsh boot + browser cold start + plugin loading). The animation covers the whole wait and only fades out when the GUI is ready.
39
+ 3. Unsigned launchers that start hidden processes / stop process trees may trigger SmartScreen or behavior-based antivirus heuristics; click "More info → Run anyway" on first run, add the folder to your AV exclusions, or code-sign the exe.
40
+
41
+ See the Chinese [README](README.md) for full details. Code is MIT; brand assets derive from DeepSeek Harness (MIT, © 2026 DeepSeek).
package/README.md CHANGED
@@ -1,161 +1,170 @@
1
- # DSH GUI
2
-
3
- > DeepSeek Harness(dsh)Web GUI 的 Windows 一键启动器:双击即弹出无边框启动动画,后台拉起 `dsh web`,GUI 真正加载完成后无缝淡入;关闭窗口自动停服务。
4
-
5
- 启动动画借鉴 [SPlayer-Next](https://github.com/SPlayer-Dev/SPlayer-Next) 的思路:SVG `stroke-dashoffset` “一笔一划”书写效果——鲸鱼 Logo 升起呼吸,`deepseek` 官方字标浮现,`HARNESS` 七个字母逐笔描边。
6
-
7
- ![license](https://img.shields.io/badge/license-MIT-blue) ![windows](https://img.shields.io/badge/platform-Windows%2010%2F11-blue)
8
-
9
- ## 效果截图
10
-
11
- **启动动画(WPF 无边框,HARNESS 逐笔描边)**
12
-
13
- ![启动动画](docs/screenshots/startup-animation.png)
14
-
15
- **进入后的 GUI 界面**
16
-
17
- ![GUI 界面](docs/screenshots/gui.png)
18
-
19
- ---
20
-
21
- ## 功能特性
22
-
23
- - **点击即出动画**:WPF 原生动画窗口,不等待浏览器冷启动,双击后立刻播放;
24
- - **一笔一划描边**:`HARNESS` 七个字母按 CSS `cubic-bezier(0.25,0.1,0.25,1)` 缓动逐笔书写,笔尖连续、首帧空白;
25
- - **后台加载、就绪切换**:启动动画期间,真实 GUI 在浏览器后台(同源 iframe)完成加载,检测到官方启动页(`Loading plugins…`)消失后才淡出动画,不会出现“动画播完又加载”的断档;
26
- - **无 PowerShell**:启动器是单个 C#/WPF 程序,无脚本进程,规避“PowerShell 木马”类安全软件启发式误报;
27
- - **开即启动、关即退出**:窗口关闭后自动结束本次启动的 `dsh web` 服务;端口已有服务时只开窗口、不接管生命周期;
28
- - **可配置**:工作目录与端口可通过环境变量或 `workspace.txt` 修改;
29
- - **开源友好**:单文件 C# 源码 + `build.cmd`,使用 Windows 自带 `csc.exe` 编译,无需外部工具链。
30
-
31
- ## 快速开始
32
-
33
- ### 环境要求
34
-
35
- - Windows 10 / 11;
36
- - 已通过 npm 全局安装 DeepSeek Harness:`npm install -g @deepseek-ai/dsh`(`dsh web` 可用);
37
- - Node.js(npm 全局安装 dsh 时自带依赖);
38
- - Microsoft Edge 或 Google Chrome(二选一,自动探测)。
39
-
40
- ### 构建
41
-
42
- 双击或命令行运行:
43
-
44
- ```bat
45
- build.cmd
46
- ```
47
-
48
- 生成 `DSH-GUI.exe`(黑鲸图标)。构建仅使用 Windows 自带的 `C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe`。
49
-
50
- > 也可以直接下载 GitHub Releases 里 Actions 构建的产物。
51
-
52
- ### 使用
53
-
54
- 1. 把整个目录放在任意位置(例如 `D:\dsh-gui`);
55
- 2. 运行 `DSH-GUI.exe`;
56
- 3. 如需桌面快捷方式:右键 `DSH-GUI.exe` → 发送到 → 桌面快捷方式(图标会自动使用黑鲸)。
57
-
58
- ### 作为 dsh 插件安装(可选)
59
-
60
- 本项目同时是一个可安装的 dsh bundle:随包携带 `DSH-GUI.exe`,并在宿主机注册 `desktop_launch` 工具,在对话中直接让 agent 打开带动画的 GUI 窗口:
61
-
62
- ```sh
63
- dsh plugin --profile web add dsh-splash-launcher
64
- ```
65
-
66
- 安装后重启 `dsh web`,agent 可使用 `desktop_launch` 工具(参数 `workspace` 可选,指定会话工作目录)。
67
-
68
- ### 配置
69
-
70
- | 项 | 默认值 | 修改方式 |
71
- |---|---|---|
72
- | 工作目录(`dsh web` 启动目录) | `D:\VSCode` | 环境变量 `DSH_GUI_WORKSPACE`,或在 exe 同目录新建 `workspace.txt` 写入路径 |
73
- | 端口 | `3080` | 环境变量 `DSH_GUI_PORT` |
74
- | 启动动画版式 | HARNESS 描边 | 源码 `SplashStyle` 改为 `"&logo=draw"` 可切换为“鲸鱼本体一笔一划”版 |
75
-
76
- ## 启动流程
77
-
78
- ```
79
- 双击 DSH-GUI.exe
80
- ├─ 端口已占用 ────────────────→ 直接打开 GUI 窗口(不显示动画、不接管服务)
81
- └─ 端口空闲
82
- ├─ 立即显示 WPF 无边框启动动画(≈0ms,不等浏览器)
83
- ├─ 解析 dsh 安装路径(npm root -g + node require.resolve)
84
- ├─ 将 splash 素材同步进 dsh-web-frontend/dist(同源 iframe 探测的前提)
85
- ├─ 后台启动 `node <dsh>/lib/bin.js web`(隐藏窗口)
86
- ├─ 轮询端口就绪(最多 90s)
87
- ├─ 以相同尺寸/位置在动画背后打开浏览器 `--app` 窗口
88
- │ └─ splash.html(hold) 用隐藏 iframe 加载 `/`
89
- │ └─ 检测到官方启动卡片消失 → 揭示 iframe,并同步标题
90
- ├─ WPF 检测到浏览器标题包含 "DeepSeek Harness" → 淡出动画
91
- └─ 浏览器窗口关闭 → taskkill 结束本次 dsh web 进程树
92
- ```
93
-
94
- ## 项目结构
95
-
96
- ```
97
- dsh-gui/
98
- ├─ DSH-GUI.cs # 启动器全部源码(C# 5 / WPF,单文件)
99
- ├─ build.cmd # 构建脚本(Windows 自带 csc.exe)
100
- ├─ splash.html # 浏览器侧启动页(hold 态 + 后台 iframe 预加载 + 就绪检测)
101
- ├─ deepseek-wordmark.svg # 官方 deepseek 字标(提取自 dsh 前端)
102
- ├─ whale.png # 黑鲸 Logo(256px,透明底)
103
- ├─ whale-anim.svg # 鲸鱼描边动画(可选版式 logo=draw)
104
- ├─ icons/
105
- │ └─ whale-black.ico # 黑鲸图标(exe 与快捷方式共用)
106
- ├─ LICENSE # MIT + 品牌素材说明
107
- └─ README.md
108
- ```
109
-
110
- ## 开发
111
-
112
- ```bat
113
- :: 构建
114
- build.cmd
115
-
116
- :: 自检(校验素材路径、dsh 安装路径与前端 dist,不弹窗)
117
- DSH-GUI.exe --selftest
118
- :: 结果写入 selftest.txt,退出码 0 为通过
119
- ```
120
-
121
- 常用调节点(`DSH-GUI.cs`):
122
-
123
- | 想调什么 | 位置 |
124
- |---|---|
125
- | 描边速度 | `SplashWindow.DrawSeconds`(默认 1.25s/字母) |
126
- | 字母间隔 | `SplashWindow.LetterGap`(默认 0.24s) |
127
- | 动画窗口尺寸 | `Program.WinW / WinH`(默认 1100×720) |
128
- | 最短动画时长 | `SplashWindow.MinShowSec` |
129
- | 就绪判定标题 | `SplashWindow.AppTitle`(按“包含”匹配) |
130
-
131
- ## 已知问题
132
-
133
- ### 1. 任务栏图标会先闪一下 Chrome/Edge 默认图标
134
- 浏览器 `--app` 窗口创建时,任务栏按钮先使用浏览器进程自带图标,页面 `favicon`(黑鲸)加载完成后才切换,因此会出现极短暂的一闪。这是浏览器自身的图标占位机制,没有命令行参数可预设;当前动画窗口会盖住这段过程,实际看到界面时已是黑鲸图标。彻底隐藏需要 Win32 控制窗口显隐,可能引起页面节流、拖慢启动,暂不实现。
135
-
136
- ### 2. 启动有一定等待时间
137
- 启动时长主要来自:`dsh web` 服务引导 + 浏览器冷启动 + 前端插件装载。动画会覆盖全部等待过程并持续到 GUI 就绪,属于“可见但不可压缩”的时间。首次运行、杀毒软件实时扫描、机械硬盘会进一步加长。可通过 WPF 描边速度(见上)让动画与等待时长更匹配。
138
-
139
- ### 3. 安全软件可能误报(未签名 exe)
140
- 本程序会启动隐藏进程、结束后台进程、复制文件,这类“类管理工具”行为可能触发启发式防护(例如卡巴斯基 PDM:Trojan.Win32.Generic 对旧版 PowerShell 脚本的误报)。建议:
141
- - 将 `dsh-gui` 目录加入杀软排除项/受信任应用程序;
142
- - 正式分发时对 `DSH-GUI.exe` 做代码签名(本程序已不使用 PowerShell,命中率大幅降低)。
143
-
144
- ### 4. 端口已被占用时直接进入 GUI
145
- 如果 `3080` 端口已有 `dsh web`(例如正在终端里使用),双击只会打开 GUI 窗口,不会显示启动动画,也不会在关窗时停止该服务——这是刻意设计,避免误杀已有会话。
146
-
147
- ### 5. 同源预加载依赖 dist 写入权限
148
- 启动器需要把 `splash.html` 等素材复制到 npm 全局的 `dsh-web-frontend/dist` 目录。若该目录不可写,会自动退回“文件页动画 → 就绪后直接跳转 GUI”模式,此时会短暂看到官方 HARNESS 加载页。
149
-
150
- ### 6. 就绪判定依赖标题
151
- WPF 以浏览器窗口标题包含 `DeepSeek Harness` 判定 GUI 就绪;若官方前端修改标题结构,可能需要同步更新 `SplashWindow.AppTitle`。
152
-
153
- ## 许可证
154
-
155
- - 代码:MIT,见 [LICENSE](LICENSE)。
156
- - `whale.png`、`deepseek-wordmark.svg`、`whale-anim.svg` 派生自 DeepSeek Harness(`@deepseek-ai/dsh`,MIT © 2026 DeepSeek)前端素材,保留 DeepSeek 品牌权利;DeepSeek 名称与鲸鱼 Logo 为各自权利人的商标。
157
-
158
- ## 致谢
159
-
160
- - 启动动画的“一笔一划”与时长编排思路借鉴 [SPlayer-Next](https://github.com/SPlayer-Dev/SPlayer-Next)(AGPL-3.0;本项目未复制其代码,仅参考交互思路)。
161
- - DeepSeek Harness(`dsh`,npm 包 `@deepseek-ai/dsh`)及其 Web GUI。
1
+ # DSH GUI
2
+
3
+ > DeepSeek Harness(dsh)Web GUI 的 Windows 一键启动器:双击即弹出无边框启动动画,后台拉起 `dsh web`,GUI 真正加载完成后无缝淡入;关闭窗口自动停服务。
4
+
5
+ 启动动画借鉴 [SPlayer-Next](https://github.com/SPlayer-Dev/SPlayer-Next) 的思路:SVG `stroke-dashoffset` “一笔一划”书写效果——鲸鱼 Logo 升起呼吸,`deepseek` 官方字标浮现,`HARNESS` 七个字母逐笔描边。
6
+
7
+ ![license](https://img.shields.io/badge/license-MIT-blue) ![windows](https://img.shields.io/badge/platform-Windows%2010%2F11-blue)
8
+
9
+ ## 效果截图
10
+
11
+ **启动动画(WPF 无边框,HARNESS 逐笔描边)**
12
+
13
+ ![启动动画](docs/screenshots/startup-animation.png)
14
+
15
+ **进入后的 GUI 界面**
16
+
17
+ ![GUI 界面](docs/screenshots/gui.png)
18
+
19
+ ---
20
+
21
+ ## 功能特性
22
+
23
+ - **点击即出动画**:WPF 原生动画窗口,不等待浏览器冷启动,双击后立刻播放;
24
+ - **便携单文件**:`splash.html` 与 SVG/PNG 素材内嵌进 exe,`DSH-GUI.exe` 单独一个文件即可运行;同目录放置同名素材文件可覆盖内嵌版本(自定义动画,无需重编译);
25
+ - **一笔一划描边**:`HARNESS` 七个字母按 CSS `cubic-bezier(0.25,0.1,0.25,1)` 缓动逐笔书写,笔尖连续、首帧空白;
26
+ - **后台加载、就绪切换**:启动动画期间,真实 GUI 在浏览器后台(同源 iframe)完成加载,检测到官方启动页(`Loading plugins…`)消失后才淡出动画,不会出现“动画播完又加载”的断档;
27
+ - **无 PowerShell**:启动器是单个 C#/WPF 程序,无脚本进程,规避“PowerShell 木马”类安全软件启发式误报;
28
+ - **开即启动、关即退出**:窗口关闭后自动结束本次启动的 `dsh web` 服务;端口已有服务时只开窗口、不接管生命周期;
29
+ - **可配置**:工作目录与端口可通过环境变量或 `workspace.txt` 修改;
30
+ - **开源友好**:单文件 C# 源码 + `build.cmd`,使用 Windows 自带 `csc.exe` 编译,无需外部工具链。
31
+
32
+ ## 快速开始
33
+
34
+ ### 方式一:下载便携版(推荐,无需构建)
35
+
36
+ 1. 在 [Releases](https://github.com/Isilsolme/dsh-splash-launcher/releases) 下载最新 `dsh-splash-launcher-vX.Y.Z.zip`(或只下载单文件 `DSH-GUI.exe`);
37
+ 2. 解压(或直接把 exe)放到任意目录——exe 自包含全部素材,**单独一个文件即可运行**;
38
+ 3. 双击 `DSH-GUI.exe`。
39
+
40
+ > 首次运行可能弹出 SmartScreen“Windows 已保护你的电脑”:点击 **更多信息 → 仍要运行**(exe 未代码签名,属正常提示)。
41
+
42
+ ### 方式二:源码构建
43
+
44
+ 环境要求:
45
+
46
+ - Windows 10 / 11;
47
+ - 已通过 npm 全局安装 DeepSeek Harness:`npm install -g @deepseek-ai/dsh`(`dsh web` 可用);
48
+ - Node.js(npm 全局安装 dsh 时自带依赖);
49
+ - Microsoft Edge 或 Google Chrome(二选一,自动探测)。
50
+
51
+ 构建(双击或命令行运行):
52
+
53
+ ```bat
54
+ build.cmd
55
+ ```
56
+
57
+ 生成自包含的 `DSH-GUI.exe`(黑鲸图标,素材已内嵌为资源)。构建仅使用 Windows 自带的 `C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe`。
58
+
59
+ ### 使用
60
+
61
+ 双击 `DSH-GUI.exe` 即可。如需桌面快捷方式:右键 `DSH-GUI.exe` → 发送到 → 桌面快捷方式(图标会自动使用黑鲸)。
62
+
63
+ ### 作为 dsh 插件安装(可选)
64
+
65
+ 本项目同时是一个可安装的 dsh bundle:随包携带 `DSH-GUI.exe`,并在宿主机注册 `desktop_launch` 工具,在对话中直接让 agent 打开带动画的 GUI 窗口:
66
+
67
+ ```sh
68
+ dsh plugin --profile web add dsh-splash-launcher
69
+ ```
70
+
71
+ 安装后重启 `dsh web`,agent 可使用 `desktop_launch` 工具(参数 `workspace` 可选,指定会话工作目录)。
72
+
73
+ ### 配置
74
+
75
+ | 项 | 默认值 | 修改方式 |
76
+ |---|---|---|
77
+ | 工作目录(`dsh web` 启动目录) | `%USERPROFILE%`(用户主目录) | 环境变量 `DSH_GUI_WORKSPACE`,或在 exe 同目录新建 `workspace.txt` 写入路径 |
78
+ | 端口 | `3080` | 环境变量 `DSH_GUI_PORT` |
79
+ | 启动动画版式 | HARNESS 描边 | 源码 `SplashStyle` 改为 `"&logo=draw"` 可切换为“鲸鱼本体一笔一划”版 |
80
+ | 动画素材 | 内嵌于 exe | exe 同目录放置同名 `splash.html` / `*.svg` / `whale.png` 可覆盖(自定义,无需重编译) |
81
+
82
+ ## 启动流程
83
+
84
+ ```
85
+ 双击 DSH-GUI.exe
86
+ ├─ 端口已占用 ────────────────→ 直接打开 GUI 窗口(不显示动画、不接管服务)
87
+ └─ 端口空闲
88
+ ├─ 立即显示 WPF 无边框启动动画(≈0ms,不等浏览器)
89
+ ├─ 解析 dsh 安装路径(npm root -g + node require.resolve)
90
+ ├─ 将 splash 素材同步进 dsh-web-frontend/dist(同源 iframe 探测的前提)
91
+ ├─ 后台启动 `node <dsh>/lib/bin.js web`(隐藏窗口)
92
+ ├─ 轮询端口就绪(最多 90s)
93
+ ├─ 以相同尺寸/位置在动画背后打开浏览器 `--app` 窗口
94
+ │ └─ splash.html(hold) 用隐藏 iframe 加载 `/`
95
+ │ └─ 检测到官方启动卡片消失 → 揭示 iframe,并同步标题
96
+ ├─ WPF 检测到浏览器标题包含 "DeepSeek Harness" → 淡出动画
97
+ └─ 浏览器窗口关闭 → taskkill 结束本次 dsh web 进程树
98
+ ```
99
+
100
+ ## 项目结构
101
+
102
+ ```
103
+ dsh-gui/
104
+ ├─ DSH-GUI.cs # 启动器全部源码(C# 5 / WPF,单文件)
105
+ ├─ build.cmd # 构建脚本(Windows 自带 csc.exe)
106
+ ├─ splash.html # 浏览器侧启动页(hold 态 + 后台 iframe 预加载 + 就绪检测)
107
+ ├─ deepseek-wordmark.svg # 官方 deepseek 字标(提取自 dsh 前端)
108
+ ├─ whale.png # 黑鲸 Logo(256px,透明底)
109
+ ├─ whale-anim.svg # 鲸鱼描边动画(可选版式 logo=draw)
110
+ ├─ icons/
111
+ │ └─ whale-black.ico # 黑鲸图标(exe 与快捷方式共用)
112
+ ├─ LICENSE # MIT + 品牌素材说明
113
+ └─ README.md
114
+ ```
115
+
116
+ > `DSH-GUI.exe` 为自包含便携程序(素材已内嵌为资源,可在任意目录单独运行);仓库内保留素材源文件用于源码构建,且 exe 同目录的同名文件会优先于内嵌版本(自定义动画)。
117
+
118
+ ## 开发
119
+
120
+ ```bat
121
+ :: 构建
122
+ build.cmd
123
+
124
+ :: 自检(校验素材路径、dsh 安装路径与前端 dist,不弹窗)
125
+ DSH-GUI.exe --selftest
126
+ :: 结果写入 selftest.txt,退出码 0 为通过
127
+ ```
128
+
129
+ 常用调节点(`DSH-GUI.cs`):
130
+
131
+ | 想调什么 | 位置 |
132
+ |---|---|
133
+ | 描边速度 | `SplashWindow.DrawSeconds`(默认 1.25s/字母) |
134
+ | 字母间隔 | `SplashWindow.LetterGap`(默认 0.24s) |
135
+ | 动画窗口尺寸 | `Program.WinW / WinH`(默认 1100×720) |
136
+ | 最短动画时长 | `SplashWindow.MinShowSec` |
137
+ | 就绪判定标题 | `SplashWindow.AppTitle`(按“包含”匹配) |
138
+
139
+ ## 已知问题
140
+
141
+ ### 1. 任务栏图标会先闪一下 Chrome/Edge 默认图标
142
+ 浏览器 `--app` 窗口创建时,任务栏按钮先使用浏览器进程自带图标,页面 `favicon`(黑鲸)加载完成后才切换,因此会出现极短暂的一闪。这是浏览器自身的图标占位机制,没有命令行参数可预设;当前动画窗口会盖住这段过程,实际看到界面时已是黑鲸图标。彻底隐藏需要 Win32 控制窗口显隐,可能引起页面节流、拖慢启动,暂不实现。
143
+
144
+ ### 2. 启动有一定等待时间
145
+ 启动时长主要来自:`dsh web` 服务引导 + 浏览器冷启动 + 前端插件装载。动画会覆盖全部等待过程并持续到 GUI 就绪,属于“可见但不可压缩”的时间。首次运行、杀毒软件实时扫描、机械硬盘会进一步加长。可通过 WPF 描边速度(见上)让动画与等待时长更匹配。
146
+
147
+ ### 3. SmartScreen / 安全软件可能误报(未签名 exe)
148
+ 本程序会启动隐藏进程、结束后台进程、复制文件,这类“类管理工具”行为可能触发启发式防护(例如卡巴斯基 PDM:Trojan.Win32.Generic 对旧版 PowerShell 脚本的误报)。建议:
149
+ - 首次运行若弹出 SmartScreen“Windows 已保护你的电脑”:点击 **更多信息 → 仍要运行**;
150
+ - 将 `dsh-gui` 目录加入杀软排除项/受信任应用程序;
151
+ - 正式分发时对 `DSH-GUI.exe` 做代码签名(本程序已不使用 PowerShell,命中率大幅降低)。
152
+
153
+ ### 4. 端口已被占用时直接进入 GUI
154
+ 如果 `3080` 端口已有 `dsh web`(例如正在终端里使用),双击只会打开 GUI 窗口,不会显示启动动画,也不会在关窗时停止该服务——这是刻意设计,避免误杀已有会话。
155
+
156
+ ### 5. 同源预加载依赖 dist 写入权限
157
+ 启动器需要把 `splash.html` 等素材复制到 npm 全局的 `dsh-web-frontend/dist` 目录。若该目录不可写,会自动退回“文件页动画 → 就绪后直接跳转 GUI”模式(素材内嵌于 exe,此模式下自动释放到 `%LocalAppData%\DSH-GUI\assets`),此时会短暂看到官方 HARNESS 加载页。
158
+
159
+ ### 6. 就绪判定依赖标题
160
+ WPF 以浏览器窗口标题包含 `DeepSeek Harness` 判定 GUI 就绪;若官方前端修改标题结构,可能需要同步更新 `SplashWindow.AppTitle`。
161
+
162
+ ## 许可证
163
+
164
+ - 代码:MIT,见 [LICENSE](LICENSE)。
165
+ - `whale.png`、`deepseek-wordmark.svg`、`whale-anim.svg` 派生自 DeepSeek Harness(`@deepseek-ai/dsh`,MIT © 2026 DeepSeek)前端素材,保留 DeepSeek 品牌权利;DeepSeek 名称与鲸鱼 Logo 为各自权利人的商标。
166
+
167
+ ## 致谢
168
+
169
+ - 启动动画的“一笔一划”与时长编排思路借鉴 [SPlayer-Next](https://github.com/SPlayer-Dev/SPlayer-Next)(AGPL-3.0;本项目未复制其代码,仅参考交互思路)。
170
+ - DeepSeek Harness(`dsh`,npm 包 `@deepseek-ai/dsh`)及其 Web GUI。
package/cordis.patch.yml CHANGED
@@ -1,6 +1,6 @@
1
- # dsh-splash-launcher bundle patch: inserts the host plugin row into the
2
- # profile roster. Install with:
3
- # dsh plugin --profile web add dsh-splash-launcher
4
- - insert:
5
- - id: splash-launcher
6
- name: 'dsh-splash-launcher'
1
+ # dsh-splash-launcher bundle patch: inserts the host plugin row into the
2
+ # profile roster. Install with:
3
+ # dsh plugin --profile web add dsh-splash-launcher
4
+ - insert:
5
+ - id: splash-launcher
6
+ name: 'dsh-splash-launcher'
@@ -1,13 +1,13 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="26 0 97 24" width="97" height="24" fill="none">
2
- <g fill="#E7ECFF">
3
- <path d="M68.416 18.2447H67.0501V16.1272H68.416C69.2619 16.1272 70.1166 15.9163 70.6671 15.3304C71.2181 14.7444 71.426 13.8455 71.426 12.9471C71.426 12.0487 71.2268 11.1498 70.6671 10.5643C70.1083 9.97831 69.2619 9.76744 68.416 9.76744C67.5701 9.76744 66.7154 9.97831 66.1639 10.5643C65.6129 11.1503 65.4049 12.0487 65.4049 12.9471V21.6435H63.009V7.6582H65.4049V8.54883H65.8442C65.8918 8.49393 65.9394 8.44728 65.9875 8.40064C66.5871 7.85353 67.5049 7.6582 68.4072 7.6582C69.8212 7.6582 71.2341 8.00998 72.1607 8.98662C73.0868 9.96325 73.4143 11.4632 73.4143 12.9558C73.4143 14.4485 73.0785 15.9406 72.1607 16.925C71.2424 17.9094 69.8212 18.2457 68.416 18.2457V18.2447Z" />
4
- <path d="M31.9551 8.03497H33.3204V10.1525H31.9551C31.1087 10.1525 30.2545 10.3633 29.7035 10.9493C29.1525 11.5353 28.945 12.4342 28.945 13.3326C28.945 14.231 29.1447 15.1294 29.7035 15.7154C30.2623 16.3014 31.1087 16.5122 31.9551 16.5122C32.8015 16.5122 33.6562 16.3014 34.2072 15.7154C34.7582 15.1294 34.9657 14.231 34.9657 13.3326V4.62842H37.3611V18.6219H34.9657V17.7313H34.5264C34.4783 17.7857 34.4307 17.8329 34.3826 17.8795C33.7835 18.4261 32.8652 18.6219 31.9629 18.6219C30.5494 18.6219 29.136 18.2707 28.2099 17.294C27.2838 16.3174 26.9563 14.817 26.9563 13.3248C26.9563 11.8327 27.2916 10.34 28.2099 9.35561C29.136 8.37898 30.5494 8.03497 31.9551 8.03497Z" />
5
- <path d="M49.3786 13.1431V13.9948H42.9984V12.2996H47.2305C47.1348 11.6825 46.9113 11.1043 46.5119 10.682C45.9371 10.0727 45.0503 9.85409 44.1723 9.85409C43.2943 9.85409 42.4076 10.0727 41.8328 10.682C41.258 11.2913 41.05 12.2213 41.05 13.1435C41.05 14.0658 41.2575 15.003 41.8328 15.6046C42.4076 16.2061 43.2939 16.433 44.1723 16.433C45.0508 16.433 45.9371 16.2143 46.5119 15.6046C46.5916 15.5186 46.6635 15.4248 46.7354 15.331H49.0992C48.8918 16.0657 48.5643 16.7299 48.0691 17.2454C47.111 18.2531 45.6339 18.6205 44.1723 18.6205C42.7108 18.6205 41.2337 18.2609 40.2755 17.2454C39.3174 16.2299 38.9661 14.6828 38.9661 13.1435C38.9661 11.6043 39.3096 10.0494 40.2755 9.04168C41.242 8.03396 42.7108 7.66663 44.1723 7.66663C45.6339 7.66663 47.111 8.02618 48.0691 9.04168C49.0351 10.0572 49.3786 11.6043 49.3786 13.1435V13.1431Z" />
6
- <path d="M61.4045 13.1431V13.9948H55.0243V12.2996H59.2564C59.1602 11.6825 58.9372 11.1043 58.5378 10.682C57.963 10.0727 57.0762 9.85409 56.1982 9.85409C55.3202 9.85409 54.4335 10.0727 53.8587 10.682C53.2839 11.2913 53.0759 12.2213 53.0759 13.1435C53.0759 14.0658 53.2834 15.003 53.8587 15.6046C54.4335 16.2061 55.3202 16.433 56.1982 16.433C57.0762 16.433 57.963 16.2143 58.5378 15.6046C58.6179 15.5186 58.6894 15.4248 58.7608 15.331H61.1251C60.9171 16.0657 60.5897 16.7299 60.0945 17.2454C59.1364 18.2531 57.6593 18.6205 56.1982 18.6205C54.7372 18.6205 53.2596 18.2609 52.3014 17.2454C51.3432 16.2299 50.9919 14.6828 50.9919 13.1435C50.9919 11.6043 51.3355 10.0494 52.3014 9.04168C53.2678 8.03396 54.7367 7.66663 56.1982 7.66663C57.6598 7.66663 59.1364 8.02618 60.0945 9.04168C61.061 10.0572 61.4045 11.6043 61.4045 13.1435V13.1431Z" />
7
- <path d="M80.242 18.6214C81.7035 18.6214 83.1801 18.4105 84.1383 17.809C85.0965 17.2075 85.4482 16.2931 85.4482 15.3869C85.4482 14.4807 85.1042 13.5585 84.1383 12.9647C83.1801 12.371 81.703 12.1518 80.242 12.1518C79.6186 12.1518 79.0438 12.0658 78.6366 11.8394C78.2294 11.6047 78.0778 11.2534 78.0778 10.9017C78.0778 10.5499 78.2216 10.1908 78.6366 9.9639C79.0438 9.72921 79.6749 9.65147 80.2973 9.65147C80.9198 9.65147 81.5509 9.73747 81.9591 9.9639C82.3663 10.1986 82.5179 10.5499 82.5179 10.9017H84.9531C84.9531 9.99499 84.6421 9.07327 83.7719 8.47951C82.9017 7.88576 81.5679 7.66663 80.2424 7.66663C78.9169 7.66663 77.5837 7.8775 76.713 8.47951C75.8427 9.08104 75.5308 9.99499 75.5308 10.9017C75.5308 11.8083 75.8423 12.73 76.713 13.3238C77.5832 13.9176 78.9165 14.1367 80.2424 14.1367C80.929 14.1367 81.688 14.2227 82.1428 14.4491C82.5985 14.676 82.7579 15.0351 82.7579 15.3869C82.7579 15.7387 82.5985 16.0977 82.1428 16.3246C81.688 16.5511 80.9931 16.6371 80.3066 16.6371C79.62 16.6371 78.9169 16.5511 78.4694 16.3246C78.0224 16.0982 77.8543 15.7387 77.8543 15.3869H75.0435C75.0435 16.2935 75.3865 17.2153 76.3534 17.809C77.3194 18.4028 78.7809 18.6214 80.2424 18.6214H80.242Z" />
8
- <path d="M97.4733 13.1431V13.9948H91.0932V12.2996H95.3252C95.23 11.6825 95.006 11.1043 94.6071 10.682C94.0313 10.0727 93.1456 9.85409 92.2666 9.85409C91.3876 9.85409 90.5018 10.0727 89.927 10.682C89.3522 11.2913 89.1452 12.2213 89.1452 13.1435C89.1452 14.0658 89.3522 15.003 89.927 15.6046C90.5018 16.2061 91.3886 16.433 92.2666 16.433C93.1446 16.433 94.0313 16.2143 94.6071 15.6046C94.6863 15.5186 94.7587 15.4248 94.8301 15.331H97.1935C96.9855 16.0657 96.6585 16.7299 96.1639 17.2454C95.2057 18.2531 93.7281 18.6205 92.2666 18.6205C90.805 18.6205 89.3284 18.2609 88.3703 17.2454C87.4121 16.2299 87.0613 14.6828 87.0613 13.1435C87.0613 11.6043 87.4043 10.0494 88.3703 9.04168C89.3367 8.03396 90.806 7.66663 92.2666 7.66663C93.7272 7.66663 95.2057 8.02618 96.1639 9.04168C97.1298 10.0572 97.4729 11.6043 97.4729 13.1435L97.4733 13.1431Z" />
9
- <path d="M109.499 13.1431V13.9948H103.119V12.2996H107.351C107.256 11.6825 107.032 11.1043 106.632 10.682C106.057 10.0727 105.172 9.85409 104.293 9.85409C103.414 9.85409 102.528 10.0727 101.953 10.682C101.378 11.2913 101.17 12.2213 101.17 13.1435C101.17 14.0658 101.378 15.003 101.953 15.6046C102.528 16.2061 103.415 16.433 104.293 16.433C105.171 16.433 106.057 16.2143 106.632 15.6046C106.712 15.5186 106.784 15.4248 106.856 15.331H109.22C109.012 16.0657 108.685 16.7299 108.19 17.2454C107.231 18.2531 105.754 18.6205 104.293 18.6205C102.831 18.6205 101.355 18.2609 100.396 17.2454C99.4382 16.2299 99.0864 14.6828 99.0864 13.1435C99.0864 11.6043 99.4295 10.0494 100.396 9.04168C101.362 8.03396 102.832 7.66663 104.293 7.66663C105.754 7.66663 107.231 8.02618 108.19 9.04168C109.156 10.0572 109.499 11.6043 109.499 13.1435V13.1431Z" />
10
- <path d="M113.5 4.62817H111.104V18.6217H113.5V4.62817Z" />
11
- <path d="M117.589 12.8154L121.517 18.6208H118.554L114.625 12.8154L118.554 8.15088H121.517L117.589 12.8154Z" />
12
- </g>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="26 0 97 24" width="97" height="24" fill="none">
2
+ <g fill="#E7ECFF">
3
+ <path d="M68.416 18.2447H67.0501V16.1272H68.416C69.2619 16.1272 70.1166 15.9163 70.6671 15.3304C71.2181 14.7444 71.426 13.8455 71.426 12.9471C71.426 12.0487 71.2268 11.1498 70.6671 10.5643C70.1083 9.97831 69.2619 9.76744 68.416 9.76744C67.5701 9.76744 66.7154 9.97831 66.1639 10.5643C65.6129 11.1503 65.4049 12.0487 65.4049 12.9471V21.6435H63.009V7.6582H65.4049V8.54883H65.8442C65.8918 8.49393 65.9394 8.44728 65.9875 8.40064C66.5871 7.85353 67.5049 7.6582 68.4072 7.6582C69.8212 7.6582 71.2341 8.00998 72.1607 8.98662C73.0868 9.96325 73.4143 11.4632 73.4143 12.9558C73.4143 14.4485 73.0785 15.9406 72.1607 16.925C71.2424 17.9094 69.8212 18.2457 68.416 18.2457V18.2447Z" />
4
+ <path d="M31.9551 8.03497H33.3204V10.1525H31.9551C31.1087 10.1525 30.2545 10.3633 29.7035 10.9493C29.1525 11.5353 28.945 12.4342 28.945 13.3326C28.945 14.231 29.1447 15.1294 29.7035 15.7154C30.2623 16.3014 31.1087 16.5122 31.9551 16.5122C32.8015 16.5122 33.6562 16.3014 34.2072 15.7154C34.7582 15.1294 34.9657 14.231 34.9657 13.3326V4.62842H37.3611V18.6219H34.9657V17.7313H34.5264C34.4783 17.7857 34.4307 17.8329 34.3826 17.8795C33.7835 18.4261 32.8652 18.6219 31.9629 18.6219C30.5494 18.6219 29.136 18.2707 28.2099 17.294C27.2838 16.3174 26.9563 14.817 26.9563 13.3248C26.9563 11.8327 27.2916 10.34 28.2099 9.35561C29.136 8.37898 30.5494 8.03497 31.9551 8.03497Z" />
5
+ <path d="M49.3786 13.1431V13.9948H42.9984V12.2996H47.2305C47.1348 11.6825 46.9113 11.1043 46.5119 10.682C45.9371 10.0727 45.0503 9.85409 44.1723 9.85409C43.2943 9.85409 42.4076 10.0727 41.8328 10.682C41.258 11.2913 41.05 12.2213 41.05 13.1435C41.05 14.0658 41.2575 15.003 41.8328 15.6046C42.4076 16.2061 43.2939 16.433 44.1723 16.433C45.0508 16.433 45.9371 16.2143 46.5119 15.6046C46.5916 15.5186 46.6635 15.4248 46.7354 15.331H49.0992C48.8918 16.0657 48.5643 16.7299 48.0691 17.2454C47.111 18.2531 45.6339 18.6205 44.1723 18.6205C42.7108 18.6205 41.2337 18.2609 40.2755 17.2454C39.3174 16.2299 38.9661 14.6828 38.9661 13.1435C38.9661 11.6043 39.3096 10.0494 40.2755 9.04168C41.242 8.03396 42.7108 7.66663 44.1723 7.66663C45.6339 7.66663 47.111 8.02618 48.0691 9.04168C49.0351 10.0572 49.3786 11.6043 49.3786 13.1435V13.1431Z" />
6
+ <path d="M61.4045 13.1431V13.9948H55.0243V12.2996H59.2564C59.1602 11.6825 58.9372 11.1043 58.5378 10.682C57.963 10.0727 57.0762 9.85409 56.1982 9.85409C55.3202 9.85409 54.4335 10.0727 53.8587 10.682C53.2839 11.2913 53.0759 12.2213 53.0759 13.1435C53.0759 14.0658 53.2834 15.003 53.8587 15.6046C54.4335 16.2061 55.3202 16.433 56.1982 16.433C57.0762 16.433 57.963 16.2143 58.5378 15.6046C58.6179 15.5186 58.6894 15.4248 58.7608 15.331H61.1251C60.9171 16.0657 60.5897 16.7299 60.0945 17.2454C59.1364 18.2531 57.6593 18.6205 56.1982 18.6205C54.7372 18.6205 53.2596 18.2609 52.3014 17.2454C51.3432 16.2299 50.9919 14.6828 50.9919 13.1435C50.9919 11.6043 51.3355 10.0494 52.3014 9.04168C53.2678 8.03396 54.7367 7.66663 56.1982 7.66663C57.6598 7.66663 59.1364 8.02618 60.0945 9.04168C61.061 10.0572 61.4045 11.6043 61.4045 13.1435V13.1431Z" />
7
+ <path d="M80.242 18.6214C81.7035 18.6214 83.1801 18.4105 84.1383 17.809C85.0965 17.2075 85.4482 16.2931 85.4482 15.3869C85.4482 14.4807 85.1042 13.5585 84.1383 12.9647C83.1801 12.371 81.703 12.1518 80.242 12.1518C79.6186 12.1518 79.0438 12.0658 78.6366 11.8394C78.2294 11.6047 78.0778 11.2534 78.0778 10.9017C78.0778 10.5499 78.2216 10.1908 78.6366 9.9639C79.0438 9.72921 79.6749 9.65147 80.2973 9.65147C80.9198 9.65147 81.5509 9.73747 81.9591 9.9639C82.3663 10.1986 82.5179 10.5499 82.5179 10.9017H84.9531C84.9531 9.99499 84.6421 9.07327 83.7719 8.47951C82.9017 7.88576 81.5679 7.66663 80.2424 7.66663C78.9169 7.66663 77.5837 7.8775 76.713 8.47951C75.8427 9.08104 75.5308 9.99499 75.5308 10.9017C75.5308 11.8083 75.8423 12.73 76.713 13.3238C77.5832 13.9176 78.9165 14.1367 80.2424 14.1367C80.929 14.1367 81.688 14.2227 82.1428 14.4491C82.5985 14.676 82.7579 15.0351 82.7579 15.3869C82.7579 15.7387 82.5985 16.0977 82.1428 16.3246C81.688 16.5511 80.9931 16.6371 80.3066 16.6371C79.62 16.6371 78.9169 16.5511 78.4694 16.3246C78.0224 16.0982 77.8543 15.7387 77.8543 15.3869H75.0435C75.0435 16.2935 75.3865 17.2153 76.3534 17.809C77.3194 18.4028 78.7809 18.6214 80.2424 18.6214H80.242Z" />
8
+ <path d="M97.4733 13.1431V13.9948H91.0932V12.2996H95.3252C95.23 11.6825 95.006 11.1043 94.6071 10.682C94.0313 10.0727 93.1456 9.85409 92.2666 9.85409C91.3876 9.85409 90.5018 10.0727 89.927 10.682C89.3522 11.2913 89.1452 12.2213 89.1452 13.1435C89.1452 14.0658 89.3522 15.003 89.927 15.6046C90.5018 16.2061 91.3886 16.433 92.2666 16.433C93.1446 16.433 94.0313 16.2143 94.6071 15.6046C94.6863 15.5186 94.7587 15.4248 94.8301 15.331H97.1935C96.9855 16.0657 96.6585 16.7299 96.1639 17.2454C95.2057 18.2531 93.7281 18.6205 92.2666 18.6205C90.805 18.6205 89.3284 18.2609 88.3703 17.2454C87.4121 16.2299 87.0613 14.6828 87.0613 13.1435C87.0613 11.6043 87.4043 10.0494 88.3703 9.04168C89.3367 8.03396 90.806 7.66663 92.2666 7.66663C93.7272 7.66663 95.2057 8.02618 96.1639 9.04168C97.1298 10.0572 97.4729 11.6043 97.4729 13.1435L97.4733 13.1431Z" />
9
+ <path d="M109.499 13.1431V13.9948H103.119V12.2996H107.351C107.256 11.6825 107.032 11.1043 106.632 10.682C106.057 10.0727 105.172 9.85409 104.293 9.85409C103.414 9.85409 102.528 10.0727 101.953 10.682C101.378 11.2913 101.17 12.2213 101.17 13.1435C101.17 14.0658 101.378 15.003 101.953 15.6046C102.528 16.2061 103.415 16.433 104.293 16.433C105.171 16.433 106.057 16.2143 106.632 15.6046C106.712 15.5186 106.784 15.4248 106.856 15.331H109.22C109.012 16.0657 108.685 16.7299 108.19 17.2454C107.231 18.2531 105.754 18.6205 104.293 18.6205C102.831 18.6205 101.355 18.2609 100.396 17.2454C99.4382 16.2299 99.0864 14.6828 99.0864 13.1435C99.0864 11.6043 99.4295 10.0494 100.396 9.04168C101.362 8.03396 102.832 7.66663 104.293 7.66663C105.754 7.66663 107.231 8.02618 108.19 9.04168C109.156 10.0572 109.499 11.6043 109.499 13.1435V13.1431Z" />
10
+ <path d="M113.5 4.62817H111.104V18.6217H113.5V4.62817Z" />
11
+ <path d="M117.589 12.8154L121.517 18.6208H118.554L114.625 12.8154L118.554 8.15088H121.517L117.589 12.8154Z" />
12
+ </g>
13
13
  </svg>