@lexwdex-org/opencode-dcp 3.4.4 → 3.4.5

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 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
@@ -3157,7 +3167,7 @@ var checkSession = async (client, state, logger, messages, manualModeDefault) =>
3157
3167
  const lastCompactionTimestamp = findLastCompactionTimestamp(messages);
3158
3168
  if (lastCompactionTimestamp > state.lastCompaction) {
3159
3169
  state.lastCompaction = lastCompactionTimestamp;
3160
- resetOnCompaction(state);
3170
+ resetOnCompaction(state, messages);
3161
3171
  logger.info("Detected compaction - reset stale state", {
3162
3172
  timestamp: lastCompactionTimestamp
3163
3173
  });
@@ -5149,7 +5159,7 @@ Hard constraints
5149
5159
  - If context needs compression, call \`compress\`. Do not write summaries inline.
5150
5160
  - Use Markdown headings (e.g. \`## Analysis\`, \`## Summary\`) to organize information. Never use XML tags.
5151
5161
 
5152
- \`\` and \`\` are environment-injected metadata. Do not output them.
5162
+ \`<dcp-message-id>\` and \`<dcp-system-reminder>\` are environment-injected metadata. Do not output them.
5153
5163
 
5154
5164
  When to compress
5155
5165
 
@@ -6107,6 +6117,31 @@ function buildCompressedBlockGuidance(state) {
6107
6117
  "- \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
6118
  ].join("\n");
6109
6119
  }
6120
+ function buildAvailableMessageIdGuidance(state, messages) {
6121
+ const visibleIds = new Set(
6122
+ messages.filter((msg) => !isIgnoredUserMessage(msg) && !isMessageCompacted(state, msg)).map((msg) => msg.info.id)
6123
+ );
6124
+ const refs = [];
6125
+ for (const [ref, rawId] of state.messageIds.byRef) {
6126
+ if (visibleIds.has(rawId)) {
6127
+ refs.push(ref);
6128
+ }
6129
+ }
6130
+ refs.sort((a, b) => {
6131
+ const numA = Number.parseInt(a.slice(1), 10);
6132
+ const numB = Number.parseInt(b.slice(1), 10);
6133
+ return numA - numB;
6134
+ });
6135
+ if (refs.length === 0) {
6136
+ return "";
6137
+ }
6138
+ const refList = refs.length <= 15 ? refs.join(", ") : `${refs[0]} \u5230 ${refs[refs.length - 1]}\uFF08\u5171 ${refs.length} \u4E2A\uFF09`;
6139
+ return [
6140
+ "\u53EF\u7528\u6D88\u606F\u8FB9\u754C ID\uFF1A",
6141
+ `- \u5F53\u524D\u4E0A\u4E0B\u6587\u4E2D\u53EF\u4F5C\u4E3A compress \u8FB9\u754C\u7684\u5408\u6CD5\u6D88\u606F ID\uFF1A${refList}`,
6142
+ "- \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"
6143
+ ].join("\n");
6144
+ }
6110
6145
  function renderMessagePriorityGuidance(priorityLabel, refs) {
6111
6146
  const refList = refs.length > 0 ? refs.join(", ") : "\u65E0";
6112
6147
  const normalized = priorityLabel.toLowerCase();
@@ -6373,8 +6408,9 @@ function collectTurnNudgeAnchors2(state, config, messages) {
6373
6408
  }
6374
6409
  return turnNudgeAnchors;
6375
6410
  }
6376
- function applyRangeModeAnchoredNudge(anchorMessageIds, messages, baseNudgeText, compressedBlockGuidance) {
6377
- const nudgeText = appendGuidanceToDcpTag(baseNudgeText, compressedBlockGuidance);
6411
+ function applyRangeModeAnchoredNudge(anchorMessageIds, messages, baseNudgeText, compressedBlockGuidance, availableMessageIdGuidance) {
6412
+ const combinedGuidance = [availableMessageIdGuidance, compressedBlockGuidance].filter((g) => g.trim().length > 0).join("\n\n");
6413
+ const nudgeText = appendGuidanceToDcpTag(baseNudgeText, combinedGuidance);
6378
6414
  if (!nudgeText.trim()) {
6379
6415
  return;
6380
6416
  }
@@ -6382,7 +6418,7 @@ function applyRangeModeAnchoredNudge(anchorMessageIds, messages, baseNudgeText,
6382
6418
  injectAnchoredNudge(message, nudgeText);
6383
6419
  }
6384
6420
  }
6385
- function applyMessageModeAnchoredNudge(anchorMessageIds, messages, baseNudgeText, compressionPriorities) {
6421
+ function applyMessageModeAnchoredNudge(anchorMessageIds, messages, baseNudgeText, availableMessageIdGuidance, compressionPriorities) {
6386
6422
  for (const { message, index } of collectAnchoredMessages(anchorMessageIds, messages)) {
6387
6423
  const priorityGuidance = buildMessagePriorityGuidance(
6388
6424
  messages,
@@ -6390,51 +6426,60 @@ function applyMessageModeAnchoredNudge(anchorMessageIds, messages, baseNudgeText
6390
6426
  index,
6391
6427
  MESSAGE_MODE_NUDGE_PRIORITY
6392
6428
  );
6393
- const nudgeText = appendGuidanceToDcpTag(baseNudgeText, priorityGuidance);
6429
+ const combinedGuidance = [availableMessageIdGuidance, priorityGuidance].filter((g) => g.trim().length > 0).join("\n\n");
6430
+ const nudgeText = appendGuidanceToDcpTag(baseNudgeText, combinedGuidance);
6394
6431
  injectAnchoredNudge(message, nudgeText);
6395
6432
  }
6396
6433
  }
6397
6434
  function applyAnchoredNudges(state, config, messages, prompts, compressionPriorities) {
6398
6435
  const turnNudgeAnchors = collectTurnNudgeAnchors2(state, config, messages);
6399
6436
  if (config.compress.mode === "message") {
6437
+ const availableMessageIdGuidance2 = buildAvailableMessageIdGuidance(state, messages);
6400
6438
  applyMessageModeAnchoredNudge(
6401
6439
  state.nudges.contextLimitAnchors,
6402
6440
  messages,
6403
6441
  prompts.contextLimitNudge,
6442
+ availableMessageIdGuidance2,
6404
6443
  compressionPriorities
6405
6444
  );
6406
6445
  applyMessageModeAnchoredNudge(
6407
6446
  turnNudgeAnchors,
6408
6447
  messages,
6409
6448
  prompts.turnNudge,
6449
+ availableMessageIdGuidance2,
6410
6450
  compressionPriorities
6411
6451
  );
6412
6452
  applyMessageModeAnchoredNudge(
6413
6453
  state.nudges.iterationNudgeAnchors,
6414
6454
  messages,
6415
6455
  prompts.iterationNudge,
6456
+ availableMessageIdGuidance2,
6416
6457
  compressionPriorities
6417
6458
  );
6418
6459
  return;
6419
6460
  }
6420
6461
  const compressedBlockGuidance = buildCompressedBlockGuidance(state);
6462
+ const availableMessageIdGuidance = buildAvailableMessageIdGuidance(state, messages);
6421
6463
  applyRangeModeAnchoredNudge(
6422
6464
  state.nudges.contextLimitAnchors,
6423
6465
  messages,
6424
6466
  prompts.contextLimitNudge,
6425
- compressedBlockGuidance
6467
+ compressedBlockGuidance,
6468
+ availableMessageIdGuidance
6426
6469
  );
6427
6470
  applyRangeModeAnchoredNudge(
6428
6471
  turnNudgeAnchors,
6429
6472
  messages,
6430
6473
  prompts.turnNudge,
6431
- compressedBlockGuidance
6474
+ compressedBlockGuidance,
6475
+ availableMessageIdGuidance
6432
6476
  );
6433
6477
  applyRangeModeAnchoredNudge(
6434
6478
  state.nudges.iterationNudgeAnchors,
6435
6479
  messages,
6436
6480
  prompts.iterationNudge,
6437
- compressedBlockGuidance
6481
+ compressedBlockGuidance,
6482
+ availableMessageIdGuidance
6438
6483
  );
6439
6484
  }
6440
6485