@aalis/schema-message 0.6.0 → 0.8.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/index.d.ts +36 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +74 -19
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -198,12 +198,32 @@ export interface IncomingMessage {
|
|
|
198
198
|
*
|
|
199
199
|
* 触发器(如 scheduler)应在创建任务时 snapshot 调用者身份,触发时回填此字段;
|
|
200
200
|
* 不能由 LLM/AI 在工具入参中自由指定,避免提权。
|
|
201
|
+
*
|
|
202
|
+
* AI 自发回合(无主发言者,如群聊 'interval' 触发)没有可代之人:触发器应回填
|
|
203
|
+
* {@link selfInitiatedActor}(userId 为空串 = 无主体),authority 按默认等级裁决、
|
|
204
|
+
* 永不视为 owner。'idle' 合成消息本就不带 userId,天然无主体,无需回填。
|
|
201
205
|
*/
|
|
202
206
|
actor?: {
|
|
203
207
|
platform: string;
|
|
204
208
|
userId: string;
|
|
205
209
|
};
|
|
206
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* AI 自发回合的授权身份:无主体。
|
|
213
|
+
*
|
|
214
|
+
* 'interval' 触发复用的是恰好撞上频率阈值的那条真人消息,若不回填 actor,授权轴会经
|
|
215
|
+
* `actor ?? {platform, userId}` 回退到「最后发言者」——绝大多数回合按陌生人 0 级判权
|
|
216
|
+
* (自发回合工具全挂),而 owner 恰好最后发言时整轮(含群内任何提示注入)以 owner 等级
|
|
217
|
+
* 执行。契约(triggerType 注释)与 prompt 侧特判都把 interval 当无主发言者,授权轴应一致。
|
|
218
|
+
*
|
|
219
|
+
* userId 取空串而非缺省:`actor?.userId ?? userId` 回退链遇空串不回退(?? 只认 null/undefined),
|
|
220
|
+
* 由此派生的定时任务/委派/子任务保持匿名,不会漂回物理发言者;authority 的等级查表以空
|
|
221
|
+
* userId 为无键 → 默认等级,owner 判定永不命中空串。
|
|
222
|
+
*/
|
|
223
|
+
export declare function selfInitiatedActor(platform: string): {
|
|
224
|
+
platform: string;
|
|
225
|
+
userId: string;
|
|
226
|
+
};
|
|
207
227
|
export interface OutgoingMessage {
|
|
208
228
|
content: string;
|
|
209
229
|
sessionId: string;
|
|
@@ -252,6 +272,14 @@ export interface StreamChunkMessage {
|
|
|
252
272
|
declare module '@aalis/core' {
|
|
253
273
|
interface AalisEvents {
|
|
254
274
|
'inbound:message': [message: IncomingMessage];
|
|
275
|
+
/**
|
|
276
|
+
* assistant 回复已落库(来自 message-archive.saveMessage,仅 role='assistant' 且内容非空时发出)。
|
|
277
|
+
* 与 'inbound:message:archived' 对称,供派生索引(如向量记忆索引 AI 自身发言)订阅。
|
|
278
|
+
*/
|
|
279
|
+
'assistant:message:archived': [data: {
|
|
280
|
+
sessionId: string;
|
|
281
|
+
message: Message;
|
|
282
|
+
}];
|
|
255
283
|
/**
|
|
256
284
|
* 入站消息已落库(来自 message-archive.archiveIncoming)。无论是否触发 agent 回复都会发出。
|
|
257
285
|
*
|
|
@@ -317,9 +345,15 @@ export declare function toLLMRole(role: MessageRole): WellKnownRole;
|
|
|
317
345
|
* 同时给 content 加上可读前缀(kind 优先,其次 role)。
|
|
318
346
|
* provider 适配器应在序列化前调用该函数,确保协议合法。
|
|
319
347
|
*
|
|
320
|
-
*
|
|
348
|
+
* 工具结果携图(tool 消息带 images):OpenAI 系协议的 tool 消息只能是文本,图片块只认 user
|
|
349
|
+
* 角色。这里把 images 从 tool 消息上摘下,在**该段连续 tool 应答全部结束之后**追加一条注明
|
|
350
|
+
* 来源的 user 图片消息(并行工具调用时 assistant(tool_calls) 后的 tool 应答必须连续,载体
|
|
351
|
+
* 插在中间会被端点拒收)。各 provider 沿用自己 user 角色的图片展开即可,无需感知工具携图。
|
|
352
|
+
* 幂等:摘过 images 的 tool 消息再次调用不会重复生成载体。
|
|
353
|
+
*
|
|
354
|
+
* 不修改原对象;返回新数组与必要时的消息浅拷贝。
|
|
321
355
|
*/
|
|
322
|
-
export declare function prepareLLMMessages<T extends Pick<Message, 'role' | 'content' | 'kind'>>(messages: T[]): T[];
|
|
356
|
+
export declare function prepareLLMMessages<T extends Pick<Message, 'role' | 'content' | 'kind'> & Pick<Message, 'images' | 'toolCallId'>>(messages: T[]): T[];
|
|
323
357
|
export { type AttachmentRef, AttachmentRefKind, buildAttachmentRefMatcher, formatAttachmentRef, parseAttachmentRefs, } from './attachment-ref.js';
|
|
324
358
|
export { getMessageName, getSenderLabel, prefixSender } from './identity.js';
|
|
325
359
|
//# sourceMappingURL=index.d.ts.map
|
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":"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"}
|
package/dist/index.js
CHANGED
|
@@ -16,12 +16,28 @@
|
|
|
16
16
|
// 同时通过 declaration merging 将下列事件注入 `AalisEvents`:
|
|
17
17
|
// - 'inbound:message'
|
|
18
18
|
// - 'inbound:message:archived'
|
|
19
|
+
// - 'assistant:message:archived'
|
|
19
20
|
// - 'outbound:message'
|
|
20
21
|
// - 'outbound:stream'
|
|
21
22
|
//
|
|
22
23
|
// 依赖:@aalis/core(类型锚点)+ @aalis/util-text-normalize(prepareLLMMessages 的 UTF-16 规整)。
|
|
23
24
|
// ============================================================
|
|
24
25
|
import { toWellFormedText } from '@aalis/util-text-normalize';
|
|
26
|
+
/**
|
|
27
|
+
* AI 自发回合的授权身份:无主体。
|
|
28
|
+
*
|
|
29
|
+
* 'interval' 触发复用的是恰好撞上频率阈值的那条真人消息,若不回填 actor,授权轴会经
|
|
30
|
+
* `actor ?? {platform, userId}` 回退到「最后发言者」——绝大多数回合按陌生人 0 级判权
|
|
31
|
+
* (自发回合工具全挂),而 owner 恰好最后发言时整轮(含群内任何提示注入)以 owner 等级
|
|
32
|
+
* 执行。契约(triggerType 注释)与 prompt 侧特判都把 interval 当无主发言者,授权轴应一致。
|
|
33
|
+
*
|
|
34
|
+
* userId 取空串而非缺省:`actor?.userId ?? userId` 回退链遇空串不回退(?? 只认 null/undefined),
|
|
35
|
+
* 由此派生的定时任务/委派/子任务保持匿名,不会漂回物理发言者;authority 的等级查表以空
|
|
36
|
+
* userId 为无键 → 默认等级,owner 判定永不命中空串。
|
|
37
|
+
*/
|
|
38
|
+
export function selfInitiatedActor(platform) {
|
|
39
|
+
return { platform, userId: '' };
|
|
40
|
+
}
|
|
25
41
|
// ============================================================
|
|
26
42
|
// LLM 出口工具:自定义 role → WellKnownRole 转译
|
|
27
43
|
// ============================================================
|
|
@@ -91,27 +107,66 @@ export function toLLMRole(role) {
|
|
|
91
107
|
* 同时给 content 加上可读前缀(kind 优先,其次 role)。
|
|
92
108
|
* provider 适配器应在序列化前调用该函数,确保协议合法。
|
|
93
109
|
*
|
|
94
|
-
*
|
|
110
|
+
* 工具结果携图(tool 消息带 images):OpenAI 系协议的 tool 消息只能是文本,图片块只认 user
|
|
111
|
+
* 角色。这里把 images 从 tool 消息上摘下,在**该段连续 tool 应答全部结束之后**追加一条注明
|
|
112
|
+
* 来源的 user 图片消息(并行工具调用时 assistant(tool_calls) 后的 tool 应答必须连续,载体
|
|
113
|
+
* 插在中间会被端点拒收)。各 provider 沿用自己 user 角色的图片展开即可,无需感知工具携图。
|
|
114
|
+
* 幂等:摘过 images 的 tool 消息再次调用不会重复生成载体。
|
|
115
|
+
*
|
|
116
|
+
* 不修改原对象;返回新数组与必要时的消息浅拷贝。
|
|
95
117
|
*/
|
|
96
118
|
export function prepareLLMMessages(messages) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
119
|
+
const out = [];
|
|
120
|
+
let pendingImages = [];
|
|
121
|
+
let pendingCallIds = [];
|
|
122
|
+
const flushCarrier = () => {
|
|
123
|
+
if (pendingImages.length === 0)
|
|
124
|
+
return;
|
|
125
|
+
out.push({
|
|
126
|
+
role: 'user',
|
|
127
|
+
content: `[以下图片是工具调用 ${pendingCallIds.join('、')} 的返回内容]`,
|
|
128
|
+
images: pendingImages,
|
|
129
|
+
});
|
|
130
|
+
pendingImages = [];
|
|
131
|
+
pendingCallIds = [];
|
|
132
|
+
};
|
|
133
|
+
for (const m of messages) {
|
|
134
|
+
if (m.role === 'tool') {
|
|
135
|
+
if (m.images && m.images.length > 0) {
|
|
136
|
+
const { images, ...textOnly } = m;
|
|
137
|
+
pendingImages.push(...images);
|
|
138
|
+
pendingCallIds.push(m.toolCallId ?? '?');
|
|
139
|
+
out.push(normalizeForLLM(textOnly));
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
out.push(normalizeForLLM(m));
|
|
143
|
+
}
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
flushCarrier();
|
|
147
|
+
out.push(normalizeForLLM(m));
|
|
148
|
+
}
|
|
149
|
+
flushCarrier();
|
|
150
|
+
return out;
|
|
151
|
+
}
|
|
152
|
+
/** 单条消息的协议归一:自定义 role 转译 + 可读前缀 + 良构 UTF-16。 */
|
|
153
|
+
function normalizeForLLM(m) {
|
|
154
|
+
const llmRole = toLLMRole(m.role);
|
|
155
|
+
const prefix = (m.kind && KIND_PREFIX[m.kind]) ?? CUSTOM_ROLE_PREFIX[m.role];
|
|
156
|
+
const needsRoleRewrite = llmRole !== m.role;
|
|
157
|
+
// 边界硬保证:所有发往 LLM 的 string content 先规整成良构 UTF-16(孤代理→�)。杜绝孤代理经
|
|
158
|
+
// JSON.stringify 编成 `\ud83d`(半个代理对)被严格 JSON 解析器(如 DeepSeek 服务端)拒收、
|
|
159
|
+
// 致整条请求 400。对良构内容为 no-op(原样返回、不新建字符串),故不改变现有行为;对任何插件
|
|
160
|
+
// 产生的内容在此唯一出口自动生效,第三方插件无需感知"孤代理"、无需调用任何东西。
|
|
161
|
+
const content = typeof m.content === 'string' ? toWellFormedText(m.content) : m.content;
|
|
162
|
+
const contentChanged = content !== m.content;
|
|
163
|
+
// 幂等守卫:content 已带该前缀就不再叠加。role 前缀靠改写 role 自消费,kind 前缀不消费 kind,
|
|
164
|
+
// 二次调用会把 `[跨会话委派]` 叠成两遍——用 startsWith 兜住,两条路径都真幂等。
|
|
165
|
+
const needsPrefix = !!prefix && typeof content === 'string' && content.length > 0 && !content.startsWith(prefix);
|
|
166
|
+
if (!needsRoleRewrite && !needsPrefix && !contentChanged)
|
|
167
|
+
return m;
|
|
168
|
+
const newContent = needsPrefix ? `${prefix} ${content}` : (content ?? null);
|
|
169
|
+
return { ...m, role: llmRole, content: newContent };
|
|
115
170
|
}
|
|
116
171
|
export { AttachmentRefKind, buildAttachmentRefMatcher, formatAttachmentRef, parseAttachmentRefs, } from './attachment-ref.js';
|
|
117
172
|
// ----- 身份标识工具(cleanup-9 从 core 迁入) -----
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,gCAAgC;AAChC,EAAE;AACF,6BAA6B;AAC7B,EAAE;AACF,sCAAsC;AACtC,qEAAqE;AACrE,qEAAqE;AACrE,wDAAwD;AACxD,EAAE;AACF,0BAA0B;AAC1B,4DAA4D;AAC5D,gCAAgC;AAChC,mDAAmD;AACnD,EAAE;AACF,kDAAkD;AAClD,wBAAwB;AACxB,iCAAiC;AACjC,yBAAyB;AACzB,wBAAwB;AACxB,EAAE;AACF,oFAAoF;AACpF,+DAA+D;AAK/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|