Jelajahi Sumber

fix(compact): complete master retarget integration

Declare the tool-result pruning plugin in the examples workspace so the repl Cordis configuration resolves through plain Node and the Loader metadata gate.

Express the validated single-node surface rewrite without a non-null assertion or an unreachable defensive branch, preserving both the runtime contract and per-file 100% coverage.
Tianyi Cui 1 bulan lalu
induk
melakukan
6e790b95f2
3 mengubah file dengan 22 tambahan dan 20 penghapusan
  1. 1 0
      examples/package.json
  2. 12 14
      packages/core/session/src/surface.ts
  3. 9 6
      pnpm-lock.yaml

+ 1 - 0
examples/package.json

@@ -13,6 +13,7 @@
     "@deepseek-ai/dsh-cli-demo": "workspace:*",
     "@deepseek-ai/dsh-code-runtime-worker": "workspace:*",
     "@deepseek-ai/dsh-compact-basic": "workspace:*",
+    "@deepseek-ai/dsh-compact-tool-result-prune": "workspace:*",
     "@deepseek-ai/dsh-fs-local": "workspace:*",
     "@deepseek-ai/dsh-fs-policy": "workspace:*",
     "@deepseek-ai/dsh-hooks-claude": "workspace:*",

+ 12 - 14
packages/core/session/src/surface.ts

@@ -198,20 +198,18 @@ function assertToolResultRewrite(
   if (shadowedSeqs.length !== 1) {
     throw new Error('tool/result surface replacement must rewrite exactly one current node')
   }
-  const originalSeq = shadowedSeqs[0]
-  if (originalSeq === undefined) {
-    throw new Error('tool/result surface replacement must rewrite exactly one current node')
-  }
-  const original = events[originalSeq]
-  if (original?.type !== 'tool/result') {
-    throw new Error('tool/result surface replacement must target a current tool/result')
-  }
-  const originalRest = { ...original.data } as Record<string, unknown>
-  const replacementRest = { ...event.data } as Record<string, unknown>
-  delete originalRest['content']
-  delete replacementRest['content']
-  if (!isDeepStrictEqual(originalRest, replacementRest)) {
-    throw new Error('tool/result surface replacement may change only content')
+  for (const originalSeq of shadowedSeqs) {
+    const original = events[originalSeq]
+    if (original?.type !== 'tool/result') {
+      throw new Error('tool/result surface replacement must target a current tool/result')
+    }
+    const originalRest = { ...original.data } as Record<string, unknown>
+    const replacementRest = { ...event.data } as Record<string, unknown>
+    delete originalRest['content']
+    delete replacementRest['content']
+    if (!isDeepStrictEqual(originalRest, replacementRest)) {
+      throw new Error('tool/result surface replacement may change only content')
+    }
   }
 }
 

+ 9 - 6
pnpm-lock.yaml

@@ -116,6 +116,9 @@ importers:
       '@deepseek-ai/dsh-compact-basic':
         specifier: workspace:*
         version: link:../packages/compact/compact-basic
+      '@deepseek-ai/dsh-compact-tool-result-prune':
+        specifier: workspace:*
+        version: link:../packages/compact/compact-tool-result-prune
       '@deepseek-ai/dsh-fs-local':
         specifier: workspace:*
         version: link:../packages/fs/fs-local
@@ -373,6 +376,9 @@ importers:
       '@deepseek-ai/dsh-compact':
         specifier: workspace:^
         version: link:../compact
+      '@deepseek-ai/dsh-compact-tool-result-prune':
+        specifier: workspace:^
+        version: link:../compact-tool-result-prune
       '@deepseek-ai/dsh-invariants':
         specifier: workspace:^
         version: link:../../support/invariants
@@ -385,9 +391,6 @@ importers:
       '@deepseek-ai/dsh-token-meter':
         specifier: workspace:^
         version: link:../../llm/token-meter
-      '@deepseek-ai/dsh-compact-tool-result-prune':
-        specifier: workspace:^
-        version: link:../compact-tool-result-prune
       '@deepseek-ai/dsh-tools':
         specifier: workspace:^
         version: link:../../core/tools
@@ -2492,6 +2495,9 @@ importers:
       '@deepseek-ai/dsh-compact-basic':
         specifier: workspace:^
         version: link:../../packages/compact/compact-basic
+      '@deepseek-ai/dsh-compact-tool-result-prune':
+        specifier: workspace:^
+        version: link:../../packages/compact/compact-tool-result-prune
       '@deepseek-ai/dsh-fs':
         specifier: workspace:^
         version: link:../../packages/fs/fs
@@ -2609,9 +2615,6 @@ importers:
       '@deepseek-ai/dsh-tool-fs':
         specifier: workspace:^
         version: link:../../packages/fs/tool-fs
-      '@deepseek-ai/dsh-compact-tool-result-prune':
-        specifier: workspace:^
-        version: link:../../packages/compact/compact-tool-result-prune
       '@deepseek-ai/dsh-tool-skill':
         specifier: workspace:^
         version: link:../../packages/skill/tool-skill