@wenaixi/dsh-ponytail 5.3.2 → 5.4.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.
@@ -1,4 +1,6 @@
1
+ import { randomUUID } from 'node:crypto';
1
2
  import { getDefaultMode, writeDefaultMode, } from './ponytail-config.js';
3
+ import { renderModeUpdate } from './ponytail-instructions.js';
2
4
  /**
3
5
  * 仅当整句为该命令时失活,避免 "add a normal mode toggle" 误触发
4
6
  * 中英文全句匹配:英文 stop ponytail / normal mode,中文 退出 ponytail / 正常模式
@@ -86,18 +88,30 @@ export function parsePonytailCommand(rawText, currentMode, getDefault) {
86
88
  /**
87
89
  * 创建高内聚的命令调度器深模块
88
90
  * 将文本提取、指令语法解析、状态机流转与副作用执行完整封装
91
+ * 支持可选的 sessionId 会话作用域,实现多会话模式隔离与零缓存破坏调度
89
92
  */
90
93
  export function createCommandDispatcher(env) {
91
94
  const getDef = env.getDefaultMode ?? getDefaultMode;
92
95
  const writeDef = env.writeDefaultMode ?? writeDefaultMode;
93
- function dispatchText(rawText) {
96
+ function dispatchText(rawText, sessionId) {
94
97
  const text = String(rawText ?? '').trim();
95
- const result = parsePonytailCommand(text, env.state.get(), getDef);
98
+ const currentMode = (sessionId && typeof env.state.getSession === 'function')
99
+ ? env.state.getSession(sessionId).effectiveMode
100
+ : env.state.get();
101
+ const result = parsePonytailCommand(text, currentMode, getDef);
96
102
  if (!result.handled)
97
103
  return { handled: false, switched: false };
98
- if (result.deactivate) {
99
- env.state.set(null);
100
- env.logger.info(`[ponytail] 已通过指令退出:${text}`);
104
+ const applySessionMode = (m) => {
105
+ if (typeof env.state.setSessionMode === 'function') {
106
+ env.state.setSessionMode(sessionId, m);
107
+ }
108
+ else {
109
+ env.state.set(m);
110
+ }
111
+ };
112
+ if (result.deactivate || result.mode === 'off') {
113
+ applySessionMode(null);
114
+ env.logger.info(result.deactivate ? `[ponytail] 已通过指令退出:${text}` : '[ponytail] 已关闭');
101
115
  return { handled: true, switched: true };
102
116
  }
103
117
  if (result.persistDefault) {
@@ -105,10 +119,16 @@ export function createCommandDispatcher(env) {
105
119
  if (targetMode === 'off' || targetMode === 'lite' || targetMode === 'full' || targetMode === 'ultra') {
106
120
  const written = writeDef(targetMode);
107
121
  env.logger.info(`[ponytail] 默认等级已持久化:${written}`);
108
- // 用户最新意图即时生效:同步外部判定源(apply 的 patchMode),
109
- // 否则 patch 层继续压住 config.json,写盘「成功」却「无效」(静默失效)
122
+ // 用户最新意图即时生效:同步外部判定源(apply 的 patchMode)
110
123
  env.updateDefaultMode?.(targetMode);
111
- env.state.set(targetMode);
124
+ // 关键:全局修改配置时,同步更新所有已有会话的 effectiveMode,
125
+ // 但严禁修改已有会话的 baselineMode,确保已有会话在下轮自动通过尾部追加通知生效!
126
+ if (typeof env.state.syncGlobalModeToSessions === 'function') {
127
+ env.state.syncGlobalModeToSessions(targetMode);
128
+ }
129
+ else {
130
+ env.state.set(targetMode);
131
+ }
112
132
  }
113
133
  return { handled: true, switched: true };
114
134
  }
@@ -117,28 +137,112 @@ export function createCommandDispatcher(env) {
117
137
  env.logger.info(`[ponytail] 当前等级:${result.mode}`);
118
138
  return { handled: true, switched: false };
119
139
  }
120
- if (result.mode && result.mode !== 'off') {
121
- env.state.set(result.mode);
140
+ if (result.mode) {
141
+ applySessionMode(result.mode);
122
142
  env.logger.info(`[ponytail] 已切换 — 等级:${result.mode}`);
123
143
  return { handled: true, switched: true };
124
144
  }
125
- if (result.mode === 'off') {
126
- env.state.set(null);
127
- env.logger.info('[ponytail] 已关闭');
128
- return { handled: true, switched: true };
129
- }
130
145
  return { handled: true, switched: false };
131
146
  }
132
147
  return {
133
148
  dispatchText,
134
- dispatchContent(content) {
149
+ dispatchContent(content, sessionId) {
135
150
  const text = extractTextFromContent(content);
136
- return text ? dispatchText(text) : { handled: false, switched: false };
151
+ return text ? dispatchText(text, sessionId) : { handled: false, switched: false };
137
152
  },
138
- dispatchMessages(messages) {
153
+ dispatchMessages(messages, sessionId) {
139
154
  const text = extractText(messages);
140
- return text ? dispatchText(text) : { handled: false, switched: false };
155
+ return text ? dispatchText(text, sessionId) : { handled: false, switched: false };
141
156
  },
142
157
  };
143
158
  }
159
+ /** 统一从多层级宿主上下文对象中安全提取会话 ID */
160
+ export function resolveSessionId(target) {
161
+ const t = target;
162
+ return t?.agent?.session?.id ?? t?.scope?.session?.id ?? t?.session?.id;
163
+ }
164
+ /**
165
+ * 轮次生命周期协作者深模块 (TurnCoordinator)
166
+ *
167
+ * 核心架构杠杆:
168
+ * 将用户指令解析、会话状态机流转、宿主 waterfall 穿透、变动对比、
169
+ * <system-reminder> 瞬态提醒构造、单轮原地替换与已发射标记回写完整内聚于此。
170
+ *
171
+ * 严守 6 大不变量:
172
+ * 1. Waterfall 不断链(异常捕获并穿透);
173
+ * 2. KV Cache 保护(顶层基线不可变,所有动态变动收敛在当前轮次尾部);
174
+ * 3. 单通知幂等(同轮重试时原地替换,绝不重复 push);
175
+ * 4. 发射标记收敛时机(仅在 downstream.kind === 'enter' 后标记已发射);
176
+ * 5. 多会话隔离(基于 sessionId 独立闭环);
177
+ * 6. 纯命令只读安全(裸 /ponytail 无副作用)。
178
+ */
179
+ export function createTurnCoordinator(env) {
180
+ const dispatcher = createCommandDispatcher(env);
181
+ async function handlePreStep(payload, next) {
182
+ const raw = payload;
183
+ const sessionId = resolveSessionId(payload);
184
+ // 1. 尝试解析并分发指令
185
+ try {
186
+ if (raw?.messages) {
187
+ dispatcher.dispatchMessages(raw.messages, sessionId);
188
+ }
189
+ }
190
+ catch (err) {
191
+ env.logger.warn?.(`[ponytail] agent/pre-step 处理失败(仍会调用 next(),不拦截请求):${String(err)}`);
192
+ }
193
+ // 2. 必须且只能穿透下游 waterfall(断链守卫)
194
+ const downstream = (await next());
195
+ if (!downstream || typeof downstream !== 'object' || downstream.kind !== 'enter') {
196
+ return downstream;
197
+ }
198
+ const decision = downstream;
199
+ const sessionState = env.state.getSession(sessionId);
200
+ // 3. 变动检测(Change Detection 保护 KV 缓存幂等性)
201
+ if (sessionState.effectiveMode !== sessionState.lastEmittedMode) {
202
+ const noticeText = renderModeUpdate(sessionState.effectiveMode, sessionState.lastEmittedMode, env.skillDir);
203
+ const updateMsg = {
204
+ id: randomUUID(),
205
+ role: 'user',
206
+ content: [{ type: 'text', text: noticeText }],
207
+ source: {
208
+ kind: 'ponytail-mode-update',
209
+ mode: sessionState.effectiveMode,
210
+ previousMode: sessionState.lastEmittedMode,
211
+ },
212
+ };
213
+ // 4. 标记已发射(严守收敛时机不变量)
214
+ env.state.markSessionEmitted(sessionId, sessionState.effectiveMode);
215
+ // 5. 原地替换或追加(严守单通知幂等不变量,对齐 dsh-tool-skill)
216
+ const msgs = Array.isArray(decision.messages) ? [...decision.messages] : [];
217
+ const existingIdx = msgs.findIndex((m) => Boolean(m && typeof m === 'object' && m.source?.kind === 'ponytail-mode-update'));
218
+ if (existingIdx !== -1) {
219
+ msgs[existingIdx] = updateMsg;
220
+ }
221
+ else {
222
+ msgs.push(updateMsg);
223
+ }
224
+ return {
225
+ ...decision,
226
+ messages: msgs,
227
+ };
228
+ }
229
+ return decision;
230
+ }
231
+ function handleSessionEvent(session, event) {
232
+ try {
233
+ const ev = event;
234
+ if (ev?.type !== 'user/message')
235
+ return;
236
+ const sessionId = session?.id;
237
+ dispatcher.dispatchContent(ev.data?.content, sessionId);
238
+ }
239
+ catch (err) {
240
+ env.logger.warn?.(`[ponytail] session/event 处理失败:${String(err)}`);
241
+ }
242
+ }
243
+ return {
244
+ handlePreStep,
245
+ handleSessionEvent,
246
+ };
247
+ }
144
248
  //# sourceMappingURL=ponytail-commands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-commands.js","sourceRoot":"","sources":["../src/ponytail-commands.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,gBAAgB,GAEjB,MAAM,sBAAsB,CAAA;AAE7B;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC7E,OAAO,CAAC,KAAK,eAAe,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,MAAM,CAAA;AAC5F,CAAC;AAcD;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAA;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,CAAC,EAAyB,EAAE,CAAC,OAAQ,CAAwB,EAAE,IAAI,KAAK,QAAQ,CAAC;aACzF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,CAAC,IAAI,CAAC,CAAA;IACf,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,QAAiB;IAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAA;IACvC,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAE,CAA2B,EAAE,OAAO,CAAC,CAAC;SACzE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAA;AACX,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,WAA0B,EAC1B,UAA6B;IAE7B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAEhC,YAAY;IACZ,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;IAC5D,CAAC;IAED,uCAAuC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAA;IACpF,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IAEtD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IAClC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAEjD,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAC1D,CAAC;IAED,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;QACvD,CAAC;QACD,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACxD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;QACrD,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YACxD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,KAAK;gBACf,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;aACrC,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,0BAA0B;YAC1B,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,IAAI;gBAChB,IAAI,EAAG,WAAkC,IAAI,UAAU,EAAE;aAC1D,CAAA;QACH,CAAC;QACD,wCAAwC;QACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAA;IAC9D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;AAC5C,CAAC;AA4BD;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAyB;IAC/D,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,IAAI,cAAc,CAAA;IACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,IAAI,gBAAgB,CAAA;IAEzD,SAAS,YAAY,CAAC,OAAe;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QACzC,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;QAClE,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;QAE/D,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACnB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAA;YAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAC1C,CAAC;QAED,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAA;YAC7C,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;gBACrG,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAA;gBACpC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAA;gBACjD,yCAAyC;gBACzC,+CAA+C;gBAC/C,GAAG,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,CAAA;gBACnC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YAC3B,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAC1C,CAAC;QAED,gEAAgE;QAChE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YACjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;QAC3C,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACzC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC1B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAC1C,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC1B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACnB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAC1C,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IAC3C,CAAC;IAED,OAAO;QACL,YAAY;QACZ,eAAe,CAAC,OAAgB;YAC9B,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAA;YAC5C,OAAO,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;QACxE,CAAC;QACD,gBAAgB,CAAC,QAAiB;YAChC,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;YAClC,OAAO,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;QACxE,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"ponytail-commands.js","sourceRoot":"","sources":["../src/ponytail-commands.ts"],"names":[],"mappings":"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"}
@@ -14,5 +14,11 @@ export declare function render(skillDir: string, mode: string): string;
14
14
  * 封装从状态外部纠偏(syncFromFile)、激活与关闭态守卫(off/null 返回空串)、
15
15
  * 到按需直读模板(ADR-0003)与保底降级渲染的完整链路。
16
16
  */
17
- export declare function renderPromptSection(skillDir: string, state: PonytailState): string;
17
+ export declare function renderPromptSection(skillDir: string, state: PonytailState, context?: unknown): string;
18
+ /**
19
+ * 对齐官方 @deepseek-ai/dsh-tool-skill 的 renderCatalogUpdate 范式:
20
+ * 当会话内命令切档或全局配置变更导致旧会话跟随更新时,绝不修改顶层 SystemPrompt 前缀(100% 保护历史缓存),
21
+ * 而是生成带有 <system-reminder> 的增量系统提醒,在当前轮次末尾追加,大模型当轮以最高注意力即时生效。
22
+ */
23
+ export declare function renderModeUpdate(newMode: string | null, previousMode?: string | null, skillDir?: string): string;
18
24
  //# sourceMappingURL=ponytail-instructions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-instructions.d.ts","sourceRoot":"","sources":["../src/ponytail-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAKxD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBzE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkC5D;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAKD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAU7D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAKlF"}
1
+ {"version":3,"file":"ponytail-instructions.d.ts","sourceRoot":"","sources":["../src/ponytail-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAKxD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBzE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkC5D;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAKD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAU7D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,OAAO,GAChB,MAAM,CA4BR;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,YAAY,GAAE,MAAM,GAAG,IAAW,EAClC,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAuBR"}
@@ -86,11 +86,55 @@ export function render(skillDir, mode) {
86
86
  * 封装从状态外部纠偏(syncFromFile)、激活与关闭态守卫(off/null 返回空串)、
87
87
  * 到按需直读模板(ADR-0003)与保底降级渲染的完整链路。
88
88
  */
89
- export function renderPromptSection(skillDir, state) {
89
+ export function renderPromptSection(skillDir, state, context) {
90
+ try {
91
+ state.reloadDisabledSkills?.();
92
+ }
93
+ catch {
94
+ // ignore
95
+ }
90
96
  state.syncFromFile();
97
+ // 提取会话目标(支持 agent.session.id、scope.session.id 与直接 session.id 双通道)
98
+ const raw = context;
99
+ const sessionId = raw?.agent?.session?.id ?? raw?.scope?.session?.id ?? raw?.session?.id;
100
+ if (sessionId && typeof state.getSession === 'function') {
101
+ // 具名会话:锁定初始基线 baselineMode,绝不随切档变动,100% 保护会话前缀缓存(ADR-0012)
102
+ const sessionState = state.getSession(sessionId);
103
+ const baseMode = sessionState.baselineMode;
104
+ if (!baseMode || baseMode === 'off')
105
+ return '';
106
+ return render(skillDir, baseMode);
107
+ }
108
+ // 无会话目标时(单会话全局模式 / 单元测试裸调 / 外部直接读取):走全局单例出口
91
109
  const mode = state.get();
92
110
  if (!mode || mode === 'off')
93
111
  return '';
94
112
  return render(skillDir, mode);
95
113
  }
114
+ /**
115
+ * 对齐官方 @deepseek-ai/dsh-tool-skill 的 renderCatalogUpdate 范式:
116
+ * 当会话内命令切档或全局配置变更导致旧会话跟随更新时,绝不修改顶层 SystemPrompt 前缀(100% 保护历史缓存),
117
+ * 而是生成带有 <system-reminder> 的增量系统提醒,在当前轮次末尾追加,大模型当轮以最高注意力即时生效。
118
+ */
119
+ export function renderModeUpdate(newMode, previousMode = null, skillDir) {
120
+ const prev = previousMode ? ` (superseding previous level: ${previousMode})` : '';
121
+ if (!newMode || newMode === 'off') {
122
+ return [
123
+ '<system-reminder>',
124
+ `Ponytail mode has been switched OFF${prev}.`,
125
+ 'Normal development mode applies for this session until explicitly reactivated. Follow standard engineering practices without ponytail ladder constraints.',
126
+ '</system-reminder>',
127
+ ].join('\n');
128
+ }
129
+ const upper = newMode.toUpperCase();
130
+ const body = skillDir ? render(skillDir, newMode) : getFallbackInstructions(newMode);
131
+ return [
132
+ '<system-reminder>',
133
+ `Ponytail mode updated to ${upper}${prev}.`,
134
+ 'This complete instruction set applies to all subsequent responses in this session:',
135
+ '',
136
+ body,
137
+ '</system-reminder>',
138
+ ].join('\n');
139
+ }
96
140
  //# sourceMappingURL=ponytail-instructions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-instructions.js","sourceRoot":"","sources":["../src/ponytail-instructions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ponytail-instructions.js","sourceRoot":"","sources":["../src/ponytail-instructions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-remote.d.ts","sourceRoot":"","sources":["../src/ponytail-remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EAAU,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,mDAAmD;AACnD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;AAiCnC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,CAQ3D;AAED,2DAA2D;AAC3D,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAgBrF;AAED,yEAAyE;AACzE,MAAM,WAAW,sBAAsB;IACrC,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe;IACf,QAAQ,EAAE,cAAc,CAAA;IACxB,4CAA4C;IAC5C,SAAS,EAAE,SAAS,CAAA;IACpB,iCAAiC;IACjC,MAAM,EAAE,SAAS,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,IAAI,sBAAsB,CAAA;CACnC;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,mBAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;gBAE7B,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB;IAMlD,QAAQ,IAAI,sBAAsB;CAGnC"}
1
+ {"version":3,"file":"ponytail-remote.d.ts","sourceRoot":"","sources":["../src/ponytail-remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAU,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,mDAAmD;AACnD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;AAiCnC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,CAQ3D;AAED,2DAA2D;AAC3D,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAgBrF;AAED,yEAAyE;AACzE,MAAM,WAAW,sBAAsB;IACrC,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe;IACf,QAAQ,EAAE,cAAc,CAAA;IACxB,4CAA4C;IAC5C,SAAS,EAAE,SAAS,CAAA;IACpB,iCAAiC;IACjC,MAAM,EAAE,SAAS,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,IAAI,sBAAsB,CAAA;CACnC;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,mBAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;gBAE7B,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB;IAMlD,QAAQ,IAAI,sBAAsB;CAGnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-remote.js","sourceRoot":"","sources":["../src/ponytail-remote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ponytail-remote.js","sourceRoot":"","sources":["../src/ponytail-remote.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  * - 内存态(currentMode)与 flag 文件的同步
6
6
  * - 「文件优先」与「内存赢」两种纠偏方向(由调用方选方法表达,不写死一处)
7
7
  * - off / review / 非法值的归一
8
+ * - 扩展支持多会话隔离:每个会话锁定基线模式(baselineMode),当切换模式时通过追加通知生效,保护前缀缓存
8
9
  *
9
10
  * 与 config 的关系:flag(.ponytail-active)物理存取内联于此(原 ponytail-runtime.ts 已并入,
10
11
  * C6 收敛:46 行薄壳 + 一层间接委托不如直接内联);也可由 options.storage 注入内存适配器隔离测试。
@@ -21,6 +22,10 @@ export interface PonytailStorage {
21
22
  read(): string | null;
22
23
  write(mode: string): void;
23
24
  clear(): void;
25
+ /** 可选:读取会话状态持久化映射(解耦物理磁盘,支持测试纯内存隔离) */
26
+ readSessions?(): Record<string, SessionModeState>;
27
+ /** 可选:写入会话状态持久化映射(解耦物理磁盘,支持测试纯内存隔离) */
28
+ writeSessions?(sessions: Record<string, SessionModeState>): void;
24
29
  }
25
30
  export interface PonytailStateOptions {
26
31
  /** 可选注入的存储适配器;缺省时使用内联的 DSH 配置目录磁盘实现(flag 存取已并入本模块) */
@@ -30,6 +35,15 @@ export interface PonytailStateOptions {
30
35
  * 有 settings 服务的组合由 apply 注入 settings 实现(写入落 profile 补丁)。
31
36
  */
32
37
  sink?: PonytailConfigSink;
38
+ /** profile 目录路径(由宿主 profileContext.dir 传入,用于会话状态持久化) */
39
+ profileDir?: string;
40
+ }
41
+ export interface SessionModeState {
42
+ sessionId: string;
43
+ baselineMode: string;
44
+ effectiveMode: string | null;
45
+ lastEmittedMode: string | null;
46
+ explicitlySet?: boolean;
33
47
  }
34
48
  export interface PonytailState {
35
49
  /** 当前等级的内存视图;不触发任何文件读。null 表示关闭('off' 由 set 归一为 null) */
@@ -54,8 +68,18 @@ export interface PonytailState {
54
68
  resetToDefaults(): void;
55
69
  /** 文件优先:重读 profile 内 config.json 的 disabledSkills 重建内存 Set(外部手改文件后的收敛入口) */
56
70
  reloadDisabledSkills(): void;
71
+ /** 获取指定会话的模式状态(不存在则原子捕获当前基线新建) */
72
+ getSession(sessionId?: string): SessionModeState;
73
+ /** 设置指定会话的当前生效模式 */
74
+ setSessionMode(sessionId: string | undefined, mode: string | null): void;
75
+ /** 标记指定会话已向模型发射了该模式的指令(避免重复追加通知) */
76
+ markSessionEmitted(sessionId: string | undefined, mode: string | null): void;
77
+ /** 全局配置变更时同步到已有会话的生效模式(但严禁修改 baselineMode,确保 Prompt Cache 恒定) */
78
+ syncGlobalModeToSessions(newDefaultMode: string): void;
57
79
  }
58
80
  export declare function createDiskStorage(profileDir?: string): PonytailStorage;
81
+ /** 纯内存存储适配器(用于单测与沙箱隔离,物理零磁盘触碰) */
82
+ export declare function createMemoryStorage(initialMode?: string | null): PonytailStorage;
59
83
  export declare function createPonytailState(options?: PonytailStateOptions): PonytailState;
60
84
  /**
61
85
  * 纯函数守卫:「禁用主技能 ponytail → 关闭运行等级」业务规则的唯一实现。
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-state.d.ts","sourceRoot":"","sources":["../src/ponytail-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAEhF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,KAAK,IAAI,IAAI,CAAA;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAA;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,GAAG,IAAI,MAAM,GAAG,IAAI,CAAA;IACpB,wDAAwD;IACxD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IAC9B,yDAAyD;IACzD,YAAY,IAAI,IAAI,CAAA;IACpB,uDAAuD;IACvD,UAAU,IAAI,IAAI,CAAA;IAClB,kBAAkB;IAClB,iBAAiB,IAAI,MAAM,EAAE,CAAA;IAC7B,wBAAwB;IACxB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACzC,uBAAuB;IACvB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACrC,8BAA8B;IAC9B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IACrD,qBAAqB;IACrB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,iCAAiC;IACjC,eAAe,IAAI,IAAI,CAAA;IACvB,4EAA4E;IAC5E,oBAAoB,IAAI,IAAI,CAAA;CAC7B;AASD,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe,CAsBtE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAkFjF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAExE"}
1
+ {"version":3,"file":"ponytail-state.d.ts","sourceRoot":"","sources":["../src/ponytail-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAEhF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,KAAK,IAAI,IAAI,CAAA;IACb,uCAAuC;IACvC,YAAY,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IACjD,uCAAuC;IACvC,aAAa,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,IAAI,CAAA;CACjE;AAED,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAA;IACzB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,GAAG,IAAI,MAAM,GAAG,IAAI,CAAA;IACpB,wDAAwD;IACxD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IAC9B,yDAAyD;IACzD,YAAY,IAAI,IAAI,CAAA;IACpB,uDAAuD;IACvD,UAAU,IAAI,IAAI,CAAA;IAClB,kBAAkB;IAClB,iBAAiB,IAAI,MAAM,EAAE,CAAA;IAC7B,wBAAwB;IACxB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACzC,uBAAuB;IACvB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACrC,8BAA8B;IAC9B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IACrD,qBAAqB;IACrB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,iCAAiC;IACjC,eAAe,IAAI,IAAI,CAAA;IACvB,4EAA4E;IAC5E,oBAAoB,IAAI,IAAI,CAAA;IAC5B,kCAAkC;IAClC,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAA;IAChD,oBAAoB;IACpB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IACxE,oCAAoC;IACpC,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IAC5E,iEAAiE;IACjE,wBAAwB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CACvD;AAKD,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe,CAuCtE;AAED,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,WAAW,GAAE,MAAM,GAAG,IAAW,GAAG,eAAe,CAatF;AAID,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAuMjF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAExE"}
@@ -5,6 +5,7 @@
5
5
  * - 内存态(currentMode)与 flag 文件的同步
6
6
  * - 「文件优先」与「内存赢」两种纠偏方向(由调用方选方法表达,不写死一处)
7
7
  * - off / review / 非法值的归一
8
+ * - 扩展支持多会话隔离:每个会话锁定基线模式(baselineMode),当切换模式时通过追加通知生效,保护前缀缓存
8
9
  *
9
10
  * 与 config 的关系:flag(.ponytail-active)物理存取内联于此(原 ponytail-runtime.ts 已并入,
10
11
  * C6 收敛:46 行薄壳 + 一层间接委托不如直接内联);也可由 options.storage 注入内存适配器隔离测试。
@@ -18,13 +19,10 @@ import { dirname, join } from 'node:path';
18
19
  import { normalizeMode, getConfigDir } from './ponytail-config.js';
19
20
  import { createFileSink } from './ponytail-settings.js';
20
21
  // flag 物理存取(原 src/ponytail-runtime.ts,C6 内联):profile 内 .ponytail-active
21
- //
22
- // profileDir 与 config.json 同维度:不带它时 flag 落在 $DSH_HOME/ponytail 下,被所有实例共享,
23
- // 多实例并存时 renderPromptSection 的 syncFromFile(文件优先)会把另一个实例写的档位当成本实例的
24
- // 生效档。createDiskStorage(profileDir) 由 apply() 传入 profileContext.dir。
25
22
  const STATE_FILE = '.ponytail-active';
26
23
  export function createDiskStorage(profileDir) {
27
24
  const statePath = () => join(getConfigDir(profileDir), STATE_FILE);
25
+ const sessionStatesPath = () => join(getConfigDir(profileDir), 'session-states.json');
28
26
  return {
29
27
  read: () => {
30
28
  try {
@@ -46,13 +44,81 @@ export function createDiskStorage(profileDir) {
46
44
  // ignore
47
45
  }
48
46
  },
47
+ readSessions: () => {
48
+ try {
49
+ const raw = readFileSync(sessionStatesPath(), 'utf8');
50
+ return JSON.parse(raw);
51
+ }
52
+ catch {
53
+ return {};
54
+ }
55
+ },
56
+ writeSessions: (sessions) => {
57
+ try {
58
+ mkdirSync(dirname(sessionStatesPath()), { recursive: true });
59
+ writeFileSync(sessionStatesPath(), JSON.stringify(sessions, null, 2), 'utf8');
60
+ }
61
+ catch {
62
+ // best-effort:文件写失败不阻断内存与会话
63
+ }
64
+ },
49
65
  };
50
66
  }
67
+ /** 纯内存存储适配器(用于单测与沙箱隔离,物理零磁盘触碰) */
68
+ export function createMemoryStorage(initialMode = null) {
69
+ let mode = initialMode;
70
+ const sessions = {};
71
+ return {
72
+ read: () => mode,
73
+ write: (m) => { mode = m; },
74
+ clear: () => { mode = null; },
75
+ readSessions: () => JSON.parse(JSON.stringify(sessions)),
76
+ writeSessions: (data) => {
77
+ for (const k of Object.keys(sessions))
78
+ delete sessions[k];
79
+ Object.assign(sessions, JSON.parse(JSON.stringify(data)));
80
+ },
81
+ };
82
+ }
83
+ const DEFAULT_SESSION_ID = '__default__';
51
84
  export function createPonytailState(options) {
52
- const storage = options?.storage ?? createDiskStorage();
85
+ const storage = options?.storage ?? createDiskStorage(options?.profileDir);
53
86
  let current = null;
54
- const sink = options?.sink ?? createFileSink();
87
+ const sink = options?.sink ?? createFileSink(options?.profileDir);
55
88
  let disabledSkills = new Set(sink.readDisabled());
89
+ function loadPersistedSessions() {
90
+ try {
91
+ if (typeof storage.readSessions === 'function') {
92
+ return storage.readSessions() ?? {};
93
+ }
94
+ return {};
95
+ }
96
+ catch {
97
+ return {};
98
+ }
99
+ }
100
+ function savePersistedSessions(map) {
101
+ try {
102
+ const obj = {};
103
+ for (const [k, v] of map.entries()) {
104
+ if (k !== DEFAULT_SESSION_ID)
105
+ obj[k] = v;
106
+ }
107
+ if (typeof storage.writeSessions === 'function') {
108
+ storage.writeSessions(obj);
109
+ }
110
+ }
111
+ catch {
112
+ // best-effort:存储写失败不阻断内存与会话
113
+ }
114
+ }
115
+ // 会话隔离状态表(带 LRU 上限防泄漏与持久化备份恢复)
116
+ const sessions = new Map();
117
+ const MAX_SESSIONS = 100;
118
+ function normalizeSessionKey(id) {
119
+ const trimmed = String(id ?? '').trim();
120
+ return trimmed.length > 0 ? trimmed : DEFAULT_SESSION_ID;
121
+ }
56
122
  return {
57
123
  get: () => current,
58
124
  getDisabledSkills() {
@@ -85,6 +151,7 @@ export function createPonytailState(options) {
85
151
  sink.reset();
86
152
  disabledSkills.clear();
87
153
  current = 'full';
154
+ sessions.clear();
88
155
  storage.write('full');
89
156
  },
90
157
  reloadDisabledSkills() {
@@ -105,6 +172,10 @@ export function createPonytailState(options) {
105
172
  // 单一关闭契约:'off' 与 null 都是关闭,统一为 null(删 flag)。
106
173
  current = mode === 'off' ? null : mode;
107
174
  this.syncToFile();
175
+ const defState = sessions.get(DEFAULT_SESSION_ID);
176
+ if (defState) {
177
+ defState.effectiveMode = current;
178
+ }
108
179
  },
109
180
  syncFromFile() {
110
181
  let fileMode;
@@ -127,6 +198,79 @@ export function createPonytailState(options) {
127
198
  current = null;
128
199
  }
129
200
  },
201
+ getSession(sessionId) {
202
+ const key = normalizeSessionKey(sessionId);
203
+ let state = sessions.get(key);
204
+ if (state) {
205
+ // 访问序 LRU:命中时移动至 Map 末尾,维持最新活跃度
206
+ sessions.delete(key);
207
+ sessions.set(key, state);
208
+ return state;
209
+ }
210
+ // 跨进程重启 / LRU 淘汰唤醒保护:优先从 Profile 磁盘恢复历史基线!
211
+ if (key !== DEFAULT_SESSION_ID) {
212
+ const persisted = loadPersistedSessions()[key];
213
+ if (persisted) {
214
+ state = persisted;
215
+ sessions.set(key, state);
216
+ return state;
217
+ }
218
+ }
219
+ if (sessions.size >= MAX_SESSIONS) {
220
+ // 循环找到首个非 DEFAULT_SESSION_ID 的项淘汰(彻底消除首键死锁)
221
+ for (const k of sessions.keys()) {
222
+ if (k !== DEFAULT_SESSION_ID) {
223
+ sessions.delete(k);
224
+ break;
225
+ }
226
+ }
227
+ }
228
+ // 全新会话诞生:基线锁定为当前全局模式(或 full)
229
+ const baseline = current ?? 'full';
230
+ state = {
231
+ sessionId: key,
232
+ baselineMode: baseline,
233
+ effectiveMode: baseline,
234
+ lastEmittedMode: baseline,
235
+ explicitlySet: false,
236
+ };
237
+ sessions.set(key, state);
238
+ savePersistedSessions(sessions);
239
+ return state;
240
+ },
241
+ setSessionMode(sessionId, mode) {
242
+ const key = normalizeSessionKey(sessionId);
243
+ const session = this.getSession(key);
244
+ const normalized = mode === 'off' ? null : normalizeMode(mode ?? '') ?? mode;
245
+ session.effectiveMode = normalized;
246
+ session.explicitlySet = true; // 用户在该会话内显式输入过命令,标记保护
247
+ savePersistedSessions(sessions);
248
+ if (key === DEFAULT_SESSION_ID) {
249
+ current = normalized;
250
+ this.syncToFile();
251
+ }
252
+ },
253
+ markSessionEmitted(sessionId, mode) {
254
+ const key = normalizeSessionKey(sessionId);
255
+ const session = this.getSession(key);
256
+ session.lastEmittedMode = mode === 'off' ? null : mode;
257
+ savePersistedSessions(sessions);
258
+ },
259
+ syncGlobalModeToSessions(newDefaultMode) {
260
+ const normalized = normalizeMode(newDefaultMode);
261
+ if (!normalized)
262
+ return;
263
+ current = normalized;
264
+ this.syncToFile();
265
+ // 对已有会话:保持 baselineMode 绝对不变(保护前缀缓存);
266
+ // 仅同步那些从未显式设置过的跟随型会话,保护用户的明确意图
267
+ for (const session of sessions.values()) {
268
+ if (!session.explicitlySet) {
269
+ session.effectiveMode = normalized;
270
+ }
271
+ }
272
+ savePersistedSessions(sessions);
273
+ },
130
274
  };
131
275
  }
132
276
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-state.js","sourceRoot":"","sources":["../src/ponytail-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ponytail-state.js","sourceRoot":"","sources":["../src/ponytail-state.ts"],"names":[],"mappings":"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"}