@downcity/agent 1.1.217 → 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 (184) 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 +43 -4
  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 +26 -41
  17. package/bin/agent/remote/RemoteSession.d.ts.map +1 -1
  18. package/bin/agent/remote/RemoteSession.js +75 -107
  19. package/bin/agent/remote/RemoteSession.js.map +1 -1
  20. package/bin/agent/remote/RemoteTransport.d.ts +15 -27
  21. package/bin/agent/remote/RemoteTransport.d.ts.map +1 -1
  22. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts +10 -21
  23. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -1
  24. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +24 -46
  25. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +1 -1
  26. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts +10 -20
  27. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts.map +1 -1
  28. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js +10 -16
  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/executor/types/SessionRecords.d.ts +2 -0
  34. package/bin/executor/types/SessionRecords.d.ts.map +1 -1
  35. package/bin/executor/types/SessionRecords.js.map +1 -1
  36. package/bin/index.d.ts +6 -3
  37. package/bin/index.d.ts.map +1 -1
  38. package/bin/index.js +1 -0
  39. package/bin/index.js.map +1 -1
  40. package/bin/rpc/Client.d.ts +12 -34
  41. package/bin/rpc/Client.d.ts.map +1 -1
  42. package/bin/rpc/Client.js +31 -70
  43. package/bin/rpc/Client.js.map +1 -1
  44. package/bin/session/Session.d.ts +22 -4
  45. package/bin/session/Session.d.ts.map +1 -1
  46. package/bin/session/Session.js +95 -21
  47. package/bin/session/Session.js.map +1 -1
  48. package/bin/session/browse/Browse.d.ts.map +1 -1
  49. package/bin/session/browse/Browse.js +49 -18
  50. package/bin/session/browse/Browse.js.map +1 -1
  51. package/bin/session/recorder/JsonlSessionMessageStore.d.ts +51 -0
  52. package/bin/session/recorder/JsonlSessionMessageStore.d.ts.map +1 -0
  53. package/bin/session/recorder/JsonlSessionMessageStore.js +231 -0
  54. package/bin/session/recorder/JsonlSessionMessageStore.js.map +1 -0
  55. package/bin/session/recorder/SessionMessageCodec.d.ts +20 -0
  56. package/bin/session/recorder/SessionMessageCodec.d.ts.map +1 -0
  57. package/bin/session/recorder/SessionMessageCodec.js +257 -0
  58. package/bin/session/recorder/SessionMessageCodec.js.map +1 -0
  59. package/bin/session/recorder/SessionRecorder.d.ts +186 -0
  60. package/bin/session/recorder/SessionRecorder.d.ts.map +1 -0
  61. package/bin/session/recorder/SessionRecorder.js +655 -0
  62. package/bin/session/recorder/SessionRecorder.js.map +1 -0
  63. package/bin/session/recorder/SessionRecorderCompaction.d.ts +18 -0
  64. package/bin/session/recorder/SessionRecorderCompaction.d.ts.map +1 -0
  65. package/bin/session/recorder/SessionRecorderCompaction.js +142 -0
  66. package/bin/session/recorder/SessionRecorderCompaction.js.map +1 -0
  67. package/bin/session/recorder/SessionRecorderHistoryStore.d.ts +66 -0
  68. package/bin/session/recorder/SessionRecorderHistoryStore.d.ts.map +1 -0
  69. package/bin/session/recorder/SessionRecorderHistoryStore.js +195 -0
  70. package/bin/session/recorder/SessionRecorderHistoryStore.js.map +1 -0
  71. package/bin/session/runtime/SessionEventHub.d.ts +12 -5
  72. package/bin/session/runtime/SessionEventHub.d.ts.map +1 -1
  73. package/bin/session/runtime/SessionEventHub.js +11 -6
  74. package/bin/session/runtime/SessionEventHub.js.map +1 -1
  75. package/bin/session/runtime/SessionPromptRuntime.d.ts +9 -15
  76. package/bin/session/runtime/SessionPromptRuntime.d.ts.map +1 -1
  77. package/bin/session/runtime/SessionPromptRuntime.js +48 -30
  78. package/bin/session/runtime/SessionPromptRuntime.js.map +1 -1
  79. package/bin/session/services/SessionStateService.d.ts +9 -5
  80. package/bin/session/services/SessionStateService.d.ts.map +1 -1
  81. package/bin/session/services/SessionStateService.js +138 -74
  82. package/bin/session/services/SessionStateService.js.map +1 -1
  83. package/bin/session/services/SessionTurnService.d.ts +6 -7
  84. package/bin/session/services/SessionTurnService.d.ts.map +1 -1
  85. package/bin/session/services/SessionTurnService.js +84 -60
  86. package/bin/session/services/SessionTurnService.js.map +1 -1
  87. package/bin/session/services/SessionViewService.d.ts +8 -3
  88. package/bin/session/services/SessionViewService.d.ts.map +1 -1
  89. package/bin/session/services/SessionViewService.js +10 -5
  90. package/bin/session/services/SessionViewService.js.map +1 -1
  91. package/bin/session/storage/Paths.d.ts +1 -1
  92. package/bin/session/storage/Paths.d.ts.map +1 -1
  93. package/bin/session/storage/Paths.js +2 -2
  94. package/bin/session/storage/Paths.js.map +1 -1
  95. package/bin/session/storage/Persistence.d.ts +6 -0
  96. package/bin/session/storage/Persistence.d.ts.map +1 -1
  97. package/bin/session/storage/Persistence.js +7 -0
  98. package/bin/session/storage/Persistence.js.map +1 -1
  99. package/bin/session/storage/RuntimeSessionPort.d.ts +3 -3
  100. package/bin/session/storage/RuntimeSessionPort.d.ts.map +1 -1
  101. package/bin/session/storage/RuntimeSessionPort.js +2 -2
  102. package/bin/session/storage/RuntimeSessionPort.js.map +1 -1
  103. package/bin/types/agent/SessionActor.d.ts +15 -5
  104. package/bin/types/agent/SessionActor.d.ts.map +1 -1
  105. package/bin/types/rpc/RpcProtocol.d.ts +48 -61
  106. package/bin/types/rpc/RpcProtocol.d.ts.map +1 -1
  107. package/bin/types/runtime/agent/AgentContext.d.ts +5 -4
  108. package/bin/types/runtime/agent/AgentContext.d.ts.map +1 -1
  109. package/bin/types/runtime/agent/AgentContext.js.map +1 -1
  110. package/bin/types/session/SessionApproval.d.ts +97 -0
  111. package/bin/types/session/SessionApproval.d.ts.map +1 -0
  112. package/bin/types/session/SessionApproval.js +7 -0
  113. package/bin/types/session/SessionApproval.js.map +1 -0
  114. package/bin/types/session/SessionMessage.d.ts +223 -0
  115. package/bin/types/session/SessionMessage.d.ts.map +1 -0
  116. package/bin/types/session/SessionMessage.js +8 -0
  117. package/bin/types/session/SessionMessage.js.map +1 -0
  118. package/bin/types/session/SessionMutation.d.ts +116 -0
  119. package/bin/types/session/SessionMutation.d.ts.map +1 -0
  120. package/bin/types/session/SessionMutation.js +19 -0
  121. package/bin/types/session/SessionMutation.js.map +1 -0
  122. package/bin/types/session/SessionOptions.d.ts +9 -0
  123. package/bin/types/session/SessionOptions.d.ts.map +1 -1
  124. package/package.json +3 -3
  125. package/scripts/agent-env.test.mjs +4 -4
  126. package/scripts/remote-session-reconnect.test.mjs +7 -3
  127. package/scripts/session-action-message.test.mjs +98 -27
  128. package/scripts/session-history-inflight.test.mjs +2 -2
  129. package/scripts/session-list-title.test.mjs +6 -19
  130. package/scripts/session-prompt-runtime.test.mjs +7 -19
  131. package/scripts/session-recorder.test.mjs +199 -0
  132. package/scripts/session-title-event.test.mjs +10 -18
  133. package/src/agent/local/Agent.ts +1 -55
  134. package/src/agent/local/services/AgentAssemblyService.ts +39 -3
  135. package/src/agent/local/services/AgentSessions.ts +48 -3
  136. package/src/agent/remote/RemoteAgent.ts +1 -54
  137. package/src/agent/remote/RemoteSession.ts +106 -136
  138. package/src/agent/remote/RemoteTransport.ts +30 -30
  139. package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +52 -77
  140. package/src/agent/remote/transports/RpcRemoteAgentTransport.ts +30 -34
  141. package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +2 -2
  142. package/src/executor/types/SessionHistoryPaths.ts +1 -1
  143. package/src/executor/types/SessionRecords.ts +2 -0
  144. package/src/index.ts +36 -10
  145. package/src/rpc/Client.ts +58 -95
  146. package/src/session/Session.ts +128 -37
  147. package/src/session/browse/Browse.ts +51 -22
  148. package/src/session/recorder/JsonlSessionMessageStore.ts +246 -0
  149. package/src/session/recorder/SessionMessageCodec.ts +284 -0
  150. package/src/session/recorder/SessionRecorder.ts +871 -0
  151. package/src/session/recorder/SessionRecorderCompaction.ts +188 -0
  152. package/src/session/recorder/SessionRecorderHistoryStore.ts +276 -0
  153. package/src/session/runtime/SessionEventHub.ts +25 -12
  154. package/src/session/runtime/SessionPromptRuntime.ts +60 -43
  155. package/src/session/services/SessionStateService.ts +159 -86
  156. package/src/session/services/SessionTurnService.ts +91 -73
  157. package/src/session/services/SessionViewService.ts +25 -13
  158. package/src/session/storage/Paths.ts +2 -2
  159. package/src/session/storage/Persistence.ts +13 -0
  160. package/src/session/storage/RuntimeSessionPort.ts +8 -9
  161. package/src/types/agent/SessionActor.ts +31 -8
  162. package/src/types/rpc/RpcProtocol.ts +44 -67
  163. package/src/types/runtime/agent/AgentContext.ts +9 -7
  164. package/src/types/session/SessionApproval.ts +108 -0
  165. package/src/types/session/SessionMessage.ts +253 -0
  166. package/src/types/session/SessionMutation.ts +141 -0
  167. package/src/types/session/SessionOptions.ts +25 -0
  168. package/tsconfig.tsbuildinfo +1 -1
  169. package/bin/session/SessionEventMapper.d.ts +0 -32
  170. package/bin/session/SessionEventMapper.d.ts.map +0 -1
  171. package/bin/session/SessionEventMapper.js +0 -131
  172. package/bin/session/SessionEventMapper.js.map +0 -1
  173. package/bin/types/sdk/AgentSessionEvent.d.ts +0 -302
  174. package/bin/types/sdk/AgentSessionEvent.d.ts.map +0 -1
  175. package/bin/types/sdk/AgentSessionEvent.js +0 -9
  176. package/bin/types/sdk/AgentSessionEvent.js.map +0 -1
  177. package/bin/types/sdk/InternalUiChunkEvent.d.ts +0 -100
  178. package/bin/types/sdk/InternalUiChunkEvent.d.ts.map +0 -1
  179. package/bin/types/sdk/InternalUiChunkEvent.js +0 -9
  180. package/bin/types/sdk/InternalUiChunkEvent.js.map +0 -1
  181. package/scripts/session-history-archive.test.mjs +0 -188
  182. package/src/session/SessionEventMapper.ts +0 -148
  183. package/src/types/sdk/AgentSessionEvent.ts +0 -370
  184. package/src/types/sdk/InternalUiChunkEvent.ts +0 -108
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Session canonical 消息类型。
3
+ *
4
+ * Session 只维护一条由 sequence 排序的消息序列;assistant 的 text、reasoning、tool、file
5
+ * 均为内部 part,不提升为顶层消息。
6
+ */
7
+ import type { JsonObject, JsonValue } from "../../types/common/Json.js";
8
+ /** Message 默认展示范围。 */
9
+ export type SessionMessageVisibility = "visible" | "internal";
10
+ /** 从其他 Session 导入时保留的来源身份。 */
11
+ export interface SessionMessageOrigin {
12
+ /** 来源 Session 标识。 */
13
+ session_id: string;
14
+ /** 来源 Message 标识。 */
15
+ message_id: string;
16
+ /** 来源 turn 标识。 */
17
+ turn_id?: string;
18
+ }
19
+ /** Session Message 公共字段。 */
20
+ export interface SessionMessageBase {
21
+ /** 当前 Message 在 Session 内的稳定唯一标识。 */
22
+ message_id: string;
23
+ /** 当前 Message 所属 Session 标识。 */
24
+ session_id: string;
25
+ /** 当前 Message 所属 turn;独立 action 可以省略。 */
26
+ turn_id?: string;
27
+ /** Message 的线性位置;创建后永远不变。 */
28
+ sequence: number;
29
+ /** Message 版本号;每次对外发布的消息变化后递增。 */
30
+ revision: number;
31
+ /** 当前 Message 是否默认对用户可见。 */
32
+ visibility: SessionMessageVisibility;
33
+ /** Message 首次创建时间戳(ms)。 */
34
+ created_at: number;
35
+ /** Message 最近更新时间戳(ms)。 */
36
+ updated_at: number;
37
+ /** 从其他 Session 导入时的来源信息。 */
38
+ origin?: SessionMessageOrigin;
39
+ }
40
+ /** User 文本 part。 */
41
+ export interface SessionUserTextPart {
42
+ /** User Message 内稳定的 part 标识。 */
43
+ part_id: string;
44
+ /** part 类型固定为 text。 */
45
+ type: "text";
46
+ /** 用户输入文本。 */
47
+ text: string;
48
+ /** User 文本已经完整,不参与流式更新。 */
49
+ state: "done";
50
+ }
51
+ /** User 文件 part。 */
52
+ export interface SessionUserFilePart {
53
+ /** User Message 内稳定的 part 标识。 */
54
+ part_id: string;
55
+ /** part 类型固定为 file。 */
56
+ type: "file";
57
+ /** 文件可读取地址或 data URL。 */
58
+ url: string;
59
+ /** 文件 MIME 类型。 */
60
+ media_type: string;
61
+ /** 可选原始文件名。 */
62
+ filename?: string;
63
+ }
64
+ /** User 结构化数据 part。 */
65
+ export interface SessionUserDataPart {
66
+ /** User Message 内稳定的 part 标识。 */
67
+ part_id: string;
68
+ /** part 类型固定为 data。 */
69
+ type: "data";
70
+ /** 对应 AI SDK 的 data-* 类型名称。 */
71
+ data_type: `data-${string}` | string;
72
+ /** 可 JSON 序列化的数据。 */
73
+ data: JsonValue;
74
+ }
75
+ /** User Message part。 */
76
+ export type SessionUserMessagePart = SessionUserTextPart | SessionUserFilePart | SessionUserDataPart;
77
+ /** User 顶层 Message。 */
78
+ export interface SessionUserMessage extends SessionMessageBase {
79
+ /** Message 类型固定为 user。 */
80
+ type: "user";
81
+ /** 普通 prompt 或当前 turn 中的 steering 输入。 */
82
+ input_type: "prompt" | "steer";
83
+ /** 用户消息的结构化 parts。 */
84
+ parts: SessionUserMessagePart[];
85
+ }
86
+ /** Assistant 文本或推理 part。 */
87
+ export interface SessionAssistantTextPart {
88
+ /** Assistant Message 内稳定的 part 标识。 */
89
+ part_id: string;
90
+ /** Assistant Part 在当前 Message 中的不可变线性顺序,从 1 开始。 */
91
+ sequence: number;
92
+ /** part 是可见文本或推理文本。 */
93
+ type: "text" | "reasoning";
94
+ /** 当前已经累计的完整文本。 */
95
+ text: string;
96
+ /** 文本 part 是否已经结束。 */
97
+ state: "streaming" | "done";
98
+ }
99
+ /** Assistant 工具 part。 */
100
+ export interface SessionAssistantToolPart {
101
+ /** Assistant Message 内稳定的 part 标识。 */
102
+ part_id: string;
103
+ /** Assistant Part 在当前 Message 中的不可变线性顺序,从 1 开始。 */
104
+ sequence: number;
105
+ /** part 类型固定为 tool。 */
106
+ type: "tool";
107
+ /** 模型工具调用稳定标识。 */
108
+ tool_call_id: string;
109
+ /** 工具注册名称。 */
110
+ tool_name: string;
111
+ /** 工具当前生命周期状态。 */
112
+ state: "input-streaming" | "ready" | "approval-required" | "running" | "completed" | "failed";
113
+ /** 流式接收中的参数原文。 */
114
+ input_text?: string;
115
+ /** 收敛后的结构化输入。 */
116
+ input?: JsonValue;
117
+ /** 工具成功输出。 */
118
+ output?: JsonValue;
119
+ /** 工具失败信息。 */
120
+ error?: string;
121
+ /** 工具审批请求标识。 */
122
+ approval_id?: string;
123
+ }
124
+ /** Assistant 文件 part。 */
125
+ export interface SessionAssistantFilePart {
126
+ /** Assistant Message 内稳定的 part 标识。 */
127
+ part_id: string;
128
+ /** Assistant Part 在当前 Message 中的不可变线性顺序,从 1 开始。 */
129
+ sequence: number;
130
+ /** part 类型固定为 file。 */
131
+ type: "file";
132
+ /** 文件 MIME 类型。 */
133
+ media_type: string;
134
+ /** 文件可读取地址或 data URL。 */
135
+ url: string;
136
+ /** 可选原始文件名。 */
137
+ filename?: string;
138
+ }
139
+ /** Assistant 结构化数据 part。 */
140
+ export interface SessionAssistantDataPart {
141
+ /** Assistant Message 内稳定的 part 标识。 */
142
+ part_id: string;
143
+ /** Assistant Part 在当前 Message 中的不可变线性顺序,从 1 开始。 */
144
+ sequence: number;
145
+ /** part 类型固定为 data。 */
146
+ type: "data";
147
+ /** 对应 AI SDK 的 data-* 类型名称。 */
148
+ data_type: `data-${string}` | string;
149
+ /** 可 JSON 序列化的数据。 */
150
+ data: JsonValue;
151
+ }
152
+ /** Assistant Message part。 */
153
+ export type SessionAssistantMessagePart = SessionAssistantTextPart | SessionAssistantToolPart | SessionAssistantFilePart | SessionAssistantDataPart;
154
+ /** Assistant 顶层 Message。 */
155
+ export interface SessionAssistantMessage extends SessionMessageBase {
156
+ /** Message 类型固定为 assistant。 */
157
+ type: "assistant";
158
+ /** 普通 assistant segment 或内部 compact summary。 */
159
+ kind: "normal" | "summary";
160
+ /** Assistant 在所属 turn 内的 segment 序号,从一开始。 */
161
+ segment_index: number;
162
+ /** Assistant 当前执行状态。 */
163
+ status: "streaming" | "completed" | "stopped" | "failed";
164
+ /** Assistant 内按真实生成顺序保存的 parts。 */
165
+ parts: SessionAssistantMessagePart[];
166
+ /** Summary 已覆盖到的来源 Message 标识。 */
167
+ summary_through_message_id?: string;
168
+ }
169
+ /** Action 顶层 Message。 */
170
+ export interface SessionActionMessage extends SessionMessageBase {
171
+ /** Message 类型固定为 action。 */
172
+ type: "action";
173
+ /** Action 业务类型。 */
174
+ action_type: string;
175
+ /** Action 当前状态。 */
176
+ status: "running" | "completed" | "failed";
177
+ /** Action 展示标题。 */
178
+ title: string;
179
+ /** Action 展示描述。 */
180
+ description?: string;
181
+ /** Action 附加结构化信息。 */
182
+ data?: JsonObject;
183
+ }
184
+ /** Error 顶层 Message。 */
185
+ export interface SessionErrorMessage extends SessionMessageBase {
186
+ /** Message 类型固定为 error。 */
187
+ type: "error";
188
+ /** 错误影响范围。 */
189
+ scope: "session" | "turn";
190
+ /** 稳定错误码。 */
191
+ code: string;
192
+ /** 用户可见错误信息。 */
193
+ message: string;
194
+ /** 当前错误是否允许重试恢复。 */
195
+ recoverable: boolean;
196
+ }
197
+ /** Session 唯一顶层 Message 联合类型。 */
198
+ export type SessionMessage = SessionUserMessage | SessionAssistantMessage | SessionActionMessage | SessionErrorMessage;
199
+ /** 读取 Session Message snapshot 的分页输入。 */
200
+ export interface ListSessionMessagesInput {
201
+ /** 单页数量上限。 */
202
+ limit?: number;
203
+ /** 上一页返回的透明游标。 */
204
+ cursor?: string;
205
+ /** 只返回 sequence 严格小于该值的 Message,供向前翻页。 */
206
+ before_sequence?: number;
207
+ /** 是否包含 internal Message。 */
208
+ include_internal?: boolean;
209
+ /** 只返回不大于该 sequence 的 Message。 */
210
+ through_sequence?: number;
211
+ }
212
+ /** Session Message snapshot 分页结果。 */
213
+ export interface SessionMessagePage {
214
+ /** 当前页按 sequence 升序排列的 Message。 */
215
+ items: SessionMessage[];
216
+ /** 当前过滤条件下的 Message 总数。 */
217
+ total: number;
218
+ /** 下一页透明游标。 */
219
+ next_cursor?: string;
220
+ /** 是否仍有更多 Message。 */
221
+ has_more: boolean;
222
+ }
223
+ //# sourceMappingURL=SessionMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionMessage.d.ts","sourceRoot":"","sources":["../../../src/types/session/SessionMessage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Session canonical 消息类型。
3
+ *
4
+ * Session 只维护一条由 sequence 排序的消息序列;assistant 的 text、reasoning、tool、file
5
+ * 均为内部 part,不提升为顶层消息。
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=SessionMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionMessage.js","sourceRoot":"","sources":["../../../src/types/session/SessionMessage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Session 的统一实时 Mutation 协议。
3
+ *
4
+ * Mutation 描述订阅之后发生的状态变化,不等同于 messages.jsonl 持久化格式。
5
+ */
6
+ import type { SessionAssistantMessagePart, SessionMessage } from "../../types/session/SessionMessage.js";
7
+ import type { ResolveSessionApprovalInput, SessionApprovalResult } from "../../types/session/SessionApproval.js";
8
+ /** 所有 Session Mutation 的公共字段。 */
9
+ export interface SessionMutationBase {
10
+ /** 当前 Mutation 的稳定唯一标识。 */
11
+ mutation_id: string;
12
+ /** 当前 Mutation 所属 Session 标识。 */
13
+ session_id: string;
14
+ /** 当前 Mutation 创建时间戳(ms)。 */
15
+ created_at: number;
16
+ }
17
+ /** Message 创建或完整快照更新 Mutation。 */
18
+ export type SessionMessageMutation = {
19
+ [TType in SessionMessage["type"]]: SessionMutationBase & {
20
+ /** Mutation 层级固定为 message。 */
21
+ variant: "message";
22
+ /** 当前完整 Message 类型。 */
23
+ type: TType;
24
+ /** 当前 Mutation 目标 Message 标识。 */
25
+ message_id: string;
26
+ /** 当前 Mutation 所属 Turn 标识。 */
27
+ turn_id?: string;
28
+ /** 当前 Message 在线性 Session 中的不可变顺序。 */
29
+ sequence: number;
30
+ /** 应用当前 Mutation 后的 Message revision。 */
31
+ revision: number;
32
+ /** 创建或更新后的完整 Message 快照。 */
33
+ message: Extract<SessionMessage, {
34
+ type: TType;
35
+ }>;
36
+ };
37
+ }[SessionMessage["type"]];
38
+ /** Assistant Part 创建或完整快照更新 Mutation。 */
39
+ export type SessionPartMutation = {
40
+ [TType in SessionAssistantMessagePart["type"]]: SessionMutationBase & {
41
+ /** Mutation 层级固定为 part。 */
42
+ variant: "part";
43
+ /** 当前完整 Part 类型。 */
44
+ type: TType;
45
+ /** 当前 Part 所属 Message 标识。 */
46
+ message_id: string;
47
+ /** 当前 Mutation 所属 Turn 标识。 */
48
+ turn_id?: string;
49
+ /** 应用当前 Mutation 后的 Message revision。 */
50
+ revision: number;
51
+ /** 当前被创建或更新的 Part 标识。 */
52
+ part_id: string;
53
+ /** 创建或更新后的完整 Part 快照。 */
54
+ part: SessionAssistantMessagePart & {
55
+ type: TType;
56
+ };
57
+ };
58
+ }[SessionAssistantMessagePart["type"]];
59
+ /** Assistant 文本或推理的原始增量 Mutation。 */
60
+ export interface SessionDeltaMutation extends SessionMutationBase {
61
+ /** Mutation 层级固定为 delta。 */
62
+ variant: "delta";
63
+ /** Delta 只允许可见文本或推理文本。 */
64
+ type: "text" | "reasoning";
65
+ /** 当前 Delta 所属 Message 标识。 */
66
+ message_id: string;
67
+ /** 当前 Mutation 所属 Turn 标识。 */
68
+ turn_id?: string;
69
+ /** 应用当前 Mutation 后的 Message revision。 */
70
+ revision: number;
71
+ /** 当前 Delta 所属 Part 标识。 */
72
+ part_id: string;
73
+ /** 本次新增的原始文本,不是累计全文。 */
74
+ delta: string;
75
+ }
76
+ /** Turn 生命周期 Mutation。 */
77
+ export type SessionTurnMutation = SessionMutationBase & {
78
+ /** Mutation 层级固定为 turn。 */
79
+ variant: "turn";
80
+ /** 当前 Turn 是开始还是完成。 */
81
+ type: "start" | "finish";
82
+ /** 当前 Turn 的稳定唯一标识。 */
83
+ turn_id: string;
84
+ /** 当前 Turn 的执行状态。 */
85
+ status: "running" | "completed" | "failed" | "stopped";
86
+ /** Turn 完成时的最终可见文本。 */
87
+ text?: string;
88
+ /** Turn 失败或停止时的错误文本。 */
89
+ error?: string;
90
+ };
91
+ /** Session 自身属性变化 Mutation。 */
92
+ export type SessionStateMutation = SessionMutationBase & {
93
+ /** Mutation 层级固定为 session。 */
94
+ variant: "session";
95
+ /** 当前 Session 属性变化类型。 */
96
+ type: "title";
97
+ /** 当前 Session 最新标题。 */
98
+ title: string;
99
+ };
100
+ /** Session 对外唯一实时 Mutation 联合类型。 */
101
+ export type SessionMutation = SessionMessageMutation | SessionPartMutation | SessionDeltaMutation | SessionTurnMutation | SessionStateMutation;
102
+ /** 当前 Mutation 可用的命令回复入口。 */
103
+ export interface SessionMutationReply {
104
+ /**
105
+ * 回复当前 Tool Part 的审批请求。
106
+ * 只有 approval-required Tool Part Mutation 可以成功调用。
107
+ */
108
+ approval(input: Pick<ResolveSessionApprovalInput, "decision">): Promise<SessionApprovalResult>;
109
+ }
110
+ /** Session Mutation 订阅回调。 */
111
+ export type SessionMutationSubscriber = (mutation: SessionMutation, reply: SessionMutationReply) => void | Promise<void>;
112
+ /** 取消 Session Mutation 订阅的函数。 */
113
+ export type SessionMutationUnsubscribe = () => void;
114
+ /** 判断未知事件是否为 Session Mutation。 */
115
+ export declare function is_session_mutation(input: unknown): input is SessionMutation;
116
+ //# sourceMappingURL=SessionMutation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionMutation.d.ts","sourceRoot":"","sources":["../../../src/types/session/SessionMutation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACrG,OAAO,KAAK,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAE7G,iCAAiC;AACjC,MAAM,WAAW,mBAAmB;IAClC,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AACD,kCAAkC;AAClC,MAAM,MAAM,sBAAsB,GAAG;KAClC,KAAK,IAAI,cAAc,CAAC,MAAM,CAAC,GAAG,mBAAmB,GAAG;QACvD,8BAA8B;QAC9B,OAAO,EAAE,SAAS,CAAC;QACnB,uBAAuB;QACvB,IAAI,EAAE,KAAK,CAAC;QACZ,iCAAiC;QACjC,UAAU,EAAE,MAAM,CAAC;QACnB,8BAA8B;QAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,sCAAsC;QACtC,QAAQ,EAAE,MAAM,CAAC;QACjB,yCAAyC;QACzC,QAAQ,EAAE,MAAM,CAAC;QACjB,4BAA4B;QAC5B,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE;YAAE,IAAI,EAAE,KAAK,CAAA;SAAE,CAAC,CAAC;KACnD;CACF,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;AAE1B,yCAAyC;AACzC,MAAM,MAAM,mBAAmB,GAAG;KAC/B,KAAK,IAAI,2BAA2B,CAAC,MAAM,CAAC,GAAG,mBAAmB,GAAG;QACpE,2BAA2B;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,oBAAoB;QACpB,IAAI,EAAE,KAAK,CAAC;QACZ,6BAA6B;QAC7B,UAAU,EAAE,MAAM,CAAC;QACnB,8BAA8B;QAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,yCAAyC;QACzC,QAAQ,EAAE,MAAM,CAAC;QACjB,yBAAyB;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,yBAAyB;QACzB,IAAI,EAAE,2BAA2B,GAAG;YAAE,IAAI,EAAE,KAAK,CAAA;SAAE,CAAC;KACrD;CACF,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC;AAEvC,qCAAqC;AACrC,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,0BAA0B;AAC1B,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG;IACtD,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvD,uBAAuB;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,+BAA+B;AAC/B,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACvD,8BAA8B;IAC9B,OAAO,EAAE,SAAS,CAAC;IACnB,yBAAyB;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,oCAAoC;AACpC,MAAM,MAAM,eAAe,GACvB,sBAAsB,GACtB,mBAAmB,GACnB,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,CAAC;AAEzB,6BAA6B;AAC7B,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,2BAA2B,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAChG;AAED,6BAA6B;AAC7B,MAAM,MAAM,yBAAyB,GAAG,CACtC,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,oBAAoB,KACxB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,iCAAiC;AACjC,MAAM,MAAM,0BAA0B,GAAG,MAAM,IAAI,CAAC;AAEpD,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAW5E"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Session 的统一实时 Mutation 协议。
3
+ *
4
+ * Mutation 描述订阅之后发生的状态变化,不等同于 messages.jsonl 持久化格式。
5
+ */
6
+ /** 判断未知事件是否为 Session Mutation。 */
7
+ export function is_session_mutation(input) {
8
+ if (!input || typeof input !== "object")
9
+ return false;
10
+ const candidate = input;
11
+ if (typeof candidate.mutation_id !== "string" || typeof candidate.type !== "string")
12
+ return false;
13
+ return (candidate.variant === "message" ||
14
+ candidate.variant === "part" ||
15
+ candidate.variant === "delta" ||
16
+ candidate.variant === "turn" ||
17
+ candidate.variant === "session");
18
+ }
19
+ //# sourceMappingURL=SessionMutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionMutation.js","sourceRoot":"","sources":["../../../src/types/session/SessionMutation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4HH,kCAAkC;AAClC,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,SAAS,GAAG,KAAqE,CAAC;IACxF,IAAI,OAAO,SAAS,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClG,OAAO,CACL,SAAS,CAAC,OAAO,KAAK,SAAS;QAC/B,SAAS,CAAC,OAAO,KAAK,MAAM;QAC5B,SAAS,CAAC,OAAO,KAAK,OAAO;QAC7B,SAAS,CAAC,OAAO,KAAK,MAAM;QAC5B,SAAS,CAAC,OAAO,KAAK,SAAS,CAChC,CAAC;AACJ,CAAC"}
@@ -13,6 +13,7 @@ import type { AgentSessionSystemBlock } from "../../types/agent/SessionTypes.js"
13
13
  import type { SessionComposerOptions } from "../../types/session/SessionComposerOptions.js";
14
14
  import type { Logger } from "../../utils/logger/Logger.js";
15
15
  import type { AgentModel } from "../../model/CityModelAdapter.js";
16
+ import type { ResolveSessionApprovalInput, SessionApproval, SessionApprovalModeSnapshot, SessionApprovalResult, SetSessionApprovalModeInput } from "../../types/session/SessionApproval.js";
16
17
  /**
17
18
  * Agent 可管理的本地 Session 实例。
18
19
  */
@@ -72,6 +73,14 @@ export interface SessionOptions {
72
73
  ensureConfigured?: (session: AgentManagedSession) => Promise<void>;
73
74
  /** 按稳定模型 ID 解析当前 Session 的运行时模型。 */
74
75
  resolve_model?: (model_id: string) => Promise<AgentModel>;
76
+ /** 列出当前 Session 的 pending 工具审批。 */
77
+ list_approvals: (session_id: string) => Promise<SessionApproval[]>;
78
+ /** 读取当前 Session 的工具审批模式。 */
79
+ get_approval_mode: (session_id: string) => Promise<SessionApprovalModeSnapshot>;
80
+ /** 更新当前 Session 的工具审批模式。 */
81
+ set_approval_mode: (session_id: string, input: SetSessionApprovalModeInput) => Promise<SessionApprovalModeSnapshot>;
82
+ /** 处理当前 Session 的 pending 工具审批。 */
83
+ resolve_approval: (session_id: string, input: ResolveSessionApprovalInput) => Promise<SessionApprovalResult>;
75
84
  /**
76
85
  * 当前 session 的 Composer 覆盖项。
77
86
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SessionOptions.d.ts","sourceRoot":"","sources":["../../../src/types/session/SessionOptions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,cAAc,IAAI,WAAW,CAAC;IAE9B;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,0BAA0B,EAAE,MAAM,uBAAuB,EAAE,CAAC;IAE5D;;OAEG;IACH,4BAA4B,EAAE,MAAM,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAEvE;;OAEG;IACH,qBAAqB,EAAE,MAAM,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAEhE;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE,oCAAoC;IACpC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAE1D;;OAEG;IACH,SAAS,CAAC,EAAE,sBAAsB,CAAC;CACpC"}
1
+ {"version":3,"file":"SessionOptions.d.ts","sourceRoot":"","sources":["../../../src/types/session/SessionOptions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EACV,2BAA2B,EAC3B,eAAe,EACf,2BAA2B,EAC3B,qBAAqB,EACrB,2BAA2B,EAC5B,MAAM,oCAAoC,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,cAAc,IAAI,WAAW,CAAC;IAE9B;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,0BAA0B,EAAE,MAAM,uBAAuB,EAAE,CAAC;IAE5D;;OAEG;IACH,4BAA4B,EAAE,MAAM,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAEvE;;OAEG;IACH,qBAAqB,EAAE,MAAM,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAEhE;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE,oCAAoC;IACpC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAE1D,mCAAmC;IACnC,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAEnE,4BAA4B;IAC5B,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAEhF,4BAA4B;IAC5B,iBAAiB,EAAE,CACjB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,2BAA2B,KAC/B,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAE1C,mCAAmC;IACnC,gBAAgB,EAAE,CAChB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,2BAA2B,KAC/B,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAEpC;;OAEG;IACH,SAAS,CAAC,EAAE,sBAAsB,CAAC;CACpC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@downcity/agent",
3
- "version": "1.1.217",
3
+ "version": "1.1.224",
4
4
  "type": "module",
5
5
  "description": "Downcity Agent 运行时 — 单 Agent 执行壳与本机 RPC 能力",
6
6
  "main": "./bin/index.js",
@@ -13,8 +13,8 @@
13
13
  },
14
14
  "dependencies": {
15
15
  "@ai-sdk/openai-compatible": "^2.0.48",
16
- "@downcity/shell": "^0.1.81",
17
- "@downcity/type": "0.1.114",
16
+ "@downcity/shell": "^0.1.87",
17
+ "@downcity/type": "0.1.120",
18
18
  "ai": "^6.0.193",
19
19
  "commander": "^15.0.0",
20
20
  "dotenv": "^17.4.2",
@@ -33,7 +33,7 @@ test("项目 .env 覆盖宿主环境且不修改 process.env", () => {
33
33
  assert.equal(env.PROJECT_ONLY, "value");
34
34
  assert.equal(process.env.DOWNCITY_ENV_TEST, original_value);
35
35
  } finally {
36
- fs.rmSync(project_root, { recursive: true, force: true });
36
+ fs.rmSync(project_root, { recursive: true, force: true, maxRetries: 5, retryDelay: 20 });
37
37
  }
38
38
  });
39
39
 
@@ -50,7 +50,7 @@ test("SDK 未传 config 时不读取 downcity.json", async () => {
50
50
  await agent.ready();
51
51
  await agent.dispose();
52
52
  } finally {
53
- fs.rmSync(project_root, { recursive: true, force: true });
53
+ fs.rmSync(project_root, { recursive: true, force: true, maxRetries: 5, retryDelay: 20 });
54
54
  }
55
55
  });
56
56
 
@@ -65,7 +65,7 @@ test("SDK 未注入 plugin_config 时明确拒绝持久化", async () => {
65
65
  await agent.ready();
66
66
  await agent.dispose();
67
67
  } finally {
68
- fs.rmSync(project_root, { recursive: true, force: true });
68
+ fs.rmSync(project_root, { recursive: true, force: true, maxRetries: 5, retryDelay: 20 });
69
69
  }
70
70
  });
71
71
 
@@ -96,6 +96,6 @@ test("项目初始化只创建 .env、Skills 和运行目录并返回真实结
96
96
  assert.equal(second.skippedFiles.includes(".agents/skills/"), true);
97
97
  assert.equal(second.skippedFiles.includes(".downcity/"), true);
98
98
  } finally {
99
- fs.rmSync(project_root, { recursive: true, force: true });
99
+ fs.rmSync(project_root, { recursive: true, force: true, maxRetries: 5, retryDelay: 20 });
100
100
  }
101
101
  });
@@ -58,10 +58,14 @@ test("RemoteSession reconnects the event pump after transport close", async () =
58
58
  const second_turn = await session.prompt({ query: "second" });
59
59
  assert.equal(subscriptions.length, 2);
60
60
  subscriptions[1].on_event({
61
- type: "turn-finish",
62
- turnId: second_turn.id,
61
+ mutation_id: "turn-finish-2",
62
+ variant: "turn",
63
+ type: "finish",
64
+ session_id: "session_test",
65
+ turn_id: second_turn.id,
66
+ status: "completed",
67
+ created_at: Date.now(),
63
68
  text: "done",
64
- success: true,
65
69
  });
66
70
  assert.equal((await second_turn.finished).text, "done");
67
71
  });