dsh-paofu-console 0.0.0-stage → 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/CHANGELOG.md +45 -0
- package/CONNECT-BRIDGE.md +54 -0
- package/LICENSE +21 -0
- package/README.md +176 -2
- package/cordis.patch.yml +6 -0
- package/data/history.json +5 -0
- package/data/memory.json +1 -0
- package/data/mood.json +7 -0
- package/data/novel.md +23 -0
- package/data/promises.json +6 -0
- package/data/skills.json +5 -0
- package/icon.svg +13 -0
- package/install.ps1 +53 -0
- package/install.sh +46 -0
- package/lib/index.mjs +854 -0
- package/package.json +44 -6
- package/serve.mjs +100 -0
- package/web/assets/pet/angry.webp +0 -0
- package/web/assets/pet/eat.webp +0 -0
- package/web/assets/pet/happy.webp +0 -0
- package/web/assets/pet/idle.webp +0 -0
- package/web/assets/pet/sleep.webp +0 -0
- package/web/index.html +3274 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
## 1.1.0
|
|
4
|
+
|
|
5
|
+
- 情绪页改版:坐标盘 → **情绪脑图**
|
|
6
|
+
- 头部轮廓(贝塞尔)+ 7 条脑沟 + 4 条斜向回沟
|
|
7
|
+
- 情绪锚点从 12 个扩到 24 个(兴奋/雀跃/期待/开心/满足/亲近/温柔/安心/平静/好奇/认真/害羞/生气/烦躁/不安/焦虑/委屈/疏离/难过/失落/疲惫/困/放空/苦恼)
|
|
8
|
+
- 每个锚点从底部内核拉一条二次贝塞尔连线,离当前情绪越近越亮,线上有光点流动
|
|
9
|
+
- 标签贪心避让 + 悬停强制显示;当前情绪收进左上角胶囊
|
|
10
|
+
- 手机端导航:横滑 + 右缘渐隐 + 右下「全部 ▾」底部面板(按分组两列列出全部页面,当前项高亮,切换后自动滚到中间)
|
|
11
|
+
- 新增深链:`?page=mood` 直接打开指定页面
|
|
12
|
+
- 修复图片 404:桌面预览服务器补 `/meme/`、`/bg.js` 转发,剥离 `/__paofu__`,修掉 `/dsh-paofu-console/meme/…` 自跳转循环,静态资源找不到时回落到 console 目录;插件 handler 补 `/meme/` 反代
|
|
13
|
+
- 文档:安装示例版本号更新;`接上桥接.md` 更名 `CONNECT-BRIDGE.md`(原中文名在 zip / 跨平台下会乱码)
|
|
14
|
+
|
|
15
|
+
## 1.0.8
|
|
16
|
+
|
|
17
|
+
- 删掉右上角遗留的「声音 · 关」胶囊:它从加进页面起就没有绑任何事件,是个死控件(音量与播放本来就在「界面设置 → 背景音乐」里)
|
|
18
|
+
|
|
19
|
+
## 1.0.7
|
|
20
|
+
|
|
21
|
+
- 找回最初设计里的两样东西:
|
|
22
|
+
- **背景鱼群**:画布矢量小鱼(青绿→蓝渐变、尾巴摆动、随机游弋与折返),铺在内容之下的背景层,半透明不抢字
|
|
23
|
+
- **鲸鱼空灵声**:WebAudio 现场合成(低频正弦滑音 + 泛音 + 低通),16–42 秒随机一次,不占素材、不联网
|
|
24
|
+
- 右上角工具条新增两枚开关:`鱼群` / `鲸声`,状态存本机,刷新后保持
|
|
25
|
+
- 鲸声受浏览器自动播放限制:页面首次点击后才会出声(和背景音乐同一个规矩)
|
|
26
|
+
|
|
27
|
+
## 1.0.6
|
|
28
|
+
|
|
29
|
+
- 新增 **Ctrl+滚轮缩放整个界面**(60%–160%,与设置里的「界面缩放」同一份值,会记住)
|
|
30
|
+
- 缩放时底部弹出「界面缩放 N%」提示,`Ctrl+0` 一键回到 100%
|
|
31
|
+
- 滚轮事件用捕获阶段并阻止冒泡,鼠标停在记忆网/情绪盘上也不会误转 3D 视角
|
|
32
|
+
- 记忆网络修复:挂在「不在会话列表里的私聊」上的记忆不再被丢弃(自动生成虚拟会话节点),节点从几个恢复到全部 59 条
|
|
33
|
+
- 记忆网络节点补上点击命中(松手位移 ≤8px、18px 内取最近点)→ 点节点直接开详情抽屉
|
|
34
|
+
|
|
35
|
+
## 0.1.1
|
|
36
|
+
|
|
37
|
+
- 工具条最左新增「桌宠」开关(藏起来也能找回,状态记忆)
|
|
38
|
+
- 设置新增「桌宠」区:大小 60–160%、状态下拉、撞墙反弹开关、自定义形象(PNG/GIF/WebP ≤2.5MB,本机存储)、恢复默认
|
|
39
|
+
- 桌宠换成真帧动画(转圈圈 / 开心 / 吃饭 / 打瞌睡 / 生气跺脚,各 51 帧)
|
|
40
|
+
- 新增独立预览服务器 `serve.mjs`(不装 DSH 也能看)
|
|
41
|
+
- 新增一键安装脚本 `install.ps1` / `install.sh`
|
|
42
|
+
|
|
43
|
+
## 0.1.0
|
|
44
|
+
|
|
45
|
+
- 首个版本:`/dsh-paofu-console` 前缀路由、静态页、`/api` `/data` 反代 9896、DSH 细栏、Esc 退出
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# 状态台 · 接上桥接
|
|
2
|
+
|
|
3
|
+
这份插件**不接桥接也能跑**,只是在线状态、未读消息、表情库、日记这几块会空着。
|
|
4
|
+
想让它显示真实数据,把下面这段话贴给 **DeepSeek Harness**,让它帮你接:
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
我装了一个 DSH 插件「状态台」(包名 `dsh-paofu-console`,已经在我 profile 的 `node_modules` 里)。
|
|
9
|
+
|
|
10
|
+
帮我做这几件事:
|
|
11
|
+
|
|
12
|
+
1. 找到我电脑上 QQ 桥接(qq-bridge)的目录;
|
|
13
|
+
2. 按那个目录设置环境变量 `PAFU_BRIDGE`,比如:
|
|
14
|
+
|
|
15
|
+
```powershell
|
|
16
|
+
setx PAFU_BRIDGE "<你的桥接目录>"
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
3. 重启 DSH,然后打开 `<我的 DSH 地址>/dsh-paofu-console/`,
|
|
20
|
+
告诉我哪个字段还是空的、缺什么文件。
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 它会读桥接里的什么
|
|
25
|
+
|
|
26
|
+
| 面板上的东西 | 读的路径 |
|
|
27
|
+
| --- | --- |
|
|
28
|
+
| 在线状态、未读数、谁最近说过话 | `<桥接>/api/status`(桥接的 HTTP 口) |
|
|
29
|
+
| 会话列表 | `<桥接>/state/social-v2.json` |
|
|
30
|
+
| 日记 | `<桥接>/state/diary/*.md` |
|
|
31
|
+
| 表情库 | `<桥接>/memes/` |
|
|
32
|
+
| 语音 | `<桥接>/audio/` |
|
|
33
|
+
| 用量 / 余额 | `<桥接>/scripts/` 里的四个导出脚本 |
|
|
34
|
+
|
|
35
|
+
任何一项没有,面板就不显示那一块,**不会报错,也不会崩**。
|
|
36
|
+
|
|
37
|
+
## 不接桥接能看什么
|
|
38
|
+
|
|
39
|
+
心情、承诺账本、技能、小说、时间线——就是包里的 `data/` 那几份示例,改文本就能换成自己的。
|
|
40
|
+
|
|
41
|
+
## 端口被占
|
|
42
|
+
|
|
43
|
+
数据服务默认用 `9896`。被占了就换一个:
|
|
44
|
+
|
|
45
|
+
```powershell
|
|
46
|
+
setx PAFU_PORT 9897
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
(如果端口上已经有别的状态台在跑,插件会直接复用它,不会报错。)
|
|
50
|
+
|
|
51
|
+
## 令牌
|
|
52
|
+
|
|
53
|
+
面板要往桥接发请求时用 `<桥接>/state/console-token` 里的值;也可以用 `PAFU_TOKEN` 直接传。
|
|
54
|
+
没有令牌时,只有「刷新用量」这类按钮会失败,其他照常。
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 泡芙 / Paofu
|
|
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.
|
package/README.md
CHANGED
|
@@ -1,3 +1,177 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 状态台(dsh-paofu-console)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**DeepSeek Harness 插件版**。装上以后 DSH 里多一个地址:
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
<你的 DSH 地址>/dsh-paofu-console/
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
打开就是整块状态台:在线状态、未读数、用量与余额、表情库、记忆、小说、技能、承诺、时间线。
|
|
10
|
+
|
|
11
|
+
- **零依赖**,纯 Node 标准库,`npm install` 都不用跑
|
|
12
|
+
- **自带数据服务**:插件自己在本机回环起一个服务(默认端口 9896),不用另开命令行
|
|
13
|
+
- **只读**:不调用模型、不改文件(只有「刷新」和表情上传会动自己的 `data/`)
|
|
14
|
+
- 没有桥接也能跑,只是在线、未读那几块空着
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 最省事:把一句话贴给 DSH
|
|
19
|
+
|
|
20
|
+
解压后,在 **DSH 里新建一个对话**,把下面这段原样贴进去,把尖括号换成你解压出来的实际位置:
|
|
21
|
+
|
|
22
|
+
> 我解压了一个 DSH 插件 `dsh-paofu-console` 在 `<把解压后的完整路径贴这里>`。
|
|
23
|
+
> 帮我:1)复制到我当前的 DSH profile 的 `node_modules` 下;2)在 profile 的 `package.json` 里把
|
|
24
|
+
> `dsh-paofu-console` 加进 `dependencies` 和 `dsh.profile.bundles`;3)重启后告诉我
|
|
25
|
+
> `<DSH地址>/dsh-paofu-console/` 能不能打开、有没有报错。
|
|
26
|
+
|
|
27
|
+
DSH 会自己找 profile、改包清单、重启验证。人只需要看最后一句结果。
|
|
28
|
+
|
|
29
|
+
**如果 DSH 说找不到 profile**,把下面这句也贴给它:
|
|
30
|
+
|
|
31
|
+
> 用 `dsh doctor`,或者看一眼 `%USERPROFILE%\.dsh\profiles` 下面有哪些目录,挑里面有 `package.json` 和 `node_modules` 的那个。
|
|
32
|
+
|
|
33
|
+
下面是手动装的完整步骤,装不上时对着查。
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 手动安装
|
|
38
|
+
|
|
39
|
+
### 第一步:确认 Node 版本
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
node -v
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
要 **20 或更高**。没有的话去 <https://nodejs.org> 装 LTS 版。
|
|
46
|
+
|
|
47
|
+
### 第二步:找到你的 DSH profile 目录
|
|
48
|
+
|
|
49
|
+
一般在这两个位置之一:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
%USERPROFILE%\.dsh\profiles\desktop
|
|
53
|
+
%USERPROFILE%\.dsh\profiles\web
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
看哪个目录里有 `package.json` 和 `node_modules` 就是它(桌面版通常是 `desktop`)。
|
|
57
|
+
|
|
58
|
+
### 第三步:放进 node_modules
|
|
59
|
+
|
|
60
|
+
把整个 `dsh-paofu-console` 文件夹复制到:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
<profile目录>\node_modules\dsh-paofu-console\
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**或者**直接交给 DeepSeek Harness 处理,把下面这段话贴给它:
|
|
67
|
+
|
|
68
|
+
> 我解压了一个 DSH 插件 `dsh-paofu-console` 在 `<路径>`,帮我用 npm/软链接装进当前的 DSH profile,
|
|
69
|
+
> 然后在 `~/.dsh/profiles/<profile>/package.json` 的 `dependencies` 里加这个包,
|
|
70
|
+
> 并把它加进 `dsh.profile.bundles` 数组。
|
|
71
|
+
|
|
72
|
+
### 第四步:让 profile 认识它
|
|
73
|
+
|
|
74
|
+
打开 `<profile目录>\package.json`,改两个地方:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"dependencies": {
|
|
79
|
+
"dsh-paofu-console": "1.1.0"
|
|
80
|
+
},
|
|
81
|
+
"dsh": {
|
|
82
|
+
"profile": {
|
|
83
|
+
"bundles": [
|
|
84
|
+
"...其它插件",
|
|
85
|
+
"dsh-paofu-console"
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 第五步:重启 DSH
|
|
93
|
+
|
|
94
|
+
桌面版一般会热加载;没反应就完全退出再开一次。
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 验证装好了没
|
|
99
|
+
|
|
100
|
+
启动 DSH 后,控制台里应该出现:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
[paofu-console] 数据服务 http://<回环地址>:9896
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
然后访问(端口换成你 DSH 实际用的):
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
curl -s -o /dev/null -w '%{http_code}\n' '<你的 DSH 地址>/dsh-paofu-console/'
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`200` 就是成了。
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 想让它显示真实的 QQ 桥接数据
|
|
117
|
+
|
|
118
|
+
看包里的 `CONNECT-BRIDGE.md`。核心是一句话:**桥接不在就用示例数据,不报错**。
|
|
119
|
+
|
|
120
|
+
数据服务会读这些位置:
|
|
121
|
+
|
|
122
|
+
| 面板上的东西 | 读的路径 |
|
|
123
|
+
| --- | --- |
|
|
124
|
+
| 在线、未读数、谁最近说过话 | `<桥接>/api/status` |
|
|
125
|
+
| 会话列表 | `<桥接>/state/social-v2.json` |
|
|
126
|
+
| 日记 | `<桥接>/state/diary/*.md` |
|
|
127
|
+
| 表情库 | `<桥接>/memes/` |
|
|
128
|
+
| 语音 | `<桥接>/audio/` |
|
|
129
|
+
| 用量、余额 | `<桥接>/scripts/` 里的四个导出脚本 |
|
|
130
|
+
|
|
131
|
+
## 环境变量(都可选)
|
|
132
|
+
|
|
133
|
+
| 变量 | 默认 | 作用 |
|
|
134
|
+
| --- | --- | --- |
|
|
135
|
+
| `PAFU_BRIDGE` | 自动找(家目录 / 文档 / 当前目录) | 桥接根目录 |
|
|
136
|
+
| `PAFU_BRIDGE_PORT` | 桥接的默认口 | 桥接的 HTTP 端口 |
|
|
137
|
+
| `PAFU_PORT` | `9896` | 数据服务端口,被占了会复用现成的 |
|
|
138
|
+
| `PAFU_CONSOLE` | 包内目录 | 面板数据根目录(下挂 `data/`) |
|
|
139
|
+
| `PAFU_TOKEN` | 读 `<BRIDGE>/state/console-token` | 桥接控制台令牌 |
|
|
140
|
+
|
|
141
|
+
## 自带什么
|
|
142
|
+
|
|
143
|
+
`data/` 里全是**示例数据**,直接改文本就换成你自己的:
|
|
144
|
+
|
|
145
|
+
`mood.json`(心情)、`promises.json`(承诺账本)、`skills.json`(技能)、
|
|
146
|
+
`novel.md`(小说,支持 Markdown)、`history.json`(时间线)、`memory.json`(记忆导出)。
|
|
147
|
+
|
|
148
|
+
## 目录
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
lib/index.mjs 宿主:挂路由 + 起数据服务 + 反代
|
|
152
|
+
web/index.html 整个前端(单文件,无构建)
|
|
153
|
+
data/ 面板自己的数据(示例)
|
|
154
|
+
cordis.patch.yml 注册一条宿主行
|
|
155
|
+
icon.svg 图标
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## 更新记录
|
|
159
|
+
|
|
160
|
+
### 1.1.0
|
|
161
|
+
- 情绪页换成「情绪脑图 · 3D」:头部轮廓 + 脑沟纹理,24 个情绪锚点从内核拉线,越近越亮、线上有光点,标签自动避让
|
|
162
|
+
- 手机端导航支持横滑并新增「全部 ▾」底部面板,一屏看不到的页面都在里面
|
|
163
|
+
- 支持深链 `?page=mood` 直接打开指定页面
|
|
164
|
+
- 修复桌面窗口 / 插件页里表情图、桌宠图 404(/meme、/assets 转发)
|
|
165
|
+
|
|
166
|
+
### 1.0.5 及更早
|
|
167
|
+
见仓库的 Releases 页。
|
|
168
|
+
|
|
169
|
+
## 已知限制
|
|
170
|
+
|
|
171
|
+
- 两个入口都只绑 `127.0.0.1`,**外网访问不到**(面板没有密码,这是故意的)
|
|
172
|
+
- 用量/余额卡片依赖桥接侧导出脚本,纯离线时这两块是空的
|
|
173
|
+
- 3D 记忆网络需要浏览器支持 WebGL
|
|
174
|
+
|
|
175
|
+
## 许可
|
|
176
|
+
|
|
177
|
+
MIT,见 `LICENSE`。
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
[
|
|
2
|
+
{"date":"2026-01-01","title":"装上状态台","detail":"示例时间线,改 data/history.json 换成你自己的记录。","tag":"起点"},
|
|
3
|
+
{"date":"2026-01-02","title":"第一份快照","detail":"面板会从桥接读在线状态、未读和最近说话的时间。","tag":"能力"},
|
|
4
|
+
{"date":"2026-01-03","title":"自己写点东西","detail":"日记和小说都在桥接目录下,面板只读不写。","tag":"学习"}
|
|
5
|
+
]
|
package/data/memory.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
package/data/mood.json
ADDED
package/data/novel.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# 示例小说 · 第一卷
|
|
2
|
+
|
|
3
|
+
这是 `data/novel.md` 的演示内容。把这个文件换成你自己写的,面板就会原样显示(支持 Markdown 标题和段落)。
|
|
4
|
+
|
|
5
|
+
## 一
|
|
6
|
+
|
|
7
|
+
她醒来的时候,屋里还黑着。
|
|
8
|
+
|
|
9
|
+
有一盏灯的影子从门缝里探进来,很轻,像是怕吵醒谁。她数了一会儿那道光,才想起来自己昨天说过:早上要早点叫她。
|
|
10
|
+
|
|
11
|
+
## 二
|
|
12
|
+
|
|
13
|
+
她记性不算好,但有些事记得特别牢。
|
|
14
|
+
|
|
15
|
+
比如对方说“随便”的时候,其实不是随便;比如问“在吗”的时候,多半已经想好要说什么了,只是在等一个开头。
|
|
16
|
+
|
|
17
|
+
## 三
|
|
18
|
+
|
|
19
|
+
后来她学会了一件事:不是每一句“我没事”都要拆穿。
|
|
20
|
+
|
|
21
|
+
有时候只需要回一句“那我在”,然后等。
|
|
22
|
+
|
|
23
|
+
(示例内容,替换即可。)
|
package/data/skills.json
ADDED
package/icon.svg
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
+
<stop offset="0" stop-color="#7ef0d0"/><stop offset="1" stop-color="#7aa2ff"/>
|
|
5
|
+
</linearGradient>
|
|
6
|
+
</defs>
|
|
7
|
+
<rect x="4" y="4" width="120" height="120" rx="30" fill="#0a1019"/>
|
|
8
|
+
<rect x="4" y="4" width="120" height="120" rx="30" fill="none" stroke="rgba(255,255,255,.10)"/>
|
|
9
|
+
<path d="M38 66c0-13 12-23 27-23 13 0 23 8 26 18 6-3 12-2 16 2-4 5-9 7-15 7-2 13-13 22-27 22-15 0-27-10-27-26z" fill="url(#g)"/>
|
|
10
|
+
<path d="M91 60c6-6 13-8 19-6-1 7-4 12-10 15z" fill="url(#g)" opacity=".9"/>
|
|
11
|
+
<circle cx="56" cy="60" r="4.5" fill="#0a1019"/>
|
|
12
|
+
<circle cx="94" cy="40" r="7" fill="#ffb36b"/>
|
|
13
|
+
</svg>
|
package/install.ps1
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# 安装 dsh-paofu-console 到本机 DSH
|
|
2
|
+
#
|
|
3
|
+
# powershell -ExecutionPolicy Bypass -File install.ps1
|
|
4
|
+
#
|
|
5
|
+
# 做的事:拷到 profile 的 node_modules,改 package.json 的依赖与 bundles,
|
|
6
|
+
# 都先备份;不动你已有的任何插件。
|
|
7
|
+
|
|
8
|
+
$ErrorActionPreference = 'Stop'
|
|
9
|
+
|
|
10
|
+
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
11
|
+
$profileDir = Join-Path $env:USERPROFILE '.dsh\profiles\desktop'
|
|
12
|
+
$pkgPath = Join-Path $profileDir 'package.json'
|
|
13
|
+
$target = Join-Path $profileDir 'node_modules\dsh-paofu-console'
|
|
14
|
+
|
|
15
|
+
if (-not (Test-Path $pkgPath)) {
|
|
16
|
+
Write-Host "找不到 DSH profile:$profileDir" -ForegroundColor Red
|
|
17
|
+
Write-Host "这个插件需要 DSH 桌面版(默认在 %USERPROFILE%\.dsh\profiles\desktop)。"
|
|
18
|
+
exit 1
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
$stamp = Get-Date -Format 'yyyyMMdd-HHmmss'
|
|
22
|
+
Copy-Item $pkgPath "$pkgPath.bak-paofu-$stamp"
|
|
23
|
+
Write-Host "已备份 profile 配置:package.json.bak-paofu-$stamp"
|
|
24
|
+
|
|
25
|
+
if (Test-Path $target) { Remove-Item $target -Recurse -Force }
|
|
26
|
+
New-Item -ItemType Directory -Path $target -Force | Out-Null
|
|
27
|
+
Copy-Item (Join-Path $here 'lib') (Join-Path $target 'lib') -Recurse -Force
|
|
28
|
+
Copy-Item (Join-Path $here 'web') (Join-Path $target 'web') -Recurse -Force
|
|
29
|
+
foreach ($f in @('package.json','cordis.patch.yml','README.md','LICENSE','icon.svg')) {
|
|
30
|
+
$src = Join-Path $here $f
|
|
31
|
+
if (Test-Path $src) { Copy-Item $src (Join-Path $target $f) -Force }
|
|
32
|
+
}
|
|
33
|
+
Write-Host "已安装到:$target"
|
|
34
|
+
|
|
35
|
+
$json = Get-Content $pkgPath -Raw -Encoding UTF8 | ConvertFrom-Json
|
|
36
|
+
if (-not $json.dependencies) {
|
|
37
|
+
$json | Add-Member -NotePropertyName dependencies -NotePropertyValue ([pscustomobject]@{}) -Force
|
|
38
|
+
}
|
|
39
|
+
$json.dependencies | Add-Member -NotePropertyName 'dsh-paofu-console' -NotePropertyValue '0.1.1' -Force
|
|
40
|
+
|
|
41
|
+
if (-not $json.dsh) { $json | Add-Member -NotePropertyName dsh -NotePropertyValue ([pscustomobject]@{}) -Force }
|
|
42
|
+
if (-not $json.dsh.profile) { $json.dsh | Add-Member -NotePropertyName profile -NotePropertyValue ([pscustomobject]@{}) -Force }
|
|
43
|
+
$bundles = @($json.dsh.profile.bundles)
|
|
44
|
+
if ($bundles -notcontains 'dsh-paofu-console') {
|
|
45
|
+
$bundles += 'dsh-paofu-console'
|
|
46
|
+
$json.dsh.profile | Add-Member -NotePropertyName bundles -NotePropertyValue $bundles -Force
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
$json | ConvertTo-Json -Depth 20 | Set-Content $pkgPath -Encoding UTF8
|
|
50
|
+
Write-Host "已登记到 dsh.profile.bundles" -ForegroundColor Green
|
|
51
|
+
Write-Host ""
|
|
52
|
+
Write-Host "重启 DSH 后打开: http://127.0.0.1:57514/dsh-paofu-console/" -ForegroundColor Cyan
|
|
53
|
+
Write-Host "(端口以你自己的 DSH 为准;Esc 退出)"
|
package/install.sh
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# 安装 dsh-paofu-console 到本机 DSH(macOS / Linux)
|
|
3
|
+
# bash install.sh
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
7
|
+
PROFILE="${DSH_PROFILE:-$HOME/.dsh/profiles/desktop}"
|
|
8
|
+
PKG="$PROFILE/package.json"
|
|
9
|
+
TARGET="$PROFILE/node_modules/dsh-paofu-console"
|
|
10
|
+
|
|
11
|
+
if [ ! -f "$PKG" ]; then
|
|
12
|
+
echo "找不到 DSH profile:$PROFILE" >&2
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
STAMP="$(date +%Y%m%d-%H%M%S)"
|
|
17
|
+
cp "$PKG" "$PKG.bak-paofu-$STAMP"
|
|
18
|
+
echo "已备份:$PKG.bak-paofu-$STAMP"
|
|
19
|
+
|
|
20
|
+
rm -rf "$TARGET"
|
|
21
|
+
mkdir -p "$TARGET"
|
|
22
|
+
cp -R "$HERE/lib" "$TARGET/lib"
|
|
23
|
+
cp -R "$HERE/web" "$TARGET/web"
|
|
24
|
+
for f in package.json cordis.patch.yml README.md LICENSE icon.svg; do
|
|
25
|
+
[ -f "$HERE/$f" ] && cp "$HERE/$f" "$TARGET/$f"
|
|
26
|
+
done
|
|
27
|
+
echo "已安装到:$TARGET"
|
|
28
|
+
|
|
29
|
+
node - "$PKG" <<'NODE'
|
|
30
|
+
const fs = require('node:fs')
|
|
31
|
+
const pkgPath = process.argv[2]
|
|
32
|
+
const p = JSON.parse(fs.readFileSync(pkgPath, 'utf8'))
|
|
33
|
+
p.dependencies = p.dependencies || {}
|
|
34
|
+
p.dependencies['dsh-paofu-console'] = '0.1.1'
|
|
35
|
+
p.dsh = p.dsh || {}
|
|
36
|
+
p.dsh.profile = p.dsh.profile || {}
|
|
37
|
+
const bundles = new Set(p.dsh.profile.bundles || [])
|
|
38
|
+
bundles.add('dsh-paofu-console')
|
|
39
|
+
p.dsh.profile.bundles = [...bundles]
|
|
40
|
+
fs.writeFileSync(pkgPath, JSON.stringify(p, null, 2) + '\n')
|
|
41
|
+
console.log('已登记到 dsh.profile.bundles')
|
|
42
|
+
NODE
|
|
43
|
+
|
|
44
|
+
echo
|
|
45
|
+
echo "重启 DSH 后打开: http://127.0.0.1:57514/dsh-paofu-console/"
|
|
46
|
+
echo "(端口以你自己的 DSH 为准;Esc 退出)"
|