@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
@@ -8,7 +8,7 @@
8
8
  */
9
9
  import type { SessionUserMessageV1 } from "../../executor/types/SessionRecords.js";
10
10
  import type { SessionMessageRecordV1 } from "../../executor/types/SessionRecords.js";
11
- import type { AgentSessionEvent } from "../../types/sdk/AgentSessionEvent.js";
11
+ import type { SessionMutation } from "../../types/session/SessionMutation.js";
12
12
  import type { AgentSessionPromptInput } from "../../types/sdk/AgentSessionPrompt.js";
13
13
  import type { AgentSessionStopResult } from "../../types/sdk/AgentSessionStop.js";
14
14
  import type { AgentSessionTurnHandle } from "../../types/sdk/AgentSessionTurn.js";
@@ -23,23 +23,17 @@ export interface SessionPromptRuntimeOptions {
23
23
  /**
24
24
  * 广播 session 事件。
25
25
  */
26
- publish: (event: AgentSessionEvent) => void;
26
+ publish: (mutation: SessionMutation) => void;
27
27
  /**
28
28
  * 构造并持久化一条 user 消息。
29
29
  */
30
- createAndPersistUserMessage: (input: AgentSessionPromptInput) => Promise<SessionUserMessageV1>;
31
- /**
32
- * steer message 成功持久化后发送对应 action。
33
- */
34
- emit_steer_action: (input: {
35
- /**
36
- * steer message 所属的当前 turn 标识。
37
- */
30
+ createAndPersistUserMessage: (input: AgentSessionPromptInput, turn_id: string, input_type: "prompt" | "steer") => Promise<SessionUserMessageV1>;
31
+ /** 持久化一条用户可见的 turn 错误 Message。 */
32
+ appendErrorMessage: (input: {
33
+ /** 错误所属 turn。 */
38
34
  turn_id: string;
39
- /**
40
- * 已成功持久化的 steer message。
41
- */
42
- message: SessionUserMessageV1;
35
+ /** 用户可见错误文本。 */
36
+ message: string;
43
37
  }) => Promise<void>;
44
38
  /**
45
39
  * 执行单轮 turn。
@@ -67,7 +61,7 @@ export declare class SessionPromptRuntime {
67
61
  private readonly sessionId;
68
62
  private readonly publish;
69
63
  private readonly createAndPersistUserMessage;
70
- private readonly emit_steer_action;
64
+ private readonly appendErrorMessage;
71
65
  private readonly executeTurn;
72
66
  private readonly stopTurn;
73
67
  private readonly queue;
@@ -1 +1 @@
1
- {"version":3,"file":"SessionPromptRuntime.d.ts","sourceRoot":"","sources":["../../../src/session/runtime/SessionPromptRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,iCAAiC,CAAC;AA0DzC;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAE5C;;OAEG;IACH,2BAA2B,EAAE,CAC3B,KAAK,EAAE,uBAAuB,KAC3B,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEnC;;OAEG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE;QACzB;;WAEG;QACH,OAAO,EAAE,MAAM,CAAC;QAEhB;;WAEG;QACH,OAAO,EAAE,oBAAoB,CAAC;KAC/B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpB;;OAEG;IACH,WAAW,EAAE,CAAC,KAAK,EAAE;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,uBAAuB,CAAC;QACrC,WAAW,EAAE,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACnD,WAAW,EAAE,WAAW,CAAC;KAC1B,KAAK,OAAO,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;QACjD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IAEH;;OAEG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAA6D;IACzG,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmD;IACrF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6C;IACzE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IACnE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAC5C,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,UAAU,CAAgC;gBAEtC,OAAO,EAAE,2BAA2B;IAYhD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAUvE;;;;;;OAMG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,IAAI,IAAI,sBAAsB;IAyB9B,OAAO,CAAC,gBAAgB;YAUV,WAAW;IAkFzB,OAAO,CAAC,mBAAmB;YAkCb,4BAA4B;CA+B3C"}
1
+ {"version":3,"file":"SessionPromptRuntime.d.ts","sourceRoot":"","sources":["../../../src/session/runtime/SessionPromptRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,iCAAiC,CAAC;AA0DzC;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IAE7C;;OAEG;IACH,2BAA2B,EAAE,CAC3B,KAAK,EAAE,uBAAuB,EAC9B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,QAAQ,GAAG,OAAO,KAC3B,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEnC,kCAAkC;IAClC,kBAAkB,EAAE,CAAC,KAAK,EAAE;QAC1B,iBAAiB;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpB;;OAEG;IACH,WAAW,EAAE,CAAC,KAAK,EAAE;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,uBAAuB,CAAC;QACrC,WAAW,EAAE,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACnD,WAAW,EAAE,WAAW,CAAC;KAC1B,KAAK,OAAO,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;QACjD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IAEH;;OAEG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAA6D;IACzG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoD;IACvF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6C;IACzE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IACnE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAC5C,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,UAAU,CAAgC;gBAEtC,OAAO,EAAE,2BAA2B;IAYhD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAUvE;;;;;;OAMG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,IAAI,IAAI,sBAAsB;IAyB9B,OAAO,CAAC,gBAAgB;YAUV,WAAW;IAmGzB,OAAO,CAAC,mBAAmB;YA2Cb,4BAA4B;CA2B3C"}
@@ -16,7 +16,7 @@ export class SessionPromptRuntime {
16
16
  sessionId;
17
17
  publish;
18
18
  createAndPersistUserMessage;
19
- emit_steer_action;
19
+ appendErrorMessage;
20
20
  executeTurn;
21
21
  stopTurn;
22
22
  queue = [];
@@ -26,7 +26,7 @@ export class SessionPromptRuntime {
26
26
  this.sessionId = String(options.sessionId || "").trim();
27
27
  this.publish = options.publish;
28
28
  this.createAndPersistUserMessage = options.createAndPersistUserMessage;
29
- this.emit_steer_action = options.emit_steer_action;
29
+ this.appendErrorMessage = options.appendErrorMessage;
30
30
  this.executeTurn = options.executeTurn;
31
31
  this.stopTurn = options.stopTurn;
32
32
  if (!this.sessionId) {
@@ -97,12 +97,17 @@ export class SessionPromptRuntime {
97
97
  const activeTurn = createActiveTurnState(turnId);
98
98
  this.activeTurn = activeTurn;
99
99
  this.publish({
100
- type: "turn-start",
101
- turnId,
100
+ mutation_id: nanoid(),
101
+ variant: "turn",
102
+ type: "start",
103
+ session_id: this.sessionId,
104
+ turn_id: turnId,
105
+ status: "running",
106
+ created_at: Date.now(),
102
107
  });
103
108
  current.deferredHandle.resolve(createTurnHandle(activeTurn));
104
109
  try {
105
- await this.createAndPersistUserMessage(current.input);
110
+ await this.createAndPersistUserMessage(current.input, turnId, "prompt");
106
111
  const result = await this.executeTurn({
107
112
  turnId,
108
113
  promptInput: current.input,
@@ -125,10 +130,14 @@ export class SessionPromptRuntime {
125
130
  };
126
131
  activeTurn.result = finalResult;
127
132
  this.publish({
128
- type: "turn-finish",
129
- turnId,
133
+ mutation_id: nanoid(),
134
+ variant: "turn",
135
+ type: "finish",
136
+ session_id: this.sessionId,
137
+ turn_id: turnId,
138
+ status: stopped ? "stopped" : finalResult.success ? "completed" : "failed",
139
+ created_at: Date.now(),
130
140
  text: finalResult.text,
131
- success: finalResult.success,
132
141
  ...(finalResult.error ? { error: finalResult.error } : {}),
133
142
  });
134
143
  activeTurn.deferredFinished.resolve(finalResult);
@@ -149,16 +158,25 @@ export class SessionPromptRuntime {
149
158
  };
150
159
  activeTurn.result = finalResult;
151
160
  if (message !== TURN_STOPPED_MESSAGE) {
152
- this.publish({
153
- type: "error",
154
- message,
155
- });
161
+ try {
162
+ await this.appendErrorMessage({
163
+ turn_id: turnId,
164
+ message,
165
+ });
166
+ }
167
+ catch {
168
+ // Error Message 写入失败不能阻止 turn handle 收口。
169
+ }
156
170
  }
157
171
  this.publish({
158
- type: "turn-finish",
159
- turnId,
172
+ mutation_id: nanoid(),
173
+ variant: "turn",
174
+ type: "finish",
175
+ session_id: this.sessionId,
176
+ turn_id: turnId,
177
+ status: activeTurn.abortController.signal.aborted ? "stopped" : "failed",
178
+ created_at: Date.now(),
160
179
  text: "",
161
- success: false,
162
180
  error: message,
163
181
  });
164
182
  activeTurn.deferredFinished.resolve(finalResult);
@@ -190,14 +208,23 @@ export class SessionPromptRuntime {
190
208
  cancelledTurn.result = finalResult;
191
209
  cancelledTurn.deferredFinished.resolve(finalResult);
192
210
  this.publish({
193
- type: "turn-start",
194
- turnId,
211
+ mutation_id: nanoid(),
212
+ variant: "turn",
213
+ type: "start",
214
+ session_id: this.sessionId,
215
+ turn_id: turnId,
216
+ status: "running",
217
+ created_at: Date.now(),
195
218
  });
196
219
  this.publish({
197
- type: "turn-finish",
198
- turnId,
220
+ mutation_id: nanoid(),
221
+ variant: "turn",
222
+ type: "finish",
223
+ session_id: this.sessionId,
224
+ turn_id: turnId,
225
+ status: "failed",
226
+ created_at: Date.now(),
199
227
  text: "",
200
- success: false,
201
228
  error: QUEUED_PROMPT_CANCELLED_MESSAGE,
202
229
  });
203
230
  item.deferredHandle.resolve(createTurnHandle(cancelledTurn));
@@ -212,18 +239,9 @@ export class SessionPromptRuntime {
212
239
  for (let index = 0; index < drained.length; index += 1) {
213
240
  const item = drained[index];
214
241
  try {
215
- const message = await this.createAndPersistUserMessage(item.input);
242
+ const message = await this.createAndPersistUserMessage(item.input, activeTurn.turnId, "steer");
216
243
  item.deferredHandle.resolve(createTurnHandle(activeTurn));
217
244
  merged.push(message);
218
- try {
219
- await this.emit_steer_action({
220
- turn_id: activeTurn.turnId,
221
- message,
222
- });
223
- }
224
- catch {
225
- // action 发送失败不应阻断已经持久化的 steer message。
226
- }
227
245
  }
228
246
  catch {
229
247
  // 关键点(中文):若某条消息持久化失败,把未处理部分重新放回队列头部,避免静默丢失。
@@ -1 +1 @@
1
- {"version":3,"file":"SessionPromptRuntime.js","sourceRoot":"","sources":["../../../src/session/runtime/SessionPromptRuntime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionPromptRuntime.js","sourceRoot":"","sources":["../../../src/session/runtime/SessionPromptRuntime.ts"],"names":[],"mappings":"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"}
@@ -7,14 +7,15 @@
7
7
  * - `Session` facade 与 turn/view service 都通过它访问可变 session 运行态。
8
8
  */
9
9
  import type { Executor } from "../../executor/Executor.js";
10
- import type { JsonlSessionHistoryStore } from "../../executor/store/history/jsonl/JsonlSessionHistoryStore.js";
10
+ import type { SessionHistoryStore } from "../../executor/store/history/SessionHistoryStore.js";
11
11
  import type { AgentSessionConfigSnapshot, AgentSessionSetInput } from "../../types/agent/SessionTypes.js";
12
- import type { AgentSessionEvent } from "../../types/sdk/AgentSessionEvent.js";
12
+ import type { SessionMutation } from "../../types/session/SessionMutation.js";
13
13
  import type { AgentSessionPromptInput } from "../../types/sdk/AgentSessionPrompt.js";
14
14
  import type { SessionActionRecordInputV1, SessionActionRecordV1, SessionRecordV1, SessionMessageRecordV1, SessionUserMessageV1 } from "../../executor/types/SessionRecords.js";
15
15
  import type { SessionLocalState } from "../../types/session/SessionLocalState.js";
16
16
  import type { Logger } from "../../utils/logger/Logger.js";
17
17
  import type { AgentModel } from "../../model/CityModelAdapter.js";
18
+ import { SessionRecorder } from "../../session/recorder/SessionRecorder.js";
18
19
  type SessionStateServiceOptions = {
19
20
  /**
20
21
  * 当前 agent 稳定标识。
@@ -31,7 +32,9 @@ type SessionStateServiceOptions = {
31
32
  /**
32
33
  * 当前 session 历史事实源。
33
34
  */
34
- history_store: JsonlSessionHistoryStore;
35
+ history_store: SessionHistoryStore;
36
+ /** 当前 Session Message Recorder。 */
37
+ recorder: SessionRecorder;
35
38
  /**
36
39
  * 当前 session 执行器。
37
40
  */
@@ -53,7 +56,7 @@ type SessionStateServiceOptions = {
53
56
  /**
54
57
  * 发布 session 事件。
55
58
  */
56
- publish_event: (event: AgentSessionEvent) => void;
59
+ publish_event: (mutation: SessionMutation) => void;
57
60
  };
58
61
  type SessionSetOptions = {
59
62
  /**
@@ -74,6 +77,7 @@ export declare class SessionStateService {
74
77
  private readonly project_root;
75
78
  private readonly session_id;
76
79
  private readonly history_store;
80
+ private readonly recorder;
77
81
  private readonly executor;
78
82
  private readonly state;
79
83
  private readonly logger;
@@ -155,7 +159,7 @@ export declare class SessionStateService {
155
159
  /**
156
160
  * 构造并持久化一条 prompt user 消息。
157
161
  */
158
- create_and_persist_user_prompt_message(input: AgentSessionPromptInput): Promise<SessionUserMessageV1>;
162
+ create_and_persist_user_prompt_message(input: AgentSessionPromptInput, turn_id: string, input_type?: "prompt" | "steer"): Promise<SessionUserMessageV1>;
159
163
  /**
160
164
  * 持久化本轮执行期间延迟写入的 user 消息。
161
165
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SessionStateService.d.ts","sourceRoot":"","sources":["../../../src/session/services/SessionStateService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionStateService.d.ts","sourceRoot":"","sources":["../../../src/session/services/SessionStateService.ts"],"names":[],"mappings":"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"}
@@ -10,10 +10,12 @@ import { inferAgentModelLabel, normalizeAgentModel, } from "../../model/CityMode
10
10
  import { patchSessionModelLabel, readSessionMetadata, resolveSystemTimezone, writeSessionMetadata, } from "../../session/storage/Metadata.js";
11
11
  import { touchSessionMetadata } from "../../session/storage/Persistence.js";
12
12
  import { ensureSessionTitle } from "../../session/SessionTitle.js";
13
- import { persistSdkAssistantResult } from "../../session/storage/Persistence.js";
14
13
  import { hydrateUserPromptFileParts } from "../../executor/messages/SessionAttachmentMapper.js";
15
- import { to_session_action_record } from "../../executor/types/SessionRecords.js";
16
14
  import { generateId } from "../../utils/Id.js";
15
+ import { normalize_session_user_parts } from "../../session/recorder/SessionRecorder.js";
16
+ import { from_ui_assistant_parts, from_ui_user_parts, to_executor_ui_message, } from "../../session/recorder/SessionMessageCodec.js";
17
+ import fs from "fs-extra";
18
+ import { getSdkAgentSessionMessagesPath } from "../../session/storage/Paths.js";
17
19
  /**
18
20
  * 本地 Session 状态与持久化服务。
19
21
  */
@@ -22,6 +24,7 @@ export class SessionStateService {
22
24
  project_root;
23
25
  session_id;
24
26
  history_store;
27
+ recorder;
25
28
  executor;
26
29
  state;
27
30
  logger;
@@ -33,6 +36,7 @@ export class SessionStateService {
33
36
  this.project_root = options.project_root;
34
37
  this.session_id = options.session_id;
35
38
  this.history_store = options.history_store;
39
+ this.recorder = options.recorder;
36
40
  this.executor = options.executor;
37
41
  this.state = options.state;
38
42
  this.logger = options.logger;
@@ -97,6 +101,7 @@ export class SessionStateService {
97
101
  : {}),
98
102
  ...(metadata.modelId ? { modelId: metadata.modelId } : {}),
99
103
  };
104
+ await this.restore_persisted_model();
100
105
  })();
101
106
  await this.state.initializePromise;
102
107
  }
@@ -105,7 +110,6 @@ export class SessionStateService {
105
110
  */
106
111
  async ensure_ready_for_execution() {
107
112
  await this.initialize();
108
- await this.restore_persisted_model();
109
113
  if (this.state.ensureConfiguredPromise) {
110
114
  await this.state.ensureConfiguredPromise;
111
115
  return;
@@ -138,6 +142,7 @@ export class SessionStateService {
138
142
  async set(input, options) {
139
143
  const should_emit_action = options?.emit_action !== false;
140
144
  const previous_model_label = this.state.sessionConfig.modelLabel;
145
+ const previous_model_id = String(this.state.sessionConfig.modelId || previous_model_label || "").trim();
141
146
  const requested_model_id = String(input.modelId || "").trim();
142
147
  const next_model = input.model || (requested_model_id
143
148
  ? await this.resolve_model_by_id(requested_model_id)
@@ -149,17 +154,16 @@ export class SessionStateService {
149
154
  const should_emit_model_switch_action = Boolean(next_model &&
150
155
  should_emit_action &&
151
156
  this.state.sessionConfig.model &&
152
- previous_model_label &&
153
- next_model_label &&
154
- previous_model_label !== next_model_label);
157
+ previous_model_id &&
158
+ next_model_id &&
159
+ previous_model_id !== next_model_id);
160
+ const previous_model_name = previous_model_label || previous_model_id;
161
+ const next_model_name = next_model_label || next_model_id;
155
162
  const action_id = `model-switching:${this.session_id}:${Date.now()}:${generateId()}`;
156
163
  if (should_emit_model_switch_action) {
157
164
  await this.emit_action_event({
158
165
  id: action_id,
159
- title: "Switching session model",
160
- description: next_model_label
161
- ? `Switching to ${next_model_label}.`
162
- : undefined,
166
+ title: `Switching session model from ${previous_model_name} to ${next_model_name}`,
163
167
  state: "running",
164
168
  });
165
169
  }
@@ -183,7 +187,7 @@ export class SessionStateService {
183
187
  if (should_emit_model_switch_action) {
184
188
  await this.emit_action_event({
185
189
  id: action_id,
186
- title: "Session model switch failed",
190
+ title: `Session model switch from ${previous_model_name} to ${next_model_name} failed`,
187
191
  description: error instanceof Error ? error.message : String(error),
188
192
  state: "failed",
189
193
  });
@@ -193,10 +197,7 @@ export class SessionStateService {
193
197
  if (should_emit_model_switch_action) {
194
198
  await this.emit_action_event({
195
199
  id: action_id,
196
- title: "Session model switched",
197
- description: this.state.sessionConfig.modelLabel
198
- ? `Using ${this.state.sessionConfig.modelLabel}.`
199
- : undefined,
200
+ title: `Session model switched from ${previous_model_name} to ${next_model_name}`,
200
201
  state: "completed",
201
202
  });
202
203
  }
@@ -221,7 +222,21 @@ export class SessionStateService {
221
222
  * 追加一条 user 消息并刷新标题与 metadata。
222
223
  */
223
224
  async append_user_message(params) {
224
- await this.executor.append_user_message(params);
225
+ const parts = params.message && "role" in params.message
226
+ ? from_ui_user_parts(params.message.parts)
227
+ : [{
228
+ part_id: `external-user-text:${Date.now()}`,
229
+ type: "text",
230
+ text: String(params.text || "").trim(),
231
+ state: "done",
232
+ }];
233
+ if (parts.length === 0)
234
+ return;
235
+ await this.recorder.append_user_message({
236
+ turn_id: `external:${this.session_id}:${Date.now()}`,
237
+ input_type: "prompt",
238
+ parts,
239
+ });
225
240
  await this.ensure_title_from_history({ generate: true });
226
241
  await this.touch_metadata();
227
242
  }
@@ -229,18 +244,41 @@ export class SessionStateService {
229
244
  * 追加一条 assistant 消息并刷新 metadata。
230
245
  */
231
246
  async append_assistant_message(params) {
232
- await this.executor.append_assistant_message(params);
247
+ const parts = params.message && "role" in params.message
248
+ ? from_ui_assistant_parts(params.message.parts)
249
+ : [{
250
+ part_id: `external-assistant-text:${Date.now()}`,
251
+ sequence: 1,
252
+ type: "text",
253
+ text: String(params.fallbackText || "").trim(),
254
+ state: "done",
255
+ }];
256
+ if (parts.length === 0)
257
+ return;
258
+ await this.recorder.append_completed_assistant_message({ parts });
233
259
  await this.touch_metadata();
234
260
  }
235
261
  /**
236
262
  * 仅刷新当前 session metadata。
237
263
  */
238
264
  async touch_metadata() {
265
+ const message_page = await this.recorder.list_messages({
266
+ limit: 500,
267
+ include_internal: true,
268
+ });
269
+ const messages_path = getSdkAgentSessionMessagesPath(this.project_root, this.agent_id, this.session_id);
270
+ const history_bytes = await fs.stat(messages_path)
271
+ .then((file_stat) => file_stat.size)
272
+ .catch(() => 0);
273
+ const preview_text = resolve_message_preview(message_page.items[message_page.items.length - 1]).slice(0, 180);
239
274
  await touchSessionMetadata({
240
275
  projectRoot: this.project_root,
241
276
  agentId: this.agent_id,
242
277
  sessionId: this.session_id,
243
278
  sessionConfig: this.state.sessionConfig,
279
+ message_count: message_page.total,
280
+ history_bytes,
281
+ ...(preview_text ? { preview_text } : {}),
244
282
  });
245
283
  }
246
284
  /**
@@ -270,8 +308,11 @@ export class SessionStateService {
270
308
  if (!next_title || next_title === before_title)
271
309
  return;
272
310
  this.publish_event({
273
- type: "session-title",
274
- sessionId: this.session_id,
311
+ mutation_id: generateId(),
312
+ variant: "session",
313
+ type: "title",
314
+ session_id: this.session_id,
315
+ created_at: Date.now(),
275
316
  title: next_title,
276
317
  });
277
318
  }
@@ -279,76 +320,74 @@ export class SessionStateService {
279
320
  * 持久化最终 assistant 结果。
280
321
  */
281
322
  async persist_assistant_result(assistant_message) {
282
- await persistSdkAssistantResult({
283
- projectRoot: this.project_root,
284
- agentId: this.agent_id,
285
- sessionId: this.session_id,
286
- sessionConfig: this.state.sessionConfig,
287
- executor: this.executor,
288
- assistantMessage: assistant_message,
289
- });
323
+ void assistant_message;
324
+ await this.touch_metadata();
290
325
  }
291
326
  /**
292
327
  * 持久化一条 action record。
293
328
  */
294
329
  async persist_action_event(event) {
295
- const message = to_session_action_record(event, this.session_id);
296
- await this.history_store.write_record(message);
330
+ const existing = this.recorder.get_message(event.id);
331
+ if (!existing) {
332
+ const writer = await this.recorder.open_action_message({
333
+ message_id: event.id,
334
+ turn_id: event.metadata.turnId,
335
+ action_type: infer_action_type(event.id),
336
+ title: event.title,
337
+ description: event.description,
338
+ });
339
+ if (event.state === "completed")
340
+ await writer.complete();
341
+ if (event.state === "failed")
342
+ await writer.fail(event.description || event.title);
343
+ }
344
+ else if (existing.type === "action" && event.state !== "running") {
345
+ await this.recorder.update_action_message(event.id, event.state, {
346
+ title: event.title,
347
+ description: event.description,
348
+ });
349
+ }
297
350
  await this.touch_metadata();
298
351
  }
299
352
  /**
300
353
  * 写入并发布一条 action。
301
354
  */
302
355
  async emit_action_event(input) {
303
- const event = to_session_action_record({
304
- ...input,
305
- id: String(input.id || "").trim() ||
306
- `action:${this.session_id}:${Date.now()}:${generateId()}`,
307
- }, this.session_id);
308
- try {
309
- await this.persist_action_event(event);
310
- }
311
- catch {
312
- // action 持久化失败不应阻断宿主操作。
313
- }
314
- this.publish_event(event);
356
+ const action_id = String(input.id || "").trim() ||
357
+ `action:${this.session_id}:${Date.now()}`;
358
+ const turn_id = "turnId" in input
359
+ ? input.turnId
360
+ : input.metadata?.turnId;
361
+ await this.persist_action_event({
362
+ type: "action",
363
+ id: action_id,
364
+ title: input.title,
365
+ ...(input.description ? { description: input.description } : {}),
366
+ state: input.state,
367
+ metadata: {
368
+ v: 1,
369
+ ts: input.metadata?.ts || Date.now(),
370
+ sessionId: this.session_id,
371
+ ...(turn_id
372
+ ? { turnId: turn_id }
373
+ : {}),
374
+ },
375
+ });
315
376
  }
316
377
  /**
317
378
  * 构造并持久化一条 prompt user 消息。
318
379
  */
319
- async create_and_persist_user_prompt_message(input) {
380
+ async create_and_persist_user_prompt_message(input, turn_id, input_type = "prompt") {
320
381
  const query = input.query;
321
- if (typeof query === "string") {
322
- const message = this.history_store.userText({
323
- text: query.trim(),
324
- metadata: {
325
- sessionId: this.session_id,
326
- },
327
- });
328
- await this.executor.append_user_message({
329
- message,
330
- });
331
- await this.ensure_title_from_history({ generate: true });
332
- await this.touch_metadata();
333
- return message;
334
- }
335
- // query 是 parts 数组,先把本地图片附件转换为模型可消费的 data URL。
336
- const parts = await hydrateUserPromptFileParts(Array.isArray(query) ? query : [], this.project_root);
337
- const message = {
338
- id: `u:${this.session_id}:${generateId()}`,
339
- role: "user",
340
- parts,
341
- metadata: {
342
- v: 1,
343
- ts: Date.now(),
344
- sessionId: this.session_id,
345
- source: "ingress",
346
- kind: "normal",
347
- },
348
- };
349
- await this.executor.append_user_message({
350
- message,
382
+ const ui_parts = typeof query === "string"
383
+ ? [{ type: "text", text: query.trim() }]
384
+ : await hydrateUserPromptFileParts(Array.isArray(query) ? query : [], this.project_root);
385
+ const canonical = await this.recorder.append_user_message({
386
+ turn_id,
387
+ input_type,
388
+ parts: normalize_session_user_parts(ui_parts),
351
389
  });
390
+ const message = to_executor_ui_message(canonical);
352
391
  await this.ensure_title_from_history({ generate: true });
353
392
  await this.touch_metadata();
354
393
  return message;
@@ -363,11 +402,36 @@ export class SessionStateService {
363
402
  if (normalized_messages.length <= 0)
364
403
  return;
365
404
  for (const message of normalized_messages) {
366
- await this.executor.append_user_message({
367
- message,
405
+ await this.recorder.append_user_message({
406
+ turn_id: String(message.metadata?.turnId || `deferred:${this.session_id}:${Date.now()}`),
407
+ input_type: "steer",
408
+ parts: from_ui_user_parts(message.parts),
368
409
  });
369
410
  }
370
411
  await this.touch_metadata();
371
412
  }
372
413
  }
414
+ function resolve_message_preview(message) {
415
+ if (!message)
416
+ return "";
417
+ if (message.type === "user") {
418
+ return message.parts
419
+ .flatMap((part) => part.type === "text" ? [part.text] : [])
420
+ .join("")
421
+ .trim();
422
+ }
423
+ if (message.type === "assistant") {
424
+ return message.parts
425
+ .flatMap((part) => part.type === "text" ? [part.text] : [])
426
+ .join("")
427
+ .trim();
428
+ }
429
+ if (message.type === "action") {
430
+ return [message.title, message.description].filter(Boolean).join("\n");
431
+ }
432
+ return message.message.trim();
433
+ }
434
+ function infer_action_type(message_id) {
435
+ return String(message_id || "").split(":")[0] || "action";
436
+ }
373
437
  //# sourceMappingURL=SessionStateService.js.map