dsh-plugin-om 0.0.6 → 0.0.9

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
@@ -4,28 +4,6 @@
4
4
 
5
5
  在 DSH 里应用 [Observational Memory](https://mastra.ai/research/observational-memory) 风格的上下文管理策略
6
6
 
7
- ## 工作原理
8
-
9
- 1. 在未压缩消息超过阈值后摘要:压缩**尾部之前**的消息并用摘要替换(尾部 `tailMessageCount` 条不压缩、不被替换、不进日志)
10
- 2. 摘要替换原始消息,并以**多个 `<om-history>` 块按序拼接**的方式追加至现有摘要(旧块原样保留,新块追加在末尾)
11
- 3. 摘要超过阈值后重新摘要(反思:精简合并现有日志块)
12
- 4. 摘要输出为**合法 XML 日志**(`<om-history>` 内 `<user_message id>` 完整保留用户原文、`<assistant last_id>` 聚合 AI 模块);插件不信任 AI 输出,取首个 `<om-history>` 到最后一个 `</om-history>`(含首尾)切为日志,找不到或中间内容过短视为不合法并按失败重试;产出后插入格式说明注释
13
- 5. 摘要过程中保留 message_id(`<user_message id>` / `<assistant last_id>`),允许模型精确 recall
14
- 6. 压缩在 `agent/pre-step` 触发(**turn 中间即可**,无需等待轮次结束):摘要直连 LLM,模式见[摘要模式](#摘要模式)——`fork`(缺省)复用主会话请求前缀(系统提示词 + 截至尾部前的消息 + 末尾指令),充分利用 provider 前缀缓存;`new` 只注入被压缩消息(XML 包裹);`disable` 关闭自动压缩
15
- 7. 提供语义召回(recall-semantic):按自然语言在全部消息日志中检索,被压缩/遮蔽的消息也可按语义找回
16
-
17
- ### 注意
18
-
19
- - recall 不截断,建议保留 `tool-result-pruner`
20
- - 默认上下文压缩插件 `compaction-basic` 到达阈值后会自动摘要,不建议和此插件一起使用
21
- - recall-semantic 使用本地多语言嵌入模型(paraphrase-multilingual-MiniLM-L12-v2,量化 ONNX),完全离线;首次调用时加载模型,之后复用。模型二进制(~113MB)不进入 git 仓库,改为**运行时按需下载**:启用 recall-semantic 且模型缺失时,插件启动即后台自动下载(不阻塞),未就绪时工具会告知模型(见[依赖策略](#依赖策略))
22
-
23
- ### 依赖策略
24
-
25
- - 复用dsh宿主提供的依赖,如 cordis / dsh-tools / zod 等
26
- - 例外:recall-semantic 的本地嵌入需要运行时依赖 `@huggingface/transformers`(transformers.js v4 + onnxruntime-node),模型小文件(config/tokenizer 等)随 npm 包分发(`models/`),onnx 二进制不做构建/发布时下载
27
- - 模型二进制:量化 ONNX 约 113MB,超过 GitHub 单文件 100MB 限制,**不进入 git 仓库**。改为**运行时按需下载**:仅当配置键 `semanticRecallEnabled` 启用且 `models/<id>/onnx/model_quantized.onnx` 缺失时,插件 apply 后台自动从 HuggingFace([Xenova 转换仓库](https://huggingface.co/Xenova/paraphrase-multilingual-MiniLM-L12-v2))下载到 `models/`(不阻塞;下载失败仅记日志,下次调用自动重试;未就绪时 `recall-semantic` 工具返回文案告知模型);本地开发也可用 `pnpm run download:model` 手动预下载(已存在则跳过,`--force` 强制重下);直连 `huggingface.co` 受限时设置环境变量 `HF_ENDPOINT=https://hf-mirror.com` 走镜像
28
-
29
7
  ## 安装与启用
30
8
 
31
9
  ### 说明
@@ -41,7 +19,12 @@
41
19
  dsh plugin --profile <profile> add dsh-plugin-om
42
20
  ```
43
21
 
44
- 需要重启dsh
22
+ > 对于 pnpm11+ 添加脚本失败的说明:
23
+ > 插件的依赖 `@huggingface/transformers` 自带原生构建脚本,pnpm 11 默认禁止依赖构建脚本,并会抛出异常。
24
+ > 把 `$DSH_HOME/profiles/<profile>/pnpm-workspace.yaml` 的 `allowBuilds` 改为 `true` 即可
25
+ > 或者使用`dsh plugin --profile <profile> add dsh-plugin-om --allow-build=onnxruntime-node --allow-build=protobufjs --allow-build=sharp`
26
+
27
+ 安装完成后,需要重启dsh
45
28
 
46
29
  可以通过`dsh --profile <profile> --dump-config`审查配置是否正确
47
30
 
@@ -76,7 +59,9 @@ dsh的"预设"分为两层,`dsh web`等同于`dsh --profile web`,调用的
76
59
 
77
60
  而`web-profile`里定义了多个"预设agent"`preset-agent` 这里主要说的是`preset-agent`的问题
78
61
 
79
- `preset-agent`配置里自带一个`compaction-basic`。由于配置注入的顺序是层级低的覆盖层级高的,所以`cordis.patch.yml`对`compaction-basic`的禁用不会生效。
62
+ `preset-agent`配置里自带一个`compaction-basic`,会在到达阈值后做简单的摘要,与此插件冲突。
63
+
64
+ 由于配置注入的顺序是层级低的覆盖层级高的,所以`cordis.patch.yml`对`compaction-basic`的禁用不会生效。
80
65
 
81
66
  此外,这个插件位于`preset-agent`的定义而非额外的安装,也无法通过`dsh plugin`卸载。
82
67
 
@@ -86,43 +71,45 @@ dsh的"预设"分为两层,`dsh web`等同于`dsh --profile web`,调用的
86
71
  - 定义不含`compaction-basic`的`preset-agent`
87
72
  - `compaction-basic`压缩阈值是80%上下文窗口,而只需要确保OM的配置中,`thresholdRatio`+`historyMergeRatio`<0.8,理论上没到强制摘要就会被OM压缩了(默认值满足这一条件)
88
73
 
89
- ## 插件配置项
74
+ ## 工作原理
90
75
 
91
- | 键 | 默认 | 含义 |
92
- | ------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
93
- | `thresholdRatio` | `0.5` | 观察阈值:未压缩消息 ≥ 窗口 × 该比例触发压缩 |
94
- | `historyMergeRatio` | `0.2` | 反思阈值:摘要 ≥ 窗口 × 该比例触发精简合并 |
95
- | `compressMaxTokens` | `4096` | 单次摘要(观察/反思调用)生成上限 |
96
- | `tailMessageCount` | `10` | 尾部保留的不压缩消息条数(不压缩、不被替换、不进摘要日志) |
97
- | `modelDir` | 打包模型 | recall-semantic 嵌入模型目录(默认插件内打包的本地模型;可指向自定义目录)。onnx 缺失时运行时自动下载到该目录 |
98
- | `summaryMode` | `fork` | 摘要模式:`fork`(缺省)/ `new` / `disable`(关闭自动压缩);非法值在插件加载时报错(见[摘要模式](#摘要模式)) |
99
- | `debug` | dev | 压缩流程步骤级(debug)日志开关:`true` 强制开启、`false` 强制关闭;缺省按 `NODE_ENV !== 'production'` 判定(dev/test 输出,生产隐藏)。**失败日志不受此开关影响,始终输出** |
100
- | `recallEnabled` | `true` | 是否注册 `recall` 工具(`false` 时禁用,不注册) |
101
- | `semanticRecallEnabled` | `true` | 是否注册 `recall-semantic` 工具(`false` 时禁用,不注册、不触发模型下载) |
76
+ 1. 在未压缩的消息到达观察阈值后,进行摘要
77
+ 2. 将新生成摘要追加到已有摘要后
78
+ 3. 如果摘要总长到达反思阈值,对其本身进行摘要
79
+ 4. 提供recall/recall-semantic两个tool进行检索
102
80
 
103
- > 数值键(`thresholdRatio` / `historyMergeRatio` / `compressMaxTokens` / `tailMessageCount`)**不做取值区间限制**(如阈值不再限定 0.01–1):用户提供的值按原样接受(仅校验为有限数,整数键另校验整数性),便于调试时设置任意值。
81
+ ### 注意
104
82
 
105
- ### 摘要模式
83
+ - recall 不截断,建议保留 `tool-result-pruner`
84
+ - recall-semantic 使用本地多语言嵌入模型(paraphrase-multilingual-MiniLM-L12-v2),
106
85
 
107
- 摘要调用由配置键 `summaryMode` 控制(缺省 `fork`;非法值在插件加载时报错):
86
+ ### 依赖策略
108
87
 
109
- - `fork`(缺省):fork 会话风格——复用主会话请求前缀——`system`/`tools` 取自主会话上次请求,`messages` = 完整派生历史**从尾部之前实际截断**(尾部 `tailMessageCount` 条不注入、不进日志)+ 末尾追加指令 user 消息,充分利用 provider 前缀缓存(与宿主 `compaction-basic` 同款策略)。
110
- - `new`:新开会话风格——指令(persona + 规则)作为 system 提示词,只注入本次要压缩的消息作为 user 消息输入模型压缩(不注入旧压缩日志、不注入尾部)。
111
- - `disable`:关闭自动压缩(观察/反思均不触发;recall 工具仍由 `recallEnabled` / `semanticRecallEnabled` 独立控制)。
88
+ - 复用dsh宿主提供的依赖,如 cordis / dsh-tools / zod
89
+ - 例外:recall-semantic 的本地嵌入需要运行时依赖 `@huggingface/transformers`(transformers.js v4 + onnxruntime-node),模型小文件(config/tokenizer 等)随 npm 包分发(`models/`),onnx 二进制不随包分发(见下)
90
+ - 模型二进制:量化 ONNX 约 113MB,超过 GitHub 单文件 100MB 限制,**不进入 git 仓库,也不随 npm 包分发**(`package.json` `files` 以 `!models/*/onnx/*.onnx` 排除,见 `tests/package-pack.test.ts`)。改为**运行时按需下载**:仅当配置键 `semanticRecallEnabled` 启用且 `models/<id>/onnx/model_quantized.onnx` 缺失时,插件 apply 后台自动从 HuggingFace([Xenova 转换仓库](https://huggingface.co/Xenova/paraphrase-multilingual-MiniLM-L12-v2))下载到 `models/`(不阻塞;下载失败仅记日志,下次调用自动重试;未就绪时 `recall-semantic` 工具返回文案告知模型);本地开发也可用 `pnpm run download:model` 手动预下载(已存在则跳过,`--force` 强制重下);直连 `huggingface.co` 受限时设置环境变量 `HF_ENDPOINT=https://hf-mirror.com` 走镜像
112
91
 
113
- 示例(禁用 recall-semantic,保留 recall;生产环境强制输出步骤日志):在 `cordis.patch.yml` 的插件配置中加入
92
+ ## 插件配置项
114
93
 
115
- ```yaml
116
- - id: dsh-plugin-om
117
- config:
118
- semanticRecallEnabled: false
119
- debug: true
120
- ```
94
+ | 键 | 默认 | 含义 |
95
+ | ----------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
96
+ | `thresholdRatio` | `0.5` | 观察阈值:未压缩消息 ≥ 窗口 × 该比例触发压缩 |
97
+ | `historyMergeRatio` | `0.2` | 反思阈值:摘要 ≥ 窗口 × 该比例触发精简合并 |
98
+ | `compressMaxTokens` | `4096` | 单次摘要(观察/反思调用)生成上限 |
99
+ | `tailMessageCount` | `10` | 尾部保留的不压缩消息条数(不压缩、不被替换、不进摘要日志) |
100
+ | `modelDir` | 打包模型 | recall-semantic 嵌入模型目录(默认插件内 `models/` 目录,仅小文件随包分发;可指向自定义目录)。onnx 缺失且启用语义召回时运行时自动下载到该目录 |
101
+ | `summaryMode` | `fork` | 摘要模式:`fork`(缺省)/ `new` / `disable`(关闭自动压缩);非法值在插件加载时报错(见[摘要模式](#摘要模式)) |
102
+ | `debug` | dev | 压缩流程步骤级(debug)日志开关:`true` 强制开启、`false` 强制关闭;缺省按 `NODE_ENV !== 'production'` 判定(dev/test 输出,生产隐藏)。**失败日志不受此开关影响,始终输出** |
103
+ | `recallEnabled` | `true` | 是否注册 `recall` 工具(`false` 时禁用,不注册) |
104
+ | `semanticRecallEnabled` | `true` | 是否注册 `recall-semantic` 工具(`false` 时禁用,不注册、不触发模型下载) |
105
+
106
+ ### 摘要模式
121
107
 
122
- ### 日志与摘要重试
108
+ 摘要调用由配置键 `summaryMode` 控制:
123
109
 
124
- - 压缩流程(路由 / 模型容量 / 阈值判定 / 区间计算 / 摘要调用 / 提交各步)逐步输出步骤级日志(`debug` 级,dev 环境默认可见,见配置键 `debug`)。
125
- - 摘要调用失败(抛异常 / 空输出 / 非 `stop` 结束)均记录日志并**自动重试,总共最多尝试 3 次**;每次失败记录尝试次数与原因,重试耗尽后记录最终失败日志。失败日志不受 dev 开关影响,始终输出。
110
+ - `fork`:从需要压缩的位置fork会话,复用前缀缓存,要求摘要
111
+ - `new`:开启一个新会话,输入需要压缩的会话,要求摘要
112
+ - `disable`:关闭OM。recall/recall-semantic 按「完整消息 index」检索(index 从 0 起、会话内全局稳定,模型可感知并可与摘要日志条目互相对应)
126
113
 
127
114
  ## npm 命令
128
115
 
@@ -135,7 +122,7 @@ dsh的"预设"分为两层,`dsh web`等同于`dsh --profile web`,调用的
135
122
  | `pnpm run download:model` | 手动预下载本地嵌入模型 ONNX(已存在跳过,`--force` 重下;运行时也会按需自动下载) |
136
123
  | `pnpm build` | |
137
124
  | `pnpm dev` | 自动打包 |
138
- | `pnpm run release` | CHANGELOG 归档 + 版本号更新 + 打 tag 推送 |
125
+ | `pnpm run release` | 先跑 check(typecheck+lint+test+build),再 CHANGELOG 归档 + 版本号更新 + 打 tag 推送 |
139
126
 
140
127
  ## 调用链和文件地图
141
128
 
@@ -146,9 +133,9 @@ src/
146
133
  │ apply(ctx, config) 三条主线(标注对应实现文件):
147
134
  │ ├─ ① resolveConfig(config) ──▶ config.ts # 配置默认值合并 + 逐键校验(留空回退默认,冻结返回)
148
135
  │ ├─ ② recallEnabled 时 ctx.tools.register(buildRecallTool(() => ctx.get('toolResultPruner')))
149
- │ │ └─▶ recall.ts # recall 工具:按 message_id 回看区间(超大结果由 pruner 裁剪)
136
+ │ │ └─▶ recall.ts # recall 工具:按完整消息 index 回看区间(超大结果由 pruner 裁剪)
150
137
  │ ├─ ③ semanticRecallEnabled 时 ctx.tools.register(buildSemanticRecallTool({ getPruner, modelStatus, embedder }))
151
- │ │ └─▶ semantic-recall.ts # recall-semantic 工具:本地嵌入按语义检索全部消息日志(含被压缩/遮蔽)
138
+ │ │ └─▶ semantic-recall.ts # recall-semantic 工具:本地嵌入按语义检索全部完整消息(含被压缩/遮蔽;区间越界回退全量)
152
139
  │ │ └─▶ embedding.ts # 本地 ONNX 嵌入:ensureModelReady 运行时按需下载(不阻塞/单飞)+ 懒加载 + 批量 embed + cosine
153
140
  │ │ └─▶ model-download.ts # 模型下载原语(URL/跳过判定/原子落盘;dev CLI 复用)
154
141
  │ └─ ④ 事件接线(仅主会话生效)
@@ -160,17 +147,17 @@ src/
160
147
  ├── types.ts # type-only:宿主类型再导出 + 领域类型(MessageNode / MessageIndex)
161
148
  ├── config.ts # 配置默认值 / 校验(缺省、null、空串回退默认值;数值键/布尔键/summaryMode/modelDir)
162
149
  ├── utils.ts # 零依赖工具函数(配置校验 / 文本渲染 / 主会话判定 / 路由解析)
163
- ├── log-index.ts # 消息索引(message_id 消息事件;recall 消费)
150
+ ├── log-index.ts # 完整消息索引(index 定位 user/assistant/toolcall 三类完整消息;recall 与摘要共用)
164
151
  ├── embedding.ts # 本地 ONNX 嵌入(@huggingface/transformers + 本地模型;运行时按需下载编排 / 懒加载 / 批量 / cosine)
165
152
  ├── model-download.ts # 模型下载原语(modelSourceUrl / needsDownload / 原子落盘;运行时与 dev CLI 共用)
166
153
  ├── summarize.ts # 观察/反思 persona + 提示词 + 直连 ctx.llm.stream() 摘要(fork/new 双模式;extractSummaryLog 提取校验;流式 usage 归入主会话)
167
154
  ├── recall.ts # recall 工具
168
155
  ├── semantic-recall.ts # recall-semantic 工具(query 语义检索 + 区间限定 + 回退全量 + 匹配说明)
169
- └── compress.ts # 两级自动压缩(测量 / mid-turn 区间计算 / 配对平衡回退 / 中断扫描 / 对照表 / source 标记判定摘要消息 / compaction/* 生命周期事件 + checkpoint 替换)
156
+ └── compress.ts # 两级自动压缩(测量 / mid-turn 区间计算 / 配对平衡回退 / source 标记判定摘要消息 / compaction/* 生命周期事件 + checkpoint 替换)
170
157
  models/
171
- └── paraphrase-multilingual-MiniLM-L12-v2/ # 嵌入模型目录(小文件随包分发;onnx 二进制由运行时按需下载到此处,不进 git)
158
+ └── paraphrase-multilingual-MiniLM-L12-v2/ # 嵌入模型目录(小文件随包分发;onnx 二进制不随包分发、由运行时按需下载到此处,不进 git)
172
159
  scripts/ # release-archive.mjs(CHANGELOG 归档)/ download-model.mjs(开发手动预下载 CLI)
173
- tests/ # vitest 单元测试(135 例)
160
+ tests/ # vitest 单元测试(140 例)
174
161
  .dsh/skills/ # 项目级 skill(feature-defect-workflow:需求/缺陷完成工作流)
175
162
  ```
176
163
 
@@ -27,19 +27,12 @@ export declare function isPairBalancedAfter(session: Session, seq: number): bool
27
27
  * 观察压缩区间:pre-step 触发时日志 call-result 完备,区间不再受 turn/end 封顶——
28
28
  * 头部 → 表层长度-1-tailCount(尾部保留 tailCount 条不压缩),当前 turn 中已完备的
29
29
  * 消息同样可压缩;区间终点回退到 tool-call/result 配对平衡点(不切段)。
30
- * lastEndSeq 仅为中断扫描提供最后一个已结束 turn 的边界(无则 -1)。
31
30
  */
32
31
  export declare function computeCompressRange(session: Session, tailCount: number): {
33
32
  start: number;
34
33
  end: number;
35
34
  shadowedSeqs: number[];
36
- lastEndSeq: number;
37
35
  } | undefined;
38
- /**
39
- * 中断标记行:范围内 turn/end 以 aborted(含 cause 类型)或 interrupted 结束的轮次
40
- * (标记用途:让摘要 AI 理解中断原因)。
41
- */
42
- export declare function scanInterruptions(session: Session, fromSeq: number, toSeq: number): string[];
43
36
  /**
44
37
  * 提取遮蔽区间内最后一次 <om-history> 压缩日志(内文 + seq)。
45
38
  * 按表层顺序(shadowedSeqs)扫描:单节点替换(反思)后摘要节点 seq 可能大于
@@ -49,12 +42,6 @@ export declare function extractHistoryText(session: Session, shadowedSeqs: reado
49
42
  text: string;
50
43
  seq: number;
51
44
  } | undefined;
52
- /**
53
- * message_id 对照表:遮蔽区间内消息事件按表层顺序产出 id 行(插件自产 user/message
54
- * 如运行时上下文快照与 <om-history> 不入表;观察摘要据此产出正确的 message_id)。
55
- * 按表层顺序(shadowedSeqs)扫描:与 extractHistoryText 同理,seq 区间扫描会漏。
56
- */
57
- export declare function buildMessageIdTable(session: Session, shadowedSeqs: readonly number[]): string[];
58
45
  /**
59
46
  * 反思:摘要 tokens ≥ 窗口 × historyMergeRatio 时,摘要调用精简合并摘要,
60
47
  * 替换单个 <om-history> 节点。失败不产生部分替换。
@@ -1 +1 @@
1
- {"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EACV,KAAK,EAEL,OAAO,EACP,YAAY,EACZ,OAAO,EAIR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAgB,KAAK,YAAY,EAAsB,MAAM,YAAY,CAAC;AAEjF,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAsBD,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GAAG;IAAE,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAA;CAAE,CAAC;AAE3E;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM,CAYzF;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAS7F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAc1E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAyBxF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB5F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAS3C;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CA6B/F;AAoGD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA+Ff;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAyIf;AAED;;;GAGG;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,IAAI,CAAC,CAwCf"}
1
+ {"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EACV,KAAK,EAEL,OAAO,EACP,YAAY,EACZ,OAAO,EAIR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAgB,KAAK,YAAY,EAAsB,MAAM,YAAY,CAAC;AAEjF,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAsBD,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GAAG;IAAE,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAA;CAAE,CAAC;AAE3E;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM,CAYzF;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAS7F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAc1E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAuBpE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAS3C;AAoGD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA+Ff;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA+Hf;AAED;;;GAGG;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,IAAI,CAAC,CAwCf"}
package/dist/index.d.ts CHANGED
@@ -3,9 +3,9 @@
3
3
  * 不依赖特定 tool mode(native / code / both 均可运行)。
4
4
  *
5
5
  * 模块:
6
- * - recall.ts recall({ start_id, end_id?, offset? }) 工具:按 message_id 回看原始会话
7
- * - semantic-recall.ts recall-semantic({ query, top_k?, start_id?, end_id?, offset? }) 工具:
8
- * 按语义在全部消息日志(含被压缩/遮蔽)中检索,返回最匹配的完整消息与匹配说明
6
+ * - recall.ts recall({ start, end?, offset? }) 工具:按完整消息 index 回看原始会话
7
+ * - semantic-recall.ts recall-semantic({ query, top_k?, start?, end?, offset? }) 工具:
8
+ * 按语义在全部完整消息(含被压缩/遮蔽)中检索,返回最匹配的完整消息与匹配说明
9
9
  * (本地 ONNX embedding,模型随插件打包,懒加载)
10
10
  * - compress.ts 自动压缩(OM 观察/反思两级阈值):pre-step 阻塞串行执行——
11
11
  * 反思(摘要 ≥ 窗口 × historyMergeRatio 时摘要调用精简合并 <om-history>)、