@shgroup/dsh-serenity-hooks 1.50.0 → 1.51.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/README.md +3 -2
- package/assets/diagram/DroidSansFallbackFull.ttf +0 -0
- package/assets/diagram/LICENSE-Apache-2.0.txt +202 -0
- package/assets/diagram/PROVENANCE.md +30 -0
- package/dsh.plugin.json +5 -4
- package/lib/{ccc-roots-Duk89a-h.js → ccc-roots-DtiMVRPo.js} +2 -2
- package/lib/client.js +23 -0
- package/lib/diagram/dsl-render.d.ts +8 -0
- package/lib/diagram/dsl.d.ts +65 -0
- package/lib/diagram/rasterize.d.ts +28 -0
- package/lib/handyman-ops.d.ts +1 -1
- package/lib/host/contract.d.ts +40 -7
- package/lib/human-channel.d.ts +131 -2
- package/lib/index.d.ts +21 -0
- package/lib/index.js +1452 -94
- package/lib/invariant.d.ts +5 -1
- package/lib/invariant.js +6 -1
- package/lib/{message-source-D72jte0u.js → message-source-LnJwIqLm.js} +1 -1
- package/lib/{rolldown-runtime-D7D4PA-g.js → rolldown-runtime-8H4AJuhK.js} +1 -0
- package/lib/{settings-section-EmaYsI-e.js → settings-section-cq0eUSd-.js} +3 -1
- package/lib/settings-section.d.ts +14 -0
- package/lib/{skiff-role-KqQA6pkr.js → skiff-role-DQZ6eR51.js} +1 -1
- package/lib/status.d.ts +29 -2
- package/lib/tools/diagram.d.ts +2 -0
- package/lib/{weixin-api-CtFYm53S.js → weixin-api-BrRcPiQs.js} +1 -1
- package/lib/weixin-bridge.d.ts +60 -5
- package/lib/{weixin-route-CWMRa36W.js → weixin-route-7BtOiy4X.js} +1 -1
- package/package.json +23 -17
package/lib/invariant.d.ts
CHANGED
|
@@ -20,5 +20,9 @@ export declare function verifyToolConsistency(manifestPath: string, registeredTo
|
|
|
20
20
|
* v1.33:`logbook` 并入 `trajectory`(10),随后新增 **专属工具 `acc-diag`**(默认对所有
|
|
21
21
|
* CCC 隐藏,只有声明 `exclusiveTools` 的 CCC 可见)⇒ 11。**条件可见不改变"注册"这一事实**:
|
|
22
22
|
* 本常量与清单都列它(与 im-bridge 同规格)。
|
|
23
|
+
*
|
|
24
|
+
* v1.51(**D104**):新增 **`diagram`**(标签源码 → 进程内光栅化成 PNG;**缺省关**,
|
|
25
|
+
* 关时连 `ctx.tools.register` 都不调用)⇒ **12**。同规格:开关关着**不影响这里列它** ——
|
|
26
|
+
* 本常量描述的是"插件**具备**的工具面",不是"此刻注册了几个"。
|
|
23
27
|
*/
|
|
24
|
-
export declare const REGISTERED_TOOLS: readonly ["container_fs", "container_trajectory", "dashboard", "container_git", "msm", "praxis", "handyman", "localstore", "container_admin", "im-bridge", "acc-diag"];
|
|
28
|
+
export declare const REGISTERED_TOOLS: readonly ["container_fs", "container_trajectory", "dashboard", "container_git", "msm", "praxis", "handyman", "localstore", "container_admin", "im-bridge", "acc-diag", "diagram"];
|
package/lib/invariant.js
CHANGED
|
@@ -41,6 +41,10 @@ function verifyToolConsistency(manifestPath, registeredTools) {
|
|
|
41
41
|
* v1.33:`logbook` 并入 `trajectory`(10),随后新增 **专属工具 `acc-diag`**(默认对所有
|
|
42
42
|
* CCC 隐藏,只有声明 `exclusiveTools` 的 CCC 可见)⇒ 11。**条件可见不改变"注册"这一事实**:
|
|
43
43
|
* 本常量与清单都列它(与 im-bridge 同规格)。
|
|
44
|
+
*
|
|
45
|
+
* v1.51(**D104**):新增 **`diagram`**(标签源码 → 进程内光栅化成 PNG;**缺省关**,
|
|
46
|
+
* 关时连 `ctx.tools.register` 都不调用)⇒ **12**。同规格:开关关着**不影响这里列它** ——
|
|
47
|
+
* 本常量描述的是"插件**具备**的工具面",不是"此刻注册了几个"。
|
|
44
48
|
*/
|
|
45
49
|
const REGISTERED_TOOLS = [
|
|
46
50
|
"container_fs",
|
|
@@ -53,7 +57,8 @@ const REGISTERED_TOOLS = [
|
|
|
53
57
|
"localstore",
|
|
54
58
|
"container_admin",
|
|
55
59
|
"im-bridge",
|
|
56
|
-
"acc-diag"
|
|
60
|
+
"acc-diag",
|
|
61
|
+
"diagram"
|
|
57
62
|
];
|
|
58
63
|
//#endregion
|
|
59
64
|
export { REGISTERED_TOOLS, verifyToolConsistency };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as cccRootForCwd } from "./ccc-roots-
|
|
1
|
+
import { r as cccRootForCwd } from "./ccc-roots-DtiMVRPo.js";
|
|
2
2
|
import { basename, dirname, join } from "node:path";
|
|
3
3
|
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, writeFileSync } from "node:fs";
|
|
4
4
|
//#region src/time.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as __exportAll } from "./rolldown-runtime-
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
2
|
import { o as hostSettings } from "./access-CNccNtgf.js";
|
|
3
3
|
//#region src/ports.ts
|
|
4
4
|
/**
|
|
@@ -80,6 +80,7 @@ function defaultSimpleSettings() {
|
|
|
80
80
|
publicAskEnabled: false,
|
|
81
81
|
croEnabled: true,
|
|
82
82
|
unattendedEnabled: false,
|
|
83
|
+
diagramEnabled: false,
|
|
83
84
|
humanChannel: defaultHumanChannelSettings()
|
|
84
85
|
};
|
|
85
86
|
}
|
|
@@ -178,6 +179,7 @@ function simpleSettingsFromConfig(config) {
|
|
|
178
179
|
publicAskEnabled: unwrapVolatile(config.publicAskEnabled) ?? d.publicAskEnabled,
|
|
179
180
|
croEnabled: unwrapVolatile(config.croEnabled) ?? d.croEnabled,
|
|
180
181
|
unattendedEnabled: unwrapVolatile(config.unattendedEnabled) ?? d.unattendedEnabled,
|
|
182
|
+
diagramEnabled: unwrapVolatile(config.diagramEnabled) ?? config.diagram?.enabled ?? d.diagramEnabled,
|
|
181
183
|
humanChannel: humanChannelSettingsFromConfig(config.humanChannel)
|
|
182
184
|
};
|
|
183
185
|
}
|
|
@@ -69,6 +69,10 @@ interface SimpleConfigFragment {
|
|
|
69
69
|
enabled?: boolean;
|
|
70
70
|
httpPort?: number;
|
|
71
71
|
};
|
|
72
|
+
/** diagram(实验性 demo;2026-09-29 owner 具名令 D104):标签源码 → 进程内出图(不借浏览器) */
|
|
73
|
+
diagram?: {
|
|
74
|
+
enabled?: boolean;
|
|
75
|
+
};
|
|
72
76
|
/** human-channel(人机信道;**机器级**;2026-09-26 owner 定案):账号 / 订阅表 / 主控 / 出站白名单 */
|
|
73
77
|
humanChannel?: HumanChannelConfigFragment;
|
|
74
78
|
gatewayEnabled?: PanelBoolean;
|
|
@@ -80,6 +84,7 @@ interface SimpleConfigFragment {
|
|
|
80
84
|
publicAskEnabled?: PanelBoolean;
|
|
81
85
|
croEnabled?: PanelBoolean;
|
|
82
86
|
unattendedEnabled?: PanelBoolean;
|
|
87
|
+
diagramEnabled?: PanelBoolean;
|
|
83
88
|
}
|
|
84
89
|
/**
|
|
85
90
|
* 设置面板命名空间 = **profile 条目 id**(v0.1.7 起;与旧 `settings.yaml` 段名逐字相同)。
|
|
@@ -121,6 +126,15 @@ interface SerenitySimpleSettings {
|
|
|
121
126
|
* —— 原"任何自排唤醒都排除"会让本机制永远够不着靠续接绳活着的维护会话;改窄后
|
|
122
127
|
* **自排绳不再排除**,绳退化为**长周期保险丝**)。设计全文见 S142 的 **D77**。 */
|
|
123
128
|
unattendedEnabled: boolean;
|
|
129
|
+
/** **diagram 工具总开关**(2026-09-29 owner 具名令 **D104**;**缺省关**)。
|
|
130
|
+
*
|
|
131
|
+
* 开启后:ACC 注册 `diagram` 工具 —— agent **直接给一段标签格式源码**,进程内
|
|
132
|
+
* `parseDsl → renderDsl(SVG + 四项体检)→ resvg-wasm 光栅化(内置字体)→ PNG`,
|
|
133
|
+
* 产物落 CCC `_tmp/diagram/` 且**图片块进对话**(**不借浏览器、不截图**)。
|
|
134
|
+
* **缺省关**:owner 口中的"demo 功能" ⇒ 关时**不注册**(工具不进模型工具清单:
|
|
135
|
+
* 零 token、不会被误调),同 `skiff`/`acp` 的"未开启零资源占用"口径。
|
|
136
|
+
* 依赖面:随包分发 3.8 MB 内置字体(`assets/diagram/`,wasm 对系统字体不可见)。 */
|
|
137
|
+
diagramEnabled: boolean;
|
|
124
138
|
/** **human-channel(人机信道)机器级配置**(2026-09-26 owner 定案;P0-1 立 schema + 投影)。
|
|
125
139
|
* 三张表(账号 / 订阅 / 主控)+ 出站白名单;**跨 CCC** ⇒ 归机器级,CCC 侧 `weixin.*` 随之退役
|
|
126
140
|
* (退役动作在 P0-2~P0-4;本版**只立机器级面**,旧面照旧)。缺省与归一规则见
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as __exportAll } from "./rolldown-runtime-
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
2
|
import { g as resolveInside, h as readUtf8, s as loadSerenityConfig, t as DEFAULT_SERENITY_CONFIG_PATHS } from "./ccc-DG4Oc7I1.js";
|
|
3
3
|
import { existsSync, statSync } from "node:fs";
|
|
4
4
|
//#region src/skiff-role.ts
|
package/lib/status.d.ts
CHANGED
|
@@ -4,10 +4,37 @@
|
|
|
4
4
|
* WebUI 停靠栏的数据源:ACC 版本 / CCC 根 / safe-mode 状态 / 黑名单 / keeper 阈值 / handyman 模型。
|
|
5
5
|
* setSafeMode 直接读写 .serenity-safe-on 标记(守卫实时读取,写即生效)。
|
|
6
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* 🔴 **布局无关档**:从**正在跑的那个入口脚本**反推宿主包根,读它的 `version`。
|
|
9
|
+
*
|
|
10
|
+
* 为什么必须补这一档(R↓:一处**静默失效**的实际缺陷;2026-09-28 docker bench 实测):
|
|
11
|
+
* 下面那条静态候选链({@link readDshVersion} 的 ②)是**猜安装位置**——`npm_config_prefix` /
|
|
12
|
+
* `APPDATA\npm` / `~/.npm-global`。一旦宿主装在**别处**(典型 = 容器镜像里的
|
|
13
|
+
* `/usr/local/lib/node_modules/@deepseek-ai/dsh`),**三个候选全不中** ⇒ 返回 `null`
|
|
14
|
+
* ⇒ `checkHostVersion(null)` 只给一条 **`required: false`** 的 issue ⇒ 报告 `ok` 仍为 `true`
|
|
15
|
+
* ⇒ **版本门完全静默**(bench 逐字:`host contract degraded (1 optional): host version unknown`)。
|
|
16
|
+
* ⚠️ 这类坏法**比"偶尔报警"更危险**:一条**永远为假**的判据看起来像"没报警 = 没问题"。
|
|
17
|
+
*
|
|
18
|
+
* 而"我们正跑在哪个宿主里"**本来就有直接证据**:`process.argv[1]`(= 启动本进程的那个脚本)。
|
|
19
|
+
* 三条判据要点(每条都对应一个实测过的坑):
|
|
20
|
+
* ① **先 `realpath`** —— 全局安装的 `dsh` 是**符号链接**(`/usr/local/bin/dsh` → `…/@deepseek-ai/dsh/lib/bin.js`),
|
|
21
|
+
* 而 Node 的 `argv[1]` **保留调用路径、不解析符号链接** ⇒ 不 realpath 就永远上溯不到包根。
|
|
22
|
+
* ② **核对包名**(`name === '@deepseek-ai/dsh'`)—— 否则在 vitest / npx 等入口下会误取**别人的**
|
|
23
|
+
* `package.json`(这是本档**唯一**的假阳性来源)。
|
|
24
|
+
* ③ **上溯有界**({@link MAX_ENTRY_ASCENT})—— 不设界的话,一个不在任何 dsh 包内的入口会一路爬到文件系统根。
|
|
25
|
+
*
|
|
26
|
+
* @param entry `process.argv[1]`(单测直接注入,无需替身)
|
|
27
|
+
*/
|
|
28
|
+
export declare function dshVersionFromEntry(entry: string | undefined): string | null;
|
|
7
29
|
/**
|
|
8
30
|
* 读取已安装 DSH CLI 版本;读不到返回 null。
|
|
9
|
-
*
|
|
10
|
-
*
|
|
31
|
+
*
|
|
32
|
+
* **两档,顺序有理由**:
|
|
33
|
+
* ① 🔴 **布局无关档**({@link dshVersionFromEntry})= **正在跑的就是它** —— 直接证据优先于"猜安装位置"。
|
|
34
|
+
* ② **静态候选链**(跨平台历史档,保留):`npm_config_prefix` / `APPDATA\npm` / `~/.npm-global`
|
|
35
|
+
* (Windows npm 全局装在 `%APPDATA%\npm`,见审计问题 13)。
|
|
36
|
+
* ⚠️ 保留它是因为**本进程不一定是 dsh CLI**(单测、嵌入式、将来别的宿主进程)——
|
|
37
|
+
* 那时"本机装了哪个版本"仍需一个答案,只是证据等级更低。
|
|
11
38
|
*/
|
|
12
39
|
export declare function readDshVersion(): string | null;
|
|
13
40
|
interface SerenityStatus {
|
package/lib/weixin-bridge.d.ts
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
import type { Context } from 'cordis';
|
|
20
20
|
import { type WeixinAccountCredential } from './weixin-route.js';
|
|
21
21
|
import { type WeixinMessage } from './weixin-api.js';
|
|
22
|
+
import { type SkiffRoleConfig } from './skiff-role.js';
|
|
22
23
|
/** 测试辅助:清空 typing_ticket 缓存(生产零调用) */
|
|
23
24
|
export declare function resetWeixinTypingCache(): void;
|
|
24
25
|
/**
|
|
@@ -36,6 +37,15 @@ export declare function manualOutputFallbackNeeded(input: {
|
|
|
36
37
|
sentThisTurn: boolean;
|
|
37
38
|
answer: string;
|
|
38
39
|
}): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* 路由解析结果:目标根 + 角色名 + **角色配置**(三者一起给,避免调用方再读一次 skiff.roles)。
|
|
42
|
+
* `null` 从本函数出去 ⇒ **不投递**(未命中已留痕 / 目标不存在已响亮出声)。
|
|
43
|
+
*/
|
|
44
|
+
interface ResolvedInboundTarget {
|
|
45
|
+
root: string;
|
|
46
|
+
roleName: string;
|
|
47
|
+
role: SkiffRoleConfig;
|
|
48
|
+
}
|
|
39
49
|
/**
|
|
40
50
|
* 处理单条微信消息:路由 → skiff 会话(固定 id 创建/延续)→ 提问 → 回复回写。
|
|
41
51
|
*
|
|
@@ -53,8 +63,38 @@ export declare function manualOutputFallbackNeeded(input: {
|
|
|
53
63
|
* `_tmp/weixin-inbound/<userhash>/` → question 注入「存在性 + 路径」(ACC 层只保证
|
|
54
64
|
* 可达性——"让会话知道文件的存在并可以拿到";识别/解析归角色 LLM 决策,不编排)。
|
|
55
65
|
* 降级不静默:下载失败 / 超 20MB → 注入说明进对话;typing 窗口覆盖下载(M7)。
|
|
66
|
+
*
|
|
67
|
+
* 🔴 **P0-3(2026-09-27):路由改由机器级订阅表决定**(本函数的 `root` 入参退为
|
|
68
|
+
* **回退目标**)。两档语义刻意分开(方案 §3.1):**未命中 ⇒ 不投递 + 留痕**(静默档);
|
|
69
|
+
* **目标不存在(CCC / 角色)⇒ 响亮报错**(`console.error` + 机器级留痕)。两者都
|
|
70
|
+
* **不是**"投给默认角色"。
|
|
56
71
|
*/
|
|
57
|
-
export declare function handleIncoming(ctx: Context, root: string, accountId: string, cred: WeixinAccountCredential, msg: Pick<WeixinMessage, 'from_user_id' | 'context_token' | 'item_list'
|
|
72
|
+
export declare function handleIncoming(ctx: Context, root: string, accountId: string, cred: WeixinAccountCredential, msg: Pick<WeixinMessage, 'from_user_id' | 'context_token' | 'item_list'>,
|
|
73
|
+
/**
|
|
74
|
+
* **机器级模式**(P0-3 A):目标已由 `handleMachineIncoming` 解析好(`root` 入参即该目标根)。
|
|
75
|
+
* 给了它 ⇒ 本函数**不再自行路由**,且**不看本 CCC 的 `weixin.enabled`** ——
|
|
76
|
+
* 起 poller 与路由都已上移机器级(目标 CCC 没配 weixin 段也照样收得到)。
|
|
77
|
+
* ⚠️ **行为开关仍归目标 CCC**(`hook` / `autoReplyWithLastMessage` / `fallbackOnNoSend`)
|
|
78
|
+
* —— 机器级只管"**谁收**"与"**投到哪**",不管"**怎么答**"。
|
|
79
|
+
*/
|
|
80
|
+
preset?: {
|
|
81
|
+
target: ResolvedInboundTarget;
|
|
82
|
+
}): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* **机器级 poller 的单条消息入口**(P0-3 A)。
|
|
85
|
+
*
|
|
86
|
+
* 与 `handleIncoming` 的唯一差别:**目标由机器级订阅表逐条解析,且没有 CCC 级回退**
|
|
87
|
+
* (方案 §3.1:机器级模式下**未命中 = 不投递**,不是"投给默认角色")。
|
|
88
|
+
* 解析出来后把**目标根**当 `root` 交给 `handleIncoming`(并带上 `preset` ⇒ 它不再自行路由、
|
|
89
|
+
* 也不看目标 CCC 的 `weixin.enabled`)。
|
|
90
|
+
*
|
|
91
|
+
* 🔴 为什么"起 poller"与"路由"必须同批(本件即 P0-2 的后半):机器级 poller 收到消息时
|
|
92
|
+
* **不知道它属于哪个 CCC** —— 那个答案是订阅表给的。没有订阅表 ⇒ **能收不能投**。
|
|
93
|
+
*
|
|
94
|
+
* 🔵 **导出供测试直接驱动**(与 `handleIncoming` 同款:它俩都是"单条消息的入口",
|
|
95
|
+
* 生产路径 `runAccountLoop` 只是循环壳)。
|
|
96
|
+
*/
|
|
97
|
+
export declare function handleMachineIncoming(ctx: Context, accountId: string, cred: WeixinAccountCredential, msg: Pick<WeixinMessage, 'from_user_id' | 'context_token' | 'item_list'>): Promise<void>;
|
|
58
98
|
/**
|
|
59
99
|
* 启动/重建某 CCC 的桥:读配置 → 对每个 enabled + 有凭据的账号启动轮询循环。
|
|
60
100
|
* 已存在(配置变化热重建)→ 先停旧循环再启动新的。
|
|
@@ -68,9 +108,19 @@ export declare function syncCccBridge(ctx: Context, root: string): void;
|
|
|
68
108
|
/** 停止某 CCC 的桥(移除账号/禁用时);同时释放它的账号归属 */
|
|
69
109
|
export declare function stopCccBridge(root: string): void;
|
|
70
110
|
/**
|
|
71
|
-
* 停止全部桥(插件 dispose
|
|
111
|
+
* 停止全部桥(插件 dispose):CCC 级 + 机器级
|
|
72
112
|
*/
|
|
73
113
|
export declare function stopAllBridges(): void;
|
|
114
|
+
/**
|
|
115
|
+
* 人机信道的**装配入口**(P0-3 A)—— 决定用哪种模式起 poller。
|
|
116
|
+
*
|
|
117
|
+
* 🔴 **模式由机器级账号表决定**(方案 §11.3 **Q5** 的过渡期语义):
|
|
118
|
+
* - 账号表**非空** ⇒ **机器级模式**:按账号起 poller;路由**只认订阅表**
|
|
119
|
+
* - 账号表**为空** ⇒ **回退模式**(今天的形态):按 CCC 起桥;路由**先查订阅表,未命中回退
|
|
120
|
+
* 到 CCC 级 routes** ⇒ **不打断在用的微信**
|
|
121
|
+
* ⚠️ 两种模式**互斥**(各自进入时先停掉另一种),否则同一个 bot 会被两处轮询。
|
|
122
|
+
*/
|
|
123
|
+
export declare function syncHumanChannel(ctx: Context): void;
|
|
74
124
|
/** 主动发送失败原因(稳定 code——入口层翻译成 HTTP 状态 + 可行动提示) */
|
|
75
125
|
type ProactiveSendErrorCode = 'BRIDGE_DISABLED' | 'NO_ACCOUNT' | 'ACCOUNT_NOT_FOUND' | 'ACCOUNT_NOT_BOUND' | 'SEND_FAILED';
|
|
76
126
|
interface ProactiveSendInput {
|
|
@@ -129,7 +179,11 @@ type WeixinAccountResolution = {
|
|
|
129
179
|
*/
|
|
130
180
|
export declare function resolveWeixinAccount(root: string, accountId?: string): WeixinAccountResolution;
|
|
131
181
|
export declare function sendProactiveText(input: ProactiveSendInput): Promise<ProactiveSendResult>;
|
|
132
|
-
/**
|
|
182
|
+
/**
|
|
183
|
+
* 桥状态快照(面板数据源):每 CCC → 每账号 → 轮询健康。
|
|
184
|
+
* 🔴 **P0-3 A 起多一行**:机器级 poller 以 `ccc: '<machine>'`(`MACHINE_SCOPE`)出现 ——
|
|
185
|
+
* 它**不属于任何 CCC**,故**不伪装成某个 CCC 的行**(面板按原样显示这个哨兵值即可)。
|
|
186
|
+
*/
|
|
133
187
|
export declare function weixinBridgeStatus(): Array<{
|
|
134
188
|
ccc: string;
|
|
135
189
|
accounts: Array<{
|
|
@@ -139,8 +193,9 @@ export declare function weixinBridgeStatus(): Array<{
|
|
|
139
193
|
}>;
|
|
140
194
|
}>;
|
|
141
195
|
/**
|
|
142
|
-
* 装配(index.ts
|
|
143
|
-
*
|
|
196
|
+
* 装配(index.ts 调用):**按机器级配置决定模式**(P0-3 A:`syncHumanChannel`),
|
|
197
|
+
* 并监听会话变化以重扫(新 CCC 出现即启动其桥;配置变化也可经此路径热重建)。
|
|
198
|
+
* 事件驱动(对齐 autotrajectory v1.26.15)。
|
|
144
199
|
*/
|
|
145
200
|
export declare function registerWeixinBridge(ctx: Context): void;
|
|
146
201
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as __exportAll } from "./rolldown-runtime-
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
2
|
import { s as loadSerenityConfig, t as DEFAULT_SERENITY_CONFIG_PATHS } from "./ccc-DG4Oc7I1.js";
|
|
3
3
|
import { join, resolve } from "node:path";
|
|
4
4
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shgroup/dsh-serenity-hooks",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "宁静号 ACC harness(Native Cordis 插件)——给 DeepSeek Harness 装一个「AI 工作区」:
|
|
3
|
+
"version": "1.51.0",
|
|
4
|
+
"description": "宁静号 ACC harness(Native Cordis 插件)——给 DeepSeek Harness 装一个「AI 工作区」:12 个工具(container_fs/container_trajectory/dashboard/container_git/msm/praxis/handyman/localstore/container_admin/im-bridge/acc-diag/diagram)+ 机械约束(安全模式/工作区围墙/密钥守卫/对外输出守卫)+ 工作日志与原地重建 + 网页登录入口/微信桥/子角色/对外问答页/trajectory 唤醒注册表。适配 DSH 0.1.7-rc.1。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -31,10 +31,16 @@
|
|
|
31
31
|
"assets/serenity-voyage.html",
|
|
32
32
|
"assets/serenity-voyage-preview.png",
|
|
33
33
|
"assets/README.md",
|
|
34
|
+
"assets/diagram/DroidSansFallbackFull.ttf",
|
|
35
|
+
"assets/diagram/LICENSE-Apache-2.0.txt",
|
|
36
|
+
"assets/diagram/PROVENANCE.md",
|
|
34
37
|
"cordis.patch.yml",
|
|
35
38
|
"dsh.plugin.json",
|
|
36
39
|
"README.md"
|
|
37
40
|
],
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@resvg/resvg-wasm": "2.6.2"
|
|
43
|
+
},
|
|
38
44
|
"scripts": {
|
|
39
45
|
"typecheck": "tsc --noEmit",
|
|
40
46
|
"test": "vitest run",
|
|
@@ -54,21 +60,21 @@
|
|
|
54
60
|
},
|
|
55
61
|
"peerDependencies": {
|
|
56
62
|
"@deepseek-ai/cordis": "^4.0.4",
|
|
57
|
-
"@deepseek-ai/dsh-agent": "^0.1.7-rc.1",
|
|
58
|
-
"@deepseek-ai/dsh-agent-loop": "^0.1.7-rc.1",
|
|
59
|
-
"@deepseek-ai/dsh-agent-preset-registry": "^0.1.7-rc.1",
|
|
60
|
-
"@deepseek-ai/dsh-compaction": "^0.1.7-rc.1",
|
|
61
|
-
"@deepseek-ai/dsh-host-webserver": "^0.1.7-rc.1",
|
|
62
|
-
"@deepseek-ai/dsh-llm": "^0.1.7-rc.1",
|
|
63
|
-
"@deepseek-ai/dsh-session": "^0.1.7-rc.1",
|
|
64
|
-
"@deepseek-ai/dsh-session-title": "^0.1.7-rc.1",
|
|
65
|
-
"@deepseek-ai/dsh-shell": "^0.1.7-rc.1",
|
|
66
|
-
"@deepseek-ai/dsh-shell-env": "^0.1.7-rc.1",
|
|
67
|
-
"@deepseek-ai/dsh-skill": "^0.1.7-rc.1",
|
|
68
|
-
"@deepseek-ai/dsh-system-prompt": "^0.1.7-rc.1",
|
|
69
|
-
"@deepseek-ai/dsh-tools": "^0.1.7-rc.1",
|
|
70
|
-
"@deepseek-ai/dsh-web": "^0.1.7-rc.1",
|
|
71
|
-
"@deepseek-ai/dsh-web-fetch-http": "^0.1.7-rc.1",
|
|
63
|
+
"@deepseek-ai/dsh-agent": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
64
|
+
"@deepseek-ai/dsh-agent-loop": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
65
|
+
"@deepseek-ai/dsh-agent-preset-registry": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
66
|
+
"@deepseek-ai/dsh-compaction": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
67
|
+
"@deepseek-ai/dsh-host-webserver": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
68
|
+
"@deepseek-ai/dsh-llm": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
69
|
+
"@deepseek-ai/dsh-session": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
70
|
+
"@deepseek-ai/dsh-session-title": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
71
|
+
"@deepseek-ai/dsh-shell": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
72
|
+
"@deepseek-ai/dsh-shell-env": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
73
|
+
"@deepseek-ai/dsh-skill": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
74
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
75
|
+
"@deepseek-ai/dsh-tools": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
76
|
+
"@deepseek-ai/dsh-web": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
77
|
+
"@deepseek-ai/dsh-web-fetch-http": "^0.1.7-rc.1 || ^0.2.0-rc.1",
|
|
72
78
|
"@deepseek-ai/schemastery": "^3.18.4",
|
|
73
79
|
"cordis": "^4.0.0-rc.7"
|
|
74
80
|
},
|