@downcity/agent 1.1.217 → 1.1.222

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 (147) hide show
  1. package/bin/agent/local/services/AgentSessions.d.ts.map +1 -1
  2. package/bin/agent/local/services/AgentSessions.js +1 -4
  3. package/bin/agent/local/services/AgentSessions.js.map +1 -1
  4. package/bin/agent/remote/RemoteSession.d.ts +9 -3
  5. package/bin/agent/remote/RemoteSession.d.ts.map +1 -1
  6. package/bin/agent/remote/RemoteSession.js +19 -4
  7. package/bin/agent/remote/RemoteSession.js.map +1 -1
  8. package/bin/agent/remote/RemoteTransport.d.ts +7 -3
  9. package/bin/agent/remote/RemoteTransport.d.ts.map +1 -1
  10. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts +5 -2
  11. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -1
  12. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +25 -11
  13. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +1 -1
  14. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts +5 -2
  15. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts.map +1 -1
  16. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js +5 -2
  17. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js.map +1 -1
  18. package/bin/executor/types/SessionRecords.d.ts +2 -0
  19. package/bin/executor/types/SessionRecords.d.ts.map +1 -1
  20. package/bin/executor/types/SessionRecords.js.map +1 -1
  21. package/bin/index.d.ts +5 -2
  22. package/bin/index.d.ts.map +1 -1
  23. package/bin/index.js +1 -0
  24. package/bin/index.js.map +1 -1
  25. package/bin/rpc/Client.d.ts +11 -4
  26. package/bin/rpc/Client.d.ts.map +1 -1
  27. package/bin/rpc/Client.js +14 -3
  28. package/bin/rpc/Client.js.map +1 -1
  29. package/bin/session/Session.d.ts +13 -3
  30. package/bin/session/Session.d.ts.map +1 -1
  31. package/bin/session/Session.js +47 -18
  32. package/bin/session/Session.js.map +1 -1
  33. package/bin/session/recorder/JsonlSessionMessageStore.d.ts +45 -0
  34. package/bin/session/recorder/JsonlSessionMessageStore.d.ts.map +1 -0
  35. package/bin/session/recorder/JsonlSessionMessageStore.js +127 -0
  36. package/bin/session/recorder/JsonlSessionMessageStore.js.map +1 -0
  37. package/bin/session/recorder/SessionMessageCodec.d.ts +20 -0
  38. package/bin/session/recorder/SessionMessageCodec.d.ts.map +1 -0
  39. package/bin/session/recorder/SessionMessageCodec.js +252 -0
  40. package/bin/session/recorder/SessionMessageCodec.js.map +1 -0
  41. package/bin/session/recorder/SessionMessageReducer.d.ts +12 -0
  42. package/bin/session/recorder/SessionMessageReducer.d.ts.map +1 -0
  43. package/bin/session/recorder/SessionMessageReducer.js +109 -0
  44. package/bin/session/recorder/SessionMessageReducer.js.map +1 -0
  45. package/bin/session/recorder/SessionRecorder.d.ts +177 -0
  46. package/bin/session/recorder/SessionRecorder.d.ts.map +1 -0
  47. package/bin/session/recorder/SessionRecorder.js +610 -0
  48. package/bin/session/recorder/SessionRecorder.js.map +1 -0
  49. package/bin/session/recorder/SessionRecorderCompaction.d.ts +18 -0
  50. package/bin/session/recorder/SessionRecorderCompaction.d.ts.map +1 -0
  51. package/bin/session/recorder/SessionRecorderCompaction.js +141 -0
  52. package/bin/session/recorder/SessionRecorderCompaction.js.map +1 -0
  53. package/bin/session/recorder/SessionRecorderHistoryStore.d.ts +66 -0
  54. package/bin/session/recorder/SessionRecorderHistoryStore.d.ts.map +1 -0
  55. package/bin/session/recorder/SessionRecorderHistoryStore.js +195 -0
  56. package/bin/session/recorder/SessionRecorderHistoryStore.js.map +1 -0
  57. package/bin/session/runtime/SessionMessageEventHub.d.ts +15 -0
  58. package/bin/session/runtime/SessionMessageEventHub.d.ts.map +1 -0
  59. package/bin/session/runtime/SessionMessageEventHub.js +28 -0
  60. package/bin/session/runtime/SessionMessageEventHub.js.map +1 -0
  61. package/bin/session/runtime/SessionPromptRuntime.d.ts +7 -13
  62. package/bin/session/runtime/SessionPromptRuntime.d.ts.map +1 -1
  63. package/bin/session/runtime/SessionPromptRuntime.js +13 -13
  64. package/bin/session/runtime/SessionPromptRuntime.js.map +1 -1
  65. package/bin/session/services/SessionStateService.d.ts +7 -3
  66. package/bin/session/services/SessionStateService.d.ts.map +1 -1
  67. package/bin/session/services/SessionStateService.js +132 -72
  68. package/bin/session/services/SessionStateService.js.map +1 -1
  69. package/bin/session/services/SessionTurnService.d.ts +4 -0
  70. package/bin/session/services/SessionTurnService.d.ts.map +1 -1
  71. package/bin/session/services/SessionTurnService.js +82 -52
  72. package/bin/session/services/SessionTurnService.js.map +1 -1
  73. package/bin/session/services/SessionViewService.d.ts +8 -3
  74. package/bin/session/services/SessionViewService.d.ts.map +1 -1
  75. package/bin/session/services/SessionViewService.js +10 -5
  76. package/bin/session/services/SessionViewService.js.map +1 -1
  77. package/bin/session/storage/Persistence.d.ts +6 -0
  78. package/bin/session/storage/Persistence.d.ts.map +1 -1
  79. package/bin/session/storage/Persistence.js +7 -0
  80. package/bin/session/storage/Persistence.js.map +1 -1
  81. package/bin/session/storage/RuntimeSessionPort.d.ts +3 -2
  82. package/bin/session/storage/RuntimeSessionPort.d.ts.map +1 -1
  83. package/bin/session/storage/RuntimeSessionPort.js.map +1 -1
  84. package/bin/types/agent/SessionActor.d.ts +10 -4
  85. package/bin/types/agent/SessionActor.d.ts.map +1 -1
  86. package/bin/types/rpc/RpcProtocol.d.ts +20 -6
  87. package/bin/types/rpc/RpcProtocol.d.ts.map +1 -1
  88. package/bin/types/runtime/agent/AgentContext.d.ts +4 -3
  89. package/bin/types/runtime/agent/AgentContext.d.ts.map +1 -1
  90. package/bin/types/runtime/agent/AgentContext.js.map +1 -1
  91. package/bin/types/sdk/AgentSessionEvent.d.ts +2 -1
  92. package/bin/types/sdk/AgentSessionEvent.d.ts.map +1 -1
  93. package/bin/types/session/SessionMessage.d.ts +217 -0
  94. package/bin/types/session/SessionMessage.d.ts.map +1 -0
  95. package/bin/types/session/SessionMessage.js +8 -0
  96. package/bin/types/session/SessionMessage.js.map +1 -0
  97. package/bin/types/session/SessionMessageMutation.d.ts +92 -0
  98. package/bin/types/session/SessionMessageMutation.d.ts.map +1 -0
  99. package/bin/types/session/SessionMessageMutation.js +21 -0
  100. package/bin/types/session/SessionMessageMutation.js.map +1 -0
  101. package/package.json +3 -3
  102. package/scripts/agent-env.test.mjs +4 -4
  103. package/scripts/session-action-message.test.mjs +98 -27
  104. package/scripts/session-list-title.test.mjs +6 -19
  105. package/scripts/session-prompt-runtime.test.mjs +4 -16
  106. package/scripts/session-recorder.test.mjs +245 -0
  107. package/scripts/session-title-event.test.mjs +10 -18
  108. package/src/agent/local/services/AgentSessions.ts +1 -3
  109. package/src/agent/remote/RemoteSession.ts +35 -7
  110. package/src/agent/remote/RemoteTransport.ts +17 -6
  111. package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +45 -13
  112. package/src/agent/remote/transports/RpcRemoteAgentTransport.ts +19 -6
  113. package/src/executor/types/SessionRecords.ts +2 -0
  114. package/src/index.ts +23 -5
  115. package/src/rpc/Client.ts +29 -8
  116. package/src/session/Session.ts +65 -31
  117. package/src/session/recorder/JsonlSessionMessageStore.ts +162 -0
  118. package/src/session/recorder/SessionMessageCodec.ts +279 -0
  119. package/src/session/recorder/SessionMessageReducer.ts +155 -0
  120. package/src/session/recorder/SessionRecorder.ts +812 -0
  121. package/src/session/recorder/SessionRecorderCompaction.ts +187 -0
  122. package/src/session/recorder/SessionRecorderHistoryStore.ts +276 -0
  123. package/src/session/runtime/SessionMessageEventHub.ts +35 -0
  124. package/src/session/runtime/SessionPromptRuntime.ts +23 -24
  125. package/src/session/services/SessionStateService.ts +151 -80
  126. package/src/session/services/SessionTurnService.ts +88 -59
  127. package/src/session/services/SessionViewService.ts +25 -13
  128. package/src/session/storage/Persistence.ts +13 -0
  129. package/src/session/storage/RuntimeSessionPort.ts +6 -4
  130. package/src/types/agent/SessionActor.ts +26 -6
  131. package/src/types/rpc/RpcProtocol.ts +20 -6
  132. package/src/types/runtime/agent/AgentContext.ts +8 -2
  133. package/src/types/sdk/AgentSessionEvent.ts +2 -0
  134. package/src/types/session/SessionMessage.ts +247 -0
  135. package/src/types/session/SessionMessageMutation.ts +121 -0
  136. package/tsconfig.tsbuildinfo +1 -1
  137. package/bin/session/SessionEventMapper.d.ts +0 -32
  138. package/bin/session/SessionEventMapper.d.ts.map +0 -1
  139. package/bin/session/SessionEventMapper.js +0 -131
  140. package/bin/session/SessionEventMapper.js.map +0 -1
  141. package/bin/types/sdk/InternalUiChunkEvent.d.ts +0 -100
  142. package/bin/types/sdk/InternalUiChunkEvent.d.ts.map +0 -1
  143. package/bin/types/sdk/InternalUiChunkEvent.js +0 -9
  144. package/bin/types/sdk/InternalUiChunkEvent.js.map +0 -1
  145. package/scripts/session-history-archive.test.mjs +0 -188
  146. package/src/session/SessionEventMapper.ts +0 -148
  147. package/src/types/sdk/InternalUiChunkEvent.ts +0 -108
@@ -0,0 +1,141 @@
1
+ /**
2
+ * SessionRecorder canonical 上下文压缩。
3
+ *
4
+ * 压缩只追加一条 internal summary Message,不删除、不归档、不重写 Mutation 日志。
5
+ */
6
+ import { generateText } from "ai";
7
+ import { generateId } from "../../utils/Id.js";
8
+ import { build_initial_session_compaction_prompt, build_update_session_compaction_prompt, SESSION_COMPACTION_SYSTEM_PROMPT, } from "../../executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.js";
9
+ import { to_executor_ui_message } from "../../session/recorder/SessionMessageCodec.js";
10
+ /** 必要时把较早上下文追加为 canonical internal summary。 */
11
+ export async function compact_session_recorder_messages(input) {
12
+ const page = await input.recorder.list_messages({
13
+ limit: 500,
14
+ include_internal: true,
15
+ });
16
+ const context_messages = project_current_context(page.items);
17
+ if (context_messages.length < 4) {
18
+ return { compacted: false, reason: "small_messages" };
19
+ }
20
+ const system_text = input.compact_input.system
21
+ .map((message) => String(message.content || ""))
22
+ .join("\n\n");
23
+ const estimated_tokens = Math.ceil(`${system_text}\n${JSON.stringify(context_messages)}`.length / 3);
24
+ if (estimated_tokens <= input.compact_input.maxInputTokensApprox) {
25
+ return { compacted: false, reason: "under_budget" };
26
+ }
27
+ const ratio = Math.max(0.1, Math.min(0.9, input.compact_input.compactRatio));
28
+ const compact_count = Math.max(2, Math.min(context_messages.length - 1, Math.floor(context_messages.length * ratio)));
29
+ const older = context_messages.slice(0, compact_count);
30
+ const boundary = [...older]
31
+ .reverse()
32
+ .find((message) => message.type !== "assistant" || message.kind !== "summary");
33
+ if (!boundary)
34
+ return { compacted: false, reason: "nothing_to_compact" };
35
+ const action_id = `compacting:${input.recorder.session_id}:${generateId()}`;
36
+ await publish_action(input.compact_input.onAction, {
37
+ id: action_id,
38
+ session_id: input.recorder.session_id,
39
+ title: "Compacting session messages",
40
+ state: "running",
41
+ });
42
+ const previous_summary = older.find((message) => message.type === "assistant" && message.kind === "summary");
43
+ const conversation_text = older
44
+ .filter((message) => message !== previous_summary)
45
+ .map((message) => message_to_compaction_text(message))
46
+ .filter(Boolean)
47
+ .join("\n")
48
+ .slice(-24_000);
49
+ const previous_summary_text = previous_summary
50
+ ? assistant_text(previous_summary)
51
+ : "";
52
+ const prompt = previous_summary_text
53
+ ? build_update_session_compaction_prompt({
54
+ previous_summary: previous_summary_text,
55
+ new_conversation_text: conversation_text || "(none)",
56
+ })
57
+ : build_initial_session_compaction_prompt({
58
+ conversation_text: conversation_text || "(none)",
59
+ });
60
+ let summary = "";
61
+ try {
62
+ const result = await generateText({
63
+ model: input.compact_input.model,
64
+ system: [{ role: "system", content: SESSION_COMPACTION_SYSTEM_PROMPT }],
65
+ prompt,
66
+ });
67
+ summary = String(result.text || "").trim();
68
+ }
69
+ catch {
70
+ summary = "Earlier conversation was compacted because the context window was exceeded.";
71
+ }
72
+ await input.recorder.append_completed_assistant_message({
73
+ turn_id: `compact:${input.recorder.session_id}:${generateId()}`,
74
+ kind: "summary",
75
+ visibility: "internal",
76
+ summary_through_message_id: boundary.message_id,
77
+ parts: [{
78
+ part_id: `summary-text:${generateId()}`,
79
+ type: "text",
80
+ text: summary,
81
+ state: "done",
82
+ }],
83
+ });
84
+ await publish_action(input.compact_input.onAction, {
85
+ id: action_id,
86
+ session_id: input.recorder.session_id,
87
+ title: "Session messages compacted",
88
+ description: `Compacted through Message ${boundary.message_id}.`,
89
+ state: "completed",
90
+ });
91
+ return { compacted: true };
92
+ }
93
+ function project_current_context(messages) {
94
+ const latest_summary = [...messages].reverse().find((message) => message.type === "assistant" &&
95
+ message.kind === "summary" &&
96
+ message.visibility === "internal");
97
+ if (!latest_summary?.summary_through_message_id) {
98
+ return messages.filter((message) => message.type === "user" || message.type === "assistant");
99
+ }
100
+ const boundary_index = messages.findIndex((message) => message.message_id === latest_summary.summary_through_message_id);
101
+ return [
102
+ latest_summary,
103
+ ...messages.slice(boundary_index + 1).filter((message) => message !== latest_summary &&
104
+ (message.type === "user" ||
105
+ message.type === "assistant" && message.kind !== "summary")),
106
+ ];
107
+ }
108
+ function message_to_compaction_text(message) {
109
+ const projected = to_executor_ui_message(message);
110
+ if (!projected)
111
+ return "";
112
+ const text = projected.parts
113
+ .flatMap((part) => part.type === "text" ? [String(part.text || "")] : [])
114
+ .join("\n")
115
+ .trim();
116
+ return text ? `${message.type}: ${text}` : "";
117
+ }
118
+ function assistant_text(message) {
119
+ return message.parts
120
+ .flatMap((part) => part.type === "text" ? [part.text] : [])
121
+ .join("\n")
122
+ .trim();
123
+ }
124
+ async function publish_action(callback, input) {
125
+ if (!callback)
126
+ return;
127
+ const action = {
128
+ type: "action",
129
+ id: input.id,
130
+ title: input.title,
131
+ ...(input.description ? { description: input.description } : {}),
132
+ state: input.state,
133
+ metadata: {
134
+ v: 1,
135
+ ts: Date.now(),
136
+ sessionId: input.session_id,
137
+ },
138
+ };
139
+ await callback(action);
140
+ }
141
+ //# sourceMappingURL=SessionRecorderCompaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionRecorderCompaction.js","sourceRoot":"","sources":["../../../src/session/recorder/SessionRecorderCompaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * SessionRecorder 到 Executor SessionHistoryStore 的内部投影适配器。
3
+ *
4
+ * 关键点(中文)
5
+ * - Recorder messages.jsonl 是唯一持久化事实源。
6
+ * - Executor 继续读取临时 UIMessage 投影,不直接拥有文件写入权。
7
+ * - inflight 写入已经由 AssistantMessageWriter 取代,因此对应接口只提供投影兼容。
8
+ */
9
+ import type { SessionActionRecordV1, SessionMetadataV1, SessionRecordV1 } from "../../executor/types/SessionRecords.js";
10
+ import type { SessionHistoryCompactInput, SessionHistoryStore } from "../../executor/store/history/SessionHistoryStore.js";
11
+ import { SessionRecorder } from "../../session/recorder/SessionRecorder.js";
12
+ /** Recorder History Store 构造参数。 */
13
+ export interface SessionRecorderHistoryStoreOptions {
14
+ /** 当前 Session 标识。 */
15
+ session_id: string;
16
+ /** 当前 Session Recorder。 */
17
+ recorder: SessionRecorder;
18
+ }
19
+ /** 只把 canonical SessionMessage 投影给 Executor 的 Store。 */
20
+ export declare class SessionRecorderHistoryStore implements SessionHistoryStore {
21
+ readonly sessionId: string;
22
+ private readonly recorder;
23
+ constructor(options: SessionRecorderHistoryStoreOptions);
24
+ /** 把外部 user/assistant/action 写入请求收口到 Recorder。 */
25
+ write_record(message: SessionRecordV1): Promise<void>;
26
+ /** Recorder 已经逐 delta 保存 assistant,不再维护第二份 inflight。 */
27
+ read_inflight(): Promise<SessionRecordV1 | null>;
28
+ /** 旧 inflight 写入口已废弃;流式内容由 Recorder writer 负责。 */
29
+ write_inflight(_message: SessionRecordV1): Promise<void>;
30
+ /** 旧 inflight 收口入口已废弃;Assistant writer 负责 complete。 */
31
+ finalize_inflight(_message?: SessionRecordV1 | null): Promise<void>;
32
+ /** 返回 Context Composer 使用的 UIMessage 投影。 */
33
+ list_records(): Promise<SessionRecordV1[]>;
34
+ /** 返回 Context Message 区间。 */
35
+ slice_records(start: number, end: number): Promise<SessionRecordV1[]>;
36
+ /** 返回 Context Message 数量。 */
37
+ record_count(): Promise<number>;
38
+ /** Recorder metadata 由 SessionStateService 管理。 */
39
+ meta(): Promise<Record<string, unknown>>;
40
+ /** 通过 Recorder 追加 internal summary,不重写 Mutation 历史。 */
41
+ compact(input: SessionHistoryCompactInput): Promise<{
42
+ compacted: boolean;
43
+ reason?: string;
44
+ }>;
45
+ /** 构造临时 user UIMessage。 */
46
+ userText(input: {
47
+ text: string;
48
+ metadata: Omit<SessionMetadataV1, "v" | "ts"> & Partial<Pick<SessionMetadataV1, "ts">>;
49
+ id?: string;
50
+ }): SessionRecordV1;
51
+ /** 构造临时 assistant UIMessage。 */
52
+ assistantText(input: {
53
+ text: string;
54
+ metadata: Omit<SessionMetadataV1, "v" | "ts"> & Partial<Pick<SessionMetadataV1, "ts">>;
55
+ id?: string;
56
+ kind?: "normal" | "summary";
57
+ source?: "egress" | "compact";
58
+ }): SessionRecordV1;
59
+ /** 返回 action 原结构,真正持久化仍经过 write_record。 */
60
+ action(input: {
61
+ action: SessionActionRecordV1;
62
+ metadata: Pick<SessionMetadataV1, "sessionId"> & Partial<Pick<SessionMetadataV1, "ts">>;
63
+ id?: string;
64
+ }): SessionActionRecordV1;
65
+ }
66
+ //# sourceMappingURL=SessionRecorderHistoryStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionRecorderHistoryStore.d.ts","sourceRoot":"","sources":["../../../src/session/recorder/SessionRecorderHistoryStore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACpB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAQxE,mCAAmC;AACnC,MAAM,WAAW,kCAAkC;IACjD,qBAAqB;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,wDAAwD;AACxD,qBAAa,2BAA4B,YAAW,mBAAmB;IACrE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAE/B,OAAO,EAAE,kCAAkC;IAQvD,kDAAkD;IAC5C,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA4D3D,wDAAwD;IAClD,aAAa,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IActD,kDAAkD;IAC5C,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAE9D,uDAAuD;IACjD,iBAAiB,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEzE,4CAA4C;IACtC,YAAY,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAYhD,6BAA6B;IACvB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAI3E,6BAA6B;IACvB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC,kDAAkD;IAC5C,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI9C,uDAAuD;IACjD,OAAO,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC;QACxD,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IAOF,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,GAAG,GAAG,IAAI,CAAC,GAC3C,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;QACzC,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,GAAG,eAAe;IAgBnB,gCAAgC;IAChC,aAAa,CAAC,KAAK,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,GAAG,GAAG,IAAI,CAAC,GAC3C,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;QACzC,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;QAC5B,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;KAC/B,GAAG,eAAe;IAgBnB,2CAA2C;IAC3C,MAAM,CAAC,KAAK,EAAE;QACZ,MAAM,EAAE,qBAAqB,CAAC;QAC9B,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,GAC5C,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;QACzC,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,GAAG,qBAAqB;CAc1B"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * SessionRecorder 到 Executor SessionHistoryStore 的内部投影适配器。
3
+ *
4
+ * 关键点(中文)
5
+ * - Recorder messages.jsonl 是唯一持久化事实源。
6
+ * - Executor 继续读取临时 UIMessage 投影,不直接拥有文件写入权。
7
+ * - inflight 写入已经由 AssistantMessageWriter 取代,因此对应接口只提供投影兼容。
8
+ */
9
+ import { nanoid } from "nanoid";
10
+ import { is_session_action_record } from "../../executor/types/SessionRecords.js";
11
+ import { from_ui_assistant_parts, from_ui_user_parts, to_executor_ui_message, } from "../../session/recorder/SessionMessageCodec.js";
12
+ import { compact_session_recorder_messages } from "../../session/recorder/SessionRecorderCompaction.js";
13
+ /** 只把 canonical SessionMessage 投影给 Executor 的 Store。 */
14
+ export class SessionRecorderHistoryStore {
15
+ sessionId;
16
+ recorder;
17
+ constructor(options) {
18
+ this.sessionId = String(options.session_id || "").trim();
19
+ this.recorder = options.recorder;
20
+ if (!this.sessionId) {
21
+ throw new Error("SessionRecorderHistoryStore requires session_id");
22
+ }
23
+ }
24
+ /** 把外部 user/assistant/action 写入请求收口到 Recorder。 */
25
+ async write_record(message) {
26
+ if (is_session_action_record(message)) {
27
+ const action = message;
28
+ const existing = this.recorder.get_message(action.id);
29
+ if (existing?.type === "action") {
30
+ if (action.state !== "running") {
31
+ await this.recorder.update_action_message(action.id, action.state, {
32
+ title: action.title,
33
+ description: action.description,
34
+ });
35
+ }
36
+ return;
37
+ }
38
+ const writer = await this.recorder.open_action_message({
39
+ message_id: action.id,
40
+ turn_id: action.metadata.turnId,
41
+ action_type: infer_action_type(action.id),
42
+ title: action.title,
43
+ description: action.description,
44
+ });
45
+ if (action.state === "completed")
46
+ await writer.complete();
47
+ if (action.state === "failed")
48
+ await writer.fail(action.description || action.title);
49
+ return;
50
+ }
51
+ if (message.role === "user") {
52
+ const metadata = message.metadata || {
53
+ v: 1,
54
+ ts: Date.now(),
55
+ sessionId: this.sessionId,
56
+ };
57
+ await this.recorder.append_user_message({
58
+ turn_id: String(metadata.turnId || `external:${nanoid(10)}`),
59
+ input_type: metadata.extra?.inputType === "steer" ? "steer" : "prompt",
60
+ parts: from_ui_user_parts(message.parts),
61
+ });
62
+ return;
63
+ }
64
+ const metadata = message.metadata || {
65
+ v: 1,
66
+ ts: Date.now(),
67
+ sessionId: this.sessionId,
68
+ };
69
+ await this.recorder.append_completed_assistant_message({
70
+ turn_id: metadata.turnId,
71
+ parts: from_ui_assistant_parts(message.parts),
72
+ visibility: metadata.extra?.visibility === "internal"
73
+ ? "internal"
74
+ : "visible",
75
+ kind: metadata.kind === "summary" ? "summary" : "normal",
76
+ });
77
+ }
78
+ /** Recorder 已经逐 delta 保存 assistant,不再维护第二份 inflight。 */
79
+ async read_inflight() {
80
+ const page = await this.recorder.list_messages({
81
+ limit: 500,
82
+ include_internal: true,
83
+ });
84
+ const assistant = [...page.items]
85
+ .reverse()
86
+ .find((message) => message.type === "assistant" && message.status === "streaming");
87
+ return assistant ? to_executor_ui_message(assistant) : null;
88
+ }
89
+ /** 旧 inflight 写入口已废弃;流式内容由 Recorder writer 负责。 */
90
+ async write_inflight(_message) { }
91
+ /** 旧 inflight 收口入口已废弃;Assistant writer 负责 complete。 */
92
+ async finalize_inflight(_message) { }
93
+ /** 返回 Context Composer 使用的 UIMessage 投影。 */
94
+ async list_records() {
95
+ const page = await this.recorder.list_messages({
96
+ limit: 500,
97
+ include_internal: true,
98
+ });
99
+ const messages = project_context_messages(page.items);
100
+ return messages.flatMap((message) => {
101
+ const projected = to_executor_ui_message(message);
102
+ return projected ? [projected] : [];
103
+ });
104
+ }
105
+ /** 返回 Context Message 区间。 */
106
+ async slice_records(start, end) {
107
+ return (await this.list_records()).slice(start, end);
108
+ }
109
+ /** 返回 Context Message 数量。 */
110
+ async record_count() {
111
+ return (await this.list_records()).length;
112
+ }
113
+ /** Recorder metadata 由 SessionStateService 管理。 */
114
+ async meta() {
115
+ return {};
116
+ }
117
+ /** 通过 Recorder 追加 internal summary,不重写 Mutation 历史。 */
118
+ async compact(input) {
119
+ return await compact_session_recorder_messages({
120
+ recorder: this.recorder,
121
+ compact_input: input,
122
+ });
123
+ }
124
+ /** 构造临时 user UIMessage。 */
125
+ userText(input) {
126
+ const { ts, ...metadata } = input.metadata;
127
+ return {
128
+ id: input.id || `u:${this.sessionId}:${nanoid(10)}`,
129
+ role: "user",
130
+ metadata: {
131
+ v: 1,
132
+ ts: typeof ts === "number" ? ts : Date.now(),
133
+ ...metadata,
134
+ source: "ingress",
135
+ kind: "normal",
136
+ },
137
+ parts: [{ type: "text", text: String(input.text || "") }],
138
+ };
139
+ }
140
+ /** 构造临时 assistant UIMessage。 */
141
+ assistantText(input) {
142
+ const { ts, ...metadata } = input.metadata;
143
+ return {
144
+ id: input.id || `a:${this.sessionId}:${nanoid(10)}`,
145
+ role: "assistant",
146
+ metadata: {
147
+ v: 1,
148
+ ts: typeof ts === "number" ? ts : Date.now(),
149
+ ...metadata,
150
+ source: input.source || "egress",
151
+ kind: input.kind || "normal",
152
+ },
153
+ parts: [{ type: "text", text: String(input.text || "") }],
154
+ };
155
+ }
156
+ /** 返回 action 原结构,真正持久化仍经过 write_record。 */
157
+ action(input) {
158
+ return {
159
+ ...input.action,
160
+ id: input.id || input.action.id,
161
+ metadata: {
162
+ ...input.action.metadata,
163
+ sessionId: input.metadata.sessionId,
164
+ ts: typeof input.metadata.ts === "number"
165
+ ? input.metadata.ts
166
+ : input.action.metadata.ts,
167
+ },
168
+ };
169
+ }
170
+ }
171
+ function project_context_messages(messages) {
172
+ const latest_summary = [...messages]
173
+ .reverse()
174
+ .find((message) => message.type === "assistant" &&
175
+ message.kind === "summary" &&
176
+ message.visibility === "internal");
177
+ if (!latest_summary ||
178
+ latest_summary.type !== "assistant" ||
179
+ !latest_summary.summary_through_message_id) {
180
+ return messages.filter((message) => message.type === "user" || message.type === "assistant");
181
+ }
182
+ const boundary_index = messages.findIndex((message) => message.message_id === latest_summary.summary_through_message_id);
183
+ return [
184
+ latest_summary,
185
+ ...messages
186
+ .slice(boundary_index + 1)
187
+ .filter((message) => message !== latest_summary &&
188
+ message.type === "user" ||
189
+ (message.type === "assistant" && message.kind !== "summary")),
190
+ ];
191
+ }
192
+ function infer_action_type(message_id) {
193
+ return String(message_id || "").split(":")[0] || "action";
194
+ }
195
+ //# sourceMappingURL=SessionRecorderHistoryStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionRecorderHistoryStore.js","sourceRoot":"","sources":["../../../src/session/recorder/SessionRecorderHistoryStore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAMhC,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAM9E,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAC;AAUpG,wDAAwD;AACxD,MAAM,OAAO,2BAA2B;IAC7B,SAAS,CAAS;IAEV,QAAQ,CAAkB;IAE3C,YAAY,OAA2C;QACrD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,YAAY,CAAC,OAAwB;QACzC,IAAI,wBAAwB,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,OAAgC,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACtD,IAAI,QAAQ,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAChC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC/B,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CACvC,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,KAAK,EACZ;wBACE,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;qBAChC,CACF,CAAC;gBACJ,CAAC;gBACD,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBACrD,UAAU,EAAE,MAAM,CAAC,EAAE;gBACrB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;gBAC/B,WAAW,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW;gBAAE,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC1D,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ;gBAAE,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI;gBACnC,CAAC,EAAE,CAAU;gBACb,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC;YACF,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBACtC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,YAAY,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5D,UAAU,EACR,QAAQ,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;gBAC5D,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC;aACzC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI;YACnC,CAAC,EAAE,CAAU;YACb,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;QACF,MAAM,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YACrD,OAAO,EAAE,QAAQ,CAAC,MAAM;YACxB,KAAK,EAAE,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7C,UAAU,EACR,QAAQ,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU;gBACvC,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,SAAS;YACf,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;SACzD,CAAC,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC7C,KAAK,EAAE,GAAG;YACV,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;aAC9B,OAAO,EAAE;aACT,IAAI,CACH,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,CACjE,CAAC;QACJ,OAAO,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,cAAc,CAAC,QAAyB,IAAkB,CAAC;IAEjE,uDAAuD;IACvD,KAAK,CAAC,iBAAiB,CAAC,QAAiC,IAAkB,CAAC;IAE5E,4CAA4C;IAC5C,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC7C,KAAK,EAAE,GAAG;YACV,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAClD,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,GAAW;QAC5C,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,YAAY;QAChB,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;IAC5C,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,IAAI;QACR,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,OAAO,CAAC,KAAiC;QAI7C,OAAO,MAAM,iCAAiC,CAAC;YAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IAED,2BAA2B;IAC3B,QAAQ,CAAC,KAKR;QACC,MAAM,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC3C,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE;YACnD,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE;gBACR,CAAC,EAAE,CAAC;gBACJ,EAAE,EAAE,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC5C,GAAG,QAAQ;gBACX,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,QAAQ;aACf;YACD,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,aAAa,CAAC,KAOb;QACC,MAAM,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC3C,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE;YACnD,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;gBACR,CAAC,EAAE,CAAC;gBACJ,EAAE,EAAE,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC5C,GAAG,QAAQ;gBACX,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,QAAQ;gBAChC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,QAAQ;aAC7B;YACD,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,MAAM,CAAC,KAKN;QACC,OAAO;YACL,GAAG,KAAK,CAAC,MAAM;YACf,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;YAC/B,QAAQ,EAAE;gBACR,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ;gBACxB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;gBACnC,EAAE,EACA,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,QAAQ;oBACnC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;oBACnB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;aAC/B;SACF,CAAC;IACJ,CAAC;CACF;AAED,SAAS,wBAAwB,CAAC,QAAsE;IACtG,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC;SACjC,OAAO,EAAE;SACT,IAAI,CACH,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,IAAI,KAAK,WAAW;QAC5B,OAAO,CAAC,IAAI,KAAK,SAAS;QAC1B,OAAO,CAAC,UAAU,KAAK,UAAU,CACpC,CAAC;IACJ,IACE,CAAC,cAAc;QACf,cAAc,CAAC,IAAI,KAAK,WAAW;QACnC,CAAC,cAAc,CAAC,0BAA0B,EAC1C,CAAC;QACD,OAAO,QAAQ,CAAC,MAAM,CACpB,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CACrE,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAAG,QAAQ,CAAC,SAAS,CACvC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,KAAK,cAAc,CAAC,0BAA0B,CAC9E,CAAC;IACF,OAAO;QACL,cAAc;QACd,GAAG,QAAQ;aACR,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;aACzB,MAAM,CACL,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,KAAK,cAAc;YAC1B,OAAO,CAAC,IAAI,KAAK,MAAM;YACvB,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAC/D;KACJ,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAkB;IAC3C,OAAO,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * SessionMessage mutation 事件总线。
3
+ *
4
+ * EventHub 只广播 Recorder 已成功提交的 mutation,不创建或转换事件。
5
+ */
6
+ import type { SessionMessageMutation, SessionMessageMutationSubscriber, SessionMessageMutationUnsubscribe } from "../../types/session/SessionMessageMutation.js";
7
+ /** SessionMessage mutation 的进程内广播器。 */
8
+ export declare class SessionMessageEventHub {
9
+ private readonly subscribers;
10
+ /** 订阅未来成功提交的 mutation。 */
11
+ subscribe(subscriber: SessionMessageMutationSubscriber): SessionMessageMutationUnsubscribe;
12
+ /** 广播一条已持久化 mutation。 */
13
+ publish(mutation: SessionMessageMutation): void;
14
+ }
15
+ //# sourceMappingURL=SessionMessageEventHub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionMessageEventHub.d.ts","sourceRoot":"","sources":["../../../src/session/runtime/SessionMessageEventHub.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,2CAA2C,CAAC;AAEnD,uCAAuC;AACvC,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+C;IAE3E,0BAA0B;IAC1B,SAAS,CAAC,UAAU,EAAE,gCAAgC,GAAG,iCAAiC;IAO1F,yBAAyB;IACzB,OAAO,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;CAShD"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * SessionMessage mutation 事件总线。
3
+ *
4
+ * EventHub 只广播 Recorder 已成功提交的 mutation,不创建或转换事件。
5
+ */
6
+ /** SessionMessage mutation 的进程内广播器。 */
7
+ export class SessionMessageEventHub {
8
+ subscribers = new Set();
9
+ /** 订阅未来成功提交的 mutation。 */
10
+ subscribe(subscriber) {
11
+ this.subscribers.add(subscriber);
12
+ return () => {
13
+ this.subscribers.delete(subscriber);
14
+ };
15
+ }
16
+ /** 广播一条已持久化 mutation。 */
17
+ publish(mutation) {
18
+ for (const subscriber of this.subscribers) {
19
+ try {
20
+ subscriber(mutation);
21
+ }
22
+ catch {
23
+ // 单个订阅者失败不能影响提交结果和其他订阅者。
24
+ }
25
+ }
26
+ }
27
+ }
28
+ //# sourceMappingURL=SessionMessageEventHub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionMessageEventHub.js","sourceRoot":"","sources":["../../../src/session/runtime/SessionMessageEventHub.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,uCAAuC;AACvC,MAAM,OAAO,sBAAsB;IAChB,WAAW,GAAG,IAAI,GAAG,EAAoC,CAAC;IAE3E,0BAA0B;IAC1B,SAAS,CAAC,UAA4C;QACpD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACjC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,OAAO,CAAC,QAAgC;QACtC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,UAAU,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -27,19 +27,13 @@ export interface SessionPromptRuntimeOptions {
27
27
  /**
28
28
  * 构造并持久化一条 user 消息。
29
29
  */
30
- createAndPersistUserMessage: (input: AgentSessionPromptInput) => Promise<SessionUserMessageV1>;
31
- /**
32
- * steer message 成功持久化后发送对应 action。
33
- */
34
- emit_steer_action: (input: {
35
- /**
36
- * steer message 所属的当前 turn 标识。
37
- */
30
+ createAndPersistUserMessage: (input: AgentSessionPromptInput, turn_id: string, input_type: "prompt" | "steer") => Promise<SessionUserMessageV1>;
31
+ /** 持久化一条用户可见的 turn 错误 Message。 */
32
+ appendErrorMessage: (input: {
33
+ /** 错误所属 turn。 */
38
34
  turn_id: string;
39
- /**
40
- * 已成功持久化的 steer message。
41
- */
42
- message: SessionUserMessageV1;
35
+ /** 用户可见错误文本。 */
36
+ message: string;
43
37
  }) => Promise<void>;
44
38
  /**
45
39
  * 执行单轮 turn。
@@ -67,7 +61,7 @@ export declare class SessionPromptRuntime {
67
61
  private readonly sessionId;
68
62
  private readonly publish;
69
63
  private readonly createAndPersistUserMessage;
70
- private readonly emit_steer_action;
64
+ private readonly appendErrorMessage;
71
65
  private readonly executeTurn;
72
66
  private readonly stopTurn;
73
67
  private readonly queue;
@@ -1 +1 @@
1
- {"version":3,"file":"SessionPromptRuntime.d.ts","sourceRoot":"","sources":["../../../src/session/runtime/SessionPromptRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,iCAAiC,CAAC;AA0DzC;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAE5C;;OAEG;IACH,2BAA2B,EAAE,CAC3B,KAAK,EAAE,uBAAuB,KAC3B,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEnC;;OAEG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE;QACzB;;WAEG;QACH,OAAO,EAAE,MAAM,CAAC;QAEhB;;WAEG;QACH,OAAO,EAAE,oBAAoB,CAAC;KAC/B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpB;;OAEG;IACH,WAAW,EAAE,CAAC,KAAK,EAAE;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,uBAAuB,CAAC;QACrC,WAAW,EAAE,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACnD,WAAW,EAAE,WAAW,CAAC;KAC1B,KAAK,OAAO,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;QACjD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IAEH;;OAEG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAA6D;IACzG,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmD;IACrF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6C;IACzE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IACnE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAC5C,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,UAAU,CAAgC;gBAEtC,OAAO,EAAE,2BAA2B;IAYhD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAUvE;;;;;;OAMG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,IAAI,IAAI,sBAAsB;IAyB9B,OAAO,CAAC,gBAAgB;YAUV,WAAW;IAkFzB,OAAO,CAAC,mBAAmB;YAkCb,4BAA4B;CA+B3C"}
1
+ {"version":3,"file":"SessionPromptRuntime.d.ts","sourceRoot":"","sources":["../../../src/session/runtime/SessionPromptRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,iCAAiC,CAAC;AA0DzC;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAE5C;;OAEG;IACH,2BAA2B,EAAE,CAC3B,KAAK,EAAE,uBAAuB,EAC9B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,QAAQ,GAAG,OAAO,KAC3B,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEnC,kCAAkC;IAClC,kBAAkB,EAAE,CAAC,KAAK,EAAE;QAC1B,iBAAiB;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpB;;OAEG;IACH,WAAW,EAAE,CAAC,KAAK,EAAE;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,uBAAuB,CAAC;QACrC,WAAW,EAAE,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACnD,WAAW,EAAE,WAAW,CAAC;KAC1B,KAAK,OAAO,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;QACjD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IAEH;;OAEG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAA6D;IACzG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoD;IACvF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6C;IACzE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IACnE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAC5C,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,UAAU,CAAgC;gBAEtC,OAAO,EAAE,2BAA2B;IAYhD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAUvE;;;;;;OAMG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,IAAI,IAAI,sBAAsB;IAyB9B,OAAO,CAAC,gBAAgB;YAUV,WAAW;IA0FzB,OAAO,CAAC,mBAAmB;YAkCb,4BAA4B;CA2B3C"}
@@ -16,7 +16,7 @@ export class SessionPromptRuntime {
16
16
  sessionId;
17
17
  publish;
18
18
  createAndPersistUserMessage;
19
- emit_steer_action;
19
+ appendErrorMessage;
20
20
  executeTurn;
21
21
  stopTurn;
22
22
  queue = [];
@@ -26,7 +26,7 @@ export class SessionPromptRuntime {
26
26
  this.sessionId = String(options.sessionId || "").trim();
27
27
  this.publish = options.publish;
28
28
  this.createAndPersistUserMessage = options.createAndPersistUserMessage;
29
- this.emit_steer_action = options.emit_steer_action;
29
+ this.appendErrorMessage = options.appendErrorMessage;
30
30
  this.executeTurn = options.executeTurn;
31
31
  this.stopTurn = options.stopTurn;
32
32
  if (!this.sessionId) {
@@ -102,7 +102,7 @@ export class SessionPromptRuntime {
102
102
  });
103
103
  current.deferredHandle.resolve(createTurnHandle(activeTurn));
104
104
  try {
105
- await this.createAndPersistUserMessage(current.input);
105
+ await this.createAndPersistUserMessage(current.input, turnId, "prompt");
106
106
  const result = await this.executeTurn({
107
107
  turnId,
108
108
  promptInput: current.input,
@@ -149,6 +149,15 @@ export class SessionPromptRuntime {
149
149
  };
150
150
  activeTurn.result = finalResult;
151
151
  if (message !== TURN_STOPPED_MESSAGE) {
152
+ try {
153
+ await this.appendErrorMessage({
154
+ turn_id: turnId,
155
+ message,
156
+ });
157
+ }
158
+ catch {
159
+ // Error Message 写入失败不能阻止 turn handle 收口。
160
+ }
152
161
  this.publish({
153
162
  type: "error",
154
163
  message,
@@ -212,18 +221,9 @@ export class SessionPromptRuntime {
212
221
  for (let index = 0; index < drained.length; index += 1) {
213
222
  const item = drained[index];
214
223
  try {
215
- const message = await this.createAndPersistUserMessage(item.input);
224
+ const message = await this.createAndPersistUserMessage(item.input, activeTurn.turnId, "steer");
216
225
  item.deferredHandle.resolve(createTurnHandle(activeTurn));
217
226
  merged.push(message);
218
- try {
219
- await this.emit_steer_action({
220
- turn_id: activeTurn.turnId,
221
- message,
222
- });
223
- }
224
- catch {
225
- // action 发送失败不应阻断已经持久化的 steer message。
226
- }
227
227
  }
228
228
  catch {
229
229
  // 关键点(中文):若某条消息持久化失败,把未处理部分重新放回队列头部,避免静默丢失。
@@ -1 +1 @@
1
- {"version":3,"file":"SessionPromptRuntime.js","sourceRoot":"","sources":["../../../src/session/runtime/SessionPromptRuntime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionPromptRuntime.js","sourceRoot":"","sources":["../../../src/session/runtime/SessionPromptRuntime.ts"],"names":[],"mappings":"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"}