You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maka.apache.org by as...@apache.org on 2026/09/13 09:21:02 UTC

(maka) 02/02: refactor(runtime): remove unused replay reader wrapper

This is an automated email from the ASF dual-hosted git repository.

Astro-Han pushed a commit to branch refactor/tool-results-unified-read
in repository https://gitbox.apache.org/repos/asf/maka.git

commit 7c348da5a28c6681040de52e95984c3a18d9327a
Author: AstroHan <le...@outlook.com>
AuthorDate: Sun Sep 13 17:20:53 2026 +0800

    refactor(runtime): remove unused replay reader wrapper
---
 .../src/__tests__/conversation-copy.test.ts        | 31 ++++----
 .../ledger-tool-result-archive-reader.test.ts      | 82 +++++++---------------
 packages/runtime/src/context-budget.ts             |  1 -
 .../src/ledger-tool-result-archive-reader.ts       | 36 ++--------
 packages/runtime/src/tool-result-archive.ts        |  4 --
 5 files changed, 41 insertions(+), 113 deletions(-)

diff --git a/packages/runtime/src/__tests__/conversation-copy.test.ts b/packages/runtime/src/__tests__/conversation-copy.test.ts
index 28f3bdd9a6..857a4ecf27 100644
--- a/packages/runtime/src/__tests__/conversation-copy.test.ts
+++ b/packages/runtime/src/__tests__/conversation-copy.test.ts
@@ -19,10 +19,7 @@
 
 import assert from 'node:assert/strict';
 import { readToolResultPage } from '../read-page.js';
-import {
-  createLedgerToolResultArchiveReader,
-  createLedgerArchiveResourceReader,
-} from '../ledger-tool-result-archive-reader.js';
+import { createLedgerArchiveResourceReader } from '../ledger-tool-result-archive-reader.js';
 import { mkdtemp, rm } from 'node:fs/promises';
 import { tmpdir } from 'node:os';
 import { join } from 'node:path';
@@ -3170,7 +3167,7 @@ for (const inspectFirst of [false, true]) {
         ),
       );
 
-      const read = createLedgerToolResultArchiveReader({
+      const resource = createLedgerArchiveResourceReader({
         read: async () => ({
           ok: true,
           event: target,
@@ -3181,7 +3178,12 @@ for (const inspectFirst of [false, true]) {
           ),
         }),
       });
-      const body = await read({ ...copiedPlaceholder, sessionId: 'session-target' });
+      const body = await resource({
+        storage: 'event',
+        runtimeEventId: target.id,
+        sessionId: 'session-target',
+        maxBytes: 4 * 1024 * 1024,
+      });
       assert.ok(body.ok);
       assert.match(body.serializedResult, /image-target/);
       assert.doesNotMatch(body.serializedResult, /image-source/);
@@ -3202,17 +3204,6 @@ for (const inspectFirst of [false, true]) {
             : undefined,
           output.ref,
         );
-        const resource = createLedgerArchiveResourceReader({
-          read: async () => ({
-            ok: true,
-            event: target,
-            transitions: records.filter(
-              (row) =>
-                row.type === MODEL_PROJECTION_TRANSITION_EVENT_TYPE &&
-                row.data?.runtimeEventId === target.id,
-            ),
-          }),
-        });
         const reread = await readToolResultArchiveResource(
           {
             readArchivedToolResultResource: (input) =>
@@ -3229,7 +3220,7 @@ for (const inspectFirst of [false, true]) {
         )!;
         assert.ok(dependent?.replacement.kind === 'json');
         assert.ok(isArchivedToolResultPlaceholder(dependent.replacement.value));
-        const dependentReader = createLedgerToolResultArchiveReader({
+        const dependentReader = createLedgerArchiveResourceReader({
           read: async () => ({
             ok: true,
             event: response,
@@ -3241,8 +3232,10 @@ for (const inspectFirst of [false, true]) {
           }),
         });
         const dependentBody = await dependentReader({
-          ...(dependent.replacement.value as ArchivedToolResultPlaceholder),
+          storage: 'event',
+          runtimeEventId: response.id,
           sessionId: 'session-target',
+          maxBytes: 4 * 1024 * 1024,
         });
         assert.ok(dependentBody.ok);
         assert.equal(JSON.parse(dependentBody.serializedResult).ref, copiedPlaceholder.resourceRef);
diff --git a/packages/runtime/src/__tests__/ledger-tool-result-archive-reader.test.ts b/packages/runtime/src/__tests__/ledger-tool-result-archive-reader.test.ts
index 3694f64314..6cab43a06f 100644
--- a/packages/runtime/src/__tests__/ledger-tool-result-archive-reader.test.ts
+++ b/packages/runtime/src/__tests__/ledger-tool-result-archive-reader.test.ts
@@ -31,7 +31,6 @@ import type { AgentRunEvent } from '@maka/core/agent-run';
 import type { DurableToolResultProjection } from '@maka/core/durable-tool-result-projection';
 import { buildModelProjectionTransition } from '@maka/core/model-projection-transition';
 import {
-  createLedgerToolResultArchiveReader,
   createLedgerArchivePreparer,
   createLedgerArchiveResourceReader,
 } from '../ledger-tool-result-archive-reader.js';
@@ -46,7 +45,6 @@ import { serializeToolResultProjectionV1 } from '../tool-result-archive-encoding
 import {
   buildArchivedToolResultPlaceholder,
   isArchivedToolResultPlaceholder,
-  type ToolResultArchiveReaderInput,
 } from '../tool-result-archive.js';
 
 function fixture(
@@ -94,10 +92,16 @@ function fixture(
     now: 2,
   });
   const records = [envelope(transition)];
-  const reader = createLedgerToolResultArchiveReader({
+  const reader = createLedgerArchiveResourceReader({
     read: async () => ({ ok: true, event, transitions: records }),
   });
-  return { event, placeholder, transition, records, reader, body, source };
+  const request = {
+    storage: 'event' as const,
+    runtimeEventId: event.id,
+    sessionId: 'session',
+    maxBytes: 4 * 1024 * 1024,
+  };
+  return { event, placeholder, transition, records, reader, request, body, source };
 }
 function envelope(transition: ReturnType<typeof buildModelProjectionTransition>): AgentRunEvent {
   return {
@@ -171,12 +175,12 @@ test('reads committed SQLite evidence after reopen without any Artifact payload'
     }
     const evidence = await openToolResultArchiveEvidenceReader(owner.lease);
     try {
-      const reader = createLedgerToolResultArchiveReader(evidence);
-      assert.deepEqual(await reader({ ...f.placeholder, sessionId: 'session' }), {
+      const reader = createLedgerArchiveResourceReader(evidence);
+      assert.deepEqual(await reader(f.request), {
         ok: true,
         serializedResult: f.body,
       });
-      assert.equal((await reader({ ...f.placeholder, sessionId: 'foreign' })).ok, false);
+      assert.equal((await reader({ ...f.request, sessionId: 'foreign' })).ok, false);
     } finally {
       evidence.close();
     }
@@ -211,7 +215,7 @@ test('v1 archive encoding is byte-identical for text, JSON, denial and media', (
 
 test('reads the source of an applied archive transition, never the raw result', async () => {
   const f = fixture();
-  assert.deepEqual(await f.reader({ ...f.placeholder, sessionId: 'session' }), {
+  assert.deepEqual(await f.reader(f.request), {
     ok: true,
     serializedResult: f.body,
   });
@@ -220,41 +224,18 @@ test('reads the source of an applied archive transition, never the raw result',
 test('refuses missing projections instead of applying the legacy tool projector', async () => {
   const f = fixture();
   if (f.event.content?.kind === 'function_response') delete f.event.content.modelProjection;
-  assert.deepEqual(await f.reader({ ...f.placeholder, sessionId: 'session' }), {
+  assert.deepEqual(await f.reader(f.request), {
     ok: false,
     reason: 'source_mismatch',
   });
 });
 
-test('fails closed on Session, identity, encoding, size and hash mismatch', async () => {
-  const f = fixture();
-  for (const override of [
-    { sessionId: 'foreign' },
-    { toolCallId: 'foreign' },
-    { rewriteVersion: 2 },
-    { originalBytes: 999 },
-    { bodySha256: 'f'.repeat(64) },
-    { maxBytes: 1 },
-  ]) {
-    assert.equal(
-      (
-        await f.reader({
-          ...f.placeholder,
-          sessionId: 'session',
-          ...override,
-        } as ToolResultArchiveReaderInput)
-      ).ok,
-      false,
-    );
-  }
-});
-
 test('cannot read an archive without a committed, applicable transition', async () => {
   const f = fixture();
   f.records.length = 0;
-  assert.equal((await f.reader({ ...f.placeholder, sessionId: 'session' })).ok, false);
+  assert.equal((await f.reader(f.request)).ok, false);
   f.records.push(envelope({ ...f.transition, sourceProjectionDigest: `sha256:${'a'.repeat(64)}` }));
-  assert.equal((await f.reader({ ...f.placeholder, sessionId: 'session' })).ok, false);
+  assert.equal((await f.reader(f.request)).ok, false);
 });
 
 test('rejects losing siblings using the existing reducer and accepts duplicate appends', async () => {
@@ -269,12 +250,12 @@ test('rejects losing siblings using the existing reducer and accepts duplicate a
   // IDs are the reducer's tie break; do not invent a different winner here.
   const archiveWins = f.transition.transitionId < sibling.transitionId;
   f.records.push(envelope(sibling), envelope(f.transition));
-  assert.equal((await f.reader({ ...f.placeholder, sessionId: 'session' })).ok, archiveWins);
+  assert.equal((await f.reader(f.request)).ok, archiveWins);
   f.records.reverse();
-  assert.equal((await f.reader({ ...f.placeholder, sessionId: 'session' })).ok, archiveWins);
+  assert.equal((await f.reader(f.request)).ok, archiveWins);
 });
 
-test('reconstructs a predecessor replacement rather than the original or final projection', async () => {
+test('reconstructs a predecessor replacement rather than the original projection', async () => {
   const f = fixture();
   const before = buildModelProjectionTransition({
     sessionId: 'session',
@@ -293,16 +274,8 @@ test('reconstructs a predecessor replacement rather than the original or final p
     previousTransitionId: before.transitionId,
     now: 2,
   });
-  const final = buildModelProjectionTransition({
-    sessionId: 'session',
-    target: f.transition.target,
-    sourceProjection: archive.replacement,
-    replacement: { version: 1, kind: 'text', text: 'final' },
-    previousTransitionId: archive.transitionId,
-    now: 3,
-  });
-  f.records.splice(0, f.records.length, envelope(final), envelope(archive), envelope(before));
-  assert.deepEqual(await f.reader({ ...f.placeholder, sessionId: 'session' }), {
+  f.records.splice(0, f.records.length, envelope(archive), envelope(before));
+  assert.deepEqual(await f.reader(f.request), {
     ok: true,
     serializedResult: f.body,
   });
@@ -314,11 +287,11 @@ test('unknown transition versions and incomplete evidence do not expose a source
     runtimeEventId: 'response',
     transition: { ...f.transition, version: 999 },
   };
-  assert.equal((await f.reader({ ...f.placeholder, sessionId: 'session' })).ok, false);
-  const reader = createLedgerToolResultArchiveReader({
+  assert.equal((await f.reader(f.request)).ok, false);
+  const reader = createLedgerArchiveResourceReader({
     read: async () => ({ ok: false, reason: 'too_large' }),
   });
-  assert.deepEqual(await reader({ ...f.placeholder, sessionId: 'session' }), {
+  assert.deepEqual(await reader(f.request), {
     ok: false,
     reason: 'too_large',
   });
@@ -365,11 +338,6 @@ test('new archive commits only a v2 ledger reference and is readable through the
   assert.equal(placeholder.rewriteVersion, 2);
   assert.equal(placeholder.artifactId, undefined);
   assert.match(placeholder.resourceRef!, /^maka:\/\/runtime\/tool-results\//);
-  const reader = createLedgerToolResultArchiveReader(evidence);
-  assert.deepEqual(await reader({ ...placeholder, sessionId: 'session' }), {
-    ok: true,
-    serializedResult: f.body,
-  });
   const resource = createLedgerArchiveResourceReader(evidence);
   const read = await resource({
     storage: 'event',
@@ -420,10 +388,10 @@ test('preflight and transition failure leave the source projection unchanged', a
 test('availability maps to read_failed while corrupt evidence remains corrupt', async () => {
   const f = fixture();
   for (const reason of ['unavailable', 'corrupt'] as const) {
-    const reader = createLedgerToolResultArchiveReader({
+    const reader = createLedgerArchiveResourceReader({
       read: async () => ({ ok: false, reason }),
     });
-    assert.deepEqual(await reader({ ...f.placeholder, sessionId: 'session' }), {
+    assert.deepEqual(await reader(f.request), {
       ok: false,
       reason: reason === 'unavailable' ? 'read_failed' : 'corrupt',
     });
diff --git a/packages/runtime/src/context-budget.ts b/packages/runtime/src/context-budget.ts
index 7478160646..b86627cdf8 100644
--- a/packages/runtime/src/context-budget.ts
+++ b/packages/runtime/src/context-budget.ts
@@ -34,7 +34,6 @@ export {
 export type {
   ToolResultPrunePolicy,
   ToolResultArchiveCandidate,
-  ToolResultArchiveReader,
   ToolResultArchiveReaderInput,
   ToolResultArchiveReadFailureReason,
   ToolResultArchiveReadResult,
diff --git a/packages/runtime/src/ledger-tool-result-archive-reader.ts b/packages/runtime/src/ledger-tool-result-archive-reader.ts
index feeb465c11..23b1b7eb7d 100644
--- a/packages/runtime/src/ledger-tool-result-archive-reader.ts
+++ b/packages/runtime/src/ledger-tool-result-archive-reader.ts
@@ -30,9 +30,7 @@ import {
 } from './model-projection-transition-ledger.js';
 import {
   isArchivedToolResultPlaceholder,
-  type ToolResultArchiveReader,
   type ToolResultArchiveReadResult,
-  type ToolResultArchiveReaderInput,
 } from './tool-result-archive.js';
 import { serializeToolResultProjectionV1 } from './tool-result-archive-encoding.js';
 import type { LedgerArchiveResourceIdentity } from './tool-result-archive-resource.js';
@@ -42,32 +40,12 @@ import {
   TOOL_RESULT_ARCHIVE_EVIDENCE_MAX_TRANSITIONS,
 } from '@maka/core/tool-result-archive-evidence';
 
-/**
- * Read-only v1 reconstruction. It never calls a live tool projector, reads an
- * Artifact, changes history, or authorizes access from a hash alone.
- * The evidence port is trusted to return the complete bounded target history.
- */
-export function createLedgerToolResultArchiveReader(
-  evidence: ToolResultArchiveEvidenceReader,
-): ToolResultArchiveReader {
-  return async (input) => {
-    if (!isArchivedToolResultPlaceholder(input)) {
-      return { ok: false, reason: 'corrupt' };
-    }
-    return readLedgerArchive(evidence, {
-      ...input,
-      maxBytes: input.maxBytes ?? input.originalBytes,
-    });
-  };
-}
-
 async function readLedgerArchive(
   evidence: ToolResultArchiveEvidenceReader,
-  request: (
-    | ToolResultArchiveReaderInput
-    | LedgerArchiveResourceIdentity
-    | { storage: 'event'; runtimeEventId: string }
-  ) & { sessionId: string; maxBytes: number },
+  request: (LedgerArchiveResourceIdentity | { storage: 'event'; runtimeEventId: string }) & {
+    sessionId: string;
+    maxBytes: number;
+  },
 ): Promise<ToolResultArchiveReadResult> {
   const identity = 'bodySha256' in request ? request : undefined;
   if (
@@ -130,14 +108,8 @@ async function readLedgerArchive(
       if (
         isArchivedToolResultPlaceholder(placeholder) &&
         ((!identity && transition === reduction.applied.at(-1)) ||
-          (placeholder.rewriteVersion === 1 &&
-            identity &&
-            !('storage' in identity) &&
-            placeholder.artifactId === identity.artifactId) ||
           (placeholder.rewriteVersion === 2 &&
             identity &&
-            'storage' in identity &&
-            identity.storage === 'ledger' &&
             placeholder.sourceProjectionDigest === identity.sourceProjectionDigest &&
             placeholder.previousTransitionId === identity.previousTransitionId))
       ) {
diff --git a/packages/runtime/src/tool-result-archive.ts b/packages/runtime/src/tool-result-archive.ts
index 7ca280cb50..2f1c1bb331 100644
--- a/packages/runtime/src/tool-result-archive.ts
+++ b/packages/runtime/src/tool-result-archive.ts
@@ -127,10 +127,6 @@ export type ToolResultArchiveReadResult =
   | { ok: true; serializedResult: string }
   | { ok: false; reason: ToolResultArchiveReadFailureReason };
 
-export type ToolResultArchiveReader = (
-  input: ToolResultArchiveReaderInput,
-) => Promise<ToolResultArchiveReadResult> | ToolResultArchiveReadResult;
-
 export function stableToolResultArchiveArtifactId(event: {
   sessionId: string;
   runtimeEventId: string;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@maka.apache.org
For additional commands, e-mail: commits-help@maka.apache.org