@shgroup/dsh-serenity-hooks 1.32.0 → 1.34.1

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.
Files changed (100) hide show
  1. package/README.md +12 -11
  2. package/dsh.plugin.json +5 -5
  3. package/lib/acp-core.d.ts +2 -22
  4. package/lib/acp-http.d.ts +8 -0
  5. package/lib/api.d.ts +12 -4
  6. package/lib/autopilot-chain.d.ts +76 -0
  7. package/lib/autopilot-core-DCRkiWEe.js +229 -0
  8. package/lib/autopilot-core.d.ts +132 -0
  9. package/lib/autopilot-ops.d.ts +48 -0
  10. package/lib/autopilot-trajectory-D9Znxo75.js +782 -0
  11. package/lib/autopilot-trajectory.d.ts +79 -83
  12. package/lib/{ccc-DAsSHsub.js → ccc-NlLr_sxy.js} +18 -2
  13. package/lib/ccc-roots-Bd_SjEs7.js +152 -0
  14. package/lib/ccc-roots.d.ts +105 -0
  15. package/lib/ccc.d.ts +23 -6
  16. package/lib/client.js +30 -10
  17. package/lib/clock-runtime.d.ts +197 -0
  18. package/lib/config-ops.d.ts +9 -14
  19. package/lib/constants.d.ts +0 -2
  20. package/lib/container-status.d.ts +183 -0
  21. package/lib/diag-ops.d.ts +76 -0
  22. package/lib/face-host.d.ts +110 -0
  23. package/lib/fs-ops.d.ts +3 -2
  24. package/lib/gateway-auth.d.ts +2 -5
  25. package/lib/gateway.d.ts +0 -34
  26. package/lib/git-ops.d.ts +3 -2
  27. package/lib/handyman-ops.d.ts +3 -2
  28. package/lib/handyman-preset-inherit.d.ts +2 -1
  29. package/lib/host/access.d.ts +8 -7
  30. package/lib/host/contract.d.ts +17 -6
  31. package/lib/host/type-contract.d.ts +1 -2
  32. package/lib/im-bridge.d.ts +6 -5
  33. package/lib/index.d.ts +1 -1
  34. package/lib/index.js +11053 -8305
  35. package/lib/invariant.d.ts +5 -16
  36. package/lib/invariant.js +8 -4
  37. package/lib/json.d.ts +1 -1
  38. package/lib/kit-ops.d.ts +11 -31
  39. package/lib/localstore-ops.d.ts +3 -17
  40. package/lib/msm-ops.d.ts +34 -52
  41. package/lib/opencode-provider.d.ts +4 -5
  42. package/lib/output-guard-seam.d.ts +1 -4
  43. package/lib/output-guard.d.ts +12 -3
  44. package/lib/ports.d.ts +59 -0
  45. package/lib/rebuild.d.ts +5 -4
  46. package/lib/seams/bootstrap.d.ts +4 -3
  47. package/lib/seams/compact.d.ts +2 -1
  48. package/lib/seams/context.d.ts +2 -4
  49. package/lib/seams/env.d.ts +2 -1
  50. package/lib/seams/guards.d.ts +22 -34
  51. package/lib/seams/keeper.d.ts +4 -4
  52. package/lib/seams/system-prompt.d.ts +1 -5
  53. package/lib/session-cleanup.d.ts +3 -2
  54. package/lib/{settings-section-Bm-xG-NR.js → settings-section-DTYZjwUs.js} +70 -15
  55. package/lib/settings-section.d.ts +14 -35
  56. package/lib/skiff-core.d.ts +5 -10
  57. package/lib/skiff-debug.d.ts +15 -21
  58. package/lib/skiff-registry-FTjoWQTQ.js +25 -0
  59. package/lib/skiff-registry.d.ts +2 -1
  60. package/lib/{skiff-role-BYvNnwv1.js → skiff-role-CEHL5cek.js} +1 -1
  61. package/lib/skiff-role.d.ts +2 -2
  62. package/lib/skills/opencode-scan.d.ts +3 -2
  63. package/lib/skills-discovery.d.ts +15 -2
  64. package/lib/status.d.ts +2 -1
  65. package/lib/tools/acc-diag.d.ts +22 -0
  66. package/lib/tools/cce.d.ts +1 -2
  67. package/lib/tools/container-admin.d.ts +7 -3
  68. package/lib/tools/eap.d.ts +2 -3
  69. package/lib/tools/handyman.d.ts +0 -29
  70. package/lib/tools/msm.d.ts +0 -4
  71. package/lib/tools/neat.d.ts +1 -2
  72. package/lib/tools/praxis.d.ts +0 -1
  73. package/lib/tools/skiff-admin.d.ts +2 -2
  74. package/lib/tools/{session.d.ts → trajectory.d.ts} +25 -17
  75. package/lib/totp.d.ts +0 -4
  76. package/lib/trajectory-assistant.d.ts +2 -1
  77. package/lib/trajectory-bound-Cax1p9ut.js +190 -0
  78. package/lib/{session-bound.d.ts → trajectory-bound.d.ts} +5 -6
  79. package/lib/trajectory-ops-mrXK0H0I.js +410 -0
  80. package/lib/{session-ops.d.ts → trajectory-ops.d.ts} +27 -36
  81. package/lib/trajectory-skills.d.ts +71 -0
  82. package/lib/wake-registry-CYxIb484.js +257 -0
  83. package/lib/wake-registry.d.ts +3 -11
  84. package/lib/wake-scheduler.d.ts +23 -20
  85. package/lib/web-fetch-provider.d.ts +0 -21
  86. package/lib/{weixin-api-PjEhmjlZ.js → weixin-api-CtFYm53S.js} +3 -9
  87. package/lib/weixin-api.d.ts +6 -37
  88. package/lib/weixin-bridge.d.ts +5 -24
  89. package/lib/weixin-hook.d.ts +6 -12
  90. package/lib/weixin-output-guard.d.ts +2 -1
  91. package/lib/{weixin-route-wWk4AIwV.js → weixin-route-B2ajFypI.js} +4 -5
  92. package/lib/weixin-route.d.ts +0 -2
  93. package/lib/weixin-send-api.d.ts +15 -6
  94. package/package.json +3 -5
  95. package/experiments/autopilot-trajectory/SKILL.md +0 -115
  96. package/experiments/autopilot-trajectory/scripts/autopilot-trajectory.ts +0 -522
  97. package/lib/session-bound-NHozeLFc.js +0 -822
  98. package/lib/skiff-debug-K2k1JnGj.js +0 -2867
  99. package/lib/tools/autopilot-trajectory.d.ts +0 -25
  100. package/lib/{session-cleanup-CMT4mHWt.js → session-cleanup-B6IHZgww.js} +1 -1
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { s as loadSerenityConfig, t as DEFAULT_SERENITY_CONFIG_PATHS } from "./ccc-DAsSHsub.js";
3
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { s as loadSerenityConfig, t as DEFAULT_SERENITY_CONFIG_PATHS } from "./ccc-NlLr_sxy.js";
4
3
  import { join, resolve } from "node:path";
4
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
5
5
  import { createHash } from "node:crypto";
6
6
  //#region src/localstore-ops.ts
7
7
  /**
@@ -102,7 +102,7 @@ function writeAll(root, data) {
102
102
  /** 读取命名空间全部条目:credential → 扁平;config → 分节(剔除 credentials 保留节) */
103
103
  function readStore(root, scope) {
104
104
  const all = readAll(root);
105
- if (scope === "credential") return all["credentials"] ?? {};
105
+ if (scope === "credential") return all[CREDENTIALS_SECTION] ?? {};
106
106
  const { [CREDENTIALS_SECTION]: _cred, ...rest } = all;
107
107
  return rest;
108
108
  }
@@ -162,7 +162,7 @@ function getEntry(root, scope, name) {
162
162
  const all = readAll(root);
163
163
  if (scope === "credential") {
164
164
  assertCredentialKey(name);
165
- return all["credentials"]?.[name] ?? null;
165
+ return all[CREDENTIALS_SECTION]?.[name] ?? null;
166
166
  }
167
167
  const { section, key } = assertConfigPath(name);
168
168
  return all[section]?.[key] ?? null;
@@ -296,7 +296,6 @@ function runLocalStore(root, args) {
296
296
  * 不绑定具体 role(用户自选路由目标)。
297
297
  */
298
298
  var weixin_route_exports = /* @__PURE__ */ __exportAll({
299
- WEIXIN_SESSION_PREFIX: () => WEIXIN_SESSION_PREFIX,
300
299
  clearWeixinCredential: () => clearWeixinCredential,
301
300
  extractWeixinMedia: () => extractWeixinMedia,
302
301
  extractWeixinText: () => extractWeixinText,
@@ -13,8 +13,6 @@
13
13
  */
14
14
  import { type WeixinSettings, type WeixinRouteConfig, type WeixinAccountConfig } from './ccc.js';
15
15
  import type { WeixinMediaRef, WeixinMessageItem } from './weixin-api.js';
16
- /** 微信桥 skiff 会话 id 前缀(seams 旁路判定;对外面纯净——守卫识别外部面) */
17
- export declare const WEIXIN_SESSION_PREFIX = "skiff-weixin-";
18
16
  /** 判定 sessionId 是否为微信桥会话(外部面——输出守卫/轨迹隐藏生效) */
19
17
  export declare function isWeixinSessionId(sessionId: string | undefined): boolean;
20
18
  /** 微信用户 → 固定会话 id(同用户长期同一会话,记忆延续;多用户天然隔离)。
@@ -22,23 +22,21 @@
22
22
  */
23
23
  import { type ServerResponse } from 'node:http';
24
24
  import type { Context } from 'cordis';
25
+ import { type FaceSpec } from './face-host.js';
25
26
  import { weixinSendEndpoint } from './weixin-send-endpoint.js';
26
27
  export { weixinSendEndpoint };
27
28
  /** 文本长度上限(微信侧单条消息实践上限;超限拒绝而非静默截断) */
28
29
  export declare const WEIXIN_SEND_MAX_TEXT = 4000;
29
- /** 当前入口地址(MSM 环境变量注入用;未启动 → null)——状态在叶模块(msm-ops 零依赖读取) */
30
- /** 测试辅助:读取当前监听端口(生产零调用) */
31
- export declare function weixinSendPort(): number | null;
32
30
  /** 来源必须是 loopback(127.0.0.1 / ::1 / IPv4-mapped) */
33
31
  export declare function isLoopbackAddress(address: string | undefined): boolean;
34
- export interface ParsedSendRequest {
32
+ interface ParsedSendRequest {
35
33
  ok: true;
36
34
  ccc: string;
37
35
  user: string;
38
36
  text: string;
39
37
  accountId?: string;
40
38
  }
41
- export type ParseResult = ParsedSendRequest | {
39
+ type ParseResult = ParsedSendRequest | {
42
40
  ok: false;
43
41
  error: string;
44
42
  remediation?: string;
@@ -78,12 +76,23 @@ export declare function handleWeixinSendRequest(ctx: Context, req: {
78
76
  };
79
77
  [Symbol.asyncIterator]?: unknown;
80
78
  }, res: ServerResponse): Promise<void>;
81
- /** 启动监听器(仅 127.0.0.1);已启动 → 幂等返回 */
79
+ /** 本面的规格(C4 块 A/④:**只提供** name/port/host/enabled/handler——样板与生命周期归 face-host) */
80
+ export declare function weixinSendSpec(ctx: Context, cfg: {
81
+ enabled: boolean;
82
+ port: number;
83
+ }): FaceSpec;
84
+ /** 启动监听器(仅 127.0.0.1);已启动 → 幂等返回既有端口 */
82
85
  export declare function startWeixinSendApi(ctx: Context, port: number): Promise<number>;
83
86
  /** 停止监听器(幂等) */
84
87
  export declare function stopWeixinSendApi(): void;
85
88
  /**
86
89
  * 装配(index.ts apply 调用):按 plugin 全局配置 weixinApi 启停,配置变化热同步。
87
90
  * 默认启用(仅 loopback,零公网暴露);`enabled:false` 或 `port:0` 关闭。
91
+ *
92
+ * C4 块 A:启停判据归面规格(`weixinSendSpec.enabled`)+ 宿主统一读取(`faceEnabled`)——
93
+ * 本函数不再手写 `if (want && !active) start / if (!want && active) stop` 样板,
94
+ * 且**停服仍是同步的**(原语义:配置一关,`weixinSendEndpoint()` 当拍变 null)。
95
+ * 🔒 自带的 `ctx.effect` disposer 已删除:拆卸路径归一到 `seams/lifecycle.ts` 的
96
+ * 聚合入口(`stopAllFaces`)——两套拆卸并存正是 C4 要收的重复形态。
88
97
  */
89
98
  export declare function registerWeixinSendApi(ctx: Context): void;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@shgroup/dsh-serenity-hooks",
3
- "version": "1.32.0",
4
- "description": "宁静号 ACC harness(Native Cordis 插件)——给 DeepSeek Harness 装一个「AI 工作区」:11 个工具(container_fs/logbook/dashboard/container_git/msm/praxis/handyman/localstore/container_admin/trajectory/im-bridge)+ 机械约束(安全模式/工作区围墙/密钥守卫/对外输出守卫)+ 工作日志与原地重建 + 网页登录入口/微信桥/子角色/对外问答页/trajectory 唤醒注册表。适配 DSH 0.1.5-rc.2。",
3
+ "version": "1.34.1",
4
+ "description": "宁静号 ACC harness(Native Cordis 插件)——给 DeepSeek Harness 装一个「AI 工作区」:11 个工具(container_fs/container_trajectory/dashboard/container_git/msm/praxis/handyman/localstore/container_admin/im-bridge/acc-diag)+ 机械约束(安全模式/工作区围墙/密钥守卫/对外输出守卫)+ 工作日志与原地重建 + 网页登录入口/微信桥/子角色/对外问答页/trajectory 唤醒注册表。适配 DSH 0.1.5-rc.2。",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -30,9 +30,7 @@
30
30
  "lib/**/*.d.ts",
31
31
  "cordis.patch.yml",
32
32
  "dsh.plugin.json",
33
- "README.md",
34
- "experiments/autopilot-trajectory/SKILL.md",
35
- "experiments/autopilot-trajectory/scripts/autopilot-trajectory.ts"
33
+ "README.md"
36
34
  ],
37
35
  "scripts": {
38
36
  "typecheck": "tsc --noEmit",
@@ -1,115 +0,0 @@
1
- ---
2
- name: autopilot-trajectory-experiment
3
- description: Autopilot Trajectory(自动巡航轨迹,正式版;前身自主轨迹实验)参与 skill。本 skill 让 CCC 完整理解机制背景(人类 waiting 是 trajectory 速度瓶颈)、目的(验证"无人等待的 trajectory"能否加速认知推进)、方式(时钟唤起 + 先验偏见 + 轨迹焦点 + 前台运行 + 多 CCC 独立),并提供一站式管理工具(`trajectory`:无参全报告 / init 初始化 / random 验证偏见内容 / diag 诊断)。任何希望参与的 CCC 复制本目录到 .opencode/skills/ 即可开始。
4
- ---
5
-
6
- # Skill: autopilot-trajectory-experiment
7
-
8
- > 本 skill 是 Autopilot Trajectory(自动巡航轨迹)的 **CCC 参与入口**——加载本 skill 即完整理解机制的**背景、目的、方式**。
9
- > 实验管理:工具 `trajectory`(动作 `<all|doc|check|status|guide>`;D58 起 ACC 工具 `autopilot-trajectory` 更名 `trajectory`,硬切无别名)
10
- > 理论依据:serenity-acc-specs `docs/self-sustaining-trajectory-hypothesis.md`(v0.1 猜想)
11
-
12
- ## 触发条件/何时加载
13
-
14
- - CCC 被选为自主轨迹实验对象时(用户指定)
15
- - 需要理解"无人等待的 trajectory"实验的背景/目的/参与方式时
16
- - 需要预检/查看实验配置时
17
-
18
- ---
19
-
20
- ## 1. 背景:为什么有这个实验
21
-
22
- 认知容器理论(specs §0)确立:**Trajectory 是主体**(Agent 可替换、Session 载体可重建、LLM 是认知介质);认知容器 = 发生/存储/再发生的地方。
23
-
24
- 由此观察到**结构性瓶颈**:
25
-
26
- > **人类 waiting 拖慢 trajectory**:当轨迹以"等待人类"为推进条件时,其事件序列时间被人类响应间隔(钟表时间)锚定。等待人类 = 轨迹空转——人类响应越慢,轨迹运转越慢。
27
-
28
- **猜想**:设计"无人等待"的 trajectory——不依赖人类输入而自动唤起,唤起时携带先验偏见(自主动机)。若成立,轨迹运转速度提升,更快产生让人类满意的效果。
29
-
30
- ## 2. 实验目的(验证什么)
31
-
32
- | 命题 | 内容 |
33
- |------|------|
34
- | P4 | 无人等待的 trajectory 可以时钟驱动自动唤起并携带先验偏见(自生+随机) |
35
- | P5 | 轨迹运转速度提升 → 更快产生让人类满意的效果 |
36
- | 反证 | 熵增失控 / 自我确认循环 / 随机噪音化 / 资源无界 / 反馈脱节——任一显著 → 猜想不成立 |
37
-
38
- ## 3. 参与方式(CCC 侧四步——第一步可一键 init)
39
-
40
- ### ① 初始化(一键):`trajectory init`
41
-
42
- 自动完成:写配置(`.opencode/serenity.json` `trajectory.autopilot` 段)+ 生成偏见提供者脚本模板(CCC 根 `autopilot-bias.ts`)。
43
-
44
- ```jsonc
45
- // 写入的配置(init 后可在 .opencode/serenity.json 查看/调整)
46
- {
47
- "trajectory": {
48
- "autopilot": { // 原 autopilotTrajectory 段,字段不变
49
- "enabled": true, // 总开关(缺省 false,默认关零资源占用)
50
- "intervalHours": 12, // 无人类活动 N 小时后唤起(缺省 12)
51
- "biasProvider": "autopilot-bias.ts", // 偏见内容提供者脚本(CCC 根下)
52
- "topPrompt": "本轨迹的核心焦点:<CCC 填写>", // 轨迹焦点:CCC 定义,每次唤起最先注入
53
- "session": "S###", // 必填:目标会话(不配置绝不唤起)
54
- "avoidWakeHours": { "start": 8, "end": 18 } // 可选:避开北京高峰(缺省 8~18 省钱)
55
- }
56
- }
57
- }
58
- ```
59
-
60
- ### ② 定义轨迹焦点(topPrompt——CCC 自己填写)
61
-
62
- **CCC 定义 `trajectory.autopilot` 时同时定义本轨迹的顶层提示词**(`topPrompt`):核心目标/纪律/质量要求(示例:"持续深化某领域认知,产出可重建的结论与决策记录")。它会在**每次唤起时最先注入**(`[轨迹焦点]` 段,位于身份锚定之前,影响力最大),作为**稳定焦点锚定 trajectory**——**实验观察:无焦点锚定时,多轮自主唤起中轨迹腐化严重(焦点丢失)**。与偏见内容的分工:**焦点=稳定锚(每轮不变),偏见=随机探索方向(每轮不同),互补**。init 生成占位,CCC 按自己轨迹目标改写(勿留空——留空 = 唤起无焦点锚定,轨迹易漂移)。
63
-
64
- ### ③ 实现偏见内容提供者(`autopilot-bias.ts`)
65
-
66
- CCC 根目录下一个脚本,**stdout 输出本轮唤起注入的偏见内容**(反事实问题/探索方向/任何让轨迹偏离既有路径的输入)。**偏见内容归 CCC**——用本 CCC 自己的反馈信息来源保证"足够随机"。`trajectory random` 可验证输出。
67
-
68
- ### ④ 标记目标会话(可选自生动机段)
69
-
70
- - 目标会话目录名加 `--auto` 后缀:`AGENT_SESSIONS/<date>--<desc>--auto/`——**只有带标志的轨迹走自主形态**,同 CCC 其他会话不受影响
71
- - 可选:该 SESSION.md 写「下一轮动机」段(上一轮预写 → 下一轮唤起的自生偏见)
72
-
73
- ## 4. 机制运行(dsp 侧,CCC 无需干预)
74
-
75
- ```
76
- 定时器(每 10min)→ 唤起条件全满足 →
77
- ① 读 topPrompt(CCC 定义的轨迹焦点)→ 唤起消息首段注入
78
- ② 运行 <biasProvider> 脚本 → stdout = 偏见内容(CCC 自定)
79
- ③ 读 SESSION.md「下一轮动机」段 → 自生动机
80
- ④ 定位活跃会话 agent → 注入唤起消息(前台运行——用户全程可见、随时可介入)
81
- → 模型自动继续:探索/反事实检验 → 产出落 SESSION.md「自主探索日志」+ 预写「下一轮动机」
82
- ```
83
-
84
- **唤起条件**(全部满足):① enabled ② 会话目录 `--auto` ③ SESSION.md mtime 距今 > intervalHours ④ 北京时间非高峰(缺省避开 8~18)⑤ 无运行中的唤起轮。**偏见提供者脚本缺失 → 唤起中止并报错要求实现**(不静默)。
85
-
86
- **人类角色**:不触发、不中断;回复/评价天然并入(同一前台会话);轨迹不等人类。
87
-
88
- ## 5. 实验管理(`trajectory` 工具)——一站式
89
-
90
- | 用法 | 功能 |
91
- |------|------|
92
- | `trajectory`(**推荐,无参**) | **一站式全报告**:背景摘要 + 就绪度检查 + 当前状态 + 下一步指引 + 步骤——CCC agent 看一次即完整理解并知道怎么开始 |
93
- | `trajectory init` | **一键初始化**:写配置 + 生成偏见提供者脚本模板(CCC 根 autopilot-bias.ts) |
94
- | `trajectory random` | 运行偏见提供者脚本,输出当前偏见内容(验证) |
95
- | `trajectory doc` | 机制定义说明全文(本 SKILL.md) |
96
- | `trajectory check` | 仅就绪度检查(配置/轨迹焦点 topPrompt/偏见提供者/--auto 标志/动机段) |
97
- | `trajectory status` | 仅当前状态(配置快照/目标会话/距上次活动/唤起窗口/可唤起性) |
98
- | `trajectory guide` | 仅步骤指引 |
99
-
100
- ## 6. 观察与验证
101
-
102
- - **观察**:无人类活动满 intervalHours 且非高峰 → 前台会话自动出现 `[Autopilot Trajectory 唤起]` 消息(可见可介入)
103
- - **验证阶段**:A 机制可行性(3~5 轮)→ B 速度对比(72h 有/无等待)→ C 质量与熵(人类评审 + H_op)→ D 长期(数周,检验自我确认/熵增)
104
- - **成功判据**:自主轮产出有意义的比例 ≥ 阈值,且 H_op 维持可运转
105
-
106
- ## 7. 边界
107
-
108
- - 本实验**非标准条款**——不修改 Serenity-ACC 标准正文;验证成立后才评估进入标准演化议程
109
- - 默认关闭;未配置 = 零资源占用;不触碰 CCC 其他会话/机制
110
-
111
- ## 相关
112
-
113
- - 猜想全文:serenity-acc-specs `docs/self-sustaining-trajectory-hypothesis.md`
114
- - 机制定义:dsh-serenity-plugin `docs/autopilot-trajectory.md`
115
- - 标准理论:serenity-acc-specs README §0