@shgroup/dsh-serenity-hooks 1.29.2 → 1.30.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 +6 -4
- package/dsh.plugin.json +9 -12
- package/experiments/autopilot-trajectory/SKILL.md +10 -10
- package/lib/client.js +2 -2
- package/lib/fs-ops.d.ts +1 -1
- package/lib/git-ops.d.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1740 -2374
- package/lib/invariant.d.ts +1 -1
- package/lib/invariant.js +7 -10
- package/lib/kit-ops.d.ts +4 -4
- package/lib/localstore-ops.d.ts +3 -3
- package/lib/msm-ops.d.ts +7 -7
- package/lib/output-guard-seam.d.ts +1 -1
- package/lib/rebuild.d.ts +2 -1
- package/lib/seams/guards.d.ts +7 -7
- package/lib/seams/keeper.d.ts +1 -1
- package/lib/seams/system-prompt.d.ts +1 -1
- package/lib/session-bound-p9oR9dj9.js +725 -0
- package/lib/session-bound.d.ts +1 -1
- package/lib/session-ops.d.ts +1 -1
- package/lib/skiff-core.d.ts +1 -1
- package/lib/{skiff-debug-CBU6T2F_.js → skiff-debug-BA8CDeJl.js} +2 -2
- package/lib/{skiff-role-BTdBHyOQ.js → skiff-role-LW4tjF9L.js} +4 -4
- package/lib/skiff-role.d.ts +2 -2
- package/lib/tools/cc-fs.d.ts +1 -1
- package/lib/tools/container-admin.d.ts +17 -0
- package/lib/tools/git.d.ts +1 -1
- package/lib/tools/kit.d.ts +1 -1
- package/lib/tools/msm.d.ts +19 -1
- package/lib/tools/praxis.d.ts +14 -0
- package/lib/tools/skiff-admin.d.ts +4 -4
- package/lib/{weixin-route-DFkRf9ou.js → weixin-route-jA0qENOf.js} +5 -5
- package/package.json +1 -1
- package/lib/tools/rebuild.d.ts +0 -19
package/lib/session-bound.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* session-bound.ts — SESSION 绑定持久化(serenity/bound 会话事件)
|
|
3
3
|
*
|
|
4
4
|
* 目标(S142 用户拍板,方案 v1.0):让「dsh 会话(载体)↔ SESSION(宁静号轨迹)」
|
|
5
|
-
* 的绑定坚固——LLM 不能因智力因素(幻觉/理解偏差)在过程中或
|
|
5
|
+
* 的绑定坚固——LLM 不能因智力因素(幻觉/理解偏差)在过程中或 logbook rebuild 后
|
|
6
6
|
* 自行更换 SESSION。
|
|
7
7
|
*
|
|
8
8
|
* 机制(DSH 原生,零改 harness):
|
package/lib/session-ops.d.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* 保留 dsp S134 活跃会话机制(内存 Map + events 恢复,不落盘)——osp 同为内存 active-state。
|
|
11
11
|
*/
|
|
12
12
|
import type { JsonValue } from './json.js';
|
|
13
|
-
export type SessionAction = 'list' | 'show' | 'create' | 'use' | 'close' | 'health' | 'qa' | 'archive' | 'summary' | 'hook-develop-guide';
|
|
13
|
+
export type SessionAction = 'list' | 'show' | 'create' | 'use' | 'close' | 'health' | 'qa' | 'archive' | 'summary' | 'hook-develop-guide' | 'rebuild';
|
|
14
14
|
export declare const SESSION_ACTIONS: readonly SessionAction[];
|
|
15
15
|
/**
|
|
16
16
|
* 读取 Session 事件序列(v1.28.1 适配 0.1.2-rc.1 补齐):rc.1 起官方 Session 类
|
package/lib/skiff-core.d.ts
CHANGED
|
@@ -82,7 +82,7 @@ export interface SkiffMsmGate {
|
|
|
82
82
|
whitelist?: Set<string>;
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
|
-
*
|
|
85
|
+
* msm 工具的 Skiff 门控:非 skiff 会话恒放行;skiff 会话——
|
|
86
86
|
* exec 非白名单 MSM 拒绝(不列名单)、register/deregister 必拒、
|
|
87
87
|
* list 白名单过滤、check/guide/ccc-config 只读放行。
|
|
88
88
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
|
|
2
2
|
import { a as findSerenityRoot, f as readHandymanConfig } from "./ccc-CX48YNUL.js";
|
|
3
|
-
import { a as resolveRoleSystemPrompt, i as readSkiffRoles, n as buildSkiffBasePrompt, o as roleMsmWhitelist, r as isSkiffSessionId, u as trajectorySubset } from "./skiff-role-
|
|
3
|
+
import { a as resolveRoleSystemPrompt, i as readSkiffRoles, n as buildSkiffBasePrompt, o as roleMsmWhitelist, r as isSkiffSessionId, u as trajectorySubset } from "./skiff-role-LW4tjF9L.js";
|
|
4
4
|
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { basename, join } from "node:path";
|
|
6
6
|
import { createUserMessage } from "@deepseek-ai/dsh-llm";
|
|
@@ -503,7 +503,7 @@ function skiffTrajectoryEnabled(root, sessionId, key) {
|
|
|
503
503
|
return trajectorySubset(role)[key];
|
|
504
504
|
}
|
|
505
505
|
/**
|
|
506
|
-
*
|
|
506
|
+
* msm 工具的 Skiff 门控:非 skiff 会话恒放行;skiff 会话——
|
|
507
507
|
* exec 非白名单 MSM 拒绝(不列名单)、register/deregister 必拒、
|
|
508
508
|
* list 白名单过滤、check/guide/ccc-config 只读放行。
|
|
509
509
|
*/
|
|
@@ -64,14 +64,14 @@ function trajectorySubset(role) {
|
|
|
64
64
|
rebuild: role?.trajectory?.rebuild === true
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
|
-
/** 角色可用工具面(白名单并集):tools +
|
|
67
|
+
/** 角色可用工具面(白名单并集):tools + msm(msms 非空时作为 MSM 通道自动可用) */
|
|
68
68
|
function roleToolWhitelist(role) {
|
|
69
69
|
const out = /* @__PURE__ */ new Set();
|
|
70
70
|
for (const t of role?.tools ?? []) out.add(t);
|
|
71
|
-
if ((role?.msms?.length ?? 0) > 0) out.add("
|
|
71
|
+
if ((role?.msms?.length ?? 0) > 0) out.add("msm");
|
|
72
72
|
return out;
|
|
73
73
|
}
|
|
74
|
-
/** 角色允许的 MSM 白名单(
|
|
74
|
+
/** 角色允许的 MSM 白名单(msm 工具 exec 校验 / 过滤用;独立于 tools 白名单) */
|
|
75
75
|
function roleMsmWhitelist(role) {
|
|
76
76
|
return new Set(role?.msms ?? []);
|
|
77
77
|
}
|
|
@@ -113,7 +113,7 @@ function buildSkiffBasePrompt(roleName, role) {
|
|
|
113
113
|
`Role: ${roleName} (defined by this CCC)`,
|
|
114
114
|
"You interact with this CCC ONLY through the exposed surface below:"
|
|
115
115
|
];
|
|
116
|
-
if (msms.length > 0) lines.push(` MSMs: ${msms.join(", ")} (call
|
|
116
|
+
if (msms.length > 0) lines.push(` MSMs: ${msms.join(", ")} (call msm("<name>", ["<args>"]) ; pass inspect=true or "--help" as first arg for usage)`);
|
|
117
117
|
else lines.push(" MSMs: (none)");
|
|
118
118
|
lines.push(` Tools: ${tools.length > 0 ? tools.join(", ") : "(none)"}`);
|
|
119
119
|
lines.push("No other tools are available. Your capability boundary is this surface.");
|
package/lib/skiff-role.d.ts
CHANGED
|
@@ -26,9 +26,9 @@ export interface SkiffTrajectorySubset {
|
|
|
26
26
|
rebuild: boolean;
|
|
27
27
|
}
|
|
28
28
|
export declare function trajectorySubset(role: SkiffRoleConfig | undefined): SkiffTrajectorySubset;
|
|
29
|
-
/** 角色可用工具面(白名单并集):tools +
|
|
29
|
+
/** 角色可用工具面(白名单并集):tools + msm(msms 非空时作为 MSM 通道自动可用) */
|
|
30
30
|
export declare function roleToolWhitelist(role: SkiffRoleConfig | undefined): Set<string>;
|
|
31
|
-
/** 角色允许的 MSM 白名单(
|
|
31
|
+
/** 角色允许的 MSM 白名单(msm 工具 exec 校验 / 过滤用;独立于 tools 白名单) */
|
|
32
32
|
export declare function roleMsmWhitelist(role: SkiffRoleConfig | undefined): Set<string>;
|
|
33
33
|
/**
|
|
34
34
|
* 解析角色的系统提示词全文(v1.25.10,S142 用户:超长提示词 JSON 内嵌不可读):
|
package/lib/tools/cc-fs.d.ts
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* container-admin.ts — container_admin(v1.30:机务舱——容器管理面统一入口)
|
|
3
|
+
*
|
|
4
|
+
* 合并自:
|
|
5
|
+
* · skiff_admin(F4 Skiff 认知子集角色:guide/validate/apply/list)
|
|
6
|
+
* · acc_msm 管理面(register/deregister/check/guide/catalog/ccc-config)
|
|
7
|
+
* —— msm 工具只管执行+发现;一切「管理容器」的操作归本工具
|
|
8
|
+
*
|
|
9
|
+
* 语义(用户拍板"skiff_admin 及系列 admin 合并成 container_admin"):
|
|
10
|
+
* container = CCC(具体认知容器);admin = 管理操作。
|
|
11
|
+
* 类比 The Manifest(清单维护——工具注册表)+ Crew(角色管理)+ 机务(配置/手册)。
|
|
12
|
+
*
|
|
13
|
+
* 参数极简(LLM 直觉):domain(管理域)+ action(该域子命令)+ 少量业务参数。
|
|
14
|
+
*/
|
|
15
|
+
/** 管理域(container_admin 一级参数) */
|
|
16
|
+
export type AdminDomain = 'role' | 'msm' | 'config';
|
|
17
|
+
export declare const containerAdminTool: import("@deepseek-ai/dsh-tools").ToolDefinition;
|
package/lib/tools/git.d.ts
CHANGED
package/lib/tools/kit.d.ts
CHANGED
package/lib/tools/msm.d.ts
CHANGED
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* msm.ts —
|
|
2
|
+
* msm.ts — msm 工具(v1.30 重构:单入口执行,list/exec 合一)
|
|
3
|
+
*
|
|
4
|
+
* 设计(S142 用户拍板"msm 单入口同意 + 参数简易高效"):
|
|
5
|
+
* acc_msm(8 action enum)→ msm(3 参数:name + args + inspect)——
|
|
6
|
+
* 最高频工具参数极简:无 action 选择、无协议 flag 前置学习。
|
|
7
|
+
*
|
|
8
|
+
* LLM 直觉用法:
|
|
9
|
+
* msm("ssh-connect", ["status"]) — 执行已注册 MSM
|
|
10
|
+
* msm("ssh-connect") — 无参执行
|
|
11
|
+
* msm("ssh-connect", [], inspect=true) — 查该 MSM 用法/参数(不执行)
|
|
12
|
+
* msm("ssh") — 未精确命中 → 返回模糊候选(LLM 下轮选对)
|
|
13
|
+
* msm() — 返回精简分类目录(替代旧全量 list)
|
|
14
|
+
*
|
|
15
|
+
* 管理面(register/deregister/check/guide/catalog/ccc-config)已移入 container_admin。
|
|
16
|
+
* 底层 runMsmAsync/prepareExec 全复用;未命中候选为新增 findSuggestions。
|
|
3
17
|
*/
|
|
18
|
+
/** 精简目录(无参调用返回;替代全量 list 的巨输出)——按 skill 分组统计 + 顶部指引 */
|
|
19
|
+
export declare function buildMsmIndex(root: string): string;
|
|
20
|
+
/** 模糊候选:name/description 子串匹配(未精确命中时返回 top-K,供 LLM 下轮选对) */
|
|
21
|
+
export declare function suggestMsm(root: string, query: string, limit?: number): string;
|
|
4
22
|
export declare const msmTool: import("@deepseek-ai/dsh-tools").ToolDefinition;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* praxis.ts — praxis(可实践理论注入工具,v1.30 合并 eap/neat/cce)
|
|
3
|
+
*
|
|
4
|
+
* eap / neat / cce 三个知识工具合并为一个——它们都是「可实践理论」:
|
|
5
|
+
* 调用时把对应框架注入当前认知(指导输出质量 / 协作协议 / 连续性工程)。
|
|
6
|
+
* 名字:praxis(理论与实践的统一——理论注入实践,实践反哺理论)。
|
|
7
|
+
* Metaphor 映射:Engineering Drawings(图纸 = 可实践理论的编码,第 3 条隐喻)。
|
|
8
|
+
*
|
|
9
|
+
* section 参数渐进披露:不传 = 返回精简目录;传 = 返回对应框架全文/章节。
|
|
10
|
+
*/
|
|
11
|
+
export type PraxisSection = 'eap' | 'neat' | 'cce';
|
|
12
|
+
/** 框架清单(无参调用时返回的精简目录) */
|
|
13
|
+
export declare const PRAXIS_INDEX = "praxis \u2014 \u53EF\u5B9E\u8DF5\u7406\u8BBA\u6CE8\u5165\uFF08\u8BA4\u77E5\u6846\u67B6\uFF0C\u6309\u9700\u52A0\u8F7D\uFF09\n\u9009\u62E9\u6846\u67B6\uFF1Apraxis eap\uFF08\u8BA4\u77E5\u8D28\u91CF\u2014\u2014E\u2191/R\u2193/S\u2191 \u4E09\u53D8\u91CF + \u8F93\u51FA\u524D\u81EA\u68C0\uFF09\n praxis neat\uFF08Neat \u534F\u4F5C\u534F\u8BAE\u2014\u2014\u5C0F\u6B65\u5BF9\u9F50/\u663E\u5F0F\u51B3\u7B56/\u6587\u6863\u9A71\u52A8\uFF09\n praxis cce\uFF08\u8BA4\u77E5\u8FDE\u7EED\u6027\u5DE5\u7A0B\u2014\u2014\u5BB9\u5668 5 \u884C\u4E3A\u7EA6\u675F + H_op \u64CD\u4F5C\u71B5\uFF09\n\u65E0\u53C2\u8FD4\u56DE\u672C\u76EE\u5F55\uFF1B\u8BE6\u60C5\u4EE5\u5BF9\u5E94\u6846\u67B6\u539F\u6587\u4E3A\u51C6\uFF08\u5355\u4E00\u771F\u76F8\u6E90\uFF09\u3002\n";
|
|
14
|
+
export declare const praxisTool: import("@deepseek-ai/dsh-tools").ToolDefinition;
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* skiff-admin.ts —
|
|
2
|
+
* skiff-admin.ts — Skiff 角色逻辑层(v1.30:skiff_admin 工具已并入 container_admin role 域)
|
|
3
3
|
*
|
|
4
4
|
* 教 CCC 如何定义 Skiff 角色(仿 session 工具 hook-develop-guide 的 SEP 教学模式,
|
|
5
5
|
* 用户拍板 2026-08-28:guide 定义教程 / validate 配置校验 / list 角色摘要)。
|
|
6
6
|
*
|
|
7
|
-
* 归属:ACC
|
|
7
|
+
* 归属:ACC 机制(教会 + 校验),角色内容仍归 CCC 配置(.opencode/serenity.json skiff.roles)。
|
|
8
|
+
* 公开入口 = container_admin(domain: role → guide/validate/apply/list);本文件保留纯逻辑。
|
|
8
9
|
*/
|
|
9
10
|
import type { JsonValue } from '../json.js';
|
|
10
11
|
/** Skiff 定义教程(核心):概念 / schema / 认知 MSM 写法 / 双白名单 / 轨迹纪律 / 示例角色 */
|
|
11
|
-
export declare const SKIFF_GUIDE = "\u2550\u2550\u2550 Skiff Definition Guide (F4, experimental) \u2550\u2550\u2550\n\nSkiff = \u5B81\u9759\u53F7\u653E\u51FA\u7684\u72EC\u7ACB\u5C0F\u8247\u2014\u2014\u5B8C\u6574 trajectory\uFF08\u5728\u5B81\u9759\u53F7\u5185\u5168\u77E5\u5168\u80FD\uFF09\u7684**\u4EFB\u610F\u5B50\u96C6\u89D2\u8272**\u3002\n\u7531\u672C CCC\uFF08.opencode/serenity.json skiff.roles\uFF09\u5B9A\u4E49\uFF1A\u80FD\u529B\u9762\uFF08\u53CC\u767D\u540D\u5355\uFF09+ \u8F68\u8FF9\u7EAA\u5F8B\u5B50\u96C6 + \u7CFB\u7EDF\u63D0\u793A\u8BCD\u3002\ndsp \u53EA\u63D0\u4F9B\u673A\u5236\uFF08\u53CC\u767D\u540D\u5355\u5F3A\u5236 + \u57FA\u7840\u63D0\u793A\u8BCD + \u8C03\u8BD5\u95EE\u7B54\u9875\uFF09\uFF1B\u89D2\u8272\u5185\u5BB9\u5B8C\u5168\u7531 CCC \u53D1\u6325\u3002\n\n\u2500\u2500 \u89D2\u8272\u914D\u7F6E schema \u2500\u2500\n { \"skiff\": { \"roles\": {\n \"<role-name>\": {\n \"model\": \"provider/model\", // \u89D2\u8272\u6A21\u578B\uFF08CCC \u76F4\u63A5\u6307\u5B9A\uFF0C\u65E0\u767D\u540D\u5355\u6821\u9A8C\uFF1B\u7F3A\u7701\u56DE\u9000 handyman.defaultModel\uFF09\n \"msms\": [\"msm-a\", \"msm-b\"], // MSM \u767D\u540D\u5355\uFF08\u72EC\u7ACB\uFF09\
|
|
12
|
+
export declare const SKIFF_GUIDE = "\u2550\u2550\u2550 Skiff Definition Guide (F4, experimental) \u2550\u2550\u2550\n\nSkiff = \u5B81\u9759\u53F7\u653E\u51FA\u7684\u72EC\u7ACB\u5C0F\u8247\u2014\u2014\u5B8C\u6574 trajectory\uFF08\u5728\u5B81\u9759\u53F7\u5185\u5168\u77E5\u5168\u80FD\uFF09\u7684**\u4EFB\u610F\u5B50\u96C6\u89D2\u8272**\u3002\n\u7531\u672C CCC\uFF08.opencode/serenity.json skiff.roles\uFF09\u5B9A\u4E49\uFF1A\u80FD\u529B\u9762\uFF08\u53CC\u767D\u540D\u5355\uFF09+ \u8F68\u8FF9\u7EAA\u5F8B\u5B50\u96C6 + \u7CFB\u7EDF\u63D0\u793A\u8BCD\u3002\ndsp \u53EA\u63D0\u4F9B\u673A\u5236\uFF08\u53CC\u767D\u540D\u5355\u5F3A\u5236 + \u57FA\u7840\u63D0\u793A\u8BCD + \u8C03\u8BD5\u95EE\u7B54\u9875\uFF09\uFF1B\u89D2\u8272\u5185\u5BB9\u5B8C\u5168\u7531 CCC \u53D1\u6325\u3002\n\n\u2500\u2500 \u89D2\u8272\u914D\u7F6E schema \u2500\u2500\n { \"skiff\": { \"roles\": {\n \"<role-name>\": {\n \"model\": \"provider/model\", // \u89D2\u8272\u6A21\u578B\uFF08CCC \u76F4\u63A5\u6307\u5B9A\uFF0C\u65E0\u767D\u540D\u5355\u6821\u9A8C\uFF1B\u7F3A\u7701\u56DE\u9000 handyman.defaultModel\uFF09\n \"msms\": [\"msm-a\", \"msm-b\"], // MSM \u767D\u540D\u5355\uFF08\u72EC\u7ACB\uFF09\uFF1Amsm \u5DE5\u5177\u53EA\u80FD\u6267\u884C\u8FD9\u4E9B\uFF1Bregister/deregister \u5FC5\u62D2\n \"tools\": [\"read\",\"grep\",\"glob\",...], // \u975E MSM \u5DE5\u5177\u767D\u540D\u5355\uFF08\u72EC\u7ACB\uFF09\uFF1A\u767D\u540D\u5355\u5916\u5DE5\u5177\u4E00\u5F8B\u4E0D\u53EF\u7528\uFF08guard \u5F3A\u5236\uFF09\n \"trajectory\": { \"session\": false, \"keeper\": false, \"rebuild\": false }, // \u8F68\u8FF9\u7EAA\u5F8B\u5B50\u96C6\uFF08\u7F3A\u7701\u5168\u5173 = \u5B8C\u5168\u72EC\u7ACB\uFF09\n // \u89D2\u8272\u4EBA\u683C/\u8BA4\u77E5\u8FB9\u754C/\u98CE\u683C\uFF08CCC \u5B8C\u6574\u5B9A\u4E49\uFF1Bdsp \u53EA\u7ED9\u57FA\u7840\u63D0\u793A\u8BCD\uFF09\n \"systemPromptFile\": \".opencode/skiff/<role>.md\" // \u2605 \u63A8\u8350\uFF1A\u5F15\u7528 md \u6587\u4EF6\uFF08\u76F8\u5BF9 CCC \u6839\uFF1B\u8D85\u957F\u63D0\u793A\u8BCD\u5728 JSON \u5185\u5D4C\u4E0D\u53EF\u8BFB\uFF09\n // \"systemPrompt\": \"...\" // \u517C\u5BB9\uFF1A\u5185\u5D4C\u5B57\u7B26\u4E32\u4ECD\u53EF\u7528\uFF1B\u4E24\u8005\u90FD\u8BBE\u65F6 systemPromptFile \u4F18\u5148\n }\n } } }\n\n\u2500\u2500 \u53CC\u767D\u540D\u5355\u8BED\u4E49\uFF08\u5168\u6309\u767D\u540D\u5355\u66B4\u9732\uFF0C\u767D\u540D\u5355\u5916\u5168\u9690\u85CF\uFF09\u2500\u2500\n - tools \u7A7A + msms \u975E\u7A7A = \u7EAF MSM \u89D2\u8272\uFF08\u8BA4\u77E5\u95EE\u7B54\u5178\u578B\u5F62\u6001\uFF09\n - msms \u975E\u7A7A \u2192 msm \u5DE5\u5177\u81EA\u52A8\u53EF\u7528\uFF08MSM \u901A\u9053\uFF09\n - \u767D\u540D\u5355\u5916\u5DE5\u5177\u5373\u4F7F DSH \u672A\u6765\u65B0\u589E\u4E5F\u81EA\u52A8\u88AB\u6321\uFF08guard \u6309\u89D2\u8272\u5224\u5B9A\uFF0C\u4E0D\u679A\u4E3E\u5DE5\u5177\u540D\u2014\u2014\u5B8C\u5907\u6027\uFF09\n\n\u2500\u2500 \u8BA4\u77E5 MSM \u5199\u6CD5\uFF08\u8BFB\u77E5\u8BC6 / \u64CD\u4F5C\u80FD\u529B\uFF09\u2500\u2500\n - \u8BFB\u77E5\u8BC6\uFF1A\u811A\u672C\u8BFB CCC \u5185\u6587\u4EF6\uFF08SERENITY_ROOT env \u6CE8\u5165\uFF09\u2192 \u8F93\u51FA\u7B54\u6848/\u6458\u8981\uFF08\u5982 cognitive-qa\uFF09\n - \u64CD\u4F5C\u80FD\u529B\uFF1A\u811A\u672C\u8C03\u7528\u65E2\u6709\u5BB6\u5EAD\u5DE5\u5177/\u670D\u52A1\uFF08SSH/API/\u6587\u4EF6\u64CD\u4F5C\uFF09\u2014\u2014\u89D2\u8272\u80FD\u529B\u4E0A\u9650 = \u767D\u540D\u5355 MSM \u7684\u5B9E\u9645\u884C\u4E3A\n - \u4F8B\uFF1Acognitive-qa\uFF08\u8BFB docs/references \u56DE\u7B54\uFF09\u3001review-scan\uFF08\u8BFB\u4EE3\u7801\u51FA\u5BA1\u67E5\u610F\u89C1\uFF09\u3001review-fix\uFF08\u5199\u4FEE\u590D\uFF09\n - \u6CE8\u610F\uFF1AMSM \u5728\u811A\u672C\u5C42\u6267\u884C\uFF08bun\uFF09\uFF0C\u6587\u4EF6\u8BBF\u95EE\u4E0D\u53D7 agent \u5DE5\u5177\u9762\u7EA6\u675F\u2014\u2014\"\u53EA\u8BFB\"\u8BED\u4E49\u9760 CCC \u81EA\u5199 MSM \u81EA\u89C9\n\n\u2500\u2500 \u8F68\u8FF9\u7EAA\u5F8B\u5B50\u96C6\uFF08trajectory\uFF09\u2500\u2500\n - session/keeper/rebuild \u9ED8\u8BA4 false\uFF1ASkiff \u5B8C\u5168\u72EC\u7ACB\uFF08\u4E0D\u5EFA SESSION.md\u3001\u65E0 keeper \u63D0\u9192\u3001\u65E0 rebuild \u538B\u529B\u68C0\u6D4B\uFF09\n - \u5F00\u542F\u67D0\u9879 = \u8BE5\u89D2\u8272\u53C2\u4E0E\u5BF9\u5E94\u8F68\u8FF9\u673A\u5236\uFF08\u5982 keeper=true \u8BA1\u5206\u63D0\u9192\u6309\u89D2\u8272\u751F\u6548\uFF09\n\n\u2500\u2500 \u793A\u4F8B\u89D2\u8272 \u2500\u2500\n qa-readonly: { \"msms\": [\"cognitive-qa\"], \"tools\": [], \"trajectory\": {} }\n \u2192 \u8BA4\u77E5\u95EE\u7B54\uFF08\u4EC5 MSM \u901A\u9053\uFF0C\u65E0\u76F4\u63A5\u5DE5\u5177\uFF0C\u5B8C\u5168\u72EC\u7ACB\uFF09\n code-review: { \"msms\": [\"review-scan\",\"review-fix\"], \"tools\": [\"read\",\"grep\",\"glob\",\"write\",\"edit\"], \"trajectory\": { \"keeper\": true } }\n \u2192 \u6709\u64CD\u4F5C\u80FD\u529B\uFF08\u53EF\u5199\u4FEE\u590D\uFF09\uFF0C\u53C2\u4E0E keeper \u8F68\u8FF9\u673A\u5236\n\n\u2500\u2500 \u8FD0\u884C \u2500\u2500\n \u8C03\u8BD5\uFF1A\u8BBE\u7F6E\u9762\u677F\u300CSerenity\u300D\u9875 Skiff \u533A\u5757\u5F00\u542F \u2192 http://127.0.0.1:<debugPort> \u95EE\u7B54\u9875\u5B9E\u6D4B\n ACP \u7A0B\u5E8F\u5316\u9762\uFF08v1.26.0\uFF09\uFF1A\u8BBE\u7F6E\u9762\u677F\u300CACP\u300D\u533A\u5757\u5F00\u542F \u2192 HTTP JSON-RPC \u7AEF\u70B9\uFF08\u9ED8\u8BA4 3100\uFF09\u2014\u2014\n POST / {jsonrpc, id, method, params}\n session/new {ccc, role, sessionId?} \u2192 \u521B\u5EFA/\u5EF6\u7EED\u4F1A\u8BDD\uFF08sessionId \u53EF\u9009=\u8FDB\u7A0B\u5185\u8FFD\u95EE\uFF09\n session/prompt {sessionId, question} \u2192 {answer, trajectory}\n session/cancel / session/close / session/list / request_permission\uFF08\u6052 allow\uFF09\n \u542F\u505C = \u4EBA\u5DE5\uFF08\u8BBE\u7F6E\u9762\u677F\u5F00\u5173\uFF0C\u4E0D\u968F\u63D2\u4EF6\u52A0\u8F7D\u81EA\u52A8\u542F\u52A8\uFF09\uFF1B\u672A\u5F00\u542F\u96F6\u8D44\u6E90\u5360\u7528\n \u751F\u6548\u673A\u5236\uFF1A\u89D2\u8272\u914D\u7F6E**\u5B9E\u65F6\u8BFB\u53D6**\uFF08\u6539 .opencode/serenity.json \u2192 \u5237\u65B0\u8C03\u8BD5\u9875\u5373\u751F\u6548\uFF09\uFF1B\n \u6539\u914D\u7F6E\u540E\u7528 container_admin role apply \u505A\u663E\u5F0F\u6821\u9A8C + \u5E94\u7528\u786E\u8BA4\uFF08\u7ED1\u5B9A CCC + \u89D2\u8272\u6E05\u5355\uFF09\n \u4F1A\u8BDD\u8FFD\u95EE\uFF08v1.25.10\uFF09\uFF1A\u8C03\u8BD5\u9875\u6301\u6709\u5F53\u524D\u4F1A\u8BDD\uFF0C\u8FFD\u95EE\u81EA\u52A8\u7EED\u63A5\uFF08\u540C\u4F1A\u8BDD\u4E0A\u4E0B\u6587\u5EF6\u7EED\uFF09\uFF1B\n \u300C\u65B0\u5BF9\u8BDD\u300D\u6309\u94AE\u5F00\u65B0\u4F1A\u8BDD\uFF1B\u8FDB\u7A0B\u91CD\u542F\u540E\u65E7\u4F1A\u8BDD\u4E0D\u53EF\u7EED\uFF08WebUI \u4ECD\u53EF\u89C1\u5386\u53F2\uFF09\n \u6CE8\u610F\uFF1Askill \u52A0\u8F7D\u5BF9 skiff **\u6052\u53EF\u7528**\uFF08\u4E0D\u8BBE\u767D\u540D\u5355\u2014\u2014\u8BFB\u77E5\u8BC6\u9762\uFF0C\u65E0\u5199\u80FD\u529B\uFF09";
|
|
12
13
|
/** 校验当前 CCC 的 skiff 配置:roles schema 合法 / msms 均已注册 / model ∈ handyman.models / systemPrompt 非空 */
|
|
13
14
|
export declare function validateSkiffConfig(root: string): JsonValue;
|
|
14
15
|
/** 列出当前 CCC 已定义角色(名 / 模型 / msms / tools / 轨迹纪律摘要) */
|
|
@@ -22,4 +23,3 @@ export declare function listSkiffRoles(root: string): JsonValue;
|
|
|
22
23
|
* ③ 合法 → 应用确认:绑定 CCC + 角色清单 + 说明(调试页刷新即生效)
|
|
23
24
|
*/
|
|
24
25
|
export declare function applySkiffConfig(root: string): JsonValue;
|
|
25
|
-
export declare const skiffAdminTool: import("@deepseek-ai/dsh-tools").ToolDefinition;
|
|
@@ -14,7 +14,7 @@ import { createHash } from "node:crypto";
|
|
|
14
14
|
* - 配置:.opencode/serenity.json `localstore.gitTrack`: "allow"(可提交)| "deny"(禁提交)
|
|
15
15
|
* - **缺省 deny(没配就是不提交)**;且 deny 的保证**不依赖 dsh 运行**——
|
|
16
16
|
* 写入时自动确保 .gitignore 含 localstore.json(物理保证:即使 dsh 不在、
|
|
17
|
-
* 用户手动 git commit 也不会误提交),
|
|
17
|
+
* 用户手动 git commit 也不会误提交),container_git 检查为第二道防线(拒绝 + 提示)
|
|
18
18
|
* - allow:放行(文件可提交,用户自行管理 .gitignore)
|
|
19
19
|
*
|
|
20
20
|
* 存储结构(JSON 顶层分节):
|
|
@@ -65,8 +65,8 @@ function ensureLocalstoreGitignored(root) {
|
|
|
65
65
|
return { status: "appended" };
|
|
66
66
|
}
|
|
67
67
|
/**
|
|
68
|
-
*
|
|
69
|
-
* 调用方(
|
|
68
|
+
* container_git 联动检查(第二道防线):文件存在 && deny && .gitignore 未覆盖 → 不通过。
|
|
69
|
+
* 调用方(container_git commit)据此拒绝提交;status 可输出 warning。
|
|
70
70
|
*/
|
|
71
71
|
function checkLocalstoreGitCompliance(root) {
|
|
72
72
|
if (!existsSync(localstorePath(root))) return { ok: true };
|
|
@@ -182,7 +182,7 @@ function docText(root) {
|
|
|
182
182
|
"## Git commit policy",
|
|
183
183
|
"- Config: .opencode/serenity.json `localstore.gitTrack`: `\"allow\"` (may commit) | `\"deny\"` (must not commit; .dsh fallback)",
|
|
184
184
|
"- **Default deny (unset = not committed)**; when deny, writes automatically ensure .gitignore contains localstore.json",
|
|
185
|
-
" (physical guarantee, independent of dsh runtime);
|
|
185
|
+
" (physical guarantee, independent of dsh runtime); container_git commit checks and refuses",
|
|
186
186
|
"- To commit: set `\"localstore\": { \"gitTrack\": \"allow\" }` and remove localstore.json from .gitignore",
|
|
187
187
|
"",
|
|
188
188
|
"## Format (JSON top-level sections)",
|
|
@@ -213,7 +213,7 @@ function docText(root) {
|
|
|
213
213
|
"## Security boundary",
|
|
214
214
|
"- list/show return only key names for credentials, never values",
|
|
215
215
|
"- Credential values should be used internally by the agent; never write them into conversation or logs",
|
|
216
|
-
"- Default deny: the file is not committed to git (.gitignore physical guarantee +
|
|
216
|
+
"- Default deny: the file is not committed to git (.gitignore physical guarantee + container_git check fallback)",
|
|
217
217
|
""
|
|
218
218
|
].join("\n");
|
|
219
219
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shgroup/dsh-serenity-hooks",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.30.0",
|
|
4
4
|
"description": "宁静号 ACC harness — Native Cordis 插件(DeepSeek Harness 运行时)。真实 DSH 工具注册(cc_fs/session/acc_msm 等 9 工具)+ 拦截缝机械约束(safe-mode/路径守卫/会话落盘)+ 系统提示词注入(ACC/CCE/Constraints/SKILL/Session 五块)。适配 DSH 公开版(deepseek-ai/deepseek-harness 0.1.0-rc)。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
package/lib/tools/rebuild.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* rebuild.ts — session_rebuild 工具定义(轨迹跟踪器,v1.22.4 定稿:复用旧会话 + 完全清空重来)
|
|
3
|
-
*
|
|
4
|
-
* LLM 主动触发清空重建(用户决策:keeper 超阈值提示 [TRAJECTORY],不自动执行——防误清空)。
|
|
5
|
-
* v1.22.4 定稿语义(用户明确):**复用当前 dsh 会话(同一 id),turn 结束时 surface
|
|
6
|
-
* 完全清空重建**——锚点消息「继续 {宁静号 SESSION 名} 的工作」;SESSION.md 是持久轨迹
|
|
7
|
-
* 永远原位,身份从 SESSION.md 自动延续。同一会话 id → 同工作区天然满足、无新/旧会话
|
|
8
|
-
* 之分、无需销毁/切换/归档。
|
|
9
|
-
* v1.22.5 增强(S142 用户需求):① turn-stopping 执行 replace 后 **steer 自动继续**
|
|
10
|
-
* (无需用户手工输入,模型自动读 SESSION.md 接续);② 锚点消息**保留 first-anchor
|
|
11
|
-
* 协议正文**(ACC 身份/EAP/协作协议,去 acknowledge 尾句——重建后直接干活)。
|
|
12
|
-
* 执行时机:工具只排队(queueRebuild),`agent/turn-stopping` 钩子执行真正 replace
|
|
13
|
-
* (turn 结束前所有 tool/result 已 append → 无孤儿;S141 INVALID_REQUEST 根治)。
|
|
14
|
-
* 服务端逻辑在 ../rebuild.ts(queueRebuild/performRebuild/registerRebuildTurnHook)。
|
|
15
|
-
*/
|
|
16
|
-
import { defineTool } from '@deepseek-ai/dsh-tools';
|
|
17
|
-
import type { Context } from 'cordis';
|
|
18
|
-
/** 创建 session_rebuild 工具(闭包捕获 ctx → 排队清空重建,turn 结束时同一会话原地重来并自动继续) */
|
|
19
|
-
export declare function createRebuildTool(ctx: Context): ReturnType<typeof defineTool>;
|