@downcity/agent 1.1.222 → 1.1.224

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 (166) hide show
  1. package/bin/agent/local/Agent.d.ts +1 -34
  2. package/bin/agent/local/Agent.d.ts.map +1 -1
  3. package/bin/agent/local/Agent.js +1 -44
  4. package/bin/agent/local/Agent.js.map +1 -1
  5. package/bin/agent/local/services/AgentAssemblyService.d.ts.map +1 -1
  6. package/bin/agent/local/services/AgentAssemblyService.js +35 -2
  7. package/bin/agent/local/services/AgentAssemblyService.js.map +1 -1
  8. package/bin/agent/local/services/AgentSessions.d.ts +6 -0
  9. package/bin/agent/local/services/AgentSessions.d.ts.map +1 -1
  10. package/bin/agent/local/services/AgentSessions.js +42 -0
  11. package/bin/agent/local/services/AgentSessions.js.map +1 -1
  12. package/bin/agent/remote/RemoteAgent.d.ts +1 -35
  13. package/bin/agent/remote/RemoteAgent.d.ts.map +1 -1
  14. package/bin/agent/remote/RemoteAgent.js +1 -37
  15. package/bin/agent/remote/RemoteAgent.js.map +1 -1
  16. package/bin/agent/remote/RemoteSession.d.ts +24 -45
  17. package/bin/agent/remote/RemoteSession.d.ts.map +1 -1
  18. package/bin/agent/remote/RemoteSession.js +74 -121
  19. package/bin/agent/remote/RemoteSession.js.map +1 -1
  20. package/bin/agent/remote/RemoteTransport.d.ts +11 -27
  21. package/bin/agent/remote/RemoteTransport.d.ts.map +1 -1
  22. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts +7 -21
  23. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -1
  24. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +11 -47
  25. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +1 -1
  26. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts +7 -20
  27. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts.map +1 -1
  28. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js +8 -17
  29. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js.map +1 -1
  30. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +2 -2
  31. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js.map +1 -1
  32. package/bin/executor/types/SessionHistoryPaths.d.ts +1 -1
  33. package/bin/index.d.ts +3 -3
  34. package/bin/index.d.ts.map +1 -1
  35. package/bin/index.js +1 -1
  36. package/bin/index.js.map +1 -1
  37. package/bin/rpc/Client.d.ts +7 -36
  38. package/bin/rpc/Client.d.ts.map +1 -1
  39. package/bin/rpc/Client.js +28 -78
  40. package/bin/rpc/Client.js.map +1 -1
  41. package/bin/session/Session.d.ts +16 -8
  42. package/bin/session/Session.d.ts.map +1 -1
  43. package/bin/session/Session.js +66 -21
  44. package/bin/session/Session.js.map +1 -1
  45. package/bin/session/browse/Browse.d.ts.map +1 -1
  46. package/bin/session/browse/Browse.js +49 -18
  47. package/bin/session/browse/Browse.js.map +1 -1
  48. package/bin/session/recorder/JsonlSessionMessageStore.d.ts +30 -24
  49. package/bin/session/recorder/JsonlSessionMessageStore.d.ts.map +1 -1
  50. package/bin/session/recorder/JsonlSessionMessageStore.js +163 -59
  51. package/bin/session/recorder/JsonlSessionMessageStore.js.map +1 -1
  52. package/bin/session/recorder/SessionMessageCodec.d.ts.map +1 -1
  53. package/bin/session/recorder/SessionMessageCodec.js +6 -1
  54. package/bin/session/recorder/SessionMessageCodec.js.map +1 -1
  55. package/bin/session/recorder/SessionRecorder.d.ts +20 -11
  56. package/bin/session/recorder/SessionRecorder.d.ts.map +1 -1
  57. package/bin/session/recorder/SessionRecorder.js +148 -103
  58. package/bin/session/recorder/SessionRecorder.js.map +1 -1
  59. package/bin/session/recorder/SessionRecorderCompaction.d.ts.map +1 -1
  60. package/bin/session/recorder/SessionRecorderCompaction.js +1 -0
  61. package/bin/session/recorder/SessionRecorderCompaction.js.map +1 -1
  62. package/bin/session/recorder/SessionRecorderHistoryStore.d.ts +5 -5
  63. package/bin/session/recorder/SessionRecorderHistoryStore.d.ts.map +1 -1
  64. package/bin/session/recorder/SessionRecorderHistoryStore.js +5 -5
  65. package/bin/session/recorder/SessionRecorderHistoryStore.js.map +1 -1
  66. package/bin/session/runtime/SessionEventHub.d.ts +12 -5
  67. package/bin/session/runtime/SessionEventHub.d.ts.map +1 -1
  68. package/bin/session/runtime/SessionEventHub.js +11 -6
  69. package/bin/session/runtime/SessionEventHub.js.map +1 -1
  70. package/bin/session/runtime/SessionPromptRuntime.d.ts +2 -2
  71. package/bin/session/runtime/SessionPromptRuntime.d.ts.map +1 -1
  72. package/bin/session/runtime/SessionPromptRuntime.js +35 -17
  73. package/bin/session/runtime/SessionPromptRuntime.js.map +1 -1
  74. package/bin/session/services/SessionStateService.d.ts +2 -2
  75. package/bin/session/services/SessionStateService.d.ts.map +1 -1
  76. package/bin/session/services/SessionStateService.js +6 -2
  77. package/bin/session/services/SessionStateService.js.map +1 -1
  78. package/bin/session/services/SessionTurnService.d.ts +2 -7
  79. package/bin/session/services/SessionTurnService.d.ts.map +1 -1
  80. package/bin/session/services/SessionTurnService.js +2 -8
  81. package/bin/session/services/SessionTurnService.js.map +1 -1
  82. package/bin/session/storage/Paths.d.ts +1 -1
  83. package/bin/session/storage/Paths.d.ts.map +1 -1
  84. package/bin/session/storage/Paths.js +2 -2
  85. package/bin/session/storage/Paths.js.map +1 -1
  86. package/bin/session/storage/RuntimeSessionPort.d.ts +3 -4
  87. package/bin/session/storage/RuntimeSessionPort.d.ts.map +1 -1
  88. package/bin/session/storage/RuntimeSessionPort.js +2 -2
  89. package/bin/session/storage/RuntimeSessionPort.js.map +1 -1
  90. package/bin/types/agent/SessionActor.d.ts +11 -7
  91. package/bin/types/agent/SessionActor.d.ts.map +1 -1
  92. package/bin/types/rpc/RpcProtocol.d.ts +35 -62
  93. package/bin/types/rpc/RpcProtocol.d.ts.map +1 -1
  94. package/bin/types/runtime/agent/AgentContext.d.ts +4 -4
  95. package/bin/types/runtime/agent/AgentContext.d.ts.map +1 -1
  96. package/bin/types/runtime/agent/AgentContext.js.map +1 -1
  97. package/bin/types/session/SessionApproval.d.ts +97 -0
  98. package/bin/types/session/SessionApproval.d.ts.map +1 -0
  99. package/bin/types/session/SessionApproval.js +7 -0
  100. package/bin/types/session/SessionApproval.js.map +1 -0
  101. package/bin/types/session/SessionMessage.d.ts +10 -4
  102. package/bin/types/session/SessionMessage.d.ts.map +1 -1
  103. package/bin/types/session/SessionMutation.d.ts +116 -0
  104. package/bin/types/session/SessionMutation.d.ts.map +1 -0
  105. package/bin/types/session/SessionMutation.js +19 -0
  106. package/bin/types/session/SessionMutation.js.map +1 -0
  107. package/bin/types/session/SessionOptions.d.ts +9 -0
  108. package/bin/types/session/SessionOptions.d.ts.map +1 -1
  109. package/package.json +3 -3
  110. package/scripts/remote-session-reconnect.test.mjs +7 -3
  111. package/scripts/session-history-inflight.test.mjs +2 -2
  112. package/scripts/session-prompt-runtime.test.mjs +3 -3
  113. package/scripts/session-recorder.test.mjs +100 -146
  114. package/src/agent/local/Agent.ts +1 -55
  115. package/src/agent/local/services/AgentAssemblyService.ts +39 -3
  116. package/src/agent/local/services/AgentSessions.ts +47 -0
  117. package/src/agent/remote/RemoteAgent.ts +1 -54
  118. package/src/agent/remote/RemoteSession.ts +105 -163
  119. package/src/agent/remote/RemoteTransport.ts +23 -34
  120. package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +33 -90
  121. package/src/agent/remote/transports/RpcRemoteAgentTransport.ts +22 -39
  122. package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +2 -2
  123. package/src/executor/types/SessionHistoryPaths.ts +1 -1
  124. package/src/index.ts +20 -12
  125. package/src/rpc/Client.ts +48 -106
  126. package/src/session/Session.ts +91 -34
  127. package/src/session/browse/Browse.ts +51 -22
  128. package/src/session/recorder/JsonlSessionMessageStore.ts +170 -86
  129. package/src/session/recorder/SessionMessageCodec.ts +6 -1
  130. package/src/session/recorder/SessionRecorder.ts +183 -124
  131. package/src/session/recorder/SessionRecorderCompaction.ts +1 -0
  132. package/src/session/recorder/SessionRecorderHistoryStore.ts +5 -5
  133. package/src/session/runtime/SessionEventHub.ts +25 -12
  134. package/src/session/runtime/SessionPromptRuntime.ts +37 -19
  135. package/src/session/services/SessionStateService.ts +8 -6
  136. package/src/session/services/SessionTurnService.ts +3 -14
  137. package/src/session/storage/Paths.ts +2 -2
  138. package/src/session/storage/RuntimeSessionPort.ts +8 -11
  139. package/src/types/agent/SessionActor.ts +23 -20
  140. package/src/types/rpc/RpcProtocol.ts +34 -71
  141. package/src/types/runtime/agent/AgentContext.ts +7 -11
  142. package/src/types/session/SessionApproval.ts +108 -0
  143. package/src/types/session/SessionMessage.ts +10 -4
  144. package/src/types/session/SessionMutation.ts +141 -0
  145. package/src/types/session/SessionOptions.ts +25 -0
  146. package/tsconfig.tsbuildinfo +1 -1
  147. package/bin/session/recorder/SessionMessageReducer.d.ts +0 -12
  148. package/bin/session/recorder/SessionMessageReducer.d.ts.map +0 -1
  149. package/bin/session/recorder/SessionMessageReducer.js +0 -109
  150. package/bin/session/recorder/SessionMessageReducer.js.map +0 -1
  151. package/bin/session/runtime/SessionMessageEventHub.d.ts +0 -15
  152. package/bin/session/runtime/SessionMessageEventHub.d.ts.map +0 -1
  153. package/bin/session/runtime/SessionMessageEventHub.js +0 -28
  154. package/bin/session/runtime/SessionMessageEventHub.js.map +0 -1
  155. package/bin/types/sdk/AgentSessionEvent.d.ts +0 -303
  156. package/bin/types/sdk/AgentSessionEvent.d.ts.map +0 -1
  157. package/bin/types/sdk/AgentSessionEvent.js +0 -9
  158. package/bin/types/sdk/AgentSessionEvent.js.map +0 -1
  159. package/bin/types/session/SessionMessageMutation.d.ts +0 -92
  160. package/bin/types/session/SessionMessageMutation.d.ts.map +0 -1
  161. package/bin/types/session/SessionMessageMutation.js +0 -21
  162. package/bin/types/session/SessionMessageMutation.js.map +0 -1
  163. package/src/session/recorder/SessionMessageReducer.ts +0 -155
  164. package/src/session/runtime/SessionMessageEventHub.ts +0 -35
  165. package/src/types/sdk/AgentSessionEvent.ts +0 -372
  166. package/src/types/session/SessionMessageMutation.ts +0 -121
@@ -1 +1 @@
1
- {"version":3,"file":"SessionMessageCodec.d.ts","sourceRoot":"","sources":["../../../src/session/recorder/SessionMessageCodec.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EACV,uBAAuB,EACvB,2BAA2B,EAC3B,cAAc,EAEd,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,oCAAoC,CAAC;AAE5C,qDAAqD;AACrD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,cAAc,GACtB,sBAAsB,GAAG,IAAI,CAmC/B;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAC3C,sBAAsB,EAAE,CAgC1B;AAED,oDAAoD;AACpD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAC3C,2BAA2B,EAAE,CAsD/B;AAED,oCAAoC;AACpC,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,GAClD,MAAM,CAMR"}
1
+ {"version":3,"file":"SessionMessageCodec.d.ts","sourceRoot":"","sources":["../../../src/session/recorder/SessionMessageCodec.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EACV,uBAAuB,EACvB,2BAA2B,EAC3B,cAAc,EAEd,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,oCAAoC,CAAC;AAE5C,qDAAqD;AACrD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,cAAc,GACtB,sBAAsB,GAAG,IAAI,CAmC/B;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAC3C,sBAAsB,EAAE,CAgC1B;AAED,oDAAoD;AACpD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAC3C,2BAA2B,EAAE,CA2D/B;AAED,oCAAoC;AACpC,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,GAClD,MAAM,CAMR"}
@@ -89,6 +89,7 @@ export function from_ui_assistant_parts(parts) {
89
89
  if (type === "text" || type === "reasoning") {
90
90
  return [{
91
91
  part_id: `${type}:${index + 1}`,
92
+ sequence: index + 1,
92
93
  type: type,
93
94
  text: String(candidate.text || ""),
94
95
  state: "done",
@@ -97,6 +98,7 @@ export function from_ui_assistant_parts(parts) {
97
98
  if (type === "file") {
98
99
  return [{
99
100
  part_id: `file:${index + 1}`,
101
+ sequence: index + 1,
100
102
  type: "file",
101
103
  url: String(candidate.url || ""),
102
104
  media_type: String(candidate.mediaType || "application/octet-stream"),
@@ -107,6 +109,7 @@ export function from_ui_assistant_parts(parts) {
107
109
  const state = String(candidate.state || "");
108
110
  return [{
109
111
  part_id: String(candidate.toolCallId || `tool:${index + 1}`),
112
+ sequence: index + 1,
110
113
  type: "tool",
111
114
  tool_call_id: String(candidate.toolCallId || `tool:${index + 1}`),
112
115
  tool_name: String(candidate.toolName || "").trim() ||
@@ -120,7 +123,9 @@ export function from_ui_assistant_parts(parts) {
120
123
  ? "approval-required"
121
124
  : state === "input-streaming"
122
125
  ? "input-streaming"
123
- : "running",
126
+ : state === "input-available"
127
+ ? "ready"
128
+ : "running",
124
129
  ...(candidate.input !== undefined
125
130
  ? { input: to_json_value(candidate.input) }
126
131
  : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"SessionMessageCodec.js","sourceRoot":"","sources":["../../../src/session/recorder/SessionMessageCodec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionMessageCodec.js","sourceRoot":"","sources":["../../../src/session/recorder/SessionMessageCodec.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,21 @@
1
1
  /**
2
2
  * SessionRecorder:Session Message 的唯一持久化与发布入口。
3
3
  *
4
- * Mutation 先写入单一 messages.jsonl,成功后更新内存 snapshot,最后发布同一个对象。
4
+ * 完整 Message Assistant 草稿先持久化,成功后再发布实时 Mutation。
5
5
  */
6
6
  import type { UIMessage, UIMessageChunk } from "ai";
7
7
  import { JsonlSessionMessageStore } from "../../session/recorder/JsonlSessionMessageStore.js";
8
8
  import type { JsonObject } from "../../types/common/Json.js";
9
9
  import type { ListSessionMessagesInput, SessionActionMessage, SessionAssistantMessage, SessionAssistantMessagePart, SessionErrorMessage, SessionMessage, SessionMessagePage, SessionUserMessage, SessionUserMessagePart } from "../../types/session/SessionMessage.js";
10
- import type { ListSessionMessageChangesInput, SessionMessageMutation, SessionMessageMutationPage, SessionMessageMutationSubscriber, SessionMessageMutationUnsubscribe } from "../../types/session/SessionMessageMutation.js";
10
+ import type { SessionMutation } from "../../types/session/SessionMutation.js";
11
11
  /** SessionRecorder 构造参数。 */
12
12
  export interface SessionRecorderOptions {
13
13
  /** 当前 Session 标识。 */
14
14
  session_id: string;
15
- /** 单一 JSONL Mutation store。 */
15
+ /** Message 快照 store。 */
16
16
  store: JsonlSessionMessageStore;
17
- /** Mutation 成功提交后的发布函数。 */
18
- publish: (mutation: SessionMessageMutation) => void;
17
+ /** 持久化成功后的实时 Mutation 发布函数。 */
18
+ publish: (mutation: SessionMutation) => void;
19
19
  }
20
20
  /** User Message 创建参数。 */
21
21
  export interface AppendSessionUserMessageInput {
@@ -91,11 +91,10 @@ export declare class SessionRecorder {
91
91
  readonly session_id: string;
92
92
  private readonly store;
93
93
  private readonly publish;
94
- private readonly subscribers;
95
94
  private readonly messages_by_id;
96
95
  private initialized;
97
96
  constructor(options: SessionRecorderOptions);
98
- /** 重放已有 Mutation,并收口进程中断遗留的运行状态。 */
97
+ /** 恢复已有 Message,并收口进程中断遗留的运行状态。 */
99
98
  initialize(): Promise<void>;
100
99
  /** 同步读取当前内存 Message。 */
101
100
  get_message(message_id: string): SessionMessage | undefined;
@@ -117,10 +116,6 @@ export declare class SessionRecorder {
117
116
  append_error_message(input: AppendSessionErrorMessageInput): Promise<SessionErrorMessage>;
118
117
  /** 读取折叠后的 Message snapshot。 */
119
118
  list_messages(input?: ListSessionMessagesInput): Promise<SessionMessagePage>;
120
- /** 从指定 commit_sequence 增量读取 Mutation。 */
121
- list_message_changes(input: ListSessionMessageChangesInput): Promise<SessionMessageMutationPage>;
122
- /** 订阅已成功持久化的未来 Mutation。 */
123
- subscribe(subscriber: SessionMessageMutationSubscriber): SessionMessageMutationUnsubscribe;
124
119
  /** 向当前 Session 导入 fork 来源 Message,并重新分配全部身份和顺序。 */
125
120
  import_messages(messages: SessionMessage[]): Promise<void>;
126
121
  /** @internal 写入 Assistant 原始文本 delta。 */
@@ -129,8 +124,21 @@ export declare class SessionRecorder {
129
124
  update_assistant_part(message_id: string, part: SessionAssistantMessagePart): Promise<void>;
130
125
  /** @internal 收口 Assistant Message。 */
131
126
  complete_assistant_message(message_id: string, status: "completed" | "stopped" | "failed"): Promise<void>;
127
+ /** @internal 将 Shell Runtime 审批请求更新到当前 Tool Part。 */
128
+ require_tool_approval(input: {
129
+ tool_call_id: string;
130
+ approval_id: string;
131
+ }): Promise<void>;
132
+ /** @internal 将审批结果更新到当前 Tool Part。 */
133
+ resolve_tool_approval(input: {
134
+ tool_call_id: string;
135
+ approval_id: string;
136
+ decision: "approved" | "denied" | "expired";
137
+ }): Promise<void>;
132
138
  private create_message;
139
+ private find_streaming_tool;
133
140
  private build_message_mutation;
141
+ private accept_message;
134
142
  private accept_mutation;
135
143
  private ensure_initialized;
136
144
  }
@@ -154,6 +162,7 @@ export declare class SessionAssistantMessageWriter {
154
162
  fail(_error: unknown): Promise<void>;
155
163
  private current_message;
156
164
  private find_tool;
165
+ private next_part_sequence;
157
166
  private upsert_tool;
158
167
  private close;
159
168
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRecorder.d.ts","sourceRoot":"","sources":["../../../src/session/recorder/SessionRecorder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionRecorder.d.ts","sourceRoot":"","sources":["../../../src/session/recorder/SessionRecorder.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,14 @@
1
1
  /**
2
2
  * SessionRecorder:Session Message 的唯一持久化与发布入口。
3
3
  *
4
- * Mutation 先写入单一 messages.jsonl,成功后更新内存 snapshot,最后发布同一个对象。
4
+ * 完整 Message Assistant 草稿先持久化,成功后再发布实时 Mutation。
5
5
  */
6
6
  import { generateId } from "../../utils/Id.js";
7
- import { reduce_session_message } from "../../session/recorder/SessionMessageReducer.js";
8
7
  /** 唯一 Session Message 写入服务。 */
9
8
  export class SessionRecorder {
10
9
  session_id;
11
10
  store;
12
11
  publish;
13
- subscribers = new Set();
14
12
  messages_by_id = new Map();
15
13
  initialized = false;
16
14
  constructor(options) {
@@ -20,7 +18,7 @@ export class SessionRecorder {
20
18
  if (!this.session_id)
21
19
  throw new Error("SessionRecorder requires session_id");
22
20
  }
23
- /** 重放已有 Mutation,并收口进程中断遗留的运行状态。 */
21
+ /** 恢复已有 Message,并收口进程中断遗留的运行状态。 */
24
22
  async initialize() {
25
23
  if (this.initialized)
26
24
  return;
@@ -83,7 +81,7 @@ export class SessionRecorder {
83
81
  ...(input.summary_through_message_id
84
82
  ? { summary_through_message_id: input.summary_through_message_id }
85
83
  : {}),
86
- })));
84
+ }), true));
87
85
  return new SessionAssistantMessageWriter(this, message.message_id);
88
86
  }
89
87
  /** 直接写入一条已完成 Assistant Message。 */
@@ -126,10 +124,10 @@ export class SessionRecorder {
126
124
  }
127
125
  /** 更新 Action 状态,同时保持 message_id 与 sequence 不变。 */
128
126
  async update_action_message(message_id, status, changes) {
129
- const mutation = await this.store.commit((state) => {
127
+ const message = await this.store.append_message((state) => {
130
128
  const current = require_message(state.messages, message_id, "action");
131
129
  const created_at = Date.now();
132
- const message = {
130
+ return {
133
131
  ...current,
134
132
  status,
135
133
  ...(changes?.title ? { title: changes.title } : {}),
@@ -140,10 +138,9 @@ export class SessionRecorder {
140
138
  revision: current.revision + 1,
141
139
  updated_at: created_at,
142
140
  };
143
- return this.build_message_mutation(state.commit_sequence, message);
144
141
  });
145
- this.accept_mutation(mutation);
146
- return this.get_message(message_id);
142
+ this.accept_message(message);
143
+ return message;
147
144
  }
148
145
  /** 创建用户可见 Error Message。 */
149
146
  async append_error_message(input) {
@@ -166,8 +163,6 @@ export class SessionRecorder {
166
163
  /** 读取折叠后的 Message snapshot。 */
167
164
  async list_messages(input) {
168
165
  await this.ensure_initialized();
169
- const mutations = await this.store.list_mutations();
170
- const latest_commit_sequence = mutations[mutations.length - 1]?.commit_sequence || 0;
171
166
  const include_internal = input?.include_internal === true;
172
167
  const through_sequence = Number.isFinite(input?.through_sequence)
173
168
  ? Number(input?.through_sequence)
@@ -189,30 +184,8 @@ export class SessionRecorder {
189
184
  total: all.length,
190
185
  ...(next_offset < all.length ? { next_cursor: encode_cursor(next_offset) } : {}),
191
186
  has_more: next_offset < all.length,
192
- latest_commit_sequence,
193
- };
194
- }
195
- /** 从指定 commit_sequence 增量读取 Mutation。 */
196
- async list_message_changes(input) {
197
- await this.ensure_initialized();
198
- const after = Math.max(0, Math.floor(input.after_commit_sequence || 0));
199
- const limit = normalize_limit(input.limit, 200, 1000);
200
- const all = await this.store.list_mutations();
201
- const matching = all.filter((item) => item.commit_sequence > after);
202
- const items = matching.slice(0, limit);
203
- const latest_commit_sequence = all[all.length - 1]?.commit_sequence || 0;
204
- return {
205
- items,
206
- has_more: matching.length > items.length,
207
- next_commit_sequence: items[items.length - 1]?.commit_sequence || after,
208
- latest_commit_sequence,
209
187
  };
210
188
  }
211
- /** 订阅已成功持久化的未来 Mutation。 */
212
- subscribe(subscriber) {
213
- this.subscribers.add(subscriber);
214
- return () => this.subscribers.delete(subscriber);
215
- }
216
189
  /** 向当前 Session 导入 fork 来源 Message,并重新分配全部身份和顺序。 */
217
190
  async import_messages(messages) {
218
191
  const turn_ids = new Map();
@@ -243,76 +216,140 @@ export class SessionRecorder {
243
216
  async append_assistant_delta(message_id, part_id, type, delta) {
244
217
  if (!delta)
245
218
  return;
246
- const mutation = await this.store.commit((state) => {
247
- const current = require_message(state.messages, message_id, "assistant");
248
- return {
249
- mutation_id: generateId(),
250
- variant: "delta",
251
- type,
252
- commit_sequence: state.commit_sequence,
253
- message_id,
254
- revision: current.revision + 1,
255
- session_id: this.session_id,
256
- turn_id: current.turn_id,
257
- created_at: Date.now(),
258
- part_id,
259
- delta,
260
- };
261
- });
262
- this.accept_mutation(mutation);
219
+ const current = require_message([...this.messages_by_id.values()], message_id, "assistant");
220
+ require_streaming_assistant(current);
221
+ const part = current.parts.find((item) => item.part_id === part_id);
222
+ if (!part || (part.type !== "text" && part.type !== "reasoning")) {
223
+ throw new Error(`Delta target Part does not exist: ${part_id}`);
224
+ }
225
+ if (part.type !== type)
226
+ throw new Error(`Delta type changed for Part: ${part_id}`);
227
+ const created_at = Date.now();
228
+ const message = {
229
+ ...current,
230
+ revision: current.revision + 1,
231
+ updated_at: created_at,
232
+ parts: current.parts.map((item) => item.part_id === part_id && (item.type === "text" || item.type === "reasoning")
233
+ ? { ...item, text: item.text + delta }
234
+ : item),
235
+ };
236
+ await this.store.write_assistant_message(message);
237
+ this.accept_mutation({
238
+ mutation_id: generateId(),
239
+ variant: "delta",
240
+ type,
241
+ message_id,
242
+ revision: message.revision,
243
+ session_id: this.session_id,
244
+ turn_id: message.turn_id,
245
+ created_at,
246
+ part_id,
247
+ delta,
248
+ }, message);
263
249
  }
264
250
  /** @internal 写入 Assistant 完整 part。 */
265
251
  async update_assistant_part(message_id, part) {
266
- const mutation = await this.store.commit((state) => {
267
- const current = require_message(state.messages, message_id, "assistant");
268
- return {
269
- mutation_id: generateId(),
270
- variant: "part",
271
- type: part.type,
272
- commit_sequence: state.commit_sequence,
273
- message_id,
274
- revision: current.revision + 1,
275
- session_id: this.session_id,
276
- turn_id: current.turn_id,
277
- created_at: Date.now(),
278
- part_id: part.part_id,
279
- part: structuredClone(part),
280
- };
281
- });
282
- this.accept_mutation(mutation);
252
+ const current = require_message([...this.messages_by_id.values()], message_id, "assistant");
253
+ require_streaming_assistant(current);
254
+ const existing = current.parts.find((item) => item.part_id === part.part_id);
255
+ if (existing && existing.sequence !== part.sequence) {
256
+ throw new Error(`Assistant Part sequence changed: ${part.part_id}`);
257
+ }
258
+ const created_at = Date.now();
259
+ const next_part = structuredClone(part);
260
+ const message = {
261
+ ...current,
262
+ revision: current.revision + 1,
263
+ updated_at: created_at,
264
+ parts: (existing
265
+ ? current.parts.map((item) => item.part_id === part.part_id ? next_part : item)
266
+ : [...current.parts, next_part]).sort((left, right) => left.sequence - right.sequence),
267
+ };
268
+ await this.store.write_assistant_message(message);
269
+ this.accept_mutation({
270
+ mutation_id: generateId(),
271
+ variant: "part",
272
+ type: next_part.type,
273
+ message_id,
274
+ revision: message.revision,
275
+ session_id: this.session_id,
276
+ turn_id: message.turn_id,
277
+ created_at,
278
+ part_id: next_part.part_id,
279
+ part: next_part,
280
+ }, message);
283
281
  }
284
282
  /** @internal 收口 Assistant Message。 */
285
283
  async complete_assistant_message(message_id, status) {
286
- const mutation = await this.store.commit((state) => {
287
- const current = require_message(state.messages, message_id, "assistant");
288
- const created_at = Date.now();
289
- const message = {
290
- ...current,
291
- revision: current.revision + 1,
292
- status,
293
- updated_at: created_at,
294
- parts: current.parts.map((part) => part.type === "text" || part.type === "reasoning"
295
- ? { ...part, state: "done" }
296
- : part),
297
- };
298
- return this.build_message_mutation(state.commit_sequence, message);
284
+ const current = require_message([...this.messages_by_id.values()], message_id, "assistant");
285
+ require_streaming_assistant(current);
286
+ const created_at = Date.now();
287
+ const message = {
288
+ ...current,
289
+ revision: current.revision + 1,
290
+ status,
291
+ updated_at: created_at,
292
+ parts: current.parts.map((part) => part.type === "text" || part.type === "reasoning"
293
+ ? { ...part, state: "done" }
294
+ : part),
295
+ };
296
+ await this.store.finalize_assistant_message(message);
297
+ this.accept_message(message);
298
+ }
299
+ /** @internal 将 Shell Runtime 审批请求更新到当前 Tool Part。 */
300
+ async require_tool_approval(input) {
301
+ const tool = this.find_streaming_tool(input.tool_call_id);
302
+ await this.update_assistant_part(tool.message_id, {
303
+ ...tool.part,
304
+ state: "approval-required",
305
+ approval_id: input.approval_id,
299
306
  });
300
- this.accept_mutation(mutation);
301
307
  }
302
- async create_message(factory) {
303
- const mutation = await this.store.commit((state) => {
304
- const message = factory(state.message_sequence, Date.now());
305
- return this.build_message_mutation(state.commit_sequence, message);
308
+ /** @internal 将审批结果更新到当前 Tool Part。 */
309
+ async resolve_tool_approval(input) {
310
+ const tool = this.find_streaming_tool(input.tool_call_id);
311
+ if (tool.part.approval_id && tool.part.approval_id !== input.approval_id) {
312
+ throw new Error(`Tool approval identity mismatch: ${input.approval_id}`);
313
+ }
314
+ await this.update_assistant_part(tool.message_id, {
315
+ ...tool.part,
316
+ state: input.decision === "approved" ? "running" : "failed",
317
+ ...(input.decision === "approved"
318
+ ? {}
319
+ : { error: input.decision === "expired" ? "Approval expired" : "Approval denied" }),
306
320
  });
307
- this.accept_mutation(mutation);
308
- return mutation.message;
309
321
  }
310
- build_message_mutation(commit_sequence, message) {
322
+ async create_message(factory, draft = false) {
323
+ if (draft) {
324
+ const message = await this.store.create_assistant_message((state) => {
325
+ const candidate = factory(state.message_sequence, Date.now());
326
+ if (candidate.type !== "assistant" || candidate.status !== "streaming") {
327
+ throw new Error("Draft Message must be a streaming Assistant");
328
+ }
329
+ return candidate;
330
+ });
331
+ this.accept_message(message);
332
+ return message;
333
+ }
334
+ const message = await this.store.append_message((state) => factory(state.message_sequence, Date.now()));
335
+ this.accept_message(message);
336
+ return message;
337
+ }
338
+ find_streaming_tool(tool_call_id) {
339
+ for (const message of this.messages_by_id.values()) {
340
+ if (message.type !== "assistant" || message.status !== "streaming")
341
+ continue;
342
+ const part = message.parts.find((item) => item.type === "tool" && item.tool_call_id === tool_call_id);
343
+ if (part)
344
+ return { message_id: message.message_id, part };
345
+ }
346
+ throw new Error(`Streaming Tool Part not found: ${tool_call_id}`);
347
+ }
348
+ build_message_mutation(message) {
311
349
  return {
312
350
  mutation_id: generateId(),
313
351
  variant: "message",
314
352
  type: message.type,
315
- commit_sequence,
316
353
  message_id: message.message_id,
317
354
  sequence: message.sequence,
318
355
  revision: message.revision,
@@ -322,19 +359,12 @@ export class SessionRecorder {
322
359
  message,
323
360
  };
324
361
  }
325
- accept_mutation(mutation) {
326
- const current = this.messages_by_id.get(mutation.message_id);
327
- const next = reduce_session_message(current, mutation);
328
- this.messages_by_id.set(next.message_id, next);
362
+ accept_message(message) {
363
+ this.accept_mutation(this.build_message_mutation(message), message);
364
+ }
365
+ accept_mutation(mutation, message) {
366
+ this.messages_by_id.set(message.message_id, structuredClone(message));
329
367
  this.publish(mutation);
330
- for (const subscriber of this.subscribers) {
331
- try {
332
- subscriber(mutation);
333
- }
334
- catch {
335
- // 单个订阅者异常不能影响已经完成的提交。
336
- }
337
- }
338
368
  }
339
369
  async ensure_initialized() {
340
370
  if (!this.initialized)
@@ -360,6 +390,7 @@ export class SessionAssistantMessageWriter {
360
390
  case "reasoning-start":
361
391
  await this.upsert_part({
362
392
  part_id: `${chunk.type === "text-start" ? "text" : "reasoning"}:${chunk.id}`,
393
+ sequence: this.next_part_sequence(),
363
394
  type: chunk.type === "text-start" ? "text" : "reasoning",
364
395
  text: "",
365
396
  state: "streaming",
@@ -397,7 +428,7 @@ export class SessionAssistantMessageWriter {
397
428
  case "tool-input-available":
398
429
  await this.upsert_tool(chunk.toolCallId, {
399
430
  tool_name: chunk.toolName,
400
- state: "running",
431
+ state: "ready",
401
432
  input: to_json_value(chunk.input),
402
433
  });
403
434
  return;
@@ -442,6 +473,7 @@ export class SessionAssistantMessageWriter {
442
473
  case "file":
443
474
  await this.upsert_part({
444
475
  part_id: `file:${generateId()}`,
476
+ sequence: this.next_part_sequence(),
445
477
  type: "file",
446
478
  media_type: chunk.mediaType,
447
479
  url: chunk.url,
@@ -479,11 +511,15 @@ export class SessionAssistantMessageWriter {
479
511
  find_tool(tool_call_id) {
480
512
  return this.current_message().parts.find((part) => part.type === "tool" && part.tool_call_id === tool_call_id);
481
513
  }
514
+ next_part_sequence() {
515
+ return this.current_message().parts.reduce((value, part) => Math.max(value, part.sequence + 1), 1);
516
+ }
482
517
  async upsert_tool(tool_call_id, changes) {
483
518
  const current = this.find_tool(tool_call_id);
484
519
  await this.upsert_part({
485
520
  ...(current || {}),
486
521
  part_id: `tool:${tool_call_id}`,
522
+ sequence: current?.sequence || this.next_part_sequence(),
487
523
  type: "tool",
488
524
  tool_call_id,
489
525
  ...changes,
@@ -565,6 +601,15 @@ function require_message(messages, message_id, type) {
565
601
  }
566
602
  return message;
567
603
  }
604
+ function require_streaming_assistant(message) {
605
+ if (message.type !== "assistant") {
606
+ throw new Error(`Session Message is not assistant: ${message.message_id}`);
607
+ }
608
+ if (message.status !== "streaming") {
609
+ throw new Error(`Assistant Message is already closed: ${message.message_id}`);
610
+ }
611
+ return message;
612
+ }
568
613
  function to_json_value(input) {
569
614
  if (input === undefined || input === null)
570
615
  return null;