@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
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Session 级工具审批类型。
3
+ *
4
+ * 审批由具体工具运行时执行,但归属、查询和决策能力统一通过 Session 暴露。
5
+ */
6
+ /** Session 工具审批的最终人工决策。 */
7
+ export type SessionApprovalDecision = "approved" | "denied";
8
+ /** Session 工具审批模式。 */
9
+ export type SessionApprovalMode = "ask" | "always-allow";
10
+ /** 当前 Session 的待审批工具请求。 */
11
+ export interface SessionApproval {
12
+ /** 当前审批请求的稳定唯一标识。 */
13
+ approval_id: string;
14
+ /** 当前审批所属 Session 标识。 */
15
+ session_id: string;
16
+ /** 当前审批所属 Turn 标识。 */
17
+ turn_id?: string;
18
+ /** 当前审批对应的工具调用标识。 */
19
+ tool_call_id?: string;
20
+ /** 当前审批对应的工具注册名称。 */
21
+ tool_name: string;
22
+ /** 请求执行的命令或输入文本。 */
23
+ command: string;
24
+ /** 当前工具执行工作目录。 */
25
+ cwd: string;
26
+ /** 工具申请 unrestricted 权限的原因。 */
27
+ reason: string;
28
+ /** 当前审批对应的工具操作类型。 */
29
+ operation: "exec" | "start" | "write";
30
+ /** 当前审批创建时间戳(ms)。 */
31
+ created_at: number;
32
+ }
33
+ /** 提交 Session 工具审批决策的参数。 */
34
+ export interface ResolveSessionApprovalInput {
35
+ /** 需要处理的审批请求标识。 */
36
+ approval_id: string;
37
+ /** 对当前审批请求作出的最终决定。 */
38
+ decision: SessionApprovalDecision;
39
+ }
40
+ /** Session 工具审批决策结果。 */
41
+ export interface SessionApprovalResult {
42
+ /** 是否成功命中并处理 pending 审批。 */
43
+ success: boolean;
44
+ /** 已尝试处理的审批请求标识。 */
45
+ approval_id: string;
46
+ /** 已提交的最终审批决定。 */
47
+ decision: SessionApprovalDecision;
48
+ }
49
+ /** 当前 Session 的审批模式快照。 */
50
+ export interface SessionApprovalModeSnapshot {
51
+ /** 当前审批模式所属 Session 标识。 */
52
+ session_id: string;
53
+ /** 当前 Session 生效的审批模式。 */
54
+ mode: SessionApprovalMode;
55
+ }
56
+ /** 更新当前 Session 审批模式的参数。 */
57
+ export interface SetSessionApprovalModeInput {
58
+ /** 需要设置的新审批模式。 */
59
+ mode: SessionApprovalMode;
60
+ }
61
+ /** Shell Runtime 发给 Session 的工具审批请求。 */
62
+ export interface SessionToolApprovalRequest {
63
+ /** Runtime 事件类型固定为工具审批请求。 */
64
+ type: "tool-approval-request";
65
+ /** 当前审批所属 Turn 标识。 */
66
+ turn_id: string;
67
+ /** 当前审批对应的工具调用标识。 */
68
+ tool_call_id: string;
69
+ /** 当前审批对应的工具注册名称。 */
70
+ tool_name: string;
71
+ /** 当前审批请求的稳定唯一标识。 */
72
+ approval_id: string;
73
+ /** 请求执行的命令或输入文本。 */
74
+ command: string;
75
+ /** 当前工具执行工作目录。 */
76
+ cwd: string;
77
+ /** 工具申请 unrestricted 权限的原因。 */
78
+ reason: string;
79
+ /** 当前审批对应的工具操作类型。 */
80
+ operation: "exec" | "start" | "write";
81
+ }
82
+ /** Shell Runtime 发给 Session 的工具审批结果。 */
83
+ export interface SessionToolApprovalResult {
84
+ /** Runtime 事件类型固定为工具审批结果。 */
85
+ type: "tool-approval-result";
86
+ /** 当前审批所属 Turn 标识。 */
87
+ turn_id: string;
88
+ /** 当前审批对应的工具调用标识。 */
89
+ tool_call_id: string;
90
+ /** 当前审批请求的稳定唯一标识。 */
91
+ approval_id: string;
92
+ /** 当前审批的最终结果,超时由 Runtime 标记为 expired。 */
93
+ decision: SessionApprovalDecision | "expired";
94
+ }
95
+ /** Session 内部接收的工具审批 Runtime 事件。 */
96
+ export type SessionApprovalRuntimeEvent = SessionToolApprovalRequest | SessionToolApprovalResult;
97
+ //# sourceMappingURL=SessionApproval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionApproval.d.ts","sourceRoot":"","sources":["../../../src/types/session/SessionApproval.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,2BAA2B;AAC3B,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE5D,sBAAsB;AACtB,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,cAAc,CAAC;AAEzD,2BAA2B;AAC3B,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACtC,qBAAqB;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,4BAA4B;AAC5B,MAAM,WAAW,2BAA2B;IAC1C,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,QAAQ,EAAE,uBAAuB,CAAC;CACnC;AAED,wBAAwB;AACxB,MAAM,WAAW,qBAAqB;IACpC,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,QAAQ,EAAE,uBAAuB,CAAC;CACnC;AAED,0BAA0B;AAC1B,MAAM,WAAW,2BAA2B;IAC1C,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED,4BAA4B;AAC5B,MAAM,WAAW,2BAA2B;IAC1C,kBAAkB;IAClB,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED,wCAAwC;AACxC,MAAM,WAAW,0BAA0B;IACzC,6BAA6B;IAC7B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;CACvC;AAED,wCAAwC;AACxC,MAAM,WAAW,yBAAyB;IACxC,6BAA6B;IAC7B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,QAAQ,EAAE,uBAAuB,GAAG,SAAS,CAAC;CAC/C;AAED,oCAAoC;AACpC,MAAM,MAAM,2BAA2B,GACnC,0BAA0B,GAC1B,yBAAyB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Session 级工具审批类型。
3
+ *
4
+ * 审批由具体工具运行时执行,但归属、查询和决策能力统一通过 Session 暴露。
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=SessionApproval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionApproval.js","sourceRoot":"","sources":["../../../src/types/session/SessionApproval.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -26,7 +26,7 @@ export interface SessionMessageBase {
26
26
  turn_id?: string;
27
27
  /** Message 的线性位置;创建后永远不变。 */
28
28
  sequence: number;
29
- /** Message 版本号;每次 Mutation 后递增。 */
29
+ /** Message 版本号;每次对外发布的消息变化后递增。 */
30
30
  revision: number;
31
31
  /** 当前 Message 是否默认对用户可见。 */
32
32
  visibility: SessionMessageVisibility;
@@ -87,6 +87,8 @@ export interface SessionUserMessage extends SessionMessageBase {
87
87
  export interface SessionAssistantTextPart {
88
88
  /** Assistant Message 内稳定的 part 标识。 */
89
89
  part_id: string;
90
+ /** Assistant Part 在当前 Message 中的不可变线性顺序,从 1 开始。 */
91
+ sequence: number;
90
92
  /** part 是可见文本或推理文本。 */
91
93
  type: "text" | "reasoning";
92
94
  /** 当前已经累计的完整文本。 */
@@ -98,6 +100,8 @@ export interface SessionAssistantTextPart {
98
100
  export interface SessionAssistantToolPart {
99
101
  /** Assistant Message 内稳定的 part 标识。 */
100
102
  part_id: string;
103
+ /** Assistant Part 在当前 Message 中的不可变线性顺序,从 1 开始。 */
104
+ sequence: number;
101
105
  /** part 类型固定为 tool。 */
102
106
  type: "tool";
103
107
  /** 模型工具调用稳定标识。 */
@@ -105,7 +109,7 @@ export interface SessionAssistantToolPart {
105
109
  /** 工具注册名称。 */
106
110
  tool_name: string;
107
111
  /** 工具当前生命周期状态。 */
108
- state: "input-streaming" | "approval-required" | "running" | "completed" | "failed";
112
+ state: "input-streaming" | "ready" | "approval-required" | "running" | "completed" | "failed";
109
113
  /** 流式接收中的参数原文。 */
110
114
  input_text?: string;
111
115
  /** 收敛后的结构化输入。 */
@@ -121,6 +125,8 @@ export interface SessionAssistantToolPart {
121
125
  export interface SessionAssistantFilePart {
122
126
  /** Assistant Message 内稳定的 part 标识。 */
123
127
  part_id: string;
128
+ /** Assistant Part 在当前 Message 中的不可变线性顺序,从 1 开始。 */
129
+ sequence: number;
124
130
  /** part 类型固定为 file。 */
125
131
  type: "file";
126
132
  /** 文件 MIME 类型。 */
@@ -134,6 +140,8 @@ export interface SessionAssistantFilePart {
134
140
  export interface SessionAssistantDataPart {
135
141
  /** Assistant Message 内稳定的 part 标识。 */
136
142
  part_id: string;
143
+ /** Assistant Part 在当前 Message 中的不可变线性顺序,从 1 开始。 */
144
+ sequence: number;
137
145
  /** part 类型固定为 data。 */
138
146
  type: "data";
139
147
  /** 对应 AI SDK 的 data-* 类型名称。 */
@@ -211,7 +219,5 @@ export interface SessionMessagePage {
211
219
  next_cursor?: string;
212
220
  /** 是否仍有更多 Message。 */
213
221
  has_more: boolean;
214
- /** 当前 snapshot 已包含的最大 commit_sequence。 */
215
- latest_commit_sequence: number;
216
222
  }
217
223
  //# sourceMappingURL=SessionMessage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionMessage.d.ts","sourceRoot":"","sources":["../../../src/types/session/SessionMessage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionMessage.d.ts","sourceRoot":"","sources":["../../../src/types/session/SessionMessage.ts"],"names":[],"mappings":"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"}
@@ -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":"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"}
@@ -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.222",
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.85",
17
- "@downcity/type": "0.1.118",
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",
@@ -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
  });
@@ -4,7 +4,7 @@
4
4
  * 关键点(中文)
5
5
  * - 直接覆盖 JSONL history store 的落盘语义,确保运行中不中断丢失过程。
6
6
  * - `messages.jsonl` 仍保持一轮一条 assistant 的正式历史语义。
7
- * - 运行中快照放在 `inflight.json`,浏览层读取时也应可见。
7
+ * - 运行中快照放在 `assistant_message.json`,浏览层读取时也应可见。
8
8
  */
9
9
 
10
10
  import test from "node:test";
@@ -93,7 +93,7 @@ test("JsonlSessionHistoryStore exposes inflight assistant during execution and f
93
93
  "sessions",
94
94
  "session_test",
95
95
  "messages",
96
- "inflight.json",
96
+ "assistant_message.json",
97
97
  );
98
98
  const inflight_exists = await fs
99
99
  .access(inflight_path)
@@ -135,7 +135,7 @@ test("SessionPromptRuntime merges queued prompts at the next step boundary", asy
135
135
  assert.equal(secondTurn.result, result);
136
136
  assert.deepEqual(
137
137
  events.map((event) => event.type),
138
- ["turn-start", "turn-finish"],
138
+ ["start", "finish"],
139
139
  );
140
140
  });
141
141
 
@@ -192,7 +192,7 @@ test("SessionPromptRuntime moves unmerged prompts into the next turn", async ()
192
192
  assert.equal(secondResult.text, "done:second");
193
193
  assert.deepEqual(
194
194
  events.map((event) => event.type),
195
- ["turn-start", "turn-finish", "turn-start", "turn-finish"],
195
+ ["start", "finish", "start", "finish"],
196
196
  );
197
197
  });
198
198
 
@@ -253,7 +253,7 @@ test("SessionPromptRuntime stops current turn and cancels unmerged queued prompt
253
253
  );
254
254
  assert.deepEqual(
255
255
  events.map((event) => event.type),
256
- ["turn-start", "turn-start", "turn-finish", "turn-finish"],
256
+ ["start", "start", "finish", "finish"],
257
257
  );
258
258
  });
259
259