dsh-plugin-om 0.0.37 → 0.0.39

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 CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  ## 安装与启用
23
23
 
24
- 本插件适配 dsh 0.1.2-rc.1 及以上版本(客户端压缩卡片依赖宿主 `uiConversation` 服务)。`$DSH_HOME` 缺省为 `~/.dsh`,profile 描述 dsh 进程的启动模式。
24
+ 本插件适配 dsh 0.1.5-rc.2 及以上版本(客户端压缩卡片依赖宿主 `uiConversation` 服务)。`$DSH_HOME` 缺省为 `~/.dsh`,profile 描述 dsh 进程的启动模式。
25
25
 
26
26
  ```sh
27
27
  dsh plugin --profile <profile> add dsh-plugin-om
@@ -62,6 +62,9 @@ preset-agent 自带 compaction-basic 压缩,阈值为上下文窗口的 80%,
62
62
  | `observeThresholdTokens` | `35000` | 净压力达到该值时触发观察压缩 |
63
63
  | `reflectThresholdTokens` | `40000` | 全部 `<history>` 块 token 合计达到该值时触发反思合并 |
64
64
  | `compressMaxTokens` | 不设置 | 压缩循环单轮生成上限,不设置时由模型适配器默认值决定 |
65
+ | `compressProvider` | 不设置 | 压缩请求的 provider,与 `compressModel` 成对配置才生效,只配置其一回落会话路由,成对配置后未路由会话也会执行压缩 |
66
+ | `compressModel` | 不设置 | 压缩请求的模型,与 `compressProvider` 成对配置才生效 |
67
+ | `compressReasoningEffort` | 不设置 | 压缩请求的思考等级,需为目标模型支持的等级,不设置时用模型默认;配置值不被目标模型支持时降级为模型默认并输出 `reasoning-effort-unavailable` 警告(每会话一次) |
65
68
  | `rateLimitWaitMs` | `60000` | 遇 429 限流后下一次压缩请求前的等待毫秒数,`0` 不限流 |
66
69
  | `tailMessageCount` | `20` | 观察触发后等待新增完整消息达到该条数才执行压缩,`0` 表示触发当轮立即执行 |
67
70
  | `compressSkipReasoning` | `true` | 工具循环 getHistory 输出是否携带 `<reasoning>` 参考条目,`true` 时不携带,压缩指令同步省略对应说明 |
@@ -1 +1 @@
1
- {"version":3,"file":"compaction-log.d.ts","sourceRoot":"","sources":["../src/compaction-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAoB,OAAO,EAA2B,MAAM,sBAAsB,CAAC;AAG/F,OAAO,KAAK,EAAwB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,YAAY,CAAC;AAErD,8CAA8C;AAC9C,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAS3D,8CAA8C;AAC9C,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GACf,MAAM,CAER;AAkCD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,EACxC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,gBAAgB,GACtB,MAAM,CAsBR;AAYD;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,OAAO,EACtB,OAAO,EAAE;IACP,2BAA2B;IAC3B,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACzC,iDAAiD;IACjD,MAAM,EAAE,YAAY,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,+BAA+B;IAC/B,KAAK,EAAE,gBAAgB,CAAC;IACxB,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,KAAK,EAAE,OAAO,CAAC;CAChB,GACA,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiD7B"}
1
+ {"version":3,"file":"compaction-log.d.ts","sourceRoot":"","sources":["../src/compaction-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAoB,OAAO,EAA2B,MAAM,sBAAsB,CAAC;AAG/F,OAAO,KAAK,EAAwB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,YAAY,CAAC;AAErD,8CAA8C;AAC9C,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAS3D,8CAA8C;AAC9C,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GACf,MAAM,CAER;AAkCD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,EACxC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,gBAAgB,GACtB,MAAM,CAsBR;AAYD;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,OAAO,EACtB,OAAO,EAAE;IACP,2BAA2B;IAC3B,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACzC,iDAAiD;IACjD,MAAM,EAAE,YAAY,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,+BAA+B;IAC/B,KAAK,EAAE,gBAAgB,CAAC;IACxB,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,KAAK,EAAE,OAAO,CAAC;CAChB,GACA,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkD7B"}
@@ -18,7 +18,7 @@
18
18
  * - 成功与失败均把循环消息组原样落盘为子会话(recordCompressionSession),成功记
19
19
  * 录 sessionId 于日志,失败记录作为诊断子会话 id 向上传播
20
20
  */
21
- import { type TokenUsage } from '@deepseek-ai/dsh-llm';
21
+ import { type ReasoningEffortId, type TokenUsage } from '@deepseek-ai/dsh-llm';
22
22
  import type { CompressionView } from './compress-view.ts';
23
23
  import type { Context, Session } from './types.ts';
24
24
  import { type RoutedTarget } from './utils.ts';
@@ -74,6 +74,8 @@ export type CompressionLoopOptions = {
74
74
  skipReasoning: boolean;
75
75
  /** 步骤级日志开关。 */
76
76
  debug: boolean;
77
+ /** 压缩请求的思考等级(已按目标模型校验);undefined 用模型默认。 */
78
+ reasoningEffort?: ReasoningEffortId;
77
79
  /** 取消信号。 */
78
80
  signal?: AbortSignal;
79
81
  };
@@ -1 +1 @@
1
- {"version":3,"file":"compress-loop.d.ts","sourceRoot":"","sources":["../src/compress-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compress-loop.d.ts","sourceRoot":"","sources":["../src/compress-loop.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,43 @@
1
+ /**
2
+ * 两级自动压缩(观察/反思)与 compaction 生命周期提交。
3
+ * 导出 estimateTextTokens / isPairBalancedAfter / computeCompressRange / historySection /
4
+ * findObservePending / reflectPass / observePass / maybeCompress。
5
+ *
6
+ * - 摘要生成走工具驱动的压缩循环(compress-loop.ts runCompressionLoop):首条 user
7
+ * 消息仅含压缩指令与 start/end 区间,模型经 getHistory / compressHistory /
8
+ * completeCompression 工具完成压缩;最终 <history> 块由插件从视图与替换记录构建,
9
+ * 全程无需整块校验
10
+ * - 反思:全部 <history> 块 token 合计 ≥ reflectThresholdTokens 时,把全部块条目作为
11
+ * 压缩视图重新压缩合并(视图无条目时跳过,如全部为不可解析的历史遗留块)
12
+ * - 观察(触发 → 待定 → 延迟执行):净压力(上下文压力 − 已压缩块 token 合计 − 系统提示词
13
+ * token 估算 − 工具定义 token 估算)首次 ≥ observeThresholdTokens 时记录待定标记
14
+ * (触发点 = 当时的最后一条完整消息 index),本次不压缩;待定后新增完整消息数 ≥
15
+ * tailMessageCount 时,把压缩边界至触发点的全部消息作为压缩视图替换为新 <history>
16
+ * 块(旧块保留),等待期间的新消息成为下一轮未压缩尾部(延迟窗口内压力允许
17
+ * 短暂超阈值);tailMessageCount=0 时触发当轮直接执行(不落待定标记)
18
+ * - 待定标记以 log-only om 信封事件(借用 feedback/record,kind 为 om/observe-pending /
19
+ * om/observe-invalidate,见 om-event.ts)持久化在会话日志中(重启后从日志恢复);
20
+ * 压缩失败保留待定,下个 pre-step 直接重试执行
21
+ * - 两级在 pre-step 阻塞串行执行(先反思后观察);仅主会话生效;omEnabled=false 关闭
22
+ * - 压缩目标默认跟随会话路由;compressProvider + compressModel 成对配置时覆盖路由
23
+ * (成对配置下未路由会话也执行压缩);compressReasoningEffort 配置时压缩前经
24
+ * ctx.llm.resolveModelInfo 校验目标模型 reasoning.efforts(按 provider+model 缓存),
25
+ * 未命中 / 无元数据 / 查询失败降级为模型默认并报告 reasoning-effort-unavailable 降级
26
+ * - 压缩边界:最后一个合法 <history> 块之后的消息视为未压缩,其前不重复压缩
27
+ * - 压缩循环最终失败(连续无工具调用 / 请求级错误)时 pass 返回失败结果(携带最后一次
28
+ * 错误),压缩流程向上传播,pre-step 据此拒绝本 step 中断当前 turn;signal 中止标记
29
+ * aborted(不中断);成功与失败均落盘压缩会话记录子会话(失败时其 id 随结果传播为
30
+ * 诊断子会话 id)
31
+ * - 提交走宿主 compaction/* 生命周期事件(start 带 phase → summary → 替换消息 → end),
32
+ * 失败补 end(error,实际报错 + 诊断子会话 sessionId);替换消息 source 标记插件标识供 UI 认领
33
+ * - 挂载失败类问题(systemPrompt/tokenMeter 服务异常)始终 console 到外部进程,并追加
34
+ * log-only om 警告事件(借用 feedback/record,客户端渲染功能降级警告行,每会话同一
35
+ * 问题至多一次);
36
+ * 辅助估算的普通运行时报错仅记日志。降级与报错都不阻塞压缩(tokenMeter 压力数据
37
+ * 缺失时本轮跳过观察)
38
+ */
39
+ import type { ReasoningEffortId } from '@deepseek-ai/dsh-llm';
40
+ import type { PluginLogger } from './logger.ts';
1
41
  import type { Agent, Context, PluginConfig, Session } from './types.ts';
2
42
  import { type RoutedTarget } from './utils.ts';
3
43
  /**
@@ -15,6 +55,22 @@ export type CompressPassResult = {
15
55
  };
16
56
  /** 历史文本 token 估算:4 字符 ≈ 1 token(与宿主 dsh-token-meter 启发式一致)。 */
17
57
  export declare function estimateTextTokens(text: string): number;
58
+ /**
59
+ * 压缩目标解析:compressProvider + compressModel 成对配置时覆盖会话路由;仅配置单键或
60
+ * 未配置时回落 routedTarget(会话未路由返回 undefined,压缩跳过——成对覆盖配置下
61
+ * 未路由会话仍可压缩)。
62
+ */
63
+ export declare function compressionTarget(config: Readonly<PluginConfig>, session: Session): RoutedTarget | undefined;
64
+ /** 清空压缩思考等级校验缓存(按目标缓存 resolveModelInfo 查询结果;测试隔离用)。 */
65
+ export declare function clearCompressionModelInfoCache(): void;
66
+ /**
67
+ * 校验配置的 compressReasoningEffort 并解析为压缩请求的思考等级:未配置返回 undefined
68
+ * (用模型默认,不查询模型信息);命中目标模型 reasoning.efforts 返回等级 id;
69
+ * 不在可选等级 / 模型无 reasoning 元数据 / 查询抛错时返回 undefined 并报告
70
+ * reasoning-effort-unavailable 降级。结果按 provider+model 缓存(含降级结果),避免
71
+ * 每个 pre-step 重复查询。
72
+ */
73
+ export declare function resolveCompressionEffort(ctx: Context, session: Session, config: Readonly<PluginConfig>, target: RoutedTarget, logger: PluginLogger): Promise<ReasoningEffortId | undefined>;
18
74
  /**
19
75
  * 判定表层节点 seq 之后的切点是否 tool-call/result 配对平衡:按表层顺序折叠未闭合的
20
76
  * 工具调用数,处理到 seq 后计数为 0 即平衡(防止把 tool-call 与其结果切到两侧)。
@@ -60,7 +116,7 @@ export declare function findObservePending(session: Session): {
60
116
  * 为不可解析的历史遗留块)时跳过。失败不产生部分替换;最终失败返回失败结果
61
117
  * (error = 最后一次错误)。
62
118
  */
63
- export declare function reflectPass(ctx: Context, agent: Agent, config: Readonly<PluginConfig>, target: RoutedTarget, signal?: AbortSignal): Promise<CompressPassResult>;
119
+ export declare function reflectPass(ctx: Context, agent: Agent, config: Readonly<PluginConfig>, target: RoutedTarget, signal?: AbortSignal, reasoningEffort?: ReasoningEffortId): Promise<CompressPassResult>;
64
120
  /**
65
121
  * 观察(触发 → 待定 → 延迟执行):无活跃待定标记时测净压力 tokens(上下文压力 − 已压缩
66
122
  * <history> 块 token 合计 − 系统提示词 token 估算 − 工具定义 token 估算),首次 ≥
@@ -71,7 +127,7 @@ export declare function reflectPass(ctx: Context, agent: Agent, config: Readonly
71
127
  * 失败保留待定,下个 pre-step 直接重试执行。最终失败返回失败结果
72
128
  * (error = 最后一次错误)。
73
129
  */
74
- export declare function observePass(ctx: Context, agent: Agent, config: Readonly<PluginConfig>, waitCount: number, target: RoutedTarget, signal?: AbortSignal): Promise<CompressPassResult>;
130
+ export declare function observePass(ctx: Context, agent: Agent, config: Readonly<PluginConfig>, waitCount: number, target: RoutedTarget, signal?: AbortSignal, reasoningEffort?: ReasoningEffortId): Promise<CompressPassResult>;
75
131
  /**
76
132
  * 压力检查 + 两级压缩入口:先反思后观察,pre-step 阻塞串行执行;仅主会话生效。
77
133
  * 反思摘要耗尽失败时直接返回失败结果(观察无需继续,本轮将被拒绝);观察失败同样
@@ -1 +1 @@
1
- {"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAoDA,OAAO,KAAK,EACV,KAAK,EAKL,OAAO,EACP,YAAY,EACZ,OAAO,EAIR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAgB,KAAK,YAAY,EAAqC,MAAM,YAAY,CAAC;AAEhG;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,KAAK,CAAA;CAAE,GACjB;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpF,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAmED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAY1E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,MAAM,GACtB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CA+BpE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG;IAChD,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,CAUA;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,GACf;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAoB1D;AA0ID;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAuH7B;AAwED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAgO7B;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAwB7B"}
1
+ {"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -22,6 +22,12 @@ export type PluginConfig = {
22
22
  semanticRecallEnabled: boolean;
23
23
  /** 语义召回嵌入模型目录。 */
24
24
  modelDir: string;
25
+ /** 压缩请求覆盖的 provider(与 compressModel 成对生效,任一缺失回落会话路由)。 */
26
+ compressProvider: string | undefined;
27
+ /** 压缩请求覆盖的 model(与 compressProvider 成对生效,任一缺失回落会话路由)。 */
28
+ compressModel: string | undefined;
29
+ /** 压缩请求的思考等级(配置值不被目标模型支持时降级为模型默认并告警)。 */
30
+ compressReasoningEffort: string | undefined;
25
31
  };
26
32
  /** 默认配置(冻结对象,resolveConfig 合并的基底;debug 缺省值在解析时按 NODE_ENV 判定)。 */
27
33
  export declare const DEFAULT_CONFIG: Readonly<PluginConfig>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,kCAAkC;AAClC,MAAM,MAAM,YAAY,GAAG;IACzB,oCAAoC;IACpC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,wDAAwD;IACxD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,gBAAgB,EAAE,MAAM,CAAC;IACzB,oEAAoE;IACpE,qBAAqB,EAAE,OAAO,CAAC;IAC/B,uBAAuB;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,KAAK,EAAE,OAAO,CAAC;IACf,sBAAsB;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,+CAA+C;IAC/C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,YAAY,CAYhD,CAAC;AAmCH,wCAAwC;AACxC,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,CAqBnE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,kCAAkC;AAClC,MAAM,MAAM,YAAY,GAAG;IACzB,oCAAoC;IACpC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,wDAAwD;IACxD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,gBAAgB,EAAE,MAAM,CAAC;IACzB,oEAAoE;IACpE,qBAAqB,EAAE,OAAO,CAAC;IAC/B,uBAAuB;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,KAAK,EAAE,OAAO,CAAC;IACf,sBAAsB;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,+CAA+C;IAC/C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,yDAAyD;IACzD,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,yCAAyC;IACzC,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7C,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,YAAY,CAehD,CAAC;AAyCH,wCAAwC;AACxC,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,CAwBnE"}
package/dist/degrade.d.ts CHANGED
@@ -5,7 +5,9 @@ export type DegradedProblem =
5
5
  /** systemPrompt 服务未挂载(ctx.get 返回 undefined):上下文压力不扣系统提示词,观察偏早触发 */
6
6
  'systemPrompt-missing'
7
7
  /** tokenMeter 服务调用异常(measure/estimateMessage 抛错):压力估算降级,可能跳过观察压缩 */
8
- | 'tokenMeter-unavailable';
8
+ | 'tokenMeter-unavailable'
9
+ /** 配置的 compressReasoningEffort 不被压缩目标模型支持(含模型信息查询失败):本次压缩用模型默认思考等级 */
10
+ | 'reasoning-effort-unavailable';
9
11
  /** 各降级问题面向用户的简短说明(om/warning 信封载荷 message;客户端警告行直接展示)。 */
10
12
  export declare const DEGRADE_PROBLEMS: Record<DegradedProblem, string>;
11
13
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"degrade.d.ts","sourceRoot":"","sources":["../src/degrade.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,+CAA+C;AAC/C,MAAM,MAAM,eAAe;AACzB,mEAAmE;AACjE,sBAAsB;AACxB,oEAAoE;GAClE,wBAAwB,CAAC;AAE7B,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAI5D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,eAAe,GACvB,IAAI,CAiBN"}
1
+ {"version":3,"file":"degrade.d.ts","sourceRoot":"","sources":["../src/degrade.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,+CAA+C;AAC/C,MAAM,MAAM,eAAe;AACzB,mEAAmE;AACjE,sBAAsB;AACxB,oEAAoE;GAClE,wBAAwB;AAC1B,sEAAsE;GACpE,8BAA8B,CAAC;AAEnC,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAM5D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,eAAe,GACvB,IAAI,CAiBN"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,6BAA6B;AAC7B,eAAO,MAAM,IAAI,kBAAkB,CAAC;AAEpC,wDAAwD;AACxD,eAAO,MAAM,MAAM,UAA6C,CAAC;AAEjE,yCAAyC;AACzC,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAwD1D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,6BAA6B;AAC7B,eAAO,MAAM,IAAI,kBAAkB,CAAC;AAEpC,wDAAwD;AACxD,eAAO,MAAM,MAAM,UAA6C,CAAC;AAEjE,yCAAyC;AACzC,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CA4D1D"}
package/dist/index.mjs CHANGED
@@ -274,7 +274,8 @@ async function recordCompressionSession(ctx, parentSession, options) {
274
274
  if (message.role === "assistant") child.append("assistant/message", {
275
275
  turn: 0,
276
276
  step,
277
- message
277
+ message,
278
+ stream: []
278
279
  }, { surfaceOp: "append" });
279
280
  else child.append("user/message", message, { surfaceOp: "append" });
280
281
  }
@@ -8733,6 +8734,7 @@ async function runCompressionLoop(ctx, session, options) {
8733
8734
  provider: options.target.provider,
8734
8735
  model: options.target.model,
8735
8736
  ...options.maxTokens === void 0 ? {} : { maxTokens: options.maxTokens },
8737
+ ...options.reasoningEffort === void 0 ? {} : { reasoningEffort: options.reasoningEffort },
8736
8738
  sessionId: session.id,
8737
8739
  purpose: "compaction",
8738
8740
  ...options.signal === void 0 ? {} : { signal: options.signal },
@@ -8899,7 +8901,8 @@ function findOmEvents(session, kind) {
8899
8901
  /** 各降级问题面向用户的简短说明(om/warning 信封载荷 message;客户端警告行直接展示)。 */
8900
8902
  const DEGRADE_PROBLEMS = {
8901
8903
  "systemPrompt-missing": "系统提示词服务未挂载,上下文压力估算不扣除系统提示词 tokens(压缩触发会偏早)",
8902
- "tokenMeter-unavailable": "token 计量服务异常,上下文压力估算降级(可能跳过压缩或按 0 计)"
8904
+ "tokenMeter-unavailable": "token 计量服务异常,上下文压力估算降级(可能跳过压缩或按 0 计)",
8905
+ "reasoning-effort-unavailable": "配置的压缩思考等级不被压缩目标模型支持,压缩降级为模型默认思考等级"
8903
8906
  };
8904
8907
  /**
8905
8908
  * 报告一次挂载失败类降级:console.warn 始终输出到宿主进程外部;同会话同问题首次
@@ -8928,45 +8931,55 @@ function reportDegrade(session, logger, problem) {
8928
8931
  }
8929
8932
  //#endregion
8930
8933
  //#region src/compress.ts
8931
- /**
8932
- * 两级自动压缩(观察/反思)与 compaction 生命周期提交。
8933
- * 导出 estimateTextTokens / isPairBalancedAfter / computeCompressRange / historySection /
8934
- * findObservePending / reflectPass / observePass / maybeCompress。
8935
- *
8936
- * - 摘要生成走工具驱动的压缩循环(compress-loop.ts runCompressionLoop):首条 user
8937
- * 消息仅含压缩指令与 start/end 区间,模型经 getHistory / compressHistory /
8938
- * completeCompression 工具完成压缩;最终 <history> 块由插件从视图与替换记录构建,
8939
- * 全程无需整块校验
8940
- * - 反思:全部 <history> 块 token 合计 ≥ reflectThresholdTokens 时,把全部块条目作为
8941
- * 压缩视图重新压缩合并(视图无条目时跳过,如全部为不可解析的历史遗留块)
8942
- * - 观察(触发 → 待定 → 延迟执行):净压力(上下文压力 − 已压缩块 token 合计 − 系统提示词
8943
- * token 估算 − 工具定义 token 估算)首次 ≥ observeThresholdTokens 时记录待定标记
8944
- * (触发点 = 当时的最后一条完整消息 index),本次不压缩;待定后新增完整消息数 ≥
8945
- * tailMessageCount 时,把压缩边界至触发点的全部消息作为压缩视图替换为新 <history>
8946
- * 块(旧块保留),等待期间的新消息成为下一轮未压缩尾部(延迟窗口内压力允许
8947
- * 短暂超阈值);tailMessageCount=0 时触发当轮直接执行(不落待定标记)
8948
- * - 待定标记以 log-only om 信封事件(借用 feedback/record,kind 为 om/observe-pending /
8949
- * om/observe-invalidate,见 om-event.ts)持久化在会话日志中(重启后从日志恢复);
8950
- * 压缩失败保留待定,下个 pre-step 直接重试执行
8951
- * - 两级在 pre-step 阻塞串行执行(先反思后观察);仅主会话生效;omEnabled=false 关闭
8952
- * - 压缩边界:最后一个合法 <history> 块之后的消息视为未压缩,其前不重复压缩
8953
- * - 压缩循环最终失败(连续无工具调用 / 请求级错误)时 pass 返回失败结果(携带最后一次
8954
- * 错误),压缩流程向上传播,pre-step 据此拒绝本 step 中断当前 turn;signal 中止标记
8955
- * aborted(不中断);成功与失败均落盘压缩会话记录子会话(失败时其 id 随结果传播为
8956
- * 诊断子会话 id)
8957
- * - 提交走宿主 compaction/* 生命周期事件(start 带 phase → summary → 替换消息 → end),
8958
- * 失败补 end(error,实际报错 + 诊断子会话 sessionId);替换消息 source 标记插件标识供 UI 认领
8959
- * - 挂载失败类问题(systemPrompt/tokenMeter 服务异常)始终 console 到外部进程,并追加
8960
- * log-only om 警告事件(借用 feedback/record,客户端渲染功能降级警告行,每会话同一
8961
- * 问题至多一次);
8962
- * 辅助估算的普通运行时报错仅记日志。降级与报错都不阻塞压缩(tokenMeter 压力数据
8963
- * 缺失时本轮跳过观察)
8964
- */
8965
8934
  /** 历史文本 token 估算:4 字符 ≈ 1 token(与宿主 dsh-token-meter 启发式一致)。 */
8966
8935
  function estimateTextTokens(text) {
8967
8936
  return Math.ceil(text.length / 4);
8968
8937
  }
8969
8938
  /**
8939
+ * 压缩目标解析:compressProvider + compressModel 成对配置时覆盖会话路由;仅配置单键或
8940
+ * 未配置时回落 routedTarget(会话未路由返回 undefined,压缩跳过——成对覆盖配置下
8941
+ * 未路由会话仍可压缩)。
8942
+ */
8943
+ function compressionTarget(config, session) {
8944
+ if (config.compressProvider !== void 0 && config.compressModel !== void 0) return {
8945
+ provider: config.compressProvider,
8946
+ model: config.compressModel
8947
+ };
8948
+ return routedTarget(session);
8949
+ }
8950
+ /** 压缩思考等级校验缓存:provider+model → 命中的等级 id(undefined 表示降级为模型默认)。 */
8951
+ const compressionEffortCache = /* @__PURE__ */ new Map();
8952
+ /**
8953
+ * 校验配置的 compressReasoningEffort 并解析为压缩请求的思考等级:未配置返回 undefined
8954
+ * (用模型默认,不查询模型信息);命中目标模型 reasoning.efforts 返回等级 id;
8955
+ * 不在可选等级 / 模型无 reasoning 元数据 / 查询抛错时返回 undefined 并报告
8956
+ * reasoning-effort-unavailable 降级。结果按 provider+model 缓存(含降级结果),避免
8957
+ * 每个 pre-step 重复查询。
8958
+ */
8959
+ async function resolveCompressionEffort(ctx, session, config, target, logger) {
8960
+ const configured = config.compressReasoningEffort;
8961
+ if (configured === void 0) return void 0;
8962
+ const cacheKey = `${target.provider}\n${target.model}`;
8963
+ if (compressionEffortCache.has(cacheKey)) return compressionEffortCache.get(cacheKey);
8964
+ let resolved;
8965
+ try {
8966
+ const efforts = (await ctx.llm.resolveModelInfo(target.provider, target.model))?.reasoning?.efforts;
8967
+ if (Array.isArray(efforts) && efforts.some((effort) => effort?.id === configured)) {
8968
+ resolved = configured;
8969
+ logger.step(`压缩思考等级校验通过:${configured}`);
8970
+ } else {
8971
+ reportDegrade(session, logger, "reasoning-effort-unavailable");
8972
+ logger.warn(`compressReasoningEffort=${configured} 不在模型 ${target.provider}/${target.model} 的可选思考等级中,使用模型默认`);
8973
+ }
8974
+ } catch (error) {
8975
+ const message = error instanceof Error ? error.message : String(error);
8976
+ reportDegrade(session, logger, "reasoning-effort-unavailable");
8977
+ logger.warn(`压缩思考等级校验失败(${message}),使用模型默认`);
8978
+ }
8979
+ compressionEffortCache.set(cacheKey, resolved);
8980
+ return resolved;
8981
+ }
8982
+ /**
8970
8983
  * 运行压缩循环并归一化结果:失败统一追加 compaction/end(error)(携带诊断子会话 id),
8971
8984
  * 成功记会话记录日志;返回循环结果(成功时由调用方提交)。
8972
8985
  */
@@ -9033,7 +9046,7 @@ function computeCompressRange(session, endMessageIndex) {
9033
9046
  const surface = [...session.surface.nodes];
9034
9047
  if (surface.length === 0) return void 0;
9035
9048
  const { boundarySeq } = historySection(session);
9036
- const startIdx = boundarySeq === void 0 ? 0 : surface.findIndex((node) => node === boundarySeq) + 1;
9049
+ const startIdx = boundarySeq === void 0 ? 0 : surface.indexOf(SessionSeq(boundarySeq)) + 1;
9037
9050
  if (startIdx >= surface.length) return void 0;
9038
9051
  const target = indexCompleteMessages(session).find((cm) => cm.index === endMessageIndex);
9039
9052
  if (target === void 0) return void 0;
@@ -9159,7 +9172,8 @@ function appendCompactionSummary(session, data) {
9159
9172
  startedAt: data.stats.startedAt,
9160
9173
  completedAt: data.stats.completedAt,
9161
9174
  durationMs: data.stats.durationMs,
9162
- ...data.usage === void 0 ? {} : { usage: data.usage }
9175
+ ...data.usage === void 0 ? {} : { usage: data.usage },
9176
+ ...data.reasoningEffort === void 0 ? {} : { reasoningEffort: data.reasoningEffort }
9163
9177
  };
9164
9178
  return session.append("compaction/summary", payload).seq;
9165
9179
  }
@@ -9196,8 +9210,8 @@ function appendHistoryMessage(session, content, sourceEventSeqs, surfaceOp, comp
9196
9210
  session.append("user/message", message, {
9197
9211
  surfaceOp: {
9198
9212
  op: "replace",
9199
- start: SessionSeq(surfaceOp.start),
9200
- end: SessionSeq(surfaceOp.end)
9213
+ startSeq: SessionSeq(surfaceOp.startSeq),
9214
+ endSeq: SessionSeq(surfaceOp.endSeq)
9201
9215
  },
9202
9216
  sourceEventSeqs: sourceEventSeqs.map(SessionSeq)
9203
9217
  });
@@ -9208,7 +9222,7 @@ function appendHistoryMessage(session, content, sourceEventSeqs, surfaceOp, comp
9208
9222
  * 为不可解析的历史遗留块)时跳过。失败不产生部分替换;最终失败返回失败结果
9209
9223
  * (error = 最后一次错误)。
9210
9224
  */
9211
- async function reflectPass(ctx, agent, config, target, signal) {
9225
+ async function reflectPass(ctx, agent, config, target, signal, reasoningEffort) {
9212
9226
  const session = agent.session;
9213
9227
  const logger = makeLogger(ctx, config.debug);
9214
9228
  logger.step(`反思检查(反思阈值 ${config.reflectThresholdTokens} tokens)`);
@@ -9258,6 +9272,7 @@ async function reflectPass(ctx, agent, config, target, signal) {
9258
9272
  rateLimitWaitMs: config.rateLimitWaitMs,
9259
9273
  skipReasoning: config.compressSkipReasoning,
9260
9274
  debug: config.debug,
9275
+ ...reasoningEffort === void 0 ? {} : { reasoningEffort },
9261
9276
  ...signal === void 0 ? {} : { signal }
9262
9277
  }, logger, "reflect");
9263
9278
  if (!summaryResult.ok) return {
@@ -9283,13 +9298,14 @@ async function reflectPass(ctx, agent, config, target, signal) {
9283
9298
  model: target.model,
9284
9299
  maxTokens: config.compressMaxTokens,
9285
9300
  stats: summaryResult.stats,
9286
- ...summaryResult.usage === void 0 ? {} : { usage: summaryResult.usage }
9301
+ ...summaryResult.usage === void 0 ? {} : { usage: summaryResult.usage },
9302
+ ...reasoningEffort === void 0 ? {} : { reasoningEffort }
9287
9303
  });
9288
9304
  logger.step("反思提交:替换整个 <history> 块区段为合并摘要");
9289
9305
  appendHistoryMessage(session, report, [summarySeq, ...blockSeqs], {
9290
9306
  op: "replace",
9291
- start: first.seq,
9292
- end: last.seq
9307
+ startSeq: first.seq,
9308
+ endSeq: last.seq
9293
9309
  }, lifecycle.compactionId);
9294
9310
  logger.step("反思提交:追加 compaction/end");
9295
9311
  appendCompactionEnd(session, lifecycle, void 0, summaryResult.recordSessionId);
@@ -9371,7 +9387,7 @@ function measurePressureTokens(ctx, session, logger) {
9371
9387
  * 失败保留待定,下个 pre-step 直接重试执行。最终失败返回失败结果
9372
9388
  * (error = 最后一次错误)。
9373
9389
  */
9374
- async function observePass(ctx, agent, config, waitCount, target, signal) {
9390
+ async function observePass(ctx, agent, config, waitCount, target, signal, reasoningEffort) {
9375
9391
  const session = agent.session;
9376
9392
  const logger = makeLogger(ctx, config.debug);
9377
9393
  logger.step(`观察检查(观察阈值 ${config.observeThresholdTokens} tokens,延迟等待 ${waitCount} 条完整消息)`);
@@ -9479,6 +9495,7 @@ async function observePass(ctx, agent, config, waitCount, target, signal) {
9479
9495
  rateLimitWaitMs: config.rateLimitWaitMs,
9480
9496
  skipReasoning: config.compressSkipReasoning,
9481
9497
  debug: config.debug,
9498
+ ...reasoningEffort === void 0 ? {} : { reasoningEffort },
9482
9499
  ...signal === void 0 ? {} : { signal }
9483
9500
  }, logger, "observe");
9484
9501
  if (!summaryResult.ok) return {
@@ -9521,13 +9538,14 @@ async function observePass(ctx, agent, config, waitCount, target, signal) {
9521
9538
  model: target.model,
9522
9539
  maxTokens: config.compressMaxTokens,
9523
9540
  stats: summaryResult.stats,
9524
- ...usage === void 0 ? {} : { usage }
9541
+ ...usage === void 0 ? {} : { usage },
9542
+ ...reasoningEffort === void 0 ? {} : { reasoningEffort }
9525
9543
  });
9526
9544
  logger.step("观察提交:替换被压缩新消息区间为 <history>(旧块保留)");
9527
9545
  appendHistoryMessage(session, report, [summarySeq, ...replaceSeqs], {
9528
9546
  op: "replace",
9529
- start: replaceStart,
9530
- end: range.end
9547
+ startSeq: replaceStart,
9548
+ endSeq: range.end
9531
9549
  }, lifecycle.compactionId);
9532
9550
  logger.step("观察提交:追加 compaction/end");
9533
9551
  appendCompactionEnd(session, lifecycle, void 0, summaryResult.recordSessionId);
@@ -9555,21 +9573,22 @@ async function maybeCompress(ctx, agent, config, signal) {
9555
9573
  logger.step("omEnabled=false,跳过压缩");
9556
9574
  return { failed: false };
9557
9575
  }
9558
- const target = routedTarget(session);
9576
+ const target = compressionTarget(config, session);
9559
9577
  if (target === void 0) {
9560
- logger.step("会话未路由(无 provider/model),跳过压缩");
9578
+ logger.step("会话未路由(无 provider/model)且未配置压缩目标覆盖,跳过压缩");
9561
9579
  return { failed: false };
9562
9580
  }
9563
- logger.step(`会话路由:provider ${target.provider},model ${target.model}`);
9581
+ logger.step(`压缩路由:provider ${target.provider},model ${target.model}`);
9582
+ const reasoningEffort = await resolveCompressionEffort(ctx, session, config, target, logger);
9564
9583
  const waitCount = config.tailMessageCount;
9565
9584
  logger.step("反思 pass 开始");
9566
- const reflect = await reflectPass(ctx, agent, config, target, signal);
9585
+ const reflect = await reflectPass(ctx, agent, config, target, signal, reasoningEffort);
9567
9586
  if (reflect.failed) {
9568
9587
  logger.step("反思 pass 失败(本轮将被拒绝),跳过观察 pass");
9569
9588
  return reflect;
9570
9589
  }
9571
9590
  logger.step("反思 pass 结束,观察 pass 开始");
9572
- const observe = await observePass(ctx, agent, config, waitCount, target, signal);
9591
+ const observe = await observePass(ctx, agent, config, waitCount, target, signal, reasoningEffort);
9573
9592
  logger.step("观察 pass 结束,压缩流程完成");
9574
9593
  return observe;
9575
9594
  }
@@ -9792,7 +9811,10 @@ const DEFAULT_CONFIG = Object.freeze({
9792
9811
  debug: false,
9793
9812
  recallEnabled: true,
9794
9813
  semanticRecallEnabled: true,
9795
- modelDir: sharedModelDir()
9814
+ modelDir: sharedModelDir(),
9815
+ compressProvider: void 0,
9816
+ compressModel: void 0,
9817
+ compressReasoningEffort: void 0
9796
9818
  });
9797
9819
  /** 数值键校验参数表:键名 + [是否必须为整数]。 */
9798
9820
  const NUMBER_KEYS = [
@@ -9816,6 +9838,10 @@ function resolveBoolean(raw, defaultValue) {
9816
9838
  if (typeof raw === "boolean") return raw;
9817
9839
  return defaultValue;
9818
9840
  }
9841
+ /** 解析字符串配置值:非空字符串才生效,缺省 / null / 空白串 / 非字符串回退 undefined。 */
9842
+ function resolveOptionalString(raw) {
9843
+ if (typeof raw === "string" && raw.trim() !== "") return raw;
9844
+ }
9819
9845
  /** 解析合并配置:未知键忽略、不合法值回退默认值,返回冻结的完整配置。 */
9820
9846
  function resolveConfig(raw) {
9821
9847
  const input = normalizeConfigInput(raw);
@@ -9835,6 +9861,9 @@ function resolveConfig(raw) {
9835
9861
  config.semanticRecallEnabled = resolveBoolean(input.semanticRecallEnabled, true);
9836
9862
  const modelDir = input.modelDir;
9837
9863
  if (typeof modelDir === "string" && modelDir.trim() !== "") config.modelDir = modelDir;
9864
+ config.compressProvider = resolveOptionalString(input.compressProvider);
9865
+ config.compressModel = resolveOptionalString(input.compressModel);
9866
+ config.compressReasoningEffort = resolveOptionalString(input.compressReasoningEffort);
9838
9867
  return Object.freeze(config);
9839
9868
  }
9840
9869
  //#endregion
@@ -10309,7 +10338,7 @@ const inject = [
10309
10338
  function apply(ctx, config) {
10310
10339
  const resolved = resolveConfig(config);
10311
10340
  const logger = makeLogger(ctx, resolved.debug);
10312
- logger.step(`apply 启动:observeThresholdTokens=${String(resolved.observeThresholdTokens)} reflectThresholdTokens=${String(resolved.reflectThresholdTokens)} compressMaxTokens=${resolved.compressMaxTokens === void 0 ? "未设置" : String(resolved.compressMaxTokens)} tailMessageCount=${String(resolved.tailMessageCount)} omEnabled=${String(resolved.omEnabled)} debug=${String(resolved.debug)}`);
10341
+ logger.step(`apply 启动:observeThresholdTokens=${String(resolved.observeThresholdTokens)} reflectThresholdTokens=${String(resolved.reflectThresholdTokens)} compressMaxTokens=${resolved.compressMaxTokens === void 0 ? "未设置" : String(resolved.compressMaxTokens)} tailMessageCount=${String(resolved.tailMessageCount)} omEnabled=${String(resolved.omEnabled)} debug=${String(resolved.debug)} compressProvider=${resolved.compressProvider ?? "跟随会话路由"} compressModel=${resolved.compressModel ?? "跟随会话路由"} compressReasoningEffort=${resolved.compressReasoningEffort ?? "模型默认"}`);
10313
10342
  if (resolved.recallEnabled) ctx.tools.register(buildRecallTool(() => ctx.get("toolResultPruner")));
10314
10343
  if (resolved.semanticRecallEnabled) {
10315
10344
  const warnModel = (message) => ctx.logger.warn(`dsh-plugin-om: ${message}`);
package/dist/types.d.ts CHANGED
@@ -81,6 +81,8 @@ export type CompactionSummaryPayload = SessionEventMap['compaction/summary'] & {
81
81
  completedAt?: number;
82
82
  /** 压缩循环总耗时(毫秒)。 */
83
83
  durationMs?: number;
84
+ /** 摘要请求实际使用的思考等级(未配置或降级为模型默认时缺失)。 */
85
+ reasoningEffort?: string;
84
86
  };
85
87
  /**
86
88
  * 插件扩展的 compaction/end 载荷:宿主类型 + diagnosticSessionId(最后一次摘要尝试
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-om",
3
- "version": "0.0.37",
3
+ "version": "0.0.39",
4
4
  "type": "module",
5
5
  "main": "./dist/index.mjs",
6
6
  "module": "./dist/index.mjs",
@@ -65,26 +65,26 @@
65
65
  "devDependencies": {
66
66
  "@biomejs/biome": "^2.5.8",
67
67
  "@deepseek-ai/cordis": "^4.0.1",
68
- "@deepseek-ai/dsh-agent": "^0.1.2-rc.1",
69
- "@deepseek-ai/dsh-client-locale": "^0.1.2-rc.1",
70
- "@deepseek-ai/dsh-client-ui-chat": "^0.1.2-rc.1",
71
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.2-rc.1",
72
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.2-rc.1",
73
- "@deepseek-ai/dsh-client-ui-renderer": "^0.1.2-rc.1",
74
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.2-rc.1",
75
- "@deepseek-ai/dsh-code-runtime": "^0.1.2-rc.1",
76
- "@deepseek-ai/dsh-compaction": "^0.1.2-rc.1",
77
- "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.2-rc.1",
78
- "@deepseek-ai/dsh-invariants": "^0.1.2-rc.1",
79
- "@deepseek-ai/dsh-llm": "^0.1.2-rc.1",
80
- "@deepseek-ai/dsh-scope": "^0.1.2-rc.1",
81
- "@deepseek-ai/dsh-session": "^0.1.2-rc.1",
82
- "@deepseek-ai/dsh-session-projection": "0.1.2-rc.1",
83
- "@deepseek-ai/dsh-subagent": "^0.1.2-rc.1",
84
- "@deepseek-ai/dsh-system-prompt": "^0.1.2-rc.1",
85
- "@deepseek-ai/dsh-token-meter": "^0.1.2-rc.1",
86
- "@deepseek-ai/dsh-tools": "^0.1.2-rc.1",
87
- "@deepseek-ai/dsh-user-approval": "^0.1.2-rc.1",
68
+ "@deepseek-ai/dsh-agent": "^0.1.5-rc.2",
69
+ "@deepseek-ai/dsh-client-locale": "^0.1.5-rc.2",
70
+ "@deepseek-ai/dsh-client-ui-chat": "^0.1.5-rc.2",
71
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.5-rc.2",
72
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.5-rc.2",
73
+ "@deepseek-ai/dsh-client-ui-renderer": "^0.1.5-rc.2",
74
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.5-rc.2",
75
+ "@deepseek-ai/dsh-code-runtime": "^0.1.5-rc.2",
76
+ "@deepseek-ai/dsh-compaction": "^0.1.5-rc.2",
77
+ "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.5-rc.2",
78
+ "@deepseek-ai/dsh-invariants": "^0.1.5-rc.2",
79
+ "@deepseek-ai/dsh-llm": "^0.1.5-rc.2",
80
+ "@deepseek-ai/dsh-scope": "^0.1.5-rc.2",
81
+ "@deepseek-ai/dsh-session": "^0.1.5-rc.2",
82
+ "@deepseek-ai/dsh-session-projection": "0.1.5-rc.2",
83
+ "@deepseek-ai/dsh-subagent": "^0.1.5-rc.2",
84
+ "@deepseek-ai/dsh-system-prompt": "^0.1.5-rc.2",
85
+ "@deepseek-ai/dsh-token-meter": "^0.1.5-rc.2",
86
+ "@deepseek-ai/dsh-tools": "^0.1.5-rc.2",
87
+ "@deepseek-ai/dsh-user-approval": "^0.1.5-rc.2",
88
88
  "@types/node": "^22.20.0",
89
89
  "@types/react": "~18.3.1",
90
90
  "@types/react-dom": "~18.3.0",