@aalis/plugin-agent 0.16.0 → 0.17.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.
- package/dist/helpers.d.ts +44 -25
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +119 -78
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1154 -1457
- package/dist/index.js.map +1 -1
- package/dist/locales/en.d.ts +58 -0
- package/dist/locales/en.d.ts.map +1 -0
- package/dist/locales/en.js +58 -0
- package/dist/locales/en.js.map +1 -0
- package/dist/prompt-assembly.d.ts +3 -3
- package/dist/prompt-assembly.d.ts.map +1 -1
- package/dist/prompt-assembly.js +24 -24
- package/dist/prompt-assembly.js.map +1 -1
- package/dist/session-queue.d.ts +86 -0
- package/dist/session-queue.d.ts.map +1 -0
- package/dist/session-queue.js +194 -0
- package/dist/session-queue.js.map +1 -0
- package/dist/texts.d.ts +115 -0
- package/dist/texts.d.ts.map +1 -0
- package/dist/texts.js +62 -0
- package/dist/texts.js.map +1 -0
- package/package.json +28 -21
package/dist/helpers.d.ts
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* 这些函数**不碰能力、也不碰 this**,可独立测试与替换。
|
|
5
|
-
* 拆分目的:
|
|
6
|
-
* - 让 index.ts 主类聚焦在编排/状态管理,而不是 token 估算细节
|
|
7
|
-
* - 让纯函数可被 vitest 单独覆盖(无需搭出一次激活)
|
|
8
|
-
*/
|
|
9
|
-
import type { PersonaSessionOptions } from '@aalis/api-persona';
|
|
10
|
-
import type { SessionConfig } from '@aalis/api-session-manager';
|
|
1
|
+
import type { MemoryService } from '@aalis/api-memory';
|
|
2
|
+
import type { TextRef } from '@aalis/schema-i18n';
|
|
11
3
|
import type { IncomingMessage, Message, ToolCall } from '@aalis/schema-message';
|
|
12
4
|
/**
|
|
13
5
|
* 将时间戳格式化为可读的时间标签:同年 `M/D HH:mm`,跨年 `YYYY/M/D HH:mm`。
|
|
@@ -29,31 +21,63 @@ export declare function formatTimeLabel(ts: number, now: number): string;
|
|
|
29
21
|
*/
|
|
30
22
|
export declare const INPUT_CONVENTIONS: string;
|
|
31
23
|
/**
|
|
32
|
-
* 群聊焦点指引 ——
|
|
24
|
+
* 群聊焦点指引 —— 多方房间里这一轮有被点名的输入时注入,紧贴在这一轮的输入之前,按时间与发送者账号逐条列出被点名的那几条;
|
|
25
|
+
* 插进被点名的输入时在它们之前另加一块,不改前面那块。
|
|
33
26
|
*
|
|
34
27
|
* 背景痛点:群里多人陈述某事件 E,A 突然 @bot「你怎么看 E」。bot 看到的 messages 是
|
|
35
28
|
* 「B 长篇陈述 → C 长篇陈述 → D 长篇陈述 → A 简短@」,注意力容易被最显眼的陈述吸走,
|
|
36
29
|
* 把陈述者本人当成评价主体,而不是被陈述的事件 E 本身。
|
|
37
30
|
*
|
|
38
|
-
*
|
|
31
|
+
* 解决:插一条焦点指引,明确哪几条是焦点(按时间与发送者标注认,正文里不另加标记:之后它们进历史时正文不变),并指引 LLM 区分
|
|
39
32
|
* - 评价对象(被引用 / 被讨论的事件 E)
|
|
40
33
|
* - 引用者(发言者本人)
|
|
41
34
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
35
|
+
* focus 是被点名的各条的「(时间) 发送者账号」;没有被点名的(interval/idle/proactive 没有清晰诉求主体,强加焦点反而会误导)
|
|
36
|
+
* 返回 null
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildFocusGuidance(focus: readonly string[]): Message | null;
|
|
39
|
+
/**
|
|
40
|
+
* 由排着的真人消息开的一轮的说明:它们是上一轮进行期间到的。quiet 为真时(多方房间里这一批全是没点名她的插话)另说没有
|
|
41
|
+
* 需要接的可以不说话;私聊、工作会话与批里有点名的照常回
|
|
42
|
+
*/
|
|
43
|
+
export declare function queuedNote(quiet: boolean): Message;
|
|
44
|
+
/**
|
|
45
|
+
* 停下标记(schema-message 的 TurnStopped):落进会话历史,让下一轮的模型知道上面这一轮没答完就停了。who 是停下的人的称呼,
|
|
46
|
+
* 没有具体的人时不给。末句不叫她接着做,接不接看之后的消息
|
|
47
|
+
*/
|
|
48
|
+
export declare function stoppedNote(who: string | undefined, turnId: string): Message;
|
|
49
|
+
/**
|
|
50
|
+
* 本轮附件有没有描述正文:附件描述里有一项去掉不带描述的附件引用(只是指针,如关了到达识别时的 `[图片 | ref:…]`)之后
|
|
51
|
+
* 还有文字。媒体识别的描述(带引用的、没落盘的、视频与音频)与文件说明都算
|
|
44
52
|
*/
|
|
45
|
-
export declare function
|
|
46
|
-
/** 估算文本的 token 数(区分中文与 ASCII) */
|
|
47
|
-
export declare function estimateTextTokens(text: string): number;
|
|
48
|
-
export declare function estimateMsgTokens(msg: Message): number;
|
|
53
|
+
export declare function hasAttachmentDescriptions(incoming: Pick<IncomingMessage, '_attachmentDescriptions'>): boolean;
|
|
49
54
|
/** 估算一组消息的总 token 数 */
|
|
50
55
|
export declare function estimateTokens(messages: Message[]): number;
|
|
51
56
|
/** 估算一组消息里历史与工具结果(system 以外的消息)的 token 数,与用量拆分的 history、toolResults 两项同一口径 */
|
|
52
57
|
export declare function estimateHistoryTokens(messages: Message[]): number;
|
|
58
|
+
/**
|
|
59
|
+
* 发给模型的会话历史丢掉活跃历史里最早的几条对话消息:条数线为 0、或对话消息不超过它时为 0;超过时按半条线成段前移。
|
|
60
|
+
* 只由对话消息的条数与条数线决定,两次前移之间不变:发出的开头逐字不变,服务商的前缀缓存才命中
|
|
61
|
+
*/
|
|
62
|
+
export declare function historyStart(count: number, limit: number): number;
|
|
63
|
+
/**
|
|
64
|
+
* 读发给模型的会话历史:活跃历史丢掉最早的 historyStart 条对话消息,余下的到末尾;count 是活跃历史里对话消息的条数(条数只数
|
|
65
|
+
* 对话消息,与 api-memory 的 countHistory 同一口径;真实回合与 token:request 的快照共用)。后端有 countHistory 时先数再按条数
|
|
66
|
+
* 只读起点之后的那一段(没超线时读最近条数线那么多条:数完到读之间进来的消息不会挤掉最早那条),没有时读全部再切,两条路是同一段
|
|
67
|
+
*/
|
|
68
|
+
export declare function readHistory(memory: Pick<MemoryService, 'getHistory' | 'countHistory'>, sessionId: string, limit?: number): Promise<{
|
|
69
|
+
messages: Message[];
|
|
70
|
+
count: number;
|
|
71
|
+
}>;
|
|
72
|
+
/**
|
|
73
|
+
* 交给模型的一条历史:她的回复带可见正文(schema-message 的 VisibleContent,落库的是结构化输出的信封时才有)时换成可见正文的
|
|
74
|
+
* 副本,免得模型照抄信封;其余原样
|
|
75
|
+
*/
|
|
76
|
+
export declare function historyForModel(m: Message): Message;
|
|
53
77
|
/** 比较两条消息是否在 role/timestamp/name/content 维度上等价(不比较 toolCalls / id) */
|
|
54
78
|
export declare function isSameMessage(a: Message, b: Message): boolean;
|
|
55
79
|
/**
|
|
56
|
-
* LLM
|
|
80
|
+
* LLM 解析失败时的可诊断说明(纯函数):给人看的文字对象,发进聊天时按会话的语言显示,写日志取 toSource。
|
|
57
81
|
*
|
|
58
82
|
* `resolveLLMModel` 拿到显式 ref 却匹配不上任何 entry 时静默返回 undefined,调用方只知道
|
|
59
83
|
* 「没拿到」。而 ref 是**包名 + 模型名**——包一改名(`plugin-deepseek` → `plugin-llm-deepseek`)、
|
|
@@ -70,12 +94,7 @@ export declare function isSameMessage(a: Message, b: Message): boolean;
|
|
|
70
94
|
export declare function describeLLMFailure(available: readonly string[], wanted?: {
|
|
71
95
|
provider?: string;
|
|
72
96
|
model?: string;
|
|
73
|
-
}, erroredProviders?: readonly string[]):
|
|
74
|
-
/**
|
|
75
|
-
* 会话解析结果 → persona 的会话选项。真实回合与 token:request 快照共用这一份构造,
|
|
76
|
-
* 快照里 persona 那一桶才会按会话实际人设与额外提示估算。无 session-manager 时给 undefined(全局默认)。
|
|
77
|
-
*/
|
|
78
|
-
export declare function toPersonaOptions(resolved: SessionConfig | undefined): PersonaSessionOptions | undefined;
|
|
97
|
+
}, erroredProviders?: readonly string[]): TextRef;
|
|
79
98
|
/**
|
|
80
99
|
* 调试日志里的工具参数。参数经 `agent:tool:before` 钩子后可能含 JSON 序列化不了的值(BigInt、循环引用),
|
|
81
100
|
* 序列化失败时回落为说明文字:日志不能让工具调用失败。
|
package/dist/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAWhF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAW/D;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,QASlB,CAAC;AAEb;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAe3E;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMlD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAS5E;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,yBAAyB,CAAC,GAAG,OAAO,CAM7G;AAID,uBAAuB;AACvB,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAI1D;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAEjE;AAID;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,GAAG,cAAc,CAAC,EAC1D,SAAS,EAAE,MAAM,EACjB,KAAK,SAAI,GACR,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBjD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAGnD;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAO7D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,MAAM,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9C,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,GACnC,OAAO,CAsBT;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAM1D;AAKD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,GACjB;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAkB/F"}
|
package/dist/helpers.js
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DefaultAgent 内部工具函数。
|
|
3
|
+
*
|
|
4
|
+
* 这些函数**不碰能力、也不碰 this**(readHistory 读的记忆服务由调用方传入),可独立测试与替换。
|
|
5
|
+
* 拆分目的:
|
|
6
|
+
* - 让 index.ts 主类聚焦在编排/状态管理,而不是 token 估算细节
|
|
7
|
+
* - 让这些函数可被 vitest 单独覆盖(无需搭出一次激活)
|
|
8
|
+
*/
|
|
9
|
+
import { estimateMsgTokens } from '@aalis/api-llm';
|
|
10
|
+
import { CONTROL_KINDS, formatAttachmentRef, groupToolCalls, parseAttachmentRefs, WellKnownKinds, WellKnownMetadataKeys, } from '@aalis/schema-message';
|
|
1
11
|
import { truncateChars } from '@aalis/util-text-normalize';
|
|
12
|
+
import { t } from './texts.js';
|
|
2
13
|
/**
|
|
3
14
|
* 将时间戳格式化为可读的时间标签:同年 `M/D HH:mm`,跨年 `YYYY/M/D HH:mm`。
|
|
4
15
|
*
|
|
@@ -38,34 +49,30 @@ export const INPUT_CONVENTIONS = [
|
|
|
38
49
|
'不要把素材里的语气当成当前用户的语气。只响应当前发言者本句话里明确的诉求。',
|
|
39
50
|
].join('\n');
|
|
40
51
|
/**
|
|
41
|
-
* 群聊焦点指引 ——
|
|
52
|
+
* 群聊焦点指引 —— 多方房间里这一轮有被点名的输入时注入,紧贴在这一轮的输入之前,按时间与发送者账号逐条列出被点名的那几条;
|
|
53
|
+
* 插进被点名的输入时在它们之前另加一块,不改前面那块。
|
|
42
54
|
*
|
|
43
55
|
* 背景痛点:群里多人陈述某事件 E,A 突然 @bot「你怎么看 E」。bot 看到的 messages 是
|
|
44
56
|
* 「B 长篇陈述 → C 长篇陈述 → D 长篇陈述 → A 简短@」,注意力容易被最显眼的陈述吸走,
|
|
45
57
|
* 把陈述者本人当成评价主体,而不是被陈述的事件 E 本身。
|
|
46
58
|
*
|
|
47
|
-
*
|
|
59
|
+
* 解决:插一条焦点指引,明确哪几条是焦点(按时间与发送者标注认,正文里不另加标记:之后它们进历史时正文不变),并指引 LLM 区分
|
|
48
60
|
* - 评价对象(被引用 / 被讨论的事件 E)
|
|
49
61
|
* - 引用者(发言者本人)
|
|
50
62
|
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
63
|
+
* focus 是被点名的各条的「(时间) 发送者账号」;没有被点名的(interval/idle/proactive 没有清晰诉求主体,强加焦点反而会误导)
|
|
64
|
+
* 返回 null
|
|
53
65
|
*/
|
|
54
|
-
export function buildFocusGuidance(
|
|
55
|
-
if (
|
|
56
|
-
return null;
|
|
57
|
-
const t = incoming.triggerType;
|
|
58
|
-
if (t !== 'direct' && t !== 'immediate')
|
|
66
|
+
export function buildFocusGuidance(focus) {
|
|
67
|
+
if (focus.length === 0)
|
|
59
68
|
return null;
|
|
60
69
|
return {
|
|
61
70
|
role: 'system',
|
|
62
71
|
content: [
|
|
63
72
|
'【当前焦点】',
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
'本轮最后一条带时间与发送者标注的消息,是触发你本轮回应的"焦点消息"。',
|
|
68
|
-
'回应前请先识别它的核心诉求类型:评价某事 / 回答提问 / 吐槽附和 / 闲聊回应。',
|
|
73
|
+
'触发你本轮回应的"焦点消息"是下面这几条(按时间与发送者标注认):',
|
|
74
|
+
...focus.map(line => `- ${line}`),
|
|
75
|
+
'回应前请先识别它们的核心诉求类型:评价某事 / 回答提问 / 吐槽附和 / 闲聊回应。',
|
|
69
76
|
'若焦点消息中通过引用、转发、@他人提及、或文字指向了一个被讨论的对象(事件、作品、',
|
|
70
77
|
'行为、观点),你的回应应当针对"被指向的对象",而不是把"陈述者本人"当成评价主体。',
|
|
71
78
|
'群里前面其他成员的长篇陈述只是背景上下文,不是焦点。',
|
|
@@ -73,49 +80,44 @@ export function buildFocusGuidance(incoming) {
|
|
|
73
80
|
metadata: { injector: 'focus-guidance' },
|
|
74
81
|
};
|
|
75
82
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
return Math.ceil(tokens);
|
|
83
|
+
/**
|
|
84
|
+
* 由排着的真人消息开的一轮的说明:它们是上一轮进行期间到的。quiet 为真时(多方房间里这一批全是没点名她的插话)另说没有
|
|
85
|
+
* 需要接的可以不说话;私聊、工作会话与批里有点名的照常回
|
|
86
|
+
*/
|
|
87
|
+
export function queuedNote(quiet) {
|
|
88
|
+
return {
|
|
89
|
+
role: 'system',
|
|
90
|
+
content: `下面几条是你上一轮进行期间到的。${quiet ? '没有需要接的可以不说话。' : ''}`,
|
|
91
|
+
metadata: { injector: 'system-other' },
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 停下标记(schema-message 的 TurnStopped):落进会话历史,让下一轮的模型知道上面这一轮没答完就停了。who 是停下的人的称呼,
|
|
96
|
+
* 没有具体的人时不给。末句不叫她接着做,接不接看之后的消息
|
|
97
|
+
*/
|
|
98
|
+
export function stoppedNote(who, turnId) {
|
|
99
|
+
const stopped = who ? `你还没答完,就被 ${who} 叫停了` : '你还没答完就被停下了';
|
|
100
|
+
return {
|
|
101
|
+
role: 'system',
|
|
102
|
+
kind: WellKnownKinds.TurnStopped,
|
|
103
|
+
content: `[已停下] 上面这一轮${stopped}:没说完的话没有留下,已经执行的工具调用以上面的记录为准。要不要接着做,看之后的消息再定。`,
|
|
104
|
+
timestamp: Date.now(),
|
|
105
|
+
metadata: { [WellKnownMetadataKeys.TurnId]: turnId },
|
|
106
|
+
};
|
|
102
107
|
}
|
|
103
|
-
/**
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
// 图片不是按 base64 长度计费的:估一个保守常量,让预算/统计/裁剪看得见它们
|
|
115
|
-
if (msg.images)
|
|
116
|
-
t += msg.images.length * IMAGE_TOKENS_ESTIMATE;
|
|
117
|
-
return t;
|
|
108
|
+
/**
|
|
109
|
+
* 本轮附件有没有描述正文:附件描述里有一项去掉不带描述的附件引用(只是指针,如关了到达识别时的 `[图片 | ref:…]`)之后
|
|
110
|
+
* 还有文字。媒体识别的描述(带引用的、没落盘的、视频与音频)与文件说明都算
|
|
111
|
+
*/
|
|
112
|
+
export function hasAttachmentDescriptions(incoming) {
|
|
113
|
+
return (incoming._attachmentDescriptions ?? []).some(desc => {
|
|
114
|
+
if (!desc)
|
|
115
|
+
return false;
|
|
116
|
+
const pointers = parseAttachmentRefs(desc).filter(ref => !ref.desc);
|
|
117
|
+
return pointers.reduce((rest, ref) => rest.replace(formatAttachmentRef(ref), ''), desc).trim() !== '';
|
|
118
|
+
});
|
|
118
119
|
}
|
|
120
|
+
// ----- Token 估算 -----
|
|
119
121
|
/** 估算一组消息的总 token 数 */
|
|
120
122
|
export function estimateTokens(messages) {
|
|
121
123
|
let total = 0;
|
|
@@ -127,6 +129,58 @@ export function estimateTokens(messages) {
|
|
|
127
129
|
export function estimateHistoryTokens(messages) {
|
|
128
130
|
return estimateTokens(messages.filter(m => m.role !== 'system'));
|
|
129
131
|
}
|
|
132
|
+
// ----- 发给模型的会话历史 -----
|
|
133
|
+
/**
|
|
134
|
+
* 发给模型的会话历史丢掉活跃历史里最早的几条对话消息:条数线为 0、或对话消息不超过它时为 0;超过时按半条线成段前移。
|
|
135
|
+
* 只由对话消息的条数与条数线决定,两次前移之间不变:发出的开头逐字不变,服务商的前缀缓存才命中
|
|
136
|
+
*/
|
|
137
|
+
export function historyStart(count, limit) {
|
|
138
|
+
if (!limit || count <= limit)
|
|
139
|
+
return 0;
|
|
140
|
+
const step = Math.ceil(limit / 2);
|
|
141
|
+
return Math.ceil((count - limit) / step) * step;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* 读发给模型的会话历史:活跃历史丢掉最早的 historyStart 条对话消息,余下的到末尾;count 是活跃历史里对话消息的条数(条数只数
|
|
145
|
+
* 对话消息,与 api-memory 的 countHistory 同一口径;真实回合与 token:request 的快照共用)。后端有 countHistory 时先数再按条数
|
|
146
|
+
* 只读起点之后的那一段(没超线时读最近条数线那么多条:数完到读之间进来的消息不会挤掉最早那条),没有时读全部再切,两条路是同一段
|
|
147
|
+
*/
|
|
148
|
+
export async function readHistory(memory, sessionId, limit = 0) {
|
|
149
|
+
let messages;
|
|
150
|
+
let count;
|
|
151
|
+
let start;
|
|
152
|
+
if (limit && memory.countHistory) {
|
|
153
|
+
count = await memory.countHistory(sessionId);
|
|
154
|
+
start = historyStart(count, limit);
|
|
155
|
+
messages = await memory.getHistory(sessionId, start ? count - start : limit);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
const all = await memory.getHistory(sessionId, Infinity);
|
|
159
|
+
const said = all.flatMap((m, i) => (CONTROL_KINDS.includes(m.kind ?? '') ? [] : [i]));
|
|
160
|
+
count = said.length;
|
|
161
|
+
start = historyStart(count, limit);
|
|
162
|
+
// 同按条数读:从丢掉的最后一条对话消息之后切,夹在它与下一条对话消息之间的标记留下
|
|
163
|
+
messages = start ? all.slice(said[start - 1] + 1) : all;
|
|
164
|
+
}
|
|
165
|
+
// 起点落在工具调用组中间:组首在起点之前已经丢掉,这一组留下的结果(第一组之前组外的结果)随它一起丢,夹在其间的别的消息照留。
|
|
166
|
+
// 之后组外的结果不是起点切出来的,与起点在不在 0 无关,照旧交给读的一方(真实回合的清洗跳过并告警)
|
|
167
|
+
const leftover = new Set();
|
|
168
|
+
for (const { at, shape } of start > 0 ? groupToolCalls(messages) : []) {
|
|
169
|
+
if (shape === 'complete' || shape === 'partial')
|
|
170
|
+
break;
|
|
171
|
+
if (shape === 'loose')
|
|
172
|
+
leftover.add(at[0]);
|
|
173
|
+
}
|
|
174
|
+
return { messages: messages.filter((_, i) => !leftover.has(i)), count };
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* 交给模型的一条历史:她的回复带可见正文(schema-message 的 VisibleContent,落库的是结构化输出的信封时才有)时换成可见正文的
|
|
178
|
+
* 副本,免得模型照抄信封;其余原样
|
|
179
|
+
*/
|
|
180
|
+
export function historyForModel(m) {
|
|
181
|
+
const visible = m.metadata?.[WellKnownMetadataKeys.VisibleContent];
|
|
182
|
+
return m.role === 'assistant' && typeof visible === 'string' ? { ...m, content: visible } : m;
|
|
183
|
+
}
|
|
130
184
|
/** 比较两条消息是否在 role/timestamp/name/content 维度上等价(不比较 toolCalls / id) */
|
|
131
185
|
export function isSameMessage(a, b) {
|
|
132
186
|
return (a.role === b.role &&
|
|
@@ -135,7 +189,7 @@ export function isSameMessage(a, b) {
|
|
|
135
189
|
(a.content ?? '') === (b.content ?? ''));
|
|
136
190
|
}
|
|
137
191
|
/**
|
|
138
|
-
* LLM
|
|
192
|
+
* LLM 解析失败时的可诊断说明(纯函数):给人看的文字对象,发进聊天时按会话的语言显示,写日志取 toSource。
|
|
139
193
|
*
|
|
140
194
|
* `resolveLLMModel` 拿到显式 ref 却匹配不上任何 entry 时静默返回 undefined,调用方只知道
|
|
141
195
|
* 「没拿到」。而 ref 是**包名 + 模型名**——包一改名(`plugin-deepseek` → `plugin-llm-deepseek`)、
|
|
@@ -153,38 +207,25 @@ export function describeLLMFailure(available, wanted, erroredProviders) {
|
|
|
153
207
|
if (available.length === 0) {
|
|
154
208
|
// 最常见的成因是 LLM 插件装了也启用了、只是缺 apiKey 而激活失败。能点名就点名,省掉用户一轮空转;
|
|
155
209
|
// 这条文案会**发进聊天**,只点名实例,原因指向 /doctor。/doctor 是受限指令,收到提示的人不一定能用,故注明要权限。
|
|
156
|
-
if (erroredProviders && erroredProviders.length > 0)
|
|
157
|
-
return
|
|
158
|
-
|
|
159
|
-
return '未找到任何具备 chat 能力的 LLM —— 请确认已安装并启用至少一个 LLM 提供者插件(如 @aalis/plugin-llm-deepseek)。';
|
|
210
|
+
if (erroredProviders && erroredProviders.length > 0)
|
|
211
|
+
return t('llmNoneErrored', { plugins: erroredProviders });
|
|
212
|
+
return t('llmNone');
|
|
160
213
|
}
|
|
161
214
|
if (wanted?.provider && wanted?.model) {
|
|
162
215
|
// 只列前 LIST_MAX 个:这条文案会**发进聊天**,而 ollama 是自动发现本机全部模型逐个注册
|
|
163
216
|
// entry 的——实测 40 个模型拼出 1874 字符,且每条消息都发一次。截断后给出总数,
|
|
164
217
|
// 想看全的去 `/model`。
|
|
165
218
|
const LIST_MAX = 5;
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
219
|
+
return t('llmNotFound', {
|
|
220
|
+
wanted: `${wanted.provider}/${wanted.model}`,
|
|
221
|
+
models: available.slice(0, LIST_MAX),
|
|
222
|
+
more: available.length > LIST_MAX ? t('llmMore', { count: available.length }) : '',
|
|
223
|
+
});
|
|
169
224
|
}
|
|
170
225
|
// ref 不全时 resolveLLM 传的是 undefined,resolveLLMModel 此时取 all[0]——只要有 entry
|
|
171
226
|
// 就必命中。所以走到这里意味着取数与解析看到的不是同一份快照(例如两次调用之间服务被
|
|
172
227
|
// 注销),**不是**「没有可用 entry」。文案要说这个,别谎称都不可用。
|
|
173
|
-
return
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* 会话解析结果 → persona 的会话选项。真实回合与 token:request 快照共用这一份构造,
|
|
177
|
-
* 快照里 persona 那一桶才会按会话实际人设与额外提示估算。无 session-manager 时给 undefined(全局默认)。
|
|
178
|
-
*/
|
|
179
|
-
export function toPersonaOptions(resolved) {
|
|
180
|
-
if (!resolved)
|
|
181
|
-
return undefined;
|
|
182
|
-
return {
|
|
183
|
-
persona: resolved.persona,
|
|
184
|
-
disableOutputFormat: resolved.disableOutputFormat,
|
|
185
|
-
clientSideJsonRendering: resolved.clientSideJsonRendering,
|
|
186
|
-
systemPromptExtra: resolved.systemPromptExtra,
|
|
187
|
-
};
|
|
228
|
+
return t('llmUnresolved', { count: available.length });
|
|
188
229
|
}
|
|
189
230
|
/**
|
|
190
231
|
* 调试日志里的工具参数。参数经 `agent:tool:before` 钩子后可能含 JSON 序列化不了的值(BigInt、循环引用),
|
package/dist/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { LLMModel } from '@aalis/api-llm';
|
|
2
|
-
import { type SessionManagerService } from '@aalis/api-session-manager';
|
|
3
2
|
import { type Logger } from '@aalis/core';
|
|
4
3
|
declare const _default: import("@aalis/core").PluginDefinition<{
|
|
5
4
|
logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => Logger, Logger>;
|
|
@@ -15,7 +14,13 @@ declare const _default: import("@aalis/core").PluginDefinition<{
|
|
|
15
14
|
memory: import("@aalis/core").OptionalUse<import("@aalis/api-memory").MemoryService, import("@aalis/api-memory").MemoryService>;
|
|
16
15
|
persona: import("@aalis/core").OptionalUse<import("@aalis/api-persona").PersonaService, import("@aalis/api-persona").PersonaService>;
|
|
17
16
|
messageArchive: import("@aalis/core").OptionalUse<import("@aalis/api-message-archive").MessageArchiveService, import("@aalis/api-message-archive").MessageArchiveService>;
|
|
18
|
-
sessionManager: import("@aalis/core").OptionalUse<SessionManagerService, import("@aalis/api-session-manager").
|
|
17
|
+
sessionManager: import("@aalis/core").OptionalUse<import("@aalis/api-session-manager").SessionManagerService, import("@aalis/api-session-manager").SessionManagerService>;
|
|
18
|
+
/** 判谁是 owner:参与者里合一 owner 的各个身份、存档不在时当轮正文的发送者前缀(与存档同一规则,speakerOf)、/stop */
|
|
19
|
+
authority: import("@aalis/core").OptionalUse<import("@aalis/api-authority").AuthorityService, import("@aalis/api-authority").AuthorityService>;
|
|
20
|
+
/** 按会话读本插件的四项(模型、深度思考、最大工具迭代、历史条数上限);缺席时只取插件配置里的值 */
|
|
21
|
+
sessionFields: import("@aalis/core").OptionalUse<import("@aalis/api-session-settings").SessionSettingsService, import("@aalis/api-session-settings").SessionFields>;
|
|
22
|
+
/** 按会话字段的全局层:宿主配置文档里本实例的那一段 */
|
|
23
|
+
document: import("@aalis/core").OptionalUse<import("@aalis/api-host-config").HostConfig, import("@aalis/api-host-config").OwnHostConfig>;
|
|
19
24
|
platform: import("@aalis/core").OptionalUse<import("@aalis/api-platform").PlatformAdapter, import("@aalis/api-platform").PlatformAdapter>;
|
|
20
25
|
media: import("@aalis/core").OptionalUse<import("@aalis/api-media").MediaService, import("@aalis/api-media").MediaService>;
|
|
21
26
|
storage: import("@aalis/core").OptionalUse<import("@aalis/api-storage").StorageService, import("@aalis/api-storage").BoundStorage>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAkC,QAAQ,EAAY,MAAM,gBAAgB,CAAC;AAwBzF,OAAO,EAKL,KAAK,MAAM,EAQZ,MAAM,aAAa,CAAC;;;;;;;;;;;;;;;;IAgEnB,4EAA4E;;IAE5E,qDAAqD;;IAErD,+BAA+B;;;;;;;IAO/B,qCAAqC;;;AAorEvC,wBAQG"}
|