blob: fa814de8654a1f1c55307cdf2bf4b67150f14177 [file]
import assert from 'node:assert/strict';
import { test } from 'node:test';
import {
decodeGoalProjection,
decodeRequestFrame,
decodeResponseFrame,
decodeSessionContinuitySnapshot,
HOST_OPERATION_SPECS,
SESSION_CONTINUITY_SCHEMA_VERSION,
} from '../protocol/index.js';
const goal = {
goalId: 'goal-1',
revision: 3,
sessionId: 'session-1',
condition: 'Ship the complete slice',
status: 'paused' as const,
setAt: 1,
iterations: 2,
maxIterations: 50,
consecutiveNoProgress: 0,
blockCap: 8,
tokenBudget: 10_000,
tokensSpent: 500,
lastReason: 'Waiting for an exact resume',
achievedAt: null,
pausedAt: 2,
};
test('Goal query and exact-revision control frames round-trip', () => {
assert.deepEqual(
decodeRequestFrame({
requestId: 'request-query',
operation: 'goal.query',
input: { sessionId: 'session-1' },
}),
{
requestId: 'request-query',
operation: 'goal.query',
input: { sessionId: 'session-1' },
},
);
assert.deepEqual(
decodeRequestFrame({
requestId: 'request-control',
operation: 'goal.control',
input: {
sessionId: 'session-1',
goalId: 'goal-1',
expectedRevision: 3,
action: 'resume',
},
}),
{
requestId: 'request-control',
operation: 'goal.control',
input: {
sessionId: 'session-1',
goalId: 'goal-1',
expectedRevision: 3,
action: 'resume',
},
},
);
assert.deepEqual(
decodeResponseFrame({
requestId: 'request-control',
operation: 'goal.control',
ok: true,
result: { sessionId: 'session-1', goal },
}),
{
requestId: 'request-control',
operation: 'goal.control',
ok: true,
result: { sessionId: 'session-1', goal },
},
);
assert.throws(() =>
HOST_OPERATION_SPECS['goal.control'].assertOutputForInput?.(
{
sessionId: 'session-1',
goalId: 'another-goal',
expectedRevision: 3,
action: 'resume',
},
{ sessionId: 'session-1', goal },
),
);
});
test('Goal projection is part of the exact Session continuity schema', () => {
const snapshot = decodeSessionContinuitySnapshot({
schemaVersion: SESSION_CONTINUITY_SCHEMA_VERSION,
session: {
sessionId: 'session-1',
metadataRevision: 1,
status: 'running',
createdAt: 1,
lastUsedAt: 2,
isArchived: false,
},
projectionRevision: 1,
rootTurn: null,
goal,
queue: { hostEpoch: 'epoch-1', queueRevision: 0, steering: [], followup: [] },
interactions: { pending: [] },
});
assert.deepEqual(snapshot.goal, goal);
assert.throws(() =>
decodeSessionContinuitySnapshot({
...snapshot,
goal: { ...goal, sessionId: 'session-2' },
}),
);
});
test('Goal projection rejects unknown fields and text beyond the shared UTF-8 boundary', () => {
assert.throws(() => decodeGoalProjection({ ...goal, extra: true }));
assert.throws(() => decodeGoalProjection({ ...goal, condition: '界'.repeat(501) }));
assert.throws(() => decodeGoalProjection({ ...goal, lastReason: '界'.repeat(501) }));
});