@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
package/dist/types.js CHANGED
@@ -1,8 +1,8 @@
1
1
  // 开发者契约 + 模块间共享的类型。设计正本:REDoc《【技术设计】搭子 runtime 基座》。
2
2
  //
3
- // 开发者交一个工厂:buddy: (conversation) => BuddyOptions。BuddyOptions 里没有一个自造字段——
4
- // 名字和签名全部从 pi 的 AgentOptions / AgentState 上 Pick,运行时只做两件事:
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,0EAA0E;AAC1E,2DAA2D;AAC3D,uFAAuF;AACvF,0CAA0C"}
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.0.3",
3
+ "version": "0.2.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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/conversation/convert.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- import type { MLBClient } from "../mlbClient.ts";
2
- export declare class Presence {
3
- private readonly client;
4
- private readonly key;
5
- /** 推送串行链:只保证顺序,不等它 */
6
- private chain;
7
- private deltaBuffer;
8
- private deltaTimer;
9
- private closed;
10
- constructor(client: MLBClient, key: string);
11
- /** 回合开始 on、收尾 off;工具跑起来时带 status 更新状态行 */
12
- replying(data: {
13
- on: boolean;
14
- status?: string;
15
- }): void;
16
- /** 正文碎片先攒着,120 毫秒内攒到的一起发 */
17
- delta(text: string): void;
18
- /** 把攒下的碎片立刻发出去;退役了就扔掉。写平台前、回合收尾前各叫一次,预览不落在正文后面 */
19
- flushDelta(): void;
20
- /** 退役:攒着的碎片扔掉,定时器清掉。replying off 仍然放行——收尾要把三个圆点熄掉 */
21
- close(): void;
22
- private clearTimer;
23
- }
24
- //# sourceMappingURL=presence.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../../src/conversation/presence.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAKjD,qBAAa,QAAQ;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,sBAAsB;IACtB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,UAAU,CAA4C;IAC9D,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM;IAK1C,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAItD,4BAA4B;IAC5B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWzB,kDAAkD;IAClD,UAAU,IAAI,IAAI;IAQlB,qDAAqD;IACrD,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,UAAU;CAKlB"}
@@ -1,56 +0,0 @@
1
- // 一场会话的在线态:replying 开关与工具状态行、生成中的正文碎片(delta)。
2
- // 管:把 replying / delta 按顺序推给平台(POST /internal/v1/push),只保证顺序、不等结果;delta 每 120 毫秒攒一帧。
3
- // 不管:什么时候该开关 replying、碎片从哪来(index.ts 按 Agent 事件调这里)。
4
- /** 生成中的正文碎片攒多久发一帧 delta */
5
- const DELTA_THROTTLE_MS = 120;
6
- export class Presence {
7
- client;
8
- key;
9
- /** 推送串行链:只保证顺序,不等它 */
10
- chain = Promise.resolve();
11
- deltaBuffer = "";
12
- deltaTimer;
13
- closed = false;
14
- constructor(client, key) {
15
- this.client = client;
16
- this.key = key;
17
- }
18
- /** 回合开始 on、收尾 off;工具跑起来时带 status 更新状态行 */
19
- replying(data) {
20
- this.chain = this.chain.then(() => this.client.push(this.key, "replying", data)).catch(() => { });
21
- }
22
- /** 正文碎片先攒着,120 毫秒内攒到的一起发 */
23
- delta(text) {
24
- if (text === "" || this.closed)
25
- return;
26
- this.deltaBuffer += text;
27
- if (this.deltaTimer === undefined) {
28
- this.deltaTimer = setTimeout(() => {
29
- this.deltaTimer = undefined;
30
- this.flushDelta();
31
- }, DELTA_THROTTLE_MS);
32
- }
33
- }
34
- /** 把攒下的碎片立刻发出去;退役了就扔掉。写平台前、回合收尾前各叫一次,预览不落在正文后面 */
35
- flushDelta() {
36
- this.clearTimer();
37
- const text = this.deltaBuffer;
38
- this.deltaBuffer = "";
39
- if (text === "" || this.closed)
40
- return;
41
- this.chain = this.chain.then(() => this.client.push(this.key, "delta", { text })).catch(() => { });
42
- }
43
- /** 退役:攒着的碎片扔掉,定时器清掉。replying off 仍然放行——收尾要把三个圆点熄掉 */
44
- close() {
45
- this.closed = true;
46
- this.clearTimer();
47
- this.deltaBuffer = "";
48
- }
49
- clearTimer() {
50
- if (this.deltaTimer === undefined)
51
- return;
52
- clearTimeout(this.deltaTimer);
53
- this.deltaTimer = undefined;
54
- }
55
- }
56
- //# sourceMappingURL=presence.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"presence.js","sourceRoot":"","sources":["../../src/conversation/presence.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,qFAAqF;AACrF,qDAAqD;AAIrD,2BAA2B;AAC3B,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B,MAAM,OAAO,QAAQ;IACH,MAAM,CAAY;IAClB,GAAG,CAAS;IAC7B,sBAAsB;IACd,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACzC,WAAW,GAAG,EAAE,CAAC;IACjB,UAAU,CAA4C;IACtD,MAAM,GAAG,KAAK,CAAC;IAEvB,YAAY,MAAiB,EAAE,GAAW;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,CAAC;IAED,0CAA0C;IAC1C,QAAQ,CAAC,IAAsC;QAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,4BAA4B;IAC5B,KAAK,CAAC,IAAY;QACjB,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACvC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;gBACjC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACvB,CAAC;IACF,CAAC;IAED,kDAAkD;IAClD,UAAU;QACT,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnG,CAAC;IAED,qDAAqD;IACrD,KAAK;QACJ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACvB,CAAC;IAEO,UAAU;QACjB,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,OAAO;QAC1C,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC7B,CAAC;CACD"}
@@ -1,36 +0,0 @@
1
- import type { MLBClient } from "../mlbClient.ts";
2
- import type { BuddyLogger, OutgoingMessage } from "../types.ts";
3
- export interface WriteBackDeps {
4
- client: MLBClient;
5
- key: string;
6
- buddyId: string;
7
- /** 本进程里这场会话的一次生命周期标识,进幂等键;重启后换一个,旧键不会撞新键 */
8
- runId: string;
9
- log: BuddyLogger;
10
- /** 每次真正写平台之前先调一下(把攒着的 delta 发完,预览不落在正文后面) */
11
- beforeSend: () => void;
12
- }
13
- export declare class WriteBack {
14
- private readonly deps;
15
- private queue;
16
- /** 串行链正在跑 */
17
- private sending;
18
- /** 幂等键里的自增号 */
19
- private sent;
20
- private retryDelay;
21
- /** close 时打断重发等待 */
22
- private readonly abort;
23
- /** 等队列清空的人 */
24
- private waiters;
25
- private closed;
26
- constructor(deps: WriteBackDeps);
27
- /** 入队即分配幂等键;退役后不收 */
28
- enqueue(message: OutgoingMessage): void;
29
- /** 等队列清空(或退役) */
30
- flush(): Promise<void>;
31
- /** 退役:正在退避等重发的立刻醒来并退出,队列清空 */
32
- close(): void;
33
- /** 一次发队头一条:delivered → 出队;rejected(4xx)→ warn 出队;throw(网络 / 5xx)→ 留队退避后带同一个键重发 */
34
- private drain;
35
- }
36
- //# sourceMappingURL=writeBack.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"writeBack.d.ts","sourceRoot":"","sources":["../../src/conversation/writeBack.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAMhE,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,WAAW,CAAC;IACjB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,qBAAa,SAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgB;IACrC,OAAO,CAAC,KAAK,CAAyB;IACtC,aAAa;IACb,OAAO,CAAC,OAAO,CAAS;IACxB,eAAe;IACf,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,UAAU,CAAsB;IACxC,oBAAoB;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,cAAc;IACd,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAS;gBAEX,IAAI,EAAE,aAAa;IAI/B,qBAAqB;IACrB,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAOvC,iBAAiB;IACjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,8BAA8B;IAC9B,KAAK,IAAI,IAAI;IAMb,kFAAkF;YACpE,KAAK;CA2CnB"}
@@ -1,114 +0,0 @@
1
- // 一场会话的写回:模型说的话怎么写回平台。
2
- // 管:入队那一刻分配幂等键(之后重发一字不变);串行 POST /internal/v1/messages;4xx 丢弃并 warn(平台明确拒绝,重发没用);
3
- // 网络错误 / 5xx 留队退避重发(1 秒起步、翻倍、封顶 10 秒);等队列清空;退役时清空并打断等待。
4
- // 不管:记录长什么样(convert.ts 产出、index.ts 交进来)、写之前要先把 delta 发完(调用方通过 beforeSend 挂进来)。
5
- import { errorText } from "../log.js";
6
- /** 写平台遇到网络错误 / 5xx 的重发间隔 */
7
- const WRITE_RETRY_MIN_MS = 1_000;
8
- const WRITE_RETRY_MAX_MS = 10_000;
9
- export class WriteBack {
10
- deps;
11
- queue = [];
12
- /** 串行链正在跑 */
13
- sending = false;
14
- /** 幂等键里的自增号 */
15
- sent = 0;
16
- retryDelay = WRITE_RETRY_MIN_MS;
17
- /** close 时打断重发等待 */
18
- abort = new AbortController();
19
- /** 等队列清空的人 */
20
- waiters = [];
21
- closed = false;
22
- constructor(deps) {
23
- this.deps = deps;
24
- }
25
- /** 入队即分配幂等键;退役后不收 */
26
- enqueue(message) {
27
- if (this.closed)
28
- return;
29
- this.sent += 1;
30
- this.queue.push({ ...message, idempotencyKey: `buddy:${this.deps.buddyId}:${this.deps.key}:${this.deps.runId}:${this.sent}` });
31
- void this.drain();
32
- }
33
- /** 等队列清空(或退役) */
34
- flush() {
35
- if (!this.sending && this.queue.length === 0)
36
- return Promise.resolve();
37
- return new Promise((resolve) => {
38
- this.waiters.push(resolve);
39
- });
40
- }
41
- /** 退役:正在退避等重发的立刻醒来并退出,队列清空 */
42
- close() {
43
- this.closed = true;
44
- this.abort.abort();
45
- this.queue = [];
46
- }
47
- /** 一次发队头一条:delivered → 出队;rejected(4xx)→ warn 出队;throw(网络 / 5xx)→ 留队退避后带同一个键重发 */
48
- async drain() {
49
- if (this.sending)
50
- return;
51
- this.sending = true;
52
- try {
53
- while (!this.closed && this.queue.length > 0) {
54
- const head = this.queue[0];
55
- this.deps.beforeSend();
56
- let result;
57
- try {
58
- result = await this.deps.client.writeMessages(this.deps.key, [head]);
59
- }
60
- catch (e) {
61
- this.deps.log.warn("写消息失败,稍后重发", {
62
- convoKey: this.deps.key,
63
- idempotencyKey: head.idempotencyKey,
64
- delayMs: this.retryDelay,
65
- error: errorText(e),
66
- });
67
- await waitMs(this.retryDelay, this.abort.signal);
68
- this.retryDelay = Math.min(this.retryDelay * 2, WRITE_RETRY_MAX_MS);
69
- continue;
70
- }
71
- this.retryDelay = WRITE_RETRY_MIN_MS;
72
- if (result.kind === "delivered") {
73
- this.deps.log.info("写回一条", { convoKey: this.deps.key, type: head.type, chars: head.text?.length ?? 0, idempotencyKey: head.idempotencyKey });
74
- }
75
- else {
76
- this.deps.log.warn("写消息被平台拒绝,丢弃", {
77
- convoKey: this.deps.key,
78
- idempotencyKey: head.idempotencyKey,
79
- type: head.type,
80
- status: result.status,
81
- body: result.body,
82
- });
83
- }
84
- this.queue.shift();
85
- }
86
- if (this.closed)
87
- this.queue = [];
88
- }
89
- finally {
90
- this.sending = false;
91
- const waiters = this.waiters;
92
- this.waiters = [];
93
- for (const resolve of waiters)
94
- resolve();
95
- }
96
- }
97
- }
98
- /** 等 ms 毫秒;signal 触发就提前返回(不 reject) */
99
- function waitMs(ms, signal) {
100
- return new Promise((resolve) => {
101
- if (signal.aborted) {
102
- resolve();
103
- return;
104
- }
105
- const finish = () => {
106
- clearTimeout(timer);
107
- signal.removeEventListener("abort", finish);
108
- resolve();
109
- };
110
- const timer = setTimeout(finish, ms);
111
- signal.addEventListener("abort", finish, { once: true });
112
- });
113
- }
114
- //# sourceMappingURL=writeBack.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"writeBack.js","sourceRoot":"","sources":["../../src/conversation/writeBack.ts"],"names":[],"mappings":"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"}