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":"
|
|
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 (
|
|
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.
|
|
16
|
-
//
|
|
17
|
-
// messages
|
|
18
|
-
//
|
|
19
|
-
// 3.
|
|
20
|
-
//
|
|
21
|
-
//
|
|
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
|
-
//
|
|
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
|
-
|
|
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":"AAAA,uEAAuE;AACvE,iBAAiB;AACjB,EAAE;AACF,oEAAoE;AACpE,uEAAuE;AACvE,iEAAiE;AACjE,qEAAqE;AACrE,oEAAoE;AACpE,yEAAyE;AACzE,4DAA4D;AAC5D,EAAE;AACF,
|
|
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.
|
|
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": {
|