@my-life-buddies/buddy-runtime 0.0.3 → 0.2.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.
Files changed (80) hide show
  1. package/README.md +209 -45
  2. package/dist/conversation/agent.d.ts +6 -1
  3. package/dist/conversation/agent.d.ts.map +1 -1
  4. package/dist/conversation/agent.js +60 -53
  5. package/dist/conversation/agent.js.map +1 -1
  6. package/dist/conversation/agentMessageLLMMessageConverter.d.ts +8 -0
  7. package/dist/conversation/agentMessageLLMMessageConverter.d.ts.map +1 -0
  8. package/dist/conversation/agentMessageLLMMessageConverter.js +24 -0
  9. package/dist/conversation/agentMessageLLMMessageConverter.js.map +1 -0
  10. package/dist/conversation/history.d.ts +0 -7
  11. package/dist/conversation/history.d.ts.map +1 -1
  12. package/dist/conversation/history.js +3 -16
  13. package/dist/conversation/history.js.map +1 -1
  14. package/dist/conversation/index.d.ts +25 -22
  15. package/dist/conversation/index.d.ts.map +1 -1
  16. package/dist/conversation/index.js +141 -116
  17. package/dist/conversation/index.js.map +1 -1
  18. package/dist/conversation/mlbMessageAgentMessageConverter.d.ts +39 -0
  19. package/dist/conversation/mlbMessageAgentMessageConverter.d.ts.map +1 -0
  20. package/dist/conversation/{convert.js → mlbMessageAgentMessageConverter.js} +95 -113
  21. package/dist/conversation/mlbMessageAgentMessageConverter.js.map +1 -0
  22. package/dist/conversation/readMLBMessages.d.ts +31 -0
  23. package/dist/conversation/readMLBMessages.d.ts.map +1 -0
  24. package/dist/conversation/readMLBMessages.js +90 -0
  25. package/dist/conversation/readMLBMessages.js.map +1 -0
  26. package/dist/conversation/writeMLBMessage.d.ts +64 -0
  27. package/dist/conversation/writeMLBMessage.d.ts.map +1 -0
  28. package/dist/conversation/writeMLBMessage.js +214 -0
  29. package/dist/conversation/writeMLBMessage.js.map +1 -0
  30. package/dist/index.d.ts +5 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/mlbClient.d.ts +1 -126
  35. package/dist/mlbClient.d.ts.map +1 -1
  36. package/dist/mlbClient.js +2 -364
  37. package/dist/mlbClient.js.map +1 -1
  38. package/dist/platform/client.d.ts +29 -0
  39. package/dist/platform/client.d.ts.map +1 -0
  40. package/dist/platform/client.js +22 -0
  41. package/dist/platform/client.js.map +1 -0
  42. package/dist/platform/mlbClient.d.ts +133 -0
  43. package/dist/platform/mlbClient.d.ts.map +1 -0
  44. package/dist/platform/mlbClient.js +420 -0
  45. package/dist/platform/mlbClient.js.map +1 -0
  46. package/dist/platform/widgets.d.ts +74 -0
  47. package/dist/platform/widgets.d.ts.map +1 -0
  48. package/dist/platform/widgets.js +85 -0
  49. package/dist/platform/widgets.js.map +1 -0
  50. package/dist/server.d.ts.map +1 -1
  51. package/dist/server.js +8 -4
  52. package/dist/server.js.map +1 -1
  53. package/dist/tools/dataAccess.d.ts +8 -3
  54. package/dist/tools/dataAccess.d.ts.map +1 -1
  55. package/dist/tools/dataAccess.js +33 -5
  56. package/dist/tools/dataAccess.js.map +1 -1
  57. package/dist/tools/registry.d.ts +6 -0
  58. package/dist/tools/registry.d.ts.map +1 -0
  59. package/dist/tools/registry.js +23 -0
  60. package/dist/tools/registry.js.map +1 -0
  61. package/dist/tools/widgets.d.ts +3 -2
  62. package/dist/tools/widgets.d.ts.map +1 -1
  63. package/dist/tools/widgets.js +22 -53
  64. package/dist/tools/widgets.js.map +1 -1
  65. package/dist/types.d.ts +41 -13
  66. package/dist/types.d.ts.map +1 -1
  67. package/dist/types.js +3 -3
  68. package/dist/types.js.map +1 -1
  69. package/package.json +4 -3
  70. package/dist/conversation/convert.d.ts +0 -46
  71. package/dist/conversation/convert.d.ts.map +0 -1
  72. package/dist/conversation/convert.js.map +0 -1
  73. package/dist/conversation/presence.d.ts +0 -24
  74. package/dist/conversation/presence.d.ts.map +0 -1
  75. package/dist/conversation/presence.js +0 -56
  76. package/dist/conversation/presence.js.map +0 -1
  77. package/dist/conversation/writeBack.d.ts +0 -36
  78. package/dist/conversation/writeBack.d.ts.map +0 -1
  79. package/dist/conversation/writeBack.js +0 -114
  80. package/dist/conversation/writeBack.js.map +0 -1
@@ -1,42 +1,42 @@
1
- // 一场会话的纪律:什么时候拉、拉到怎么办、什么时候起回合、Agent 事件往哪送、怎么退役。
2
- // 管:同会话拉取串行链与读方向游标;首次拉取把全量历史灌进 Agent(重建),搭子最后一次说话之后有该答的就起回合;
1
+ // 一场会话的纪律:拉到消息怎么办、什么时候起回合、Agent 事件往哪送、怎么退役。
2
+ // 管:首次拉到的整批灌进 Agent(重建),搭子最后一次说话之后有该答的就起回合;
3
3
  // 之后每批按空闲 / 忙碌 × 要不要开口四路分发;
4
- // 回合(prompt → 把回合中排进队列的消息消化完 → 一句话没说就补一句提醒再跑一次);Agent 事件分给写回队列与在线态;
5
- // close(先标退役、再打断回合、等它收尾)。
6
- // 不管:Agent 怎么建(agent.ts)、拉回来的记录怎么分拣(history.ts)、写回平台(writeBack.ts)、replying / delta 推送(presence.ts)、
7
- // HTTP 请求本身(mlbClient.ts)、平台记录与 pi 消息的形状换算(convert.ts)、会话从哪来到哪去(server.ts 管 Map、空闲淘汰与 delete 事件)。
4
+ // 回合(prompt → 把回合中排进队列的消息消化完 → 一句话没说就补一句提醒再跑一次 → 收尾把这一轮的历史按消息时间排好);
5
+ // Agent 事件交给发平台的队列;close(先标退役、再打断回合、等它收尾)。
6
+ // 不管:什么时候拉、游标、翻页与重试(readMLBMessages.ts)、Agent 怎么建(agent.ts)、拉回来的记录怎么分拣(history.ts)、
7
+ // replying / delta / 写回怎么发(writeMLBMessage.ts)、HTTP 请求本身(mlbClient.ts)、
8
+ // MLBMessage 与 AgentMessage 的换算(mlbMessageAgentMessageConverter.ts)、会话从哪来到哪去(server.ts 管 Map、空闲淘汰与 delete 事件)。
8
9
  import { randomUUID } from "node:crypto";
9
- import { outboundFromAssistant, outboundFromNote, outboundFromTurn, redactSensitiveRun, textOf, toAgentMessages } from "./convert.js";
10
+ import { mlbMessagesToAgentMessages, textOf } from "./mlbMessageAgentMessageConverter.js";
10
11
  import { errorText } from "../log.js";
11
12
  import { modelIdentity } from "../model.js";
13
+ import { redactSensitiveRun } from "../tools/dataAccess.js";
12
14
  import { createAgent } from "./agent.js";
13
- import { incoming, maxSeq, splitForRebuild, theirsOf, wantsReply } from "./history.js";
14
- import { Presence } from "./presence.js";
15
- import { WriteBack } from "./writeBack.js";
16
- /** 每页拉多少条:平台钳在 1..200,翻页靠不满页 */
17
- const PULL_LIMIT = 200;
18
- const PULL_RETRY_MIN_MS = 1_000;
19
- const PULL_RETRY_MAX_MS = 30_000;
15
+ import { splitForRebuild, theirsOf, wantsReply } from "./history.js";
16
+ import { ReadMLBMessages } from "./readMLBMessages.js";
17
+ import { WriteMLBMessage } from "./writeMLBMessage.js";
20
18
  /** 回合跑完一句话都没说时,以 note 的身份补给模型的一句提醒 */
21
19
  const NUDGE = "你上一条回复正文是空的。把要说的话直接说出来。";
22
20
  export class ConversationHandle {
21
+ lifetime = new AbortController();
22
+ welcomeRequested = false;
23
+ steered = [];
24
+ policyStopped = false;
23
25
  deps;
24
26
  identity;
25
- presence;
26
- writeBack;
27
+ /** 模型收不收图片:一个进程只用一个模型,换算平台记录时按它决定图片块还是固定文字 */
28
+ imageInput;
29
+ reader;
30
+ writer;
27
31
  /** 懒建:第一次拉到消息时跑 factory 再 new */
28
32
  agent;
29
33
  dataAccessUsage;
30
- /** 同会话的拉取串行链:notify 只往链尾排,绝不并发拉 */
31
- pullChain = Promise.resolve();
32
- pullRetry;
33
- pullRetryDelay = PULL_RETRY_MIN_MS;
34
- /** 读方向游标:已经拉到并处理过的最大 seq(含自己写的) */
35
- pulledSeq = 0;
36
- /** 首次拉取(after=0 全量灌历史)做过没有 */
34
+ /** 首次拉到的整批灌进历史(重建)做过没有 */
37
35
  rebuilt = false;
38
36
  /** 忙时听见的、不用开口的旁听消息,回合收尾再进历史 */
39
37
  heard = [];
38
+ /** 最近一条该答的对方消息的平台 id:兜底回复的幂等键用它,同一句话只兜一次底 */
39
+ replyTo = "";
40
40
  /** 当前回合的 promise,close 要等它 */
41
41
  turn;
42
42
  /** 本回合有没有一条 assistant 消息带非空正文且正常收尾 */
@@ -49,17 +49,22 @@ export class ConversationHandle {
49
49
  constructor(deps) {
50
50
  this.deps = deps;
51
51
  this.identity = modelIdentity(deps.model);
52
- this.presence = new Presence(deps.client, deps.key);
53
- this.writeBack = new WriteBack({
52
+ this.imageInput = deps.model.input.includes("image");
53
+ this.reader = new ReadMLBMessages({
54
+ client: deps.client,
55
+ key: deps.key,
56
+ log: deps.log,
57
+ onMessages: (messages) => this.onMessages(messages),
58
+ });
59
+ this.writer = new WriteMLBMessage({
54
60
  client: deps.client,
55
61
  key: deps.key,
56
62
  buddyId: deps.buddyId,
57
63
  runId: randomUUID().slice(0, 8),
58
64
  log: deps.log,
59
- beforeSend: () => this.presence.flushDelta(),
60
65
  });
61
66
  }
62
- /** 正在跑回合(含收尾:等出站队列清空) */
67
+ /** 正在跑回合(含收尾:等发平台的队列清空) */
63
68
  get busy() {
64
69
  return this._busy;
65
70
  }
@@ -75,15 +80,13 @@ export class ConversationHandle {
75
80
  get transcript() {
76
81
  return this.agent?.state.messages ?? [];
77
82
  }
78
- /** SSE message 到了:把一次拉取排进串行链。已退役的直接忽略 */
79
- notify() {
83
+ /** SSE message 到了:让 reader 拉一次。已退役的直接忽略 */
84
+ notify(welcome = false) {
80
85
  if (this._closed)
81
86
  return;
82
- this.cancelPullRetry();
87
+ this.welcomeRequested ||= welcome;
83
88
  this._lastActivity = Date.now();
84
- this.pullChain = this.pullChain
85
- .then(() => this.pull())
86
- .catch((e) => this.deps.log.warn("处理拉取结果出错", { convoKey: this.deps.key, error: errorText(e) }));
89
+ this.reader.notify();
87
90
  }
88
91
  /**
89
92
  * SSE delete 到了(或 server 空闲淘汰、stop、会话起不来):先标退役,再打断正在跑的回合,等回合收尾。可以重复调。
@@ -94,80 +97,59 @@ export class ConversationHandle {
94
97
  this.agent?.abort();
95
98
  await this.turn;
96
99
  }
97
- /** 标退役:写回队列清空并打断重发等待(回合收尾才不会被它拖住)、攒着的 delta 扔掉 */
100
+ /** 标退役:不再拉、取消拉取重试;发平台的队列丢掉没发的字与写回、打断重发等待(回合收尾才不会被它拖住) */
98
101
  retire() {
99
102
  this._closed = true;
100
- this.cancelPullRetry();
101
- this.writeBack.close();
102
- this.presence.close();
103
+ this.lifetime.abort();
104
+ this.reader.close();
105
+ this.writer.close();
103
106
  }
104
- // —— 拉取
107
+ // —— 拉到消息
105
108
  /**
106
- * 一次拉取:从 pulledSeq 往后翻到不满页。第一次走重建,之后走 ingest。网络错误按 1s–30s 指数退避主动重试,新 SSE 会提前唤醒。
107
- * 平台的场合交代(context)是流里的一条记录,跟别的记录一起拉到;会话没了只靠 SSE delete 事件收,拉取这里不判。
109
+ * reader 交来一批:第一次走重建,之后走 ingest
110
+ * 平台的场合交代(context)是流里的一条记录,跟别的记录一起拉到;会话没了只靠 SSE delete 事件收,这里不判。
108
111
  */
109
- async pull() {
112
+ async onMessages(messages) {
110
113
  if (this._closed)
111
114
  return;
112
- const batch = [];
113
- let after = this.pulledSeq;
114
- for (;;) {
115
- let page;
116
- try {
117
- page = await this.deps.client.pullMessages(this.deps.key, after, PULL_LIMIT);
118
- }
119
- catch (e) {
120
- this.deps.log.warn("拉消息失败,稍后主动重试", { convoKey: this.deps.key, after, delayMs: this.pullRetryDelay, error: errorText(e) });
121
- this.schedulePullRetry();
122
- return;
123
- }
124
- this.cancelPullRetry();
125
- if (this._closed)
126
- return;
127
- batch.push(...page.messages);
128
- if (page.messages.length < PULL_LIMIT)
129
- break;
130
- after = page.messages[page.messages.length - 1].seq;
131
- }
132
- this.pullRetryDelay = PULL_RETRY_MIN_MS;
133
115
  if (this.rebuilt) {
134
- this.ingest(batch);
116
+ this.ingest(messages);
135
117
  return;
136
118
  }
119
+ // 首次拉到空的先不建会话,等下一次通知再拉:空数组的 every 为真,不拦会被当成只有场合记录的新会话误发问候
120
+ if (!messages.length)
121
+ return;
137
122
  try {
138
- await this.rebuild(batch);
123
+ if (this.welcomeRequested) {
124
+ this.welcomeRequested = false;
125
+ if (this.deps.welcome && messages.every(m => m.type === "context" && m.author === "platform")) {
126
+ this.writer.enqueueMessage({ type: "message", text: this.deps.welcome, idempotencyKey: `welcome:${this.deps.key}` });
127
+ await this.writer.flush();
128
+ if (!this._closed) {
129
+ this.reader.resetCursor();
130
+ this.reader.notify();
131
+ }
132
+ return;
133
+ }
134
+ }
135
+ await this.rebuild(messages);
139
136
  }
140
137
  catch (e) {
141
- // factory 抛错、工具重名之类:这场会话起不来。退役并让 server 删掉,下一条消息会重新起一场再试
142
138
  this.deps.log.error("起会话失败", { convoKey: this.deps.key, error: errorText(e) });
143
139
  this.retire();
144
140
  this.deps.onStartFailed();
145
141
  }
146
142
  }
147
- schedulePullRetry() {
148
- if (this._closed || this.pullRetry !== undefined)
149
- return;
150
- const delay = this.pullRetryDelay;
151
- this.pullRetryDelay = Math.min(delay * 2, PULL_RETRY_MAX_MS);
152
- this.pullRetry = setTimeout(() => {
153
- this.pullRetry = undefined;
154
- this.notify();
155
- }, delay);
156
- this.pullRetry.unref();
157
- }
158
- cancelPullRetry() {
159
- if (this.pullRetry === undefined)
160
- return;
161
- clearTimeout(this.pullRetry);
162
- this.pullRetry = undefined;
163
- }
164
143
  /**
165
- * 首次拉取:建 Agent,以搭子最后一次写的记录为界,之前的整段灌进 state.messages(不经事件,天然不会被写回平台);
144
+ * 首次拉取:建 Agent,以搭子最后一次写的记录为界,之前的整段按消息时间的先后灌进 state.messages(不经事件,天然不会被写回平台);
166
145
  * 之后的是搭子还没回应过的,交给 admit 按平时同一条规矩处理:有该答的就起回合,没有就只进历史。
167
146
  */
168
147
  async rebuild(records) {
169
148
  const created = await createAgent({
170
149
  ...this.deps,
150
+ signal: this.lifetime.signal,
151
+ enqueueMessage: message => this.writer.enqueueMessage(message),
152
+ onPolicyStop: () => { this.policyStopped = true; },
171
153
  onEvent: (a, event) => this.onEvent(a, event),
172
154
  });
173
155
  if (this._closed)
@@ -176,22 +158,17 @@ export class ConversationHandle {
176
158
  this.agent = agent;
177
159
  this.dataAccessUsage = created.dataAccessUsage;
178
160
  const { history, pending } = splitForRebuild(records);
179
- agent.state.messages = toAgentMessages(history, this.identity);
180
- this.pulledSeq = maxSeq(records, this.pulledSeq);
161
+ agent.state.messages = mlbMessagesToAgentMessages(history, this.identity, this.imageInput);
181
162
  this.rebuilt = true;
182
163
  this.deps.log.info("历史已重建", { convoKey: this.deps.key, records: history.length, pending: pending.length, transcript: agent.state.messages.length });
183
164
  this.admit(theirsOf(pending));
184
165
  }
185
- /** 一批新记录:游标推到最大 seq(自己写的也算,下次不再拉到),对方的交给 admit */
166
+ /** 一批新记录(reader 只交比上一批晚的,自己写回的也在里面):对方的交给 admit */
186
167
  ingest(batch) {
187
- if (this.agent === undefined || this._closed)
188
- return;
189
- const { fresh, theirs } = incoming(batch, this.pulledSeq);
190
- if (fresh.length === 0)
168
+ if (this.agent === undefined || this._closed || batch.length === 0)
191
169
  return;
192
- this.pulledSeq = maxSeq(fresh, this.pulledSeq);
193
170
  this._lastActivity = Date.now();
194
- this.admit(theirs);
171
+ this.admit(theirsOf(batch));
195
172
  }
196
173
  /**
197
174
  * 搭子还没回应过的对方记录(重建时是搭子最后一次说话之后的那段,平时是这批新来的),换成 user 消息分发。
@@ -202,10 +179,12 @@ export class ConversationHandle {
202
179
  const agent = this.agent;
203
180
  if (agent === undefined || this._closed || theirs.length === 0)
204
181
  return;
205
- const messages = toAgentMessages(theirs, this.identity);
182
+ const messages = mlbMessagesToAgentMessages(theirs, this.identity, this.imageInput);
206
183
  if (messages.length === 0)
207
184
  return;
208
185
  const shouldReply = wantsReply(theirs);
186
+ if (shouldReply)
187
+ this.replyTo = theirs.filter((m) => m.author === "user").at(-1)?.id ?? this.replyTo;
209
188
  if (!this._busy) {
210
189
  if (shouldReply)
211
190
  this.turn = this.runTurn(messages);
@@ -214,8 +193,10 @@ export class ConversationHandle {
214
193
  return;
215
194
  }
216
195
  if (shouldReply)
217
- for (const m of messages)
196
+ for (const m of messages) {
197
+ this.steered.push(m);
218
198
  agent.steer(m);
199
+ }
219
200
  else
220
201
  this.heard.push(...messages);
221
202
  }
@@ -223,7 +204,8 @@ export class ConversationHandle {
223
204
  /**
224
205
  * 跑一个回合。messages 有值就 prompt 它们;没值(收尾时发现队列里还有消息)就直接 continue。
225
206
  * prompt 完把回合中 steer 进来的消化完;一句话没说就 followUp 一条 note 提醒再跑一次。
226
- * 收尾:heard 进历史、delta 发完、replying 关掉、等出站队列清空,才算不忙。
207
+ * 收尾:replying 关掉、等发平台的队列清空(每条写回的消息都拿到了平台定的时间)、heard 进历史、
208
+ * 这一轮进历史的消息按时间排好,才算不忙——排完的顺序跟手机上、跟重建出来的一样。
227
209
  * 收尾期间又有人 steer(busy 还是 true,走不了 prompt),就接着再跑一个回合把它消化掉。
228
210
  */
229
211
  async runTurn(messages) {
@@ -231,19 +213,35 @@ export class ConversationHandle {
231
213
  if (agent === undefined || this._closed)
232
214
  return;
233
215
  this._busy = true;
216
+ this.policyStopped = false;
234
217
  this.spoke = false;
235
218
  this.failed = false;
236
- this.presence.replying({ on: true });
219
+ const turnStart = agent.state.messages.length;
220
+ this.writer.replying({ on: true });
237
221
  const startedAt = Date.now();
238
- this.deps.log.info("回合开始", { convoKey: this.deps.key, prompt: messages?.length ?? 0, transcript: agent.state.messages.length });
222
+ this.deps.log.info("回合开始", { convoKey: this.deps.key, prompt: messages?.length ?? 0, transcript: turnStart });
239
223
  try {
240
224
  if (messages !== undefined)
241
225
  await agent.prompt(messages);
242
226
  this.deps.log.info("prompt 返回", { convoKey: this.deps.key, queued: agent.hasQueuedMessages(), spoke: this.spoke, failed: this.failed });
243
- while (!this._closed && agent.hasQueuedMessages())
244
- await agent.continue();
227
+ while (!this._closed && agent.hasQueuedMessages()) {
228
+ // pi 在 shouldStopAfterTurn 后不取 steering;若末尾为 toolResult,
229
+ // continue 只会重跑旧输入。新用户消息必须作为新的 prompt 消费。
230
+ const queued = this.steered.splice(0);
231
+ if (queued.length) {
232
+ agent.clearSteeringQueue();
233
+ this.policyStopped = false;
234
+ await agent.prompt(queued);
235
+ }
236
+ else if (this.policyStopped) {
237
+ agent.clearFollowUpQueue();
238
+ break;
239
+ }
240
+ else
241
+ await agent.continue();
242
+ }
245
243
  // 正常收尾却一句正文没有才补;出错 / 被掐断的不补
246
- if (!this._closed && !this.spoke && !this.failed) {
244
+ if (!this._closed && !this.spoke && !this.failed && !this.policyStopped) {
247
245
  this.deps.log.info("空回复,补一句", { convoKey: this.deps.key });
248
246
  const nudge = { role: "note", text: NUDGE, timestamp: Date.now() };
249
247
  agent.followUp(nudge);
@@ -251,16 +249,21 @@ export class ConversationHandle {
251
249
  }
252
250
  }
253
251
  catch (e) {
252
+ this.failed = true;
254
253
  this.deps.log.warn("回合出错", { convoKey: this.deps.key, error: errorText(e) });
255
254
  }
256
255
  finally {
256
+ if (!this._closed && this.deps.errorReply && (this.failed || !this.spoke)) {
257
+ this.writer.enqueueMessage({ type: "message", text: this.deps.errorReply, idempotencyKey: `fallback:${this.deps.key}:${this.replyTo}` });
258
+ }
259
+ this.writer.replying({ on: false });
260
+ await this.writer.flush();
257
261
  if (this.heard.length > 0) {
258
262
  agent.state.messages.push(...this.heard);
259
263
  this.heard = [];
260
264
  }
261
- this.presence.flushDelta();
262
- this.presence.replying({ on: false });
263
- await this.writeBack.flush();
265
+ const history = agent.state.messages;
266
+ agent.state.messages = [...history.slice(0, turnStart), ...sortByTimestamp(history.slice(turnStart))];
264
267
  this._busy = false;
265
268
  this._lastActivity = Date.now();
266
269
  this.deps.log.info("回合收尾", {
@@ -276,7 +279,7 @@ export class ConversationHandle {
276
279
  }
277
280
  // —— Agent 事件
278
281
  /**
279
- * Agent 事件 → 写回队列 / 在线态。pi 会等这个函数返回再往下走,所以只做同步入队,网络在队列自己的链上;
282
+ * Agent 事件 → 发平台的队列。pi 会等这个函数返回再往下走,所以只做同步入队,网络在队列自己的链上;
280
283
  * 抛错会让 pi 把整个回合判失败,所以整体 try/catch。退役后的事件直接丢。
281
284
  */
282
285
  onEvent(agent, event) {
@@ -289,13 +292,23 @@ export class ConversationHandle {
289
292
  break;
290
293
  case "agent_end":
291
294
  if (this.dataAccessUsage?.hasUsage()) {
292
- agent.state.messages = redactSensitiveRun(agent.state.messages, event.messages, (toolCallId) => this.dataAccessUsage?.details(toolCallId));
295
+ const before = agent.state.messages;
296
+ const after = redactSensitiveRun(before, event.messages, (toolCallId) => this.dataAccessUsage?.details(toolCallId));
297
+ agent.state.messages = after;
298
+ // 脱敏换成了副本:还没写完的那几条,平台回的时间要写到副本上
299
+ const replaced = new Map();
300
+ before.forEach((m, i) => {
301
+ if (after[i] !== m)
302
+ replaced.set(m, after[i]);
303
+ });
304
+ this.writer.retarget(replaced);
293
305
  }
294
306
  this.dataAccessUsage?.clear();
295
307
  this.deps.log.info("run 结束", { convoKey: this.deps.key, newMessages: event.messages.length, queued: agent.hasQueuedMessages() });
296
308
  break;
297
309
  case "message_end": {
298
310
  const m = event.message;
311
+ this.steered = this.steered.filter(queued => queued !== m);
299
312
  if (m.role === "assistant") {
300
313
  this.deps.log.info("assistant 一段", {
301
314
  convoKey: this.deps.key,
@@ -309,34 +322,29 @@ export class ConversationHandle {
309
322
  else if (textOf(m) !== "")
310
323
  this.spoke = true;
311
324
  // 带工具调用的等 turn_end 连结果一起写成 tool 记录
312
- if (!m.content.some((block) => block.type === "toolCall")) {
313
- const out = outboundFromAssistant(m, this.dataAccessUsage?.hasUsage());
314
- if (out !== null)
315
- this.writeBack.enqueue(out);
316
- }
325
+ if (!m.content.some((block) => block.type === "toolCall"))
326
+ this.writer.assistant(m, this.dataAccessUsage?.hasUsage());
317
327
  }
318
328
  else if (m.role === "note") {
319
- this.writeBack.enqueue(outboundFromNote(m));
329
+ this.writer.note(m);
320
330
  }
321
331
  break;
322
332
  }
323
333
  case "turn_end": {
324
334
  const m = event.message;
325
335
  if (m.role === "assistant" && m.content.some((block) => block.type === "toolCall")) {
326
- const out = outboundFromTurn(m, event.toolResults, agent.state.tools, (toolCallId) => this.dataAccessUsage?.details(toolCallId), this.dataAccessUsage?.hasUsage());
327
- if (out !== null)
328
- this.writeBack.enqueue(out);
336
+ this.writer.toolStep(m, event.toolResults, agent.state.tools, (toolCallId) => this.dataAccessUsage?.details(toolCallId), this.dataAccessUsage?.hasUsage());
329
337
  }
330
338
  break;
331
339
  }
332
340
  case "message_update":
333
341
  if (event.assistantMessageEvent.type === "text_delta")
334
- this.presence.delta(event.assistantMessageEvent.delta);
342
+ this.writer.delta(event.assistantMessageEvent.delta);
335
343
  break;
336
344
  case "tool_execution_start": {
337
345
  const label = agent.state.tools.find((t) => t.name === event.toolName)?.label;
338
346
  if (label)
339
- this.presence.replying({ on: true, status: label });
347
+ this.writer.replying({ on: true, status: label });
340
348
  break;
341
349
  }
342
350
  default:
@@ -348,4 +356,21 @@ export class ConversationHandle {
348
356
  }
349
357
  }
350
358
  }
359
+ /**
360
+ * 回合收尾:这一轮进历史的消息按消息时间排(稳定排序,时间一样的保持原来的先后)。
361
+ * 工具结果跟着它那一步的 assistant 消息走、不单独排——模型那边一步的调用和结果必须挨着。
362
+ * 时间的来处:别人的消息是平台记录上的,搭子写回的是平台回的(writeMLBMessage.ts 写进来),没写回平台的保留本地时刻
363
+ */
364
+ function sortByTimestamp(messages) {
365
+ const steps = [];
366
+ for (const m of messages) {
367
+ const step = steps[steps.length - 1];
368
+ if (m.role === "toolResult" && step !== undefined)
369
+ step.push(m);
370
+ else
371
+ steps.push([m]);
372
+ }
373
+ steps.sort((a, b) => a[0].timestamp - b[0].timestamp);
374
+ return steps.flat();
375
+ }
351
376
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/conversation/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/conversation/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { AgentMessage } from "@earendil-works/pi-agent-core";
2
+ import type { AssistantMessage, ToolResultMessage } from "@earendil-works/pi-ai";
3
+ import type { MLBMessage, MLBMessageToWrite, NoteMessage } 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(群里带成员前缀);image 变 user,正文前标「[图片 #消息 id]」,后面跟图片块;
13
+ * 带引用的,正文开头加一行「[引用 发言人:原话]」,引用的是图片写「[引用 发言人的图片 #被引消息 id]」;
14
+ * system 变 user(带「群里发生了一件事」)、messagesCard 按条目顺序展开成 user(卡里的图跟在那条正文后面)、
15
+ * 平台的场合交代 context 原样变 user(开头自带「平台交代给你的情况」那句用法,不套前缀);
16
+ * 搭子的 message / checkin 变 assistant,tool 变 assistant + 每个调用一条 toolResult,note 变 note。
17
+ * imageInput:模型收不收图片。不收时图片块换成固定文字;平台没给图片内容的也换成固定文字。
18
+ */
19
+ export declare function mlbMessagesToAgentMessages(records: MLBMessage[], identity: ModelIdentity, imageInput: boolean): AgentMessage[];
20
+ /**
21
+ * 不带工具调用的 assistant 消息写成 message 记录。
22
+ * 正常收尾的照写(带 thinking);error / aborted 收尾但已经说了半截的写成 interrupted;其余不写。
23
+ */
24
+ export declare function assistantMessageToMLBMessage(m: AssistantMessage, omitThinking?: boolean): MLBMessageToWrite | null;
25
+ /**
26
+ * 带工具调用的 assistant 消息连同它的结果写成一条 tool 记录;每个调用的 summary 取工具的 label,没有 label 用名字。
27
+ * 没有工具调用的返回 null(那种走 assistantMessageToMLBMessage)。
28
+ */
29
+ export declare function toolStepToMLBMessage(m: AssistantMessage, toolResults: ToolResultMessage[], tools: {
30
+ name: string;
31
+ label: string;
32
+ }[], dataAccessDetailsOf?: (toolCallId: string) => unknown, sensitiveRun?: boolean): MLBMessageToWrite | null;
33
+ /** note 消息写成 note 记录 */
34
+ export declare function noteMessageToMLBMessage(n: NoteMessage): MLBMessageToWrite;
35
+ /** assistant 消息里所有 thinking 块的推理原文拼起来;一个字都没有返回 undefined */
36
+ export declare function thinkingOf(m: AssistantMessage): string | undefined;
37
+ /** assistant 消息里所有 text 块的正文拼起来 */
38
+ export declare function textOf(m: AssistantMessage): string;
39
+ //# sourceMappingURL=mlbMessageAgentMessageConverter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mlbMessageAgentMessageConverter.d.ts","sourceRoot":"","sources":["../../src/conversation/mlbMessageAgentMessageConverter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAwD,iBAAiB,EAAsB,MAAM,uBAAuB,CAAC;AAC3J,OAAO,KAAK,EAA0B,UAAU,EAAE,iBAAiB,EAAe,WAAW,EAAE,MAAM,aAAa,CAAC;AAGnH,yDAAyD;AACzD,MAAM,WAAW,aAAa;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACd;AAoCD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,GAAG,YAAY,EAAE,CAyC9H;AAqHD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,gBAAgB,EAAE,YAAY,UAAQ,GAAG,iBAAiB,GAAG,IAAI,CAQhH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CACnC,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,iBAAiB,GAAG,IAAI,CAqB1B;AASD,wBAAwB;AACxB,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAEzE;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"}