@downcity/agent 1.1.222 → 1.1.226

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 +23 -11
  56. package/bin/session/recorder/SessionRecorder.d.ts.map +1 -1
  57. package/bin/session/recorder/SessionRecorder.js +187 -112
  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 +141 -140
  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 +228 -134
  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
@@ -30,7 +30,7 @@ export interface SessionMessageBase {
30
30
  turn_id?: string;
31
31
  /** Message 的线性位置;创建后永远不变。 */
32
32
  sequence: number;
33
- /** Message 版本号;每次 Mutation 后递增。 */
33
+ /** Message 版本号;每次对外发布的消息变化后递增。 */
34
34
  revision: number;
35
35
  /** 当前 Message 是否默认对用户可见。 */
36
36
  visibility: SessionMessageVisibility;
@@ -100,6 +100,8 @@ export interface SessionUserMessage extends SessionMessageBase {
100
100
  export interface SessionAssistantTextPart {
101
101
  /** Assistant Message 内稳定的 part 标识。 */
102
102
  part_id: string;
103
+ /** Assistant Part 在当前 Message 中的不可变线性顺序,从 1 开始。 */
104
+ sequence: number;
103
105
  /** part 是可见文本或推理文本。 */
104
106
  type: "text" | "reasoning";
105
107
  /** 当前已经累计的完整文本。 */
@@ -112,6 +114,8 @@ export interface SessionAssistantTextPart {
112
114
  export interface SessionAssistantToolPart {
113
115
  /** Assistant Message 内稳定的 part 标识。 */
114
116
  part_id: string;
117
+ /** Assistant Part 在当前 Message 中的不可变线性顺序,从 1 开始。 */
118
+ sequence: number;
115
119
  /** part 类型固定为 tool。 */
116
120
  type: "tool";
117
121
  /** 模型工具调用稳定标识。 */
@@ -119,7 +123,7 @@ export interface SessionAssistantToolPart {
119
123
  /** 工具注册名称。 */
120
124
  tool_name: string;
121
125
  /** 工具当前生命周期状态。 */
122
- state: "input-streaming" | "approval-required" | "running" | "completed" | "failed";
126
+ state: "input-streaming" | "ready" | "approval-required" | "running" | "completed" | "failed";
123
127
  /** 流式接收中的参数原文。 */
124
128
  input_text?: string;
125
129
  /** 收敛后的结构化输入。 */
@@ -136,6 +140,8 @@ export interface SessionAssistantToolPart {
136
140
  export interface SessionAssistantFilePart {
137
141
  /** Assistant Message 内稳定的 part 标识。 */
138
142
  part_id: string;
143
+ /** Assistant Part 在当前 Message 中的不可变线性顺序,从 1 开始。 */
144
+ sequence: number;
139
145
  /** part 类型固定为 file。 */
140
146
  type: "file";
141
147
  /** 文件 MIME 类型。 */
@@ -150,6 +156,8 @@ export interface SessionAssistantFilePart {
150
156
  export interface SessionAssistantDataPart {
151
157
  /** Assistant Message 内稳定的 part 标识。 */
152
158
  part_id: string;
159
+ /** Assistant Part 在当前 Message 中的不可变线性顺序,从 1 开始。 */
160
+ sequence: number;
153
161
  /** part 类型固定为 data。 */
154
162
  type: "data";
155
163
  /** 对应 AI SDK 的 data-* 类型名称。 */
@@ -242,6 +250,4 @@ export interface SessionMessagePage {
242
250
  next_cursor?: string;
243
251
  /** 是否仍有更多 Message。 */
244
252
  has_more: boolean;
245
- /** 当前 snapshot 已包含的最大 commit_sequence。 */
246
- latest_commit_sequence: number;
247
253
  }
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Session 的统一实时 Mutation 协议。
3
+ *
4
+ * Mutation 描述订阅之后发生的状态变化,不等同于 messages.jsonl 持久化格式。
5
+ */
6
+
7
+ import type { SessionAssistantMessagePart, SessionMessage } from "@/types/session/SessionMessage.js";
8
+ import type { ResolveSessionApprovalInput, SessionApprovalResult } from "@/types/session/SessionApproval.js";
9
+
10
+ /** 所有 Session Mutation 的公共字段。 */
11
+ export interface SessionMutationBase {
12
+ /** 当前 Mutation 的稳定唯一标识。 */
13
+ mutation_id: string;
14
+ /** 当前 Mutation 所属 Session 标识。 */
15
+ session_id: string;
16
+ /** 当前 Mutation 创建时间戳(ms)。 */
17
+ created_at: number;
18
+ }
19
+ /** Message 创建或完整快照更新 Mutation。 */
20
+ export type SessionMessageMutation = {
21
+ [TType in SessionMessage["type"]]: SessionMutationBase & {
22
+ /** Mutation 层级固定为 message。 */
23
+ variant: "message";
24
+ /** 当前完整 Message 类型。 */
25
+ type: TType;
26
+ /** 当前 Mutation 目标 Message 标识。 */
27
+ message_id: string;
28
+ /** 当前 Mutation 所属 Turn 标识。 */
29
+ turn_id?: string;
30
+ /** 当前 Message 在线性 Session 中的不可变顺序。 */
31
+ sequence: number;
32
+ /** 应用当前 Mutation 后的 Message revision。 */
33
+ revision: number;
34
+ /** 创建或更新后的完整 Message 快照。 */
35
+ message: Extract<SessionMessage, { type: TType }>;
36
+ };
37
+ }[SessionMessage["type"]];
38
+
39
+ /** Assistant Part 创建或完整快照更新 Mutation。 */
40
+ export type SessionPartMutation = {
41
+ [TType in SessionAssistantMessagePart["type"]]: SessionMutationBase & {
42
+ /** Mutation 层级固定为 part。 */
43
+ variant: "part";
44
+ /** 当前完整 Part 类型。 */
45
+ type: TType;
46
+ /** 当前 Part 所属 Message 标识。 */
47
+ message_id: string;
48
+ /** 当前 Mutation 所属 Turn 标识。 */
49
+ turn_id?: string;
50
+ /** 应用当前 Mutation 后的 Message revision。 */
51
+ revision: number;
52
+ /** 当前被创建或更新的 Part 标识。 */
53
+ part_id: string;
54
+ /** 创建或更新后的完整 Part 快照。 */
55
+ part: SessionAssistantMessagePart & { type: TType };
56
+ };
57
+ }[SessionAssistantMessagePart["type"]];
58
+
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
+
77
+ /** Turn 生命周期 Mutation。 */
78
+ export type SessionTurnMutation = SessionMutationBase & {
79
+ /** Mutation 层级固定为 turn。 */
80
+ variant: "turn";
81
+ /** 当前 Turn 是开始还是完成。 */
82
+ type: "start" | "finish";
83
+ /** 当前 Turn 的稳定唯一标识。 */
84
+ turn_id: string;
85
+ /** 当前 Turn 的执行状态。 */
86
+ status: "running" | "completed" | "failed" | "stopped";
87
+ /** Turn 完成时的最终可见文本。 */
88
+ text?: string;
89
+ /** Turn 失败或停止时的错误文本。 */
90
+ error?: string;
91
+ };
92
+
93
+ /** Session 自身属性变化 Mutation。 */
94
+ export type SessionStateMutation = SessionMutationBase & {
95
+ /** Mutation 层级固定为 session。 */
96
+ variant: "session";
97
+ /** 当前 Session 属性变化类型。 */
98
+ type: "title";
99
+ /** 当前 Session 最新标题。 */
100
+ title: string;
101
+ };
102
+
103
+ /** Session 对外唯一实时 Mutation 联合类型。 */
104
+ export type SessionMutation =
105
+ | SessionMessageMutation
106
+ | SessionPartMutation
107
+ | SessionDeltaMutation
108
+ | SessionTurnMutation
109
+ | SessionStateMutation;
110
+
111
+ /** 当前 Mutation 可用的命令回复入口。 */
112
+ export interface SessionMutationReply {
113
+ /**
114
+ * 回复当前 Tool Part 的审批请求。
115
+ * 只有 approval-required Tool Part Mutation 可以成功调用。
116
+ */
117
+ approval(input: Pick<ResolveSessionApprovalInput, "decision">): Promise<SessionApprovalResult>;
118
+ }
119
+
120
+ /** Session Mutation 订阅回调。 */
121
+ export type SessionMutationSubscriber = (
122
+ mutation: SessionMutation,
123
+ reply: SessionMutationReply,
124
+ ) => void | Promise<void>;
125
+
126
+ /** 取消 Session Mutation 订阅的函数。 */
127
+ export type SessionMutationUnsubscribe = () => void;
128
+
129
+ /** 判断未知事件是否为 Session Mutation。 */
130
+ export function is_session_mutation(input: unknown): input is SessionMutation {
131
+ if (!input || typeof input !== "object") return false;
132
+ const candidate = input as { mutation_id?: unknown; variant?: unknown; type?: unknown };
133
+ if (typeof candidate.mutation_id !== "string" || typeof candidate.type !== "string") return false;
134
+ return (
135
+ candidate.variant === "message" ||
136
+ candidate.variant === "part" ||
137
+ candidate.variant === "delta" ||
138
+ candidate.variant === "turn" ||
139
+ candidate.variant === "session"
140
+ );
141
+ }
@@ -14,6 +14,13 @@ import type { AgentSessionSystemBlock } from "@/types/agent/SessionTypes.js";
14
14
  import type { SessionComposerOptions } from "@/types/session/SessionComposerOptions.js";
15
15
  import type { Logger } from "@/utils/logger/Logger.js";
16
16
  import type { AgentModel } from "@/model/CityModelAdapter.js";
17
+ import type {
18
+ ResolveSessionApprovalInput,
19
+ SessionApproval,
20
+ SessionApprovalModeSnapshot,
21
+ SessionApprovalResult,
22
+ SetSessionApprovalModeInput,
23
+ } from "@/types/session/SessionApproval.js";
17
24
 
18
25
  /**
19
26
  * Agent 可管理的本地 Session 实例。
@@ -87,6 +94,24 @@ export interface SessionOptions {
87
94
  /** 按稳定模型 ID 解析当前 Session 的运行时模型。 */
88
95
  resolve_model?: (model_id: string) => Promise<AgentModel>;
89
96
 
97
+ /** 列出当前 Session 的 pending 工具审批。 */
98
+ list_approvals: (session_id: string) => Promise<SessionApproval[]>;
99
+
100
+ /** 读取当前 Session 的工具审批模式。 */
101
+ get_approval_mode: (session_id: string) => Promise<SessionApprovalModeSnapshot>;
102
+
103
+ /** 更新当前 Session 的工具审批模式。 */
104
+ set_approval_mode: (
105
+ session_id: string,
106
+ input: SetSessionApprovalModeInput,
107
+ ) => Promise<SessionApprovalModeSnapshot>;
108
+
109
+ /** 处理当前 Session 的 pending 工具审批。 */
110
+ resolve_approval: (
111
+ session_id: string,
112
+ input: ResolveSessionApprovalInput,
113
+ ) => Promise<SessionApprovalResult>;
114
+
90
115
  /**
91
116
  * 当前 session 的 Composer 覆盖项。
92
117
  */