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