agim-cli 1.2.124 → 1.2.125

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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,64 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.2.125] - 2026-06-01
8
+
9
+ ### Changed (auto-compact 升级为 head + summary + tail — OpenHands Condenser 模式)
10
+
11
+ 主流对账路线图最后一项收尾。背景:
12
+
13
+ - agim 早就有 LLM-summary auto-compact(v1.2.31 / v1.2.86 演进至今),结构是
14
+ `[synthetic summary] + tail`
15
+ - 但 OpenHands Condenser / Claude Code 的 best practice 是 `head + summary + tail`
16
+ ——首条 user 消息(原始目标)verbatim 保留,模型在长 turn 末段不会"忘了
17
+ 用户最初要做什么"
18
+
19
+ #### v1.2.125 修法
20
+ - 新选项 `keepFirst`(env `IMHUB_NATIVE_COMPACT_KEEP_FIRST`,默认 **1**):
21
+ 保留前 N 个 user 消息**连同**它们的 assistant 回复 + tool 链 verbatim
22
+ - 新 helper `pickHeadEndIndex(messages, N)`:往前走到第 N 个 user,再吃完它之后
23
+ 所有非-user 消息(assistant + tool),保证 head 是个完整的回合,不会留 orphan
24
+ `role:'tool'`
25
+ - 中段(head 与 tail 之间)才送给 summarizer 做摘要
26
+ - 返回顺序:`[...head, syntheticSummary, ...tail]`
27
+ - 当 head + tail 已经覆盖整个历史(短对话场景)→ 不触发摘要
28
+
29
+ #### 边界
30
+ - `keepFirst=0` → 回退到旧行为(pre-v1.2.125 兼容)
31
+ - `keepFirst` 比 user 总数还多 → headEnd >= sliceIdx → skip,不报错
32
+ - 老测试的两个 case 加 `keepFirst: 0` 显式声明旧形状(不改语义只显式化)
33
+
34
+ ### Affected paths
35
+
36
+ - `src/core/llm/auto-compact.ts`:新 `pickHeadEndIndex` + 主函数加 head 提取 +
37
+ 返回 head + summary + tail;types 加 `keepFirst?` 字段;JSDoc 改成 Condenser 模型
38
+ - `src/core/llm/auto-compact.test.ts`:旧 2 case 显式声明 `keepFirst: 0`;
39
+ 新增 2 case 验证 head 保留 + head/tail 覆盖时跳过
40
+
41
+ ### Test status
42
+
43
+ - 191/191 bun pass(新增 2 head + 1 重构 + 既有 4 不动) / typecheck clean
44
+
45
+ ### 路线图收尾
46
+
47
+ 至此 v1.2.118 → v1.2.125 八个版本全部交付,对账 7 个主流 agent 的 12 项 ROI
48
+ 排序优化全部落地:
49
+
50
+ | Rank | Item | Version | Effort |
51
+ |------|------|---------|--------|
52
+ | 1 | Tavily + provider chain | 1.2.118 | S |
53
+ | 2 | per-tool-result byte cap | 1.2.118 | S |
54
+ | 3 | in-process call_agent self-spawn | 1.2.121 | M |
55
+ | 4 | per-tool timeout | 1.2.118 | S |
56
+ | 5 | LLM-summary compact head/summary/tail | 1.2.125 | L |
57
+ | 6 | TCP-drop graceful degradation | 1.2.123 | M |
58
+ | 7 | PlanMode hard-deny writes | 1.2.119 + 1.2.120 | S+S |
59
+ | 8 | semantic stuck-loop | 1.2.122 | M |
60
+ | 9 | call_agent max_depth=1 + parent-id | 1.2.119 | S |
61
+ | 10 | TodoWrite-style plan tracker | 1.2.124 | M |
62
+ | 11 | Brave / Serper / Exa search adapters | 1.2.121 | S |
63
+ | 12 | blank-response intra-loop retry | 1.2.119 | S |
64
+
7
65
  ## [1.2.124] - 2026-06-01
8
66
 
9
67
  ### Added (native_todo_write — Claude-Code TodoWrite 风格的 plan 跟踪)
@@ -7,6 +7,13 @@ export interface CompactOptions {
7
7
  * Default 6 (= 12 messages, plus any tool messages between them).
8
8
  * Set via env IMHUB_NATIVE_COMPACT_KEEP_TURNS. */
9
9
  keepTurns?: number;
10
+ /** v1.2.125 — number of INITIAL user messages preserved verbatim
11
+ * (head). Each preserved user message also carries its assistant
12
+ * response + any tool round-trip. Default 1 (the original goal is
13
+ * never summarized). 0 disables head preservation (legacy
14
+ * pre-v1.2.125 behaviour: only tail + summary). Set via env
15
+ * IMHUB_NATIVE_COMPACT_KEEP_FIRST. */
16
+ keepFirst?: number;
10
17
  /** Provider to ask for the summary. If omitted, tries evaluator →
11
18
  * cheap → native-chat in that order; the first registered wins. */
12
19
  summarizer?: LlmProvider;
@@ -26,6 +33,32 @@ export interface CompactResult {
26
33
  /** Char count of the original message array (sum of content). */
27
34
  originalChars: number;
28
35
  }
36
+ /**
37
+ * Pick the slice index such that messages[idx..] are the "recent" turns
38
+ * we preserve verbatim. The slice MUST start on `role:'user'` so the
39
+ * provider doesn't see an orphan `role:'tool'` whose matching
40
+ * `assistant.toolCalls` was just compacted away (OpenAI / DeepSeek
41
+ * reject the request with HTTP 400 in that case).
42
+ *
43
+ * Strategy: walk backwards counting user messages until we've covered
44
+ * `keepTurns` user turns, then return the index of that user message.
45
+ * If we couldn't find any user message, return 0 (no compaction).
46
+ */
47
+ /**
48
+ * v1.2.125 — pick the END index (exclusive) of the head slice such
49
+ * that `messages[0..end)` is a clean, self-contained prefix that
50
+ * always includes the first `keepFirstUsers` user messages plus their
51
+ * complete assistant responses (text or tool round-trip).
52
+ *
53
+ * Why end on "just before the next user message": an assistant turn
54
+ * may emit `tool_calls`; the matching `role:'tool'` messages MUST be
55
+ * in the same slice as the assistant message or OpenAI / DeepSeek
56
+ * reject the request (orphan tool result). Walking forward to the
57
+ * next user message guarantees the assistant + tools are bundled.
58
+ *
59
+ * Returns 0 when keepFirstUsers ≤ 0 or no user message exists.
60
+ */
61
+ export declare function pickHeadEndIndex(messages: LlmMessage[], keepFirstUsers: number): number;
29
62
  /**
30
63
  * Compact if needed. Returns the (possibly new) message array plus a
31
64
  * summary metadata record. Never throws; on failure returns the input
@@ -1 +1 @@
1
- {"version":3,"file":"auto-compact.d.ts","sourceRoot":"","sources":["../../../src/core/llm/auto-compact.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAMjE,MAAM,WAAW,cAAc;IAC7B;yFACqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;uDAEmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;wEACoE;IACpE,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB;qCACiC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,SAAS,EAAE,OAAO,CAAA;IAClB;sDACkD;IAClD,cAAc,EAAE,MAAM,CAAA;IACtB;0DACsD;IACtD,YAAY,EAAE,MAAM,CAAA;IACpB,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAA;CACtB;AA+CD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,UAAU,EAAE,EACtB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,CAAC,CA4ExB"}
1
+ {"version":3,"file":"auto-compact.d.ts","sourceRoot":"","sources":["../../../src/core/llm/auto-compact.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAMjE,MAAM,WAAW,cAAc;IAC7B;yFACqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;uDAEmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;2CAKuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;wEACoE;IACpE,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB;qCACiC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,SAAS,EAAE,OAAO,CAAA;IAClB;sDACkD;IAClD,cAAc,EAAE,MAAM,CAAA;IACtB;0DACsD;IACtD,YAAY,EAAE,MAAM,CAAA;IACpB,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAA;CACtB;AAuBD;;;;;;;;;;GAUG;AACH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAkBvF;AAeD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,UAAU,EAAE,EACtB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,CAAC,CA0FxB"}
@@ -9,18 +9,23 @@
9
9
  // agent's earlier conclusions, not the live problem — so a 1-2 paragraph
10
10
  // summary preserves continuity at a fraction of the tokens.
11
11
  //
12
- // Strategy (intentionally simple):
12
+ // Strategy (v1.2.125 — `head + summary + tail`, OpenHands Condenser
13
+ // model):
13
14
  // 1. Cheap char-count proxy for tokens (chars ≈ 4 tokens for mixed
14
15
  // EN/CN). When total < TRIGGER chars, do nothing.
15
- // 2. Always keep the original system prompt (caller handles), the
16
- // last KEEP_TURNS user/assistant pairs verbatim, plus any tool
17
- // messages that immediately precede them (so tool round-trips
18
- // stay valid for the provider).
19
- // 3. Send the older slice to a cheap/evaluator role with a fixed
20
- // "summarize the prior conversation" instruction. Inject the
21
- // summary as a synthetic user message at index 0:
16
+ // 2. **Head**: preserve the first `keepFirst` user messages
17
+ // verbatim, including each one's assistant response (+ any tool
18
+ // messages between them). The original user goal therefore
19
+ // survives every compaction. Default keepFirst=1.
20
+ // 3. **Tail**: preserve the last `keepTurns` user/assistant pairs
21
+ // verbatim (also walks back to a `role:'user'` boundary so tool
22
+ // round-trips stay valid). Default keepTurns=6.
23
+ // 4. **Middle**: send the slice between head and tail to a
24
+ // cheap/evaluator role with a fixed "summarize the prior
25
+ // conversation" instruction. Inject the summary as a synthetic
26
+ // user message between head and tail:
22
27
  // "[earlier conversation summary]\n<summary>\n[/earlier]"
23
- // 4. On any failure, log + return the original array. Better a
28
+ // 5. On any failure, log + return the original array. Better a
24
29
  // slower turn than a broken one.
25
30
  import { getProvider } from './registry.js';
26
31
  import { logger as rootLogger } from '../logger.js';
@@ -57,6 +62,40 @@ function resolveSummarizer() {
57
62
  * `keepTurns` user turns, then return the index of that user message.
58
63
  * If we couldn't find any user message, return 0 (no compaction).
59
64
  */
65
+ /**
66
+ * v1.2.125 — pick the END index (exclusive) of the head slice such
67
+ * that `messages[0..end)` is a clean, self-contained prefix that
68
+ * always includes the first `keepFirstUsers` user messages plus their
69
+ * complete assistant responses (text or tool round-trip).
70
+ *
71
+ * Why end on "just before the next user message": an assistant turn
72
+ * may emit `tool_calls`; the matching `role:'tool'` messages MUST be
73
+ * in the same slice as the assistant message or OpenAI / DeepSeek
74
+ * reject the request (orphan tool result). Walking forward to the
75
+ * next user message guarantees the assistant + tools are bundled.
76
+ *
77
+ * Returns 0 when keepFirstUsers ≤ 0 or no user message exists.
78
+ */
79
+ export function pickHeadEndIndex(messages, keepFirstUsers) {
80
+ if (keepFirstUsers <= 0)
81
+ return 0;
82
+ let usersSeen = 0;
83
+ for (let i = 0; i < messages.length; i++) {
84
+ if (messages[i].role === 'user') {
85
+ usersSeen += 1;
86
+ if (usersSeen >= keepFirstUsers) {
87
+ // Found the target user message; include any following non-user
88
+ // turns (assistant + tools) until the next user OR end-of-array.
89
+ let j = i + 1;
90
+ while (j < messages.length && messages[j].role !== 'user') {
91
+ j += 1;
92
+ }
93
+ return j;
94
+ }
95
+ }
96
+ }
97
+ return 0;
98
+ }
60
99
  function pickKeepSliceIndex(messages, keepTurns) {
61
100
  let pairs = 0;
62
101
  let lastUserIdx = -1;
@@ -78,6 +117,7 @@ function pickKeepSliceIndex(messages, keepTurns) {
78
117
  export async function maybeCompactHistory(messages, opts = {}) {
79
118
  const triggerChars = opts.triggerChars ?? envInt('IMHUB_NATIVE_COMPACT_TRIGGER_CHARS', 60_000);
80
119
  const keepTurns = opts.keepTurns ?? envInt('IMHUB_NATIVE_COMPACT_KEEP_TURNS', 6);
120
+ const keepFirst = opts.keepFirst ?? envInt('IMHUB_NATIVE_COMPACT_KEEP_FIRST', 1);
81
121
  const summaryCharCap = opts.summaryCharCap ?? envInt('IMHUB_NATIVE_COMPACT_SUMMARY_CHARS', 1_500);
82
122
  const originalChars = totalChars(messages);
83
123
  // Disabled when trigger=0 (operator opt-out).
@@ -90,7 +130,16 @@ export async function maybeCompactHistory(messages, opts = {}) {
90
130
  // Nothing to summarise — the recent slice covers everything.
91
131
  return { messages, compacted: false, collapsedCount: 0, summaryChars: 0, originalChars };
92
132
  }
93
- const older = messages.slice(0, sliceIdx);
133
+ // v1.2.125 — split older into head + middle. The middle is what gets
134
+ // summarised; the head is preserved verbatim alongside the summary.
135
+ const headEnd = pickHeadEndIndex(messages, keepFirst);
136
+ // If the head already overlaps the recent slice, there's no "middle"
137
+ // to compact — fall through to no-op.
138
+ if (headEnd >= sliceIdx) {
139
+ return { messages, compacted: false, collapsedCount: 0, summaryChars: 0, originalChars };
140
+ }
141
+ const head = messages.slice(0, headEnd);
142
+ const older = messages.slice(headEnd, sliceIdx);
94
143
  const recent = messages.slice(sliceIdx);
95
144
  const summarizer = opts.summarizer ?? resolveSummarizer();
96
145
  if (!summarizer) {
@@ -125,12 +174,16 @@ export async function maybeCompactHistory(messages, opts = {}) {
125
174
  event: 'auto-compact.applied',
126
175
  backend: summarizer.name,
127
176
  originalChars,
177
+ headCount: head.length,
128
178
  collapsedCount: older.length,
129
179
  keptCount: recent.length,
130
180
  summaryChars: synthetic.content.length,
131
181
  });
182
+ // v1.2.125 — order: head (verbatim) + summary + tail (verbatim).
183
+ // Head may be empty when keepFirst=0; recent always non-empty by
184
+ // the sliceIdx > 0 check above.
132
185
  return {
133
- messages: [synthetic, ...recent],
186
+ messages: [...head, synthetic, ...recent],
134
187
  compacted: true,
135
188
  collapsedCount: older.length,
136
189
  summaryChars: synthetic.content.length,
@@ -1 +1 @@
1
- {"version":3,"file":"auto-compact.js","sourceRoot":"","sources":["../../../src/core/llm/auto-compact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-compact.js","sourceRoot":"","sources":["../../../src/core/llm/auto-compact.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agim-cli",
3
- "version": "1.2.124",
3
+ "version": "1.2.125",
4
4
  "description": "Agim (阿吉姆) — universal messenger-to-agent bridge. Connect WeChat / Feishu / DingTalk / Email to Claude Code / Codex / OpenCode, or any custom agent via ACP. Installs the `agim` command.",
5
5
  "type": "module",
6
6
  "bin": {