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/08/20 10:09:36 UTC
(maka) 01/01: refactor: stop letting callers choose a session backend
This is an automated email from the ASF dual-hosted git repository.
Astro-Han pushed a commit to branch refactor/3211-retire-fake-backend-kind
in repository https://gitbox.apache.org/repos/asf/maka.git
commit 629535977c8dfea856931a3ad80a115a2f289e49
Author: AstroHan <le...@outlook.com>
AuthorDate: Thu Aug 20 02:40:19 2026 +0800
refactor: stop letting callers choose a session backend
`CreateSessionInput.backend` was the last live path that could write the
retired `'fake'` into a new session. Narrowing it to `BackendKind` would only
move the question: four derivation sites in `session-manager.ts` plus the
conversation copy in `session-revision-coordinator.ts` inherit the source
header's backend, so each would need an answer for what deriving from a legacy
row means.
Deleting the field dissolves that question. A live build has exactly one
backend, so the field carried no choice — the store stamps `'ai-sdk'` on every
new header and no caller names a backend at all. A session derived from a
legacy row is now a real session whose connection slug resolves to nothing,
which is what the readiness projection already says about that row.
Two backend-kind guards go with it, for separate reasons:
- `runtimeToolBoundaryProtocol` withheld the T1 durable tool boundary from
non-`ai-sdk` headers. The branch was reachable: nothing checks the backend
kind between `sendMessage` and the kernel, and `AgentRun.begin()` persists the
run record, user message, turn state and the `connectionLocked` flip before
the refusal fires inside `reserveRun`. What the gate withheld was only the
protocol marker on the initial event of a run that dies before tool dispatch,
and every marker consumer treats a marked run with zero tool operations the
same as an unmarked one. The marker stays truthful; the gate bought nothing.
- `sessions:create` rejected a non-`ai-sdk` backend arriving over IPC. That
one really is unrepresentable now: the field is gone from the request type.
Tests that dispatched through a `'fake'` registry key now register the live
one, which is how they would be written today. The activation-refusal
regression test seeded its legacy row through `createSession({backend:
'fake'})` — the very write this removes — and now seeds it under the writer,
which is the only way such a row was ever produced.
Generated-by: Claude Code
---
apps/desktop/e2e/fixtures.ts | 2 -
.../main/runtime-host-session-catalog-ipc-main.ts | 3 -
.../src/__tests__/runtime-host-run-command.test.ts | 12 -
.../__tests__/runtime-host-session-driver.test.ts | 5 -
packages/cli/src/activation-command.ts | 1 -
packages/cli/src/run-command-core.ts | 1 -
packages/core/src/runtime-inputs.ts | 10 +-
.../src/__tests__/artifact-two-client-uds.test.ts | 2 -
.../__tests__/deep-research-two-client-uds.test.ts | 1 -
.../src/__tests__/execution-composition.test.ts | 65 ++-
.../src/__tests__/execution-inspect-uds.test.ts | 1 -
.../__tests__/execution-model-composition.test.ts | 6 -
.../__tests__/external-session-coordinator.test.ts | 4 -
.../src/__tests__/fixtures/execution-host-suite.ts | 3 -
.../src/__tests__/goal-coordinator.test.ts | 4 -
.../src/__tests__/goal-root-authority.test.ts | 3 +-
.../src/__tests__/interaction-coordinator.test.ts | 4 -
.../src/__tests__/plan-two-client-uds.test.ts | 1 -
.../src/__tests__/root-turn-coordinator.test.ts | 140 +++---
.../__tests__/runtime-policy-coordinator.test.ts | 3 -
.../session-catalog-two-client-uds.test.ts | 5 -
.../session-retirement-coordinator.test.ts | 1 -
.../session-revision-two-client-uds.test.ts | 8 -
.../__tests__/session-transcript-reader.test.ts | 1 -
.../src/server/session-catalog-coordinator.ts | 2 -
.../src/server/session-revision-coordinator.ts | 1 -
.../__tests__/agent-run-steering-recovery.test.ts | 8 -
.../src/__tests__/execution-inspect.test.ts | 1 -
.../src/__tests__/latest-context-commit.test.ts | 3 +-
.../__tests__/runtime-continuation-crash.test.ts | 5 +-
.../__tests__/runtime-kernel-interaction.test.ts | 16 +-
.../src/__tests__/runtime-ledger-repair.test.ts | 1 -
.../sandbox-boundary-restart-recovery.test.ts | 1 -
.../session-manager-terminal-ledger.test.ts | 21 +-
.../runtime/src/__tests__/session-manager.test.ts | 523 +++++++++------------
.../src/__tests__/shell-run-tool-result.test.ts | 1 -
.../src/__tests__/stream-graph-coordinator.test.ts | 6 +-
packages/runtime/src/runtime-kernel.ts | 23 +-
packages/runtime/src/session-manager.ts | 4 -
.../__tests__/external-session-importer.test.ts | 1 -
.../storage/src/__tests__/goal-authority.test.ts | 1 -
.../src/__tests__/operational-state-backup.test.ts | 1 -
.../src/__tests__/session-bundle-policy.test.ts | 1 -
.../storage/src/__tests__/session-store.test.ts | 1 -
.../src/__tests__/settings-store-usage.test.ts | 2 -
packages/storage/src/session-store.ts | 2 +-
46 files changed, 384 insertions(+), 527 deletions(-)
diff --git a/apps/desktop/e2e/fixtures.ts b/apps/desktop/e2e/fixtures.ts
index 885c83d7e..0c0e85a38 100644
--- a/apps/desktop/e2e/fixtures.ts
+++ b/apps/desktop/e2e/fixtures.ts
@@ -135,7 +135,6 @@ async function seedParentRemovalSessions(userDataDir: string): Promise<void> {
try {
const parent = await store.create({
cwd: path.join(userDataDir, 'project'),
- backend: 'fake',
llmConnectionSlug: 'e2e',
model: 'claude-sonnet-4-5-20250929',
permissionMode: 'ask',
@@ -144,7 +143,6 @@ async function seedParentRemovalSessions(userDataDir: string): Promise<void> {
});
await store.createSubagent({
cwd: path.join(userDataDir, 'project'),
- backend: 'fake',
llmConnectionSlug: 'e2e',
model: 'claude-sonnet-4-5-20250929',
permissionMode: 'execute',
diff --git a/apps/desktop/src/main/runtime-host-session-catalog-ipc-main.ts b/apps/desktop/src/main/runtime-host-session-catalog-ipc-main.ts
index 96f216925..7ba474b50 100644
--- a/apps/desktop/src/main/runtime-host-session-catalog-ipc-main.ts
+++ b/apps/desktop/src/main/runtime-host-session-catalog-ipc-main.ts
@@ -96,9 +96,6 @@ export function registerRuntimeHostSessionCatalogIpc(
pendingCleanup.add(sessionId);
});
ipcMain.handle('sessions:create', async (_event, input?: CreateSessionRequestInput) => {
- if (input?.backend !== undefined && input.backend !== 'ai-sdk') {
- throw new Error('Unsupported Runtime Host Session backend');
- }
const request = resolveCreateSessionRequest(input);
const workspace = await deps.resolveCreateProject({
...(input?.cwd === undefined ? {} : { cwd: input.cwd }),
diff --git a/packages/cli/src/__tests__/runtime-host-run-command.test.ts b/packages/cli/src/__tests__/runtime-host-run-command.test.ts
index 99f636cda..298e820ad 100644
--- a/packages/cli/src/__tests__/runtime-host-run-command.test.ts
+++ b/packages/cli/src/__tests__/runtime-host-run-command.test.ts
@@ -205,7 +205,6 @@ describe('Runtime Host maka run adapter', () => {
const fixture = runFixture({ observed, graph: true, graphProjectionRace: true });
const session = await fixture.context.runtime.createSession({
cwd: '/workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -229,7 +228,6 @@ describe('Runtime Host maka run adapter', () => {
const fixture = runFixture({ observed, graph: true });
const session = await fixture.context.runtime.createSession({
cwd: '/workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -253,7 +251,6 @@ describe('Runtime Host maka run adapter', () => {
const fixture = runFixture({ observed, graph: true, graphMultiWakeRace: true });
const session = await fixture.context.runtime.createSession({
cwd: '/workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -282,7 +279,6 @@ describe('Runtime Host maka run adapter', () => {
const context = fixture.context;
const session = await context.runtime.createSession({
cwd: '/workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -315,7 +311,6 @@ describe('Runtime Host maka run adapter', () => {
});
const session = await fixture.context.runtime.createSession({
cwd: '/workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -338,7 +333,6 @@ describe('Runtime Host maka run adapter', () => {
const fixture = runFixture({ maxSteps: 3 });
const session = await fixture.context.runtime.createSession({
cwd: '/workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -390,7 +384,6 @@ describe('Runtime Host maka run adapter', () => {
const fixture = runFixture({ graph: true });
const session = await fixture.context.runtime.createSession({
cwd: '/workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -412,7 +405,6 @@ describe('Runtime Host maka run adapter', () => {
});
const session = await fixture.context.runtime.createSession({
cwd: '/workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -444,7 +436,6 @@ describe('Runtime Host maka run adapter', () => {
});
const session = await fixture.context.runtime.createSession({
cwd: '/workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -471,7 +462,6 @@ describe('Runtime Host maka run adapter', () => {
});
const session = await fixture.context.runtime.createSession({
cwd: '/workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -499,7 +489,6 @@ describe('Runtime Host maka run adapter', () => {
});
const session = await fixture.context.runtime.createSession({
cwd: '/workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -545,7 +534,6 @@ describe('Runtime Host maka run adapter', () => {
});
const session = await fixture.context.runtime.createSession({
cwd: '/workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
diff --git a/packages/cli/src/__tests__/runtime-host-session-driver.test.ts b/packages/cli/src/__tests__/runtime-host-session-driver.test.ts
index 7dda7d111..4671af76c 100644
--- a/packages/cli/src/__tests__/runtime-host-session-driver.test.ts
+++ b/packages/cli/src/__tests__/runtime-host-session-driver.test.ts
@@ -60,7 +60,6 @@ describe('Runtime Host Maka Session driver', () => {
cwd: '/client/workspace',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
- backend: 'ai-sdk',
permissionMode: 'ask',
}),
/requires an explicit Project/,
@@ -92,7 +91,6 @@ describe('Runtime Host Maka Session driver', () => {
await driver.createSession({
cwd: '/repo',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -174,7 +172,6 @@ describe('Runtime Host Maka Session driver', () => {
await driver.createSession({
cwd: '/repo',
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -304,7 +301,6 @@ describe('Runtime Host Maka Session driver', () => {
await driver.createSession({
cwd: candidate.cwd,
...('projectId' in candidate ? { projectId: candidate.projectId } : {}),
- backend: 'ai-sdk',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
permissionMode: 'ask',
@@ -364,7 +360,6 @@ describe('Runtime Host Maka Session driver', () => {
cwd: '/repo',
llmConnectionSlug: 'openai-main',
model: 'gpt-5',
- backend: 'ai-sdk',
permissionMode: 'ask',
});
connection.executionBoundary = { kind: 'bypass', revision: 2 };
diff --git a/packages/cli/src/activation-command.ts b/packages/cli/src/activation-command.ts
index cfa5f194b..fbdb10f24 100644
--- a/packages/cli/src/activation-command.ts
+++ b/packages/cli/src/activation-command.ts
@@ -449,7 +449,6 @@ export async function runMakaActivationCli(
session = await context.runtime.createSession({
cwd: roots.workspaceRoot,
name: `Cloud activation ${request.activationId}`.slice(0, 80),
- backend: 'ai-sdk',
llmConnectionSlug: context.target.connection.slug,
model: context.target.model,
permissionMode: options.permissionMode ?? 'explore',
diff --git a/packages/cli/src/run-command-core.ts b/packages/cli/src/run-command-core.ts
index a47d2881c..e46a5c924 100644
--- a/packages/cli/src/run-command-core.ts
+++ b/packages/cli/src/run-command-core.ts
@@ -314,7 +314,6 @@ export async function runMakaTextCliCore(
: await context.runtime.createSession({
cwd: selection.cwd,
name: makaRunSessionName(prompt),
- backend: 'ai-sdk',
llmConnectionSlug: context.target.connection.slug,
model: context.target.model,
permissionMode: parsed.options.yolo ? 'bypass' : 'ask',
diff --git a/packages/core/src/runtime-inputs.ts b/packages/core/src/runtime-inputs.ts
index 06c249fd6..e7e3281d1 100644
--- a/packages/core/src/runtime-inputs.ts
+++ b/packages/core/src/runtime-inputs.ts
@@ -4,7 +4,6 @@
import type { MessageContent } from './events.js';
import type {
- PersistedBackendKind,
SessionBlockedReason,
SessionStatus,
SessionToolProfile,
@@ -35,7 +34,14 @@ export interface CreateSessionInput {
projectId?: string | null;
/** If omitted, runtime auto-derives a placeholder; users may rename later. */
name?: string;
- backend: PersistedBackendKind;
+ /**
+ * No `backend`: a live build has exactly one, so the field carried no choice
+ * — only the chance of writing the retired `'fake'` into a new row (#3211).
+ * The store stamps every new header instead. Sessions derived from an older
+ * one (branch, revision, subagent) no longer inherit its backend; a copy of a
+ * legacy row is a real session whose connection slug resolves to nothing,
+ * which is what the readiness projection already says about it.
+ */
llmConnectionSlug: string;
/** Falls back to the connection's defaultModel if omitted. */
model?: string;
diff --git a/packages/runtime-host/src/__tests__/artifact-two-client-uds.test.ts b/packages/runtime-host/src/__tests__/artifact-two-client-uds.test.ts
index 2269a2cca..135cfb4bc 100644
--- a/packages/runtime-host/src/__tests__/artifact-two-client-uds.test.ts
+++ b/packages/runtime-host/src/__tests__/artifact-two-client-uds.test.ts
@@ -273,14 +273,12 @@ async function seedExecutionRoot(
stores = await openInteractiveExecutionStoresForWrite(owner.lease);
const session = await stores.sessionStore.create({
cwd: root,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
});
const otherSession = await stores.sessionStore.create({
cwd: root,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime-host/src/__tests__/deep-research-two-client-uds.test.ts b/packages/runtime-host/src/__tests__/deep-research-two-client-uds.test.ts
index 8dbd7b3fb..a85f50ae8 100644
--- a/packages/runtime-host/src/__tests__/deep-research-two-client-uds.test.ts
+++ b/packages/runtime-host/src/__tests__/deep-research-two-client-uds.test.ts
@@ -36,7 +36,6 @@ test('two Clients and a restarted production Host share one Deep Research projec
const deepResearch = await openInteractiveDeepResearchStoreForWrite(owner.lease);
const session = await setupStores.sessionStore.create({
cwd: root,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'explore',
diff --git a/packages/runtime-host/src/__tests__/execution-composition.test.ts b/packages/runtime-host/src/__tests__/execution-composition.test.ts
index cab65c95d..ad6ca2bb1 100644
--- a/packages/runtime-host/src/__tests__/execution-composition.test.ts
+++ b/packages/runtime-host/src/__tests__/execution-composition.test.ts
@@ -4,6 +4,7 @@ import { createRequire } from 'node:module';
import { mkdir, mkdtemp, rm, stat, writeFile } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
+import { DatabaseSync } from 'node:sqlite';
import { test } from 'node:test';
import type {
AgentGraphIntentClaim,
@@ -81,7 +82,6 @@ test('production composition closes long-term memory after a later startup failu
const stores = await openInteractiveExecutionStoresForWrite(owner.lease);
const session = await stores.sessionStore.create({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -121,14 +121,12 @@ test('production recovery preserves legacy Automation history and closes an orph
const stores = await openInteractiveExecutionStoresForWrite(owner.lease);
const historical = await stores.sessionStore.create({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
});
const pending = await stores.sessionStore.create({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -349,7 +347,6 @@ test('production composition commits automatic titles through Host-owned Session
try {
const session = await manager.createSession({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -381,20 +378,16 @@ test('production composition commits automatic titles through Host-owned Session
test('a legacy fake-backend session is refused with the product reason, not a registry error', async () => {
await withCompositionRoot(async ({ root, owner }) => {
- const { composition, manager } = await createCapturedExecutionComposition(owner);
+ // Written by an older build: no creation path here can produce `fake`, so
+ // the row is seeded under the writer — which is the only way it was ever
+ // produced — and then read back by a Host that starts up against it, since
+ // activation dispatches straight off the durable header.
+ const legacyId = await seedLegacyFakeBackendSession(root, owner);
+ const { composition } = await createCapturedExecutionComposition(owner);
try {
- // Written by an older build: this one never produces `fake`, but the
- // durable header survives and activation dispatches straight off it.
- const legacy = await manager.createSession({
- cwd: root,
- backend: 'fake',
- llmConnectionSlug: 'fake',
- model: 'fake-model',
- permissionMode: 'ask',
- });
const failure = await composition.handlers['turn.start'](
{
- sessionId: legacy.id,
+ sessionId: legacyId,
turnId: 'turn-legacy-fake',
content: { text: 'resume a retired local simulation' },
},
@@ -423,7 +416,6 @@ test('production composition orphans ownerless ShellRuns before serving Resource
const stores = await openInteractiveExecutionStoresForWrite(owner.lease);
const session = await stores.sessionStore.create({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -471,7 +463,6 @@ test('production Skill catalog resolves a Graph child durable tool surface', asy
const stores = await openInteractiveExecutionStoresForWrite(owner.lease);
const parent = await stores.sessionStore.create({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -639,7 +630,6 @@ test('Skill capability previews omit unavailable Tavily search surfaces', async
const stores = await openInteractiveExecutionStoresForWrite(owner.lease);
const session = await stores.sessionStore.create({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: connection.slug,
model: 'fake-model',
permissionMode: 'bypass',
@@ -696,7 +686,6 @@ test('production composition validates graph stop before aborting a claimed chil
const claims = createAgentGraphControlStore(root);
const parent = await stores.sessionStore.create({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -900,6 +889,43 @@ function shellRunRecord(
};
}
+/**
+ * Writes one session whose durable header says `backend: 'fake'`.
+ *
+ * Nothing in this build can write that value, so the row goes in underneath the
+ * session writer: create a normal row through the real store, then rewrite the
+ * persisted backend the way an older build left it on disk. The database
+ * filename is `OPERATIONAL_STATE_DATABASE_NAME` in `@maka/storage`, which the
+ * package does not export.
+ */
+async function seedLegacyFakeBackendSession(
+ root: string,
+ owner: InteractiveRootOwner,
+): Promise<string> {
+ const stores = await openInteractiveExecutionStoresForWrite(owner.lease);
+ const { id: sessionId } = await stores.sessionStore.create({
+ cwd: root,
+ llmConnectionSlug: 'fake',
+ model: 'fake-model',
+ permissionMode: 'ask',
+ });
+
+ const legacy = new DatabaseSync(join(root, 'runtime.sqlite'));
+ try {
+ const row = legacy
+ .prepare(`SELECT payload_json FROM session_metadata WHERE session_id = ?`)
+ .get(sessionId) as { payload_json: string };
+ const payload = JSON.parse(row.payload_json) as Record<string, unknown>;
+ payload.backend = 'fake';
+ legacy
+ .prepare(`UPDATE session_metadata SET payload_json = ?, backend = ? WHERE session_id = ?`)
+ .run(JSON.stringify(payload), 'fake', sessionId);
+ } finally {
+ legacy.close();
+ }
+ return sessionId;
+}
+
async function createCapturedExecutionComposition(owner: InteractiveRootOwner): Promise<{
composition: Awaited<ReturnType<typeof createExecutionRuntimeHostComposition>>;
manager: SessionManager;
@@ -939,7 +965,6 @@ async function createClaimedGraphChild(input: {
const child = await input.stores.sessionStore.createSubagent({
cwd: input.root,
name: `Graph operator ${input.suffix}`,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'explore',
diff --git a/packages/runtime-host/src/__tests__/execution-inspect-uds.test.ts b/packages/runtime-host/src/__tests__/execution-inspect-uds.test.ts
index 633dcbad8..b9af046ec 100644
--- a/packages/runtime-host/src/__tests__/execution-inspect-uds.test.ts
+++ b/packages/runtime-host/src/__tests__/execution-inspect-uds.test.ts
@@ -31,7 +31,6 @@ test('a live Host serves Interactive inspection over its real endpoint while ret
const session = await stores.sessionStore.create({
cwd: root,
name: 'Live inspection',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime-host/src/__tests__/execution-model-composition.test.ts b/packages/runtime-host/src/__tests__/execution-model-composition.test.ts
index 450792082..2f6695fcf 100644
--- a/packages/runtime-host/src/__tests__/execution-model-composition.test.ts
+++ b/packages/runtime-host/src/__tests__/execution-model-composition.test.ts
@@ -1059,7 +1059,6 @@ test('production Host executes a canonical ai-sdk Session against a real provide
const execution = await openInteractiveExecutionStoresForWrite(owner.lease);
const session = await execution.sessionStore.create({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: 'hosted-real-provider',
model: MODEL_ID,
permissionMode: 'ask',
@@ -1375,7 +1374,6 @@ test('production Host executes and durably supervises an Agent Graph over a real
const execution = await openInteractiveExecutionStoresForWrite(owner.lease);
const session = await execution.sessionStore.create({
cwd: project,
- backend: 'ai-sdk',
llmConnectionSlug: 'hosted-graph-provider',
model: MODEL_ID,
permissionMode: 'bypass',
@@ -1576,7 +1574,6 @@ test('production Host executes a durable runnable child with an exact tool ceili
const execution = await openInteractiveExecutionStoresForWrite(owner.lease);
const parent = await execution.sessionStore.create({
cwd: project,
- backend: 'ai-sdk',
llmConnectionSlug: 'hosted-child-provider',
model: MODEL_ID,
permissionMode: 'bypass',
@@ -1774,7 +1771,6 @@ test('production Host publishes and retires an implementation child patch', asyn
const execution = await openInteractiveExecutionStoresForWrite(owner.lease);
const parent = await execution.sessionStore.create({
cwd: project,
- backend: 'ai-sdk',
llmConnectionSlug: 'hosted-child-provider',
model: MODEL_ID,
permissionMode: 'bypass',
@@ -2018,7 +2014,6 @@ test('Host auxiliary calls preserve resolved DeepSeek reasoning settings', async
await publishConnectionModel(policy, connection.connectionId, 'deepseek-v4-flash');
const session = await execution.sessionStore.create({
cwd: capability.canonicalPath,
- backend: 'ai-sdk',
llmConnectionSlug: 'deepseek-auxiliary',
model: 'deepseek-v4-flash',
thinkingLevel: 'high',
@@ -2097,7 +2092,6 @@ test('Host auxiliary models meter provider usage and abort physical requests', {
await publishConnectionModel(policy, connection.connectionId, MODEL_ID);
const session = await execution.sessionStore.create({
cwd: capability.canonicalPath,
- backend: 'ai-sdk',
llmConnectionSlug: 'goal-evaluator-provider',
model: MODEL_ID,
permissionMode: 'ask',
diff --git a/packages/runtime-host/src/__tests__/external-session-coordinator.test.ts b/packages/runtime-host/src/__tests__/external-session-coordinator.test.ts
index 1c0d8d2ba..7848588f2 100644
--- a/packages/runtime-host/src/__tests__/external-session-coordinator.test.ts
+++ b/packages/runtime-host/src/__tests__/external-session-coordinator.test.ts
@@ -240,7 +240,6 @@ test('imports through the generic importer and treats repeats as independent cop
fixture.creates.map(({ input, messages, externalOrigin }) => ({
cwd: input.cwd,
name: input.name,
- backend: input.backend,
messageTypes: messages.map(({ type }) => type),
externalOrigin,
})),
@@ -248,14 +247,12 @@ test('imports through the generic importer and treats repeats as independent cop
{
cwd: '/external',
name: 'Source 0',
- backend: 'ai-sdk',
messageTypes: ['user'],
externalOrigin: { adapterId: 'codex', sourceSessionId: 'source-0' },
},
{
cwd: '/external',
name: 'Source 0',
- backend: 'ai-sdk',
messageTypes: ['user'],
externalOrigin: { adapterId: 'codex', sourceSessionId: 'source-0' },
},
@@ -567,7 +564,6 @@ function coordinatorFixture(
defaultCreate(
{
cwd: '/external',
- backend: 'ai-sdk',
llmConnectionSlug: 'default',
model: 'gpt-5',
permissionMode: 'ask',
diff --git a/packages/runtime-host/src/__tests__/fixtures/execution-host-suite.ts b/packages/runtime-host/src/__tests__/fixtures/execution-host-suite.ts
index c22b242dc..ca60aaca7 100644
--- a/packages/runtime-host/src/__tests__/fixtures/execution-host-suite.ts
+++ b/packages/runtime-host/src/__tests__/fixtures/execution-host-suite.ts
@@ -125,7 +125,6 @@ export class ExecutionFixture {
stores = await openInteractiveExecutionStoresForWrite(owner.lease);
const session = await stores.sessionStore.create({
cwd: this.root,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -475,7 +474,6 @@ export class ExecutionFixture {
const child = await stores.sessionStore.createSubagent({
cwd: this.root,
name: `${agentName} ${kind}`,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'explore',
@@ -1025,7 +1023,6 @@ export async function withExecutionRoot(
stores = await openInteractiveExecutionStoresForWrite(owner.lease);
const session = await stores.sessionStore.create({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime-host/src/__tests__/goal-coordinator.test.ts b/packages/runtime-host/src/__tests__/goal-coordinator.test.ts
index 648d4d633..09bf58ef8 100644
--- a/packages/runtime-host/src/__tests__/goal-coordinator.test.ts
+++ b/packages/runtime-host/src/__tests__/goal-coordinator.test.ts
@@ -27,7 +27,6 @@ test('one Host Goal is shared across clients with CAS control and crash-clear re
const goalStore = await openInteractiveGoalAuthorityForWrite(owner.lease);
const session = await stores.sessionStore.create({
cwd: capability.canonicalPath,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -225,7 +224,6 @@ test('session retirement forgets a terminal Goal without recreating deleted auth
try {
const session = await stores.sessionStore.create({
cwd: capability.canonicalPath,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -308,7 +306,6 @@ test('restart settles the durable current Goal execution through Hosted Executio
try {
const session = await stores.sessionStore.create({
cwd: capability.canonicalPath,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -425,7 +422,6 @@ test('restart replaces a stale current execution with the current durable Goal i
try {
const session = await stores.sessionStore.create({
cwd: capability.canonicalPath,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime-host/src/__tests__/goal-root-authority.test.ts b/packages/runtime-host/src/__tests__/goal-root-authority.test.ts
index 8ca97aafb..3f52a6f91 100644
--- a/packages/runtime-host/src/__tests__/goal-root-authority.test.ts
+++ b/packages/runtime-host/src/__tests__/goal-root-authority.test.ts
@@ -521,7 +521,6 @@ async function createFixture(options: { recoverAdmissions?: boolean } = {}): Pro
const goalStore = await openInteractiveGoalAuthorityForWrite(owner.lease);
const session = await stores.sessionStore.create({
cwd: capability.canonicalPath,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -599,7 +598,7 @@ async function createFixture(options: { recoverAdmissions?: boolean } = {}): Pro
onSandboxBoundarySettled: async () => {},
});
const backends = new BackendRegistry();
- backends.register('fake', (context) => new FakeBackend(context));
+ backends.register('ai-sdk', (context) => new FakeBackend(context));
const authority: RuntimeHostedRootAuthority = {
bindRun: (identity) => messages.bindRun(identity),
executeRoot: (input) =>
diff --git a/packages/runtime-host/src/__tests__/interaction-coordinator.test.ts b/packages/runtime-host/src/__tests__/interaction-coordinator.test.ts
index 5169d1786..d30ba09b8 100644
--- a/packages/runtime-host/src/__tests__/interaction-coordinator.test.ts
+++ b/packages/runtime-host/src/__tests__/interaction-coordinator.test.ts
@@ -105,7 +105,6 @@ describe('HostInteractionCoordinator', () => {
await mkdir(workspace);
const session = await stores.sessionStore.create({
cwd: workspace,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -237,7 +236,6 @@ describe('HostInteractionCoordinator', () => {
await mkdir(workspace);
const session = await stores.sessionStore.create({
cwd: workspace,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -309,7 +307,6 @@ describe('HostInteractionCoordinator', () => {
await mkdir(workspace);
const session = await stores.sessionStore.create({
cwd: workspace,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -485,7 +482,6 @@ describe('HostInteractionCoordinator', () => {
await mkdir(workspace);
const session = await stores.sessionStore.create({
cwd: workspace,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime-host/src/__tests__/plan-two-client-uds.test.ts b/packages/runtime-host/src/__tests__/plan-two-client-uds.test.ts
index 00e8f0930..eb28f54f2 100644
--- a/packages/runtime-host/src/__tests__/plan-two-client-uds.test.ts
+++ b/packages/runtime-host/src/__tests__/plan-two-client-uds.test.ts
@@ -37,7 +37,6 @@ test('two Clients and a restarted production Host share one retry-safe Plan auth
const planStore = await openInteractivePlanStoreForWrite(owner.lease);
const session = await setupStores.sessionStore.create({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'explore',
diff --git a/packages/runtime-host/src/__tests__/root-turn-coordinator.test.ts b/packages/runtime-host/src/__tests__/root-turn-coordinator.test.ts
index 739f60973..91c707937 100644
--- a/packages/runtime-host/src/__tests__/root-turn-coordinator.test.ts
+++ b/packages/runtime-host/src/__tests__/root-turn-coordinator.test.ts
@@ -100,7 +100,8 @@ test('prepares a fresh Agent Graph epoch before durable external Turn admission'
let fixture!: FailureFixture;
let cutovers = 0;
fixture = await createFailureFixture({
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
agentGraphEpochs: {
currentGraphId: async (rootSessionId) => agentGraphIdForRootSession(rootSessionId),
beginNextGraphEpoch: async (rootSessionId) => {
@@ -137,7 +138,8 @@ test('prepares a fresh Agent Graph epoch before durable external Turn admission'
test('does not advance a finished graph for an ordinary default Turn', async () => {
let cutovers = 0;
const fixture = await createFailureFixture({
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
agentGraphEpochs: {
currentGraphId: async (rootSessionId) => agentGraphIdForRootSession(rootSessionId),
beginNextGraphEpoch: async (rootSessionId) => {
@@ -168,7 +170,8 @@ test('does not advance a finished graph for an ordinary default Turn', async ()
test('startup recovery replays one admitted safe-boundary continuation without a UserMessage', async () => {
const workspaceIdentity = 'workspace-safe-boundary-recovery';
const fixture = await createFailureFixture({
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
continuationSafety: { workspaceIdentity, availableToolNames: [] },
});
let observer: ReturnType<SessionContinuityCoordinator['attachConnection']> | undefined;
@@ -254,7 +257,8 @@ test('a failed exact Capability retry does not poison the parked continuation bi
}
},
},
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
});
const seedConnection = capabilities.attachConnection(
clientCapabilityConnectionIdentity('provider-seed'),
@@ -395,7 +399,8 @@ test('resume query preserves Session-before-activation lock ordering', async ()
}
},
},
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
});
const connection = capabilities.attachConnection(
clientCapabilityConnectionIdentity('provider-lock-order'),
@@ -455,7 +460,8 @@ test('resume query preserves Session-before-activation lock ordering', async ()
test('turn.start durably applies one exact per-Turn orchestration override', async () => {
const fixture = await createFailureFixture({
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
});
const input = {
sessionId: fixture.sessionId,
@@ -518,7 +524,8 @@ test('turn.start resolves explicit Skills once before durable admission and repl
{ send: async () => {} },
);
const fixture = await createFailureFixture({
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
clientCapabilities: capabilities,
prepareSkillInvocation: async ({ sessionId }): Promise<PreparedSkillInvocationMessage> => {
preparationCount += 1;
@@ -635,7 +642,8 @@ test('turn.start durably replays an all-failed invocation without creating a Tur
],
};
const fixture = await createFailureFixture({
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
prepareSkillInvocation: async (): Promise<PreparedSkillInvocationMessage> => {
preparationCount += 1;
return { disposition: 'blocked', skillInvocation };
@@ -669,7 +677,8 @@ test('turn.start durably replays an all-failed invocation without creating a Tur
test('idle turn.message.submit applies hosted Skill preparation before durable admission', async () => {
let preparationCount = 0;
const fixture = await createFailureFixture({
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
prepareSkillInvocation: async (): Promise<PreparedSkillInvocationMessage> => {
preparationCount += 1;
return {
@@ -734,7 +743,8 @@ test('turn.start rejects oversized preparation before admission and preserves no
let preparationCount = 0;
let preparation: 'blocked' | 'oversized_content' | 'oversized_feedback' = 'blocked';
const fixture = await createFailureFixture({
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
prepareSkillInvocation: async () => {
preparationCount += 1;
if (preparation === 'blocked') {
@@ -859,7 +869,8 @@ test('turn.start rejects oversized preparation before admission and preserves no
test('turn.start admits only canonical live Session Artifact attachments', async () => {
const fixture = await createFailureFixture({
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
withArtifacts: true,
});
try {
@@ -989,13 +1000,13 @@ test('safe-boundary continuation safety identity uses the exact canonical tool c
test('linked child Sessions reject public safe-boundary continuation', async () => {
let recoveryCoordinator: RootTurnCoordinator | undefined;
const fixture = await createFailureFixture({
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
});
try {
const parent = await fixture.stores.sessionStore.readHeaderSnapshot(fixture.sessionId);
const { header: child } = await fixture.stores.sessionStore.createSubagent({
cwd: parent.cwd,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'execute',
@@ -1121,7 +1132,7 @@ test('worktree child Sessions reject roots outside managed child execution', asy
let recoveryCoordinator: RootTurnCoordinator | undefined;
const fixture = await createFailureFixture({
registerBackend: (backends) =>
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new LinkedChildAuthorityBackend(context.sessionId);
return backend;
}),
@@ -1139,7 +1150,6 @@ test('worktree child Sessions reject roots outside managed child execution', asy
try {
const { header: child } = await fixture.stores.sessionStore.createSubagent({
cwd: binding.worktreePath,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'execute',
@@ -1304,7 +1314,7 @@ test('Agent Graph supervisor stop owns only graph-capable root Turns', async ()
let backend: LinkedChildAuthorityBackend | undefined;
const fixture = await createFailureFixture({
registerBackend: (backends) =>
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new LinkedChildAuthorityBackend(context.sessionId);
return backend;
}),
@@ -1367,7 +1377,7 @@ test('Agent Graph supervisor stop rejects a stale graph identity inside session
let currentGraphId = 'graph-before-rollover';
const fixture = await createFailureFixture({
registerBackend: (backends) =>
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new LinkedChildAuthorityBackend(context.sessionId);
return backend;
}),
@@ -1419,7 +1429,7 @@ test('Agent Graph supervisor stop owns a graph safe-boundary continuation', asyn
const fixture = await createFailureFixture({
continuationSafety: { workspaceIdentity, availableToolNames: [] },
registerBackend: (backends) =>
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new BlockingRootBackend(context.sessionId);
return backend;
}),
@@ -1457,7 +1467,7 @@ test('Agent Graph supervisor wake waits for root idle and binds one durable exec
let backend: LinkedChildAuthorityBackend | undefined;
const fixture = await createFailureFixture({
registerBackend: (backends) =>
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new LinkedChildAuthorityBackend(context.sessionId);
return backend;
}),
@@ -1551,7 +1561,7 @@ test('Agent Graph supervisor wake waits for root idle and binds one durable exec
test('Agent Graph supervisor wake preserves structured context-overflow outcomes', async () => {
const fixture = await createFailureFixture({
registerBackend: (backends) =>
- backends.register('fake', (context) => new ContextFailureBackend(context.sessionId)),
+ backends.register('ai-sdk', (context) => new ContextFailureBackend(context.sessionId)),
});
const graphId = agentGraphIdForRootSession(fixture.sessionId);
try {
@@ -1595,7 +1605,7 @@ test('Agent Graph context recovery fences competing root turns while compaction
let backend: BlockingContextRecoveryBackend | undefined;
const fixture = await createFailureFixture({
registerBackend: (backends) =>
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new BlockingContextRecoveryBackend(context.sessionId);
return backend;
}),
@@ -1654,7 +1664,7 @@ test('manual context compact uses durable root query, stop, and exact retry auth
let backend: BlockingContextRecoveryBackend | undefined;
const fixture = await createFailureFixture({
registerBackend: (backends) =>
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new BlockingContextRecoveryBackend(context.sessionId);
return backend;
}),
@@ -1727,7 +1737,7 @@ test('startup recovery replays an admitted context compact with its exact Run id
let backend: BlockingContextRecoveryBackend | undefined;
const fixture = await createFailureFixture({
registerBackend: (backends) =>
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new BlockingContextRecoveryBackend(context.sessionId);
return backend;
}),
@@ -1785,7 +1795,7 @@ test('Agent Graph context recovery abort stops compaction and releases Host clos
let backend: BlockingContextRecoveryBackend | undefined;
const fixture = await createFailureFixture({
registerBackend: (backends) =>
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new BlockingContextRecoveryBackend(context.sessionId);
return backend;
}),
@@ -1823,7 +1833,7 @@ test('Agent Graph context recovery waits for a confirmed follow-up root', async
let backend: GraphFollowupRecoveryBackend | undefined;
const fixture = await createFailureFixture({
registerBackend: (backends) =>
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new GraphFollowupRecoveryBackend(context.sessionId);
return backend;
}),
@@ -1894,7 +1904,8 @@ test('Agent Graph context recovery waits for a confirmed follow-up root', async
test('Agent Graph supervisor wake revalidates freshness before durable root admission', async () => {
const fixture = await createFailureFixture({
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
});
const graphId = agentGraphIdForRootSession(fixture.sessionId);
const turnId = 'turn-stale-graph-supervisor-wake';
@@ -1937,7 +1948,8 @@ test('Agent Graph supervisor wake revalidates freshness before durable root admi
test('Agent Graph supervisor recovery closes a durable admission that has no Run', async () => {
const fixture = await createFailureFixture({
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
});
const graphId = agentGraphIdForRootSession(fixture.sessionId);
const wakeId = `${graphId}:snapshot-recovery`;
@@ -2007,7 +2019,8 @@ test('Agent Graph supervisor recovery closes a durable admission that has no Run
test('hosted root target unavailability is retryable without poisoning the Host', async () => {
const fixture = await createFailureFixture({
- registerBackend: (backends) => backends.register('fake', (context) => new FakeBackend(context)),
+ registerBackend: (backends) =>
+ backends.register('ai-sdk', (context) => new FakeBackend(context)),
});
try {
await assert.rejects(
@@ -2047,7 +2060,6 @@ test('hosted linked child roots share admission, message, terminal, and stop aut
const stores = await openInteractiveExecutionStoresForWrite(owner.lease);
const parent = await stores.sessionStore.create({
cwd: capability.canonicalPath,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -2147,7 +2159,7 @@ test('hosted linked child roots share admission, message, terminal, and stop aut
};
const backends = new BackendRegistry();
const linkedBackends = new Map<string, LinkedChildAuthorityBackend>();
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
if (!context.header.subagentRuntime) {
return new QuestionWaitingBackend(context.sessionId);
}
@@ -2653,7 +2665,7 @@ test('pre-bind startup failure fail-stops without orphaning an admitted queued M
const releaseBackendFactory = deferred<void>();
const fixture = await createFailureFixture({
registerBackend: (backends) => {
- backends.register('fake', async () => {
+ backends.register('ai-sdk', async () => {
backendFactoryEntered.resolve();
await releaseBackendFactory.promise;
throw new Error('injected backend startup failure');
@@ -2751,7 +2763,7 @@ test('successor admission failure retains the terminal transition and its confir
let backend: LinkedChildAuthorityBackend | undefined;
const fixture = await createFailureFixture({
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new LinkedChildAuthorityBackend(context.sessionId);
return backend;
});
@@ -2878,7 +2890,7 @@ test('shutdown contains a successor backend start rejected by Interaction drain'
store.listRootTurnAdmissionsForRecovery(sessionId),
}),
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new LinkedChildAuthorityBackend(context.sessionId);
return backend;
});
@@ -2968,7 +2980,7 @@ test('Client Capability ambiguity fails before durable root admission', async ()
const fixture = await createFailureFixture({
clientCapabilities,
registerBackend: (backends) => {
- backends.register('fake', (context) => new FakeBackend(context));
+ backends.register('ai-sdk', (context) => new FakeBackend(context));
},
});
const first = clientCapabilities.attachConnection(
@@ -3048,7 +3060,7 @@ test('an exact active retry preserves the Client Capability admission binding',
const fixture = await createFailureFixture({
clientCapabilities,
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new LinkedChildAuthorityBackend(context.sessionId);
return backend;
});
@@ -3143,7 +3155,7 @@ test('mixed-Client queued follow-ups preserve each submitting connection through
const fixture = await createFailureFixture({
clientCapabilities,
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new LinkedChildAuthorityBackend(context.sessionId);
return backend;
});
@@ -3288,7 +3300,7 @@ async function assertFollowupCapabilityRebinding(affinity: 'call' | 'turn'): Pro
const fixture = await createFailureFixture({
clientCapabilities,
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new LinkedChildAuthorityBackend(context.sessionId);
return backend;
});
@@ -3479,7 +3491,7 @@ test('an exact terminal retry does not require a live Client Capability binding'
const fixture = await createFailureFixture({
clientCapabilities,
registerBackend: (backends) => {
- backends.register('fake', (context) => new FakeBackend(context));
+ backends.register('ai-sdk', (context) => new FakeBackend(context));
},
});
const provider = clientCapabilities.attachConnection(
@@ -3571,7 +3583,7 @@ test('turn.start returns a published fast terminal before backend iterator clean
let backend: TerminalThenCleanupBackend | undefined;
const fixture = await createFailureFixture({
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new TerminalThenCleanupBackend(context.sessionId);
return backend;
});
@@ -3629,7 +3641,7 @@ test('public turn.stop rejects an admission queued behind its exact-Run closure
const fixture = await createFailureFixture({
withInteractions: true,
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new QueuedAdmissionBackend(context.sessionId);
return backend;
});
@@ -3704,7 +3716,7 @@ test('public turn.interrupt contains a question admission rejected by its own st
const fixture = await createFailureFixture({
withInteractions: true,
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new StopReleasedAdmissionBackend(context.sessionId);
return backend;
});
@@ -3759,7 +3771,7 @@ test('public turn.interrupt releases the Session lane while a queried Run is sti
const fixture = await createFailureFixture({
withInteractions: true,
registerBackend: (backends) => {
- backends.register('fake', async (context) => {
+ backends.register('ai-sdk', async (context) => {
backendFactoryEntered.resolve();
return await new Promise<never>((_resolve, reject) => {
const abort = () => {
@@ -3849,7 +3861,7 @@ test('Runtime stop lets a running admission publish before its exact-Run closure
await releasePreflight.promise;
},
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new RunningAdmissionBackend(context.sessionId);
return backend;
});
@@ -3904,7 +3916,7 @@ test('post-start backend failure closes its owner without draining an unrelated
const fixture = await createFailureFixture({
withInteractions: true,
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
if (context.sessionId !== failingSessionId) {
unrelatedBackend = new LinkedChildAuthorityBackend(context.sessionId);
return unrelatedBackend;
@@ -3920,7 +3932,6 @@ test('post-start backend failure closes its owner without draining an unrelated
try {
const unrelatedSession = await fixture.stores.sessionStore.create({
cwd: '/tmp/unrelated-active-root',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -4012,7 +4023,7 @@ test('claimed graph backend failure is contained after its failed terminal trans
const fixture = await createFailureFixture({
withInteractions: true,
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new AdmissionThenFailureBackend(context.sessionId);
backendReady.resolve(backend);
return backend;
@@ -4070,7 +4081,7 @@ test('failed claimed graph Run identity mismatch drains instead of being contain
const fixture = await createFailureFixture({
withInteractions: true,
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new AdmissionThenFailureBackend(context.sessionId);
return backend;
});
@@ -4119,7 +4130,7 @@ test('post-start backend AggregateError is contained after its failed terminal t
const fixture = await createFailureFixture({
withInteractions: true,
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new AdmissionThenFailureBackend(context.sessionId, aggregateFailure);
return backend;
});
@@ -4192,7 +4203,7 @@ test('post-start message owner cleanup failure drains after its failed terminal
const cleanupFailure = new Error('message owner release failed');
const fixture = await createFailureFixture({
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new LinkedChildAuthorityBackend(context.sessionId);
return backend;
});
@@ -4257,7 +4268,7 @@ test('public turn.stop wins the Session lane before a wire answer for the same R
const fixture = await createFailureFixture({
withInteractions: true,
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new PendingQuestionBackend(context.sessionId);
return backend;
});
@@ -4337,7 +4348,7 @@ test('public turn.stop takes over an earlier closure claim queued behind its lea
const fixture = await createFailureFixture({
withInteractions: true,
registerBackend: (backends) => {
- backends.register('fake', (context) => {
+ backends.register('ai-sdk', (context) => {
backend = new TakeoverClosureBackend(context.sessionId);
return backend;
});
@@ -4656,7 +4667,6 @@ async function createFailureFixture(options: {
await artifacts?.recover();
const session = await stores.sessionStore.create({
cwd: capability.canonicalPath,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -4957,7 +4967,7 @@ async function waitUntil(
}
class LinkedChildAuthorityBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly externalHoldStarted = deferred<void>();
readonly questionStarted = deferred<void>();
sendCount = 0;
@@ -5052,7 +5062,7 @@ class LinkedChildAuthorityBackend implements AgentBackend {
}
class BlockingRootBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly started = deferred<void>();
readonly #released = deferred<void>();
stopCount = 0;
@@ -5088,7 +5098,7 @@ class BlockingRootBackend implements AgentBackend {
}
class ContextFailureBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
constructor(readonly sessionId: string) {}
@@ -5128,7 +5138,7 @@ class ContextFailureBackend implements AgentBackend {
}
class BlockingContextRecoveryBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly compactStarted = deferred<void>();
readonly #compactReleased = deferred<void>();
compactInput: BackendCompactHistoryInput | undefined;
@@ -5168,7 +5178,7 @@ class BlockingContextRecoveryBackend implements AgentBackend {
}
class GraphFollowupRecoveryBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly graphTurnStarted = deferred<void>();
readonly followupStarted = deferred<void>();
readonly compactStarted = deferred<void>();
@@ -5246,7 +5256,7 @@ class GraphFollowupRecoveryBackend implements AgentBackend {
}
class QueuedAdmissionBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly readyForAdmission = deferred<void>();
readonly admissionQueued = deferred<void>();
readonly admissionFailure = deferred<unknown>();
@@ -5328,7 +5338,7 @@ class QueuedAdmissionBackend implements AgentBackend {
}
class StopReleasedAdmissionBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly ready = deferred<void>();
private readonly stopped = deferred<void>();
@@ -5383,7 +5393,7 @@ class StopReleasedAdmissionBackend implements AgentBackend {
}
class RunningAdmissionBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly admitted = deferred<void>();
readonly stopRequested = deferred<void>();
readonly closureReasons: string[] = [];
@@ -5456,7 +5466,7 @@ class RunningAdmissionBackend implements AgentBackend {
}
class AdmissionThenFailureBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly admitted = deferred<void>();
readonly closureReasons: string[] = [];
private readonly fail = deferred<void>();
@@ -5512,7 +5522,7 @@ class AdmissionThenFailureBackend implements AgentBackend {
}
class TerminalThenCleanupBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
cleanupReleased = false;
private readonly cleanup = deferred<void>();
@@ -5544,7 +5554,7 @@ class TerminalThenCleanupBackend implements AgentBackend {
}
class PendingQuestionBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly pendingRequest = deferred<string>();
readonly closureReasons: string[] = [];
answerApplications = 0;
@@ -5615,7 +5625,7 @@ class PendingQuestionBackend implements AgentBackend {
}
class TakeoverClosureBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sendStarted = deferred<void>();
readonly stopStarted = deferred<void>();
private readonly sendReleased = deferred<void>();
@@ -5665,7 +5675,7 @@ class TakeoverClosureBackend implements AgentBackend {
}
class QuestionWaitingBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
private stopped = false;
private resolveAnswer: ((answers: readonly (string | null)[] | null) => void) | undefined;
private releaseAfterAnswer: (() => void) | undefined;
diff --git a/packages/runtime-host/src/__tests__/runtime-policy-coordinator.test.ts b/packages/runtime-host/src/__tests__/runtime-policy-coordinator.test.ts
index 5f01fe125..3f67ec5cb 100644
--- a/packages/runtime-host/src/__tests__/runtime-policy-coordinator.test.ts
+++ b/packages/runtime-host/src/__tests__/runtime-policy-coordinator.test.ts
@@ -105,7 +105,6 @@ test('production composition shares one gate across mutation and backend activat
const setupStores = await openInteractiveExecutionStoresForWrite(owner.lease);
const session = await setupStores.sessionStore.create({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -209,7 +208,6 @@ test('production mutation releases the gate before active-turn backend disposal
const setupStores = await openInteractiveExecutionStoresForWrite(owner.lease);
const session = await setupStores.sessionStore.create({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -310,7 +308,6 @@ test('production policy mutation drains and poisons activation when cached backe
const setupStores = await openInteractiveExecutionStoresForWrite(owner.lease);
const session = await setupStores.sessionStore.create({
cwd: root,
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime-host/src/__tests__/session-catalog-two-client-uds.test.ts b/packages/runtime-host/src/__tests__/session-catalog-two-client-uds.test.ts
index 414df2ca4..12dd3d53b 100644
--- a/packages/runtime-host/src/__tests__/session-catalog-two-client-uds.test.ts
+++ b/packages/runtime-host/src/__tests__/session-catalog-two-client-uds.test.ts
@@ -714,7 +714,6 @@ async function seedAuthority(
const execution = await openInteractiveExecutionStoresForWrite(owner.lease);
const unread = await execution.sessionStore.create({
cwd: root,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -751,7 +750,6 @@ async function seedAuthority(
'visible',
...Array.from({ length: 700 }, (_, index) => `label-${index}`),
],
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -759,7 +757,6 @@ async function seedAuthority(
const oversized = await execution.sessionStore.create({
cwd: root,
projectId: 'p'.repeat(257),
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -767,7 +764,6 @@ async function seedAuthority(
const retirement = await execution.sessionStore.create({
cwd: root,
name: 'Retirement sidecars',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -775,7 +771,6 @@ async function seedAuthority(
const recovery = await execution.sessionStore.create({
cwd: root,
name: 'Retirement recovery',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime-host/src/__tests__/session-retirement-coordinator.test.ts b/packages/runtime-host/src/__tests__/session-retirement-coordinator.test.ts
index 471eed495..08ded21cf 100644
--- a/packages/runtime-host/src/__tests__/session-retirement-coordinator.test.ts
+++ b/packages/runtime-host/src/__tests__/session-retirement-coordinator.test.ts
@@ -1237,7 +1237,6 @@ function sessionInput(
): CreateSessionInput {
return {
cwd: '/workspace',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime-host/src/__tests__/session-revision-two-client-uds.test.ts b/packages/runtime-host/src/__tests__/session-revision-two-client-uds.test.ts
index 68021f80b..7fcc8ee97 100644
--- a/packages/runtime-host/src/__tests__/session-revision-two-client-uds.test.ts
+++ b/packages/runtime-host/src/__tests__/session-revision-two-client-uds.test.ts
@@ -584,7 +584,6 @@ async function seedSource(
const source = await execution.sessionStore.create({
cwd: root,
name: 'Source Session',
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -592,7 +591,6 @@ async function seedSource(
const busy = await execution.sessionStore.create({
cwd: root,
name: 'Busy Session',
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -600,7 +598,6 @@ async function seedSource(
const linkedChildSource = await execution.sessionStore.create({
cwd: root,
name: 'Linked Child Source Session',
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -608,7 +605,6 @@ async function seedSource(
const metadataLinkedSource = await execution.sessionStore.create({
cwd: root,
name: 'Metadata-linked Source Session',
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -616,7 +612,6 @@ async function seedSource(
const archivedOwnedSource = await execution.sessionStore.create({
cwd: root,
name: 'Archived-owned Source Session',
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -624,7 +619,6 @@ async function seedSource(
const continuationSource = await execution.sessionStore.create({
cwd: root,
name: 'Continuation Source Session',
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -894,7 +888,6 @@ async function seedSource(
{
cwd: root,
name: 'Graph Worker',
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -1132,7 +1125,6 @@ async function seedSource(
const ordinaryLinkedChild = await execution.sessionStore.createSubagent({
cwd: root,
name: 'Metadata-linked Child Session',
- backend: 'ai-sdk',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime-host/src/__tests__/session-transcript-reader.test.ts b/packages/runtime-host/src/__tests__/session-transcript-reader.test.ts
index c5f9a79fc..d4ee4998b 100644
--- a/packages/runtime-host/src/__tests__/session-transcript-reader.test.ts
+++ b/packages/runtime-host/src/__tests__/session-transcript-reader.test.ts
@@ -25,7 +25,6 @@ test('keeps durable history separate from the canonical active overlay', async (
const stores = await openInteractiveExecutionStoresForWrite(owner.lease);
const session = await stores.sessionStore.create({
cwd: capability.canonicalPath,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime-host/src/server/session-catalog-coordinator.ts b/packages/runtime-host/src/server/session-catalog-coordinator.ts
index 7c1383d99..fe3cc1b43 100644
--- a/packages/runtime-host/src/server/session-catalog-coordinator.ts
+++ b/packages/runtime-host/src/server/session-catalog-coordinator.ts
@@ -161,7 +161,6 @@ export class HostSessionCatalogCoordinator {
this.#readRuntimePolicy(),
]);
return {
- backend: 'ai-sdk',
llmConnectionSlug: model.connectionSlug,
model: model.model,
permissionMode: policy.policy.chatDefaults.permissionMode,
@@ -346,7 +345,6 @@ export class HostSessionCatalogCoordinator {
...(workspace.projectId === null ? {} : { projectId: workspace.projectId }),
name: prepared.name,
labels: [...prepared.labels],
- backend: 'ai-sdk',
llmConnectionSlug: model.connectionSlug,
model: model.model,
...(input.thinkingLevel === undefined ? {} : { thinkingLevel: input.thinkingLevel }),
diff --git a/packages/runtime-host/src/server/session-revision-coordinator.ts b/packages/runtime-host/src/server/session-revision-coordinator.ts
index e9282ea7f..280915a6c 100644
--- a/packages/runtime-host/src/server/session-revision-coordinator.ts
+++ b/packages/runtime-host/src/server/session-revision-coordinator.ts
@@ -552,7 +552,6 @@ export class HostSessionRevisionCoordinator {
const common: ConversationCopyCreateInput = {
cwd: source.cwd,
...(source.projectId !== undefined ? { projectId: source.projectId } : {}),
- backend: source.backend,
llmConnectionSlug: source.llmConnectionSlug,
model: source.model,
...(source.thinkingLevel !== undefined ? { thinkingLevel: source.thinkingLevel } : {}),
diff --git a/packages/runtime/src/__tests__/agent-run-steering-recovery.test.ts b/packages/runtime/src/__tests__/agent-run-steering-recovery.test.ts
index 06bc6812d..0da6eaff2 100644
--- a/packages/runtime/src/__tests__/agent-run-steering-recovery.test.ts
+++ b/packages/runtime/src/__tests__/agent-run-steering-recovery.test.ts
@@ -21,7 +21,6 @@ test('rejects an invalid tool mode before a durable AgentRun can be created', as
const store = createSessionStore(root);
const session = await store.create({
cwd: '/tmp/cwd',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -65,7 +64,6 @@ test('does not re-append atomically committed tool facts through the generic eve
const store = createSessionStore(root);
const session = await store.create({
cwd: '/tmp/cwd',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -140,7 +138,6 @@ test('acks a steering event whose canonical append preceded proof publication fa
const store = createSessionStore(root);
const session = await store.create({
cwd: '/tmp/cwd',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -218,7 +215,6 @@ test('materializes a durable steering event into the transcript exactly once', a
const store = createSessionStore(root);
const session = await store.create({
cwd: '/tmp/cwd',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -298,7 +294,6 @@ test('recovers a steering transcript message from the committed RuntimeEvent led
const store = createSessionStore(root);
const session = await store.create({
cwd: '/tmp/cwd',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -387,7 +382,6 @@ test('awaits canonical Run status persistence before accepting an interaction re
const store = createSessionStore(root);
const session = await store.create({
cwd: '/tmp/cwd',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -490,7 +484,6 @@ test('required interaction resume recovers a failed best-effort Run Store latch
const store = createSessionStore(root);
const session = await store.create({
cwd: '/tmp/cwd',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -605,7 +598,6 @@ test('required interaction resume stays fail-closed until a later required write
const store = createSessionStore(root);
const session = await store.create({
cwd: '/tmp/cwd',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime/src/__tests__/execution-inspect.test.ts b/packages/runtime/src/__tests__/execution-inspect.test.ts
index 61e12bb2c..cf4e4b310 100644
--- a/packages/runtime/src/__tests__/execution-inspect.test.ts
+++ b/packages/runtime/src/__tests__/execution-inspect.test.ts
@@ -22,7 +22,6 @@ describe('versioned execution inspect documents', () => {
const runtimeStore = createWorkspaceRuntimeStore(root);
const session = await sessionStore.create({
cwd: '/tmp/workspace',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime/src/__tests__/latest-context-commit.test.ts b/packages/runtime/src/__tests__/latest-context-commit.test.ts
index ecff35ce0..96c41bcdb 100644
--- a/packages/runtime/src/__tests__/latest-context-commit.test.ts
+++ b/packages/runtime/src/__tests__/latest-context-commit.test.ts
@@ -44,7 +44,7 @@ test('a real send seals its row all the way into SQLite, with nothing injected',
let clock = 1_000;
const now = () => (clock += 1);
- backends.register('fake', (ctx) =>
+ backends.register('ai-sdk', (ctx) =>
createTestAiSdkBackend({
sessionId: ctx.sessionId,
header: ctx.header,
@@ -79,7 +79,6 @@ test('a real send seals its row all the way into SQLite, with nothing injected',
});
const session = await manager.createSession({
cwd: root,
- backend: 'fake',
llmConnectionSlug: 'mock-main',
permissionMode: 'bypass',
});
diff --git a/packages/runtime/src/__tests__/runtime-continuation-crash.test.ts b/packages/runtime/src/__tests__/runtime-continuation-crash.test.ts
index 013f97437..0a6975708 100644
--- a/packages/runtime/src/__tests__/runtime-continuation-crash.test.ts
+++ b/packages/runtime/src/__tests__/runtime-continuation-crash.test.ts
@@ -135,7 +135,7 @@ async function runCrashChild(): Promise<void> {
const runtimeEventStore = createCrashRuntimeStore(workspaceRoot);
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new FakeBackend({
sessionId: ctx.sessionId,
@@ -173,7 +173,6 @@ async function runCrashChild(): Promise<void> {
});
const session = await manager.createSession({
cwd: workspaceRoot,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'execute',
@@ -229,7 +228,7 @@ function createManager(workspaceRoot: string): {
const runtimeEventStore = createCrashRuntimeStore(workspaceRoot);
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new FakeBackend({
sessionId: ctx.sessionId,
diff --git a/packages/runtime/src/__tests__/runtime-kernel-interaction.test.ts b/packages/runtime/src/__tests__/runtime-kernel-interaction.test.ts
index c8dbbabcd..b1461b342 100644
--- a/packages/runtime/src/__tests__/runtime-kernel-interaction.test.ts
+++ b/packages/runtime/src/__tests__/runtime-kernel-interaction.test.ts
@@ -25,7 +25,7 @@ describe('RuntimeKernel Interaction close cleanup', () => {
const updateHeader = store.updateHeader;
const backends = new BackendRegistry();
const backend = new BlockingBackend(SESSION_ID, {});
- backends.register('fake', () => backend);
+ backends.register('ai-sdk', () => backend);
const startupFailure = new Error('mark running rejected after reservation');
let stoppedFailure: Promise<unknown> | undefined;
let kernel!: RuntimeKernel;
@@ -63,7 +63,7 @@ describe('RuntimeKernel Interaction close cleanup', () => {
const store = memoryStore();
const backends = new BackendRegistry();
const backend = new BlockingBackend(SESSION_ID, {});
- backends.register('fake', () => backend);
+ backends.register('ai-sdk', () => backend);
const closeFailure = new Error('bind-race close rejected');
const closeStarted = deferred<void>();
const releaseClose = deferred<void>();
@@ -261,7 +261,7 @@ describe('RuntimeKernel Interaction close cleanup', () => {
releaseSendOnStop: false,
releaseSendOnDispose: false,
});
- backends.register('fake', () => backend);
+ backends.register('ai-sdk', () => backend);
const secondReserved = deferred<void>();
const releaseSecond = deferred<void>();
let reservations = 0;
@@ -311,7 +311,7 @@ describe('RuntimeKernel Interaction close cleanup', () => {
const store = memoryStore();
const backends = new BackendRegistry();
const built: BlockingBackend[] = [];
- backends.register('fake', () => {
+ backends.register('ai-sdk', () => {
const backend = new BlockingBackend(
SESSION_ID,
built.length === 0
@@ -380,7 +380,7 @@ describe('RuntimeKernel Interaction close cleanup', () => {
const built: BlockingBackend[] = [];
const stopFailure = new Error('backend stop failed');
const disposeFailure = new Error('backend disposal failed');
- backends.register('fake', () => {
+ backends.register('ai-sdk', () => {
const backend = new BlockingBackend(SESSION_ID, {
stopFailure,
disposeFailure,
@@ -447,7 +447,7 @@ function runtimeFixture(options: RuntimeFixtureOptions = {}): {
const store = memoryStore();
const backends = new BackendRegistry();
const backend = new BlockingBackend(SESSION_ID, options);
- backends.register('fake', () => backend);
+ backends.register('ai-sdk', () => backend);
const closeFailure = new Error('durable close rejected');
let markCloseStarted!: () => void;
const closeStarted = new Promise<void>((resolve) => {
@@ -510,7 +510,7 @@ function runtimeFixture(options: RuntimeFixtureOptions = {}): {
}
class BlockingBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly stopCalls: Array<{
reason: 'user_stop' | 'redirect';
mode: BackendStopMode | undefined;
@@ -610,7 +610,7 @@ function memoryStore(): SessionStore {
status: 'active',
statusUpdatedAt: 1,
hasUnread: false,
- backend: 'fake',
+ backend: 'ai-sdk',
llmConnectionSlug: 'test',
connectionLocked: true,
model: 'test',
diff --git a/packages/runtime/src/__tests__/runtime-ledger-repair.test.ts b/packages/runtime/src/__tests__/runtime-ledger-repair.test.ts
index 8f5d0312a..d3903ed1f 100644
--- a/packages/runtime/src/__tests__/runtime-ledger-repair.test.ts
+++ b/packages/runtime/src/__tests__/runtime-ledger-repair.test.ts
@@ -70,7 +70,6 @@ test('repairs imported transcript turns into provider-neutral canonical history'
const session = await sessions.createImportedSession(
{
cwd: '/repo',
- backend: 'fake',
llmConnectionSlug: 'deepseek',
model: 'deepseek-v4-flash',
permissionMode: 'ask',
diff --git a/packages/runtime/src/__tests__/sandbox-boundary-restart-recovery.test.ts b/packages/runtime/src/__tests__/sandbox-boundary-restart-recovery.test.ts
index 77eff8a38..69357e17b 100644
--- a/packages/runtime/src/__tests__/sandbox-boundary-restart-recovery.test.ts
+++ b/packages/runtime/src/__tests__/sandbox-boundary-restart-recovery.test.ts
@@ -232,7 +232,6 @@ function runEvent(sessionId: string): EmittedAgentRunEvent {
function sessionInput(cwd: string): CreateSessionInput {
return {
cwd,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime/src/__tests__/session-manager-terminal-ledger.test.ts b/packages/runtime/src/__tests__/session-manager-terminal-ledger.test.ts
index ea88125ed..bf484a033 100644
--- a/packages/runtime/src/__tests__/session-manager-terminal-ledger.test.ts
+++ b/packages/runtime/src/__tests__/session-manager-terminal-ledger.test.ts
@@ -220,7 +220,7 @@ describe('SessionManager terminal ledger invariants', () => {
const runStore = new TinyAgentRunStore();
const backends = new BackendRegistry();
let backend: StopDuringSendBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new StopDuringSendBackend(ctx);
return backend;
});
@@ -264,7 +264,7 @@ describe('SessionManager terminal ledger invariants', () => {
const store = new TinySessionStore();
const runStore = new TinyAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new NeverEndingBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new NeverEndingBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -305,7 +305,7 @@ describe('SessionManager terminal ledger invariants', () => {
},
});
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new NeverEndingBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new NeverEndingBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -338,7 +338,7 @@ describe('SessionManager terminal ledger invariants', () => {
const store = new TinySessionStore();
const runStore = new TinyAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new NeverEndingBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new NeverEndingBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -378,7 +378,7 @@ describe('SessionManager terminal ledger invariants', () => {
});
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new ScriptBackend(ctx, [{ type: 'complete', stopReason: 'step_limit' }]),
);
const manager = new SessionManager({
@@ -2137,7 +2137,7 @@ async function makeHarness(
const store = options.store ?? new TinySessionStore();
const runStore = new TinyAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new ScriptBackend(ctx, events));
+ backends.register('ai-sdk', (ctx) => new ScriptBackend(ctx, events));
const manager = new SessionManager({
store,
runStore,
@@ -2152,7 +2152,7 @@ async function makeHarness(
}
class ScriptBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(
@@ -2181,7 +2181,7 @@ class ScriptBackend implements AgentBackend {
}
class StopDuringSendBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
private readonly stopStarted = deferred<void>();
private readonly stopReturned = deferred<void>();
@@ -2228,7 +2228,7 @@ class StopDuringSendBackend implements AgentBackend {
* can finalize the run.
*/
class NeverEndingBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(ctx: BackendFactoryContext) {
@@ -2282,7 +2282,7 @@ class TinySessionStore implements SessionStore {
...(input.parentSessionId ? { parentSessionId: input.parentSessionId } : {}),
...(input.branchOfTurnId ? { branchOfTurnId: input.branchOfTurnId } : {}),
hasUnread: false,
- backend: input.backend,
+ backend: 'ai-sdk',
llmConnectionSlug: input.llmConnectionSlug,
connectionLocked: false,
model: input.model ?? 'fake-model',
@@ -2565,7 +2565,6 @@ class BatchingRuntimeEventStore implements RuntimeEventStore {
function makeInput(overrides: Partial<CreateSessionInput> = {}): CreateSessionInput {
return {
cwd: '/tmp/cwd',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime/src/__tests__/session-manager.test.ts b/packages/runtime/src/__tests__/session-manager.test.ts
index 2835b575b..be00dd12f 100644
--- a/packages/runtime/src/__tests__/session-manager.test.ts
+++ b/packages/runtime/src/__tests__/session-manager.test.ts
@@ -446,7 +446,7 @@ describe('SessionManager graph operator provisioning', () => {
const runStore = new MemoryAgentRunStore();
const parentGate = makeGate();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx, parentGate));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx, parentGate));
const manager = new SessionManager({
store,
runStore,
@@ -1106,7 +1106,7 @@ describe('SessionManager claimed graph intent execution', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backendBuilds = 0;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backendBuilds += 1;
return new TestBackend(ctx);
});
@@ -1138,7 +1138,7 @@ describe('SessionManager claimed graph intent execution', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const executions: Parameters<RuntimeHostedRootAuthority['executeRoot']>[0][] = [];
const authority = hostedRootAuthority();
authority.executeRoot = async (input) => {
@@ -1232,7 +1232,7 @@ describe('SessionManager claimed graph intent execution', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backendBuilds = 0;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backendBuilds += 1;
return new TestBackend(ctx);
});
@@ -1311,7 +1311,7 @@ describe('SessionManager claimed graph intent execution', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const parent = await store.create(makeInput({ name: 'Supervisor' }));
const child = await createGraphOperatorSession(store, parent.id);
const claim = graphIntentClaim(
@@ -1383,7 +1383,7 @@ describe('SessionManager claimed graph intent execution', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backendBuilds = 0;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backendBuilds += 1;
return new TestBackend(ctx);
});
@@ -1446,7 +1446,7 @@ describe('SessionManager claimed graph intent execution', () => {
const backends = new BackendRegistry();
const backendGate = makeGate();
const ready = makeGate();
- backends.register('fake', (ctx) => new TestBackend(ctx, backendGate));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx, backendGate));
const stoppedRoots: RuntimeMessageRunIdentity[] = [];
let stoppedSessions = 0;
const authority = hostedRootAuthority();
@@ -1562,7 +1562,7 @@ describe('SessionManager claimed graph intent execution', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const backendsBySession = new Map<string, TestBackend>();
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const backend = new TestBackend(ctx);
backendsBySession.set(ctx.sessionId, backend);
return backend;
@@ -1659,7 +1659,7 @@ describe('SessionManager claimed graph intent execution', () => {
const childGate = makeGate();
const started = makeGate();
let childBackend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
childBackend = new TestBackend(ctx, childGate);
return childBackend;
});
@@ -1743,7 +1743,7 @@ describe('SessionManager claimed graph intent execution', () => {
const firstGate = makeGate();
const firstReady = makeGate();
let backend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new TestBackend(ctx, firstGate);
return backend;
});
@@ -1801,7 +1801,7 @@ describe('SessionManager claimed graph intent execution', () => {
const admissionStarted = makeGate();
const releaseAdmission = makeGate();
let backend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new TestBackend(ctx);
return backend;
});
@@ -1913,7 +1913,7 @@ describe('SessionManager claimed graph intent execution', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backendBuilds = 0;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backendBuilds += 1;
return new TestBackend(ctx);
});
@@ -1967,7 +1967,7 @@ describe('SessionManager claimed graph intent execution', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new TestBackend(ctx);
return backend;
});
@@ -2018,7 +2018,7 @@ describe('SessionManager claimed graph intent execution', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backendBuilds = 0;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backendBuilds += 1;
return new TestBackend(ctx);
});
@@ -2133,7 +2133,7 @@ describe('SessionManager child-session runtime primitive', () => {
const contexts: BackendFactoryContext[] = [];
const backendActivationSessions: string[] = [];
const backendsBySession = new Map<string, TestBackend>();
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
contexts.push(ctx);
const backend = new TestBackend(ctx, ctx.header.subagentRuntime ? undefined : parentGate);
backendsBySession.set(ctx.sessionId, backend);
@@ -2191,7 +2191,6 @@ describe('SessionManager child-session runtime primitive', () => {
expect(childHeader.cwd).toBe('/tmp/project');
expect(childHeader.projectId).toBe('project-1');
expect(childHeader.workspaceRoot).toBe((await store.readHeader(parent.id)).workspaceRoot);
- expect(childHeader.backend).toBe('fake');
expect(childHeader.llmConnectionSlug).toBe('connection-1');
expect(childHeader.model).toBe('model-1');
expect(childHeader.thinkingLevel).toBe('medium');
@@ -2306,7 +2305,7 @@ describe('SessionManager child-session runtime primitive', () => {
const backends = new BackendRegistry();
const parentGate = makeGate();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new TestBackend(ctx, ctx.header.subagentRuntime ? undefined : parentGate),
);
const manager = new SessionManager({
@@ -2391,7 +2390,7 @@ describe('SessionManager child-session runtime primitive', () => {
const backends = new BackendRegistry();
const parentGate = makeGate();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new TestBackend(ctx, ctx.header.subagentRuntime ? undefined : parentGate),
);
const manager = new SessionManager({
@@ -2433,7 +2432,7 @@ describe('SessionManager child-session runtime primitive', () => {
const backends = new BackendRegistry();
const parentGate = makeGate();
const backendsBySession = new Map<string, TestBackend>();
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const backend = new TestBackend(ctx, ctx.header.subagentRuntime ? undefined : parentGate);
backendsBySession.set(ctx.sessionId, backend);
return backend;
@@ -2504,7 +2503,7 @@ describe('SessionManager child-session runtime primitive', () => {
const backends = new BackendRegistry();
const parentGate = makeGate();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new TestBackend(ctx, ctx.header.subagentRuntime ? undefined : parentGate),
);
const manager = new SessionManager({
@@ -2556,7 +2555,7 @@ describe('SessionManager child-session runtime primitive', () => {
const childInputs: BackendSendInput[] = [];
let childAttempts = 0;
let failClaimOnce = true;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
if (!ctx.header.subagentRuntime) return new TestBackend(ctx, parentGate);
return {
kind: 'fake' as const,
@@ -2815,7 +2814,7 @@ describe('SessionManager child-session runtime primitive', () => {
const backends = new BackendRegistry();
const parentGate = makeGate();
const childInputs: BackendSendInput[] = [];
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
if (!ctx.header.subagentRuntime) return new TestBackend(ctx, parentGate);
return {
kind: 'fake' as const,
@@ -2933,7 +2932,7 @@ describe('SessionManager child-session runtime primitive', () => {
const parentGate = makeGate();
const childGate = makeGate();
const backendsBySession = new Map<string, TestBackend>();
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const backend = new TestBackend(ctx, ctx.header.subagentRuntime ? childGate : parentGate);
backendsBySession.set(ctx.sessionId, backend);
return backend;
@@ -3011,7 +3010,7 @@ describe('SessionManager child-session runtime primitive', () => {
const backends = new BackendRegistry();
const parentGate = makeGate();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new TestBackend(ctx, ctx.header.subagentRuntime ? undefined : parentGate),
);
const manager = new SessionManager({
@@ -3088,7 +3087,7 @@ describe('SessionManager child-session runtime primitive', () => {
const backends = new BackendRegistry();
const parentGate = makeGate();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new TestBackend(ctx, ctx.header.subagentRuntime ? undefined : parentGate),
);
const manager = new SessionManager({
@@ -3227,7 +3226,7 @@ describe('SessionManager child-session runtime primitive', () => {
const backends = new BackendRegistry();
const parentGate = makeGate();
const contexts: BackendFactoryContext[] = [];
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
contexts.push(ctx);
return new TestBackend(ctx, ctx.header.subagentRuntime ? undefined : parentGate);
});
@@ -3321,7 +3320,7 @@ describe('SessionManager child-session runtime primitive', () => {
const parentGate = makeGate();
const compactCalls: Array<{ turnId: string; runtimeContextCount: number }> = [];
const childBackends: LifecycleChildBackend[] = [];
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
if (!ctx.header.subagentRuntime) return new TestBackend(ctx, parentGate);
const backend = new LifecycleChildBackend(ctx, compactCalls);
childBackends.push(backend);
@@ -3418,7 +3417,7 @@ describe('SessionManager child-session runtime primitive', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const parentGate = makeGate();
- backends.register('fake', (ctx) => new TestBackend(ctx, parentGate));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx, parentGate));
const manager = new SessionManager({
store,
runStore,
@@ -3533,7 +3532,7 @@ describe('SessionManager child-session runtime primitive', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -3569,7 +3568,7 @@ describe('SessionManager child-session runtime primitive', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
let externalParent:
| {
sessionId: string;
@@ -3623,7 +3622,7 @@ describe('SessionManager child-session runtime primitive', () => {
const childGates = [makeGate(), makeGate()];
let childGateIndex = 0;
const backendsBySession = new Map<string, TestBackend>();
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const gate = ctx.header.subagentRuntime ? childGates[childGateIndex++] : parentGate;
const backend = new TestBackend(ctx, gate);
backendsBySession.set(ctx.sessionId, backend);
@@ -3709,7 +3708,7 @@ describe('SessionManager child-session runtime primitive', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -3815,7 +3814,7 @@ describe('SessionManager automatic titles', () => {
test('falls back once on generation failure', async () => {
const store = new MemorySessionStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const changed = makeGate();
let calls = 0;
const manager = new SessionManager({
@@ -3844,7 +3843,7 @@ describe('SessionManager automatic titles', () => {
test('does not overwrite or notify after a racing manual rename', async () => {
const store = new MemorySessionStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const release = makeGate();
const attempted = makeGate();
store.generatedTitleAttempted = attempted;
@@ -3880,7 +3879,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
const runStore = new OrderingAgentRunStore();
const backends = new BackendRegistry();
const compactCalls: Array<{ turnId: string; runtimeContextCount: number }> = [];
- backends.register('fake', (ctx) => new CompactingTestBackend(ctx, compactCalls));
+ backends.register('ai-sdk', (ctx) => new CompactingTestBackend(ctx, compactCalls));
const manager = new SessionManager({
store,
runStore,
@@ -3889,9 +3888,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
newId: nextId(),
now: nextNow(10_000),
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
await drain(manager.sendMessage(session.id, { turnId: 'turn-1', text: 'hello' }));
runStore.operations = [];
@@ -3964,7 +3961,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
warnings: [],
},
});
- backends.register('fake', (ctx) =>
+ backends.register('ai-sdk', (ctx) =>
createTestAiSdkBackend({
sessionId: ctx.sessionId,
header: ctx.header,
@@ -4025,9 +4022,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
newId: nextId(),
now: nextNow(13_000),
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
await drain(manager.sendMessage(session.id, { turnId: 'turn-1', text: 'first '.repeat(400) }));
await drain(manager.sendMessage(session.id, { turnId: 'turn-2', text: 'second' }));
@@ -4056,7 +4051,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new FailOpenCompactingBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new FailOpenCompactingBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -4065,9 +4060,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
newId: nextId(),
now: nextNow(12_000),
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
await drain(manager.sendMessage(session.id, { turnId: 'turn-1', text: 'hello' }));
await drain(manager.compactSession(session.id, { turnId: 'turn-compact' }));
@@ -4095,7 +4088,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
});
const backends = new BackendRegistry();
const compactCalls: Array<{ turnId: string; runtimeContextCount: number }> = [];
- backends.register('fake', (ctx) => new CompactingTestBackend(ctx, compactCalls));
+ backends.register('ai-sdk', (ctx) => new CompactingTestBackend(ctx, compactCalls));
const manager = new SessionManager({
store,
runStore,
@@ -4104,9 +4097,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
newId: nextId(),
now: nextNow(15_000),
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
await drain(manager.sendMessage(session.id, { turnId: 'turn-1', text: 'hello' }));
blockPriorRead = true;
@@ -4141,7 +4132,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
const backends = new BackendRegistry();
const factoryStarts = new Map<string, ReturnType<typeof makeGate>>();
const factoryModes = new Map<string, 'execution_cancellation' | 'abort_error'>();
- backends.register('fake', async (ctx) => {
+ backends.register('ai-sdk', async (ctx) => {
const started = factoryStarts.get(ctx.sessionId);
const mode = factoryModes.get(ctx.sessionId);
if (!started || !mode) throw new Error('cold compact factory was not configured');
@@ -4168,12 +4159,8 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
newId: nextId(),
now: nextNow(15_500),
});
- const cancelledSession = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
- const abortErrorSession = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const cancelledSession = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
+ const abortErrorSession = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
const cancelledStart = makeGate();
const abortErrorStart = makeGate();
factoryStarts.set(cancelledSession.id, cancelledStart);
@@ -4212,7 +4199,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const compactCalls: Array<{ turnId: string; runtimeContextCount: number }> = [];
- backends.register('fake', (ctx) => new CompactingTestBackend(ctx, compactCalls));
+ backends.register('ai-sdk', (ctx) => new CompactingTestBackend(ctx, compactCalls));
const manager = new SessionManager({
store,
runStore,
@@ -4221,9 +4208,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
newId: nextId(),
now: nextNow(17_000),
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
const readStarted = makeGate();
const releaseRead = makeGate();
store.nextReadHeaderGate = { started: readStarted, release: releaseRead };
@@ -4260,7 +4245,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
let compactingBackend: BlockingCompactBackend | undefined;
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new BlockingCompactBackend(ctx, {
compactGate,
@@ -4278,9 +4263,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
newId: nextId(),
now: nextNow(20_000),
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
await drain(manager.sendMessage(session.id, { turnId: 'turn-1', text: 'hello' }));
const compactPromise = collectSessionEvents(
@@ -4307,7 +4290,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
const compactCalls: Array<{ turnId: string; runtimeContextCount: number }> = [];
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new ActiveTurnBackend(ctx, { turnStarted, sendGate, compactCalls }),
);
const manager = new SessionManager({
@@ -4318,9 +4301,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
newId: nextId(),
now: nextNow(25_000),
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
const sendPromise = (async () => {
for await (const _event of manager.sendMessage(session.id, {
@@ -4486,7 +4467,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
const readStarted = makeGate();
const releaseRead = makeGate();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({
store,
backends,
@@ -4533,7 +4514,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
const releaseUpdate = makeGate();
const activatedModels: string[] = [];
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
activatedModels.push(ctx.header.model);
return new TestBackend(ctx);
});
@@ -4583,7 +4564,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
const turnStarted = makeGate();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new (class extends ActiveTurnBackend {
override async dispose(): Promise<void> {
@@ -4620,7 +4601,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
let disposeCalls = 0;
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new (class extends TestBackend {
override async dispose(): Promise<void> {
@@ -4674,7 +4655,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
let disposeCalls = 0;
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new (class extends TestBackend {
constructor() {
@@ -4752,7 +4733,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
let builds = 0;
const disposed: number[] = [];
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const generation = ++builds;
return new (class extends TestBackend {
override async dispose(): Promise<void> {
@@ -4828,7 +4809,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
let builds = 0;
const disposed: number[] = [];
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const generation = ++builds;
return new (class extends TestBackend {
override async dispose(): Promise<void> {
@@ -4898,7 +4879,7 @@ describe('SessionManager manual compaction and quiescent session changes', () =>
const disposed: string[] = [];
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new (class extends TestBackend {
override async dispose(): Promise<void> {
@@ -4964,7 +4945,7 @@ describe('SessionManager permission mode updates', () => {
const store = new AtomicBoundaryMemorySessionStore();
const calls: string[] = [];
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({
store,
backends,
@@ -5078,7 +5059,7 @@ describe('SessionManager permission mode updates', () => {
const firstGate = makeGate();
const secondGate = makeGate();
const gates = [firstGate, secondGate];
- backends.register('fake', (ctx) => new TestBackend(ctx, gates.shift()));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx, gates.shift()));
const manager = new SessionManager({
store,
runStore,
@@ -5129,7 +5110,7 @@ describe('SessionManager permission mode updates', () => {
test('leaving explore clears the deep research label so visible read-only copy stays truthful', async () => {
const store = new MemorySessionStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({ store, backends, newId: nextId(), now: nextNow(6_000) });
const session = await manager.createSession(
makeInput({
@@ -5156,7 +5137,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new FinalTextTestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new FinalTextTestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -5189,7 +5170,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let inspectionCalls = 0;
- backends.register('fake', (ctx) => new FinalTextTestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new FinalTextTestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -5221,39 +5202,6 @@ describe('SessionManager permission mode updates', () => {
expect(run?.workspaceIdentity).toBeUndefined();
});
- test('does not declare the T1 protocol for a backend without the durable tool boundary', async () => {
- const store = new MemorySessionStore();
- const runStore = new MemoryAgentRunStore();
- const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new CountingFinalTextBackend(ctx, () => {}));
- const runtimeEventStore = Object.assign(runStore, {
- toolBoundaryProtocol: 't1_after_preflight_v1' as const,
- });
- const manager = new SessionManager({
- store,
- runStore,
- runtimeEventStore,
- toolBoundaryProtocol: 't1_after_preflight_v1',
- backends,
- newId: nextId(),
- now: nextNow(6_050),
- runtimeSource: 'test',
- });
- const session = await manager.createSession(makeInput());
-
- await collectSessionEvents(
- manager.sendMessage(session.id, {
- turnId: 'turn-no-tool-boundary',
- text: 'hello',
- }),
- );
-
- const [run] = await runStore.listSessionRuns(session.id);
- if (!run) throw new Error('expected run');
- const events = await runStore.readRuntimeEvents(session.id, run.runId);
- expect(events[0]?.actions?.runtimeProtocol).toBeUndefined();
- });
-
test('declares the T1 protocol for an AiSdk run when the host wires the durable boundary', async () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
@@ -5269,7 +5217,7 @@ describe('SessionManager permission mode updates', () => {
now: nextNow(6_060),
runtimeSource: 'test',
});
- const session = await manager.createSession(makeInput({ backend: 'ai-sdk' }));
+ const session = await manager.createSession(makeInput());
await collectSessionEvents(
manager.sendMessage(session.id, {
@@ -5501,7 +5449,7 @@ describe('SessionManager permission mode updates', () => {
const backends = new BackendRegistry();
const observed: InvocationResult[] = [];
let backend: FinalTextTestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new FinalTextTestBackend(ctx);
return backend;
});
@@ -5591,7 +5539,7 @@ describe('SessionManager permission mode updates', () => {
now: nextNow(6_550),
runtimeSource: 'test',
});
- const session = await manager.createSession(makeInput({ backend: 'ai-sdk' }));
+ const session = await manager.createSession(makeInput());
const header = await store.readHeader(session.id);
const sourceRunId = 'source-run';
const sourceTurnId = 'source-turn';
@@ -5731,7 +5679,7 @@ describe('SessionManager permission mode updates', () => {
const sendGate = makeGate();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new ActiveTurnBackend(ctx, {
turnStarted,
@@ -5839,7 +5787,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new FinalTextTestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new FinalTextTestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -5984,7 +5932,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new FinalTextTestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new FinalTextTestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -6098,7 +6046,7 @@ describe('SessionManager permission mode updates', () => {
const backends = new BackendRegistry();
let backendCalls = 0;
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new CountingFinalTextBackend(ctx, () => {
backendCalls += 1;
@@ -6185,7 +6133,7 @@ describe('SessionManager permission mode updates', () => {
const backends = new BackendRegistry();
let backendCalls = 0;
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new CountingFinalTextBackend(ctx, () => {
backendCalls += 1;
@@ -6280,7 +6228,7 @@ describe('SessionManager permission mode updates', () => {
const backends = new BackendRegistry();
let backendCalls = 0;
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new CountingFinalTextBackend(ctx, () => {
backendCalls += 1;
@@ -6391,7 +6339,7 @@ describe('SessionManager permission mode updates', () => {
const releaseContinuationCommit = makeGate();
let backendCalls = 0;
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new CountingFinalTextBackend(ctx, () => {
backendCalls += 1;
@@ -6489,7 +6437,7 @@ describe('SessionManager permission mode updates', () => {
const backends = new BackendRegistry();
let backendCalls = 0;
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new CountingFinalTextBackend(ctx, () => {
backendCalls += 1;
@@ -6571,7 +6519,7 @@ describe('SessionManager permission mode updates', () => {
const backends = new BackendRegistry();
let backendCalls = 0;
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new CountingFinalTextBackend(ctx, () => {
backendCalls += 1;
@@ -6659,7 +6607,7 @@ describe('SessionManager permission mode updates', () => {
let backendCalls = 0;
let failOnce = true;
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new CountingFinalTextBackend(ctx, () => {
backendCalls += 1;
@@ -6803,7 +6751,7 @@ describe('SessionManager permission mode updates', () => {
let workspaceIdentity = 'workspace-1';
const lifecycleEvents: Array<{ type: string; errorClass?: string }> = [];
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new CountingFinalTextBackend(ctx, () => {
backendCalls += 1;
@@ -6907,7 +6855,7 @@ describe('SessionManager permission mode updates', () => {
let backendCalls = 0;
let availableToolNames: readonly string[] = scenario.planned;
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new CountingFinalTextBackend(ctx, () => {
backendCalls += 1;
@@ -6995,7 +6943,7 @@ describe('SessionManager permission mode updates', () => {
let backendCalls = 0;
let availableToolNames: readonly string[] = ['Write'];
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new CountingFinalTextBackend(ctx, () => {
backendCalls += 1;
@@ -7103,7 +7051,7 @@ describe('SessionManager permission mode updates', () => {
const backends = new BackendRegistry();
let backendCalls = 0;
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new CountingFinalTextBackend(ctx, () => {
backendCalls += 1;
@@ -7181,7 +7129,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new TestBackend(ctx);
return backend;
});
@@ -7291,7 +7239,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore({ failRuntimeEventAppendAfter: 3 });
const backends = new BackendRegistry();
let backend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new TestBackend(ctx);
return backend;
});
@@ -7418,7 +7366,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -7444,7 +7392,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new TestBackend(ctx);
return backend;
});
@@ -7537,7 +7485,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new TestBackend(ctx);
return backend;
});
@@ -9026,7 +8974,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new EventBackend(ctx, [{ type: 'complete', stopReason: 'end_turn' }]),
);
const manager = new SessionManager({
@@ -9076,7 +9024,7 @@ describe('SessionManager permission mode updates', () => {
});
const backends = new BackendRegistry();
let backend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new TestBackend(ctx);
return backend;
});
@@ -9132,7 +9080,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new EventBackend(ctx, [{ type: 'complete', stopReason: 'end_turn' }]),
);
const manager = new SessionManager({
@@ -9245,7 +9193,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const backendInstances: TestBackend[] = [];
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const backend = new TestBackend(ctx);
backendInstances.push(backend);
return backend;
@@ -9370,7 +9318,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const backendInstances: TestBackend[] = [];
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const backend = new TestBackend(ctx);
backendInstances.push(backend);
return backend;
@@ -9540,7 +9488,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const backendInstances: TestBackend[] = [];
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const backend = new TestBackend(ctx);
backendInstances.push(backend);
return backend;
@@ -9623,7 +9571,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore({ failUpdateRunStatusOnce: 'failed' });
const backends = new BackendRegistry();
let backend: TurnScriptBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new TurnScriptBackend(ctx, [
[{ type: 'complete', stopReason: 'error' }],
[
@@ -9677,7 +9625,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const backendInstances: TestBackend[] = [];
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const backend = new TestBackend(ctx);
backendInstances.push(backend);
return backend;
@@ -9766,7 +9714,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const backendInstances: TestBackend[] = [];
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const backend = new TestBackend(ctx);
backendInstances.push(backend);
return backend;
@@ -9812,7 +9760,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const childBackends: TestBackend[] = [];
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const backend = new TestBackend(ctx);
if (ctx.systemPrompt) childBackends.push(backend);
return backend;
@@ -9890,7 +9838,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -10006,7 +9954,7 @@ describe('SessionManager permission mode updates', () => {
async respondToSandboxBoundary(): Promise<void> {},
async dispose(): Promise<void> {},
});
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
contexts.push(ctx);
return createBackend(ctx);
});
@@ -10179,7 +10127,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let providerDispatches = 0;
- backends.register('fake', (ctx) => ({
+ backends.register('ai-sdk', (ctx) => ({
kind: 'fake' as const,
sessionId: ctx.sessionId,
async *send(input: BackendSendInput): AsyncIterable<SessionEvent> {
@@ -10321,7 +10269,7 @@ describe('SessionManager permission mode updates', () => {
yield* super.send(input);
}
}
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
contexts.push(ctx);
return new SeamProbeBackend(ctx);
});
@@ -10371,7 +10319,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const contexts: BackendFactoryContext[] = [];
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
contexts.push(ctx);
return new TestBackend(ctx);
});
@@ -10414,7 +10362,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const contexts: BackendFactoryContext[] = [];
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
contexts.push(ctx);
return new TestBackend(ctx);
});
@@ -10478,7 +10426,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore({ failUpdateRunStatusOnce: 'completed' });
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -10533,7 +10481,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new EventBackend(ctx, [{ type: 'complete', stopReason: 'step_limit' }]),
);
const manager = new SessionManager({
@@ -10561,7 +10509,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new HighVolumeDeltaBackend(ctx, 512));
+ backends.register('ai-sdk', (ctx) => new HighVolumeDeltaBackend(ctx, 512));
const manager = new SessionManager({
store,
runStore,
@@ -10603,7 +10551,7 @@ describe('SessionManager permission mode updates', () => {
const backends = new BackendRegistry();
const childGate = makeGate();
const backendInstances: TestBackend[] = [];
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const backend = new TestBackend(
ctx,
ctx.header.permissionMode === 'explore' ? childGate : undefined,
@@ -10658,7 +10606,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let childBackend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
childBackend = new TestBackend(ctx);
return childBackend;
});
@@ -10711,7 +10659,7 @@ describe('SessionManager permission mode updates', () => {
const backends = new BackendRegistry();
const activeGate = makeGate();
let backend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new TestBackend(ctx, activeGate);
return backend;
});
@@ -10766,7 +10714,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new TestBackend(ctx);
return backend;
});
@@ -10819,7 +10767,7 @@ describe('SessionManager permission mode updates', () => {
const backends = new BackendRegistry();
const buildStarted = makeGate();
const releaseBuild = makeGate();
- backends.register('fake', async () => {
+ backends.register('ai-sdk', async () => {
buildStarted.release();
await releaseBuild.promise;
const error = new Error('backend activation timed out');
@@ -10871,7 +10819,7 @@ describe('SessionManager permission mode updates', () => {
const buildStarted = makeGate();
let factorySignal: AbortSignal | undefined;
let dispatches = 0;
- backends.register('fake', async (ctx) => {
+ backends.register('ai-sdk', async (ctx) => {
factorySignal = ctx.abortSignal;
if (!factorySignal) throw new Error('backend factory did not receive an abort signal');
buildStarted.release();
@@ -10916,7 +10864,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const buildStarted = makeGate();
- backends.register('fake', async (ctx) => {
+ backends.register('ai-sdk', async (ctx) => {
if (!ctx.abortSignal) throw new Error('backend factory did not receive an abort signal');
buildStarted.release();
await timerDelay(60_000, undefined, { signal: ctx.abortSignal });
@@ -10958,7 +10906,7 @@ describe('SessionManager permission mode updates', () => {
let builds = 0;
let firstDisposeCalls = 0;
let firstDispatches = 0;
- backends.register('fake', async (ctx) => {
+ backends.register('ai-sdk', async (ctx) => {
builds += 1;
if (builds === 1) {
buildStarted.release();
@@ -11025,7 +10973,7 @@ describe('SessionManager permission mode updates', () => {
const releaseBuild = makeGate();
let builds = 0;
let disposeCalls = 0;
- backends.register('fake', async (ctx) => {
+ backends.register('ai-sdk', async (ctx) => {
builds += 1;
buildStarted.release();
await releaseBuild.promise;
@@ -11099,7 +11047,7 @@ describe('SessionManager permission mode updates', () => {
const backends = new BackendRegistry();
const childGate = makeGate();
let childBackend: RetryStopBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
if (ctx.header.permissionMode !== 'explore') return new TestBackend(ctx);
childBackend = new RetryStopBackend(ctx, childGate);
return childBackend;
@@ -11152,7 +11100,7 @@ describe('SessionManager permission mode updates', () => {
const stopStarted = makeGate();
const releaseStop = makeGate();
let backend: ConcurrentStopBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new ConcurrentStopBackend(ctx, stopStarted, releaseStop);
return backend;
});
@@ -11204,7 +11152,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new TestBackend(ctx);
return backend;
});
@@ -11262,7 +11210,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backend: TestBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new TestBackend(ctx);
return backend;
});
@@ -11312,7 +11260,7 @@ describe('SessionManager permission mode updates', () => {
const releaseSend = makeGate();
let builds = 0;
let backend: PermissionBroadcastBackend | undefined;
- backends.register('fake', async (ctx) => {
+ backends.register('ai-sdk', async (ctx) => {
builds += 1;
buildStarted.release();
await releaseBuild.promise;
@@ -11368,7 +11316,7 @@ describe('SessionManager permission mode updates', () => {
const childGate = makeGate();
let parentBackend: SandboxBoundaryWaitBackend | undefined;
let childBackend: PermissionBroadcastBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
if (ctx.header.permissionMode === 'explore') {
childBackend = new PermissionBroadcastBackend(ctx, childGate);
return childBackend;
@@ -11422,7 +11370,7 @@ describe('SessionManager permission mode updates', () => {
const childGate = makeGate();
let parentBackend: CountingStopBackend | undefined;
let childBackend: RetryStopBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
if (ctx.header.permissionMode === 'explore') {
childBackend = new RetryStopBackend(ctx, childGate);
return childBackend;
@@ -11480,7 +11428,7 @@ describe('SessionManager permission mode updates', () => {
const backends = new BackendRegistry();
const sendGate = makeGate();
let backend: CountingStopBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new CountingStopBackend(ctx, sendGate);
return backend;
});
@@ -11530,7 +11478,7 @@ describe('SessionManager permission mode updates', () => {
const backends = new BackendRegistry();
const sendGate = makeGate();
let backend: CountingStopBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new CountingStopBackend(ctx, sendGate);
return backend;
});
@@ -11580,7 +11528,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const backendInstances: TestBackend[] = [];
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
const backend = new TestBackend(ctx);
backendInstances.push(backend);
return backend;
@@ -11642,7 +11590,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -11844,7 +11792,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -11932,7 +11880,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -12019,7 +11967,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -12096,7 +12044,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', () => {
+ backends.register('ai-sdk', () => {
throw new Error('backend init failed');
});
const manager = new SessionManager({
@@ -12145,7 +12093,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backend: SandboxBoundaryWaitBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new SandboxBoundaryWaitBackend(ctx);
return backend;
});
@@ -12192,7 +12140,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new FakeBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new FakeBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -12201,7 +12149,7 @@ describe('SessionManager permission mode updates', () => {
newId: nextId(),
now: nextNow(9_000),
});
- const session = await manager.createSession(makeInput({ backend: 'fake' }));
+ const session = await manager.createSession(makeInput());
const iterator = manager
.sendMessage(session.id, { turnId: 'turn-1', text: FAKE_ASK_USER_QUESTION_PROMPT })
@@ -12248,7 +12196,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new FakeBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new FakeBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -12257,7 +12205,7 @@ describe('SessionManager permission mode updates', () => {
newId: nextId(),
now: nextNow(9_000),
});
- const session = await manager.createSession(makeInput({ backend: 'fake' }));
+ const session = await manager.createSession(makeInput());
const iterator = manager
.sendMessage(session.id, { turnId: 'turn-1', text: FAKE_ASK_USER_QUESTION_PROMPT })
@@ -12282,7 +12230,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new SandboxBoundaryWaitBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new SandboxBoundaryWaitBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -12317,7 +12265,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new UnmappedSessionEventBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new UnmappedSessionEventBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -12359,7 +12307,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new UnmappedSessionEventBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new UnmappedSessionEventBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -12410,7 +12358,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new EventBackend(ctx, [{ type: 'complete', stopReason: 'error' }]),
);
const manager = new SessionManager({
@@ -12437,7 +12385,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new EventBackend(ctx, [{ type: 'complete', stopReason: 'step_limit' }]),
);
const manager = new SessionManager({
@@ -12473,7 +12421,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new EventBackend(ctx, [
{ type: 'error', recoverable: false, reason: 'tool_failed', message: 'Tool failed' },
@@ -12501,7 +12449,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const backends = new BackendRegistry();
const gate = makeGate();
- backends.register('fake', (ctx) => new TestBackend(ctx, gate));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx, gate));
const manager = new SessionManager({ store, backends, newId: nextId(), now: nextNow(12_500) });
const session = await manager.createSession(makeInput());
@@ -12527,7 +12475,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backend: StopControlledAbortBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new StopControlledAbortBackend(ctx);
return backend;
});
@@ -12579,7 +12527,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new EventBackend(ctx, [
{ type: 'text_delta', messageId: 'm1', text: 'before' },
@@ -12632,7 +12580,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new ThrowAfterTerminalBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new ThrowAfterTerminalBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -12675,7 +12623,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
const gate = makeGate();
- backends.register('fake', (ctx) => new LateErrorBackend(ctx, gate));
+ backends.register('ai-sdk', (ctx) => new LateErrorBackend(ctx, gate));
const manager = new SessionManager({
store,
runStore,
@@ -12713,7 +12661,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TraceBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TraceBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -12727,7 +12675,7 @@ describe('SessionManager permission mode updates', () => {
await drain(manager.sendMessage(session.id, { turnId: 'turn-1', text: 'hello' }));
const [run] = await runStore.listSessionRuns(session.id);
- expect(run?.backendKind).toBe('fake');
+ expect(run?.backendKind).toBe('ai-sdk');
expect(run?.llmConnectionSlug).toBe('fake');
expect(run?.modelId).toBe('fake-model');
expect(run?.permissionMode).toBe('ask');
@@ -12755,7 +12703,7 @@ describe('SessionManager permission mode updates', () => {
});
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new ProviderCaptureAfterAttemptFailureBackend(
ctx,
@@ -12806,7 +12754,7 @@ describe('SessionManager permission mode updates', () => {
},
});
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new ProviderRequestTraceBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new ProviderRequestTraceBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -12842,7 +12790,7 @@ describe('SessionManager permission mode updates', () => {
});
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new ProviderCaptureGateBackend(ctx, () => (providerDispatches += 1)),
);
const manager = new SessionManager({
@@ -12871,7 +12819,7 @@ describe('SessionManager permission mode updates', () => {
const cleanupCalled = makeGate();
let observedEventIds: string[] = [];
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new HistoryCompactCheckpointBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new HistoryCompactCheckpointBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -13008,7 +12956,7 @@ describe('SessionManager permission mode updates', () => {
const observedCheckpointIds: Array<string | undefined> = [];
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new HistoryCompactCheckpointCacheProbeBackend(ctx, observedCheckpointIds),
);
const manager = new SessionManager({
@@ -13054,7 +13002,7 @@ describe('SessionManager permission mode updates', () => {
const observedCoverage: Array<number | undefined> = [];
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new HistoryCompactCheckpointMonotonicProbeBackend(ctx, observedCoverage),
);
const manager = new SessionManager({
@@ -13109,7 +13057,7 @@ describe('SessionManager permission mode updates', () => {
const writeOutcomes: string[] = [];
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new SameCoverageCheckpointReplacementProbeBackend(ctx, writeOutcomes),
);
const manager = new SessionManager({
@@ -13166,7 +13114,7 @@ describe('SessionManager permission mode updates', () => {
});
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new SerializedCheckpointProbeBackend(ctx, childRecorderCalled, recorderReturnedPromises),
);
@@ -13234,7 +13182,7 @@ describe('SessionManager permission mode updates', () => {
});
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new RecoveringCheckpointWriteProbeBackend(
ctx,
@@ -13307,7 +13255,7 @@ describe('SessionManager permission mode updates', () => {
});
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new CheckpointRecorderContractProbeBackend(
ctx,
@@ -13350,7 +13298,7 @@ describe('SessionManager permission mode updates', () => {
});
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new CheckpointRecorderContractProbeBackend(
ctx,
@@ -13418,7 +13366,7 @@ describe('SessionManager permission mode updates', () => {
});
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) =>
new InitialCheckpointLoadRaceProbeBackend(
ctx,
@@ -13522,7 +13470,7 @@ describe('SessionManager permission mode updates', () => {
const writeOutcomes: string[] = [];
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new CheckpointRecorderContractProbeBackend(ctx, async () => {}, writeOutcomes),
);
const manager = new SessionManager({
@@ -13598,7 +13546,7 @@ describe('SessionManager permission mode updates', () => {
test('startup recovery marks persisted running turns as failed instead of leaving them stuck', async () => {
const store = new MemorySessionStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({ store, backends, newId: nextId(), now: nextNow(12_800) });
const running = await manager.createSession(makeInput({ status: 'running' }));
const waiting = await manager.createSession(makeInput({ status: 'waiting_for_user' }));
@@ -13729,7 +13677,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
let sessionId = '';
let outcomeCommitFailuresRemaining = 3;
let outcomeCommitAttempts = 0;
@@ -13862,7 +13810,7 @@ describe('SessionManager permission mode updates', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -13982,7 +13930,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new EventBackend(ctx, [{ type: 'complete', stopReason: 'end_turn' }]),
);
const manager = new SessionManager({
@@ -14015,7 +13963,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new EventBackend(ctx, [{ type: 'complete', stopReason: 'end_turn' }]),
);
const manager = new SessionManager({
@@ -14561,7 +14509,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new EventBackend(ctx, [{ type: 'complete', stopReason: 'end_turn' }]),
);
const manager = new SessionManager({
@@ -14634,7 +14582,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new EventBackend(ctx, [{ type: 'complete', stopReason: 'end_turn' }]),
);
const manager = new SessionManager({
@@ -14673,7 +14621,7 @@ describe('SessionManager permission mode updates', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
backends.register(
- 'fake',
+ 'ai-sdk',
(ctx) => new EventBackend(ctx, [{ type: 'complete', stopReason: 'end_turn' }]),
);
const manager = new SessionManager({
@@ -14704,7 +14652,7 @@ describe('SessionManager steering and followup queues', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new FakeBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new FakeBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -14741,7 +14689,7 @@ describe('SessionManager steering and followup queues', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new FakeBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new FakeBackend(ctx));
const identities: RuntimeMessageRunIdentity[] = [];
const acked: string[] = [];
const nacked: string[] = [];
@@ -14779,9 +14727,7 @@ describe('SessionManager steering and followup queues', () => {
},
},
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
const events = await drainAll(
manager.sendMessage(session.id, { turnId: 'turn-host-message', text: 'start' }),
@@ -14822,7 +14768,7 @@ describe('SessionManager steering and followup queues', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new FakeBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new FakeBackend(ctx));
const identities: RuntimeInteractionRunIdentity[] = [];
const lifecycle: string[] = [];
const manager = new SessionManager({
@@ -14848,9 +14794,7 @@ describe('SessionManager steering and followup queues', () => {
},
canonicalPermissionOutcomes: noCanonicalPermissionOutcomes,
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
await drainAll(
manager.sendMessage(session.id, { turnId: 'turn-host-interaction', text: 'go' }),
@@ -14866,7 +14810,7 @@ describe('SessionManager steering and followup queues', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new FakeBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new FakeBackend(ctx));
const lifecycle: string[] = [];
let question: RuntimeUserQuestionContinuation | undefined;
const manager = new SessionManager({
@@ -14893,9 +14837,7 @@ describe('SessionManager steering and followup queues', () => {
},
canonicalPermissionOutcomes: noCanonicalPermissionOutcomes,
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'ask' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'ask' }));
const iterator = manager
.sendMessage(session.id, {
turnId: 'turn-host-question-abandoned',
@@ -14920,7 +14862,7 @@ describe('SessionManager steering and followup queues', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new UnadmittedQuestionBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new UnadmittedQuestionBackend(ctx));
let releases = 0;
const manager = new SessionManager({
store,
@@ -14942,9 +14884,7 @@ describe('SessionManager steering and followup queues', () => {
},
canonicalPermissionOutcomes: noCanonicalPermissionOutcomes,
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'ask' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'ask' }));
let failure: unknown;
try {
@@ -14960,7 +14900,7 @@ describe('SessionManager steering and followup queues', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new ThrowBeforeTerminalBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new ThrowBeforeTerminalBackend(ctx));
let releases = 0;
const manager = new SessionManager({
store,
@@ -14981,9 +14921,7 @@ describe('SessionManager steering and followup queues', () => {
}),
},
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
let failure: unknown;
try {
@@ -15002,7 +14940,7 @@ describe('SessionManager steering and followup queues', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let failBuilds = 1;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
if (failBuilds > 0) {
failBuilds -= 1;
throw new Error('backend build failed');
@@ -15017,9 +14955,7 @@ describe('SessionManager steering and followup queues', () => {
newId: nextId(),
now: nextNow(1_000),
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
let failed: unknown;
try {
@@ -15057,7 +14993,7 @@ describe('SessionManager steering and followup queues', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backend: GatedSteeringBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new GatedSteeringBackend(ctx);
return backend;
});
@@ -15069,9 +15005,7 @@ describe('SessionManager steering and followup queues', () => {
newId: nextId(),
now: nextNow(1_000),
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
const first = drainAll(manager.sendMessage(session.id, { turnId: 'turn-a', text: 'first' }));
await waitUntil(() => backend?.gates.has('turn-a') === true);
@@ -15306,7 +15240,7 @@ describe('SessionManager steering and followup queues', () => {
const store = new MemorySessionStore();
const backends = new BackendRegistry();
let backend: GatedSteeringBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new GatedSteeringBackend(ctx);
return backend;
});
@@ -15316,9 +15250,7 @@ describe('SessionManager steering and followup queues', () => {
newId: nextId(),
now: nextNow(1_000),
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
const turn = drainAll(manager.sendMessage(session.id, { turnId: 'turn-1', text: 'go' }));
await waitUntil(() => backend?.gates.has('turn-1') === true);
@@ -15468,7 +15400,7 @@ describe('SessionManager steering and followup queues', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new ForgingQueueBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new ForgingQueueBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -15477,9 +15409,7 @@ describe('SessionManager steering and followup queues', () => {
newId: nextId(),
now: nextNow(1_000),
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
const events = await drainAll(
manager.sendMessage(session.id, { turnId: 'turn-1', text: 'go' }),
@@ -15504,7 +15434,7 @@ describe('SessionManager steering and followup queues', () => {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new ProviderRetryProgressBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new ProviderRetryProgressBackend(ctx));
const manager = new SessionManager({
store,
runStore,
@@ -15513,9 +15443,7 @@ describe('SessionManager steering and followup queues', () => {
newId: nextId(),
now: nextNow(1_000),
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
const events = await drainAll(
manager.sendMessage(session.id, { turnId: 'turn-1', text: 'go' }),
@@ -15601,7 +15529,7 @@ describe('SessionManager steering and followup queues', () => {
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
let backend: GatedSteeringBackend | undefined;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new GatedSteeringBackend(ctx);
return backend;
});
@@ -15613,9 +15541,7 @@ describe('SessionManager steering and followup queues', () => {
newId: nextId(),
now: nextNow(1_000),
});
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
const turn = drainAll(manager.sendMessage(session.id, { turnId: 'turn-1', text: 'go' }));
await waitUntil(() => backend?.gates.has('turn-1') === true);
@@ -15704,7 +15630,7 @@ async function steeringDeliverySession(
const backends = new BackendRegistry();
let manager!: SessionManager;
let sessionId = '';
- backends.register('fake', (ctx) =>
+ backends.register('ai-sdk', (ctx) =>
createTestAiSdkBackend({
sessionId: ctx.sessionId,
header: ctx.header,
@@ -15743,9 +15669,7 @@ async function steeringDeliverySession(
now: nextNow(1_000),
};
manager = new SessionManager(managerDeps);
- const session = await manager.createSession(
- makeInput({ backend: 'fake', permissionMode: 'bypass' }),
- );
+ const session = await manager.createSession(makeInput({ permissionMode: 'bypass' }));
sessionId = session.id;
return { manager, session, store };
}
@@ -15757,7 +15681,7 @@ async function steeringDeliverySession(
* land after the final step boundary (stranded steering).
*/
class GatedSteeringBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
readonly gates = new Map<string, Gate>();
readonly pullDone = new Map<string, Gate>();
@@ -15955,7 +15879,7 @@ class DelegatingRuntimeKernel implements RuntimeKernelLike {
}
class UnadmittedQuestionBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(ctx: BackendFactoryContext) {
@@ -15987,7 +15911,7 @@ class UnadmittedQuestionBackend implements AgentBackend {
}
class TestBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
readonly sendInputs: BackendSendInput[] = [];
stopCalls = 0;
@@ -16279,7 +16203,7 @@ function compactHistoryFailOpenResult() {
}
class HighVolumeDeltaBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(
@@ -16316,7 +16240,7 @@ class HighVolumeDeltaBackend implements AgentBackend {
}
class LateErrorBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(
@@ -16357,7 +16281,7 @@ class LateErrorBackend implements AgentBackend {
}
class StopControlledAbortBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
private releaseAbort: () => void = () => {};
private releaseStop: () => void = () => {};
@@ -16419,7 +16343,7 @@ type PartialEvent =
| Omit<Extract<SessionEvent, { type: 'abort' }>, 'id' | 'turnId' | 'ts'>;
class TurnScriptBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
readonly sendInputs: BackendSendInput[] = [];
@@ -16454,7 +16378,7 @@ class TurnScriptBackend implements AgentBackend {
}
class EventBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(
@@ -16483,7 +16407,7 @@ class EventBackend implements AgentBackend {
}
class SandboxBoundaryWaitBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
readonly responses: SandboxBoundaryResponse[] = [];
private readonly responseGate = makeGate();
@@ -16548,7 +16472,7 @@ class SandboxBoundaryWaitBackend implements AgentBackend {
* it into a control-only RuntimeEvent, and the ledger keeps it.
*/
class UnmappedSessionEventBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(ctx: BackendFactoryContext) {
@@ -16587,7 +16511,7 @@ class UnmappedSessionEventBackend implements AgentBackend {
}
class ThrowAfterTerminalBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(ctx: BackendFactoryContext) {
@@ -16619,7 +16543,7 @@ class ThrowAfterTerminalBackend implements AgentBackend {
}
class ThrowBeforeTerminalBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(ctx: BackendFactoryContext) {
@@ -16644,7 +16568,7 @@ class ThrowBeforeTerminalBackend implements AgentBackend {
}
class TraceBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(private readonly ctx: BackendFactoryContext) {
@@ -16698,7 +16622,7 @@ class TraceBackend implements AgentBackend {
}
class ProviderRequestTraceBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(private readonly ctx: BackendFactoryContext) {
@@ -16760,7 +16684,7 @@ class ProviderRequestTraceBackend implements AgentBackend {
}
class ProviderCaptureGateBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(
@@ -16801,7 +16725,7 @@ class ProviderCaptureGateBackend implements AgentBackend {
}
class ProviderCaptureAfterAttemptFailureBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(
@@ -16884,7 +16808,7 @@ class ProviderCaptureAfterAttemptFailureBackend implements AgentBackend {
}
class HistoryCompactCheckpointBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(private readonly ctx: BackendFactoryContext) {
@@ -16930,7 +16854,7 @@ class HistoryCompactCheckpointBackend implements AgentBackend {
}
class HistoryCompactCheckpointCacheProbeBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(
@@ -16983,7 +16907,7 @@ class HistoryCompactCheckpointCacheProbeBackend implements AgentBackend {
}
class HistoryCompactCheckpointMonotonicProbeBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(
@@ -17041,7 +16965,7 @@ class HistoryCompactCheckpointMonotonicProbeBackend implements AgentBackend {
}
class SameCoverageCheckpointReplacementProbeBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(
@@ -17097,7 +17021,7 @@ class SameCoverageCheckpointReplacementProbeBackend implements AgentBackend {
}
class SerializedCheckpointProbeBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(
@@ -17156,7 +17080,7 @@ class SerializedCheckpointProbeBackend implements AgentBackend {
}
class RecoveringCheckpointWriteProbeBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(
@@ -17220,7 +17144,7 @@ class RecoveringCheckpointWriteProbeBackend implements AgentBackend {
}
class CheckpointRecorderContractProbeBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(
@@ -17278,7 +17202,7 @@ class CheckpointRecorderContractProbeBackend implements AgentBackend {
}
class InitialCheckpointLoadRaceProbeBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(
@@ -17448,7 +17372,7 @@ class MemorySessionStore implements SessionStore {
...(input.revisionIndex !== undefined ? { revisionIndex: input.revisionIndex } : {}),
...(input.revisionState ? { revisionState: input.revisionState } : {}),
hasUnread: false,
- backend: input.backend,
+ backend: 'ai-sdk',
llmConnectionSlug: input.llmConnectionSlug,
connectionLocked: false,
model: input.model ?? 'fake-model',
@@ -18134,7 +18058,7 @@ class ContinuationClaimBarrierRunStore extends MemoryAgentRunStore {
/** Yields a forged queue_update before completing — round-6 R3's attacker. */
class ForgingQueueBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(ctx: BackendFactoryContext) {
@@ -18175,7 +18099,7 @@ class ForgingQueueBackend implements AgentBackend {
}
class ProviderRetryProgressBackend implements AgentBackend {
- readonly kind = 'fake' as const;
+ readonly kind = 'ai-sdk' as const;
readonly sessionId: string;
constructor(ctx: BackendFactoryContext) {
@@ -18396,7 +18320,6 @@ function hostedRootAuthority(): RuntimeHostedRootAuthority {
function makeInput(overrides: Partial<CreateSessionInput> = {}): CreateSessionInput {
return {
cwd: '/tmp/cwd',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
@@ -18520,7 +18443,7 @@ async function createQueuedGraphScenario(firstAbortSignal?: AbortSignal) {
const firstReady = makeGate();
const stopStarted = makeGate();
let backend!: TestBackend;
- backends.register('fake', (ctx) => {
+ backends.register('ai-sdk', (ctx) => {
backend = new (class extends TestBackend {
override async stop(
reason: 'user_stop' | 'redirect',
@@ -18615,7 +18538,7 @@ function makeRunHeader(overrides: Partial<AgentRunHeader> = {}): AgentRunHeader
sessionId: 'session-1',
turnId: 'turn-1',
status: 'running',
- backendKind: 'fake',
+ backendKind: 'ai-sdk',
llmConnectionSlug: 'fake',
modelId: 'fake-model',
cwd: '/tmp/cwd',
@@ -18643,7 +18566,7 @@ function makeManagerForReadCutover(
runStore: AgentRunStore & RuntimeEventStore,
): SessionManager {
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
return new SessionManager({
store,
runStore,
@@ -19029,7 +18952,7 @@ async function seedBoundaryRestartSession(input: {
const store = new MemorySessionStore();
const runStore = new MemoryAgentRunStore();
const backends = new BackendRegistry();
- backends.register('fake', (ctx) => new TestBackend(ctx));
+ backends.register('ai-sdk', (ctx) => new TestBackend(ctx));
const managerDeps = {
store,
runStore,
diff --git a/packages/runtime/src/__tests__/shell-run-tool-result.test.ts b/packages/runtime/src/__tests__/shell-run-tool-result.test.ts
index 4084c1917..7578b6642 100644
--- a/packages/runtime/src/__tests__/shell-run-tool-result.test.ts
+++ b/packages/runtime/src/__tests__/shell-run-tool-result.test.ts
@@ -116,7 +116,6 @@ describe('shell run sandbox denial projection', () => {
const store = createSessionStore(root);
const session = await store.create({
cwd: '/workspace',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/runtime/src/__tests__/stream-graph-coordinator.test.ts b/packages/runtime/src/__tests__/stream-graph-coordinator.test.ts
index aab0a61fa..208336dab 100644
--- a/packages/runtime/src/__tests__/stream-graph-coordinator.test.ts
+++ b/packages/runtime/src/__tests__/stream-graph-coordinator.test.ts
@@ -258,7 +258,7 @@ describe('host-managed agent graph coordinator', () => {
},
});
const backends = new BackendRegistry();
- backends.register('fake', (context) => new FakeBackend(context));
+ backends.register('ai-sdk', (context) => new FakeBackend(context));
const manager = new SessionManager({
store: sessionStore,
runStore,
@@ -279,7 +279,6 @@ describe('host-managed agent graph coordinator', () => {
try {
const rootSession = await manager.createSession({
cwd: root,
- backend: 'fake',
llmConnectionSlug: 'fake',
permissionMode: 'ask',
name: 'Graph supervisor',
@@ -1075,7 +1074,7 @@ describe('host-managed agent graph coordinator', () => {
join(root, OPERATIONAL_STATE_DATABASE_NAME),
);
const backends = new BackendRegistry();
- backends.register('fake', (context) => new FakeBackend(context));
+ backends.register('ai-sdk', (context) => new FakeBackend(context));
const manager = new SessionManager({
store: sessionStore,
runStore,
@@ -1090,7 +1089,6 @@ describe('host-managed agent graph coordinator', () => {
try {
const rootSession = await manager.createSession({
cwd: root,
- backend: 'fake',
llmConnectionSlug: 'fake',
permissionMode: 'ask',
orchestrationMode: 'swarm',
diff --git a/packages/runtime/src/runtime-kernel.ts b/packages/runtime/src/runtime-kernel.ts
index 23b612ffe..18ea7e108 100644
--- a/packages/runtime/src/runtime-kernel.ts
+++ b/packages/runtime/src/runtime-kernel.ts
@@ -692,8 +692,8 @@ export class RuntimeKernel implements RuntimeKernelLike {
store: this.deps.store,
runStore: this.deps.runStore,
runtimeEventStore: this.deps.runtimeEventStore,
- ...(runtimeToolBoundaryProtocol(this.deps, header)
- ? { toolBoundaryProtocol: runtimeToolBoundaryProtocol(this.deps, header) }
+ ...(this.deps.toolBoundaryProtocol
+ ? { toolBoundaryProtocol: this.deps.toolBoundaryProtocol }
: {}),
repairRunRuntimeLedger: this.deps.repairRunRuntimeLedger,
newId: this.deps.newId,
@@ -835,7 +835,7 @@ export class RuntimeKernel implements RuntimeKernelLike {
);
}
- const continuationToolBoundaryProtocol = runtimeToolBoundaryProtocol(this.deps, header);
+ const continuationToolBoundaryProtocol = this.deps.toolBoundaryProtocol;
const run = new AgentRun({
sessionId: continuation.sessionId,
header,
@@ -1003,8 +1003,8 @@ export class RuntimeKernel implements RuntimeKernelLike {
store: this.deps.store,
runStore: this.deps.runStore,
runtimeEventStore: this.deps.runtimeEventStore,
- ...(runtimeToolBoundaryProtocol(this.deps, header)
- ? { toolBoundaryProtocol: runtimeToolBoundaryProtocol(this.deps, header) }
+ ...(this.deps.toolBoundaryProtocol
+ ? { toolBoundaryProtocol: this.deps.toolBoundaryProtocol }
: {}),
repairRunRuntimeLedger: this.deps.repairRunRuntimeLedger,
newId: this.deps.newId,
@@ -1182,8 +1182,8 @@ export class RuntimeKernel implements RuntimeKernelLike {
store: this.deps.store,
runStore: this.deps.runStore,
runtimeEventStore: this.deps.runtimeEventStore,
- ...(runtimeToolBoundaryProtocol(this.deps, childHeader)
- ? { toolBoundaryProtocol: runtimeToolBoundaryProtocol(this.deps, childHeader) }
+ ...(this.deps.toolBoundaryProtocol
+ ? { toolBoundaryProtocol: this.deps.toolBoundaryProtocol }
: {}),
repairRunRuntimeLedger: this.deps.repairRunRuntimeLedger,
newId: this.deps.newId,
@@ -1329,7 +1329,7 @@ export class RuntimeKernel implements RuntimeKernelLike {
);
}
await this.deps.continuationFailpoint?.('after_continuation_claim_committed');
- const continuationToolBoundaryProtocol = runtimeToolBoundaryProtocol(this.deps, childHeader);
+ const continuationToolBoundaryProtocol = this.deps.toolBoundaryProtocol;
const durableAdmission: {
claimedRunHeader: AgentRunHeader;
commitContinuationStart: (
@@ -3752,13 +3752,6 @@ function childActiveKey(sessionId: string, turnId: string): string {
return `${sessionId}:${turnId}`;
}
-function runtimeToolBoundaryProtocol(
- deps: Pick<RuntimeKernelDeps, 'toolBoundaryProtocol'>,
- header: Pick<SessionHeader, 'backend'>,
-): ToolBoundaryProtocol | undefined {
- return header.backend === 'ai-sdk' ? deps.toolBoundaryProtocol : undefined;
-}
-
function effectiveOrchestrationForRun(
run: AgentRunHeader,
session: SessionHeader,
diff --git a/packages/runtime/src/session-manager.ts b/packages/runtime/src/session-manager.ts
index cd6f9d701..fa04e7fa0 100644
--- a/packages/runtime/src/session-manager.ts
+++ b/packages/runtime/src/session-manager.ts
@@ -2550,7 +2550,6 @@ export class SessionManager {
cwd: workspace?.worktreePath ?? parentHeader.cwd,
...(parentHeader.projectId !== undefined ? { projectId: parentHeader.projectId } : {}),
name: resolvedPreset?.name ?? definition.name,
- backend: parentHeader.backend,
llmConnectionSlug: resolvedPreset?.connectionSlug ?? parentHeader.llmConnectionSlug,
model: resolvedPreset?.model ?? parentHeader.model,
...(resolvedPreset
@@ -3089,7 +3088,6 @@ export class SessionManager {
cwd: workspace?.worktreePath ?? parentHeader.cwd,
...(parentHeader.projectId !== undefined ? { projectId: parentHeader.projectId } : {}),
name: input.name ?? input.resolvedPreset?.name ?? definition.name,
- backend: parentHeader.backend,
llmConnectionSlug: input.resolvedPreset?.connectionSlug ?? parentHeader.llmConnectionSlug,
model: input.resolvedPreset?.model ?? parentHeader.model,
...(input.resolvedPreset
@@ -4953,7 +4951,6 @@ export class SessionManager {
{
cwd: header.cwd,
...(header.projectId !== undefined ? { projectId: header.projectId } : {}),
- backend: header.backend,
llmConnectionSlug: header.llmConnectionSlug,
model: header.model,
thinkingLevel: header.thinkingLevel,
@@ -5016,7 +5013,6 @@ export class SessionManager {
{
cwd: header.cwd,
...(header.projectId !== undefined ? { projectId: header.projectId } : {}),
- backend: header.backend,
llmConnectionSlug: header.llmConnectionSlug,
model: header.model,
thinkingLevel: header.thinkingLevel,
diff --git a/packages/storage/src/__tests__/external-session-importer.test.ts b/packages/storage/src/__tests__/external-session-importer.test.ts
index dc849c084..565368057 100644
--- a/packages/storage/src/__tests__/external-session-importer.test.ts
+++ b/packages/storage/src/__tests__/external-session-importer.test.ts
@@ -150,7 +150,6 @@ describe('ExternalSessionImporter', () => {
function target(overrides: Partial<ExternalSessionImportTarget> = {}): ExternalSessionImportTarget {
return {
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'maka-model',
permissionMode: 'ask',
diff --git a/packages/storage/src/__tests__/goal-authority.test.ts b/packages/storage/src/__tests__/goal-authority.test.ts
index 662e31a62..1be86d895 100644
--- a/packages/storage/src/__tests__/goal-authority.test.ts
+++ b/packages/storage/src/__tests__/goal-authority.test.ts
@@ -117,7 +117,6 @@ test('Session retirement atomically removes its Goal authority', async () => {
['archive', 'remove'].map((name) =>
stores.sessionStore.create({
cwd: capability.canonicalPath,
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/storage/src/__tests__/operational-state-backup.test.ts b/packages/storage/src/__tests__/operational-state-backup.test.ts
index 3502fb2f0..3c88be967 100644
--- a/packages/storage/src/__tests__/operational-state-backup.test.ts
+++ b/packages/storage/src/__tests__/operational-state-backup.test.ts
@@ -36,7 +36,6 @@ test('backs up and restores runtime.sqlite plus artifact bytes', async () => {
const session = await sessions.create({
projectId: project.id,
cwd: '/tmp/cwd',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask',
diff --git a/packages/storage/src/__tests__/session-bundle-policy.test.ts b/packages/storage/src/__tests__/session-bundle-policy.test.ts
index 206eddb94..9e833dfcb 100644
--- a/packages/storage/src/__tests__/session-bundle-policy.test.ts
+++ b/packages/storage/src/__tests__/session-bundle-policy.test.ts
@@ -141,7 +141,6 @@ test('retains only the selected Session partial stream segments', async () => {
function input(name: string): CreateSessionInput {
return {
cwd: '/tmp/cwd',
- backend: 'fake',
llmConnectionSlug: 'fake',
model: 'fake-model',
permissionMode: 'ask' as const,
diff --git a/packages/storage/src/__tests__/session-store.test.ts b/packages/storage/src/__tests__/session-store.test.ts
index 883a06f53..87d853d0d 100644
--- a/packages/storage/src/__tests__/session-store.test.ts
+++ b/packages/storage/src/__tests__/session-store.test.ts
@@ -1079,7 +1079,6 @@ describe('SQLite SessionStore', () => {
function makeInput(overrides: Partial<CreateSessionInput> = {}): CreateSessionInput {
return {
cwd: '/tmp/cwd',
- backend: 'ai-sdk',
llmConnectionSlug: 'test-connection',
model: 'test-model',
permissionMode: 'ask',
diff --git a/packages/storage/src/__tests__/settings-store-usage.test.ts b/packages/storage/src/__tests__/settings-store-usage.test.ts
index d1cfc9024..7f88b83ce 100644
--- a/packages/storage/src/__tests__/settings-store-usage.test.ts
+++ b/packages/storage/src/__tests__/settings-store-usage.test.ts
@@ -13,7 +13,6 @@ async function seedSession(workspaceRoot: string, messages: StoredMessage[]): Pr
try {
const header = await sessions.create({
cwd: '/tmp/maka-workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'anthropic',
model: 'claude-sonnet-4',
permissionMode: 'ask',
@@ -77,7 +76,6 @@ describe('SettingsStore.usageStats request logs', () => {
try {
const header = await sessions.create({
cwd: '/tmp/maka-workspace',
- backend: 'ai-sdk',
llmConnectionSlug: 'sqlite-provider',
model: 'sqlite-default-model',
permissionMode: 'ask',
diff --git a/packages/storage/src/session-store.ts b/packages/storage/src/session-store.ts
index a8370c1ad..4dc5e36d5 100644
--- a/packages/storage/src/session-store.ts
+++ b/packages/storage/src/session-store.ts
@@ -1036,7 +1036,7 @@ function buildSessionHeader(
...(input.revisionIndex !== undefined ? { revisionIndex: input.revisionIndex } : {}),
...(input.revisionState ? { revisionState: input.revisionState } : {}),
hasUnread: false,
- backend: input.backend,
+ backend: 'ai-sdk',
llmConnectionSlug: input.llmConnectionSlug,
connectionLocked: false,
model: input.model ?? 'default',
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@maka.apache.org
For additional commands, e-mail: commits-help@maka.apache.org