@shgroup/dsh-serenity-hooks 1.70.0 → 1.72.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 +21 -19
- package/dsh.plugin.json +2 -2
- package/lib/{ccc-C33QWoWZ.js → ccc-Dkoa2oW3.js} +16 -2
- package/lib/{ccc-roots-RzasspMr.js → ccc-roots-jZYR2GVE.js} +16 -10
- package/lib/client.js +2 -2
- package/lib/{gateway-auth.d.ts → gateway/auth.d.ts} +3 -3
- package/lib/{gateway-dsh-auth.d.ts → gateway/dsh-auth.d.ts} +1 -1
- package/lib/{gateway-proxy.d.ts → gateway/proxy.d.ts} +3 -3
- package/lib/{gateway.d.ts → gateway/server.d.ts} +5 -5
- package/lib/{totp.d.ts → gateway/totp.d.ts} +1 -1
- package/lib/{output-guard.d.ts → guard/filter.d.ts} +2 -2
- package/lib/{output-guard-seam.d.ts → guard/seam.d.ts} +2 -2
- package/lib/{weixin-api-BrRcPiQs.js → ilink-DEpmE3yi.js} +6 -6
- package/lib/im/accounts.d.ts +105 -0
- package/lib/{weixin-bridge.d.ts → im/bridge.d.ts} +16 -9
- package/lib/{im-bridge.d.ts → im/channels.d.ts} +3 -3
- package/lib/{weixin-send-endpoint.d.ts → im/endpoint.d.ts} +2 -2
- package/lib/{weixin-output-guard.d.ts → im/guard.d.ts} +1 -1
- package/lib/{weixin-hook.d.ts → im/hook.d.ts} +1 -1
- package/lib/{weixin-api.d.ts → im/ilink.d.ts} +3 -3
- package/lib/{human-channel.d.ts → im/inbound.d.ts} +4 -4
- package/lib/{weixin-route.d.ts → im/route.d.ts} +52 -11
- package/lib/{weixin-send-api.d.ts → im/send.d.ts} +3 -3
- package/lib/im/weixin-account.d.ts +45 -0
- package/lib/{im-weixin.d.ts → im/weixin-channel.d.ts} +2 -2
- package/lib/index.js +1008 -815
- package/lib/invariant.js +2 -2
- package/lib/{ccc-roots.d.ts → kernel/ccc-roots.d.ts} +10 -10
- package/lib/{ccc.d.ts → kernel/ccc.d.ts} +114 -44
- package/lib/{config-ops.d.ts → kernel/config.d.ts} +2 -2
- package/lib/kernel/constants.d.ts +20 -0
- package/lib/{invariant.d.ts → kernel/invariant.d.ts} +1 -1
- package/lib/{json.d.ts → kernel/json.d.ts} +1 -1
- package/lib/{message-source.d.ts → kernel/message-source.d.ts} +1 -1
- package/lib/{ports.d.ts → kernel/ports.d.ts} +1 -1
- package/lib/{time.d.ts → kernel/time.d.ts} +1 -1
- package/lib/message-source-kVoNK0C5.js +432 -0
- package/lib/{deepseek-vision-patch.d.ts → patches/deepseek-vision.d.ts} +3 -3
- package/lib/{opencode-provider.d.ts → patches/opencode-provider.d.ts} +1 -1
- package/lib/{web-fetch-provider.d.ts → patches/web-fetch.d.ts} +1 -1
- package/lib/{message-source-DhA1dVBi.js → profile-DyMJ_bfr.js} +277 -463
- package/lib/role/skiff/config.d.ts +79 -0
- package/lib/role/skiff/core.d.ts +155 -0
- package/lib/{skiff-debug.d.ts → role/skiff/debug.d.ts} +4 -4
- package/lib/role/skiff/profile.d.ts +115 -0
- package/lib/role/skiff/registry.d.ts +41 -0
- package/lib/{cheap-worker-ops.d.ts → role/worker/core.d.ts} +1 -1
- package/lib/{agent-idle.d.ts → role/worker/idle.d.ts} +2 -2
- package/lib/{cheap-worker-preset-inherit.d.ts → role/worker/preset.d.ts} +2 -2
- package/lib/{weixin-route-D_DvgPqy.js → route-f7JlinIt.js} +132 -47
- package/lib/seams/context.d.ts +3 -3
- package/lib/seams/guards.d.ts +18 -12
- package/lib/seams/keeper.d.ts +1 -1
- package/lib/seams/system-prompt.d.ts +3 -1
- package/lib/settings-lt1i3OZv.js +403 -0
- package/lib/{skills-discovery.d.ts → skills/discovery.d.ts} +1 -1
- package/lib/skills/resource-index.d.ts +2 -2
- package/lib/{face-host.d.ts → surface/faces.d.ts} +4 -4
- package/lib/{api.d.ts → surface/http.d.ts} +2 -2
- package/lib/{container-status.d.ts → surface/observation.d.ts} +16 -16
- package/lib/{settings-section.d.ts → surface/settings.d.ts} +1 -1
- package/lib/{status.d.ts → surface/status.d.ts} +2 -2
- package/lib/{usage-stats.d.ts → surface/usage.d.ts} +4 -4
- package/lib/{voyage-page.d.ts → surface/voyage/page.d.ts} +2 -2
- package/lib/{voyage-vocab.d.ts → surface/voyage/vocab.d.ts} +1 -1
- package/lib/tools/cognitive-trajectory.d.ts +2 -2
- package/lib/tools/{acc-diag.d.ts → diag/index.d.ts} +2 -2
- package/lib/{diag-ops.d.ts → tools/diag/service.d.ts} +7 -7
- package/lib/tools/eap.d.ts +1 -1
- package/lib/tools/fs/index.d.ts +7 -0
- package/lib/{fs-ops.d.ts → tools/fs/service.d.ts} +2 -2
- package/lib/tools/git/index.d.ts +4 -0
- package/lib/{git-ops.d.ts → tools/git/service.d.ts} +2 -2
- package/lib/tools/im-bridge.d.ts +2 -2
- package/lib/tools/{kit.d.ts → kit/index.d.ts} +1 -1
- package/lib/{kit-ops.d.ts → tools/kit/service.d.ts} +6 -6
- package/lib/tools/{localstore.d.ts → localstore/index.d.ts} +1 -1
- package/lib/{localstore-ops.d.ts → tools/localstore/service.d.ts} +2 -2
- package/lib/tools/{msm.d.ts → msm/index.d.ts} +1 -1
- package/lib/{msm-ops.d.ts → tools/msm/service.d.ts} +2 -2
- package/lib/tools/skiff-admin.d.ts +19 -14
- package/lib/{cognitive-trajectory-assistant.d.ts → trajectory/assistant.d.ts} +2 -2
- package/lib/{cognitive-trajectory-bound.d.ts → trajectory/bound.d.ts} +2 -2
- package/lib/{session-cleanup.d.ts → trajectory/cleanup.d.ts} +1 -1
- package/lib/{cognitive-trajectory-ops.d.ts → trajectory/core.d.ts} +55 -25
- package/lib/{live-sessions.d.ts → trajectory/live.d.ts} +1 -1
- package/lib/trajectory/prompt.d.ts +101 -0
- package/lib/{rebuild.d.ts → trajectory/rebuild.d.ts} +1 -1
- package/lib/{cognitive-trajectory-skills.d.ts → trajectory/skills.d.ts} +1 -1
- package/lib/{clock-runtime.d.ts → wake/clock.d.ts} +3 -3
- package/lib/{cro-guide.d.ts → wake/cro-guide.d.ts} +1 -1
- package/lib/{cro-log.d.ts → wake/cro-log.d.ts} +3 -3
- package/lib/{cro-turns.d.ts → wake/cro-turns.d.ts} +5 -5
- package/lib/{cro.d.ts → wake/cro.d.ts} +6 -6
- package/lib/{wake-registry.d.ts → wake/registry.d.ts} +2 -2
- package/lib/{wake-scheduler.d.ts → wake/scheduler.d.ts} +3 -3
- package/package.json +2 -2
- package/lib/constants.d.ts +0 -6
- package/lib/settings-section-0TPYWug9.js +0 -238
- package/lib/skiff-core.d.ts +0 -145
- package/lib/skiff-registry.d.ts +0 -26
- package/lib/skiff-role-cwxAt0gE.js +0 -203
- package/lib/skiff-role.d.ts +0 -89
- package/lib/tools/cc-fs.d.ts +0 -7
- package/lib/tools/git.d.ts +0 -4
package/lib/invariant.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { dirname, resolve } from "node:path";
|
|
2
2
|
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
-
//#region src/invariant.ts
|
|
3
|
+
//#region src/kernel/invariant.ts
|
|
4
4
|
/**
|
|
5
|
-
* invariant.ts — 包级不变量伴生(dsh-my-rsi creating-a-plugin 规范)
|
|
5
|
+
* kernel/invariant.ts — 包级不变量伴生(dsh-my-rsi creating-a-plugin 规范)
|
|
6
6
|
*
|
|
7
7
|
* 检查:dsh.plugin.json 的 contributes.tools 与代码实际注册的工具一致。
|
|
8
8
|
* 挂载时 plugin-local 会校验清单;本不变量让仓库内 `verify-package-invariants`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ccc-roots.ts — CCC 根解析的**唯一判断层**(L1 单根解析 + L2 全量枚举)
|
|
2
|
+
* kernel/ccc-roots.ts — CCC 根解析的**唯一判断层**(L1 单根解析 + L2 全量枚举)
|
|
3
3
|
*
|
|
4
4
|
* 为什么存在(C2「CCC 发现面归一」,S142 2026-09-15 Q5 裁决):
|
|
5
5
|
* 「这个会话/路径属于哪个 CCC 根」(L1)与「本机有哪些 CCC」(L2)这两层判断此前被
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
* 调用方只问本模块,不再各写各的上溯 + 兜底。
|
|
9
9
|
*
|
|
10
10
|
* 分层(唯一真相源边界,**不要**把下层搬进本模块):
|
|
11
|
-
* - **L0 原语** `findSerenityRoot(cwd)`(`ccc.ts:16`)——**仍是唯一** L0 实现,本模块从它 import。
|
|
11
|
+
* - **L0 原语** `findSerenityRoot(cwd)`(`kernel/ccc.ts:16`)——**仍是唯一** L0 实现,本模块从它 import。
|
|
12
12
|
* - **L1 单根解析** —— 本模块:{@link agentCwdFor}(agent/exec → cwd)与
|
|
13
13
|
* {@link cccRootForCwd}/{@link cccRootForExec}(cwd → 根)。
|
|
14
14
|
* - **L2 全量枚举** —— 本模块:{@link listCccs}。
|
|
15
|
-
* - **L3 CCC 名解析** `readCccName`(`ccc.ts`)——不在本模块,也不与 `skills-discovery` 的
|
|
15
|
+
* - **L3 CCC 名解析** `readCccName`(`kernel/ccc.ts`)——不在本模块,也不与 `skills-discovery` 的
|
|
16
16
|
* 第二份实现合并(那是另一条开放项)。
|
|
17
17
|
*
|
|
18
18
|
* 不新增持久状态(Q5 裁决:**不新增"本机 CCC 名单"**、不扫盘、不写路径假设)——
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* ── 🔴 2026-09-25 I2 收敛(约束文档 §2.7 违反清单,L1 违反之一)────────────────
|
|
22
22
|
* **本模块的 `ctx` 参数类型从 `Context` 改为 `unknown`** —— 消除本文件唯一的 `W2` 接触。
|
|
23
23
|
*
|
|
24
|
-
* **判据(与 `live
|
|
24
|
+
* **判据(与 `trajectory/live.ts` 同款,但本文件要多过一道):** 约束文档 §2.7 原记本处
|
|
25
25
|
* `Context` 是"**实测真被用到**"(因它调 `hostService(ctx,…)`/`hostSessions(ctx)`)。
|
|
26
26
|
* 🔴 **该判断把"透传"与"解引用"混为一谈了** —— 实测本文件 `ctx` 的**唯一**去向是
|
|
27
27
|
* **原样透传**给两个 L0 取数口(签名均为 `ctx: unknown`),**零处** `ctx.xxx` 属性访问。
|
|
@@ -58,14 +58,14 @@ export interface ExecOrAgent {
|
|
|
58
58
|
*/
|
|
59
59
|
export declare function agentCwdFor(execOrAgent: ExecOrAgent): string;
|
|
60
60
|
/**
|
|
61
|
-
* cwd → CCC 根(L0 原语的唯一调用形态;`ccc.ts` 之外不要再各写一遍)。
|
|
61
|
+
* cwd → CCC 根(L0 原语的唯一调用形态;`kernel/ccc.ts` 之外不要再各写一遍)。
|
|
62
62
|
* @param cwd 起始路径(目录或文件;文件会靠 `dirname` 上溯)
|
|
63
63
|
* @returns CCC 根绝对路径;不在任何 CCC 内 → `null`
|
|
64
64
|
*/
|
|
65
65
|
export declare function cccRootForCwd(cwd: string): string | null;
|
|
66
66
|
/**
|
|
67
67
|
* 工具/缝入口的根解析(L1 标准形态):`agentCwdFor(...)` 再上溯。
|
|
68
|
-
* @returns CCC 根;解析不到 → `null`(**不**回落假根——"回落进程 cwd 当根"是 `rebuild.ts`
|
|
68
|
+
* @returns CCC 根;解析不到 → `null`(**不**回落假根——"回落进程 cwd 当根"是 `trajectory/rebuild.ts`
|
|
69
69
|
* 独有的另一条语义,见该处注释)
|
|
70
70
|
*/
|
|
71
71
|
export declare function cccRootForExec(execOrAgent: ExecOrAgent): string | null;
|
|
@@ -83,9 +83,9 @@ export interface CccEntry {
|
|
|
83
83
|
/** 目录名(展示用) */
|
|
84
84
|
name: string;
|
|
85
85
|
/**
|
|
86
|
-
* 该 CCC 的 skiff
|
|
87
|
-
* ⚠️ **仅 `withRoles: true` 时非空**;缺省 `false` ⇒ 恒为 `[]`
|
|
88
|
-
* `
|
|
86
|
+
* 该 CCC 的 skiff 列表(**轨迹编码**;新模型里编码即身份)。
|
|
87
|
+
* ⚠️ **仅 `withRoles: true` 时非空**;缺省 `false` ⇒ 恒为 `[]` 且**不扫
|
|
88
|
+
* `AGENT_SESSIONS/`**(唤醒调度器每 tick 都要枚举,不该为 skiff 付 IO)。
|
|
89
89
|
*/
|
|
90
90
|
roles: string[];
|
|
91
91
|
}
|
|
@@ -95,7 +95,7 @@ export interface ListCccsOptions {
|
|
|
95
95
|
* 传 `undefined`/`''` 表示没有默认根。
|
|
96
96
|
*/
|
|
97
97
|
defaultRoot?: string;
|
|
98
|
-
/**
|
|
98
|
+
/** 是否实时扫各 CCC 的 skiff 轨迹(缺省 false)。 */
|
|
99
99
|
withRoles?: boolean;
|
|
100
100
|
}
|
|
101
101
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ccc.ts — CCC 纯逻辑层(零 DSH 依赖,可独立单测)
|
|
2
|
+
* kernel/ccc.ts — CCC 纯逻辑层(零 DSH 依赖,可独立单测)
|
|
3
3
|
*
|
|
4
4
|
* 职责:CCC 根检测(P1)、git 检测(P2)、serenity.json 配置读取(.opencode 规范位置,.dsh 回退)、
|
|
5
5
|
* 路径守卫(P3 语义)、安全模式黑名单匹配。
|
|
@@ -86,11 +86,16 @@ interface SerenityConfig {
|
|
|
86
86
|
/** 重启自动恢复最近激活的宁静号会话(session-start 时,根会话且无自身标记 → 回退最近 use 的标记) */
|
|
87
87
|
autoRestoreSession?: boolean;
|
|
88
88
|
};
|
|
89
|
-
/**
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
89
|
+
/**
|
|
90
|
+
* 🔴 **`skiff` 段已于 2026-10-19 退役**(owner 重做令)。
|
|
91
|
+
*
|
|
92
|
+
* skiff 不再是 `serenity.json` 里的一组角色定义,而是**带 `skiff.json` 的认知轨迹**
|
|
93
|
+
* (约束面住在轨迹目录里)。⇒ 本段**不再被读取**:存量配置里残留的 `skiff.roles` ⇒
|
|
94
|
+
* **静默忽略**(schemastery 非 strict,不报错;也不会被误当成"没有 skiff")。
|
|
95
|
+
*
|
|
96
|
+
* 迁移路径 = 把 `skiff.roles.<name>` 的内容原样搬进对应轨迹目录的 `skiff.json`
|
|
97
|
+
* (判据与步骤见 `role/skiff/profile.ts` 头注释与 `docs/skiff-as-trajectory-redesign.md` §5)。
|
|
98
|
+
*/
|
|
94
99
|
/**
|
|
95
100
|
* 认知轨迹族配置(D58,S142 2026-09-13;2026-10-18 更名 `cognitiveTrajectory`)。
|
|
96
101
|
*
|
|
@@ -131,6 +136,12 @@ interface SerenityConfig {
|
|
|
131
136
|
* 未配置或 enabled=false → 该 CCC 桥完全不启动(零资源占用)。
|
|
132
137
|
*/
|
|
133
138
|
weixin?: WeixinSettings;
|
|
139
|
+
/**
|
|
140
|
+
* 🔴 **统一 IM 配置(2026-10-19,owner 定向)**:微信与飞书**只是账号实现不同**,
|
|
141
|
+
* 配置整合到这一段。存在且 `accounts` 是数组 ⇒ 优先于旧 `weixin` 段。
|
|
142
|
+
* 见 `ImSettings` 的注释(含"为什么判据不是'段存在'"的坑)。
|
|
143
|
+
*/
|
|
144
|
+
im?: ImSettings;
|
|
134
145
|
/**
|
|
135
146
|
* 专属工具声明(v1.33,S142 §32.11):**ACC 注册但默认对所有 CCC 隐藏**的工具,
|
|
136
147
|
* 只有在自己这里声明的 CCC 可见(例:`["acc-diag"]` = ACC 负责人的运行态诊断)。
|
|
@@ -140,6 +151,73 @@ interface SerenityConfig {
|
|
|
140
151
|
*/
|
|
141
152
|
exclusiveTools?: string[];
|
|
142
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* 🔴 **统一 IM 配置(2026-10-19 owner 定向:「飞书和微信一样,只不过是 account 方实现不同。
|
|
156
|
+
* 要整合到统一的配置中」)。**
|
|
157
|
+
*
|
|
158
|
+
* ## 为什么是"账号"这一层,不是"通道"这一层
|
|
159
|
+
*
|
|
160
|
+
* 微信与飞书的差别**只在账号侧**:怎么连、怎么收、怎么发。而它们的**身份、路由、会话**
|
|
161
|
+
* 从来就是通道无关的(`routes: user → 轨迹编码`;会话 id 由轨迹编码派生)。
|
|
162
|
+
* ⇒ 抽象点是 `account.channel`(这个字段本来就有,装配处也早写着"等第二个实现"),
|
|
163
|
+
* 不是新造一个平行的"通道接口"。
|
|
164
|
+
*
|
|
165
|
+
* ## 与旧 `weixin` 段的关系(向后兼容是硬要求)
|
|
166
|
+
*
|
|
167
|
+
* - `im` 段**存在且 `accounts` 是数组** ⇒ 用它;
|
|
168
|
+
* - 否则 ⇒ **回退读旧 `weixin` 段**(存量 CCC 零迁移,行为逐字不变)。
|
|
169
|
+
* - 旧段**不删不改**:回滚 = 删掉 `im` 段即可。
|
|
170
|
+
*
|
|
171
|
+
* 🔴 **为什么判据是「`accounts` 是数组」而不是「有没有 im 段」**:
|
|
172
|
+
* 本 CCC 的配置里**曾经**有过一个 `im` 段(退役的 ACP:`{channel:"acp", acp:{…}}`)。
|
|
173
|
+
* 若只判"段存在",那份残留会被当成新配置读 ⇒ **读到一个没有 accounts 的对象** ⇒
|
|
174
|
+
* 表现为"配置没生效"且**不报错**。⇒ 形状判据必须能区分这两种 `im`。
|
|
175
|
+
*/
|
|
176
|
+
export interface ImSettings {
|
|
177
|
+
/** 总开关(缺省 false——未开零资源占用) */
|
|
178
|
+
enabled?: boolean;
|
|
179
|
+
/** 账号表:**每条账号自带 `channel`**(`weixin` / `feishu`),凭据在 localstore */
|
|
180
|
+
accounts?: ImAccountConfig[];
|
|
181
|
+
/** 消息路由:**通道用户 id → 认知轨迹编码**(通道无关;`*` 通配兜底) */
|
|
182
|
+
routes?: ImRouteConfig[];
|
|
183
|
+
/** 用户别名表:`{ "<别名>": "<localstore 凭据键>" }` */
|
|
184
|
+
aliases?: Record<string, string>;
|
|
185
|
+
/** 消息记录 hook(相对 CCC 根的脚本路径) */
|
|
186
|
+
hook?: string;
|
|
187
|
+
/** 桥是否自动回发 agent 的最终文本(缺省 true;微信侧语义见旧注释) */
|
|
188
|
+
autoReplyWithLastMessage?: boolean;
|
|
189
|
+
/** 手动输出模式的兜底(缺省 false = 严格静默) */
|
|
190
|
+
fallbackOnNoSend?: boolean;
|
|
191
|
+
/** iLink 专属:bot_type 取码参数(飞书账号忽略它) */
|
|
192
|
+
botType?: string;
|
|
193
|
+
}
|
|
194
|
+
/** 统一账号配置:**`channel` 决定用哪个实现**;其余字段各实现自查 */
|
|
195
|
+
export interface ImAccountConfig {
|
|
196
|
+
/** 本地唯一键(如 wechat-1 / feishu-1) */
|
|
197
|
+
accountId: string;
|
|
198
|
+
/**
|
|
199
|
+
* 账号实现(缺省 `weixin`——旧配置平移到 `im` 段时不必补这个字段)。
|
|
200
|
+
* 未实现的 channel ⇒ **出声但不静默跳过**(装配处已有该分支)。
|
|
201
|
+
*/
|
|
202
|
+
channel?: string;
|
|
203
|
+
/** 展示名(可选) */
|
|
204
|
+
name?: string;
|
|
205
|
+
/** 该账号开关(缺省 true) */
|
|
206
|
+
enabled?: boolean;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* 统一路由配置:**通道用户 id → 认知轨迹编码**。
|
|
210
|
+
*
|
|
211
|
+
* 与旧 `WeixinRouteConfig` 语义完全相同(那是它的超集形态);保留别名仅为读侧兼容。
|
|
212
|
+
*/
|
|
213
|
+
export interface ImRouteConfig {
|
|
214
|
+
/** 通道用户 id(微信 `xxx@im.wechat` / 飞书 `open_id`);`*` = 通配兜底 */
|
|
215
|
+
user: string;
|
|
216
|
+
/** 目标认知轨迹编码 */
|
|
217
|
+
trajectory: string;
|
|
218
|
+
/** @deprecated 过渡别名(语义等同 `trajectory`) */
|
|
219
|
+
role?: string;
|
|
220
|
+
}
|
|
143
221
|
/**
|
|
144
222
|
* 微信桥配置(CCC 级;S142 用户拍板):
|
|
145
223
|
* - 结构/路由/开关在 .opencode/serenity.json(git 管可重建)
|
|
@@ -147,6 +225,9 @@ interface SerenityConfig {
|
|
|
147
225
|
* 扫码登录后插件自动写入(面板只显示"已绑定"),永不进 git 明文面
|
|
148
226
|
* - 路由 user → role:exact 匹配优先,通配 `*` 兜底;role 必须是该 CCC skiff.roles 之一
|
|
149
227
|
* - 多账号:accounts[] 每项 { accountId, name?, enabled }(本地唯一键,如 wechat-1)
|
|
228
|
+
*
|
|
229
|
+
* 🔴 2026-10-19:**本段已被统一 `im` 段取代**(见上方 `ImSettings`)。此处保留是因为
|
|
230
|
+
* 存量 CCC 的配置里写的就是它——读侧继续认,**不强制迁移**。
|
|
150
231
|
*/
|
|
151
232
|
export interface WeixinSettings {
|
|
152
233
|
/** 总开关(缺省 false——默认关,未开零资源占用) */
|
|
@@ -213,50 +294,39 @@ export interface WeixinAccountConfig {
|
|
|
213
294
|
/** 该账号轮询开关(缺省 true) */
|
|
214
295
|
enabled?: boolean;
|
|
215
296
|
}
|
|
216
|
-
/**
|
|
297
|
+
/**
|
|
298
|
+
* 微信桥路由配置:微信用户 → 该 CCC 的**认知轨迹编码**
|
|
299
|
+
*
|
|
300
|
+
* 🔴 2026-10-19(owner 重做令):「微信桥的路由表修改为 **user → 认知轨迹的映射**」。
|
|
301
|
+
* 旧形态指向 `skiff.roles` 里的**角色名**;新形态直接指向**轨迹编码**
|
|
302
|
+
* (= 目录名固定位置那一段;该轨迹目录里有 `skiff.json` 时它就是 skiff)。
|
|
303
|
+
*/
|
|
217
304
|
export interface WeixinRouteConfig {
|
|
218
305
|
/** 微信用户标识(from_user_id,形如 userA@im.wechat);`*` = 通配兜底 */
|
|
219
306
|
user: string;
|
|
220
|
-
/** 目标 skiff role 名(必须 ∈ 该 CCC skiff.roles;ACC 不绑定——用户自选) */
|
|
221
|
-
role: string;
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Skiff 角色配置(CCC 定义:全知全能轨迹的一个子集):
|
|
225
|
-
* 能力面 = tools(非 MSM 工具白名单)+ msms(MSM 白名单)双白名单,白名单外全隐藏;
|
|
226
|
-
* 轨迹纪律面 = trajectory 子集(session/keeper/rebuild 参与项,默认全关)。
|
|
227
|
-
* 实验性质:未配置任何角色时 Skiff 完全零影响(无监听、无 agent 创建)。
|
|
228
|
-
*/
|
|
229
|
-
export interface SkiffRoleConfig {
|
|
230
|
-
/** 角色模型(provider/model;CCC 直接指定,无白名单校验——用户拍板) */
|
|
231
|
-
model?: string;
|
|
232
307
|
/**
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
* - `persistent`:长期 skiff——绑定 trajectory(自动建/恢复 SESSION.md 工作台),
|
|
237
|
-
* 提示词**每轮动态重读文件**(改 `systemPromptFile` 即生效,无需重启)。
|
|
238
|
-
* 缺省(未写)= 隐式推断:调用方传入稳定 sessionId → persistent,否则 temporary。
|
|
308
|
+
* 目标**认知轨迹编码**(必须是该 CCC 内一条活跃轨迹的编码;ACC 不绑定——用户自选)。
|
|
309
|
+
* ⚠️ 存量配置里的 `role` 字段仍被读取作**过渡别名**(读侧 `routeTarget` 统一解析),
|
|
310
|
+
* 但**新写法是 `trajectory`**,且两者都给时 `trajectory` 优先。
|
|
239
311
|
*/
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
|
|
243
|
-
/** 非 MSM 工具白名单(独立):平台/ACC 工具名列表;缺省空 = 仅 MSM 通道 */
|
|
244
|
-
tools?: string[];
|
|
245
|
-
/** 认知轨迹纪律子集(缺省全 false = 完全独立,不参与 keeper/session/rebuild)
|
|
246
|
-
* 🔴 2026-10-18 更名:`trajectory` → **`cognitiveTrajectory`**(与顶层同名同义)。
|
|
247
|
-
* ⚠️ CCC 侧必须同批改(owner 令「CCC 自行处理」),否则该角色静默退化为全 false。 */
|
|
248
|
-
cognitiveTrajectory?: {
|
|
249
|
-
session?: boolean;
|
|
250
|
-
keeper?: boolean;
|
|
251
|
-
rebuild?: boolean;
|
|
252
|
-
};
|
|
253
|
-
/** 角色系统提示词(CCC 完整定义:人格/认知边界/回答风格) */
|
|
254
|
-
systemPrompt?: string;
|
|
255
|
-
/** 角色系统提示词文件(推荐:相对 CCC 根引用 md 文件——超长提示词在 JSON 内嵌不可读;
|
|
256
|
-
* 优先于 systemPrompt;文件缺失/逃逸 → resolveRoleSystemPrompt 抛错。
|
|
257
|
-
* persistent 型每轮重读(mtime 缓存),改文件即生效) */
|
|
258
|
-
systemPromptFile?: string;
|
|
312
|
+
trajectory: string;
|
|
313
|
+
/** @deprecated 过渡别名:语义已等同于 `trajectory`(见上)。新配置不要写它。 */
|
|
314
|
+
role?: string;
|
|
259
315
|
}
|
|
316
|
+
/**
|
|
317
|
+
* 🔴 **`SkiffRoleConfig` 已于 2026-10-19 退役**(owner 重做令)。
|
|
318
|
+
*
|
|
319
|
+
* 它的语义整体搬进**轨迹目录下的 `skiff.json`**,类型现在是
|
|
320
|
+
* `role/skiff/profile.ts` 的 `SkiffProfile`(在那里还多了 `code`/`dirName`/`path`
|
|
321
|
+
* 三个与轨迹身份相关的字段)。
|
|
322
|
+
*
|
|
323
|
+
* 退役理由(一句话):skiff 的约束面是**某一条轨迹的属性**,不是容器级配置表里的一个 entry。
|
|
324
|
+
* 放进 `serenity.json` 会让"这条轨迹是不是 skiff"分散在**两个文件**里,而 owner 要的是
|
|
325
|
+
* 一条判据(「目录下拥有 `skiff.json` 的认知轨迹自动是一个 skiff」)。
|
|
326
|
+
*
|
|
327
|
+
* ⚠️ 旧字段里 `kind: temporary|persistent` **整件无对应物**:它区分"有没有工作台",
|
|
328
|
+
* 而新模型里 skiff 恒等于一条轨迹 ⇒ 恒有 SESSION.md ⇒ 该区分没有指称对象(静默忽略)。
|
|
329
|
+
*/
|
|
260
330
|
/**
|
|
261
331
|
* 解析 cheap-worker 配置。
|
|
262
332
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* config
|
|
2
|
+
* kernel/config.ts — plugin 全局配置读写(结构化,`~/.dsh/serenity-hooks.json`)
|
|
3
3
|
*
|
|
4
4
|
* 归属原则(S142 用户拍板,v1.22):**plugin 是全局的,CCC 是具体的**——
|
|
5
5
|
* 账号密码/gateway 监听配置是 plugin 级能力,归 plugin 全局文件;
|
|
@@ -57,7 +57,7 @@ interface PersonaSettings {
|
|
|
57
57
|
/**
|
|
58
58
|
* 高级设定全量(~/.dsh/serenity-hooks.json 持久化形态;passHash 含 hash)。
|
|
59
59
|
* review P2-3:**rebuild 已从高级配置删除**——rebuild 开关/阈值归"简单配置"
|
|
60
|
-
* (settings.yaml 原生面板,见 settings
|
|
60
|
+
* (settings.yaml 原生面板,见 surface/settings.ts),运行时只读 readSimpleSettings();
|
|
61
61
|
* 旧高级 rebuild 字段是死双胞胎(/serenity/config PUT 回显但运行时从不读它)——
|
|
62
62
|
* 删除防误导(用户在高级面板改了却无效)。历史残留字段被 mergeWithDefaults 忽略(幂等安全)。
|
|
63
63
|
*/
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** 常量(纯模块,零 DSH 依赖) */
|
|
2
|
+
/**
|
|
3
|
+
* 包根 = 含**本包** `package.json` 的目录。
|
|
4
|
+
*
|
|
5
|
+
* 🔴 为什么不写 `join(here, '..')`:本模块自身的位置**随目录重构变化**
|
|
6
|
+
* (曾 `src/`,现 `src/kernel/`),而发布态是从打包入口 `lib/index.js` 反推 ——
|
|
7
|
+
* 两种布局的深度不同,写死层数**必然在其中一个布局下静默错位**。
|
|
8
|
+
* 实测代价:`src/` → `src/kernel/` 之后,`join(here,'..')` 指到 `src/`(无 package.json)
|
|
9
|
+
* ⇒ `ACC_VERSION` 落进 catch 分支变 `0.0.0`,**没有任何门禁报警**。
|
|
10
|
+
*
|
|
11
|
+
* ⇒ 判据改成**内容**(找带本包名的 package.json)而不是**层数**。
|
|
12
|
+
*
|
|
13
|
+
* @param start 起点目录(缺省 = 本模块所在目录;测试可注入)
|
|
14
|
+
*/
|
|
15
|
+
export declare function findPackageRoot(start?: string): string | null;
|
|
16
|
+
/**
|
|
17
|
+
* ACC 版本:自动从 package.json 读取(单一真相源,消除与 CHANGELOG 的漂移)。
|
|
18
|
+
* 发布时只需改 package.json 的 version。
|
|
19
|
+
*/
|
|
20
|
+
export declare const ACC_VERSION: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* message-source.ts — ACC 注入消息的来源标识(**单一真相源**,v1.47.0 / DSH 0.1.7-rc.1 适配)
|
|
2
|
+
* kernel/message-source.ts — ACC 注入消息的来源标识(**单一真相源**,v1.47.0 / DSH 0.1.7-rc.1 适配)
|
|
3
3
|
*
|
|
4
4
|
* **为什么有这个文件**:DSH 0.1.7-rc.1(session format v3→v4)把消息来源从
|
|
5
5
|
* 「`kind: 'plugin'` + `plugin` 字段」改成**每个生产者声明自己的 kind** ——
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ports.ts — ACC 对外面的**集中端口表**(C4 块 B,S142 2026-09-15)
|
|
2
|
+
* kernel/ports.ts — ACC 对外面的**集中端口表**(C4 块 B,S142 2026-09-15)
|
|
3
3
|
*
|
|
4
4
|
* 为什么存在(现状取证:`AGENT_SESSIONS/…/acc-c4c5-current-state.md` §③ 3.2-8):
|
|
5
5
|
* 端口此前**散在 4 处默认值**(`config-ops.defaultAdvancedSettings` / `settings-section` schema
|