opencode-acp 1.14.8-dev.2 → 1.14.8-dev.3
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/README.md +9 -0
- package/README.zh-CN.md +9 -0
- package/dist/index.js +72 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/compress/search.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -492,6 +492,15 @@ For the complete list with root cause analysis, see the [bug tracker](https://gi
|
|
|
492
492
|
|
|
493
493
|
## Changelog
|
|
494
494
|
|
|
495
|
+
### v1.14.8-dev.3 — Dev Prerelease (1 PR since v1.14.8-dev.2)
|
|
496
|
+
|
|
497
|
+
Dev prerelease covering PR #248. Published to `dev` npm tag for early testing.
|
|
498
|
+
|
|
499
|
+
**PRs included**:
|
|
500
|
+
- **#248** — Fix: auto-extend compression ranges to prevent splitting tool_use/tool_result pairs. When the model selects a compression boundary that falls between a tool call and its result, the orphaned tool_result references a non-existent tool_use_id → API rejection. New `adjustBoundariesForToolPairs` in `compress/search.ts` scans forward/backward (up to 20 messages) to include the matching pair. Excludes `compress` tool (force-protected) and only extends message boundaries (never block boundaries) to avoid tier misclassification. 11 tests.
|
|
501
|
+
|
|
502
|
+
**Install**: `opencode plugin opencode-acp@dev --global`
|
|
503
|
+
|
|
495
504
|
### v1.14.8-dev.2 — Dev Prerelease (2 PRs since v1.14.8-dev.1)
|
|
496
505
|
|
|
497
506
|
Dev prerelease covering PRs #244–#245. Published to `dev` npm tag for early testing.
|
package/README.zh-CN.md
CHANGED
|
@@ -446,6 +446,15 @@ ACP 是 DCP 的直接替代品。迁移步骤:
|
|
|
446
446
|
|
|
447
447
|
## 更新日志
|
|
448
448
|
|
|
449
|
+
### v1.14.8-dev.3 — Dev 预发布(v1.14.8-dev.2 以来 1 个 PR)
|
|
450
|
+
|
|
451
|
+
Dev 预发布,涵盖 PR #248。发布到 `dev` npm tag 供早期测试。
|
|
452
|
+
|
|
453
|
+
**包含的 PR**:
|
|
454
|
+
- **#248** — 修复:自动扩展压缩范围以防止拆分 tool_use/tool_result 配对。当模型选择的压缩边界落在 tool 调用与其结果之间时,孤立的 tool_result 引用不存在的 tool_use_id → API 拒绝。新增 `adjustBoundariesForToolPairs`(`compress/search.ts`)向前/向后扫描(最多 20 条消息)以包含匹配的配对。排除 `compress` 工具(强制保护)并仅扩展消息边界(从不扩展 block 边界)以避免层级错误分类。11 个测试。
|
|
455
|
+
|
|
456
|
+
**安装**:`opencode plugin opencode-acp@dev --global`
|
|
457
|
+
|
|
449
458
|
### v1.14.8-dev.2 — Dev 预发布(v1.14.8-dev.1 以来 2 个 PR)
|
|
450
459
|
|
|
451
460
|
Dev 预发布,涵盖 PR #244–#245。发布到 `dev` npm tag 供早期测试。
|
package/dist/index.js
CHANGED
|
@@ -3040,8 +3040,79 @@ ${hint}` : body);
|
|
|
3040
3040
|
if (startReference.rawIndex > endReference.rawIndex) {
|
|
3041
3041
|
[startReference, endReference] = [endReference, startReference];
|
|
3042
3042
|
}
|
|
3043
|
+
const adjusted = adjustBoundariesForToolPairs(
|
|
3044
|
+
context,
|
|
3045
|
+
startReference.rawIndex,
|
|
3046
|
+
endReference.rawIndex
|
|
3047
|
+
);
|
|
3048
|
+
if (adjusted.startIndex < startReference.rawIndex && startReference.kind === "message") {
|
|
3049
|
+
const msg = context.rawMessages[adjusted.startIndex];
|
|
3050
|
+
if (msg) {
|
|
3051
|
+
startReference = {
|
|
3052
|
+
kind: "message",
|
|
3053
|
+
rawIndex: adjusted.startIndex,
|
|
3054
|
+
messageId: msg.info.id
|
|
3055
|
+
};
|
|
3056
|
+
}
|
|
3057
|
+
}
|
|
3058
|
+
if (adjusted.endIndex > endReference.rawIndex && endReference.kind === "message") {
|
|
3059
|
+
const msg = context.rawMessages[adjusted.endIndex];
|
|
3060
|
+
if (msg) {
|
|
3061
|
+
endReference = {
|
|
3062
|
+
kind: "message",
|
|
3063
|
+
rawIndex: adjusted.endIndex,
|
|
3064
|
+
messageId: msg.info.id
|
|
3065
|
+
};
|
|
3066
|
+
}
|
|
3067
|
+
}
|
|
3043
3068
|
return { startReference, endReference };
|
|
3044
3069
|
}
|
|
3070
|
+
function adjustBoundariesForToolPairs(context, startIdx, endIdx) {
|
|
3071
|
+
const messages = context.rawMessages;
|
|
3072
|
+
const callIdsInRange = /* @__PURE__ */ new Set();
|
|
3073
|
+
for (let i = startIdx; i <= endIdx; i++) {
|
|
3074
|
+
const msg = messages[i];
|
|
3075
|
+
if (!msg) continue;
|
|
3076
|
+
const parts = Array.isArray(msg.parts) ? msg.parts : [];
|
|
3077
|
+
for (const part of parts) {
|
|
3078
|
+
if (part.type !== "tool" || !part.callID) continue;
|
|
3079
|
+
if (part.tool === "compress") continue;
|
|
3080
|
+
callIdsInRange.add(part.callID);
|
|
3081
|
+
}
|
|
3082
|
+
}
|
|
3083
|
+
if (callIdsInRange.size === 0) {
|
|
3084
|
+
return { startIndex: startIdx, endIndex: endIdx };
|
|
3085
|
+
}
|
|
3086
|
+
let newEndIdx = endIdx;
|
|
3087
|
+
for (let i = endIdx + 1; i < messages.length && i <= endIdx + 20; i++) {
|
|
3088
|
+
const msg = messages[i];
|
|
3089
|
+
if (!msg) break;
|
|
3090
|
+
const parts = Array.isArray(msg.parts) ? msg.parts : [];
|
|
3091
|
+
const hasMatch = parts.some(
|
|
3092
|
+
(part) => part.type === "tool" && part.callID && callIdsInRange.has(part.callID)
|
|
3093
|
+
);
|
|
3094
|
+
if (hasMatch) {
|
|
3095
|
+
newEndIdx = i;
|
|
3096
|
+
} else if (newEndIdx > endIdx) {
|
|
3097
|
+
break;
|
|
3098
|
+
}
|
|
3099
|
+
}
|
|
3100
|
+
let newStartIdx = startIdx;
|
|
3101
|
+
for (let i = startIdx - 1; i >= 0 && i >= startIdx - 20; i--) {
|
|
3102
|
+
const msg = messages[i];
|
|
3103
|
+
if (!msg) break;
|
|
3104
|
+
const parts = Array.isArray(msg.parts) ? msg.parts : [];
|
|
3105
|
+
const hasMatch = parts.some(
|
|
3106
|
+
(part) => part.type === "tool" && part.callID && callIdsInRange.has(part.callID)
|
|
3107
|
+
);
|
|
3108
|
+
if (hasMatch) {
|
|
3109
|
+
newStartIdx = i;
|
|
3110
|
+
} else if (newStartIdx < startIdx) {
|
|
3111
|
+
break;
|
|
3112
|
+
}
|
|
3113
|
+
}
|
|
3114
|
+
return { startIndex: newStartIdx, endIndex: newEndIdx };
|
|
3115
|
+
}
|
|
3045
3116
|
function buildBoundaryRecoveryHint(context, state) {
|
|
3046
3117
|
const visibleRefs = [];
|
|
3047
3118
|
for (const [messageRef, messageId] of state.messageIds.byRef) {
|
|
@@ -8821,7 +8892,7 @@ import { writeFile as writeFile2, mkdir as mkdir2 } from "fs/promises";
|
|
|
8821
8892
|
import { join as join3 } from "path";
|
|
8822
8893
|
import { existsSync as existsSync3 } from "fs";
|
|
8823
8894
|
import { homedir as homedir3 } from "os";
|
|
8824
|
-
var LOG_VERSION = true ? "1.14.8-dev.
|
|
8895
|
+
var LOG_VERSION = true ? "1.14.8-dev.3" : "dev";
|
|
8825
8896
|
var Logger = class {
|
|
8826
8897
|
logDir;
|
|
8827
8898
|
enabled;
|