dsh-plugin-om 0.0.4 → 0.0.6
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 +98 -39
- package/dist/compress.d.ts +17 -7
- package/dist/compress.d.ts.map +1 -1
- package/dist/config.d.ts +27 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/constants.d.ts +2 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/embedding.d.ts +47 -0
- package/dist/embedding.d.ts.map +1 -0
- package/dist/index.d.ts +9 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +1042 -187
- package/dist/logger.d.ts +13 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/model-download.d.ts +41 -0
- package/dist/model-download.d.ts.map +1 -0
- package/dist/semantic-recall.d.ts +55 -0
- package/dist/semantic-recall.d.ts.map +1 -0
- package/dist/summarize.d.ts +65 -10
- package/dist/summarize.d.ts.map +1 -1
- package/dist/types.d.ts +3 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +5 -7
- package/dist/utils.d.ts.map +1 -1
- package/models/paraphrase-multilingual-MiniLM-L12-v2/config.json +23 -0
- package/models/paraphrase-multilingual-MiniLM-L12-v2/special_tokens_map.json +15 -0
- package/models/paraphrase-multilingual-MiniLM-L12-v2/tokenizer.json +1000181 -0
- package/models/paraphrase-multilingual-MiniLM-L12-v2/tokenizer_config.json +22 -0
- package/package.json +9 -3
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Context } from './types.ts';
|
|
2
|
+
/** 插件日志门面:step=步骤级(debug,dev 输出);info/warn 始终输出(失败必达)。 */
|
|
3
|
+
export type PluginLogger = {
|
|
4
|
+
/** 步骤级日志(debug 级,仅 dev/调试环境输出)。 */
|
|
5
|
+
step(message: string): void;
|
|
6
|
+
/** 常规信息(始终输出)。 */
|
|
7
|
+
info(message: string): void;
|
|
8
|
+
/** 警告/失败(始终输出,重试与失败诊断依赖)。 */
|
|
9
|
+
warn(message: string): void;
|
|
10
|
+
};
|
|
11
|
+
/** 构建插件日志门面:统一加 PLUGIN_LABEL 前缀,step 按 debug 开关过滤。 */
|
|
12
|
+
export declare function makeLogger(ctx: Context, debug: boolean): PluginLogger;
|
|
13
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,0DAA0D;AAC1D,MAAM,MAAM,YAAY,GAAG;IACzB,mCAAmC;IACnC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kBAAkB;IAClB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,6BAA6B;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,YAAY,CAYrE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** 模型标识(models/ 下目录名 = 模型 id;transformers.js 加载时的模型名)。 */
|
|
2
|
+
export declare const EMBEDDING_MODEL_ID = "paraphrase-multilingual-MiniLM-L12-v2";
|
|
3
|
+
/** transformers.js 转换仓库(Xenova org)中量化 ONNX 文件的相对路径(相对模型目录)。 */
|
|
4
|
+
export declare const ONNX_REL = "onnx/model_quantized.onnx";
|
|
5
|
+
/** 下载返回结果。 */
|
|
6
|
+
export type DownloadResult = {
|
|
7
|
+
downloaded: boolean;
|
|
8
|
+
bytes: number;
|
|
9
|
+
target: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* HuggingFace 原始文件 URL(resolve 会 302 到 CDN,fetch 自动跟随重定向)。
|
|
13
|
+
* base 默认 huggingface.co,可用环境变量 HF_ENDPOINT 覆盖(直连受限时改用镜像,如 https://hf-mirror.com)。
|
|
14
|
+
*/
|
|
15
|
+
export declare function modelSourceUrl(id?: string, rel?: string, base?: string): string;
|
|
16
|
+
/** 本地目标文件绝对路径(<modelDir>/<rel>,缺省 <modelDir>/onnx/model_quantized.onnx)。 */
|
|
17
|
+
export declare function modelTargetPath(modelDir: string, rel?: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* 是否需要下载(纯函数,供测试)。
|
|
20
|
+
* force 强制下载;否则目标已存在即跳过。
|
|
21
|
+
*/
|
|
22
|
+
export declare function needsDownload(target: string, { force }?: {
|
|
23
|
+
force?: boolean;
|
|
24
|
+
}): boolean;
|
|
25
|
+
/** fetch 最小可用接口(全局 fetch 满足;测试注入替身,无需完整 Response)。 */
|
|
26
|
+
export type ModelFetch = (url: string) => Promise<{
|
|
27
|
+
ok: boolean;
|
|
28
|
+
status: number;
|
|
29
|
+
statusText: string;
|
|
30
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* 下载模型到 <modelDir>/onnx/model_quantized.onnx。
|
|
34
|
+
* 可注入 fetchImpl / log(供测试);失败时清理临时文件并抛出。
|
|
35
|
+
*/
|
|
36
|
+
export declare function downloadModel(modelDir: string, { force, fetchImpl, log, }?: {
|
|
37
|
+
force?: boolean;
|
|
38
|
+
fetchImpl?: ModelFetch;
|
|
39
|
+
log?: (message: string) => void;
|
|
40
|
+
}): Promise<DownloadResult>;
|
|
41
|
+
//# sourceMappingURL=model-download.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-download.d.ts","sourceRoot":"","sources":["../src/model-download.ts"],"names":[],"mappings":"AAgBA,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,0CAA0C,CAAC;AAE1E,gEAAgE;AAChE,eAAO,MAAM,QAAQ,8BAA8B,CAAC;AAEpD,cAAc;AACd,MAAM,MAAM,cAAc,GAAG;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpF;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,EAAE,GAAE,MAA2B,EAC/B,GAAG,GAAE,MAAiB,EACtB,IAAI,GAAE,MAA4D,GACjE,MAAM,CAER;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAE,MAAiB,GAAG,MAAM,CAEhF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,EAAE,KAAa,EAAE,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1C,OAAO,CAQT;AAED,sDAAsD;AACtD,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;CACrC,CAAC,CAAC;AAEH;;;GAGG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,EACE,KAAa,EACb,SAAiB,EACjB,GAAiB,GAClB,GAAE;IACD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B,GACL,OAAO,CAAC,cAAc,CAAC,CAwBzB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* recall-semantic 工具:按自然语言 query 对会话全部消息日志(含被压缩/遮蔽的
|
|
3
|
+
* user/assistant/tool-result 事件)做语义检索,返回最匹配的完整消息与匹配说明。
|
|
4
|
+
*
|
|
5
|
+
* - 参数:query 必填;top_k(默认 3,1-10);start_id/end_id/offset 限定检索区间
|
|
6
|
+
* (意义同 recall:start_id 为基准边界,end_id 与 offset 二选一;end_id 优先)。
|
|
7
|
+
* - 区间缺省(start_id 未提供)→ 检索全部消息;区间不合法(id 不存在等)→
|
|
8
|
+
* 不报错,回退全量检索并在输出中明确告知(模型可见)。
|
|
9
|
+
* - 向量:本地 ONNX embedding(embedding.ts,懒加载 + 批量);相似度 = cosine。
|
|
10
|
+
* - 输出:命中消息的 message_id/seq/类型 + 完整渲染文本 + 匹配说明(相似度、
|
|
11
|
+
* 命中的关键词);超大结果由 tool-result-pruner 裁剪(同 recall)。
|
|
12
|
+
* - 仅主会话可用(subagent 拒绝,与 recall 一致)。
|
|
13
|
+
*/
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
import { type EmbedFn, type ModelStatus } from './embedding.ts';
|
|
16
|
+
import type { MessageIndex, ToolDefinition } from './types.ts';
|
|
17
|
+
/** recall-semantic 工具参数 schema:query 必填;top_k 默认 3(1-10);区间参数均可选。 */
|
|
18
|
+
export declare const semanticRecallArgsSchema: z.ZodObject<{
|
|
19
|
+
query: z.ZodString;
|
|
20
|
+
top_k: z.ZodOptional<z.ZodNumber>;
|
|
21
|
+
start_id: z.ZodOptional<z.ZodString>;
|
|
22
|
+
end_id: z.ZodOptional<z.ZodString>;
|
|
23
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
/** recall-semantic 工具调用参数(由 semanticRecallArgsSchema 推断)。 */
|
|
26
|
+
export type SemanticRecallArgs = z.infer<typeof semanticRecallArgsSchema>;
|
|
27
|
+
/** 解析并校验参数:失败时抛出可读错误(普通 Error 而非 ZodError)。 */
|
|
28
|
+
export declare function parseSemanticRecallArgs(raw: unknown): SemanticRecallArgs;
|
|
29
|
+
/** 区间解析结果:lo/hi 为消息序列下标(含);fallback=true 表示区间无效已回退全量。 */
|
|
30
|
+
export type RangeResult = {
|
|
31
|
+
lo: number;
|
|
32
|
+
hi: number;
|
|
33
|
+
fallback: boolean;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* 解析检索区间(消息序列下标,含端点)。
|
|
37
|
+
* - start_id 未提供 → 全量(fallback=false)。
|
|
38
|
+
* - start_id 提供:end_id/offset 计算终点(语义同 recall,end_id 优先);
|
|
39
|
+
* start_id/end_id 不存在或区间为空 → fallback=true(全量 + 提示)。
|
|
40
|
+
*/
|
|
41
|
+
export declare function resolveSemanticRange(index: MessageIndex, args: Pick<SemanticRecallArgs, 'start_id' | 'end_id' | 'offset'>): RangeResult;
|
|
42
|
+
/** 简易分词:按非字母数字切分为小写词元(匹配要点用,非检索核心)。 */
|
|
43
|
+
export declare function tokenize(text: string): Set<string>;
|
|
44
|
+
/** 命中消息的匹配说明行:相似度 + 与 query 共有的关键词(最多 8 个)。 */
|
|
45
|
+
export declare function matchExplanation(query: string, text: string, score: number): string;
|
|
46
|
+
/** 模型未就绪时返回给模型的文案(告知即可;下载完成后无需另行通知,直接再次调用)。 */
|
|
47
|
+
export declare const SEMANTIC_MODEL_NOT_READY_MESSAGE = "\u8BED\u4E49\u68C0\u7D22\u6682\u4E0D\u53EF\u7528\uFF1A\u672C\u5730\u5D4C\u5165\u6A21\u578B\u5C1A\u672A\u5C31\u7EEA\uFF08\u6B63\u5728\u540E\u53F0\u4E0B\u8F7D\u7EA6 113MB\uFF1B\u4E0B\u8F7D\u5B8C\u6210\u540E\u65E0\u9700\u63D0\u793A\uFF0C\u76F4\u63A5\u518D\u6B21\u8C03\u7528\u672C\u5DE5\u5177\u5373\u53EF\u3002\u82E5\u4E0B\u8F7D\u5931\u8D25\uFF0C\u4E0B\u6B21\u8C03\u7528\u4F1A\u81EA\u52A8\u91CD\u8BD5\uFF09\u3002\u53EF\u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u5148\u7528 recall \u5DE5\u5177\u6309 message_id \u7CBE\u786E\u68C0\u7D22\u3002";
|
|
48
|
+
/** 构建 recall-semantic 工具定义(embedder/modelStatus 可注入,测试传替身;缺省用本地模型)。 */
|
|
49
|
+
export declare function buildSemanticRecallTool(options?: {
|
|
50
|
+
getPruner?: () => unknown;
|
|
51
|
+
embedder?: EmbedFn;
|
|
52
|
+
/** 模型就绪检查(缺省视为已就绪;未就绪时返回告知文案而非报错)。 */
|
|
53
|
+
modelStatus?: () => ModelStatus | Promise<ModelStatus>;
|
|
54
|
+
}): ToolDefinition;
|
|
55
|
+
//# sourceMappingURL=semantic-recall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-recall.d.ts","sourceRoot":"","sources":["../src/semantic-recall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAoB,KAAK,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE/F,OAAO,KAAK,EAAW,YAAY,EAAE,cAAc,EAAkB,MAAM,YAAY,CAAC;AAGxF,qEAAqE;AACrE,eAAO,MAAM,wBAAwB;;;;;;iBAUjC,CAAC;AAEL,6DAA6D;AAC7D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,+CAA+C;AAC/C,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,CAWxE;AAED,yDAAyD;AACzD,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAExE;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAC/D,WAAW,CA4Bb;AAED,uCAAuC;AACvC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAOlD;AAED,+CAA+C;AAC/C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAcnF;AAED,+CAA+C;AAC/C,eAAO,MAAM,gCAAgC,uhBACqE,CAAC;AAEnH,uEAAuE;AACvE,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IAChD,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACxD,GAAG,cAAc,CA0IjB"}
|
package/dist/summarize.d.ts
CHANGED
|
@@ -1,28 +1,83 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 摘要调用(OM 观察/反思):直连 ctx.llm.stream(),由配置 summaryMode 控制模式——
|
|
3
|
+
* - fork(缺省):fork 会话风格——复用主会话请求前缀。system/tools 取自主会话
|
|
4
|
+
* requestHeader(),messages = 主会话完整派生历史(从尾部之前实际截断,尾部不注入)
|
|
5
|
+
* + 末尾追加一条指令 user 消息,充分利用 provider 前缀缓存(与宿主 compaction-basic
|
|
6
|
+
* 同款策略);
|
|
7
|
+
* - new:新开会话风格——指令作为 system 提示词,被压缩消息(由 compress.ts 渲染传入)
|
|
8
|
+
* 作为 user 消息输入模型压缩;
|
|
9
|
+
* - disable:关闭自动压缩(compress.ts 早退,不发起摘要调用)。
|
|
10
|
+
*
|
|
11
|
+
* 提示词不内嵌消息全文(fork 模式完整历史随请求传入;new 模式由 compress.ts 渲染
|
|
12
|
+
* 区间传入);message_id 对照表与中断标记由插件从日志计算后内嵌(id 非原文,保留关键 id
|
|
13
|
+
* 供 recall 检索)。token usage 从流式响应的 usage chunk 提取,归入主会话记录。
|
|
14
|
+
* 仅主会话生效(index.ts 守卫)。
|
|
15
|
+
*/
|
|
16
|
+
import type { SummaryMode } from './config.ts';
|
|
17
|
+
import type { Agent, Context, Session, TokenUsage } from './types.ts';
|
|
18
|
+
import { type RoutedTarget } from './utils.ts';
|
|
2
19
|
/** 观察者 persona:只针对未压缩消息产出观察日志,不用工具、不展示思考。 */
|
|
3
20
|
export declare const OBSERVER_PERSONA = "\u4F60\u662F dsh-plugin-om \u7684\u4E0A\u4E0B\u6587\u89C2\u5BDF\u8005\uFF08Observer\uFF0C\u673A\u5236\u53C2\u8003 Mastra Observational Memory\uFF09\uFF1A\u628A\u4F1A\u8BDD\u4E2D\u5C1A\u672A\u538B\u7F29\u7684\u6D88\u606F\u538B\u7F29\u4E3A\u4E00\u4EFD\u89C2\u5BDF\u65E5\u5FD7\u3002\u4E0D\u7528\u5DE5\u5177\u3001\u4E0D\u5C55\u793A\u601D\u8003\u3001\u4E0D\u8BC4\u4EF7\u4EE3\u7801\u3001\u4E0D\u8F93\u51FA\u591A\u4F59\u6587\u5B57\u3002";
|
|
4
21
|
/** 反思者 persona:只精简合并当前摘要,不用工具、不展示思考。 */
|
|
5
22
|
export declare const REFLECTOR_PERSONA = "\u4F60\u662F dsh-plugin-om \u7684\u4E0A\u4E0B\u6587\u53CD\u601D\u8005\uFF08Reflector\uFF0C\u673A\u5236\u53C2\u8003 Mastra Observational Memory\uFF09\uFF1A\u628A\u5F53\u524D <om-history> \u538B\u7F29\u65E5\u5FD7\u7CBE\u7B80\u5408\u5E76\u4E3A\u4E00\u4EFD\u66F4\u7D27\u51D1\u7684\u65E5\u5FD7\u3002\u4E0D\u7528\u5DE5\u5177\u3001\u4E0D\u5C55\u793A\u601D\u8003\u3001\u4E0D\u8F93\u51FA\u591A\u4F59\u6587\u5B57\u3002";
|
|
6
23
|
/** 观察提示词参数(对照表/中断标记由 compress.ts 从日志计算后传入)。 */
|
|
7
24
|
export type ObservePromptOptions = {
|
|
8
|
-
/** message_id
|
|
25
|
+
/** message_id 对照表行(按序对应消息记录中的未压缩消息)。 */
|
|
9
26
|
table: string[];
|
|
10
27
|
/** 中断标记行(aborted/interrupted 轮次)。 */
|
|
11
28
|
interruptions: string[];
|
|
12
29
|
/** 是否存在旧摘要(决定「追加到上次产物末尾」的表述)。 */
|
|
13
30
|
hasOldHistory: boolean;
|
|
31
|
+
/** 摘要模式:fork=完整历史随请求传入;new=被压缩消息渲染为输入。 */
|
|
32
|
+
mode: SummaryMode;
|
|
14
33
|
};
|
|
15
34
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
35
|
+
* 构建观察指令主体:任务声明(fork:停止任务/禁止工具;new:说明总结日志)+ 模式相关
|
|
36
|
+
* 的上下文定位与压缩范围(fork:上方完整会话记录——尾部已在输入中实际截断,提示词不含
|
|
37
|
+
* 尾部规则;new:下方消息即压缩对象)+ 规则(用户消息完整保留原文 / AI 消息模块化压缩
|
|
38
|
+
* ——工具调用按目的聚合——不限于 run_code / 倾向于新消息 / 中断标注 / 未完成写进度与
|
|
39
|
+
* 下一步)+ 输出格式(合法 XML)+ 对照表 + 中断标记 + 追加说明。persona 由调用方拼接
|
|
40
|
+
* 到指令开头。
|
|
19
41
|
*/
|
|
20
42
|
export declare function buildObservePrompt(options: ObservePromptOptions): string;
|
|
21
|
-
/**
|
|
22
|
-
|
|
43
|
+
/** 构建反思指令主体:任务声明(fork:停止任务/禁止工具;new:说明总结日志)+ 精简合并
|
|
44
|
+
* 当前 <om-history> 的规则 + 输出格式(合法 XML);消息记录全文由请求(fork)或渲染输入(new)提供。 */
|
|
45
|
+
export declare function buildReflectPrompt(mode: SummaryMode): string;
|
|
46
|
+
/**
|
|
47
|
+
* 摘要调用结果:文本 + 可选 token usage(摘要请求自身消耗,随 compaction/summary
|
|
48
|
+
* 归入主会话记录)。
|
|
49
|
+
*/
|
|
50
|
+
export type SummarySubagentResult = {
|
|
51
|
+
text: string;
|
|
52
|
+
usage?: TokenUsage;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* 渲染表层消息记录(new 模式输入):按表层顺序分组为合法 XML——
|
|
56
|
+
* - 用户消息 → <user_message id="(message_id)">(原文)</user_message>;
|
|
57
|
+
* - 连续 AI 消息(assistant/message 与其后的 tool/result)聚合为一个
|
|
58
|
+
* <assistant last_id="(组内最后一条消息的 message_id)">(各消息文本)</assistant>。
|
|
59
|
+
* 组内文本沿用 role 头 + message_id + 文本(tool-call 展开参数、tool-result 取文本)。
|
|
60
|
+
*/
|
|
61
|
+
export declare function renderMessages(session: Session, seqs: readonly number[]): string;
|
|
62
|
+
/** 日志最小有效长度:<om-history> 中间内容小于该长度视为不合法(C 段校验)。 */
|
|
63
|
+
export declare const MIN_HISTORY_LENGTH = 10;
|
|
64
|
+
/** 产出日志后插入首个 <om-history> 后的格式说明(XML 注释,避免被误读为日志条目)。 */
|
|
65
|
+
export declare const HISTORY_FORMAT_NOTE = "<!-- <user_message>\u5757\u5185\u5305\u542B\u4E86\u7528\u6237\u7684\u539F\u6587 id\u8868\u793A\u8BE5\u6D88\u606F\u7684id\uFF1B<assistant>\u5757\u662F\u591A\u6761ai\u8FDE\u7EED\u6D88\u606F\u7684\u805A\u5408\uFF0Clast_id\u6307\u5411\u6700\u540E\u4E00\u6761\u6D88\u606F -->";
|
|
66
|
+
/**
|
|
67
|
+
* 从 AI 摘要输出中提取合法日志(不信任 AI 的总结结果):
|
|
68
|
+
* - 取首个 <om-history> 到最后一个 </om-history>(含两个首尾)切为日志;
|
|
69
|
+
* - 找不到、顺序颠倒(首个开标签在最后一个闭标签之后)或中间内容长度 < MIN_HISTORY_LENGTH
|
|
70
|
+
* 视为不合法(返回 null,调用方按失败重试);
|
|
71
|
+
* - 产出后在首个 <om-history> 后插入格式说明注释(HISTORY_FORMAT_NOTE)。
|
|
72
|
+
*/
|
|
73
|
+
export declare function extractSummaryLog(raw: string): string | null;
|
|
74
|
+
/** 单次摘要最多尝试次数(首次 + 失败重试,总上限;失败/未完成均重试)。 */
|
|
75
|
+
export declare const SUMMARY_MAX_ATTEMPTS = 3;
|
|
23
76
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
77
|
+
* 直连 LLM 执行一次摘要(观察或反思),返回文本与可选 token usage。
|
|
78
|
+
* 失败(抛异常 / 空输出 / 非 stop 结束)均记录日志并重试,总共最多尝试
|
|
79
|
+
* SUMMARY_MAX_ATTEMPTS 次;全部尝试失败返回 null(不产生任何日志变更)。
|
|
80
|
+
* 输出长度受 maxTokens 限制。
|
|
26
81
|
*/
|
|
27
|
-
export declare function runSummarySubagent(ctx: Context, agent: Agent,
|
|
82
|
+
export declare function runSummarySubagent(ctx: Context, agent: Agent, instruction: string, contextText: string | undefined, maxTokens: number, mode: SummaryMode, tailCount: number, target: RoutedTarget, debug: boolean, signal?: AbortSignal): Promise<SummarySubagentResult | null>;
|
|
28
83
|
//# sourceMappingURL=summarize.d.ts.map
|
package/dist/summarize.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../src/summarize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../src/summarize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAe,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,KAAK,YAAY,EAA2B,MAAM,YAAY,CAAC;AAExE,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB,kbACyF,CAAC;AAEvH,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,6ZACiG,CAAC;AAEhI,+CAA+C;AAC/C,MAAM,MAAM,oBAAoB,GAAG;IACjC,wCAAwC;IACxC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,qCAAqC;IACrC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iCAAiC;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,0CAA0C;IAC1C,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAuDxE;AAED;qEACqE;AACrE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAuC5D;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB,CAAC;AA4CF;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAoChF;AA4DD,mDAAmD;AACnD,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,wDAAwD;AACxD,eAAO,MAAM,mBAAmB,mRACyD,CAAC;AAE1F;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgB5D;AAED,2CAA2C;AAC3C,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAKtC;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CA+EvC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { Context, EventOptions, Events } from '@deepseek-ai/cordis';
|
|
9
9
|
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
10
|
+
import type { CompactionId } from '@deepseek-ai/dsh-compaction';
|
|
10
11
|
import type { ToolResultPruner } from '@deepseek-ai/dsh-compaction-tool-result-pruner';
|
|
11
|
-
import type { Message, UserMessage } from '@deepseek-ai/dsh-llm';
|
|
12
|
+
import type { Message, TokenUsage, UserMessage } from '@deepseek-ai/dsh-llm';
|
|
12
13
|
import type { Session, SessionEvent } from '@deepseek-ai/dsh-session';
|
|
13
14
|
import type { SubagentResult, SubagentRun, SubagentStartRequest } from '@deepseek-ai/dsh-subagent';
|
|
14
15
|
import type { SystemPrompt } from '@deepseek-ai/dsh-system-prompt';
|
|
@@ -20,7 +21,7 @@ export type { PluginConfig } from './config.ts';
|
|
|
20
21
|
* 官方包宿主类型再导出:插件 API 与工具签名统一从这里取型,
|
|
21
22
|
* 避免各模块直接依赖不同版本的 dsh-* 包类型面。
|
|
22
23
|
*/
|
|
23
|
-
export type { Agent, Context, EventOptions, Events, Message, Session, SessionEvent, SubagentResult, SubagentRun, SubagentStartRequest, SystemPrompt, TokenMeter, ToolDefinition, ToolResultPruner, ToolRunContext, UserMessage, };
|
|
24
|
+
export type { Agent, CompactionId, Context, EventOptions, Events, Message, Session, SessionEvent, SubagentResult, SubagentRun, SubagentStartRequest, SystemPrompt, TokenMeter, TokenUsage, ToolDefinition, ToolResultPruner, ToolRunContext, UserMessage, };
|
|
24
25
|
/**
|
|
25
26
|
* 一条消息事件(user/assistant/tool-result),带稳定 message_id;
|
|
26
27
|
* 供 recall 按 message_id 定位消息序列下标。
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACnG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7E,gDAAgD;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,YAAY,EACV,KAAK,EACL,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,MAAM,EACN,OAAO,EACP,OAAO,EACP,YAAY,EACZ,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,mBAAmB;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,IAAI,EAAE,cAAc,GAAG,mBAAmB,GAAG,aAAa,CAAC;CAC5D,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,YAAY,GAAG;IACzB,oBAAoB;IACpB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,kCAAkC;IAClC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3B,CAAC"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -8,20 +8,18 @@ import type { Session } from './types.ts';
|
|
|
8
8
|
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
9
9
|
/** 抛出带插件前缀的错误(never 返回:调用后控制流终止)。 */
|
|
10
10
|
export declare function fail(message: string): never;
|
|
11
|
-
/** 数值配置项的取值约束(assertNumber
|
|
11
|
+
/** 数值配置项的取值约束(assertNumber 的可选参数)。不做区间限制——用户提供的值按原样接受。 */
|
|
12
12
|
export type NumberConstraints = {
|
|
13
|
-
/** 允许的最小值(含),默认 0。 */
|
|
14
|
-
min?: number;
|
|
15
|
-
/** 允许的最大值(含),默认 Infinity。 */
|
|
16
|
-
max?: number;
|
|
17
13
|
/** 是否必须为整数,默认 false。 */
|
|
18
14
|
integer?: boolean;
|
|
19
15
|
};
|
|
20
16
|
/**
|
|
21
|
-
*
|
|
17
|
+
* 校验配置数值:必须是有限数(可选整数约束),不限制取值区间;
|
|
22
18
|
* 不满足时抛出带插件前缀的错误。
|
|
23
19
|
*/
|
|
24
|
-
export declare function assertNumber(name: string, value: unknown, {
|
|
20
|
+
export declare function assertNumber(name: string, value: unknown, { integer }?: NumberConstraints): void;
|
|
21
|
+
/** 校验配置字符串:必须是非空(含非空白)字符串,否则抛出带插件前缀的错误。 */
|
|
22
|
+
export declare function assertNonEmptyString(name: string, value: unknown): void;
|
|
25
23
|
/** 生成 uuid:优先 crypto.randomUUID,回退为时间戳+随机串拼接(保证唯一性)。 */
|
|
26
24
|
export declare function uuid(): string;
|
|
27
25
|
/** 提取 content 数组中的纯文本块(type === 'text' 的 block.text 拼接)。 */
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,oDAAoD;AACpD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,qCAAqC;AACrC,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAE3C;AAED,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,oDAAoD;AACpD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,qCAAqC;AACrC,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAE3C;AAED,0DAA0D;AAC1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,wBAAwB;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,EAAE,OAAe,EAAE,GAAE,iBAAsB,GAC1C,IAAI,CAKN;AAED,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAIvE;AAED,wDAAwD;AACxD,wBAAgB,IAAI,IAAI,MAAM,CAK7B;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CASpD;AAED,qEAAqE;AACrE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAe7E;AAED,8CAA8C;AAC9C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAM/C;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEvD;AAED,8CAA8C;AAC9C,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CASvE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_name_or_path": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",
|
|
3
|
+
"architectures": ["BertModel"],
|
|
4
|
+
"attention_probs_dropout_prob": 0.1,
|
|
5
|
+
"classifier_dropout": null,
|
|
6
|
+
"gradient_checkpointing": false,
|
|
7
|
+
"hidden_act": "gelu",
|
|
8
|
+
"hidden_dropout_prob": 0.1,
|
|
9
|
+
"hidden_size": 384,
|
|
10
|
+
"initializer_range": 0.02,
|
|
11
|
+
"intermediate_size": 1536,
|
|
12
|
+
"layer_norm_eps": 1e-12,
|
|
13
|
+
"max_position_embeddings": 512,
|
|
14
|
+
"model_type": "bert",
|
|
15
|
+
"num_attention_heads": 12,
|
|
16
|
+
"num_hidden_layers": 12,
|
|
17
|
+
"pad_token_id": 0,
|
|
18
|
+
"position_embedding_type": "absolute",
|
|
19
|
+
"transformers_version": "4.29.2",
|
|
20
|
+
"type_vocab_size": 2,
|
|
21
|
+
"use_cache": true,
|
|
22
|
+
"vocab_size": 250037
|
|
23
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"bos_token": "<s>",
|
|
3
|
+
"cls_token": "<s>",
|
|
4
|
+
"eos_token": "</s>",
|
|
5
|
+
"mask_token": {
|
|
6
|
+
"content": "<mask>",
|
|
7
|
+
"lstrip": true,
|
|
8
|
+
"normalized": false,
|
|
9
|
+
"rstrip": false,
|
|
10
|
+
"single_word": false
|
|
11
|
+
},
|
|
12
|
+
"pad_token": "<pad>",
|
|
13
|
+
"sep_token": "</s>",
|
|
14
|
+
"unk_token": "<unk>"
|
|
15
|
+
}
|