@shgroup/dsh-serenity-hooks 1.27.2 → 1.27.4

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.
@@ -1,193 +0,0 @@
1
- /**
2
- * autotrajectory.ts — 自主轨迹(Self-Sustaining Trajectory)验证机制(v1.26.12)
3
- *
4
- * 依据:serenity-acc-specs/docs/self-sustaining-trajectory-hypothesis.md(v0.1 实验提案;
5
- * S142 2026-08-30 用户提出猜想 + 三项裁决:① 时钟驱动 ② 先验偏见自生+随机(随机充分引入)
6
- * ③ 人类=反馈来源(不直接参与))。
7
- *
8
- * 形态(用户审核定稿 v0.5):
9
- * · **前台运行**:时钟唤起 = 向活跃会话注入唤起消息(agent.steer,v1.22.5 自动继续同款
10
- * 通道)→ 模型自动继续 → 用户全程可见、随时可介入(人类反馈天然并入——同会话)。
11
- * · **偏见内容提供者 = CCC 根目录下脚本**(用户拍板:不再让 CCC 注册 MSM;tool 直接运行脚本;
12
- * 命名修正:它不是"随机脚本",本质是**偏见内容提供者**——biasProvider):
13
- * 配置 biasProvider(相对 CCC 根,缺省 autotrajectory-bias.ts)——tool 直接运行取
14
- * stdout 作为偏见内容;脚本缺失 → **报错要求实现**(偏见内容归 CCC,实现 = 根目录放脚本)。
15
- * · **会话标志 = 目录名后缀 --auto**(用户拍板:后缀,验证用方便):
16
- * AGENT_SESSIONS/<date>--<desc>--auto/ → 该轨迹为自主形态;无标志会话不受影响。
17
- * · **轨迹焦点 topPrompt = CCC 定义**(v1.26.17,用户"确保自动轨迹质量"):CCC 在定义
18
- * autotrajectory 时自己填写本轨迹的顶层提示词(核心目标/纪律/质量要求),**每次唤起最先
19
- * 注入**——稳定焦点锚定 trajectory,防止多轮自主唤起中焦点丢失(实验观察:轨迹腐化严重)。
20
- * 与偏见内容分工:焦点=稳定锚(每轮不变),偏见=随机探索方向(每轮不同),互补。
21
- * · **唤起窗口避开北京时间 8~18 点**(用户拍板:用量峰谷省钱)——avoidWakeHours 可覆盖。
22
- * · **默认关**:serenity.json autotrajectory.enabled=false → 定时器不启动,零资源占用。
23
- * · **零影响**:不修改任何现有工具 / seams / 外部面;新增独立模块 + ccc.ts 纯类型扩展。
24
- */
25
- import type { Context } from 'cordis';
26
- import { type AutoTrajectorySettings } from './ccc.js';
27
- /** 偏见内容提供者脚本缺省名(CCC 根目录下;用户拍板:tool 直接运行,缺失报错要求实现) */
28
- export declare const DEFAULT_BIAS_PROVIDER = "autotrajectory-bias.ts";
29
- /** 自主轨迹会话目录后缀标志(用户拍板:后缀) */
30
- export declare const AUTO_DIR_SUFFIX = "--auto";
31
- /** 调度 tick 周期(10min——验证形态"一个就够") */
32
- export declare const TICK_MS: number;
33
- /** SESSION.md 内「下一轮动机」段标记(自生偏见载体——轨迹预设自己的未来) */
34
- export declare const MOTIVATION_MARKER = "\u4E0B\u4E00\u8F6E\u52A8\u673A";
35
- /** 缺省避开的高峰时段(北京时间 [start, end) 不唤起——用量峰谷省钱) */
36
- export declare const DEFAULT_AVOID_HOURS: {
37
- start: number;
38
- end: number;
39
- };
40
- export declare function readAutoTrajectorySettings(root: string): AutoTrajectorySettings | null;
41
- /**
42
- * 北京时间(UTC+8)当前小时——不依赖服务器时区(服务器可能 UTC/本地任意)。
43
- */
44
- export declare function beijingHour(nowMs: number): number;
45
- /**
46
- * 唤起窗口判定:北京时间 [avoidStart, avoidEnd) 内不唤起(缺省 8~18)。
47
- * 单段避开(start<=end):窗口 = [0,start) ∪ [end,24);跨零点避开(start>end):窗口 = [end,start)。
48
- */
49
- export declare function inAllowedWakeWindow(nowMs: number, avoid?: {
50
- start?: number;
51
- end?: number;
52
- }): boolean;
53
- /** 标志位判定:SESSION.md 所在目录名以 --auto 结尾 → 自主轨迹形态 */
54
- export declare function isAutoTrajectorySession(mdPath: string): boolean;
55
- /**
56
- * 目标会话定位:**必须配置 cfg.session**(S###/目录名)——CCC 日常有多条 trajectory 在跑,
57
- * 绝不默认唤起(缺省最近活跃会误伤其他正在运行的轨迹;用户拍板:必须配置才生效)。
58
- * 未配置 session 或未命中 → null(不唤起)。
59
- */
60
- export declare function resolveTargetMd(root: string, cfg: AutoTrajectorySettings): string | null;
61
- /**
62
- * 唤起条件(纯逻辑,可测):enabled + 未在运行 + 目录标志 + mtime 超间隔 + 窗口允许。
63
- */
64
- export declare function shouldWake(settings: AutoTrajectorySettings, mdPath: string | null, nowMs: number, running: boolean): boolean;
65
- /** 自生动机读取:SESSION.md「下一轮动机」段内容(到下一个二级标题或文件尾;无 → null) */
66
- export declare function readSelfGeneratedMotivation(mdPath: string): string | null;
67
- /**
68
- * 偏见内容:直接运行 CCC 根目录下偏见提供者脚本(biasProvider,缺省 autotrajectory-bias.ts)→ stdout。
69
- * 脚本缺失 → 返回 { text: null, error: 提示实现 }(唤起侧报错要求实现,不静默跳过)。
70
- * 路径逃逸校验(resolveInside);bun 优先,node 兜底;600s 超时。
71
- */
72
- export declare function fetchBiasContent(root: string, providerRel: string): Promise<{
73
- text: string | null;
74
- error: string | null;
75
- }>;
76
- /** 唤起消息(四段式:轨迹焦点[CCC 定义,稳定] / 身份锚定 / 先验偏见[自生动机+偏见内容] / 任务)——注入前台会话,用户可见 */
77
- export declare function buildWakeMessage(opts: {
78
- sessionName: string;
79
- mdPath: string;
80
- intervalHours: number;
81
- topPrompt: string | null;
82
- motivation: string | null;
83
- biasContent: string | null;
84
- }): string;
85
- /**
86
- * 执行一次唤起(时钟 tick 与面板「立即唤起」共用):
87
- * - force=false(时钟):完整校验——enabled / 目标命中 / --auto 标志 / 窗口 / 间隔 / 偏见脚本
88
- * - force=true(手动调试,用户在场):跳过窗口与间隔,仍校验 enabled / 目标命中 / --auto / 偏见脚本
89
- * 成功 → 注入前台会话(agent.steer,用户可见);返回结果供调用方(tick 打日志 / 面板显示)。
90
- */
91
- export interface WakeResult {
92
- ok: boolean;
93
- detail: string;
94
- }
95
- export declare function performAutoTrajectoryWake(ctx: Context, root: string, settings: AutoTrajectorySettings, opts?: {
96
- force?: boolean;
97
- }): Promise<WakeResult>;
98
- /**
99
- * 装配(index.ts apply 调用)。时钟唤起(v1.26.14 修复——用户"手动唤起正常,时钟唤起不工作"):
100
- *
101
- * 根因:旧实现启动时一次性 `resolveAutoTrajectoryRoot(ctx)`——web 进程启动时 live 会话
102
- * 往往为空(用户尚未打开实验 CCC 会话)→ root=null → settings=null → **定时器根本不启动**;
103
- * 手动唤起走 HTTP 端点(点击时重新解析 root)→ 正常。
104
- *
105
- * 修复:
106
- * ① **动态解析**:每次 tick 重新解析 root + settings(不绑定启动时值)——live 会话变化即跟上;
107
- * ② **事件驱动启动**:监听 `session/created`(live 会话出现)→ 启动定时器(进程启动时若
108
- * 已有实验 CCC 会话则立即启动);
109
- * ③ **优先实验 CCC**:resolveAutoTrajectoryCcc(配置了 autotrajectory 的 live CCC)优先于
110
- * 进程 cwd/任一 live(多 CCC 同实例时时钟唤起绑定实验 CCC,而非当前维护会话 CCC)。
111
- *
112
- * 零资源占用语义保留:未配置/未启用 → tick 内直接 return(定时器存在但每 10min 一次空检查,
113
- * unref 不阻塞进程退出)。
114
- */
115
- export declare function registerAutoTrajectory(ctx: Context): void;
116
- /**
117
- * 面板状态(GET /serenity/autotrajectory 数据源;纯逻辑,可单测)——
118
- * WebUI 设置面板「自主轨迹」只读区块展示的完整状态:配置摘要 + 目标会话
119
- * 命中/标志/空闲时长 + 当前窗口/可唤起判定(唤起逻辑同 registerAutoTrajectory)。
120
- * 不运行偏见脚本(只报脚本是否就绪——运行验证走 autotrajectory-exp random)。
121
- */
122
- export interface AutoTrajectoryStatus {
123
- /** 是否配置了 autotrajectory 段(.opencode/serenity.json) */
124
- configured: boolean;
125
- /** 总开关(缺省 false——未开零资源占用) */
126
- enabled: boolean;
127
- /** 无人类活动 N 小时后自动唤起(缺省 12) */
128
- intervalHours: number;
129
- /** 偏见内容提供者脚本(相对 CCC 根;缺省 autotrajectory-bias.ts) */
130
- biasProvider: string;
131
- /** 顶层提示词(v1.26.17:每次唤起最先注入的稳定指令;未配置 → null) */
132
- topPrompt: string | null;
133
- /** 目标会话(S###/目录名;未配置 = 不唤起) */
134
- session: string | null;
135
- /** 避开唤起的高峰时段(北京时间) */
136
- avoidWakeHours: {
137
- start: number;
138
- end: number;
139
- };
140
- /** 目标会话状态(未配置/未命中 → null) */
141
- target: {
142
- /** 目录名(含 --auto 后缀时为自主形态) */
143
- dirName: string;
144
- /** 目录名是否带 --auto 标志 */
145
- autoFlag: boolean;
146
- /** 距上次轨迹活动(小时) */
147
- idleHours: number;
148
- /** 当前时刻是否满足唤起条件(标志+间隔+窗口,未运行中) */
149
- wakeable: boolean;
150
- } | null;
151
- /** 当前北京时间小时 */
152
- beijingHour: number;
153
- /** 当前是否在唤起窗口内(避开高峰之外) */
154
- windowAllowed: boolean;
155
- }
156
- export declare function getAutoTrajectoryStatus(root: string): AutoTrajectoryStatus;
157
- /** live 会话条目(诊断/面板解析用;标题从 events 读) */
158
- export interface LiveSessionEntry {
159
- id: string;
160
- cwd: string | null;
161
- cccRoot: string | null;
162
- title: string | null;
163
- }
164
- /** 遍历 live 会话(sessions.list())+ 补标题(events session/title latest-wins)+ ccc 归属 */
165
- export declare function listLiveSessions(ctx: Context): LiveSessionEntry[];
166
- /**
167
- * 面板解析:GET /serenity/autotrajectory 无 workspace 参数时——
168
- * **优先「配置了 autotrajectory 的 live CCC」**(用户实验状态所在;v1.26.14 修复:
169
- * 原 resolveWorkspace 解析到第一个 live 会话(如 home-serenity)→ 面板显示"未配置",
170
- * 用户实验 CCC(pangu)检测不到)。优先级:已启用 → 已配置(未启用)→ null。
171
- */
172
- export declare function resolveAutoTrajectoryCcc(ctx: Context): string | null;
173
- /**
174
- * 进程内诊断(autotrajectory-exp diag-live 数据源;用户"排查访问不到 pangu 写个 msm")——
175
- * 输出当前实例 live 会话清单(id/cwd/ccc/标题)+ 每个配置了 autotrajectory 的 CCC
176
- * 状态(配置摘要/目标命中/可唤起)+ 目标 agent 定位结果。脚本 diag 看不到运行时,
177
- * 本函数在插件进程内运行(能读 sessions/agents)。
178
- */
179
- export interface DiagLiveReport {
180
- processCwd: string;
181
- processCcc: string | null;
182
- liveSessions: LiveSessionEntry[];
183
- autotrajectoryCccs: Array<{
184
- root: string;
185
- enabled: boolean;
186
- session: string | null;
187
- target: AutoTrajectoryStatus['target'];
188
- agentResolved: boolean;
189
- agentDiagnosis: string | null;
190
- }>;
191
- panelResolved: string | null;
192
- }
193
- export declare function diagLive(ctx: Context): DiagLiveReport;