@tarquinen/opencode-dcp 3.1.10 → 3.1.11
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 +2 -0
- package/dist/index.js +76 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/compress/message.d.ts.map +1 -1
- package/dist/lib/compress/protected-content.d.ts +2 -0
- package/dist/lib/compress/protected-content.d.ts.map +1 -1
- package/dist/lib/compress/range.d.ts.map +1 -1
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/update.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -146,6 +146,8 @@ Each level overrides the previous, so project settings take priority over global
|
|
|
146
146
|
"nudgeForce": "soft",
|
|
147
147
|
// Tool names whose completed outputs are appended to the compression
|
|
148
148
|
"protectedTools": [],
|
|
149
|
+
// Preserve text wrapped in <protect>...</protect> when compressed
|
|
150
|
+
"protectTags": false,
|
|
149
151
|
// Preserve your messages during compression.
|
|
150
152
|
// Warning: large copy-pasted prompts will never be compressed away
|
|
151
153
|
"protectUserMessages": false,
|
package/dist/index.js
CHANGED
|
@@ -910,6 +910,7 @@ var VALID_CONFIG_KEYS = /* @__PURE__ */ new Set([
|
|
|
910
910
|
"compress.iterationNudgeThreshold",
|
|
911
911
|
"compress.nudgeForce",
|
|
912
912
|
"compress.protectedTools",
|
|
913
|
+
"compress.protectTags",
|
|
913
914
|
"compress.protectUserMessages",
|
|
914
915
|
"strategies",
|
|
915
916
|
"strategies.deduplication",
|
|
@@ -1140,6 +1141,13 @@ function validateConfigTypes(config) {
|
|
|
1140
1141
|
actual: typeof compress.protectedTools
|
|
1141
1142
|
});
|
|
1142
1143
|
}
|
|
1144
|
+
if (compress.protectTags !== void 0 && typeof compress.protectTags !== "boolean") {
|
|
1145
|
+
errors.push({
|
|
1146
|
+
key: "compress.protectTags",
|
|
1147
|
+
expected: "boolean",
|
|
1148
|
+
actual: typeof compress.protectTags
|
|
1149
|
+
});
|
|
1150
|
+
}
|
|
1143
1151
|
if (compress.protectUserMessages !== void 0 && typeof compress.protectUserMessages !== "boolean") {
|
|
1144
1152
|
errors.push({
|
|
1145
1153
|
key: "compress.protectUserMessages",
|
|
@@ -1333,6 +1341,7 @@ var defaultConfig = {
|
|
|
1333
1341
|
iterationNudgeThreshold: 15,
|
|
1334
1342
|
nudgeForce: "soft",
|
|
1335
1343
|
protectedTools: [...COMPRESS_DEFAULT_PROTECTED_TOOLS],
|
|
1344
|
+
protectTags: false,
|
|
1336
1345
|
protectUserMessages: false
|
|
1337
1346
|
},
|
|
1338
1347
|
strategies: {
|
|
@@ -1455,6 +1464,7 @@ function mergeCompress(base, override) {
|
|
|
1455
1464
|
iterationNudgeThreshold: override.iterationNudgeThreshold ?? base.iterationNudgeThreshold,
|
|
1456
1465
|
nudgeForce: override.nudgeForce ?? base.nudgeForce,
|
|
1457
1466
|
protectedTools: [.../* @__PURE__ */ new Set([...base.protectedTools, ...override.protectedTools ?? []])],
|
|
1467
|
+
protectTags: override.protectTags ?? base.protectTags,
|
|
1458
1468
|
protectUserMessages: override.protectUserMessages ?? base.protectUserMessages
|
|
1459
1469
|
};
|
|
1460
1470
|
}
|
|
@@ -3991,6 +4001,43 @@ function appendProtectedUserMessages(summary, selection, searchContext, state, e
|
|
|
3991
4001
|
${text}`).join("");
|
|
3992
4002
|
return summary + heading + body;
|
|
3993
4003
|
}
|
|
4004
|
+
function appendProtectedPromptInfo(summary, selection, searchContext, state, enabled) {
|
|
4005
|
+
if (!enabled) return summary;
|
|
4006
|
+
const protectedTexts = [];
|
|
4007
|
+
for (const messageId of selection.messageIds) {
|
|
4008
|
+
const existingCompressionEntry = state.prune.messages.byMessageId.get(messageId);
|
|
4009
|
+
if (existingCompressionEntry && existingCompressionEntry.activeBlockIds.length > 0) {
|
|
4010
|
+
continue;
|
|
4011
|
+
}
|
|
4012
|
+
const message = searchContext.rawMessagesById.get(messageId);
|
|
4013
|
+
if (!message) continue;
|
|
4014
|
+
if (message.info.role !== "user") continue;
|
|
4015
|
+
if (isIgnoredUserMessage(message)) continue;
|
|
4016
|
+
const parts = Array.isArray(message.parts) ? message.parts : [];
|
|
4017
|
+
for (const part of parts) {
|
|
4018
|
+
if (part.type !== "text" || typeof part.text !== "string") continue;
|
|
4019
|
+
protectedTexts.push(...extractProtectedPromptInfo(part.text));
|
|
4020
|
+
}
|
|
4021
|
+
}
|
|
4022
|
+
if (protectedTexts.length === 0) {
|
|
4023
|
+
return summary;
|
|
4024
|
+
}
|
|
4025
|
+
const heading = "\n\nThe following protected prompt information was included in this conversation verbatim:";
|
|
4026
|
+
const body = protectedTexts.map((text) => `
|
|
4027
|
+
${text}`).join("");
|
|
4028
|
+
return summary + heading + body;
|
|
4029
|
+
}
|
|
4030
|
+
function extractProtectedPromptInfo(text) {
|
|
4031
|
+
const protectedTexts = [];
|
|
4032
|
+
const protectTagRegex = /<protect>([\s\S]*?)<\/protect>/gi;
|
|
4033
|
+
for (const match of text.matchAll(protectTagRegex)) {
|
|
4034
|
+
const protectedText = match[1]?.trim();
|
|
4035
|
+
if (protectedText) {
|
|
4036
|
+
protectedTexts.push(protectedText);
|
|
4037
|
+
}
|
|
4038
|
+
}
|
|
4039
|
+
return protectedTexts;
|
|
4040
|
+
}
|
|
3994
4041
|
async function appendProtectedTools(client, state, allowSubAgents, summary, selection, searchContext, protectedTools, protectedFilePatterns = []) {
|
|
3995
4042
|
const protectedOutputs = [];
|
|
3996
4043
|
for (const messageId of selection.messageIds) {
|
|
@@ -4106,11 +4153,18 @@ function createCompressMessageTool(ctx) {
|
|
|
4106
4153
|
const notifications = [];
|
|
4107
4154
|
const preparedPlans = [];
|
|
4108
4155
|
for (const plan of plans) {
|
|
4156
|
+
const summaryWithPromptInfo = appendProtectedPromptInfo(
|
|
4157
|
+
plan.entry.summary,
|
|
4158
|
+
plan.selection,
|
|
4159
|
+
searchContext,
|
|
4160
|
+
ctx.state,
|
|
4161
|
+
ctx.config.compress.protectTags
|
|
4162
|
+
);
|
|
4109
4163
|
const summaryWithTools = await appendProtectedTools(
|
|
4110
4164
|
ctx.client,
|
|
4111
4165
|
ctx.state,
|
|
4112
4166
|
ctx.config.experimental.allowSubAgents,
|
|
4113
|
-
|
|
4167
|
+
summaryWithPromptInfo,
|
|
4114
4168
|
plan.selection,
|
|
4115
4169
|
searchContext,
|
|
4116
4170
|
ctx.config.compress.protectedTools,
|
|
@@ -4445,11 +4499,18 @@ function createCompressRangeTool(ctx) {
|
|
|
4445
4499
|
ctx.state,
|
|
4446
4500
|
ctx.config.compress.protectUserMessages
|
|
4447
4501
|
);
|
|
4502
|
+
const summaryWithPromptInfo = appendProtectedPromptInfo(
|
|
4503
|
+
summaryWithUsers,
|
|
4504
|
+
plan.selection,
|
|
4505
|
+
searchContext,
|
|
4506
|
+
ctx.state,
|
|
4507
|
+
ctx.config.compress.protectTags
|
|
4508
|
+
);
|
|
4448
4509
|
const summaryWithTools = await appendProtectedTools(
|
|
4449
4510
|
ctx.client,
|
|
4450
4511
|
ctx.state,
|
|
4451
4512
|
ctx.config.experimental.allowSubAgents,
|
|
4452
|
-
|
|
4513
|
+
summaryWithPromptInfo,
|
|
4453
4514
|
plan.selection,
|
|
4454
4515
|
searchContext,
|
|
4455
4516
|
ctx.config.compress.protectedTools,
|
|
@@ -7674,10 +7735,22 @@ async function updateRemoveDir(packageDir, name) {
|
|
|
7674
7735
|
if (basename(nodeModulesDir) !== "node_modules") return void 0;
|
|
7675
7736
|
const wrapperDir = dirname3(nodeModulesDir);
|
|
7676
7737
|
const wrapperPkg = await readPackageJson(join5(wrapperDir, "package.json"));
|
|
7677
|
-
const spec = wrapperPkg?.dependencies?.[name];
|
|
7738
|
+
const spec = wrapperSpec(wrapperDir, name) ?? wrapperPkg?.dependencies?.[name];
|
|
7678
7739
|
if (!spec || !isAutoUpdatableSpec(spec)) return void 0;
|
|
7679
7740
|
return wrapperDir;
|
|
7680
7741
|
}
|
|
7742
|
+
function wrapperSpec(wrapperDir, name) {
|
|
7743
|
+
if (name.startsWith("@")) {
|
|
7744
|
+
const [scope, pkg] = name.split("/");
|
|
7745
|
+
if (!scope || !pkg || basename(dirname3(wrapperDir)) !== scope) return void 0;
|
|
7746
|
+
const prefix2 = `${pkg}@`;
|
|
7747
|
+
const base2 = basename(wrapperDir);
|
|
7748
|
+
return base2.startsWith(prefix2) ? base2.slice(prefix2.length) : void 0;
|
|
7749
|
+
}
|
|
7750
|
+
const prefix = `${name}@`;
|
|
7751
|
+
const base = basename(wrapperDir);
|
|
7752
|
+
return base.startsWith(prefix) ? base.slice(prefix.length) : void 0;
|
|
7753
|
+
}
|
|
7681
7754
|
function isAutoUpdatableSpec(spec) {
|
|
7682
7755
|
const value = spec.trim();
|
|
7683
7756
|
if (!value) return false;
|