@shgroup/dsh-serenity-hooks 1.57.0 → 1.57.2
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/README.md +23 -9
- package/assets/eap-paper-LICENSE.txt +21 -0
- package/assets/eap-paper.md +492 -0
- package/dsh.plugin.json +1 -1
- package/lib/{ccc-roots-BC8mn8iM.js → ccc-roots-GIJ3A_tw.js} +79 -2
- package/lib/ccc-roots.d.ts +2 -1
- package/lib/client.js +43 -379
- package/lib/config-ops.d.ts +3 -34
- package/lib/face-host.d.ts +7 -5
- package/lib/index.d.ts +0 -31
- package/lib/index.js +197 -1079
- package/lib/{message-source-BcCRsEOh.js → message-source-B4P3Uw6D.js} +1 -1
- package/lib/output-guard-seam.d.ts +9 -2
- package/lib/ports.d.ts +6 -6
- package/lib/seams/lifecycle.d.ts +3 -3
- package/lib/{settings-section-xHABl8nk.js → settings-section-DQIVsTqE.js} +45 -30
- package/lib/settings-section.d.ts +3 -16
- package/lib/skiff-core.d.ts +6 -5
- package/lib/skiff-debug.d.ts +5 -4
- package/lib/skiff-role.d.ts +1 -1
- package/lib/tools/eap.d.ts +33 -3
- package/lib/tools/praxis.d.ts +4 -2
- package/lib/tools/skiff-admin.d.ts +1 -1
- package/lib/unattended-ops.d.ts +3 -1
- package/lib/weixin-bridge.d.ts +9 -2
- package/lib/weixin-output-guard.d.ts +1 -1
- package/package.json +3 -1
- package/lib/access-CNccNtgf.js +0 -79
- package/lib/acp-core.d.ts +0 -80
- package/lib/acp-http.d.ts +0 -37
- package/lib/skiff-registry-BjIX_KD1.js +0 -43
package/README.md
CHANGED
|
@@ -100,7 +100,7 @@ dsh plugin --profile web add link:$(pwd)/hooks/dsh-serenity-hooks
|
|
|
100
100
|
| **工作区围墙** | 墙内可用,墙外一律拒绝(路径无法解析) | AI 不应接触工作区之外的内容 |
|
|
101
101
|
| **黑名单 / 治理文件** | 黑名单可配置;`.serenity` 等治理文件禁止 AI 写入 | 防止 AI 破坏自身所在的"地基" |
|
|
102
102
|
| **密钥文件守卫** | `localstore.json` 对**所有**工具拒绝(包括 read/grep/glob) | 密钥值在结构上无法外流 |
|
|
103
|
-
| **对外输出守卫** | 对外向会话(子角色 /
|
|
103
|
+
| **对外输出守卫** | 对外向会话(子角色 / 重建会话)若答出敏感词,会被打回重答,并告知命中的词与修改方向 | 外部使用者不应看到内部机制 |
|
|
104
104
|
| **轨迹提醒** | 持续一段时间后会提醒 AI"把进度写回工作日志",并要求它回一个确认码 | 提醒是机制,不依赖自觉 |
|
|
105
105
|
| **工作日志体积提醒** | 工作日志(SESSION.md)超过 200KB 时提醒 AI"停下重写",并附四条重写原则(保留骨架 / 细节移至附件文件 / 可合并的合并 / 其余自行判断) | 日志持续增厚则无人读得完;重写成本低于堆积。阈值按工作区可调(`sessionKeeper.sessionMdMaxKB`,0 = 关) |
|
|
106
106
|
| **重建前交接** | 重建上下文前,要求 AI 先把"手头做到哪了 / 还差什么 / 下一步做什么"写入**本轨迹目录下的 `REBUILD-TODO.md`**(固定文件名);重建后的 AI 首先读取该文件并继续 | 上下文被清空,但在办的事不能丢。该便签是**只用一次的交界材料**:无格式义务、随时可丢;超过 10 KB 会提醒清理(`SCRATCH PRUNE`,整份删除亦可) |
|
|
@@ -113,10 +113,15 @@ dsh plugin --profile web add link:$(pwd)/hooks/dsh-serenity-hooks
|
|
|
113
113
|
| **网页登录入口** | 3081 | 外部/手机访问完整界面:登录后反向代理到 3080,可配工作区白名单 |
|
|
114
114
|
| **微信主动发送入口** | 3082(只绑 127.0.0.1) | 工作区外的脚本/集成用它给微信发消息(公网不可达,所以不需要密钥)。工作区内的 AI 不走这个端口,直接使用 `im-bridge` 工具 |
|
|
115
115
|
| **子角色调试页** | 3099(只绑 127.0.0.1) | 调试"子角色"时使用,可切换工作区、查看对话轨迹 |
|
|
116
|
-
| **ACP + 对外问答页** | 3100(只绑 127.0.0.1) | 程序化接入(JSON-RPC)+ 给别人用的问答页(key 认证,只返回答案,不返回内部轨迹) |
|
|
117
116
|
| **微信桥** | 无需端口(出站长轮询) | 家人在微信里直接和 AI 说话 |
|
|
118
117
|
|
|
119
|
-
> 3081 / 3099
|
|
118
|
+
> 3081 / 3099 **默认关**(须自行开启);3082 **默认开**(微信桥启用时才有意义)。默认只监听 127.0.0.1 的入口,如需暴露到公网,由使用者自行决定方式(隧道 / 反代 / 端口映射都行),插件不绑定任何特定做法。
|
|
119
|
+
|
|
120
|
+
> 🔴 **已退役:原「ACP + 对外问答页」(3100)**。该面是本插件早期自造的一套私有 HTTP+HTML 协议外壳
|
|
121
|
+
> (无客户端生态),已于 2026-10-15 **整体移除**(连同 `acp-core` / `acp-http` 与相关开关、问答页 key)。
|
|
122
|
+
> **要程序化或从手机/远程接入,走宿主自带的官方 ACP server**:`dsh --profile acp` 起一个纯 stdio、
|
|
123
|
+
> 零认证的 ACP 服务,再由任一现成 ACP 客户端(编辑器如 Zed;手机端如 Agmente、ACP UI)连接。
|
|
124
|
+
> 认证落在**接入层**(隧道 / 反代 / Cloudflare Access),不再由本插件发放 key。
|
|
120
125
|
|
|
121
126
|
### 3.4 自动配置:用 opencode 的模型
|
|
122
127
|
|
|
@@ -268,10 +273,18 @@ my-workspace/ ← 工作区根目录(放一个 .serenity
|
|
|
268
273
|
- 调试页(3099)可以切工作区、看轨迹;回答用 markdown 渲染,思考过程折叠
|
|
269
274
|
- `container_admin role validate` 校验配置,`apply` 才真正生效
|
|
270
275
|
|
|
271
|
-
### 6.4
|
|
276
|
+
### 6.4 对外接入(官方 ACP)
|
|
277
|
+
|
|
278
|
+
本插件**不自造** ACP 面。要程序化或远程使用,用宿主自带的官方 ACP server:
|
|
279
|
+
|
|
280
|
+
| 步 | 做什么 |
|
|
281
|
+
|---|---|
|
|
282
|
+
| 1 | `dsh --profile acp` —— 起官方 ACP 服务(**纯 stdio、零认证**;首次运行自动建 profile) |
|
|
283
|
+
| 2 | 用任一 ACP 客户端连它(编辑器内直接起子进程;手机/远程经桥 + 隧道) |
|
|
284
|
+
| 3 | **认证放在接入层**(隧道 / 反代 / Cloudflare Access)——官方 server 自身不做认证 |
|
|
272
285
|
|
|
273
|
-
|
|
274
|
-
|
|
286
|
+
> **为什么不再自造**:原 3100 面是一个**没有客户端生态**的私有外壳,而官方件已发布并随宿主同版本演进。
|
|
287
|
+
> 详细接法与手机端配置见宁静号 CCC 的接入指南。
|
|
275
288
|
|
|
276
289
|
### 6.5 轨迹与定时唤醒(trajectory)
|
|
277
290
|
|
|
@@ -332,8 +345,8 @@ my-workspace/ ← 工作区根目录(放一个 .serenity
|
|
|
332
345
|
|
|
333
346
|
| 层 | 位置 | 放什么 |
|
|
334
347
|
|---|---|---|
|
|
335
|
-
| DSH 原生设置 | DSH 的 settings.yaml(即设置面板那几项) |
|
|
336
|
-
| 插件全局文件 | `~/.dsh/serenity-hooks.json`(权限 0600) | 网关账号(scrypt + TOTP)、监听地址与端口、工作区白名单、cookie
|
|
348
|
+
| DSH 原生设置 | DSH 的 settings.yaml(即设置面板那几项) | 开关与阈值:网关总开关、重建阈值、子角色开关与调试端口、**CRO 总闸(`croEnabled`,默认为开)**、**无人值守代理回复(`unattendedEnabled`,默认为关)**、**图工具总闸(默认关)** |
|
|
349
|
+
| 插件全局文件 | `~/.dsh/serenity-hooks.json`(权限 0600) | 网关账号(scrypt + TOTP)、监听地址与端口、工作区白名单、cookie 安全开关 |
|
|
337
350
|
| 工作区配置 | `.opencode/serenity.json` | 助手模型白名单、日志阈值、安全模式黑名单、子角色、**轨迹级 skill 供给(`trajectory.skills`)**、微信(账号/路由/开关) |
|
|
338
351
|
| 工作区凭据 | `localstore.json` | 密钥与本地偏好;微信机器人 token 也在这一层 |
|
|
339
352
|
|
|
@@ -408,7 +421,8 @@ pnpm build # 打包(lib/index.js + client.js)
|
|
|
408
421
|
先让 AI 把进度写回 SESSION.md,然后按提示调用 `container_trajectory rebuild`。轨迹会自动接续,不用手动开新会话。
|
|
409
422
|
|
|
410
423
|
**Q:对外问答页会返回内部信息吗?**
|
|
411
|
-
|
|
424
|
+
该面已于 2026-10-15 移除(改用官方 ACP,见 §6.4)。走官方 ACP 时,**认证与暴露范围由接入层决定**——
|
|
425
|
+
官方 server 只跑在 stdio 上、不认识网络,把它接到哪里、谁能连,取决于你怎么架隧道。
|
|
412
426
|
|
|
413
427
|
**Q:微信桥里,AI 的回复是怎么发出去的?**
|
|
414
428
|
默认由插件自动把它的最后一段话转发给用户。如果配了 `autoReplyWithLastMessage: false`,插件就不转了,改由 AI 自己发——所以这时候它如果没发,用户就收不到消息(除非另外开了 `fallbackOnNoSend` 让插件兜底)。
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 tellmewhattodo
|
|
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.
|