jeopi-agent-core 16.2.25 → 16.2.26
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 +6 -0
- package/package.json +7 -7
- package/src/compaction/utils.ts +12 -7
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [16.2.26] - 2026-07-05
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- `serializeConversation` (compaction / branch-summary transcript rendering) no longer replays assistant `thinking`/`redactedThinking` blocks as plaintext (`<thinking>...</thinking>` via the dialect renderer, or `[Think]: ...` in the legacy no-dialect form) inside the `<conversation>` summarization prompt. Replaying a model's own prior reasoning as plaintext to an Anthropic-dialect summarizer is a `reasoning_extraction` classifier-refusal trigger, and compaction had no refusal-degrade fallback (unlike the coding-agent advisor, which strips thinking after a first refusal). Mirrors the existing intentional thinking-drop in the hindsight/mnemopi transcript extractor.
|
|
10
|
+
|
|
5
11
|
## [16.2.14] - 2026-07-02
|
|
6
12
|
|
|
7
13
|
### Added
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "jeopi-agent-core",
|
|
4
|
-
"version": "16.2.
|
|
4
|
+
"version": "16.2.26",
|
|
5
5
|
"description": "General-purpose agent with transport abstraction, state management, and attachment support",
|
|
6
6
|
"homepage": "https://github.com/akillness/jeopi",
|
|
7
7
|
"author": "Can Boluk",
|
|
@@ -35,12 +35,12 @@
|
|
|
35
35
|
"fmt": "biome format --write ."
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"jeopi-ai": "16.2.
|
|
39
|
-
"jeopi-catalog": "16.2.
|
|
40
|
-
"jeopi-natives": "16.2.
|
|
41
|
-
"jeopi-utils": "16.2.
|
|
42
|
-
"jeopi-wire": "16.2.
|
|
43
|
-
"jeopi-snapcompact": "16.2.
|
|
38
|
+
"jeopi-ai": "16.2.26",
|
|
39
|
+
"jeopi-catalog": "16.2.26",
|
|
40
|
+
"jeopi-natives": "16.2.26",
|
|
41
|
+
"jeopi-utils": "16.2.26",
|
|
42
|
+
"jeopi-wire": "16.2.26",
|
|
43
|
+
"jeopi-snapcompact": "16.2.26",
|
|
44
44
|
"@opentelemetry/api": "^1.9.1"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
package/src/compaction/utils.ts
CHANGED
|
@@ -227,7 +227,16 @@ export function serializeConversation(messages: Message[], dialect?: Dialect): s
|
|
|
227
227
|
const processed: Message[] = [];
|
|
228
228
|
for (const msg of messages) {
|
|
229
229
|
if (msg.role === "assistant") {
|
|
230
|
-
|
|
230
|
+
// Thinking/redactedThinking blocks are dropped before serialization: they add
|
|
231
|
+
// little to a summarization prompt and replaying a model's own prior reasoning
|
|
232
|
+
// as plaintext transcript text is a reasoning_extraction refusal trigger on
|
|
233
|
+
// Anthropic targets (mirrors the intentional drop in hindsight/transcript.ts).
|
|
234
|
+
const content = msg.content.filter(
|
|
235
|
+
block =>
|
|
236
|
+
block.type !== "thinking" &&
|
|
237
|
+
block.type !== "redactedThinking" &&
|
|
238
|
+
(block.type !== "toolCall" || !uselessCallIds.has(block.id)),
|
|
239
|
+
);
|
|
231
240
|
if (content.length > 0) processed.push(content.length === msg.content.length ? msg : { ...msg, content });
|
|
232
241
|
continue;
|
|
233
242
|
}
|
|
@@ -262,23 +271,19 @@ export function serializeConversation(messages: Message[], dialect?: Dialect): s
|
|
|
262
271
|
if (content) parts.push(`[User]: ${content}`);
|
|
263
272
|
} else if (msg.role === "assistant") {
|
|
264
273
|
const textParts: string[] = [];
|
|
265
|
-
const thinkingParts: string[] = [];
|
|
266
274
|
const toolCalls: ToolCall[] = [];
|
|
267
275
|
|
|
268
276
|
for (const block of msg.content) {
|
|
269
277
|
if (block.type === "text") {
|
|
270
278
|
textParts.push(block.text);
|
|
271
|
-
} else if (block.type === "thinking") {
|
|
272
|
-
thinkingParts.push(block.thinking);
|
|
273
279
|
} else if (block.type === "toolCall") {
|
|
274
280
|
if (uselessCallIds.has(block.id)) continue;
|
|
275
281
|
toolCalls.push(block);
|
|
276
282
|
}
|
|
283
|
+
// thinking / redactedThinking blocks are intentionally dropped — see the
|
|
284
|
+
// dialect-branch comment above for why replaying them is unsafe.
|
|
277
285
|
}
|
|
278
286
|
|
|
279
|
-
if (thinkingParts.length > 0) {
|
|
280
|
-
parts.push(`[Think]: ${thinkingParts.join("\n")}`);
|
|
281
|
-
}
|
|
282
287
|
if (textParts.length > 0) {
|
|
283
288
|
parts.push(`[Assistant]: ${textParts.join("\n")}`);
|
|
284
289
|
}
|