@lexwdex-org/opencode-dcp 3.4.4 → 3.4.6
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/dist/index.js +60 -10
- package/dist/index.js.map +1 -1
- package/dist/lib/commands/manual.d.ts.map +1 -1
- package/dist/lib/messages/inject/utils.d.ts.map +1 -1
- package/dist/lib/prompts/extensions/nudge.d.ts +2 -1
- package/dist/lib/prompts/extensions/nudge.d.ts.map +1 -1
- package/dist/lib/prompts/system.d.ts +1 -1
- package/dist/lib/prompts/system.d.ts.map +1 -1
- package/dist/lib/state/persistence.d.ts +1 -0
- package/dist/lib/state/persistence.d.ts.map +1 -1
- package/dist/lib/state/state.d.ts.map +1 -1
- package/dist/lib/state/utils.d.ts +1 -1
- package/dist/lib/state/utils.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2929,8 +2929,18 @@ function getActiveSummaryTokenUsage(state) {
|
|
|
2929
2929
|
}
|
|
2930
2930
|
return total;
|
|
2931
2931
|
}
|
|
2932
|
-
function resetOnCompaction(state) {
|
|
2932
|
+
function resetOnCompaction(state, messages = []) {
|
|
2933
2933
|
state.toolParameters.clear();
|
|
2934
|
+
if (messages.length === 0) {
|
|
2935
|
+
return;
|
|
2936
|
+
}
|
|
2937
|
+
const liveMessageIds = new Set(messages.map((msg) => msg.info.id));
|
|
2938
|
+
for (const [ref, rawId] of state.messageIds.byRef) {
|
|
2939
|
+
if (!liveMessageIds.has(rawId)) {
|
|
2940
|
+
state.messageIds.byRef.delete(ref);
|
|
2941
|
+
state.messageIds.byRawId.delete(rawId);
|
|
2942
|
+
}
|
|
2943
|
+
}
|
|
2934
2944
|
}
|
|
2935
2945
|
|
|
2936
2946
|
// lib/state/persistence.ts
|
|
@@ -2966,6 +2976,7 @@ async function saveSessionState(sessionState, logger, sessionName) {
|
|
|
2966
2976
|
}
|
|
2967
2977
|
const state = {
|
|
2968
2978
|
sessionName,
|
|
2979
|
+
manualMode: !!sessionState.manualMode,
|
|
2969
2980
|
prune: {
|
|
2970
2981
|
tools: Object.fromEntries(sessionState.prune.tools),
|
|
2971
2982
|
messages: serializePruneMessagesState(sessionState.prune.messages)
|
|
@@ -3157,7 +3168,7 @@ var checkSession = async (client, state, logger, messages, manualModeDefault) =>
|
|
|
3157
3168
|
const lastCompactionTimestamp = findLastCompactionTimestamp(messages);
|
|
3158
3169
|
if (lastCompactionTimestamp > state.lastCompaction) {
|
|
3159
3170
|
state.lastCompaction = lastCompactionTimestamp;
|
|
3160
|
-
resetOnCompaction(state);
|
|
3171
|
+
resetOnCompaction(state, messages);
|
|
3161
3172
|
logger.info("Detected compaction - reset stale state", {
|
|
3162
3173
|
timestamp: lastCompactionTimestamp
|
|
3163
3174
|
});
|
|
@@ -3255,6 +3266,9 @@ async function ensureSessionInitialized(client, state, sessionId, logger, messag
|
|
|
3255
3266
|
if (persisted === null) {
|
|
3256
3267
|
return;
|
|
3257
3268
|
}
|
|
3269
|
+
if (typeof persisted.manualMode === "boolean") {
|
|
3270
|
+
state.manualMode = persisted.manualMode ? "active" : false;
|
|
3271
|
+
}
|
|
3258
3272
|
state.prune.tools = loadPruneMap(persisted.prune.tools);
|
|
3259
3273
|
state.prune.messages = loadPruneMessagesState(persisted.prune.messages);
|
|
3260
3274
|
state.nudges.contextLimitAnchors = new Set(persisted.nudges.contextLimitAnchors || []);
|
|
@@ -5149,7 +5163,7 @@ Hard constraints
|
|
|
5149
5163
|
- If context needs compression, call \`compress\`. Do not write summaries inline.
|
|
5150
5164
|
- Use Markdown headings (e.g. \`## Analysis\`, \`## Summary\`) to organize information. Never use XML tags.
|
|
5151
5165
|
|
|
5152
|
-
|
|
5166
|
+
\`<dcp-message-id>\` and \`<dcp-system-reminder>\` are environment-injected metadata. Do not output them.
|
|
5153
5167
|
|
|
5154
5168
|
When to compress
|
|
5155
5169
|
|
|
@@ -6107,6 +6121,31 @@ function buildCompressedBlockGuidance(state) {
|
|
|
6107
6121
|
"- \u5982\u679C\u4F60\u9009\u62E9\u7684\u538B\u7F29\u8303\u56F4\u5305\u542B\u4EFB\u4F55\u5217\u51FA\u7684\u5757\uFF0C\u5728\u6458\u8981\u4E2D\u4F7F\u7528 `(bN)` \u6070\u597D\u5305\u542B\u6BCF\u4E2A\u5FC5\u9700\u7684\u5360\u4F4D\u7B26\u4E00\u6B21\u3002"
|
|
6108
6122
|
].join("\n");
|
|
6109
6123
|
}
|
|
6124
|
+
function buildAvailableMessageIdGuidance(state, messages) {
|
|
6125
|
+
const visibleIds = new Set(
|
|
6126
|
+
messages.filter((msg) => !isIgnoredUserMessage(msg) && !isMessageCompacted(state, msg)).map((msg) => msg.info.id)
|
|
6127
|
+
);
|
|
6128
|
+
const refs = [];
|
|
6129
|
+
for (const [ref, rawId] of state.messageIds.byRef) {
|
|
6130
|
+
if (visibleIds.has(rawId)) {
|
|
6131
|
+
refs.push(ref);
|
|
6132
|
+
}
|
|
6133
|
+
}
|
|
6134
|
+
refs.sort((a, b) => {
|
|
6135
|
+
const numA = Number.parseInt(a.slice(1), 10);
|
|
6136
|
+
const numB = Number.parseInt(b.slice(1), 10);
|
|
6137
|
+
return numA - numB;
|
|
6138
|
+
});
|
|
6139
|
+
if (refs.length === 0) {
|
|
6140
|
+
return "";
|
|
6141
|
+
}
|
|
6142
|
+
const refList = refs.length <= 15 ? refs.join(", ") : `${refs[0]} \u5230 ${refs[refs.length - 1]}\uFF08\u5171 ${refs.length} \u4E2A\uFF09`;
|
|
6143
|
+
return [
|
|
6144
|
+
"\u53EF\u7528\u6D88\u606F\u8FB9\u754C ID\uFF1A",
|
|
6145
|
+
`- \u5F53\u524D\u4E0A\u4E0B\u6587\u4E2D\u53EF\u4F5C\u4E3A compress \u8FB9\u754C\u7684\u5408\u6CD5\u6D88\u606F ID\uFF1A${refList}`,
|
|
6146
|
+
"- \u53EA\u4ECE\u4EE5\u4E0A\u5217\u8868\u4E2D\u9009\u53D6 startId \u548C endId\u3002\u4E0D\u8981\u53D1\u660E\u3001\u5916\u63A8\u6216\u4F7F\u7528\u4E0D\u5728\u5217\u8868\u4E2D\u7684 ID\u3002"
|
|
6147
|
+
].join("\n");
|
|
6148
|
+
}
|
|
6110
6149
|
function renderMessagePriorityGuidance(priorityLabel, refs) {
|
|
6111
6150
|
const refList = refs.length > 0 ? refs.join(", ") : "\u65E0";
|
|
6112
6151
|
const normalized = priorityLabel.toLowerCase();
|
|
@@ -6373,8 +6412,9 @@ function collectTurnNudgeAnchors2(state, config, messages) {
|
|
|
6373
6412
|
}
|
|
6374
6413
|
return turnNudgeAnchors;
|
|
6375
6414
|
}
|
|
6376
|
-
function applyRangeModeAnchoredNudge(anchorMessageIds, messages, baseNudgeText, compressedBlockGuidance) {
|
|
6377
|
-
const
|
|
6415
|
+
function applyRangeModeAnchoredNudge(anchorMessageIds, messages, baseNudgeText, compressedBlockGuidance, availableMessageIdGuidance) {
|
|
6416
|
+
const combinedGuidance = [availableMessageIdGuidance, compressedBlockGuidance].filter((g) => g.trim().length > 0).join("\n\n");
|
|
6417
|
+
const nudgeText = appendGuidanceToDcpTag(baseNudgeText, combinedGuidance);
|
|
6378
6418
|
if (!nudgeText.trim()) {
|
|
6379
6419
|
return;
|
|
6380
6420
|
}
|
|
@@ -6382,7 +6422,7 @@ function applyRangeModeAnchoredNudge(anchorMessageIds, messages, baseNudgeText,
|
|
|
6382
6422
|
injectAnchoredNudge(message, nudgeText);
|
|
6383
6423
|
}
|
|
6384
6424
|
}
|
|
6385
|
-
function applyMessageModeAnchoredNudge(anchorMessageIds, messages, baseNudgeText, compressionPriorities) {
|
|
6425
|
+
function applyMessageModeAnchoredNudge(anchorMessageIds, messages, baseNudgeText, availableMessageIdGuidance, compressionPriorities) {
|
|
6386
6426
|
for (const { message, index } of collectAnchoredMessages(anchorMessageIds, messages)) {
|
|
6387
6427
|
const priorityGuidance = buildMessagePriorityGuidance(
|
|
6388
6428
|
messages,
|
|
@@ -6390,51 +6430,60 @@ function applyMessageModeAnchoredNudge(anchorMessageIds, messages, baseNudgeText
|
|
|
6390
6430
|
index,
|
|
6391
6431
|
MESSAGE_MODE_NUDGE_PRIORITY
|
|
6392
6432
|
);
|
|
6393
|
-
const
|
|
6433
|
+
const combinedGuidance = [availableMessageIdGuidance, priorityGuidance].filter((g) => g.trim().length > 0).join("\n\n");
|
|
6434
|
+
const nudgeText = appendGuidanceToDcpTag(baseNudgeText, combinedGuidance);
|
|
6394
6435
|
injectAnchoredNudge(message, nudgeText);
|
|
6395
6436
|
}
|
|
6396
6437
|
}
|
|
6397
6438
|
function applyAnchoredNudges(state, config, messages, prompts, compressionPriorities) {
|
|
6398
6439
|
const turnNudgeAnchors = collectTurnNudgeAnchors2(state, config, messages);
|
|
6399
6440
|
if (config.compress.mode === "message") {
|
|
6441
|
+
const availableMessageIdGuidance2 = buildAvailableMessageIdGuidance(state, messages);
|
|
6400
6442
|
applyMessageModeAnchoredNudge(
|
|
6401
6443
|
state.nudges.contextLimitAnchors,
|
|
6402
6444
|
messages,
|
|
6403
6445
|
prompts.contextLimitNudge,
|
|
6446
|
+
availableMessageIdGuidance2,
|
|
6404
6447
|
compressionPriorities
|
|
6405
6448
|
);
|
|
6406
6449
|
applyMessageModeAnchoredNudge(
|
|
6407
6450
|
turnNudgeAnchors,
|
|
6408
6451
|
messages,
|
|
6409
6452
|
prompts.turnNudge,
|
|
6453
|
+
availableMessageIdGuidance2,
|
|
6410
6454
|
compressionPriorities
|
|
6411
6455
|
);
|
|
6412
6456
|
applyMessageModeAnchoredNudge(
|
|
6413
6457
|
state.nudges.iterationNudgeAnchors,
|
|
6414
6458
|
messages,
|
|
6415
6459
|
prompts.iterationNudge,
|
|
6460
|
+
availableMessageIdGuidance2,
|
|
6416
6461
|
compressionPriorities
|
|
6417
6462
|
);
|
|
6418
6463
|
return;
|
|
6419
6464
|
}
|
|
6420
6465
|
const compressedBlockGuidance = buildCompressedBlockGuidance(state);
|
|
6466
|
+
const availableMessageIdGuidance = buildAvailableMessageIdGuidance(state, messages);
|
|
6421
6467
|
applyRangeModeAnchoredNudge(
|
|
6422
6468
|
state.nudges.contextLimitAnchors,
|
|
6423
6469
|
messages,
|
|
6424
6470
|
prompts.contextLimitNudge,
|
|
6425
|
-
compressedBlockGuidance
|
|
6471
|
+
compressedBlockGuidance,
|
|
6472
|
+
availableMessageIdGuidance
|
|
6426
6473
|
);
|
|
6427
6474
|
applyRangeModeAnchoredNudge(
|
|
6428
6475
|
turnNudgeAnchors,
|
|
6429
6476
|
messages,
|
|
6430
6477
|
prompts.turnNudge,
|
|
6431
|
-
compressedBlockGuidance
|
|
6478
|
+
compressedBlockGuidance,
|
|
6479
|
+
availableMessageIdGuidance
|
|
6432
6480
|
);
|
|
6433
6481
|
applyRangeModeAnchoredNudge(
|
|
6434
6482
|
state.nudges.iterationNudgeAnchors,
|
|
6435
6483
|
messages,
|
|
6436
6484
|
prompts.iterationNudge,
|
|
6437
|
-
compressedBlockGuidance
|
|
6485
|
+
compressedBlockGuidance,
|
|
6486
|
+
availableMessageIdGuidance
|
|
6438
6487
|
);
|
|
6439
6488
|
}
|
|
6440
6489
|
|
|
@@ -7256,6 +7305,7 @@ async function handleManualToggleCommand(ctx, modeArg) {
|
|
|
7256
7305
|
} else {
|
|
7257
7306
|
state.manualMode = state.manualMode ? false : "active";
|
|
7258
7307
|
}
|
|
7308
|
+
await saveSessionState(state, logger);
|
|
7259
7309
|
const params = getCurrentParams(state, messages, logger);
|
|
7260
7310
|
await sendIgnoredMessage(
|
|
7261
7311
|
client,
|