@downcity/agent 1.1.228 → 1.1.236

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 (221) hide show
  1. package/bin/agent/local/Agent.d.ts +6 -1
  2. package/bin/agent/local/Agent.d.ts.map +1 -1
  3. package/bin/agent/local/Agent.js +30 -3
  4. package/bin/agent/local/Agent.js.map +1 -1
  5. package/bin/agent/local/services/AgentSessions.d.ts +23 -0
  6. package/bin/agent/local/services/AgentSessions.d.ts.map +1 -1
  7. package/bin/agent/local/services/AgentSessions.js +44 -0
  8. package/bin/agent/local/services/AgentSessions.js.map +1 -1
  9. package/bin/agent/remote/RemoteSession.d.ts +2 -0
  10. package/bin/agent/remote/RemoteSession.d.ts.map +1 -1
  11. package/bin/agent/remote/RemoteSession.js +4 -0
  12. package/bin/agent/remote/RemoteSession.js.map +1 -1
  13. package/bin/agent/remote/RemoteTransport.d.ts +2 -0
  14. package/bin/agent/remote/RemoteTransport.d.ts.map +1 -1
  15. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts +1 -0
  16. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -1
  17. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +11 -7
  18. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +1 -1
  19. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts +1 -0
  20. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts.map +1 -1
  21. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js +3 -0
  22. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js.map +1 -1
  23. package/bin/executor/Executor.d.ts +43 -0
  24. package/bin/executor/Executor.d.ts.map +1 -1
  25. package/bin/executor/Executor.js +127 -7
  26. package/bin/executor/Executor.js.map +1 -1
  27. package/bin/executor/composer/compaction/SessionCompactionComposer.d.ts +10 -0
  28. package/bin/executor/composer/compaction/SessionCompactionComposer.d.ts.map +1 -1
  29. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.d.ts +0 -10
  30. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.d.ts.map +1 -1
  31. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js +4 -34
  32. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js.map +1 -1
  33. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.d.ts +1 -3
  34. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.d.ts.map +1 -1
  35. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.js +7 -59
  36. package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.js.map +1 -1
  37. package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts +38 -0
  38. package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts.map +1 -0
  39. package/bin/executor/core-engine/CoreEngineContextCompaction.js +392 -0
  40. package/bin/executor/core-engine/CoreEngineContextCompaction.js.map +1 -0
  41. package/bin/executor/core-engine/CoreEngineMessageState.d.ts +15 -0
  42. package/bin/executor/core-engine/CoreEngineMessageState.d.ts.map +1 -1
  43. package/bin/executor/core-engine/CoreEngineMessageState.js +20 -0
  44. package/bin/executor/core-engine/CoreEngineMessageState.js.map +1 -1
  45. package/bin/executor/core-engine/CoreEngineRunner.d.ts +15 -0
  46. package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +1 -1
  47. package/bin/executor/core-engine/CoreEngineRunner.js +150 -35
  48. package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -1
  49. package/bin/executor/store/history/SessionHistoryStore.d.ts +7 -23
  50. package/bin/executor/store/history/SessionHistoryStore.d.ts.map +1 -1
  51. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts.map +1 -1
  52. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +2 -4
  53. package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js.map +1 -1
  54. package/bin/executor/tools/plugin/PluginToolBridge.d.ts.map +1 -1
  55. package/bin/executor/tools/plugin/PluginToolBridge.js +4 -2
  56. package/bin/executor/tools/plugin/PluginToolBridge.js.map +1 -1
  57. package/bin/executor/types/SessionRun.d.ts +8 -0
  58. package/bin/executor/types/SessionRun.d.ts.map +1 -1
  59. package/bin/index.d.ts +3 -2
  60. package/bin/index.d.ts.map +1 -1
  61. package/bin/index.js +2 -2
  62. package/bin/index.js.map +1 -1
  63. package/bin/model/CityModelAdapter.d.ts +6 -0
  64. package/bin/model/CityModelAdapter.d.ts.map +1 -1
  65. package/bin/model/CityModelAdapter.js +13 -0
  66. package/bin/model/CityModelAdapter.js.map +1 -1
  67. package/bin/plugin/core/PluginLocalExecution.js +3 -3
  68. package/bin/plugin/core/PluginLocalExecution.js.map +1 -1
  69. package/bin/plugin/core/PluginRegistry.d.ts +41 -2
  70. package/bin/plugin/core/PluginRegistry.d.ts.map +1 -1
  71. package/bin/plugin/core/PluginRegistry.js +145 -6
  72. package/bin/plugin/core/PluginRegistry.js.map +1 -1
  73. package/bin/rpc/Client.d.ts +4 -0
  74. package/bin/rpc/Client.d.ts.map +1 -1
  75. package/bin/rpc/Client.js +11 -0
  76. package/bin/rpc/Client.js.map +1 -1
  77. package/bin/session/Session.d.ts +15 -1
  78. package/bin/session/Session.d.ts.map +1 -1
  79. package/bin/session/Session.js +83 -11
  80. package/bin/session/Session.js.map +1 -1
  81. package/bin/session/SessionSystemBuilder.d.ts.map +1 -1
  82. package/bin/session/SessionSystemBuilder.js +3 -1
  83. package/bin/session/SessionSystemBuilder.js.map +1 -1
  84. package/bin/session/browse/Browse.d.ts +0 -8
  85. package/bin/session/browse/Browse.d.ts.map +1 -1
  86. package/bin/session/browse/Browse.js +72 -57
  87. package/bin/session/browse/Browse.js.map +1 -1
  88. package/bin/session/recorder/JsonlSessionMessageStore.d.ts +69 -16
  89. package/bin/session/recorder/JsonlSessionMessageStore.d.ts.map +1 -1
  90. package/bin/session/recorder/JsonlSessionMessageStore.js +283 -60
  91. package/bin/session/recorder/JsonlSessionMessageStore.js.map +1 -1
  92. package/bin/session/recorder/SessionRecorder.d.ts +20 -2
  93. package/bin/session/recorder/SessionRecorder.d.ts.map +1 -1
  94. package/bin/session/recorder/SessionRecorder.js +91 -46
  95. package/bin/session/recorder/SessionRecorder.js.map +1 -1
  96. package/bin/session/recorder/SessionRecorderCompaction.d.ts +3 -3
  97. package/bin/session/recorder/SessionRecorderCompaction.d.ts.map +1 -1
  98. package/bin/session/recorder/SessionRecorderCompaction.js +118 -88
  99. package/bin/session/recorder/SessionRecorderCompaction.js.map +1 -1
  100. package/bin/session/recorder/SessionRecorderHistoryStore.d.ts +2 -2
  101. package/bin/session/recorder/SessionRecorderHistoryStore.d.ts.map +1 -1
  102. package/bin/session/recorder/SessionRecorderHistoryStore.js +31 -36
  103. package/bin/session/recorder/SessionRecorderHistoryStore.js.map +1 -1
  104. package/bin/session/runtime/SessionPromptRuntime.d.ts +21 -1
  105. package/bin/session/runtime/SessionPromptRuntime.d.ts.map +1 -1
  106. package/bin/session/runtime/SessionPromptRuntime.js +65 -8
  107. package/bin/session/runtime/SessionPromptRuntime.js.map +1 -1
  108. package/bin/session/services/SessionStateService.d.ts +19 -1
  109. package/bin/session/services/SessionStateService.d.ts.map +1 -1
  110. package/bin/session/services/SessionStateService.js +70 -40
  111. package/bin/session/services/SessionStateService.js.map +1 -1
  112. package/bin/session/services/SessionTurnService.d.ts +15 -0
  113. package/bin/session/services/SessionTurnService.d.ts.map +1 -1
  114. package/bin/session/services/SessionTurnService.js +104 -7
  115. package/bin/session/services/SessionTurnService.js.map +1 -1
  116. package/bin/session/services/SessionViewService.d.ts +1 -5
  117. package/bin/session/services/SessionViewService.d.ts.map +1 -1
  118. package/bin/session/services/SessionViewService.js +4 -34
  119. package/bin/session/services/SessionViewService.js.map +1 -1
  120. package/bin/session/storage/Paths.d.ts +3 -15
  121. package/bin/session/storage/Paths.d.ts.map +1 -1
  122. package/bin/session/storage/Paths.js +5 -21
  123. package/bin/session/storage/Paths.js.map +1 -1
  124. package/bin/types/agent/SessionActor.d.ts +8 -0
  125. package/bin/types/agent/SessionActor.d.ts.map +1 -1
  126. package/bin/types/agent/SessionTypes.d.ts +2 -24
  127. package/bin/types/agent/SessionTypes.d.ts.map +1 -1
  128. package/bin/types/executor/SessionRunContext.d.ts +29 -0
  129. package/bin/types/executor/SessionRunContext.d.ts.map +1 -1
  130. package/bin/types/plugin/PluginRuntime.d.ts +59 -2
  131. package/bin/types/plugin/PluginRuntime.d.ts.map +1 -1
  132. package/bin/types/plugin/PluginState.d.ts +10 -0
  133. package/bin/types/plugin/PluginState.d.ts.map +1 -1
  134. package/bin/types/rpc/RpcProtocol.d.ts +10 -0
  135. package/bin/types/rpc/RpcProtocol.d.ts.map +1 -1
  136. package/bin/types/runtime/agent/AgentContext.d.ts +17 -5
  137. package/bin/types/runtime/agent/AgentContext.d.ts.map +1 -1
  138. package/bin/types/runtime/agent/AgentContext.js +29 -6
  139. package/bin/types/runtime/agent/AgentContext.js.map +1 -1
  140. package/bin/types/session/SessionLocalState.d.ts +8 -0
  141. package/bin/types/session/SessionLocalState.d.ts.map +1 -1
  142. package/bin/types/session/SessionMessage.d.ts +16 -12
  143. package/bin/types/session/SessionMessage.d.ts.map +1 -1
  144. package/bin/types/session/SessionMutation.d.ts +1 -1
  145. package/bin/types/session/SessionMutation.js +1 -1
  146. package/bin/types/session/SessionOptions.d.ts +16 -0
  147. package/bin/types/session/SessionOptions.d.ts.map +1 -1
  148. package/bin/types/session/SessionQueueCommand.d.ts +68 -0
  149. package/bin/types/session/SessionQueueCommand.d.ts.map +1 -0
  150. package/bin/types/session/SessionQueueCommand.js +10 -0
  151. package/bin/types/session/SessionQueueCommand.js.map +1 -0
  152. package/bin/types/session/SessionSegment.d.ts +57 -0
  153. package/bin/types/session/SessionSegment.d.ts.map +1 -0
  154. package/bin/types/session/SessionSegment.js +8 -0
  155. package/bin/types/session/SessionSegment.js.map +1 -0
  156. package/bin/utils/logger/Logger.d.ts +7 -9
  157. package/bin/utils/logger/Logger.d.ts.map +1 -1
  158. package/bin/utils/logger/Logger.js +11 -9
  159. package/bin/utils/logger/Logger.js.map +1 -1
  160. package/package.json +3 -3
  161. package/scripts/city-model-tool-loop.test.mjs +32 -0
  162. package/scripts/core-engine-context-compaction.test.mjs +411 -0
  163. package/scripts/logger-isolation.test.mjs +55 -0
  164. package/scripts/multi-agent-plugin-isolation.test.mjs +289 -0
  165. package/scripts/plugin-tool-bridge.test.mjs +52 -0
  166. package/scripts/remote-session-reconnect.test.mjs +18 -0
  167. package/scripts/session-action-message.test.mjs +59 -13
  168. package/scripts/session-compaction-context-window.test.mjs +96 -0
  169. package/scripts/session-config-turn-boundary.test.mjs +278 -0
  170. package/scripts/session-list-title.test.mjs +21 -3
  171. package/scripts/session-prompt-runtime.test.mjs +93 -0
  172. package/scripts/session-recorder.test.mjs +335 -15
  173. package/src/agent/local/Agent.ts +34 -3
  174. package/src/agent/local/services/AgentSessions.ts +61 -0
  175. package/src/agent/remote/RemoteSession.ts +5 -0
  176. package/src/agent/remote/RemoteTransport.ts +2 -0
  177. package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +15 -5
  178. package/src/agent/remote/transports/RpcRemoteAgentTransport.ts +4 -0
  179. package/src/executor/Executor.ts +161 -7
  180. package/src/executor/composer/compaction/SessionCompactionComposer.ts +12 -0
  181. package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.ts +4 -55
  182. package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.ts +8 -66
  183. package/src/executor/core-engine/CoreEngineContextCompaction.ts +477 -0
  184. package/src/executor/core-engine/CoreEngineMessageState.ts +29 -0
  185. package/src/executor/core-engine/CoreEngineRunner.ts +211 -43
  186. package/src/executor/store/history/SessionHistoryStore.ts +7 -26
  187. package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +2 -4
  188. package/src/executor/tools/plugin/PluginToolBridge.ts +4 -2
  189. package/src/executor/types/SessionRun.ts +9 -0
  190. package/src/index.ts +9 -1
  191. package/src/model/CityModelAdapter.ts +15 -0
  192. package/src/plugin/core/PluginLocalExecution.ts +3 -3
  193. package/src/plugin/core/PluginRegistry.ts +187 -6
  194. package/src/rpc/Client.ts +12 -0
  195. package/src/session/Session.ts +97 -11
  196. package/src/session/SessionSystemBuilder.ts +4 -1
  197. package/src/session/browse/Browse.ts +73 -69
  198. package/src/session/recorder/JsonlSessionMessageStore.ts +378 -60
  199. package/src/session/recorder/SessionRecorder.ts +116 -49
  200. package/src/session/recorder/SessionRecorderCompaction.ts +131 -108
  201. package/src/session/recorder/SessionRecorderHistoryStore.ts +29 -49
  202. package/src/session/runtime/SessionPromptRuntime.ts +86 -10
  203. package/src/session/services/SessionStateService.ts +89 -45
  204. package/src/session/services/SessionTurnService.ts +112 -7
  205. package/src/session/services/SessionViewService.ts +4 -50
  206. package/src/session/storage/Paths.ts +5 -38
  207. package/src/types/agent/SessionActor.ts +9 -0
  208. package/src/types/agent/SessionTypes.ts +2 -24
  209. package/src/types/executor/SessionRunContext.ts +34 -0
  210. package/src/types/plugin/PluginRuntime.ts +63 -2
  211. package/src/types/plugin/PluginState.ts +10 -0
  212. package/src/types/rpc/RpcProtocol.ts +11 -0
  213. package/src/types/runtime/agent/AgentContext.ts +32 -7
  214. package/src/types/session/SessionLocalState.ts +9 -0
  215. package/src/types/session/SessionMessage.ts +16 -12
  216. package/src/types/session/SessionMutation.ts +1 -1
  217. package/src/types/session/SessionOptions.ts +21 -0
  218. package/src/types/session/SessionQueueCommand.ts +78 -0
  219. package/src/types/session/SessionSegment.ts +62 -0
  220. package/src/utils/logger/Logger.ts +10 -10
  221. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,38 @@
1
+ /**
2
+ * CoreEngine 模型上下文压缩。
3
+ *
4
+ * 关键点(中文)
5
+ * - 触发条件只读取 Provider 返回的真实 usage,不做调用前 token 预估。
6
+ * - 压缩只作用于本次运行的 ModelMessage,不修改 Session canonical Message。
7
+ * - reasoning、tool call、tool result 与 approval 按 AI SDK 关联关系清理。
8
+ * - 首级保留文本历史,后续深度把历史前缀折叠为 checkpoint;最后 user 与最新工具事务始终原子保留。
9
+ * - 字符上限只用于约束已经决定压缩后的单个 part,不参与是否触发压缩的判断。
10
+ */
11
+ import { type ModelMessage } from "ai";
12
+ /** usage 达到模型上下文窗口 95% 时安排下一 step 压缩。 */
13
+ export declare const MODEL_CONTEXT_COMPACTION_TRIGGER_RATIO = 0.95;
14
+ /** 压缩后的真实 usage 需要回落到模型上下文窗口 50% 以内。 */
15
+ export declare const MODEL_CONTEXT_COMPACTION_TARGET_RATIO = 0.5;
16
+ /**
17
+ * 读取 Provider usage 中的实际总 token。
18
+ *
19
+ * 优先使用 `totalTokens`;Provider 未返回时才回退为 input 与 output 之和。
20
+ */
21
+ export declare function resolve_model_usage_tokens(usage: unknown): number | null;
22
+ /** 计算真实 usage 占当前模型上下文窗口的比例。 */
23
+ export declare function resolve_model_usage_ratio(usage: unknown, context_window: number | undefined): number | null;
24
+ /**
25
+ * 判断一次真实 usage 是否要求下一 step 继续压缩。
26
+ *
27
+ * 普通调用使用 95% 触发水位;刚执行过压缩的调用使用 50% 目标水位验收。
28
+ */
29
+ export declare function should_compact_after_usage(usage_ratio: number | null, validating_compaction: boolean): boolean;
30
+ /**
31
+ * 对当前 ModelMessage 做一次 part 级深度压缩。
32
+ *
33
+ * `compact_depth` 每增加一级都会把保留预算减半,用于真实 usage 未达到目标水位时继续收紧。
34
+ */
35
+ export declare function deep_compact_model_messages(messages: ModelMessage[], compact_depth?: number): ModelMessage[];
36
+ /** 对文本做确定性的 head/tail 折叠。 */
37
+ export declare function fold_compacted_text(text: string, max_chars: number): string;
38
+ //# sourceMappingURL=CoreEngineContextCompaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoreEngineContextCompaction.d.ts","sourceRoot":"","sources":["../../../src/executor/core-engine/CoreEngineContextCompaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,IAAI,CAAC;AAEtD,yCAAyC;AACzC,eAAO,MAAM,sCAAsC,OAAO,CAAC;AAE3D,wCAAwC;AACxC,eAAO,MAAM,qCAAqC,MAAM,CAAC;AAWzD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAUxE;AAED,gCAAgC;AAChC,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,MAAM,GAAG,IAAI,CAOf;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,qBAAqB,EAAE,OAAO,GAC7B,OAAO,CAKT;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,YAAY,EAAE,EACxB,aAAa,SAAI,GAChB,YAAY,EAAE,CA2EhB;AAED,6BAA6B;AAC7B,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAS3E"}
@@ -0,0 +1,392 @@
1
+ /**
2
+ * CoreEngine 模型上下文压缩。
3
+ *
4
+ * 关键点(中文)
5
+ * - 触发条件只读取 Provider 返回的真实 usage,不做调用前 token 预估。
6
+ * - 压缩只作用于本次运行的 ModelMessage,不修改 Session canonical Message。
7
+ * - reasoning、tool call、tool result 与 approval 按 AI SDK 关联关系清理。
8
+ * - 首级保留文本历史,后续深度把历史前缀折叠为 checkpoint;最后 user 与最新工具事务始终原子保留。
9
+ * - 字符上限只用于约束已经决定压缩后的单个 part,不参与是否触发压缩的判断。
10
+ */
11
+ import { pruneMessages } from "ai";
12
+ /** usage 达到模型上下文窗口 95% 时安排下一 step 压缩。 */
13
+ export const MODEL_CONTEXT_COMPACTION_TRIGGER_RATIO = 0.95;
14
+ /** 压缩后的真实 usage 需要回落到模型上下文窗口 50% 以内。 */
15
+ export const MODEL_CONTEXT_COMPACTION_TARGET_RATIO = 0.5;
16
+ /** 历史 checkpoint 的基础最大字符数,后续深度逐级减半。 */
17
+ const INITIAL_HISTORY_CHECKPOINT_CHARS = 24_000;
18
+ /** 单条保留消息的基础字符预算,后续深度逐级减半。 */
19
+ const INITIAL_RETAINED_MESSAGE_CHARS = 16_000;
20
+ /** 单项折叠后至少保留的字符数,避免深度压缩后完全丢失语义。 */
21
+ const MIN_FOLDED_PART_CHARS = 64;
22
+ /**
23
+ * 读取 Provider usage 中的实际总 token。
24
+ *
25
+ * 优先使用 `totalTokens`;Provider 未返回时才回退为 input 与 output 之和。
26
+ */
27
+ export function resolve_model_usage_tokens(usage) {
28
+ if (!usage || typeof usage !== "object")
29
+ return null;
30
+ const record = usage;
31
+ const total_tokens = read_non_negative_number(record.totalTokens);
32
+ if (total_tokens !== null)
33
+ return total_tokens;
34
+ const input_tokens = read_non_negative_number(record.inputTokens);
35
+ const output_tokens = read_non_negative_number(record.outputTokens);
36
+ if (input_tokens === null && output_tokens === null)
37
+ return null;
38
+ return (input_tokens || 0) + (output_tokens || 0);
39
+ }
40
+ /** 计算真实 usage 占当前模型上下文窗口的比例。 */
41
+ export function resolve_model_usage_ratio(usage, context_window) {
42
+ if (!Number.isSafeInteger(context_window) || Number(context_window) <= 0) {
43
+ return null;
44
+ }
45
+ const used_tokens = resolve_model_usage_tokens(usage);
46
+ if (used_tokens === null)
47
+ return null;
48
+ return used_tokens / Number(context_window);
49
+ }
50
+ /**
51
+ * 判断一次真实 usage 是否要求下一 step 继续压缩。
52
+ *
53
+ * 普通调用使用 95% 触发水位;刚执行过压缩的调用使用 50% 目标水位验收。
54
+ */
55
+ export function should_compact_after_usage(usage_ratio, validating_compaction) {
56
+ if (usage_ratio === null || !Number.isFinite(usage_ratio))
57
+ return false;
58
+ return validating_compaction
59
+ ? usage_ratio > MODEL_CONTEXT_COMPACTION_TARGET_RATIO
60
+ : usage_ratio >= MODEL_CONTEXT_COMPACTION_TRIGGER_RATIO;
61
+ }
62
+ /**
63
+ * 对当前 ModelMessage 做一次 part 级深度压缩。
64
+ *
65
+ * `compact_depth` 每增加一级都会把保留预算减半,用于真实 usage 未达到目标水位时继续收紧。
66
+ */
67
+ export function deep_compact_model_messages(messages, compact_depth = 0) {
68
+ if (!Array.isArray(messages) || messages.length === 0)
69
+ return [];
70
+ const depth = Math.max(0, Math.min(8, Math.floor(compact_depth)));
71
+ const pruned_messages = pruneMessages({
72
+ messages,
73
+ reasoning: "all",
74
+ // 工具事务由本模块按 toolCallId/approvalId 选择;先让 SDK 保留完整关联,
75
+ // 避免 approval response 作为最后一条消息时 SDK 丢掉更早的 tool-call。
76
+ toolCalls: "none",
77
+ emptyMessages: "remove",
78
+ });
79
+ if (pruned_messages.length === 0)
80
+ return [];
81
+ const approval_to_tool_call = collect_approval_tool_call_map(pruned_messages);
82
+ const last_user_index = find_last_message_index(pruned_messages, (message) => message.role === "user");
83
+ const selected_tool_call_ids = collect_latest_tool_transaction_ids(pruned_messages, last_user_index, approval_to_tool_call);
84
+ // 第一级只清理高噪声 part,保留全部文本历史;真实 usage 仍高于 50% 时,
85
+ // 后续深度才把历史前缀折叠为 checkpoint。
86
+ const retained_indices = depth === 0
87
+ ? new Set(pruned_messages.map((_message, index) => index))
88
+ : collect_retained_message_indices({
89
+ messages: pruned_messages,
90
+ last_user_index,
91
+ selected_tool_call_ids,
92
+ approval_to_tool_call,
93
+ });
94
+ const excluded_messages = pruned_messages.filter((_message, index) => !retained_indices.has(index));
95
+ const checkpoint_limit = resolve_depth_budget(INITIAL_HISTORY_CHECKPOINT_CHARS, depth);
96
+ const checkpoint_text = build_history_checkpoint(excluded_messages, checkpoint_limit);
97
+ const message_limit = resolve_depth_budget(INITIAL_RETAINED_MESSAGE_CHARS, depth);
98
+ const retained_messages = pruned_messages
99
+ .map((message, index) => ({ message, index }))
100
+ .filter(({ index }) => retained_indices.has(index))
101
+ .map(({ message }) => compact_retained_message(message, message_limit, selected_tool_call_ids, approval_to_tool_call))
102
+ .filter((message) => message !== null);
103
+ const checkpoint_message = checkpoint_text
104
+ ? [{ role: "assistant", content: checkpoint_text }]
105
+ : [];
106
+ const system_messages = retained_messages.filter((message) => message.role === "system");
107
+ const non_system_messages = retained_messages.filter((message) => message.role !== "system");
108
+ return remove_orphaned_tool_parts([
109
+ ...system_messages,
110
+ ...checkpoint_message,
111
+ ...non_system_messages,
112
+ ]);
113
+ }
114
+ /** 对文本做确定性的 head/tail 折叠。 */
115
+ export function fold_compacted_text(text, max_chars) {
116
+ const value = String(text || "");
117
+ const limit = Math.max(MIN_FOLDED_PART_CHARS, Math.floor(max_chars));
118
+ if (value.length <= limit)
119
+ return value;
120
+ const marker = `\n...[compacted ${String(value.length - limit)} chars]...\n`;
121
+ const content_limit = Math.max(0, limit - marker.length);
122
+ const head_chars = Math.ceil(content_limit / 2);
123
+ const tail_chars = Math.floor(content_limit / 2);
124
+ return `${value.slice(0, head_chars)}${marker}${value.slice(-tail_chars)}`;
125
+ }
126
+ function read_non_negative_number(value) {
127
+ return typeof value === "number" && Number.isFinite(value) && value >= 0
128
+ ? value
129
+ : null;
130
+ }
131
+ function resolve_depth_budget(initial_budget, depth) {
132
+ return Math.max(MIN_FOLDED_PART_CHARS, Math.floor(initial_budget / Math.pow(2, depth)));
133
+ }
134
+ function find_last_message_index(messages, predicate) {
135
+ for (let index = messages.length - 1; index >= 0; index -= 1) {
136
+ if (predicate(messages[index]))
137
+ return index;
138
+ }
139
+ return -1;
140
+ }
141
+ function collect_approval_tool_call_map(messages) {
142
+ const output = new Map();
143
+ for (const message of messages) {
144
+ if (!Array.isArray(message.content))
145
+ continue;
146
+ for (const part of message.content) {
147
+ if (part.type !== "tool-approval-request")
148
+ continue;
149
+ output.set(part.approvalId, part.toolCallId);
150
+ }
151
+ }
152
+ return output;
153
+ }
154
+ function collect_latest_tool_transaction_ids(messages, last_user_index, approval_to_tool_call) {
155
+ for (let index = messages.length - 1; index > last_user_index; index -= 1) {
156
+ const message = messages[index];
157
+ if (!Array.isArray(message.content))
158
+ continue;
159
+ const ids = new Set();
160
+ for (const part of message.content) {
161
+ if (part.type === "tool-call" || part.type === "tool-result") {
162
+ ids.add(part.toolCallId);
163
+ }
164
+ else if (part.type === "tool-approval-request") {
165
+ ids.add(part.toolCallId);
166
+ }
167
+ else if (part.type === "tool-approval-response") {
168
+ const tool_call_id = approval_to_tool_call.get(part.approvalId);
169
+ if (tool_call_id)
170
+ ids.add(tool_call_id);
171
+ }
172
+ }
173
+ if (ids.size > 0)
174
+ return ids;
175
+ }
176
+ return new Set();
177
+ }
178
+ function collect_retained_message_indices(input) {
179
+ const retained = new Set();
180
+ input.messages.forEach((message, index) => {
181
+ if (message.role === "system")
182
+ retained.add(index);
183
+ if (index === input.last_user_index)
184
+ retained.add(index);
185
+ if (message_contains_selected_tool_transaction(message, input.selected_tool_call_ids, input.approval_to_tool_call)) {
186
+ retained.add(index);
187
+ }
188
+ });
189
+ if (input.selected_tool_call_ids.size === 0) {
190
+ const last_assistant_index = find_last_message_index(input.messages, (message) => message.role === "assistant");
191
+ if (last_assistant_index > input.last_user_index) {
192
+ retained.add(last_assistant_index);
193
+ }
194
+ }
195
+ if (retained.size === 0)
196
+ retained.add(input.messages.length - 1);
197
+ return retained;
198
+ }
199
+ function message_contains_selected_tool_transaction(message, selected_tool_call_ids, approval_to_tool_call) {
200
+ if (!Array.isArray(message.content) || selected_tool_call_ids.size === 0) {
201
+ return false;
202
+ }
203
+ return message.content.some((part) => {
204
+ if (part.type === "tool-call" || part.type === "tool-result") {
205
+ return selected_tool_call_ids.has(part.toolCallId);
206
+ }
207
+ if (part.type === "tool-approval-request") {
208
+ return selected_tool_call_ids.has(part.toolCallId);
209
+ }
210
+ if (part.type === "tool-approval-response") {
211
+ const tool_call_id = approval_to_tool_call.get(part.approvalId);
212
+ return Boolean(tool_call_id && selected_tool_call_ids.has(tool_call_id));
213
+ }
214
+ return false;
215
+ });
216
+ }
217
+ function build_history_checkpoint(messages, max_chars) {
218
+ if (messages.length === 0)
219
+ return "";
220
+ const body = messages
221
+ .map((message) => serialize_model_message_for_checkpoint(message))
222
+ .filter(Boolean)
223
+ .join("\n\n");
224
+ if (!body)
225
+ return "";
226
+ return [
227
+ "[Compacted conversation checkpoint]",
228
+ fold_compacted_text(body, max_chars),
229
+ ].join("\n");
230
+ }
231
+ function serialize_model_message_for_checkpoint(message) {
232
+ const role = message.role;
233
+ if (typeof message.content === "string") {
234
+ return `${role}: ${message.content}`;
235
+ }
236
+ const parts = message.content.map((part) => {
237
+ if (part.type === "text")
238
+ return part.text;
239
+ if (part.type === "reasoning")
240
+ return "";
241
+ if (part.type === "tool-call") {
242
+ return `[tool-call ${part.toolName} ${part.toolCallId}] ${safe_stringify(part.input)}`;
243
+ }
244
+ if (part.type === "tool-result") {
245
+ return `[tool-result ${part.toolName} ${part.toolCallId}] ${safe_stringify(part.output)}`;
246
+ }
247
+ if (part.type === "tool-approval-request") {
248
+ return `[tool-approval-request ${part.toolCallId} ${part.approvalId}]`;
249
+ }
250
+ if (part.type === "tool-approval-response") {
251
+ return `[tool-approval-response ${part.approvalId} approved=${String(part.approved)}]`;
252
+ }
253
+ if (part.type === "file") {
254
+ return `[file ${part.filename || "unnamed"} ${part.mediaType}]`;
255
+ }
256
+ if (part.type === "image")
257
+ return `[image ${part.mediaType || "unknown"}]`;
258
+ return `[${String(part.type || "part")}]`;
259
+ });
260
+ return `${role}: ${parts.filter(Boolean).join("\n")}`;
261
+ }
262
+ function compact_retained_message(message, message_limit, selected_tool_call_ids, approval_to_tool_call) {
263
+ if (typeof message.content === "string") {
264
+ return {
265
+ ...message,
266
+ content: fold_compacted_text(message.content, message_limit),
267
+ };
268
+ }
269
+ const relevant_parts = message.content.filter((part) => part.type !== "reasoning");
270
+ const part_limit = Math.max(MIN_FOLDED_PART_CHARS, Math.floor(message_limit / Math.max(1, relevant_parts.length)));
271
+ const content = relevant_parts
272
+ .filter((part) => {
273
+ if (part.type === "tool-call" || part.type === "tool-result") {
274
+ return selected_tool_call_ids.has(part.toolCallId);
275
+ }
276
+ if (part.type === "tool-approval-request") {
277
+ return selected_tool_call_ids.has(part.toolCallId);
278
+ }
279
+ if (part.type === "tool-approval-response") {
280
+ const tool_call_id = approval_to_tool_call.get(part.approvalId);
281
+ return Boolean(tool_call_id && selected_tool_call_ids.has(tool_call_id));
282
+ }
283
+ return true;
284
+ })
285
+ .map((part) => compact_model_part(part, part_limit));
286
+ if (content.length === 0)
287
+ return null;
288
+ return { ...message, content };
289
+ }
290
+ function compact_model_part(part, part_limit) {
291
+ if (part.type === "text") {
292
+ return {
293
+ ...part,
294
+ text: fold_compacted_text(String(part.text || ""), part_limit),
295
+ };
296
+ }
297
+ if (part.type === "tool-call") {
298
+ return {
299
+ ...part,
300
+ input: fold_compacted_value(part.input, part_limit),
301
+ };
302
+ }
303
+ if (part.type === "tool-result") {
304
+ const serialized_output = safe_stringify(part.output);
305
+ if (serialized_output.length <= part_limit)
306
+ return part;
307
+ return {
308
+ ...part,
309
+ output: {
310
+ type: "text",
311
+ value: fold_compacted_text(serialized_output, part_limit),
312
+ },
313
+ };
314
+ }
315
+ if (part.type === "file") {
316
+ const data = part.data;
317
+ if (typeof data === "string" && data.length > part_limit) {
318
+ return {
319
+ type: "text",
320
+ text: `[compacted file ${String(part.filename || "unnamed")} ${String(part.mediaType || "unknown")}, ${String(data.length)} chars]`,
321
+ };
322
+ }
323
+ }
324
+ if (part.type === "image") {
325
+ const image = part.image;
326
+ if (typeof image === "string" && image.length > part_limit) {
327
+ return {
328
+ type: "text",
329
+ text: `[compacted image ${String(part.mediaType || "unknown")}, ${String(image.length)} chars]`,
330
+ };
331
+ }
332
+ }
333
+ return part;
334
+ }
335
+ function fold_compacted_value(value, max_chars) {
336
+ const serialized = safe_stringify(value);
337
+ if (serialized.length <= max_chars)
338
+ return value;
339
+ return {
340
+ compacted: true,
341
+ preview: fold_compacted_text(serialized, max_chars),
342
+ };
343
+ }
344
+ function remove_orphaned_tool_parts(messages) {
345
+ const tool_call_ids = new Set();
346
+ const approval_ids = new Set();
347
+ for (const message of messages) {
348
+ if (!Array.isArray(message.content))
349
+ continue;
350
+ for (const part of message.content) {
351
+ if (part.type === "tool-call")
352
+ tool_call_ids.add(part.toolCallId);
353
+ }
354
+ }
355
+ for (const message of messages) {
356
+ if (!Array.isArray(message.content))
357
+ continue;
358
+ for (const part of message.content) {
359
+ if (part.type === "tool-approval-request" &&
360
+ tool_call_ids.has(part.toolCallId))
361
+ approval_ids.add(part.approvalId);
362
+ }
363
+ }
364
+ return messages
365
+ .map((message) => {
366
+ if (!Array.isArray(message.content))
367
+ return message;
368
+ const content = message.content.filter((part) => {
369
+ if (part.type === "tool-result") {
370
+ return tool_call_ids.has(part.toolCallId);
371
+ }
372
+ if (part.type === "tool-approval-request") {
373
+ return tool_call_ids.has(part.toolCallId);
374
+ }
375
+ if (part.type === "tool-approval-response") {
376
+ return approval_ids.has(part.approvalId);
377
+ }
378
+ return true;
379
+ });
380
+ return { ...message, content };
381
+ })
382
+ .filter((message) => message.content.length > 0);
383
+ }
384
+ function safe_stringify(value) {
385
+ try {
386
+ return JSON.stringify(value) || String(value || "");
387
+ }
388
+ catch {
389
+ return String(value || "");
390
+ }
391
+ }
392
+ //# sourceMappingURL=CoreEngineContextCompaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoreEngineContextCompaction.js","sourceRoot":"","sources":["../../../src/executor/core-engine/CoreEngineContextCompaction.ts"],"names":[],"mappings":"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"}
@@ -66,6 +66,21 @@ export declare class CoreEngineMessageState {
66
66
  * 追加 SDK 返回的模型 response messages。
67
67
  */
68
68
  appendModelMessages(messages: ModelMessage[]): void;
69
+ /**
70
+ * 原子替换当前模型侧消息基线。
71
+ *
72
+ * 关键点(中文):compact 只替换 Provider 后续可见的 ModelMessage,
73
+ * Session 语义消息与持久化历史仍保持完整,等待 turn 收口后再单独归档。
74
+ */
75
+ replace_model_messages(messages: ModelMessage[]): void;
76
+ /**
77
+ * 使用 canonical records 原子替换两份消息基线。
78
+ *
79
+ * 关键点(中文)
80
+ * - 显式 compact 会重写持久化历史,旧的 SessionRecord 与 ModelMessage 必须同时失效。
81
+ * - tools 使用当前 step 的执行视图,避免配置 command 生效后仍按旧工具解码历史。
82
+ */
83
+ replace_session_messages(messages: SessionRecordV1[], tools: Record<string, Tool>): Promise<void>;
69
84
  private appendSessionMessagesAsModelMessages;
70
85
  }
71
86
  //# sourceMappingURL=CoreEngineMessageState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CoreEngineMessageState.d.ts","sourceRoot":"","sources":["../../../src/executor/core-engine/CoreEngineMessageState.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAM1E;;GAEG;AACH,qBAAa,sBAAsB;IACjC;;OAEG;IACH,OAAO,CAAC,eAAe,CAAoB;IAE3C;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAAiB;IAE7C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAE7C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAS;IAEtC,OAAO;IAwBP;;OAEG;WACU,MAAM,CAAC,MAAM,EAAE;QAC1B;;WAEG;QACH,QAAQ,EAAE,eAAe,EAAE,CAAC;QAC5B;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5B;;WAEG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAgBnC;;OAEG;IACH,IAAI,aAAa,IAAI,YAAY,EAAE,CAElC;IAED;;OAEG;IACG,wBAAwB,CAC5B,QAAQ,EAAE,eAAe,EAAE,GAC1B,OAAO,CAAC,YAAY,EAAE,CAAC;IAM1B;;OAEG;IACG,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE;;OAEG;IACH,2BAA2B,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI3D;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI;YAKrC,oCAAoC;CAoBnD"}
1
+ {"version":3,"file":"CoreEngineMessageState.d.ts","sourceRoot":"","sources":["../../../src/executor/core-engine/CoreEngineMessageState.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAM1E;;GAEG;AACH,qBAAa,sBAAsB;IACjC;;OAEG;IACH,OAAO,CAAC,eAAe,CAAoB;IAE3C;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAAiB;IAE7C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAE7C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAS;IAEtC,OAAO;IAwBP;;OAEG;WACU,MAAM,CAAC,MAAM,EAAE;QAC1B;;WAEG;QACH,QAAQ,EAAE,eAAe,EAAE,CAAC;QAC5B;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5B;;WAEG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAgBnC;;OAEG;IACH,IAAI,aAAa,IAAI,YAAY,EAAE,CAElC;IAED;;OAEG;IACG,wBAAwB,CAC5B,QAAQ,EAAE,eAAe,EAAE,GAC1B,OAAO,CAAC,YAAY,EAAE,CAAC;IAM1B;;OAEG;IACG,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE;;OAEG;IACH,2BAA2B,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI3D;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI;IAKnD;;;;;OAKG;IACH,sBAAsB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI;IAItD;;;;;;OAMG;IACG,wBAAwB,CAC5B,QAAQ,EAAE,eAAe,EAAE,EAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC;YASF,oCAAoC;CAoBnD"}
@@ -82,6 +82,26 @@ export class CoreEngineMessageState {
82
82
  return;
83
83
  this.currentModelMessages = [...this.currentModelMessages, ...messages];
84
84
  }
85
+ /**
86
+ * 原子替换当前模型侧消息基线。
87
+ *
88
+ * 关键点(中文):compact 只替换 Provider 后续可见的 ModelMessage,
89
+ * Session 语义消息与持久化历史仍保持完整,等待 turn 收口后再单独归档。
90
+ */
91
+ replace_model_messages(messages) {
92
+ this.currentModelMessages = Array.isArray(messages) ? [...messages] : [];
93
+ }
94
+ /**
95
+ * 使用 canonical records 原子替换两份消息基线。
96
+ *
97
+ * 关键点(中文)
98
+ * - 显式 compact 会重写持久化历史,旧的 SessionRecord 与 ModelMessage 必须同时失效。
99
+ * - tools 使用当前 step 的执行视图,避免配置 command 生效后仍按旧工具解码历史。
100
+ */
101
+ async replace_session_messages(messages, tools) {
102
+ this.sessionMessages = Array.isArray(messages) ? [...messages] : [];
103
+ this.currentModelMessages = await toModelMessages(this.sessionMessages, tools, this.projectRoot);
104
+ }
85
105
  async appendSessionMessagesAsModelMessages(messages) {
86
106
  this.sessionMessages = [...this.sessionMessages, ...messages];
87
107
  const modelMessages = await toModelMessages(messages, this.tools, this.projectRoot);
@@ -1 +1 @@
1
- {"version":3,"file":"CoreEngineMessageState.js","sourceRoot":"","sources":["../../../src/executor/core-engine/CoreEngineMessageState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CoreEngineMessageState.js","sourceRoot":"","sources":["../../../src/executor/core-engine/CoreEngineMessageState.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EACL,sBAAsB,EACtB,eAAe,GAChB,MAAM,2CAA2C,CAAC;AAEnD;;GAEG;AACH,MAAM,OAAO,sBAAsB;IACjC;;OAEG;IACK,eAAe,CAAoB;IAE3C;;OAEG;IACK,oBAAoB,CAAiB;IAE7C;;OAEG;IACc,KAAK,CAAuB;IAE7C;;OAEG;IACc,WAAW,CAAU;IAEtC,YAAoB,MAiBnB;QACC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAC9C,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,aAAa,CAAC;QACjD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAanB;QACC,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpD,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;YACtB,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,IAAI,sBAAsB,CAAC;YAChC,eAAe;YACf,aAAa,EAAE,MAAM,eAAe,CAClC,eAAe,EACf,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,WAAW,CACnB;YACD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,wBAAwB,CAC5B,QAA2B;QAE3B,MAAM,cAAc,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3C,OAAO,MAAM,IAAI,CAAC,oCAAoC,CAAC,cAAc,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,OAAwB;QAClD,MAAM,IAAI,CAAC,oCAAoC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,2BAA2B,CAAC,OAAwB;QAClD,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,QAAwB;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC9D,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE,GAAG,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED;;;;;OAKG;IACH,sBAAsB,CAAC,QAAwB;QAC7C,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,wBAAwB,CAC5B,QAA2B,EAC3B,KAA2B;QAE3B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,oBAAoB,GAAG,MAAM,eAAe,CAC/C,IAAI,CAAC,eAAe,EACpB,KAAK,EACL,IAAI,CAAC,WAAW,CACjB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,oCAAoC,CAChD,QAA2B;QAE3B,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,QAAQ,CAAC,CAAC;QAC9D,MAAM,aAAa,GAAG,MAAM,eAAe,CACzC,QAAQ,EACR,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,WAAW,CACjB,CAAC;QACF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE,GAAG,aAAa,CAAC,CAAC;YAC7E,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,oBAAoB,GAAG,MAAM,eAAe,CAC/C,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,WAAW,CACjB,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
@@ -43,6 +43,19 @@ interface CoreEngineRunInput {
43
43
  * 当前显式运行上下文。
44
44
  */
45
45
  run_context: SessionRunContext;
46
+ /**
47
+ * 在统一输入队列提交后解析当前 Session step 的 effective 配置。
48
+ */
49
+ resolve_step_inputs: () => Promise<{
50
+ /** 当前 Session step 使用的模型。 */
51
+ model: LanguageModel;
52
+ /** 当前 Session step 使用的 system messages。 */
53
+ system: SessionExecuteInput["system"];
54
+ /** 当前 Session step 使用的工具集合。 */
55
+ tools: SessionExecuteInput["tools"];
56
+ /** 当前 Session step 模型支持的总上下文窗口长度。 */
57
+ context_window?: number;
58
+ }>;
46
59
  }
47
60
  /**
48
61
  * 模型与 tool-loop 主循环执行器。
@@ -52,6 +65,8 @@ export declare class CoreEngineRunner {
52
65
  private readonly context_composer;
53
66
  private readonly logger;
54
67
  private readonly should_compact_on_error;
68
+ /** 最近一次已经通过真实 usage 验收的持久化 Summary 标识。 */
69
+ private validated_compaction_summary_id;
55
70
  constructor(options: CoreEngineRunnerOptions);
56
71
  /**
57
72
  * 执行一次已装配完成的模型/tool-loop 运行。
@@ -1 +1 @@
1
- {"version":3,"file":"CoreEngineRunner.d.ts","sourceRoot":"","sources":["../../../src/executor/core-engine/CoreEngineRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,IAAI,CAAC;AA0BrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,gCAAgC,CAAC;AAgDxC,UAAU,uBAAuB;IAC/B;;OAEG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;OAEG;IACH,gBAAgB,EAAE,sBAAsB,CAAC;IAEzC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,uBAAuB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACtD;AAED,UAAU,kBAAkB;IAC1B;;OAEG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;IAErB;;OAEG;IACH,WAAW,EAAE,iBAAiB,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAqD;gBAEjF,OAAO,EAAE,uBAAuB;IAO5C;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA0ThE"}
1
+ {"version":3,"file":"CoreEngineRunner.d.ts","sourceRoot":"","sources":["../../../src/executor/core-engine/CoreEngineRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAGL,KAAK,aAAa,EAGnB,MAAM,IAAI,CAAC;AA+BZ,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,gCAAgC,CAAC;AAmDxC,UAAU,uBAAuB;IAC/B;;OAEG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;OAEG;IACH,gBAAgB,EAAE,sBAAsB,CAAC;IAEzC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,uBAAuB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACtD;AAED,UAAU,kBAAkB;IAC1B;;OAEG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;IAErB;;OAEG;IACH,WAAW,EAAE,iBAAiB,CAAC;IAE/B;;OAEG;IACH,mBAAmB,EAAE,MAAM,OAAO,CAAC;QACjC,6BAA6B;QAC7B,KAAK,EAAE,aAAa,CAAC;QACrB,2CAA2C;QAC3C,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACtC,+BAA+B;QAC/B,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACpC,qCAAqC;QACrC,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAqD;IAE7F,0CAA0C;IAC1C,OAAO,CAAC,+BAA+B,CAAM;gBAEjC,OAAO,EAAE,uBAAuB;IAO5C;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAobhE"}