opencode-acp 1.14.27-pr.370.106 → 1.14.27-pr.370.111
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 +7 -0
- package/README.zh-CN.md +7 -0
- package/dist/index.js +59 -7
- package/dist/index.js.map +1 -1
- package/dist/lib/config-validation.d.ts.map +1 -1
- package/dist/lib/config.d.ts +22 -3
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/messages/reasoning-strip.d.ts +22 -3
- package/dist/lib/messages/reasoning-strip.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -381,6 +381,13 @@ Each level overrides the previous, so project settings take priority over global
|
|
|
381
381
|
// Preserve your messages during compression.
|
|
382
382
|
// Warning: large copy-pasted prompts will never be compressed away
|
|
383
383
|
"protectUserMessages": false,
|
|
384
|
+
// Closed-turn thinking stripping on protected-exempt messages (#368).
|
|
385
|
+
// "reasoning" parts of compress/skill tool calls in closed historical
|
|
386
|
+
// turns are dropped at request time; the active turn is never touched.
|
|
387
|
+
"stripProtectedReasoning": true,
|
|
388
|
+
"stripProtectedReasoningThreshold": 0,
|
|
389
|
+
"stripProtectedReasoningProviders": ["anthropic", "gemini"],
|
|
390
|
+
"stripProtectedReasoningMinMessages": 100
|
|
384
391
|
},
|
|
385
392
|
// Garbage collection — hardcoded 100% fallback only
|
|
386
393
|
"gc": {
|
package/README.zh-CN.md
CHANGED
|
@@ -334,6 +334,13 @@ ACP 使用自己的配置文件,按以下顺序搜索:
|
|
|
334
334
|
// Preserve your messages during compression.
|
|
335
335
|
// Warning: large copy-pasted prompts will never be compressed away
|
|
336
336
|
"protectUserMessages": false,
|
|
337
|
+
// 受保护豁免消息的闭轮思考剥离(#368)。
|
|
338
|
+
// 请求时丢弃已关闭历史轮次中 compress/skill 工具调用的
|
|
339
|
+
// "reasoning" 部分;当前活跃轮次永不受影响。
|
|
340
|
+
"stripProtectedReasoning": true,
|
|
341
|
+
"stripProtectedReasoningThreshold": 0,
|
|
342
|
+
"stripProtectedReasoningProviders": ["anthropic", "gemini"],
|
|
343
|
+
"stripProtectedReasoningMinMessages": 100
|
|
337
344
|
},
|
|
338
345
|
// 垃圾回收与批量清理
|
|
339
346
|
"gc": {
|
package/dist/index.js
CHANGED
|
@@ -911,6 +911,8 @@ var VALID_CONFIG_KEYS = /* @__PURE__ */ new Set([
|
|
|
911
911
|
"compress.preserveLastUserMessage",
|
|
912
912
|
"compress.stripProtectedReasoning",
|
|
913
913
|
"compress.stripProtectedReasoningThreshold",
|
|
914
|
+
"compress.stripProtectedReasoningProviders",
|
|
915
|
+
"compress.stripProtectedReasoningMinMessages",
|
|
914
916
|
"gc",
|
|
915
917
|
"gc.algorithm",
|
|
916
918
|
"gc.promotionThreshold",
|
|
@@ -1278,6 +1280,22 @@ function validateConfigTypes(config) {
|
|
|
1278
1280
|
actual: JSON.stringify(compress.stripProtectedReasoningThreshold)
|
|
1279
1281
|
});
|
|
1280
1282
|
}
|
|
1283
|
+
if (compress.stripProtectedReasoningProviders !== void 0 && (!Array.isArray(compress.stripProtectedReasoningProviders) || !compress.stripProtectedReasoningProviders.every(
|
|
1284
|
+
(entry) => typeof entry === "string" && entry.trim() !== ""
|
|
1285
|
+
))) {
|
|
1286
|
+
errors.push({
|
|
1287
|
+
key: "compress.stripProtectedReasoningProviders",
|
|
1288
|
+
expected: 'string[] (non-empty strings; "*" = all providers)',
|
|
1289
|
+
actual: JSON.stringify(compress.stripProtectedReasoningProviders)
|
|
1290
|
+
});
|
|
1291
|
+
}
|
|
1292
|
+
if (compress.stripProtectedReasoningMinMessages !== void 0 && (typeof compress.stripProtectedReasoningMinMessages !== "number" || !Number.isInteger(compress.stripProtectedReasoningMinMessages) || compress.stripProtectedReasoningMinMessages < 0)) {
|
|
1293
|
+
errors.push({
|
|
1294
|
+
key: "compress.stripProtectedReasoningMinMessages",
|
|
1295
|
+
expected: "integer (>= 0)",
|
|
1296
|
+
actual: JSON.stringify(compress.stripProtectedReasoningMinMessages)
|
|
1297
|
+
});
|
|
1298
|
+
}
|
|
1281
1299
|
if (typeof compress.iterationNudgeThreshold === "number" && compress.iterationNudgeThreshold < 1) {
|
|
1282
1300
|
errors.push({
|
|
1283
1301
|
key: "compress.iterationNudgeThreshold",
|
|
@@ -1677,7 +1695,9 @@ var defaultConfig = {
|
|
|
1677
1695
|
preserveRecentTokens: 5e3,
|
|
1678
1696
|
preserveLastUserMessage: true,
|
|
1679
1697
|
stripProtectedReasoning: true,
|
|
1680
|
-
stripProtectedReasoningThreshold:
|
|
1698
|
+
stripProtectedReasoningThreshold: 0,
|
|
1699
|
+
stripProtectedReasoningProviders: ["anthropic", "gemini"],
|
|
1700
|
+
stripProtectedReasoningMinMessages: 100
|
|
1681
1701
|
},
|
|
1682
1702
|
gc: {
|
|
1683
1703
|
algorithm: "truncate",
|
|
@@ -1849,7 +1869,9 @@ function mergeCompress(base, override) {
|
|
|
1849
1869
|
preserveRecentTokens: override.preserveRecentTokens ?? base.preserveRecentTokens,
|
|
1850
1870
|
preserveLastUserMessage: override.preserveLastUserMessage ?? base.preserveLastUserMessage,
|
|
1851
1871
|
stripProtectedReasoning: override.stripProtectedReasoning ?? base.stripProtectedReasoning,
|
|
1852
|
-
stripProtectedReasoningThreshold: override.stripProtectedReasoningThreshold ?? base.stripProtectedReasoningThreshold
|
|
1872
|
+
stripProtectedReasoningThreshold: override.stripProtectedReasoningThreshold ?? base.stripProtectedReasoningThreshold,
|
|
1873
|
+
stripProtectedReasoningProviders: Array.isArray(override.stripProtectedReasoningProviders) ? [...override.stripProtectedReasoningProviders] : base.stripProtectedReasoningProviders,
|
|
1874
|
+
stripProtectedReasoningMinMessages: override.stripProtectedReasoningMinMessages ?? base.stripProtectedReasoningMinMessages
|
|
1853
1875
|
};
|
|
1854
1876
|
}
|
|
1855
1877
|
function mergeCommands(base, override) {
|
|
@@ -8282,10 +8304,28 @@ function stripStaleMetadata(messages) {
|
|
|
8282
8304
|
});
|
|
8283
8305
|
});
|
|
8284
8306
|
}
|
|
8285
|
-
function stripProtectedReasoning(messages, protectedTools, threshold) {
|
|
8307
|
+
function stripProtectedReasoning(messages, protectedTools, threshold, options) {
|
|
8286
8308
|
if (protectedTools.length === 0) {
|
|
8287
8309
|
return 0;
|
|
8288
8310
|
}
|
|
8311
|
+
const allowedProviders = options?.allowedProviders;
|
|
8312
|
+
if (allowedProviders !== void 0) {
|
|
8313
|
+
if (allowedProviders.length === 0) {
|
|
8314
|
+
return 0;
|
|
8315
|
+
}
|
|
8316
|
+
if (!allowedProviders.some((entry) => entry.trim() === "*")) {
|
|
8317
|
+
const providerID = options?.providerID;
|
|
8318
|
+
if (providerID === void 0 || !allowedProviders.some(
|
|
8319
|
+
(entry) => providerID.toLowerCase().includes(entry.trim().toLowerCase())
|
|
8320
|
+
)) {
|
|
8321
|
+
return 0;
|
|
8322
|
+
}
|
|
8323
|
+
}
|
|
8324
|
+
}
|
|
8325
|
+
const minMessages = options?.minMessages;
|
|
8326
|
+
if (minMessages !== void 0 && minMessages > 0 && messages.length < minMessages) {
|
|
8327
|
+
return 0;
|
|
8328
|
+
}
|
|
8289
8329
|
const lastUserMessage = getLastUserMessage(messages);
|
|
8290
8330
|
if (!lastUserMessage || lastUserMessage.info.role !== "user") {
|
|
8291
8331
|
return 0;
|
|
@@ -9450,7 +9490,7 @@ import { writeFile as writeFile2, mkdir as mkdir2 } from "fs/promises";
|
|
|
9450
9490
|
import { join as join3 } from "path";
|
|
9451
9491
|
import { existsSync as existsSync3 } from "fs";
|
|
9452
9492
|
import { homedir as homedir3 } from "os";
|
|
9453
|
-
var LOG_VERSION = true ? "1.14.27-pr.370.
|
|
9493
|
+
var LOG_VERSION = true ? "1.14.27-pr.370.111" : "dev";
|
|
9454
9494
|
var LEVEL_RANK = {
|
|
9455
9495
|
debug: 10,
|
|
9456
9496
|
info: 20,
|
|
@@ -11392,6 +11432,7 @@ function createChatMessageTransformHandler(client, registry4, logger, config, pr
|
|
|
11392
11432
|
return;
|
|
11393
11433
|
}
|
|
11394
11434
|
const lastUserMessage = getLastUserMessage(messages);
|
|
11435
|
+
const requestModel = lastUserMessage?.info?.model;
|
|
11395
11436
|
let state;
|
|
11396
11437
|
if (!lastUserMessage) {
|
|
11397
11438
|
state = createSessionState();
|
|
@@ -11402,7 +11443,6 @@ function createChatMessageTransformHandler(client, registry4, logger, config, pr
|
|
|
11402
11443
|
messages,
|
|
11403
11444
|
config
|
|
11404
11445
|
);
|
|
11405
|
-
const requestModel = lastUserMessage.info.model;
|
|
11406
11446
|
const requestModelLimit = registry4.resolveModelLimit(
|
|
11407
11447
|
requestModel?.providerID,
|
|
11408
11448
|
requestModel?.modelID
|
|
@@ -11471,7 +11511,19 @@ function createChatMessageTransformHandler(client, registry4, logger, config, pr
|
|
|
11471
11511
|
const removedReasoning = stripProtectedReasoning(
|
|
11472
11512
|
output.messages,
|
|
11473
11513
|
config.compress.protectedTools,
|
|
11474
|
-
config.compress.stripProtectedReasoningThreshold ??
|
|
11514
|
+
config.compress.stripProtectedReasoningThreshold ?? 0,
|
|
11515
|
+
{
|
|
11516
|
+
// Prefer this request's provider from the user-message
|
|
11517
|
+
// model metadata; fall back to the cached identity pair
|
|
11518
|
+
// (undefined on the first request of a fresh session →
|
|
11519
|
+
// fail-closed).
|
|
11520
|
+
providerID: requestModel?.providerID ?? state.modelProviderID,
|
|
11521
|
+
allowedProviders: config.compress.stripProtectedReasoningProviders ?? [
|
|
11522
|
+
"anthropic",
|
|
11523
|
+
"gemini"
|
|
11524
|
+
],
|
|
11525
|
+
minMessages: config.compress.stripProtectedReasoningMinMessages ?? 100
|
|
11526
|
+
}
|
|
11475
11527
|
);
|
|
11476
11528
|
if (removedReasoning > 0) {
|
|
11477
11529
|
logger.debug("stripProtectedReasoning: removed reasoning parts from historical protected messages", {
|
|
@@ -11935,7 +11987,7 @@ var server = (async (ctx) => {
|
|
|
11935
11987
|
}
|
|
11936
11988
|
const logger = new Logger(config.debug, config.debug ? "debug" : config.logLevel);
|
|
11937
11989
|
logger.info("ACP plugin initialized", {
|
|
11938
|
-
version: true ? "1.14.27-pr.370.
|
|
11990
|
+
version: true ? "1.14.27-pr.370.111" : "dev",
|
|
11939
11991
|
workspace: ctx.directory,
|
|
11940
11992
|
logLevel: logger.level,
|
|
11941
11993
|
debug: config.debug,
|