@my-life-buddies/buddy-runtime 0.1.0 → 0.3.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/README.md +173 -73
- package/dist/conversation/agent.d.ts +16 -2
- package/dist/conversation/agent.d.ts.map +1 -1
- package/dist/conversation/agent.js +83 -54
- package/dist/conversation/agent.js.map +1 -1
- package/dist/conversation/agentMessageLLMMessageConverter.d.ts +5 -2
- package/dist/conversation/agentMessageLLMMessageConverter.d.ts.map +1 -1
- package/dist/conversation/agentMessageLLMMessageConverter.js +33 -33
- package/dist/conversation/agentMessageLLMMessageConverter.js.map +1 -1
- package/dist/conversation/history.js +1 -1
- package/dist/conversation/history.js.map +1 -1
- package/dist/conversation/index.d.ts +19 -2
- package/dist/conversation/index.d.ts.map +1 -1
- package/dist/conversation/index.js +183 -13
- package/dist/conversation/index.js.map +1 -1
- package/dist/conversation/mlbMessageAgentMessageConverter.d.ts +6 -3
- package/dist/conversation/mlbMessageAgentMessageConverter.d.ts.map +1 -1
- package/dist/conversation/mlbMessageAgentMessageConverter.js +78 -23
- package/dist/conversation/mlbMessageAgentMessageConverter.js.map +1 -1
- package/dist/conversation/readMLBMessages.d.ts +5 -1
- package/dist/conversation/readMLBMessages.d.ts.map +1 -1
- package/dist/conversation/readMLBMessages.js +24 -10
- package/dist/conversation/readMLBMessages.js.map +1 -1
- package/dist/conversation/writeMLBMessage.d.ts +3 -1
- package/dist/conversation/writeMLBMessage.d.ts.map +1 -1
- package/dist/conversation/writeMLBMessage.js +5 -3
- package/dist/conversation/writeMLBMessage.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mlbClient.d.ts +1 -128
- package/dist/mlbClient.d.ts.map +1 -1
- package/dist/mlbClient.js +2 -375
- package/dist/mlbClient.js.map +1 -1
- package/dist/platform/client.d.ts +48 -0
- package/dist/platform/client.d.ts.map +1 -0
- package/dist/platform/client.js +24 -0
- package/dist/platform/client.js.map +1 -0
- package/dist/platform/mlbClient.d.ts +146 -0
- package/dist/platform/mlbClient.d.ts.map +1 -0
- package/dist/platform/mlbClient.js +476 -0
- package/dist/platform/mlbClient.js.map +1 -0
- package/dist/platform/widgets.d.ts +75 -0
- package/dist/platform/widgets.d.ts.map +1 -0
- package/dist/platform/widgets.js +88 -0
- package/dist/platform/widgets.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +36 -4
- package/dist/server.js.map +1 -1
- package/dist/tools/dataAccess.d.ts +7 -2
- package/dist/tools/dataAccess.d.ts.map +1 -1
- package/dist/tools/dataAccess.js +14 -4
- package/dist/tools/dataAccess.js.map +1 -1
- package/dist/tools/registry.d.ts +6 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +23 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/widgets.d.ts +3 -2
- package/dist/tools/widgets.d.ts.map +1 -1
- package/dist/tools/widgets.js +22 -53
- package/dist/tools/widgets.js.map +1 -1
- package/dist/types.d.ts +92 -24
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -3
- package/dist/types.js.map +1 -1
- package/package.json +4 -3
- package/dist/conversation/convert.d.ts +0 -46
- package/dist/conversation/convert.d.ts.map +0 -1
- package/dist/conversation/convert.js +0 -297
- package/dist/conversation/convert.js.map +0 -1
- package/dist/conversation/presence.d.ts +0 -24
- package/dist/conversation/presence.d.ts.map +0 -1
- package/dist/conversation/presence.js +0 -56
- package/dist/conversation/presence.js.map +0 -1
- package/dist/conversation/writeBack.d.ts +0 -36
- package/dist/conversation/writeBack.d.ts.map +0 -1
- package/dist/conversation/writeBack.js +0 -114
- package/dist/conversation/writeBack.js.map +0 -1
package/dist/tools/widgets.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// 小挂件工具:把平台的小挂件接口包成五个 pi AgentTool,交给模型在会话里建面板、写记录、读记录、删记录、把小挂件发进聊天流。
|
|
2
2
|
// 管:五个工具的名字与 label(固定,人设按名字叫它们)、参数 schema(typebox)、description 里把小挂件类型目录渲染成人话、
|
|
3
|
-
//
|
|
4
|
-
// 不管:HTTP 请求本身(
|
|
3
|
+
// 调用共享 Client;失败抛给 pi 标为错误,不能伪报成功。
|
|
4
|
+
// 不管:HTTP 请求本身(platform/)、类型目录从哪拉(server.ts 懒拉一次)、什么时候把工具装进 Agent(conversation/agent.ts)。
|
|
5
5
|
import { Type } from "typebox";
|
|
6
6
|
/** JSON Schema 的 type 值 → 目录里给模型看的中文类型词 */
|
|
7
7
|
const TYPE_WORDS = {
|
|
@@ -89,17 +89,18 @@ const createParams = Type.Object({
|
|
|
89
89
|
title: Type.String({ description: "标题,给人看的" }),
|
|
90
90
|
});
|
|
91
91
|
const writeParams = Type.Object({
|
|
92
|
-
widgetId: Type.String({ description: "
|
|
92
|
+
widgetId: Type.String({ description: "当前会话中已有的 Widget id,从上下文或工具结果取得" }),
|
|
93
93
|
module: Type.String({ description: "模块名,见目录" }),
|
|
94
94
|
recordId: Type.String({ description: "记录 id,自己起;已存在就覆盖" }),
|
|
95
95
|
data: Type.Object({}, { additionalProperties: true, description: "这条记录的内容,字段照该模块的说明填" }),
|
|
96
|
+
expectedRevision: Type.Optional(Type.Integer({ minimum: 0, description: "读到的 revision;提供时检测并发修改" })),
|
|
96
97
|
});
|
|
97
98
|
const readParams = Type.Object({
|
|
98
|
-
widgetId: Type.String({ description: "
|
|
99
|
+
widgetId: Type.String({ description: "当前会话中已有的 Widget id,从上下文或工具结果取得" }),
|
|
99
100
|
module: Type.Optional(Type.String({ description: "只读这个模块;不给就读整个 widget" })),
|
|
100
101
|
});
|
|
101
102
|
const deleteParams = Type.Object({
|
|
102
|
-
widgetId: Type.String({ description: "
|
|
103
|
+
widgetId: Type.String({ description: "当前会话中已有的 Widget id,从上下文或工具结果取得" }),
|
|
103
104
|
module: Type.String({ description: "模块名" }),
|
|
104
105
|
recordId: Type.String({ description: "要删的记录 id" }),
|
|
105
106
|
});
|
|
@@ -110,24 +111,19 @@ const sendParams = Type.Object({
|
|
|
110
111
|
* 给一场会话造五个小挂件工具。types 为空说明平台没开放任何小挂件类型,回 [],模型就见不到这些工具。
|
|
111
112
|
* 五个工具都绑死在这场会话的 convoKey 上,跨会话看不见对方的小挂件。
|
|
112
113
|
*/
|
|
113
|
-
export function widgetTools(client,
|
|
114
|
+
export function widgetTools(client, types) {
|
|
114
115
|
if (types.length === 0)
|
|
115
116
|
return [];
|
|
116
117
|
const catalog = renderCatalog(types);
|
|
117
118
|
const create = {
|
|
118
119
|
name: "widget_create",
|
|
119
120
|
label: "正在建 widget",
|
|
120
|
-
description: "
|
|
121
|
+
description: "在这场会话里新建一个小挂件(一块给人看的结构化面板)。建好只是个空壳,后续需使用当前可用的工具写入内容并发送引用,不要声称已展示。\n" +
|
|
121
122
|
`你能建的类型:\n${catalog}`,
|
|
122
123
|
parameters: createParams,
|
|
123
|
-
execute: async (
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
return text(`没建成:${reply.error}`);
|
|
127
|
-
const id = field(reply.body, "id");
|
|
128
|
-
if (typeof id !== "string")
|
|
129
|
-
return text(`没建成:平台响应里没有 id(${JSON.stringify(reply.body)})`);
|
|
130
|
-
return text(`建好了,小挂件 id 是 ${id}。接下来用 widget_write 往里写记录,用 widget_send 把小挂件发进聊天流。`);
|
|
124
|
+
execute: async (callId, params, signal) => {
|
|
125
|
+
const { id } = await client.create({ ...params, idempotencyKey: `widget-create:${callId}` }, { signal });
|
|
126
|
+
return text(`建好了,小挂件 id 是 ${id}。后续使用当前可用的工具写入内容并发送引用;这里只确认创建。`);
|
|
131
127
|
},
|
|
132
128
|
};
|
|
133
129
|
const write = {
|
|
@@ -136,11 +132,8 @@ export function widgetTools(client, convoKey, types) {
|
|
|
136
132
|
description: "往小挂件的某个模块里写一条记录:recordId 已存在就整条覆盖,不存在就新建。data 里的字段照该模块的说明填。\n" +
|
|
137
133
|
`各类型的模块与字段:\n${catalog}`,
|
|
138
134
|
parameters: writeParams,
|
|
139
|
-
execute: async (_id, params) => {
|
|
140
|
-
const
|
|
141
|
-
if (!reply.ok)
|
|
142
|
-
return text(`没写成:${reply.error}`);
|
|
143
|
-
const revision = field(reply.body, "revision");
|
|
135
|
+
execute: async (_id, params, signal) => {
|
|
136
|
+
const { revision } = await client.write(params.widgetId, { ...params, data: params.data }, { signal });
|
|
144
137
|
return text(`写好了:${params.module}/${params.recordId}${revision === undefined ? "" : `(revision ${String(revision)})`}`);
|
|
145
138
|
},
|
|
146
139
|
};
|
|
@@ -149,13 +142,11 @@ export function widgetTools(client, convoKey, types) {
|
|
|
149
142
|
label: "正在读 widget",
|
|
150
143
|
description: "读一个小挂件里现在有什么:不给 module 就读整个小挂件(所有模块的记录),给了 module 只读那个模块。改记录之前先读一遍,别凭印象。",
|
|
151
144
|
parameters: readParams,
|
|
152
|
-
execute: async (_id, params) => {
|
|
153
|
-
const reply = await client.widgetRead(convoKey, params.widgetId, params.module);
|
|
154
|
-
if (!reply.ok)
|
|
155
|
-
return text(`没读到:${reply.error}`);
|
|
145
|
+
execute: async (_id, params, signal) => {
|
|
156
146
|
if (params.module === undefined)
|
|
157
|
-
return text(renderWidget(
|
|
158
|
-
|
|
147
|
+
return text(renderWidget(await client.read(params.widgetId, { signal })));
|
|
148
|
+
const body = await client.readModule(params.widgetId, params.module, { signal });
|
|
149
|
+
return text(renderRecords(params.module, body.records).join("\n"));
|
|
159
150
|
},
|
|
160
151
|
};
|
|
161
152
|
const remove = {
|
|
@@ -163,10 +154,8 @@ export function widgetTools(client, convoKey, types) {
|
|
|
163
154
|
label: "正在删小挂件记录",
|
|
164
155
|
description: "删掉小挂件某个模块里的一条记录。删的是记录,不是整个小挂件。",
|
|
165
156
|
parameters: deleteParams,
|
|
166
|
-
execute: async (_id, params) => {
|
|
167
|
-
|
|
168
|
-
if (!reply.ok)
|
|
169
|
-
return text(`没删成:${reply.error}`);
|
|
157
|
+
execute: async (_id, params, signal) => {
|
|
158
|
+
await client.deleteRecord(params.widgetId, params.module, params.recordId, { signal });
|
|
170
159
|
return text(`删掉了:${params.module}/${params.recordId}`);
|
|
171
160
|
},
|
|
172
161
|
};
|
|
@@ -175,31 +164,11 @@ export function widgetTools(client, convoKey, types) {
|
|
|
175
164
|
label: "正在把小挂件发进聊天流",
|
|
176
165
|
description: "把一个建好的小挂件发进聊天流,用户点开就能看。内容改了不用重发,用户点开看到的就是最新的;同一个小挂件也可以再发一次。",
|
|
177
166
|
parameters: sendParams,
|
|
178
|
-
execute: async (
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
result = await client.writeMessages(convoKey, [{ type: "widget", widget: { id: params.widgetId } }]);
|
|
182
|
-
}
|
|
183
|
-
catch (e) {
|
|
184
|
-
return text(`没发成:${e instanceof Error ? e.message : String(e)}`);
|
|
185
|
-
}
|
|
186
|
-
if (result.kind === "rejected")
|
|
187
|
-
return text(`没发成:${rejectionText(result.status, result.body)}`);
|
|
188
|
-
return text("小挂件发进聊天流了。");
|
|
167
|
+
execute: async (callId, params, signal) => {
|
|
168
|
+
client.send(params.widgetId, { idempotencyKey: `widget-send:${callId}`, signal });
|
|
169
|
+
return text("小挂件引用已加入发送队列,尚不代表平台确认送达。");
|
|
189
170
|
},
|
|
190
171
|
};
|
|
191
172
|
return [create, write, read, remove, send];
|
|
192
173
|
}
|
|
193
|
-
/** 写口 4xx 的错误体是 { error },取出来给模型看;不是 JSON 就把原文带上 */
|
|
194
|
-
function rejectionText(status, body) {
|
|
195
|
-
try {
|
|
196
|
-
const error = field(JSON.parse(body), "error");
|
|
197
|
-
if (typeof error === "string")
|
|
198
|
-
return error;
|
|
199
|
-
}
|
|
200
|
-
catch {
|
|
201
|
-
// 错误体不是 JSON,下面退回用原文
|
|
202
|
-
}
|
|
203
|
-
return `HTTP ${status}${body === "" ? "" : `:${body}`}`;
|
|
204
|
-
}
|
|
205
174
|
//# sourceMappingURL=widgets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgets.js","sourceRoot":"","sources":["../../src/tools/widgets.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,+EAA+E;AAC/E,
|
|
1
|
+
{"version":3,"file":"widgets.js","sourceRoot":"","sources":["../../src/tools/widgets.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import type { PlatformClient } from "./platform/client.ts";
|
|
2
|
+
import type { PlatformToolName } from "./tools/registry.ts";
|
|
1
3
|
import type { AgentMessage, AgentOptions, AgentState } from "@earendil-works/pi-agent-core";
|
|
2
4
|
/** 一个搭子在一场会话里的配置。形状照 pi 的 Agent 来。 */
|
|
3
|
-
export type BuddyOptions = Pick<AgentOptions, "
|
|
5
|
+
export type BuddyOptions = Pick<AgentOptions, "beforeToolCall" | "afterToolCall" | "shouldStopAfterTurn" | "prepareNextTurnWithContext" | "thinkingBudgets" | "toolExecution"> & {
|
|
6
|
+
/** 显式选择给模型开放的平台工具;默认 []。不影响业务工具调用 platform Clients。 */
|
|
7
|
+
platformTools?: readonly PlatformToolName[];
|
|
4
8
|
/** systemPrompt 必填;tools / thinkingLevel 可选。model / messages 不露——模型在 BuddyServer.start 的 model 里按 id 选、历史从平台灌 */
|
|
5
9
|
initialState: Pick<AgentState, "systemPrompt"> & Partial<Pick<AgentState, "tools" | "thinkingLevel">>;
|
|
6
10
|
};
|
|
@@ -8,28 +12,38 @@ export type BuddyOptions = Pick<AgentOptions, "transformContext" | "beforeToolCa
|
|
|
8
12
|
export type BuddyFactory = (conversation: Conversation) => BuddyOptions | Promise<BuddyOptions>;
|
|
9
13
|
/** 一场会话。工厂和工具闭包都拿得到。 */
|
|
10
14
|
export interface Conversation {
|
|
15
|
+
/** 会话退役时取消工具中尚未完成的请求。 */
|
|
16
|
+
readonly signal: AbortSignal;
|
|
17
|
+
/** 当前会话绑定的平台能力;Client 不包含任何应用领域规则。 */
|
|
18
|
+
readonly platform: PlatformClient;
|
|
11
19
|
/** 平台的会话键:私聊 p_ 前缀、群 g_ 前缀。两场会话之间不该看得见对方 */
|
|
12
20
|
readonly key: string;
|
|
13
21
|
/** 行首带搭子 id */
|
|
14
22
|
readonly log: BuddyLogger;
|
|
15
|
-
/**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
list(): Promise<MemoryEntry[]>;
|
|
22
|
-
/** 覆盖写一条。key 是主题名:非空、不含空白与 /、≤64 字;text 单条 ≤16KB;每会话 ≤64 条、合计 ≤256KB。PUT /internal/v1/memory/:key */
|
|
23
|
-
write(key: string, text: string): Promise<void>;
|
|
24
|
-
/** 删一条,删不存在的也算成功。DELETE /internal/v1/memory/:key */
|
|
25
|
-
delete(key: string): Promise<void>;
|
|
23
|
+
/** Propose only; the user must confirm in App settings before it can run. */
|
|
24
|
+
readonly proactive: {
|
|
25
|
+
propose(request: ProactiveSubscriptionRequest): Promise<{
|
|
26
|
+
id: string;
|
|
27
|
+
status: "pending";
|
|
28
|
+
}>;
|
|
26
29
|
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
}
|
|
31
|
+
export interface ProactiveSubscriptionRequest {
|
|
32
|
+
title: string;
|
|
33
|
+
reason: string;
|
|
34
|
+
sources: string[];
|
|
35
|
+
eventTypes: string[];
|
|
36
|
+
allowedDataScopes: string[];
|
|
37
|
+
quietHours?: {
|
|
38
|
+
start: string;
|
|
39
|
+
end: string;
|
|
40
|
+
timezone: string;
|
|
41
|
+
};
|
|
42
|
+
cooldownMinutes?: number;
|
|
43
|
+
dailyLimit?: number;
|
|
44
|
+
schedule?: {
|
|
45
|
+
at: number;
|
|
46
|
+
intervalMinutes?: number;
|
|
33
47
|
};
|
|
34
48
|
}
|
|
35
49
|
/** 查询当前会话中的用户授权数据。 */
|
|
@@ -60,6 +74,37 @@ export interface DataRequirement {
|
|
|
60
74
|
revision: number;
|
|
61
75
|
schemaVersion: number;
|
|
62
76
|
}
|
|
77
|
+
export interface ProactiveTrigger {
|
|
78
|
+
eventId: string;
|
|
79
|
+
source: string;
|
|
80
|
+
type: string;
|
|
81
|
+
subjectAlias: string;
|
|
82
|
+
occurredAt: number;
|
|
83
|
+
expiresAt: number;
|
|
84
|
+
dataRef?: string;
|
|
85
|
+
dataVersion?: string;
|
|
86
|
+
metadata?: Record<string, string | number | boolean>;
|
|
87
|
+
}
|
|
88
|
+
export interface ProactiveRun {
|
|
89
|
+
runId: string;
|
|
90
|
+
sessionId: string;
|
|
91
|
+
kind: "proactive";
|
|
92
|
+
subscriptionId: string;
|
|
93
|
+
trigger: ProactiveTrigger;
|
|
94
|
+
worldNow: number;
|
|
95
|
+
capabilityToken: string;
|
|
96
|
+
capabilityGrants: string[];
|
|
97
|
+
messages: MLBMessage[];
|
|
98
|
+
context: string;
|
|
99
|
+
}
|
|
100
|
+
export type ProactiveDecision = {
|
|
101
|
+
action: "send";
|
|
102
|
+
text: string;
|
|
103
|
+
reasonCode: string;
|
|
104
|
+
} | {
|
|
105
|
+
action: "skip";
|
|
106
|
+
reasonCode: "nothing_useful" | "already_discussed" | "insufficient_data" | "not_appropriate" | "user_recently_active";
|
|
107
|
+
};
|
|
63
108
|
/** 一条记忆:GET /internal/v1/memory 响应体 entries 里的每条 */
|
|
64
109
|
export interface MemoryEntry {
|
|
65
110
|
/** 主题名 */
|
|
@@ -77,6 +122,10 @@ export interface StartOptions {
|
|
|
77
122
|
buddy: BuddyFactory;
|
|
78
123
|
/** 模型 id,必填,取值照平台 GET /cli/models 报的。整个进程的会话共用这一个 */
|
|
79
124
|
model: string;
|
|
125
|
+
/** 可选首次问候,仅处理 welcome 事件且历史为空;不调用模型。 */
|
|
126
|
+
welcome?: string;
|
|
127
|
+
/** 模型失败、空回复时的明确兜底;不在会话已删除时发送。 */
|
|
128
|
+
errorReply?: string;
|
|
80
129
|
}
|
|
81
130
|
export interface BuddyServerHandle {
|
|
82
131
|
stop(): Promise<void>;
|
|
@@ -91,13 +140,25 @@ export interface NoteMessage {
|
|
|
91
140
|
text: string;
|
|
92
141
|
timestamp: number;
|
|
93
142
|
}
|
|
143
|
+
/** 消息里的一张图:type image 记录的 image、聊天记录卡条目的 image、引用块的 image */
|
|
144
|
+
export interface MLBImage {
|
|
145
|
+
mediaId: string;
|
|
146
|
+
width?: number;
|
|
147
|
+
height?: number;
|
|
148
|
+
mimeType?: string;
|
|
149
|
+
size?: number;
|
|
150
|
+
/** 处理好的 JPEG 的 base64,平台在拉取时加上。图片读不到时没有;引用块里的图不带 */
|
|
151
|
+
data?: string;
|
|
152
|
+
}
|
|
94
153
|
/** 读口每条记录 */
|
|
95
154
|
export interface MLBMessage {
|
|
96
|
-
/**
|
|
155
|
+
/** 平台消息的稳定 ID。换算图片记录时给图片打标记,引用靠它对上是历史里哪一张;不用时间戳代替 */
|
|
156
|
+
id: string;
|
|
157
|
+
/** message / checkin / image / tool / question / note / widget / messagesCard / system / context */
|
|
97
158
|
type: string;
|
|
98
159
|
/** user / buddy / platform */
|
|
99
160
|
author: string;
|
|
100
|
-
/**
|
|
161
|
+
/** 正文;富类型这里是给人看的一行摘要。type image 是用户给图片配的文字,没配时是「[图片]」 */
|
|
101
162
|
text: string;
|
|
102
163
|
/** 发言人显示名(群成员现名 / 私聊转发人);搭子自己的消息不带 */
|
|
103
164
|
name?: string;
|
|
@@ -114,15 +175,19 @@ export interface MLBMessage {
|
|
|
114
175
|
widget?: {
|
|
115
176
|
id: string;
|
|
116
177
|
};
|
|
178
|
+
image?: MLBImage;
|
|
117
179
|
messagesCard?: MessagesCard;
|
|
118
180
|
toolCalls?: MLBToolCall[];
|
|
119
181
|
/** 该步推理原文,只有搭子自己的记录上有 */
|
|
120
182
|
thinking?: string;
|
|
121
183
|
/** 半截话,重建跳过 */
|
|
122
184
|
interrupted?: boolean;
|
|
185
|
+
/** 引用块:被引消息的 id、发言人名、原文前 120 字;引用的是图片消息时带 image(不带图片内容) */
|
|
123
186
|
quote?: {
|
|
187
|
+
id?: string;
|
|
124
188
|
name?: string;
|
|
125
189
|
text?: string;
|
|
190
|
+
image?: MLBImage;
|
|
126
191
|
};
|
|
127
192
|
}
|
|
128
193
|
export interface MessagesCard {
|
|
@@ -131,6 +196,7 @@ export interface MessagesCard {
|
|
|
131
196
|
items: {
|
|
132
197
|
name?: string;
|
|
133
198
|
text?: string;
|
|
199
|
+
image?: MLBImage;
|
|
134
200
|
messagesCard?: MessagesCard;
|
|
135
201
|
}[];
|
|
136
202
|
}
|
|
@@ -157,14 +223,16 @@ export interface MLBMessageToWrite {
|
|
|
157
223
|
/** 读口响应。平台的场合交代是其中 type 为 context 的记录,不单独成字段 */
|
|
158
224
|
export interface PullResponse {
|
|
159
225
|
messages: MLBMessage[];
|
|
226
|
+
/** 这一页之外还有没拉的记录:一页条数不超过 limit、图片内容加起来不超过 20 MB,可能不满就结束 */
|
|
227
|
+
hasMore: boolean;
|
|
160
228
|
}
|
|
161
|
-
/**
|
|
229
|
+
/** welcome 按配置接收;主动执行由平台的 runId 寻址。 */
|
|
162
230
|
export type BuddyEvent = {
|
|
163
|
-
type: "message";
|
|
231
|
+
type: "message" | "delete" | "welcome";
|
|
164
232
|
convoKey: string;
|
|
165
233
|
} | {
|
|
166
|
-
type: "
|
|
167
|
-
|
|
234
|
+
type: "proactive";
|
|
235
|
+
runId: string;
|
|
168
236
|
};
|
|
169
237
|
/** Agent 的历史 */
|
|
170
238
|
export type Transcript = AgentMessage[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE5F,sCAAsC;AACtC,MAAM,MAAM,YAAY,GAAG,IAAI,CAC9B,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE5F,sCAAsC;AACtC,MAAM,MAAM,YAAY,GAAG,IAAI,CAC9B,YAAY,EACV,gBAAgB,GAChB,eAAe,GACf,qBAAqB,GACrB,4BAA4B,GAC5B,iBAAiB,GACjB,eAAe,CACjB,GAAG;IACH,uDAAuD;IACvD,aAAa,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,iHAAiH;IACjH,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC;CACtG,CAAC;AAEF,0BAA0B;AAC1B,MAAM,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,YAAY,KAAK,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAEhG,wBAAwB;AACxB,MAAM,WAAW,YAAY;IAC5B,yBAAyB;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,sCAAsC;IACtC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,eAAe;IACf,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE;QACnB,OAAO,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,SAAS,CAAA;SAAE,CAAC,CAAC;KAC3F,CAAC;CACF;AAED,MAAM,WAAW,4BAA4B;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD;AAED,sBAAsB;AACtB,MAAM,WAAW,eAAe;IAC/B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,0DAA0D;AAC1D,MAAM,MAAM,mBAAmB,GAC5B;IACA,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B,GACD;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,GAAG,YAAY,GAAG,iBAAiB,GAAG,aAAa,CAAA;CAAE,CAAC;AAE5F,wBAAwB;AACxB,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,iBAAiB,GAC1B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,sBAAsB,CAAA;CAAE,CAAC;AAE7I,oDAAoD;AACpD,MAAM,WAAW,WAAW;IAC3B,UAAU;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAKD,OAAO,QAAQ,+BAA+B,CAAC;IAC9C,UAAU,mBAAmB;QAC5B,IAAI,EAAE,WAAW,CAAC;KAClB;CACD;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB;AAKD,6DAA6D;AAC7D,MAAM,WAAW,QAAQ;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,aAAa;AACb,MAAM,WAAW,UAAU;IAC1B,qDAAqD;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,oGAAoG;IACpG,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;mCAC+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2DAA2D;IAC3D,KAAK,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC;CACxE;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;QAAC,YAAY,CAAC,EAAE,YAAY,CAAA;KAAE,EAAE,CAAC;CACzF;AAED,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wEAAwE;AACxE,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC5B,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,0DAA0D;IAC1D,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,uCAAuC;AACvC,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7H,gBAAgB;AAChB,MAAM,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC"}
|
package/dist/types.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// 开发者契约 + 模块间共享的类型。设计正本:REDoc《【技术设计】搭子 runtime 基座》。
|
|
2
2
|
//
|
|
3
|
-
// 开发者交一个工厂:buddy: (conversation) => BuddyOptions
|
|
4
|
-
//
|
|
5
|
-
// 藏掉运行时独占的字段(streamFn / getApiKey / model / messages / convertToLlm / steeringMode …),
|
|
3
|
+
// 开发者交一个工厂:buddy: (conversation) => BuddyOptions。模型钩子取自 pi,
|
|
4
|
+
// 平台工具按名单显式注册,默认不暴露给模型。
|
|
5
|
+
// 藏掉运行时独占的字段(streamFn / getApiKey / model / messages / transformContext / convertToLlm / steeringMode …),
|
|
6
6
|
// 把 systemPrompt 设成必填(没人设的搭子是 bug,类型上就拦)。
|
|
7
7
|
export {};
|
|
8
8
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,4DAA4D;AAC5D,wBAAwB;AACxB,0GAA0G;AAC1G,0CAA0C"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@my-life-buddies/buddy-runtime",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "MLB 搭子运行时,基于 pi-agent-core:订阅平台事件流、拉取消息、驱动模型、写回回复。开发者调用 BuddyServer.start 交一份配置即可跑起一只搭子",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
8
|
+
"buddy-runtime-source": "./src/index.ts",
|
|
8
9
|
"types": "./dist/index.d.ts",
|
|
9
10
|
"default": "./dist/index.js"
|
|
10
11
|
},
|
|
@@ -14,9 +15,9 @@
|
|
|
14
15
|
"dist/"
|
|
15
16
|
],
|
|
16
17
|
"scripts": {
|
|
17
|
-
"build": "tsc -p tsconfig.build.json",
|
|
18
|
+
"build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json",
|
|
18
19
|
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
19
|
-
"test": "node --test src/*.test.ts src/conversation/*.test.ts src/tools/*.test.ts",
|
|
20
|
+
"test": "node --test src/*.test.ts src/conversation/*.test.ts src/tools/*.test.ts src/platform/*.test.ts",
|
|
20
21
|
"prepublishOnly": "npm run build"
|
|
21
22
|
},
|
|
22
23
|
"dependencies": {
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import type { AgentMessage } from "@earendil-works/pi-agent-core";
|
|
2
|
-
import type { AssistantMessage, Message, ToolResultMessage } from "@earendil-works/pi-ai";
|
|
3
|
-
import type { MLBMessage, NoteMessage, OutgoingMessage } from "../types.ts";
|
|
4
|
-
/** 重建 assistant 消息时抄的模型身份(model.ts 的 modelIdentity 给) */
|
|
5
|
-
export interface ModelIdentity {
|
|
6
|
-
api: string;
|
|
7
|
-
provider: string;
|
|
8
|
-
model: string;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* 把一批平台记录换成 pi 的历史。跳过的:interrupted 的半截话、question / widget、空正文又没工具调用的搭子记录。
|
|
12
|
-
* 对方的 message 变 user(群里带成员前缀)、system 变 user(带「群里发生了一件事」)、messagesCard 拍平成 user、
|
|
13
|
-
* 平台的场合交代 context 原样变 user(开头自带「平台交代给你的情况」那句用法,不套前缀);
|
|
14
|
-
* 搭子的 message / checkin 变 assistant,tool 变 assistant + 每个调用一条 toolResult,note 变 note。
|
|
15
|
-
*/
|
|
16
|
-
export declare function toAgentMessages(records: MLBMessage[], identity: ModelIdentity): AgentMessage[];
|
|
17
|
-
/**
|
|
18
|
-
* 不带工具调用的 assistant 消息写成 message 记录。
|
|
19
|
-
* 正常收尾的照写(带 thinking);error / aborted 收尾但已经说了半截的写成 interrupted;其余不写。
|
|
20
|
-
*/
|
|
21
|
-
export declare function outboundFromAssistant(m: AssistantMessage, omitThinking?: boolean): OutgoingMessage | null;
|
|
22
|
-
/**
|
|
23
|
-
* 带工具调用的 assistant 消息连同它的结果写成一条 tool 记录;每个调用的 summary 取工具的 label,没有 label 用名字。
|
|
24
|
-
* 没有工具调用的返回 null(那种走 outboundFromAssistant)。
|
|
25
|
-
*/
|
|
26
|
-
export declare function outboundFromTurn(m: AssistantMessage, toolResults: ToolResultMessage[], tools: {
|
|
27
|
-
name: string;
|
|
28
|
-
label: string;
|
|
29
|
-
}[], dataAccessDetailsOf?: (toolCallId: string) => unknown, sensitiveRun?: boolean): OutgoingMessage | null;
|
|
30
|
-
/**
|
|
31
|
-
* Agent run 完成后,把内存 transcript 里的 DataAccess 原始结果换成状态摘要。
|
|
32
|
-
* run 内不能提前替换:模型在 Tool 后续一轮还需要读取真实数据。
|
|
33
|
-
*/
|
|
34
|
-
export declare function redactSensitiveRun(messages: AgentMessage[], runMessages: AgentMessage[], dataAccessDetailsOf?: (toolCallId: string) => unknown): AgentMessage[];
|
|
35
|
-
/** note 消息写成 note 记录 */
|
|
36
|
-
export declare function outboundFromNote(n: NoteMessage): OutgoingMessage;
|
|
37
|
-
/** assistant 消息里所有 thinking 块的推理原文拼起来;一个字都没有返回 undefined */
|
|
38
|
-
export declare function thinkingOf(m: AssistantMessage): string | undefined;
|
|
39
|
-
/** assistant 消息里所有 text 块的正文拼起来 */
|
|
40
|
-
export declare function textOf(m: AssistantMessage): string;
|
|
41
|
-
/**
|
|
42
|
-
* 交给 pi 的 convertToLlm:note 变 user;相邻两条 user 合并成一条(正文中间隔一个换行);user / assistant / toolResult 原样。
|
|
43
|
-
* 返回的是新数组,合并出来的也是新对象,不改传进来的消息。
|
|
44
|
-
*/
|
|
45
|
-
export declare const convertToLlm: (messages: AgentMessage[]) => Message[];
|
|
46
|
-
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/conversation/convert.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EACX,gBAAgB,EAEhB,OAAO,EAIP,iBAAiB,EAGjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAgB,UAAU,EAAe,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGvG,yDAAyD;AACzD,MAAM,WAAW,aAAa;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACd;AA6BD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,aAAa,GAAG,YAAY,EAAE,CAmC9F;AAgFD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,gBAAgB,EAAE,YAAY,UAAQ,GAAG,eAAe,GAAG,IAAI,CAQvG;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC/B,CAAC,EAAE,gBAAgB,EACnB,WAAW,EAAE,iBAAiB,EAAE,EAChC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EACxC,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,EACrD,YAAY,UAAQ,GAClB,eAAe,GAAG,IAAI,CAqBxB;AASD;;;GAGG;AAEH,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,YAAY,EAAE,EACxB,WAAW,EAAE,YAAY,EAAE,EAC3B,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,GACnD,YAAY,EAAE,CAqBhB;AAED,wBAAwB;AACxB,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,GAAG,eAAe,CAEhE;AAED,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAMlE;AAED,mCAAmC;AACnC,wBAAgB,MAAM,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAKlD;AAYD;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,UAAU,YAAY,EAAE,KAAG,OAAO,EAa9D,CAAC"}
|