From 7d517188bdda54b96ae988adab071d50b67e47f8 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 15:38:20 -0800 Subject: [PATCH 001/922] fix(server): workspace search ignore filter follows the host path separator (#35697) --- .../workspace/WorkspaceSearchIndex.test.ts | 2 +- .../src/workspace/WorkspaceSearchIndex.ts | 23 +++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/apps/server/src/workspace/WorkspaceSearchIndex.test.ts b/apps/server/src/workspace/WorkspaceSearchIndex.test.ts index 1001d59293c6e..c01600842f2f6 100644 --- a/apps/server/src/workspace/WorkspaceSearchIndex.test.ts +++ b/apps/server/src/workspace/WorkspaceSearchIndex.test.ts @@ -135,7 +135,7 @@ it.effect.skipIf(HostProcess.Platform.defaultValue() === "win32")( expect(result.entries).toEqual([{ kind: "file", path: "dir\\one/report.txt" }]); }), - ), + ).pipe(Effect.provide(testLayer)), ); it.effect("continues whole-word searches after a filtered grep page", () => diff --git a/apps/server/src/workspace/WorkspaceSearchIndex.ts b/apps/server/src/workspace/WorkspaceSearchIndex.ts index b21f2dde83b08..5d5d39bf55612 100644 --- a/apps/server/src/workspace/WorkspaceSearchIndex.ts +++ b/apps/server/src/workspace/WorkspaceSearchIndex.ts @@ -294,6 +294,7 @@ function withDirectoryAncestors(entries: ReadonlyArray): ProjectEn const listGitIgnoredPaths = Effect.fn("WorkspaceSearchIndex.listGitIgnoredPaths")(function* ( vcsProcess: VcsProcess.VcsProcess["Service"], cwd: string, + hostIsWindows: boolean, ) { const result = yield* vcsProcess .run({ @@ -320,7 +321,7 @@ const listGitIgnoredPaths = Effect.fn("WorkspaceSearchIndex.listGitIgnoredPaths" result.stdout .split("\0") .filter((entry) => entry.length > 0) - .map((entry) => trimDirectorySeparator(toPosixPath(entry))), + .map((entry) => trimDirectorySeparator(toPosixPath(entry, hostIsWindows))), ); }); @@ -328,9 +329,15 @@ function mixedItemPath(item: MixedItem): string { return item.item.relativePath; } -function isIgnoredPath(ignoredPaths: ReadonlySet, relativePath: string): boolean { +function isIgnoredPath( + ignoredPaths: ReadonlySet, + relativePath: string, + hostIsWindows: boolean, +): boolean { if (ignoredPaths.size === 0) return false; - let candidate: string | undefined = trimDirectorySeparator(toPosixPath(relativePath)); + let candidate: string | undefined = trimDirectorySeparator( + toPosixPath(relativePath, hostIsWindows), + ); while (candidate) { if (ignoredPaths.has(candidate)) return true; candidate = parentPathOf(candidate); @@ -402,7 +409,7 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( ); let initialScanTimedOut = false; const vcsProcess = yield* VcsProcess.VcsProcess; - let ignoredPaths = yield* listGitIgnoredPaths(vcsProcess, cwd); + let ignoredPaths = yield* listGitIgnoredPaths(vcsProcess, cwd, hostIsWindows); yield* waitForIndexReady( cwd, finder, @@ -466,7 +473,9 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( const fetchSize = size; const result = yield* runSearch(query, fetchSize, operation, () => execute(fetchSize)); if (ignoredPaths.size === 0) return result; - const items = result.items.filter((item) => !isIgnoredPath(ignoredPaths, pathOf(item))); + const items = result.items.filter( + (item) => !isIgnoredPath(ignoredPaths, pathOf(item), hostIsWindows), + ); if ( items.length >= pageSize || result.items.length >= result.totalMatched || @@ -512,7 +521,7 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( cause, }), ).pipe(Effect.catchTags({ WorkspaceSearchIndexScanTimedOut: () => Effect.void })); - ignoredPaths = yield* listGitIgnoredPaths(vcsProcess, cwd); + ignoredPaths = yield* listGitIgnoredPaths(vcsProcess, cwd, hostIsWindows); }); const list: WorkspaceSearchIndex["Service"]["list"] = Effect.fn("WorkspaceSearchIndex.list")( @@ -625,7 +634,7 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( } for (const match of result.items) { - if (isIgnoredPath(ignoredPaths, match.relativePath)) continue; + if (isIgnoredPath(ignoredPaths, match.relativePath, hostIsWindows)) continue; const matchRanges = mapContentMatchRanges(match.lineContent, match.matchRanges).filter( (range) => !input.wholeWord || isWholeWordRange(match.lineContent, range), ); From 6dfb1a8a1868b9d90a6f21e983cfea370c07ba0b Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 15:45:45 -0800 Subject: [PATCH 002/922] fix(server): t3 uninstall names another home's service it leaves installed (#35684) --- apps/server/src/cli/uninstall.test.ts | 68 ++++++++++++++++++++++++++- apps/server/src/cli/uninstall.ts | 19 ++++++-- 2 files changed, 83 insertions(+), 4 deletions(-) diff --git a/apps/server/src/cli/uninstall.test.ts b/apps/server/src/cli/uninstall.test.ts index 4dcdc59e30a78..c50a5a15aad40 100644 --- a/apps/server/src/cli/uninstall.test.ts +++ b/apps/server/src/cli/uninstall.test.ts @@ -1,12 +1,78 @@ import * as NodeServices from "@effect/platform-node/NodeServices"; import { assert, it } from "@effect/vitest"; import * as Config from "effect/Config"; +import * as ConfigProvider from "effect/ConfigProvider"; import * as Effect from "effect/Effect"; import * as FileSystem from "effect/FileSystem"; +import * as Layer from "effect/Layer"; import * as Path from "effect/Path"; +import * as TestConsole from "effect/testing/TestConsole"; +import { Command } from "effect/cli"; import * as HostProcess from "@t3tools/shared/HostProcess"; +import * as NetService from "@t3tools/shared/Net"; +import { afterEach, vi } from "vite-plus/test"; -import { findOwnedLauncher, findRecordedLaunchers, spawnWindowsRemoval } from "./uninstall.ts"; +import packageJson from "../../package.json" with { type: "json" }; +import * as BootService from "../cloud/bootService.ts"; +import { + findOwnedLauncher, + findRecordedLaunchers, + spawnWindowsRemoval, + uninstallCommand, +} from "./uninstall.ts"; + +afterEach(() => vi.restoreAllMocks()); + +it.layer(Layer.mergeAll(NodeServices.layer, NetService.layer))("t3 uninstall command", (it) => { + it.effect("names another home's service it leaves installed", () => + Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const baseDir = yield* fs.makeTempDirectoryScoped({ prefix: "t3-uninstall-cli-test-" }); + const uninstalls: Array = []; + vi.spyOn(BootService, "layer").mockReturnValue( + Layer.succeed( + BootService.BootService, + BootService.BootService.of({ + status: Effect.succeed({ + supported: true, + installed: true, + current: true, + installedBaseDir: "/home/me/.t3", + unitPath: "/home/me/.config/systemd/user/t3code.service", + logPath: "/home/me/.t3/userdata/logs/boot-service.log", + }), + withStopped: (operation) => operation, + restart: Effect.die("unexpected restart"), + install: () => Effect.die("unexpected install"), + uninstall: Effect.sync(() => { + uninstalls.push(true); + return true; + }), + }), + ), + ); + + const output = yield* Command.runWith(uninstallCommand, { version: packageJson.version })([ + "--base-dir", + baseDir, + "--yes", + ]).pipe( + Effect.andThen(TestConsole.logLines), + Effect.map((lines) => lines.join("\n")), + Effect.provideService(HostProcess.Environment, {}), + Effect.provideService(HostProcess.IsExecutable, false), + Effect.provide( + Layer.mergeAll( + ConfigProvider.layer(ConfigProvider.fromEnv({ env: {} })), + Layer.fresh(TestConsole.layer), + ), + ), + ); + assert.deepStrictEqual(uninstalls, []); + assert.include(output, "--base-dir '/home/me/.t3'"); + }), + ); +}); it.layer(NodeServices.layer)("t3 uninstall launcher", (it) => { it.effect("claims only a launcher that points into this home's runtime tree", () => diff --git a/apps/server/src/cli/uninstall.ts b/apps/server/src/cli/uninstall.ts index 5d0361118e10a..bfbc45bf56152 100644 --- a/apps/server/src/cli/uninstall.ts +++ b/apps/server/src/cli/uninstall.ts @@ -33,6 +33,7 @@ export class CliUninstallError extends Schema.TaggedError()( export interface UninstallPlan { readonly service: boolean; + readonly otherHomeService: string | undefined; readonly versionsDir: string; readonly launchers: ReadonlyArray; readonly runtimeDir: string | undefined; @@ -147,15 +148,18 @@ const planUninstall = Effect.fn("cli.uninstall.plan")(function* (input: { const path = yield* Path.Path; const service = yield* BootService.BootService; const status = yield* service.status; + const installedBaseDir = + status.supported && status.installed ? status.installedBaseDir : undefined; const servesThisHome = - status.installedBaseDir !== undefined && - path.resolve(status.installedBaseDir) === path.resolve(input.baseDir); + installedBaseDir !== undefined && + path.resolve(installedBaseDir) === path.resolve(input.baseDir); const versionsDir = pinnedRuntimeVersionsDir(path, input.baseDir); const runtimeDir = path.dirname(versionsDir); const launchedAs = (yield* HostProcess.IsExecutable) ? yield* resolveLauncherPath : undefined; const launchedFrom = yield* findOwnedLauncher({ launchedAs, versionsDir }); const plan: UninstallPlan = { - service: status.supported && status.installed && servesThisHome, + service: servesThisHome, + otherHomeService: servesThisHome ? undefined : installedBaseDir, versionsDir, launchers: [ ...new Set([ @@ -195,6 +199,13 @@ export const uninstallCommand = Command.make("uninstall", { ), ); +const logOtherHomeService = (plan: UninstallPlan) => + plan.otherHomeService === undefined + ? Effect.void + : Console.log( + `The T3 Code service serves ${plan.otherHomeService}, so it was not removed. Pass \`${BootService.formatBootServiceBaseDirOption(plan.otherHomeService)}\` to remove it.`, + ); + const runUninstall = Effect.fn("cli.uninstall.run")(function* (input: { readonly baseDir: string; readonly assumeYes: boolean; @@ -212,6 +223,7 @@ const runUninstall = Effect.fn("cli.uninstall.run")(function* (input: { " This t3 runs from a Node script, so it was installed by npm or built from source. Remove it the same way (`npm uninstall -g t3`, or delete the checkout).", ); } + yield* logOtherHomeService(plan); return; } @@ -286,4 +298,5 @@ const runUninstall = Effect.fn("cli.uninstall.run")(function* (input: { } yield* Console.log(""); yield* Console.log("t3 is uninstalled. Thanks for trying T3 Code."); + yield* logOtherHomeService(plan); }); From cfad3109135f8f8fe0ef41633a04b276107913a0 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 15:46:02 -0800 Subject: [PATCH 003/922] fix(client-runtime): long MCP app download names no longer split an emoji (#35680) --- packages/client-runtime/src/mcpApps/host.test.ts | 8 ++++++-- packages/client-runtime/src/mcpApps/host.ts | 11 +++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/client-runtime/src/mcpApps/host.test.ts b/packages/client-runtime/src/mcpApps/host.test.ts index 3e19e753d43de..4084d2c92ae6c 100644 --- a/packages/client-runtime/src/mcpApps/host.test.ts +++ b/packages/client-runtime/src/mcpApps/host.test.ts @@ -325,7 +325,7 @@ describe("makeMcpAppHost", () => { it("forwards model context and download requests, and declares both", async () => { const contexts: Array = []; - const downloads: Array = []; + const downloads: Array> = []; const { host, sent } = setup({ updateModelContext: async (update) => void contexts.push(update), downloadFile: async (files) => { @@ -349,6 +349,7 @@ describe("makeMcpAppHost", () => { structuredContent: { overdue: 2, since: undefined }, }, }); + const longName = `${"a".repeat(199)}😀.csv`; const embedded = { type: "resource", resource: { uri: "file:///report.csv", mimeType: "text/csv", text: "a,b" }, @@ -364,7 +365,7 @@ describe("makeMcpAppHost", () => { id: 3, method: "ui/download-file", params: { - contents: [embedded, { type: "resource_link", uri: "ui://todos/export", name: "x" }], + contents: [embedded, { type: "resource_link", uri: "ui://todos/export", name: longName }], }, }); host.receive({ jsonrpc: "2.0", id: 4, method: "ui/download-file", params: { contents: [{}] } }); @@ -380,6 +381,9 @@ describe("makeMcpAppHost", () => { bytes: new TextEncoder().encode("a,b"), }, ]); + const capped = downloads[1]?.[1]?.name ?? ""; + expect(capped.length).toBeLessThanOrEqual(200); + expect(capped.isWellFormed()).toBe(true); expect(sent.find((m) => m.id === 2)?.result).toEqual({}); expect(sent.find((m) => m.id === 3)?.result).toEqual({ isError: true }); expect(sent.find((m) => m.id === 4)?.error).toMatchObject({ code: -32602 }); diff --git a/packages/client-runtime/src/mcpApps/host.ts b/packages/client-runtime/src/mcpApps/host.ts index e6bb82f916d1d..065508a2ee44b 100644 --- a/packages/client-runtime/src/mcpApps/host.ts +++ b/packages/client-runtime/src/mcpApps/host.ts @@ -482,10 +482,13 @@ function downloadName(uri: unknown, name: unknown): string { : typeof uri === "string" ? (uri.split(/[/?#]/).findLast(Boolean) ?? "download") : "download"; - const safe = Array.from(raw, (char) => - /[\\/:*?"<>|]/.test(char) || char.charCodeAt(0) < 32 ? "-" : char, - ).join(""); - return safe.slice(0, MAX_DOWNLOAD_NAME) || "download"; + let safe = ""; + for (const char of raw) { + const next = /[\\/:*?"<>|]/.test(char) || char.charCodeAt(0) < 32 ? "-" : char; + if (safe.length + next.length > MAX_DOWNLOAD_NAME) break; + safe += next; + } + return safe || "download"; } function readDownloads(contents: unknown): ReadonlyArray | undefined { From e179cefe7af97cf17d4d68a5f8e0c16202cd9123 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 15:46:15 -0800 Subject: [PATCH 004/922] fix(web): collapsed reasoning previews no longer split an emoji (#35677) --- .../chat/MessagesTimeline.browser.test.tsx | 4 ++++ .../components/chat/TimelineWorkEntryRow.logic.ts | 13 ++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/web/src/components/chat/MessagesTimeline.browser.test.tsx b/apps/web/src/components/chat/MessagesTimeline.browser.test.tsx index 49227eb76eadd..31687095d8c54 100644 --- a/apps/web/src/components/chat/MessagesTimeline.browser.test.tsx +++ b/apps/web/src/components/chat/MessagesTimeline.browser.test.tsx @@ -1801,6 +1801,10 @@ describe("compact reasoning math", () => { "line one\r\nline two\r\n\r\nnext  nbsp wide 😀𝑥
end", [["text", "line one line two next nbsp wide 😀𝑥 end"]], ], + [ + `${"x".repeat(THOUGHT_PREVIEW_MAX_LENGTH - 1)}😀 tail`, + [["text", "x".repeat(THOUGHT_PREVIEW_MAX_LENGTH - 1)]], + ], ["\\$5 and \\$6, \\*not em\\*", [["text", "$5 and $6, *not em*"]]], ["hard \nbreak\\\nagain", [["text", "hard break again"]]], ["
only html
", [["text", "Reasoning"]]], diff --git a/apps/web/src/components/chat/TimelineWorkEntryRow.logic.ts b/apps/web/src/components/chat/TimelineWorkEntryRow.logic.ts index 39bd3e6b3f844..854dd7d21a949 100644 --- a/apps/web/src/components/chat/TimelineWorkEntryRow.logic.ts +++ b/apps/web/src/components/chat/TimelineWorkEntryRow.logic.ts @@ -209,17 +209,20 @@ export function remarkThoughtPreview(fallback: string) { children.push({ type: "text", value: fragments.join("").replace(/\s+/g, " ") }); fragments = []; }; - const append = (value: string) => { + const take = (value: string) => { const text = value.slice(0, remaining); - remaining -= text.length; - fragments.push(text); + remaining = text.length < value.length ? 0 : remaining - text.length; + // A cut here or at the source limit must not leave half a surrogate pair. + return text.replace(/[\uD800-\uDBFF]$/, ""); + }; + const append = (value: string) => { + fragments.push(take(value)); }; const visit = (node: Root | RootContent) => { if (remaining === 0 || node.type === "html" || node.type === "definition") return; if (node.type === "math" || node.type === "inlineMath") { flush(); - const value = node.value.slice(0, remaining); - remaining -= value.length; + const value = take(node.value); children.push({ type: "inlineMath", value, From 4cfcfaf2fd7aaceffeac5f786ced5b9b4c7f1cef Mon Sep 17 00:00:00 2001 From: Logan Date: Thu, 12 Nov 2026 17:46:28 -0600 Subject: [PATCH 005/922] fix(web): a question answer restored with undo is no longer sent twice (#35574) Co-authored-by: ixmxvii-hash <235766220+ixmxvii-hash@users.noreply.github.com> Co-authored-by: Julius Marminge --- ...UserInputPanel.navigation.browser.test.tsx | 40 +++++++++++++---- .../chat/usePendingThreadRequests.ts | 44 +++++++++++++++++++ apps/web/src/pendingUserInput.test.ts | 38 ++++++++++++++++ apps/web/src/pendingUserInput.ts | 22 ++++++++++ 4 files changed, 136 insertions(+), 8 deletions(-) diff --git a/apps/web/src/components/chat/ComposerPendingUserInputPanel.navigation.browser.test.tsx b/apps/web/src/components/chat/ComposerPendingUserInputPanel.navigation.browser.test.tsx index 06d725f19cdf1..d4919fe4a2808 100644 --- a/apps/web/src/components/chat/ComposerPendingUserInputPanel.navigation.browser.test.tsx +++ b/apps/web/src/components/chat/ComposerPendingUserInputPanel.navigation.browser.test.tsx @@ -17,7 +17,7 @@ vi.mock(import("../ChatMarkdown"), async (importOriginal) => ({ })); import { act, fakeTimers, render } from "../../../test/render"; -import { useComposerDraftStore } from "../../composerDraftStore"; +import { DraftId, useComposerDraftStore } from "../../composerDraftStore"; import { makeThreadProjectionFixture } from "../../test-fixtures"; import { toastManager } from "../ui/toast"; import { usePendingThreadRequests } from "./usePendingThreadRequests"; @@ -80,9 +80,10 @@ interface ProbeProps { environmentId: EnvironmentId; projection: OrchestrationV2ThreadProjection; loading?: boolean; + draftTarget?: DraftId; } -function useProbeRequests({ environmentId, projection, loading = false }: ProbeProps) { +function useProbeRequests({ environmentId, projection, loading = false, draftTarget }: ProbeProps) { const promptRef = useRef(""); const composerRef = useRef(null); return usePendingThreadRequests({ @@ -90,7 +91,7 @@ function useProbeRequests({ environmentId, projection, loading = false }: ProbeP activeThreadId: projection.thread.id, serverProjection: loading ? null : projection, supportsQuestionAttachments: false, - composerDraftTarget: { environmentId, threadId: projection.thread.id }, + composerDraftTarget: draftTarget ?? { environmentId, threadId: projection.thread.id }, setComposerDraftPrompt: (target, prompt) => useComposerDraftStore.getState().setPrompt(target, prompt), promptRef, @@ -150,12 +151,10 @@ it("tells the user when an option click moves their typed answer into the hidden const draftTarget = { environmentId, threadId: threadRef.threadId }; const draftPrompt = () => useComposerDraftStore.getState().getComposerDraft(draftTarget)?.prompt; using toast = vi.spyOn(toastManager, "add"); - await using _screen = await render( - , + const probe = (threadId: ThreadId) => ( + ); + await using screen = await render(probe(threadRef.threadId)); await act(() => requests.onSelectActivePendingUserInputOption("question-0", "Incremental")); expect(toast).not.toHaveBeenCalled(); @@ -179,6 +178,31 @@ it("tells the user when an option click moves their typed answer into the hidden customAnswer: "second try", }); expect(toast).toHaveBeenCalledTimes(1); + + // The hook outlives a thread switch; text set aside in another thread is in another draft. + await screen.rerender(probe(ThreadId.make("other-thread"))); + await act(() => requests.onChangeActivePendingUserInputCustomAnswer("question-0", "elsewhere")); + await act(() => requests.onSelectActivePendingUserInputOption("question-0", "Incremental")); + await screen.rerender(probe(threadRef.threadId)); + + // regression: #35205 undo puts the set-aside text back, so the draft must not keep a copy to resend + await act(() => requests.onChangeActivePendingUserInputCustomAnswer("question-0", "first try")); + expect(draftPrompt() ?? "").toBe(""); + + // Text set aside into a queued-message edit draft never withdraws from the thread draft. + await screen.rerender( + , + ); + await act(() => requests.onChangeActivePendingUserInputCustomAnswer("question-0", "foo")); + await act(() => requests.onSelectActivePendingUserInputOption("question-0", "Incremental")); + await screen.rerender(probe(threadRef.threadId)); + useComposerDraftStore.getState().setPrompt(draftTarget, "foo"); + await act(() => requests.onChangeActivePendingUserInputCustomAnswer("question-0", "foo")); + expect(draftPrompt()).toBe("foo"); }); function QuestionPositionProbe(props: ProbeProps) { diff --git a/apps/web/src/components/chat/usePendingThreadRequests.ts b/apps/web/src/components/chat/usePendingThreadRequests.ts index fb73403fdd785..da8d5bf7d32fa 100644 --- a/apps/web/src/components/chat/usePendingThreadRequests.ts +++ b/apps/web/src/components/chat/usePendingThreadRequests.ts @@ -31,6 +31,7 @@ import { } from "@t3tools/client-runtime/state/pending-user-input"; import { carryDisplacedCustomAnswerIntoPrompt, + withdrawDisplacedCustomAnswerFromPrompt, derivePendingUserInputProgress, projectPendingUserInputAnswer, threadContextsReferencedByAnswer, @@ -63,6 +64,7 @@ function makePendingCustomAnswerSetter(input: { readonly activePendingUserInput: PendingUserInput | null; readonly activePendingRequestKey: string; readonly writePrompt: (prompt: string) => void; + readonly withdrawRestoredAnswer: (questionId: string, value: string) => void; readonly setPendingUserInputAnswersByRequestId: ( update: SetStateAction>>, ) => void; @@ -77,6 +79,7 @@ function makePendingCustomAnswerSetter(input: { return; } input.writePrompt(value); + input.withdrawRestoredAnswer(questionId, value); input.setPendingUserInputAnswersByRequestId((existing) => ({ ...existing, [activePendingRequestKey]: { @@ -124,6 +127,15 @@ export function usePendingThreadRequests(input: { reportFailure: false, }); const userInputResponsesInFlight = useRef(new Set()); + // In the order the text went into the thread draft, which is how a copy is found again. + const displacedAnswers = useRef< + Array<{ readonly draft: string; readonly key: string; readonly text: string }> + >([]); + // This hook outlives a thread switch, and each thread has its own draft. + const displacedDraftKey = + typeof composerDraftTarget === "string" + ? composerDraftTarget + : `${composerDraftTarget.environmentId}:${composerDraftTarget.threadId}`; const [respondingRequestIds, setRespondingRequestIds] = useState([]); const [respondingUserInputRequestIds, setRespondingUserInputRequestIds] = useState< RuntimeRequestId[] @@ -389,6 +401,11 @@ export function usePendingThreadRequests(input: { const nextPrompt = carryDisplacedCustomAnswerIntoPrompt(currentPrompt, displacedAnswer); if (nextPrompt !== currentPrompt) { setComposerDraftPrompt(composerDraftTarget, nextPrompt); + displacedAnswers.current.push({ + draft: displacedDraftKey, + key: `${activePendingRequestKey}:${questionId}`, + text: displacedAnswer ?? "", + }); toastManager.add({ type: "info", title: "Your typed text was set aside", @@ -444,10 +461,37 @@ export function usePendingThreadRequests(input: { const writePrompt = useStableCallback((prompt: string) => { promptRef.current = prompt; }); + // Undo can put set-aside text back into the answer; left in the draft too, it is sent twice. + const withdrawRestoredAnswer = useStableCallback((questionId: string, value: string) => { + const key = `${activePendingRequestKey}:${questionId}`; + const entries = displacedAnswers.current; + const index = entries.findLastIndex( + (entry) => + entry.draft === displacedDraftKey && + entry.key === key && + entry.text.trim() === value.trim(), + ); + const displaced = entries[index]; + if (displaced === undefined) return; + const later = entries + .slice(index + 1) + .filter((entry) => entry.draft === displaced.draft) + .map((entry) => entry.text); + displacedAnswers.current = entries.filter((entry) => entry !== displaced); + const currentPrompt = + useComposerDraftStore.getState().getComposerDraft(composerDraftTarget)?.prompt ?? ""; + const nextPrompt = withdrawDisplacedCustomAnswerFromPrompt( + currentPrompt, + displaced.text, + later, + ); + if (nextPrompt !== currentPrompt) setComposerDraftPrompt(composerDraftTarget, nextPrompt); + }); const onChangeActivePendingUserInputCustomAnswer = makePendingCustomAnswerSetter({ activePendingUserInput, activePendingRequestKey, writePrompt, + withdrawRestoredAnswer, setPendingUserInputAnswersByRequestId, }); diff --git a/apps/web/src/pendingUserInput.test.ts b/apps/web/src/pendingUserInput.test.ts index 7f556d6e847b6..f57c2d9150709 100644 --- a/apps/web/src/pendingUserInput.test.ts +++ b/apps/web/src/pendingUserInput.test.ts @@ -9,6 +9,7 @@ import { derivePendingUserInputProgress, projectPendingUserInputAnswer, threadContextsReferencedByAnswer, + withdrawDisplacedCustomAnswerFromPrompt, } from "./pendingUserInput"; describe("projectPendingUserInputAnswer", () => { @@ -161,3 +162,40 @@ describe("carryDisplacedCustomAnswerIntoPrompt", () => { ); }); }); + +describe("withdrawDisplacedCustomAnswerFromPrompt", () => { + // regression: #35205 an answer restored with undo stayed in the thread draft and was sent twice + it("takes set-aside text back out of the thread draft and leaves the rest", () => { + const setAside = carryDisplacedCustomAnswerIntoPrompt("", "first answer "); + expect(withdrawDisplacedCustomAnswerFromPrompt(setAside, "first answer ")).toBe(""); + + const afterDraft = carryDisplacedCustomAnswerIntoPrompt("draft", "first answer"); + expect(withdrawDisplacedCustomAnswerFromPrompt(afterDraft, "first answer")).toBe("draft"); + + const beforeSecond = carryDisplacedCustomAnswerIntoPrompt(setAside, "second answer"); + expect( + withdrawDisplacedCustomAnswerFromPrompt(beforeSecond, "first answer", ["second answer"]), + ).toBe("second answer"); + + const between = carryDisplacedCustomAnswerIntoPrompt(afterDraft, "second answer"); + expect( + withdrawDisplacedCustomAnswerFromPrompt(between, "first answer", ["second answer"]), + ).toBe("draft\n\nsecond answer"); + }); + + it("removes its own copy, not equal text inside a later set-aside answer", () => { + const first = carryDisplacedCustomAnswerIntoPrompt("", "foo"); + const both = carryDisplacedCustomAnswerIntoPrompt(first, "bar\n\nfoo"); + expect(withdrawDisplacedCustomAnswerFromPrompt(both, "foo", ["bar\n\nfoo"])).toBe("bar\n\nfoo"); + }); + + it("leaves a thread draft that no longer holds the set-aside text where it was put", () => { + expect(withdrawDisplacedCustomAnswerFromPrompt("first answer, edited", "first answer")).toBe( + "first answer, edited", + ); + expect(withdrawDisplacedCustomAnswerFromPrompt("my first answer", "first answer")).toBe( + "my first answer", + ); + expect(withdrawDisplacedCustomAnswerFromPrompt("draft", " ")).toBe("draft"); + }); +}); diff --git a/apps/web/src/pendingUserInput.ts b/apps/web/src/pendingUserInput.ts index a9cfef1366dad..1afc298ca94a8 100644 --- a/apps/web/src/pendingUserInput.ts +++ b/apps/web/src/pendingUserInput.ts @@ -72,6 +72,28 @@ export function carryDisplacedCustomAnswerIntoPrompt( return `${prompt.trimEnd()}${DISPLACED_ANSWER_SEPARATOR}${displaced}`; } +/** + * Takes set-aside answer text back out of the thread draft once it is the answer again. + * `laterDisplaced` is what was set aside after it, in order: together they locate this copy, + * so equal text inside another answer or the user's own draft is never the one removed. + */ +export function withdrawDisplacedCustomAnswerFromPrompt( + prompt: string, + displaced: string, + laterDisplaced: ReadonlyArray = [], +): string { + const text = displaced.trim(); + if (text.length === 0) return prompt; + const later = laterDisplaced.map((entry) => entry.trim()).filter((entry) => entry.length > 0); + const suffix = [text, ...later].join(DISPLACED_ANSWER_SEPARATOR); + if (!prompt.endsWith(suffix)) return prompt; + const before = prompt.slice(0, prompt.length - suffix.length); + const after = later.join(DISPLACED_ANSWER_SEPARATOR); + if (before.length === 0) return after; + if (!before.endsWith(DISPLACED_ANSWER_SEPARATOR)) return prompt; + return after.length === 0 ? before.slice(0, -DISPLACED_ANSWER_SEPARATOR.length) : before + after; +} + function countAnsweredPendingUserInputQuestions( questions: ReadonlyArray, draftAnswers: Record, From f59aa4eba0b3e588e8232ba5bf68a3829d6fc80b Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 13 Nov 2026 00:46:46 +0100 Subject: [PATCH 006/922] fix(server): reject PR watches when hosting dependencies are unavailable (#33389) Co-authored-by: Daniel D <1325654+complynx@users.noreply.github.com> Co-authored-by: Julius Marminge --- apps/server/src/mcp/McpHttpServer.test.ts | 3 + apps/server/src/mcp/McpHttpServer.ts | 3 +- .../toolkits/pullRequests/handlers.test.ts | 89 +----- .../src/mcp/toolkits/pullRequests/handlers.ts | 146 ++------- .../src/mcp/toolkits/pullRequests/tools.ts | 84 +---- .../src/provider/AgentContextBudget.test.ts | 2 + .../pullRequest/PullRequestService.test.ts | 66 ++++ .../src/pullRequest/PullRequestService.ts | 16 +- .../PullRequestWatchService.test.ts | 294 ++++++++++++++++++ .../pullRequest/PullRequestWatchService.ts | 180 +++++++++++ .../src/pullRequest/pullRequestTarget.ts | 123 ++++++++ 11 files changed, 718 insertions(+), 288 deletions(-) create mode 100644 apps/server/src/pullRequest/PullRequestWatchService.test.ts create mode 100644 apps/server/src/pullRequest/PullRequestWatchService.ts create mode 100644 apps/server/src/pullRequest/pullRequestTarget.ts diff --git a/apps/server/src/mcp/McpHttpServer.test.ts b/apps/server/src/mcp/McpHttpServer.test.ts index eb6185b3744e7..54d3470800280 100644 --- a/apps/server/src/mcp/McpHttpServer.test.ts +++ b/apps/server/src/mcp/McpHttpServer.test.ts @@ -44,6 +44,7 @@ import * as ManagedPolicy from "../policy/ManagedPolicy.ts"; import * as DeviceService from "../device/DeviceService.ts"; import * as PullRequestReviewGuideService from "../pullRequest/PullRequestReviewGuideService.ts"; +import * as PullRequestService from "../pullRequest/PullRequestService.ts"; import * as ServerConfig from "../config.ts"; import * as ServerSettings from "../serverSettings.ts"; import { advertisedJsonSchema } from "./advertisedJsonSchema.ts"; @@ -100,6 +101,7 @@ const layerPullRequestsTest = McpHttpServer.layerPullRequestsToolkit.pipe( Layer.mergeAll( Layer.mock(ProjectService.ProjectService)({}), Layer.mock(PullRequestReviewGuideService.PullRequestReviewGuideService)({}), + Layer.mock(PullRequestService.PullRequestService)({}), Layer.mock(Orchestrator.OrchestratorV2)({}), Layer.mock(ProjectionStore.ProjectionStoreV2)({}), NodeServices.layer, @@ -1543,6 +1545,7 @@ it.effect("lists pull request watch tools only to threads that are not delegated McpToolAccessTestkit.liveThreadsLayer, Layer.mock(ProjectService.ProjectService)({}), Layer.mock(PullRequestReviewGuideService.PullRequestReviewGuideService)({}), + Layer.mock(PullRequestService.PullRequestService)({}), Layer.mock(Orchestrator.OrchestratorV2)({}), Layer.mock(ProjectionStore.ProjectionStoreV2)({}), NodeServices.layer, diff --git a/apps/server/src/mcp/McpHttpServer.ts b/apps/server/src/mcp/McpHttpServer.ts index 853d865d51699..39f679154bcfe 100644 --- a/apps/server/src/mcp/McpHttpServer.ts +++ b/apps/server/src/mcp/McpHttpServer.ts @@ -33,6 +33,7 @@ import * as DeviceService from "../device/DeviceService.ts"; import * as HtmlRender from "../htmlRender/HtmlRender.ts"; import * as ThreadCommandExecutor from "../orchestration-v2/ThreadCommandExecutor.ts"; import * as ThreadManagementService from "../orchestration-v2/ThreadManagementService.ts"; +import * as PullRequestWatchService from "../pullRequest/PullRequestWatchService.ts"; import * as ProviderRegistry from "../provider/ProviderRegistry.ts"; import * as AnalyticsService from "../telemetry/AnalyticsService.ts"; import { @@ -1268,7 +1269,7 @@ export const layerAttachmentToolkit = toolkitRegistration( export const layerPullRequestsToolkit = toolkitRegistration( PullRequestsToolkit, PullRequestsHandlers.layer, -); +).pipe(Layer.provide(PullRequestWatchService.layer)); const layerDeviceStandardToolkitRegistration = toolkitRegistration( DeviceStandardToolkit, diff --git a/apps/server/src/mcp/toolkits/pullRequests/handlers.test.ts b/apps/server/src/mcp/toolkits/pullRequests/handlers.test.ts index ceaef41d459f3..d6c746440a60a 100644 --- a/apps/server/src/mcp/toolkits/pullRequests/handlers.test.ts +++ b/apps/server/src/mcp/toolkits/pullRequests/handlers.test.ts @@ -26,6 +26,7 @@ import { v2PullRequestThread, } from "../../../orchestration-v2/testkit/pullRequestFixtures.ts"; import * as ProjectService from "../../../project/ProjectService.ts"; +import * as PullRequestWatchService from "../../../pullRequest/PullRequestWatchService.ts"; import * as PullRequestReviewGuideService from "../../../pullRequest/PullRequestReviewGuideService.ts"; import * as McpInvocationContext from "../../McpInvocationContext.ts"; import * as McpToolAccess from "../../McpToolAccess.ts"; @@ -167,6 +168,7 @@ const makeHarness = Effect.fn("makePullRequestsToolkitHarness")(function* ( return { sequence: 1, storedEvents: [] }; }); const layerDependencies = Layer.mergeAll( + Layer.mock(PullRequestWatchService.PullRequestWatchService)({}), Layer.mock(ProjectService.ProjectService)({ getShell: () => Effect.succeed(Option.fromNullishOr(project)), listShells: () => Effect.succeed(options.projects ?? (project ? [project] : [])), @@ -278,93 +280,6 @@ describe("pull request toolkit handlers", () => { }), ); - it.effect("watching an unlinked pull request links it first", () => - Effect.gen(function* () { - const harness = yield* makeHarness(); - const result = yield* harness.call("watch_pull_request", { - url: "https://github.com/t3tools/t3code/pull/9", - }); - expect(result).toMatchObject({ number: 9, watching: false, wasWatching: false }); - expect(yield* Ref.get(harness.commands)).toMatchObject([ - { - type: "thread.pull-request.watch", - number: 9, - watching: true, - link: { url: "https://github.com/t3tools/t3code/pull/9", source: "agent" }, - }, - ]); - }), - ); - - it.effect("refuses to watch a merged pull request and stops an existing watch", () => - Effect.gen(function* () { - const watch = { - startedAt: "2026-08-20T00:00:00.000Z", - headSha: null, - failedChecks: [], - passed: false, - passedChecks: [], - remarksThrough: "2026-08-20T00:00:00.000Z", - remarkIds: [], - conflicting: false, - wakes: 0, - }; - const merged = makeLink(1, { headBranch: "done" }); - const harness = yield* makeHarness({ - thread: makeThread([ - { ...merged, snapshot: merged.snapshot && { ...merged.snapshot, state: "merged" } }, - makeLink(2, { headBranch: "idle" }), - makeLink(3, { headBranch: "watched", watch }), - ]), - }); - const error = yield* harness - .call("watch_pull_request", { repository: "t3tools/t3code", number: 1 }) - .pipe(Effect.flip); - expect(error).toMatchObject({ _tag: "PullRequestNotOpenError", state: "merged" }); - expect( - yield* harness.call("unwatch_pull_request", { repository: "t3tools/t3code", number: 3 }), - ).toMatchObject({ wasWatching: true }); - expect(yield* Ref.get(harness.commands)).toMatchObject([ - { type: "thread.pull-request.watch", number: 3, watching: false }, - ]); - }), - ); - - it.effect("watches a pull request saved as closed, since it may have reopened", () => - Effect.gen(function* () { - const closed = makeLink(1, { headBranch: "closed" }); - const harness = yield* makeHarness({ - thread: makeThread([ - { ...closed, snapshot: closed.snapshot && { ...closed.snapshot, state: "closed" } }, - ]), - }); - yield* harness.call("watch_pull_request", { repository: "t3tools/t3code", number: 1 }); - expect(yield* Ref.get(harness.commands)).toMatchObject([ - { type: "thread.pull-request.watch", number: 1, watching: true }, - ]); - }), - ); - - it.effect("refuses a watch from a subagent thread, whose parent owns the pull request", () => - Effect.gen(function* () { - const harness = yield* makeHarness({ - thread: { - ...makeThread([makeLink(1, { headBranch: "feature" })]), - lineage: { - rootThreadId: ThreadId.make("parent"), - parentThreadId: ThreadId.make("parent"), - relationshipToParent: "subagent", - }, - }, - }); - const error = yield* harness - .call("watch_pull_request", { repository: "t3tools/t3code", number: 1 }) - .pipe(Effect.flip); - expect(error).toMatchObject({ _tag: "PullRequestWatchFromSubagentError" }); - expect(yield* Ref.get(harness.commands)).toEqual([]); - }), - ); - it.effect("asks a subagent thread to end with its PR report after it links", () => Effect.gen(function* () { const harness = yield* makeHarness({ diff --git a/apps/server/src/mcp/toolkits/pullRequests/handlers.ts b/apps/server/src/mcp/toolkits/pullRequests/handlers.ts index a703a8f5f39fb..8983b8e62652d 100644 --- a/apps/server/src/mcp/toolkits/pullRequests/handlers.ts +++ b/apps/server/src/mcp/toolkits/pullRequests/handlers.ts @@ -2,11 +2,9 @@ import { CommandId, type OrchestrationProjectShell, type OrchestrationV2ThreadShell, - type SourceControlProviderKind, type ThreadId, type ThreadPullRequestLink, } from "@t3tools/contracts"; -import { canonicalizeGitCafePullRequestUrl } from "@t3tools/source-control-definitions/registry"; import * as Cause from "effect/Cause"; import * as SecureRandom from "effect/crypto/SecureRandom"; import * as Effect from "effect/Effect"; @@ -14,6 +12,8 @@ import * as Option from "effect/Option"; import * as Orchestrator from "../../../orchestration-v2/Orchestrator.ts"; import * as ProjectService from "../../../project/ProjectService.ts"; +import * as PullRequestWatchService from "../../../pullRequest/PullRequestWatchService.ts"; +import { resolveTarget, type ResolvedTarget } from "../../../pullRequest/pullRequestTarget.ts"; import * as PullRequestReviewGuideService from "../../../pullRequest/PullRequestReviewGuideService.ts"; import { pullRequestSyncKey } from "../../../pullRequest/pullRequestSyncKey.ts"; import { sourceControlDefinitions } from "../../../sourceControl/sourceControlDefinitions.ts"; @@ -31,16 +31,9 @@ import { threadNotFound } from "../../threadAccess.ts"; import { type ListThreadPullRequestsResult, PullRequestLinkFailedError, - PullRequestUrlInvalidError, - PullRequestTargetIncompleteError, - PullRequestHostRequiredError, - PullRequestUrlUnavailableError, PullRequestUnlinkFailedError, PullRequestListFailedError, - PullRequestNotOpenError, type PullRequestTargetInput, - PullRequestWatchFailedError, - PullRequestWatchFromSubagentError, PullRequestThreadRequiredError, PullRequestGuideFailedError, PullRequestProjectNotFoundError, @@ -49,73 +42,6 @@ import { CHILD_PULL_REQUEST_REPORT_NEXT, } from "./tools.ts"; -interface ResolvedTarget { - readonly host: string; - readonly repository: string; - readonly number: number; - readonly url: string; -} - -function projectHostAndProvider(project: OrchestrationProjectShell | undefined): { - readonly host: string | null; - readonly kind: SourceControlProviderKind | null; -} { - const identity = project?.repositoryIdentity; - const kind = identity?.provider ?? null; - if (!identity || kind === null) return { host: null, kind: null }; - return { - host: sourceControlDefinitions.changeRequestHost(identity, kind), - kind, - }; -} - -const resolveTarget = Effect.fn("PullRequestsToolkit.resolveTarget")(function* ( - input: PullRequestTargetInput, - project: OrchestrationProjectShell | undefined, -) { - if (input.url !== undefined) { - const parsed = sourceControlDefinitions.parseChangeRequestUrl(input.url)?.link; - if (parsed === undefined) { - return yield* new PullRequestUrlInvalidError({}); - } - return { - ...normalizeThreadPullRequestKey(parsed), - url: canonicalizeGitCafePullRequestUrl(input.url), - } satisfies ResolvedTarget; - } - if (input.repository === undefined || input.number === undefined) { - return yield* new PullRequestTargetIncompleteError({}); - } - const projectHost = projectHostAndProvider(project); - const host = (input.host ?? projectHost.host)?.toLowerCase(); - if (host === undefined) { - return yield* new PullRequestHostRequiredError({}); - } - const repository = input.repository.toLowerCase(); - // Without a URL, a public forge host says what shape its change request URLs take; - // any other host is taken to run the project's own forge. - const recognizedKind = sourceControlDefinitions.recognizeRemote(`https://${host}`)?.kind; - const kind = - sourceControlDefinitions.findByPublicHost(host)?.kind ?? - (recognizedKind === "gitcafe" ? recognizedKind : projectHost.kind); - const url = - kind === null - ? null - : sourceControlDefinitions.get(kind).changeRequestUrl({ - host, - repository, - number: input.number, - remoteUrl: project?.repositoryIdentity?.locator.remoteUrl, - }); - if (url === null) { - return yield* new PullRequestUrlUnavailableError({}); - } - return { - ...normalizeThreadPullRequestKey({ host, repository, number: input.number, url }), - url: canonicalizeGitCafePullRequestUrl(url), - } satisfies ResolvedTarget; -}); - function entryOf( link: ThreadPullRequestLink, chains: ReturnType, @@ -198,6 +124,7 @@ function projectForPullRequest( const make = Effect.gen(function* () { const engine = yield* Orchestrator.OrchestratorV2; const reviewGuides = yield* PullRequestReviewGuideService.PullRequestReviewGuideService; + const watches = yield* PullRequestWatchService.PullRequestWatchService; const projects = yield* ProjectService.ProjectService; const random = yield* SecureRandom.SecureRandom; @@ -212,8 +139,7 @@ const make = Effect.gen(function* () { Failure: | typeof PullRequestLinkFailedError | typeof PullRequestUnlinkFailedError - | typeof PullRequestListFailedError - | typeof PullRequestWatchFailedError, + | typeof PullRequestListFailedError, requested: ThreadId | undefined, ) { const scope = yield* McpInvocationContext.requireMcpCapability("pull-requests"); @@ -233,10 +159,7 @@ const make = Effect.gen(function* () { const projectOf = ( thread: OrchestrationV2ThreadShell, - Failure: - | typeof PullRequestLinkFailedError - | typeof PullRequestUnlinkFailedError - | typeof PullRequestWatchFailedError, + Failure: typeof PullRequestLinkFailedError | typeof PullRequestUnlinkFailedError, ) => projects.getShell(thread.projectId).pipe( Effect.map(Option.getOrUndefined), @@ -244,61 +167,28 @@ const make = Effect.gen(function* () { ); const dispatchFailure = - ( - Failure: - | typeof PullRequestLinkFailedError - | typeof PullRequestUnlinkFailedError - | typeof PullRequestWatchFailedError, - ) => + (Failure: typeof PullRequestLinkFailedError | typeof PullRequestUnlinkFailedError) => ( cause: Cause.Cause, - ): Effect.Effect< - never, - PullRequestLinkFailedError | PullRequestUnlinkFailedError | PullRequestWatchFailedError - > => + ): Effect.Effect => Cause.hasInterruptsOnly(cause) ? Effect.failCause(cause as Cause.Cause) : Effect.fail(new Failure({ cause })); - const setWatching = Effect.fn("PullRequestsToolkit.setWatching")(function* ( + // The domain service owns the registration span. + const setWatching = Effect.fnUntraced(function* ( input: PullRequestTargetInput, watching: boolean, ) { - const thread = yield* requireThread(PullRequestWatchFailedError, input.threadId); - const project = yield* projectOf(thread, PullRequestWatchFailedError); - const target = yield* resolveTarget(input, project); - const watchedLink = (shell: OrchestrationV2ThreadShell) => - threadPullRequestsOf(shell).find( - (link) => link.source !== "stack-dismissed" && threadPullRequestKeysEqual(link, target), - ); - if (watching && thread.lineage.relationshipToParent === "subagent") { - return yield* new PullRequestWatchFromSubagentError(); - } - const before = watchedLink(thread); - if (watching && before?.snapshot?.state === "merged") { - return yield* new PullRequestNotOpenError({ state: "merged" }); - } - yield* engine - .dispatch({ - type: "thread.pull-request.watch", - commandId: yield* commandId("mcp-pr-watch", thread.id), - threadId: thread.id, - host: target.host, - repository: target.repository, - number: target.number, - watching, - ...(watching ? { link: { url: target.url, source: "agent" as const } } : {}), - }) - .pipe(Effect.catchCause(dispatchFailure(PullRequestWatchFailedError))); - const after = yield* requireThread(PullRequestWatchFailedError, thread.id); - return { - host: target.host, - repository: target.repository, - number: target.number, - url: target.url, - watching: watchedLink(after)?.watch !== undefined, - wasWatching: before?.watch !== undefined, - }; + const scope = yield* McpInvocationContext.requireMcpCapability("pull-requests"); + const threadId = input.threadId ?? scope.thread?.threadId; + if (threadId === undefined) return yield* new PullRequestThreadRequiredError(); + return yield* watches.setWatching({ threadId, target: input, watching }).pipe( + Effect.catchTags({ + PullRequestWatchThreadNotFoundError: (error) => + threadNotFound(engine, error.threadId, error.message), + }), + ); }); const locateAll = Effect.fn("PullRequestsToolkit.locateAll")(function* ( diff --git a/apps/server/src/mcp/toolkits/pullRequests/tools.ts b/apps/server/src/mcp/toolkits/pullRequests/tools.ts index e86bf3013bc92..fe8959b2d22d3 100644 --- a/apps/server/src/mcp/toolkits/pullRequests/tools.ts +++ b/apps/server/src/mcp/toolkits/pullRequests/tools.ts @@ -6,6 +6,7 @@ import { PullRequestReviewGuide, PullRequestReviewGuideRun, PullRequestState, + PullRequestUnavailableError, ThreadPullRequestLinkSource, TrimmedNonEmptyString, ThreadId, @@ -19,6 +20,13 @@ import * as McpInvocationContext from "../../McpInvocationContext.ts"; import * as Orchestrator from "../../../orchestration-v2/Orchestrator.ts"; import * as ThreadManagementService from "../../../orchestration-v2/ThreadManagementService.ts"; import * as ProjectService from "../../../project/ProjectService.ts"; +import * as PullRequestWatchService from "../../../pullRequest/PullRequestWatchService.ts"; +import { + PullRequestUrlInvalidError, + PullRequestTargetIncompleteError, + PullRequestHostRequiredError, + PullRequestUrlUnavailableError, +} from "../../../pullRequest/pullRequestTarget.ts"; import * as PullRequestReviewGuideService from "../../../pullRequest/PullRequestReviewGuideService.ts"; const dependencies = [ @@ -33,6 +41,8 @@ const guideDependencies = [ PullRequestReviewGuideService.PullRequestReviewGuideService, ]; +const watchDependencies = [...dependencies, PullRequestWatchService.PullRequestWatchService]; + export const PullRequestTargetInput = Schema.Struct({ environmentId: OrchestratorMcpEnvironmentTarget, threadId: Schema.optional( @@ -59,42 +69,6 @@ export const PullRequestTargetInput = Schema.Struct({ }); export type PullRequestTargetInput = typeof PullRequestTargetInput.Type; -export class PullRequestUrlInvalidError extends Schema.TaggedError()( - "PullRequestUrlInvalidError", - {}, -) { - override get message(): string { - return "This is not a recognised pull request URL. Pass repository and number instead."; - } -} - -export class PullRequestTargetIncompleteError extends Schema.TaggedError()( - "PullRequestTargetIncompleteError", - {}, -) { - override get message(): string { - return "Pass either url, or both repository and number."; - } -} - -export class PullRequestHostRequiredError extends Schema.TaggedError()( - "PullRequestHostRequiredError", - {}, -) { - override get message(): string { - return "This thread's project has no recognised remote. Pass host or url."; - } -} - -export class PullRequestUrlUnavailableError extends Schema.TaggedError()( - "PullRequestUrlUnavailableError", - {}, -) { - override get message(): string { - return "This thread's project is on a host with no known pull request URL shape. Pass url."; - } -} - export class PullRequestThreadRequiredError extends Schema.TaggedError()( "PullRequestThreadRequiredError", {}, @@ -122,33 +96,6 @@ export class PullRequestUnlinkFailedError extends Schema.TaggedError()( - "PullRequestWatchFailedError", - { cause: Schema.Defect() }, -) { - override get message(): string { - return "Could not change whether the pull request is watched."; - } -} - -export class PullRequestNotOpenError extends Schema.TaggedError()( - "PullRequestNotOpenError", - { state: Schema.String }, -) { - override get message(): string { - return `The pull request is ${this.state}, so there is nothing to watch.`; - } -} - -export class PullRequestWatchFromSubagentError extends Schema.TaggedError()( - "PullRequestWatchFromSubagentError", - {}, -) { - override get message(): string { - return "This thread is a subagent, so it cannot watch pull requests. Its parent thread owns the pull request: finish your task and report back instead."; - } -} - export class PullRequestListFailedError extends Schema.TaggedError()( "PullRequestListFailedError", { cause: Schema.Defect() }, @@ -187,9 +134,10 @@ export const PullRequestToolError = Schema.Union([ PullRequestLinkFailedError, PullRequestUnlinkFailedError, PullRequestListFailedError, - PullRequestWatchFailedError, - PullRequestNotOpenError, - PullRequestWatchFromSubagentError, + PullRequestWatchService.PullRequestWatchFailedError, + PullRequestUnavailableError, + PullRequestWatchService.PullRequestNotOpenError, + PullRequestWatchService.PullRequestWatchFromSubagentError, PullRequestProjectNotFoundError, PullRequestGuideFailedError, ]); @@ -378,7 +326,7 @@ const WatchPullRequestTool = Tool.make("watch_pull_request", { parameters: PullRequestTargetInput, success: WatchPullRequestResult, failure: PullRequestToolError, - dependencies, + dependencies: watchDependencies, }) .annotate(Tool.Title, "Watch pull request") .annotate(Tool.Readonly, false) @@ -392,7 +340,7 @@ const UnwatchPullRequestTool = Tool.make("unwatch_pull_request", { parameters: PullRequestTargetInput, success: WatchPullRequestResult, failure: PullRequestToolError, - dependencies, + dependencies: watchDependencies, }) .annotate(Tool.Title, "Stop watching pull request") .annotate(Tool.Readonly, false) diff --git a/apps/server/src/provider/AgentContextBudget.test.ts b/apps/server/src/provider/AgentContextBudget.test.ts index 8cdd52d202f12..7e380189ee6cd 100644 --- a/apps/server/src/provider/AgentContextBudget.test.ts +++ b/apps/server/src/provider/AgentContextBudget.test.ts @@ -35,6 +35,7 @@ import { ProjectCloneTracker } from "../project/ProjectCloneTracker.ts"; import { ProjectService } from "../project/ProjectService.ts"; import { ProjectSetupScriptRunner } from "../project/ProjectSetupScriptRunner.ts"; import { PullRequestReviewGuideService } from "../pullRequest/PullRequestReviewGuideService.ts"; +import { PullRequestService } from "../pullRequest/PullRequestService.ts"; import { ScheduledTaskService } from "../scheduledTasks/ScheduledTaskService.ts"; import { SecretRequests } from "../secrets/SecretRequests.ts"; import { ServerSettingsService } from "../serverSettings.ts"; @@ -68,6 +69,7 @@ const toolHandlerServices = Layer.mergeAll( Layer.mock(ProviderAdapterRegistryV2)({}), Layer.mock(ProviderRegistry)({}), Layer.mock(PullRequestReviewGuideService)({}), + Layer.mock(PullRequestService)({}), Layer.mock(RemoteDelegation)({}), Layer.mock(ScheduledTaskService)({}), Layer.mock(SecretRequests)({}), diff --git a/apps/server/src/pullRequest/PullRequestService.test.ts b/apps/server/src/pullRequest/PullRequestService.test.ts index 89a3ab7cd56c4..7e40e43b55e0d 100644 --- a/apps/server/src/pullRequest/PullRequestService.test.ts +++ b/apps/server/src/pullRequest/PullRequestService.test.ts @@ -2215,6 +2215,72 @@ it.effect("routes a hosted reference to another repository through a project on }), ); +it.effect("an uncached summary reaches the host despite a cached read in another project", () => + Effect.gen(function* () { + const caller = project({ + id: "caller", + title: "caller", + workspaceRoot: "/caller", + repository: "acme/other", + }); + const target = project({ + id: "gitlab", + title: "gitlab", + workspaceRoot: "/gitlab", + repository: "team/project", + provider: "gitlab", + }); + let missing = false; + let reads = 0; + const service = yield* makeService({ + projects: [caller, target], + providers: [ + fakePullRequestProvider(SourceControlProviderKind.make("github")), + fakePullRequestProvider(SourceControlProviderKind.make("gitlab"), { + getChangeRequestSummary: (input) => + Effect.suspend(() => { + reads++; + assert.strictEqual(input.cwd, target.workspaceRoot); + assert.strictEqual(input.repository, "team/project"); + assert.strictEqual(input.host, "gitlab.com"); + return missing + ? Effect.fail( + new PullRequestProviderError({ + provider: SourceControlProviderKind.make("gitlab"), + operation: "summary", + reason: "missing-tool", + detail: "The hosting CLI is unavailable.", + }), + ) + : Effect.succeed(changeRequest(42, "2026-07-02T00:00:00Z")); + }), + }), + ], + }); + const reference = { + projectId: caller.id, + host: "gitlab.com", + repository: "team/project", + number: 42, + allowStale: false, + }; + yield* service.summary(reference, { recoverTransientFailure: false }); + missing = true; + yield* service.summary(reference, { recoverTransientFailure: false }); + assert.strictEqual(reads, 1); + + const error = yield* service + .summary(reference, { recoverTransientFailure: false, bypassCache: true }) + .pipe(Effect.flip); + expect(error).toMatchObject({ + _tag: "PullRequestUnavailableError", + reason: "cli-missing", + provider: "gitlab", + }); + assert.strictEqual(reads, 2); + }), +); + it.effect("routes Azure reads and writes through the requested organization's checkout", () => Effect.gen(function* () { const seen: string[] = []; diff --git a/apps/server/src/pullRequest/PullRequestService.ts b/apps/server/src/pullRequest/PullRequestService.ts index 6cd890eb7e0fb..943fdc55d1d50 100644 --- a/apps/server/src/pullRequest/PullRequestService.ts +++ b/apps/server/src/pullRequest/PullRequestService.ts @@ -198,7 +198,11 @@ export class PullRequestService extends Context.Service< ) => Effect.Effect; readonly summary: ( input: PullRequestRef, - options?: { readonly recoverTransientFailure?: boolean }, + options?: { + readonly recoverTransientFailure?: boolean; + /** Registration preflights must reach the provider despite a successful cached read. */ + readonly bypassCache?: boolean; + }, ) => Effect.Effect; /** Whether the reference's host batches summary reads; false when it cannot be resolved. */ readonly batchesReads: (input: PullRequestRef) => Effect.Effect; @@ -3067,13 +3071,17 @@ export const make = Effect.gen(function* () { const summary: PullRequestService["Service"]["summary"] = (input, options) => { const key = refCacheKey(input); - const cached = persistedRead(input, "summary", summaryCodec, summaryUncached(input)); + const read = + options?.bypassCache === true + ? summaryUncached(input) + : persistedRead(input, "summary", summaryCodec, summaryUncached(input)); const held = lastGoodSummary.peek(key); - return held !== undefined && + return options?.bypassCache !== true && + held !== undefined && input.allowStale !== false && (options?.recoverTransientFailure !== false || held.state === "merged") ? Effect.succeed(held) - : cached.pipe( + : read.pipe( Effect.tap((value) => shouldReplaceHeldSummary(key, value) ? lastGoodSummary.record(key, value) : Effect.void, ), diff --git a/apps/server/src/pullRequest/PullRequestWatchService.test.ts b/apps/server/src/pullRequest/PullRequestWatchService.test.ts new file mode 100644 index 0000000000000..2c4f4d92e4693 --- /dev/null +++ b/apps/server/src/pullRequest/PullRequestWatchService.test.ts @@ -0,0 +1,294 @@ +import { + ProjectId, + ProviderInstanceId, + ThreadId, + PullRequestOperationError, + PullRequestUnavailableError, + type PullRequestSummary, + type OrchestrationV2ServerCommand as OrchestrationCommand, + type OrchestrationProjectShell, + type ThreadPullRequestLink, + SourceControlProviderKind, +} from "@t3tools/contracts"; +import { describe, expect, it } from "@effect/vitest"; +import * as SecureRandom from "effect/crypto/SecureRandom"; +import * as Effect from "effect/Effect"; +import * as Layer from "effect/Layer"; +import * as Option from "effect/Option"; +import * as Ref from "effect/Ref"; + +import * as Orchestrator from "../orchestration-v2/Orchestrator.ts"; +import { + type PullRequestTestThread, + v2PullRequestThread, +} from "../orchestration-v2/testkit/pullRequestFixtures.ts"; +import * as ProjectService from "../project/ProjectService.ts"; +import * as PullRequestService from "./PullRequestService.ts"; +import * as PullRequestWatchService from "./PullRequestWatchService.ts"; +import type { PullRequestTarget } from "./pullRequestTarget.ts"; + +const PROJECT_ID = ProjectId.make("project-1"); +const THREAD_ID = ThreadId.make("thread-1"); +const testCrypto = SecureRandom.make((size) => new Uint8Array(size).fill(7)); + +function makeProject( + repositoryIdentity: OrchestrationProjectShell["repositoryIdentity"] = { + canonicalKey: "github.com/t3tools/t3code", + locator: { + source: "git-remote", + remoteName: "origin", + remoteUrl: "git@github.com:T3Tools/T3Code.git", + }, + provider: SourceControlProviderKind.make("github"), + displayName: "T3Tools/T3Code", + owner: "T3Tools", + name: "T3Code", + }, +): OrchestrationProjectShell { + return { + id: PROJECT_ID, + title: "Project", + workspaceRoot: "/workspace/project", + defaultModelSelection: null, + scripts: [], + repositoryIdentity, + createdAt: "2026-08-01T00:00:00.000Z", + updatedAt: "2026-08-01T00:00:00.000Z", + }; +} + +function makeThread(pullRequests: ReadonlyArray): PullRequestTestThread { + return { + id: THREAD_ID, + projectId: PROJECT_ID, + title: "Thread", + modelSelection: { instanceId: ProviderInstanceId.make("codex"), model: "gpt-5" }, + runtimeMode: "full-access", + interactionMode: "default", + branch: null, + worktreePath: null, + pullRequests, + createdAt: "2026-08-01T00:00:00.000Z", + updatedAt: "2026-08-20T00:00:00.000Z", + archivedAt: null, + settledOverride: null, + settledAt: null, + latestUserMessageAt: "2026-08-20T00:00:00.000Z", + }; +} + +function makeLink( + number: number, + overrides: Partial & { + readonly headBranch?: string; + readonly baseBranch?: string; + } = {}, +): ThreadPullRequestLink { + const { headBranch, baseBranch, ...rest } = overrides; + return { + host: "github.com", + repository: "t3tools/t3code", + number, + url: `https://github.com/t3tools/t3code/pull/${number}`, + source: "manual", + linkedAt: "2026-08-10T00:00:00.000Z", + snapshot: + headBranch === undefined + ? null + : { + state: "open", + title: `PR ${number}`, + headBranch, + baseBranch: baseBranch ?? "main", + isDraft: false, + updatedAt: null, + syncedAt: "2026-08-27T00:00:00.000Z", + }, + stack: null, + ...rest, + }; +} + +interface HarnessOptions { + readonly thread?: PullRequestTestThread | null; + readonly project?: OrchestrationProjectShell | null; + readonly readFailure?: PullRequestService.PullRequestError; + readonly readState?: PullRequestSummary["state"]; +} + +const makeHarness = Effect.fn("makePullRequestWatchHarness")(function* ( + options: HarnessOptions = {}, +) { + const commands = yield* Ref.make>([]); + const thread = options.thread === undefined ? makeThread([]) : options.thread; + const project = options.project === undefined ? makeProject() : options.project; + const dependencies = Layer.mergeAll( + Layer.mock(ProjectService.ProjectService)({ + getShell: () => Effect.succeed(Option.fromNullishOr(project)), + }), + Layer.mock(Orchestrator.OrchestratorV2)({ + getThreadShell: (id) => + Effect.succeed(id === thread?.id ? v2PullRequestThread(thread) : null), + dispatch: (command) => + Ref.update(commands, (recorded) => [...recorded, command]).pipe( + Effect.as({ sequence: 1, storedEvents: [] }), + ), + }), + Layer.mock(PullRequestService.PullRequestService)({ + summary: (input) => + options.readFailure !== undefined + ? Effect.fail(options.readFailure) + : Effect.succeed({ + ...input, + provider: SourceControlProviderKind.make("github"), + title: "Pull request", + url: `https://github.com/${input.repository}/pull/${input.number}`, + state: options.readState ?? "open", + headBranch: "feature", + baseBranch: "main", + updatedAt: "2026-08-20T00:00:00.000Z", + }), + }), + Layer.succeed(SecureRandom.SecureRandom, testCrypto), + ); + const service = yield* PullRequestWatchService.PullRequestWatchService.pipe( + Effect.provide(PullRequestWatchService.layer.pipe(Layer.provide(dependencies))), + ); + return { + commands, + setWatching: (watching: boolean, target: PullRequestTarget) => + service.setWatching({ threadId: THREAD_ID, target, watching }), + }; +}); + +describe("PullRequestWatchService", () => { + it.effect("links an unlinked watch even while the host has a transient read failure", () => + Effect.gen(function* () { + for (const options of [ + {}, + { + readFailure: new PullRequestOperationError({ + operation: "summary", + detail: "The host is temporarily unavailable.", + }), + }, + ]) { + const harness = yield* makeHarness(options); + const result = yield* harness.setWatching(true, { + url: "https://github.com/t3tools/t3code/pull/9", + }); + expect(result).toMatchObject({ number: 9, wasWatching: false }); + expect(yield* Ref.get(harness.commands)).toMatchObject([ + { + type: "thread.pull-request.watch", + number: 9, + watching: true, + link: { url: "https://github.com/t3tools/t3code/pull/9", source: "agent" }, + }, + ]); + } + }), + ); + + it.effect("reports a missing hosting CLI before saving a watch and still allows unwatch", () => + Effect.gen(function* () { + const missing = new PullRequestUnavailableError({ + reason: "cli-missing", + provider: SourceControlProviderKind.make("gitlab"), + requirement: "Install glab on the T3 server's PATH.", + }); + const harness = yield* makeHarness({ readFailure: missing }); + const target = { url: "https://gitlab.example.com/team/project/-/merge_requests/42" }; + const error = yield* harness.setWatching(true, target).pipe(Effect.flip); + expect(error).toEqual(missing); + expect(yield* Ref.get(harness.commands)).toEqual([]); + + yield* harness.setWatching(false, target); + expect(yield* Ref.get(harness.commands)).toMatchObject([ + { type: "thread.pull-request.watch", watching: false }, + ]); + }), + ); + + it.effect("rejects merged PRs and keeps an active watch usable without hosting access", () => + Effect.gen(function* () { + const freshMerged = yield* makeHarness({ readState: "merged" }); + const freshError = yield* freshMerged + .setWatching(true, { repository: "t3tools/t3code", number: 1 }) + .pipe(Effect.flip); + expect(freshError).toMatchObject({ _tag: "PullRequestNotOpenError", state: "merged" }); + expect(yield* Ref.get(freshMerged.commands)).toEqual([]); + + const watch = { + startedAt: "2026-08-20T00:00:00.000Z", + headSha: null, + failedChecks: [], + passed: false, + passedChecks: [], + remarksThrough: "2026-08-20T00:00:00.000Z", + remarkIds: [], + conflicting: false, + wakes: 0, + }; + const merged = makeLink(1, { headBranch: "done" }); + const harness = yield* makeHarness({ + readFailure: new PullRequestUnavailableError({ reason: "cli-missing" }), + thread: makeThread([ + { ...merged, snapshot: merged.snapshot && { ...merged.snapshot, state: "merged" } }, + makeLink(2, { headBranch: "idle" }), + makeLink(3, { headBranch: "watched", watch }), + ]), + }); + const error = yield* harness + .setWatching(true, { repository: "t3tools/t3code", number: 1 }) + .pipe(Effect.flip); + expect(error).toMatchObject({ _tag: "PullRequestNotOpenError", state: "merged" }); + expect( + yield* harness.setWatching(true, { repository: "t3tools/t3code", number: 3 }), + ).toMatchObject({ watching: true, wasWatching: true }); + expect( + yield* harness.setWatching(false, { repository: "t3tools/t3code", number: 3 }), + ).toMatchObject({ wasWatching: true }); + expect(yield* Ref.get(harness.commands)).toMatchObject([ + { type: "thread.pull-request.watch", number: 3, watching: true }, + { type: "thread.pull-request.watch", number: 3, watching: false }, + ]); + }), + ); + + it.effect("watches a pull request saved as closed, since it may have reopened", () => + Effect.gen(function* () { + const closed = makeLink(1, { headBranch: "closed" }); + const harness = yield* makeHarness({ + readState: "closed", + thread: makeThread([ + { ...closed, snapshot: closed.snapshot && { ...closed.snapshot, state: "closed" } }, + ]), + }); + yield* harness.setWatching(true, { repository: "t3tools/t3code", number: 1 }); + expect(yield* Ref.get(harness.commands)).toMatchObject([ + { type: "thread.pull-request.watch", number: 1, watching: true }, + ]); + }), + ); + + it.effect("refuses a watch from a subagent thread, whose parent owns the pull request", () => + Effect.gen(function* () { + const harness = yield* makeHarness({ + thread: { + ...makeThread([makeLink(1, { headBranch: "feature" })]), + lineage: { + rootThreadId: ThreadId.make("parent"), + parentThreadId: ThreadId.make("parent"), + relationshipToParent: "subagent", + }, + }, + }); + const error = yield* harness + .setWatching(true, { repository: "t3tools/t3code", number: 1 }) + .pipe(Effect.flip); + expect(error).toMatchObject({ _tag: "PullRequestWatchFromSubagentError" }); + expect(yield* Ref.get(harness.commands)).toEqual([]); + }), + ); +}); diff --git a/apps/server/src/pullRequest/PullRequestWatchService.ts b/apps/server/src/pullRequest/PullRequestWatchService.ts new file mode 100644 index 0000000000000..6ed736075c018 --- /dev/null +++ b/apps/server/src/pullRequest/PullRequestWatchService.ts @@ -0,0 +1,180 @@ +import { + CommandId, + ThreadId, + type OrchestrationV2ThreadShell, + type PullRequestUnavailableError, +} from "@t3tools/contracts"; +import * as Cause from "effect/Cause"; +import * as Context from "effect/Context"; +import * as SecureRandom from "effect/crypto/SecureRandom"; +import * as Effect from "effect/Effect"; +import * as Layer from "effect/Layer"; +import * as Option from "effect/Option"; +import * as Schema from "effect/Schema"; + +import * as Orchestrator from "../orchestration-v2/Orchestrator.ts"; +import * as ProjectService from "../project/ProjectService.ts"; +import * as PullRequestService from "./PullRequestService.ts"; +import { + resolveTarget, + type PullRequestTarget, + type PullRequestTargetError, + type ResolvedTarget, +} from "./pullRequestTarget.ts"; +import { + threadPullRequestKeysEqual, + threadPullRequestsOf, +} from "../sourceControl/threadPullRequests.ts"; + +export class PullRequestWatchFailedError extends Schema.TaggedError()( + "PullRequestWatchFailedError", + { cause: Schema.Defect() }, +) { + override get message(): string { + return "Could not change whether the pull request is watched."; + } +} + +export class PullRequestNotOpenError extends Schema.TaggedError()( + "PullRequestNotOpenError", + { state: Schema.String }, +) { + override get message(): string { + return `The pull request is ${this.state}, so there is nothing to watch.`; + } +} + +export class PullRequestWatchFromSubagentError extends Schema.TaggedError()( + "PullRequestWatchFromSubagentError", + {}, +) { + override get message(): string { + return "This thread is a subagent, so it cannot watch pull requests. Its parent thread owns the pull request: finish your task and report back instead."; + } +} + +export class PullRequestWatchThreadNotFoundError extends Schema.TaggedError()( + "PullRequestWatchThreadNotFoundError", + { threadId: ThreadId }, +) { + override get message(): string { + return `Thread ${this.threadId} was not found.`; + } +} + +export class PullRequestWatchService extends Context.Service< + PullRequestWatchService, + { + readonly setWatching: (input: { + readonly threadId: ThreadId; + readonly target: PullRequestTarget; + readonly watching: boolean; + }) => Effect.Effect< + ResolvedTarget & { readonly watching: boolean; readonly wasWatching: boolean }, + | PullRequestWatchFailedError + | PullRequestNotOpenError + | PullRequestWatchFromSubagentError + | PullRequestWatchThreadNotFoundError + | PullRequestTargetError + | PullRequestUnavailableError + >; + } +>()("t3/pullRequest/PullRequestWatchService") {} + +const make = Effect.gen(function* () { + const engine = yield* Orchestrator.OrchestratorV2; + const projects = yield* ProjectService.ProjectService; + const pullRequests = yield* PullRequestService.PullRequestService; + const random = yield* SecureRandom.SecureRandom; + + const requireThread = Effect.fn("PullRequestWatchService.requireThread")(function* ( + threadId: ThreadId, + ) { + const thread = yield* engine + .getThreadShell(threadId) + .pipe(Effect.mapError((cause) => new PullRequestWatchFailedError({ cause }))); + if (thread === null || thread.deletedAt !== null) { + return yield* new PullRequestWatchThreadNotFoundError({ threadId }); + } + return thread; + }); + + // Keep the registration span stable across the service extraction. + const setWatching = Effect.fn("PullRequestsToolkit.setWatching")(function* (input: { + readonly threadId: ThreadId; + readonly target: PullRequestTarget; + readonly watching: boolean; + }) { + const { watching } = input; + const thread = yield* requireThread(input.threadId); + const project = yield* projects.getShell(thread.projectId).pipe( + Effect.map(Option.getOrUndefined), + Effect.mapError((cause) => new PullRequestWatchFailedError({ cause })), + ); + const target = yield* resolveTarget(input.target, project); + const watchedLink = (shell: OrchestrationV2ThreadShell) => + threadPullRequestsOf(shell).find( + (link) => link.source !== "stack-dismissed" && threadPullRequestKeysEqual(link, target), + ); + if (watching && thread.lineage.relationshipToParent === "subagent") { + return yield* new PullRequestWatchFromSubagentError(); + } + const before = watchedLink(thread); + if (watching && before?.snapshot?.state === "merged") { + return yield* new PullRequestNotOpenError({ state: "merged" }); + } + if (watching && before?.watch === undefined) { + yield* pullRequests + .summary( + { + projectId: thread.projectId, + host: target.host, + repository: target.repository, + number: target.number, + allowStale: false, + }, + { recoverTransientFailure: false, bypassCache: true }, + ) + .pipe( + Effect.flatMap((summary) => + summary.state === "merged" + ? Effect.fail(new PullRequestNotOpenError({ state: "merged" })) + : Effect.void, + ), + Effect.catchTags({ + // Host and transport errors can recover while the watch is active. + PullRequestOperationError: () => Effect.void, + }), + ); + } + const uuid = yield* random.uuidV4().pipe(Effect.orDie); + yield* engine + .dispatch({ + type: "thread.pull-request.watch", + commandId: CommandId.make(`server:mcp-pr-watch:${thread.id}:${uuid}`), + threadId: thread.id, + host: target.host, + repository: target.repository, + number: target.number, + watching, + ...(watching ? { link: { url: target.url, source: "agent" as const } } : {}), + }) + .pipe( + Effect.catchCause((cause) => + Cause.hasInterruptsOnly(cause) + ? Effect.failCause(cause as Cause.Cause) + : Effect.fail(new PullRequestWatchFailedError({ cause })), + ), + ); + const after = yield* requireThread(thread.id); + return { + ...target, + watching: watchedLink(after)?.watch !== undefined, + wasWatching: before?.watch !== undefined, + }; + }); + + return PullRequestWatchService.of({ setWatching }); +}); + +export const layer = Layer.effect(PullRequestWatchService, make); diff --git a/apps/server/src/pullRequest/pullRequestTarget.ts b/apps/server/src/pullRequest/pullRequestTarget.ts new file mode 100644 index 0000000000000..4520b0523a369 --- /dev/null +++ b/apps/server/src/pullRequest/pullRequestTarget.ts @@ -0,0 +1,123 @@ +import type { OrchestrationProjectShell, SourceControlProviderKind } from "@t3tools/contracts"; +import { canonicalizeGitCafePullRequestUrl } from "@t3tools/source-control-definitions/registry"; +import * as Effect from "effect/Effect"; +import * as Schema from "effect/Schema"; + +import { sourceControlDefinitions } from "../sourceControl/sourceControlDefinitions.ts"; +import { normalizeThreadPullRequestKey } from "../sourceControl/threadPullRequests.ts"; + +export interface PullRequestTarget { + readonly url?: string | undefined; + readonly repository?: string | undefined; + readonly number?: number | undefined; + readonly host?: string | undefined; +} + +export class PullRequestUrlInvalidError extends Schema.TaggedError()( + "PullRequestUrlInvalidError", + {}, +) { + override get message(): string { + return "This is not a recognised pull request URL. Pass repository and number instead."; + } +} + +export class PullRequestTargetIncompleteError extends Schema.TaggedError()( + "PullRequestTargetIncompleteError", + {}, +) { + override get message(): string { + return "Pass either url, or both repository and number."; + } +} + +export class PullRequestHostRequiredError extends Schema.TaggedError()( + "PullRequestHostRequiredError", + {}, +) { + override get message(): string { + return "This thread's project has no recognised remote. Pass host or url."; + } +} + +export class PullRequestUrlUnavailableError extends Schema.TaggedError()( + "PullRequestUrlUnavailableError", + {}, +) { + override get message(): string { + return "This thread's project is on a host with no known pull request URL shape. Pass url."; + } +} + +export type PullRequestTargetError = + | PullRequestUrlInvalidError + | PullRequestTargetIncompleteError + | PullRequestHostRequiredError + | PullRequestUrlUnavailableError; + +export interface ResolvedTarget { + readonly host: string; + readonly repository: string; + readonly number: number; + readonly url: string; +} + +function projectHostAndProvider(project: OrchestrationProjectShell | undefined): { + readonly host: string | null; + readonly kind: SourceControlProviderKind | null; +} { + const identity = project?.repositoryIdentity; + const kind = identity?.provider ?? null; + if (!identity || kind === null) return { host: null, kind: null }; + return { + host: sourceControlDefinitions.changeRequestHost(identity, kind), + kind, + }; +} + +export const resolveTarget = Effect.fn("PullRequestsToolkit.resolveTarget")(function* ( + input: PullRequestTarget, + project: OrchestrationProjectShell | undefined, +) { + if (input.url !== undefined) { + const parsed = sourceControlDefinitions.parseChangeRequestUrl(input.url)?.link; + if (parsed === undefined) { + return yield* new PullRequestUrlInvalidError({}); + } + return { + ...normalizeThreadPullRequestKey(parsed), + url: canonicalizeGitCafePullRequestUrl(input.url), + } satisfies ResolvedTarget; + } + if (input.repository === undefined || input.number === undefined) { + return yield* new PullRequestTargetIncompleteError({}); + } + const projectHost = projectHostAndProvider(project); + const host = (input.host ?? projectHost.host)?.toLowerCase(); + if (host === undefined) { + return yield* new PullRequestHostRequiredError({}); + } + const repository = input.repository.toLowerCase(); + // Without a URL, a public forge host says what shape its change request URLs take; + // any other host is taken to run the project's own forge. + const recognizedKind = sourceControlDefinitions.recognizeRemote(`https://${host}`)?.kind; + const kind = + sourceControlDefinitions.findByPublicHost(host)?.kind ?? + (recognizedKind === "gitcafe" ? recognizedKind : projectHost.kind); + const url = + kind === null + ? null + : sourceControlDefinitions.get(kind).changeRequestUrl({ + host, + repository, + number: input.number, + remoteUrl: project?.repositoryIdentity?.locator.remoteUrl, + }); + if (url === null) { + return yield* new PullRequestUrlUnavailableError({}); + } + return { + ...normalizeThreadPullRequestKey({ host, repository, number: input.number, url }), + url: canonicalizeGitCafePullRequestUrl(url), + } satisfies ResolvedTarget; +}); From 9fb4492329e5847efeabf2b4d4f5c40a58dc883e Mon Sep 17 00:00:00 2001 From: Alb11747 Date: Thu, 12 Nov 2026 18:47:06 -0500 Subject: [PATCH 007/922] fix(chat): requeued steers no longer look delivered (#23420) Co-authored-by: maria-rcks Co-authored-by: Julius Marminge --- .../src/orchestration-v2/Orchestrator.ts | 17 +- .../orchestration-v2/ProjectionStore.test.ts | 304 ++++++++++++++++-- .../src/orchestration-v2/ProjectionStore.ts | 158 ++++++--- .../SteeringCompletion.integration.test.ts | 15 + .../ProviderSwitch.integration.test.ts | 44 +++ apps/server/src/persistence/Migrations.ts | 2 + .../Migrations/086_QueuedTurnInputIndex.ts | 13 + .../reconcileV2PreviewMigration.test.ts | 2 + .../state/orchestrationV2Projection.test.ts | 99 ++++++ .../src/state/orchestrationV2Projection.ts | 31 +- .../src/orchestrationV2Timeline.test.ts | 12 +- .../shared/src/orchestrationV2Timeline.ts | 13 +- 12 files changed, 629 insertions(+), 81 deletions(-) create mode 100644 apps/server/src/persistence/Migrations/086_QueuedTurnInputIndex.ts diff --git a/apps/server/src/orchestration-v2/Orchestrator.ts b/apps/server/src/orchestration-v2/Orchestrator.ts index 1a38e1610494a..568025d523b38 100644 --- a/apps/server/src/orchestration-v2/Orchestrator.ts +++ b/apps/server/src/orchestration-v2/Orchestrator.ts @@ -1973,13 +1973,19 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio const projection = yield* projectionStore.getThreadRecords( threadId, ["runs", "nodes", "attempts", "providerThreads", "turnItems", "messages"], - { turnItemTypes: [], messageRoles: ["user"] }, + { turnItemTypes: ["user_message"], messageRoles: ["user"] }, ); const queuedRun = queuedRunId === undefined ? nextQueuedRun(projection) : projection.runs.find((run) => run.id === queuedRunId && run.status === "queued"); if (queuedRun === undefined) return; + // A steer that fell back to the queue keeps its user item, hidden while the + // run is queued. Republish it before the failure so clients whose bounded + // snapshot omitted it can show the prompt beside the error. + const retainedUserItems = projection.turnItems.filter( + (item) => item.type === "user_message" && item.runId === queuedRun.id, + ); const now = yield* DateTime.now; const rootNode = projection.nodes.find((node) => node.id === queuedRun.rootNodeId); const attempt = projection.attempts.find((entry) => entry.id === queuedRun.activeAttemptId); @@ -2005,6 +2011,15 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio class: handoffUnsupported ? "validation_error" : "unknown", }); yield* writeSystemEvents([ + ...retainedUserItems.map((item) => ({ + type: "turn-item.updated" as const, + threadId, + runId: queuedRun.id, + ...(rootNode === undefined ? {} : { nodeId: rootNode.id }), + providerInstanceId: queuedRun.providerInstanceId, + occurredAt: now, + payload: { ...item, status: "failed" as const, completedAt: now, updatedAt: now }, + })), ...(attempt !== undefined && rootNode !== undefined ? [ { diff --git a/apps/server/src/orchestration-v2/ProjectionStore.test.ts b/apps/server/src/orchestration-v2/ProjectionStore.test.ts index ce28610f09735..0572f83b9a66e 100644 --- a/apps/server/src/orchestration-v2/ProjectionStore.test.ts +++ b/apps/server/src/orchestration-v2/ProjectionStore.test.ts @@ -5018,26 +5018,36 @@ it.layer(layerTest)("ProjectionStoreV2", (it) => { })} ) `; - const cancelledSuffixSnapshot = yield* projectionStore.getThreadSnapshotWindow(threadId, { - rowLimit: sqlPageLimit, - }); - const cancelledSuffixPage = buildBoundedThreadProjection({ - policy: { ...THREAD_HISTORY_PAGE_POLICY, maxUserTurns: undefined }, - projection: cancelledSuffixSnapshot.projection, - snapshotSequence: cancelledSuffixSnapshot.snapshotSequence, - }); - assert.strictEqual(cancelledSuffixPage.latestLocalTurnOrdinal, 1_202); - assert.lengthOf(cancelledSuffixPage.projection.visibleTurnItems, 75); - assert.isFalse( - cancelledSuffixPage.projection.visibleTurnItems.some((row) => - String(row.sourceItemId).includes(":cancelled:"), - ), - ); - assert.isTrue( - cancelledSuffixPage.projection.visibleTurnItems.some( - (row) => row.sourceItemId === runlessQueuedId, - ), - ); + // A steer that fell back to the queue keeps its queued-turn item while its + // run waits. End on cancelled for the checks below. + for (const status of ["queued", "cancelled"] as const) { + yield* sql` + UPDATE orchestration_v2_projection_runs + SET status = ${status}, payload_json = json_set(payload_json, '$.status', ${status}) + WHERE run_id = ${cancelledRunId} + `; + const cancelledSuffixSnapshot = yield* projectionStore.getThreadSnapshotWindow(threadId, { + rowLimit: sqlPageLimit, + }); + const cancelledSuffixPage = buildBoundedThreadProjection({ + policy: { ...THREAD_HISTORY_PAGE_POLICY, maxUserTurns: undefined }, + projection: cancelledSuffixSnapshot.projection, + snapshotSequence: cancelledSuffixSnapshot.snapshotSequence, + }); + assert.strictEqual(cancelledSuffixPage.latestLocalTurnOrdinal, 1_202); + assert.lengthOf(cancelledSuffixPage.projection.visibleTurnItems, 75); + assert.isFalse( + cancelledSuffixPage.projection.visibleTurnItems.some((row) => + String(row.sourceItemId).includes(":cancelled:"), + ), + status, + ); + assert.isTrue( + cancelledSuffixPage.projection.visibleTurnItems.some( + (row) => row.sourceItemId === runlessQueuedId, + ), + ); + } // A steer cancels the queued run before it starts while the steered run keeps writing, so // the queued message leaves the window but its run is still the shell's latest run. @@ -5830,6 +5840,7 @@ it.layer(layerTest)("ProjectionStoreV2", (it) => { : [ "rolled back", "cancelled queued turn", + "held queued turn", "replaced attempt", "stopped", "stopped", @@ -5860,9 +5871,11 @@ it.layer(layerTest)("ProjectionStoreV2", (it) => { ? "rolled_back" : kind === "cancelled queued turn" ? "cancelled" - : kind === "short" && chance(0.5) - ? "interrupted" - : "completed"; + : kind === "held queued turn" + ? "queued" + : kind === "short" && chance(0.5) + ? "interrupted" + : "completed"; runs.push({ id: runId, threadId, @@ -5941,7 +5954,12 @@ it.layer(layerTest)("ProjectionStoreV2", (it) => { ? run % 10 !== 0 : kind !== "late wake" && (agentDriven ? run > 1 : chance(0.2)); if (wakes) notification(); - else userMessage(kind === "cancelled queued turn" ? "queued_turn" : "turn_start"); + else + userMessage( + kind === "cancelled queued turn" || kind === "held queued turn" + ? "queued_turn" + : "turn_start", + ); // A stopped run never folds, so it is long enough for page ends to fall inside it. const work = kind === "late wake" @@ -6573,7 +6591,13 @@ it.layer(layerTest)("ProjectionStoreV2", (it) => { assert.isNotEmpty(countQueries); for (const countQuery of countQueries) { for (const detail of yield* planOf(countQuery)) { - assert.notInclude(detail, "orchestration_v2_projection_turn_items"); + if (detail.includes("orchestration_v2_projection_turn_items")) { + // Only held input is read from the sparse index; transcript history stays unread. + assert.include( + detail, + "SEARCH held USING INDEX orchestration_v2_projection_turn_items_queued_input_idx (run_id=?)", + ); + } } } }), @@ -10421,6 +10445,236 @@ it.layer(layerTest)("ProjectionStoreV2", (it) => { }), ); + it.effect("keeps undelivered queued input out of forks taken after a later run", () => + Effect.gen(function* () { + const projectionStore = yield* ProjectionStore.ProjectionStoreV2; + const now = yield* DateTime.now; + const projectId = ProjectId.make("project:projection-fork-held-queue"); + + for (const heldStatus of ["queued", "cancelled"] as const) { + const prefix = `projection-fork-held-queue:${heldStatus}`; + const sourceThreadId = ThreadId.make(`thread:${prefix}:source`); + const targetThreadId = ThreadId.make(`thread:${prefix}:target`); + const heldRunId = RunId.make(`run:${prefix}:held`); + const heldAttemptId = RunAttemptId.make(`attempt:${prefix}:held`); + const answeredRunId = RunId.make(`run:${prefix}:answered`); + + for (const [threadId, forkedFrom] of [ + [sourceThreadId, null], + [targetThreadId, { type: "run", threadId: sourceThreadId, runId: answeredRunId }], + ] as const) { + yield* projectionStore.apply({ + id: EventId.make(`event:${threadId}:created`), + type: "thread.created", + threadId, + occurredAt: now, + payload: { + createdBy: "user", + creationSource: "web", + id: threadId, + projectId, + title: threadId, + providerInstanceId, + modelSelection, + runtimeMode: "full-access", + interactionMode: "default", + branch: null, + worktreePath: null, + activeProviderThreadId: null, + lineage: { + parentThreadId: forkedFrom === null ? null : sourceThreadId, + relationshipToParent: forkedFrom === null ? null : "fork", + rootThreadId: sourceThreadId, + }, + forkedFrom, + createdAt: now, + updatedAt: now, + archivedAt: null, + settledOverride: null, + settledAt: null, + lastVisitedAt: null, + deletedAt: null, + }, + }); + } + + const applyRun = ( + runId: RunId, + ordinal: number, + status: typeof heldStatus | "completed" | "rolled_back", + ) => + projectionStore.apply({ + id: EventId.make(`event:${runId}:${status}`), + type: "run.updated", + threadId: sourceThreadId, + runId, + nodeId: NodeId.make(`node:${runId}`), + driver, + occurredAt: now, + payload: { + id: runId, + threadId: sourceThreadId, + ordinal, + providerInstanceId, + modelSelection, + providerThreadId: null, + userMessageId: MessageId.make(`message:${runId}`), + rootNodeId: NodeId.make(`node:${runId}`), + activeAttemptId: runId === heldRunId ? heldAttemptId : null, + status, + requestedAt: now, + startedAt: runId === heldRunId ? null : now, + completedAt: status === "queued" ? null : now, + checkpointId: null, + contextHandoffId: null, + }, + }); + const applyUserItem = (input: { + readonly threadId: ThreadId; + readonly runId: RunId | null; + readonly ordinal: number; + readonly text: string; + readonly inputIntent: "turn_start" | "queued_turn"; + }) => + projectionStore.apply({ + id: EventId.make(`event:${input.threadId}:item:${input.ordinal}`), + type: "turn-item.updated", + threadId: input.threadId, + ...(input.runId === null ? {} : { runId: input.runId }), + occurredAt: now, + payload: { + createdBy: "user", + creationSource: "web", + id: TurnItemId.make(`turn-item:${input.threadId}:${input.ordinal}`), + threadId: input.threadId, + runId: input.runId, + nodeId: null, + providerThreadId: null, + providerTurnId: null, + nativeItemRef: null, + parentItemId: null, + ordinal: input.ordinal, + status: "completed", + title: null, + startedAt: now, + completedAt: now, + updatedAt: now, + type: "user_message", + messageId: MessageId.make(`message:${input.threadId}:${input.ordinal}`), + inputIntent: input.inputIntent, + text: input.text, + attachments: [], + }, + }); + + yield* applyRun(heldRunId, 1, heldStatus); + yield* projectionStore.apply({ + id: EventId.make(`event:${heldAttemptId}:created`), + type: "run-attempt.created", + threadId: sourceThreadId, + runId: heldRunId, + nodeId: NodeId.make(`node:${heldRunId}`), + driver, + occurredAt: now, + payload: { + id: heldAttemptId, + runId: heldRunId, + attemptOrdinal: 1, + rootNodeId: NodeId.make(`node:${heldRunId}`), + providerInstanceId, + providerThreadId: ProviderThreadId.make(`provider-thread:${prefix}`), + providerTurnId: null, + reason: "initial", + status: heldStatus === "queued" ? "pending" : "cancelled", + startedAt: null, + completedAt: heldStatus === "queued" ? null : now, + }, + }); + yield* applyRun(answeredRunId, 2, "completed"); + yield* applyUserItem({ + threadId: sourceThreadId, + runId: heldRunId, + ordinal: 100, + text: "held", + inputIntent: "queued_turn", + }); + yield* applyUserItem({ + threadId: sourceThreadId, + runId: answeredRunId, + ordinal: 200, + text: "answered", + inputIntent: "turn_start", + }); + yield* applyUserItem({ + threadId: sourceThreadId, + runId: answeredRunId, + ordinal: 201, + text: "delivered steer", + inputIntent: "queued_turn", + }); + // Enough local turns for a turn-limited window to count inherited rows in SQL. + for (let index = 0; index < THREAD_HISTORY_PAGE_POLICY.maxUserTurns; index += 1) { + yield* applyUserItem({ + threadId: targetThreadId, + runId: null, + ordinal: index, + text: `local ${index}`, + inputIntent: "turn_start", + }); + } + + const assertForkHidesHeldInput = Effect.fn("assertForkHidesHeldInput")(function* () { + const target = yield* projectionStore.getThreadProjection(targetThreadId); + assert.deepEqual( + target.visibleTurnItems + .slice(0, 3) + .map((row) => (row.item.type === "user_message" ? row.item.text : row.item.type)), + ["answered", "delivered steer", "fork"], + ); + const page = yield* projectionStore.getTimelinePage(targetThreadId, { + view: "activity", + limit: target.visibleTurnItems.length + 1, + }); + assert.deepEqual(page.items, target.visibleTurnItems); + const bounded = yield* projectionStore.getThreadSnapshotWindow(targetThreadId, { + rowLimit: target.visibleTurnItems.length + 1, + }); + assert.deepEqual(bounded.projection.visibleTurnItems, target.visibleTurnItems); + const shellSnapshot = yield* projectionStore.getShellSnapshot(); + for (const projection of [ + yield* projectionStore.getThreadProjection(sourceThreadId), + target, + ]) { + for (const shell of [ + yield* projectionStore.getThreadShell(projection.thread.id), + shellSnapshot.threads.find((thread) => thread.id === projection.thread.id), + ]) { + assert.equal(shell?.visibleItemCount, projection.visibleTurnItems.length); + } + } + const filledLocalPage = yield* projectionStore.getThreadSnapshotWindow(targetThreadId, { + rowLimit: target.visibleTurnItems.length, + userTurnLimit: THREAD_HISTORY_PAGE_POLICY.maxUserTurns, + }); + assert.deepEqual( + filledLocalPage.projection.visibleTurnItems.filter((row) => row.visibility === "local"), + target.visibleTurnItems.filter((row) => row.visibility === "local"), + ); + }); + + yield* assertForkHidesHeldInput(); + // Forks keep rolled-back source history, but still not undelivered input. + yield* applyRun(answeredRunId, 2, "rolled_back"); + yield* assertForkHidesHeldInput(); + // Rollback also takes cancelled runs, and overwrites the status that hid their input. + if (heldStatus === "cancelled") { + yield* applyRun(heldRunId, 1, "rolled_back"); + yield* assertForkHidesHeldInput(); + } + } + }), + ); + it.effect("hides source turns rewound before the fork from a fork's visible items", () => Effect.gen(function* () { const projectionStore = yield* ProjectionStore.ProjectionStoreV2; diff --git a/apps/server/src/orchestration-v2/ProjectionStore.ts b/apps/server/src/orchestration-v2/ProjectionStore.ts index c67f245349bbf..117fb5c5d1714 100644 --- a/apps/server/src/orchestration-v2/ProjectionStore.ts +++ b/apps/server/src/orchestration-v2/ProjectionStore.ts @@ -78,10 +78,7 @@ import { ProjectId, ProviderInstanceId, } from "@t3tools/contracts"; -import { - createOrchestrationV2TurnItemVisibility, - isOrchestrationV2SupersededInterrupt, -} from "@t3tools/shared/orchestrationV2Timeline"; +import { createOrchestrationV2TurnItemVisibility } from "@t3tools/shared/orchestrationV2Timeline"; import { deriveBlockedOnThreadWait, derivePendingBackgroundWork, @@ -1461,6 +1458,28 @@ function isTurnItemAtOrBeforeRun(input: { return ordinal !== undefined && ordinal <= input.sourceRunOrdinal; } +// Run ordinals enforce the fork cutoff; this keeps later rollbacks from hiding +// inherited history while retaining cancellation evidence for undelivered input. +function createInheritedTurnItemVisibility( + source: Parameters[0], +) { + const cancelledRunIds = new Set( + source.attempts + .filter((attempt) => attempt.status === "cancelled") + .map((attempt) => attempt.runId), + ); + return createOrchestrationV2TurnItemVisibility({ + ...source, + runs: source.runs.flatMap((run) => + run.status !== "rolled_back" + ? [run] + : cancelledRunIds.has(run.id) + ? [{ ...run, status: "cancelled" as const }] + : [], + ), + }); +} + // Rollback stamps completedAt; a fork made after the rewind never received that run. function runRolledBackAt(run: Pick) { return run.status === "rolled_back" ? run.completedAt : null; @@ -1495,6 +1514,11 @@ function visibleTurnItemsThroughRun(input: { } const runOrdinalById = forkInheritedRunOrdinals(input.sourceProjection.runs, input.forkCreatedAt); + const isVisible = createInheritedTurnItemVisibility({ + runs: input.sourceProjection.runs, + attempts: input.sourceProjection.attempts, + items: input.sourceProjection.turnItems, + }); const inheritedPrefix = input.sourceProjection.visibleTurnItems .filter( (row) => row.item.threadId !== input.sourceProjection.thread.id || row.item.type === "fork", @@ -1506,23 +1530,16 @@ function visibleTurnItemsThroughRun(input: { item: row.item, })); const localPrefix = inheritedVisibleTurnItemsFromLocalItems( - input.sourceProjection.turnItems.filter((item) => { - if ( - isOrchestrationV2SupersededInterrupt({ - item, - attempts: input.sourceProjection.attempts, - items: input.sourceProjection.turnItems, - }) - ) { - return false; - } - return isTurnItemAtOrBeforeRun({ - historyOrigin: input.sourceProjection.thread.historyOrigin, - itemRunId: item.runId, - runOrdinalById, - sourceRunOrdinal: sourceRun.ordinal, - }); - }), + input.sourceProjection.turnItems.filter( + (item) => + isVisible(item) && + isTurnItemAtOrBeforeRun({ + historyOrigin: input.sourceProjection.thread.historyOrigin, + itemRunId: item.runId, + runOrdinalById, + sourceRunOrdinal: sourceRun.ordinal, + }), + ), ); return [...inheritedPrefix, ...localPrefix]; @@ -3122,16 +3139,27 @@ export const layer: Layer.Layer = ), 9223372036854775807 ) + -- The fork cutoff below filters rewound runs; undelivered queued input stays hidden. AND ( ${window.requiredRunId ?? null} IS NOT NULL - OR ( - (run.status IS NULL OR run.status <> 'rolled_back') - AND NOT ( - item.type = 'user_message' - AND json_extract(item.payload_json, '$.inputIntent') = 'queued_turn' - AND run.status IS 'cancelled' + OR run.status IS NULL + OR run.status <> 'rolled_back' + ) + AND NOT ( + item.type = 'user_message' + AND ( + COALESCE(run.status IN ('queued', 'cancelled'), 0) + OR ( + run.status = 'rolled_back' + AND EXISTS ( + SELECT 1 + FROM orchestration_v2_projection_run_attempts AS attempt + WHERE attempt.run_id = run.run_id + AND attempt.status = 'cancelled' + ) ) ) + AND json_extract(item.payload_json, '$.inputIntent') = 'queued_turn' ) AND ( ${window.requiredRunId ?? null} IS NULL @@ -6368,18 +6396,18 @@ export const layer: Layer.Layer = let inherited: Array = []; if (sourceRun !== undefined) { const ordinals = forkInheritedRunOrdinals(source.records.runs, records.thread.createdAt); - const sourceItems = source.local.map((row) => row.item); + const isInheritedVisible = createInheritedTurnItemVisibility({ + runs: source.records.runs, + attempts: source.records.attempts, + items: source.local.map((row) => row.item), + }); inherited = [ ...source.visible.filter( (row) => row.item.threadId !== fork.threadId || row.item.type === "fork", ), ...source.local.filter( (row) => - !isOrchestrationV2SupersededInterrupt({ - item: row.item, - attempts: source.records.attempts, - items: sourceItems, - }) && + isInheritedVisible(row.item) && isTurnItemAtOrBeforeRun({ historyOrigin: source.records.thread.historyOrigin, itemRunId: row.item.runId, @@ -6576,13 +6604,13 @@ export const layer: Layer.Layer = })), }); // Only these runs can hide rows: every row of a rolled-back run, the queued turn of a - // cancelled run, and the stop result of a replaced attempt. So the hidden rows are found - // without reading the thread. + // queued or cancelled run, and the stop result of a replaced attempt. So the hidden rows + // are found without reading the thread. const stoppedRuns = new Set(stopRequests.map((row) => row.run_id)); - const runsWithStatus = (status: "rolled_back" | "cancelled") => - records.runs.flatMap((run) => (run.status === status ? [String(run.id)] : [])); + const runsWithStatus = (...statuses: ReadonlyArray) => + records.runs.flatMap((run) => (statuses.includes(run.status) ? [String(run.id)] : [])); const rolledBack = runsWithStatus("rolled_back"); - const cancelled = runsWithStatus("cancelled"); + const heldInput = runsWithStatus("queued", "cancelled"); const steered = [...new Set(superseded.map((attempt) => String(attempt.runId)))].filter( (runId) => !stoppedRuns.has(runId) && !rolledBack.includes(runId), ); @@ -6607,8 +6635,8 @@ export const layer: Layer.Layer = INDEXED BY orchestration_v2_projection_turn_items_thread_run_idx ON item.thread_id = ${threadId} AND item.run_id = wanted.value`, // The conversation index holds the type and run of these rows, so only the matches are - // fetched. Through the run index, every row of each cancelled run would be. - cancelled.length + steered.length === 0 + // fetched. Through the run index, every row of each such run would be. + heldInput.length + steered.length === 0 ? Effect.succeed([]) : sql` SELECT ${candidateColumns} @@ -6617,7 +6645,7 @@ export const layer: Layer.Layer = WHERE item.thread_id = ${threadId} AND item.type NOT IN ${CONVERSATION_INDEX_EXCLUDED_TYPES} AND ((item.type = 'user_message' - AND item.run_id IN (SELECT value FROM json_each(${encodeIdList(cancelled)}))) + AND item.run_id IN (SELECT value FROM json_each(${encodeIdList(heldInput)}))) OR (item.type = 'run_interrupt_result' AND item.run_id IN (SELECT value FROM json_each(${encodeIdList(steered)}))))`, ]); @@ -7706,18 +7734,58 @@ export const layer: Layer.Layer = WHERE thread_id IN (SELECT value FROM json_each(${encodeIdList(threadIds)})) `; + // Forks do not inherit undelivered queued input, including from cancelled runs + // rolled back later. Checking the run first limits sparse-index seeks to those few runs. const selectShellRunItemCounts = (threadIds: ReadonlyArray) => sql` - SELECT thread_id, run_key AS run_id, item_count - FROM orchestration_v2_projection_turn_item_counts - WHERE run_key <> '' AND thread_id IN (SELECT value FROM json_each(${encodeIdList(threadIds)})) + SELECT per_run.thread_id, per_run.run_key AS run_id, + per_run.item_count - CASE + WHEN EXISTS ( + SELECT 1 + FROM orchestration_v2_projection_runs AS run + WHERE run.run_id = per_run.run_key + AND ( + run.status IN ('queued', 'cancelled') + OR ( + run.status = 'rolled_back' + AND EXISTS ( + SELECT 1 + FROM orchestration_v2_projection_run_attempts AS attempt + WHERE attempt.run_id = run.run_id + AND attempt.status = 'cancelled' + ) + ) + ) + ) THEN ( + SELECT COUNT(*) + FROM orchestration_v2_projection_turn_items AS held + INDEXED BY orchestration_v2_projection_turn_items_queued_input_idx + WHERE held.run_id = per_run.run_key + AND held.type = 'user_message' + AND json_extract(held.payload_json, '$.inputIntent') = 'queued_turn' + ) + ELSE 0 + END AS item_count + FROM orchestration_v2_projection_turn_item_counts AS per_run + WHERE per_run.run_key <> '' AND per_run.thread_id IN (SELECT value FROM json_each(${encodeIdList(threadIds)})) `; const selectShellItemCounts = (threadIds: ReadonlyArray) => sql` SELECT counts.thread_id, SUM(CASE WHEN counts.run_key = '' OR r.status <> 'rolled_back' - THEN counts.item_count ELSE 0 END) AS item_count, + THEN counts.item_count - CASE + WHEN r.status IN ('queued', 'cancelled') THEN ( + SELECT COUNT(*) + FROM orchestration_v2_projection_turn_items held + INDEXED BY orchestration_v2_projection_turn_items_queued_input_idx + WHERE held.run_id = counts.run_key + AND held.type = 'user_message' + AND json_extract(held.payload_json, '$.inputIntent') = 'queued_turn' + ) + ELSE 0 + END + ELSE 0 END) AS item_count, SUM(CASE WHEN counts.run_key = '' THEN counts.item_count ELSE 0 END) AS runless_item_count FROM orchestration_v2_projection_turn_item_counts counts diff --git a/apps/server/src/orchestration-v2/SteeringCompletion.integration.test.ts b/apps/server/src/orchestration-v2/SteeringCompletion.integration.test.ts index ad0c179d783fe..f4f2e09d24c28 100644 --- a/apps/server/src/orchestration-v2/SteeringCompletion.integration.test.ts +++ b/apps/server/src/orchestration-v2/SteeringCompletion.integration.test.ts @@ -379,6 +379,13 @@ it.effect.each( } if (delivery !== null && !question) { const requeued = yield* orchestrator.getThreadProjection(threadId); + assert.isTrue(requeued.runs.some((run) => run.status === "queued")); + assert.isFalse( + requeued.visibleTurnItems.some( + ({ item }) => item.type === "user_message" && item.messageId === messageId, + ), + "a steer that fell back to the queue must not appear delivered", + ); const item = requeued.turnItems.find( (item) => item.type === "user_message" && item.messageId === messageId, ); @@ -462,6 +469,14 @@ it.effect.each( ).length, 1, ); + if (!mailbox && !question) { + assert.equal( + final.visibleTurnItems.filter( + ({ item }) => item.type === "user_message" && item.messageId === messageId, + ).length, + 1, + ); + } yield* worker.drain(); assert.equal(started.length, 2); }).pipe( diff --git a/apps/server/src/orchestration-v2/testkit/ProviderSwitch.integration.test.ts b/apps/server/src/orchestration-v2/testkit/ProviderSwitch.integration.test.ts index 2c2af9733a402..374367138316f 100644 --- a/apps/server/src/orchestration-v2/testkit/ProviderSwitch.integration.test.ts +++ b/apps/server/src/orchestration-v2/testkit/ProviderSwitch.integration.test.ts @@ -3938,6 +3938,11 @@ describe("orchestration v2 provider switching", () => { ); assert.equal(queuedItem?.runId, queued.runs[1]?.id); assert.equal(queuedItem?.providerThreadId, queued.runs[1]?.providerThreadId); + assert.equal(queuedItem?.status, "pending"); + assert.isNull(queuedItem?.startedAt); + assert.isNull(queuedItem?.completedAt); + assert.isFalse(queued.visibleTurnItems.some((row) => row.item.id === queuedItem?.id)); + const queuedSequence = yield* eventSink.latestSequence({ threadId: rejectedThreadId }); yield* eventSink.write({ events: [ { @@ -3962,6 +3967,40 @@ describe("orchestration v2 provider switching", () => { Stream.runHead, ); yield* worker.drain(); + // Clients whose bounded snapshot omitted the hidden queued item must + // receive it while the run is still queued, before it fails. + const throughSequence = yield* eventSink.latestSequence({ threadId: rejectedThreadId }); + const failureEvents = yield* eventSink + .stream({ threadId: rejectedThreadId, afterSequence: queuedSequence }) + .pipe( + Stream.takeUntil((stored) => stored.sequence === throughSequence), + Stream.map(({ event }) => event), + Stream.filter((event) => event.runId === queued.runs[1]!.id), + Stream.runCollect, + ); + const republished = failureEvents.findIndex( + (event) => + event.type === "turn-item.updated" && + event.payload.type === "user_message" && + event.payload.messageId === rejectedMessageId, + ); + assert.isAtLeast(republished, 0); + const restored = failureEvents[republished]; + assert.equal(restored?.type, "turn-item.updated"); + if (restored?.type === "turn-item.updated") { + assert.deepEqual(restored.payload, { + ...queuedItem, + status: "failed", + completedAt: restored.occurredAt, + updatedAt: restored.occurredAt, + }); + } + assert.isBelow( + republished, + failureEvents.findIndex( + (event) => event.type === "run.updated" && event.payload.status === "failed", + ), + ); return yield* orchestrator.getThreadProjection(rejectedThreadId); }).pipe( Effect.provide( @@ -4005,6 +4044,11 @@ describe("orchestration v2 provider switching", () => { failureItem?.type === "error" ? failureItem.failure.code : null, "context_handoff_unsupported", ); + assert.isTrue( + projection.visibleTurnItems.some( + ({ item }) => item.type === "user_message" && item.messageId === rejectedMessageId, + ), + ); assert.deepEqual( (yield* Ref.get(capturedTurns)).map((turn) => turn.driver), [CODEX_DRIVER, CODEX_DRIVER], diff --git a/apps/server/src/persistence/Migrations.ts b/apps/server/src/persistence/Migrations.ts index 8b33ba60f8e9a..9b6e2b3e0fc76 100644 --- a/apps/server/src/persistence/Migrations.ts +++ b/apps/server/src/persistence/Migrations.ts @@ -88,6 +88,7 @@ import Migration0082 from "./Migrations/082_TurnItemConversationIndex.ts"; import Migration0083 from "./Migrations/083_CommandReadIndexes.ts"; import Migration0084 from "./Migrations/084_LastExecutedRunIndex.ts"; import Migration0085 from "./Migrations/085_TurnItemCounts.ts"; +import Migration0086 from "./Migrations/086_QueuedTurnInputIndex.ts"; const migrationEntries = [ [1, "OrchestrationEvents", Migration0001], @@ -176,6 +177,7 @@ const migrationEntries = [ [83, "CommandReadIndexes", Migration0083], [84, "LastExecutedRunIndex", Migration0084], [85, "TurnItemCounts", Migration0085], + [86, "QueuedTurnInputIndex", Migration0086], ] as const; export const migrationManifest = migrationEntries.map(([id, name]) => [id, name] as const); diff --git a/apps/server/src/persistence/Migrations/086_QueuedTurnInputIndex.ts b/apps/server/src/persistence/Migrations/086_QueuedTurnInputIndex.ts new file mode 100644 index 0000000000000..55480532949ce --- /dev/null +++ b/apps/server/src/persistence/Migrations/086_QueuedTurnInputIndex.ts @@ -0,0 +1,13 @@ +import * as Effect from "effect/Effect"; +import * as SqlClient from "effect/sql/SqlClient"; + +export default Effect.gen(function* () { + const sql = yield* SqlClient.SqlClient; + + // Shell counts subtract held input without reading a run's tool history or item payloads. + yield* sql` + CREATE INDEX orchestration_v2_projection_turn_items_queued_input_idx + ON orchestration_v2_projection_turn_items(run_id) + WHERE type = 'user_message' AND json_extract(payload_json, '$.inputIntent') = 'queued_turn' + `; +}); diff --git a/apps/server/src/persistence/reconcileV2PreviewMigration.test.ts b/apps/server/src/persistence/reconcileV2PreviewMigration.test.ts index 3c2cb075cfab4..98a79e7a7370d 100644 --- a/apps/server/src/persistence/reconcileV2PreviewMigration.test.ts +++ b/apps/server/src/persistence/reconcileV2PreviewMigration.test.ts @@ -65,6 +65,7 @@ describe("V2 preview upgrade", () => { [83, "CommandReadIndexes"], [84, "LastExecutedRunIndex"], [85, "TurnItemCounts"], + [86, "QueuedTurnInputIndex"], ]); assert.deepStrictEqual(yield* runMigrations(), []); assert.deepStrictEqual(yield* sql`SELECT * FROM orchestration_v2_legacy_imports`, imports); @@ -173,6 +174,7 @@ describe("V2 preview upgrade", () => { [83, "CommandReadIndexes"], [84, "LastExecutedRunIndex"], [85, "TurnItemCounts"], + [86, "QueuedTurnInputIndex"], ]); }).pipe(Effect.provide(NodeSqliteClient.layer({ filename: ":memory:" }))), ); diff --git a/packages/client-runtime/src/state/orchestrationV2Projection.test.ts b/packages/client-runtime/src/state/orchestrationV2Projection.test.ts index f6ba3e9f0c1a7..9284b6f9b82d0 100644 --- a/packages/client-runtime/src/state/orchestrationV2Projection.test.ts +++ b/packages/client-runtime/src/state/orchestrationV2Projection.test.ts @@ -483,6 +483,105 @@ describe("applyOrchestrationV2ProjectionEvent", () => { }); }); + it("hides a steer that fell back to the queue until its run starts", () => { + const queuedRunId = RunId.make("run-requeued-steer"); + const queuedRun = { ...run, id: queuedRunId, ordinal: 2, status: "queued" } as const; + const reply = commandItem("item-reply", "reply", 102); + const steer: OrchestrationV2TurnItem = { + id: TurnItemId.make("item-steer"), + threadId, + runId, + nodeId: null, + providerThreadId: null, + providerTurnId: null, + nativeItemRef: null, + parentItemId: null, + ordinal: 101, + status: "completed", + title: null, + startedAt: now, + completedAt: now, + updatedAt: now, + type: "user_message", + messageId: MessageId.make("message-steer"), + inputIntent: "steer", + text: "steer", + attachments: [], + createdBy: "user", + creationSource: "web", + }; + const event = (type: "run.updated" | "turn-item.updated", payload: unknown) => + ({ + id: `event-${type}`, + type, + threadId, + occurredAt: now, + payload, + }) as OrchestrationV2DomainEvent; + const apply = ( + projection: OrchestrationV2ThreadProjection | null, + events: ReadonlyArray, + options?: Parameters[2], + ) => + events.reduce( + (next, item) => applyOrchestrationV2ProjectionEvent(next, item, options), + projection, + ); + const visibleIds = (projection: OrchestrationV2ThreadProjection | null) => + projection?.visibleTurnItems.map((row) => row.item.id); + + const accepted = apply(emptyProjection, [ + event("run.updated", { ...run, status: "running" }), + event("turn-item.updated", steer), + event("turn-item.updated", reply), + ]); + expect(visibleIds(accepted)).toEqual([steer.id, reply.id]); + + const queuedSteer = event("turn-item.updated", { + ...steer, + runId: queuedRunId, + inputIntent: "queued_turn", + status: "pending", + startedAt: null, + completedAt: null, + }); + const requeued = apply(accepted, [event("run.updated", queuedRun), queuedSteer]); + expect(visibleIds(requeued)).toEqual([reply.id]); + + // Servers publish the start's user item and run update in either order. + const starting = event("run.updated", { ...queuedRun, status: "starting" }); + const dispatchedSteer = event("turn-item.updated", { + ...steer, + runId: queuedRunId, + inputIntent: "queued_turn", + }); + expect(visibleIds(apply(requeued, [dispatchedSteer, starting]))).toEqual([steer.id, reply.id]); + expect(visibleIds(apply(requeued, [starting, dispatchedSteer]))).toEqual([steer.id, reply.id]); + const cancelled = event("run.updated", { ...queuedRun, status: "cancelled" }); + expect(visibleIds(apply(requeued, [cancelled]))).toEqual([reply.id]); + + // A bounded snapshot taken while queued omits the hidden item, and the + // newer reply puts it below the watermark. + const bounded = { + ...requeued!, + turnItems: requeued!.turnItems.filter((item) => item.id !== steer.id), + }; + const partial = { partialTimeline: true, latestLocalTurnOrdinal: reply.ordinal }; + const failed = event("run.updated", { ...queuedRun, status: "failed" }); + const failedSteer = event("turn-item.updated", { + ...steer, + runId: queuedRunId, + inputIntent: "queued_turn", + status: "failed", + startedAt: null, + }); + const retained = apply(bounded, [failedSteer], partial); + expect(visibleIds(retained)).toEqual([reply.id]); + expect(visibleIds(apply(retained, [failed], partial))).toEqual([steer.id, reply.id]); + // Leaving the queue never invents an item the client did not receive. + expect(visibleIds(apply(bounded, [failed], partial))).toEqual([reply.id]); + }); + it("removes only hidden local items while preserving inherited rows", () => { const inherited = commandItem("item-inherited"); const local = commandItem("item-local"); diff --git a/packages/client-runtime/src/state/orchestrationV2Projection.ts b/packages/client-runtime/src/state/orchestrationV2Projection.ts index d9368ef4058a4..1bc8397fc2bd7 100644 --- a/packages/client-runtime/src/state/orchestrationV2Projection.ts +++ b/packages/client-runtime/src/state/orchestrationV2Projection.ts @@ -256,6 +256,29 @@ function upsertVisibleTurnItem( return updated; } +// A user item retained for a queued run stays hidden until the run leaves the +// queue, and its update can arrive before or after that run update. Items in +// `turnItems` were loaded or streamed, so they skip the partial-window check; +// items never received stay absent. +function restoreQueuedUserItems( + projection: OrchestrationV2ThreadProjection, + runId: OrchestrationV2Run["id"], +): OrchestrationV2ThreadProjection["visibleTurnItems"] { + let visibleTurnItems = projection.visibleTurnItems; + for (const item of projection.turnItems) { + if (item.runId !== runId || item.type !== "user_message" || item.inputIntent !== "queued_turn") + continue; + if (!shouldShowLocalTurnItem(projection, item)) continue; + visibleTurnItems = upsertVisibleTurnItem( + { ...projection, visibleTurnItems }, + item, + false, + null, + ); + } + return visibleTurnItems; +} + export function applyOrchestrationV2ProjectionEvent( projection: OrchestrationV2ThreadProjection | null, event: OrchestrationV2DomainEvent, @@ -301,7 +324,13 @@ export function applyOrchestrationV2ProjectionEvent( case "run.created": case "run.updated": { const next = { ...base, runs: upsertEntity(base.runs, event.payload) }; - return { ...next, visibleTurnItems: activeVisibleTurnItems(next) }; + const visible = { ...next, visibleTurnItems: activeVisibleTurnItems(next) }; + const wasQueued = base.runs.some( + (run) => run.id === event.payload.id && run.status === "queued", + ); + return wasQueued && event.payload.status !== "queued" + ? { ...visible, visibleTurnItems: restoreQueuedUserItems(visible, event.payload.id) } + : visible; } case "run.background-work-cancelled": return { diff --git a/packages/shared/src/orchestrationV2Timeline.test.ts b/packages/shared/src/orchestrationV2Timeline.test.ts index 7d2b7b7cbee45..c2b7a0c920159 100644 --- a/packages/shared/src/orchestrationV2Timeline.test.ts +++ b/packages/shared/src/orchestrationV2Timeline.test.ts @@ -14,7 +14,6 @@ type VisibilityInput = Parameters ({ status, hidden: [] })), + { status: "queued", hidden: ["queued"] }, { status: "cancelled", hidden: ["queued"] }, { status: "rolled_back", @@ -217,11 +217,15 @@ describe.each([ describe("indexed timeline visibility", () => { it.each([ - ...ordinaryStatuses.flatMap( + ...[...ordinaryStatuses, "queued" as const].flatMap( (status) => [ - { statuses: ["rolled_back", status], visible: true, ordinaryVisible: true }, - { statuses: ["cancelled", status], visible: true, ordinaryVisible: true }, + { + statuses: ["rolled_back", status], + visible: status !== "queued", + ordinaryVisible: true, + }, + { statuses: ["cancelled", status], visible: status !== "queued", ordinaryVisible: true }, { statuses: [status, "rolled_back"], visible: false, ordinaryVisible: false }, { statuses: [status, "cancelled"], visible: false, ordinaryVisible: true }, ] as const, diff --git a/packages/shared/src/orchestrationV2Timeline.ts b/packages/shared/src/orchestrationV2Timeline.ts index 05f13557138ba..e651dbfb01653 100644 --- a/packages/shared/src/orchestrationV2Timeline.ts +++ b/packages/shared/src/orchestrationV2Timeline.ts @@ -11,7 +11,7 @@ type TimelineTurnItem = Pick; readonly items: ReadonlyArray; @@ -52,12 +52,15 @@ export function isOrchestrationV2TurnItemVisible(input: { return false; } - // Cancelled queued input never reached the provider and must stay out of the transcript. + // A steer can return to the queue before delivery. Keep its retained item out + // of conversation history until its run starts; cancelled queued inputs stay hidden. if ( item.type === "user_message" && item.inputIntent === "queued_turn" && item.runId !== null && - input.runs.some((run) => run.id === item.runId && run.status === "cancelled") + input.runs.some( + (run) => run.id === item.runId && (run.status === "queued" || run.status === "cancelled"), + ) ) { return false; } @@ -76,7 +79,7 @@ export function createOrchestrationV2TurnItemVisibility(input: { }): (item: TimelineTurnItem) => boolean { const statuses = new Map(); for (const run of input.runs) { - if (run.status === "rolled_back" || run.status === "cancelled") + if (run.status === "rolled_back" || run.status === "cancelled" || run.status === "queued") statuses.set(run.id, run.status); else statuses.delete(run.id); } @@ -101,7 +104,7 @@ export function createOrchestrationV2TurnItemVisibility(input: { const status = item.runId === null ? undefined : statuses.get(item.runId); if (status === "rolled_back") return false; if ( - status === "cancelled" && + (status === "queued" || status === "cancelled") && item.type === "user_message" && item.inputIntent === "queued_turn" ) From f6787e8537b6773bd8089c9459726340f39b3266 Mon Sep 17 00:00:00 2001 From: Batuhan1999 Date: Fri, 13 Nov 2026 00:47:49 +0100 Subject: [PATCH 008/922] fix(web): reuse timeline rows while thinking and plans stream (#24121) Co-authored-by: Julius Marminge --- .../chat/MessagesTimeline.logic.test.ts | 220 +++++++++++++++++- .../components/chat/MessagesTimeline.logic.ts | 101 +++++++- apps/web/src/session-logic.test.ts | 84 ++++++- apps/web/src/session-logic.ts | 43 +++- apps/web/src/test-fixtures.ts | 51 +++- 5 files changed, 484 insertions(+), 15 deletions(-) diff --git a/apps/web/src/components/chat/MessagesTimeline.logic.test.ts b/apps/web/src/components/chat/MessagesTimeline.logic.test.ts index 09cbfe4e7775a..1bdb26aecfd62 100644 --- a/apps/web/src/components/chat/MessagesTimeline.logic.test.ts +++ b/apps/web/src/components/chat/MessagesTimeline.logic.test.ts @@ -18,7 +18,11 @@ import { workEntryDisplayIndicatesToolFailure, type TimelineEntry, } from "../../session-logic"; -import { makeStreamingTimelineFixture } from "../../test-fixtures"; +import { + makeStreamingTimelineFixture, + makeStreamingWorkTimelineFixture, + withStreamedText, +} from "../../test-fixtures"; import type { TurnDiffSummary } from "../../types"; import { describe, expect, it } from "vite-plus/test"; import { MessageId, RunId } from "@t3tools/contracts"; @@ -3891,6 +3895,220 @@ describe("streaming v2 row projection", () => { })), }); }); + + it.each(["reasoning", "proposed_plan"] as const)( + "keeps every row not holding streaming %s text when it changes", + (kind) => { + const source = makeStreamingWorkTimelineFixture(kind); + const rowsInput = (timelineEntries: ReadonlyArray) => ({ + timelineEntries, + latestRun: { + runId: source.runId, + status: "running" as const, + startedAt: source.time(5), + completedAt: null, + }, + runningRunId: source.runId, + isWorking: true, + activeTurnStartedAt: source.time(5), + turnDiffSummaries: [], + supportsConversationRollback: true, + }); + let timelineInput = { + visibleTurnItems: withStreamedText( + source.visibleTurnItems, + source.streamingItemId, + "Let", + source.time(20), + ), + optimisticMessages: [], + }; + let timeline = deriveTimelineEntriesFromVisibleTurnItemsWithState(timelineInput); + let projection = deriveMessagesTimelineRowsWithState(rowsInput(timeline.entries)); + for (const [step, text] of ["Let me", "Let me check the tests"].entries()) { + timelineInput = { + visibleTurnItems: withStreamedText( + timelineInput.visibleTurnItems, + source.streamingItemId, + text, + source.time(21 + step), + ), + optimisticMessages: [], + }; + const previous = projection; + timeline = deriveTimelineEntriesFromVisibleTurnItemsWithState(timelineInput, timeline); + projection = deriveMessagesTimelineRowsWithState(rowsInput(timeline.entries), previous); + expect(projection.rows).toEqual( + deriveMessagesTimelineRows( + rowsInput(deriveTimelineEntriesFromVisibleTurnItems(timelineInput)), + ), + ); + expect(projection.rows).toHaveLength(previous.rows.length); + for (const [index, row] of previous.rows.entries()) { + const holdsItem = + row.id === source.streamingItemId || + ((row.kind === "work" || row.kind === "work-live") && + row.groupedEntries.some((entry) => entry.id === source.streamingItemId)); + if (!holdsItem) expect(projection.rows[index]).toBe(row); + } + } + }, + ); + + it.each(["reasoning", "proposed_plan"] as const)( + "matches a full derivation when streaming %s text turns blank or completes", + (kind) => { + const source = makeStreamingWorkTimelineFixture(kind); + const rowsInput = (timelineEntries: ReadonlyArray) => ({ + timelineEntries, + latestRun: { + runId: source.runId, + status: "running" as const, + startedAt: source.time(5), + completedAt: null, + }, + runningRunId: source.runId, + isWorking: true, + activeTurnStartedAt: source.time(5), + turnDiffSummaries: [], + supportsConversationRollback: true, + }); + let visibleTurnItems = source.visibleTurnItems; + let timeline = deriveTimelineEntriesFromVisibleTurnItemsWithState({ + visibleTurnItems, + optimisticMessages: [], + }); + let projection = deriveMessagesTimelineRowsWithState(rowsInput(timeline.entries)); + const steps = [ + ...["Let", " ", "Let me"].map( + (text, step) => (rows: typeof visibleTurnItems) => + withStreamedText(rows, source.streamingItemId, text, source.time(20 + step)), + ), + (rows: typeof visibleTurnItems) => + rows.map((row) => + row.item.id === source.streamingItemId && + (row.item.type === "reasoning" || row.item.type === "proposed_plan") + ? { + ...row, + item: { + ...row.item, + status: "completed" as const, + streaming: false, + completedAt: DateTime.makeUnsafe(source.time(30)), + updatedAt: DateTime.makeUnsafe(source.time(30)), + }, + } + : row, + ), + ]; + for (const step of steps) { + visibleTurnItems = step(visibleTurnItems); + const timelineInput = { visibleTurnItems, optimisticMessages: [] }; + timeline = deriveTimelineEntriesFromVisibleTurnItemsWithState(timelineInput, timeline); + expect(timeline.entries).toEqual(deriveTimelineEntriesFromVisibleTurnItems(timelineInput)); + projection = deriveMessagesTimelineRowsWithState(rowsInput(timeline.entries), projection); + expect(projection.rows).toEqual( + deriveMessagesTimelineRows( + rowsInput(deriveTimelineEntriesFromVisibleTurnItems(timelineInput)), + ), + ); + } + }, + ); + + it.each([ + "expanded live group", + "expanded live group followed by a hidden tool", + "thinking superseded by a running tool", + "settled turn", + ] as const)("matches a full derivation when streaming thinking sits in a %s", (scenario) => { + const source = makeStreamingWorkTimelineFixture("reasoning"); + const running = scenario !== "settled turn"; + const hiddenTool = scenario === "expanded live group followed by a hidden tool"; + const rowsInput = ( + timelineEntries: ReadonlyArray, + expandedWorkGroupIds?: ReadonlySet, + ) => ({ + timelineEntries, + latestRun: { + runId: source.runId, + status: running ? ("running" as const) : ("completed" as const), + startedAt: source.time(5), + completedAt: running ? null : source.time(40), + }, + runningRunId: running ? source.runId : null, + isWorking: running, + activeTurnStartedAt: source.time(5), + turnDiffSummaries: [], + supportsConversationRollback: true, + ...(expandedWorkGroupIds ? { expandedWorkGroupIds } : {}), + ...(running ? {} : { expandedRunIds: new Set([source.runId]) }), + ...(hiddenTool ? { toolCallVisibility: "hideAll" as const } : {}), + }); + const tool = source.visibleTurnItems.find((row) => row.item.id === "live-work")!; + const laterTool = (status: "running" | "completed") => ({ + ...tool, + position: source.visibleTurnItems.length, + sourceItemId: TurnItemId.make("live-later-tool"), + item: { + ...tool.item, + id: TurnItemId.make("live-later-tool"), + ordinal: 8, + status, + ...(status === "running" ? { completedAt: null } : {}), + }, + }); + let visibleTurnItems = + scenario === "thinking superseded by a running tool" || hiddenTool + ? [...source.visibleTurnItems, laterTool(hiddenTool ? "completed" : "running")] + : // Alone in a settled group, the thought's text becomes the group summary. + source.visibleTurnItems.filter((row) => running || row !== tool); + visibleTurnItems = withStreamedText( + visibleTurnItems, + source.streamingItemId, + "Let", + source.time(20), + ); + let timeline = deriveTimelineEntriesFromVisibleTurnItemsWithState({ + visibleTurnItems, + optimisticMessages: [], + }); + const liveRow = deriveMessagesTimelineRows(rowsInput(timeline.entries)).find( + (row) => row.kind === "work-live", + ); + const expanded = + scenario.startsWith("expanded live group") && liveRow?.kind === "work-live" + ? new Set([liveRow.groupId]) + : undefined; + let projection = deriveMessagesTimelineRowsWithState(rowsInput(timeline.entries, expanded)); + for (const [step, text] of ["Let me", "Let me check the tests"].entries()) { + visibleTurnItems = withStreamedText( + visibleTurnItems, + source.streamingItemId, + text, + source.time(21 + step), + ); + const timelineInput = { visibleTurnItems, optimisticMessages: [] }; + const previous = projection; + timeline = deriveTimelineEntriesFromVisibleTurnItemsWithState(timelineInput, timeline); + projection = deriveMessagesTimelineRowsWithState( + rowsInput(timeline.entries, expanded), + previous, + ); + expect(projection.rows).toEqual( + deriveMessagesTimelineRows( + rowsInput(deriveTimelineEntriesFromVisibleTurnItems(timelineInput), expanded), + ), + ); + if (!running) continue; + for (const [index, row] of previous.rows.entries()) { + const holdsItem = + (row.kind === "work" || row.kind === "work-live") && + row.groupedEntries.some((entry) => entry.id === source.streamingItemId); + if (!holdsItem) expect(projection.rows[index]).toBe(row); + } + } + }); }); describe("linked timeline resources", () => { diff --git a/apps/web/src/components/chat/MessagesTimeline.logic.ts b/apps/web/src/components/chat/MessagesTimeline.logic.ts index c422656647863..63cda7dbaf496 100644 --- a/apps/web/src/components/chat/MessagesTimeline.logic.ts +++ b/apps/web/src/components/chat/MessagesTimeline.logic.ts @@ -2481,19 +2481,33 @@ function replaceStreamingMessageRows( return null; } const replacements = new Map>(); + const thoughts = new Map(); + const plans = new Map(); for (let index = 0; index < timelineEntries.length; index += 1) { const entry = timelineEntries[index]!; const previousEntry = previousEntries[index]!; if (entry === previousEntry) continue; if ( - entry.kind !== "message" || - previousEntry.kind !== "message" || + entry.kind !== previousEntry.kind || entry.id !== previousEntry.id || entry.createdAt !== previousEntry.createdAt || entry.attempt !== previousEntry.attempt ) { return null; } + if (entry.kind === "work" && previousEntry.kind === "work") { + if (!isStreamingThoughtUpdate(previousEntry.entry, entry.entry)) return null; + thoughts.set(entry.id, entry.entry); + continue; + } + if (entry.kind === "proposed-plan" && previousEntry.kind === "proposed-plan") { + const { planMarkdown: _before, updatedAt: _beforeAt, ...before } = previousEntry.proposedPlan; + const { planMarkdown: _after, updatedAt: _afterAt, ...after } = entry.proposedPlan; + if (!shallow(before, after)) return null; + plans.set(entry.id, entry.proposedPlan); + continue; + } + if (entry.kind !== "message" || previousEntry.kind !== "message") return null; if ( entry.projectedItem !== previousEntry.projectedItem && (entry.projectedItem === undefined || @@ -2510,8 +2524,54 @@ function replaceStreamingMessageRows( if (!isStreamingMessageTextUpdate(previousEntry.message, entry.message)) return null; replacements.set(previousEntry.message, entry); } - if (replacements.size === 0) return previous.rows; - return previous.rows.map((row) => { + if (replacements.size === 0 && thoughts.size === 0 && plans.size === 0) return previous.rows; + // Rows settle superseded thinking after tool visibility filtering, which these entries + // have not seen; the fast path keeps item status, so the row's settled status still holds. + const patchedThoughts = new Map(); + const patchThought = (entry: WorkLogEntry) => { + const thought = thoughts.get(entry.id); + if (!thought) return entry; + let patched = patchedThoughts.get(entry); + if (!patched) { + patched = + entry.toolLifecycleStatus === thought.toolLifecycleStatus || + entry.toolLifecycleStatus === undefined + ? thought + : { ...thought, toolLifecycleStatus: entry.toolLifecycleStatus }; + patchedThoughts.set(entry, patched); + } + return patched; + }; + const patchedGroups = new Map(); + const patchGroup = (group: WorkLogEntry[]) => { + if (!group.some((entry) => thoughts.has(entry.id))) return group; + const patched = patchedGroups.get(group) ?? group.map(patchThought); + patchedGroups.set(group, patched); + return patched; + }; + const patchedLiveThoughtIds = new Set(); + const rows = previous.rows.map((row): MessagesTimelineRow => { + if (row.kind === "proposed-plan") { + const proposedPlan = plans.get(row.id); + return proposedPlan ? { ...row, proposedPlan } : row; + } + if (row.kind === "work-live") { + const groupedEntries = patchGroup(row.groupedEntries); + if (groupedEntries === row.groupedEntries) return row; + for (const entry of groupedEntries) { + if (thoughts.has(entry.id)) patchedLiveThoughtIds.add(entry.id); + } + return { + ...row, + entry: patchThought(row.entry), + groupedEntries, + ...(row.thought ? { thought: patchThought(row.thought) } : {}), + }; + } + if (row.kind === "work") { + const groupedEntries = patchGroup(row.groupedEntries); + return groupedEntries === row.groupedEntries ? row : { ...row, groupedEntries }; + } if (row.kind !== "message" && row.kind !== "assistant-meta") return row; const entry = replacements.get(row.message); return entry @@ -2522,6 +2582,39 @@ function replaceStreamingMessageRows( } : row; }); + // Only a live row holds thinking without deriving a label from its text. Settled + // groups, folded turns, and work toggles summarize it, so they need the full rebuild. + for (const id of thoughts.keys()) if (!patchedLiveThoughtIds.has(id)) return null; + return rows; +} + +/** + * Rows read a thought's text only through its blankness (visibility, the live + * thought line) and through labels that live rows do not store. + */ +function isStreamingThoughtUpdate(previous: WorkLogEntry, next: WorkLogEntry): boolean { + if ( + previous.itemType !== "reasoning" || + previous.projectedItem === undefined || + next.projectedItem === undefined || + !isStreamingTurnItemTextUpdate(previous.projectedItem, next.projectedItem) || + Boolean(previous.detail?.trim()) !== Boolean(next.detail?.trim()) + ) { + return false; + } + const { + detail: _before, + structuredPayload: _beforeItem, + projectedItem: _beforeRow, + ...rest + } = previous; + const { + detail: _after, + structuredPayload: _afterItem, + projectedItem: _afterRow, + ...nextRest + } = next; + return shallow(rest, nextRest); } export function deriveMessagesTimelineRowsWithState( diff --git a/apps/web/src/session-logic.test.ts b/apps/web/src/session-logic.test.ts index 013e38c701ca1..944117ee768e5 100644 --- a/apps/web/src/session-logic.test.ts +++ b/apps/web/src/session-logic.test.ts @@ -12,6 +12,7 @@ import { ScheduledTaskId, ThreadId, TurnItemId, + type OrchestrationV2PlanArtifact, type OrchestrationV2ProjectedTurnItem, type OrchestrationV2ExecutionNode, type OrchestrationV2RunAttempt, @@ -38,9 +39,30 @@ import { workEntryDisplayIndicatesToolFailure, workEntryIndicatesToolSuccess, } from "./session-logic"; -import { makeStreamingTimelineFixture, makeThreadProjectionFixture } from "./test-fixtures"; +import { + makeStreamingTimelineFixture, + makeStreamingWorkTimelineFixture, + makeThreadProjectionFixture, + withStreamedText, +} from "./test-fixtures"; import type { ChatMessage } from "./types"; +function streamingPlanArtifact( + fixture: ReturnType, + markdown: string, + status: "active" | "superseded", +): OrchestrationV2PlanArtifact { + return { + id: PlanId.make("live-plan"), + threadId: fixture.threadId, + runId: fixture.runId, + nodeId: NodeId.make("live-node"), + kind: "proposed_plan", + markdown, + status, + }; +} + describe("V2 session presentation", () => { it("uses run status as the settlement boundary", () => { const runId = RunId.make("run-1"); @@ -1700,6 +1722,66 @@ describe("incremental v2 timeline entries", () => { "live-assistant", ]); }); + + it("keeps every other entry when streaming plan text changes", () => { + const fixture = makeStreamingWorkTimelineFixture("proposed_plan"); + // Codex emits `plan.updated` with each delta, so the artifact array is rebuilt too. + const plans = (markdown: string) => [streamingPlanArtifact(fixture, markdown, "active")]; + let input = { + visibleTurnItems: withStreamedText( + fixture.visibleTurnItems, + fixture.streamingItemId, + "Let", + fixture.time(20), + ), + optimisticMessages: [], + plans: plans("Let"), + }; + let projection = deriveTimelineEntriesFromVisibleTurnItemsWithState(input); + for (const [step, text] of ["Let me", "Let me check the tests"].entries()) { + input = { + visibleTurnItems: withStreamedText( + input.visibleTurnItems, + fixture.streamingItemId, + text, + fixture.time(21 + step), + ), + optimisticMessages: [], + plans: plans(text), + }; + const previous = projection; + projection = deriveTimelineEntriesFromVisibleTurnItemsWithState(input, previous); + expect(projection.entries).toEqual(deriveTimelineEntriesFromVisibleTurnItems(input)); + for (const [index, entry] of previous.entries.entries()) { + if (entry.id !== fixture.streamingItemId) expect(projection.entries[index]).toBe(entry); + } + } + }); + + it("rebuilds the plan entry when only its artifact status changes", () => { + const fixture = makeStreamingWorkTimelineFixture("proposed_plan"); + const visibleTurnItems = withStreamedText( + fixture.visibleTurnItems, + fixture.streamingItemId, + "Plan", + fixture.time(20), + ); + const previous = deriveTimelineEntriesFromVisibleTurnItemsWithState({ + visibleTurnItems, + optimisticMessages: [], + plans: [streamingPlanArtifact(fixture, "Plan", "active")], + }); + const input = { + visibleTurnItems, + optimisticMessages: [], + plans: [streamingPlanArtifact(fixture, "Plan", "superseded")], + }; + const next = deriveTimelineEntriesFromVisibleTurnItemsWithState(input, previous); + expect(next.entries).toEqual(deriveTimelineEntriesFromVisibleTurnItems(input)); + expect(next.entries.find((entry) => entry.kind === "proposed-plan")).toMatchObject({ + proposedPlan: { status: "superseded" }, + }); + }); }); describe("image asset requests", () => { diff --git a/apps/web/src/session-logic.ts b/apps/web/src/session-logic.ts index e77c8354caf45..d4b6432be762e 100644 --- a/apps/web/src/session-logic.ts +++ b/apps/web/src/session-logic.ts @@ -822,24 +822,34 @@ export function isStreamingMessageTextUpdate(previous: ChatMessage, next: ChatMe return shallow(previousMetadata, nextMetadata); } +function streamedTextMetadata(item: OrchestrationV2TurnItem) { + if (item.type === "proposed_plan" && item.streaming) { + const { markdown: _markdown, updatedAt: _updatedAt, ...metadata } = item; + return metadata; + } + if ((item.type === "assistant_message" || item.type === "reasoning") && item.streaming) { + const { text: _text, updatedAt: _updatedAt, ...metadata } = item; + return metadata; + } + return null; +} + export function isStreamingTurnItemTextUpdate( previous: OrchestrationV2ProjectedTurnItem, next: OrchestrationV2ProjectedTurnItem, ): boolean { const { item: previousItem, ...previousSource } = previous; const { item: nextItem, ...nextSource } = next; + const previousMetadata = streamedTextMetadata(previousItem); + const nextMetadata = streamedTextMetadata(nextItem); if ( - previousItem.type !== "assistant_message" || - nextItem.type !== "assistant_message" || - !previousItem.streaming || - !nextItem.streaming || + previousMetadata === null || + nextMetadata === null || !shallow(previousSource, nextSource) || projectedItemCreatedAt(previous) !== projectedItemCreatedAt(next) ) { return false; } - const { text: _previousText, updatedAt: _previousUpdatedAt, ...previousMetadata } = previousItem; - const { text: _nextText, updatedAt: _nextUpdatedAt, ...nextMetadata } = nextItem; // Wire decoding recreates timestamps and attachments; compare only the changed item's metadata. return Equal.equals(previousMetadata, nextMetadata); } @@ -865,6 +875,19 @@ function canRederiveInPlace( ); } +/** Entries read only each plan's status; streaming plans rebuild artifacts with every delta. */ +function samePlanStatuses( + next: TimelineEntriesInput["plans"], + previous: TimelineEntriesInput["plans"], +): boolean { + if (next === previous) return true; + if (next === undefined || previous === undefined || next.length !== previous.length) return false; + return next.every((plan, index) => { + const before = previous[index]!; + return plan.id === before.id && plan.kind === before.kind && plan.status === before.status; + }); +} + function reuseTimelineEntries( input: TimelineEntriesInput, previous: TimelineEntriesProjection, @@ -877,7 +900,7 @@ function reuseTimelineEntries( !shallow(input.attachmentUrlById, before.attachmentUrlById) || !shallow(input.attempts, before.attempts) || !shallow(input.nodes, before.nodes) || - !shallow(input.plans, before.plans) + !samePlanStatuses(input.plans, before.plans) ) { return null; } @@ -910,7 +933,11 @@ function reuseTimelineEntries( const previousItem = before.visibleTurnItems[index]!; const item = input.visibleTurnItems[index]!; if (item === previousItem) continue; - if (isStreamingTurnItemTextUpdate(previousItem, item)) { + // Reasoning and plan text re-derive below; only assistant text patches the message. + if ( + item.item.type === "assistant_message" && + isStreamingTurnItemTextUpdate(previousItem, item) + ) { replacements.set(previousItem, item); continue; } diff --git a/apps/web/src/test-fixtures.ts b/apps/web/src/test-fixtures.ts index 494d95caa8d79..b26da5a1e0a86 100644 --- a/apps/web/src/test-fixtures.ts +++ b/apps/web/src/test-fixtures.ts @@ -2,6 +2,7 @@ import { presentThreadShell } from "@t3tools/client-runtime/state/shell"; import { EnvironmentId, MessageId, + PlanId, RunId, TurnItemId, type OrchestrationV2ProjectedTurnItem, @@ -219,5 +220,53 @@ export function makeStreamingTimelineFixture(text = "") { sourceItemId: item.id, item, })); - return { threadId, runId, historyRunId, visibleTurnItems, time }; + return { threadId, runId, historyRunId, visibleTurnItems, time, base }; +} + +/** The streaming fixture, ending in streaming thinking or a streaming plan instead of assistant text. */ +export function makeStreamingWorkTimelineFixture(kind: "reasoning" | "proposed_plan") { + const fixture = makeStreamingTimelineFixture(); + const live = { + ...fixture.base("live-streaming", fixture.runId, 7), + status: "running" as const, + completedAt: null, + }; + const streamingItem: OrchestrationV2TurnItem = + kind === "proposed_plan" + ? { + ...live, + type: "proposed_plan", + planId: PlanId.make("live-plan"), + markdown: "", + streaming: true, + } + : { ...live, type: "reasoning", text: "", streaming: true }; + const visibleTurnItems = fixture.visibleTurnItems.map((row) => + row.item.id === "live-assistant-item" + ? { ...row, sourceItemId: streamingItem.id, item: streamingItem } + : row, + ); + return { ...fixture, visibleTurnItems, streamingItemId: streamingItem.id }; +} + +/** One coalesced provider flush: only the streamed text and `updatedAt` change. */ +export function withStreamedText( + rows: ReadonlyArray, + itemId: string, + text: string, + updatedAt: string, +): OrchestrationV2ProjectedTurnItem[] { + return rows.map((row) => { + if (row.item.id !== itemId) return row; + const updated = DateTime.makeUnsafe(updatedAt); + return { + ...row, + item: + row.item.type === "proposed_plan" + ? { ...row.item, markdown: text, updatedAt: updated } + : row.item.type === "reasoning" + ? { ...row.item, text, updatedAt: updated } + : row.item, + }; + }); } From 532bf2ee19aab2d419b920a7ffa69bb6e42035c3 Mon Sep 17 00:00:00 2001 From: vivek Date: Fri, 13 Nov 2026 05:18:30 +0530 Subject: [PATCH 009/922] fix(mobile): Back from a PR opened in a chat returns to the chat on Android (#27653) Co-authored-by: Julius Marminge --- .../layout/AdaptiveWorkspaceLayout.tsx | 7 ++-- .../AndroidWorkspaceTabsProvider.tsx | 6 +++- .../layout/workspace/WorkspaceTabsContext.tsx | 7 ++-- .../useAndroidWorkspaceNavigation.ts | 35 ++++--------------- .../layout/workspace/workspace-tabs-state.ts | 11 ++++-- .../pull-requests/PullRequestRouteScreen.tsx | 2 +- .../pull-requests/PullRequestStackCard.tsx | 16 +++++---- .../pull-requests/usePullRequestThreads.ts | 15 +++++--- .../threads/NewTaskDraftRouteScreen.tsx | 2 +- .../features/threads/NewTaskDraftScreen.tsx | 2 +- .../src/features/threads/ThreadHeader.tsx | 2 +- .../features/threads/ThreadRouteScreen.tsx | 4 +-- .../lib/android-workspace-navigation.test.ts | 31 ++++++++-------- .../src/lib/android-workspace-navigation.ts | 25 +++++++------ apps/mobile/src/native/useOpenPullRequest.ts | 7 +--- 15 files changed, 81 insertions(+), 91 deletions(-) diff --git a/apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx b/apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx index 19ffe072fb58e..3a32e33523611 100644 --- a/apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx +++ b/apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx @@ -112,7 +112,7 @@ import { workspaceTabColumns, workspaceTabNavigationState, } from "./workspace/workspace-tab-navigation"; -import type { WorkspaceTab } from "./workspace/workspace-tabs-state"; +import { workspaceTabOf, type WorkspaceTab } from "./workspace/workspace-tabs-state"; import { workspaceRoutesOf } from "./workspace-overlay-routes"; import { SettingsWorkspaceLayout } from "../settings/SettingsWorkspaceLayout"; import { WorkspaceThreadSidebar } from "./workspace/WorkspaceThreadSidebar"; @@ -570,10 +570,7 @@ function AdaptiveWorkspaceLayoutContent( setFileInspectorPreferredVisible(false); setInspectorSheetRoute(null); if (layout.variant === "medium") setPrimarySidebarVisible(false); - workspace?.dispatch({ - type: "select", - tab: detail.name === "Thread" ? "threads" : "pullRequests", - }); + workspace?.dispatch({ type: "select", tab: workspaceTabOf(detail.name) }); startOpeningDetail(detail); navigation.dispatch(selectWorkspaceDetail(detail, sheet)); }); diff --git a/apps/mobile/src/features/layout/workspace/AndroidWorkspaceTabsProvider.tsx b/apps/mobile/src/features/layout/workspace/AndroidWorkspaceTabsProvider.tsx index 5fc9b50097ba2..3612561ede6c6 100644 --- a/apps/mobile/src/features/layout/workspace/AndroidWorkspaceTabsProvider.tsx +++ b/apps/mobile/src/features/layout/workspace/AndroidWorkspaceTabsProvider.tsx @@ -3,6 +3,7 @@ import { createContext, use, type ReactNode } from "react"; import { Platform } from "react-native"; import { androidWorkspaceSettingsOpen } from "./android-workspace-tabs"; import { WorkspaceTabsProvider } from "./WorkspaceTabsContext"; +import { workspaceTabOf } from "./workspace-tabs-state"; interface AndroidWorkspaceRoot { /** @@ -35,7 +36,10 @@ export function AndroidWorkspaceTabsProvider(props: { settingsIndex < 0 ? null : (props.state.routes[settingsIndex + 1]?.name ?? null); const root = { key, settingsOpen, settingsRoute, settingsPage }; return Platform.OS === "android" ? ( - + // A cold-start link lands on a page with no list selection; start on that page's list. + route.name !== "Home")?.name)} + > {props.children} ) : ( diff --git a/apps/mobile/src/features/layout/workspace/WorkspaceTabsContext.tsx b/apps/mobile/src/features/layout/workspace/WorkspaceTabsContext.tsx index 91ad469d88709..81344be55e4d2 100644 --- a/apps/mobile/src/features/layout/workspace/WorkspaceTabsContext.tsx +++ b/apps/mobile/src/features/layout/workspace/WorkspaceTabsContext.tsx @@ -54,8 +54,8 @@ function resolveWorkspaceTabsSelection( // One model per provider. Handlers on frozen screens keep stale closures, so // they read the current selection from the registry at call time. -function createWorkspaceTabsModel() { - const stored = Atom.make(initialWorkspaceTabsState()); +function createWorkspaceTabsModel(selectedTab?: WorkspaceTab) { + const stored = Atom.make(initialWorkspaceTabsState(selectedTab)); const scrollOffsets: Record = { threads: 0, pullRequests: 0, @@ -77,9 +77,10 @@ function createWorkspaceTabsModel() { export function WorkspaceTabsProvider(props: { readonly children: ReactNode; readonly settingsOpen?: boolean; + readonly initialTab?: WorkspaceTab; }) { const registry = use(RegistryContext); - const [model] = useState(createWorkspaceTabsModel); + const [model] = useState(() => createWorkspaceTabsModel(props.initialTab)); const state = useAtomValue(model.resolved); const dispatch = (action: WorkspaceTabsAction) => registry.set(model.stored, workspaceTabsReducer(registry.get(model.resolved), action)); diff --git a/apps/mobile/src/features/layout/workspace/useAndroidWorkspaceNavigation.ts b/apps/mobile/src/features/layout/workspace/useAndroidWorkspaceNavigation.ts index dfc8e13d162c1..0165634f0a31e 100644 --- a/apps/mobile/src/features/layout/workspace/useAndroidWorkspaceNavigation.ts +++ b/apps/mobile/src/features/layout/workspace/useAndroidWorkspaceNavigation.ts @@ -1,50 +1,29 @@ import { StackActions, useFocusEffect, useNavigation } from "@react-navigation/native"; import { useCallback } from "react"; import { BackHandler, Keyboard, Platform } from "react-native"; -import { - resetAndroidWorkspace, - returnToAndroidWorkspaceList, -} from "../../../lib/android-workspace-navigation"; -import { useWorkspaceTabs } from "./WorkspaceTabsContext"; -import type { WorkspaceTab } from "./workspace-tabs-state"; +import { returnToAndroidWorkspaceList } from "../../../lib/android-workspace-navigation"; -function useWorkspaceListNavigation(tab: WorkspaceTab) { +export function useWorkspaceBackNavigation() { const navigation = useNavigation(); - const dispatch = useWorkspaceTabs()?.dispatch; return () => { - if (Platform.OS === "android") { - dispatch?.({ type: "select", tab }); - resetAndroidWorkspace(navigation); - } else if (navigation.canGoBack()) navigation.goBack(); + if (Platform.OS === "android") returnToAndroidWorkspaceList(navigation); + else if (navigation.canGoBack()) navigation.goBack(); else navigation.dispatch(StackActions.replace("Home")); }; } -export function useWorkspaceBackNavigation(tab: WorkspaceTab) { - const navigation = useNavigation(); - const dispatch = useWorkspaceTabs()?.dispatch; - const returnToList = useWorkspaceListNavigation(tab); - return () => { - if (Platform.OS === "android") { - returnToAndroidWorkspaceList(navigation, () => dispatch?.({ type: "select", tab })); - } else returnToList(); - }; -} - -export function useAndroidWorkspaceBack(tab: WorkspaceTab) { - const dispatch = useWorkspaceTabs()?.dispatch; - const goBack = useWorkspaceBackNavigation(tab); +export function useAndroidWorkspaceBack() { + const goBack = useWorkspaceBackNavigation(); useFocusEffect( useCallback(() => { if (Platform.OS !== "android") return; - dispatch?.({ type: "select", tab }); const subscription = BackHandler.addEventListener("hardwareBackPress", () => { if (Keyboard.isVisible()) Keyboard.dismiss(); else goBack(); return true; }); return () => subscription.remove(); - }, [goBack, dispatch, tab]), + }, [goBack]), ); return goBack; } diff --git a/apps/mobile/src/features/layout/workspace/workspace-tabs-state.ts b/apps/mobile/src/features/layout/workspace/workspace-tabs-state.ts index 3598894115dc3..3f6754c679c5a 100644 --- a/apps/mobile/src/features/layout/workspace/workspace-tabs-state.ts +++ b/apps/mobile/src/features/layout/workspace/workspace-tabs-state.ts @@ -38,9 +38,16 @@ function emptyTab(): WorkspaceTabState { return { query: "", searchMode: "resting", scrollOffset: 0, searchEntryOffset: 0 }; } -export function initialWorkspaceTabsState(): WorkspaceTabsState { +/** The list a workspace page belongs to. */ +export function workspaceTabOf(routeName: string | undefined): WorkspaceTab { + return routeName === "PullRequest" ? "pullRequests" : "threads"; +} + +export function initialWorkspaceTabsState( + selectedTab: WorkspaceTab = "threads", +): WorkspaceTabsState { return { - selectedTab: "threads", + selectedTab, selectionRevision: 0, tabs: { threads: emptyTab(), diff --git a/apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx b/apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx index f682363792032..844bac3910f3e 100644 --- a/apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx +++ b/apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx @@ -358,7 +358,7 @@ function usePullRequestToolbarHeight(bottomInset: number) { } export function PullRequestRouteScreen({ route }: StaticScreenProps) { - const returnToList = useAndroidWorkspaceBack("pullRequests"); + const returnToList = useAndroidWorkspaceBack(); const { layout } = useAdaptiveWorkspaceLayout(); const navigation = useNavigation(); const insets = useSafeAreaInsets(); diff --git a/apps/mobile/src/features/pull-requests/PullRequestStackCard.tsx b/apps/mobile/src/features/pull-requests/PullRequestStackCard.tsx index 0b2637b7c6b61..6e69e267e3fef 100644 --- a/apps/mobile/src/features/pull-requests/PullRequestStackCard.tsx +++ b/apps/mobile/src/features/pull-requests/PullRequestStackCard.tsx @@ -1,6 +1,6 @@ +import { StackActions, useNavigation } from "@react-navigation/native"; import { useState } from "react"; import { View } from "react-native"; -import { useOpenWorkspaceDetail } from "../layout/useOpenWorkspaceDetail"; import { AppText as Text } from "../../components/ui/AppText"; import { PullRequestCardGroup, PullRequestCardRow } from "./PullRequestControls"; import { pullRequestLayerParams } from "./pullRequestStack"; @@ -14,7 +14,7 @@ export function PullRequestStackCard(props: { readonly params: PullRequestParams; readonly state: PullRequestStackState; }) { - const openDetail = useOpenWorkspaceDetail(); + const navigation = useNavigation(); const [expanded, setExpanded] = useState(false); const stack = props.state.stack; if (!stack) { @@ -66,12 +66,14 @@ export function PullRequestStackCard(props: { selected ? undefined : () => - openDetail({ - name: "PullRequest", - params: withKnownPullRequestSummary( - pullRequestLayerParams(props.params, layer.number), + navigation.dispatch( + StackActions.push( + "PullRequest", + withKnownPullRequestSummary( + pullRequestLayerParams(props.params, layer.number), + ), ), - }) + ) } last={index === stack.layers.length - 1} /> diff --git a/apps/mobile/src/features/pull-requests/usePullRequestThreads.ts b/apps/mobile/src/features/pull-requests/usePullRequestThreads.ts index 85a77a254967f..d79682f944886 100644 --- a/apps/mobile/src/features/pull-requests/usePullRequestThreads.ts +++ b/apps/mobile/src/features/pull-requests/usePullRequestThreads.ts @@ -3,7 +3,12 @@ import { visibleLinkedThreads } from "@t3tools/client-runtime/state/threads"; import { AsyncResult } from "effect/reactivity"; import { settlePromise, squashAtomCommandFailure } from "@t3tools/client-runtime/state/runtime"; import * as Dialog from "../../components/ui/Dialog"; -import { useNavigationState, useRoute } from "@react-navigation/native"; +import { + StackActions, + useNavigation, + useNavigationState, + useRoute, +} from "@react-navigation/native"; import { threadPullRequestLinkMode } from "@t3tools/client-runtime/thread-pull-request-compatibility"; import { AuthOrchestrationOperateScope, @@ -16,7 +21,6 @@ import { formatComposerContextReference } from "@t3tools/shared/composerContextR import { sourceControlClients } from "@t3tools/client-runtime/source-control-clients"; import { normalizeThreadPullRequestKey } from "@t3tools/client-runtime/thread-pull-requests"; import { useRef, useState } from "react"; -import { useOpenWorkspaceDetail } from "../layout/useOpenWorkspaceDetail"; import { pullRequestComposerContext } from "../../lib/composerContext"; import { scopedThreadKey } from "../../lib/scopedEntities"; import { uuidv4 } from "../../lib/uuid"; @@ -82,14 +86,15 @@ export function usePullRequestThreads( const canOperate = useEnvironmentScope(target.environmentId, AuthOrchestrationOperateScope); const canAsk = !connected || canOperate; const canCheckout = useEnvironmentScope(target.environmentId, AuthSourceControlWriteScope); - const openDetail = useOpenWorkspaceDetail(); + const navigation = useNavigation(); const pending = useRef(false); const previousPrompts = useRef(new Map()); const openThread = (thread: LinkedThread) => { openThreadRoute({ environmentId: params.environmentId, threadId: thread.id }); }; - const openThreadRoute = (destination: ReactNavigation.RootParamList["Thread"]) => - openDetail({ name: "Thread", params: destination }); + const openThreadRoute = (destination: ReactNavigation.RootParamList["Thread"]) => { + navigation.dispatch(StackActions.push("Thread", destination)); + }; const [busy, setBusy] = useState(false); const ask = async (thread?: LinkedThread, task: PullRequestAgentTask = "ask") => { if (!pr || !canAsk || pending.current) return; diff --git a/apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx b/apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx index 4b77761b600a7..abb35e793edc0 100644 --- a/apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx +++ b/apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx @@ -90,7 +90,7 @@ const idleBranchCheckoutAtom = Atom.make(AsyncResult.initial) { const currentRoute = useRoute(); - const goBack = useWorkspaceBackNavigation("threads"); + const goBack = useWorkspaceBackNavigation(); const params = route.params ?? {}; const draftId = Array.isArray(params.draftId) ? params.draftId[0] : params.draftId; const projects = useProjects(); diff --git a/apps/mobile/src/features/threads/NewTaskDraftScreen.tsx b/apps/mobile/src/features/threads/NewTaskDraftScreen.tsx index 0fe4f8e267a2b..1c90d5fa2df1b 100644 --- a/apps/mobile/src/features/threads/NewTaskDraftScreen.tsx +++ b/apps/mobile/src/features/threads/NewTaskDraftScreen.tsx @@ -163,7 +163,7 @@ export function NewTaskDraftScreen(props: { const flow = useNewTaskFlow(); const navigation = useNavigation(); const isFocused = useIsFocused(); - const goBack = useWorkspaceBackNavigation("threads"); + const goBack = useWorkspaceBackNavigation(); const currentRoute = useRoute(); const flowKey = newTaskFlowKey(currentRoute); const { getShare, isLoading: isIncomingShareInboxLoading } = useIncomingShare(); diff --git a/apps/mobile/src/features/threads/ThreadHeader.tsx b/apps/mobile/src/features/threads/ThreadHeader.tsx index d0045bf5f284e..0388bfb299299 100644 --- a/apps/mobile/src/features/threads/ThreadHeader.tsx +++ b/apps/mobile/src/features/threads/ThreadHeader.tsx @@ -22,7 +22,7 @@ export function ThreadHeader(props: { readonly inspectorMode: ThreadInspectorMode | null; readonly onOpenFilesInspector: () => void; }) { - const goBack = useWorkspaceBackNavigation("threads"); + const goBack = useWorkspaceBackNavigation(); const { toggleAuxiliaryPane, startNewTask } = useAdaptiveWorkspaceLayout(); const { panes } = useWorkspacePaneState(); const gitMenu = useThreadGitMenuDefinition(props.gitControls); diff --git a/apps/mobile/src/features/threads/ThreadRouteScreen.tsx b/apps/mobile/src/features/threads/ThreadRouteScreen.tsx index 8bfb476521321..8f1463ce1bd85 100644 --- a/apps/mobile/src/features/threads/ThreadRouteScreen.tsx +++ b/apps/mobile/src/features/threads/ThreadRouteScreen.tsx @@ -136,7 +136,7 @@ function firstRouteParam(value: string | string[] | undefined): string | null { const InspectorHeaderShownContext = createContext(false); function ThreadRouteFallbackLayout(props: { readonly children: ReactNode }) { - const goBack = useWorkspaceBackNavigation("threads"); + const goBack = useWorkspaceBackNavigation(); const inspectorHeaderShown = use(InspectorHeaderShownContext); return ( ) { } describe("Android workspace navigation", () => { - it("returns to a distinct previous thread, otherwise to the workspace list", () => { + it("returns to the previous page, otherwise to the workspace list", () => { const parent = withThread(); let state = apply( parent, StackActions.push("Thread", { ...thread.params, threadId: "child-a" }), ); - let listSelected = false; const navigation = { dispatch: (action: RootStackResetAction) => { state = apply(state, action); @@ -102,39 +101,41 @@ describe("Android workspace navigation", () => { state = apply(state, StackActions.pop()); }, }; - const back = () => - returnToAndroidWorkspaceList(navigation, () => { - listSelected = true; - }); + const back = () => returnToAndroidWorkspaceList(navigation); back(); expect(state.routes).toEqual(parent.routes); expect(state.index).toBe(parent.index); - expect(listSelected).toBe(false); back(); expect(state.routes).toEqual([parent.routes[0]]); expect(state.index).toBe(0); - expect(listSelected).toBe(true); state = apply( parent, StackActions.push("Thread", { ...thread.params, environmentId: "environment-b" }), ); - listSelected = false; back(); expect(state.routes).toEqual(parent.routes); expect(state.index).toBe(parent.index); - expect(listSelected).toBe(false); + + const pullRequestOverThread = legacyHistory(); + state = pullRequestOverThread; + back(); + expect(state.routes).toEqual(pullRequestOverThread.routes.slice(0, 2)); // Confirming a Git action from the inline inspector can duplicate the current thread. state = apply(parent, StackActions.push("Thread", thread.params)); back(); - expect({ routes: names(state), index: state.index, listSelected }).toEqual({ - routes: ["Home"], - index: 0, - listSelected: true, - }); + expect({ routes: names(state), index: state.index }).toEqual({ routes: ["Home"], index: 0 }); + + const child = { ...thread.params, threadId: "child-a" }; + state = apply( + apply(parent, StackActions.push("Thread", child)), + StackActions.push("Thread", child), + ); + back(); + expect(state.routes).toEqual(parent.routes); }); it("opens a linked thread above the current one so Back returns to it", () => { diff --git a/apps/mobile/src/lib/android-workspace-navigation.ts b/apps/mobile/src/lib/android-workspace-navigation.ts index eed0adbd8e59b..170fcc3acc664 100644 --- a/apps/mobile/src/lib/android-workspace-navigation.ts +++ b/apps/mobile/src/lib/android-workspace-navigation.ts @@ -2,15 +2,14 @@ import type { NavigationState } from "@react-navigation/native"; import { isSettingsRoute } from "../features/settings/settings-navigation"; import { resetRootStack, type RootStackNavigation } from "./root-stack-reset"; -function androidWorkspaceBackReturnsToThread(state: NavigationState) { - const current = state.routes[state.index]; - const params = current?.params as ReactNavigation.RootParamList["Thread"] | undefined; - return ( - current?.name === "Thread" && - state.routes[state.index - 1]?.name === "Thread" && - params !== undefined && - !parentThreadIsBelow(state, params) - ); +// Back follows history; Git confirmations can stack copies of the current thread, so skip those too. +function androidWorkspaceBackTarget(state: NavigationState) { + let index = state.index; + const params = state.routes[index]?.params as ReactNavigation.RootParamList["Thread"] | undefined; + if (state.routes[index]?.name === "Thread" && params) { + while (parentThreadIsBelow({ ...state, index }, params)) index -= 1; + } + return index - 1; } /** The root stack with only the workspace list. */ @@ -60,12 +59,12 @@ export function linkedThreadStep( export function returnToAndroidWorkspaceList( navigation: RootStackNavigation & { readonly goBack: () => void }, - selectTab: () => void, ) { const state = navigation.getState(); - if (state && androidWorkspaceBackReturnsToThread(state)) return navigation.goBack(); - selectTab(); - resetAndroidWorkspace(navigation); + const index = state ? androidWorkspaceBackTarget(state) : -1; + if (!state || index < 0) return resetAndroidWorkspace(navigation); + if (index === state.index - 1) return navigation.goBack(); + resetRootStack(navigation, () => ({ ...state, index, routes: state.routes.slice(0, index + 1) })); } // Split view: Thread, PullRequest, and a Settings page picked from the list swap the detail pane diff --git a/apps/mobile/src/native/useOpenPullRequest.ts b/apps/mobile/src/native/useOpenPullRequest.ts index 6608b7b5493db..ed080ade2f965 100644 --- a/apps/mobile/src/native/useOpenPullRequest.ts +++ b/apps/mobile/src/native/useOpenPullRequest.ts @@ -1,7 +1,5 @@ import { useNavigation, useRoute, StackActions } from "@react-navigation/native"; import { nativePullRequestDestination } from "../lib/pullRequestNavigation"; -import { Platform } from "react-native"; -import { useSelectWorkspaceDetail } from "../features/layout/workspace/useSelectWorkspaceDetail"; import { EnvironmentId, ThreadId } from "@t3tools/contracts"; import { useProjects, useThreadShell } from "../state/entities"; import { tryOpenExternalUrl } from "../lib/openExternalUrl"; @@ -17,7 +15,6 @@ type PullRequestContext = { readonly environmentId: string; readonly projectId: // Avoid useRoute so layouts without route context can open any thread's pull requests. export function useNavigateToPullRequest(options?: { readonly replace?: boolean }) { const navigation = useNavigation(); - const selectDetail = useSelectWorkspaceDetail(); const projects = useProjects(); const replace = options?.replace; return async (url: string, context: PullRequestContext | null) => { @@ -31,9 +28,7 @@ export function useNavigateToPullRequest(options?: { readonly replace?: boolean ...destination, ...(destination.navigationUrl ? { navigationId: nextLinkNavigationId() } : {}), }); - // Android shows one page at a time; iOS opens it over the current page, so Back returns. - if (Platform.OS === "android") selectDetail({ name: "PullRequest", params }); - else if (replace) navigation.dispatch(StackActions.replace("PullRequest", params)); + if (replace) navigation.dispatch(StackActions.replace("PullRequest", params)); else navigation.dispatch(StackActions.push("PullRequest", params)); return true; }; From 0ca50a6f1e4ad7a9bc5a61eed685f1671c6e6f1d Mon Sep 17 00:00:00 2001 From: Muzammil Hussain <58479501+Muzammil-Bit@users.noreply.github.com> Date: Fri, 13 Nov 2026 04:49:59 +0500 Subject: [PATCH 010/922] fix(mobile): tall iOS code blocks with long lines show their code (#33243) Co-authored-by: maria-rcks Co-authored-by: Julius Marminge --- apps/mobile/deps/README.md | 2 +- ...enriched-markdown-1.2.0-t3.18-0dc7ed81.tgz | Bin 0 -> 1452220 bytes ...enriched-markdown-1.2.0-t3.18-497fbe63.tgz | Bin 1451481 -> 0 bytes apps/mobile/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- pnpm-workspace.yaml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-0dc7ed81.tgz delete mode 100644 apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-497fbe63.tgz diff --git a/apps/mobile/deps/README.md b/apps/mobile/deps/README.md index 2abb1858b3c60..e7623faa8fe27 100644 --- a/apps/mobile/deps/README.md +++ b/apps/mobile/deps/README.md @@ -1,4 +1,4 @@ -The Enriched Markdown tarball comes from Julius's [`fork/t3-mobile` branch](https://github.com/pingdotgg/enriched-markdown/tree/fork/t3-mobile). Its `t3-fork.json` records the exact source commit and upstream base. React block renderers, signed image sources, the `onLinksChange` link list (`renderers`, `resolveImageSource`, `onLinksChange`) and the iOS streaming memory bounds are upstream. The fork carries only changes with an open upstream PR: clipboard link metadata ([#962](https://github.com/software-mansion/enriched-markdown/pull/962)), development-host autolinks ([#961](https://github.com/software-mansion/enriched-markdown/pull/961)) and hash-route link fragments ([mity/md4c#454](https://github.com/mity/md4c/pull/454), arriving through [md4c#7](https://github.com/software-mansion-labs/md4c/pull/7)), `md4cFlags.preserveWindowsPaths`, which keeps backslashes in Windows drive paths in prose ([#1105](https://github.com/software-mansion/enriched-markdown/pull/1105), after [mity/md4c#477](https://github.com/mity/md4c/pull/477)), GitHub's strikethrough rules for `~` ([md4c#6](https://github.com/software-mansion-labs/md4c/pull/6)), `\(…\)` and `\[…\]` math delimiters ([#1043](https://github.com/software-mansion/enriched-markdown/pull/1043), [md4c#4](https://github.com/software-mansion-labs/md4c/pull/4)), iOS Copy as Markdown keeping bold spans whole ([#1143](https://github.com/software-mansion/enriched-markdown/pull/1143)), line breaks in copied table cells written as `
` ([#1144](https://github.com/software-mansion/enriched-markdown/pull/1144)), and Android measuring text in the span order its view draws it, so code blocks nested in list items no longer make a reply overlap the next message ([#1145](https://github.com/software-mansion/enriched-markdown/pull/1145)). +The Enriched Markdown tarball comes from Julius's [`fork/t3-mobile` branch](https://github.com/pingdotgg/enriched-markdown/tree/fork/t3-mobile). Its `t3-fork.json` records the exact source commit and upstream base. React block renderers, signed image sources, the `onLinksChange` link list (`renderers`, `resolveImageSource`, `onLinksChange`) and the iOS streaming memory bounds are upstream. The fork carries only changes with an open upstream PR: clipboard link metadata ([#962](https://github.com/software-mansion/enriched-markdown/pull/962)), development-host autolinks ([#961](https://github.com/software-mansion/enriched-markdown/pull/961)) and hash-route link fragments ([mity/md4c#454](https://github.com/mity/md4c/pull/454), arriving through [md4c#7](https://github.com/software-mansion-labs/md4c/pull/7)), `md4cFlags.preserveWindowsPaths`, which keeps backslashes in Windows drive paths in prose ([#1105](https://github.com/software-mansion/enriched-markdown/pull/1105), after [mity/md4c#477](https://github.com/mity/md4c/pull/477)), GitHub's strikethrough rules for `~` ([md4c#6](https://github.com/software-mansion-labs/md4c/pull/6)), `\(…\)` and `\[…\]` math delimiters ([#1043](https://github.com/software-mansion/enriched-markdown/pull/1043), [md4c#4](https://github.com/software-mansion-labs/md4c/pull/4)), iOS Copy as Markdown keeping bold spans whole ([#1143](https://github.com/software-mansion/enriched-markdown/pull/1143)), line breaks in copied table cells written as `
` ([#1144](https://github.com/software-mansion/enriched-markdown/pull/1144)), and Android measuring text in the span order its view draws it, so code blocks nested in list items no longer make a reply overlap the next message ([#1145](https://github.com/software-mansion/enriched-markdown/pull/1145)). It also carries one fork-only change: iOS code blocks too big for one backing store draw through tiles, so a tall block with long lines no longer shows an empty pane ([pingdotgg/enriched-markdown#15](https://github.com/pingdotgg/enriched-markdown/pull/15)). To replace it, commit the fork changes, run `yarn install --immutable` and `yarn workspace react-native-enriched-markdown prepare` in the fork checkout, then `node scripts/pack-t3.mjs /path/to/t3code/apps/mobile/deps`. Keep the package version aligned with Julius's `fork/t3-mobile` branch. Rename the archive to include the first eight characters of the source commit, such as `react-native-enriched-markdown-1.2.0-t3.18-4287c5d3.tgz`, so each build has a distinct dependency path without version bumps. Update the tarball path in `apps/mobile/package.json` and `pnpm-workspace.yaml`'s `allowBuilds`, and run `vp i` to update the lockfile. Native clients need rebuilding when this dependency changes. diff --git a/apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-0dc7ed81.tgz b/apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-0dc7ed81.tgz new file mode 100644 index 0000000000000000000000000000000000000000..74fcb8768906f0867ac62de03f214f6e25e39644 GIT binary patch literal 1452220 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

wdia5%)1s%+r}>w6z=8YYz@eXfVvO=P%a?dG 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 z∨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

cD5*`QQS=RMo^yd}Np15X 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

(@jD_osd8~Y9ih**!Js7G{rkz8ws4} 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 z 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%0DU8%ELn+8HpXlmWs(VCI}-s=*R-h5EGIV_RS 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

^Pq)Y>O1 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%0DUAA`hdL@vm!33nFTJR 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

o2-&8|zr{)nZDOxx*G)l^ zS8@lX!UxHWlYQ7MQh{&3IiL-@DyD0FrHtqBR()jwzEx&pNTyFUBrJPuD6mPqNH`gw zBNQG{xw7wcjhsqvA^VkMbOv1!jXaS#65;{XG!nz=5aJKb@g`m3V%Pl-rrZOLJ^PTm z6WK^^6f{V0E8>3?x|p%~BXSL-g3br)D6I@hGFF=A?d+GFY_PR&qrc`x^rQ04ug1+M~f zu=&=?xG#WQE+8<_%Rl(bvPoj9;*MkD^GfJqET$VjxJ{9`EN(osIV@XOpKKFw(jEa{ zG2%}~vD;P}Sv!$iPKS`IZ5g-WV0ddM)F(!6arfN@$60=4ZyO(%Q_l>}8__U1=vcdlm%x z=mqqEP?n_*N9qddFd`3d@3;jqO%6F$iE#jTn%PP zH6hKH9_&WgRu429UI7qHZtB8Ez|_Ps4PbAb#3jV-XLhLblFcjAlEO{k)}Hr!)EO_p z$DM{Z^j1vqr{`X%k7%FYf6EE@ShrdPyR08}=e-GC;DxO$cf{W*!w5vs5H}i;NnJulU)YKhsGSCPnFj#ch{-7Ftzb}zP5zHsPYWW1tO?I?xQbKv^rAtM!-R6X zS)E`+?CJ!g(O~U}w@hhmko`}0Cox;ap-DqLIEbys)so4{iT)w~Gm)Xb?0td4*DP&n zj@^R@#<|~{RV~i}pNinNx(<0LObK=jB?p0h09#?J_Sj$7k2?|eV6q12Ir;_f99)(a z23DKE`%y)-8rM4>MK_0uM?p&eY$TqM1V^ZMec)*UjoDi13M$vOrGS;*PIiNIIDp&Y6)!f2e` z#64I{!p+c8_ea*~5C{2uBwSqq-Q9mQe@0l$97uxv(z<3fs>j{LH9Ra-u3uqY*oA%E zjJxG+ux~2^1~yItPZEscH7?s>E5gYWHKQtd2XOg)C7venusw4Nu2bSr4uA`|1nbi* z1@Hl}LflfL-vlpfIuU=kpf*1bs@2M>qAe?gM|Dbd^HLcYL@V+P`_|y~lcK>m3n%Z@ z-@aAY7SZRIuti8hM3!APZY z3bVpnOuHgHwk+X8?}6t){3iaXi^^%E0dx6I;!XLq(rhw^FiV-VB09UpK_iE{qx;1J zit4LZbjz8$1~zFjaojLw+J`||jFhcLnpND}U~9+rH`tpTHrUdj0*i17dkgELYxcG? zn4=2-qQ@qn=&Ty0?jl0Xx*XVz^G!CQ+4?kcu6}Iqcn@6ttTf@45W(8qt-y2JwB`LL zP7S}9O~o(Yj*=yqrqx*?C8_j7sGJSEr{LFbvE9^1Z~RlGRj~&AB3yN^+(5kfg7w4Y z*%Pxe@B761?I^ixf@NwS6&D(8&rTow;>7|W1WQ=gxqwi-a@HVo9omk*!@lF#RYTDO3NmwPgBbpk}a7_%)-x4n>OW zjeM!Dm!IJ_o*yPb-x&##P;3NvL;spuDA$q=Qo1DR!o`>L#P}A)F;otD6Y%&m7dK51IE##Xu_ENB%&C|HJUVTFXc{K>$ub zvA=hV_hgafpV9+ajsM-+-`%RrcB?^Y1I_O_aN6eC2Pf#_K>2q`}>Pnv_23=NKQDcq<}El!tIt#V{^Fq^jl3qP#m zhX_fNz%!!rYRMC!E^+6&9-Ft0{-4`ypVx! zfCVat87s2xvx|2c&Mv1}u8=E)clpN}dZB5fUQ4f2?*WZ>6g*cRlZ0b%{^&%}do1@@ zLb{w^>&?6!i7j%VgQsW@X-ku#^6B=YDViKFnqnp=M^=c|rc;EIm?P%CslIkni54<= zJ6H-`M=6!56^eOG^HN%|4;zQ{Y5ZsV_TRSuE3&+w6`S#7d@X-v#i!KZKA8Xah1QQd z|2Ovk;D7(c{h!~^|7`OY=sl~qeu-s&X@%Ke^dxHxUams-k0#SB7KVVNtgs?DcM&~7 zERm!9#xs*(Hy%YZLkbdl`7V$2Ir2o9bFVz@w?^C}ix9sy)T=m{Cxdv{Vn>fm(xbYp zB1diVyOUc!hft%*fNz6tc8xlm)S76=L5*)$zfFW2aKBvPfR~5hP!kMDJ|{QIE8sMb zLpU$ExY23fY$9h)h}whxajnlH@*yWWPWx~KHZ4F2R!A@&+0?Iqqjoe*?yI~TbC-=n zwiAzrY%0zI8?ikMkd=(`Pfbt197(@TA;tF+$Ey_lsNQrgdQa=paje|`2S)C%sKKqA z|C^27t?K@N>yQ51zq8vZ2f(8 zouuu%zrNsVBBA{9XWxo~&ETOWNSFc7f%tzr?+<(OukTs+S;@}zhlN78&#VM_Z<5c- zV%{qya$GCHX(2gIN@auYEXK%Mn@fC%YjHYD5mCjJt7jTd57K6c@Ha#gBH+l#v1!%_ z4a(O#aEi=Asli>SN8@hsEVCvv>9GzB0eatkljwX2_|F&Jks%OJB4egnCG3ClWceee z-BJpyWksQ=2PXM!GRm+t60tw&&2`2nuX$F)^!KZwJm?Js`#|4PAjl?b=ViB70=ven z?2fXl?obK571?ZH{*YOb6{cte6zfADh#E{F)R0pY3sGq!$Yi^ZI(Les#AG+67xL4@ zl%c|5!rkdK%lljl&lxR0nG;LzQDI^zGTE-T6Dwv|Wchr2pB2%AqG%XlubvHt52a;` zu%h-ZZ-V+28KFUya;)e!41@&H_hNB88s9t7eyUfOFo>Jo++tVrqK4+q;7v0fZJQkEH zsuPJ$qm?CR({65aC!XnC*lN})iK_Za2q2{vOPwxGg>u-&&O`avuiI*Bclja03^K*2 zZ4VJ)EMky_Q!j;~w|k@HO~-@}51+)(T}p%q1AZqcuc7++|8Xrr@eF2tVcF`%0}AStKaQp}z+Bjj;x z!w(tvcC}>x>Dk;*V-9o)a#Ly0)os_;G@@;0WWAu2?@Uw)r4l0&IiI>iWygAz5!Slt zW3A5!1%B>%cG(I_!pLvu@MjbJ2`4z-1!8gkCYL*CZR7Oz6-;di^ngTrp8pW3BybIz zrfcokO?aQ_i~ax`=M%$^WZs3WI!`8KD73CfVrUp%gt#ubp68?plm!V2ZJ6rXk7ZFV zq4S*CqHHT~K>t!6ydAqPV7`GqU*~>@{A#O5JHcIruB(62ur#C<0j7jERryzRE8Q|D zW#OG$arE~xD}P;@6D4mj=0+t})*X>I*`>)hKXZr0wJiNtU*_+&V3%l|rfEK_nY(a!|MWO^NF#+YdV8i-g~}i^{xx=jiR}dPgsGJ&d_s z9TB%C{l61R+g}L4?VaAYR}_lC*y<}01%t|JaDrTm)y){Flq0p_#MSZ}ryd~1bUBp1 zG1t&<6~zwj+i^7TN_R(HAxfA*fZp>q!6wmplUI@Go4}va>maIYH zAp_9rZ;nGGAF=O9yg;`Xw2OgcFv)M>{1XEYb-0Xt(;vvG3A$l|UIBq+&Zi6JacT=-dj->uo}J|Bj#pF zJT^bKfhg%v7J18%IY`LOsX1NVQ9n(s_xev@K7sYlpuMC=UhYC>L5pY;s`$=ZEw;Ji zWY6=s>5d3~Ov85vAUGV|4o5un1!_YL+c)vmpojP{+!8#C@4%>i=U(Tq{j2~%MM&yx z)wrY?URii*ZVratld>f5M{0GlbLWvcpa-O;VH$($oT;0X=Otg_u4`n(4v6m*hM z1~)-FjzZi8kF6R{K>&SAfv9LN6GEE|;_&wK1c7m`Hn@UX^2(R1*v8E`IDHR+mgEWg z$uOqP$5R~GT|Na+k>Q@eC2#BsV})tWCii&^XilsL8jyeaF5m|D%!zKN|pYs3;-VF8Wba)B+a6m3`*qh}{ag>sA{ zM@W@_L(|^^SHtN1ukTGsB^G;mFl2*^tEUP-k?knro(51;wyc_JRMHUt-h9qjAwJ2~CDAaafT^Y^~C-kcu>f#RdHtzEIKEI=i_(4qKcNF70spTTj ztV{jiCxX(X^Ow~8_9(KsW%kq5w_D6-5C9IEXJh={M_%fzSo&wu_ z$<$%n(A_WO&Ef%5h&x4cFQNEgBzc3*_a1|B&$;H<7u&4R(cm>Eo5&_yy{Jng`A&cB zNG_3-@m+2&4S2zRV!l!Qt> z!D8AvX>x~V$>t{x@Cz&%uupDs-@?^4^LI)<{9CZEhv~MF((=(>-HaxqWsGgmfrCpj ziv6spGo8pq!NbWTai6hh+4*si&~l*Jy2S^!!5Z={SgyC!y$01ibsL}zZ>dYV* zMBZfS2eYl>sQ~S~x8pj~MFBqAv)Ek@o|53Cqzx7J==ugU+cOrt%m+VXhoRk&?!YLS zp!2eO84kM~ltCOb%1dPR7aH->&QEe^=p~0=(Jx$lOyT7x?M-VDBdMz!*ibKuuf-r% zink8*>zPq=z^P~opw2D-?sDlhNYk#~mG2NQtiw+F7JF3w(tinsJmmXVLvS5IEZL=m zSCbe&h94nZUm6zC5~MQ+JY2eY?C81jB`agIQR5HP*I#K9%KNH}rmN4GVS(azvP-Cw zMXr0jM>$(~pfzo=#3}g|x={*KtcX5sd9d9zBFfWJ;+eM)6SC@qc&jZpx{Ea;sza`s z(WJC0PpLA0TE`+jU}~W;d$wVU+Df@hN}5k2+ILQX4QrIv>~0)=qb7f64)KUx@}{sl zjZ?r{REcBvIoy`@D(XCP0^n|~Yy6|maAo?m;t?u2D@sp1A5;Mf9;vy@XJBU;0D<5I z3e-C_pjl;~Ihs1`P>I|=IpAp}n3~7r$Veo!s%R4g@jL>f74?}Z)JV&zoJ6~NO*mdv z(}oSEojI6~+9V!vLQhZKDM?eyj5%I!dwx03vIyEUVTVyBVxP8Ax1?HB?J5b!1vQS_ zXu>|mgQpD$`$?sE6STm|vY6CV|7f=CMkaZevwEiZoMRx$m2>gBW;mQTM#pQJ;mpEV zYlgGORL2Y#wKrf-eu%qxRgVGV8yy$+cZyo5=L98QYYZZIRU3 z*?6=Mt+ivt&w2kTCK@cvIcB$NU6Ye28V1p+?->}3(r_8TOt=JV+kX|lc`f{}5Y-f7 zh(crYcsMI3#rtOfz^n1U+xy#9{+DeDrTT;a`gicZemnm&{BNlDtjGP5L~R!UEC~GN zkQ_?D0GaZbj~LFhR8OHJ%%zs5jbI$O$zEueRTUn5fwaP=7vAHQaWTm4Q4JdnT^7n& zIWr3x*`N>{D#N%+mf8!NHo=5NP`hc$7p=AOUS6uN>1@e=$kBv;5nw=WB@t693--*6 znMi*3hv&6lWz%^IzmcvtM{=3W46ed7Dy_MZv;?gTuq}L9)`EMRRVmYcv7s>Lm-Hoe z(A#EzHDkJ!YF;JIE3>SK^jZ~=uvl1r3Y>TA%pR5#+dz+UwQTB4-Dr;8^Fs!hZwLKd zAo}}**JQZVo9EcYA~c>6W-zHR)!*%l+vNINboTeTcy=D${e9fNxxKvp@pqhD-HKhe`vuW+#YQCWPGbv*4`PaNZQNOM;`D<1xfO(PiCNi&Lh7cfDrPlXp<)s2GtDNeB zJ3*%MGxvhGtW`|rQ(b+OaRb=44PzdZ-9lBqLDm}-x5%PZw^wEQbqH$tzMd|hG+KG~%Mt5H9W0mc)%ByxH?wEX-?2(|ct)gXh()K#w zNL{Y7!zfTIR_P4xvf(2yUG%#`6JbJ zlkt_+H&2)7oocAs76wA18v!t2pcrm{wu63viFI<6tN0^#32~b){MEfcb)*=Pq=s*@ z3*29whsfXLpM5+?WoXO}iB7Bg&Fhs(2R`B;3#bHl)IDA7F7aQOjnV|izc~CRAg;VV<;7Sbv+R8z0)pV0GK1Lsyb-O~7-H?6! zwzh8X=p6ZDoo-OXmn)K8w-Xfn{FhUqE|BxnUryz_y`@=jztODE-w4j_iSD)PJa6~t z{Nw~^M?UfkqrPz0tJnHn8Y2}>-;P6@5E~^#GGBO-&_S-F~!t1*He5& zv1ZgEPI%21Ymyz!gfWG;->lf7f6zIdvFJS`TzzHYVzkLl%5oa!p1;TpVT!ow5K~i5Udq z%JYJ_M)<9)RlVy2QFrjiiUV!d_m|mwM)2;8uN+^O5577fUQ@(H`}^~!%$*9 zZ;7F#@VP&(>GHK?fh)NYP?T)2&nCI}D9J~Fv`2c3BV#-0Q44kCxf=&i;Azf>wyoi=ih{zhH(s(U%Od5fRE ze60itp=x{Ls2d|5SXXQ&ddI1|Jr*n`;L>1g=fr;Ffd`RNkwxS@u@JTq&9)-c^(*t- zxhZ3}fs9QVfV}Y9e+$VLoGAP3s|WcNPw(#R&l7N!rviRcs?TnJNU;~%x$(Q_g;-Hh z{o(j{-Pr-77%7%9>DcQHgmPg$gM6E8-6p@a{B&g_1(cyC91fw-0qU#kGe`t8L~xq+@=c7<}HwMWyFTY7t-Kp{FO_b1i{`|U{$N?(QPrk?0DoeZ)$Wd{nx&JgUaR}><#avjF3(7Pf|I*ZDwAJh)JGY~ZZz{}sXmB=QqTFL22uSZTY7V%d ze6mwqc-I`_*DeN)FsPjV_ixQ!uCQ?!R*NYI&`@<4x#3BHdO3$9K@b#3v zO6&RA_R7VBjX#GDno`c;@Q6+_z`5XzLLC<1CRZj8aFd)T4&>if$cpjOfPDqbLI4In zqk-I|Nn-(yPaBZtF`3=SZ%~nowW(><#wO8u7BPbS4_Jns&o!!eJmZzBN2G}neO%q@ zCHtjj4-V|(|Gjod{q7+lWwIT?5Hwa_k+3uc-$E(JxD@LQ0i)bU-YSv3gl75Bj=YHJbgZ3pc@S$O-H?Gre#C-jgf#fH$phPrL^+Jh zB*z>I=g8yes);M7K}E~x9U>IynaZCAu{?4vHLxO{#2=kBw_q!@3+Se8h*{WU8E?iX z!Q8&EN^mhfnfy|%3!1h6BnQ$@`+r^yrodC22ejq*fPNRd z^cxYrqcdHEo5x0Y=mcm>w$8kyl{mFpm2KiHF%E1QM}1M@AUTPzt8*s z*@64J^&j_}+ZFwY7Xa4`!{QpEtN97etJA$G?opWDM{slWv#RrXC_HIh$;wAm| z%pcQY(#vKu;a87biu{V4AZCQ`~oEX* z$ei1;*YrGOl`m>aaZK|Rv~@>hmUB zaAYFdb9t(XGT7dP2$O-CtdD6BKponw-BQj@(UKwWPhBY(o42t;Jsix-J9GQ)ehl|0 zwT!MM)4Pg@wiSULjiS~8G=P?^jS^wk4s2r*YX)Dx7aBS);k)i>t&4~65V`5BrVdHl zt}tNR9%-*dG&bT*SLCCRw&xu(SDVz8g)5MLFXC@B!^FUbB|=^~PIk6~Kk;w_$q)-h zSWGnm?5&aWmn4c_l8)WI?W5bJXzV{?^Z(2C|C?+k%mu%X|DmzfY*g(3jom-?pMTf> zkL~>X%>O3U53T=1Q$Uj=?e_^uL%+zSIf^>XWEClZnVD|zik0BvM!((4uhRiX$8^E; zngtiI_DlU*Tk0Knx;Yj&4@+OZ#^aF!!Us=b-Q%@wM_&(huJvl`WNaitoa%fl2~0P@ zAQra?=^vZ=ANzlJB?b||F+j%hSO{UUpeXniSpk6&2Oy;Bh&3rm7ve_(IWO-SAd}C1B zH^Y9GJUnDQwW|CEBeJ_pc{b!^ZJbTy;B5E<`oS5OmM6yTBGxlU1H-uOLpypww21Nn z^}#C%S&j*5vh?E~TTa6T(@vM*kWTJ?3&)$5D`Z(G{cBj06%0a_^#QS8$3utE+gIO#oJ4F;7jh_Lb~SIS@1t6r$7IF zeEv)FV%QsG{qt_|+@HMW@^0~FG$}8-<#3V7**wqk^24Lx>h*tXXMfvY|95uw_W!K^ z|K9oUGcCX7;qX&EYF+0raY1NE#%|zHMD}QLznUB!9UZlzwqzbT4mxFN3m@M_PA>EERX*+2c%Do|IZHl^~Qg5Yj>;4|GBrb`)BQ)NV+`)A zKebs|T$ZAzC^w#>I2p9eouc(D6pn@D#~DyLkb6#K?mTz!2CLqXsm9T$9wC2c%@+^B zTwWLE3B?CPVWjKB5$UMTltZhW@u&j!V}JT|NJCBJiMk>3A~)BIEGErYrUjM>o%0bIm?=kTX`@1}@__uh@_-f@X&q%6+WJFlt??|!x9Zw%hlH1>e6 z)lEY+sK7t#bSElaO_*KGsaFLHtb(C(yYQ;uZB-Sl?#rr8?VWR7n4GWp0y<7RV|Dr2 zIiNm=s~eJwYKCeO&S!f}OCC|}I~kuca1?jmG}wy5(muv{ldpP1mEgQ7*owT>$DzUL zym?v`r~VBMXXniT2eb3045ua)-qx8E>xWW(rLQx{)*0&S3`F{t>P0kN`U7!j;CTOR zsdBuh^7UqGV#|74#StC2)KFwC6vcTl0Ohnmwwvp<1i<6!LX{kfSrcZ;f5Xh6+P%JK zt)8E_mYHdV7RmZL{9Uc?lbid!i)I4g{1cge!@i>MGrIkLdA}9v5|U^OzNEZeKHS-b zb~dVd*8Y<6H_^L?P<8t|C1+#0PJ}fF_&V#`=Qd{bb0P3<%7+@R(@5G zIMr9jI@7~H-=uTtWm;1azv~R}yVjh4u=%bjd*f3hLG`rX)jdAnFyqQ5U>UF6GFk@R zN-_9~0i(U41N$$&GR1#(c37vA;MZ$HHGpNfKGd5*=&cOp(C<4($A`M9no8l+!SbJO z$q-^$6Kcuf@ZoPZu$MUR_L-BmBY?44JB$BM&DHDdDu36kw2oCkxgYB7(K>5g&2g!| zG?Zw~EYQT{1z_i$tu?Ls6NqZ%%2(^RRk&wY-HT$We1t#b%)sk3)<@%2s$11o)+ z@XNL!vf|SWF~u4|1s^qoTDCLt|<}mpVC6L;h*S)^%tKv~lr!y7d zz`@GnU5+EB8?oX32>CWphhpWr5sy@T-z??~=tf#$CkcY>e+VA}+wA+2+YezD8#l!G-B=c10 zK+7chyoucRdDOtM^&%wmfZ{ozCwpJkFbPmE{F@8_v63=GgO`cMawoNbsFN z*KD&W+Gc(OxDMIUvQw#V6;rPWp`NTpxu-$~R_%2zG}hjUQoeRr6zwogAmd3Jg6)1) zg?%=b*-Ue136NfDicG$~+l4+Qx$pesX#c;vaz){_b+Kx;abgX*pc2(ib+uDNy|c)w zoY!}h+A3Q6Lv%h^a9^%Z_8e6m?pAIeO=T2R0|cC)%h)GClCR-7gOJEiWPpY|1yzmU z23@R~0j>q6lUREHv?|^|bmSgz;URQ%8J$Xs_~Ux(w+z+Np+XCx9Mw*!RcRev3a_NL z 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

pk*|H^sixX)M5yWbfwFS}`;6SeW=SY;(R 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

leQza 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�thz5-qV27Yo1NU#COq{z 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]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ฏy9flDi+ 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 Q{7-!T1C7!x{Q!Dq0QdX(`~Uy| literal 0 HcmV?d00001 diff --git a/apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-497fbe63.tgz b/apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-497fbe63.tgz deleted file mode 100644 index 2dbfd6d7960489cb6096a940d4cdc62fd85834bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1451481 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 z∨;aUQn{V)Mu5pXfH+yoMEXd2fHNkPtp#x3|B~IeTlOB}8uaCxJJ*$KBm>8Pj@f z%%b_mM$d^i726F}7Ho=KtaU`A4gbAXhoka<+AzI3G`W z{ip3{egX#n&lRqE0=1)NdZVu{lRGqNp6(ImTv#40VHG3ymR=4r%|4x&T1x17eF2*Xy za9ciMOYX|EuLDf_H85t{gE||z*|*o->>C?4gJ5iaedHqDy+c|o+hY@7Lz_N3k|g#J z&0mhkMDB}+dFYzg<8k>(2tv)PwP`I4zYanz0GXQC<2ohdWAi$qGwrlKiI~T$8td5o zLQj-DQEj;tcnudkGm?OZ)IBt*x1oeWA&wl13 z^Z`pbH-)08yZkFEX#oRx<|83(QlNHDuMuG$Pl%(tB1U!J{|fQLUugxJqTpF|L5st& zaA(GDK%SR1d(zFm7wlH2qDyXoQ0NJH{028if^SUifNUI2Vjo5{J-D`hc5nYK^z%cz zw|@u5?RApx4s;X<^5acbwxP(b1A%;tS_>nE#Jkgffuuqe9S%&LUJG_@0YoqQF0~t4t{Y6AAX?W_5Txd>lwleoBOku0$7d* znl=+?PpL#i^!F|7QW^)wx8sT!n}tTbpwUZuH?rA&y=Jpp$U${Q(4+ObO?M9jd9fxw z2A%4c{&6LevW_5)VgrFG7@;_TphR?lDSpwk4;9{s`0CTGIkElgt*3!=-yQY7)A(cV z*6X_?V$83Ns%_6tb;75r|Nk_@=9|?v_RmTPr_lkETI093n^&#*HD$Dl!0(c&uftdW zCi@7=8d28LfLgM{$+~fYkA`7~scB4r3eDG8h#m$%@syA*&t&dhA5|%qXh8+NN8c!^Iblovp^Cq5_9L$`qb}2Wee|r5 z<*mEm>X`66a?AhAgZh-#$mWnH=2RXoQS5so*}pfrYd`#{I=yYvN%Mx?EbrFo#3}w* z>>}<01d~k$Pbva8g=cilCW@w#KGxg-06 z4H4z=(P zmD~*dn}n|_2dGjs?s{N1Zb;A(MUduC5W+)Ccg7tRCUF3gOs_(9`>LgGo~s1k<_6%k zbA#tcxFCvW*gzVTNA&KG zM=Y&*>yy`|v@d64-r0&~DD2HoNMUb&;>O4|zq`&*Q>jHZZr-^3!RAZNJI!~hZJWBs zFt|KY>~{0*=2aXm0+q*cvfX^U;*OxQDvDj)7#3!S7g96ET~Dhu%GJQ9VSCt{+QhAo z=eCH29=27H;CGao9j_tyU zjh-3V)J8BeAwLY!Bb=Szo9gwP;cniHG_`|P5y|GKE^sm#r!Liy zH)8}0?ClrL-y~uB+2~N%T{<}k*N*FF;ERVsl6=3HRYIhW?s%@?XD{H#qcUua(9 z71Mm7j+@u&z%`$ny#=)757&WUh%U#?muz_Xsph5TMS8rUi3OA94HC773!c*1JL}CC z>adFu)c@uGjAfa70)q$_bi3w$PTO;I*)(6U(Y-1vE<;#ebi`)=qz*>VvYR(-d{3}h zp^cgsKT5q=TB0TO>b>x`xOuTc#n%N;Gy75V+va+F>2lEiDvgw`u<=JBfYiASAWhBQ z1d@gKs>>^yD}HuAXkLVnLb-!DmRztJC4qCmqoC_Rz+eZ+X#(Gmax7gMBf_$ZF9*Wt zpDQ*lZ{Dc0=1UR_Ve?7z28V-52%0a!G#A+9$%wQsPewULzr;V=%)aA8sr;KFJCHZM zght4SNZ45PY8FNb$URV`%_6 zKbjZoX!Q&UF++%RijJ5eA!kTseHQlZN#ngMH|Ak z|BnDo`JPep=C9NMOjQgMiiN6vi>y|4h8-fd>9r9ewlOF+Eq@(TLnB=i(fuL`cLj+( zS%zR|jS-W&70B9gDZK)HQ)sB!-u}5G&C1v{eqdl2n0y>=^p!TtnA%kHM)54lDfMhCgM1Z7FGvuZ+`kNV(RiB=_ z+`Vw1Z>%EZpk-BwG)NsHXQR7!>V#lJc{gIbxH{M+=fk`p%+Clzl#wvRNInv&4m(Q9 zCU#PKgmpj{x!Eh)L4@nu;u9{s!=}F!Vco~>g#%Ep8XFQYwE%whrU0;aDgIVh(4jvZH*a%#soWDfCu>^HljIe}MQ2bHI?QXFL~dQ^4!?!a)^xUBN@aJq*aCoBe>B zDKoOU_apA}?r+w?gmLqMGj}HLBM6QMB6-qAjpqGM6bEP^+A*fb8Q2rsa4~!cGy`s7h>F8=(;}HmNk<1A89oH2UJ9yDmN$qp8{M2wKNTfa-Uu&}Pzno|99l zNa8}9w=>@k4mgAn;FE2o8Q0K4;^*phtqRF#9LnG(_#>J3-<=P)iWc_hqY-o++IS*C zr-guuj4gM`x{>83%#X@H==uuAZ}nXg z;AZ5?o5a;|8AtsUtY#`*>7rx=?Xm|jQ+kb$07L44dDNvBaTT@;QbLI_HBqNmwNCJN z$~T;q6UIb?U+9aG{L6ZyW|5qhrmbGP{rF;a);&J10fA~>pM4omBiil<@+Sqqw`O0C zz*`FE2mVx^3lSXoGaiIFX*fnK-0YR+PiMc^{AqHVHM>9ia>Twx4xRST`?jb-6+%39 zogKjZ!5rAG`HH-|HmJyp`UPfDKL_)j3`pl0MalN<@Y6r`|jNc}7-X_4P%Vq7J-G#`>0Fyv>SDfBRaN|CEAY+tRM)Mg>N)-wV zB2eM%xln_SMZOHe!%k?A97FK$-l@Z$bQ#)+(q*7gxHN~QBtk^b?;n#~mMn#}jg3^b--#z>-KK!kt z9;S#T8VS4-+~yIa$hg4-vU$$5QM9}zetM@e9&xLgwbL64nv3p=?igyCH&B-ZN^F`^ z_>}Y>SA9{5zblcuLjJy0Co!}!h@LW8t_b57L{F|#|%U#mx#7~4JZSMGM ztB{!HLK47kYcmM(PK3=N#*Ek2s^u+#aizV2h(U}?1;+xmDEyYR8&TLhHe?PSu?fZf zO(;2H6H2(;DOJbZghHX4$$^*?-8Sy%V`VdnkJ^l4*^FYp8NtYc$J@;)?rlcN{APqC zYVrJL6zFD@_{}KkZAP(fMzL&0F#|4TlGMrEW)x#HB0~&s!-nrSqhNkBN;m+J0bwpZ)KYbK^Vy+XJm4RDF*UY%l<%qvzBFX1;e zWRtDKcFW{kltJ=y(Hwms#twoV=A!A%MPuW|1JTGXn_K0b3PoQH{mAfOH2t|~R#^@F z!5GTH7%m@-u?95pJdAo%FtP(#AiC1HM#XTs;yh#ucgCnPsXL~i>CVH*pN9wrZl|EC z$`Y9#>K+jK_UfYJ+N=ZlRav1znS!CLPqvL2bvXsOqYiWmhM0oM+!PFtoq~l}-P#El z0;9nRIA|x}U~vKto=^^&RTD6L_X!v-PQY+^0*37b1nCjhWdBez?_%o1By0_RHhp(f zUm&Kw&PXzp9G|(Kzml?33=P7g7P9*ZRw4OTP&6+NO-@6(I<0dU?E(dmz!+8soPcP{ zf!J?CWxbc+X+cw}7I00KKrAWMu~we;{pla^6sNzM zCxyT{45z=wR5N$Rw)O|RUDvbW^p|eCqG8c=rT8nF#DF~zDo0Q20SKL*)?QSMJ5h0! zh8c_(mCJ7WU)`IgDjf!`QOrq4wl_gU?F7nbg+RId3NUW@0SU3^1uelsZz9Gb_L-Fu za%BJ+E@GEOouxHEVQk8~qPx)G^TRNPRHbiq^`QE^c%k_m~5 z+fzYeo`5JG{&>euh~VSqK_;sqlA{|v27w9Q{AC>rl(3O&PhUiXnFm<8qQV=KMUXjC{ z1P@+cjciyRQstf3mwW1QNF#Q*y4cKzE{K0X3<5o)VCL;?^BVQH=88wWQmBoH#Z_@c z8+^4xk&t5%8^hL=Byuz!1ouPO-78M`IWIqOCN8 zGdXTqq`W3CS-N>;tG!Zq&5EPFx9^8LA-ujn-ZCjx&Zokgk@%3#B)>9>^02@{ENon` zZgACO(UlZe1*s<=p7h0JU=AIEvJwV99eVkk$A>gk3jE#%tje?Y<*5~gMS3s!3 zY3PMhZ#M4Odjl+vpp!Sm1U)1Jr#DcDQThmJH0nzMfk>lpsMO z(0MC^xkEpaiI%7u(oQt*=Uyd^hKtguQ9V%QfuPkrXc-V`RO{DCqhTkF2FqGlFsFqb zGh_S0LC}*%!&Vwyn6Z>b1FwvQUKx{l8Fb26=#{ZhlrbGj_CR!u@ENQSK8^ZTx}FLC zF2ZN9Lik+q3Rr=)|0AAeAZ3Ub=A8fVJCcsJ>heH9(v(3nioE!6~gC_ zGY`1|M@y5fZLbKQ;VR)XniD>M-1*fPKEqb{T$o>-@VR1s#YfGrRqeoh?g^hdlt-A6 z!bQKzDl?M!RYEUj6%@~c)`g&Hj)v-Nq3{_VWkm`__zb=98LHubM+k*Va$FtbUJ2(# z&sgoPs@n#wdj;mCP-V|haVo3aD@K_mDSImHBw8hVk~&z*Cn1g)?A~RBN8*1EH(!8L{zb9eHgDXkJ3!?6$1o$B*J|^0;L1Dn zTAMNwXLToq9wKZVMd&Ojn!h$}w!r9IV2yxHlxh+woSNU8eQoyJvp-61)v?>YYvbF! zp8)4;zuczg8BbdGo|0O7t=df1qR<2p-J+o@?^r{{A^=HE?!Os^&G%ozU)|pHt~LFi z>(H&=wISXbiQUH(vp*S{K}RSrLoyUp-`51y_j2<$00K0B3#oB9E}JiqK2;2$?%vJ# zQn@dKiHCmI>?7OS@0we6G=ajvCsE4VLUoAe!CDPffp$^efcPSS;avjXi5%7l9EO3* zJbQ$L$6b8i zaTm`Wck%pj7k~D+iyt`d;s=krc=5Q4PaSu0_W9u0%U?SF@=M2G{_63UfA{#yuN;5* z)#ERJ_xQ`-JO1*Y9)J1u<1fE?{N=Zfzx<Bc*17@*Gkk^+-c?-E8db%d0~|vdiWr!}I`2fOGm+$+H7>=<@`W zQ1FPYDQ_XTc{(ne-v$ga5Z`(vcArT6_e053f!K5Pghk41?LCh{@o}N*C?|Dzj$Y5d zR*CgmEUYto`x?V=Q35B~VWw>U9UVrRTOzRGBOxHBLK{n$mGt9!Aq{%mkjD9i1DB8M z5Vht!37rS1zA%-7j2e+)c>F+MgGT}Vdq$P@vn(IkDj0Q;>m!oEsL;&c=$x|oswn`= zKs3LaKP5|%mN=fg!<(8x&w_NxA`OC7Gkafrb{cEufV#TA+m#xKe>~6tDa^s< zwQdS7Zwv1-7}i{)b85?P6QQQ7Lf;!Q%wfS9B3($BCgCGnzQ3YTH@|3^+z}sC*fucK z24b5*3;ibZYsxa+uNv$svV(y-OneJwteGSnJt6I~){c@?SGuAXma{CE;Afb6gL`oEPV?d~h(V(H53{cZY7qGo z{bQi831xf2jE2REu$()Oo7t<)52FwBLO9kOxvypZ8Lqkm2-^E~n}47BQk$1&UzGyKzDg{Uzu%hpr&z!@jE?}EeQx%R$F*_q zG_TLT6SuXz-@Nz>E6U^VDDN9xd9SqPDdR|6sr$3f&%W{as%ps<6eLeC+`iO}%TE>X z)D+^i;%OdJ9VTc@QENPUV@A+$jmMH6SSLu?{98l+DDp{Yt_Rc2JEMDaESvBLh4|XY zz=iWQ6w-AWzupBgf+(|lH%N;QOY_41Sar|nKpgcNnuqG#S11q~TZ`p(oa#zv0?M#ABImY7zeHM>3v%j_1j zZ^kB-#2|rY_7jn>tp@mlg+H5CCkDLNngFEE#fPbRLBIorP^RV`h=t^70bFw=anz|b zb@CiT(1Ryo^pyNvP=%X!q8^f&KF3&YQ!n;8`FKlR<$e1GBPzB)%$;BxR}@DJO1ICC-haQoigTemlIV4;&xqv_6T{v@D? z9P4uqi8$p?+x__{{*(?woh8Qrey4Ytw_eph&&i(xpF#Y2L{>}SshP_FJkK1gD?+rt zjoic^Vt&0C^}cRn9KKd;Z#&|s*}}Ca!e1mJdQ0+y7`A9W;oC&F{0l6>fi zaBIC~*W}^)p{p8eQp&uiH_TC*(SjsP&&A*gtUrZPfrr?rZ2r&` z#m^seb=`+@XG#6Y9_~t={gU&n_JlW=(`4k{^SC~JWYFjdvU^iY9arUe* z?W2$Xg_|sWfDwd$E zB9MelkU-c~7U__LodDTDj6%;$Co`m{XVNnh0&a1|6;WIe6cJZk!Cerk>i)-m?>YCJ zo=Nb1KlQC2Rh;KJckA1CzvtebP^Yq}FW1ONYFz64Z4?!;{>f?nLnU-RVg9~t3pQEn zh!e@6YKc4QVV%fN3NBwOfyy8t~jk)N^3$nty+^(mHAeVQ=$(i&5%&bDb+|y zH2c(ruUFy!wcY=}wfd^@t=@z;?LKbN6+x#FPR&D;a88ts{+wJl*omNZDhN`Cj zqe855g;-J{=nr9wX@^8c?`H_mC zl`=C-Hh)l}akA;)6XO15@lT)eA3ZL2FCBoS4(ab@%ip**qmcQ7kJ2Xk_aOgr1zbO5R!O%vmt9u0hyPU=~j4@qr?*EEgS67Rc z==$At4{-;rFl3tRFg1e<;cY}$!qM<216K`vgXo3uGV$lbPmR;-23|Aps)5r6UNP{pftL)tXy63{&m;OQ zybz8e`kYqc#&Hx+EhwJMy9+ihXv-x_S=TQvcm_=ioMJJ^BuYiMuwdg;D3r2UCpd{> zB9}UeZYSZn+lcLTitflhr91y9d1~4 zc*Uxb<*P;-R*jhWow*Z8WrpE9!^paR3El2U5j}n`NV$QV+M6j9vA=>BicU~OS1IoX zg=CP)6Hf>$_UCd%By%Od2+Cn+?nEmqY1c``O2R3){W-q~eNkkx`CL$R{323rzf(!`igK;slY81kaCMo#w(ybn@>B1 zOaXq*#KGdi#>J_P4T}pX1{ije#aw_?CO|p><=hRBbbW%Zd@kd;0q5Hd(C_+5w>9kq z=<5rR%NGZNTq%!a&NHOBn9Vo4*%gJ8esX=Y>j#-++D)yBHncfxPZJIO(3z%4W< zbAj8O%;%d=IE8F;OILT78)O_WbIJ`?Ci8hTyV*i&kR%tV>o*rp7K(1R*~=v8e{y8R zNo1M}L9#g?WQLuhdz2bY#_!K@{9-1L;Y`ZSp_gUSDHSt0pR!EQpBYFxhPI@#IX}a+ z;3gTfPR57hWd?lsj*q@RAN{!?%dH|)bhDuP-$f+v1Wpzu52e7PQb4+x^-Ocx$tBk6 zdZIJ)++o*4%0s5m?Gy&#W&AI9_gm z{Br&PHNi~sXrUNn`~mp6l-qqW?{??9jKc{h@CoT%2s3^^`uh4&3`#B%l-r?FuIOT0 znffI99k1YW^QMw61umSpl<5KJ@l$T#Wqh~XVR!kgZ}S{~kX{)XZmTF}ik=H6C}xtL ziy{@JDNyXnIs+~j9GpTX<)WB^=MK1j3PqBQMlT4jT5*T@s<*?x;1|ti({vs2R1%{LXBaau{fXQwprG&vAK_l}l zGdTt$eU@34o=L1UXo3mu7ThIhq<`E*F)(Ogz(C4?ktZ`IHS?-zc?W|6gRy3azyQmB z6WwJnGVKH@^B|T9^Bjl4$hIR4Mn1-}*YF-wEG)bBZ|`OzvdhFZU}PuD1Ev7>GZ@*y zav#gREcY1q-Nwnl9s@fJv>7n+v0WxnlhK`$1A_v4RBJUvUiAf?i zl30EB`j)&jz;4u!x6FC}@#<+Ek(Z)Wnb4&~Mzej{y;7^>Z52GOh{8}QGccwc#<Sp+TP3tK9Xc~5>!PRgo@U)JwnaS|H0(m`Wax{cLLh_NnZ&V|+Ox|Mma zP#~&~uibExr*+9%P zN?aw1Uhag$BxfL-Ng0yN1WC^o#mKIqfMD412LgGbac~)W4fuJ7F>oDEXeR3n2o<2k zHCHHuk*87&rJ_Mka6m96m=x4tZlPe9>nRy1#D0>75=C_{29hXm59L9*qB|tPXyj-A zm^ea4at1TLkVIxcn1G)vW_$@$P*%ufCHp}}GMN>!SBam@`2+H}m<_}^awU|jE(u`* z*-T0z#{mpEVqlkn9R}JBw8rmFdCTP!=ADe}U@)>RS8OvexX27wY|A*wAXCgF9Zx*^ z4R!~aJPm6ckz1BTkl~KQ8pyV(szLZ&PGo#;bAtWUkPOY|GQQBEk|RtV4CD+XPb71` zrW4cFn3bJkmrT$vG|1<3o}qrs3dxveGMShd^rh5VX}wf(HRYHmbJ@J-W?c=}Ua54t z!){P;%Wii#lv&b1-VKr_f1W#3@EqUtftdOOWnMvdnK#LDkYP_+S+*oBA&fdRlbmOs zQRHQ8Hp3+Am_Y34Izh2e%5eO=lX8WpGEO$0Gv$<^iBTQ(zJ(@sy-u zmt4-Q&Uit^9W)qr$GUJc8{<^Ur=1|5%lYa+i??x3!%k2PG7haQ)yW_4kno)3;CRP7 zVhsfMn z<5Zr|3$8RvV;_vQp^_806>fJrlxbn8P|6$X$1EmYvCB}Ql!${RG+3e{3yC{2kQn=T zRh1;2fH6_>JSO{x-C!FTrdVV1O<6TdQYwP78?O?_I&m;FfQ=0|-mT~a1Fq@(`5>1n zC5a!18JX#LzD&xXkaf5>r-k%;3`Ta9lIiX=)155+z5LjsS!2<-&QEeqdhW@B?l{WZ zufiRB#5hpAJ<>2^97=iF85N|d#T%c3S+?*J$4ntg3t7kW3T|01)0~oGkWs35z$+E@ z2{)64YKhzkt)FQ6EeT0v29zqMaz$ZZ* z!hOMxTygIhR@OS)LeWiCx{Y@j8-7RNIz`%uvBSS=?L#HU6DOA@OE)N(>Cqi9v@nz` z<@pU24HSlwj<^dN$QFwET*26A7zO&hqR;V)fj_39%dj}6saLqsvcV0g#tOPek?D$` zmP@&w$-F7`lH-|&7fXSmfkUQX;jTd%Vh%Wg>lf2*Ayd#{W~|eQ&tT*>-cxuUEABu+ z%tihDDoV&D5jz=X77`<_>2pQb_!>;)Mv9p%(;y}}WnRpv7buTOD#M2kejGebfl9HM z4qP|(a{I?R>{p_g4}_Th&@I|7e>hXfB+3p0ZozZ4xtdixjkdXxpW2npdl?feW}aIZ zFu?~jx@npR0ypWVSgW9BL83EBGU>Xhf*Dtp^1>u81&8Q~KsL03r9kVy+zkhcfow<0 z%pDr4R1EhGkh#3Tq?B@kATS%MQw}pW3#w7j%;W^6lEIXqz(`;)SrS5)Pm_*dAea;M z)jyLJ<_V@wWd?+nnX3=bXr+WEERd5_1k-{ep5{!5R}@kZ3{)@Wh2;c&jiM+?rsdrQ zeZiEV0Nd5nsz$+65=>DZpOC}_dkl0M*ehua?=+-MB5jjMf}Mgvi@3LFEw)H48XPuI zYLQwK-(e+!0wbRKD-jeJNsF_fK*1Gf!IY?ZQx7g9i=Z%6%5j29f|R<%gm=tL$)FUQ z3VZpGwbFPPyHL2XE_eDWR6??z@6+CX=?bQ){iazW12Ufxtwzn3$$ql8o6E()cp+ypBo zGiF#YNb42Dl9@mlbsNKqxx69N7jlLwc!K=~T?5%ns+_Q6sFQc%N6=W(Px2(o5tb)d z4znz=EV3;0n^z<`#4_J+p2^LaWwzhEJ;_0q$601rrdbZK>}Tn+OtDO|Ot5rV9%1jif%AwtyNyOl^w=v<*;Mi%u?=7pMQ70!-1Z`Yq_#hDM;o5-!=0`OiNzbwM^;K zgexQPz<^;&+LZ9+6f?)B%#g>BHE^ns0s}(^@&l*qzw!h=r`aRNEt{PNEmPo95L{ifx`w48R#|8W1!nWmw`?L2MruBu-`z3 zfqe${8rWlCw}D*-b{g1WV7q~K18oLc4Qw;eA_bXsOfd;&1YJQ#ut#ve;4Z;-!4^S* zf=f#qo*R8b5}5(Idc@0ihAsnsA#Yp_1OhpOo}hp)uA-$4x(19)9CG1Mys zw2Yv1OP;WlpqC0tg|r4sDGemNXRwrtLkkO1o-p5~MF`LTzAL#tkuWbE3>%UY0DsQuq&ijNg?M+w6uiPkgg#o+>}Hy;1y}Z!9%}iNNK0Zr2)@C%0T%nZkrQS9*r4Q zPPmK`A4?f^xa?Xn+i!EmP5%;?h|2W4xT@tyGUcnyj{QM5$(iW60XztKZY(z6$ zY-Z|F<{ll>_=XQu@L?w~@%_rgDm@dGo)wCxsR{CJ3JsT3O2+6RV~8FSBlM6lKx>?2 zDez9Z8m+9E`xH$1xQZE{&fH;?Wv4q`#+W90|UO~G?O(Ca*~6} z6{%V(%0p^MD#(l^h8Q{Qy5?D#AZdb8&AD2IS~AIGT#qJ|ycV&%4wGTupg>Z+6LGlM z*3GoihQkgO_8Zm{nE`zf)<=>iVJDvm3>{$`lT0^46_cfW9NrK=4jYFsCTf~3S*D## zP{^ChK|T}LfM3cQ)j+=FCyjfekdHUQd7imkMu8J<#t@ol@@5%MMU@X21xi8Ekd%^= zr!Gpkf$E~s0@8xCd&1Bg1ybQm;l0w!gq&bF{ zGxFk%wrk8CF{IdGF-*lAjda9GmT8%e7J>p@$um^V|SqM$i>>1bYN`3APKi2nwX#AZgy84vc&`IP#^TGU2-wY@jYM z3i!hrzu!2-Bu3ub6fy(8jCK7)PP)D^oCZwNC-Z403AcE{Wi~hv7~;`2bbcMr?Ju0n z>a`(53#F{-ecZb9?x_q@IkoS}w-1#vUM3M3=kdB8?vHUCt97yD6OuwUHuh$DPeL-E zH5WFDxh(HbI6K3IOjgRxFfv3NHc$)yBpD?d(ILJ~93F3v1->8vq1WaYGnx36O9 z_r%ig=@l?f?|^wyW<^hmj7g^wcW9VO&68azlS0;28WTl2?%)yEVKk=!o*1}2F>LEI z^ZLxZS04O5wq`ICO8K;5DFX>{XL+)e<%A973}g(r1{?#A8R#*v-@q;d?FL#TF_u&_ zo+((5yAhqV%Yi$eoO$LxpTlH(E@)xGBJT#-48LH~W%LA#NjJr$pd?V@EAf;JDoHBo zR??-UQ%Q%Cy-M~d*`cI0PEa2nADPocE5(r9x z%UUMO=ojebDA|8Kj~&MAeg&_f11#HIQ|4kv<4Sf%lI&=JPMpb-XRcQ%6{}(woo1=q z9S#)-Yh&F1)v@A?ZH)WBI+m@LW1RoZt>Pj|rPG+pC-JlX-SuCh^Oovg(o6hHYGd5S zM~p3{W6NuNQTH05D9l2t6#!I=CZg)70 zH+`u4zdDXHf0T3B|8GJ0Sz{ioilQ9B^Wv#Q>y=jea_dB<;I`)cVy+a>B4$8B{C6*7 z;Q5y*ceqs0@`{R8I`%iW8j?!fz)-U02=;KU_wq|~hiw;+HqUJN=*}}=V=gAs!UYnE zV6d2ADiGuhdV)bhbU}e6eKZxR>lXT4ka>+rt1)hxG$K1DelIDGdbmaI` zLfR0VIL^{P&SNaek&LXZd39${pvQob2Uw1jiUCJ3FdT>~=nHy+0>hpJ6Z8c=uN+LB z42+}<3eawkvyw53T%VD%TyV1)E+~dfrec4PPitHzMkZMvVA;y@Fgs-ATDq)r(tHl% zxy7_u^%59)JnJxK1W(Wik>;&znp+U_lu-=i3ZBDc8?D`hr5nD%e^e=!hAk$*7J;}g{7sLNRVtHCdMz=(kp28Iok3=|C%3u z4EP4J20R0U296uZ7)To!Fwk$nHIOopG>|ah7&v0!F$0GU95T>rpvOSBfi44`1`ZlH zU|_$24g>oP>@~2*z-|M(4D2+p!@za}?FQNmv>MoEphb#@4uNz0ranU^n=|g20VZk3 z>zA>)Uq;n_8B+UYEahnZl3Krh&(mLSM@;+8=fv)?OQoyCQPQJihmsa0iex|CCS0*J z5I9V7N-|1ZC61CFCHs}^Qqr!ZMTug?cNROu$IlyoZDucSlCUM0Jfv@2;<(h@&Zu%dKY z?sPJXJ@we1cl}m6aXLt!`-Ew&bo{#FTrOVu5kv>%ZJuVn*Li zxCN<1Q-!WEE(LCXj(K+lPi7eCK#4aaYIKdYn6%T?{VuwM-8IIk*A2!wZ_jw1oBD6= zW8GqsA(N_UYIMTm>QRp?M?0>Z?YQ#Y5_iUemt*GmDW!Z+;p%}Ho7!Ez(NW6#5|`1O zbE&123o31}kjXN7Ea{6JS3WxvN>hSRTBsY=;hxxQ*v?##IhFH^jwcR!yesN}FBwWm zh71~cAZH4KmJj?oF3%8jqHiqS!uU8&W?)xrCa##K|LkTS|Vy;B-fS^C@ zx#n1pr>|_r5W&(3-ds_$iCLh;Q!>VOUty*Hmu=qo9p0UryK(zEYUi#~CU70APtduEH z6iAuy{IR8zOuO-ym!kN?195?Qxl^vsYMD{l$}76&Ox0Lyy_0;dN)1Fwibs!x6R1Na z%?v12JS0esn_E$w^03S48c3E5CY(S>X21|51HP-xFD|6lb;o|L-R-&+HzLP;J8kqb zaw|V- zl6jrSxr~=^gJM_Ss2%QrQ_Kw0)s~ap>5Q-L<8=*J>Gp5_``lEflvUTUT16Vk!HPu6 z$`Lon9m=GN={QQx=ly)fA5bTrX%afqBxI&Z$V`)v!PzY@^SBAS@fX;!hxzCtr8loq zW}&DTyi#KHX9rJ-V8$=fXIy5@ZAeB?!3{Eo&_@g9FCR@y5SDcEj&CxQiV3xGmgZyf zRQxeHXOL|ADRW$&;RptdwK&VXg8Bt2j*26O3liGN1ArlF8;>c`Ggg=E;^QcO=t{@I}n&>a$z6Fe@M5ljoxl>x&PT|u!= zs3zzLJ|=ibut%^kc7DbqS;8u9nJD9C-^rW$}j1}FX^xqFIQwVu**Qo^%&a(Pq_^AHE-Hb#csib zfg=XC88EWlM938!IVv(K@$X#d?_JOaUNFnwpXzt0m7iy|ibE>HomM-q_FcK6M!Rg? zZBr2ow$d4z$B|h2PJ+?#@@c{r!CclIaQJG6!D7yJxWu!Gl*9W$Aweq19tNba`APc^ zJSOHk8P9rTC?P!9v%i~?A+du*uB+U8yTl~gDM!D8sm^i`aq1Q95o{xD*>`}dWas|Q z4oPUQBqW#;>=o=0Y};$@O%G&zCpfuFvMXr__7b*tv+USG!*Kf!?$7NebM3O{YB#;0 zU3OFLX0~YO$)cTaf%@%y0hA#hFz`-GVlsLxxy822?Fx=%0wpz4LLwRTy>>YP=CCZ= z%ZqnTm%|N6I7W}9aY}MNlkzSJNt~d&v!#vj0R8HNM^O%^bTYA9`5GdL?U>td6}lsEd+y>ou^FHA+^m*X{c{-XsjJU8iB! z$<@Hs;) z8Hl!~x#ZGi4gF5Wb5kop=7X^=_QsW1*|>1g;w60#Jh;4h%ho549((HPXP#YwqboPA zz{;armM+`a`0V1QP4@B?Sh?cpa;!M|AeQKZUEaq|z^tnU9ZQvh< zY*<=w-3F?L!p7$2flM)7N~}!gvd!5{@nmy0wJzD5DHKX>p?U4P^~=nYq^iwtRyHhI z(y*Z9ryW1#xv7Q@`9aKvjNdT+$1xY6uWv#5w`%eD6O9--+yMIfBAaW0@Rf-`^llCC z5Rs220=*M~@Ou&$D8Si?z_Lj|aT4H90-`@D;DGzoa7 z1_=MI0VYiZW={mxlFw-h|9&kH{ZRu{*8<5}VDEp@YbEdBCjj9G6F`5t^be~pyihf@ z2B-qCm4XAay_i=Wp=5J9MzaY8u z<#pCb;A`w1y(U?W-l`FDc>-rPJRAOF)%69@Yf>KJ=jJWK>*O(gqGnyo znE+T6;^zrmtI;*`m=Rvm5`SK*EmuQG54>&FwI`&^PShBDPO7Yr3XvSb7qw!}OVDn? z@OLSY?Gw!tFH?%O(Vr8z0;6lJhG!>8D~m?0y70qk4HWeF_3u%i!1kIoalL=+b6l@`L$H5Tj*L>{qV?;x_-I4@i7S;yj6uNqj=$Qxcag z*x?uSNc#1EgkO`mO5%GGKa%)~#B~xsllXGr+bap-Lc|?}h!)_+>a6Rm;M0VE0-bduIdf@ST z;E8(RXg!dwhn*vj@XvZ6{ENg55;sZwQ%`NE9(MFbJ@+QkKO%8~#6=R{khn_XTN2-q z_?`qM7*T=|B^XhHOB#U(8-eAGz?w$jSR?FQBR&1aMj9X%!H(WuL~q*!ySa&~r3pwh z0m&vH)dUPQ!5$=!Y!l!&0l6k1-vk6rK&c6Mwh4Hyi8_1}?C1&wjlOH5>50V8O@JMK z1=|b1;>sZ&USMTG_%-a6;ny@o5cQd!48I1RBJm7~XUQjgg}uTz$R&J>Jn+ z*{5o)aP;X~%MM>B7QRXJU8e8VS_t1KF?yF}hdq@zzQ+mAlA!qI@}vrG|Pwd}^|DpC38060a{ z!{5}!X`+aJC-EnVe*jn(&};!~E#M&w*k}PeEntrYoS?DpHl<(z&ssnMKvxy@QyNlf zAnhiN#?js?;1DTqQY0F_AFBc$Czp3E;8+!qtO7DsK$;vsvVdF_5L5vra`=pr{F1~d zsoxNLk=PH!UL|&oXBA>^kf1?1q(M1+m(;(A-J++z5{uVj@n$S&exWi%MAJs}ODuTC zc%Q^=QYpQ9O8AlmEUW_7Rsn7ku$de$SU~@OdeSyhMtRQTx32S2Bz_?A6S>hiAH79_2YVi)pC|Dmi8o^QA^HAH;!jd(x`;+ed_;nh3U6p! z4ifSp&w(jgbh8?Gsv3Bv8aPk`9IXLX)d2fz0EhN8&y#qA#BCbb-zM<_i8CbLsR5d6 z0f%>1v}9QUEM7qykrlv-6|`KQMx{6nSW^S6s{tOZ0b2f(;5PZcy9P+s0DHo(s3zyq zyhRhj4HCCV+@1w%$qsiB}ADA5>vmc%>tz;Hcqf|Sc7KC1^# z)dNqF@?||RQV*Q02cE76o*~EAs)0f3P+!uzxe>@W0?*Ny{Zb>PyNKq1MZl^i;Aj)z zGy#KEz%%oJXQ)Fo0bUbuunHKe0uEFGomD`g2^ekywpIZ)HK^xll>VH=_auHK@k##gp)S&x zQw2Ot9>0^*9!hU7CwiG0*H6;``t!CpLSku+h5a=aqVptf)>sHXq@ngR5}%W}PU065 zf04LJ;_q4u(db0Yo-m>B@mNpq$1h4QPis;jaE5}%X!ngoTbre;&aZHID9Rd4Alk5RayE0r-m+s2gr*piJ4b&@18=1H-#t@5$> z*E~$BEa7eAOF2_f+EmI7$7qg80V^$IZU`@DsKXxz*27o>R(U|)1E!iMqG8-Ww1h83 z7p=PR`)QU0p=gbO-AqYs1Z zDzV?mk(L`rYGEJc&Espev>Rsn7SXqv{!=R!ujoY*v=oVcsf8W=O5PJDz@9Pz;pqJn zfO!*O*OPL50_-f2=)DO*bZLSZccWVqXro9zmhhDLXP3fQ)oDxLe(>c_uoX{WO|0^1){sB!ro8Y^YGGCnnif0esd~t zY#Qt|Z_&?AgB^ZEl&rzonXvttywRQsJN$SiZy{&Gj(#AzeirNvv$&vVk(r6AI zVm2A5W+NQ6?*rQIgWY}~8(r?BVkSC&4($3lJeSR(%_!4vi2gvd<9^ut??*U#iNXBeJ^@ z_C6x}X`%UgBkb@EHWr+1guRT+1ok4>yNQG!lj-0pn+_JkF7-V?j_>t70K2dp;pp&k zD!Ap`amg<5E!zeDBKkMee~8{DnqL86CG3?e>GfB_euBucm9Ud5*<`Si8Vl2lE2%>e zMKkQ^{bsg95xq^+S_Qji6&1xQ*bPKhtpYZzg8dLFTUNo|x{A|TMeU5~uL?`@Y))V zxrXw!mgzpC`?x5>FJMQngkNwWuyUJ~zJN?4Q`j<6ptbh1B%+_mHTr{{K_-WpY;kBH z+Gq?Oud(&xbyk*!-@slTeuHpy1JOsA7Kxr<8l52?y={~~S-D}9zr$~UmEl#`&EZvq zqep2ZkDe!o=q+}MF0t|{D}8<8x3G_f-_meH^d!^h67lF$qg-R~f{Mb?)oY<-zSw1Md+qBhgViMmXq%fzFvjPeaDKN{t4R&E(9j%C?Z zmKBaZWLfrBA}1}&4qvm_azpeC)3ZcBW_sDO5Ro4J&HAU+q*q(W)mk_-$-;?AmOV1b z3P4d=N&+C#j`@)|iuzq9)zb(X!gj*|PRj-Eu+=gr6&vJZuC z8w1e~cUy>FyW6s(*YCE-#!B=&(Vi)m{n!)=^U4%@0irvmTK2xFT1>09?$h%S=&gd9I5$A|B=>@D|FDp&8d5WP3e zvZME>QRokeo+r9zx@GU5ZiS;qrd#&oM4p&#A$ouI%tKXZG)EGP9&SP>|B=e@*x@OF8G|^oQ3dX zI%NnyHD?WPT6XkP^d@=UVC8RC5WQvD;V;n{O5jFx#q#?C7`XEc16Pdr9<;6^q+b>M^1KhG5W*eA&!*qjB<^Xy68`S?4OpsgXsaHk1;() zG(62bJj==tM!CkyO;(~&QljUL!oi~RtdI@VJ`~;Hq;6PtmT8{o(@d#tTXyscE77ab z4GYnm?DUCo`jnOLjPesJH&{V*lWgSCO*WE~68*$VbR)WHp?1OqOq@7r@?`qU%PrB1 z(T`T0MSr>ZEV1x|=(N?_Im*6deHF1dZ0$!kGIo32}vt@cOBp~ z7@yv4v`>_Dqo0=2X=n7F1bkyX(7izN_QpQi-$=+=kC25%lyxn@ObM2}hjz-6g_Q?^ z2@56udv(A)@@|KA0_!D4WBpiK4?dy`ZuPL;4KBsB_xf4*-qwrgaObZ)tMxQxp9{vb1&` zaJP2GGj+gpP44^%^5jdblcV$bt!ut9u zBW3A0dip!!w}+JXMX{QI#S-kfsZ>^UEO)5V6j?(^3eCBNj?veVKv=BI;p>8b% zo)qQ4LfTbJjLzjiuZH??A#hZbRSRismQYR0fkWc4d>>uI(R%rVGWN9ud+_eclDt5z z`crMybz6a{+M>?(0=rdty_ZT{$BZ-7I$jg)!F9l#I2_FhuZz!fb-)U3@Rz0oGbPy3 zCBP(Y94Bc&d{vV^KNFZF8Q-uBxK~rYv6FVIi?s#pq=RnJj;se}OSq19U~}BUZ?2

cD5*`QQS=RMo^yd}Np15X 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

(@jD_osd8~Y9ih**!Js7G{rkz8ws4} ziHO`r+vY;qVGrvlI9lvcGlYJCgpZ(&AgqS1$fKw!RSi~}6v6d-QN2f%5u$4&JWcQz zf}@h)5QQ$gD_xo%2!-vS7a`#(!gp3&A{4g$2FK_w_8g)bDdj4{QG~)?uxt|%FlxJX zCTeb2^Bi$7Jhd1iTC)8{D8I-a4xzJ*{EkgHbZk#Zw{16s6okw*eNaLSAF31Tbs2kt z8-nYCYl2lYCyJPIJVi93G)(ePgu=?d8%n0MJ(M2`y3V3R!-rKYQdH!&rTC#Mg=`CPL=k>1@Eh`TDb+|z`Ba4x)OPEVIE}!>1B_-F z9b`1aXkS`)EL+g2a-A3+BgAlj(B01|sL7aCc)x4cLbvPIY)=B_8J`Z_4o+*7kb0IR zkm-)%GHUNvP8Egfvh4cQ=LFAVM`E%QxW15!JzFT{!6;xM>_ zA;V55@R;;dDypTV>$)ky*q2t@hx}5{Q8}k{EogTNsJI%jY?Zk!Sln22#>*^yvX|mTS_cC`+F7vUX3Xs!%wXi3mLYjV`gVZI_6)&5_8{ zvBPfEb18ktt~)~4UArClb#c|aUR6i}&7j?F(gZN?Mnr^)@Dx!`eS(0wGh(P{fQC!X zun%>!A+KJiX@{L4@RbKLZ)?1k?64cUHgcBA%U|nJ_3T<}t>?N_OAYQec1T3f;BUb5 z&R`voRUE2<^61wIULSYa{M~%81WEUBt&<;~uJs_^ol$f*v{2Em=O8x)ytO z=nVL+_vn++V$|y}>8DgmoJxHbqh2+QR#nle14XE=D?oMl=ao|tH9I6+?Rg#%$CsRN z8U<72BJoY%$t)>0LEn$K#9=Rr#uM0ZytRH^J8U>S_&Z@x@70h#ky0q8qxG^TlS133 z(cBbb-Xp~DRIk=N-Bf*bSX9sZ_Ss#!yF-?45KuaoM!E!~l}5T_C8WEhOS%z65EcXh zK|)$;38lN!cR%0XU+?*2&b8N^bDgs@&)oMj&zX5{mQy0Re^?LBS^hkEb30l4X9b?p zx)O|N$w`u65L=`}R9PyR)Wyw!@XUeqq@yC~w;pWdsyen(Uc?J6n^hmyPAaY5R7^(l=6 zO7euys?Zq==(d#ME3uD*$;Ob;W#8iGP-TO3>8MD7j zqtJtb5|dv3E-VRsnOQ-9)q6DNi)Qe|+qyxw`|x5LUw39D2HG!gC<5Eq%?bE2HK|Tc zw}rFgDV)9%%xGIFOs#UBtei=5Vm=U~I;QmZmeYDE> zKEah^F-7_h4!XF4nt`tow-!^9T>@q1zDbrJDSQcT*X z!#7w2=$K)_%;d6whCUU=Lb% zq88`>+x`6%K|p06!EK%Q2w{D~)BQAxAeYupAskA*_~)FMS~d&(Sdhm6`bUj3bA*L5 zarzy|-LgLRul@3ektwjvrcrivN3pi3bM`I9Q2Y+=_EnX!F_H7Yl%3w+q(f|{|+=WMN(xoR{@jek;}hkllwV4Y`~e=thszSV~;G0D97GaKc+|8)!!8t&K8ZNy)TUVLX8sO13DmcrvhR{D1OHu|q^g#zG{5AlaK=dYCPsPnD7K1^~d zu~P>}O=2qzQq$XbrB4zoMNu!0*k?{Mp`0XoOBAEXlm^Ftq<;A;*(EnuwUK+C*cn%v z`T8^RWv@^eZ*LeB^ChhbZ7^H4E5slv+J)UKHigl9K1+v#!*U;+Vl%Gc^M`nPCA>Y* zQ}c5EFt)SMcM7fP-G8pNL|KKtKxm zWE?cY+!oZTrneWl;;+oQ*J)fBrXpSsjn%Z9#eO~P^mRP>vnPkY5T7F-R)nVkA*R)*qUZXxaUNw`JiM;+o+#!hV zUf7i;Tygrd35oM>S1NB~u_5+8t4)-Yg6;IqjmTw#Qoa}SQgOxz3c45Ea}bdqzd4IO zGhk=osid6EuH-J+;$&3R#w@kiC#LY?*=E@N&v`afvE8`msJyMgLOr59awzQlTlo(6@=%Bw{dGXSnbzv$$ z;h%T}vXQD`WobmmE8NDH?zbeP1C=c{Zd9>z2wAeiVp7&WbBqP+Ewc-F@-oX>ZdVkH zS~ncfqS%{$53b$f4?kf>#3@jD#cPx=v&KK!pxy7Fn5WyXsz|5TPpmk~Vci40 zEElU;H7i^A5b_Eu@(TOV8=6&BN&CAsvs_x;XWkdty5f6LCB!L`rpw+37@WNFFwRf( zeUu$6uIUvwquYr?c(Sm1TDZkC=45JE8oXfr7n`ndGl?UuM=G zleZf8$mGPCVt!XOw!a7@iO7G(?d%o)>_DqhR6S)e)5it}eNsc@3lnK}0@_D?Wh+xG zyA;9tHIi>xFqB7K`k}#EG?v9DSv68p^=IXxGiP5NHm4bG6U!;-x>uRTF6Ld&+&?iz z16Cm=q4gI6_H8dWCo-oPes{-~t&*ztROlll%OQVNbG@Y;opjeiV79K=|fKD<$Wcr&=C^~j(qgr)dZGp$OzwECJA&W5?#tinYrdRG8X^k_z^0VBsu%#0TcjtCR#dj%Z;N;kZx|#W!6&i zTaQnbG;GiTE6+_8WNPVfMu;T^wWKzUF4un6y?*X- zi5~KNJ94OBnC1ISxG|zdF4bEaVp~`WWoNi+F;sX#tU1J@=80BVtjk!eHU-a5fj=<3 zz0uyvna=L~^l>7rdZuxvj)ao~k18zlLO&j(HJ?s(uvkA+{Y^^S)(}rgokNG`2R{i-GCRWQTb{Z#2E6 zXjjBtNs?wd>XgzIs#^jDQ!Y>E;!xp|MYeq$^Y7Fps-_EU7f(v|_ASX^1uy!APhI7o zle?P{KkDYkw8UzQqJmnkxD+m45d|wto8?{PJqvu4*Vc?(W)8y-~Ge>fTICIpJ4_o@Pn;qRf}C)P1%w zIqV&i^I}pL;=$hwEG_clHJ^(2sf0n>mn}6DNW8vc6#gY*Ba+(ez!#Ueh#=bMi#A>J zH^O@ULQd3;YB9|2=yg!g`zBVD6Qgp*{vh2eE(ca8>_~{(SNdnFT}%jNLH=~RVEnLE zLw)9fAie1GUl$H6-ivtUL8q9LF@CO)_^qF~b7Mio9rpPPDg~X+nFpKVNjO2tS-c?? zuaJrLw9WKuGC>?_-lw|)I8-qUMy`Hi!l zl~+QSr8J~CGPZL8uc8`Ag(mg>2NCa}L5hB{Zse2N5v3@Wa8{HoioPRvS0b(;bJryv zBzM<9S-4D(`=w%O9eR5moAjCKr|S$;Z7)*N=!l8flRYQdc9G` zb(mhKpG-<41tD5>%YTuX-q%U0$-how6UV@U>7v8Pgj>lZniB5{XNuCB0PsAe}Y~ zBNlpn(Oubi*a3lq*SUCi8SChlnVPN|{){bMhf5!WTvy7*&?g}#cU2-1YVVJUVk64g z;$#tr3h!1wNu6j9cCI^L>lRg$MGJl-1wBV=Ce){oGQ^Ucv{P-@_M&6wZe)H+stnW9 z#a5FIX#V_$1Dq3=ZWz(Wj&`SB@NF=lHR#hTHngiu2hYf5wsLt?D^jH{6RPYypZ{C8 zyjHimRJSl^CF8qaNh$9A$1wW~B{%v;-chTI*89kBVOt2_`}z@0z5o$tF^|bq90nfW zSIVk^Ip;BUzGN+jL-I^6vvJ(A3?vBuPa<-bX)rsqnM`{lx+yLN>0eeA_oj-UR+#X;0F0r53H91)9_VOA<% ze(Sq4jfsyPdml_C3KbEHdHH@=4vy8Qzw<@uCFwNmt$)lnsLDAeU*qaC?59?wGwK&q z9OdfMh0!RMp#^uuc@X?kLp~)kz&1{wGx4=hDG8bt&A@um5k=>Ct9|(H&(`^eRPL() zMxq>rzE!m4A}Pzb{o&Kry4sCNvhlOWR|^x z|Mbk(t>fRikcCWFb$)F-rT4+#)N#VM{pBl(jOg`U4rtF|!w&jA-Wj6cKdGi?!2QC& z@I!U2ut82kSP#SB^dc`)i1#KY@KDkXcH;wM<$ z!9)rwoyf9}rz)|8$9BkUzkik@nlbY_LpG>+OYDw*T>416{_E>LNrw}I5Vj?s!4wl6 zQleKiHGv!IGvZCj2W<%`(jD?m>!Yi#`PNu`2h!UT^HQt|eI?mgC>XLi(HX>KY(AaPI3>&(ANOkZeig3| zndXiBA5>@?OLMhj8+5JW{~|PdA>(F{@U~o7pS--dI^Ng&mm(R1yNKSnxSq%#ofp{R zGSE#y@d2ibB2xoWn1S&HR|_~^RYdRAS6#{mWAw5gG*7Cj3??V{jXKnxG2CXfPO1H7 z8NmG#LH+Y-wFJZ3Ll~n6)|$%-D&tuph1u(KpwvML&rVd1Xu(6jUo0gb_w^C@`El5y z*FXJb1^TXnPg;_@eE23JelzprKvHQX07fv;Y0JR z%17W3Bk=|AO8u| z8mxr<&$f}?G;6DgnKWzs6H>C^dFHt~B>`Jn})=`0baqTOYp= z!&q*AEa^DEzrwvXnC>(MVk#T{?{S|q2i8+FpbItUeps8aeoqlc{R@0yrvggXW@mv( z@T#iLGpk7XD7A8PkSkYL!3ato#%t<$^+BR|f zT-8Ztoz(uK_wusEFmv(K*N4OVF49x2{R(uS`2;E1bs_!v&)-*D40k_P@}C>H^1N71 zpkVsy+DLf-#t5N&k$M>UH-DlF@}XVf?3w)v&d&ygmc@hp<*&4wnC}+a9?sZ4_zEjT z{ciu8?QOU6nmPL8p0fSlDb|OgZ3@xwVB(~~ye|$$%bu0X>llx`mIe!+(s;k$%)Q(> z>>93JD2NJN5-GN|*fg7NdZ-yZp$iD99zcg91F(xxs@94#Ky1pnfSu_+iD-s=}24CD-|J zFV`u-CezBbeyQC6cl9m=+wf2bv`TsNhT=&`0NN9OPKX;NNe>-JR02%Y6OI&#KVHW| zyzqy+G9bnwER5FuMo)oZMxuK$%;TTLa7<<3gFpQGxj$T42smM3lqCz$GfoKE&Wjt)6e&S)QbE%G%RGyy^~#1jCR=&QWfe7)`1 zE4iMkL7c-x3|d5SYgR3L)@=Y$hOxxdY7& ztk6097D&wBUGX_ws%t+K^CifD=ihc{K9}5T-GN(Q&Oc9#U07&XE#}ypcDVm2G^m+> z$G@BDXW@1^UAOfHbrdDwU&~V<@9djy2CkXw-0I#PTm=zWVn9M;8IO#_8dFE8#Q!0$ zKc?m{o&l6gAUl zNg|d|L)4nDEW>NF`)@o5EI=~ZE=Za%Sy5>0WYAHdyen;C7ffM!9krPHGmSIQ3R7uuVx2@>@ zui1)yvHSyt_K^|{nZNqqZj}j}o}~^5?QU6&yALPn1Ot7oWT@KGVazM{vEjSe>rUun zb#y!V2|Lreg_&~M;F-;* z7(slG363X&e_GI~`>(@|TKhB%emjeOyABI#7ITK3M;Gcd{xygRFhM0Cbx4LV-^XPM z3_71$B}!X*iiS4`|t~QLeSa7udrH*Cj9{oYPH)?WyW|<8khPMQ<1nDy%s7^xl z>_C+)J+i*1T&X>BB*K+TC30N>H5eHZDcAh?T$m}JjlzGBkZ{u={PDSxN;bkUh-4Cx z*l3i*k_kv^v~i|urZ7e(KTxk0QCBpw0?So}0F&6n2>oF0@h_#|{yox0)d(0H3CA{y2RUi*9*Ceyti$Rbz0e=u0#UyMro8n+8wO8C%bbk+G26Apen44%_=BLoV-6J z7Wu7CTUB~FcCBX4=DGYaS{OUA8SI!Wtb$lF9QhK}tbQi}mHq#|Fp!4EZj!UCscXlC zUb3DCJ*dw+bfaZ#3VCg@7eAH8KG{uFtqdZL$xqW>Na%mgR_sAY5``+sV(!>M-OsU) zA5`IP*H56&>oE-J zf_C%-fk!$j(2FXLzmp*5)PUz%fGaOZ(l|^_yU!xDIfAqwUt2ZA12XG_!_`@F+@b-} zuK*nNfD2CecQSnws)+*daRm^@2_GYq6-A%O1^YSUAp6J&t~pWGHc&adsP|ct>3Wb% zmi3WYzw0{b+&wwbf>~KC1edG5|Lq#tyE3iKn`>Tp6tQG1QV=hu@MF=n@;2$eY-Ajo z1@sy>_MAQOobogv7b$_Z%6e@SmWBP8kCegcRz40Mh5CmztMHW=os#udU`s0;i-qaO zZu+Yo)39HY`#*d@zQulgF3%rATa-{l+LJ)f9YVW4qw9gr6_~~?%+vZ~$w1uBY=gnr&E}R<#IFt%44m8 z+Hhe?dgwDiGGgQ#yJ)|AvC3l%QUR?H1pf%yp9Nf}fWu$Fr6Uj}4F5)hcsk~7B!G#J z6vTf5hUgDOWL!}b<@|4GSfmOx9vuv!2qdRZ-QSrDs4I*4z_64S!H=HftQ5S;c z1=q&hE*{Ly{=-OATXLqQA{8^;sUj6O{o2GJ`IZ=*mu{1nzL7O?L#$i4-XN17wxxR< zgyR<6`z!)2D`E31*+lG#Cz{bj%*_ky?>&=1cP(V;BScgWScQ$x3BzyxQL9dE8<&eD zIW|D(ra_5%F?euA$dji)X4Av!x14)=v?J&>?d_Um;XM`T#ig(^3QJVcWYnsR1kM?; zq+#rQl*3$M7Ena(dT3QE8S6*Y0;o;%rVRvX1wraSkT49S8HS}62GS1$@m=cY23AM} z5=V1iMh-QCD2eWcA&nBamQ!OmFEd{O77LNIDX)M|AEwSOa#MG1L>)DJQ3zNa1C0Nr zt+n1S=YlF<0|bMi{rvt?^`@Vn+~f9EVAYd>g!6hsA6Ws~nCCqaD;9nD1c)IPS$7g7 zY8?G#dAwvn6sW>G*+5)rfKVE+nu8`Pg6;N(1lgGe5Nd*j-TJ!Ykw zfw$8EK4e~SQ^d^*+zEjX1bzg@UV!HH0A70JBtKX(7GjNq$OT^~5;Rsq@+Lrq;p|sV0C%zFMZ&FU?;LRmwcV#>ELR1hCw^GH%vfWg#7OYZ zkHW9Miz z{f^lD8d{%4cBv5IO&=)TVNqe+u#r~^kqiUJ51!@ibNO6XV)H1Jn^@Q z!XUh*F*_D~*C2P=-0&_^=sQo?H>^Y^(HMjx(UWK*Gg)oT$J${7%EP zL-9^Pi)j0V#(UHHYs&dS3%TR}%nF5aZ@W?M&)xPei~hP@G_Kqm=11%le&`KON(1x; zBPA<2C~ioG>E=1~-@ApbDCB>PbByh?#7-m`gM|Kv&Phm0tdJyR5|%(Xnvlx>6%Z9^ z43v};Rx_3dRvUEwJ<=1ajrlWy+`Xsslck<}Gw%LS0XM~78A?FO?bj^~6Oph3R^!71 zFll#Ucw|X|ZdbrdC;c5M*I`W%1la|3tBaGF68je2_6-AJ7+yg@v&S53d}PBF_BXx8 zU#c?t`%JKSY|(IDm2bRU&rUJImF8c#@T^4w>c<))sXy*-KrN#ISulgn%gMa{Y25Ec ztLNHC$@70^y#=l2zJPBFp#JiEBGQlo*#rtrUv?WYJ^8a~P?uc0E9k0jy%dy}hbAh8 z?M9(~4e}|nBkGDkzD8?!a?KmI%H)R&`YzPCXj^$?8FMn_RQ*GN;C3QBu{e3BxQ)?u zp;ZUvK27kKC+_qXM&geoGdi#Be5%_gXnoe!eDkDU&>L#M57yrgp_T)bX>*_C@5c;Zlvp;C$i9C5<`ZR+uH1Sckb#-vM^$u6r3zVrx&9l6 zbth~}z#hqmdq{7jhgl~cm^x&Xo}Y#fbN}Z`L?qHmF3qstMpDRkXJ(v_uiF)Neg2dE?cJ_*HoZgS|SUQOiO;|?dq+=uNJfS4AY ze&roups#XZ`nM}QzhmBp12^Rp)%l6C_K94tQNJ&!M>8QgKBlNlF1=t&7G7@|xL z!XFNd(-uoyJiC6bXr^di@#s#B?5)#w_(kzBP>1p|Vp!C|7Z;1y-&Q1C`c(G!{MIxb zIzTmo;%VYuk;j(z^u%0ocFd4bN)Wy3{5xEVHS7+$`ty^(jETFl;;_N-Fv{LtlN-N+c)kt*85`5@KR>NYk>jXIQ`YU*rY; zYqF^Bta%$ga@IBCzq)!AtffidvwT>8SpUCc*TDoMyqg*GtsfEyuwev1>mKM?T=41H_U*URPD*68!nb&7A>z1`=xf7O-i!y_Uk?{t5DDTUq+5FcY$F5(-*5B~Tc3A50{(@pjMk^bY=f}? zf{?g}G3qEvg^>;8o+#!fXBd$*+Luas|M`gk_5hLl7`c!H85^V3FH-o>8Hhy@fYPvm zLGV)m#zlmM`9zn}(hodj$8%!<7$gETWMM>2G6d^`T7v#!Lu_JL#9I=X_q@@U*3q>D z?}F_Wu%Nkulf+;uEV<1CqTCuH*!~`qp-{vFm({SLM%z=}->dTd{^O6C#P2{!RE>kO zQ$uENs0DTA9x)%?UDu7a2=4IgJ%+3(F!9qmmXPjwFJ&|Z5KjMq6!0BpBVmS3b1W;b zMq*2uC(hKEGTn6=$XCp5^$~=4YZ0!}6pX*G@W3&g|LwZ>COO!hPZ0SOa=G6W8llqj zz#L1fq1jyKi9I#;n!wBsfse8OUCN4|M*dPzBKnLpi1(dXzUJ4l+hh24Pg+pEI1>Aj^ss&Ze;J<4!dd)G;LzBT{V?q*71AhT)Y-z z6UnUYwT)o)wb8Xx-Qw1eFcLe4Ktlc?f-xkKhIC2nr+I@mjMc|}Q19&Qb3f>%J7LR` zc}(Fg-o=mKeu-+~QefXE2M`z6EneA+3@ z=Rl5jY%%Z{??n18kX}Y2wDHJbp+M!;vywYWTGKw;Sb8PR;^3jjXxiwIoDI;{HJw(! znBZXeGeeDn!OgLbf*~i*rqMu8cOZL7a-7s5KWg>x=NWAOj_1a$fPJ0ryRB_E`!CT| z8^-3pflz7<(WA$QVU$_Pgi#jQkseKhO(Q{6N+nZ3xI1JFXP*){;EW12x;Y zjmIKXt1LKW5H;qYTDH&GZYlf`{)GSN%=cqN3wbZ+qjo(dQ@+zB1=~LvBvrNUd*mL3 z&}N|;MP2f;_(M5^y~*DgXOs8yD2*H0We+XeDG#3O0go~wb@RSWa*aM5EfyzqipPLR z%w3}Z=uhs+C+)vT{Ygp3@@ER7&$f1Z(h?d1pa%`>?VhOf7=C8Zc{S$u*#PLQNrWp| zAav}fbza2R0+j&%kj}3tL9jc?lrO;yciL0ZT4mIvrKPAEvb$4in%!=drpJ#`mZ352 zc$cq3=8oU7uiyU-g6H^ByA^_vLEAC&?Rk39$a>Eor0$wR2(fQ)Em5}=5FypXTF_>U zsB&JC@x@d@wCAGO&tHsz(3`PAhP!0KH22Jc*g00a~DYXkIzT?OqTl5VNk~5 z-iFaGv|-I+3+oYms|zy{vGw^nk6$vyaSOMMosBnhDM|GXOMUU^DUt<(=s?EQdhwwi zbTBr@;Km?kG{1Tzd5mEqb(b?U^|)}e0J-$O-}4RWCEvP_B|W_Vk!*Ga!^zuYAd{Sv zBEI8MU$hWJ8WAj6BA78mqln$4*AatwpMS!o-g}16bi5NYBK8~W*pXZFnIf&S8pdL4 zZ?wf^^KIM&*t|1gEjIl(OE(brpq=}*7*QEdq&VbI2x!QIj-hWQM#YGtg{&jI(VFvR zUbch=KyzOHY%TfAj2s-?GeK$6mePt!IDw zBh@Bbawv6Z5oH1lki4t>P6jt=%R;_Wtt{$eQp^w=#48NAC!x#cnA95ZfivNw$C-o1LZSGet`0Y>&WC=IMk2a(Ae>+m*jwmhk1T#9kMT+1cvyG?r$qObWMaWdIBPM7 zzu6r>8Ue+kH8zo1wpFe#$${yZo$bUy<{xVtC?IHP&$c=h?Quw6zL<}ciHV3iLGZ(a zZ(JqDh$R_9`J*S^4M5x#)&ws6>_ypuR)NJrotnWufCfvt-;f3o^=Vwi*di!@Blkm2HyU z4@$WAj=6T?+a0sRzABW18-mBU(~$QoAc57vcis!Ycnqhv=DOe|`UhkZ(Fg9L`GO0e z!@6w2|8pDGvY74UTg5CjHPGJ)Ysn1!#^{OVN(?{Mb32lSQ&K_Z0BMA}ht08(ORL%VVtoi|Isqkew-iPAD{dw1*&oW^m-#WsQwElg~F zB1^a?s~RL8?Pb(=7;&&rYDhD%7vBPVPq?+N2*|Pj1w;$6IBE=vlOLog?n!rsSt&BR z)GZ0#JSuAQ%G+UW@h>*H@5a8X3*|X&V{+33P=PM*lKI86WPK=e1z=g6?YG6=A8fi= z`x{NbVsvoC2@tQG4i^F5Vinoo7gQ@IjDg_{To(&8@DLE%Y>_iXISwumpr|Cr{bg;U zYpFLem_ODfyHxiScXM~7e`diOIEyaTyaJqAkuXBtJlpS_n~59X-`Y5hW|`ll)*^=d zC1{JHsUCkp;dDB+GK|RA)`_ZQ(MP1aXJP<N8Ktc4k)AYFYOQNVHuDKWP_Qg|p zd5M{+5JG8q?Mh8&Y!v#80Ah>gwAl_4o*>~=#!pl6n8hV}f(*w2(mwAn@s*FGwfS=> zYLNuiqh+%;y6mIR^X$?t08Z%W<|CLxsk95hbYsCZW9_1OjOeW$)K4_fC29aT+i3{1 zthUe3J#bA6=nZlC_z_wqIsJ%YQ*fr?KLRsR8; zk6BZ+qL}#lpd~t%;_=c)*%Ikrc-q`8(#u#yad})_tzTqE9(I-BR^Y=;$h;9+6|NyD zeyX_|bRBj5s7ni16n%jhoQU+6hW4!=5DD~)n77JlS zVCdLXVp`%l;BJ{446GW70g)vmElwbuO`eRBF=ZmY=aFYH-ewgId z6!>OtCRaEW(6xb{txWG%L5@(LzGlNkDhmGKF|%ik>D@m-;~+1`X#r)%$X^U4Vu!{<`8y3>L@c;W(&n&0!;x>K6By?za;CEa0NSenV=mY?6_e?zQ~uFdyFfScB` zgTpY5P#}ut)gs=+lR!88K(~wl0e;#iac+gn*o``PhsZZ@E|W+`!jma%T(@2z{SqeKMSsdjhp5s`63PUz6+ zI5mxtg1C(7O!D6rvnptvc=uIm~F>}uvGT=)JT8FJu7J&vH=s+v_k z%z5ti@Fxgd*dK|ZI&SoK!#3Q1rlVpjSlZA=@-4_{8hcF!fQ#Oo_Xf_kFoSE}{$mI% z$sX&S5jj|!Za;8uy8SG+fR`72UW0qfnOs%~RqV?79({0Lb5 z>Fi8Db1Q#(KW-X9DMpK{=DF~XaSy;idq3>6RyulJNo^^3!mv9dgZr%dCy0t=R0b2I zgniuvJh1>2#DJIS?rk)d@FDirQZ+9$W9(zerscpJzyX}-isqMAT}YAZ&w5r%QVO%Y z;exB`IKuY-WQ@ABkw0Nh3br1!o#`Q!U<0qX%sc2fOYpjnE>L`LA`TPc2I+!1R1ma@9D*wRZzS>Z0GI`m%IGO-UuU(G*5H<8cFPxOe zW0VfQ0DS-_uCaq^dj<0-Y>X3Zt|PzP-aM7W)xCO@^)iC3=#GlNK>HH=Qdcr0+W#}B zgq`qGk>jyi#`~}W;L?gDWqx_Dq*Ek%(@C|*5Z;ddD8Zt9st@W zga{MI_B;bSQ^;!3%Es9qfZ?C?A4r$*8YbU}#%z5`LYEkHb1^4#@-$_ZWv70p%_z>T zhF>Cmj_vSVX6?gE-dUSU+#-ePmuZBJ@XQGTN0=QfKZp_Gqw~Z1Bl#~CY5v~jI0Cz$ zKrR-@8Dy*)cfI}wUJh%FQcto<}~UwLBnhT*_$`{0}+$K9S&fMgD!D|;+*ydwPYsBQ{U z8wzWuv#i(OBF`O5HGv!G{(bTyG&S?<>h7_pXVR$d%{H4Ndu`_nU_`NfRf$Z7 zG`33;?q8N1^gBEg*W-8@Z-Q4V4?q5^it;V}Ol<>N-@O`~?wz$OCxY)cgQh;{oXCxV zU7p$C$V~#FRte*(Ee+f!B`q#?odHzTXD>rmc|{3$ z#l>Un?=Yq4SO62OPj7Q}p{gD=*p}q@SW;)-DSG1({czc~Ek>SbKLF;|R!Vcznh|;)A+YVum=k@Sr2) zL(ONCXIcWjpBx>V_5Un~geLyLArwsFF{0I(4Q3YQ_=0a)HBIyZXd^kTjYPHfSQmw@ z_)|SIIZvFIQU`_h?d#8;nmsb&Rwny!8y*w8GTN4z>%R|#11tUBH{5mVd8AuX9S&Yh zg+z&+BV-(ui>asu>(_9A=Qon-rxWnemb0nH9mC?VUi!{h3=ssfEq;}yMEvnp@}jvr z*`SK2$;b4wQulq5myL;+;7#nF0>8nKSUJYq5k43+-kr#1?zasSV_u{`B&#RGE(E zYpS9gjNcfIioY6nj$CqnJIe>3g~_&2vY$TZENz$r&5-3M&kF>Jwv_O;nvr~c@|qmr zd2-Xl;4*X+n-{{Pgz@Ll1D?*&hC$f7I!X2rJ)lx85&E=4acJwOj`Od}iqG3J&Rf;oaGaFdP>>C?{@c%n;5TR zZc!avm8a&2)H&GjtfS;n3dPBT4_SD`W1hY($nsSh(B~EJ zj8$o6Bh;3iNrT37T<8%`s~Cc2(I(U;3Zz7lw8F^cc_VR8=L59HO%Yt5i{vg#6U;_4 zYsqD_38e{5e$Rtq^pg>BIC=A?`*bJYWSGnf+JvURi}6vWuwih@Pn($>k6ip?l9V${ zmU;`>++c*EaO@@#mv0cG|zepT+uAy)U)CnerwYw;w|NVZrFZ}L7If7nHTkYj z?mVyvVp+jq&<-KSDXKuXq%`OeWkh;|SKa~>+YI20mbZ}{{;0h%YeCZl$?78qwEKSu z%kbCs%}8aLt9fKnG1?%M;xW526Idrg3y#u`->Gy@J_`|G+t%wQ zc*6Tj2^V4LxEV(PcS(iTxRDGI2`vtYyxcTgn0^9H&sK|Dy2W(gL*W5!bZYXjx)N6pCfyOkJxpBNM}Sma8B@&TYVMWrABqD7 zWU=s7m4vURwflbpXE$o-TH)O$AS4rV*Ac#jC2D|oTml?FUZ6LZL69b}k1Md<1} zzGR49akz-n@NF}$xBC}SMWhV~MkLA&Z$C+X=ms+1qGJg?5GJ4|dY+WH7zgH90!e-w zS!{4VF~}7~)$ft z#BN^fvhqNh1h9^hIRPw<%K`&{TUdYtAz}}@tQ!Y41Tb+x=A~_KkI?4j5E4>=Dya1W z=!XTE6QZ2eo_U~At8C8+gi*CY)y(mWskN1na;mEe(~=#3y;l>i>3A3-f{+9mb7Z{H zYic3BU~8t7&GPmE$7?qgN&qI&r#aB@SqvdiGck#lvjVOpDAAy_0=fOp7~3bC07{ax|6MNPP4I zdu{kNj+@HYi-)v@jQ;i2#dUK~&tKmubQJNWjv2`Tg+tp1fIU=^=8pkxOp1*h+y(94 z7_ZSELcd4>LZuEEHULw9FPBix1Wm`eKFg|}TT?a!wUT@(R3pMasOl+xbsAXW$S#{X zw9t-&GGV_=h!;vA847pS!Ko%sYTDA7Uu6k1AMTZDT@LQlK4J5eHo+`PA#xaa@mgr7 zt6~qJPzzitHbHMbg1PBiXH}X;=_xpSq9<)B+b(`4@4BL!tVQkbYV#%g;Ons1(Sl~6 z3;J3_gPqSUk-``O^L|83N!$q69>84W&6A5xJyVLNOqbg7?&3gyhs6}1b3M%$x3G>l zlV}yR&i2;W7x}8bbS}$T+Nf<~O7?cJ;eii%KZ&o+5nG-Kf!PzupaGKlyJ=77sLo9i zbFD019*F-i5dQq;T{u-2ONU$2o{61>3wZnEjp@qT?W}(b8T)s0e9IU_90S>ls`Kebj10_Xjn*f!7~)&B!d)qeV$J&0 zsSnE}pPClA5)CBu>DVbc$8s(^<3M3xKM~xb=ySNTe|6l#b6UV_@@mfAS|l~g2nuBA z;~kLyDsu?c8*e8&+!wKM$8hV;!xS(=*6ipmk>zu<0-llQR#susIEAW<-l->d}nLEKFip$_RmKP#T z$$QH&a$Rhp@{3Lz4~XgqyU;in`gL&bI+%Do1o~T9qraU=31s)`~UHv)VG4D5+Fx{(+RKY$FZ+ z;!Mtv?*Rd@gbWV;5Eel*oJKucyp8krU!NOz!N$<)tWRGU5@;zQUcb^AUScLId&<1y z{);<#@1s8+ZE#g8e#05_o%Zu`A^SFgBX*%4uNUFHIVy)5IYRzvL9?<(I)*rJEG~lKAtttzTioWS6#*bNScdifg|BUhIo<@T+Rq>8 zetJO`f6zHHvutsfSzSZxy+$8fOuKLp83EJdDh1+3P5Ff?5kX1Mb7j(09*aIGF5&Jp zBfM*an?}7yg9CF%QeTH;v05mzxsqt)tzZxl_j&r4`rX5;$P?B-;k#105@|t?!x1PN z60UHf8Hl6X*IpiCq@5qJz4L(Uyu0gAIYx?5hE)6SPtim`-e9dvUB)E03m2s2?H z^E7i(jvfM?jyNXwonGFQ4ADAUyXvwxI_$Rm#X(T?Ephm#e)UPE{|8w>roY##Y`5x) zy{{UeLJ!0)}5Q{>Q4yKC(%8izNrdbgNE0?&==%YB* zTZylK%T>H=ovUjBwusK}#CI}&A%Dp00gK)1ph`^cx5G;SYDfa&?WTQAN*(OxkJ1IH3E(wC zj;8&^q7N^l5P3jCBvS8=#<_&Xz4c-|B~<{8B!zx1b59!cP`dm=!u3X{>)r0$Md?Bo zfLtVRr6BJB0%h`&AN3i!s4F{6P!8G8_4$gKVAq01D)_+;-Rb-~Ow`b+~U>=w{%fwm}*GflPHrG+D7j zJpRh(uFMV2S=IvZ0wI1_2C!P1deOK`mpQ8!xu`31+(?2Vl3Us8X3M- z2Kihs>IZa6!?Vq8d7MFAl^o2s;0{Em)aTY)iG0kO^^S_aD zbaMwl8Esa`TvfD?zgvggA=lNP5r7JD*2*;fE%{yFH#|4kk7!K)$O70UBM-9xx(T@0 zEnYh0Hd!3Tb=pF&R`EwHxoI#9pqlz|8Lw?+V~@%JDn+?4_P3d^Kgz;=SwN{K1Z1sS z%vJsnbrG!!(w&|85lI*OrfPr{f}PMWX^u#5>s7q#FXHLrq%@&z02ma-UfRsx;bcsJ zmIU(Rdb!+nQn!!bws(()eyc$Zk9Y|e!N(-PzTT?l*~f7od{;C)fP1;rYv0dR9JA(k zD?t_PdAe6=r+IfZz$yXM)hU8+7UKR%5~UKLihA)QZXcwOqt0+edKNCnN}@xdYJg>; zSS=o{f01zps|jLz4my_1mO&b|0EQgll{SC_GR(UUU^f95&>(SA)Ox!E&rJdd;R5@R zI(xbVpqAvz#VUY}0(i5^jVE!=bh+&~?`HAG`}xMSlLrGb%{HVs;^O+Fd&YGe0ET7w zfDd4s0M?=v_9l_%)HZ-PE#l*BpP?yQR;|!+Wr-4jX`d}t!at}&hk0RZkvw*S0_bBl8tKE$Th#)#mz+ulRwN+0!0qJ>H;sJhVz5GFIWih zHUVdmB@fF`6AULlLPzHYYLzJ(mr=hwD@+X_utctx5U4eh1*ySB@dhfUWZ`|eLz$457AW(PT?w$4*aO$kQMyX{ zGYjA~!9}~P++YhET}I^$ZbVimTbJ{w9bg~1K;WtMuE5rh_bbH3A1)C7s;oEL6~MXG z1296zc3i>7iTW6oC?WeN^sPK5A-@7GD{@i1idynj8AXJ1_A{+byd-xdlYU*RMr7HH zxs^bmBeT^&pb>mI;J);8U}a@o(5|Jb;Q0j2!#~SNK_4=PAkc6VK%aZ*z5<{~%HY)i zrP51f0l*S52E4r@|GWA4*xLy~;0@aq!2YIDy$8pHS5$fl`*W6-`c+L?aQQd_vhlG~ zvs``7uk8S%gzxKefH^{Ptc(bwHFMGk0aQulkZn?jX_H!_Ml$tPxa{45=a3Jjt3U%v zLIG*ruE1O!a^nVAWXEy>&i$?RG*DdQ5;r8!`3ofLIRQk?l`KR!>A2^th+zHYI${zSgYx7NAGOR(bgG0SpmvtWa<* z+fhF3QK0lHVQd$upVHMn3tAqil-F%Mr@G0{%J@&D#uUb*ooWH zyw#z&D*m#-bqC7Bi%D`%wy!TzEi7^ zK11dQ7N~Sh1ZA^0qUQN-RG4#)Nt_Sm31YUmjbUb43Uy>SE{PyPhNE`A8^E=Lq4-Gp z4>DIX*$;$%C1b@-_dyKj;U<74lH)%Mk2!`s7F2?k4hhFG)`v5~L5u+xR`G|2xu%ir z*1@%%%BM{(>;g+yyK#D(0!jd%{ihQ57Hx6E-kj5a&uyc;ATHtW$a8UA1+Yl~D;wO9 zt2f1+EUSL&Z`N;+){88FuwZYi9$=whlE79sD zBtQqz<&*ht&|%dE052ih`Y$q2q#clc;$(;sy`I@H*|j zeEJ1%r0MKx-0t1EI*+c$IEXvfJ{-L!K;iJaV7;YLB`EOEcrM3g8@=gVzsDIJE=)7Ea^0}d}_9xXYP>tvB2OES>Tk%33ONYH#kOQztdhq2bk)QU}O-i)q zzAZ`|sB^SaDVS5NWT9D4N-XCS)SWNLYs?)0B_b}g3Fq`;uE6*8Y^B_yh!RZd9Nwk| zke=J21bfbzk1y6s6KM<^K>8*Z&R@m zbz&*%z#?(O!E!2uy_^U9{)C3cOC-LLlb<8t>Q;U@QnvID(UMXiIH638+vTh^W-;%nR>Ynxd zI>kN9`H{u+5ovE_@t@dWQbcv!(z*b4&~|@lK0u`q2*E|l`)2lWJfGedT`Fk==n{1n zVxy0wd;B_pLirvF()ofg;Zi$YgQSv>>N?NukfcbqzhX% zw)>E*Gk6nmPa1ey+#ut5=r3`IaO0CUt@QZMPVx3SU$1Boc|@(A#?g{r#7^~Xx6USj z0eO#uc3}ICDA$Xs&tLLYtQE>5aQ1_>0A9IlG{yPO`Jo-4Zv$<8>-oI_+xeQ^wEYO} z*5ugWTt*t*mHu&UX7S&_| z!#9BW;^)zr&|mJpuwh?l0hl8+Un?ShS%(4YEw|0A%@hh`AFETYYp&G;%pr7#=es$1 zD*+0`5DM_7o~V1hOL1U!&a4Hz%;08ye<4K5EE-ho4YOFo}~zN9pZwRm>ABd?4%xl!}R7A2hC z`JmIqFn6|6r?1GZq7|!EE}*gLF9G?AM0g&%he3-HJ#J_JP@zQUf4UVQBxZlht8U!C zbD>8;&>U1y=cw2UI+Tch4D$99lOJsXSU@Jf8;t-933xZ41pA)|xq$O~x!bitG|pa^ zsG0imu8dc^hT$Xc3tkEbxZ^l;z*q<1mmG{)Z{fCdKzF0h*~l zUzGz`0$7BS_8aoNC7qZtbTzg8%>cC$(p`y7Qu7QHImy4h6%yXz2|R=(f$ zY(v*1i5q3Pi~4psz+Bo2kK)wdph>;EO@%%~|J`4uixxKZ3-KA=YdiFGh5dQ0`sfC` zA+z5TbPG2D#3Zp#tpM&N$O*X*?lOy>1kP<&DC-5zM4)e(L6V@`B>+*WzHf4$ zgs{)HDUU_i?^FTw%Lg2H0Q3o99wPrk6x)rs?~=PDZhaKfzA^`3AtC#!!hLOGB8&fS zA6Es?YX7b@opdSQ&c#~*hNLQh+XTI*rq{U+G|X#XzO?p+`s~^OE^rFivGH-A8UeH- z%LoKpSGZ4J+egY=U}^zAhay-ry$&ECneivZRWBU?NaxdfP64z~&?f?0NVxr?*ud?h ziW*ytaUkSmQ@T_9A|p4juzLoA{+O>qXDi(2Dq0r->?LpLt?tVe&MChFe2UjFmndc$ zC-Ex*6r!itMSAHQb1oCz@qN!tQsG_!uvXq@X#lj9^r$!c)e1pZ2LVb%jYbyKOB{Yk zrN{lP0BcBkT*YXpA4R1KRQu=^H~ZJs1mPvh?ks@q($T0Apjc3`7`Nl2G9qCEK%GEd z-UJYLWeWa&qnNtz5;y&}asaXa2r7@fytRq|cBk`svGRD!;3@(zZ-1Ba8jSsEyYd=L zT74+yIlq!qU#z?nQ`n+B6SGBqLB_dMq-4!qpu9Y9x?)5mbOpZvuOdkrFU3>;Baws7^pnIS zN0%wRSm9S&x>u<5$v)>-@Xan#TC(q>_>&jd_q&AN%2p-r-{ec+-0XBk^~%|baNbws zisO=EMH)NTvK2X7TBJzeMpfwAHx)sfuRP?lxB*}*=oVEhmvva{?%fQ&_N z7Ap__*f+>b$OC84nEg=R*5hC)h@rVfc^Sz55GU%Wbfc)G0|j3fSdT&%hH?Q8kbJm> zGy0B<#Kg9xT_%^qWfKd zyT#A^vei&7e*B$Br_NU(kMbJCsInog4!G|s*&hYnLUE-~tVH}uG&kwBD(~n=UKKwB z$j^>S^tHYLAV^$+cJYAJYZkknp$B)mw{7DAzo)9#dP%ZyUMA4Vjnx&T6*;)Q}?_PU;n6s^6LLKTg7b zZx+BN!ApMBVs_Im`#~+hu;94N0{68E`x-mR(5uUN45G&YF*r*;&E%kadW@F97ii;^ zW=Z5&`9PF?It$0!O$?KC>ABm?MDN27t8a`s|2!Uy7@~ zjJr+{ccoD{k>#qo6(Av>IM8xgBv<$|DftM$%taV{fA<=v+?XH zXUjPjQY-+zor+R#zbBOore5AJB=rKpeR9WQnV033#k>{Y?^fipeRrwy5V-T}66L+g zEm{00)R{Q0S01c%KHBbHIoKGcY~P~@yJCRXN#{W)8*(H;=PP=5EO()s#s@`8Nejbv7%dFsRG8*^1x$wW}~joh;b4IIQ8Im&ZE3!4BEQewTUyd6}w)qOf>SDyNax_w2P z_5%BPMurcivH4x)ogw?2`hd{wI`wU#U)AS?dZs-m^f8Kc86)@(ZfNbKDgCtrU|dXk zLl(d`83}+FAoQTswsipIa%vGluP8UW31F|J_s6XBr>OI7SpaQ>@C1r1im`Cs-vsa$ zG21sK0RIrc#w>seQD+2K6bZ+3jmq0_huN)|n7Zb502T7-zV+C>a%%N2O_+VzGHwFc zCp&wBb@n64aKG1~>PxE4-8z8T_@ijo?c1}m>z6?`EL*mWVG#yOcBe`@+A`Ra+LKzg zY}u?msh7Y5S=mbgvR=gZKH){IhL!7`!}cGuvUBISwX*jZn1h?!bC5NM;hh682kM=B zSk^Ne>g{9pomtt77cv%OP0!}E$N%f?+nDQ_$FO6$x#E>afUJ33xa0rz&Tp*T0*3j{ ztnAhEnYE9VTfmQs?EmFB#mkpNy?xXEb5`~og2kZgop127XA#5r=dA3-OPCB|xr?}= z75}fdFWP_2%J$?yy?qT+_Mzt&vy&JrnZp+k`#%s2m6Vp1S5#KjH#9aiZvyc<+p`3* zUlN2yBC!rH6b-K8KQ+%TG*OD-O(5Dp@b|sZ)P>Q`7}~oTPcG=o%VYoGHQ>KzucH+l zH+WRv@w|t&4`v2qm&9z_Wy_9fKujosxW{95HD^=18tRVL11mHYR+ZeICAexC@`TZR@g1`ujt{(*AyPBx>mK{#ZJbvYPp^ z28-Dr&~vy*i4Fp&VwJ2ou1EJ#?Rxun`@yVi=QN8`g*dzUp9L_F`R#sXzvqES1N$xR zPwn&Q*yP-P0h|-|7i8pwKp+qdgaRdj(m+|DJWvs+3{(XJ!C){HED4qd%Yx;>ieP21 zDijC>L!nSfs5Dd-Di2kJDnnHzfs$ZJsHCK%w4|)0yriO}vZSgsP#P=^m6nv2mX?*4 zmsXTkmR6Mo%7SH~vXZjWva+)BvWl|Gva0exd9XZGUQ%9KURGXSUQu3IUR4pO2v&qD zN-9b#$|}k$Dk>@~swxAO!OBo&No8qeS!H=;MP+4WRaKxWSQV-&sVc21t17RmsH&{0 zs$?|$9goV+b$s`-Eg0zUk4;QO2NU~)!Ez*DVzl3y9Mk&~si8EZJgek#}Id68(7jiqohyli3QY=IP1;%$NCWp z^!J;Ir*#DfEm|m?(E|UaY`$9fP!Bz=iC};K{?Vtl5kP{XqzT~pg&6yJ{Muzz=@T)1 z%u1wFlB62uIQKExWmOGE+ouO14pe8Y%N_NVmm{-mB7wnk`hNi5`H zKco#%LiHz9{J~%{J)DU3>xPjw#BCDQDphOQKj7yiZ#Ed>4Jp;wH5}C}Q)@b3POF*D zSpDgtej}P1)`6(u{3*yGsR#A;`_9o>*)Q4m@hMg3wDYZfXuWT0D3gjIxwK*3YDlD_ z#$?xID&`$ZBz4~bL$@+UN<&~OYEGtNnp(U!YL4B}F6edQ;(uQUF4p_$If&EcK<9Xrecr;->y(cwTlw*(SqHwQ1SZ|v8 z=wNcvuQV*G$(CxwAgK0KENaC@yoMe%(<$Ep-7vfZL(xQ1k84(1V*?s7(y4UDOipTJ zhCUWGbZtCpj#g`H5Aa%31HPK*VA`+<%ha<7VY);sd=e$5_3vMy-PFvPYvCDQAET%! z7CxY-_E(R)*@fd#GtqCRqGRSr+Ug%O^!*8aJg63#lEe});@i?(-%-gXAQnv~J2NRO zF{(F4lgYtoY@Zp9$yDuu@sUJQ_sTDRz7%Q$KKGM3k{GhQK5uI}o%B0f<#8l7mEv~;sO-Kj_8g^A%*+R)oFNnf~@ zP1t~U{%s15T{K3_pWB0eE! zHa;;W2g)jSr+L30>vTBqPrI$B;vJR|o;LV@ee5_kj-d!U94ybzSL*r)*$T+dSEhsr zpnUSj*}rP5els)31V7TDkhkC?hA_f;d4h6@_{2t$%SMw4gl7=5pr8*snd{92@`IsD zpYMQa83kcJR{xNZ9&H?n8jaX~Cg7`yrBhZSmC@O{$poK(Ex)`35hA`&sMHq@2dhHQ zK#Ju`g1(I#%MWIPGx3N13I5W6FC4~JGJ!A~K$&mj#$f1RCdlxGYV@S3Ya+7(^D0>$ z771aIr=rgUHkOx_m6ZFQNex8L=o%XdX97j6M$J=el$C|5$`8gyYHNdm!m{#`P~c!} zBtIAkmH4Kn#I&21!I>9j(#}fB$1V$xS;n)NcFZ#B9%Fnj$5!~vy487kZp$U18m7@` z&7`8Vq=wQ5V(FA=8JU=sHoW>ojPaF)(t`tG{!b12G$!GqQ0bJZTTDCh;ve4u(a3Hp zSx{PA8|n*V=F~71l{?3iOEa8tU3SP#J^_Cv!|xVhttgeB-d3e-D;CWRk62#*kM98g zH_ZR33swhe*hb>k42JqdE^AFxpVrd!(z)RPYsk>85hFdG@=}7;VW}`Bp4ebXpUh`X zN<>d>w1hR9NF^*bGlePPF`R1EN7Ke+*lQ-<(hJ#_Q9Wh(!nLhYYs4SZ z6G@g;>}G9{N#2B!9v4WkpxA-Z$v8ILg}6GbHJPz^)Y5rIPeLCzy;8vp3e8gY9hj0tY21`a#lnfW zp0Y%TQF#kmwwX%PWr?384vgr-^oKQ!C_S!zp0wiflDKha=$17n5cv z^1`_F@h&9wR5(yGls3FfUknFo5*tm+5b9b@K|zA=hcT?mBJt%98ZTaC%|aIQH5wZ_GDn=+S*OIHKL6-GaVwW{QZH5j1sc76hMN zH&_)qn5nHTf9!jx@?a*vyhKIKnO?yidN%G*s1$JrLr+9rTU(CG!L!;`nkxAxO_c^% zQX@b{5a&I{uB^CFEuK=# zJ)_j49V2YM^~7ThGje#%w|tNFsXf(&C6u+zMB|L5k3I1f1X*oEx593VOceTRRFtgS zhHe$|EI}PZw>U*&c$5o!nba!enccWEMvY&j9C$SiLbk{h-Y0%cf$w+`>;JxDo{gLeBH?=|BmDShwQ$rJ z&Y+58DmayIYEjhRI*jzN5gk&iEt8+GbRj=K zmvzoHl}=lp{4;X5kc({S|4e*NN!q9)B(E>5fkBKTcIVB=teKW+>Q?uNp^xYF)jWMj z)A2pE*pqRvvHvp+tPs|J7Kx@Kc~(g=N};|_t2WBM%_KvAe8(ZQsi z$Hk>$s|_FM?~j_MZdmpo_x?PD5!bLA=m4hD(q)O>)&fu zdnE<)@_dELoEtjoN&To(RvY@886D5xUDM8|4C0C)ZN1Y<*4EaF^Y&F(sCR2DxB8Sf?yy}US1NaDi@+wAD>=d8A+jHDDd(E(TV8;FMO;yUm-U| z`hkzFWo))4yah@t6vvQJX_2@%l4p@o04l}=IxMjiN>y(FjFcCGrn_WVa7)y7cRaI zBR!fhQOPpX$^FRfGYWgL4~6(KTq_EBpF|g*&o|{`)NPPgU3GQrNQ@6UT zsFg7#$>kSLYzg`f$fP%~Gm}c8t=#X=qjsK1e%wG4qk1}H(YL~&&sU>-mPiYOg?V|t zsl<@CzM;LdTg++=icO*NdVNv>NvFg&ROu4YWa2G7p4V6B_xfta_??~Cha`A~$igd5 zP5HRk5;`VLKscP29^9+Pti1euku}OHC^^0Z{1dHF(NbI=N~H8@dTxF`|F}CZIvUUG^Kr<#yRQ%>{!E0vnpfcewg1MVv3=2Dy*QZ| zEar4C9@htp6REL`RXnOk&5WTpCz&|)?=}B(Z3F^=@=^+HnEoBJLS;b>O3KOu!C-lL zpj3lEu)GY*2mU7rkU^6W1pdoy@xf^F-~U7Y%gdNLvpL1AyqZ^DDK6GJ+t!rD+6Jxe!6%|gvgi;9WVuog`rwt?o9k%*1x zaXK2{&3X%R*MK&h*sq(KHKJ=~bX3>)DbCcQrWQ?2YH4dkH#Br&@V`=AjJUc-bZuBq zkLs2&sSTwKZ9sH$K#Qj0651Y}Oe6Y)sf|aI`}DY$8N*gschW;crfzjaQGXxMVk6N+ zO7n`Z+w~!9KpRVDOl=^ROz0``Wi*k(PiD+WCzJeB)Ix0REUKB7KIUWll^%_2=^-Q% z{yU@%pleM!lZq!&!;K7KryjEg3bpZ(L~KOcr|V-T;<1cq${b1?qbAxZ5k0EuM}s`-PTH>84++PbM{M#L#sO zU1?Mg8&<>Iml)Hch%1$j>zXwZwX~6_sU`IxK1M>v*e5!T^Gsx%4EpZi#g{gy52djQ z##ouuC~Ekc*bYq`Wh!lrAnPe}!44d_!@ly0)ZaK68`2Z)Lta4*pLXCCO=CB_+IS*v zjc8#al%F$4FMh3&g+}zm@QC$TsV(d?7E9_DALGm-$Us!UN{>C3-<=+#Y}8Hg%==gw z&c9fU8EG`HESVb)YiM%i1ESszrYE$pL|4OdSmz4Dn5XniD_|d7_ScHo2bcMIZS489 z%H8-usf(~$RSZj02j$jw2Q>AHrU_l+fb3^A?`@HWC%N>vK)I`sx>C*hGb8&op3SC{ zC;6mdBQ>u~y@C`Tj~XdGUO$-5SZ(RJz9pK9Cv`0>PFqYK4$wO4PBWQ;+D2R(;L=Jv zsA0VUCXSSqI+l!DY(e8%*A1QIkEoR}wJ2L>niU=PKS`<%poZ*rNiJ~KNK<>OTu_47 z+3I17E5XZP>l#`QwOBMotE5_sQWu8P$i#-Op__)3`zXwx&~#kGV?TD<(1#Ny%HMH) zP>ZK^lZk|p=ziV*igG~W6cdU=JD$pjhMX}ILz?nUdhex&v@PAO+nd!zDcQj-Pke${ zgz~2#3x~tndOphaT7JHk`@~5me6kR^Oc~9NY{L}UyJhZVLF2!k% z7DYZ|BdiJ91Y*$?QgBeGIf`rP6jIl(b)XLl&ZSuVDB?sLT68#yL?bM?*Wu(pfs>}s zrXZ$?=Z)#B4W$My3$Av%&W@r*uiQ7t+fS95VsCNf6#pP5vPR4mm6{==#0f=oM>*4Y zeOkCy6vFzsggs$4rc)_BX6bS5;6W{yBUV2XZWTMnKV2q1X)mZzN~Mj&a3VFMAa9P! z337N*nh7z*YcZ&hNjWZ_#Aho##=mmW#FAVz@$|H6e3}ZifbSWT(~|0ClJ9Ag^dF?@ zKPMjAFqPSUqMqZONg%8w2FH?&4lE@I!P1-(|I)DeN^=M83V}i`o$AWOV!CN!a#J*s zRM}O|>N6!3u`QLJ!L}SNJ1hS;v9aKfC(gvo*8Y1KyWz32{JSVBiTF5kH_T+zX*o}4 z@#zy=T)ajz(-|YCw?@at5~<;xo!i5Y9XtJ_(J}be;uz1Qp3er->KPMnsyZ_%ZHnoP zTAtruZ0M=DZWK4AM>|?$VPwlj6AIsXQv6^(hS*j%hrD zMta=T4Q)&}__;V?nR;@l5H-a_T*srQW@J+9P0i9LET&hHm7tj&%DMG`;o~ZBOi$uL z5_MVLX+6%ngw2hn<9d>GDQiSe;SrUc%+s2?>-1$#iNM5z#5vuWd>jcsxj?@Fc+vC2`G6q=u8a7T1$H9<{|Nqc}#D z9_v}BP)TPaizd<3Fi9$ZQ+umB8f`qCNzzygStHEepqXQOG8r4uWBU--Xw=xJ8zvEN z04a$Y?Ev}>#1k=#qn1?GqC=L>k2=_e8ch%w@gaG+TFOXAJy~z!FibkWv#R@14@{W+ z5Ika}Gs7dij{<=lPnuhim^>Qrzd~jpHv9pGW5w;|VJ^qVYUG>n`5-%VT)d z)V1}A6yDAvdDmA@+r(K5Ei88?_8O%=XOBkANm&ii*uL?o5f`YQP-0WsPzp?ItBI9+ za$CaQKBE>t9-yW%^~yBDJh|J7vK5b7QPdR~We`9#xZd%q122;KahTubW{hZ(%`RsL zW+1})+(f1u{9KzbwXWz;)JUv1IWD%W(f*{Tke6`XCiSRm`(ljf7y2CUkkIB(@xl+{ z?v{NI;K$SjNy8;q>6v|$KL%pwqt#|_;ybtXlb^k6ZFbek$cxWw>2KrtL!aQf2NL z+wp>%jPz(zdXzfg=iTGjW$zRm|7!n)FA8e$3TC;^rkTQ@$~GXWR{TljBSZ#5QKCF5loKhjCFA<@OL-w z>h5oAZ)*PMn=$r{Zxq5DIb$zD)g#P`)y*itmL;q1E;C+y+5%M$MXWemp}E9<33EF- z8(_U>ZQ0W=I}$0qniG?+gRy9;n*DWWw3_{;nUMs2ijebqq&g__)X-y_|vk+14GYhfpqCvEAMvX~+4rKS6>>7A<%u48S(Y<7n`Ce)X z>+ypG8+j|nkzw$=m+QG$jWxr@GHnCG;;1^KAiNp&lFCM=VT38FzXbEkjTD3;Q_)s!d}8taM7VusGAED=oj zrG`0KVu|mn3$evs&)rC-6(2~pxzr6eGLnmGN_KHNmy!p zz4_UCYD9WVNiHbPP+=cv&V<v6$}Tw<|)Gxu5EV_Nb=Bt=%vpk#i& z3n;9r9<74Y3q1)HTfXqD z&$#C7K>vQ@zu*2F2nI^a9<%?JhJydL|Nd{O$)bo%h02vD13$zN!+VV-NI`Gvye7!GHq#0ei(WRu`$0f(n`$%Es4@H zk#gP8I&pN&>5V!4avel00t6wXOHHML}7pUyCl@MR~0aNcenN1(N{fBN#Ki}0rQRuq>cn9+2bFtxaDB+#?UOYV6_ zdQ7;qapzv{DusABi~%@|<$c^O74fBJ5C!e({8_oDJ30F;b7Fv<2l+-am`Nm=sAsNs z7qzdRm>wNVB!wOzxJ#WX?2GV}Lu`Y1uak^x(J{2s z$y;1(IF0s`4BJMd+JJvt9~=-ND4LlW8cIx{uPo{z+@fHav2HYdN z$6~^c0g&#!lwc~(V`K=J^s~Vx6N5(7m=rFRY}z%`N+gpS2D~K<-4x#AgeAr1gCADg z>bqNdn)}<^w!hZj($=xFyT7Bey`#UazO}ha3yVY9P&GRyqFsplyEb#>$^A?Vr)wl_ zSh0*{Dp{GNmEguE`jk#Fdoy}&HI4`ayv*93NbPIVE#{M?V9`@NKr^0*MXj`9s#Tbk zvz3>a)(S)ZgpB4?{IRdXme#7LGA))qsx%6! zj7X%0n-b#EOzl$#UYtGlq2=*1?HSAcX6PuII(2g_jhxu68>8q$KMl87=KRAeQ#H?= zdYpBP3+vJ?FPD3MbT{xmi&1>On#a!lTu_Gw|>#uF_hyxdby z@K4ZO{;kOV2lPKqzyFHT_b=;zrKOlRUH>bsDE+to_rIwBv5DsvbrDA(_hWCOy{ouB z6*tm}xKDeM;-l4fv}l7F9u=Ua(uhzW8bX~-c(x0*qXiwL&N5FsL_s?2afQu{ohc8@c)Wn!$8r5i(dLG0!Fiovj%kcZ>-zuL zd$;X2j%01{UQdzc_HO_ZP&|`1XiA%;NSoc1s3B>qd$aWu2~>h8t5AimERdpQuJvEd z?W{FxZs%?uVxDKez`Vk&h{$6dKu`zE?WXr$EutzjDi4vFkr7`+r0g%Je?xJX^@cIO zO0(^S%P1dB`wKmmW+($2oytxUjqxPuDWORq!k?rP0zz3yyDy5eIf{yDnxl+paMO7f zU0w?G+M{VO5gcGIUqD$M6gVi_+@MlJT?dRPtF8qo3TmT$g)9!LlWUMJ$!jDDJ7XS^ z@i^?Vo;{ghmcSg)bH#UV2DMI(htGmr8cJ)?ctSlS*F+woU5A$hd1Rrqj!O!{d!6L2 z#KI}E5S_Ci&i^11^!)JH+uSbnh2-#gTdB5`E$VSw3kYpoKKUSMDa+U(o`x2?$a6ML zFo+AF2y=d;JqYC>oro<`SmA^zxB|@?rx}2SkGHxgfdX>z_5N-!4&7NR$ok|9gyVKv|Muc&(ocC7dO~J8xhctRM?4qr_Q8wC zeM+bk4^b1b% zn&hVg4mToKoPUSUqhG}f5Z^(S>Qtny!}&~U%cyu)6p!U3jbf1&4mM zU+tf^+0o(Y*~Q`6{tNf9>kfigokg_8$$}#Y!YK|x1$d%lM1l?x@?{?oXY?oPjpXsr zr8~`|SXxh!Gm2&)QJNs}15ps;aBaXOzji!17&>pr2C71{h$lHjPGCxr$m45p6yV`F z%DXJVI8>+^?V!ey@Hfqc$B&0;${s)N^X&0s*5|)Ie!S3X!$vB!Bf&^;lrABF70a(v z>0rDb?axrGjg%0}f{|H`eAro z6s5-O5}dKGGq6k|@Ebu+IO^6lg=Jh}Nk9n-z)l{LQ^jeTDdjRESQI+T4n;;dG5l(Z z(!qp*%R8JCY%H=%6e9B!{Zmkrub{dUo{uEzda;=S1DQxt6^6$dntt<%9M_dDH4C_YO76Z)F9(MekMzW(QLcHR^{4vZ9`Ev-2Pb z==GZb9yXi2&HCuO$qCm30S)Lc2j;6fzs=6yD8~lW|8o0^(Ds1613L!}XA|V;X%@Hf zSj1kmEbcy?h(t*YFZhHo#m@0*=uy+%gA!i>=7@d2P32U3%_*sqOq3x~Z^aGMm9UZM zNDpmmuxAXwc5nYNh0X2j_f!a=SkIoZM&q`}x=uwG8;0YsjXgr^G#uF$N`-F$Nd+2v zxWI9utH&^ynO!9#3IJ<=M?nwQ7*h+R5j)V@lD$T1McTfM^?*UtIA6L2&6I3H?Ex0b>#*5+w%^Bhb*)FX$o`L>|C4y)1jh@&h*9X2{ zWnvuVs2^cyV?>1(IG3n!4+c}DLB=?5v`s~l4RMV?#3^GZMP(Hb!)#oDU&5mik5;a7 zqcJIXhURZzzm#3341y)t!=Qh2L_l>KLxAiKrkTV5I!pdQ?Z8$$No7RdByP+B^YnXX z;LeHA8|QS;lDx_rj!ZZNMI&Pj`BEs|=RCu*N{_!Dc{0wM{!c1Qu{t3OtG(Wg%bq^_WL!=j)+ zyb-96MNz)@{<$;)759JB@wvV2+?GF&o?!&JYk)J3Zc>G3!=9kU1|4U%*Dvv4} zZ%TR3RoUv2ZaL*Ew{^!BU$x);8|r_{;{m|SkAQ*9-2YcLH#S#G@qgErAL9RhQT^{L z6~MC2>B9-|gY2>Y&nb`Fc8^1=W}9>%r_(-`ae@FLmiH$Bdq9N0tJO8+3;|FR{!FUR zeX9%J;s@NwT#UiG%eEPXi_;SjkTJB0CqpW`tU-m* z<(tz%*kujL6WM{={19JUi#|NWlAUSPW*u<75gmHcX1g#_FZjTIxXl($#bqkkPlpR_ zc9QnfJZ-ZASsfb2``)A5meZ9NX_8{pg*kikLL_lo=*(EtaQZThI_7bkE$neQ;98%vvpo#o$z_`@JQu(4pQr2;wEED_g*Nj)W&3BJJKa;S0WpA_ zgWlyX!#5lMv3#)d-Rfq;)EQ`$z|2|)s|RZb8;ur8Og}{VkJEl9*VQMkx)SB5dF3g?5j{XfG|QT(g|X!Q2eBD0tH!;8rLNZaIHgG5ng(j zP9b~6NRS<#;RmHAr!m<0b=@JU8lpusy)^fZpYJQZ;OXCAp6&eYV(<9q_(TIo-in*+ z6wo5&NjTWt-CSv)SOG#HK$;agqdbdHXac&jslrxN7g6c)${*WVf4*^WKp!KmYek{W z@Aj5-A?zdv5XBwE#$!=g>f7D#*1p@PQd-MbQSAB3&bOKvN#PX(wX?ClNkz~+)d%QH z%@`?p`i^GjylRj(_xCryRUa}w40lixoK1DVSXmAD|cBtDkm{4)?sFy!h+>-}QnkEG09r4Shk}e>aJv0Yv@-s}p*8 za8f}FffK3lA;V0FUxhY$DoD~4T8V-5KtGFPe=`xM6rb-JGO+p`Ory*pM>d-Jv@&i7O;+w92csFTnrAhu8W1V(qiVNhSaTz6N z;0CZ{fA6Mwo{qchTa9SK_H>M5b*Z%X1)3d)H?Xzuv#PGD8@Qhz( zd@|~)E7(wB$+~QLqivqd=$GF!9dl+tvsyeF+a{dJkE%kI2!J|C5Cc}$^ySn@0V^B& zkvWxDHt4FVno}IT;`r%)m4^@_(1LbjSq}y%Bh56o3*%E1>w?j8px=6fP}rBM>S4*& zJx6DCqcl3J-E8MWc5nRyySM&<-CHSlZ>`+DwPN=+KCpWm zAK1N(5A0rf?X8s8-b!)pp$z`dX$sQV=QvJE65iVG`ufIdqxDBRSNf=9+^cEv^X2F3 z&v$i;sVpXu>9SRNcF8B|fuU$_X?0W&zB|}CC{R7&VKkMdu@iE1Fu$!%Lw4&_AWdru z(^DLyKJ||%E3ACZIi1F_$m>RbV|R1q+a)vlSeC|R!w`KdvKLXJCU(hvJRemmd*BY= z`qEOP#4;;xH;yn#j^=g%G@MTOfVe&w*(@!N_uzg$?Hx>cm#*;5)72Z(l;I>TDLwL^tFuX+~m+E-WBH&*w} zeu9qkzFYVlroel7`Sx(pMsvC(O^xb z3~OznmsCO#axpI{U6zf8l3`+M04GHWd|neoWf`PsN*XyBBx9UOtxB^Ib+uLwG&LzE zkLEEBT~Hd>y2Xns+PV$HRjW3<=0X^Ni9)lV^}-#>y???!8Ml>naLGs+)B` z38nB&uffY3Y>|C8@3@k2%NZ+VxI=fuB+loGIduTk$n$7`u2*+0sr~i+O}iWE!Cx+o zl|JbFUZW6BA0>_CoX6ZJ5MJh;kk5M(j_{6gP_Yxzo87w?jUm>t{Y=tf7_0J;9 z!ExOztC1-W-jl;Py|!C~Qa%~Q)0pQKdbpLPIXJC<&pEUL$I6Fm&AKn z$5EGa`S!@UPbgn~)q|M}p<)l(+_AjltdFv6v;5u0!D^#?4As)~R?}<-`)(ipPZP%u z_0xC$KBJ%RdaSnUyaZu?zD1&jY}R7byR%o})E8+8nWe=Y^7g%JSN26+h`AIEV&O=u zpk$B0#ADQ2aw0%+kH>)e7-KSxVV-m?e*v!f@~oUrL`GS5yoEC0u(8*1jNyf)U}L>B z?MuPtx-y8(1(d=ZkaTu zP^M+Qi{YmwK?8RfzQZ1zzdqmu&C~e>tgPK zn`VEhZOM|GnDJS8sTrIZ|5S)BD`ei8@Epvr9dc2SDeS6)Xc!HcdLtp>v6HUH-oq;} zCf+UG^BZ})3s{P6)jNov{gwcm=BK{MyJX7%E#d*MLJRPd&E~mka2tI`vnUjAoSc{{ zg)I0ZZP#GDn!29PQ+m(U9r4{U=O8ZrPtDkQ&E{`(f|D(tRHePE9ePmy8j znrB`$^Hf(Yoj-;^;mwR@7D^Tek#$Q$daIX|-VT8cwaob}aD_8G0<5yz<3P}OQyI(q zGB@@ZcMCAo3&hDE6&v3)4^2;;Lf8L_ks059SQ=c%;sggJJhN5El?E)2dpsk%lf!0*G6!bVi2Xb*GV$gw! ziSlDat5)C`O@i+Mm+}<%0LbJh#6OkWXh?Q=O{* zG!00l!G=cHR(s~wbM|+mledFw9@$cGI-NS2XnpqCvd;onQ|*dK1o$h|F2#INu%_fr zm|lTF5S{c_bWN|r8J#0-%shjC)t%RZ=-wc>!iHD^y&06-Y>=A)?92qURmxs_m2>rH2CWsw z{9gd1Wdv9TkEc z5yhq-;>ZLzs)}u-j=)v`IkO;xW3FQI<49TdEn`nSOjHTxgp1s*^UXI-3?pcY`&M(D z`z-Lf2FFy@OJciF#3C2Woc#e z0sr$w@jsI+h49z3W8D=4R*TX{hcEwnvHJsI0NeiK!n4y?$A?GzCl#gj8+`0QZz98i zHJF|m;_>|0A|JOo57gFgb$hX%Er}<@=k8cLL+q6?x!nJ8tHL<)9?iFvNo|axcv!iZQ z>gFnmdTXzBpXLG$!4gvr$wPn^- znT;7`lxMYzY$zM%9Zj9tQ4}ey5TnFlq?_`W6~yYmP#xPvF1~AVA+={_g~0_@6PvN@ zoLcm#RF59diqWBH42;K)sXx#&{C}W0*Tz- zhI-Kdsc7|-LIvJ)uiNSy+uQD3 z!o|p)$pSflk_*Yev>t5cl%sm9U2GRVZEaO(C$(bK+2d!jMnGks*#pHGAnX}1n}Qfu z)u!`7chf$zJM|}3?KNxEdDRUsx(EI)D!2Ri{#DI)#ae-Ts5-I=C*B>CPKDilq4-5r z#2=2iR=lM?PtWvsDm$kPw#(h>69rFGb)E#HWgWp~rM~!zExw|Quhth|wZ&I;@wNKm zYqt2BF1}u0eBBmb*TpyLi*MNC8zv^CJ&+4WvR*-;pLJeTGndTWGS;?;JB+j2sh!q7 zHo6#VGbv^qpI4tzx^aItrN+$rzeuKsxfp*$>X$k0|EtRz>qY;c_0^S?hx`8*xc{Sp zD`yuM&-Z`6xaeGRg$bBUGf?J&SUkzZfWot1^9=HuN(@d1rUE(5h7gc0N+{4gzl7BB zXF}!&s6$`eJA~Uq$okU=QbOcusxO^D3$rNe0Q^RNhBwE_z>3UcdD(L18>)(KkdR&2 zwGpaUJPb|Z;Q{)+hyY$Sfs|U7?CkjYF+iKIA{pfjwqIDDY>=f=b_P>SBF!KXd6a`j zp_z{&sWu^03$$5Lwa^B#)w;?y6Zs%$VajaCBTiR+T7WEt-eOV?fepEqY&gvzV_Hxr z462n1V+4u5^tQI20BS2VzmIrd#NOcPbY6~?%9Er8QRo&a(v}P4x*l=8Q#yIyY}z+U zU@pd!{6-;VRVwe|(6n%E*b?-4-$X8zn7c ziDMqfHl<`k z>N?vT+2O0_P0@msXzE!hWu5zO=0rQR@QLRctq9SJDyF!tgNhu9OFp-Y9Mx53x%@k_V8HtU_cTF;J1vIq|Qj@F>PVbxV30W)Vh z10fi=*b~;%+ouS(kayqPiGr-^*SGAJ^5K}&g^+^_Q#JQN12|5V`D-coHt1CcLopPc zlz-JL)yev&Xq0x8IkuB|}D(l$zv}SRIZ+K#2CUCUO2?2B9?%6z$TAUwFsM?~LbE`R-_si;N+p94Z2#9Io-4zRWPJdJ{B&|8;grCp zBegNl2O}XhEtL?8MoI!LkqI-FR$_tFw>cA6BD-NRzY!TV9Svqogi#JEgvW4{3mIY{GD$PKV?@WNI0{P8YO_Q{NIM;>VH~E}HP1rqLr(3d!2zaN#M{drC9B6#dX=T) zND9^j?jZ}Bo1Cu2#vreOG%}cG7+MOr0_F$haUjQaVm##82oNuDpwayYBt^(-Hw9oO zNTYFzN{RrL+SD@L29ntDqH!v6E8-Jf$)*#8^28hvD_B*s0Z&*qMSRI%l%+{JmGKQ6 z{=`P~8Th6M)q>SuF?c5_vJ=6>8$gc%SVsCcENsr<%O8&RFAffm_P3W6YTj9={V3tt z4e%)-oj2AXV-`rj<8W;d{6YYv1oLhsBEL?vw`?eKVtGp6g~NnqOU}|nbn<8{SST<$ z`4e1M5#D(y#XU|zU~K?q$OUz=*|K_VZ-li-R~&Y-(>5Ey;x(7!MQC=T733q4G}U!$ z`>DEk1!_e#TdDxmcwq|JU%}uy>27t zV)zXzd7P#`S>{6;d`fTn9-63{@p>e1*HWjU$0MgV$>3J6>&ov(@|B$ezX{&F={unL z>>iI}$$ENTdW9_pDg(GGk|Q|UD!#1T9s0s;fF?%`spJk&u9#xZJ+$e-j4LY=)XlGZ zOZ{1_oJ__?Dpenzfw)~DW!!{tW{KtDeIO*;+PN$F#p*UodOqBS=xpop|x_KJ?N->4I;^IJ^O-;k= z04POHon``d(^w31oxFkio(Uf70iXj?b2^lPmIXfd7}lj#>G7_^fjg&XFVj#o)hX$) zpz7F_4U6WeCg`bAP5?|2$|FRQ-hK0pMxqqrB_k#-4JkFII7t)$r3mVWO#G_!5;VMD+L&&4}Hyn}*Ffn^+DFSn@i+;Sfp zB)9jFXW?l&%y%iLsPkr`z{a~VPu?D(OjPmqH7;@aisvKmy$`F_&8@hysJD;Q3>8e+ ze>pvV8Q>7nKsj^kSYFvO12;)$gv=v%fSiZ@;v+ja_K`m{=6S`yn0IcsZH0Z2iyDQd$4AxxBjmp#S;(^*@y>z@PsI{q4Vl{+HH27#}zqJ{M1b3HHM% z-wA)2${ga-%)J@hf&brJE5`p^S>9NGSpQ!_|7#?)LCmF$hBpuvBIc7OZUSxPo)oqm z`*Ct90+EF5`)&O;fFZRW){VXxrkUu#g{raT)x(19sjVpzYk+Q``_^35=mDBXE1H8u zy-QaE+~jULs(|N7=zih*Ss!>hi@ti*A!S*kD00mB#xvF!#CS>Vh$L*VuKkS#8tye^ zhe+X-0>(*M2qjCWd4}TLAdO=_fxAqevR_38PKbc`+#*doUS)t%n57fctKt*V3|kE9SYiSECU!SU6Lo3FOOl*sSJ4#|#2Y^9 z4zEO}J`74>ykKEpd3+6!fww|ngVjgqa%9*SBCg(?h)K)`0`{r`|F%JkDInm*5sn7@ z#%znysk4)x5+6Gb46chtizfPFR)HwAy{l`#aGJIz&qA(8ZiajkxQ&t-(>17 zx%OR0pp9+bv7U{iEWmKR1>4ndN4N%TIfb0nsmr)cezHxYwdK8o;VHf;QT7+7CJu|U zqRTBO&xbc;{(x;23PD4PWBQ~p6S__zGP+N~`KBpf*RjH`(7pfAxLZTH`n(;gB}+Su zCTu&bJZJSPRgAjre7fWAhIX*$n6x>k?LPfvPl|1|bV`#s^ZT_!ID-vle%6KrYsk5vJ$u-VBgz{{>SPm zIp-POGSF>)Jk1e&7$pqZW=rYV)Qz4)v=DV_sl!H19MCbxAE@hyw+rW=KE`N_$*m4L zBGHukjt}zqhV@L-dn`=Z%i}YI<2i>>2hK}S_oJ2j2EQZTA;Kw-lBoa;5IIXk(7-_y zS}XcQBw#J<;Co5NR|Jm%EmD(=r+|~fqY#X=9q}#~Nf@x5L=9v`YjIY43_ZAwDVbVJ z2d--8V8k;%z%w4r<>@p>!(NoLCbw@@X?1{eAO_(O(J)EPOLH*zrelFGT1G&qKc9MC zr3uZZ0#&M9HSl_rqBshC8A&77;D8vu&z!>(2m6;aN~AL>O&F^|nq>h0OL6dM5<&(+ zKYDdT_o`qD9EF&>)0@9ub*(41C5^E<$G-l`N3c@ zmxu#`5PMRe3`78o`k8Q0KZ$r(VXBoF-q0*oisGjC<=7LCOeB)(5opGC7h7)Y#T%QQ zCKT_?>XqmC`^{Y|x4gQ3FEy)P|1QWm7^KNCy8Kw!=bY<*d408%|7Ue=efeSi{~rG- z!TUea6#rg>rT){yyh9xFX%gi(i-R~qKML7s1wToVJr^LviezxJhb(i8B9TH<(GrwO zMhHz&?W8wR36!01peA>+bM+kaw*o*TXdCRZhRg@Rx@0u8%>NHO8sQJeJxwyz)0eS?Y zW1UU2eyYH1%_3=q1|Zxhs)}HfRoJ``y_8&{1kw$~rASyD^)mzr_R}l8q(ze1Ss}%s zjs!-qO$|3iq@J=tcBsNt6i(|iXqI@=Pm;l|X1 z#~%Jl?d-ZeI3=eOo;WZun#$jPqd5&oWUY?Ntiihww%AiE7`l+{SzNOdak>9)((L`u z=CkhC?_I*Tt*?9S;xIKDEzDMJYr0j+#V;F#7y^VX7(KkU=tg>KR-d(+gHZ(Th0`pq zh$*8Is}PGk^75cK63jF+X~uoxn4M%Q8g4KL{9Y!KE<49R-)ID^X&^?Q1tF;kYod+I z=!CipERTQMNh6L%PiQEP_)6ms&CcQ38_hYU00A(8;~Tz?2XvTZprXRMwGcMp{0+q* z8NgL%5a^;1Ft^bPKq1#`G+H*Nt}0*yLZW8Mbiw-(1-k8W>&NNjb~P z9lx#aJZxyD^T_>XoGV7JJU%o$?ije`44Us;RfjcCcUiX0mbOeH1L}Ru)wR>Ubd*uJ zx59p`M-(6I#BtL$xmEB3(3TA>8qf{(*)vUCm!e%e)a6WMaT*czwy*(cHMd(*86H#* zJ@cFjw>y=irfYu*f&eGcd8B&RHQkgL`aCIM z^aJbcVCGMoeEb1&xex|L7x(r}m!+IS-!p%;cv+n*2C%*xRfDHT?Y331Qv7J|xDx!O z|J!fOdr*BK*p8`{qN{J)4Q)?7^Y@mT9nLw-&MmR+ZC2Qr@Hcak3)+Fvg`jV5w3oq& zAh|^Ywv|~4Z2?J2b-)yoT!L0vrfizz=@gfVoc8lf2o>Wwh3#Mxi7=?xyG>W`=%o<| z%#NWCEi>HO6-OUcxR@PB3zchKe;JpvJwsHb+95U}^%K=+x3<6dml4cw-<>bLp?F~M z3Cq&DC(0?nvNF6hpYg-`GuwaDZ{px3-C>_~?V<>Rz-d#-{t57(sMcRZp_&vNpE>^1#?neT{?pQf z{`ZU8evT?ghPc{^^89-WYl)R8y^#KBSNg$*Zd5eaiX1?OomNDKp~oC{5q?#VA7PlDgVQ z$snGFLN*)CXWwr(S|ICHz51$QP9Bd^A-#!tzGtpUiW*AF&BcE-|MBem^X;$RG=s;_ zTK{M*ww?v&%WvSb`u+spSUi9HP&|)giz*;0rrFn3{iyuF zReW5rjC3?6^cz0WvBcGZu6#ft_D3f|00YcD3_c|YA-W!82wMjc<1dpl zSMsS|F6LHE?LaKtO)ScC% zCRKPAK*^R(Lb!)nN$06(%eR~m(vftAg6!L(d3Pn0R1RX3`QFd7{v91 zZ@#gG3Jhlp7hkxQh~aEm_1i6C`Op?~o)wC!33E%*qrx;rvM@pO3C15hRa|D1|g;ME8^a({Vnru?_OxwKTm z|17O8J>Y--mGD1xa$~Sa|4(-cM~Hlc;SHW2zhF``7ubu?<5UBE+ANGR^$x=iLHtNO zXCMlYtq8P~lloABeO1gxSd{EKi*gZAREa4gvdcFIy8mo33LD6q1~I@shO8ndB+Bo_ z2O|vGg;QZ7m;jp?Cm@=#kj7JS3J@FdD+t$h1=+sB0OD$dQ_VZtRj3bX8pUvk0VWc8 zEi%?&oC1Wh0gMmp3r_UVvm8_8QNSY(`A;B1{9D0BJPBi}oP;cdv?}QY0m*TCDFfHQ z1hep5NDRy%q~w28>h$Z+k5Zq+et^64Jj= zxEm1@P8vh7LO^!4q~aS2AV5Q!rg^|#N5J|JUKIwmpXSJuW(7(z2rEM_tTkK?ZOU^Q zM+%Fr9;)wlco=3vN)ZCBNlJ{JgkaGS(Pg4S6G5gth_b>burM)F8b&a|6*Ee&WdNRT zQ;4xTO+rAMC{_8GPo$2CLW+1D943upnmq`#V+09AwiKAr%ASy!EX|rQ9Bo?mHp)OG z1B~Umjia??pT;UQ1pe!01Jt@@42A+09E>i9BdMYG8sDB0?jK75ue*Fs#ONzwiUS`C z3e*GW8Qd@__wYfMj-RL6Qs|psw9yO2EYq8kZ4KX0&Ew%on&z)y%CzOc)w-I@4RFsi z0|B=(9zjrO{F-9`q>?2yaKSk1Q`dGYJI?sO6!!Id zB6!OHeg{Vn1k6Yw;tp(p)XhjLGW5OMUX@`-Td6Q(=r~GLOWSTkUFJPjP+I`z5}PI= zET8d2FSjrqOmS;LbU#P$_R^t-JnEY%KaY-N^ zRjv8;d;06P)vH+GIOS*uBF^FOj16|lTXzcgY-a*x$DO>XD0qeSsZ?H}^rGpmYjiQw z6{-|sH7iRks&vS{evce*tH;(1yCU1WYnbQQj*2bT1NXhMRoApt&BE93Rry;RqcSHZ zFg?+Tc!jX%Pz(RQt(rKqk(m{5CQvs`ZGSM6?W(QP-zEK6(|U_KOdtYK)9j1%S#K*j zD+z6|&%tUTVPB0wZwnTh8V{bU1=x^w6X^>`w5`s2o~s24=O#!xW~VY6liH{NPZ3aR zG{cl1wwI{Bn}IY#Tk9&I*9y{Zvj|iZRU_SMsWPm?mRovl-Rkq*NG$q@F9`9v3l>H_ z7^T@u2NXb0XeYJ#x(8F~7QzQqhWH6|w)#t!wJmjXpo7xZkh||OPxSQ2R|qstcf5|Y zifx+z%Xs^wBTIRc0LUGXao`V~CMue)k@&ZmN+}F?lAvxV>=1nOjn`89_PBtGDa3Bq zGiAXXSgWfZYprv65V6>dF|?EIwZmg*P1ja^|usBa0 z3_=-=V`XOD4HBiA-iD0mEr4}IHODB60Q2L2W{X8no)m#xr9)Pd=y*KDU09PikKVMl zyr>CK4X*B;Wgm}aJ22}!(;d+grF($6$7yM1@Ww>bZN!X1(t_I2yH#6u@k*iEk7)x{ z)MkPK5m{1|G}WtsGBemUII%u8nu2{0y#j&^&`nSqYbc2v}2tcc2ki$snEoqwMQ4E_t z`ohF9Ub{%*pyT2B@e2$v3!w@?cAril-;HD-1b|RN*9VMJ00Ni#HYsD$^zC%QWDH?J zQA>uQzk!?z5)V3$-dQHZYaYLafWA5oCwSVVb_=r+p=0fT{s|2fk*SYX!R zZ2xa(7cY;W?-%FGeBf0k1_A`Q;x}3l&l`kG@~+f79DXQv@0e8$_)0fm|7ick{!70N zc&?!O$ZF%@z{Ys|8A~zXG9=-l;0q>pLCA9++_x9LF`c$A7iowm#d*a>?q+6H)jaFd zvv~(m;giuH%>!1eD}VPcLiqKTMmav$85Bsw>;d&&gJS56&i2g0_Ee(qGo(Lqu)q!iKtH6pIaBIwqw~?% zA*1ra1YxirZjn4@VhEeN6vT#>q_c)LVk!osCTe>b8aR05Ol5>=F(9xpYQE`|pfFlC zu&{r{quZ9di49}Xx>T6~aL3p&7STl>ngL-1X=vIC2PVEdiJ|UYwXv@tr>QC49u}Yq|pX!v@NQD=-58cQdOpg$} z_rWKA7d%av;z7{wIRbXq$ktK|?P^cOi25DUCb_1qwx&i}3a!fo8<#Sk(a3gmfNW$s zt=Mtm!$A#i&!%44TZ!&1jj)?$R*&zJy1sUcWdZS8D2wWWxDbYfmaC^j)5;iiG3eNN z(%Mf4NZ#}j@%N$b{&xv0-h6sOwE@QTQ=lBAa)<{ zzZLioib?f}B0$W%+PXBDsKb!Q=xAf0ThWQvLPh>JoiL8BD$9l1UY#z{`*N4izmjU1YWUOH z+Z{5ur3L{2a3==ycWF@39T5T~Ksrr(bLi?1fRNWvh|~sVLroy4J(B_)@dO!~7p94v zhyg@mg&T1^9Vd*#_u!~q*uvO3{qs%oyyQ**tl=K4G}H>zrG%uy4a`~Nvjb5TLTzMO-SpD5nYfX8#x z9_Y{j6(r2NIq2jgG3I$R!1Njww7mCo(2F2SK?NOrK1cm42yReOAD_=re~iIaO4Z@< zJfi`quc}di=QHbTm-&)HEQQc57=ram#LXD~*S)t^ShknjR=VD3QxcKGB&WJBLrmaH{TDBUU zcHOEY(5XfbTAHonG}8^iA9}GQ;zvcU_w{>vZy(-H-u3kS!{nT$6HUZCaNq06bBoZk zwsC{Uv!q*bT&lL4GObd$1hZLVlJ$z+-%d(lcW+hGIi#pdxV4mME-tda3NfK@p}Iyx zQs-2MCE?@vfTE!1*MJV8KqXd{iR6i(lLD0G>7;|aXI0Wo5nKlN@)E#uDkv*PO^=dG z6~GCuv_uW{fDH*gpLi^)MuFe}rzHVlIlGM0K98L(mUV$fhm@GvG**pkN+DEX91ICr zv?9PO0&R*8<9w~7zLsavn02t#L>=T7m5DtT?>d;-efMC`rg2jhNvDt6-D}7bNIFbH zr($4wrLpLz?}B^Ju^KaHR^k3^c8O|Y=at*a8=rE&o@Hq7aRz#u6;H6OJGKcd^dWnN zt$6sK1SzGIDHnVGB0DdDcGDwcO<;2B$DUfm-x%u91<1m&6y(!4h_XP(U1 z9!;5h&X8a4Uen}Pt(q%aqJF|`nW|YUEf!n6@XB3>1;RBex>#Vwf-V+y*Rx^@w~)8t z5G$B%)8Ru~VJ0&ci@6*L5#EP!di}SqQk^J2S*^_IvPPU|jdE-)_l8x&h+Y}PjNa1{ zL+bHwBx#~|5ckZX_ms9BlhA`#krL&?jHB0raz#QJ&>@OL*8BRs*MMN88OBVj|9;?3 zsx$U}shQ(nRn(mW^r!Bk>h6Cupts+T!0rPUAQ15wig;lvWYWkfm4VDN%o7gT!7-0O zA3dDnXb_qGg6804|Mc*`_Ag!>Ki|JNJH9yH{mcH|*~P)(nR5JB7Gg-0M1PV0Kd=Qp zyHX)K)fc<0F^uAv3ZYsGVuTKOEIO3N`w^InzywAU2nsywMFqF%8eYM7hDY$1b-D*R z(nQPm7Z#SRSX9nTQIVN5o15aMHI7lWxjeZ3doS^kzBm*!8 zf<7@n0h9}S3M6TdVow?IUI5%3{VD*j&l(K_j|a~camfcaOcGI;Z863;upz$zbT1^Y zV0)*hsJS%0eGvVI=TSe3qx>e&?o!xA=S!$BEGATTbO?RpG|yB+^*GTl-{40RMG1`$ zA`lvCIq$sK6bzT6cx}sTu0M23^ELLmJY&qA1lcJfiEUIVi_ba|$HJR!#aH#v+Ju0$lmM*?COBa9DEZvI6%(ud-j#T{6JmRq` zSasSvy9AY*xl6c3=-DGR2f!fowuWP27`%7etW>@*nNY>gEsj#-;fzfb7L?sXZSeqJ zl#W_88`6k+nlbE?D+u^M;IYywHO5gG#-cPy^r^Ct0Pt^5N#HdWUz+C9&q@JxmiS54 z?k{^f^_1X=u~W#j=8B-IApU}Vs-PC37p0zy@npnhBy0MvUz^^G@x6PlX;k+eKip+r zA$*42jB*}F11nzXQ->|6WH0(|zrgavCy_eI#KPyi%#;yT9Yv6ua%ES#GgbmCpe?!Lq)6}LmsL_ZgUG~?70EafIqz927WN#Vdja zU|1d+p$qjP3O>UJBcUwxuLXbmf=`-m*y>A>>jwVpR1;wS#-Gy0tTf32wky67fHRb- zV*(fIIu?LuXz0QiWmpf633KVjns%}4Hd3^zqT}9JPX;eG^h{L0j*wc>9qDwZZJJ%o zEU%wenWqdBAEen&S*&$gCiJu?dieaTx0kAkVcRn%&64@qoeCua(IXvsxSD)0jFM30 z&e5Tp=nsvu#LT5OiZk@b`G|3D-1fgmzA5Y(D>w1nE%=6Yl~7?v$lJCsrWAdnxTDo= z1*ZHxwgXe=&Mm=|ylY!%Yr(f!?9w;ilzNF_I53bWxtTN^SY%m$N>E7aH(Mp-L~jKI zyqI3rn$F%=^zR6vq74k?uc|ky#$itjB1%lMU#mG+%>aEsYwY0O*%VW>rWtYy!6`7u zO3jJm=paFb&^DqnP$efjeDO%RQ_=`nvNP0~y|3RJy0>E7tCVL!Z(shJE$(U>mn!<# z{~W#Rf1&b=<5wpx|ZgWlE~Jm`I;vBMfKs8EgJ!hNZ3A$3R~Fh(8bVq9S~gntjfc^^Zx zmv=r;Tb~km!`tGt9Z@e7#e8g=edQ9w_<@!LroDLPJ?WMKr_{0<#hkHK`eK8#AS$(L zwuN66Jks7jD%QUB8&w|9!AK0=iV#`}%cYjtjZIebJ3XkA!}R+=(?|C=*c{6@+p2TF zSpU=&GeGF_q!hQ4?u`tR3+(}ce)>*bwx$pY4ZW^wwo9<}Oxwm-|_IEk&jSyd^0c!G^NP2N;n>Lc(jb3egZl3lI%6;0YyJ#zac^ z!Eg(*&kCM#h>-^2S`A1h3IPi|;IR&XL5&U#QA&d3>{#-x?y-*1Is2f2DEm$&x3Jo{ zX#n=GM3PINQwP&b!fYE5bHxr?P5Og)OKq1vZvf$v#&AXvU$IdtxLaenaWEYU;K~PJ zaN4Wpcjw@%(OK3)9bwLP)9~gbz4kV_EWJLYATIYjgo+TTzLnpQ%kgORr&` zcMCU^u6=zRhP!uQI&JiZvc@P1LyWQCVMZbbEKK>+yllCjGWh_D2J?lVEAuLGSPuWj!a=-Jl3g+90f6T zby<;IJgEB9C??rLR@h6pNAZU>B!;tfum{zJRTz*2%M-4%DzZ(4VJkB_BE%T*=->}uxXUSWO?_?w zxdujN6`6+aQ+~TFjU~z9mwW;NGvDIrr&6UCuU}p3PO{W?Zi|8Q`PQ6HN^sBUmhrBb z{HfrKRQL(Iz8z8b9I3)O&Tvbr#mIS1MGW8AIQQ7f8O!P~72(ZjI8=mV2&|4>fu~&n>H@)N% zzp1H|IZ}CD9g@&ZmC&UBnN>+&V_PL}w%TsqtAqFJ+C4ipcX#ZKyvt@^{j0PI-8*#* zo(p0LsHGuFu3#XwV9-|Qcsb2qZ4?X>+~6VjMOFL<9G;(4Zimkv|6yruePg{C|6y%u z?IHii7tR0iD&{#PiNt{810f};byQ-H24rf;JIdp)KK(~I?}v8}F}GB0yC-9q8=V24 z)JJE~%?yrDNzHOC`ZjpLK->M*wTF6wmkhU8P5OwY=@fIq+xkySL8vRTkLiRC*E~y_ zy>p!o19!GJ><|1%Dbg2(bvJ`SB@V6ph5P&ZPw0;lA<7a3?4*}Vfn?r6fnU0kcXwRMd9;QVHg{8#I z22J;62PQ)@K29;CiWs*r6$kuDr0kd`({W#9)~Az0^hL-zVmEbD*v;T&&6$w)<8<1m zb3={KsRGqVC6PGk?VV?ezFVjEk{ASmM_WHMk2cCl&UIh>9Zp4!0R^4gFN;mXh{uS;Hs7$uy5D|tK3$GY z>wdP9dR00?D=ATWq<)8lBfMo})(!*2Vx6Z3rPz7OCQ%%>&|@2YH8MO!rh|N%@i@Lg z&n8q5^BW9r>I9C7q+X|#PK~!&-&F)b&~3KOjtS!kzna`^&hS&mz5_0EOZ8hOET4{O z4HmhI<(LlfEB<1{!QElojF;9PzS?EmtY27gy3V$W zVYj-%u2-Qrq(rl=+vM@N(>U+gFk^M==8B$*DvOi4f7|&3DSRk0@D}>38QAimR}?Z> z`f0y9<*0v!C4T#jeMKdT-BhKDLkG3mM6?v$(W!e|Jy7-c4J}ar z!R{P2@!xb}G`V;Nmo=Rv^uulhcjSLw-z>@ho2#oU5Ay$)l>bXMWjCjvxj?&_|9+A0 zK!m)2e|1@u1{Z&k?>ZR-(;kZj2VL%Q7A9CtR5A*p-^S$yulH17`$xAP8e#GAe_UL= z`srl<;^Ofle7Cs(X+W005Jp!EZMAGA;bc@}UG{{9nV2oZ`yljlWt9LX!^Qj-{;v=t4fa&nG22~VM7sP&LEKC zQ#EPnwMiS?7ih%=Qoo9R#=)^SnqcNN@y}_LsaQ5ydd*azQVJ03H_Z43PqGyBKS5!f zkP~ZJ<%0&SpN2OT17_oVXCirq?gz~*y{6O|7ErPMw3296W|_Ou8Fw<0`o31mv0j#5 zcfNkF3EcKtb^PVb)W@+`c3<8q^Es(c?^y5yKH=!~8-3UYkdJ1qf7^_6oM)crS=68A zLO#=ok!My3`o_2_b-i{`u%72pX&<@Afczdq5zZQlFEa>!;%!f~P&dCbGC6pMLt8(G z`RkT3(@a5mNg&%{&R*)ck7pjs=mc?( zRf?tT29$*nqR;YZ5KS;u5=7a1*+75ie#*136Gn0zNeGBE;#U!9kRmCkg8j$(=4K0^ z>p<~DC2gW?=#cowwrrFt@7Od!43K1!4?&{vTGzmqVH0gt$Wzger}81ehl zD9$@kVo5b5TR<8MKnYP)zo(UnN>Rt124${}^Y`&l&5MeU~|Y+Ay{ zq66Mg@`6!h_Q7cM=V5C>6A zn7YbiB6hsGh5B|!Ax@|LI2zc_2Q3tlKqHC_ zXc_Yqbfu?gC;_(zs>Eza?l@oq3(N~jf$~D+S=x|n?=Pq5e*s>%U~+7!Tyq$~9RP{Y-a6q4uJ#(?fMCSaOh6%@*^=~Fz0t|YW_XR{@*V6!J57Nur z@;_K0J{A1qPWgXxwUqy3ee*&8`z6kQwMgIBU1K$0JS?R@_xh*%zX&7H`!1f{!2ItR zJ<%S)qGQY;^|9-JeQ9&Eu>Mz8HkKap|9nyV&)MH!9lreGV(0Aa%>G8Hn-NZcqAI4_9`FpL2D(6Ca3jbHXA*4(>@^6k922za zY-LdHMn#%eR59*7I)PE*!YvYbx%vuMezG7;W9-#21d{@ZmXf-f58GU!Y36)zoH|KX z2QinD)h`0nTTVn`oF$}_^$3v*?#mM~POo@eDuaR%ASlwT3GyY+bF7kPCh0LI$Su5s znAiRjZNtA5+C8V3d-ohXc!8GJ=r^T`x~X&3*M;A>*}%{ETM${38)c|LKfzzXi;&}> zpxYH@%5`rVZ4r92jUXRrM*xv+*9A$sF#AJ);$F65V^OEW|lL8Z^BDgDr%#1eSDN&jx zVHyzzk+MnZnsj^Y+Dsha|H!gw;%rzv2F|-t2{qL2#SICpA%%cX8{WyL3ElDG#}MK{ zKsa3~@yeQ~x>ZouSrU*ZT6z4Z6TB*_@dTb{+}WO}-O?f{X+zXjTljJ$Rgy0XBiF<5 z(+6p0Qb6t@jUI3~eTIyaG{4w&AE0y1C9!}`Tt0JM5P>bbZTUP3M&+E!))g}AqFh$H z9;TV_n=}vWx-EkhWc&5aH!e-Pdg`0T!_aM)1K|70Bm32Sbjt+Yt<;{Tn8i0jeUiv> zX4cTP!y>eLR8S#;(N;1*(^TOQZryN z+&|M{oebh`Yi0|aXXXp7@%G1gX2ackZ#`s~3#a>#j@;Re@D~n#KPtET-QAg|GcF*s z2Dvs<@PD`i{yFb|O2Ic(iH}a>G?$;x{x7Z$fjB#U2s z1pyK=OJG*14}?K_>hPDxXBT_NM@Rd6XZz0;5QdV(b=f&0aL~ot{KD%G`~bWOMBfD; zBN6WO(`in6ah(dO^!gy?SLkb{Uc2@dm6xt((7!!4<~NWDJ?3Dw0x5&CT%?1+G(#je z8moFL{sg&q<0*m?KV?Ga@LeMg)77nqVY}W+C55VN>wt553^qZN@D8J1v}qjEL{R7o z*1thh%t)}kCr{V_PD=I~tuc_~gO4FjpfZnvo?tSGBc+4@>tI9LVr&@2Ia!HNPDgV~ zlIA0H&5{_aMhtS5&z-B>ewq@L0P&p$4657+5Vjt({qZEfp{QZX-V(OyC)A~#7HUru ze#N60@4-#DO7Ls|@i)McLbTbn=;M(5MaaAbDhfklNb{%~@I#dUIPK#XGP*-6XD?`_ zWH^5ia7^N6juxXLrhh8INrgJAIlMVmf3)FymlERT{c!N2tz(L{?Lc~HG_`v)n=Ko& z8Kq)X&!F)=#`jS9KODU9<)e#>=lefjT%b5z;%8U(sbY5b-dpg@Yn)eEx!<^}pk2-2 zz|loM#>73qa5sRKrAgXexQz1Aw7;-LESrwUX#yW(`V;6EC-t1sT5pphw8YO~FnL;@ zL8G-*DTG!Hrgev!xzUvzie?Nr?JqS0ZZ@CaZNL*DXkV%6+SxSgr_?NM|2B)3?9>oU zFB2G>#$7plG6~qBHx+HQc@<_vO{1z9-(VsFG!B2jTvO9r zo}@lx%=ZG?AprIaf4L#ojTM!WDb3cJ*hC@j93X0duV&En!q({Ati?N+IwsK&cbJF&v2YGw?$0QH*3 zIV_f9kvz%~-wQ?X?+@-Ou=TyViWTnB)tD!jQ;Z0M1@zBiF^cAbMFt8P?R`Lk6bO1D z{UP(<1G=uGV%($KxJQ4oDOS_^sV2Gj!b)q0x`FPax`8pe4&$MqrBJ(F&=cG*RQ|K4 ztm)`yLY<_^9T6N0dh88`83vWzsyGg61n6yH2u$bo`{KOcwoEsa_-uQD51h!kZFWAt z{**_keH&*^IAS|%Gpe))0c~C`%>$SQ7vlG`=TBMpN{8QtpA^eg@ zNv(Wo^$C`FsFMIYYsPorfKp|rA+JSkLxS>e088s$5yQIi``ET~pAQC^ z;JIkNw|ZxNYZ~z|y+&6R%&BkqfmSK_>Xu`xfHD-llf-2*ieMHQ zFcIl`bR}dQ^xWWQFQb7@H~5G~N{3gP*u=fOFVlFM>#do>E~&JmIfQ3hB7JA82H;ZE zdi~jzoHO-*j`0048o)d7-y7?jCH(iw`a}GmKeql4H)hIh)Yiym6Rk$;2Xn*{L^)=&dZZO+7eDUrJl{V#W!vohjpJRMr?knE50`9G zm|W?EfH6zNq0S>TEJ1we5j^4yYkG z-I~)Clo>)T<~MAbMUrgUNvfs|zCv;zS*xv}0o3$i$9_6F3fL(iF=}|FXWEMmo04EL zjYYkN%B|jX`qtKc%Z!BP3lt{rR83p%A~uJN@s<8cb-1chM4@vP&B8Glo=0KZ8H_g+ zGec8#l{2cc64w^z-T!c%!HNi0G=2z9q395Pf3+Rb^?K7sJM>y`5uJe6|#PyB1*e zi6CQ4C}3L>$>0W4tGJcBY~k@j4-GXOPuh^aVBME`X5;Mvtv;eA@T}4;?OFE~wO2!9}>LUQnm}vgF}% zaVZj!@mz$9b23C2&PZNNJ8K*!i4$OEJhL!V{zFTqMG z9Z?2J&y=^bAkqOl@Ntw4$^JPNh}@O~p6H{wi@qTQrA~*GLk&+JNvBvWI2eMH5a8^f z$H%Z%P#$u!k>d#)@(g412BpD6KnX@@0s#sTC1=>XCUvrnI#i`T*vV}w?Kr(=+iYn| z{e+1BU}}wi#oG-X;7us>J-+i{+T#drxi}faI8C!AmVBa0F0z$YF?wa*97kb`eb1;_ z_8Lg-0D@20vWIZiB~;VKQCJxjF;1_mqet$@K@`0PoQs4!Gnnb#<0`bSqmusJ$`S-| z#0O8|_tJNONWkCUy$fyvqY* zspDa@@sFg@+H&4g*6OX-xH%gsP)$r?fYwD0^%_ zrGKBWW%j+>2xS;~<~%#sCEu_PDxt7*RIqwp-6CtNyo8X)u=w#eW)_r6_MavZSS3iswz$ZsTrT1mJWB+w<_IqYBM!EPApqxj zlzFjee~d0irVTZWhG@(EHXjmhU8S9cH*$8lA z%4pITxHsvcVSTty@$9BceI`FTGsMt)xX6&L23%fXP!a}?o*EW|lU&iKy)+b<*>YEX zLUCJUGYqQ!ebp?C0Fs1R2O2whld7~Ra;-lBl|_O5S}nseJH;MFlI7Pa@&g3EfJl8Z zMYy2M#e^cK^Z1(INOREO!05pWibKtFhFLbGM(c@~U8bn-q;#TyuV<*d#NR-yhxwnx zSRCO3dED#L=}9r(m9t}iIvk3uA?ednkGV*IO4|*li1RJ@*!m`wI~^s84k>8$MCJ$r zl#>{S1I%s^Y8|U!Gp?+2CwnJ9&b0SI&9vXiBG1&p-(_Z2^_2DwlROSi z#pM{s9l@h80;ouU2qQQrlHN-&enb54&O~Gb5nW+&Q{~4Q0J*(UmX5{Zet0R^x0_Ge z?353A7O~~EVEG9JUx_j?Oy9BPmGviV1jl@oZ>d-w3ZyGB^gi;53cc^FGhi&3+CX0f z_3WEIux;k3h^Y|t@)kZMcy8#zeL*27bB5V4tsQifzx~8zyI(5=l}bE|Br=Mn{kkw0M`qC zgvv2E9rvRIRwHN!pa=jv8nkr)7BGcKGf@&o1D>auRC3>cz5WZ6;-6En4B)LEw$95` zp)#W6GN$eZY!{RrbX}L|wuqZV|E3T@RWC@DxdJ~k7FPwLy2ZncWtrGVLW zWDDGaXEj?>E=a>#d<7TTLr;Wt8{E>j0ThiR%T9YOE%wB#YQ%}2F5Odm5jcp_i3(ySx&NYXFjd^L9?P)5 zMUqhWnhnX_S9OXMnh~7vp}dR7c3{ch&024MEiKpM-;gh*3^3fO?SXDf zG)UgzT%_&XvC0zJo%_+9;+Vgh316@>>tpqdSzK>)t#s#N4jJDraVkCY?%;l^1+8CU zU6LcKHPnC1vrhmIL{!cmn@9O&IgZ}pm+J9dw?MV+-Uk@ccEm4EWr{D{$ z7e?9k0wkzk=;28h(9J8Fj&&JHfiVrX8HI6F<~GCVG6G%B1a_S%r+pnkM=kis(bkRmqlltwv!j-jLRx?lNu@l<(#pxp{C zrmB#20kX|Cy$)c~EcI=g2X-O`(@c`bl>)p;6&M2tNw*6{FrKiT(=+@I0GX%#JQE_Q z8aMGShYKnsT)2DWPSatITHC6TJJKp$J9-V)xX0MJMd}9&pooP=w}M~NC}}ntIBboE z8MA#VCzYfc3xpWb2mxS^O?W} zAK`~6@nYL~lY5{7vnvF%Ml1`eYuWsBV zRV`3H%+1Ar1n2)Vc=P1z#Wrg+>J=PB=hj*Cr#T-_6wDp+*|MWZ=7+f$YXt*o3G#@? zV8)Vf@d^bV)H&LINS~D{+=W87g8MR|FC>QfMYSd5{no_MyiT$*xg%!)$N(KKT)`m# z7Gf@^IYv{4PXL=oNrzm1n-u#P(>R7KO$LH+EHLLnj^djRI#h=`J7M)!f}e+0L5n1E zZkr9#sZw*nz@ZWz(Dk>qYejbnlbDqYkiSTQEdOL871QW+fe9$>9E;NBwgLC~Vf1qKqvJ6H$C?lN$x?NFx_92YP)c(Qb2 zaV26f!oCA^5ypms*8U#c0_wFxo9$iB-a%jKF|ur-XU;clj<|f8CP;FRCeklWhlZJB z{3EcT*wis*jh{t&m7$1;Tso|7m?q_X%R4eXmsc!f`PfTzsd8Et%lLkLn&Y~7Z+tY{ zWzRFm)~tu(M717nQUA90zrkd(2-f@<{Hqo(Gd>>ktfTRW!7nmRJ{SIHeQBuz|ND^t z<#+iH_MnBYA!~q0@`Wy2cm)R&US%>NIx@mLpR$PIeT3XS<#YnOz6hD(72GwiL=vW1 zM?I3k_!k+lAJi{A7({5itzj3#*rnvMGDRFF1am}_LKI`L))=BDay$a2V?e}Si7bmk zb$V&k9=XOm7h6j#qJq8Pm@X5mJ41VzFkKxTyrM2SFaB>C4MS~VCf z2BXD54#p^G()mkcAi{wCtkVwQ-Bd$O@hY-=2nM9{<<<7``Wv|Ij!l*cHP!(;5uHgy zP00jA4yqbns5_lpW;_%MK%L4Q^Gw7slY=apvV%4npeV1Qa&1dH>4eFA+Lsj2C<_LQnwNtC3Sg~(oq?tWc%aMr)A0nd=eE(Z z)k6jFE6bZ}Yimmzt3$EE*8tbk zAAA?CEQ@es>AOA;2P=HAvNTxwc5OM_*j(P&SYKb#6nQ@aMrR9ZEi81|@_L&sjH3kH zxp^Kz-q0>vUM1-ZSBRb)yF}nTHNR?yu7kz26zF_%VJTQy3%<3l0M(d?Y@tg!67yW` zwF@LO+Tzi#_^p*q_SfA7~?643_Hn$ant=!!Vdk=2_>H$vw{&@B3cE2bJyh zcZL}ameUT5vwLe5dvE_{uD!Q^ z^Jxy!nwFK1`#}eKKNlmbk{{7NZJE%dFNpNT;G#hKu8ypHXFH;-gMUK&k9zcRI^X&6 zKTAt1RrsIP2mSBwqW?u9V4=G}lfUq<&(RP6edzkPqSL3{1Ma{6*Vg}k_TGHIZ6nzq z{a;Vf(cC)$Z4%r>ZHerWWjWT3wkyeTCXSB-f=v-45Wt{8E%D^{IS+B3;Xc@TlKZKu zUICC=>|{JMnsZ{CKzE_n>grm))qTW&d))tz|NF!C|7Sn+?`;3=4SJRQzum#$(f{|4 zv;TsJ9LTqejiO}jv&8SN-}5`IqVIRf60tmz$A^5ckN{;G`xA)v1Mftp!T!KzY=cV? znQ0JVeczT!(PvA(Cswtfgx!%v<%W5BCGf&fQ^ddGLx8Qsl4LQZf+7!P38gY1O^P97 zousBPKnGE2G#10HPhOC7rIlNbqoKAmQShGn8Kugwv25=4%XD8SmP22^>ww(YaOJG9`mmQ9Z6PIF??4nfuy)jt`VKiEml8mcNQp(Z<{h&J&Hx z=!*O&CNna|@r{F2>KJ=gHU*Ncdb4AmAnxe&n%nh#%VO>uLC6CPfWmQAlt9G6X6mSzJa zMJohb_$I9QP1r2pi;;>p`}t>&wIcKa{(1R{Klyo?wNm@ZwE6@d{rq!-{ezw7JY%g( z*5d3q9SQiGa(?`ST?hHOU`ck(@XIaA!pB+>YbC7Jddng4aD59m$IRc#1-{3akY6l)s6_q6=D#DJ|gvJ*9Q;MD?JSW~g? zmwjdBqo+%x9Y zw0M%=Owv4xzTa4Dkca|dsENRSAMBk;X=!$D9U5{BYN&~HTwDb?Z%qRX9;uE%I}&2X ztpzYir#zF|Uqw;X^2L=Tgw$PeG@A|MNKAH6b}@}pzHBx<^~_H)@Jmed^R{UK;Erk! z!H8S^yihyf*;dEzu4+RBEzxB}Bdrmq=*3+62fPTX-_Xi%<$twoIeQy_BHNqMY3pBx z0LO{PF?|2O*8JYUG}y(R#G-XT?XXYzi*>8!|RNYIj}2Q5RM2qr$~N%{O!8lAdKi>H=?K*=_6^HV%WoaUi; z8Rey+G*=3JO2HaFCYj|>elSd@)_JXua9eaSR$#i}X>vN%hy9e*cfu(_d{>CW1--V0 zvN@mhy~y5;Bz$}?p;dUlCR43DeMILhy4Occt!e<7HhxR=>|=6Z&lgV(Wu>h97QN9_ zs&Q(xoH6xO%h~NQLSNSiWb}q5FgM|DArfHz@1>duxCR@~Hp+ zXU2b>1ZVt5ww+~=s5&Y5c^+t;efjF|vptQ}QO*`2vgrpan}bKFe|W};HbuVUr@j{K z6a)xNiI}PE>!-&DGFl13gJhCk6^e#nnIrb6m5pxuPlMiC0}^J-#!=J|<@E))#-NBo z_T$d0JecyUG{0b3JTqS&r?Z@rg;N`Jf}~``zQ=(Wr-Wcvq<2m}U{uy^=9vg2$ncZp z>1Y;WkTo0eX^=odNeVNAz%Uh(r6O`JqkzefsD{r@K`l1rkUJt0Q+oR)Gzm+Sb3rBfKN5%Vy}9Touv@@bW| zjX;dOnn8dRU~o9=y!~d6Q92IZkYRB}a4zGWx_+0g0L$0mSgpUiC{ov4 zk~qEhE$aTSQC1Ct>h<}`Xw(~y`Cz=>4cGaY_g46z*WDPb^apFb{;(6QuZFALaktYM zhr!ygzusA09}dSGLBRW6BaUlf`@VgsjogAh%#GX%R(cz&o&+jJZ0LO6OYOm6y*iRwd)V-_9G^(ni zBg-IjlOq2jLhyNE6yjP%xWBivdw9CL{BPnE`5);2VOt9SQ2&okrw_S4O8y@!{m1zK zKTiI0tR8ht9B@EJX>oqup5qk)0%U~p+3_yLQ2y0I|| z7kZ;S@}T?ff7@RH{BPQz+i9aU=c;VR(I%L75QbccNG7A&wtww|mR$H3#clh)+v%>B z_J6;#+JC(N{gLy}ZqeKM&P*>Yje-I|+XEq3&8&L_2*!r9IOfGMA-JDnYE8DqmT~LC z`-F>vk6zqT3Nh382(Y>qP&vA#6vin3eU=t{QBxKdDj<>DNqSZLavBtq-M~_ zp)9`5gKTk$H_6q!GI?60IbIUL2}oc1fNGZ_F0hlsLIRv+h|lww!u>dhzUYytu&ADCQ*&qiV}7f#21j` zLm_aXZcy!A=PZ8B}88|6<3XT!F zvdQFZlR5xU3&ke0C-OO?%mGwj#K)(_P0XRhCM2hUd=c=f!8WVC_T*QZM7ZfxSICNR zoCVb`WB$9j1L8qimIejdD>N|xuLR^V1pJj671_s0ke|x*FVB^-1+;^k>;>j>I=ji# z3j_GrZnNW@6tIxBMJFHz#IhTJmQsoD0S;FoI^z^KCEgdfDsci;i(m!}VZ;$d4Q(6% z_9;7=B^HvGUN+Xe0Z!~D<`GWPVnPY2A^@t5eg)VqOcxvhj5JfDDmOH)P__j*wTcOA zAv_l35;zV^)K;H?c$I+3ZcA6UQx*#RHk)%FZycC zaP<%=nrSL4W*Me%pgETBZ!$^ix0>~kCI^_7hpQEVqadGw5gk{tS`!lv-L8LY76y!m zRR&V)9Hb-el}R_)S6j?3_~!8Rcz0*-)!yz)8&?$O>Pk*hneb`!YaQYH%woe2Q^?%3 zUF`Ef6kfNXzuaz{rFOx225EMLTHXp07uPqnPZUucv$0G`2AQ@nNr&(qB-Mp0<7&~8 z0Iys5^{-UIl2M*!(8zs!?lqQN8#gTpGtK3(YE~!JSuF?=4F3a+-V2582D_Q^IVlI_ zfZ%g!qf;AwGkD|SHaDuBAoM<;6K1i+9N!UC2iu z8>pPYCvE&Y%cDy`IfNZl9)G=Xu_33j0c^|tJ$FNnB9Vd3=rugW)82!o7n{ry02-U@ zMVf+dHQSP3t2rY4d9)gU<4y}>Zjl8|Q(}s0nEGwEYGHd^0yV8E6{zJ~uhMWPb||&H zVqWJ#M9+0g6z8HPqwjO zqCS;sJ!gN(3&;aG0_gg;Q8G%eJm>VL^g7frI+8J`VjfV6;0fjsW&wj8d=MnTIV5#7 z)zjo$`N?GaD_heqxoKI6!cK{bBW zNC^|BS%hR=93)DZObOgX0RdPFK>P{^*8*8oYmfThFG>HaW_oGv-5#KiDz|TNsd0;tAE3^! zAOU>?y?)w3%=3axI2gI5^9duUB)SPhGECq#5S_ckkO;Vt{4)9lGlL)iZ*opp%tdg) z0X8`w21PWbOVVF5xS8ecG%WCD#k}t7b$1mxw4~ZD;Vo2kqTh1tvpC&v+H&kW+OFXRQeyS@4Z5QKXrgony={ z3&#~t&_QSf$jUkh)@oV{Cj^pAM8yrJUcz=l6a@JnMF|kx*=wlev6xbcfr}JPg@oZw zMr<5JF?t#W$qgIj(HLZIxH_NDf_x+o)HJ6YOmwmuGKlXDo=BG*5uWqA`h0x@)TSw7 zMh7IKgUAd+43njHTh9MJiy)PE&Rdgos^oKOnwRE`?qDo1sbX4~Qv`jI8fu-%W`;rX zb-@Irx+&rtHi|BJe$FX5M>+)ea#mVQR!U+x=zrMTef#3*N4CYft7DLtln@UukGIcW ze|Wilwk_r9X^pxA`TdV#c zSoH@C{-ehofJ`=z@c&xf{!a(+d(B@PZ2M~ie{CS?Kx7kJn{)%`DgC(Y`D=rT-y66u zJFM#uCaqrSX$zkEy}@OxH))kCwfwaK{P)wrI$I68L&ydxL)H_aIVYb;Vy< z^9O@fe|4?zudl58J*e32`h)(OzrL~RulBmE>#uCMedzit>nnb*+YMWOXQk!$)_X0# zyV`I0gO#nm%)y1z15W%MTvzdu;%wfxm}sJFh-^1Cg+yVh^{z0RQJ_g2?i ze!sWV_j{c#&JgS2^sTL~;=cwkMevWF-|w;&e;qmx3qcIj!+|Uo;@ossTmD+73w2su zzu#MDeZM!@X!)Iuf#2;8T7DP$(Zg^1{q6>|WXCGWley$h1S;~U>gf|O>=Oevu^+Oy5Cuip;>EvhJS8%{gnai zAo!CC_o4V;rT;^>{~BmisC8Jk>-PpfO}p3~7?d6^N4c)?2ec#XFu&Vh_q*L5J@k8n zNpB8Q>2Ab5f34SoKLUSkWdr_Gg<$RVdJ|x5_P3bd!vewylcVBpQiqx&-(tx#_9vcvfI7mU`i3EG?>Vmd%f+_ zvVhI78v5N0c;NTfH~h}phCk^0y8(9nkap{Vx19=wGgumRO6P$1Pp2 z{IM>awyy`3dbBk6{T@!?pkJ;ByXA*L*l9sKp@A)IDGckN|I^fmt?T#J_q)ig``ycd z-(QdW{(6_e9~1qv1%LbiMfSTLe|3W)Us`7?wHvBGXO8-Q>8xL8D?d#^s<^}X+bD}K zXM1P+yQd3f7q)x||0*BgZ22t8=CDDwyr+NGZ8Ns~R{p44H*9%F{;(Pi#y|9h*O_&U zV2qXu(Nv)U=n=yJ@PUyWj@OK-PdZra^6^B4AY}+Hp~=7}sKHv#n7QWp6wd_@Kz##$zYL1N zqoSn1vAQm=WOR=M)7Lxb_j}cCx~E|Ykp&@_{RNF4)bPkGM~!c6Vl$r0Zl4k*^|75G ziwbG}k~hsFDq?Pb)Z_lSuNFz`nOr0d>!Vnu{8jByLkmw5d%lTNsM1hk0&p-bvX5YR zn?bxw7zpk){%HT{Pt*UPVY>}Ri8dIv+Yl{u18GlRqv1rVffnn3di}wm;{Vs{KH|TA zQTm^f3&SEcP?Qut1PUB*NGmP&j8g^$WcuJK=Z8Fs>zQ%LbDC?_vym+4kK zOfM-KXUOC9O6r>v%t?xQxlqq@a)`QunJCh!S(0E+gzNJaXQLEzjZkbFXbS9r9*h&p zlOP6GBl)jVXdKAcq&nJuI7w3>AE1_}#+@2<2yGXQBTk193bVfI_u93}hBh{Dd+t7k z*rQ>ZUP$Vo&XQYGb%pk5ZL2SeKkcuqwDt#UvX5_)IJ)5MInu`9=MDPM1=8llexv zEpJ&AS&MmIYdrM>5u)+$DH~6H0990$zIL0v5!|j4==spH|GO*wPUZaXKiYr3#Pc6#x^niTRDfU=;0#xOE8Q-4M-jSSEoqf>b-myo z*6f(>X0=H7|o?q(5@UM)^^4={4?N z6G!5{mGr<SmkP7h&;Q!blUp1)y2mm&L*T34g0=&2V9mUhonR`LOS82}A zb8txAN#iuP-R)~izX2mH2)tNM-5!64#7y4c1gdtR{jHH)?wDm#AOM9Z<3fy5c6f9K z_U@QZQGk4+eah7pvY2qlgPmVS(&uRujmHw}T)9w12{D{k2nY!7+IY0dpHXs7cM<89 zU)qbh;~rXT<22XT2)LS5#>c}ljiou{oH1gX%=zs#^r-#B^Rz`yyO^;%msemgo`*r6 zN7B<3@jLj4y*b&(%QzH<+ei+cdMrT0x-;NDTwX??|KtfI^9Ic$zm5d@pkYav5vniH z*#m6n0E&hgsevA-Imr!V8YD2c&ZJ;<3e#9HtOwXBHLfsAvpiN}1P!jcN~LR{<3c#g zMnS<}=E2oz5ft1jvQ4JfzmhN7ZJFx%fB*Y`7%WtDy%*@47n2(VnepQ^Z_m_pP!Il~ zbLexjDZB!}2-9e%`Ca7yZol8F#{c#^kMaLsl>C1e{tsI!fe_id#zhfPVh>OPHjr97 z52f)o%||C(%;MsH6vl=n8}57x8QkwjXPS<9Y>_wtZuSro?z!O{m-iuq743W3-EMl6 zSOTNnPWU;$CV)vr1DFE^?&a_j9Q#0-wzLF#(jblk!HyEc3HWFyh-36c-eMjFRw)~k z&3kQCnpUKtN$E`z752Gia~ZE>$QrxThexITfLOe}){tEr5~#%-N9UWY)O{7uRw+Hr zqL`25D4^vD{$Uk|VkoI>vYL4<6-=F>+nh6$x{|yz3tm`F^%8!yQ{M}9I>D_-mx8NN zC|{FLx{CF~mrNIwkDVS{Eg`aB>EeDQUP^uBpa0C<=aB$rF@hK7c}67tNF1ic?ldcI zyoR~2!|=c@4dQ+}R!o(t4`#HzMDRpJpfzvk;`Dc#tJ(2)woi9I>>Zx&9-i)4)FfX=mfmy* zYtbAOIUG?uDN1LlsGkmCbE5dRRQQ=SOTX{%(_E{MfO7=RD+5VB9g5P@S=RiPg~gOu{vRxkfOx0`W@B6=53n z+9jgxLQW`Q4NG}A=h8}J>nNn7?zw$1frTlbadjeEha9XYkC+bpd1@HUZZc{>#IzAZ zb%jYF4)E3reSovXl}miQ_#Ta68F-}yVZPE(>`^z|A#3*gE#qC&Y+ccG*3uG7j2jRZ ziOb^;oCqM$(1p~Mo_32q1NFD{ax}ZI+L-%oKBP7Vr<$Yu5D+>)&f7Ur(ST{y9|Yl} zcJo*TcaxDC1Q>5?5Gp4X+9sX;KZorGluWgn_4EnTWm+$&^@gh~(0o{}G5o=N#CZhM zVK|lk-0AW5;fLKHclO_$?)|W9{^jzP`6r|e5n#Wr4C-yCOWo?Jo-!uxTeE641hmY_ z1~7jn>l*gpS^I77W~*U-?oO*Xo7r3p3iy%Gf^#kB3eg3GZI$I!!wacErNfe%DdN*0 z=EMTzF99D;fVrV%FOTUhjc=K)0Iiq1ueRUppM5yqK0DhzIh;>a^`=65X{kDxm0_%# ztj}<;q2Pro(kQ7DEo|ZEj!ex8t=9CY^|*QAp*guftp!?p{LgBDqlSKXBPz39!!tf% zve|;`yS*6Za^v~ReX?N0>Y3)p!sf)>@Zh_0U~{=LU(kbHH@3H)A0>-{C4Rbx2LF@; zLr*5cHYMQwEIkH3Isg;E$V!YuYhJX_QNCsyZ%ZPDN z_fp_n&Gct^?4Clp(EkPK5N;*1!;1UBZTQcFwQ~IbYH#f^ z|M!;_|Bo}hL|(JtYRue8*N&|KB@f6`o9q?9i&#%z1=A?LQM|!=@mBiNIxmd9TjQ(d z=TUN&W-euV`~rPG-8Z(YEPp4_+XYPM z$Nm51?0+@Ww^)8@3%{WJe0Q}tW)v%?F&j_M4$~38A1tS{0Lclc1bSJ!MA;^TZ|R@F z#dJN8agd#bLCn2zfO&cW0*ea2q6ZDdUCLF5@`Fd?F-X=ABLclcg&-h^mHUX}j<(&Z z0RzaBxC=RZHd$$ONvxBJ6s?<(Gl5iytS`qo7h;ono|N&FRkrcmF14Q~=eL!dHwI;! zk}_7vMoO)`O+v29okV>Ii=TnI12;I~DtaF`WJ@Ek)+F_;vQzYro_7C~<>0gzuA zZgDu$4cTBQ(s)+z_=W}XRd6E^oh1$gp#z$wsCJLfUh*+KM5L358p3!2D2Wy-S%i@) z)HaPw3a~78(-8b8N`&dAA#ir|@@Ny0O(H~X$sv~@;esMuVF0PeG%fNZgNA^*OggR+ zSgRpfT4RkS;i8cP7>+#Ei;@<`c1og5@GwnAOkJuQEDYk#nn*-2Le)49oD8#~cS%spa`bl`r*WKKDHypFV(CcJV&l$YXc5nI zK0>XINkOK1Wws>^`Ae&~xq4UFm{(!4jpicm*=Sm9@lINZ#^deq_qqSUI%rqVCHDq+ zi~o1OyHdIT4OTmk^4}MA|09I*hq`^&oNsl(zv$0=2GN1a*{jMdD&Ag_cSs4US$bc? zN34>U(mni)g81dX$V05A&C(MX+?Slrsp3O> zdLh2ltEp8pg$-+|$UxFZzW&eT{{VzQd%qz5&Wjyd?El^CRpNhogTcz<{r_Kp{|8Bu z7MStKKb>V6T&(tM4uZR;2iXad%RnrKmYDk%xG*RtYfm9UAfK$& zTf&qU9D{dN!1zYzdhe>_26Geh9Y9omK=u-TUGRib2;-4q+5$)kpMfA+K;eSUbGYo( zDsdF6QPDdio@syuIMz}b-lg+clya50C4?RiI{(f1RLc%^cQ={odbJ$sq#>_@Bb3-h z&Vvk-99RW3AO&_R53U4x2iVZ@;Eq-)3;5!qNOLMqr=+9{ZqnmQ1xT@w6ja=9g-O^l zSN;K7l@(w0pGU;*vuXyFIS%w#{B8ps%Yud6Yl<3h;_iGXx5if=|B|U{aY)6HLra zFk+wxn81#ODgZ`{Q0@}pO0SqS0}N$7#JhmSW3L)qV+O{{d{276%Fik_#=A0^_usHU z=HJ7bDtiWH6p0{je8B<${uc$HWzB1z5)-TI8V1n=ugvmb-btiZtHhCuw`gggl!`He zx>)0OdH<6sp7X-lgdQq*G^1!xekCKjbK1n0{JQ`URTT3nWp`2D6bE~UAHLf@ww?1c z$S{N8EYkSym4}i&b-rRiUQ{IH>1;@=y2xiq7|4Z=YD787qDcxmIsX#J2^IllD{vMu z>MIi-VLFCsbj?TVGxQ$PspM=7-@}kz$&v+R9+*vMkU5Fr4Fcl55PJ?cj0O(Bnxrvg zZ@T6&DI7s(J4-^!LgANu%2k@AniZ%^63GRv1PZ_{UA5k_T7rqNY$IlnFN($%drR%V_i9 z=Ab9nmZR1v%B^1o7>xBVHAD6zX*xDF<|Y1G>>uWCL3&0Rb2b@?pAJL`hDlkcyc2eX zFG*<&31B9WgX8of%7BM}BOB#Il2(a-{DXZp3B(Qw+4ehfr`MF#7C8d!bNI9j<3=tm z^K^iKA=SmGC|1bjn72+5_!;d7FmZU+Ak$XBUxfGwd^&ydZrOG+n+|#I>rqq5)TC4o?%gP8I!@r27Yw{x6T7)d#rC;?{{Qd7D-rEE5G2Wfe!q|zGQpLZy^)U zPKp_ZiseR~POnCqs8R3fcm6Hnt2s-gtTIYPA4yBR+$hO$ZxK3Sc zoi-0YF|CwnA6@pnMVCZ4*ueb$ZHZ4)!arO7km!N4q=?X--|!*n$4B-Rkb4&u@BK); zokRsk*kG?w?=W6HX7AIv`Q7=-97m-tn0O0)UuIuPSVOart(Wx5c|PaXjOny;&&h!% zzrDELIWLa#<5}UAd>$?}kj|EKqH5=UnuDjT+jO)vb-`NXvO{we0eC}(nL+9A-yUtX z|APL1agba9ernnG?{@odZ)MP{n?>(Gp zg{-396X*pgoGYG~|8_2oVLC(I3$z~&P@OH^TgF$*jpw8zp)h8zfx@#Dq7K!+b;Mjt zYaow#<;qCjb%*>4mXW0gTHsfy9t9a-qI=6fC(DqsfCmMAyU{QX1@pF;r~NObVBmhI zDVKn>i0Kt~s$$e6(ON%+`Z+E4)DpmK6dBY7Od|1)8Ul*1_i$(U`sd_pGoG^R`0zhK z68RkXZvYV+CFgCtx&cb>PMYSUCxBTA`TL{4 zS-5NR>i)@am_Ug2-{S~0)mF$qF+$ra2qQv+WOCuz>aO%fuwf&jJJ z6DFcxc@vt95T5EZ6AeZ%s8Xp+XB5JsBKnfdF|i%TXxhaQnet+ij)Vy+Wnj_<$tEQ^ zXb7T>knY)%B!R}I5*btpCSd^5LQ53EG;@5Rqv@27q5%BXZGg}^zEzf6hI(yk)4zn0 z`$(x2{`Y_W`+xuEzuEsg;|P#SKmS$!U+Jl_m)nI>2Fz1{NS$aZ9PNkRf6pz62c7$* zz@h(rG?rG1EESF+$&9iu{~6@4I<^Z>S9TQZurXeIrbcg7x^Ei!+=o=cdt*{qz!nAR zUNa3JcmLkm?!jqo+xAuCO*aVJu(k!a4ZuShGa<{`K5X*`j+JXtrhT<&%nSmW6k#p& z5Uf?x^w+!FFZT|=J8ckMpV$%thjhyGj>hzd^o23X*`+@#J9r#K`M1h`2Zf*2^tW!s z)%F=xe89aHbsm&`HyLk`-K|Kg-FC?Qw&XCIgBdyB{p+wB=_Udr@`Rni!N-M4xE2)b z9d`V^IycM>mhQJaCXiQFq%*kn`b6ghhgQ%S;$7Vwi&u~!Cx$f9H!MISHuEB%`w(gb z@8rRhj>iq6rjxs2<8Y?!m8FE7x$B5A?1K#)!sFAD9$fHvcabXGhS8e4#}r+2v%3n! zHuZ7KRF@z=aQjiuoVDk?poO=!MV&ATYE9W(lq^<7p+YoPs#Q(d$tE*4n-av*IL$$2 z0?e`0B~`h>KC)OeSS*+d!%%DG#)SH+4_rcs9KxCSa39*#^+qO_KsPwT0hTzDRGl}xx_-6 zoxi^nmFJRCfOhKl*luRj)qb-=ZeGIL-$73-LReI2`%j+GJ7W5He=>IvJpkHe#SnlnzrWiS_u1d=#(PEOFf|13_vo$YVF+aS=e~H1uRK#81z*PtJB< z;uX>Q!qKb%KPhlWke55w!At>qlS$Vc_y{eSk*2x(<6aHP!?ZxwF+nYs&aIcymtZIY zB?$uWD6t6B;=`j4N5{GrqO zZEKK>@ML?Tl)GqGAf|eUUd?Tv#RhB>z}-)Z59XklbIYkaBlIn%4igjTB>ak4@s_&o z(BM3!)!UGs$9o9?FT3iq#plq_8aVY4c>;;gc>-03S{@PATNsdGV1$VLa)!)t4nj9TGf_6T(;)HKW=RZWMw_3+oITsp+-V5os~nwl zV>$R2J^BZIVfH_T0tig@HKw+5+<$KI|5+KVRsDau-N*b-U!eU@qW~HknMynEW7=^a z(~g_qS?%B;{>4msb=jAcU2j{8NtDJdhv+21Cg~MA=)BXPeNRp_6vpOWai}mF(0Cr9 zID&?*fT_lib|%aDIJ)+A#`$;H5V^$G&Cj}(l-P>-9V@2P44-r~CDe@o&TEBp!3yj5Cs)ywlHVraR zB?Mss_))?xrPCh#!bT~lq>ZL`ay;RVOjklXt&CdvYat`VaF!6J2`Iv4_+g``SK51@y-DKe0_jQF!I^dG zmyWKt@0oWsiNc8#J_P&4Ov_* zWi5(*r2VdxMC>5AVMFPrS<>#99q5_sC7x5ZJ@+oK@em9&x^YiR3eYjXd{rAd}ySm6%UP^BaR;|5P6iDQ#xm4 zpK%w2TH$cBJ4WJO{gTkg=wHmuvnb4Ol4uuXOq= zRs7#UzyB!ze^K~9a;BH&V*A8V_A)4fMem1ckdF?6Bse$00iPKohyp$zh9Gnt6qC6x zPk30ox;OX`T!(zv38fd;ehA7)T^~--)8LXXxLL`JtS9h81$~OU-NdktYT_G=mmtJ9 zy3XD4dbE>{$YS|653(IH=G?LBu6&{nh&>73ac0f*?~D?SUG)v0x)*|ytWDTJPA1%Y zWz$8a;b{Sh&(Cjg9v(!-IVycdjifg%OA`oyC1IOi;)Rg{rr;(W zgdh~LVUW}98b$Ue=z4OFlP@Pd!?9IHAFKs+=(=7 z2b#LjZ8|zngz~5+Er;Ha$}A3Ar6i2tt|5vDaL4&f-Mi8mT-&JKxK_)a*42IEVYqu8 zQk!wWCTJOz()yG(JXE$L$SOPAQ6GOJX}w~AGIjw@$TWm%+D5w;Da!Y0cQr2FGh>^bdWPb;*lo9g)5M*XqBprR40 zU%9nv4nbabsz=7wQ(l-jMa3{E4iMcN=`u+EB-ooKl^jh|ss5CHUF|mWmXoyL%kAYN z%9h)R$&YN~DiVNHpGV4T1k?&VhmqiU3)PHpuFy7i5bVrnB$BX9%xDs$x7!Q>A4W#S zD+5Cnt6APjGt`Hw6Mb14%=}uoJXK03+uCBw%kGzGG?0HeA6ZQJ7-|uAUx~6ke^Hnw zfC+MZ?XIrUYEsZ4&UD&zil~S=%H=X?8zJ%$p2qg!+1`ik{k`qe53lyOziX86`3!7_ z_8BO{cUW1|ERolK%p~NY{lpcr{WpiFyJz<;Q8yBl0?BdTcOn#jb4f_%<%8~}5ca!< z{lh`~FfSTQ^^k-$v!hL_#}hYqRMOBV-)o1HPm7Pi?F+? zjH?MQH1m=OoM>`LsMOPjUVkc>V97vX=~HW(ib9@T${$w8TT1}BZ}gcg1;kO5b1-BO zJ#}tNIgv_&D8xZG4&{e8%C(&*g(c(!F-TXQ70&w~j*_C6V%}5xjUC#qnWUz-__9h15`Qj%ihUS_EmjvO?23|4XkF z4K1e0SbDa_FbRwNDFfPzJcwd#Q`${r;&uxoC=w9CzY|B{1-z6Xx~ic^iGB-;Z4N^2 zM{@gYJp)LfE9-LX!E*~e2(<9;ia=Zd;^8#`@4iQY9&)9m;S9RaI*-$#L~^`Vx^JAx zuZ2X~0}?H5ov>8z1`!J@fK+=c079ufilKIF7oZYn-Ll+p5Sl=_!k0eaA4)^5zpV+_ zo_{s42JV-ZOR;P2;Ro*IB$+7}KG*-9ndH&Ru@BKakn!8{+7K-{!&E*66ASQNp2WCH z=n7b*nRO|<+p=X(=NwxL*YlD=Ytj}HXKan$M(cLCnRT3!hDAgRXmhD#s)Vd-upgA7 zWQ+7F+oxxHNs-D+k+42ROhhVZ)B@24J1Vcier#+GYxi0rOZDDl-i7AIS5w%|;o+RV%?C%}FINCmW`Qdc;Fy{i+yIh3@ZBk7G^MpH^;;FfD5jN`0O)Wlg@1hG0b8gn`=IRUYJf}Ab` z3){iW*1v5W(qUylNHM9I(!9^3Jm;dI>h$)rjOV^n#5yj5Q8W{Ch1C;$txHb=aiS{7 zn$IMVJf$wwk^^b;)meT`zDAfp(dcDRPX5N#08!lJl9j&>wY8Q7g1|QooHxlmCGp6- zH3Gg24s@=iALpGrzM&^5zVf*Qs(rqBt6*Ov1>K>F30psx;Jlxw+2%ThWF2V^Na9of z>}31!^mzMZ_wdYY`&)bQaMIF|M&H6T3^2@?31ZeO&PLA)3*d5IXWWEL8N_1zBE_2z z$aTbD%o81wqwh)nIErJBmaux8p$!a}PuriQ%N^kCa7inHw)7|;ko7ql=4zC6<9io3qhU<9za|( z%hC(DF6fLImX!-^HGiK4xkMqDH?neMlzrbGvpCB1P@7}2GKP-6zIFu7!e1CZJa3Zj z{{d?~*7Fkh#&$_Try;;8c&o6enUJcNXnZRv?&Yn{gDT*P8y29NWKUTbWKn@vo)PJh z8wzuAh^9D7-%9s2g(nZ!K6wepTfWrC(cKU|)tqagEri$hYA$4WVHpDC6GY#x5mKmw zXDQ_7aPE#~7D{DFf^d#1YLCQao}&fT@jp0PKVnFYyy;q>GRY@U1B`N$={Ja^!iPnR zlW*chb?M4-z?&ze?E}4@wi~c^h3XG`yKi3{{b*H#;(ujZ)(|~qo-+n5i)4efS#PX( zozh>s$H8s;vdDu(0A`n0Gd4|XklC)-Ef4=}(hqkl;|^CN(==^rl*E5MA?B;>sXbUv zX@KRgC#>VIjNL4VjnZmS=;YeKQXL0OpgF}Sx{#Zih&icsN)zGC1B^UtF>gHe0})aJ zknz+Xar|M;jKzoW{!m^7*cMt_O*t-hjsVltMkPR9sS33Vg3_~r%0;=1_-wDR4c5{t z1Pw;u6+2cz>frlu!!Du(Ljju7#3=Rt=F-#DIWMHzpK8ysbu-Vg#y5P|6+qhm!4Y*6 zP5VGfoAjHk;s^kUY{nbaL>+=6lZ@`R)|5G>bM=rGzjF(ac8KqzWTezOz%EJSpfnv) z&7)yYN0K(ZxAYQ9`b4)}PgZm8r=m;)!-qfzi(EPapZEnnWQ*va*4HA051ct!RQ&)r zTI-qPaUfTU9|?Htx-y`Oco9ME0c5wS-YsYm8MC}>I&&7?B0@hzBc9IhA-=w67s=5g zPK!#@;Gy*$%>=6pkoFXQZ{9L%&}#go)n)5F>IQ(C0j2GxxSAMS$8o2Xc*l=I@lXG% zTEKVvD3t#6Z#rxIZXecFKK<+N*0|f}O`Qeb*QP;v29PO9pW(N)OYgM1H3^Gnxx4$8`Vv zk`<=$;ImFGR<-NyK8(&5n@`%^R?ZNV&c(`S9d(Ga#Yi>;@bgdGW?P68aZB={cAH6Q zUtXbYgR3WRMBnCj|@+#=_gMsCDXW7`IAvESd(_9{xkP4s1>4K44E+*Y6L;4U^*X2jwh; z&9VmwqmxS(X%9#3DR?nA=69jw*K}JS6w=1+0|6O3y-Js=*Gi2pMx>wMs-iiX=(P~o zT6Nf;O5H+;)Z`Pae2qyfsK}v5xbo(Qz)~>-m}W&F=Mc&`k~bQx$~>YsjglDz-sjP; zz&v6_5&g;=W=*MCG5+SG5g@wRF8)GZ$+#6T5D7(51XJ8?gb;Qa1!|YmfJ!3}28|XI z>Wv&6!DfP6*Gxqb-1lMMV*Kr88d2mac$-haYh1gOYnNB)RGvXDB?b{V5TOns28tq1 zfMDL0j?QU7B@BX)V`+_Hlbr2o#|bt{)qE&&$0^KJ1gN4BU{}IzI-ez?)^7m)B7m*n z9ogEtP4bB+k~KV?NMf)CX86VWqex_NK!F$-%aF)m2a0Ks(Fl6B3!zt5aTSG}V9$%I z6bFk7%JP!1Q8XU&9E;%?3x*Xr(E1CrfgVCFATf#|4S$G%r@f zl=Z6O=&y~tRyuTirq}W&s|i0d`O2v{xQW9lYy}6QJEr!yg4kY+!c&QdDNiJT@LNt< z=~ZF~QVHf|*G)7$N(J)-Tt(Hg8>ZI{iiV+#)!?n`t8+I_HGkMNhrN1K?gD-8N88z- z61ba}f316|PXI^fDt!xO#+7oQf{opzbdK^66y=x%_Ea8!R(OE0V-MWKz^vrs@6ugR z#dWv3YpscMR9f!fpX$-Z?&NGt=c#oiD%-~x7`Dq7rgq!pXTX>>o)0nDdZh_yV>Y_f(^S3`qwm$-KI7q$$%G9jh`#ptwp6J>VDu_aTc@L{A0u zV$Jd58{bye!}+2-Ej+6QtYs~+mbES#r4;1dabw9|z;||6D?6;+=BlPW)a2&S*+rYQ z9p#@ivv!lTth7~<2W=EZJI<4Bv1;5W*oM>ik~?oaw3^r-Q>#IldzMOf_mcSGE)L=H zYuhgmTrQMHn*G}07xo)DIK~OA@=~S?KL*D*vkvTHYM`))`e7F+51aGbE*OC2_RR78 zRUUPAF$hGZF?f~c%4zST7QGJiYmYiyioY<258JYSI0I&Ja##@7PrI0A>N+#=k7&^` zZl;yOf3*t#6$_UgQC*&Ahkdx9p`|rcCiDc%Hf3t|ZPT`Z&K)}Eq^~`TRMn9-UCL7l zX6dwgvsxLu-6+?8TCJ}_DW0(2BSzpKo&U2OnqnaUF3$he@2++#_@OpReyVqx*Om=aq)=wd7$CZ5sLT72VR0&~!OmSLH zaf%L#GACy_^QO)M3Sxevns>7%^{C^kni!@ksXtFIyM*$wIataCEbjhw_|Vk>A-H6}~57kbq6jr^7_Ra{z~*@R2F zOg(RFm^mlc(h4nL)vqNqHxA^i1jmG0gwP&3eC z5{-+Oe9UvOuOL34EZuFChzXA8m${soNtHopr(i?Kv5-bFal?^HKVhkuM~hDcH&%(& zj*4D-42S;dmWJL|>-`nDMp;P}OB!_m{ksn18EN3AN|%iZr7w9bAtqa-C~wQyp3pa6Iefa87{h@BZTFxF4Q`fzT{bt7f%_oX8dVKAZx6cQL*Jw5Pcxopu77je_BR%Y_6Wy?gtr9H zi(z^VkUnATYu{EhJyDJmBnj@Ud6eb={7BF?Q9)s+s1=eBvso0!?Qjxh)+Zr0J)*2J z(rFeHRN(CHFD+Qg?x+)UYO3U=YNu#ri{3iOcR@$4SGlvsVM3Sgva+>MBK4w6bs4L7 zaal&m`5`Vcld{@gbWK*XrbH!8_1&1qg8hyuD1!XP?EAVM@3cifwT9(>Tiz_X1Bn>` zrZ>V3kl-rAGBSdfr)klk-ECzh6yJb}$(o_N1+f2q`Q@6?D420*6$EUd(O24Nj(049!TG zxZqdPnukPzTg3s&^xA<}09>yea6#shC2hw;>{!(|0!0(Npu|qfWTVZ=-dNwBaO8MagtFFYkxsdHV?B ztmF7_msg(QofJx6I*;97xhZAx!$ z-Ji0S-lDK=5`(4(xy4=Z8GU2&`4wS3r8=E75Xs=pfOBvst44 zb1Toa5hVz34jpsyNTdnV4(y7u8YrHOZeQ?qr_O)UlE>gBxBz|?2`1G}`pTj8*80A% ziIhq~k{IHcZW&V+L8|3v3NGEvd&HfjM@H_l90f{w zjle8{2Sof)vvCioOw^z*rT8?7yy<7Zfi}`o7{~$+hyEi^3_0#S4pI)!OwpzCTtaeu) z@!!8J{CAk?itz{UJp@C2I?FOp8Sd9uf&M+Q-BB2zJKMc&SrAn)-(V&!UFB>!w^+qq zXwA(ng-Iyd#>BN!^m_n2{avhuzR?cfyDDkdlve1E!Fjh#K>WHOKo?=fA|Nr4D?bB4 zT+PSi(hjm%#lECO^7|kZHLE9Q22h%$ZMpLdBAZ7BChg%g&UxYNIS&Dn92wud>yU^TeZ$m-}~T4eHWO~0<~q~wteJyl4^SZS}8sz3XYL40k_Nrn6T zE*C<#%S{XAYLn5?{M^1Gw%cr12pQK9PI!1hMk(^M3*t@EfFpb-=NT6T>3Ya;Qef(+ zOSoXe*tO`WBITxHar(|x*_tZ7E?yp8O+y7lR+_NE1K&LM9*VRjNDz_w3l@myO5tIQ z7rIOxlnXUNcwv)WH({!qFvCqbi?s+emhILu;DZ4H4}mRg)OK+YC1@K~-&f<~;18aq zCuwTDUoEgObSzLT;hAO}fBv)ik_01xXOU1!FHFJgeo|g+RXqy@#h8}o!|qE|l{8a+ z>(bwwcovM3^}?tmWRi}Ab$l{Dx|k_6u7C=H_#gI0hBOmc`3cNNqf$w6Nk!r*^A;Vc z6)K|0ql`;7JdKj0u}mEBW7GaZwTk-iG`PNV9YVe-5G`6Fm_Qt%9L-Ac7fRJURM5|= zQp+CfB`3gvhAxrF(lmBtwbDxko%U&6)-B2=QL&p(tMlk8v0SrD%agt&Re`1%_gt2` zqW11ZkWXuOK#FqR97nBa5TDGXHqFR4?TKqTLtKw7RRRC1L(!3nC*3|bs6r|YjSjkI zu$}Gr)mKfmyPNJpX=(=0tgMHIi>6->xWz2{yxr>3Fxpctw*{I%qZ~A{orb+*2(6r& zTT4J~5|@JJWV8^?tUP4o^ooI@Q;l|}T{py?^al*u=UreGNP&uZy>=^=;ZCKq*p@o} zT#pU2p&Ev5*Qm`A*h=gN0!8&Lec5pM{B1h+itJ@BN%IlK&>h2(z#xFYM*k$u z_-7Tv?y8nQoJ}j(X7`nYjNlI)E5TV=qJQop)GbxfE8So&4^%AbPNW{KKML-Zy1{Kz9-EFb%{7 zVhY4p5W{&H#L;Mzb(*Z(WW6TDRQBs^s`l01x%$(v7nxs9+f$RV2X7}D;1W1R=Bu1Y z&q);uOsqrU>X04i!`|8U{@%`qgYDDr)rV@-o1Xci4vaKFkLHtKIc{Ip*V$Gj6O;Y+ z`KEdOa`)Btn|%N`S7aNO`BJs7q%E}?C^cm4iP2orBXO3>3cPU(u8DS%fJw$-Ef1F6 zA$SK9s~=FgrHcCmAppE^ZuXy^dZzXpm4oTizf<9L^-2lJo#YLu(&bXRo4e<;nfvkj zgBDq5ePc?<$a5NWzTo3%{o0n!EF>eTbE!r=YHZePIxVTls94!oTcnq<&td(NUOCT8 zidG-eyXRh`imG2<{G1m@`SDEpv0Izha&6IW>&CDAR%hzp=A^AC34ixd_SGh~nCG)o z%3CoFu2s;1nmk+X^zocH$`9cVZux$r(AVnP!>B1e)8PxX>%$Vn?z~LgL47{Au~G8k zrlzs=&A3k+7#-dZXcKB)t8Lnn`sR|`-)HffV;=X+IwqJKjaL^`gx+ey6es>>ZriF0?HHz&}jUFSwMOs~r`QM)6g zO{CsC4PZ%@EY~zy&~{6ckLq30=%sW9rPh{SyDu*Y7O_XhUiqOAT))4{KH)lw54QsQI%DD%cx$D zewWcy3Iz*;2X86X@4V!EXKpSv{&;tp3IjGSUI9zlCz$El;j_xBF$5*rZ3Fs%D|k7( zLuYK^oSTMPi6nG|cb)e-qe=B;*SwVBIW0>|Xcg=&qSCKYF^a<9ma2-Y+J>$y`ozHf z1YMe1wmQ-(yt;_eS}i5rYpDUynK)vla9WK=Z^X~w|A*c-?UEBp z*#mH)|6gY?SY505{|#1G9{vBmDE~j4=_T9m39i1wG`;Y1$c5|=^JsL={SzLHq}#`x zeYPYjkzdLLu(SjTHjjDUGWc6owkP4UcleL@n9x8-g-#psN812K`VD(m()+$AtJ@Z3 zc_2Vz%(poTia^Flm{wpF)a#Mwl)7drFRK!9eD}P$)L62~m7}%GnQ)ax$2vhP@5!^s z&L&bR@>aUV&nei{Gs9f7B?f#2r{(AXCQeU1eu+XRV+7*iGy)~YJd_ho*Jq-OTJul zTcPWsP8oMIBxV}Kfbm8a9wV^6M}m+5R6b8lG{Uv5;5>@Ke|1o1CgGC;1$mQAVUa%Jr> zxv(;oT5dwN;Cvdy4jHA;t4{FLo?NSjW`MP$@N%y*47$R+aj-e&{fJVXd2|hzJqfPN z##SWE>*aDXpmP0r6YhMWYR%cXWpJ%h%hlQn8uCu#VO5zo92$%CjwDt2dGt!#x71H} z(@*O+eAWJ??wt4NG}W2cO5=}qCz7)GJZcuZRTS+53%g0*DFX}E2sW-yb<=s`dPm#- z(Kg6IYy&LneO7)XO?djL6^>@|OPZxveprI0RLjCD=1yz5KFyDvjhe!jO+cU-!7}W^ z7k2Ud?D&6RwkTl$F24V*bk|l&_rHFpKX{D)`q#k!y92`C?+niOxgvi4c}RClXeW6h zq16E3Hp@W8|qYW``EqBmm4ypxTxNV}L%O7+|1AC`?UE5}>jJfFA(nsG|o4 z5O@Oan?nvD9ssnA@Y5|q@d$vJg_bg$0r)f7juA`6O8tO6USimry@HK+nC6rkkDc>` z=TXSsm7thqYKr$5i^B2%TUShi1o|uuI!hYsp7G?8$0^(_3c=&?CVQ97#N<8WkgtdE z5UlpdUZUI!#vm{rW>I({fZ{B3VBg_DYLoOx1`|<4am@HMA_NkmC1I-AkQY}lTnb*d zxrBKGig2QgP+>ZqrU@*G8qmOR*t;wh#c`g7T!{A)bVt|?0)l9+QfW34nNviDWix4~ zih02?ry)ftB&kw_m{Y8+oe`hNbu%wJ;YcT79j1VH^Q2vgOS3t=R~J226O~5Sy)wq3 zVk!nyu&J>R6-q#fD?Iys&<)Y3871duDw&W9p6N&{Q$2^1_szU^MI+FjSPZb&l&fkB z&5q4#I~0t8{R{;$R4>fL#M1$NFUt6Z>W)1Rk541I-Ht6N@22?CG`q()>ktCxwWmex zvA(1?h<6Lf#BB(aM%~bEvtxyaHjaaHvJpp;i?yymp=Iy7sNlrGq`ern24tPb;)bS; zTZJwZfSDA969PsGMkAT9{yfMOpqiCuddQ8ZaJ$XuR*Ts?f~(*LvYzol|YzRlT`W!2_<#DWKkpwwN-HQON9d$R**=~ZHIECC> z9l%nQ9q`#}3Q(q;YEdE6eBj)!{Q zmG}>|HnAx$2qyO9k_xf}ae>O8gM$X!!X?p?NL*5^3)AezQ+5fY11WM$|DaH}8mtu{`gh9CcY5?fVJVm)R|cHV*lq zvI_o3ahK1!|KqgyK1xRSl>fUc-HQCb(tDKuztH`EKefD-7L44v&a~VbfFna#VAeF5 zGZ(eY00|9D;TsUzV)WHVISGm(lrOOkblc*|Y-;;isU@g{q@XDBXgDjlaf~8W(B8rJ zce~zl1X>Yt)A(WUB;`y;rD1%zo6ecM=y81Wl*Qn?{AbuqwSO`J+qq( zZBGXzQ4V`VjnxV%YzgQiNxOnAI&~4!OBpY*rKSe9cySHriK(D(Ws568cTJ^GrC(iC z={I*oB#is-FeoonDC>R3rMA)?hNiaO9Y&|7-ooVSa(DbPv{&*kW(`ZLLXLN}X(pJb z*Szp2S=RW51<6f;1_*?ZfUwkr;o$jpc3*HV+E!FOyx^++@w~C=?j)4qi#+0@8uDXW zwzWm~WD20d*?Uy-{Rf=?u=LE~zaQK7Kx@a0Bo` zNdGQRXPLe_yiQ|zrh}OqGHHJ;*sEX&8X%qj*wbe|-Xj_;$Ur|Oa|m%I$fJf13g}=z zb^QQMOA6Or! zj)jq!hNz<<;}C%Ps5D?IVQwuVO`1rAL$ViP5@&^ZnDNkxB%9b7h@E%pFc)0C9=(jF z1cB;V6)+|&`jva-uQZyhu2|)ZjmDfl5CEWr<(PnOX;g*^wDCA>ARRka&g#(?8jUNT zqA=%|JPvMfc+s?r=PR)>wn}# zVh0JT;8t0s|t02Dc*%4xFB6p>9^PmvQuF-EsC-(s)xhTQTt^r}imz$;>buBd=Kngj)y zSjdk{O7jRn6p1j%N1kR*_hT-fRsK8Smpq6o0^lw3U!DF3ZNiWH|4Wzu90dKj(%;fj zyUo7m99&+QD0qh3ob4W-9F&$0^P;2EhHo@QMG(bo9E`v~#sfjuSd55wEA9q@AI%Cc z%hPjm^};RKFo5FSF>5go|5Sw<>`D0vefc20)Tx#D75E7bZ`eDsY(gG5+@2szVg9iq zW$)kz`NY8cCUx)~2nir}U>(BiCOJ(R1|x9Z1Y&^SrMiap6AP3{cM?Mfu@PD%G2b=u zaO$hF5XoT}?-*mMhQ9(*REr3?VIn|H+Vr+8(h6=4qpMqre3M!Kypq7|<_RUfe7yhv zC*A*PnQkZ1G$>Ld0xstN{nc*O{Wo02dpSlE&~1#H0jWvC&iGPA7<3eCi~rxplh*%O1?5S&m%t zGz>s#?V+o%mhJ44vgN7_2w#fZx-QW{UI0UV9f*k?#0yTq)#L{P#(fqeo*&&7De1#0 zFQi+#{4UF9328mRDW3)`=fQ|FhZfP4LyE*HN8DFL(!3D`pZZCVq-W8Tqr<5EWh4P_ z4ub^KiFNi%UBMDNK^&t{y2YHC_g^`0KjJ*e{Ks>~7(cX$1A(%%vcY;MyFcu1?|*pt z=4AV9@96Nu!6|#fx*s~74*a(dD3SIwc?~$nfQ+YoqjA_hSEAP{37nF5^b*iXN<$-+ z^=c}-hLy&WL6{xuz^UJr6QXr3u)al;b;*q@xsjn3@XnIh)s`qXPRS}CEBWqA?KMH$ z-Lc70F9!s&tlPtD67{MA-xBJ1g+h{ENl5C_O2CB1rDtegs2?^-+4F#4OW}nXkoLB2 zV8ahno`-xd@jBxs>y8~q^Dsz49((SjIdFG~FRb>9F&??g@|+iY2;CWSui@u>nqG2e zsd~<`R`#9hKAewor`L&%du-Ze!QI+ai(E#rFKRFNz~9o^YI|Vgx${MvOb=yk-@pRr zSD1kNz|K@Y36fC^%bRm!p_L9Ff13$N%$r1F0=L-$5CqW^zL@YEy!nsv6p{`5GEf8i zXhGL5T+VVSD7zHR={8!WO6_lfnTjk^&kQAnEn3@QPK}BoW+7|0| z@QeQ>S^0O6|3HVGr*VAO_|F0OdY9urS03fRe--%;ulVO84cxkFS1#N2*KKe|RYLD~AOIjbx$<8}mWW}LSqxCYgoIgu zgcO4#d*BGg73tS|FK@(NZ;$$yP0i19b@)D@U}636oEawpfv-AQ=r`1s+)auP)V*SB?nT1+U{et; z=Nc1}^eQ>U)u%26r@WAtf@dVZf|&UhZ$~+P;(e0^w5mwVjHf;l>S>@HROu2 zM9w5FWXP6`0HX>e=p#tOEW;t?4wEsMu(jkHYLH__Glo97EyroT8-x?~k<@3cXI2&u zd;;*jbqoODF{OP^yhGk%iM*YLBf0)Xe#N3~4=q3fdKQTWCWXSrH}qusbV;y_Rnpe8 zZ5nhGYhoT;N{wBZPPx?1djZQihA?2ly&w@+5Rr(t0a)UQA#2UX1?QP;ro01)O=c|u zJ)m}fat=FbJC0QqM^;94p?AyN703eBi(3BptduS7?Ib9GMF11PAak^LW2E_2kb|q9 zV2H-(8$f!VNO%(YJwFg44WppoFK*6KPhNvDCKH$lbw`S1a1T{%hMacqu&&5~44yeT zVCJl`)-xxo4`Jv_CB>Fm8v2%2Ssk(-Jf;Qp3PM{*R=q_nZ4;2=B&Ap9GtYf<5XsSK zO5}an&~M?gWVeBjB(4u$%rLKq^({4|Pq&!S zVa-MLOICw_Zu@^-49G3|-|k?gM*ll_l>fhI|L^;{fPI4BxU6}R7IBpLQ$zp;E7ch| z)@s@N6nw{9^RkY3YhHC0Pd&kS*>6f_IuhN*P%pj5Xb84wzB=2Ajl`=ooQdjlWNkrGyh`)!5RguyVH5*4$rjr?I6gW# z+de$|@apK~!}iY3?&;~?i@p85v%h{gJo=*jHr-i&L|gxNwf`f`SsNH_8(_|)7${SX zYd5fk@?Wv2U44}Qz9jjt1ZekrzyM;JA%90lQo(2LRTUwQ?qAKqN_t4$i{mJc z?_aYF81)$d3wM9q*?)7o_rtFFSM4-W$eP=2a1hw0LZ$IQpESzh=f3eOnD3DItd0iT zVsooDjI*B&yETqe1or@?Ta;X|ECOd($hAl!XOtUo85DW6wGE|XH7}*lE~$f0yX%6$ zSl{O1O}Wt%tHBuK5kx{t?ha1hSZdWxhN>u0z%#y2$TNk?OqHK=fl(~KKo>1=tzRsB z5iDhPn4kkUw;jS3BX zh%VFQF|OJwC=5tp;z;9z1h<65%g#i=C5*s)Xb9jz41mTWwZVz#We|h+435_%5Tsnk z<}1}FqF? c;T-ac~Z(jVQeXDyMyAlW?7OQ=raf8PE|K0jX|bg&@F8Q+Jm>4oxXi z)Hd4)bX1kvJsJ^2CrPJJI>66h^3kYJAVpU}4CWoILq(0Jyuyqt?HSlFw*c>f#ONZ; z*x)jHsMP&xF}G5N7m&)O8Nl+J0-CgK$!iLe4B)zt5)D~b&R~f6F*cWWG8fvZs(_Np zRaK%!>8hYWLn+49cUTaMRNj$<+K05*Xq(N#iR2N4er2+#x_btV8(;u2?f6zY067nz zA*N2l&4WO&;5u~K?F3}ML)^%tu?Gp>nijSHpS^cqj@wAmNB`$jlzBF6wABPj$&zL$ zQ`#2UvN%JLT(V`^N2`#*Mm32Q8t4Jgyo|;XzlS(ac%I}$UaBe!mu6FvXEk#;5o57| zLRMAQEh{fyuBpu)d-r0(C|hZd>!vtj%mK-YR%4&>>wAZ2^iW0DdobZlsP0g1|D?dh z!3_Lw`dn8J2AIiuBW6ld4mXSY==aql+2|~?JaKGAK&wWdI|tk?Q~-%m88q@Vryv+x zv)SNkGa^AxJ!d#MkIENF$|SMi4q3Igo7{CiNlx@T4!>r~PNWHLY9HGtJoxVYxLu!E z-+o&!4GHt0?9+Ntmx;{utu}8Bp^^v%9mh6LgZg0B`)zj{bK$f=bquci)~Ac7aP3@% zW3&7Kp8b4qAe>!-a9s#bhdQ~pR@8h~s(^Rwr0{cDl70^&2RxbfU8(-x|MUMKEl`os z!2uqccn&y(9DpMRJTOo(Mlm>45mGa4`f8F~5zMnZQE00-DuL$y-iZnNS-X5|?w`-t z`jN-jwqqKD?Um+oXy57WxU|i7NaY6**&o$6NfjpLUWU9g)}#h z(||4s(7*(Hczj}`{e8u4Fjf=06rpe%L&Vkz0d(#UPDTdZ7A%86kndV(1_{wu3qAKJ$90~$tke8m-(AEY{Q$Vv zMQT>)izJ^jNm~OEpxfd`8?iyL^1{doT6B8S%AiXT6N25MGtspiLvUhbRmK- zH>K`W?El94f5QKsSQuwE005$`hyq`z|G&Ta=!ZuQ{r?Yl`Cq>-{XgMaWY8^-GC}HKGJXs0n(CF z#SlL(Q6uZryX+RNuOd9$qe{KC>E+*{mK1yfLn8N<>UalgU*s0uf8ZYf8xs1hZ&QX4 zzTRPw=4UGFsnaBj0O3PN#rT{q`3kk~5b2+t0a86e!aHPv$vn$+3T-d)`PsQl31X}Y zQ9)FGv&?Ja@Nt~rwzAz)zyGGnF{rDO3d92#X>cRbQ571tp-O~hl|0jw(PRyBn@AP? zMN}kFR+(TZa_PyEzs)It)Oj_N>nrD~8B~F73kvog-uE-B#4A*qTelndd7fahc6U@uh1`XVWlipc0}k{4t0bRv{B(6EY# z5^NUcLI?mmzb}O49xlx|=J-N8N5K&onHFUFvTG|cQ;TPz3^?USQ5=IKzNJyqk z>(KWwZ(0ul1IY9i49D+ageW`+&Kj!JTw>B|I)@xde-|zrBY`ZZJ4s6}10}K&&~IP) z+xB88l#)uZ8{~OZoPdW~HrCR;33dgcf$J%u=q3!58?@}`UdTfXOu^Qdhi=(P>c)yN z0CVOT;(gg_3GptN)S~YaOY~qQBTmUp`dxDvp#tOYy2#h;#Tn@mQA!j=%HkJ!F^rR{ z_eAFV19?J&3oPm?$#K`J;xuZwtjP&~Z?kd_lwP>hzDY7SPT}BS=jGw?aJMHlF+z#E zRAPtv(h6ub?HNr5+O7hdlm!)qyx5y-V+YoZoS%Haxp~;NCR6}kYj}D=ktxbX=KQwF zRNT@MX;s9$7IPu^cbK)cod@#cl)X!Iif6!AOq8Ue2b$GlW}0p81G2Y z@I7fY%#v91mxNlEYhtF0GAS$I2>8ijE*8q9wq@MCiDaxHBVugjy(&jzzQ&-f6wWMa zueXrQ3gXiYT2Iu{d`vOp0Xt%7RnCixrtu3UOC!-PDXIMpPuoK#dRwNx}9`*E77E(dGhrMM{!nFCUfz?jlj>lJ1)Jen<3x zj+wK3U^siRdtnU5Ma%ub#cwU_D>0+AE(UUB=p7#iw)HDsgjmZO4_l_9X`?kvhV$N)V zPhYz)(0gXzk2Ur|jGS8k-uXAV%u?U4%LqG<%2UDWdYGM8@ZL5pk>-0GF|Tl2T%Wm@ z$O?>+9_AoyHbmn)-v2J6(hO2ZNZ#_txolm}{1h<+wBNX?{>?UCieOHPhl#mQxe*c# zaF?}3EsUWu;*m`7jxuRr>@rD%=IWSnJ~PZtR+5VwZcFC)gW!KiP&ZBDHRxgA7_jK3LCy#4 zF6Z_qdm4eHKrNwB@Rb6~N<2oE>{K!I943+zliv5Sx?#JRWWVhz@uw4yFq15H2$s=P zN6J0iHV>O}QU*6;27Ikh+BdSMa~CCKZUgW@i`nc9tfU#7mU(ds*$L0|8cezvZHti9 z8|Mq<>J}mxTIb364@8fWC89Y8W zhxzk8-n;F@E6{UyIwMS6$XWpz_CRl74@Eo;Nd-H{RNzj9!FN!bhmXDvb}$1sWRik& z7}O1goTkW{>m8-vrh72-1?4Zy?Kqv~_97(^7h2X~ z(46X0s^TpxDJ|BJFFX~tqa;49ZQ99BS&9*!f~mmJ?eSCAUa$(ylnu|L@<3lzGCQ)> z=z_py%4Jwcl&CMBjwMD8k9?o-ez;}E&8IE{r`)RY6q+JHEs&)F)d49lx}Cyx)+y+~ zrOokCLI$j_t6d$>XInT^0ds>EE$p?0F7xz)Zw{I97G4{tQ8I;Ok_dG%y*uGp5tEapf?)m#(2@&`esS!SaK@McYN;O zpg0pJC+5PD$5@ratV#fiW30=nxCU8ni5Kbq)K|r@wK67xT>RGZOQygIhw;4qf7XYdq_YD+6TdMeWJ3%i;S!n#8@>7qsfZ z)9A`{1*&nixOQ5HvyBGJXm&rfRM=L@&$sP!QDMxriGn8j7jac#jAB!77&ZoVvyB07 zlXuq6Q|~{$V_S#pK8gOKAXfVhE&*;rwARK2J8QJ>9i3X;HB$HPc{`fP6}(+9Cw4bl zY<34+X->^Lhnv@eT@d0>sA4gam72o1^V?gYvHLBgwP6g$5G<2KDTDz5IX?h~6rYA> zVmzZ_G6j@Ts-Ltg$r2-1k~~MZ;iOU}2(luD153C8s5$bpvs44>IGH<2UkdGY?P~2h zN{0d|?h(=@xn@a`%A0_78Bd*N+iE`8{Svg_t;!;kGn+mQLoDr~MGeuef>|*%+p#Hr z2S!7rD<>Js802UKoY|!pHhEE(u3Z1>7b<+Xlva659Ysk&ku`w+C4^DbEH*?@0>0gF z+BO#2Po#Yne+Xz-lJ}UMz51tOnGCboeI_Z_C^+M>73#LVmUtFpTjnW^BanJ4?6qnW zcNFsAwa?eq{A#F~uFdr-$Uj&#)2j;IguP0JS$yx_iZu4RCRMq2v-~5S=swT?tI!}e z>0;gGK4jRDrSt!664qxU|Ic0ix39|o%Z&7G^S?fiN|6}zwjW!A{-=Ds0HxKD#F*ti`On3 z*gw`-VV&v<;q_v~%8eCsY?W2pGh*F7|Mkqt-lo7_rKbmYRjqvq7hYWquc`tpavKwV zMc3@Spx1|pnk(NMnjN3}uipTi3{S6G+p4Ji00nnI<`zwh#^d>Po<^wLk2SyJF*npt zOdbZ`Q4z!*Vy2hdfiCF#9y3aRNZglVr5diPk8a`h&5CP6wa@0|xxdIdoM9NY%im57 zluvC^L+|S&^Qir*GoDPZK;kIE{*PLhDxvS#fiuYEbn`lNT(ET4()N_}m;89q+D z4P~p9qPqyT*RykRM6=E+!{z#y5Kuy9U6KDle!|8vS9c2+METH;wqLx)82LqwNlN`r ziiZUiwrrJZ!H%eWXwFhs{<&zfiTh7c{p_zLSFbxKl>_Z!;_{piejWt`tJT0j#3h&HsyT*#t*tVlZ@wzS&B`0_7uYj!*2ygWZ_ zJ1{K|+K*GaZ~K+?YP;`Z(y#}1kZ<3Q8$Ijzx@DiP`|P?oZOGRS3+KTgWHEG$lC9xM zFBG7yLf8UEN+0Fl{R#HBc~Z!!-;;82Q$V=+&|z%_mVXwy;@rY#TNur7srJ%TpG7Gq zK^|U>^$c`jPSRKvtw>6Wz)&2KZ!VjqnnE6#Q%xZZtXYg~*b8YIR;6!+8z6BKVJ)T; zvj5L+=&;v6xn^JF#eu%0HE0LFPDzf+atGt0W3gS%R}Cq@eNJ`Es1BiCEfne1B7t7D ziSx20Z9=^25aA`clV<*>8&|^}>f}Eo{u3kY*4=czUH;z(4<0>e=KpP)ox-eo*JBhVGNm|(1vc?8BAk`= zO^R@K)8CQ~Yf0(Bzs<8MN$s)1Y0ZEbI(L9?TL@^{<3d+jgdLUEQK}T4Qs7Bgjl&+g zG!d8q;q*}EjFRpATnl+VVWblJ6==v=km*Y`hNO*n`khA?;Mg&Zs`0rAC0%Z`q!#rh z)%OlEm4FvLdLLxBAm&1U!##Mw(X6_7M}eZ9+R8R9<@-(fqka{&*;VJZh>o z(G8%k-?R^(EXdSm;kc74>x(1CxvvmX48faEui0VbB8k-7NnXga`W>6?NTTAVp2!F@ z^nJAxOyNzgVB&0%our2g{`!i$NbcEKbJXj`~WZ*n(8w;uk&kTm00 zR+L`L`ZBtr!k5SSWKU6A>G5Vj=4uGUov?3|V2JT6Yhi~O^RUWKFrfLKU|*yAuP}Zx zQ!mXXy1DkKXW~`fTEZ?ynJn!9HIh%*dqBM|8JtWx?=qj1c zr|NW`rn*|gvGM0?u(1X?Y-4s}Bk^z?W#3ic52d2Z=vvJ)w4Q64x-R8n%{ygVJ-ibL zzqI^E=gj)^JdN?V=CfwW{4e+KKWyTEJbrX%|NRQ(KN{%<_&17C$+!$*@k8>(1+ddQ zMsV{?q%8$sJXuP_a!Hais#t)YghpmUDp_z3}h*l+3H+ip z$q2mJfpOAhV7mjqe+0p#*3hTu+>K&xy~z^gvfn9!QViS&|OXqFb??Q$&N?Cp+T-eM@RJk%_vPdM1$?`$_Vq4g_x)AgYwMk0MT%S$ko@7cNRruZDFfz&wuz5>0H&W@K#>pRwe0C5`HN=XV`Hbk{ za=-Dz!jL+|vHn$G+wXfaA_xWv@o+J)3re5q3VjPjefT>(hz@$*chn4yyCP8Cq&$cY zz?%TIap?L~KU}C}U$q@N;nCsV!N}Fpc@_d>uUy-h9$GTS{N1a8$F=ek!pD)5VzvLX z7`a3j(L~HWgr@d6_2jL(CRXBYyXHzIB`PXgOD)wETr^%+{8ZdEcR2y&g0b6{v5@i7 zb#kNkxvil4c4q?Zl~!i)c7WBa)`G-Ka&zz+P43;b&%`&VmX6Vvh(0#AQz5{FlOmro zAxd7bbg#+3g?dd@Nr#xb%i|w*{~Kd4^tu>@*LYi4PXGJ(!Nz9e{!tA%?|xsyZEk%X0|j72UQwxC4bFI#R>7Rig({yH z>I7g7WwElSlCunv$Y>J>QkdU&9ZwK4^$?_Mz6PPmr=p{1p8L%rv|<;2;}WI1h_a-F zBv>nmgGn<-A#&F>0WN|`y>p-yx`*JPhz6@T2j7qNb&1?k&S$#djN-t2Kzq`qbBvuL z%8o`XC8|rsMRbYweFXC>Lzf5xYZUil3_|jR+yx>ootY%FWWKy2?^ExGyFU$2q(|#F z-a(v^EYe8%cFDeV4FQHfa6)QLV#{jMT3AIN^y@6uWl8XMEa&p^`$;k!HqN?aLKC^m zB&lJS!w>qp

CHkMZc2@he3{H#RG8RQaoD76|-^4hDA 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�g~p>-&{#&$a%w4XNScI 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Ó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\$UiyLx&*E@1QXEwEX;nBEUr)53`l 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

w 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' react: '>=18' - react-native-enriched-markdown@file:apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-497fbe63.tgz: - resolution: {integrity: sha512-2Ph2EXnXbcYd5LK5SmDwqnQNgwqOVAK2uqasW1NzzFGqm5SRR4QD1TmAvUFytrKudnRkzHW8kpnHgXcYRhcyBA==, tarball: file:apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-497fbe63.tgz} + react-native-enriched-markdown@file:apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-0dc7ed81.tgz: + resolution: {integrity: sha512-CuNf6350oZ1vnxYAX2g7bFv9fs4ckG4EMQKNYu+o/O9mYAuLZJX9VPGpDT7vS9Qwmn74J+wKrCOx7VQkLs0uKA==, tarball: file:apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-0dc7ed81.tgz} version: 1.2.0-t3.18 peerDependencies: katex: '>=0.16.0' @@ -22450,7 +22450,7 @@ snapshots: transitivePeerDependencies: - supports-color - react-native-enriched-markdown@file:apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-497fbe63.tgz(katex@0.16.47)(react-native@0.88.1(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.88.1(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.3.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(react@19.3.0): + react-native-enriched-markdown@file:apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-0dc7ed81.tgz(katex@0.16.47)(react-native@0.88.1(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.88.1(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.3.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(react@19.3.0): dependencies: react: 19.3.0 react-native: 0.88.1(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.88.1(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.3.0)(supports-color@8.1.1)(utf-8-validate@6.0.6) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 25b9a275299dd..4118f4a8b577b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -23,7 +23,7 @@ allowBuilds: node-pty: true # Ships N-API prebuilds; its install script only rebuilds from source. objc-js: false - "react-native-enriched-markdown@file:apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-497fbe63.tgz": true + "react-native-enriched-markdown@file:apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.18-0dc7ed81.tgz": true sharp: true utf-8-validate: false workerd: false From 05918e34eb47b6f65d7054e4d682ea19f107bdf0 Mon Sep 17 00:00:00 2001 From: Emi Griffith Date: Thu, 12 Nov 2026 15:50:06 -0800 Subject: [PATCH 011/922] fix(server): keep task followers' forwarded waits off the parent's input RemoteDelegation's background follower calls PeerForwarding.waitForThread under the parent's scope, so a steer to the parent ended the follower's wait with timedOut: false. Against a remote run that is terminal but whose delegated work is unsettled, the follower then completed the task early with the wrong reply. Only the agent-facing t3_thread_wait now yields to input. Co-Authored-By: Claude Opus 5.5 --- apps/server/src/peer/PeerForwarding.test.ts | 57 ++++++++++++++++++--- apps/server/src/peer/PeerForwarding.ts | 13 +++-- 2 files changed, 59 insertions(+), 11 deletions(-) diff --git a/apps/server/src/peer/PeerForwarding.test.ts b/apps/server/src/peer/PeerForwarding.test.ts index 62b22ca41c318..f9e8c7c178437 100644 --- a/apps/server/src/peer/PeerForwarding.test.ts +++ b/apps/server/src/peer/PeerForwarding.test.ts @@ -84,7 +84,7 @@ const usersThread = ThreadId.make("thread:box-users-own"); const boxThreads = ( seen: Ref.Ref, linkSession: Ref.Ref, - blockedWait?: Deferred.Deferred, + blockedWait?: { started: Deferred.Deferred; release: Deferred.Deferred }, ) => { const base = { ...liveThreadShell(boxThread, { runtimeMode: "auto" }), projectId: boxProject }; const linked = Ref.get(linkSession).pipe( @@ -144,7 +144,9 @@ const boxThreads = ( Ref.updateAndGet(seen, (current) => ({ ...current, waits: [...current.waits, input] })).pipe( Effect.tap(() => blockedWait !== undefined && input.timeoutMs > 1 - ? Deferred.succeed(blockedWait, undefined).pipe(Effect.andThen(Effect.never)) + ? Deferred.succeed(blockedWait.started, undefined).pipe( + Effect.andThen(Deferred.await(blockedWait.release)), + ) : Effect.void, ), Effect.map(({ waits }) => ({ @@ -233,7 +235,7 @@ const boxProjects = (seen: Ref.Ref) => const serveBox = ( seen: Ref.Ref, linkSession: Ref.Ref, - blockedWait?: Deferred.Deferred, + blockedWait?: { started: Deferred.Deferred; release: Deferred.Deferred }, ) => servePeer( box, @@ -314,7 +316,7 @@ const makeLaptop = Effect.gen(function* () { ), ), Layer.provide(NodeServices.layer), - Layer.provide(PeerForwarding.layer), + Layer.provideMerge(PeerForwarding.layer), Layer.provide(Layer.succeedContext(linking)), Layer.provide(NodeCrypto.layer), Layer.provideMerge( @@ -396,7 +398,14 @@ const makeLaptop = Effect.gen(function* () { ), Effect.provideService(McpSchema.McpServerClient, mcpClient), ); - return { links: Context.get(linking, PeerLinks.PeerLinks), call, inputs, inputSubscribed }; + return { + links: Context.get(linking, PeerLinks.PeerLinks), + call, + inputs, + inputSubscribed, + forwarding: Context.get(here, PeerForwarding.PeerForwarding), + scopeOf, + }; }); const failureOf = (result: McpSchema.CallToolResult) => { @@ -409,7 +418,10 @@ it.effect("incoming local steering releases a forwarded wait without stopping re Effect.gen(function* () { const seen = yield* Ref.make(nothingSeen); const linkSession = yield* Ref.make(""); - const blocked = yield* Deferred.make(); + const blocked = { + started: yield* Deferred.make(), + release: yield* Deferred.make(), + }; const b = yield* serveBox(seen, linkSession, blocked); const a = yield* makeLaptop; yield* linkTo(a.links, b, "auto"); @@ -421,8 +433,9 @@ it.effect("incoming local steering releases a forwarded wait without stopping re timeoutMs: 600_000, }) .pipe(Effect.forkChild); + yield* Effect.addFinalizer(() => Deferred.succeed(blocked.release, undefined)); yield* Deferred.await(a.inputSubscribed); - yield* Deferred.await(blocked); + yield* Deferred.await(blocked.started); yield* Queue.offer(a.inputs, { sequence: 1, event: { @@ -447,6 +460,36 @@ it.effect("incoming local steering releases a forwarded wait without stopping re ).pipe(Effect.provide(NodeHttpServer.layerTest)), ); +// A delegated task's background follower runs under its parent's scope; its wait must not end on the parent's steering. +it.effect("a task follower's forwarded wait does not watch its parent's input", () => + Effect.scoped( + Effect.gen(function* () { + const seen = yield* Ref.make(nothingSeen); + const linkSession = yield* Ref.make(""); + const blocked = { + started: yield* Deferred.make(), + release: yield* Deferred.make(), + }; + const b = yield* serveBox(seen, linkSession, blocked); + const a = yield* makeLaptop; + yield* linkTo(a.links, b, "auto"); + yield* Ref.set(linkSession, (yield* b.linkedSessions)[0]!.sessionId); + const waiting = yield* a.forwarding + .waitForThread(a.scopeOf("thread:laptop-full"), box.environmentId, { + threadId: boxThread, + timeoutMs: 600_000, + untilDelegatedWorkSettled: true, + }) + .pipe(Effect.forkChild); + yield* Effect.addFinalizer(() => Deferred.succeed(blocked.release, undefined)); + yield* Deferred.await(blocked.started); + expect(yield* Deferred.isDone(a.inputSubscribed)).toBe(false); + expect(waiting.pollUnsafe()).toBeUndefined(); + expect((yield* Ref.get(seen)).waits.map((wait) => wait.timeoutMs)).toEqual([50_000]); + }), + ).pipe(Effect.provide(NodeHttpServer.layerTest)), +); + it.effect("an agent here works on a linked environment's threads within its own modes", () => Effect.scoped( Effect.gen(function* () { diff --git a/apps/server/src/peer/PeerForwarding.ts b/apps/server/src/peer/PeerForwarding.ts index 5a6950b436103..8b7dfdb615c02 100644 --- a/apps/server/src/peer/PeerForwarding.ts +++ b/apps/server/src/peer/PeerForwarding.ts @@ -191,10 +191,14 @@ const make = Effect.gen(function* () { input, ); - const waitForThread: PeerForwarding["Service"]["waitForThread"] = Effect.fn( - "PeerForwarding.waitForThread", - )(function* (scope, environmentId, input) { - const callerThreadId = scope.thread?.threadId; + const waitForThread = Effect.fn("PeerForwarding.waitForThread")(function* ( + scope: Scope, + environmentId: EnvironmentId, + input: OrchestratorMcpThreadWaitInput, + yieldToInput = false, + ) { + // Only an agent's own wait yields to its input; a task's follower waits until the work settles. + const callerThreadId = yieldToInput ? scope.thread?.threadId : undefined; const watchFailure = () => new OrchestratorMcpFailure({ code: "orchestration_error", @@ -280,6 +284,7 @@ const make = Effect.gen(function* () { scope, environmentId, params as OrchestratorMcpThreadWaitInput, + true, ) as Effect.Effect, OrchestratorMcpFailure>) : forward(scope, tool.name, tool.parametersSchema, tool.successSchema, environmentId, params); return Effect.andThen(requireEnabled, forwarded); From a9c6af6562706b3ac2a3c4a2ff609f03e3699d28 Mon Sep 17 00:00:00 2001 From: Emi Griffith Date: Thu, 12 Nov 2026 15:50:15 -0800 Subject: [PATCH 012/922] fix(opencode): release foreground calls that start after an accepted steer steerTurn only backgrounds foreground calls already active when the steer is accepted. If the model then starts a foreground subagent in the same step, the steer waits in the inbox for that child's whole run. Background the call when it starts while a steer is pending; fork it, since events are handled under the session lock, and bound the request with the usual reply timeout. Co-Authored-By: Claude Opus 5.5 --- .../Adapters/OpenCode2AdapterV2.test.ts | 43 +++++++++++++++---- .../src/server/v2/adapter.ts | 28 ++++++------ 2 files changed, 51 insertions(+), 20 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/OpenCode2AdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/OpenCode2AdapterV2.test.ts index 18ac1c07e609e..3f9bef069b5ba 100644 --- a/apps/server/src/orchestration-v2/Adapters/OpenCode2AdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/OpenCode2AdapterV2.test.ts @@ -1650,11 +1650,17 @@ it.layer(McpProviderSessions.layer)("OpenCode2 adapter", (it) => { event("session.execution.started", { sessionID: CHILD }), ]; - it.effect.each([false, true])( - "answers steering while foreground subagents keep running, active goal=%s", - (goal) => + it.effect.each([ + { goal: false, late: false, fails: false }, + { goal: true, late: false, fails: false }, + { goal: false, late: true, fails: false }, + { goal: true, late: true, fails: false }, + { goal: false, late: true, fails: true }, + ])( + "answers steering while foreground subagents keep running, active goal=$goal, child starts after steer=$late, background fails=$fails", + ({ goal, late, fails }) => Effect.gen(function* () { - const gate = makeProviderReplayGate(["release-child"]); + const gate = makeProviderReplayGate(["release-child", "start-child"]); const requests: Array = []; const steerId = `msg_t3_steer_${SESSION}:message:opencode2-adapter:steer`; const foreground = backgroundLaunch(CHILD).map((entry) => { @@ -1669,7 +1675,7 @@ it.layer(McpProviderSessions.layer)("OpenCode2 adapter", (it) => { }); const { runtime, thread } = yield* resumed( [ - ...foreground, + ...(late ? foreground.slice(0, 3) : foreground), ...(goal ? [ event("rpc.opencode.goal.changed", { @@ -1678,7 +1684,7 @@ it.layer(McpProviderSessions.layer)("OpenCode2 adapter", (it) => { }), ] : []), - event("session.execution.started", { sessionID: CHILD }), + ...(!late ? [event("session.execution.started", { sessionID: CHILD })] : []), out("session.prompt", { sessionID: SESSION, id: steerId, delivery: "steer" }), replyData("session.prompt", { id: steerId, @@ -1688,8 +1694,25 @@ it.layer(McpProviderSessions.layer)("OpenCode2 adapter", (it) => { payload: { text: "Also say STEERED." }, delivery: "steer", }), + ...(late + ? [ + ...foreground + .slice(3) + .map((entry, index) => + entry.type === "emit_inbound" && index === 0 + ? { ...entry, label: "start-child" } + : entry, + ), + event("session.execution.started", { sessionID: CHILD }), + ] + : []), out("session.background", { sessionID: SESSION }), - reply("session.background", null), + reply( + "session.background", + fails + ? { status: 500, body: { _tag: "UnknownError", message: "background failed" } } + : null, + ), returnedRunning("call-background"), event("session.inbox.delivered", { sessionID: SESSION, inboxID: steerId }), event("session.text.ended", { @@ -1749,7 +1772,7 @@ it.layer(McpProviderSessions.layer)("OpenCode2 adapter", (it) => { Effect.forkScoped, ); yield* runtime.startTurn(withLineage(thread)); - yield* Deferred.await(childStarted); + if (!late) yield* Deferred.await(childStarted); yield* runtime.steerTurn({ threadId, runId: RunId.make("run:opencode2-adapter"), @@ -1761,6 +1784,10 @@ it.layer(McpProviderSessions.layer)("OpenCode2 adapter", (it) => { text: "Also say STEERED.", }, }); + if (late) { + gate.release("start-child"); + yield* Deferred.await(childStarted); + } assert.include(requests, "session.background"); assert.isTrue(yield* runtime.hasPendingBackgroundWorkForThread!(thread)); yield* Deferred.await(answered); diff --git a/packages/provider-opencode/src/server/v2/adapter.ts b/packages/provider-opencode/src/server/v2/adapter.ts index 0fd075f91a969..5d660a11d9fc3 100644 --- a/packages/provider-opencode/src/server/v2/adapter.ts +++ b/packages/provider-opencode/src/server/v2/adapter.ts @@ -2579,6 +2579,15 @@ export const make = Effect.fn("OpenCode2Adapter.make")(function* (instanceId: Pr type === "session.execution.failed" || type === "session.execution.interrupted"; + // Steers enter the inbox; release foreground observation so the parent can read them. + const releaseForeground = (sessionId: string) => + client.session.background({ sessionID: Session.ID.make(sessionId) }).pipe( + Effect.timeout(REQUEST_REPLY_TIMEOUT), + Effect.catch((cause) => + Effect.logWarning("Could not background OpenCode tools for an accepted steer.", cause), + ), + ); + const startCall = Effect.fnUntraced(function* ( state: ThreadState, turn: ActiveTurn, @@ -2651,7 +2660,12 @@ export const make = Effect.fn("OpenCode2Adapter.make")(function* (instanceId: Pr call.agent = stringField(input, "agent"); call.model = stringField(input, "model") ?? call.model; call.background = input["background"] === true; - return yield* emitSubagent(call); + yield* emitSubagent(call); + // A steer still in the inbox would wait this call out; HTTP must not hold the event lock. + if (!call.background && !turn.interrupted && turn.steers.size > 0) { + yield* Effect.forkIn(releaseForeground(state.sessionId), sessionScope); + } + return; } const tool = turn.tools.get(event.data.id); if (tool !== undefined) tool.input = event.data.input; @@ -4802,17 +4816,7 @@ export const make = Effect.fn("OpenCode2Adapter.make")(function* (instanceId: Pr (call) => !call.background && isOrchestrationV2WorkActive(call.status), ) ) { - // Steers enter the inbox; release foreground observation so the parent can read them. - yield* client.session - .background({ sessionID: Session.ID.make(sessionId) }) - .pipe( - Effect.catch((cause) => - Effect.logWarning( - "Could not background OpenCode tools for an accepted steer.", - cause, - ), - ), - ); + yield* releaseForeground(sessionId); } }, (effect, steerInput) => From 56b6c2a8bf9b617c98643ccedbe76880e94ff3f1 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 15:50:21 -0800 Subject: [PATCH 013/922] fix(mobile): refreshing a review diff keeps unfolded files open (#35682) --- .../review/reviewFileVisibility.test.tsx | 69 +++++++++++++++++++ .../features/review/reviewFileVisibility.ts | 47 +++++++++---- 2 files changed, 104 insertions(+), 12 deletions(-) create mode 100644 apps/mobile/src/features/review/reviewFileVisibility.test.tsx diff --git a/apps/mobile/src/features/review/reviewFileVisibility.test.tsx b/apps/mobile/src/features/review/reviewFileVisibility.test.tsx new file mode 100644 index 0000000000000..ac983a81ab1c9 --- /dev/null +++ b/apps/mobile/src/features/review/reviewFileVisibility.test.tsx @@ -0,0 +1,69 @@ +import { renderToStaticMarkup } from "react-dom/server"; +import { expect, it, vi } from "vite-plus/test"; + +import { buildReviewParsedDiff, type ReviewRenderableFile } from "./reviewModel"; +import { useReviewFileVisibility } from "./reviewFileVisibility"; + +const stored = vi.hoisted(() => ({ expanded: undefined as ReadonlyArray | undefined })); +vi.mock("./reviewState", () => ({ + updateReviewExpandedFileIds: ( + _threadKey: string, + _sectionId: string, + update: (current: ReadonlyArray | undefined) => ReadonlyArray | undefined, + ) => { + stored.expanded = update(stored.expanded); + }, + updateReviewViewedFileIds: () => {}, +})); + +function patch(path: string, line: string) { + return `diff --git a/${path} b/${path}\n--- a/${path}\n+++ b/${path}\n@@ -1 +1 @@\n-old\n+${line}\n`; +} + +function files(diff: string): ReadonlyArray { + const parsed = buildReviewParsedDiff(diff, "turn:3"); + if (parsed.kind !== "files") throw new Error("Expected structured diff"); + return parsed.files; +} + +function visibility(current: ReadonlyArray) { + let result: ReturnType | undefined; + function Probe({ report }: { report: (value: typeof result) => void }) { + report( + useReviewFileVisibility({ + threadKey: "thread", + sectionId: "turn:3", + files: current, + cachedExpandedFileIds: stored.expanded, + cachedViewedFileIds: undefined, + }), + ); + return null; + } + renderToStaticMarkup( (result = value)} />); + return result!; +} + +it("keeps files the reader left open expanded when the section's diff changes", () => { + stored.expanded = undefined; + const before = files(patch("a.ts", "one") + patch("b.ts", "two")); + visibility(before).toggleExpandedFile(before[0]!.id); + expect(visibility(before).collapsedFileIds).toEqual([before[0]!.id]); + + const after = files(patch("a.ts", "changed") + patch("b.ts", "two")); + const collapsedPaths = visibility(after).collapsedFileIds.map( + (id) => after.find((file) => file.id === id)!.path, + ); + expect(collapsedPaths).not.toContain("b.ts"); +}); + +it("folds only the selected entry when a file becomes a symlink", () => { + stored.expanded = undefined; + const current = files( + "diff --git a/a.ts b/a.ts\ndeleted file mode 100644\n--- a/a.ts\n+++ /dev/null\n@@ -1 +0,0 @@\n-old\n" + + "diff --git a/a.ts b/a.ts\nnew file mode 120000\n--- /dev/null\n+++ b/a.ts\n@@ -0,0 +1 @@\n+b.ts\n\\ No newline at end of file\n", + ); + expect(current).toHaveLength(2); + visibility(current).toggleExpandedFile(current[0]!.id); + expect(visibility(current).collapsedFileIds).toEqual([current[0]!.id]); +}); diff --git a/apps/mobile/src/features/review/reviewFileVisibility.ts b/apps/mobile/src/features/review/reviewFileVisibility.ts index 5d01de5700eda..7e1379d2b5ff5 100644 --- a/apps/mobile/src/features/review/reviewFileVisibility.ts +++ b/apps/mobile/src/features/review/reviewFileVisibility.ts @@ -3,10 +3,25 @@ import { useCallback, useMemo } from "react"; import { updateReviewExpandedFileIds, updateReviewViewedFileIds } from "./reviewState"; import type { ReviewRenderableFile } from "./reviewModel"; -function getDefaultReviewExpandedFileIds( +// File ids are scoped to one diff text, so a refresh renames every file. Expansion is +// stored by path, which survives a refresh; the occurrence index keeps apart entries +// that share a path, such as the deletion and addition when a file becomes a symlink. +function getReviewFileExpansionKeys( files: ReadonlyArray, ): ReadonlyArray { - return files.map((file) => file.id); + const seen = new Map(); + return files.map((file) => { + const occurrence = seen.get(file.path) ?? 0; + seen.set(file.path, occurrence + 1); + return `${occurrence}:${file.path}`; + }); +} + +function getExpandedReviewFileKeys( + keys: ReadonlyArray, + storedKeys: ReadonlyArray | undefined, +): ReadonlyArray { + return storedKeys === undefined ? keys : keys.filter((key) => storedKeys.includes(key)); } function getValidReviewFileIds( @@ -14,7 +29,7 @@ function getValidReviewFileIds( fileIds: ReadonlyArray | undefined, ): ReadonlyArray { if (fileIds === undefined) { - return getDefaultReviewExpandedFileIds(files); + return files.map((file) => file.id); } const fileIdSet = new Set(files.map((file) => file.id)); @@ -49,10 +64,13 @@ export function useReviewFileVisibility(input: { }) { const { cachedExpandedFileIds, cachedViewedFileIds, files, sectionId, threadKey } = input; - const expandedFileIds = useMemo( - () => getValidReviewFileIds(files, cachedExpandedFileIds), - [cachedExpandedFileIds, files], - ); + const expansionKeys = useMemo(() => getReviewFileExpansionKeys(files), [files]); + const expandedFileIds = useMemo(() => { + const expandedKeys = new Set(getExpandedReviewFileKeys(expansionKeys, cachedExpandedFileIds)); + return files + .filter((_, index) => expandedKeys.has(expansionKeys[index]!)) + .map((file) => file.id); + }, [cachedExpandedFileIds, expansionKeys, files]); const viewedFileIds = useMemo( () => getValidExplicitReviewFileIds(files, cachedViewedFileIds), [cachedViewedFileIds, files], @@ -73,11 +91,15 @@ export function useReviewFileVisibility(input: { return; } + const key = expansionKeys[files.findIndex((file) => file.id === fileId)]; + if (key === undefined) { + return; + } updateReviewExpandedFileIds(threadKey, sectionId, (existing) => - toggleReviewFileId(getValidReviewFileIds(files, existing), fileId), + toggleReviewFileId(getExpandedReviewFileKeys(expansionKeys, existing), key), ); }, - [files, sectionId, threadKey], + [expansionKeys, files, sectionId, threadKey], ); const toggleViewedFile = useCallback( @@ -91,13 +113,14 @@ export function useReviewFileVisibility(input: { toggleReviewFileId(getValidExplicitReviewFileIds(files, existing), fileId), ); - if (shouldCollapse) { + const key = expansionKeys[files.findIndex((file) => file.id === fileId)]; + if (shouldCollapse && key !== undefined) { updateReviewExpandedFileIds(threadKey, sectionId, (existing) => - removeReviewFileId(getValidReviewFileIds(files, existing), fileId), + removeReviewFileId(getExpandedReviewFileKeys(expansionKeys, existing), key), ); } }, - [files, sectionId, threadKey, viewedFileIds], + [expansionKeys, files, sectionId, threadKey, viewedFileIds], ); return { From d76e06679bdc7d0384a611a3922c87e2722078c2 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 15:51:41 -0800 Subject: [PATCH 014/922] fix(server): snooze no longer waits two minutes after a steered queued message (#35661) --- .../orchestration-v2/ProjectionStore.test.ts | 54 +++++++++++++++++-- .../src/orchestration-v2/ProjectionStore.ts | 20 ++++++- .../codex_output.ts | 5 +- .../shared/src/orchestrationV2ThreadError.ts | 17 ++++++ 4 files changed, 88 insertions(+), 8 deletions(-) diff --git a/apps/server/src/orchestration-v2/ProjectionStore.test.ts b/apps/server/src/orchestration-v2/ProjectionStore.test.ts index 0572f83b9a66e..26d0c9aa192b8 100644 --- a/apps/server/src/orchestration-v2/ProjectionStore.test.ts +++ b/apps/server/src/orchestration-v2/ProjectionStore.test.ts @@ -5049,8 +5049,7 @@ it.layer(layerTest)("ProjectionStoreV2", (it) => { ); } - // A steer cancels the queued run before it starts while the steered run keeps writing, so - // the queued message leaves the window but its run is still the shell's latest run. + // A steer moves the cancelled queued message outside the window. const steeredItemId = "turn-item:bounded-sql-history:steered-output"; const steeredRunId = RunId.make("run:bounded-sql-history:1000"); yield* sql` @@ -5088,7 +5087,14 @@ it.layer(layerTest)("ProjectionStoreV2", (it) => { assert.isFalse( steeredSnapshot.projection.turnItems.some((item) => item.runId === cancelledRunId), ); - assert.isTrue(steeredSnapshot.projection.runs.some((run) => run.id === cancelledRunId)); + const latestRunId = (yield* projectionStore.getShellSnapshot()).threads.find( + (thread) => thread.id === threadId, + )?.latestRunId; + assert.equal(latestRunId, hiddenRunId); + assert.isFalse( + steeredSnapshot.projection.turnItems.some((item) => item.runId === latestRunId), + ); + assert.isTrue(steeredSnapshot.projection.runs.some((run) => run.id === latestRunId)); yield* sql`DELETE FROM orchestration_v2_projection_turn_items WHERE turn_item_id = ${steeredItemId}`; const interruptRunId = RunId.make("run:bounded-sql-history:interrupt"); @@ -7419,6 +7425,28 @@ it.layer(layerTest)("ProjectionStoreV2", (it) => { silent ? hidden : visible, ]); + // A follow-up removed before it started stays latest unless a visible run outlives it. + const removedRunId = RunId.make(`run:projection-shell-silent:${key}:removed`); + yield* projectionStore.apply({ + id: EventId.make(`event:projection-shell-silent:${key}:removed`), + type: "run.updated", + threadId, + occurredAt: now, + payload: { + ...(yield* projectionStore.getThreadProjection(threadId)).runs[0]!, + id: removedRunId, + ordinal: 2, + userMessageId: MessageId.make(`message:projection-shell-silent:${key}:removed`), + status: "cancelled", + startedAt: null, + completedAt: now, + }, + }); + assert.deepStrictEqual( + (yield* presented).map((shell) => shell.latestRunId), + silent ? [removedRunId, removedRunId] : [runId, runId], + ); + // A run that fails outright, e.g. on a provider error, needs the user too. const running = (yield* projectionStore.getThreadProjection(threadId)).runs[0]!; const setRunStatus = (status: "failed" | "running") => @@ -7657,9 +7685,27 @@ it.layer(layerTest)("ProjectionStoreV2", (it) => { value == null ? null : DateTime.toEpochMillis(value); assert.equal(timestamp(sqlShell.activityRunStartedAt), expected); assert.equal(timestamp(memoryShell.activityRunStartedAt), expected); - assert.equal(sqlShell.latestRunId, "run:clock:newer"); + // A queued message steered or removed before it started never ran, so the run that did presents. + for (const shell of [sqlShell, memoryShell]) { + assert.equal(shell.latestRunId, status === "cancelled" ? runId : "run:clock:newer"); + } } } + // Removing a message after the earlier run ended leaves the cancelled run as the latest. + yield* projectionStore.apply({ + id: EventId.make("event:clock:ended-before-cancel"), + type: "run.updated", + threadId, + occurredAt: later, + payload: { ...run, status: "completed", startedAt: now, completedAt: now }, + }); + const endedBeforeCancelProjection = yield* projectionStore.getThreadProjection(threadId); + for (const shell of [ + (yield* projectionStore.getShellSnapshot()).threads.find((row) => row.id === threadId)!, + ProjectionStore.threadShellFromProjection(endedBeforeCancelProjection), + ]) { + assert.equal(shell.latestRunId, "run:clock:newer"); + } yield* projectionStore.apply({ id: EventId.make("event:clock:newer:held"), diff --git a/apps/server/src/orchestration-v2/ProjectionStore.ts b/apps/server/src/orchestration-v2/ProjectionStore.ts index 117fb5c5d1714..f8f822489ddd5 100644 --- a/apps/server/src/orchestration-v2/ProjectionStore.ts +++ b/apps/server/src/orchestration-v2/ProjectionStore.ts @@ -3813,7 +3813,7 @@ export const layer: Layer.Layer = OR run_id IN (SELECT value FROM json_each(${cohortRunIds})) OR run_id = ${window.requiredRunId ?? null} ${ - // The shell's latest run, even a steer-cancelled one outside the newest window. + // Keep the shell's latest run even when its items are outside the newest window. window.anchorItemId === undefined && window.requiredRunId === undefined ? sql`OR run_id = ${presentedShellRunId(sql`${threadId}`)}` : sql`` @@ -7464,7 +7464,7 @@ export const layer: Layer.Layer = ) )`; }; - // The newest run not waiting in a held queue, matching latestUnheldRun. + // The newest run not held or outlived before it started, matching latestUnheldRun. const presentedShellRunId = (threadId: Statement.Fragment) => sql`( SELECT candidate.run_id FROM orchestration_v2_projection_runs candidate @@ -7473,6 +7473,22 @@ export const layer: Layer.Layer = candidate.status = 'queued' AND json_extract(candidate.payload_json, '$.queueHeld') IS 1 ) + AND NOT ( + candidate.status = 'cancelled' + AND json_extract(candidate.payload_json, '$.startedAt') IS NULL + AND candidate.completed_at IS NOT NULL + AND EXISTS ( + SELECT 1 FROM orchestration_v2_projection_runs earlier + WHERE earlier.thread_id = candidate.thread_id + AND earlier.ordinal < candidate.ordinal + AND earlier.status <> 'queued' + AND NOT ${isSilentShellRun("earlier")} + AND ( + earlier.completed_at IS NULL + OR julianday(earlier.completed_at) >= julianday(candidate.completed_at) + ) + ) + ) AND NOT ${isSilentShellRun("candidate")} ORDER BY candidate.ordinal DESC, candidate.run_id DESC LIMIT 1 diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/queued_cancelled_while_active/codex_output.ts b/apps/server/src/orchestration-v2/testkit/fixtures/queued_cancelled_while_active/codex_output.ts index b0d6a44ef45ea..7ab76f9e5a7d4 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/queued_cancelled_while_active/codex_output.ts +++ b/apps/server/src/orchestration-v2/testkit/fixtures/queued_cancelled_while_active/codex_output.ts @@ -34,8 +34,9 @@ export function assertQueuedCancelledWhileActiveOutput( .get(ACTIVE_RUN_SHELL_SNAPSHOT_KEY) ?.threads.find((thread) => thread.id === projection.thread.id); assert.isDefined(capturedShell); - assert.equal(capturedShell.latestRunId, cancelledRun.id); - assert.equal(capturedShell.status, "cancelled"); + // The cancelled queued run never started, so the active run presents as the latest. + assert.equal(capturedShell.latestRunId, activeRun.id); + assert.equal(capturedShell.status, "running"); assert.equal(capturedShell.activeRunId, activeRun.id); assert.equal(capturedShell.activityRunStatus, "running"); assert.deepEqual( diff --git a/packages/shared/src/orchestrationV2ThreadError.ts b/packages/shared/src/orchestrationV2ThreadError.ts index 3ba3ba2bf3247..141d73f402540 100644 --- a/packages/shared/src/orchestrationV2ThreadError.ts +++ b/packages/shared/src/orchestrationV2ThreadError.ts @@ -122,7 +122,24 @@ export function latestUnheldRun( let latest: OrchestrationV2Run | null = null; for (const run of runs) { if (run.status === "queued" && run.queueHeld === true) continue; + if (outlivedBeforeStart(run, runs)) continue; if (latest === null || run.ordinal > latest.ordinal) latest = run; } return latest; } + +// Steering a queued message cancels its run before it starts and hands the message to the +// earlier run, which outlives the cancellation; that earlier run then presents as latest. +function outlivedBeforeStart( + run: OrchestrationV2Run, + runs: ReadonlyArray, +): boolean { + if (run.status !== "cancelled" || run.startedAt !== null || !run.completedAt) return false; + const cancelledAt = DateTime.toEpochMillis(run.completedAt); + return runs.some( + (earlier) => + earlier.ordinal < run.ordinal && + earlier.status !== "queued" && + (!earlier.completedAt || DateTime.toEpochMillis(earlier.completedAt) >= cancelledAt), + ); +} From f70e349ecaef6560aecb889f77d6f03b9251edc9 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 15:52:37 -0800 Subject: [PATCH 015/922] test(server): count leaked PR cache caller data without WeakRefs (#35694) --- .../pullRequest/PullRequestReadCache.test.ts | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/apps/server/src/pullRequest/PullRequestReadCache.test.ts b/apps/server/src/pullRequest/PullRequestReadCache.test.ts index 071f1d4978a7d..99b3cdba22ff4 100644 --- a/apps/server/src/pullRequest/PullRequestReadCache.test.ts +++ b/apps/server/src/pullRequest/PullRequestReadCache.test.ts @@ -1,5 +1,4 @@ import * as NodeV8 from "node:v8"; -import * as NodeVM from "node:vm"; import { assert, it } from "@effect/vitest"; import * as NodeCrypto from "@effect/platform-node/NodeCrypto"; import * as NodeServices from "@effect/platform-node/NodeServices"; @@ -16,9 +15,6 @@ import * as KeyValueStore from "effect/persistence/KeyValueStore"; import * as TestClock from "effect/testing/TestClock"; import * as PullRequestReadCache from "./PullRequestReadCache.ts"; -NodeV8.setFlagsFromString("--expose-gc"); -const collectGarbage = NodeVM.runInNewContext("gc") as () => void; - const cacheLayer = (directory: string) => PullRequestReadCache.make.pipe(Effect.provide(KeyValueStore.layerFileSystem(directory))); @@ -203,13 +199,10 @@ it.layer(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer))("PR filesystem ca it.effect("does not keep a caller's data alive after its reads and invalidations", () => Effect.gen(function* () { const cache = yield* PullRequestReadCache.make; - const sweeps: Array> = []; + class SweepData extends Map {} // Like a sync sweep: an Effect.fn made per run that closes over that run's data. const sweep = Effect.fn("sweep")(function* (index: number) { - const groups = new Map( - Array.from({ length: 1_000 }, (_, id) => [`group-${id}`, id]), - ); - sweeps.push(new WeakRef(groups)); + const groups = new SweepData(Array.from({ length: 1_000 }, (_, id) => [`group-${id}`, id])); const read = Effect.fn("read")(function* (pr: string) { const size = groups.size; yield* cache.invalidate(pr); @@ -219,10 +212,8 @@ it.layer(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer))("PR filesystem ca yield* Effect.forEach(["pr-1", "pr-2"], read, { discard: true }); }); for (let index = 0; index < 5; index++) yield* sweep(index); - // WeakRef targets stay alive until the current job ends, so yield before collecting. - yield* Effect.yieldNow; - collectGarbage(); - assert.strictEqual(sweeps.filter((sweepData) => sweepData.deref() !== undefined).length, 0); + // Counts after a full GC. A WeakRef would keep its target alive until the job ends. + assert.strictEqual(NodeV8.queryObjects(SweepData, { format: "count" }), 0); }).pipe(Effect.provide(KeyValueStore.layerMemory)), ); From bb26e569adff5a176f026ed631e5f33e49fb25fa Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 15:59:14 -0800 Subject: [PATCH 016/922] fix(cli): t3 pair's protocol mismatch hint keeps --base-dir (#35690) --- apps/server/src/cli/invocation.ts | 2 +- apps/server/src/cli/pair.test.ts | 5 ++++- apps/server/src/cli/pair.ts | 19 +++++++++++++++---- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/apps/server/src/cli/invocation.ts b/apps/server/src/cli/invocation.ts index 459fe6dcfe94d..71738820ccdeb 100644 --- a/apps/server/src/cli/invocation.ts +++ b/apps/server/src/cli/invocation.ts @@ -145,7 +145,7 @@ const powershellWord = (value: string) => .replaceAll("$", "`$") .replace(/["\u201C\u201D\u201E]/g, "$&$&")}"`; -const hostShellWord = (platform: NodeJS.Platform, value: string) => +export const hostShellWord = (platform: NodeJS.Platform, value: string) => platform === "win32" ? powershellWord(value) : shellWord(value); /** Script installs have no single launcher; desktop shims and standalone binaries do. */ diff --git a/apps/server/src/cli/pair.test.ts b/apps/server/src/cli/pair.test.ts index 01177bd6743cd..9619030be2fab 100644 --- a/apps/server/src/cli/pair.test.ts +++ b/apps/server/src/cli/pair.test.ts @@ -495,7 +495,10 @@ describe("t3 pair", () => { ]); assert.isTrue(Exit.isFailure(exit)); if (Exit.isFailure(exit)) { - assert.include(String(Cause.squash(exit.cause)), "t3@0.0.45 pair"); + assert.include( + String(Cause.squash(exit.cause)), + `t3@0.0.45 pair --base-dir ${baseDir}`, + ); } }), "127.0.0.1", diff --git a/apps/server/src/cli/pair.ts b/apps/server/src/cli/pair.ts index 71f380eb718bf..622b47f91a65e 100644 --- a/apps/server/src/cli/pair.ts +++ b/apps/server/src/cli/pair.ts @@ -48,7 +48,7 @@ import { } from "../startupAccess.ts"; import { authScopesFlag } from "./authScopes.ts"; import { baseDirFlag, DurationFromString } from "./config.ts"; -import { resolveHostCliCommand } from "./invocation.ts"; +import { hostShellWord, resolveHostCliCommand } from "./invocation.ts"; const WELL_KNOWN_ENVIRONMENT_PATH = "/.well-known/t3/environment"; const PAIR_PROBE_TIMEOUT = Duration.millis(2_500); @@ -84,12 +84,16 @@ export class NoRunningServerError extends Schema.TaggedError()( "IncompatibleServerProtocolError", - { serverVersion: Schema.String, serverProtocolVersion: Schema.Number }, + { + serverVersion: Schema.String, + serverProtocolVersion: Schema.Number, + pairCommand: Schema.String, + }, ) { override get message(): string { return [ `The running T3 Code server (${this.serverVersion}) speaks orchestration protocol ${String(this.serverProtocolVersion)}, but this CLI speaks protocol ${String(ORCHESTRATION_PROTOCOL_VERSION)}.`, - `Pair with the matching CLI instead: \`npx t3@${this.serverVersion} pair\`.`, + `Pair with the matching CLI instead: \`${this.pairCommand}\`.`, ].join("\n"); } } @@ -521,15 +525,22 @@ export const pairCommand = Command.make("pair", { const cliLogLevel = yield* GlobalFlag.LogLevel; const logLevel = Option.getOrElse(cliLogLevel, () => "Warn" as const); - const target = yield* discoverPairTarget(Option.getOrUndefined(flags.baseDir)); + const explicitBaseDir = Option.getOrUndefined(flags.baseDir); + const target = yield* discoverPairTarget(explicitBaseDir); // Each protocol keeps auth in its own database, so a token minted here // for another protocol's server would never be accepted by it. Refuse // before any local layer opens (and migrates) that database. const serverProtocolVersion = target.descriptor.orchestrationProtocolVersion ?? 1; if (serverProtocolVersion !== ORCHESTRATION_PROTOCOL_VERSION) { + const platform = yield* HostProcess.Platform; + const baseDirArgs = + explicitBaseDir !== undefined && explicitBaseDir.trim().length > 0 + ? ` --base-dir ${hostShellWord(platform, explicitBaseDir)}` + : ""; return yield* new IncompatibleServerProtocolError({ serverVersion: target.descriptor.serverVersion, serverProtocolVersion, + pairCommand: `npx t3@${target.descriptor.serverVersion} pair${baseDirArgs}`, }); } From 141de5e9f4c808d014aa96a60f5a1bb4c38d19a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20T=C3=B3rz?= <93620601+torztomasz@users.noreply.github.com> Date: Fri, 13 Nov 2026 00:59:25 +0100 Subject: [PATCH 017/922] fix(web): a dismissed provider banner stays dismissed when you switch threads (#25513) Co-authored-by: Julius Marminge --- apps/web/src/components/ChatView.tsx | 20 +++-- .../src/components/chat/ChatBannerLane.tsx | 13 +-- .../chat/ProviderStatusBanner.test.ts | 80 ++++++++++++++----- .../components/chat/ProviderStatusBanner.tsx | 39 ++++++++- 4 files changed, 110 insertions(+), 42 deletions(-) diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index 6616af7f3fbd5..8bc637443837e 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -309,8 +309,9 @@ import { shouldShowEnvironmentIndicator, } from "./BranchToolbar.logic"; import { - getProviderStatusBannerKey, + getProviderStatusDismissalKey, shouldShowProviderStatusBanner, + useProviderStatusBannerDismissed, } from "./chat/ProviderStatusBanner"; import { getThreadErrorBannerKey, @@ -1707,16 +1708,14 @@ export default function ChatView(props: ChatViewProps) { null, DismissedFallbackWindowSchema, ); - const providerStatusBannerKey = getProviderStatusBannerKey(activeProviderStatus); - const [dismissedProviderStatusBannerKey, setDismissedProviderStatusBannerKey] = useState< - string | null - >(null); - if (providerStatusBannerKey === null && dismissedProviderStatusBannerKey !== null) { - setDismissedProviderStatusBannerKey(null); - } + const providerStatusDismissalKey = getProviderStatusDismissalKey( + providerEnvironmentId, + activeProviderStatus, + ); + const providerStatusDismissed = useProviderStatusBannerDismissed(providerStatusDismissalKey); const visibleProviderStatus = shouldShowProviderStatusBanner( activeProviderStatus, - dismissedProviderStatusBannerKey, + providerStatusDismissed, ) ? activeProviderStatus : null; @@ -3376,8 +3375,7 @@ export default function ChatView(props: ChatViewProps) { >; + providerStatusDismissalKey: string | null; onOpenProviderSetup: (instanceId: ProviderInstanceId) => void; threadId: ThreadId; threadError: string | null; @@ -29,8 +31,7 @@ export function ChatBannerLane(props: { }) { const { providerStatus, - providerStatusBannerKey, - setDismissedProviderStatusBannerKey, + providerStatusDismissalKey, onOpenProviderSetup, threadId, threadError, @@ -45,7 +46,7 @@ export function ChatBannerLane(props: { setDismissedProviderStatusBannerKey(providerStatusBannerKey)} + onDismiss={() => dismissProviderStatusBannerForSession(providerStatusDismissalKey)} onOpenProviderSetup={onOpenProviderSetup} /> { it("shows and dismisses a warning on a healthy provider, then clears it after policy relaxation", () => { - expect(shouldShowProviderStatusBanner(provider, null)).toBe(true); - expect(shouldShowProviderStatusBanner(provider, getProviderStatusBannerKey(provider))).toBe( - false, - ); - expect( - shouldShowProviderStatusBanner( - { ...provider, version: "1.0.1" }, - getProviderStatusBannerKey(provider), - ), - ).toBe(true); + expect(shouldShowProviderStatusBanner(provider, false)).toBe(true); + expect(shownAfterDismissing(provider, provider)).toBe(false); + expect(shownAfterDismissing(provider, { ...provider, version: "1.0.1" })).toBe(true); const relaxed: ServerProvider = { ...provider, compatibilityAdvisory: { @@ -72,7 +75,7 @@ describe("compatibility banners", () => { recommendedRange: ">=1.14.19 <2.0.0", }, }; - expect(shouldShowProviderStatusBanner(broken, null)).toBe(true); + expect(shouldShowProviderStatusBanner(broken, false)).toBe(true); const timeoutOnly: ServerProvider = { ...broken, compatibilityAdvisory: { @@ -81,18 +84,13 @@ describe("compatibility banners", () => { message: null, }, }; - expect(shouldShowProviderStatusBanner(broken, getProviderStatusBannerKey(timeoutOnly))).toBe( - true, - ); - expect(shouldShowProviderStatusBanner(broken, getProviderStatusBannerKey(broken))).toBe(false); + expect(shownAfterDismissing(timeoutOnly, broken)).toBe(true); + expect(shownAfterDismissing(broken, broken)).toBe(false); expect( - shouldShowProviderStatusBanner( - { - ...broken, - compatibilityAdvisory: { ...broken.compatibilityAdvisory!, message: "Use 1.14.20." }, - }, - getProviderStatusBannerKey(broken), - ), + shownAfterDismissing(broken, { + ...broken, + compatibilityAdvisory: { ...broken.compatibilityAdvisory!, message: "Use 1.14.20." }, + }), ).toBe(true); expect(getProviderStatusMessage(broken)).toBe(message); expect( @@ -110,3 +108,41 @@ describe("compatibility banners", () => { ); }); }); + +describe("banner dismissal", () => { + const { compatibilityAdvisory: _advisory, ...healthy } = provider; + const failing: ServerProvider = { + ...healthy, + instanceId: ProviderInstanceId.make("codex-dismissal"), + status: "error", + message: "Could not start Codex CLI.", + }; + + it("keeps a dismissed status hidden in other views until the status changes", () => { + const key = getProviderStatusDismissalKey("environment-a", failing); + expect(isProviderStatusBannerDismissedForSession(key)).toBe(false); + + dismissProviderStatusBannerForSession(key); + + expect( + isProviderStatusBannerDismissedForSession( + getProviderStatusDismissalKey("environment-a", failing), + ), + ).toBe(true); + expect( + isProviderStatusBannerDismissedForSession( + getProviderStatusDismissalKey("environment-a", { ...failing, message: "Codex exited." }), + ), + ).toBe(false); + }); + + it("keeps a dismissal to the environment it was taken in", () => { + dismissProviderStatusBannerForSession(getProviderStatusDismissalKey("environment-c", failing)); + + expect( + isProviderStatusBannerDismissedForSession( + getProviderStatusDismissalKey("environment-d", failing), + ), + ).toBe(false); + }); +}); diff --git a/apps/web/src/components/chat/ProviderStatusBanner.tsx b/apps/web/src/components/chat/ProviderStatusBanner.tsx index 64afa55ed0d78..04f8a8a8535a8 100644 --- a/apps/web/src/components/chat/ProviderStatusBanner.tsx +++ b/apps/web/src/components/chat/ProviderStatusBanner.tsx @@ -4,7 +4,7 @@ import { type ServerProvider, } from "@t3tools/contracts"; import { useAtomValue } from "@effect/atom-react"; -import { memo, useRef, useState } from "react"; +import { memo, useRef, useState, useSyncExternalStore } from "react"; import { InfoIcon, XIcon } from "lucide-react"; import { Alert, AlertAction, AlertDescription, AlertTitle } from "../ui/alert"; import { Button, InlineButton } from "../ui/button"; @@ -51,10 +51,43 @@ export function getProviderStatusBannerKey(status: ServerProvider | null): strin export function shouldShowProviderStatusBanner( status: ServerProvider | null, - dismissedBannerKey: string | null, + isDismissed: boolean, ): boolean { + return getProviderStatusBannerKey(status) !== null && !isDismissed; +} + +// Built-in instance ids such as `codex` repeat across environments. +export function getProviderStatusDismissalKey( + environmentId: string | undefined, + status: ServerProvider | null, +): string | null { const bannerKey = getProviderStatusBannerKey(status); - return bannerKey !== null && bannerKey !== dismissedBannerKey; + return bannerKey === null ? null : `${environmentId ?? ""}\u0000${bannerKey}`; +} + +// A dismissal lasts the session, not one view, so opening another thread cannot bring it back. +const sessionDismissedProviderStatusBannerKeys = new Set(); +const dismissalListeners = new Set<() => void>(); + +export function dismissProviderStatusBannerForSession(bannerKey: string | null): void { + if (bannerKey === null || sessionDismissedProviderStatusBannerKeys.has(bannerKey)) return; + sessionDismissedProviderStatusBannerKeys.add(bannerKey); + for (const listener of dismissalListeners) listener(); +} + +export function isProviderStatusBannerDismissedForSession(bannerKey: string | null): boolean { + return bannerKey !== null && sessionDismissedProviderStatusBannerKeys.has(bannerKey); +} + +function subscribeToDismissals(listener: () => void) { + dismissalListeners.add(listener); + return () => dismissalListeners.delete(listener); +} + +export function useProviderStatusBannerDismissed(bannerKey: string | null): boolean { + return useSyncExternalStore(subscribeToDismissals, () => + isProviderStatusBannerDismissedForSession(bannerKey), + ); } export function hasProviderSetup(status: ServerProvider): boolean { From c19b8f04018f9495ddce67090c33c247ee095e58 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 15:59:51 -0800 Subject: [PATCH 018/922] fix(cli): t3 status no longer suggests --no-lan under a T3CODE_HOST override (#35691) --- apps/server/src/cli/up.test.ts | 28 +++++++++++++++++++++++----- apps/server/src/cli/up.ts | 4 ++-- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/apps/server/src/cli/up.test.ts b/apps/server/src/cli/up.test.ts index 659edc2e3fd18..f97a540570b6c 100644 --- a/apps/server/src/cli/up.test.ts +++ b/apps/server/src/cli/up.test.ts @@ -167,6 +167,8 @@ it.layer(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer, NetService.layer)) /** Runs as if in a terminal, answering each question with this text. */ readonly answer?: string; readonly prints?: string; + readonly omits?: string; + readonly json?: object; readonly env: string; readonly args: ReadonlyArray; readonly installs: number; @@ -271,12 +273,28 @@ it.layer(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer, NetService.layer)) installed: true, status: { current: false, otherBaseDir: "/srv/t3 home" }, reportStatus: true, + json: { + service: { otherBaseDir: "/srv/t3 home" }, + lan: { enabled: false, inheritedDefault: false }, + }, env: "", args: ["--json"], installs: 0, restarts: 0, envAfter: "", }, + { + label: "a host override gets no --no-lan hint it would ignore", + installed: true, + reportStatus: true, + prints: "overridden · T3CODE_HOST=0.0.0.0", + omits: "t3 up --no-lan", + env: "T3CODE_HOST=0.0.0.0\n", + args: [], + installs: 0, + restarts: 0, + envAfter: "T3CODE_HOST=0.0.0.0\n", + }, { label: "no service manager still records the choice", installed: false, @@ -371,11 +389,11 @@ it.layer(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer, NetService.layer)) if (input.prints !== undefined) { expect(lines.join("\n")).toContain(input.prints.replace("", baseDir)); } - if (input.reportStatus) { - expect(JSON.parse(lines.join("\n"))).toMatchObject({ - service: { otherBaseDir: "/srv/t3 home" }, - lan: { enabled: false, inheritedDefault: false }, - }); + if (input.omits !== undefined) { + expect(lines.join("\n")).not.toContain(input.omits); + } + if (input.json !== undefined) { + expect(JSON.parse(lines.join("\n"))).toMatchObject(input.json); } expect(exit._tag).toBe( input.restartFails === true || input.fails === true ? "Failure" : "Success", diff --git a/apps/server/src/cli/up.ts b/apps/server/src/cli/up.ts index 9bd0409f6ef9f..27a972d7bfe3f 100644 --- a/apps/server/src/cli/up.ts +++ b/apps/server/src/cli/up.ts @@ -42,7 +42,7 @@ interface Setup { /** T3 Connect revoked the link; `t3 connect` links again. */ readonly connectRevoked: boolean; readonly lan: boolean; - /** An installed service with no T3CODE_LAN keeps the old default: on. */ + /** An installed service with no T3CODE_LAN or T3CODE_HOST keeps the old default: on. */ readonly lanFromOldDefault: boolean; readonly host: string | undefined; } @@ -86,7 +86,7 @@ const readSetup = Effect.fn("cli.up.read_setup")(function* () { connect, connectRevoked, lan: Option.getOrElse(lan, () => servesThisHome), - lanFromOldDefault: Option.isNone(lan) && servesThisHome, + lanFromOldDefault: Option.isNone(lan) && servesThisHome && entries.T3CODE_HOST === undefined, host: entries.T3CODE_HOST, } satisfies Setup; }); From 2e741fc089e174818728e301ae11d7daf42d6b0f Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:00:05 -0800 Subject: [PATCH 019/922] fix(desktop): wait for the server's database upgrade instead of reporting a failed start (#35056) --- .../src/backend/DesktopBackendManager.test.ts | 43 +++++++++++++++++-- .../src/backend/DesktopBackendManager.ts | 7 +++ apps/server/src/persistence/Migrations.ts | 11 ++++- packages/shared/package.json | 4 ++ packages/shared/src/databaseMigrationLog.ts | 14 ++++++ 5 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 packages/shared/src/databaseMigrationLog.ts diff --git a/apps/desktop/src/backend/DesktopBackendManager.test.ts b/apps/desktop/src/backend/DesktopBackendManager.test.ts index 3126d12a2e938..e96e036b0c88b 100644 --- a/apps/desktop/src/backend/DesktopBackendManager.test.ts +++ b/apps/desktop/src/backend/DesktopBackendManager.test.ts @@ -5,6 +5,11 @@ import { type DesktopBackendBootstrap as DesktopBackendBootstrapValue, DesktopTelemetryControlMessage, } from "@t3tools/contracts"; +import { + DATABASE_MIGRATION_PROGRESS_MESSAGE, + DATABASE_MIGRATIONS_FINISHED_MESSAGE, + DATABASE_MIGRATIONS_STARTED_MESSAGE, +} from "@t3tools/shared/databaseMigrationLog"; import { assert, describe, it } from "@effect/vitest"; import * as Deferred from "effect/Deferred"; import * as Duration from "effect/Duration"; @@ -688,12 +693,21 @@ describe("DesktopBackendManager", () => { Effect.scoped( Effect.gen(function* () { const reports = yield* Queue.unbounded(); - const startInstance = (status: Ref.Ref, onReady?: Effect.Effect) => + const startInstance = ( + status: Ref.Ref, + onReady?: Effect.Effect, + stdout = "", + ) => makeTestInstance({ spawnerLayer: Layer.succeed( ChildProcessSpawner.ChildProcessSpawner, ChildProcessSpawner.make(() => - Effect.succeed(makeProcess({ exitCode: Effect.never })), + Effect.succeed( + makeProcess({ + exitCode: Effect.never, + stdout: Stream.make(new TextEncoder().encode(stdout)), + }), + ), ), ), httpClientLayer: layerHttpClient((request) => @@ -712,7 +726,30 @@ describe("DesktopBackendManager", () => { yield* Deferred.await(ready); assert.isTrue(Option.isNone(yield* Queue.poll(reports))); - yield* startInstance(yield* Ref.make(503)); + const migratingStatus = yield* Ref.make(503); + const migrated = yield* Deferred.make(); + yield* startInstance( + migratingStatus, + Deferred.succeed(migrated, undefined).pipe(Effect.asVoid), + // Enough progress lines that the start line scrolls out of the output tail. + `INFO ${DATABASE_MIGRATIONS_STARTED_MESSAGE}\n` + + Array.from( + { length: 80 }, + (_, index) => + `INFO ${DATABASE_MIGRATION_PROGRESS_MESSAGE} migration=${index}_Migration progress="${index + 1} of 80"\n`, + ).join(""), + ); + yield* TestClock.adjust(Duration.minutes(10)); + assert.isTrue(Option.isNone(yield* Queue.poll(reports))); + yield* Ref.set(migratingStatus, 200); + yield* TestClock.adjust(Duration.millis(100)); + yield* Deferred.await(migrated); + + yield* startInstance( + yield* Ref.make(503), + undefined, + `${DATABASE_MIGRATIONS_STARTED_MESSAGE}\n${DATABASE_MIGRATIONS_FINISHED_MESSAGE}\n`, + ); yield* TestClock.adjust(Duration.seconds(179)); assert.isTrue(Option.isNone(yield* Queue.poll(reports))); yield* TestClock.adjust(Duration.seconds(1)); diff --git a/apps/desktop/src/backend/DesktopBackendManager.ts b/apps/desktop/src/backend/DesktopBackendManager.ts index d24b2f52f295c..970ff2001d399 100644 --- a/apps/desktop/src/backend/DesktopBackendManager.ts +++ b/apps/desktop/src/backend/DesktopBackendManager.ts @@ -25,6 +25,7 @@ import { DesktopTelemetryControlMessage, type DesktopTelemetryControlMessage as DesktopTelemetryControlMessageValue, } from "@t3tools/contracts"; +import { isRunningDatabaseMigrations } from "@t3tools/shared/databaseMigrationLog"; import { waitForHttpReady as waitForHttpReadyShared } from "@t3tools/shared/httpReadiness"; import * as DesktopObservability from "../app/DesktopObservability.ts"; @@ -971,6 +972,12 @@ export const makeBackendInstance = Effect.fn("makeBackendInstance")(function* ( }), onReadinessFailure: Effect.fn("desktop.backendInstance.onReadinessFailure")( function* (error) { + if (isRunningDatabaseMigrations(yield* Ref.get(outputTail))) { + yield* logInstanceWarning("backend is still migrating its database; waiting", { + error: error.message, + }); + return; + } yield* logInstanceWarning("backend readiness check failed during bootstrap", { error: error.message, }); diff --git a/apps/server/src/persistence/Migrations.ts b/apps/server/src/persistence/Migrations.ts index 9b6e2b3e0fc76..0a9de69d8fafa 100644 --- a/apps/server/src/persistence/Migrations.ts +++ b/apps/server/src/persistence/Migrations.ts @@ -1,6 +1,11 @@ import * as Migrator from "effect/sql/Migrator"; import * as Effect from "effect/Effect"; import * as SqlClient from "effect/sql/SqlClient"; +import { + DATABASE_MIGRATION_PROGRESS_MESSAGE, + DATABASE_MIGRATIONS_FINISHED_MESSAGE, + DATABASE_MIGRATIONS_STARTED_MESSAGE, +} from "@t3tools/shared/databaseMigrationLog"; import { reconcileV2PreviewMigration } from "./reconcileV2PreviewMigration.ts"; import Migration0001 from "./Migrations/001_OrchestrationEvents.ts"; @@ -264,6 +269,8 @@ export interface RunMigrationsOptions { export const runMigrations = Effect.fn("runMigrations")(function* ({ toMigrationInclusive, }: RunMigrationsOptions = {}) { + // The desktop waits past its readiness budget until the finished line follows this one. + if (yield* hasPendingMigrations()) yield* Effect.log(DATABASE_MIGRATIONS_STARTED_MESSAGE); const includesV2 = toMigrationInclusive === undefined || toMigrationInclusive >= FIRST_V2_MIGRATION_ID; const previewMigrations = includesV2 ? yield* reconcileV2PreviewMigration() : []; @@ -290,7 +297,7 @@ export const runMigrations = Effect.fn("runMigrations")(function* ({ const executedMigrations: Array = [...previewMigrations]; for (const [index, [id, name]] of pending.entries()) { if (latestRecordedId > 0) { - yield* Effect.log("Upgrading database").pipe( + yield* Effect.log(DATABASE_MIGRATION_PROGRESS_MESSAGE).pipe( Effect.annotateLogs({ migration: `${id}_${name}`, progress: `${index + 1} of ${pending.length}`, @@ -302,7 +309,7 @@ export const runMigrations = Effect.fn("runMigrations")(function* ({ const migrations = executedMigrations.map(([id, name]) => `${id}_${name}`); yield* migrations.length === 0 ? Effect.logDebug("Database schema is current") - : Effect.log("Migrations ran successfully").pipe(Effect.annotateLogs({ migrations })); + : Effect.log(DATABASE_MIGRATIONS_FINISHED_MESSAGE).pipe(Effect.annotateLogs({ migrations })); const recorded = yield* sql<{ readonly migration_id: number; diff --git a/packages/shared/package.json b/packages/shared/package.json index f5f769236f906..9df772f66d238 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -367,6 +367,10 @@ "types": "./src/testing/symlinks.ts", "import": "./src/testing/symlinks.ts" }, + "./databaseMigrationLog": { + "types": "./src/databaseMigrationLog.ts", + "import": "./src/databaseMigrationLog.ts" + }, "./httpReadiness": { "types": "./src/httpReadiness.ts", "import": "./src/httpReadiness.ts" diff --git a/packages/shared/src/databaseMigrationLog.ts b/packages/shared/src/databaseMigrationLog.ts new file mode 100644 index 0000000000000..7adc4e4a6c84c --- /dev/null +++ b/packages/shared/src/databaseMigrationLog.ts @@ -0,0 +1,14 @@ +// The server logs these around pending migrations; the desktop reads them from its output tail, +// which keeps only the last few thousand characters, so each progress line also marks a running upgrade. +export const DATABASE_MIGRATIONS_STARTED_MESSAGE = "Running database migrations"; +export const DATABASE_MIGRATION_PROGRESS_MESSAGE = "Upgrading database"; +export const DATABASE_MIGRATIONS_FINISHED_MESSAGE = "Migrations ran successfully"; + +export function isRunningDatabaseMigrations(output: string): boolean { + return ( + Math.max( + output.lastIndexOf(DATABASE_MIGRATIONS_STARTED_MESSAGE), + output.lastIndexOf(DATABASE_MIGRATION_PROGRESS_MESSAGE), + ) > output.lastIndexOf(DATABASE_MIGRATIONS_FINISHED_MESSAGE) + ); +} From 39f465a926ca95496708f798a823600e07fe6060 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:00:28 -0800 Subject: [PATCH 020/922] fix(server): a C# dictionary term no longer rewrites standalone letters (#35700) --- apps/server/src/speech/SpeechService.test.ts | 5 +++-- apps/server/src/speech/customWords.ts | 10 ++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/apps/server/src/speech/SpeechService.test.ts b/apps/server/src/speech/SpeechService.test.ts index c47174e46f1cb..2e05132cd6eea 100644 --- a/apps/server/src/speech/SpeechService.test.ts +++ b/apps/server/src/speech/SpeechService.test.ts @@ -449,14 +449,15 @@ it.effect("honors exact aliases and phrase boundaries in batch and streamed text { term: "GitHub", aliases: [] }, { term: "McDonald’s", aliases: [] }, { term: "King’s Cross", aliases: [] }, + { term: "C#", aliases: [] }, ], }; const spoken = 'a test with a i and ay eye. Robert, Roberts. "the publisher" and the publisher. (git hub), git (hub). ' + - "git hub's API, git hub’s API, git’s hub, mac donald's menu, king's cross."; + "git hub's API, git hub’s API, git’s hub, mac donald's menu, king's cross. vitamin c and plan c."; const expected = "a test with AI and AI. Bob, Roberts. O'Reilly and the publisher. (GitHub), git (hub). " + - "GitHub's API, GitHub’s API, git’s hub, McDonald’s menu, King’s Cross."; + "GitHub's API, GitHub’s API, git’s hub, McDonald’s menu, King’s Cross. vitamin c and plan c."; native.transcribe.mockResolvedValueOnce({ text: spoken }); native.finish.mockResolvedValueOnce(spoken); expect(yield* speech.transcribe(pcm(), options)).toBe(expected); diff --git a/apps/server/src/speech/customWords.ts b/apps/server/src/speech/customWords.ts index e788c9188a092..98c55e883749a 100644 --- a/apps/server/src/speech/customWords.ts +++ b/apps/server/src/speech/customWords.ts @@ -71,8 +71,14 @@ export function makeSpeechTextCorrector( const customWordKeys = (words: readonly string[]): CustomWordKey[] => words.flatMap((word) => { - const keys = [matchKey(word)]; - if (word.includes("&")) keys.push(matchKey(word.replaceAll("&", " and "))); + const sources = [word]; + if (word.includes("&")) sources.push(word.replaceAll("&", " and ")); + const keys = sources.flatMap((source) => { + const key = matchKey(source); + // A term that loses its symbols to one letter (C# -> c) would claim every standalone letter. + const lostSymbols = key !== source.replace(/\s+/gu, "").toLocaleLowerCase(); + return key.length < 2 && lostSymbols ? [] : [key]; + }); return [...new Set(keys)].filter(isAsciiKey).map((key) => ({ word, key })); }); From c1b42c17dc1466aba893ef180b23a8413a132ea9 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:05:34 -0800 Subject: [PATCH 021/922] fix(client-runtime): last user message sort ignores agent-posted messages (#33873) --- .../client-runtime/src/state/threadSearch.ts | 9 +-------- .../src/state/threadSort.test.ts | 20 +++++++++++++++++++ .../client-runtime/src/state/threadSort.ts | 13 ++++++++++++ 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/packages/client-runtime/src/state/threadSearch.ts b/packages/client-runtime/src/state/threadSearch.ts index 23794cec2c33e..81ff06b0861ed 100644 --- a/packages/client-runtime/src/state/threadSearch.ts +++ b/packages/client-runtime/src/state/threadSearch.ts @@ -246,14 +246,7 @@ function buildThreadSearchSubject( projectTitle: string | null | undefined, environmentLabel: string | null | undefined, ): ThreadSearchSubject { - // What the user wrote, not agent wakes or task notices in the user role. A - // thread the user never wrote in counts from its creation; an older server - // omits the field, so the latest user-role message stands in. - const authored = thread.latestUserAuthoredMessageAt; - const activityAt = - authored === undefined - ? getThreadSortTimestamp(thread, "updated_at") - : Date.parse(authored ?? thread.createdAt); + const activityAt = getThreadSortTimestamp(thread, "updated_at"); const localOpenedAt = localThreadOpens.get(`${thread.environmentId}:${thread.id}`) ?? 0; return { id: thread.id, diff --git a/packages/client-runtime/src/state/threadSort.test.ts b/packages/client-runtime/src/state/threadSort.test.ts index ec03d0760bd8b..3ac982044b5bb 100644 --- a/packages/client-runtime/src/state/threadSort.test.ts +++ b/packages/client-runtime/src/state/threadSort.test.ts @@ -172,6 +172,26 @@ describe("sortThreads", () => { expect(sorted.map((thread) => thread.id)).toEqual(["thread-1", "thread-2"]); }); + + it("orders last user message by what the user wrote, not agent messages in the user role", () => { + const sorted = sortThreads( + [ + makeThread({ + id: "agent-posted", + latestUserAuthoredMessageAt: "2026-03-09T10:00:00.000Z", + latestUserMessageAt: "2026-03-09T10:30:00.000Z", + }), + makeThread({ + id: "user-wrote", + latestUserAuthoredMessageAt: "2026-03-09T10:10:00.000Z", + latestUserMessageAt: "2026-03-09T10:10:00.000Z", + }), + ], + "updated_at", + ); + + expect(sorted.map((thread) => thread.id)).toEqual(["user-wrote", "agent-posted"]); + }); }); describe("planPinnedReorder with hidden rows", () => { diff --git a/packages/client-runtime/src/state/threadSort.ts b/packages/client-runtime/src/state/threadSort.ts index 89b412a2c5dab..b8a6b80db9daa 100644 --- a/packages/client-runtime/src/state/threadSort.ts +++ b/packages/client-runtime/src/state/threadSort.ts @@ -6,6 +6,7 @@ export interface ThreadSortInput { readonly createdAt: string; readonly updatedAt: string; readonly latestUserMessageAt?: string | null; + readonly latestUserAuthoredMessageAt?: string | null; readonly messages?: ReadonlyArray<{ readonly createdAt: string; readonly role: string; @@ -80,6 +81,18 @@ function getFirstSortableTimestamp(...values: Array): } function getLatestUserMessageTimestamp(thread: ThreadSortInput): number { + // Agents also post in the user role; only what the user wrote counts. A thread + // the user never wrote in counts from its creation; older servers omit the field. + if (thread.latestUserAuthoredMessageAt !== undefined) { + return ( + getFirstSortableTimestamp( + thread.latestUserAuthoredMessageAt, + thread.createdAt, + thread.updatedAt, + ) ?? Number.NEGATIVE_INFINITY + ); + } + if (thread.latestUserMessageAt) { const latestUserMessageTimestamp = toSortableTimestamp(thread.latestUserMessageAt); if (latestUserMessageTimestamp !== null) { From f8372d1bafc3cd9f0bbf2a9ac169693291a691c0 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:09:07 -0800 Subject: [PATCH 022/922] fix(web): long screen-reader announcements keep emoji whole at the cutoff (#35681) --- .../chat/turnDetailAnnouncement.test.ts | 11 ++++++++++ .../components/chat/turnDetailAnnouncement.ts | 21 +++++++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/apps/web/src/components/chat/turnDetailAnnouncement.test.ts b/apps/web/src/components/chat/turnDetailAnnouncement.test.ts index c5eaa080ff921..99fcfcd4fd864 100644 --- a/apps/web/src/components/chat/turnDetailAnnouncement.test.ts +++ b/apps/web/src/components/chat/turnDetailAnnouncement.test.ts @@ -133,6 +133,11 @@ describe("turnDetail", () => { expect(turnDetail(entries, undefined, null).activity).toBe(activity); }); + it("cuts a long step without splitting an emoji", () => { + const edit = work("edit", { itemType: "file_change", changedFiles: [`${"a".repeat(111)}😀z`] }); + expect(turnDetail([prompt, edit], undefined, null).activity).not.toMatch(/[\uD800-\uDFFF]/u); + }); + it.each<{ name: string; entries: ReadonlyArray; @@ -297,6 +302,12 @@ describe("nextTurnDetailAnnouncement", () => { ).toEqual(["T3 Code: Tests pass in web. See the docs"]); }); + it("cuts a long message without splitting an emoji", () => { + const long = { ...said("long", true, true), text: `${"a".repeat(1999)}😀z` }; + const [spoken] = speak("messages", [frame(null), frame(null, [long])]); + expect(spoken).not.toMatch(/[\uD800-\uDFFF]/u); + }); + it("says a step again after waiting on the user", () => { expect( speak("everything", [ diff --git a/apps/web/src/components/chat/turnDetailAnnouncement.ts b/apps/web/src/components/chat/turnDetailAnnouncement.ts index 0728674ad8744..acebdfb9f7003 100644 --- a/apps/web/src/components/chat/turnDetailAnnouncement.ts +++ b/apps/web/src/components/chat/turnDetailAnnouncement.ts @@ -34,6 +34,13 @@ const ACTIVITY_MAX_LENGTH = 120; // Parsing is synchronous, and nobody listens to a longer message through a live region. const MESSAGE_MAX_LENGTH = 2_000; +/** The first `maxLength` code points of `text`, or null when it has no more than that. */ +function cutText(text: string, maxLength: number): string | null { + if (text.length <= maxLength) return null; + const characters = Array.from(text); + return characters.length > maxLength ? characters.slice(0, maxLength).join("") : null; +} + // On screen these labels are a path or a query beside an icon. function withVerb(work: WorkLogEntry, label: string) { if (work.itemType === "file_change") return `Editing ${label}`; @@ -66,7 +73,8 @@ function stepLabel(work: WorkLogEntry, workspaceRoot: string | undefined): strin const label = liveWorkEntryLabel(work, workspaceRoot, true).replace(/\s+/g, " ").trim(); if (label === "") return null; const spoken = withVerb(work, label); - return spoken.length > ACTIVITY_MAX_LENGTH ? `${spoken.slice(0, ACTIVITY_MAX_LENGTH)}…` : spoken; + const cut = cutText(spoken, ACTIVITY_MAX_LENGTH); + return cut === null ? spoken : `${cut}…`; } /** @@ -189,11 +197,12 @@ export function nextTurnDetailAnnouncement( previous.messages.get(message.id) !== true && (message.fresh || previous.messages.has(message.id)), ) - .map((message) => - message.text.length > MESSAGE_MAX_LENGTH - ? `${markdownPlainText(message.text.slice(0, MESSAGE_MAX_LENGTH))} More in the thread.` - : markdownPlainText(message.text), - ) + .map((message) => { + const cut = cutText(message.text, MESSAGE_MAX_LENGTH); + return cut === null + ? markdownPlainText(message.text) + : `${markdownPlainText(cut)} More in the thread.`; + }) .filter((text) => text !== "") .map((text) => `${MESSAGE_AUTHOR}: ${text}`), activity: From 82839de0942fbcdd94cc25241e47698bdc82f8e5 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:09:47 -0800 Subject: [PATCH 023/922] fix(server): Claude context meter honours CLAUDE_CODE_AUTO_COMPACT_WINDOW (#33806) --- .../Adapters/ClaudeAdapterV2.test.ts | 23 +++++++- .../Adapters/ClaudeAdapterV2.ts | 55 ++++++++++++------- 2 files changed, 58 insertions(+), 20 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts index 95432c40e6887..cfd6c526b2726 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts @@ -9083,9 +9083,29 @@ describe("ClaudeAdapterV2 background wake turns", () => { '{"autoCompactWindow":500000,"modelSettings":{"claude-opus-5-5":{"autoCompactWindow":50000}}}', threshold: 467_000, }, + { + autoCompactWindow: "", + model: "claude-opus-5-5", + userSettings: '{"env":{"CLAUDE_CODE_AUTO_COMPACT_WINDOW":"300000"}}', + threshold: 267_000, + }, + { + autoCompactWindow: "", + model: "claude-opus-5-5", + environment: { CLAUDE_CODE_AUTO_COMPACT_WINDOW: "300000" }, + threshold: 267_000, + }, ])( "ignores stale snapshots after compaction and reports threshold $autoCompactWindow for $model", - ({ autoCompactWindow, model, threshold, userSettings, projectSettings, launchArgs }) => + ({ + autoCompactWindow, + model, + threshold, + userSettings, + projectSettings, + launchArgs, + environment, + }) => Effect.gen(function* () { const fileSystem = yield* FileSystem.FileSystem; const path = yield* Path.Path; @@ -9108,6 +9128,7 @@ describe("ClaudeAdapterV2 background wake turns", () => { homePath: home, launchArgs: launchArgs ?? "", }, + ...(environment === undefined ? {} : { environment }), }); yield* harness.runtime.startTurn( makeClaudeTestTurnInput({ diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts index 3e10e09906796..a58f91124f16d 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts @@ -5319,11 +5319,11 @@ export const makeClaudeAdapterV2 = Effect.fn("makeClaudeAdapterV2")(function* ( }, ); - const readToolSearchSetting = (filePath: string) => + const readSettingsEnv = (filePath: string, name: string) => fileSystem.readFileString(filePath).pipe( Effect.flatMap(decodeClaudeEnvSettings), Effect.map((settings) => { - const value = settings.env?.ENABLE_TOOL_SEARCH; + const value = settings.env?.[name]; return typeof value === "string" ? value : undefined; }), Effect.orElseSucceed(() => undefined), @@ -5381,17 +5381,26 @@ export const makeClaudeAdapterV2 = Effect.fn("makeClaudeAdapterV2")(function* ( // Settings env beats the process env, --settings over local over project over user, and a local // file an older Claude Code left in cwd applies under the root one. resolveSettings reads local // from cwd only. - const resolveToolSearchOverride = Effect.fn("ClaudeAdapterV2.resolveToolSearchOverride")( - function* (cwd: string | null, launchArgSettings: ClaudeSdkSettings | undefined) { - const launchValue = launchArgSettings?.env?.ENABLE_TOOL_SEARCH; - if (typeof launchValue === "string") return claudeToolSearchOverride(launchValue); - for (const settingsFile of yield* settingsFilesByPrecedence(cwd)) { - const value = yield* readToolSearchSetting(settingsFile); - if (value !== undefined) return claudeToolSearchOverride(value); - } - return claudeToolSearchOverride(adapterOptions.environment.ENABLE_TOOL_SEARCH); - }, - ); + const resolveClaudeEnv = Effect.fn("ClaudeAdapterV2.resolveClaudeEnv")(function* ( + cwd: string | null, + launchArgSettings: ClaudeSdkSettings | undefined, + name: string, + ) { + const launchValue = launchArgSettings?.env?.[name]; + if (typeof launchValue === "string") return launchValue; + for (const settingsFile of yield* settingsFilesByPrecedence(cwd)) { + const value = yield* readSettingsEnv(settingsFile, name); + if (value !== undefined) return value; + } + return adapterOptions.environment[name]; + }); + const resolveToolSearchOverride = ( + cwd: string | null, + launchArgSettings: ClaudeSdkSettings | undefined, + ) => + resolveClaudeEnv(cwd, launchArgSettings, "ENABLE_TOOL_SEARCH").pipe( + Effect.map(claudeToolSearchOverride), + ); const resolveAutoCompactWindow = Effect.fn("ClaudeAdapterV2.resolveAutoCompactWindow")(function* ( cwd: string | null, @@ -5400,6 +5409,20 @@ export const makeClaudeAdapterV2 = Effect.fn("makeClaudeAdapterV2")(function* ( ) { if (adapterOptions.settings.autoCompactWindow !== "") return adapterOptions.settings.autoCompactWindow; + const validWindow = (value: unknown) => { + const selected = Option.getOrUndefined(decodeClaudeCompactWindow(value)); + return typeof selected === "number" && selected >= 100_000 && selected <= 1_000_000 + ? String(selected) + : undefined; + }; + // Claude gives CLAUDE_CODE_AUTO_COMPACT_WINDOW precedence over the autoCompactWindow keys. + const envValue = yield* resolveClaudeEnv( + cwd, + launchArgSettings, + "CLAUDE_CODE_AUTO_COMPACT_WINDOW", + ); + const envWindow = envValue === undefined ? undefined : validWindow(Number(envValue)); + if (envWindow !== undefined) return envWindow; const model = compileClaudeModelSelection(modelSelection).apiModelId.replace(/\[1m\]$/i, ""); const windowFrom = (settings: unknown) => { if (typeof settings !== "object" || settings === null) return undefined; @@ -5410,12 +5433,6 @@ export const makeClaudeAdapterV2 = Effect.fn("makeClaudeAdapterV2")(function* ( typeof modelSetting === "object" && modelSetting !== null ? Reflect.get(modelSetting, "autoCompactWindow") : undefined; - const validWindow = (value: unknown) => { - const selected = Option.getOrUndefined(decodeClaudeCompactWindow(value)); - return typeof selected === "number" && selected >= 100_000 && selected <= 1_000_000 - ? String(selected) - : undefined; - }; return modelWindow === "auto" ? "" : (validWindow(modelWindow) ?? validWindow(Reflect.get(settings, "autoCompactWindow"))); From e0d6aadb88d229746be9503c510baaccbad84f4f Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:11:11 -0800 Subject: [PATCH 024/922] feat(server): watched GitHub pull requests react when a check suite completes (#35709) Co-authored-by: Claude Opus 5.5 --- .../src/server/gitHubPullRequestEvents.test.ts | 1 + .../src/server/gitHubPullRequestEvents.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/source-control-github/src/server/gitHubPullRequestEvents.test.ts b/packages/source-control-github/src/server/gitHubPullRequestEvents.test.ts index cc944ff0a0b27..59f92c4bc49b0 100644 --- a/packages/source-control-github/src/server/gitHubPullRequestEvents.test.ts +++ b/packages/source-control-github/src/server/gitHubPullRequestEvents.test.ts @@ -120,6 +120,7 @@ it.effect("follows a pull request across a refused app token, reconnects, and re "com.github.pull_request.head.changed.v1", "com.github.pull_request.state.changed.v1", "com.github.pull_request.merge_conflict.v1", + "com.github.pull_request.check_suite.status.changed.v1", ], }); assert.deepEqual(deletes, ["event-subscriptions/1", "event-subscriptions/2"]); diff --git a/packages/source-control-github/src/server/gitHubPullRequestEvents.ts b/packages/source-control-github/src/server/gitHubPullRequestEvents.ts index 7afccc73990b3..ddd9ee99f2701 100644 --- a/packages/source-control-github/src/server/gitHubPullRequestEvents.ts +++ b/packages/source-control-github/src/server/gitHubPullRequestEvents.ts @@ -12,12 +12,13 @@ import { HttpClient, HttpClientRequest } from "effect/http"; import * as GitHubRest from "./GitHubRest.ts"; -/** Events only say that something changed; readers fetch the pull request for what. */ +/** Readers fetch the pull request on every event, so check suites' conclusions go unused. */ const EVENT_TYPES = [ "com.github.pull_request.review.submitted.v1", "com.github.pull_request.head.changed.v1", "com.github.pull_request.state.changed.v1", "com.github.pull_request.merge_conflict.v1", + "com.github.pull_request.check_suite.status.changed.v1", ]; const API_ORIGIN = "https://api.github.com"; /** GitHub sends a keep-alive at least every 15 seconds while a stream is idle. */ From 9b0387d6cd574517a3209dd97b7eb88b26c3b5ca Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:14:45 -0800 Subject: [PATCH 025/922] fix(web): triple-click selects the whole line around links and file chips (#32334) --- .../components/ChatMarkdown.browser.test.tsx | 36 +++++++++++++++++++ .../components/chat/MarkdownExternalLink.tsx | 8 ++--- apps/web/src/index.css | 19 ++++++++++ 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/apps/web/src/components/ChatMarkdown.browser.test.tsx b/apps/web/src/components/ChatMarkdown.browser.test.tsx index 24e0b6655ff7c..b4bbdf186c3c9 100644 --- a/apps/web/src/components/ChatMarkdown.browser.test.tsx +++ b/apps/web/src/components/ChatMarkdown.browser.test.tsx @@ -579,6 +579,42 @@ describe("ChatMarkdown inline code selection", () => { await userEvent.dblClick(fenced, { position: { x: 4, y: 4 } }); expect(window.getSelection()?.toString()).toBe("fenced"); }); + + it("selects the whole line on triple-click beside a favicon link or a file chip", async () => { + setup(); + await using screen = await renderText( + "Before [docs](https://example.com/docs) after words\n\nBefore [App.tsx](/tmp/project/src/App.tsx) after words", + ); + const tripleClickWord = async (paragraph: HTMLElement, word: string) => { + const text = [...paragraph.childNodes].find((node) => node.textContent?.includes(word))!; + const range = document.createRange(); + range.setStart(text, text.textContent!.indexOf(word)); + range.setEnd(text, text.textContent!.indexOf(word) + word.length); + const wordBox = range.getBoundingClientRect(); + const paragraphBox = paragraph.getBoundingClientRect(); + window.getSelection()?.removeAllRanges(); + await userEvent.tripleClick(paragraph, { + position: { + x: wordBox.left - paragraphBox.left + wordBox.width / 2, + y: wordBox.top - paragraphBox.top + wordBox.height / 2, + }, + }); + return window.getSelection()?.toString().trim(); + }; + + const paragraphs = screen.container.querySelectorAll("p"); + expect(paragraphs).toHaveLength(2); + const selections = []; + const lines = []; + for (const paragraph of paragraphs) { + lines.push(paragraph.textContent?.trim(), paragraph.textContent?.trim()); + selections.push( + await tripleClickWord(paragraph, "Before"), + await tripleClickWord(paragraph, "after"), + ); + } + expect(selections).toEqual(lines); + }); }); describe("ChatMarkdown file chip tooltips", () => { diff --git a/apps/web/src/components/chat/MarkdownExternalLink.tsx b/apps/web/src/components/chat/MarkdownExternalLink.tsx index e1d8f0a06bb57..8370d99b1258d 100644 --- a/apps/web/src/components/chat/MarkdownExternalLink.tsx +++ b/apps/web/src/components/chat/MarkdownExternalLink.tsx @@ -7,7 +7,8 @@ import { sourceControlClients } from "@t3tools/client-runtime/source-control-cli import { cn } from "../../lib/utils"; import { sourceControlIcon } from "../../sourceControlPresentation"; -const MARKDOWN_LINK_FAVICON_CLASS_NAME = "block size-full shrink-0 select-none"; +// Inline-level and selectable: triple-click selection stops at block-level and select-none boxes. +const MARKDOWN_LINK_FAVICON_CLASS_NAME = "inline-block size-[14px] [vertical-align:-0.125em]"; const failedFaviconHosts = new Set(); @@ -23,10 +24,7 @@ const MarkdownLinkFavicon = memo(function MarkdownLinkFavicon({ host }: { host: const brandIcon = sourceControlHostIcon(host); const faviconUrl = brandIcon ? null : faviconUrlForOrigin(`https://${host}`); return ( - + {brandIcon ? ( brandIcon ) : faviconUrl === null || failedHost === host || failedFaviconHosts.has(host) ? ( diff --git a/apps/web/src/index.css b/apps/web/src/index.css index 676e120e826de..b4597954cb764 100644 --- a/apps/web/src/index.css +++ b/apps/web/src/index.css @@ -2039,6 +2039,25 @@ code { text-decoration: none; } +/* Triple-click selection stops at block-level boxes, flex items included, so file chips in + prose stay inline-level down to the icon and label. */ +.chat-markdown-file-link { + display: inline-block; + overflow-x: clip; + text-overflow: ellipsis; + white-space: nowrap; +} + +.chat-markdown-file-link > :is(svg, img) { + display: inline; + margin-inline-end: 0.2em; + vertical-align: -0.125em; +} + +.chat-markdown-file-link > [data-slot="context-chip-label"] { + display: inline; +} + /* File links and context chips own their color and focus ring. */ .chat-markdown a:not(.chat-markdown-file-link, :has([data-slot="context-chip-label"])) { color: var(--info-foreground); From 56d227836bd815e0cff5d62196299156985cd8d7 Mon Sep 17 00:00:00 2001 From: maria Date: Fri, 13 Nov 2026 00:16:55 +0000 Subject: [PATCH 026/922] fix(projects): preserve grouped renames to repository names (#25244) Co-authored-by: MacKinley Smith <1738501+mackinleysmith@users.noreply.github.com> Co-authored-by: Julius Marminge --- .../orchestration-v2/ProjectCommands.test.ts | 1 + .../src/orchestration-v2/ProjectStore.test.ts | 64 +++++++++++++++++++ .../src/orchestration-v2/ProjectStore.ts | 16 ++++- .../orchestration-v2/RuntimePolicy.test.ts | 1 + .../ThreadLaunchService.test.ts | 1 + .../ThreadTitleRegenerationService.test.ts | 1 + apps/server/src/persistence/Migrations.ts | 2 + .../087_ProjectionProjectsCustomTitle.test.ts | 41 ++++++++++++ .../087_ProjectionProjectsCustomTitle.ts | 26 ++++++++ .../reconcileV2PreviewMigration.test.ts | 2 + .../ProjectSettingsPanel.logic.test.ts | 22 ++++++- .../settings/ProjectSettingsPanel.logic.ts | 7 +- .../settings/ProjectSettingsPanel.tsx | 10 +-- .../src/state/projectGrouping.test.ts | 14 ++++ .../src/state/projectGrouping.ts | 8 ++- .../contracts/src/orchestrationProject.ts | 3 + 16 files changed, 202 insertions(+), 17 deletions(-) create mode 100644 apps/server/src/persistence/Migrations/087_ProjectionProjectsCustomTitle.test.ts create mode 100644 apps/server/src/persistence/Migrations/087_ProjectionProjectsCustomTitle.ts diff --git a/apps/server/src/orchestration-v2/ProjectCommands.test.ts b/apps/server/src/orchestration-v2/ProjectCommands.test.ts index 96249ece4c106..85cf6d08efc18 100644 --- a/apps/server/src/orchestration-v2/ProjectCommands.test.ts +++ b/apps/server/src/orchestration-v2/ProjectCommands.test.ts @@ -19,6 +19,7 @@ const row = (overrides: Partial = {}): ProjectRow => ({ workspaceRoot: "/tmp/scripts", defaultModelSelection: null, defaultThreadEnvMode: null, + hasCustomTitle: false, autoPull: false, faviconPath: null, projectIcon: null, diff --git a/apps/server/src/orchestration-v2/ProjectStore.test.ts b/apps/server/src/orchestration-v2/ProjectStore.test.ts index 3eeabb6f89a83..322ae0641758c 100644 --- a/apps/server/src/orchestration-v2/ProjectStore.test.ts +++ b/apps/server/src/orchestration-v2/ProjectStore.test.ts @@ -96,5 +96,69 @@ it.layer(ProjectStore.layer.pipe(Layer.provideMerge(SqlitePersistence.layerMemor assert.strictEqual(project?.archivedAt, at); }), ); + + it.effect("marks a project's title as custom only once it is renamed", () => + Effect.gen(function* () { + const projects = yield* ProjectStore.ProjectStoreV2; + const projectId = ProjectId.make("project-renamed"); + const event = { + aggregateKind: "project", + aggregateId: projectId, + occurredAt: "2026-03-24T00:00:00.000Z", + commandId: null, + causationEventId: null, + correlationId: null, + metadata: {}, + } as const; + const hasCustomTitle = () => + projects + .getShell(projectId) + .pipe(Effect.map((shell) => Option.getOrNull(shell)?.hasCustomTitle)); + yield* projects.apply({ + ...event, + sequence: 1, + eventId: EventId.make("event-renamed-created"), + type: "project.created", + payload: { + projectId, + title: "repo", + workspaceRoot: "/tmp/repo", + defaultModelSelection: null, + scripts: [], + createdAt: "2026-03-24T00:00:00.000Z", + updatedAt: "2026-03-24T00:00:00.000Z", + }, + }); + assert.strictEqual(yield* hasCustomTitle(), false); + yield* projects.apply({ + ...event, + sequence: 2, + eventId: EventId.make("event-renamed-title"), + type: "project.meta-updated", + payload: { projectId, title: "custom repo", updatedAt: "2026-03-24T00:00:02.000Z" }, + }); + assert.strictEqual(yield* hasCustomTitle(), true); + yield* projects.apply({ + ...event, + sequence: 3, + eventId: EventId.make("migration:39:project:project-renamed:baseline"), + type: "project.created", + payload: { + projectId, + title: "repo", + workspaceRoot: "/tmp/repo", + defaultModelSelection: null, + scripts: [], + createdAt: "2026-03-24T00:00:00.000Z", + updatedAt: "2026-03-24T00:00:03.000Z", + }, + }); + assert.strictEqual(yield* hasCustomTitle(), true); + assert.strictEqual( + Option.getOrNull(yield* projects.getShell(projectId))?.title, + "custom repo", + ); + }), + ); }, ); diff --git a/apps/server/src/orchestration-v2/ProjectStore.ts b/apps/server/src/orchestration-v2/ProjectStore.ts index 2be0a765c784f..af39d565109f4 100644 --- a/apps/server/src/orchestration-v2/ProjectStore.ts +++ b/apps/server/src/orchestration-v2/ProjectStore.ts @@ -32,6 +32,7 @@ export class ProjectStoreV2Error extends Schema.TaggedError export const ProjectRow = Schema.Struct({ projectId: ProjectId, title: Schema.String, + hasCustomTitle: Schema.Boolean, workspaceRoot: Schema.String, defaultModelSelection: Schema.NullOr(ModelSelection), defaultThreadEnvMode: Schema.NullOr(ThreadEnvMode), @@ -50,6 +51,7 @@ export type ProjectRow = typeof ProjectRow.Type; const ProjectDbRow = Schema.Struct({ ...ProjectRow.fields, defaultModelSelection: Schema.NullOr(Schema.fromJsonString(ModelSelection)), + hasCustomTitle: Schema.BooleanFromBit, autoPull: Schema.BooleanFromBit, projectIcon: Schema.NullOr(Schema.fromJsonString(StoredProjectIcon)), scripts: Schema.fromJsonString(Schema.Array(ProjectScript)), @@ -59,6 +61,7 @@ function toShell(row: ProjectRow): OrchestrationProjectShell { return { id: row.projectId, title: row.title, + hasCustomTitle: row.hasCustomTitle, workspaceRoot: row.workspaceRoot, repositoryIdentity: null, defaultModelSelection: row.defaultModelSelection, @@ -117,6 +120,7 @@ export const make = Effect.gen(function* () { SELECT project_id AS "projectId", title, + has_custom_title AS "hasCustomTitle", workspace_root AS "workspaceRoot", default_model_selection_json AS "defaultModelSelection", default_thread_env_mode AS "defaultThreadEnvMode", @@ -149,6 +153,7 @@ export const make = Effect.gen(function* () { INSERT INTO projection_projects ( project_id, title, + has_custom_title, workspace_root, default_model_selection_json, default_thread_env_mode, @@ -165,6 +170,7 @@ export const make = Effect.gen(function* () { VALUES ( ${encoded.projectId}, ${encoded.title}, + ${encoded.hasCustomTitle}, ${encoded.workspaceRoot}, ${encoded.defaultModelSelection}, ${encoded.defaultThreadEnvMode}, @@ -180,7 +186,12 @@ export const make = Effect.gen(function* () { ) ON CONFLICT (project_id) DO UPDATE SET - title = excluded.title, + title = CASE + WHEN projection_projects.has_custom_title = 1 AND excluded.has_custom_title = 0 + THEN projection_projects.title + ELSE excluded.title + END, + has_custom_title = MAX(projection_projects.has_custom_title, excluded.has_custom_title), workspace_root = excluded.workspace_root, default_model_selection_json = excluded.default_model_selection_json, default_thread_env_mode = excluded.default_thread_env_mode, @@ -231,6 +242,7 @@ export const make = Effect.gen(function* () { return yield* upsertRow({ projectId: payload.projectId, title: payload.title, + hasCustomTitle: false, workspaceRoot: payload.workspaceRoot, defaultModelSelection: payload.defaultModelSelection, defaultThreadEnvMode: payload.defaultThreadEnvMode ?? null, @@ -258,7 +270,7 @@ export const make = Effect.gen(function* () { const payload = event.payload; yield* upsertRow({ ...row, - ...(payload.title === undefined ? {} : { title: payload.title }), + ...(payload.title === undefined ? {} : { title: payload.title, hasCustomTitle: true }), ...(payload.workspaceRoot === undefined ? {} : { workspaceRoot: payload.workspaceRoot }), ...(payload.defaultModelSelection === undefined ? {} diff --git a/apps/server/src/orchestration-v2/RuntimePolicy.test.ts b/apps/server/src/orchestration-v2/RuntimePolicy.test.ts index ec610b093f7d3..6f9fbe53d911a 100644 --- a/apps/server/src/orchestration-v2/RuntimePolicy.test.ts +++ b/apps/server/src/orchestration-v2/RuntimePolicy.test.ts @@ -99,6 +99,7 @@ const layerWithPolicy = (policy?: ManagedPolicySummary) => workspaceRoot: "/project-root", defaultModelSelection: null, defaultThreadEnvMode: null, + hasCustomTitle: false, autoPull: false, faviconPath: null, projectIcon: null, diff --git a/apps/server/src/orchestration-v2/ThreadLaunchService.test.ts b/apps/server/src/orchestration-v2/ThreadLaunchService.test.ts index 64acad6ecf794..2505a2b3813fa 100644 --- a/apps/server/src/orchestration-v2/ThreadLaunchService.test.ts +++ b/apps/server/src/orchestration-v2/ThreadLaunchService.test.ts @@ -257,6 +257,7 @@ function makeHarness(options: HarnessOptions = {}) { workspaceRoot: project.workspaceRoot, defaultModelSelection: project.defaultModelSelection, defaultThreadEnvMode: null, + hasCustomTitle: false, autoPull: false, faviconPath: null, projectIcon: null, diff --git a/apps/server/src/orchestration-v2/ThreadTitleRegenerationService.test.ts b/apps/server/src/orchestration-v2/ThreadTitleRegenerationService.test.ts index 4ccdcc6e38a57..d56256372f73e 100644 --- a/apps/server/src/orchestration-v2/ThreadTitleRegenerationService.test.ts +++ b/apps/server/src/orchestration-v2/ThreadTitleRegenerationService.test.ts @@ -81,6 +81,7 @@ function makeHarness( workspaceRoot: "/repo", defaultModelSelection: modelSelection, defaultThreadEnvMode: null, + hasCustomTitle: false, autoPull: false, faviconPath: null, projectIcon: null, diff --git a/apps/server/src/persistence/Migrations.ts b/apps/server/src/persistence/Migrations.ts index 0a9de69d8fafa..ff799863c64c6 100644 --- a/apps/server/src/persistence/Migrations.ts +++ b/apps/server/src/persistence/Migrations.ts @@ -94,6 +94,7 @@ import Migration0083 from "./Migrations/083_CommandReadIndexes.ts"; import Migration0084 from "./Migrations/084_LastExecutedRunIndex.ts"; import Migration0085 from "./Migrations/085_TurnItemCounts.ts"; import Migration0086 from "./Migrations/086_QueuedTurnInputIndex.ts"; +import Migration0087 from "./Migrations/087_ProjectionProjectsCustomTitle.ts"; const migrationEntries = [ [1, "OrchestrationEvents", Migration0001], @@ -183,6 +184,7 @@ const migrationEntries = [ [84, "LastExecutedRunIndex", Migration0084], [85, "TurnItemCounts", Migration0085], [86, "QueuedTurnInputIndex", Migration0086], + [87, "ProjectionProjectsCustomTitle", Migration0087], ] as const; export const migrationManifest = migrationEntries.map(([id, name]) => [id, name] as const); diff --git a/apps/server/src/persistence/Migrations/087_ProjectionProjectsCustomTitle.test.ts b/apps/server/src/persistence/Migrations/087_ProjectionProjectsCustomTitle.test.ts new file mode 100644 index 0000000000000..ca3d887a6cd13 --- /dev/null +++ b/apps/server/src/persistence/Migrations/087_ProjectionProjectsCustomTitle.test.ts @@ -0,0 +1,41 @@ +import { assert, it } from "@effect/vitest"; +import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; +import * as Effect from "effect/Effect"; +import * as SqlClient from "effect/sql/SqlClient"; + +import { runMigrations } from "../Migrations.ts"; + +const layer = it.layer(NodeSqliteClient.layer({ filename: ":memory:" })); + +layer("087_ProjectionProjectsCustomTitle", (it) => { + it.effect("marks projects with a recorded title update as renamed", () => + Effect.gen(function* () { + const sql = yield* SqlClient.SqlClient; + yield* runMigrations({ toMigrationInclusive: 86 }); + for (const projectId of ["renamed", "untouched"]) { + yield* sql` + INSERT INTO projection_projects + (project_id, title, workspace_root, scripts_json, created_at, updated_at) + VALUES (${projectId}, 'repo', ${"/tmp/" + projectId}, '[]', '2026-10-01', '2026-10-01') + `; + yield* sql` + INSERT INTO orchestration_events + (event_id, aggregate_kind, stream_id, stream_version, event_type, occurred_at, + actor_kind, payload_json, metadata_json, application_event_version) + VALUES (${projectId}, 'project', ${projectId}, 1, 'project.meta-updated', '2026-10-01', + 'client', ${JSON.stringify(projectId === "renamed" ? { title: "repo" } : { autoPull: true })}, '{}', 2) + `; + } + // Builds of this change before renumbering already added the column. + yield* sql`ALTER TABLE projection_projects ADD COLUMN has_custom_title INTEGER NOT NULL DEFAULT 0`; + yield* runMigrations(); + assert.deepStrictEqual( + yield* sql`SELECT project_id, has_custom_title FROM projection_projects ORDER BY project_id`, + [ + { project_id: "renamed", has_custom_title: 1 }, + { project_id: "untouched", has_custom_title: 0 }, + ], + ); + }), + ); +}); diff --git a/apps/server/src/persistence/Migrations/087_ProjectionProjectsCustomTitle.ts b/apps/server/src/persistence/Migrations/087_ProjectionProjectsCustomTitle.ts new file mode 100644 index 0000000000000..c193137e79c3b --- /dev/null +++ b/apps/server/src/persistence/Migrations/087_ProjectionProjectsCustomTitle.ts @@ -0,0 +1,26 @@ +import * as Effect from "effect/Effect"; +import * as SqlClient from "effect/sql/SqlClient"; + +export default Effect.gen(function* () { + const sql = yield* SqlClient.SqlClient; + // Earlier builds of this change shipped the column under another migration id. + const columns = yield* sql<{ readonly name: string }>` + PRAGMA table_info(projection_projects) + `; + if (!columns.some((column) => column.name === "has_custom_title")) { + yield* sql` + ALTER TABLE projection_projects + ADD COLUMN has_custom_title INTEGER NOT NULL DEFAULT 0 + `; + } + yield* sql` + UPDATE projection_projects + SET has_custom_title = 1 + WHERE project_id IN ( + SELECT stream_id FROM orchestration_events + WHERE aggregate_kind = 'project' + AND event_type = 'project.meta-updated' + AND json_type(payload_json, '$.title') = 'text' + ) + `; +}); diff --git a/apps/server/src/persistence/reconcileV2PreviewMigration.test.ts b/apps/server/src/persistence/reconcileV2PreviewMigration.test.ts index 98a79e7a7370d..e046cc4133dc6 100644 --- a/apps/server/src/persistence/reconcileV2PreviewMigration.test.ts +++ b/apps/server/src/persistence/reconcileV2PreviewMigration.test.ts @@ -66,6 +66,7 @@ describe("V2 preview upgrade", () => { [84, "LastExecutedRunIndex"], [85, "TurnItemCounts"], [86, "QueuedTurnInputIndex"], + [87, "ProjectionProjectsCustomTitle"], ]); assert.deepStrictEqual(yield* runMigrations(), []); assert.deepStrictEqual(yield* sql`SELECT * FROM orchestration_v2_legacy_imports`, imports); @@ -175,6 +176,7 @@ describe("V2 preview upgrade", () => { [84, "LastExecutedRunIndex"], [85, "TurnItemCounts"], [86, "QueuedTurnInputIndex"], + [87, "ProjectionProjectsCustomTitle"], ]); }).pipe(Effect.provide(NodeSqliteClient.layer({ filename: ":memory:" }))), ); diff --git a/apps/web/src/components/settings/ProjectSettingsPanel.logic.test.ts b/apps/web/src/components/settings/ProjectSettingsPanel.logic.test.ts index 41e1688d2fe98..c42c375a5e154 100644 --- a/apps/web/src/components/settings/ProjectSettingsPanel.logic.test.ts +++ b/apps/web/src/components/settings/ProjectSettingsPanel.logic.test.ts @@ -4,7 +4,10 @@ import { planProjectRemoval } from "@t3tools/client-runtime/state/projects"; import { buildSidebarProjectSnapshots } from "../../sidebarProjectGrouping"; import type { Project } from "../../types"; -import { scopeProjectSettingsGroup } from "./ProjectSettingsPanel.logic"; +import { + projectGroupTitleNeedsUpdate, + scopeProjectSettingsGroup, +} from "./ProjectSettingsPanel.logic"; const localEnvironmentId = EnvironmentId.make("local"); const remoteEnvironmentId = EnvironmentId.make("remote"); @@ -171,3 +174,20 @@ describe("project removal confirmation", () => { ); }); }); + +describe("projectGroupTitleNeedsUpdate", () => { + const folderTitle = { title: "repo" }; + const renamed = { title: "repo", hasCustomTitle: true }; + + // regression: #15049 renaming to the default folder title was never saved + it("saves a title that matches the folder default so the rename is recorded", () => { + expect(projectGroupTitleNeedsUpdate([folderTitle, folderTitle], "repo", true)).toBe(true); + }); + + it("skips untouched fields and renames every member already carries", () => { + expect(projectGroupTitleNeedsUpdate([folderTitle, { title: "other" }], "repo", false)).toBe( + false, + ); + expect(projectGroupTitleNeedsUpdate([renamed, renamed], "repo", true)).toBe(false); + }); +}); diff --git a/apps/web/src/components/settings/ProjectSettingsPanel.logic.ts b/apps/web/src/components/settings/ProjectSettingsPanel.logic.ts index 0c93b87ae162f..706162be00457 100644 --- a/apps/web/src/components/settings/ProjectSettingsPanel.logic.ts +++ b/apps/web/src/components/settings/ProjectSettingsPanel.logic.ts @@ -25,11 +25,14 @@ export function scopeProjectSettingsGroup( } export function projectGroupTitleNeedsUpdate( - memberTitles: ReadonlyArray, + members: ReadonlyArray>, nextTitle: string, wasEdited: boolean, ): boolean { - return wasEdited && memberTitles.some((title) => title !== nextTitle); + return ( + wasEdited && + members.some((member) => member.title !== nextTitle || member.hasCustomTitle !== true) + ); } export function defaultProjectIcon(project: Pick) { diff --git a/apps/web/src/components/settings/ProjectSettingsPanel.tsx b/apps/web/src/components/settings/ProjectSettingsPanel.tsx index f8fbcdc9e59b4..c1e15267234b3 100644 --- a/apps/web/src/components/settings/ProjectSettingsPanel.tsx +++ b/apps/web/src/components/settings/ProjectSettingsPanel.tsx @@ -311,15 +311,7 @@ function ProjectDetail({ toastManager.add({ type: "warning", title: "Project title cannot be empty" }); return; } - if ( - !projectGroupTitleNeedsUpdate( - group.memberProjects.map((member) => member.title), - title, - wasEdited, - ) - ) { - return; - } + if (!projectGroupTitleNeedsUpdate(group.memberProjects, title, wasEdited)) return; await updateAllMembers({ title }, "Failed to rename project"); }; diff --git a/packages/client-runtime/src/state/projectGrouping.test.ts b/packages/client-runtime/src/state/projectGrouping.test.ts index a5957d06e1b01..f4edba2b8d456 100644 --- a/packages/client-runtime/src/state/projectGrouping.test.ts +++ b/packages/client-runtime/src/state/projectGrouping.test.ts @@ -289,6 +289,20 @@ describe("buildProjectGroups", () => { expect(groups[1]?.label).toBe("julius/t3code-fork"); }); + // regression: #15049 a rename to the repository name snapped back to the display path + it("labels a renamed group by its title even when it matches the repository name", () => { + const folderTitles = [ + makeProject("t3code", "/work/t3code", { title: "t3code" }), + makeProject("t3code-2", "/work/t3code-2", { title: "t3code" }), + ]; + const renamed = folderTitles.map((project) => ({ ...project, hasCustomTitle: true })); + + const label = (projects: ReadonlyArray) => + buildProjectGroups({ projects, settings: settings("repository") })[0]?.label; + expect(label(folderTitles)).toBe("T3 Code"); + expect(label(renamed)).toBe("t3code"); + }); + it("applies a physical-project override without dropping its siblings", () => { const first = makeProject("t3code", "/work/t3code"); const second = makeProject("t3code-2", "/work/t3code-2"); diff --git a/packages/client-runtime/src/state/projectGrouping.ts b/packages/client-runtime/src/state/projectGrouping.ts index 46fdc4e3dd3ae..c05a9724ce207 100644 --- a/packages/client-runtime/src/state/projectGrouping.ts +++ b/packages/client-runtime/src/state/projectGrouping.ts @@ -200,7 +200,9 @@ export function resolveScratchProjectScopeKey( export function deriveProjectGroupLabel(input: { readonly representative: Pick; - readonly members: ReadonlyArray>; + readonly members: ReadonlyArray< + Pick + >; }): string { const sharedTitles = uniqueNonEmptyValues(input.members.map((member) => member.title)); const sharedDisplayNames = uniqueNonEmptyValues( @@ -215,8 +217,8 @@ export function deriveProjectGroupLabel(input: { if ( sharedTitles.length === 1 && sharedTitle !== undefined && - !sharedDisplayNames.includes(sharedTitle) && - !sharedRepositoryNames.includes(sharedTitle) + (input.members.some((member) => member.hasCustomTitle === true) || + (!sharedDisplayNames.includes(sharedTitle) && !sharedRepositoryNames.includes(sharedTitle))) ) { return sharedTitle; } diff --git a/packages/contracts/src/orchestrationProject.ts b/packages/contracts/src/orchestrationProject.ts index d98c50e56e8d1..35cee805b8812 100644 --- a/packages/contracts/src/orchestrationProject.ts +++ b/packages/contracts/src/orchestrationProject.ts @@ -8,6 +8,9 @@ import { ProjectScript, ReceivedProjectIcon } from "./project.ts"; export const OrchestrationProjectShell = Schema.Struct({ id: ProjectId, title: TrimmedNonEmptyString, + // Set once someone renames the project. A folder-default title can equal the + // repository name, so grouped labels need this to tell a chosen name apart. + hasCustomTitle: Schema.optional(Schema.Boolean), workspaceRoot: TrimmedNonEmptyString, repositoryIdentity: Schema.optional(Schema.NullOr(RepositoryIdentity)), defaultModelSelection: Schema.NullOr(ModelSelection), From 5959787baebd931e6c81c28775d1a82912a55d1d Mon Sep 17 00:00:00 2001 From: Radu Stefan Popa <150839549+Radu028@users.noreply.github.com> Date: Fri, 13 Nov 2026 02:18:26 +0200 Subject: [PATCH 027/922] fix(acp): agents get T3's runtime notes once per session, not on every message (#26959) Co-authored-by: Mariusz Mazur Co-authored-by: maria-rcks Co-authored-by: Julius Marminge --- apps/server/scripts/acp-mock-agent.ts | 14 + .../Adapters/AcpAdapterV2.test.ts | 437 ++++++++++++++++-- .../Adapters/AcpRegistryAdapterV2.test.ts | 3 +- .../Adapters/AntigravityAdapterV2.ts | 3 +- .../testkit/ReplayRuntimeInstructions.ts | 200 +++++++- .../fx_early_stop/fx_transcript.ndjson | 4 +- .../fixtures/fx_subagent/fx_transcript.ndjson | 2 +- .../grok_transcript.ndjson | 2 +- .../grok_transcript.ndjson | 2 +- .../grok_transcript.ndjson | 2 +- .../grok_prompt_error/grok_transcript.ndjson | 2 +- .../kiro_cloud_config/kiro_transcript.ndjson | 2 +- .../kiro_compaction/kiro_transcript.ndjson | 2 +- .../kiro_effort/kiro_transcript.ndjson | 2 +- .../kiro_transcript.ndjson | 4 +- .../kiro_transcript.ndjson | 2 +- .../kiro_model_switch/kiro_transcript.ndjson | 2 +- .../kiro_full_access_transcript.ndjson | 2 +- .../kiro_supervised_transcript.ndjson | 2 +- .../kiro_transcript.ndjson | 2 +- .../kiro_unknown_model/kiro_transcript.ndjson | 2 +- .../message_steering/fx_transcript.ndjson | 4 +- .../message_steering/grok_transcript.ndjson | 2 +- .../registry_transcript.ndjson | 2 +- .../fixtures/multi_turn/fx_transcript.ndjson | 2 +- .../multi_turn/kiro_transcript.ndjson | 2 +- .../kiro_transcript.ndjson | 4 +- .../fixtures/queued_turn/fx_transcript.ndjson | 2 +- .../queued_turn/kiro_transcript.ndjson | 2 +- .../fixtures/simple/fx_transcript.ndjson | 2 +- .../fixtures/simple/kiro_transcript.ndjson | 2 +- .../fixtures/subagent/kiro_transcript.ndjson | 2 +- .../fixtures/todo_list/grok_transcript.ndjson | 2 +- .../fx_transcript.ndjson | 2 +- .../fx_transcript.ndjson | 2 +- .../grok_transcript.ndjson | 2 +- .../kiro_transcript.ndjson | 2 +- .../turn_interrupt/fx_transcript.ndjson | 2 +- .../turn_interrupt/kiro_transcript.ndjson | 2 +- .../kiro_transcript.ndjson | 2 +- .../Drivers/AntigravityDriver.test.ts | 4 +- packages/effect-acp/src/client.test.ts | 15 + packages/effect-acp/src/compat.ts | 6 +- packages/effect-acp/src/rpc.ts | 7 +- .../src/server/copilotAcp.ts | 13 + .../src/server/AcpSessionRuntime.ts | 5 +- packages/provider-acp/src/server/adapter.ts | 259 +++++++---- 47 files changed, 845 insertions(+), 199 deletions(-) diff --git a/apps/server/scripts/acp-mock-agent.ts b/apps/server/scripts/acp-mock-agent.ts index 6a68c1ca89fc5..a97aab9cdf2b1 100644 --- a/apps/server/scripts/acp-mock-agent.ts +++ b/apps/server/scripts/acp-mock-agent.ts @@ -83,6 +83,10 @@ const failPromptOrdinal = Number(process.env.T3_ACP_FAIL_PROMPT_ORDINAL); const compactionPromptOrdinals = new Set( (process.env.T3_ACP_COMPACTION_PROMPT_ORDINALS ?? "").split(",").map(Number), ); +// These prompts end while their compaction is still in progress. +const openCompactionPromptOrdinals = new Set( + (process.env.T3_ACP_OPEN_COMPACTION_PROMPT_ORDINALS ?? "").split(",").map(Number), +); const failSetModeConfigOption = process.env.T3_ACP_FAIL_SET_MODE_CONFIG_OPTION === "1"; const emitEmptyDefaultAgentOption = process.env.T3_ACP_EMIT_EMPTY_DEFAULT_AGENT_OPTION === "1"; const promptResponseText = process.env.T3_ACP_PROMPT_RESPONSE_TEXT; @@ -1369,6 +1373,16 @@ const program = Effect.gen(function* () { yield* Effect.sleep(`${promptDelayMs} millis`); } + if (openCompactionPromptOrdinals.has(promptCount)) { + yield* agent.client.sessionUpdate({ + sessionId: requestedSessionId, + update: { + sessionUpdate: "compaction_update", + compactionId: `compact-${promptCount}`, + status: "in_progress", + }, + }); + } if (compactionPromptOrdinals.has(promptCount)) { for (const status of ["in_progress", "completed"] as const) { yield* agent.client.sessionUpdate({ diff --git a/apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts index e03177a16b110..4457897fa11ef 100644 --- a/apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts @@ -732,6 +732,7 @@ const pollProtocolMethods = (events: Queue.Queue>, + prepareAttachments = false, ) { const childProcessSpawner = yield* ChildProcessSpawner.ChildProcessSpawner; const selfInvocation = yield* resolveSelfInvocation(); @@ -748,12 +749,34 @@ const makeInstructionCompactionHarness = Effect.fnUntraced(function* ( authorizationHeader: "Bearer instruction-compaction-token", browserToolsAvailable: true, }); + type Runtime = AcpSessionRuntime.AcpSessionRuntime["Service"]; + let sessionUpdate: Parameters[0] | undefined; + let copilotSessionEvent: + | ((event: unknown) => Effect.Effect) + | undefined; + let duringNextPreparation: Effect.Effect = Effect.void; + let nextPromptStopReason: "cancelled" | "refusal" | "error" | undefined; + const prepare = Effect.suspend(() => { + const during = duringNextPreparation; + duringNextPreparation = Effect.void; + return during.pipe(Effect.orDie); + }); const adapter = yield* makeAcpAdapterV2({ instanceId, flavor: { driver: ACP_TEST_DRIVER, capabilities: AcpProviderCapabilitiesV2, supportsCompaction: true, + rewriteUserText: (text) => + prepareAttachments ? Effect.succeed(text) : prepare.pipe(Effect.as(text)), + ...(prepareAttachments + ? { + buildAttachmentPrompt: () => prepare.pipe(Effect.as([])), + } + : {}), + registerExtensions: makeCopilotSubagentRouting().registerExtensions, + // Routes updates tagged with a Devin subagent context to that child session. + normalizeSessionUpdate: normalizeDevinSessionUpdate, makeRuntime: makeMockRuntime({ childProcessSpawner, mockAgentPath, @@ -761,9 +784,29 @@ const makeInstructionCompactionHarness = Effect.fnUntraced(function* ( environment, wrapRuntime: (runtime) => ({ ...runtime, + // The captured handlers deliver frames between turns, while no prompt is in flight. + handleSessionUpdate: (next) => + Effect.sync(() => { + sessionUpdate = next; + }).pipe(Effect.andThen(runtime.handleSessionUpdate(next))), + handleExtNotification: (method, payload, next) => + Effect.sync(() => { + if (method === "github.com/copilot/sessionEvent") { + copilotSessionEvent = next as typeof copilotSessionEvent; + } + }).pipe(Effect.andThen(runtime.handleExtNotification(method, payload, next))), // Make compaction during prompt completion deterministic at the adapter boundary. prompt: (payload, options) => - runtime.prompt(payload, options).pipe(Effect.tap(() => runtime.drainEvents)), + runtime.prompt(payload, options).pipe( + Effect.tap(() => runtime.drainEvents), + // Grok's local cancel reports `cancelled` even when the agent never saw the prompt. + Effect.map((result) => { + if (nextPromptStopReason === undefined) return result; + const stopReason = nextPromptStopReason; + nextPromptStopReason = undefined; + return { ...result, stopReason }; + }), + ), }), }), }, @@ -784,30 +827,56 @@ const makeInstructionCompactionHarness = Effect.fnUntraced(function* ( const providerThread = yield* runtime.ensureThread({ threadId, modelSelection, runtimePolicy }); const now = yield* DateTime.now; let ordinal = 0; - return Effect.fnUntraced(function* (messageText: string, expectedStatus = "completed") { - yield* runtime.startTurn( - makeTurnInput({ - threadId, - providerThread, - instanceId, - runtimePolicy, - now, - ordinal: ++ordinal, - messageText, - }), - ); - const terminal = yield* runtime.events.pipe( - Stream.filter((event) => event.type === "turn.terminal"), - Stream.runHead, - ); - assert.equal(Option.getOrThrow(terminal).status, expectedStatus); - while (true) { - const event = yield* Queue.take(protocolEvents); - if (event.direction === "outgoing" && rawProtocolMethod(event) === "session/prompt") { - return rawProtocolPromptTextBlocks(event); + const sessionId = "mock-session-1"; + return { + runTurn: Effect.fnUntraced(function* (messageText: string, expectedStatus = "completed") { + yield* runtime.startTurn( + makeTurnInput({ + threadId, + providerThread, + instanceId, + runtimePolicy, + now, + ordinal: ++ordinal, + messageText, + }), + ); + const terminal = yield* runtime.events.pipe( + Stream.filter((event) => event.type === "turn.terminal"), + Stream.runHead, + ); + assert.equal(Option.getOrThrow(terminal).status, expectedStatus); + while (true) { + const event = yield* Queue.take(protocolEvents); + if (event.direction === "outgoing" && rawProtocolMethod(event) === "session/prompt") { + return rawProtocolPromptTextBlocks(event); + } } - } - }); + }), + idleSessionUpdate: Effect.fnUntraced(function* (update: EffectAcpSchema.SessionUpdate) { + assert.isDefined(sessionUpdate); + yield* sessionUpdate({ sessionId, update }); + }), + reportNextPromptStopped: (stopReason: "cancelled" | "refusal" | "error") => + Effect.sync(() => { + nextPromptStopReason = stopReason; + }), + sessionUpdateDuringNextPreparation: (update: EffectAcpSchema.SessionUpdate) => + Effect.sync(() => { + duringNextPreparation = Effect.suspend(() => { + assert.isDefined(sessionUpdate); + return sessionUpdate({ sessionId, update }); + }); + }), + idleCopilotSessionEvent: Effect.fnUntraced(function* (event: { + readonly type: string; + readonly agentId?: string; + readonly data: Record; + }) { + assert.isDefined(copilotSessionEvent); + yield* copilotSessionEvent({ sessionId, ...event }); + }), + }; }); function assertReinjectedInstructions( @@ -819,6 +888,7 @@ function assertReinjectedInstructions( assert.include(text, "## T3 Code browser"); assert.include(text, "T3 Code orchestration"); assert.include(text, `\n${request}\n`); + assert.include(blocks[1]?.text ?? "", ""); } const makeAdvertisedCompactionHarness = Effect.fnUntraced(function* ( @@ -1136,6 +1206,7 @@ describe("AcpAdapterV2", () => { } as const; // The runtime ordinal of each prompt, and the session each check watched. const promptRuntimes: Array = []; + const promptTexts: Array = []; const watchedSessions: Array = []; const adapter = yield* makeAcpAdapterV2({ instanceId, @@ -1154,9 +1225,14 @@ describe("AcpAdapterV2", () => { mockAgentPath: yield* bundledMockAgentPath, wrapRuntime: (runtime, runtimeOrdinal) => ({ ...runtime, - prompt: () => + prompt: (payload) => Effect.sync(() => { promptRuntimes.push(runtimeOrdinal); + promptTexts.push( + payload.prompt + .flatMap((block) => (block.type === "text" ? [block.text] : [])) + .join("\n"), + ); return { stopReason: "end_turn" as const }; }), }), @@ -1207,6 +1283,9 @@ describe("AcpAdapterV2", () => { const completed = yield* runTurn(2); assert.equal(completed?.type === "turn.terminal" ? completed.status : null, "completed"); assert.deepEqual(promptRuntimes, [1, 2], "the next turn runs on a fresh runtime"); + // The fresh runtime has no record of what reached the agent, so it sends T3's notes again. + assert.include(promptTexts[1] ?? "", ""); + assert.include(promptTexts[1] ?? "", "T3 Code interaction mode: Default"); assert.equal(watchedSessions.length, 2); assert.equal(watchedSessions[0], watchedSessions[1]); }).pipe(Effect.provide(layerTest), Effect.scoped), @@ -2135,6 +2214,7 @@ describe("AcpAdapterV2", () => { ordinal: number, runtimePolicy: ProviderAdapter.ProviderAdapterV2RuntimePolicy, messageText: string, + turnModelSelection: ModelSelection = modelSelection, ) { yield* runtime.startTurn( makeTurnInput({ @@ -2145,6 +2225,7 @@ describe("AcpAdapterV2", () => { now, ordinal, messageText, + modelSelection: turnModelSelection, }), ); yield* runtime.events.pipe( @@ -2190,15 +2271,15 @@ describe("AcpAdapterV2", () => { assert.include(firstDefault.prompt, "T3 Code interaction mode: Default"); assert.include(firstDefault.prompt, "## T3 Code browser"); assert.include(firstDefault.prompt, "T3 Code orchestration"); + assert.include(firstDefault.prompt, ""); assert.notInclude( firstDefault.methods, "session/set_config_option", "Build should preserve the agent's advertised mode default", ); - assert.include( - (yield* runTurn(3, defaultPolicy, "Second default request.")).prompt, - "Second default request.", - ); + const secondDefault = yield* runTurn(3, defaultPolicy, "Second default request."); + assert.equal(secondDefault.prompt, "Second default request."); + assert.equal(secondDefault.textBlockCount, 1); const planPolicy = policy("plan"); const firstPlan = yield* runTurn(4, planPolicy, "Plan this change."); @@ -2215,20 +2296,46 @@ describe("AcpAdapterV2", () => { [buildModeId], "Build should restore the native mode that T3 temporarily replaced for Plan", ); + const switchedModel = yield* runTurn(7, defaultPolicy, "Switch models.", { + instanceId, + model: "composer-2", + }); + assert.equal(switchedModel.textBlockCount, 2); + assert.include(switchedModel.prompt, "as composer-2"); }).pipe(Effect.provide(layerTest), Effect.scoped), ); - it.live( - "reinjects ACP instructions after protocol compaction, including during reinjection", - () => + it.live.each(["cancelled", "refusal", "error"] as const)( + "reinjects ACP instructions after protocol compaction, during reinjection, prompt preparation, or while idle (%s)", + (stopReason) => Effect.gen(function* () { - const runTurn = yield* makeInstructionCompactionHarness({ - T3_ACP_COMPACTION_PROMPT_ORDINALS: "2,4", - }); - yield* runTurn("Start work."); - yield* runTurn("Continue until context compacts."); + const { + runTurn, + idleSessionUpdate, + idleCopilotSessionEvent, + sessionUpdateDuringNextPreparation, + reportNextPromptStopped, + } = yield* makeInstructionCompactionHarness( + { + T3_ACP_COMPACTION_PROMPT_ORDINALS: "2,4", + T3_ACP_OPEN_COMPACTION_PROMPT_ORDINALS: "13", + }, + stopReason === "error", + ); + const expectedStatus = + stopReason === "error" + ? "failed" + : stopReason === "cancelled" + ? "cancelled" + : "completed"; + yield* reportNextPromptStopped(stopReason); + assertReinjectedInstructions(yield* runTurn("Start work.", expectedStatus), "Start work."); + assertReinjectedInstructions( + yield* runTurn("Continue until context compacts."), + "Continue until context compacts.", + ); assert.deepEqual(yield* runTurn(" /repro-skill"), [ - { type: "text", text: " /repro-skill" }, + { type: "text", text: stopReason === "error" ? "/repro-skill" : " /repro-skill" }, ]); assertReinjectedInstructions( yield* runTurn("Continue after compaction."), @@ -2238,7 +2345,99 @@ describe("AcpAdapterV2", () => { yield* runTurn("Continue after the second compaction."), "Continue after the second compaction.", ); - assert.equal((yield* runTurn("Finish work."))[0]?.text, "Finish work."); + assert.deepEqual(yield* runTurn("Finish work."), [{ type: "text", text: "Finish work." }]); + + yield* idleSessionUpdate({ + sessionUpdate: "compaction_update", + compactionId: "compact-idle", + status: "completed", + }); + assertReinjectedInstructions( + yield* runTurn("Continue after idle compaction."), + "Continue after idle compaction.", + ); + yield* idleSessionUpdate({ + sessionUpdate: "compaction_update", + compactionId: "compact-idle", + status: "completed", + }); + assert.deepEqual(yield* runTurn("Continue after a repeated compaction update."), [ + { type: "text", text: "Continue after a repeated compaction update." }, + ]); + const copilotCompaction = { success: true, outcome: "applied", trigger: "threshold" }; + yield* idleCopilotSessionEvent({ + type: "session.compaction_complete", + agentId: "agent-a", + data: copilotCompaction, + }); + assert.deepEqual(yield* runTurn("Continue after subagent compaction."), [ + { type: "text", text: "Continue after subagent compaction." }, + ]); + yield* idleCopilotSessionEvent({ + type: "session.compaction_complete", + data: copilotCompaction, + }); + assertReinjectedInstructions( + yield* runTurn("Continue after Copilot compaction."), + "Continue after Copilot compaction.", + ); + yield* idleCopilotSessionEvent({ + type: "session.compaction_complete", + data: { success: true, trigger: "threshold" }, + }); + assertReinjectedInstructions( + yield* runTurn("Continue after legacy Copilot compaction."), + "Continue after legacy Copilot compaction.", + ); + yield* idleSessionUpdate({ + sessionUpdate: "compaction_update", + compactionId: "compact-child", + status: "completed", + _meta: { "cognition.ai/subagent_context": { parentAgentId: "agent-b" } }, + }); + assert.deepEqual(yield* runTurn("Continue after child compaction."), [ + { type: "text", text: "Continue after child compaction." }, + ]); + yield* runTurn("End this turn while compaction is still running."); + assertReinjectedInstructions( + yield* runTurn("Continue after the turn ended mid-compaction."), + "Continue after the turn ended mid-compaction.", + ); + yield* idleSessionUpdate({ + sessionUpdate: "compaction_update", + compactionId: "compact-13", + status: "completed", + }); + assertReinjectedInstructions( + yield* runTurn("Continue after the compaction really finished."), + "Continue after the compaction really finished.", + ); + yield* sessionUpdateDuringNextPreparation({ + sessionUpdate: "compaction_update", + compactionId: "compact-while-preparing", + status: "completed", + }); + assertReinjectedInstructions( + yield* runTurn("Continue after a compaction during prompt preparation."), + "Continue after a compaction during prompt preparation.", + ); + assert.deepEqual(yield* runTurn("Finish after that reinjection."), [ + { type: "text", text: "Finish after that reinjection." }, + ]); + yield* idleSessionUpdate({ + sessionUpdate: "compaction_update", + compactionId: "compact-before-undelivered-prompt", + status: "completed", + }); + yield* reportNextPromptStopped(stopReason); + assertReinjectedInstructions( + yield* runTurn("Do not retain this prompt.", expectedStatus), + "Do not retain this prompt.", + ); + assertReinjectedInstructions( + yield* runTurn("Continue after the undelivered prompt."), + "Continue after the undelivered prompt.", + ); }).pipe(Effect.provide(layerTest), Effect.scoped), ); @@ -2246,21 +2445,28 @@ describe("AcpAdapterV2", () => { "reinjects ACP instructions after successful native compact, but not failed compact", () => Effect.gen(function* () { - const runTurn = yield* makeInstructionCompactionHarness({ + const { runTurn } = yield* makeInstructionCompactionHarness({ T3_ACP_FAIL_PROMPT_ORDINAL: "2", }); yield* runTurn("Start work."); assert.deepEqual(yield* runTurn("/compact", "failed"), [ { type: "text", text: "/compact" }, ]); - assert.equal( - (yield* runTurn("Continue after failure."))[0]?.text, - "Continue after failure.", - ); + assert.deepEqual(yield* runTurn("Continue after failure."), [ + { type: "text", text: "Continue after failure." }, + ]); assert.deepEqual(yield* runTurn("/compact"), [{ type: "text", text: "/compact" }]); assert.deepEqual(yield* runTurn("/repro-skill"), [{ type: "text", text: "/repro-skill" }]); assertReinjectedInstructions(yield* runTurn("Continue work."), "Continue work."); - assert.equal((yield* runTurn("Finish work."))[0]?.text, "Finish work."); + assert.deepEqual(yield* runTurn("Finish work."), [{ type: "text", text: "Finish work." }]); + // Agents such as Grok accept preservation instructions after the command. + assert.deepEqual(yield* runTurn("/compact keep the plan"), [ + { type: "text", text: "/compact keep the plan" }, + ]); + assertReinjectedInstructions( + yield* runTurn("Continue after the focused compact."), + "Continue after the focused compact.", + ); }).pipe(Effect.provide(layerTest), Effect.scoped), ); @@ -3655,7 +3861,7 @@ describe("AcpAdapterV2", () => { Object(rawProtocolRequestParam(initialize, "clientCapabilities")), "session", ), - { notices: {} }, + { notices: {}, compaction: {} }, ); const title = "skill discovery warning: candidate was skipped because its metadata is invalid"; @@ -5336,11 +5542,13 @@ describe("AcpAdapterV2", () => { browserToolsAvailable: false, }); const runtimeInputs: Array = []; + const protocolEvents = yield* Queue.unbounded(); const nativeRuntimes: Array = []; let sessionEventCount = 0; const makeRuntime = makeMockRuntime({ childProcessSpawner, mockAgentPath, + protocolEvents, environment: { T3_ACP_PROMPT_DELAY_MS: "100" }, wrapRuntime: (nativeRuntime) => { nativeRuntimes.push(nativeRuntime); @@ -5487,6 +5695,143 @@ describe("AcpAdapterV2", () => { assert.equal(secondStatus, "completed"); yield* nativeRuntimes[1]!.drainEvents; assert.isAbove(sessionEventCount, sessionEventsBeforeSecondTurn); + const prompts = Array.from(yield* Queue.takeAll(protocolEvents)) + .filter( + (event) => + event.direction === "outgoing" && rawProtocolMethod(event) === "session/prompt", + ) + .map(rawProtocolPromptTextBlocks); + assert.lengthOf(prompts, 2); + // The mock agent reuses its session id, so only the rollback reset resends these notes. + assert.include(prompts[1]?.at(-1)?.text ?? "", ""); + }).pipe(Effect.provide(layerTest), Effect.scoped), + ); + + it.effect("resends T3 notes after rollback when the replaced runtime's prompt settles late", () => + Effect.gen(function* () { + const childProcessSpawner = yield* ChildProcessSpawner.ChildProcessSpawner; + const path = yield* Path.Path; + const selfInvocation = yield* resolveSelfInvocation(); + const mockAgentPath = yield* path.fromFileUrl( + new URL("../../../scripts/acp-mock-agent.ts", import.meta.url), + ); + type RuntimeService = AcpSessionRuntime.AcpSessionRuntime["Service"]; + let firstSessionUpdate: Parameters[0] | undefined; + const firstPromptGate = yield* Deferred.make(); + const firstPromptCallbackDone = yield* Deferred.make(); + const replacementPromptText = yield* Deferred.make(); + const instanceId = ProviderInstanceId.make("acp-test-late-prompt-rollback"); + const adapter = yield* makeAcpAdapterV2({ + instanceId, + testHooks: { + afterPromptCallback: () => + Deferred.succeed(firstPromptCallbackDone, undefined).pipe(Effect.asVoid), + }, + flavor: { + driver: ACP_TEST_DRIVER, + capabilities: AcpProviderCapabilitiesV2, + followAgentWorkState: true, + makeRuntime: makeMockRuntime({ + childProcessSpawner, + mockAgentPath, + wrapRuntime: (runtime, runtimeOrdinal) => + runtimeOrdinal === 1 + ? { + ...runtime, + handleSessionUpdate: (handler) => + Effect.sync(() => { + firstSessionUpdate = handler; + }).pipe(Effect.andThen(runtime.handleSessionUpdate(handler))), + prompt: () => Deferred.await(firstPromptGate), + } + : { + ...runtime, + prompt: (payload, options) => + Deferred.succeed( + replacementPromptText, + payload.prompt + .flatMap((block) => (block.type === "text" ? [block.text] : [])) + .join("\n"), + ).pipe(Effect.andThen(runtime.prompt(payload, options))), + }, + }), + }, + selfInvocation, + continuationRequests: { offer: () => Effect.void }, + }); + const threadId = ThreadId.make("thread-acp-late-prompt-rollback"); + const runtimePolicy = ProviderAdapter.ProviderAdapterV2RuntimePolicy.make({ + runtimeMode: "full-access", + interactionMode: "default", + cwd: process.cwd(), + }); + const modelSelection = { instanceId, model: "default" } as const; + const runtime = yield* adapter.openSession({ + threadId, + providerSessionId: ProviderSessionId.make("provider-session-acp-late-prompt-rollback"), + modelSelection, + runtimePolicy, + }); + const events = yield* Queue.unbounded(); + yield* runtime.events.pipe( + Stream.runForEach((event) => Queue.offer(events, event)), + Effect.forkScoped, + ); + const providerThread = yield* runtime.ensureThread({ + threadId, + modelSelection, + runtimePolicy, + }); + yield* runtime.startTurn( + makeTurnInput({ + threadId, + providerThread, + instanceId, + runtimePolicy, + now: yield* DateTime.now, + }), + ); + if (firstSessionUpdate === undefined) { + return yield* Effect.die("the first runtime's session handler must be wired"); + } + // The agent goes idle while its prompt RPC is still open, which ends the turn. + yield* firstSessionUpdate({ + sessionId: "mock-session-1", + update: { sessionUpdate: "user_message_chunk", content: { type: "text", text: "echo" } }, + }); + yield* firstSessionUpdate({ + sessionId: "mock-session-1", + update: { sessionUpdate: "state_update", state: "idle", stopReason: "end_turn" }, + }); + while ((yield* Queue.take(events)).type !== "turn.terminal") {} + + const rolledBack = yield* runtime.rollbackThread({ + providerThread, + providerThreadTurns: [], + target: { + type: "thread_start", + checkpointId: CheckpointId.make("checkpoint-acp-late-prompt-rollback"), + appRunOrdinal: 0, + }, + }); + // The replaced runtime's prompt settles late. A successful result would record delivery + // without the generation check; a cancelled one never records it, so it proves nothing. + // Its completion callback must finish before the next turn reads delivery state. + yield* Deferred.succeed(firstPromptGate, { stopReason: "end_turn" }); + yield* Deferred.await(firstPromptCallbackDone); + yield* runtime.startTurn( + makeTurnInput({ + threadId, + providerThread: rolledBack.providerThread, + instanceId, + runtimePolicy, + now: yield* DateTime.now, + ordinal: 2, + }), + ); + const replacementPrompt = yield* Deferred.await(replacementPromptText); + assert.include(replacementPrompt, "T3 Code interaction mode: Default"); + assert.include(replacementPrompt, ""); }).pipe(Effect.provide(layerTest), Effect.scoped), ); diff --git a/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts index 635d63d91473a..16f94c17e3ce1 100644 --- a/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts @@ -1490,7 +1490,7 @@ describe("AcpRegistryAdapterV2", () => { }) : "test prompt", }, - runtimeInstructions, + ...(ordinal === 1 ? [runtimeInstructions] : []), ]; const echo = (messageId: string, content: ReadonlyArray) => claudeFrames.update(CLAUDE_ROOT_SESSION, { @@ -1511,6 +1511,7 @@ describe("AcpRegistryAdapterV2", () => { { type: "text", text: promptText(ordinal), + annotations: { audience: ["user"] }, }, ]), ...(ordering === "before" ? [matching, acknowledgment] : [acknowledgment, matching]), diff --git a/apps/server/src/orchestration-v2/Adapters/AntigravityAdapterV2.ts b/apps/server/src/orchestration-v2/Adapters/AntigravityAdapterV2.ts index f74dcf29b1b32..b6f746269a6f2 100644 --- a/apps/server/src/orchestration-v2/Adapters/AntigravityAdapterV2.ts +++ b/apps/server/src/orchestration-v2/Adapters/AntigravityAdapterV2.ts @@ -214,7 +214,7 @@ export function makeAntigravityAcpAdapterFlavor( mcpOverHttp: true, sessionCarriesPullRequestLinking: antigravityAppendsSystemPrompt, makeRuntime, - buildPrompt: ({ + buildAttachmentPrompt: ({ text, attachments, resolveAttachmentPath, @@ -230,6 +230,7 @@ export function makeAntigravityAcpAdapterFlavor( agentVersion, currentModel, }).pipe( + Effect.map((blocks) => (text.trim() ? blocks.slice(1) : blocks)), Effect.provideService(FileSystem.FileSystem, options.fileSystem), Effect.provideService(Path.Path, options.path), ), diff --git a/apps/server/src/orchestration-v2/testkit/ReplayRuntimeInstructions.ts b/apps/server/src/orchestration-v2/testkit/ReplayRuntimeInstructions.ts index 0c3d59e93398b..e594a5ab5003a 100644 --- a/apps/server/src/orchestration-v2/testkit/ReplayRuntimeInstructions.ts +++ b/apps/server/src/orchestration-v2/testkit/ReplayRuntimeInstructions.ts @@ -20,10 +20,102 @@ export function materializeReplayTranscriptRuntimeInstructions( : undefined; if (harness === undefined) return transcript; const instructions = buildRuntimeInstructions({ harness, model: runtime.model }); + // The notes name the model, so each prompt expects the ones for its session's current model. + const sessionModels = new Map(); + const notesFor = (sessionId: unknown) => { + const model = sessionModels.get(sessionId) ?? runtime.model; + return model === runtime.model ? instructions : buildRuntimeInstructions({ harness, model }); + }; + // Grok's flavor sets `supportsCompaction`; Kiro compacts through its own request instead. + const compactsThroughPrompt = runtime.driver === "grok"; + // Like the adapter: notes go out until a prompt carrying that text succeeds, and a new runtime + // or compaction resets that. Not mirrored, as no recording has them: Copilot compaction events, + // child-session compactions, and ACP v2 prompts that settle through an idle `state_update`. + const deliveredNotes = new Map(); + // A prompt's success records delivery only if no compaction completed after it was sent. + const compactionCounts = new Map(); + const completedCompactionIds = new Set(); + // A turn that completes with a compaction still open projects it as completed. + const openCompactions = new Map>(); + const markCompacted = (sessionId: unknown, compactionId?: unknown) => { + if (typeof compactionId === "string") { + const key = `${String(sessionId)}\u0000${compactionId}`; + if (completedCompactionIds.has(key)) return; + completedCompactionIds.add(key); + } + deliveredNotes.delete(sessionId); + compactionCounts.set(sessionId, (compactionCounts.get(sessionId) ?? 0) + 1); + }; + let pendingPrompt: + | { + readonly sessionId: unknown; + /** The runtime notes the prompt carried, if any. */ + readonly notes: string | undefined; + readonly compact: boolean; + readonly compactionsAtSend: number; + } + | undefined; + let pendingKiroCompact: { readonly sessionId: unknown } | undefined; return { ...transcript, entries: transcript.entries.map((entry) => { + if (entry.type === "emit_inbound") { + const frame = asFrame(entry.frame); + if (frame?.kind === "response" && frame.method === "session/prompt" && pendingPrompt) { + const stopReason = isRecord(frame.result) ? frame.result.stopReason : undefined; + const delivered = + frame.error === undefined && + stopReason !== "cancelled" && + stopReason !== "refusal" && + stopReason !== "error"; + const open = openCompactions.get(pendingPrompt.sessionId); + if (delivered && open !== undefined && open.size > 0) { + openCompactions.delete(pendingPrompt.sessionId); + markCompacted(pendingPrompt.sessionId); + } + if (delivered && pendingPrompt.compact) { + markCompacted(pendingPrompt.sessionId); + } else if ( + delivered && + pendingPrompt.notes !== undefined && + (compactionCounts.get(pendingPrompt.sessionId) ?? 0) === pendingPrompt.compactionsAtSend + ) { + deliveredNotes.set(pendingPrompt.sessionId, pendingPrompt.notes); + } + pendingPrompt = undefined; + } + if ( + frame?.kind === "response" && + frame.method === "_kiro/session/compact" && + pendingKiroCompact + ) { + // Kiro's adapter accepts only `{ success: true }`. + if (isRecord(frame.result) && frame.result.success === true) { + markCompacted(pendingKiroCompact.sessionId); + } + pendingKiroCompact = undefined; + } + const update = + frame?.method === "session/update" && isRecord(frame.params) + ? frame.params.update + : undefined; + if ( + isRecord(update) && + update.sessionUpdate === "compaction_update" && + isRecord(frame?.params) + ) { + const sessionId = frame.params.sessionId; + const open = openCompactions.get(sessionId) ?? new Set(); + if (update.status === "in_progress") { + openCompactions.set(sessionId, open.add(update.compactionId)); + } else { + open.delete(update.compactionId); + } + if (update.status === "completed") markCompacted(sessionId, update.compactionId); + } + return entry; + } if (entry.type !== "expect_outbound") return entry; const frame = entry.frame; if (typeof frame !== "object" || frame === null) return entry; @@ -38,6 +130,43 @@ export function materializeReplayTranscriptRuntimeInstructions( ? entry : { ...entry, frame: { ...frame, message: `${frame.message}\n\n${instructions}` } }; } + if ( + "method" in frame && + (frame.method === "session/close" || frame.method === "initialize") + ) { + // A closed or restarted session comes back in a new runtime, which resends the instructions. + deliveredNotes.clear(); + completedCompactionIds.clear(); + openCompactions.clear(); + pendingPrompt = undefined; + pendingKiroCompact = undefined; + return entry; + } + const params = "params" in frame && isRecord(frame.params) ? frame.params : undefined; + const selectedModel = + "method" in frame && frame.method === "session/set_config_option" + ? params?.configId === "model" + ? params.value + : undefined + : "method" in frame && frame.method === "session/set_model" + ? params?.modelId + : undefined; + if (typeof selectedModel === "string") { + sessionModels.set(params?.sessionId, selectedModel); + return entry; + } + if ( + "method" in frame && + frame.method === "_kiro/session/compact" && + "params" in frame && + typeof frame.params === "object" && + frame.params !== null && + "sessionId" in frame.params + ) { + // Once it succeeds, Kiro's native compaction makes the next prompt resend them. + pendingKiroCompact = { sessionId: frame.params.sessionId }; + return entry; + } if ( "method" in frame && frame.method === "session/prompt" && @@ -47,26 +176,44 @@ export function materializeReplayTranscriptRuntimeInstructions( "prompt" in frame.params && Array.isArray(frame.params.prompt) ) { + const promptSessionId = "sessionId" in frame.params ? frame.params.sessionId : undefined; const prompt: ReadonlyArray = frame.params.prompt; - const lastPart = prompt.at(-1); - if ( - typeof lastPart === "object" && - lastPart !== null && - "type" in lastPart && - lastPart.type === "text" && - "text" in lastPart && - typeof lastPart.text === "string" && - // A recording that switched models mid-thread already carries the - // instructions for the model each prompt ran on. - (lastPart.text === instructions || lastPart.text.startsWith("")) - ) { + const firstText = promptPartText(prompt[0])?.trim(); + // Like the adapter, native slash commands go out without instructions. Where the agent + // compacts through the prompt, a successful `/compact` makes the next prompt resend them. + if (firstText?.startsWith("/") === true) { + pendingPrompt = { + sessionId: promptSessionId, + notes: undefined, + compact: + compactsThroughPrompt && prompt.length === 1 && /^\/compact(?:\s|$)/.test(firstText), + compactionsAtSend: compactionCounts.get(promptSessionId) ?? 0, + }; return entry; } + const lastText = promptPartText(prompt.at(-1)); + const expected = notesFor(promptSessionId); + // A recording that switched models mid-thread already carries the + // instructions for the model each prompt ran on. + const recordedNotes = + lastText === expected || lastText?.startsWith("") === true + ? lastText + : undefined; + const resend = + recordedNotes === undefined && deliveredNotes.get(promptSessionId) !== expected; + pendingPrompt = { + sessionId: promptSessionId, + // Recorders normalize the notes they keep, so a recorded block stands for this model's. + notes: recordedNotes !== undefined || resend ? expected : undefined, + compact: false, + compactionsAtSend: compactionCounts.get(promptSessionId) ?? 0, + }; + if (!resend) return entry; return { ...entry, frame: { ...frame, - params: { ...frame.params, prompt: [...prompt, { type: "text", text: instructions }] }, + params: { ...frame.params, prompt: [...prompt, { type: "text", text: expected }] }, }, }; } @@ -74,3 +221,30 @@ export function materializeReplayTranscriptRuntimeInstructions( }), }; } + +function promptPartText(part: unknown): string | undefined { + return typeof part === "object" && + part !== null && + "type" in part && + part.type === "text" && + "text" in part && + typeof part.text === "string" + ? part.text + : undefined; +} + +type ReplayFrame = { + readonly kind?: unknown; + readonly method?: unknown; + readonly params?: unknown; + readonly result?: unknown; + readonly error?: unknown; +}; + +function isRecord(value: unknown): value is Record { + return typeof value === "object" && value !== null; +} + +function asFrame(value: unknown): ReplayFrame | undefined { + return isRecord(value) ? value : undefined; +} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/fx_early_stop/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/fx_early_stop/fx_transcript.ndjson index 5c684b21bc327..443a33b13ca30 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/fx_early_stop/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/fx_early_stop/fx_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"fx_early_stop","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} @@ -12,7 +12,7 @@ {"type":"expect_outbound","label":"notification:session/cancel","frame":{"kind":"notification","method":"session/cancel","params":{"sessionId":"fx-session-01"}}} {"type":"emit_inbound","label":"notification:session/update:session_info_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"session_info_update","title":"Interrupt Fixture Should Not Finish Naturally","updatedAt":"2026-10-11T12:47:36Z"}}}} {"type":"emit_inbound","label":"response:session/prompt","frame":{"kind":"response","method":"session/prompt","result":{"stopReason":"cancelled","usage":{}}}} -{"type":"expect_outbound","label":"request:session/prompt","frame":{"kind":"request","method":"session/prompt","params":{"sessionId":"fx-session-01","prompt":[{"type":"text","text":"Respond with the following text: fixture simple ok"}]}}} +{"type":"expect_outbound","label":"request:session/prompt","frame":{"kind":"request","method":"session/prompt","params":{"sessionId":"fx-session-01","prompt":[{"type":"text","text":"\n\n\n\n\nRespond with the following text: fixture simple ok\n"},{"type":"text","text":""}]}}} {"type":"emit_inbound","label":"notification:session/update:agent_message_chunk","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"agent_message_chunk","messageId":"40d0598a1dc44d74bf44dfcc62d4ab1e","content":{"type":"text","text":"fixture simple ok"}}}}} {"type":"emit_inbound","label":"notification:session/update:session_info_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"session_info_update","title":"Interrupt Fixture Should Not Finish Naturally","updatedAt":"2026-10-11T12:47:39Z"}}}} {"type":"emit_inbound","label":"notification:session/update:usage_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"usage_update","used":20133,"size":1000000}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/fx_subagent/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/fx_subagent/fx_transcript.ndjson index e2ddcf46159a3..99ce6d8a0b7ba 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/fx_subagent/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/fx_subagent/fx_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"fx_subagent","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.14","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.14"},"authMethods":[]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"openai/gpt-5.2","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2-codex","name":"openai/gpt-5.2-codex"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-codex-max","name":"openai/gpt-5.1-codex-max"},{"value":"openai/gpt-5.1-codex","name":"openai/gpt-5.1-codex"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5-codex","name":"openai/gpt-5-codex"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"moonshotai/kimi-k3.1-pro","name":"moonshotai/kimi-k3.1-pro"},{"value":"moonshotai/kimi-k3.1-pro-highspeed","name":"moonshotai/kimi-k3.1-pro-highspeed"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"xiaomi/mimo-v2.6-pro","name":"xiaomi/mimo-v2.6-pro"},{"value":"xiaomi/mimo-v2.6-pro-ultraspeed","name":"xiaomi/mimo-v2.6-pro-ultraspeed"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"xiaomi/mimo-v2.5-pro","name":"xiaomi/mimo-v2.5-pro"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-terra","name":"openai/gpt-6.1-terra"},{"value":"openai/gpt-6.1-terra-fast","name":"openai/gpt-6.1-terra-fast"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"google/gemma-4-31b-it","name":"google/gemma-4-31b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-v3.1","name":"deepseek/deepseek-v3.1"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/muse-spark-open","name":"meta/muse-spark-open"},{"value":"meta/muse-wonder-1.0","name":"meta/muse-wonder-1.0"},{"value":"meta/muse-spark-1.3","name":"meta/muse-spark-1.3"},{"value":"meta/muse-spark-1.3-contributor","name":"meta/muse-spark-1.3-contributor"},{"value":"meta/muse-glimmer-30b","name":"meta/muse-glimmer-30b"},{"value":"meta/muse-spark-1.2","name":"meta/muse-spark-1.2"},{"value":"meta/muse-spark-1.2-contributor","name":"meta/muse-spark-1.2-contributor"},{"value":"meta/muse-spark-1.1","name":"meta/muse-spark-1.1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"mistral/mistral-large-4","name":"mistral/mistral-large-4"},{"value":"mistral/mistral-medium-3.5","name":"mistral/mistral-medium-3.5"},{"value":"mistral/mistral-large-3","name":"mistral/mistral-large-3"},{"value":"mistral/mistral-small","name":"mistral/mistral-small"},{"value":"mistral/mistral-nemo","name":"mistral/mistral-nemo"},{"value":"mistral/codestral","name":"mistral/codestral"},{"value":"alibaba/qwen3.8-max-prime","name":"alibaba/qwen3.8-max-prime"},{"value":"alibaba/qwen3.8-max-0902","name":"alibaba/qwen3.8-max-0902"},{"value":"alibaba/qwen3.8-27b","name":"alibaba/qwen3.8-27b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3.7-plus","name":"alibaba/qwen3.7-plus"},{"value":"alibaba/qwen3.7-max","name":"alibaba/qwen3.7-max"},{"value":"alibaba/qwen3.6-27b","name":"alibaba/qwen3.6-27b"},{"value":"alibaba/qwen3.6-plus","name":"alibaba/qwen3.6-plus"},{"value":"alibaba/qwen3.5-plus","name":"alibaba/qwen3.5-plus"},{"value":"alibaba/qwen3-max-thinking","name":"alibaba/qwen3-max-thinking"},{"value":"alibaba/qwen3-vl-instruct","name":"alibaba/qwen3-vl-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-14b","name":"alibaba/qwen-3-14b"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-30b","name":"alibaba/qwen-3-30b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"inception/mercury-3","name":"inception/mercury-3"},{"value":"reflection/beam","name":"reflection/beam"},{"value":"reflection/beam-free","name":"reflection/beam-free"},{"value":"nvidia/nemotron-3.5-super-vl","name":"nvidia/nemotron-3.5-super-vl"},{"value":"nvidia/nemotron-3.5-lightning-free","name":"nvidia/nemotron-3.5-lightning-free"},{"value":"liquid/lfm2.5-24b-a2b","name":"liquid/lfm2.5-24b-a2b"},{"value":"callstack/apex","name":"callstack/apex"},{"value":"stealth/glyph-cluster","name":"stealth/glyph-cluster"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"sakana/fugu-max","name":"sakana/fugu-max"},{"value":"sakana/fugu-ultra-v2","name":"sakana/fugu-ultra-v2"},{"value":"inception/mercury-2.5","name":"inception/mercury-2.5"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"mixedbread/toast-1","name":"mixedbread/toast-1"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"sakana/namazu","name":"sakana/namazu"},{"value":"thinkingmachines/inkling-small","name":"thinkingmachines/inkling-small"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"poolside/laguna-s-2.1-free","name":"poolside/laguna-s-2.1-free"},{"value":"poolside/laguna-s-2.1","name":"poolside/laguna-s-2.1"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"thinkingmachines/inkling","name":"thinkingmachines/inkling"},{"value":"tencent/hy3","name":"tencent/hy3"},{"value":"bytedance/seed-2.1-turbo","name":"bytedance/seed-2.1-turbo"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"sakana/fugu-ultra","name":"sakana/fugu-ultra"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"moonshotai/kimi-k2.7-code-highspeed","name":"moonshotai/kimi-k2.7-code-highspeed"},{"value":"moonshotai/kimi-k2.7-code","name":"moonshotai/kimi-k2.7-code"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"xiaomi/mimo-v2.5","name":"xiaomi/mimo-v2.5"},{"value":"moonshotai/kimi-k2.6","name":"moonshotai/kimi-k2.6"},{"value":"zai/glm-5.1","name":"zai/glm-5.1"},{"value":"arcee-ai/trinity-large-thinking","name":"arcee-ai/trinity-large-thinking"},{"value":"zai/glm-5v-turbo","name":"zai/glm-5v-turbo"},{"value":"zai/glm-5-turbo","name":"zai/glm-5-turbo"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"inception/mercury-2","name":"inception/mercury-2"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-3-nano-30b-a3b","name":"nvidia/nemotron-3-nano-30b-a3b"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"zai/glm-4.6","name":"zai/glm-4.6"},{"value":"bytedance/seed-1.6","name":"bytedance/seed-1.6"},{"value":"bytedance/seed-1.8","name":"bytedance/seed-1.8"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"zai/glm-4.5v","name":"zai/glm-4.5v"},{"value":"zai/glm-4.5","name":"zai/glm-4.5"},{"value":"zai/glm-4.5-air","name":"zai/glm-4.5-air"},{"value":"moonshotai/kimi-k2","name":"moonshotai/kimi-k2"},{"value":"cohere/command-a","name":"cohere/command-a"},{"value":"inception/mercury-coder-small","name":"inception/mercury-coder-small"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash-1017","name":"deepseek/deepseek-v4.1-flash-1017"},{"value":"deepseek/deepseek-v4.1-flash-1017-fast","name":"deepseek/deepseek-v4.1-flash-1017-fast"},{"value":"deepseek/deepseek-v4.1-flash-fast","name":"deepseek/deepseek-v4.1-flash-fast"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash-vision-exp","name":"deepseek/deepseek-v4-flash-vision-exp"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"alibaba/qwen3.8-omni-flash","name":"alibaba/qwen3.8-omni-flash"},{"value":"alibaba/qwen3.8-flash","name":"alibaba/qwen3.8-flash"},{"value":"alibaba/qwen3.7-flash","name":"alibaba/qwen3.7-flash"},{"value":"alibaba/qwen3.5-flash","name":"alibaba/qwen3.5-flash"},{"value":"inclusionai/ling-3.1-flash","name":"inclusionai/ling-3.1-flash"},{"value":"xiaomi/mimo-v2.6-flash","name":"xiaomi/mimo-v2.6-flash"},{"value":"zai/glm-5.3-flashx","name":"zai/glm-5.3-flashx"},{"value":"inclusionai/ling-3.0-flash-vl","name":"inclusionai/ling-3.0-flash-vl"},{"value":"inclusionai/ling-3.0-flash-sante","name":"inclusionai/ling-3.0-flash-sante"},{"value":"inclusionai/ling-3.0-flash-fin","name":"inclusionai/ling-3.0-flash-fin"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"inclusionai/ling-3.0-flash","name":"inclusionai/ling-3.0-flash"},{"value":"stepfun/step-3.7-flash","name":"stepfun/step-3.7-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"zai/glm-4.7-flashx","name":"zai/glm-4.7-flashx"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5.1-codex-mini","name":"openai/gpt-5.1-codex-mini"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-4-argon","name":"google/gemini-4-argon"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"mistral/ministral-14b","name":"mistral/ministral-14b"},{"value":"mistral/ministral-3b","name":"mistral/ministral-3b"},{"value":"mistral/ministral-8b","name":"mistral/ministral-8b"},{"value":"minimax/minimax-m3.1-flash","name":"minimax/minimax-m3.1-flash"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.7","name":"minimax/minimax-m2.7"},{"value":"minimax/minimax-m2.7-highspeed","name":"minimax/minimax-m2.7-highspeed"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.5-highspeed","name":"minimax/minimax-m2.5-highspeed"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"minimax/minimax-m2.1-lightning","name":"minimax/minimax-m2.1-lightning"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"minimax/minimax-m2","name":"minimax/minimax-m2"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"meituan/longcat-2.5-preview","name":"meituan/longcat-2.5-preview"},{"value":"stepfun/step-5-preview","name":"stepfun/step-5-preview"},{"value":"tencent/hy4-preview","name":"tencent/hy4-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"},{"value":"interfaze/interfaze-beta","name":"interfaze/interfaze-beta"},{"value":"tencent/hy-mt2-pro","name":"tencent/hy-mt2-pro"},{"value":"scaledown/scaledown-extract-1","name":"scaledown/scaledown-extract-1"},{"value":"scaledown/scaledown-summarize-1","name":"scaledown/scaledown-summarize-1"},{"value":"elorian/glimpse","name":"elorian/glimpse"},{"value":"tencent/hy-mt2-plus","name":"tencent/hy-mt2-plus"},{"value":"inference-net/schematron-v2-small","name":"inference-net/schematron-v2-small"},{"value":"inference-net/schematron-v2-turbo","name":"inference-net/schematron-v2-turbo"},{"value":"morph/morph-v3-fast","name":"morph/morph-v3-fast"},{"value":"morph/morph-v3-large","name":"morph/morph-v3-large"},{"value":"perplexity/sonar","name":"perplexity/sonar"},{"value":"tencent/hy-mt2-lite","name":"tencent/hy-mt2-lite"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"auto","name":"Auto","description":"Check actions with an automatic safety review instead of asking","_meta":{"fx":{"permissionMode":"auto"}}},{"value":"ask","name":"Ask","description":"Request permission before making any changes","_meta":{"fx":{"permissionMode":"ask"}}},{"value":"full-access","name":"Full access","description":"Run every action without asking, outside the sandbox","_meta":{"fx":{"permissionMode":"yolo"}}}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"auto","options":[{"value":"auto","name":"default"},{"value":"none","name":"none"},{"value":"minimal","name":"minimal"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"}]},{"id":"fast","name":"Fast Mode","description":"Uses the model's fast lane","category":"model","type":"select","currentValue":"false","options":[{"value":"false","name":"off"},{"value":"true","name":"on"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"auto","name":"Auto","description":"Check actions with an automatic safety review instead of asking"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"},{"id":"full-access","name":"Full access","description":"Run every action without asking, outside the sandbox"}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/grok_auto_blocked_command/grok_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/grok_auto_blocked_command/grok_transcript.ndjson index df6aab256644c..cf27f37b09eda 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/grok_auto_blocked_command/grok_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/grok_auto_blocked_command/grok_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"grok","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"grok_auto_blocked_command","metadata":{"generatedBy":"live-grok-recorder","grokVersion":"1.0.41","normalization":"Session ids are fixed UUIDs, the workspace is , HOME is /home/grok-replay and the recording user is grok-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Personal skills, machine identity, account settings and announcement broadcasts are removed, as are responses to Grok-internal request ids that T3's protocol drops. Timestamps are kept as recorded.","droppedFrames":5}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","_meta":{"clientType":"extension"},"clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","_meta":{"clientType":"extension"},"clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":false,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"resume":{},"close":{}},"auth":{},"_meta":{"x.ai/fs_notify":true,"x.ai/hooks":{"blockingEvents":["pre_tool_use","stop","subagent_stop"],"decisions":["deny","block"],"stopSignals":["continue","stopReason","additionalContext"]},"x.ai/capabilities":{"toolOverrides":{"x_keyword_search":true,"x_semantic_search":true,"x_user_search":false,"x_thread_fetch":false}}}},"authMethods":[{"id":"cached_token","name":"cached_token","description":"Cached token from ~/.grok/auth.json"},{"id":"grok.com","name":"Grok","description":"Sign in with Grok"}],"_meta":{"grokShell":true,"defaultAuthMethodId":"cached_token","x.ai/mcp/sdk":true,"x.ai/pluginDirs":true,"currentWorkingDirectory":"","agentVersion":"1.0.41","agentId":"00000000-0000-4000-8000-000000000000","agentInstanceId":"00000000-0000-4000-8000-000000000000","hostname":"grok-replay","modelState":{"currentModelId":"grok-4.7","availableModels":[{"modelId":"grok-4.7","name":"Grok 4.7","description":"SpaceXAI's latest frontier model","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Maximum reasoning for the hardest tasks.","default":false},{"id":"high","value":"high","label":"High","description":"Thorough reasoning and quality. Recommended.","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Strong quality with a faster turnaround.","default":false},{"id":"low","value":"low","label":"Low","description":"Fastest responses. Best for simple tasks.","default":false}]}},{"modelId":"grok-4.7-build-fast","name":"Grok 4.7 Fast","description":"Fast variant. 2x the price.","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Maximum reasoning for the hardest tasks.","default":false},{"id":"high","value":"high","label":"High","description":"Thorough reasoning and quality. Recommended.","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Strong quality with a faster turnaround.","default":false},{"id":"low","value":"low","label":"Low","description":"Fastest responses. Best for simple tasks.","default":false}]}},{"modelId":"grok-4.6","name":"Grok 4.6","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Highest effort and reasoning level","default":false},{"id":"high","value":"high","label":"High","description":"Higher implementation quality with extensive reasoning","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Balanced effort with standard implementation and testing","default":false},{"id":"low","value":"low","label":"Low","description":"Quick, fast implementations","default":false}]}},{"modelId":"grok-4.5","name":"Grok 4.5","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"high","value":"high","label":"High","description":"Highest implementation quality with extensive reasoning","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Balanced effort with standard implementation and testing","default":false},{"id":"low","value":"low","label":"Low","description":"Quick, fast implementations","default":false}]}}]},"mcpServers":[],"mcpApps":false,"metadata":null,"availableCommands":[{"name":"compact","description":"Compress conversation history to save context window","input":{"hint":"optional context about what to preserve"}},{"name":"always-approve","description":"Toggle always-approve mode (skip all permission prompts)","input":{"hint":"on|off"}},{"name":"context","description":"Show context window usage and session stats","input":null},{"name":"session-info","description":"Show session details (model, turns, context usage)","input":null},{"name":"deep-research","description":"Research with bounded parallel agents, cross-check evidence, and write a cited report","input":{"hint":""}},{"name":"workflow","description":"Launch a saved workflow, list runs, or manage a run (pause, resume, stop, save)","input":{"hint":" [--agent-budget N] [--effort LEVEL] [args] | runs | pause|resume|stop|save [name]"}},{"name":"goal","description":"Set, manage, or check an autonomous goal","input":{"hint":" [--budget ] | status | pause | resume | clear"}}],"cancelRewind":true,"sessionRecap":true,"feedbackTraceOffer":false,"voiceMode":true}}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:_x.ai/mcp/servers_updated","frame":{"kind":"notification","method":"_x.ai/mcp/servers_updated","params":{"mcpServers":[]}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/grok_background_bash/grok_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/grok_background_bash/grok_transcript.ndjson index d8ecb1438f14f..3509ee229698f 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/grok_background_bash/grok_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/grok_background_bash/grok_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"grok","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"grok_background_bash","metadata":{"generatedBy":"live-grok-recorder","grokVersion":"1.0.41","normalization":"Session ids are fixed UUIDs, the workspace is , HOME is /home/grok-replay and the recording user is grok-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Personal skills, machine identity, account settings and announcement broadcasts are removed, as are responses to Grok-internal request ids that T3's protocol drops. Timestamps are kept as recorded.","droppedFrames":5}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","_meta":{"clientType":"extension"},"clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","_meta":{"clientType":"extension"},"clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":false,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"resume":{},"close":{}},"auth":{},"_meta":{"x.ai/fs_notify":true,"x.ai/hooks":{"blockingEvents":["pre_tool_use","stop","subagent_stop"],"decisions":["deny","block"],"stopSignals":["continue","stopReason","additionalContext"]},"x.ai/capabilities":{"toolOverrides":{"x_keyword_search":true,"x_semantic_search":true,"x_user_search":false,"x_thread_fetch":false}}}},"authMethods":[{"id":"cached_token","name":"cached_token","description":"Cached token from ~/.grok/auth.json"},{"id":"grok.com","name":"Grok","description":"Sign in with Grok"}],"_meta":{"grokShell":true,"defaultAuthMethodId":"cached_token","x.ai/mcp/sdk":true,"x.ai/pluginDirs":true,"currentWorkingDirectory":"","agentVersion":"1.0.41","agentId":"00000000-0000-4000-8000-000000000000","agentInstanceId":"00000000-0000-4000-8000-000000000000","hostname":"grok-replay","modelState":{"currentModelId":"grok-4.7","availableModels":[{"modelId":"grok-4.7","name":"Grok 4.7","description":"SpaceXAI's latest frontier model","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Maximum reasoning for the hardest tasks.","default":false},{"id":"high","value":"high","label":"High","description":"Thorough reasoning and quality. Recommended.","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Strong quality with a faster turnaround.","default":false},{"id":"low","value":"low","label":"Low","description":"Fastest responses. Best for simple tasks.","default":false}]}},{"modelId":"grok-4.7-build-fast","name":"Grok 4.7 Fast","description":"Fast variant. 2x the price.","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Maximum reasoning for the hardest tasks.","default":false},{"id":"high","value":"high","label":"High","description":"Thorough reasoning and quality. Recommended.","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Strong quality with a faster turnaround.","default":false},{"id":"low","value":"low","label":"Low","description":"Fastest responses. Best for simple tasks.","default":false}]}},{"modelId":"grok-4.6","name":"Grok 4.6","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Highest effort and reasoning level","default":false},{"id":"high","value":"high","label":"High","description":"Higher implementation quality with extensive reasoning","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Balanced effort with standard implementation and testing","default":false},{"id":"low","value":"low","label":"Low","description":"Quick, fast implementations","default":false}]}},{"modelId":"grok-4.5","name":"Grok 4.5","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"high","value":"high","label":"High","description":"Highest implementation quality with extensive reasoning","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Balanced effort with standard implementation and testing","default":false},{"id":"low","value":"low","label":"Low","description":"Quick, fast implementations","default":false}]}}]},"mcpServers":[],"mcpApps":false,"metadata":null,"availableCommands":[{"name":"compact","description":"Compress conversation history to save context window","input":{"hint":"optional context about what to preserve"}},{"name":"always-approve","description":"Toggle always-approve mode (skip all permission prompts)","input":{"hint":"on|off"}},{"name":"context","description":"Show context window usage and session stats","input":null},{"name":"session-info","description":"Show session details (model, turns, context usage)","input":null},{"name":"deep-research","description":"Research with bounded parallel agents, cross-check evidence, and write a cited report","input":{"hint":""}},{"name":"workflow","description":"Launch a saved workflow, list runs, or manage a run (pause, resume, stop, save)","input":{"hint":" [--agent-budget N] [--effort LEVEL] [args] | runs | pause|resume|stop|save [name]"}},{"name":"goal","description":"Set, manage, or check an autonomous goal","input":{"hint":" [--budget ] | status | pause | resume | clear"}}],"cancelRewind":true,"sessionRecap":true,"feedbackTraceOffer":false,"voiceMode":true}}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:_x.ai/mcp/servers_updated","frame":{"kind":"notification","method":"_x.ai/mcp/servers_updated","params":{"mcpServers":[]}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/grok_background_bash_fast_wake/grok_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/grok_background_bash_fast_wake/grok_transcript.ndjson index 816301f66a9ae..d321f2e60a105 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/grok_background_bash_fast_wake/grok_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/grok_background_bash_fast_wake/grok_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"grok","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"grok_background_bash_fast_wake","metadata":{"generatedBy":"live-grok-recorder","grokVersion":"1.0.44","normalization":"Session ids are fixed UUIDs, the workspace is , HOME is /home/grok-replay and the recording user is grok-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Personal skills, machine identity, account settings and announcement broadcasts are removed, as are responses to Grok-internal request ids that T3's protocol drops. Timestamps are kept as recorded.","droppedFrames":5}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","_meta":{"clientType":"extension"},"clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","_meta":{"clientType":"extension"},"clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":false,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"resume":{},"close":{}},"auth":{},"_meta":{"x.ai/fs_notify":true,"x.ai/hooks":{"blockingEvents":["pre_tool_use","stop","subagent_stop"],"decisions":["deny","block"],"stopSignals":["continue","stopReason","additionalContext"]},"x.ai/capabilities":{"toolOverrides":{"x_keyword_search":true,"x_semantic_search":true,"x_user_search":false,"x_thread_fetch":false}}}},"authMethods":[{"id":"cached_token","name":"cached_token","description":"Cached token from ~/.grok/auth.json"},{"id":"grok.com","name":"Grok","description":"Sign in with Grok"}],"_meta":{"grokShell":true,"defaultAuthMethodId":"cached_token","x.ai/mcp/sdk":true,"x.ai/pluginDirs":true,"currentWorkingDirectory":"","agentVersion":"1.0.44","agentId":"00000000-0000-4000-8000-000000000000","agentInstanceId":"00000000-0000-4000-8000-000000000000","hostname":"grok-replay","modelState":{"currentModelId":"grok-4.7","availableModels":[{"modelId":"grok-4.7","name":"Grok 4.7","description":"SpaceXAI's latest frontier model","_meta":{"totalContextTokens":256000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Maximum reasoning for the hardest tasks.","default":false},{"id":"high","value":"high","label":"High","description":"Thorough reasoning and quality. Recommended.","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Strong quality with a faster turnaround.","default":false},{"id":"low","value":"low","label":"Low","description":"Fastest responses. Best for simple tasks.","default":false}],"contextWindows":[256000,500000]}},{"modelId":"grok-4.7-build-fast","name":"Grok 4.7 Fast","description":"Fast variant. 2x the price.","_meta":{"totalContextTokens":256000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Maximum reasoning for the hardest tasks.","default":false},{"id":"high","value":"high","label":"High","description":"Thorough reasoning and quality. Recommended.","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Strong quality with a faster turnaround.","default":false},{"id":"low","value":"low","label":"Low","description":"Fastest responses. Best for simple tasks.","default":false}],"contextWindows":[256000,500000]}},{"modelId":"grok-4.6","name":"Grok 4.6","_meta":{"totalContextTokens":256000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Highest effort and reasoning level","default":false},{"id":"high","value":"high","label":"High","description":"Higher implementation quality with extensive reasoning","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Balanced effort with standard implementation and testing","default":false},{"id":"low","value":"low","label":"Low","description":"Quick, fast implementations","default":false}],"contextWindows":[256000,500000]}},{"modelId":"grok-4.5","name":"Grok 4.5","_meta":{"totalContextTokens":256000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"high","value":"high","label":"High","description":"Highest implementation quality with extensive reasoning","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Balanced effort with standard implementation and testing","default":false},{"id":"low","value":"low","label":"Low","description":"Quick, fast implementations","default":false}],"contextWindows":[256000,500000]}}]},"mcpServers":[],"mcpApps":false,"metadata":null,"availableCommands":[{"name":"compact","description":"Compress conversation history to save context window","input":null},{"name":"always-approve","description":"Toggle always-approve mode (skip all permission prompts)","input":{"hint":"on|off"}},{"name":"context","description":"Show context window usage and session stats","input":null},{"name":"session-info","description":"Show session details (model, turns, context usage)","input":null},{"name":"deep-research","description":"Research with bounded parallel agents, cross-check evidence, and write a cited report","input":{"hint":""}},{"name":"workflow","description":"Launch a saved workflow, list runs, or manage a run (pause, resume, stop, save)","input":{"hint":" [--agent-budget N] [--effort LEVEL] [args] | runs | pause|resume|stop|save [name]"}},{"name":"goal","description":"Set, manage, or check an autonomous goal","input":{"hint":" [--budget ] | status | pause | resume | clear"}}],"cancelRewind":true,"sessionRecap":true,"feedbackTraceOffer":false,"voiceMode":true}}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:_x.ai/session/setup","frame":{"kind":"notification","method":"_x.ai/session/setup","params":{"method":"session/new","phase":"auth","sessionId":null}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/grok_prompt_error/grok_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/grok_prompt_error/grok_transcript.ndjson index 9fa307acc195a..8ed6a2537ab3f 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/grok_prompt_error/grok_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/grok_prompt_error/grok_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"grok","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"grok_prompt_error","metadata":{"generatedBy":"live-grok-recorder","grokVersion":"1.0.44","normalization":"Session ids are fixed UUIDs, the workspace is , HOME is /home/grok-replay and the recording user is grok-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Personal skills, machine identity, account settings and announcement broadcasts are removed, as are responses to Grok-internal request ids that T3's protocol drops. Timestamps are kept as recorded.","droppedFrames":5}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","_meta":{"clientType":"extension"},"clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","_meta":{"clientType":"extension"},"clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":false,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"resume":{},"close":{}},"auth":{},"_meta":{"x.ai/fs_notify":true,"x.ai/hooks":{"blockingEvents":["pre_tool_use","stop","subagent_stop"],"decisions":["deny","block"],"stopSignals":["continue","stopReason","additionalContext"]},"x.ai/capabilities":{"toolOverrides":{"x_keyword_search":true,"x_semantic_search":true,"x_user_search":false,"x_thread_fetch":false}}}},"authMethods":[{"id":"cached_token","name":"cached_token","description":"Cached token from ~/.grok/auth.json"},{"id":"grok.com","name":"Grok","description":"Sign in with Grok"}],"_meta":{"grokShell":true,"defaultAuthMethodId":"cached_token","x.ai/mcp/sdk":true,"x.ai/pluginDirs":true,"currentWorkingDirectory":"","agentVersion":"1.0.44","agentId":"00000000-0000-4000-8000-000000000000","agentInstanceId":"00000000-0000-4000-8000-000000000000","hostname":"grok-replay","modelState":{"currentModelId":"grok-4.7","availableModels":[{"modelId":"grok-4.7","name":"Grok 4.7","description":"SpaceXAI's latest frontier model","_meta":{"totalContextTokens":256000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Maximum reasoning for the hardest tasks.","default":false},{"id":"high","value":"high","label":"High","description":"Thorough reasoning and quality. Recommended.","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Strong quality with a faster turnaround.","default":false},{"id":"low","value":"low","label":"Low","description":"Fastest responses. Best for simple tasks.","default":false}],"contextWindows":[256000,500000]}},{"modelId":"grok-4.7-build-fast","name":"Grok 4.7 Fast","description":"Fast variant. 2x the price.","_meta":{"totalContextTokens":256000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Maximum reasoning for the hardest tasks.","default":false},{"id":"high","value":"high","label":"High","description":"Thorough reasoning and quality. Recommended.","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Strong quality with a faster turnaround.","default":false},{"id":"low","value":"low","label":"Low","description":"Fastest responses. Best for simple tasks.","default":false}],"contextWindows":[256000,500000]}},{"modelId":"grok-4.6","name":"Grok 4.6","_meta":{"totalContextTokens":256000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Highest effort and reasoning level","default":false},{"id":"high","value":"high","label":"High","description":"Higher implementation quality with extensive reasoning","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Balanced effort with standard implementation and testing","default":false},{"id":"low","value":"low","label":"Low","description":"Quick, fast implementations","default":false}],"contextWindows":[256000,500000]}},{"modelId":"grok-4.5","name":"Grok 4.5","_meta":{"totalContextTokens":256000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"high","value":"high","label":"High","description":"Highest implementation quality with extensive reasoning","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Balanced effort with standard implementation and testing","default":false},{"id":"low","value":"low","label":"Low","description":"Quick, fast implementations","default":false}],"contextWindows":[256000,500000]}}]},"mcpServers":[],"mcpApps":false,"metadata":null,"availableCommands":[{"name":"compact","description":"Compress conversation history to save context window","input":null},{"name":"always-approve","description":"Toggle always-approve mode (skip all permission prompts)","input":{"hint":"on|off"}},{"name":"context","description":"Show context window usage and session stats","input":null},{"name":"session-info","description":"Show session details (model, turns, context usage)","input":null},{"name":"deep-research","description":"Research with bounded parallel agents, cross-check evidence, and write a cited report","input":{"hint":""}},{"name":"workflow","description":"Launch a saved workflow, list runs, or manage a run (pause, resume, stop, save)","input":{"hint":" [--agent-budget N] [--effort LEVEL] [args] | runs | pause|resume|stop|save [name]"}},{"name":"goal","description":"Set, manage, or check an autonomous goal","input":{"hint":" [--budget ] | status | pause | resume | clear"}}],"cancelRewind":true,"sessionRecap":true,"feedbackTraceOffer":false,"voiceMode":true}}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:_x.ai/session/setup","frame":{"kind":"notification","method":"_x.ai/session/setup","params":{"method":"session/new","phase":"auth","sessionId":null}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_cloud_config/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_cloud_config/kiro_transcript.ndjson index e4b6ab19b2f30..f633b0f8b9343 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_cloud_config/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_cloud_config/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"kiro_cloud_config","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.32.0","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":13,"editedFrames":"Copied from turn_interrupt/kiro_transcript.ndjson. Added by hand: the background `fetch_cloud_config` tool call and its completion, as @hstern recorded them from kiro-cli 2.31.0 with an Identity Center login, in an order that failed there: the call before `session/prompt`, its completion after the `user_message_id_assigned` echo. The tool call id is invented; the reported frames omitted it."}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_compaction/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_compaction/kiro_transcript.ndjson index 6dce2f2ccb9f4..436e2790e36c2 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_compaction/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_compaction/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"kiro_compaction","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.33.1","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":15}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_effort/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_effort/kiro_transcript.ndjson index 2b613ee1100fc..d6b9a290c47eb 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_effort/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_effort/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"kiro_effort","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.32.0","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":13}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_fork_from_turn/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_fork_from_turn/kiro_transcript.ndjson index aac368e4d4838..a9dd2d3c4a248 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_fork_from_turn/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_fork_from_turn/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"kiro_fork_from_turn","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.33.1","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":39}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} @@ -39,7 +39,7 @@ {"type":"emit_inbound","label":"response:session/prompt","frame":{"kind":"response","method":"session/prompt","result":{"stopReason":"end_turn"}}} {"type":"emit_inbound","label":"notification:session/update:session_info_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"session_info_update","_meta":{"kiro":{"contextUsage":{"usagePercentage":9.52649974822998},"breakdown":{"contextFiles":{"tokens":0,"percent":0,"items":[]},"tools":{"tokens":5481,"percent":0.5,"mcp":{"tokens":0,"percent":0},"builtin":{"tokens":5481,"percent":0.5}},"memory":{"tokens":0,"percent":0},"kiroResponses":{"tokens":10,"percent":0.1},"yourPrompts":{"tokens":778,"percent":8.9},"sessionFiles":{"tokens":0,"percent":0,"items":[]}},"kind":"context_usage","usagePercentage":9.52649974822998}}}}}} {"type":"runtime_exit","status":"success"} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000002","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_message_steering/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_message_steering/kiro_transcript.ndjson index 519feac99d2c4..ab8f2487d5cda 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_message_steering/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_message_steering/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"kiro_message_steering","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.33.1","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":13}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_model_switch/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_model_switch/kiro_transcript.ndjson index da3fd02222950..4e2ee42e7fcbb 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_model_switch/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_model_switch/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"kiro_model_switch","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.32.0","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":15}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_permission_modes/kiro_full_access_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_permission_modes/kiro_full_access_transcript.ndjson index 05a5adb1f805d..bfd39789b8037 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_permission_modes/kiro_full_access_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_permission_modes/kiro_full_access_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"kiro_full_access_write","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.32.0","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":13}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_permission_modes/kiro_supervised_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_permission_modes/kiro_supervised_transcript.ndjson index fa569a6db3044..2fa2801971cce 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_permission_modes/kiro_supervised_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_permission_modes/kiro_supervised_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"kiro_supervised_write","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.32.0","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":13}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_subagent_interrupt/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_subagent_interrupt/kiro_transcript.ndjson index 65151441473ef..668ea320bfe31 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_subagent_interrupt/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_subagent_interrupt/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"kiro_subagent_interrupt","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.33.1","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":13}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_unknown_model/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_unknown_model/kiro_transcript.ndjson index 0ec466156adf9..2391a749b7e8e 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/kiro_unknown_model/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/kiro_unknown_model/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"kiro_unknown_model","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.27.0","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":14}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/fx_transcript.ndjson index 75ed31f7fdb3c..86c9b5d36e00e 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/fx_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"message_steering","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} @@ -12,7 +12,7 @@ {"type":"expect_outbound","label":"notification:session/cancel","frame":{"kind":"notification","method":"session/cancel","params":{"sessionId":"fx-session-01"}}} {"type":"emit_inbound","label":"notification:session/update:session_info_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"session_info_update","title":"Steering Fixture Initial Response","updatedAt":"2026-10-11T13:54:11Z"}}}} {"type":"emit_inbound","label":"response:session/prompt","frame":{"kind":"response","method":"session/prompt","result":{"stopReason":"cancelled","usage":{}}}} -{"type":"expect_outbound","label":"request:session/prompt","frame":{"kind":"request","method":"session/prompt","params":{"sessionId":"fx-session-01","prompt":[{"type":"text","text":"Actually, respond with exactly: steering fixture observed"}]}}} +{"type":"expect_outbound","label":"request:session/prompt","frame":{"kind":"request","method":"session/prompt","params":{"sessionId":"fx-session-01","prompt":[{"type":"text","text":"\n\n\n\n\nActually, respond with exactly: steering fixture observed\n"},{"type":"text","text":""}]}}} {"type":"emit_inbound","label":"notification:session/update:agent_message_chunk","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"agent_message_chunk","messageId":"10c63c6eb70c5fb1cb62ee14ceec92ac","content":{"type":"text","text":"steering fixture observed"}}}}} {"type":"emit_inbound","label":"notification:session/update:session_info_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"session_info_update","title":"Steering Fixture Initial Response","updatedAt":"2026-10-11T13:54:14Z"}}}} {"type":"emit_inbound","label":"notification:session/update:usage_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"usage_update","used":20096,"size":1000000}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/grok_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/grok_transcript.ndjson index a7f4f9fbbd8cf..da8314feb536e 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/grok_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/grok_transcript.ndjson @@ -30,7 +30,7 @@ {"type":"emit_inbound","label":"notification:_x.ai/session/prompt_complete","frame":{"kind":"notification","method":"_x.ai/session/prompt_complete","params":{"sessionId":"00000000-0000-4000-8000-000000000001","promptId":"t3-xai-prompt-1","stopReason":"cancelled","agentResult":null,"cancelTrigger":"ctrl_c","cancellationCategory":"MidTurnAbort","cancellationContext":{"trigger":"ctrl_c"}}}} {"type":"emit_inbound","label":"notification:_x.ai/sessions/changed","frame":{"kind":"notification","method":"_x.ai/sessions/changed","params":{"upserted":[{"sessionId":"00000000-0000-4000-8000-000000000001","title":null,"cwd":"","isWorktree":false,"modelId":"grok-4.7","reasoningEffort":"high","yolo":false,"activity":"idle","resident":true,"lastChangeUnixMs":1790300235649,"origin":{"kind":"local"}}],"removed":[]}}} {"type":"emit_inbound","label":"response:session/prompt","frame":{"kind":"response","method":"session/prompt","result":{"stopReason":"cancelled","_meta":{"sessionId":"00000000-0000-4000-8000-000000000001","requestId":"t3-xai-prompt-1","promptId":"t3-xai-prompt-1","totalTokens":2263,"modelId":"grok-4.7","cancellationCategory":"MidTurnAbort","cancellationContext":{"trigger":"ctrl_c"},"cancelTrigger":"ctrl_c"}}}} -{"type":"expect_outbound","label":"request:session/prompt","frame":{"kind":"request","method":"session/prompt","params":{"sessionId":"00000000-0000-4000-8000-000000000001","prompt":[{"type":"text","text":"Actually, respond with exactly: steering fixture observed"}],"_meta":{"promptId":"t3-xai-prompt-2","requestId":"t3-xai-prompt-2"}}}} +{"type":"expect_outbound","label":"request:session/prompt","frame":{"kind":"request","method":"session/prompt","params":{"sessionId":"00000000-0000-4000-8000-000000000001","prompt":[{"type":"text","text":"\n\n\n\n\nActually, respond with exactly: steering fixture observed\n"},{"type":"text","text":""}],"_meta":{"promptId":"t3-xai-prompt-2","requestId":"t3-xai-prompt-2"}}}} {"type":"emit_inbound","label":"notification:_x.ai/sessions/changed","frame":{"kind":"notification","method":"_x.ai/sessions/changed","params":{"upserted":[{"sessionId":"00000000-0000-4000-8000-000000000001","title":null,"cwd":"","isWorktree":false,"modelId":"grok-4.7","reasoningEffort":"high","yolo":false,"activity":"working","resident":true,"lastChangeUnixMs":1790300235729,"origin":{"kind":"local"}}],"removed":[]}}} {"type":"emit_inbound","label":"notification:_x.ai/queue/changed","frame":{"kind":"notification","method":"_x.ai/queue/changed","params":{"sessionId":"00000000-0000-4000-8000-000000000001","entries":[{"id":"t3-xai-prompt-2","version":0,"kind":"prompt","text":"Actually, respond with exactly: steering fixture observed\n\nIn case you're asked: you are running in T3 Code through the Grok harness, as grok-build. No need to mention this otherwise. You can embed images and videos in your response using Markdown with absolute file paths.\n\n\nWhen the t3-code MCP server exposes link_pull_request, you must use it to register every pull request you create or work on for this thread. Call link_pull_request with the full PR URL immediately after creating a PR or starting work on an existing PR. For a stack, call it for every layer, not just the current branch or the top PR. This applies when creating or updating PRs through your host's CLI (including its stack commands) or its API: those operations do not register the PRs with this thread. Linking an already-linked PR is safe. Before finishing PR work, call list_thread_pull_requests and link any PR from your work that is missing. Do not link unrelated PRs mentioned only as background. If a linking call fails, report that failure instead of claiming the PR is linked.\n","position":0}]}}} {"type":"emit_inbound","label":"notification:_x.ai/queue/changed","frame":{"kind":"notification","method":"_x.ai/queue/changed","params":{"sessionId":"00000000-0000-4000-8000-000000000001","entries":[],"runningPromptId":"t3-xai-prompt-2","runningText":"Actually, respond with exactly: steering fixture observed\n\nIn case you're asked: you are running in T3 Code through the Grok harness, as grok-build. No need to mention this otherwise. You can embed images and videos in your response using Markdown with absolute file paths.\n\n\nWhen the t3-code MCP server exposes link_pull_request, you must use it to register every pull request you create or work on for this thread. Call link_pull_request with the full PR URL immediately after creating a PR or starting work on an existing PR. For a stack, call it for every layer, not just the current branch or the top PR. This applies when creating or updating PRs through your host's CLI (including its stack commands) or its API: those operations do not register the PRs with this thread. Linking an already-linked PR is safe. Before finishing PR work, call list_thread_pull_requests and link any PR from your work that is missing. Do not link unrelated PRs mentioned only as background. If a linking call fails, report that failure instead of claiming the PR is linked.\n","runningKind":"prompt"}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/registry_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/registry_transcript.ndjson index 0ffbf65d3f37c..c644f675c5501 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/registry_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/registry_transcript.ndjson @@ -7,7 +7,7 @@ {"type":"emit_inbound","label":"assistant.partial","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"grok-replay-session-1","update":{"sessionUpdate":"agent_message_chunk","content":{"type":"text","text":"ste"}}}}} {"type":"expect_outbound","label":"session.cancel","frame":{"kind":"notification","method":"session/cancel","params":{"sessionId":"grok-replay-session-1"}}} {"type":"emit_inbound","label":"prompt.cancelled","frame":{"kind":"response","method":"session/prompt","result":{"stopReason":"cancelled"}}} -{"type":"expect_outbound","label":"session.prompt.2","frame":{"kind":"request","method":"session/prompt","params":{"sessionId":"grok-replay-session-1","prompt":[{"type":"text","text":"Actually, respond with exactly: steering fixture observed"}]}}} +{"type":"expect_outbound","label":"session.prompt.2","frame":{"kind":"request","method":"session/prompt","params":{"sessionId":"grok-replay-session-1","prompt":[{"type":"text","text":"\n\n\n\n\nActually, respond with exactly: steering fixture observed\n"},{"type":"text","text":""}]}}} {"type":"emit_inbound","label":"assistant.1","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"grok-replay-session-1","update":{"sessionUpdate":"agent_message_chunk","content":{"type":"text","text":"steering fixture "}}}}} {"type":"emit_inbound","label":"assistant.2","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"grok-replay-session-1","update":{"sessionUpdate":"agent_message_chunk","content":{"type":"text","text":"observed"}}}}} {"type":"emit_inbound","label":"prompt.completed","frame":{"kind":"response","method":"session/prompt","result":{"stopReason":"end_turn"}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/fx_transcript.ndjson index d394fdf4c778a..d7c5cd808504d 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/fx_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"multi_turn","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/kiro_transcript.ndjson index 0ca4d283e87a7..adaf9a2d9dc0e 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"multi_turn","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.32.0","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":15}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/provider_thread_resume/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/provider_thread_resume/kiro_transcript.ndjson index 2f5d9833e73c7..b97a35bf80e9b 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/provider_thread_resume/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/provider_thread_resume/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"provider_thread_resume","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.32.0","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":26}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} @@ -27,7 +27,7 @@ {"type":"expect_outbound","label":"request:session/close","frame":{"kind":"request","method":"session/close","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001"}}} {"type":"emit_inbound","label":"response:session/close","frame":{"kind":"response","method":"session/close","result":{}}} {"type":"runtime_exit","status":"success"} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/load","frame":{"kind":"request","method":"session/load","params":{"mcpServers":"","cwd":"","sessionId":"sess_00000000-0000-4000-8000-000000000001"}}} {"type":"emit_inbound","label":"notification:session/update:user_message_chunk","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"user_message_chunk","content":{"type":"text","text":"\n## T3 Code interaction mode: Default\n\nPrefer making reasonable assumptions and carrying out the user's request. Ask a concise question only when a missing user decision would materially change the result. Treat this mode as active until T3 Code supplies a different interaction-mode instruction.\n\n\n\nRespond with exactly: provider thread resume fixture first turn complete\n\nIn case you're asked: you are running in T3 Code through the Kiro harness, as claude-haiku-4.5. No need to mention this otherwise. You can embed images and videos in your response using Markdown with absolute file paths.\n\n\nWhen the t3-code MCP server exposes link_pull_request, you must use it to register every pull request you create or work on for this thread. Call link_pull_request with the full PR URL immediately after creating a PR or starting work on an existing PR. For a stack, call it for every layer, not just the current branch or the top PR. This applies when creating or updating PRs through gh, gh stack, another CLI, or the host API: those operations do not register the PRs with this thread. Linking an already-linked PR is safe. Before finishing PR work, call list_thread_pull_requests and link any PR from your work that is missing. Do not link unrelated PRs mentioned only as background. If a linking call fails, report that failure instead of claiming the PR is linked. When asked to monitor, watch, or babysit a PR and watch_pull_request is available, call it and end your turn: T3 Code wakes you when checks finish, someone else comments, or the branch conflicts, so do not poll or run your own watcher. When you hand the work back to the user, call unwatch_pull_request first so the thread returns to their inbox.\n"},"_meta":{"kiro":{"userMessageTag":"prompt_00000000-0000-4000-9000-000000000005","messageId":"00000000-0000-4000-9000-000000000001","timestamp":"2026-10-19T20:48:11.510Z","replay":true}}}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/queued_turn/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/queued_turn/fx_transcript.ndjson index 6780dd2a3ad48..28d92260dcecd 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/queued_turn/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/queued_turn/fx_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"queued_turn","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/queued_turn/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/queued_turn/kiro_transcript.ndjson index 73a21b301051e..0f0d2ece41b94 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/queued_turn/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/queued_turn/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"queued_turn","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.32.0","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":15}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/simple/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/simple/fx_transcript.ndjson index 84d694c6a1575..923aa3d611f4a 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/simple/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/simple/fx_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"simple","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/simple/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/simple/kiro_transcript.ndjson index 1e9a0c0412442..343017b1b5b07 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/simple/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/simple/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"simple","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.32.0","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":13}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/subagent/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/subagent/kiro_transcript.ndjson index 5f26257d395f9..eee1096fa21a2 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/subagent/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/subagent/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"subagent","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.33.1","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":13}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/todo_list/grok_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/todo_list/grok_transcript.ndjson index ae5bb950d93c8..4c842c100944f 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/todo_list/grok_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/todo_list/grok_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"grok","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"todo_list","metadata":{"generatedBy":"live-grok-recorder","grokVersion":"1.0.41","normalization":"Session ids are fixed UUIDs, the workspace is , HOME is /home/grok-replay and the recording user is grok-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities are . Personal skills, machine identity, account settings and announcement broadcasts are removed, as are responses to Grok-internal request ids that T3's protocol drops. Timestamps are kept as recorded.","droppedFrames":5}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":"","_meta":{"clientType":"extension"}}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":"","_meta":{"clientType":"extension"}}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":false,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"resume":{},"close":{}},"auth":{},"_meta":{"x.ai/fs_notify":true,"x.ai/hooks":{"blockingEvents":["pre_tool_use","stop","subagent_stop"],"decisions":["deny","block"],"stopSignals":["continue","stopReason","additionalContext"]},"x.ai/capabilities":{"toolOverrides":{"x_keyword_search":true,"x_semantic_search":true,"x_user_search":false,"x_thread_fetch":false}}}},"authMethods":[{"id":"cached_token","name":"cached_token","description":"Cached token from ~/.grok/auth.json"},{"id":"grok.com","name":"Grok","description":"Sign in with Grok"}],"_meta":{"grokShell":true,"defaultAuthMethodId":"cached_token","x.ai/mcp/sdk":true,"x.ai/pluginDirs":true,"currentWorkingDirectory":"","agentVersion":"1.0.41","agentId":"00000000-0000-4000-8000-000000000000","agentInstanceId":"00000000-0000-4000-8000-000000000000","hostname":"grok-replay","modelState":{"currentModelId":"grok-4.7","availableModels":[{"modelId":"grok-4.7","name":"Grok 4.7","description":"SpaceXAI's latest frontier model","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Maximum reasoning for the hardest tasks.","default":false},{"id":"high","value":"high","label":"High","description":"Thorough reasoning and quality. Recommended.","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Strong quality with a faster turnaround.","default":false},{"id":"low","value":"low","label":"Low","description":"Fastest responses. Best for simple tasks.","default":false}]}},{"modelId":"grok-4.7-build-fast","name":"Grok 4.7 Fast","description":"Fast variant. 2x the price.","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Maximum reasoning for the hardest tasks.","default":false},{"id":"high","value":"high","label":"High","description":"Thorough reasoning and quality. Recommended.","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Strong quality with a faster turnaround.","default":false},{"id":"low","value":"low","label":"Low","description":"Fastest responses. Best for simple tasks.","default":false}]}},{"modelId":"grok-4.6","name":"Grok 4.6","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Highest effort and reasoning level","default":false},{"id":"high","value":"high","label":"High","description":"Higher implementation quality with extensive reasoning","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Balanced effort with standard implementation and testing","default":false},{"id":"low","value":"low","label":"Low","description":"Quick, fast implementations","default":false}]}},{"modelId":"grok-4.5","name":"Grok 4.5","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"high","value":"high","label":"High","description":"Highest implementation quality with extensive reasoning","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Balanced effort with standard implementation and testing","default":false},{"id":"low","value":"low","label":"Low","description":"Quick, fast implementations","default":false}]}}]},"mcpServers":[],"mcpApps":false,"metadata":null,"availableCommands":[{"name":"compact","description":"Compress conversation history to save context window","input":{"hint":"optional context about what to preserve"}},{"name":"always-approve","description":"Toggle always-approve mode (skip all permission prompts)","input":{"hint":"on|off"}},{"name":"context","description":"Show context window usage and session stats","input":null},{"name":"session-info","description":"Show session details (model, turns, context usage)","input":null},{"name":"deep-research","description":"Research with bounded parallel agents, cross-check evidence, and write a cited report","input":{"hint":""}},{"name":"workflow","description":"Launch a saved workflow, list runs, or manage a run (pause, resume, stop, save)","input":{"hint":" [--agent-budget N] [--effort LEVEL] [args] | runs | pause|resume|stop|save [name]"}},{"name":"goal","description":"Set, manage, or check an autonomous goal","input":{"hint":" [--budget ] | status | pause | resume | clear"}}],"cancelRewind":true,"sessionRecap":true,"feedbackTraceOffer":false,"voiceMode":true}}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:_x.ai/mcp/servers_updated","frame":{"kind":"notification","method":"_x.ai/mcp/servers_updated","params":{"mcpServers":[]}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_denied_write/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_denied_write/fx_transcript.ndjson index 6a1c048f6aff9..5a643d4df438c 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_denied_write/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_denied_write/fx_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"tool_call_denied_write","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/fx_transcript.ndjson index 34f26d8efb330..1f9c4cd5e1cfe 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/fx_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"tool_call_read_only_on_request","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/grok_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/grok_transcript.ndjson index 7d11fc4746fb3..c3de2afdf4ce3 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/grok_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/grok_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"grok","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"tool_call_read_only_on_request","metadata":{"generatedBy":"live-grok-recorder","grokVersion":"1.0.41","normalization":"Session ids are fixed UUIDs, the workspace is , HOME is /home/grok-replay and the recording user is grok-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities are . Personal skills, machine identity, account settings and announcement broadcasts are removed, as are responses to Grok-internal request ids that T3's protocol drops. Timestamps are kept as recorded.","droppedFrames":5}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":"","_meta":{"clientType":"extension"}}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":"","_meta":{"clientType":"extension"}}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":false,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"resume":{},"close":{}},"auth":{},"_meta":{"x.ai/fs_notify":true,"x.ai/hooks":{"blockingEvents":["pre_tool_use","stop","subagent_stop"],"decisions":["deny","block"],"stopSignals":["continue","stopReason","additionalContext"]},"x.ai/capabilities":{"toolOverrides":{"x_keyword_search":true,"x_semantic_search":true,"x_user_search":false,"x_thread_fetch":false}}}},"authMethods":[{"id":"cached_token","name":"cached_token","description":"Cached token from ~/.grok/auth.json"},{"id":"grok.com","name":"Grok","description":"Sign in with Grok"}],"_meta":{"grokShell":true,"defaultAuthMethodId":"cached_token","x.ai/mcp/sdk":true,"x.ai/pluginDirs":true,"currentWorkingDirectory":"","agentVersion":"1.0.41","agentId":"00000000-0000-4000-8000-000000000000","agentInstanceId":"00000000-0000-4000-8000-000000000000","hostname":"grok-replay","modelState":{"currentModelId":"grok-4.7","availableModels":[{"modelId":"grok-4.7","name":"Grok 4.7","description":"SpaceXAI's latest frontier model","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Maximum reasoning for the hardest tasks.","default":false},{"id":"high","value":"high","label":"High","description":"Thorough reasoning and quality. Recommended.","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Strong quality with a faster turnaround.","default":false},{"id":"low","value":"low","label":"Low","description":"Fastest responses. Best for simple tasks.","default":false}]}},{"modelId":"grok-4.7-build-fast","name":"Grok 4.7 Fast","description":"Fast variant. 2x the price.","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Maximum reasoning for the hardest tasks.","default":false},{"id":"high","value":"high","label":"High","description":"Thorough reasoning and quality. Recommended.","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Strong quality with a faster turnaround.","default":false},{"id":"low","value":"low","label":"Low","description":"Fastest responses. Best for simple tasks.","default":false}]}},{"modelId":"grok-4.6","name":"Grok 4.6","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"xhigh","value":"xhigh","label":"Extra High","description":"Highest effort and reasoning level","default":false},{"id":"high","value":"high","label":"High","description":"Higher implementation quality with extensive reasoning","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Balanced effort with standard implementation and testing","default":false},{"id":"low","value":"low","label":"Low","description":"Quick, fast implementations","default":false}]}},{"modelId":"grok-4.5","name":"Grok 4.5","_meta":{"totalContextTokens":500000,"agentType":"grok-build-plan","supportsReasoningEffort":true,"reasoningEffort":"high","reasoningEfforts":[{"id":"high","value":"high","label":"High","description":"Highest implementation quality with extensive reasoning","default":true},{"id":"medium","value":"medium","label":"Medium","description":"Balanced effort with standard implementation and testing","default":false},{"id":"low","value":"low","label":"Low","description":"Quick, fast implementations","default":false}]}}]},"mcpServers":[],"mcpApps":false,"metadata":null,"availableCommands":[{"name":"compact","description":"Compress conversation history to save context window","input":{"hint":"optional context about what to preserve"}},{"name":"always-approve","description":"Toggle always-approve mode (skip all permission prompts)","input":{"hint":"on|off"}},{"name":"context","description":"Show context window usage and session stats","input":null},{"name":"session-info","description":"Show session details (model, turns, context usage)","input":null},{"name":"deep-research","description":"Research with bounded parallel agents, cross-check evidence, and write a cited report","input":{"hint":""}},{"name":"workflow","description":"Launch a saved workflow, list runs, or manage a run (pause, resume, stop, save)","input":{"hint":" [--agent-budget N] [--effort LEVEL] [args] | runs | pause|resume|stop|save [name]"}},{"name":"goal","description":"Set, manage, or check an autonomous goal","input":{"hint":" [--budget ] | status | pause | resume | clear"}}],"cancelRewind":true,"sessionRecap":true,"feedbackTraceOffer":false,"voiceMode":true}}}} {"type":"emit_inbound","label":"notification:_x.ai/mcp/servers_updated","frame":{"kind":"notification","method":"_x.ai/mcp/servers_updated","params":{"mcpServers":[]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/kiro_transcript.ndjson index cd6d095d1a910..754bc6142d796 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"kiro_tool_call_read_only_on_request","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.32.0","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":13}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt/fx_transcript.ndjson index c0e0b356fdd8d..23191a20397de 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt/fx_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"turn_interrupt","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt/kiro_transcript.ndjson index 46a0f9ca5db4c..f21daa7b0aa82 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"turn_interrupt","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.32.0","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":13}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt_mid_tool/kiro_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt_mid_tool/kiro_transcript.ndjson index 14887375f1724..2f62e729977cb 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt_mid_tool/kiro_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt_mid_tool/kiro_transcript.ndjson @@ -1,5 +1,5 @@ {"type":"transcript_start","provider":"kiro","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"kiro_turn_interrupt_mid_tool","metadata":{"generatedBy":"live-kiro-recorder","kiroVersion":"2.33.1","normalization":"Session ids are fixed sess_ UUIDs and other UUIDs (message and request ids) are numbered in first-seen order, the workspace is , HOME is /home/kiro-replay and the recording user is kiro-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . Kiro's log directory, user-scoped commands and agents, and the _kiro/* broadcasts T3 ignores (governance, steering documents, powers, tools, hooks, MCP status, session roster) are removed. Timestamps are kept as recorded.","droppedFrames":13}} -{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} +{"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}},"_meta":{"kiro":{"hooks":{"enabled":true,"v2":true}}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":2,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true},"sessionCapabilities":{"list":{},"close":{},"delete":{},"fork":{"_meta":{"kiro":{"messageId":true}}}},"_meta":{"kiro":{"checkpoints":true,"sessionList":true,"policyNotifications":true,"extensionMethods":["_kiro/knowledge","_kiro/memory/list","_kiro/memory/get","_kiro/memory/create","_kiro/memory/update","_kiro/memory/delete","_kiro/codeIntelligence","_kiro/session/context","_kiro/session/compact","_kiro/session/export","_kiro/session/history","_kiro/config/template","_kiro/workflow/new","_kiro/workflow/invoke","_kiro/workflow/load","_kiro/workflow/inspect","_kiro/workflow/list","_kiro/workflow/pause","_kiro/workflow/cancel","_kiro/workflow/delete","_kiro/workflow/listRecipes","_kiro/workflow/listWatchHandlers","_kiro/workflow/resumeAll","_kiro/workflow/retry","_kiro/workflow/update","_kiro/workflow/resume","_kiro/sourceProviders/list","_kiro/sourceProviders/listResources"],"sessionSources":["local","remote"],"sessionListScopes":["workspace","user"],"executionTargets":["local","cloud-sandbox"],"sourceProviders":true,"replayMarking":true}}},"authMethods":[{"id":"aws-builder-id","name":"AWS Builder ID"},{"id":"aws-iam-identity-center","name":"AWS IAM Identity Center"}]}}} {"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"sess_00000000-0000-4000-8000-000000000001","update":{"sessionUpdate":"available_commands_update","availableCommands":[{"name":"architecture-selection","description":"Steering: architecture-selection","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:architecture-selection","commandId":"architecture-selection","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"architecture-selection"}}},{"name":"quick-spec","description":"Steering: quick-spec","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:quick-spec","commandId":"quick-spec","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"quick-spec"}}},{"name":"bug-fix","description":"Steering: bug-fix","input":{"hint":"optional context"},"_meta":{"kiro":{"type":"steering","contextQuery":"global:bug-fix","commandId":"bug-fix","resource":{"resourceType":"steering","source":{"origin":"bundled"}},"originalName":"bug-fix"}}},{"name":"general-task-execution","description":"General-purpose sub-agent with access to all tools for executing arbitrary tasks","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"general-task-execution","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"general-task-execution"}}},{"name":"context-gatherer","description":"Investigates the codebase to answer a specific question about it. Deeply analyzes existing code by tracing execution paths, mapping architecture and abstraction layers, understanding patterns, and documenting dependencies, returning a thorough, direct written analysis that explains how the relevant code works and points to the specific files and lines involved. Use it to understand code before you change it: before designing or implementing a change to code you don't already fully understand, start with context-gatherer so your edits are grounded in how the code actually works. When a task requires understanding code you don't already know, dispatch context-gatherer to do that exploration before running your own searches or reads. Rules: 1. Provide a clear, specific prompt that includes your intent: a detailed task description of the context you need and what you're trying to accomplish. 2. The subagent explores the codebase and returns an analysis of your query 3. Trust the returned results. You may still inspect additional code yourself when you need context beyond what was returned. 4. Reuse existing context-gatherer output for related follow-up questions; do not re-invoke on the same question with different phrasing. 5. For multiple distinct questions, dispatch several context-gatherers in parallel, each targeting a different aspect of the codebase.","input":{"hint":"task to delegate"},"_meta":{"kiro":{"type":"custom-agent","commandId":"context-gatherer","resource":{"resourceType":"agent","source":{"origin":"bundled"}},"originalName":"context-gatherer"}}}]}}}} diff --git a/apps/server/src/provider/Drivers/AntigravityDriver.test.ts b/apps/server/src/provider/Drivers/AntigravityDriver.test.ts index b43f30a419472..5cbf9f02bdb4a 100644 --- a/apps/server/src/provider/Drivers/AntigravityDriver.test.ts +++ b/apps/server/src/provider/Drivers/AntigravityDriver.test.ts @@ -383,7 +383,7 @@ it.layer(layerTest)("AntigravityDriver", (it) => { const helper = { fs: { readTextFile: false, writeTextFile: false }, terminal: false, - session: { notices: {} }, + session: { notices: {}, compaction: {} }, }; expect( (yield* h.readRequests) @@ -397,7 +397,7 @@ it.layer(layerTest)("AntigravityDriver", (it) => { { fs: { readTextFile: true, writeTextFile: false }, terminal: false, - session: { notices: {} }, + session: { notices: {}, compaction: {} }, elicitation: { form: {} }, }, ]); diff --git a/packages/effect-acp/src/client.test.ts b/packages/effect-acp/src/client.test.ts index 2852f04769df9..fbf97d41617ac 100644 --- a/packages/effect-acp/src/client.test.ts +++ b/packages/effect-acp/src/client.test.ts @@ -1021,6 +1021,21 @@ it.layer(NodeServices.layer)("effect-acp client", (it) => { ]), ); assert.deepEqual(yield* Fiber.join(promptFiber), { stopReason: "end_turn" }); + const cancelledPrompt = yield* acp.agent + .prompt({ sessionId: "pi-session-1", prompt: [{ type: "text", text: "retry" }] }) + .pipe(Effect.forkScoped); + const cancelledRequest = yield* Queue.take(output).pipe( + Effect.flatMap(Schema.decodeEffect(Schema.fromJsonString(PromptRequestV1))), + ); + yield* Queue.offer( + input, + yield* encodeJsonl(Schema.Unknown, { + jsonrpc: "2.0", + id: cancelledRequest.id, + result: { stopReason: "cancelled", usage: {} }, + }), + ); + assert.deepEqual(yield* Fiber.join(cancelledPrompt), { stopReason: "cancelled" }); assert.deepEqual(yield* Ref.get(updates), [ { sessionId: "pi-session-1", diff --git a/packages/effect-acp/src/compat.ts b/packages/effect-acp/src/compat.ts index 8e21d16fd198a..b73884d39dd9b 100644 --- a/packages/effect-acp/src/compat.ts +++ b/packages/effect-acp/src/compat.ts @@ -62,7 +62,11 @@ export type ToolKind = V2.ToolKind; export type ClientCapabilities = { readonly fs?: { readonly readTextFile?: boolean; readonly writeTextFile?: boolean }; readonly terminal?: boolean; - readonly session?: { readonly list?: Meta; readonly notices?: Meta } | null; + readonly session?: { + readonly list?: Meta; + readonly notices?: Meta; + readonly compaction?: Meta; + } | null; readonly plan?: Meta; readonly auth?: { readonly terminal?: boolean }; readonly elicitation?: V2.ElicitationCapabilities | null; diff --git a/packages/effect-acp/src/rpc.ts b/packages/effect-acp/src/rpc.ts index 9d21c7cbe33c6..5154b948b0ad4 100644 --- a/packages/effect-acp/src/rpc.ts +++ b/packages/effect-acp/src/rpc.ts @@ -245,7 +245,12 @@ const CompatDisableProviderRpc = Rpc.make(AGENT_METHODS.providers_disable, { const CompatPromptRpc = Rpc.make(AGENT_METHODS.session_prompt, { payload: Schema.Union([AcpSchema.PromptRequest, AcpSchemaV1.PromptRequest]), - success: Schema.Union([AcpSchemaV1.PromptResponse, AcpSchema.PromptResponse]), + success: Schema.Union([ + AcpSchemaV1.PromptResponse, + // fx sends empty usage on cancellation; retain its stop reason when usage is invalid. + Schema.Struct({ stopReason: AcpSchemaV1.StopReason }), + AcpSchema.PromptResponse, + ]), error: AcpSchema.Error, }); diff --git a/packages/provider-acp-registry/src/server/copilotAcp.ts b/packages/provider-acp-registry/src/server/copilotAcp.ts index 5f29c930e9a91..aeb893496e5d0 100644 --- a/packages/provider-acp-registry/src/server/copilotAcp.ts +++ b/packages/provider-acp-registry/src/server/copilotAcp.ts @@ -21,6 +21,7 @@ export const copilotClientCapabilitiesMeta = { "subagent.failed", "assistant.message_delta", "assistant.reasoning_delta", + "session.compaction_complete", ], }, }; @@ -118,6 +119,18 @@ export function makeCopilotSubagentRouting() { result: typeof data.error === "string" ? data.error : null, }); } + // Copilot sends no ACP compaction_update; agentId marks a subagent's own compaction. + // Older Copilot builds report a successful compaction without `outcome`. + case "session.compaction_complete": { + if ( + event.agentId !== undefined || + data.success !== true || + (data.outcome !== undefined && data.outcome !== "applied") + ) { + return Effect.void; + } + return context.markSessionCompacted(event.sessionId); + } default: return Effect.void; } diff --git a/packages/provider-acp/src/server/AcpSessionRuntime.ts b/packages/provider-acp/src/server/AcpSessionRuntime.ts index 9131e1eaf297c..bfd9cc150f7af 100644 --- a/packages/provider-acp/src/server/AcpSessionRuntime.ts +++ b/packages/provider-acp/src/server/AcpSessionRuntime.ts @@ -1798,8 +1798,9 @@ export const make = Effect.fn("AcpSessionRuntime.make")(function* ( ...options.clientCapabilities?.fs, }, terminal: options.clientCapabilities?.terminal ?? false, - // ACP v1 agents send session notices only to clients that advertise them; v2 needs no capability. - session: { ...options.clientCapabilities?.session, notices: {} }, + // ACP v1 agents send session notices and compaction updates only to clients that advertise + // them; v2 needs no capability. + session: { ...options.clientCapabilities?.session, notices: {}, compaction: {} }, ...(options.clientCapabilities?.auth ? { auth: options.clientCapabilities.auth } : {}), ...(options.clientCapabilities?.elicitation ? { elicitation: options.clientCapabilities.elicitation } diff --git a/packages/provider-acp/src/server/adapter.ts b/packages/provider-acp/src/server/adapter.ts index 28366d6ca09b8..547158c97164a 100644 --- a/packages/provider-acp/src/server/adapter.ts +++ b/packages/provider-acp/src/server/adapter.ts @@ -249,6 +249,8 @@ export interface AcpAdapterV2ExtensionContext { readonly output?: string; readonly report?: BackgroundWork; }) => Effect.Effect; + /** For compactions reported outside ACP `compaction_update`. */ + readonly markSessionCompacted: (sessionId: string) => Effect.Effect; readonly requestUserInput: ( input: AcpAdapterV2UserInputRequest, requestContext: EffectAcpProtocol.AcpRequestContext, @@ -326,7 +328,7 @@ export function acpPerTurnPromptUsage( } export interface AcpAdapterV2Flavor { - readonly buildPrompt?: (input: { + readonly buildAttachmentPrompt?: (input: { readonly text: string; readonly attachments: ReadonlyArray; readonly resolveAttachmentPath: (attachment: ChatAttachment) => string | null; @@ -676,6 +678,7 @@ export interface AcpAdapterV2Options { readonly onCancelHeld?: () => Effect.Effect; readonly afterPromptWireSettled?: () => Effect.Effect; readonly afterPromptSettledWithBackgroundWork?: () => Effect.Effect; + readonly afterPromptCallback?: () => Effect.Effect; readonly onNativeResponseLifecycle?: (event: { readonly generation?: number; readonly requestId?: string; @@ -826,6 +829,11 @@ function isCompactionMessage(message: ProviderAdapter.ProviderAdapterV2TurnMessa return message.text.trim() === "/compact" && message.attachments.length === 0; } +/** `/compact`, optionally followed by preservation instructions that some agents accept. */ +function isCompactCommand(message: ProviderAdapter.ProviderAdapterV2TurnMessage): boolean { + return /^\/compact(?:\s|$)/.test(message.text.trim()) && message.attachments.length === 0; +} + function negotiatedCapabilities( base: OrchestrationV2ProviderCapabilities, started: AcpSessionRuntime.AcpSessionRuntimeStartResult, @@ -2005,8 +2013,30 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( const activeSelection = yield* Ref.make(null); const activeInteractionMode = yield* Ref.make(null); const promptInstructionStates = yield* Ref.make(new Map()); + const promptRuntimeInstructions = yield* Ref.make(new Map()); // Unique markers keep delayed prompt completions from clearing later compactions. const compactionMarkers = yield* Ref.make(new Map()); + // ACP may patch a completed compaction again; each compaction id marks its session once. + const completedCompactionIds = yield* Ref.make(new Set()); + // The next prompt in a compacted session resends T3's instructions and runtime notes. + // Only root sessions get prompts, so a marker on a child session is never read. + const markSessionCompacted = Effect.fn("AcpAdapterV2.markSessionCompacted")(function* ( + sessionId: string, + compactionId?: string, + ) { + if (compactionId !== undefined) { + const key = `${sessionId}\u0000${compactionId}`; + const alreadyMarked = yield* Ref.modify( + completedCompactionIds, + (current): [boolean, Set] => + current.has(key) ? [true, current] : [false, new Set(current).add(key)], + ); + if (alreadyMarked) return; + } + yield* Ref.update(compactionMarkers, (current) => + new Map(current).set(sessionId, Symbol()), + ); + }); const advertisedCommandNames = yield* Ref.make(new Map>()); const compactsContext = flavor.supportsCompaction === true || @@ -4188,11 +4218,13 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( updated.delete(context.nativeThreadId); return updated; }); - yield* Ref.update(compactionMarkers, (current) => { - const updated = new Map(current); - updated.set(context.nativeThreadId, Symbol()); - return updated; - }); + // A completion projected at turn end must not swallow the agent's later real one. + yield* markSessionCompacted( + context.nativeThreadId, + projectedStatus === undefined + ? toolCall.toolCallId.slice("acp-compaction:".length) + : undefined, + ); } } else if (mcpIdentity !== undefined) { const toolName = `${mcpIdentity.server}.${mcpIdentity.tool}`; @@ -6428,9 +6460,15 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( ) ?? Effect.void ); } - yield* handleSessionUpdate( - flavor.normalizeSessionUpdate?.(notification) ?? notification, - ); + const normalized = flavor.normalizeSessionUpdate?.(notification) ?? notification; + // Turn projection misses compactions that finish while idle or after settlement. + if ( + normalized.update.sessionUpdate === "compaction_update" && + normalized.update.status === "completed" + ) { + yield* markSessionCompacted(normalized.sessionId, normalized.update.compactionId); + } + yield* handleSessionUpdate(normalized); }, Effect.mapError( (cause) => @@ -6896,6 +6934,11 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( yield* finishSubagentFromNotice(notice); }), ).pipe(Effect.asVoid), + markSessionCompacted: (sessionId) => + runRuntimeCallbackAtGeneration( + handlerGeneration, + markSessionCompacted(sessionId), + ).pipe(Effect.asVoid), applyBackgroundTaskMutation: (incoming) => runRuntimeCallbackAtGeneration( handlerGeneration, @@ -7193,7 +7236,9 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( yield* Ref.set(activeSelection, null); yield* Ref.set(activeInteractionMode, null); yield* Ref.set(promptInstructionStates, new Map()); + yield* Ref.set(promptRuntimeInstructions, new Map()); yield* Ref.set(compactionMarkers, new Map()); + yield* Ref.set(completedCompactionIds, new Set()); yield* Ref.set(providerTurns, new Map()); yield* Ref.set(snapshot, emptySnapshotState()); yield* continuationPermit.withPermit( @@ -7749,6 +7794,13 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( if (settledStatus !== "failed") { yield* emitProviderRetry(context, settledStatus); } + if ( + compactsContext && + isCompactCommand(context.input.message) && + settledStatus === "completed" + ) { + yield* markSessionCompacted(context.nativeThreadId); + } const now = yield* DateTime.now; if ( compactsContext && @@ -7763,11 +7815,6 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( return updated; }); const nativeItemId = `${context.nativeTurnId}:compaction`; - yield* Ref.update(compactionMarkers, (current) => { - const updated = new Map(current); - updated.set(context.nativeThreadId, Symbol()); - return updated; - }); yield* emitProviderEvent({ type: "turn_item.updated", driver, @@ -8020,15 +8067,12 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( turnInput: ProviderAdapter.ProviderAdapterV2TurnInput, sessionId: string, ) { - const prompt: Array = []; const mcpSession = yield* mcpSessions.read(turnInput.threadId); const instructionState = { interactionMode: turnInput.runtimePolicy.interactionMode, hasT3Mcp: mcpSession !== undefined, hasDeviceTools: mcpSession?.capabilities?.has("device") === true, } satisfies T3AcpInstructionState; - const previousInstructionState = (yield* Ref.get(promptInstructionStates)).get(sessionId); - const compactionMarker = (yield* Ref.get(compactionMarkers)).get(sessionId); const userText = flavor.rewriteUserText === undefined ? turnInput.message.text @@ -8047,16 +8091,6 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( resolveExtractedTextPath: host.resolveExtractedTextPath, }); const isNativeSlashCommand = userText.trimStart().startsWith("/"); - const text = t3AcpPromptWithInstructions({ - prompt: messageText, - state: instructionState, - ...(previousInstructionState === undefined || compactionMarker !== undefined - ? {} - : { previousState: previousInstructionState }), - }); - if (text.length > 0) { - prompt.push({ type: "text", text }); - } const imageAttachments = turnInput.message.attachments.filter( isProviderNativeImageAttachment, ); @@ -8066,13 +8100,39 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( detail: "ACP driver did not negotiate image prompt support", }); } - if (flavor.buildPrompt) { + const attachmentBlocks: Array = []; + for (const attachment of flavor.buildAttachmentPrompt ? [] : imageAttachments) { + const path = host.resolveAttachmentPath(attachment as ChatAttachment); + if (path === null) { + return yield* new ProviderAdapter.ProviderAdapterProtocolError({ + driver, + detail: `Invalid attachment id '${attachment.id}'`, + }); + } + const bytes = yield* fileSystem.readFile(path).pipe( + Effect.mapError( + (cause) => + new ProviderAdapter.ProviderAdapterProtocolError({ + driver, + detail: `Failed to read attachment '${attachment.id}'`, + reason: "attachment_unreadable", + payload: cause, + }), + ), + ); + attachmentBlocks.push({ + type: "image", + data: Buffer.from(bytes).toString("base64"), + mimeType: attachment.mimeType, + }); + } + if (flavor.buildAttachmentPrompt) { const setup = yield* Ref.get(activeSessionSetup); const modelOption = findModelConfigOption(yield* runtime.getConfigOptions); const currentModelId = modelOption?.currentValue; const blocks = yield* flavor - .buildPrompt({ - text, + .buildAttachmentPrompt({ + text: messageText, attachments: turnInput.message.attachments, resolveAttachmentPath: host.resolveAttachmentPath, promptCapabilities: setup?.initializeResult.agentCapabilities?.promptCapabilities, @@ -8097,55 +8157,49 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( }), ), ); - prompt.splice(0, prompt.length, ...blocks); - } - for (const attachment of flavor.buildPrompt ? [] : imageAttachments) { - const path = host.resolveAttachmentPath(attachment as ChatAttachment); - if (path === null) { - return yield* new ProviderAdapter.ProviderAdapterProtocolError({ - driver, - detail: `Invalid attachment id '${attachment.id}'`, - }); - } - const bytes = yield* fileSystem.readFile(path).pipe( - Effect.mapError( - (cause) => - new ProviderAdapter.ProviderAdapterProtocolError({ - driver, - detail: `Failed to read attachment '${attachment.id}'`, - reason: "attachment_unreadable", - payload: cause, - }), - ), - ); - prompt.push({ - type: "image", - data: Buffer.from(bytes).toString("base64"), - mimeType: attachment.mimeType, - }); + attachmentBlocks.push(...blocks); } + // Read delivery state after the awaits above, so a compaction that lands + // while the prompt is prepared still resends the notes in this prompt. + const previousInstructionState = (yield* Ref.get(promptInstructionStates)).get(sessionId); + const compactionMarker = (yield* Ref.get(compactionMarkers)).get(sessionId); + const text = t3AcpPromptWithInstructions({ + prompt: messageText, + state: instructionState, + ...(previousInstructionState === undefined || compactionMarker !== undefined + ? {} + : { previousState: previousInstructionState }), + }); + const sessionSetup = yield* Ref.get(activeSessionSetup); + const runtimeInstructions = buildRuntimeInstructions({ + harness: flavor.runtimeHarness ?? driver, + model: turnInput.modelSelection.model, + pullRequestLinking: + sessionSetup === null || + flavor.sessionCarriesPullRequestLinking?.(sessionSetup.initializeResult) !== true, + }); + // The agent keeps its own history, so resend only after compaction or when the text changes. + const sendRuntimeInstructions = + !isNativeSlashCommand && + (compactionMarker !== undefined || + (yield* Ref.get(promptRuntimeInstructions)).get(sessionId) !== runtimeInstructions); + const promptText = flavor.buildAttachmentPrompt ? text.trim() : text; + const prompt: Array = + promptText.length > 0 ? [{ type: "text", text: promptText }] : []; + prompt.push(...attachmentBlocks); if (prompt.length === 0) { return yield* new ProviderAdapter.ProviderAdapterProtocolError({ driver, detail: "ACP turn requires non-empty text or attachments", }); } - if (!isNativeSlashCommand) { - const sessionSetup = yield* Ref.get(activeSessionSetup); - prompt.push({ - type: "text", - text: buildRuntimeInstructions({ - harness: flavor.runtimeHarness ?? driver, - model: turnInput.modelSelection.model, - pullRequestLinking: - sessionSetup === null || - flavor.sessionCarriesPullRequestLinking?.(sessionSetup.initializeResult) !== true, - }), - }); + if (sendRuntimeInstructions) { + prompt.push({ type: "text", text: runtimeInstructions }); } return { prompt, instructionState: text === messageText ? undefined : instructionState, + runtimeInstructions: sendRuntimeInstructions ? runtimeInstructions : undefined, compactionMarker, }; }); @@ -8161,6 +8215,11 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( yield* Ref.set(activeSessionSetup, null); yield* Ref.set(activeSelection, null); yield* Ref.set(activeInteractionMode, null); + // A failed prompt may have been dropped, so the fresh runtime sends T3's notes again. + yield* Ref.set(promptInstructionStates, new Map()); + yield* Ref.set(promptRuntimeInstructions, new Map()); + yield* Ref.set(compactionMarkers, new Map()); + yield* Ref.set(completedCompactionIds, new Set()); yield* Ref.set(snapshot, emptySnapshotState()); return true; }); @@ -8495,30 +8554,6 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( Effect.as({ stopReason: "end_turn" } satisfies EffectAcpSchema.PromptResponse), ) ).pipe( - Effect.tap(() => - Ref.update(promptInstructionStates, (current) => { - // Native compaction sends no prompt, so no instructions reached the agent. - if (promptParts?.instructionState === undefined || compactSession !== undefined) - return current; - const updated = new Map(current); - updated.set(requestedSessionId, promptParts.instructionState); - return updated; - }), - ), - Effect.tap(() => - Ref.update(compactionMarkers, (current) => { - if (promptParts?.instructionState === undefined) return current; - const observedMarker = promptParts.compactionMarker; - if ( - observedMarker === undefined || - current.get(requestedSessionId) !== observedMarker - ) - return current; - const updated = new Map(current); - updated.delete(requestedSessionId); - return updated; - }), - ), // Settle the wire before the completion callback's permit so a settled-soft // Stop sees the native return. Capture usage only before finalize: a late // response must not flip a settled turn. @@ -8538,6 +8573,41 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( runRuntimeCallbackAtGeneration( promptGeneration, Effect.gen(function* () { + // Record delivery only for this runtime: a replacement can reuse the session id. + // Grok cancels locally, refusals discard the prompt, and errors need a retry. + // Native compaction sends no prompt, and the compacted session needs the notes. + if (compactSession !== undefined) { + yield* markSessionCompacted(requestedSessionId); + } else if ( + result.stopReason !== "cancelled" && + result.stopReason !== "refusal" && + result.stopReason !== "error" + ) { + yield* Ref.update(promptInstructionStates, (current) => { + if (promptParts?.instructionState === undefined) return current; + const updated = new Map(current); + updated.set(requestedSessionId, promptParts.instructionState); + return updated; + }); + yield* Ref.update(promptRuntimeInstructions, (current) => { + if (promptParts?.runtimeInstructions === undefined) return current; + const updated = new Map(current); + updated.set(requestedSessionId, promptParts.runtimeInstructions); + return updated; + }); + yield* Ref.update(compactionMarkers, (current) => { + if (promptParts?.instructionState === undefined) return current; + const observedMarker = promptParts.compactionMarker; + if ( + observedMarker === undefined || + current.get(requestedSessionId) !== observedMarker + ) + return current; + const updated = new Map(current); + updated.delete(requestedSessionId); + return updated; + }); + } if (context.finalized || followsAgentWorkState) return; // ACP v2 reports a failed prompt as an idle `error`, not an RPC error. const idleError = result.stopReason === "error" && !context.interrupted; @@ -8591,7 +8661,10 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( } yield* finalizeTurn(context, status); }), - ).pipe(Effect.asVoid), + ).pipe( + Effect.andThen(() => options.testHooks?.afterPromptCallback?.() ?? Effect.void), + Effect.asVoid, + ), ), Effect.catchCause((cause) => runRuntimeCallbackAtGeneration( From 587deab7d315612d88f9db5df26ec264a1047b76 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:19:35 -0800 Subject: [PATCH 028/922] feat(server): keep the computer awake while agents work (#34128) Co-authored-by: Claude Opus 5.5 --- .../SettingsServerControlsRouteScreen.tsx | 15 ++ apps/server/src/background/KeepAwake.test.ts | 36 ++++ apps/server/src/background/KeepAwake.ts | 191 ++++++++++++++++++ apps/server/src/server.ts | 2 + .../components/settings/SettingsPanels.tsx | 33 +++ .../src/components/settings/settingsSearch.ts | 7 + packages/contracts/src/settings.ts | 3 + 7 files changed, 287 insertions(+) create mode 100644 apps/server/src/background/KeepAwake.test.ts create mode 100644 apps/server/src/background/KeepAwake.ts diff --git a/apps/mobile/src/features/settings/SettingsServerControlsRouteScreen.tsx b/apps/mobile/src/features/settings/SettingsServerControlsRouteScreen.tsx index 77b845637062e..5026a90e13b9a 100644 --- a/apps/mobile/src/features/settings/SettingsServerControlsRouteScreen.tsx +++ b/apps/mobile/src/features/settings/SettingsServerControlsRouteScreen.tsx @@ -582,6 +582,21 @@ function ServerSettingsDetail(props: { readonly page: SettingsPage }) { onValueChange={(value) => write({ continueThreadsAfterServerUpdate: value })} /> + + write({ keepAwakeWhileAgentsWork: value })} + /> + ) : null} diff --git a/apps/server/src/background/KeepAwake.test.ts b/apps/server/src/background/KeepAwake.test.ts new file mode 100644 index 0000000000000..8984102729cec --- /dev/null +++ b/apps/server/src/background/KeepAwake.test.ts @@ -0,0 +1,36 @@ +import { describe, expect, it } from "@effect/vitest"; +import * as Effect from "effect/Effect"; +import * as Queue from "effect/Queue"; +import * as Stream from "effect/Stream"; +import * as TestClock from "effect/testing/TestClock"; + +import * as KeepAwake from "./KeepAwake.ts"; + +describe("KeepAwake.holdWhileWanted", () => { + it.effect("keeps one hold across a gap shorter than the grace and releases after it", () => + Effect.gen(function* () { + const wanted = yield* Queue.unbounded(); + const transitions = yield* Queue.unbounded<"held" | "released">(); + const hold = Effect.acquireRelease(Queue.offer(transitions, "held"), () => + Queue.offer(transitions, "released"), + ).pipe(Effect.andThen(Effect.never), Effect.scoped); + yield* KeepAwake.holdWhileWanted(Stream.fromQueue(wanted), hold, "60 seconds").pipe( + Effect.forkScoped, + ); + + yield* Queue.offer(wanted, true); + expect(yield* Queue.take(transitions)).toBe("held"); + + yield* Queue.offer(wanted, false); + yield* TestClock.adjust("30 seconds"); + yield* Queue.offer(wanted, true); + yield* TestClock.adjust("120 seconds"); + expect(yield* Queue.size(transitions)).toBe(0); + + yield* Queue.offer(wanted, false); + yield* TestClock.adjust("120 seconds"); + expect(yield* Queue.take(transitions)).toBe("released"); + expect(yield* Queue.size(transitions)).toBe(0); + }), + ); +}); diff --git a/apps/server/src/background/KeepAwake.ts b/apps/server/src/background/KeepAwake.ts new file mode 100644 index 0000000000000..5c9c3efc502e7 --- /dev/null +++ b/apps/server/src/background/KeepAwake.ts @@ -0,0 +1,191 @@ +import * as Duration from "effect/Duration"; +import * as Effect from "effect/Effect"; +import * as Layer from "effect/Layer"; +import * as ChildProcess from "effect/process/ChildProcess"; +import * as ChildProcessSpawner from "effect/process/ChildProcessSpawner"; +import * as Schedule from "effect/Schedule"; +import * as Schema from "effect/Schema"; +import * as Stream from "effect/Stream"; +import * as SqlClient from "effect/sql/SqlClient"; + +import * as HostProcess from "@t3tools/shared/HostProcess"; + +import * as OrchestrationEventStore from "../persistence/OrchestrationEventStore.ts"; +import { forkParked } from "../serverActivation.ts"; +import * as Settings from "../serverSettings.ts"; + +// Bridges gaps between back-to-back runs, so a long-idle machine does not sleep mid-queue. +const RELEASE_GRACE = Duration.seconds(60); + +/** Each command holds its inhibitor until it exits, and exits on its own if the server dies. */ +function inhibitorCommand( + platform: NodeJS.Platform, + serverPid: number, +): { readonly command: string; readonly args: ReadonlyArray } | undefined { + switch (platform) { + case "darwin": + return { command: "caffeinate", args: ["-i", "-w", String(serverPid)] }; + case "linux": + return { + command: "systemd-inhibit", + args: [ + "--what=idle:sleep", + "--who=T3 Code", + "--why=Agents are working", + "--mode=block", + "tail", + `--pid=${serverPid}`, + "-f", + "/dev/null", + ], + }; + case "win32": + return { + command: "powershell.exe", + args: [ + "-NoProfile", + "-NonInteractive", + "-Command", + // ES_CONTINUOUS | ES_SYSTEM_REQUIRED, held by this thread until Wait-Process returns. + `$t = Add-Type -Name Power -Namespace T3 -PassThru -MemberDefinition '[DllImport("kernel32.dll")] public static extern uint SetThreadExecutionState(uint f);'; [void]$t::SetThreadExecutionState([uint32]2147483649); Wait-Process -Id ${serverPid}`, + ], + }; + default: + return undefined; + } +} + +/** + * Runs `hold` while `wanted` is true and for `grace` after it turns false; a true inside the + * grace keeps the same hold. `hold` runs until interrupted. + */ +export const holdWhileWanted = ( + wanted: Stream.Stream, + hold: Effect.Effect, + grace: Duration.Input = RELEASE_GRACE, +) => + wanted.pipe( + Stream.changes, + Stream.switchMap((on) => + on ? Stream.succeed(true) : Stream.fromEffect(Effect.as(Effect.sleep(grace), false)), + ), + Stream.changes, + Stream.switchMap((on) => (on ? Stream.fromEffect(hold) : Stream.empty)), + Stream.runDrain, + ); + +// Reads, the event subscription and the inhibitor retry until they succeed; the cap keeps a +// host without an inhibitor (e.g. no logind) from retrying and warning constantly. +const backoff = Schedule.exponential("5 seconds").pipe( + Schedule.modifyDelay(({ duration }) => + Effect.succeed(Duration.min(duration, Duration.minutes(10))), + ), +); +const retryWithBackoff = + (message: string) => + (effect: Effect.Effect) => + effect.pipe( + Effect.tapCause((cause) => Effect.logWarning(message, { cause })), + Effect.retry(backoff), + ); + +class KeepAwakeInhibitorExited extends Schema.TaggedError()( + "KeepAwakeInhibitorExited", + { exitCode: Schema.Number }, +) {} + +export const layer = Layer.effectDiscard( + Effect.gen(function* () { + const command = inhibitorCommand(yield* HostProcess.Platform, process.pid); + if (command === undefined) return; + const settings = yield* Settings.ServerSettingsService; + const events = yield* OrchestrationEventStore.OrchestrationEventStore; + const sql = yield* SqlClient.SqlClient; + const spawner = yield* ChildProcessSpawner.ChildProcessSpawner; + + const hasActiveRun = sql<{ readonly active: number }>` + SELECT EXISTS ( + SELECT 1 FROM orchestration_v2_projection_runs + WHERE status IN ('preparing', 'starting', 'running') + ) AS active + `.pipe( + Effect.map((rows) => rows[0]?.active === 1), + retryWithBackoff("keep-awake could not read active runs"), + ); + // Read the cursor before the snapshot so a run changing in between is replayed, not missed. + const active = Stream.unwrap( + events.latestApplicationSequence.pipe( + retryWithBackoff("keep-awake could not read the event cursor"), + Effect.map((afterSequence) => + Stream.concat( + Stream.succeed(undefined), + events + .streamApplicationEvents({ afterSequence }) + .pipe( + Stream.filter( + (stored) => + "event" in stored && + (stored.event.type === "run.created" || stored.event.type === "run.updated"), + ), + ), + ), + ), + ), + ).pipe( + Stream.mapEffect(() => hasActiveRun), + // A failed subscription resubscribes, which re-reads the cursor and the snapshot. + Stream.tapCause((cause) => + Effect.logWarning("keep-awake run event stream failed", { cause }), + ), + Stream.retry(backoff), + ); + const enabled = Stream.unwrap( + Effect.gen(function* () { + const changes = yield* settings.subscribeChanges; + const current = yield* settings.getSettings.pipe( + Effect.map((value) => value.keepAwakeWhileAgentsWork), + Effect.orElseSucceed(() => true), + ); + return Stream.concat( + Stream.succeed(current), + Stream.map(changes, (value) => value.keepAwakeWhileAgentsWork), + ); + }), + ); + + const holdOnce = spawner + .spawn( + ChildProcess.make(command.command, command.args, { + detached: false, + shell: false, + stdin: "ignore", + stdout: "ignore", + stderr: "ignore", + }), + ) + .pipe( + Effect.tap((child) => + Effect.logInfo("keep-awake holding sleep inhibitor", { pid: Number(child.pid) }), + ), + Effect.tap(() => + Effect.addFinalizer(() => Effect.logInfo("keep-awake released sleep inhibitor")), + ), + Effect.flatMap((child) => child.exitCode), + Effect.flatMap((exitCode) => + Effect.fail(new KeepAwakeInhibitorExited({ exitCode: Number(exitCode) })), + ), + Effect.scoped, + ); + const hold = holdOnce.pipe( + retryWithBackoff("keep-awake sleep inhibitor stopped"), + Effect.ignore, + ); + + yield* forkParked( + holdWhileWanted( + Stream.zipLatestWith(enabled, active, (on, busy) => on && busy), + hold, + ).pipe(Effect.catchCause((cause) => Effect.logWarning("keep-awake stopped", { cause }))), + ); + }), +); diff --git a/apps/server/src/server.ts b/apps/server/src/server.ts index 2510c86fd0f8b..dae95787afe82 100644 --- a/apps/server/src/server.ts +++ b/apps/server/src/server.ts @@ -29,6 +29,7 @@ import * as HttpApiBuilder from "effect/http-api/HttpApiBuilder"; import * as BackgroundPolicy from "./background/BackgroundPolicy.ts"; import * as HostPowerMonitor from "./background/HostPowerMonitor.ts"; +import * as KeepAwake from "./background/KeepAwake.ts"; import * as ServerConfig from "./config.ts"; import { withUntracedRequests } from "./http.ts"; import * as ServerHttp from "./http.ts"; @@ -660,6 +661,7 @@ const layerRuntimeCoreDependenciesBase = Layer.mergeAll( Layer.provide(layerServerRestart), ), layerThreadPullRequestWorker, + KeepAwake.layer, DelegatedTaskAnalytics.layer, Layer.effectDiscard( Effect.gen(function* () { diff --git a/apps/web/src/components/settings/SettingsPanels.tsx b/apps/web/src/components/settings/SettingsPanels.tsx index b20295847f934..31234fb6be51a 100644 --- a/apps/web/src/components/settings/SettingsPanels.tsx +++ b/apps/web/src/components/settings/SettingsPanels.tsx @@ -555,6 +555,9 @@ export function useSettingsRestore(onRestored?: () => void) { ? ["Continue threads after restarts"] : []), ...(isBackgroundActivityDirty ? ["Background activity"] : []), + ...(settings.keepAwakeWhileAgentsWork !== DEFAULT_UNIFIED_SETTINGS.keepAwakeWhileAgentsWork + ? ["Keep awake while agents work"] + : []), ...(settings.defaultThreadEnvMode !== DEFAULT_UNIFIED_SETTINGS.defaultThreadEnvMode ? ["New thread mode"] : []), @@ -678,6 +681,7 @@ export function useSettingsRestore(onRestored?: () => void) { enableProviderUpdateChecks: DEFAULT_UNIFIED_SETTINGS.enableProviderUpdateChecks, continueThreadsAfterServerUpdate: DEFAULT_UNIFIED_SETTINGS.continueThreadsAfterServerUpdate, backgroundActivity: DEFAULT_UNIFIED_SETTINGS.backgroundActivity, + keepAwakeWhileAgentsWork: DEFAULT_UNIFIED_SETTINGS.keepAwakeWhileAgentsWork, backgroundActivityProfile: DEFAULT_UNIFIED_SETTINGS.backgroundActivityProfile, automaticGitFetchInterval: DEFAULT_UNIFIED_SETTINGS.automaticGitFetchInterval, providerHealthRefreshInterval: DEFAULT_UNIFIED_SETTINGS.providerHealthRefreshInterval, @@ -2206,6 +2210,35 @@ export function MaintenanceSettingsPanel() { + + updateSettings({ + keepAwakeWhileAgentsWork: DEFAULT_UNIFIED_SETTINGS.keepAwakeWhileAgentsWork, + }) + } + /> + ) : null + } + control={ + + updateSettings({ keepAwakeWhileAgentsWork: Boolean(checked) }) + } + aria-label="Keep awake while agents work" + /> + } + /> diff --git a/apps/web/src/components/settings/settingsSearch.ts b/apps/web/src/components/settings/settingsSearch.ts index 6a9ce0557ca5e..808250e5f0dda 100644 --- a/apps/web/src/components/settings/settingsSearch.ts +++ b/apps/web/src/components/settings/settingsSearch.ts @@ -777,6 +777,13 @@ export const SETTINGS_SEARCH_ITEMS = [ "resume running active interrupted work restart reboot machine crash desktop update automatically", ], }, + { + id: "keep-awake-while-agents-work", + title: "Keep awake while agents work", + to: "/settings/maintenance", + scope: "environment-defaults", + searchTerms: ["caffeinate sleep prevent stay awake power laptop lid inhibit"], + }, { id: "background-activity", title: "Background activity", diff --git a/packages/contracts/src/settings.ts b/packages/contracts/src/settings.ts index 2844c8181324a..49470541d90be 100644 --- a/packages/contracts/src/settings.ts +++ b/packages/contracts/src/settings.ts @@ -1375,6 +1375,8 @@ export const ServerSettings = Schema.Struct({ continueThreadsAfterServerUpdate: Schema.Boolean.pipe( Schema.withDecodingDefault(Effect.succeed(true)), ), + /** Holds an OS sleep inhibitor while any run is active; closing a laptop lid still sleeps it. */ + keepAwakeWhileAgentsWork: Schema.Boolean.pipe(Schema.withDecodingDefault(Effect.succeed(true))), enableAgentBrowserAccess: Schema.Boolean.pipe(Schema.withDecodingDefault(Effect.succeed(true))), cloudSpeechCredentials: CloudSpeechCredentials.pipe( @@ -1826,6 +1828,7 @@ export const ServerSettingsPatch = Schema.Struct({ responseStreamingMode: Schema.optionalKey(ResponseStreamingMode), enableProviderUpdateChecks: Schema.optionalKey(Schema.Boolean), continueThreadsAfterServerUpdate: Schema.optionalKey(Schema.Boolean), + keepAwakeWhileAgentsWork: Schema.optionalKey(Schema.Boolean), enableAgentBrowserAccess: Schema.optionalKey(Schema.Boolean), cloudSpeechCredentials: Schema.optionalKey( Schema.Struct({ From 254e985e47e589c238ee398c4efecd223a0d3914 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:24:46 -0800 Subject: [PATCH 029/922] fix(web): find scheduled tasks in Settings search (#35715) Co-authored-by: Brandon Julio Thenaro --- .../web/src/components/settings/ScheduledTasksSettings.tsx | 3 ++- apps/web/src/components/settings/settingsSearch.test.ts | 7 +++++++ apps/web/src/components/settings/settingsSearch.ts | 5 +++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/web/src/components/settings/ScheduledTasksSettings.tsx b/apps/web/src/components/settings/ScheduledTasksSettings.tsx index 848b88130f48a..fd4f7702d68ab 100644 --- a/apps/web/src/components/settings/ScheduledTasksSettings.tsx +++ b/apps/web/src/components/settings/ScheduledTasksSettings.tsx @@ -145,6 +145,7 @@ import { Switch } from "../ui/switch"; import { Textarea } from "../ui/textarea"; import { stackedThreadToast, toastManager } from "../ui/toast"; import { Tooltip, TooltipPopup, TooltipTrigger } from "../ui/tooltip"; +import { searchableSetting } from "./settingsSearch"; import { SettingsPageContainer, SettingsRow, @@ -435,7 +436,7 @@ export function ScheduledTasksSettings(target: { return ( { expect(searchSettings("1password").map((item) => item.to)).not.toContain("/settings/secrets"); }); + it("finds the Scheduled tasks page", () => { + expect(searchSettings("scheduled tasks")[0]).toMatchObject({ + id: "scheduled-tasks", + to: "/settings/scheduled-tasks", + }); + }); + it("matches normalized title substrings", () => { expect(searchSettings(" WORD WRAP ", ITEMS).map((item) => item.id)).toEqual(["word-wrap"]); expect(searchSettings("glass").map((item) => item.id)).toEqual(["setting-glass-opacity"]); diff --git a/apps/web/src/components/settings/settingsSearch.ts b/apps/web/src/components/settings/settingsSearch.ts index 808250e5f0dda..85e4878be73dd 100644 --- a/apps/web/src/components/settings/settingsSearch.ts +++ b/apps/web/src/components/settings/settingsSearch.ts @@ -1005,6 +1005,11 @@ export const SETTINGS_SEARCH_ITEMS = [ searchTerms: ["refresh availability versions auth state models background probes seconds off"], providerSettingsOnly: true, }, + { + id: "scheduled-tasks", + title: "Scheduled tasks", + to: "/settings/scheduled-tasks", + }, { id: "agent-browser-access", title: "Agent browser access", From fec3b3a227f7b5da7b86f743f1aa9d8645f4a9df Mon Sep 17 00:00:00 2001 From: Marcos Caballero <98906745+cabamarcos@users.noreply.github.com> Date: Fri, 13 Nov 2026 01:25:32 +0100 Subject: [PATCH 030/922] fix(preview): bound stalled screenshot captures (#25862) Co-authored-by: Julius Marminge --- .../src/preview/ServerBrowserPage.test.ts | 45 +++++++++++++++++++ apps/server/src/preview/ServerBrowserPage.ts | 21 ++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/apps/server/src/preview/ServerBrowserPage.test.ts b/apps/server/src/preview/ServerBrowserPage.test.ts index dd1895c9b7361..cabc2b99e67ba 100644 --- a/apps/server/src/preview/ServerBrowserPage.test.ts +++ b/apps/server/src/preview/ServerBrowserPage.test.ts @@ -19,9 +19,54 @@ import { } from "vite-plus/test"; import * as ServerBrowserPage from "./ServerBrowserPage.ts"; +import { SessionControl } from "./SessionControl.ts"; const decodeEvaluateInput = Schema.decodeUnknownSync(PreviewAutomationEvaluateInput); +describe("server browser capture deadlines", () => { + it("releases control after an unanswered capture and ignores its late reply", async () => { + vi.useFakeTimers({ toFake: ["setTimeout", "clearTimeout"] }); + try { + const captured = Promise.withResolvers<{ data: string }>(); + const send = vi.fn(async (method: string) => + method === "Page.captureScreenshot" + ? captured.promise + : { result: { value: "still responsive" } }, + ); + const cdp = { send } as unknown as CDPSession; + const control = new SessionControl("agent"); + let outcome: unknown; + const capture = control + .agent("agent", () => ServerBrowserPage.captureViewport(cdp, { format: "png" })) + .catch((cause: unknown) => { + outcome = cause; + }); + const evaluation = control.agent("agent", () => + ServerBrowserPage.evaluate(cdp, { expression: "document.title" }, 1_000), + ); + + await vi.advanceTimersByTimeAsync(3_000); + expect(outcome).toMatchObject({ + tag: "PreviewAutomationExecutionError", + message: expect.stringContaining("not producing screenshot frames"), + }); + await capture; + expect(await evaluation).toBe("still responsive"); + expect(vi.getTimerCount()).toBe(0); + + captured.resolve({ data: "late-frame" }); + await captured.promise; + expect(outcome).toBeInstanceOf(ServerBrowserPage.ServerBrowserOperationError); + expect(send.mock.calls.map(([method]) => method)).toEqual([ + "Page.captureScreenshot", + "Runtime.evaluate", + ]); + } finally { + vi.useRealTimers(); + } + }); +}); + describe("server browser element refs", () => { let browser: Browser; let context: BrowserContext; diff --git a/apps/server/src/preview/ServerBrowserPage.ts b/apps/server/src/preview/ServerBrowserPage.ts index 9df6c539014c5..0d5ed3d1ff893 100644 --- a/apps/server/src/preview/ServerBrowserPage.ts +++ b/apps/server/src/preview/ServerBrowserPage.ts @@ -29,6 +29,8 @@ const isBrowserControlInterrupted = Schema.is(BrowserControlInterrupted); const MAX_EVALUATION_BYTES = 64_000; const MAX_VISIBLE_TEXT_LENGTH = 20_000; const MAX_SCREENSHOT_WIDTH = 1280; +// Two attempts must fit in a snapshot's 10-second deadline. +const SCREENSHOT_TIMEOUT_MS = 3_000; const WAIT_POLL_MS = 100; export const DIAGNOSTIC_BUFFER_LIMIT = 200; @@ -468,10 +470,27 @@ export const captureViewport = async ( cdp: CDPSession, options: { readonly format: "png" | "jpeg"; readonly quality?: number }, ) => { - const { data } = await cdp.send("Page.captureScreenshot", { + const capture = cdp.send("Page.captureScreenshot", { format: options.format, ...(options.quality === undefined ? {} : { quality: options.quality }), }); + let timer: ReturnType | undefined; + const expired = new Promise((_, reject) => { + timer = setTimeout( + () => + reject( + new ServerBrowserOperationError({ + tag: "PreviewAutomationExecutionError", + message: + "The browser is not producing screenshot frames. For a desktop tab, show or restore the T3 Code window and try again.", + }), + ), + SCREENSHOT_TIMEOUT_MS, + ); + }); + // Hidden native guests can leave CDP captures pending forever. This deadline also + // releases a viewer's still-capture lock, which an agent snapshot may be waiting for. + const { data } = await Promise.race([capture, expired]).finally(() => clearTimeout(timer)); return data; }; From 48a56faaa2f1b9c3695bb4b506e32fbf249fb626 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:26:28 -0800 Subject: [PATCH 031/922] test(server): idle-resume replays wait for the session release before the next prompt (#35720) Co-authored-by: Claude Opus 5.5 --- .../testkit/OrchestratorScenario.ts | 40 +++++++++++++++++-- .../claude_compact_after_resume_wake/input.ts | 2 +- .../fixtures/claude_idle_resume/input.ts | 2 +- .../fixtures/provider_thread_resume/input.ts | 2 +- .../testkit/fixtures/shared.ts | 10 ++++- .../input.ts | 2 +- 6 files changed, 50 insertions(+), 8 deletions(-) diff --git a/apps/server/src/orchestration-v2/testkit/OrchestratorScenario.ts b/apps/server/src/orchestration-v2/testkit/OrchestratorScenario.ts index b413c0aefa259..0d428e1a6e1e0 100644 --- a/apps/server/src/orchestration-v2/testkit/OrchestratorScenario.ts +++ b/apps/server/src/orchestration-v2/testkit/OrchestratorScenario.ts @@ -14,6 +14,7 @@ import type { TurnItemId, } from "@t3tools/contracts"; import * as Clock from "effect/Clock"; +import * as Deferred from "effect/Deferred"; import * as Duration from "effect/Duration"; import * as Effect from "effect/Effect"; import * as Fiber from "effect/Fiber"; @@ -37,6 +38,8 @@ export type OrchestratorV2ScenarioStep = | { readonly type: "advance_clock"; readonly duration: Duration.Input; + /** Wait until the jump idle-releases this thread's provider session. */ + readonly awaitProviderSessionRelease?: ThreadId; } | { readonly type: "await"; @@ -271,9 +274,21 @@ export function runOrchestratorV2Scenario( const orchestrator = yield* Orchestrator.OrchestratorV2; const storedEventGroups: Array> = []; const observedStoredEvents = yield* Ref.make>([]); + let releaseWatch: + | { readonly threadId: ThreadId; readonly released: Deferred.Deferred } + | undefined; yield* orchestrator.streamStoredEvents.pipe( - Stream.runForEach((event) => - Ref.update(observedStoredEvents, (existing) => [...existing, event]), + Stream.runForEach((stored) => + Ref.update(observedStoredEvents, (existing) => [...existing, stored]).pipe( + Effect.andThen( + releaseWatch !== undefined && + stored.event.type === "provider-session.updated" && + stored.event.threadId === releaseWatch.threadId && + stored.event.payload.status === "stopped" + ? Deferred.succeed(releaseWatch.released, undefined) + : Effect.void, + ), + ), ), Effect.forkScoped, ); @@ -647,9 +662,28 @@ export function runOrchestratorV2Scenario( ); break; } - case "advance_clock": + case "advance_clock": { + if (step.awaitProviderSessionRelease === undefined) { + yield* TestClock.adjust(step.duration); + break; + } + // The release runs on a woken fiber; a dispatch before it commits cancels it. + const released = yield* Deferred.make(); + releaseWatch = { threadId: step.awaitProviderSessionRelease, released }; yield* TestClock.adjust(step.duration); + const settled = yield* Deferred.await(released).pipe( + Effect.timeoutOption(Duration.millis(SCENARIO_WAIT_DEADLINE_MS)), + Effect.provideService(Clock.Clock, Clock.Clock.defaultValue()), + ); + releaseWatch = undefined; + if (Option.isNone(settled)) { + return yield* new OrchestratorV2ScenarioStepError({ + scenario: scenario.name, + step: `advance_clock:${step.awaitProviderSessionRelease}:no_provider_session_release`, + }); + } break; + } case "await": yield* awaitDispatch(step.key); break; diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/claude_compact_after_resume_wake/input.ts b/apps/server/src/orchestration-v2/testkit/fixtures/claude_compact_after_resume_wake/input.ts index 5c1ff9ad62baf..bb34f0d2eaf05 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/claude_compact_after_resume_wake/input.ts +++ b/apps/server/src/orchestration-v2/testkit/fixtures/claude_compact_after_resume_wake/input.ts @@ -5,7 +5,7 @@ export function claudeCompactAfterResumeWakeInput(): OrchestratorFixtureInput { return { steps: [ { type: "message", text: CLAUDE_COMPACT_FIRST_PROMPT }, - { type: "advance_clock", duration: "31 minutes" }, + { type: "advance_clock", duration: "31 minutes", releasesProviderSession: true }, { type: "message", text: "/compact" }, ], }; diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/claude_idle_resume/input.ts b/apps/server/src/orchestration-v2/testkit/fixtures/claude_idle_resume/input.ts index f074584dcd3d1..2663b1d6c0eab 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/claude_idle_resume/input.ts +++ b/apps/server/src/orchestration-v2/testkit/fixtures/claude_idle_resume/input.ts @@ -7,7 +7,7 @@ export function claudeIdleResumeInput(): OrchestratorFixtureInput { return { steps: [ { type: "message", text: CLAUDE_IDLE_RESUME_PROMPT_1 }, - { type: "advance_clock", duration: "31 minutes" }, + { type: "advance_clock", duration: "31 minutes", releasesProviderSession: true }, { type: "message", text: CLAUDE_IDLE_RESUME_PROMPT_2 }, ], }; diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/provider_thread_resume/input.ts b/apps/server/src/orchestration-v2/testkit/fixtures/provider_thread_resume/input.ts index 50625a832ce25..d4ae2dc064f9f 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/provider_thread_resume/input.ts +++ b/apps/server/src/orchestration-v2/testkit/fixtures/provider_thread_resume/input.ts @@ -9,7 +9,7 @@ export function providerThreadResumeInput(): OrchestratorFixtureInput { return { steps: [ { type: "message", text: PROVIDER_THREAD_RESUME_FIRST_PROMPT }, - { type: "advance_clock", duration: "31 minutes" }, + { type: "advance_clock", duration: "31 minutes", releasesProviderSession: true }, { type: "message", text: PROVIDER_THREAD_RESUME_SECOND_PROMPT }, ], }; diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/shared.ts b/apps/server/src/orchestration-v2/testkit/fixtures/shared.ts index 1a550cd6786dc..63f85819acbaa 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/shared.ts +++ b/apps/server/src/orchestration-v2/testkit/fixtures/shared.ts @@ -268,6 +268,8 @@ export type OrchestratorFixtureInputStep = | { readonly type: "advance_clock"; readonly duration: Duration.Input; + /** The jump idle-releases the provider session; later steps wait for that release. */ + readonly releasesProviderSession?: boolean; } | { /** Picks another model of the same provider instance; later messages use it. */ @@ -883,7 +885,13 @@ export function materializeFixtureInput(input: { }); break; case "advance_clock": - steps.push({ type: "advance_clock", duration: step.duration }); + steps.push({ + type: "advance_clock", + duration: step.duration, + ...(step.releasesProviderSession === true + ? { awaitProviderSessionRelease: ids.threadId } + : {}), + }); break; case "set_model": modelSelection = { ...input.modelSelection, model: step.model }; diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/stop_background_work_after_failed_turn/input.ts b/apps/server/src/orchestration-v2/testkit/fixtures/stop_background_work_after_failed_turn/input.ts index aba2f3f305f0b..4faf0bef550e3 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/stop_background_work_after_failed_turn/input.ts +++ b/apps/server/src/orchestration-v2/testkit/fixtures/stop_background_work_after_failed_turn/input.ts @@ -16,7 +16,7 @@ export function stopBackgroundWorkAfterReleaseInput(): OrchestratorFixtureInput return { steps: [ { type: "message", text: STOP_BACKGROUND_WORK_AFTER_FAILED_TURN_PROMPT }, - { type: "advance_clock", duration: "31 minutes" }, + { type: "advance_clock", duration: "31 minutes", releasesProviderSession: true }, { type: "stop_background_work", targetRunIndex: 1 }, ], }; From ac1cb9232dde82f13c2bd9ac7fc9650a3073ea19 Mon Sep 17 00:00:00 2001 From: Fuksss Date: Fri, 13 Nov 2026 01:34:48 +0100 Subject: [PATCH 032/922] fix(server): archive refuses a thread with running delegated tasks (#26078) Co-authored-by: Julius Marminge --- .../src/orchestration-v2/Orchestrator.ts | 19 +++ .../RemoteDelegatedTask.test.ts | 7 + .../src/orchestration-v2/runtimeLayer.test.ts | 121 ++++++++++++++++++ docs/user/thread-sidebar.md | 1 + 4 files changed, 148 insertions(+) diff --git a/apps/server/src/orchestration-v2/Orchestrator.ts b/apps/server/src/orchestration-v2/Orchestrator.ts index 568025d523b38..b7ddd77de49c9 100644 --- a/apps/server/src/orchestration-v2/Orchestrator.ts +++ b/apps/server/src/orchestration-v2/Orchestrator.ts @@ -3994,6 +3994,25 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio cause: `Thread ${command.threadId} is already archived.`, }); } + if (command.type === "thread.archive") { + const records = yield* projectionStore + .getThreadRecords(command.threadId, ["subagents"]) + .pipe(mapDispatchError(command)); + if ( + records.subagents.some( + (task) => + task.origin === "app_owned" && + task.childThreadId !== null && + isOrchestrationV2WorkActive(task.status), + ) + ) { + return yield* new OrchestratorDispatchError({ + commandId: command.commandId, + commandType: command.type, + cause: `Thread ${command.threadId} has running delegated tasks. Wait for them or cancel them before archiving.`, + }); + } + } if (command.type === "thread.unarchive" && thread.archivedAt === null) { return yield* new OrchestratorDispatchError({ commandId: command.commandId, diff --git a/apps/server/src/orchestration-v2/RemoteDelegatedTask.test.ts b/apps/server/src/orchestration-v2/RemoteDelegatedTask.test.ts index f8363bef98f9a..f075b43d9f882 100644 --- a/apps/server/src/orchestration-v2/RemoteDelegatedTask.test.ts +++ b/apps/server/src/orchestration-v2/RemoteDelegatedTask.test.ts @@ -226,6 +226,13 @@ it.layer(layerTest)("a delegated task in a linked environment", (it) => { const index = yield* (yield* ProjectionStore.ProjectionStoreV2).listActiveShellIndex(); assert.isTrue(index.find((entry) => entry.id === parent.threadId)?.hasRemoteTasks); assert.isFalse(index.find((entry) => entry.id === other.threadId)?.hasRemoteTasks); + // Nothing here can cancel the task there, so it must not block archiving. + yield* orchestrator.dispatch({ + type: "thread.archive", + commandId: CommandId.make("command:archive:records"), + threadId: parent.threadId, + }); + assert.isNotNull((yield* orchestrator.getThreadShell(parent.threadId))?.archivedAt); }), ); diff --git a/apps/server/src/orchestration-v2/runtimeLayer.test.ts b/apps/server/src/orchestration-v2/runtimeLayer.test.ts index c66af723d5d86..647c6bc0880f6 100644 --- a/apps/server/src/orchestration-v2/runtimeLayer.test.ts +++ b/apps/server/src/orchestration-v2/runtimeLayer.test.ts @@ -6394,6 +6394,127 @@ it.layer(layerTest)("OrchestrationV2LayerLive lifecycle", (it) => { }), ); + it.effect("rejects archiving an idle parent until its delegated child completes", () => + Effect.gen(function* () { + const orchestrator = yield* Orchestrator.OrchestratorV2; + const sink = yield* EventSink.EventSinkV2; + const threadId = ThreadId.make("archive-delegated-parent"); + const projectId = ProjectId.make("archive-delegated-project"); + yield* seedProject({ + projectId, + title: "Delegated archive", + workspaceRoot: "/workspace/archive-delegated", + defaultModelSelection: null, + createdAt: "2026-09-07T00:00:00.000Z", + }); + yield* orchestrator.dispatch({ + type: "thread.create", + createdBy: "user", + creationSource: "web", + commandId: CommandId.make("archive-delegated-create"), + threadId, + projectId, + title: "Delegated archive", + modelSelection, + runtimeMode: "full-access", + interactionMode: "default", + branch: null, + worktreePath: null, + }); + yield* orchestrator.dispatch({ + type: "message.dispatch", + createdBy: "user", + creationSource: "web", + commandId: CommandId.make("archive-delegated-message"), + threadId, + messageId: MessageId.make("archive-delegated-message"), + text: "Delegate the work, then finish your turn.", + attachments: [], + modelSelection, + dispatchMode: { type: "start_immediately" }, + }); + const parentRun = (yield* orchestrator.getThreadProjection(threadId)).runs[0]!; + yield* orchestrator.dispatch({ + type: "delegated_task.request", + createdBy: "agent", + creationSource: "mcp", + commandId: CommandId.make("archive-delegated-request"), + parentThreadId: threadId, + parentRunId: parentRun.id, + parentNodeId: parentRun.rootNodeId!, + task: "Keep working after the parent finishes.", + modelSelection, + runtimeMode: "full-access", + interactionMode: "default", + completionWake: "always", + }); + const delegatedParentRun = (yield* orchestrator.getThreadProjection(threadId)).runs[0]!; + const now = yield* DateTime.now; + yield* sink.write({ + events: [ + { + id: EventId.make("archive-delegated-parent-completed"), + type: "run.updated", + threadId, + runId: parentRun.id, + occurredAt: now, + payload: { ...delegatedParentRun, status: "completed", completedAt: now }, + }, + ], + }); + const parent = yield* orchestrator.getThreadProjection(threadId); + const task = parent.subagents[0]!; + assert.equal(parent.runs[0]?.status, "completed"); + assert.equal(task.origin, "app_owned"); + assert.equal(task.status, "running"); + assert.isNotNull(task.childThreadId); + + // Archive must preserve the idle parent's path for receiving this child's result. + const error = yield* orchestrator + .dispatch({ + type: "thread.archive", + commandId: CommandId.make("archive-delegated-blocked"), + threadId, + }) + .pipe(Effect.flip); + assert.instanceOf(error, Orchestrator.OrchestratorDispatchError); + assert.equal( + error.cause, + `Thread ${threadId} has running delegated tasks. Wait for them or cancel them before archiving.`, + ); + assert.isNull((yield* orchestrator.getThreadProjection(threadId)).thread.archivedAt); + + const childThreadId = task.childThreadId!; + const childRun = (yield* orchestrator.getThreadProjection(childThreadId)).runs[0]!; + yield* sink.write({ + events: [ + { + id: EventId.make("archive-delegated-child-run-completed"), + type: "run.updated", + threadId: childThreadId, + runId: childRun.id, + occurredAt: now, + payload: { ...childRun, status: "completed", completedAt: now }, + }, + { + id: EventId.make("archive-delegated-child-completed"), + type: "subagent.updated", + threadId, + nodeId: task.id, + occurredAt: now, + payload: { ...task, status: "completed", result: "Done", completedAt: now }, + }, + ], + }); + yield* orchestrator.dispatch({ + type: "thread.archive", + commandId: CommandId.make("archive-delegated-allowed"), + threadId, + }); + assert.isNotNull((yield* orchestrator.getThreadProjection(threadId)).thread.archivedAt); + }), + ); + it.effect("cancels preparing work on archive and keeps it cancelled through replay", () => Effect.gen(function* () { const orchestrator = yield* Orchestrator.OrchestratorV2; diff --git a/docs/user/thread-sidebar.md b/docs/user/thread-sidebar.md index 09ce63e2a3e65..711203dc51ab0 100644 --- a/docs/user/thread-sidebar.md +++ b/docs/user/thread-sidebar.md @@ -273,6 +273,7 @@ On mobile, open a subagent from its conversation card or **Agents**. On iOS layouts with an inspector, its thread opens beside the parent. Maximize it to fill the screen; close the full-screen view to return to the parent and inspector. Stop on a thread also stops the subagents it delegated to. +Before archiving the parent, wait for its delegated tasks to finish or cancel them. Subagent threads started by the agent can't take messages; message the parent thread instead. When such a subagent needs an approval or an answer, the parent From c99201cc1515155600a216c964497a9a8b91bd84 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:36:04 -0800 Subject: [PATCH 033/922] fix(web): minimap Next turn no longer sticks on adjacent user messages (#33036) --- .../chat/MessagesTimeline.browser.test.tsx | 44 +++++++++++++++++++ .../components/chat/MessagesTimeline.logic.ts | 1 + .../src/components/chat/MessagesTimeline.tsx | 15 +++++-- 3 files changed, 57 insertions(+), 3 deletions(-) diff --git a/apps/web/src/components/chat/MessagesTimeline.browser.test.tsx b/apps/web/src/components/chat/MessagesTimeline.browser.test.tsx index 31687095d8c54..3907ef764c5a5 100644 --- a/apps/web/src/components/chat/MessagesTimeline.browser.test.tsx +++ b/apps/web/src/components/chat/MessagesTimeline.browser.test.tsx @@ -763,6 +763,50 @@ describe("MessagesTimeline messages", () => { expect(turns).toEqual(turns.toSorted((a, b) => a - b)); }); + it("steps the minimap's next turn past two adjacent user messages", async () => { + const props = baseProps(); + const reply = (id: string) => message("Reply.\n\n".repeat(120), { role: "assistant" }, id); + const userIds = ["turn-0", "turn-1", "turn-2", "pair-a", "pair-b", "turn-3", "turn-4"]; + const entries = [ + ...["turn-0", "turn-1", "turn-2"].flatMap((id) => [message(id, {}, id), reply(`${id}-r`)]), + message("pair-a", {}, "pair-a"), + message("pair-b", {}, "pair-b"), + reply("pair-b-r"), + ...["turn-3", "turn-4"].flatMap((id) => [message(id, {}, id), reply(`${id}-r`)]), + ]; + const session = cdp(); + await session.send("Emulation.setEmulatedMedia", { + features: [{ name: "prefers-reduced-motion", value: "reduce" }], + }); + try { + await using screen = await renderTimeline(entries, props); + const viewport = props.listRef.current!.getScrollableNode()!; + const strips = () => [...screen.container.querySelectorAll("[data-minimap-strip]")]; + const turnAtTop = () => + userIds.find((id) => { + const row = screen.container.querySelector(`[data-message-id="${id}"]`); + if (!row) return false; + const offset = row.getBoundingClientRect().top - viewport.getBoundingClientRect().top; + return offset >= 0 && offset < 100; + }); + await act(() => { + void props.listRef.current!.scrollToIndex({ index: 0, animated: false }); + }); + await vi.waitFor(() => expect(strips()[0]?.getAttribute("data-in-view")).toBe("true")); + + // Clicks again while the view has not moved, as a user would. + for (const id of userIds.slice(1)) { + const from = turnAtTop(); + await vi.waitFor(async () => { + if (turnAtTop() === from) await click(screen.button("Next turn")); + expect(turnAtTop(), "turn at the top after Next turn").toBe(id); + }); + } + } finally { + await session.send("Emulation.setEmulatedMedia", { features: [] }); + } + }); + it("preserves XML-like tags and comparisons in user messages as text", async () => { const source = [ 'Without reading a file, do you have ', diff --git a/apps/web/src/components/chat/MessagesTimeline.logic.ts b/apps/web/src/components/chat/MessagesTimeline.logic.ts index 63cda7dbaf496..90690dc0810ec 100644 --- a/apps/web/src/components/chat/MessagesTimeline.logic.ts +++ b/apps/web/src/components/chat/MessagesTimeline.logic.ts @@ -280,6 +280,7 @@ export function workEntryIsVisibleInGroup( } const TIMELINE_MINIMAP_ITEM_SPACING = 8; export const TIMELINE_MINIMAP_MIN_ITEMS = 2; +export const TIMELINE_MINIMAP_TARGET_OFFSET = 24; // Relative to the timeline, not the viewport, so an open terminal shrinks the rail and // endpoint previews (centered on their strip) still fit above and below it. const TIMELINE_MINIMAP_MAX_HEIGHT_CSS = "max(4rem, calc(100% - 14.75rem))"; diff --git a/apps/web/src/components/chat/MessagesTimeline.tsx b/apps/web/src/components/chat/MessagesTimeline.tsx index 3bbea6a44eb21..ac091176ce426 100644 --- a/apps/web/src/components/chat/MessagesTimeline.tsx +++ b/apps/web/src/components/chat/MessagesTimeline.tsx @@ -84,6 +84,7 @@ import { isTimelineMinimapRowVisible, resolveTimelineMinimapVisibleRange, resolveTimelineMinimapHitStripWidth, + TIMELINE_MINIMAP_TARGET_OFFSET, timelineTurnFoldRunIdsByEntryId, liveAnswerPreview, type MessagesTimelineRow, @@ -944,9 +945,17 @@ const ConversationTimeline = memo(function ConversationTimeline({ strip.dataset.inView = next; } } + // Ignore rows ending within the offset minimap navigation leaves above its target, or + // Next turn keeps retargeting the same row. 1px absorbs device-pixel scroll rounding. + const currentInset = TIMELINE_MINIMAP_TARGET_OFFSET + 1; + const currentRange = resolveTimelineMinimapVisibleRange({ + ...state, + scroll: scroll + currentInset, + scrollLength: state.scrollLength - currentInset, + }); const nextCurrentIndex = resolveTimelineMinimapCurrentIndex({ - visibleStart: visibleRange.start, - visibleEnd: visibleRange.end, + visibleStart: currentRange.start, + visibleEnd: currentRange.end, rowIndices: minimapRowIndices, }); setMinimapCurrentIndex((current) => @@ -1479,7 +1488,7 @@ const ConversationTimeline = memo(function ConversationTimeline({ void listRef.current?.scrollToIndex({ index: item.rowIndex, animated: !window.matchMedia("(prefers-reduced-motion: reduce)").matches, - viewOffset: 24, + viewOffset: TIMELINE_MINIMAP_TARGET_OFFSET, }); }} /> From d4b77d244879e2d8388ceadc44e41dd5f091cfcd Mon Sep 17 00:00:00 2001 From: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com> Date: Thu, 12 Nov 2026 19:39:54 -0500 Subject: [PATCH 034/922] fix(server): Claude background commands show how long they have run (#26668) Co-authored-by: maria-rcks Co-authored-by: Julius Marminge --- .../Adapters/ClaudeAdapterV2.test.ts | 53 ++++++++++++++++--- .../Adapters/ClaudeAdapterV2.ts | 43 ++++++++++++++- .../claude_background_monitor_wake/output.ts | 1 + .../components/chat/ThreadActivityBanners.tsx | 4 +- packages/contracts/src/orchestrationV2.ts | 2 + 5 files changed, 92 insertions(+), 11 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts index cfd6c526b2726..861c6ab6b0662 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts @@ -11060,7 +11060,7 @@ describe("ClaudeAdapterV2 background wake turns", () => { ); it.effect( - "uses task_started as an incremental roster fallback and clears internal work on empty snapshot", + "uses task_started as an incremental roster fallback, keeps its tool call, and clears internal work on empty snapshot", () => Effect.scoped( Effect.gen(function* () { @@ -11118,10 +11118,9 @@ describe("ClaudeAdapterV2 background wake turns", () => { (event) => (event.providerThread.pendingBackgroundTasks?.length ?? 0) > 0, ); assert.isAtLeast(afterStart.length, 1); - assert.equal( - (afterStart.at(-1)?.providerThread.pendingBackgroundTasks ?? [])[0]?.taskId, - WAKE_TASK_ID, - ); + const started = (afterStart.at(-1)?.providerThread.pendingBackgroundTasks ?? [])[0]; + assert.equal(started?.taskId, WAKE_TASK_ID); + assert.equal(started?.nativeItemId, WAKE_TOOL_USE_ID); const command = harness.events.find( (event) => @@ -11154,6 +11153,21 @@ describe("ClaudeAdapterV2 background wake turns", () => { details, ); + // A foreground command that later moves to the background keeps its tool call too. + yield* Queue.offer( + harness.sdkMessages, + claudeSdkFrame({ + type: "system", + subtype: "task_started", + task_id: "moved-shell", + tool_use_id: "toolu_moved_shell", + description: "Foreground build", + is_backgrounded: false, + task_type: "local_bash", + uuid: "00000000-0000-4000-8000-000000000204", + session_id: WAKE_NATIVE_SESSION, + }), + ); yield* Queue.offer( harness.sdkMessages, claudeSdkFrame({ @@ -11166,6 +11180,16 @@ describe("ClaudeAdapterV2 background wake turns", () => { description: "sleep 150", parent_task_id: "agent-1", }, + { + task_id: WAKE_TASK_ID, + task_type: "local_bash", + description: WAKE_TASK_DESCRIPTION, + }, + { + task_id: "moved-shell", + task_type: "local_bash", + description: "Foreground build", + }, ], uuid: "00000000-0000-4000-8000-000000000203", session_id: WAKE_NATIVE_SESSION, @@ -11174,7 +11198,10 @@ describe("ClaudeAdapterV2 background wake turns", () => { yield* harness.until(() => providerThreadRosterEvents(harness.events).some( (event) => - event.providerThread.pendingBackgroundTasks?.[0]?.parentTaskId === "agent-1", + event.providerThread.pendingBackgroundTasks?.[0]?.parentTaskId === "agent-1" && + event.providerThread.pendingBackgroundTasks[1]?.nativeItemId === WAKE_TOOL_USE_ID && + event.providerThread.pendingBackgroundTasks[2]?.nativeItemId === + "toolu_moved_shell", ), ); @@ -11456,7 +11483,12 @@ describe("ClaudeAdapterV2 background wake turns", () => { const roster = providerThreadRosterEvents(harness.events).at(-1)?.providerThread .pendingBackgroundTasks; assert.deepEqual(roster, [ - { taskId: longRunning.taskId, kind: "monitor", description: "Monitor 0" }, + { + taskId: longRunning.taskId, + kind: "monitor", + description: "Monitor 0", + nativeItemId: "toolu_monitor_0", + }, ]); }).pipe( Effect.provide( @@ -12816,7 +12848,12 @@ describe("ClaudeAdapterV2 background wake turns", () => { (event) => event.providerThread.id === providerThreadA.id, )?.providerThread.pendingBackgroundTasks; assert.deepEqual(rosterAAfterSettle ?? [], [ - { taskId: taskA, description: "work on A", kind: "command" }, + { + taskId: taskA, + description: "work on A", + kind: "command", + nativeItemId: "toolu-roster-a", + }, ]); assert.isTrue(yield* hasPendingBackgroundWork); assert.isTrue(yield* hasPendingBackgroundWorkForThread(providerThreadA)); diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts index a58f91124f16d..63a5d779a518d 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts @@ -3421,6 +3421,7 @@ function claudePendingBackgroundTask(input: { readonly description: string | undefined; // Undeclared SDK field: the subagent whose own background work this is. readonly parentTaskId: unknown; + readonly toolUseId: string | undefined; }): OrchestrationV2PendingBackgroundTask { return { taskId: input.taskId, @@ -3435,6 +3436,7 @@ function claudePendingBackgroundTask(input: { ...(typeof input.parentTaskId === "string" && input.parentTaskId.trim().length > 0 ? { parentTaskId: input.parentTaskId } : {}), + ...(input.toolUseId === undefined ? {} : { nativeItemId: input.toolUseId }), }; } @@ -3489,6 +3491,7 @@ function claudePendingBackgroundTasksFromRoster( function parseClaudeBackgroundTaskEntry( entry: unknown, monitorTasks: ReadonlyMap, + toolUseIds: ReadonlyMap, ): OrchestrationV2PendingBackgroundTask | null { if (entry === null || typeof entry !== "object") { return null; @@ -3509,6 +3512,7 @@ function parseClaudeBackgroundTaskEntry( startedByMonitor: monitorTasks.has(taskId), description: typeof description === "string" ? description : undefined, parentTaskId: Reflect.get(entry, "parent_task_id"), + toolUseId: toolUseIds.get(taskId), }); } @@ -5694,6 +5698,8 @@ export const makeClaudeAdapterV2 = Effect.fn("makeClaudeAdapterV2")(function* ( const lastKnownOpaqueTasks = yield* Ref.make( new Map(), ); + // Roster entries carry only Claude's task id; the timeline item is keyed by the tool call. + const toolUseIdsByTaskId = yield* Ref.make(new Map()); const claudeMonitors = yield* Ref.make<{ readonly calls: ReadonlySet; readonly tasks: ReadonlyMap< @@ -9619,8 +9625,19 @@ export const makeClaudeAdapterV2 = Effect.fn("makeClaudeAdapterV2")(function* ( (taskId, task) => task.nativeThreadId === input.nativeThreadId && !listedTaskIds.has(taskId), ); + const toolUseIds = new Map(yield* Ref.get(toolUseIdsByTaskId)); + // A live task keeps its tool call after the bounded map evicts it. + const current = rosterForNativeThread( + yield* Ref.get(pendingBackgroundTasksByNativeThread), + input.nativeThreadId, + ); + for (const [taskId, task] of current) { + if (task.nativeItemId !== undefined && !toolUseIds.has(taskId)) { + toolUseIds.set(taskId, task.nativeItemId); + } + } for (const entry of roster) { - const task = parseClaudeBackgroundTaskEntry(entry, monitorTasks); + const task = parseClaudeBackgroundTaskEntry(entry, monitorTasks, toolUseIds); if (task !== null) { nextTasks.push(task); } @@ -9628,7 +9645,22 @@ export const makeClaudeAdapterV2 = Effect.fn("makeClaudeAdapterV2")(function* ( yield* replacePendingBackgroundTasks(input.nativeThreadId, nextTasks); rosterChanged = true; } else if (message.type === "system" && message.subtype === "task_started") { - if (!isClaudeNonSubagentTask(message) || message.is_backgrounded === false) { + if (!isClaudeNonSubagentTask(message)) { + return false; + } + const toolUseId = message.tool_use_id?.trim() || undefined; + if (toolUseId !== undefined) { + // A foreground command can move to the background later, so remember every one. + yield* Ref.update(toolUseIdsByTaskId, (current) => { + const updated = new Map(current).set(message.task_id, toolUseId); + for (const oldest of updated.keys()) { + if (updated.size <= 64) break; + updated.delete(oldest); + } + return updated; + }); + } + if (message.is_backgrounded === false) { return false; } const launch = @@ -9661,11 +9693,18 @@ export const makeClaudeAdapterV2 = Effect.fn("makeClaudeAdapterV2")(function* ( description: typeof message.description === "string" ? message.description : undefined, parentTaskId: Reflect.get(message, "parent_task_id"), + toolUseId, }), }); rosterChanged = true; } else if (message.type === "system" && message.subtype === "task_notification") { yield* endClaudeMonitorTasks((taskId) => taskId === message.task_id); + yield* Ref.update(toolUseIdsByTaskId, (current) => { + if (!current.has(message.task_id)) return current; + const updated = new Map(current); + updated.delete(message.task_id); + return updated; + }); const removed = yield* clearPendingBackgroundTask( input.nativeThreadId, message.task_id, diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/claude_background_monitor_wake/output.ts b/apps/server/src/orchestration-v2/testkit/fixtures/claude_background_monitor_wake/output.ts index c1c3d9a171b0f..ee17f23075a35 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/claude_background_monitor_wake/output.ts +++ b/apps/server/src/orchestration-v2/testkit/fixtures/claude_background_monitor_wake/output.ts @@ -40,6 +40,7 @@ export function assertClaudeBackgroundMonitorWakeOutput( taskId: MONITOR_TASK_ID, description: "Background monitor test", kind: "monitor", + nativeItemId: "toolu_019b4EUbhEcYP4TS7vZn27N1", }); } assert.deepEqual(projection.providerThreads[0]?.pendingBackgroundTasks ?? [], []); diff --git a/apps/web/src/components/chat/ThreadActivityBanners.tsx b/apps/web/src/components/chat/ThreadActivityBanners.tsx index b12a6d1ae63b4..5e3444f7a13aa 100644 --- a/apps/web/src/components/chat/ThreadActivityBanners.tsx +++ b/apps/web/src/components/chat/ThreadActivityBanners.tsx @@ -182,9 +182,11 @@ export function backgroundWorkNowItem(input: { const presentation = presentPendingBackgroundWork(input.tasks); if (presentation === null) return null; const rows = presentation.items.map((task) => { + const itemKey = + input.tasks.find((pending) => pending.taskId === task.taskId)?.nativeItemId ?? task.taskId; // Same key derivePendingBackgroundWork gives turn-item tasks; subagent items carry progress. const item = input.turnItems.findLast( - (candidate) => (candidate.nativeItemRef?.nativeId || candidate.id) === task.taskId, + (candidate) => (candidate.nativeItemRef?.nativeId || candidate.id) === itemKey, ); const subagent = item?.type === "subagent" ? item : undefined; return { diff --git a/packages/contracts/src/orchestrationV2.ts b/packages/contracts/src/orchestrationV2.ts index fa94d70d73263..18ef7e9c941c0 100644 --- a/packages/contracts/src/orchestrationV2.ts +++ b/packages/contracts/src/orchestrationV2.ts @@ -1038,6 +1038,8 @@ const PendingBackgroundTaskFields = { description: Schema.optional(TrimmedNonEmptyString), /** The subagent task that started this work and waits on it. */ parentTaskId: Schema.optional(TrimmedNonEmptyString), + /** Native id of the turn item that started this work, when it is not `taskId`. */ + nativeItemId: Schema.optional(TrimmedNonEmptyString), /** * The agent declared it resumes when this work ends, so the thread holds like it does for a * subagent. Only the agent knows whether a command is a wait or a dev server it left running. From c2931a6e9cab0402e709777921e3961eeba0b751 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:40:34 -0800 Subject: [PATCH 035/922] fix(server): honor worktree prefixes when automatic naming fails (#35718) Co-authored-by: akash9676 --- .../ProviderEventIngestor.test.ts | 19 +-- .../orchestration-v2/ProviderEventIngestor.ts | 8 +- .../ThreadLaunchService.test.ts | 110 ++++++++++++++++++ .../orchestration-v2/ThreadLaunchService.ts | 47 +++++--- 4 files changed, 155 insertions(+), 29 deletions(-) diff --git a/apps/server/src/orchestration-v2/ProviderEventIngestor.test.ts b/apps/server/src/orchestration-v2/ProviderEventIngestor.test.ts index 520fea7c0575b..22d95a9013326 100644 --- a/apps/server/src/orchestration-v2/ProviderEventIngestor.test.ts +++ b/apps/server/src/orchestration-v2/ProviderEventIngestor.test.ts @@ -1863,15 +1863,18 @@ layer("ProviderEventIngestorV2", (it) => { ); it.effect.each([ - { parentMoved: false, failure: null }, - { parentMoved: true, failure: null }, - { parentMoved: false, failure: "write" }, - { parentMoved: false, failure: "git" }, + { parentMoved: false, failure: null, temporaryBranch: "t3/abcd1234" }, + { parentMoved: true, failure: null, temporaryBranch: "t3/abcd1234" }, + { parentMoved: false, failure: "write", temporaryBranch: "t3/abcd1234" }, + { parentMoved: false, failure: "git", temporaryBranch: "t3/abcd1234" }, + { parentMoved: false, failure: null, temporaryBranch: "my-prefix/abcd1234" }, ])( "rechecks a pending native child's branch after the rename scan: %j", - ({ parentMoved, failure }) => + ({ parentMoved, failure, temporaryBranch }) => Effect.gen(function* () { const { worktreePath, command } = yield* makeSharedWorktree; + if (temporaryBranch !== "t3/abcd1234") + yield* command(worktreePath, ["branch", "-m", temporaryBranch]); const git = yield* GitVcsDriver.GitVcsDriver; const now = yield* DateTime.now; const eventSink = yield* EventSink.EventSinkV2; @@ -1881,13 +1884,13 @@ layer("ProviderEventIngestorV2", (it) => { if (rootEvent.type !== "thread.created") throw new Error("Expected thread fixture"); const parent = { ...rootEvent.payload, - branch: "t3/abcd1234", + branch: temporaryBranch, worktreePath, }; yield* eventSink.write({ events: [{ ...rootEvent, payload: parent }] }); const childId = ids.derive.threadFromProviderThread({ driver: CODEX_DRIVER, - nativeThreadId: `child-created-during-rename:${parentMoved}:${failure}`, + nativeThreadId: `child-created-during-rename:${parentMoved}:${failure}:${temporaryBranch}`, }); const beforeCommit = yield* Deferred.make< void, @@ -2056,7 +2059,7 @@ layer("ProviderEventIngestorV2", (it) => { }); assert.equal((yield* projections.getThread(childId)).branch, branch); assert.equal(stored.length, 1); - assert.equal(gitReads, scenario === "explicit" ? 0 : 1); + assert.equal(gitReads, 1); }), ); diff --git a/apps/server/src/orchestration-v2/ProviderEventIngestor.ts b/apps/server/src/orchestration-v2/ProviderEventIngestor.ts index 623fddb491108..6fd6e7bc3129c 100644 --- a/apps/server/src/orchestration-v2/ProviderEventIngestor.ts +++ b/apps/server/src/orchestration-v2/ProviderEventIngestor.ts @@ -25,7 +25,6 @@ import * as Schema from "effect/Schema"; import * as SqlError from "effect/sql/SqlError"; import { AgentScope } from "@t3tools/shared/AgentScope"; -import { isTemporaryWorktreeBranch } from "@t3tools/shared/git"; import { modelSelectionsEqual } from "@t3tools/shared/model"; import { ProviderTurnAnalytics, @@ -771,12 +770,7 @@ export const layer: Layer.Layer< ); if (created?.event.type !== "thread.created") return storedEvents; const child = created.event.payload; - if ( - child.worktreePath === null || - child.branch === null || - !isTemporaryWorktreeBranch(child.branch) - ) - return storedEvents; + if (child.worktreePath === null || child.branch === null) return storedEvents; // Git renames before scanning committed threads. If that scan missed this // creation, HEAD already has the new name, even if the parent moved away. const branch = yield* git.resolveBranchName(child.worktreePath, "HEAD"); diff --git a/apps/server/src/orchestration-v2/ThreadLaunchService.test.ts b/apps/server/src/orchestration-v2/ThreadLaunchService.test.ts index 2505a2b3813fa..781054c969e98 100644 --- a/apps/server/src/orchestration-v2/ThreadLaunchService.test.ts +++ b/apps/server/src/orchestration-v2/ThreadLaunchService.test.ts @@ -26,6 +26,7 @@ import { type ServerProvider, ThreadId, TextGenerationError, + ServerSettingsError, } from "@t3tools/contracts"; import * as Cause from "effect/Cause"; import * as Deferred from "effect/Deferred"; @@ -131,6 +132,7 @@ interface HarnessOptions { readonly generateTitle?: TextGeneration.TextGeneration["Service"]["generateThreadTitle"]; readonly generateBranchName?: TextGeneration.TextGeneration["Service"]["generateBranchName"]; readonly serverSettings?: Parameters[0]; + readonly getLaunchSettings?: ServerSettings.ServerSettingsService["Service"]["getSettings"]; readonly providers?: ReadonlyArray; readonly git?: Partial; } @@ -244,6 +246,11 @@ function makeHarness(options: HarnessOptions = {}) { layerReceipts, layerOrchestrator, IdAllocator.layer, + options.getLaunchSettings === undefined + ? Layer.empty + : Layer.mock(ServerSettings.ServerSettingsService)({ + getSettings: options.getLaunchSettings, + }), ), ), ); @@ -969,6 +976,109 @@ const preparationSettled = (threadId: ThreadId) => return yield* threads.getThreadProjection(threadId); }); +it.effect.each([ + { prefix: "my-prefix", collision: null, expected: /^my-prefix\/[0-9a-f]{8}$/ }, + { prefix: "my-prefix", collision: "my-prefix", expected: /^my-prefix-[0-9a-f]{8}$/ }, + { prefix: "team/topic", collision: "team", expected: /^team-topic-[0-9a-f]{8}$/ }, +])("keeps prefix '$prefix' with collision '$collision' when naming fails", (scenario) => + Effect.gen(function* () { + const namingAttempted = yield* Deferred.make(); + const harness = makeHarness({ + serverSettings: { + branchNamePrefix: "global-prefix", + projectSettingsOverrides: { + [projectId]: { branchNamingMode: "static", branchNamePrefix: scenario.prefix }, + }, + }, + hasCommit: ({ refName }) => Effect.succeed(refName === `refs/heads/${scenario.collision}`), + generateBranchName: () => + Deferred.succeed(namingAttempted, undefined).pipe( + Effect.andThen( + Effect.fail( + new TextGenerationError({ operation: "generateBranchName", detail: "Unavailable" }), + ), + ), + ), + }); + yield* Effect.gen(function* () { + const launches = yield* ThreadLaunch.ThreadLaunchService; + const launched = yield* launches.launch( + launchInput({ + command: "prefix-launch", + thread: "prefix-thread", + message: "Fix the parser", + workspace: { type: "worktree", baseRef: "main" }, + }), + ); + const projection = yield* preparationSettled(launched.threadId); + assert.match(projection.thread.branch!, scenario.expected); + yield* Deferred.await(namingAttempted); + assert.equal(projection.runs[0]?.status, "starting"); + assert.equal(harness.createWorktree.mock.calls[0]?.[0]?.newRefName, projection.thread.branch); + assert.equal(harness.renameBranch.mock.calls.length, 0); + assert.isFalse(projection.turnItems.some((item) => item.type === "error")); + }).pipe(Effect.provide(harness.layer)); + }), +); + +it.effect( + "starts a worktree with the default temporary name when settings secrets cannot be read", + () => { + const harness = makeHarness({ + getLaunchSettings: Effect.fail( + new ServerSettingsError({ settingsPath: "/settings.json", operation: "read-secret" }), + ), + }); + return Effect.gen(function* () { + const launches = yield* ThreadLaunch.ThreadLaunchService; + const launched = yield* launches.launch( + launchInput({ + command: "settings-fallback", + thread: "settings-fallback-thread", + message: "Fix the parser", + workspace: { type: "worktree", baseRef: "main" }, + }), + ); + const projection = yield* preparationSettled(launched.threadId); + assert.equal(projection.runs[0]?.status, "starting"); + assert.match(projection.thread.branch!, /^t3\/[0-9a-f]{8}$/); + assert.equal(harness.createWorktree.mock.calls[0]?.[0]?.newRefName, projection.thread.branch); + assert.equal(harness.runSetup.mock.calls.length, 1); + assert.equal(harness.renameBranch.mock.calls.length, 0); + assert.isFalse(projection.turnItems.some((item) => item.type === "error")); + }).pipe(Effect.provide(harness.layer)); + }, +); + +it.effect("renames a temporary branch with a configured prefix when generation succeeds", () => { + const harness = makeHarness({ + serverSettings: { branchNamingMode: "static", branchNamePrefix: "my-prefix" }, + generateBranchName: () => Effect.succeed({ branch: "my-prefix/fix-parser" }), + }); + return Effect.gen(function* () { + const launches = yield* ThreadLaunch.ThreadLaunchService; + const threads = yield* ThreadManagement.ThreadManagementService; + const launched = yield* launches.launch( + launchInput({ + command: "prefix-rename", + thread: "prefix-rename-thread", + message: "Fix the parser", + workspace: { type: "worktree", baseRef: "main" }, + }), + ); + yield* threads.streamStoredEventsFrom({ threadId: launched.threadId }).pipe( + Stream.filter((stored) => stored.commandId === "prefix-rename:branch-rename"), + Stream.runHead, + ); + const projection = yield* threads.getThreadProjection(launched.threadId); + assert.equal(projection.thread.branch, "my-prefix/fix-parser"); + assert.match( + harness.renameBranch.mock.calls[0]?.[0]?.oldBranch ?? "", + /^my-prefix\/[0-9a-f]{8}$/, + ); + }).pipe(Effect.provide(harness.layer)); +}); + function scheduledTaskInput(id: string, targetProjectId: ProjectId) { return { id: ScheduledTaskId.make(id), diff --git a/apps/server/src/orchestration-v2/ThreadLaunchService.ts b/apps/server/src/orchestration-v2/ThreadLaunchService.ts index f94a4e859053a..b354ba6737e30 100644 --- a/apps/server/src/orchestration-v2/ThreadLaunchService.ts +++ b/apps/server/src/orchestration-v2/ThreadLaunchService.ts @@ -37,8 +37,8 @@ import * as Stream from "effect/Stream"; import { buildTemporaryWorktreeBranchName, flattenTemporaryWorktreeBranchName, + formatGeneratedBranchName, isTemporaryWorktreeBranch, - WORKTREE_BRANCH_PREFIX, } from "@t3tools/shared/git"; import * as GitWorkflow from "../git/GitWorkflowService.ts"; @@ -491,10 +491,23 @@ const make = Effect.gen(function* () { ); const requestedBranch = input.workspaceStrategy.branch; + const generatedTemporaryBranch = + input.workspaceStrategy.type === "worktree" && requestedBranch === undefined; let branch: string | null; - if (input.workspaceStrategy.type === "worktree" && requestedBranch === undefined) { + if (generatedTemporaryBranch) { const uuid = yield* randomUuidV4; branch = buildTemporaryWorktreeBranchName(() => uuid.replaceAll("-", "")); + const settings = yield* serverSettings.getSettings.pipe( + Effect.map((settings) => resolveProjectSettings(settings, input.projectId).settings), + Effect.orElseSucceed(() => null), + ); + if (settings?.branchNamingMode === "static") { + branch = formatGeneratedBranchName(branch.slice(-8), { + mode: "static", + prefix: settings.branchNamePrefix, + instructions: "", + }); + } } else { branch = yield* launchBranch(input.workspaceStrategy, project.workspaceRoot); } @@ -541,17 +554,23 @@ const make = Effect.gen(function* () { } } if (shouldFetch) yield* setupTracker.stageStatus(threadId, "fetch", "done"); - if ( - branch !== null && - isTemporaryWorktreeBranch(branch) && - (yield* git - .hasCommit({ - cwd: project.workspaceRoot, - refName: `refs/heads/${WORKTREE_BRANCH_PREFIX}`, - }) - .pipe(Effect.mapError(mapError(input, "provision-worktree", threadId)))) - ) { - branch = flattenTemporaryWorktreeBranchName(branch); + if (branch !== null && (generatedTemporaryBranch || isTemporaryWorktreeBranch(branch))) { + const parts = branch.split("/"); + for (let depth = 1; depth < parts.length; depth++) { + if ( + yield* git + .hasCommit({ + cwd: project.workspaceRoot, + refName: `refs/heads/${parts.slice(0, depth).join("/")}`, + }) + .pipe(Effect.mapError(mapError(input, "provision-worktree", threadId))) + ) { + branch = generatedTemporaryBranch + ? branch.replaceAll("/", "-") + : flattenTemporaryWorktreeBranchName(branch); + break; + } + } } yield* setupTracker.stageStatus(threadId, "checkout", "running"); let submoduleProgressReportedAt = Number.NEGATIVE_INFINITY; @@ -649,7 +668,7 @@ const make = Effect.gen(function* () { worktreePath !== null && branch !== null && initialMessage !== undefined && - isTemporaryWorktreeBranch(branch) + (generatedTemporaryBranch || isTemporaryWorktreeBranch(branch)) ) { const oldBranch = branch; const worktreeCwd = worktreePath; From 7bf2a43c09855965bf740f2f204809a2075bc807 Mon Sep 17 00:00:00 2001 From: kirat02 <142911687+Kirat0201@users.noreply.github.com> Date: Fri, 13 Nov 2026 06:11:38 +0530 Subject: [PATCH 036/922] fix(git): refuse remote switches that would silently detach HEAD (#35687) Co-authored-by: Julius Marminge --- apps/server/src/vcs/GitVcsDriverCore.test.ts | 52 ++++++++++++++++++++ apps/server/src/vcs/GitVcsDriverCore.ts | 16 +++--- 2 files changed, 59 insertions(+), 9 deletions(-) diff --git a/apps/server/src/vcs/GitVcsDriverCore.test.ts b/apps/server/src/vcs/GitVcsDriverCore.test.ts index 8dda59c243dc5..fba2a96d5f7f3 100644 --- a/apps/server/src/vcs/GitVcsDriverCore.test.ts +++ b/apps/server/src/vcs/GitVcsDriverCore.test.ts @@ -4939,6 +4939,58 @@ it.layer(layerTest)("GitVcsDriver core integration", (it) => { }), ); + it.effect.each(["untracked", "other-remote"] as const)( + "refuses a remote switch that collides with a local branch (%s)", + (tracking) => + Effect.gen(function* () { + const cwd = yield* makeTmpDir(); + const { initialBranch } = yield* initRepoWithCommit(cwd); + const remote = yield* makeTmpDir("git-remote-"); + yield* git(remote, ["init", "--bare"]); + yield* git(cwd, ["remote", "add", "upstream", remote]); + yield* git(cwd, ["push", "upstream", "HEAD:refs/heads/feature"]); + yield* git(cwd, ["fetch", "upstream"]); + yield* git(cwd, ["checkout", "--no-track", "-b", "feature"]); + yield* git(cwd, ["commit", "--allow-empty", "-m", "Local work"]); + if (tracking === "other-remote") { + yield* git(cwd, ["remote", "add", "origin", remote]); + yield* git(cwd, ["fetch", "origin"]); + yield* git(cwd, ["branch", "--set-upstream-to=origin/feature", "feature"]); + } + const featureHead = yield* git(cwd, ["rev-parse", "feature"]); + const upstream = yield* git(cwd, [ + "for-each-ref", + "--format=%(upstream)", + "refs/heads/feature", + ]); + yield* git(cwd, ["checkout", initialBranch]); + const head = yield* git(cwd, ["rev-parse", "HEAD"]); + yield* writeTextFile(cwd, "README.md", "Uncommitted work\n"); + const driver = yield* GitVcsDriver.GitVcsDriver; + + const result = yield* driver + .switchRef({ cwd, refName: "upstream/feature" }) + .pipe(Effect.result); + assert.isTrue(Result.isFailure(result)); + assert.equal(yield* git(cwd, ["branch", "--show-current"]), initialBranch); + assert.equal(yield* git(cwd, ["rev-parse", "HEAD"]), head); + assert.equal(yield* git(cwd, ["rev-parse", "feature"]), featureHead); + assert.equal( + yield* git(cwd, ["for-each-ref", "--format=%(upstream)", "refs/heads/feature"]), + upstream, + ); + assert.equal( + yield* (yield* FileSystem.FileSystem).readFileString( + (yield* Path.Path).join(cwd, "README.md"), + ), + "Uncommitted work\n", + ); + // Selecting the existing local branch remains an explicit, attached checkout. + assert.equal((yield* driver.switchRef({ cwd, refName: "feature" })).refName, "feature"); + assert.equal(yield* git(cwd, ["symbolic-ref", "HEAD"]), "refs/heads/feature"); + }), + ); + it.effect("rejects a missing branch without restoring a matching dirty file", () => Effect.gen(function* () { const cwd = yield* makeTmpDir(); diff --git a/apps/server/src/vcs/GitVcsDriverCore.ts b/apps/server/src/vcs/GitVcsDriverCore.ts index e0b372ebc1e87..ee1f7bb9cdd06 100644 --- a/apps/server/src/vcs/GitVcsDriverCore.ts +++ b/apps/server/src/vcs/GitVcsDriverCore.ts @@ -5309,15 +5309,13 @@ export const makeGitVcsDriverCore = Effect.fn("makeGitVcsDriverCore")(function* const checkoutArgs = localInputExists ? ["checkout", input.refName] - : remoteExists && !localTrackingBranch && localTrackedBranchTargetExists - ? ["checkout", input.refName] - : newTrackingBranch - ? ["checkout", newTrackingBranch] - : remoteExists && !localTrackingBranch - ? ["checkout", "--track", input.refName] - : remoteExists && localTrackingBranch - ? ["checkout", localTrackingBranch] - : ["checkout", input.refName]; + : newTrackingBranch + ? ["checkout", newTrackingBranch] + : remoteExists && !localTrackingBranch + ? ["checkout", "--track", input.refName] + : remoteExists && localTrackingBranch + ? ["checkout", localTrackingBranch] + : ["checkout", input.refName]; yield* refuseOptionLikeRefName("GitVcsDriver.switchRef", input.cwd, checkoutArgs.at(-1)); From 0465d4a87d0d1571f45c2101f383471325cc29bf Mon Sep 17 00:00:00 2001 From: Alex Southwell Date: Fri, 13 Nov 2026 11:48:53 +1100 Subject: [PATCH 037/922] fix(mobile): retain inline image zoom on iOS (#33852) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Julius Marminge --- .../src/features/threads/ThreadFeed.tsx | 81 +++---- .../threads/ThreadMarkdownImage.test.tsx | 207 +++++++++++++++++- .../features/threads/ThreadMarkdownImage.tsx | 53 +++-- .../threads/ZoomableImagePressable.tsx | 177 +++++++++++++++ apps/mobile/src/lib/filePreview.test.ts | 4 + 5 files changed, 450 insertions(+), 72 deletions(-) create mode 100644 apps/mobile/src/features/threads/ZoomableImagePressable.tsx diff --git a/apps/mobile/src/features/threads/ThreadFeed.tsx b/apps/mobile/src/features/threads/ThreadFeed.tsx index 39cc885e4d2e3..8e8c1c4955b29 100644 --- a/apps/mobile/src/features/threads/ThreadFeed.tsx +++ b/apps/mobile/src/features/threads/ThreadFeed.tsx @@ -277,6 +277,7 @@ import { ThreadMarkdownImageUnavailable, ThreadMarkdownImageView, } from "./ThreadMarkdownImage"; +import { ZoomableImagePressable } from "./ZoomableImagePressable"; import { openSettings } from "../settings/settings-navigation"; import { useSelectWorkspaceDetail } from "../layout/workspace/useSelectWorkspaceDetail"; import { formatMessageTimestamp } from "./messageTimestamp"; @@ -471,6 +472,8 @@ function MessageImage(props: { readonly className: string; readonly maxWidth?: number; readonly height?: number; + readonly accessibilityLabel: string; + readonly onPress: () => void; readonly onLoad?: () => void; readonly onError?: () => void; }) { @@ -485,11 +488,13 @@ function MessageImage(props: { }) : null; return ( - { - if (props.maxWidth !== undefined) setSize(event.source); - props.onLoad?.(); - }} - onError={props.onError} - /> + > + { + if (props.maxWidth !== undefined) setSize(event.source); + props.onLoad?.(); + }} + onError={props.onError} + /> + ); } @@ -550,8 +561,12 @@ function MessageAttachmentImage(props: { return ( - props.onPressPreview( @@ -570,22 +585,15 @@ function MessageAttachmentImage(props: { }), ) } - > - { - retriedImage.current = false; - }} - onError={() => { - if (retriedImage.current) return; - retriedImage.current = true; - void refreshAssetUrl(); - }} - /> - + onLoad={() => { + retriedImage.current = false; + }} + onError={() => { + if (retriedImage.current) return; + retriedImage.current = true; + void refreshAssetUrl(); + }} + /> ); } @@ -960,21 +968,18 @@ function PendingMessageMedia(props: { if (isImageAttachment(attachment)) { const uri = fileBacked ? preview.uri : (attachment.dataUrl ?? attachment.previewUri); return ( - { const source = composerImageGallery([attachment])[0]; if (source) props.onPressPreview(withGallery(source)); }} - > - - + /> ); } if (preview.uri === null) { diff --git a/apps/mobile/src/features/threads/ThreadMarkdownImage.test.tsx b/apps/mobile/src/features/threads/ThreadMarkdownImage.test.tsx index 209cccf8d2ef0..82f5cc62a7b68 100644 --- a/apps/mobile/src/features/threads/ThreadMarkdownImage.test.tsx +++ b/apps/mobile/src/features/threads/ThreadMarkdownImage.test.tsx @@ -3,19 +3,71 @@ import { act } from "react"; import { createRoot } from "react-dom/client"; import { expect, it, vi } from "vite-plus/test"; +type HandlerProps = Record void) | undefined>; +type GestureHandlers = Record void>; +type Transform = [{ translateX: number }, { translateY: number }, { scale: number }]; + const harness = vi.hoisted(() => ({ failImage: () => {}, loadImage: (_event: { source: { width: number; height: number } }) => {}, Passthrough: ({ children }: { children?: unknown }) => children, + pressable: {} as HandlerProps, + gestures: {} as Record, + contentStyle: () => ({}) as { transform?: Transform }, })); -vi.mock("react-native", () => ({ - Pressable: harness.Passthrough, - StyleSheet: { absoluteFill: {} }, - View: ({ children, style }: { children?: ReactNode; style?: unknown }) => ( +vi.mock("react-native", () => { + const View = ({ children, style }: { children?: ReactNode; style?: unknown }) => (

- ), -})); + ); + return { + Platform: { OS: "ios" }, + Pressable: (props: HandlerProps & { children?: ReactNode; style?: unknown }) => { + harness.pressable = props; + return {props.children}; + }, + StyleSheet: { absoluteFill: {} }, + View, + }; +}); +vi.mock("react-native-gesture-handler", () => { + // Records each gesture's callbacks so a test can drive the worklets with native-shaped events. + const builder = (kind: string) => () => { + const handlers: GestureHandlers = {}; + harness.gestures[kind] = handlers; + const gesture: object = new Proxy( + {}, + { + get: (_target, name) => (callback: GestureHandlers[string]) => { + if (typeof name === "string" && name.startsWith("on")) handlers[name] = callback; + return gesture; + }, + }, + ); + return gesture; + }; + return { + Gesture: { Pinch: builder("pinch"), Pan: builder("pan"), Simultaneous: () => ({}) }, + GestureDetector: ({ children }: { children?: ReactNode }) => children, + }; +}); +vi.mock("react-native-reanimated", async () => { + const { useState } = await import("react"); + return { + default: { View: ({ children }: { children?: ReactNode }) =>
{children}
}, + runOnJS: (callback: () => void) => callback, + // Reads the UI-thread style on demand, as Reanimated would after a gesture frame. + useAnimatedStyle: (updater: () => { transform?: Transform }) => { + harness.contentStyle = updater; + return {}; + }, + useSharedValue: (initial: T) => + useState(() => { + let value = initial; + return { get: () => value, set: (next: T) => void (value = next) }; + })[0], + }; +}); vi.mock("expo-image", () => ({ Image: (props: { onError: () => void; @@ -203,3 +255,146 @@ it("does not parse an obsolete SVG response after its last reader unmounts", asy registry.dispose(); } }); + +const zoom = () => { + const [{ translateX }, { translateY }, { scale }] = harness.contentStyle().transform!; + // Clamping at fit can yield -0, which is the same position. + return { scale, x: translateX + 0, y: translateY + 0 }; +}; +const pinch = (phase: "onStart" | "onUpdate", focalX: number, focalY: number, scale: number) => + act(async () => harness.gestures.pinch![phase]!({ focalX, focalY, scale, numberOfPointers: 2 })); +const endPinch = () => act(async () => harness.gestures.pinch!.onFinalize!({})); +const layout = (width: number, height: number) => + act(async () => harness.pressable.onLayout?.({ nativeEvent: { layout: { width, height } } })); +const markdownImage = (sourceKey: string, onPressPreview: () => void = () => {}) => ( + + + +); + +it("does not open the preview when a touch on the inline image pinches or pans it", async () => { + (globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true; + const root = createRoot(document.createElement("div")); + const onPressPreview = vi.fn(); + const touch = (fingers: number) => + act(async () => + harness.pressable.onTouchStart?.({ + nativeEvent: { touches: Array.from({ length: fingers }, () => ({})) }, + }), + ); + const release = () => + act(async () => harness.pressable.onPress?.({ nativeEvent: { identifier: 1 } })); + try { + await act(async () => root.render(markdownImage("hero", onPressPreview))); + await touch(1); + await touch(2); + await release(); + expect(onPressPreview).not.toHaveBeenCalled(); + + await touch(1); + await act(async () => harness.gestures.pan!.onStart!({ translationX: 5, translationY: 0 })); + await release(); + expect(onPressPreview).not.toHaveBeenCalled(); + + await touch(1); + await release(); + expect(onPressPreview).toHaveBeenCalledOnce(); + + // VoiceOver activation has no touch, so an earlier pinch must not swallow it. + await touch(2); + await act(async () => harness.pressable.onPress?.({ nativeEvent: {} })); + expect(onPressPreview).toHaveBeenCalledTimes(2); + } finally { + await act(async () => root.unmount()); + } +}); + +it("zooms the inline image around the pinch and keeps it until the source or frame changes", async () => { + (globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true; + const root = createRoot(document.createElement("div")); + const touchPan = () => { + const manager = { fail: vi.fn() }; + harness.gestures.pan!.onTouchesDown!({}, manager); + return manager; + }; + try { + await act(async () => root.render(markdownImage("a"))); + // The frame center is (172.5, 101); the pinch is off center. + await layout(345, 202); + await pinch("onStart", 300, 150, 1); + await pinch("onUpdate", 300, 150, 2); + expect(zoom()).toEqual({ scale: 2, x: -127.5, y: -49 }); + await pinch("onUpdate", 280, 140, 2); + expect(zoom()).toEqual({ scale: 2, x: -147.5, y: -59 }); + await act(async () => + harness.gestures.pinch!.onUpdate!({ focalX: 90, focalY: 90, scale: 2, numberOfPointers: 1 }), + ); + expect(zoom()).toEqual({ scale: 2, x: -147.5, y: -59 }); + await endPinch(); + + await act(async () => harness.loadImage({ source: { width: 1000, height: 585 } })); + await act(async () => root.render(markdownImage("a"))); + await layout(345, 202); + expect(zoom()).toEqual({ scale: 2, x: -147.5, y: -59 }); + + await pinch("onStart", 100, 50, 1); + await pinch("onUpdate", 100, 50, 1.5); + expect(zoom()).toEqual({ scale: 3, x: -185, y: -63 }); + await pinch("onUpdate", 100, 50, 10); + expect(zoom().scale).toBe(6); + await endPinch(); + + const zoomedPan = touchPan(); + await act(async () => harness.gestures.pan!.onStart!({ translationX: 5, translationY: 0 })); + await act(async () => + harness.gestures.pan!.onUpdate!({ translationX: 5000, translationY: -5000 }), + ); + expect(zoomedPan.fail).not.toHaveBeenCalled(); + expect(zoom()).toEqual({ scale: 6, x: 862.5, y: -505 }); + + await pinch("onStart", 172, 100, 1); + await pinch("onUpdate", 172, 100, 0.01); + await endPinch(); + expect(zoom()).toEqual({ scale: 1, x: 0, y: 0 }); + expect(touchPan().fail).toHaveBeenCalledOnce(); + + await pinch("onStart", 300, 150, 1); + await pinch("onUpdate", 300, 150, 2); + await endPinch(); + await layout(300, 175); + expect(zoom()).toEqual({ scale: 1, x: 0, y: 0 }); + + await pinch("onStart", 300, 150, 1); + await pinch("onUpdate", 300, 150, 2); + await endPinch(); + await act(async () => root.render(markdownImage("b"))); + expect(zoom()).toEqual({ scale: 1, x: 0, y: 0 }); + + for (const panFirst of [true, false]) { + await act(async () => root.render(markdownImage(`handoff-${panFirst}`))); + await layout(300, 200); + await pinch("onStart", 150, 100, 1); + await pinch("onUpdate", 150, 100, 2); + await endPinch(); + await act(async () => harness.gestures.pan!.onStart!({ translationX: 0, translationY: 0 })); + await pinch("onStart", 150, 100, 1); + const panUpdate = () => + act(async () => harness.gestures.pan!.onUpdate!({ translationX: 10, translationY: 0 })); + if (panFirst) await panUpdate(); + await pinch("onUpdate", 150, 100, 1.5); + if (!panFirst) await panUpdate(); + await endPinch(); + await act(async () => harness.gestures.pan!.onUpdate!({ translationX: 20, translationY: 0 })); + expect(zoom()).toEqual({ scale: 3, x: 10, y: 0 }); + } + } finally { + await act(async () => root.unmount()); + } +}); diff --git a/apps/mobile/src/features/threads/ThreadMarkdownImage.tsx b/apps/mobile/src/features/threads/ThreadMarkdownImage.tsx index da9ba935838c0..90eb97f4e3b8a 100644 --- a/apps/mobile/src/features/threads/ThreadMarkdownImage.tsx +++ b/apps/mobile/src/features/threads/ThreadMarkdownImage.tsx @@ -20,6 +20,7 @@ import { useMediaActions } from "../../state/mediaActions"; import type { MediaActionsSource } from "../../lib/mediaActionsSource"; import { useAssetUrlState } from "../../state/assets"; import { WorkspaceMutationIdContext } from "./workspaceMutationIdContext"; +import { ZoomableImagePressable } from "./ZoomableImagePressable"; import { assetImageCacheKey } from "../../lib/assetImageSource"; import { MARKDOWN_IMAGE_MAX_WIDTH, @@ -167,7 +168,8 @@ export function ThreadMarkdownImageView(props: { ) : ( - - - {props.format === "svg" ? ( - - ) : ( - - // Only the first decode counts: later loads report the bitmap - // downsampled for the current frame (969 vs 970 wide), so keeping - // them resizes the frame, which reloads the image, and so on. - setDecoded((current) => - current?.sourceKey === props.sourceKey - ? current - : { sourceKey: props.sourceKey, size }, - ) - } - onError={() => setFailure({ uri: props.uri, failed: true })} - /> - )} - - + {props.format === "svg" ? ( + + ) : ( + + // Only the first decode counts: later loads report the bitmap + // downsampled for the current frame (969 vs 970 wide), so keeping + // them resizes the frame, which reloads the image, and so on. + setDecoded((current) => + current?.sourceKey === props.sourceKey + ? current + : { sourceKey: props.sourceKey, size }, + ) + } + onError={() => setFailure({ uri: props.uri, failed: true })} + /> + )} + )} diff --git a/apps/mobile/src/features/threads/ZoomableImagePressable.tsx b/apps/mobile/src/features/threads/ZoomableImagePressable.tsx new file mode 100644 index 0000000000000..b0cb7818d132c --- /dev/null +++ b/apps/mobile/src/features/threads/ZoomableImagePressable.tsx @@ -0,0 +1,177 @@ +import { useEffectEvent, useRef, useState, type ComponentProps, type ReactNode } from "react"; +import { Platform, Pressable, StyleSheet } from "react-native"; +import { Gesture, GestureDetector } from "react-native-gesture-handler"; +import Animated, { runOnJS, useAnimatedStyle, useSharedValue } from "react-native-reanimated"; + +const MAX_INLINE_ZOOM = 6; +// Below UIScrollView's drag hysteresis, so a zoomed pan wins over the feed scroll. +const ZOOMED_PAN_MIN_DISTANCE = 5; + +type Zoom = { readonly scale: number; readonly x: number; readonly y: number }; +type Size = { readonly width: number; readonly height: number }; + +const FIT: Zoom = { scale: 1, x: 0, y: 0 }; + +/** Keeps the scaled content covering the frame: translation is about the frame center. */ +function clampZoom(zoom: Zoom, size: Size): Zoom { + "worklet"; + const scale = Math.min(Math.max(zoom.scale, 1), MAX_INLINE_ZOOM); + const maxX = ((scale - 1) * size.width) / 2; + const maxY = ((scale - 1) * size.height) / 2; + return { + scale, + x: Math.min(Math.max(zoom.x, -maxX), maxX), + y: Math.min(Math.max(zoom.y, -maxY), maxY), + }; +} + +type ZoomableImagePressableProps = Omit, "children"> & { + readonly children: ReactNode; +}; + +/** + * Inline chat image that pinch-zooms in place on iOS. Key it by image source so a + * new source starts at fit; ordinary rerenders keep the zoom and offset. + */ +export function ZoomableImagePressable(props: ZoomableImagePressableProps) { + if (Platform.OS !== "ios") return ; + return ; +} + +function IosZoomableImagePressable({ + children, + onTouchStart, + onPress, + onLayout, + ...pressableProps +}: ZoomableImagePressableProps) { + const gestured = useRef(false); + const layoutSize = useRef(null); + const zoom = useSharedValue(FIT); + const size = useSharedValue({ width: 0, height: 0 }); + const pinching = useSharedValue(false); + const pinchStart = useSharedValue({ zoom: FIT, focalX: 0, focalY: 0, scale: 1, pointers: 0 }); + const panStart = useSharedValue({ zoom: FIT, translationX: 0, translationY: 0 }); + + const markGestured = useEffectEvent(() => { + gestured.current = true; + }); + const [gesture] = useState(() => { + // Focal points arrive in the untransformed frame; the transform is about its center. + const pinch = Gesture.Pinch() + .onStart((event) => { + const frame = size.get(); + pinching.set(true); + pinchStart.set({ + zoom: zoom.get(), + focalX: event.focalX - frame.width / 2, + focalY: event.focalY - frame.height / 2, + scale: event.scale, + pointers: event.numberOfPointers, + }); + runOnJS(markGestured)(); + }) + .onUpdate((event) => { + const frame = size.get(); + const start = pinchStart.get(); + const focalX = event.focalX - frame.width / 2; + const focalY = event.focalY - frame.height / 2; + if (event.numberOfPointers !== start.pointers) { + // A lifted or added finger jumps the focal point; continue from here instead. + pinchStart.set({ + zoom: zoom.get(), + focalX, + focalY, + scale: event.scale, + pointers: event.numberOfPointers, + }); + return; + } + const scale = Math.min( + Math.max((start.zoom.scale * event.scale) / start.scale, 1), + MAX_INLINE_ZOOM, + ); + // Keep the content point that started under the fingers under them. + const contentX = (start.focalX - start.zoom.x) / start.zoom.scale; + const contentY = (start.focalY - start.zoom.y) / start.zoom.scale; + zoom.set( + clampZoom({ scale, x: focalX - scale * contentX, y: focalY - scale * contentY }, frame), + ); + }) + .onFinalize(() => { + panStart.set({ ...panStart.get(), zoom: zoom.get() }); + pinching.set(false); + }); + const pan = Gesture.Pan() + .minDistance(ZOOMED_PAN_MIN_DISTANCE) + .onTouchesDown((_event, manager) => { + // At fit, a one-finger drag belongs to the feed. + if (zoom.get().scale <= 1) manager.fail(); + }) + .onStart((event) => { + panStart.set({ + zoom: zoom.get(), + translationX: event.translationX, + translationY: event.translationY, + }); + runOnJS(markGestured)(); + }) + .onUpdate((event) => { + if (pinching.get()) { + // The pinch owns the transform; resume panning from wherever it leaves it. + panStart.set({ + zoom: zoom.get(), + translationX: event.translationX, + translationY: event.translationY, + }); + return; + } + const start = panStart.get(); + zoom.set( + clampZoom( + { + scale: start.zoom.scale, + x: start.zoom.x + event.translationX - start.translationX, + y: start.zoom.y + event.translationY - start.translationY, + }, + size.get(), + ), + ); + }); + return Gesture.Simultaneous(pinch, pan); + }); + const contentStyle = useAnimatedStyle(() => { + const { scale, x, y } = zoom.get(); + return { transform: [{ translateX: x }, { translateY: y }, { scale }] }; + }); + + return ( + + { + gestured.current = event.nativeEvent.touches.length > 1; + onTouchStart?.(event); + }} + onPress={(event) => { + // Accessibility activation carries no touch identifier and no gesture. + if (typeof event.nativeEvent.identifier === "number" && gestured.current) return; + onPress?.(event); + }} + onLayout={(event) => { + const { width, height } = event.nativeEvent.layout; + const previous = layoutSize.current; + if (previous?.width !== width || previous?.height !== height) { + // The old offsets no longer fit the new frame, so a resize starts over at fit. + layoutSize.current = { width, height }; + size.set({ width, height }); + zoom.set(FIT); + } + onLayout?.(event); + }} + > + {children} + + + ); +} diff --git a/apps/mobile/src/lib/filePreview.test.ts b/apps/mobile/src/lib/filePreview.test.ts index 47f00f0e2f1fb..8363b0ba5c958 100644 --- a/apps/mobile/src/lib/filePreview.test.ts +++ b/apps/mobile/src/lib/filePreview.test.ts @@ -297,6 +297,10 @@ vi.mock("../features/threads/ThreadMarkdownImage", async () => { const { createContext } = await import("react"); return { MarkdownImageAvailableWidthContext: createContext(390) }; }); +vi.mock("../features/threads/ZoomableImagePressable", async () => { + const { Pressable } = await import("react-native"); + return { ZoomableImagePressable: Pressable }; +}); vi.mock("../features/review/ReviewCommentCard", () => ({ useReviewCommentColors: () => ({}) })); vi.mock("../features/prompt-links/prompt-link-actions", () => ({})); vi.mock("@react-navigation/elements", async () => { From b54dad1032bdfd596fb55ffc7081e6c41b5a68f1 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:49:25 -0800 Subject: [PATCH 038/922] fix(server): Claude's auto-compact setting now wins over CLAUDE_CODE_AUTO_COMPACT_WINDOW (#35737) --- .../Adapters/ClaudeAdapterV2.test.ts | 14 ++++++++++++++ .../orchestration-v2/Adapters/ClaudeAdapterV2.ts | 16 +++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts index 861c6ab6b0662..12372ded44b03 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts @@ -395,6 +395,20 @@ describe("ClaudeAdapterV2 runtime query policy", () => { }); }); + it("sends the auto-compact window as the env var Claude Code prefers", () => { + const options = ClaudeAdapterV2.makeClaudeQueryOptions({ + modelSelection: CLAUDE_TEST_MODEL_SELECTION, + nativeThreadId: "native-auto-compact", + resume: false, + cwd: "/workspace", + settings: { ...DEFAULT_CLAUDE_SETTINGS, autoCompactWindow: "400000" }, + }); + assert.equal( + (options.settings as { env?: Record }).env?.CLAUDE_CODE_AUTO_COMPACT_WINDOW, + "400000", + ); + }); + it("sends a custom model named like a Claude Code alias to the API unchanged", () => { const options = ClaudeAdapterV2.makeClaudeQueryOptions({ modelSelection: { instanceId: CLAUDE_TEST_MODEL_SELECTION.instanceId, model: "opus" }, diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts index 63a5d779a518d..020b2feca2126 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts @@ -2009,12 +2009,16 @@ export function makeClaudeQueryOptions(input: { : typeof input.sdkSettings === "object" && input.sdkSettings !== null ? ({ ...input.sdkSettings, ...selectionSettings } as ClaudeSdkSettings) : selectionSettings; - const compactQuerySettings = + const autoCompactWindow = input.settings?.autoCompactWindow === undefined || input.settings.autoCompactWindow.length === 0 + ? undefined + : input.settings.autoCompactWindow; + const compactQuerySettings = + autoCompactWindow === undefined ? querySettings : ({ ...(typeof querySettings === "object" && querySettings !== null ? querySettings : {}), - autoCompactWindow: Number(input.settings.autoCompactWindow), + autoCompactWindow: Number(autoCompactWindow), } as ClaudeSdkSettings); // Claude Code expands a bare alias to its own model, so a custom model with an alias's name // pins the alias to itself. @@ -2026,7 +2030,9 @@ export function makeClaudeQueryOptions(input: { : undefined; // A settings file path cannot take extra keys, so it goes through unchanged. const effectiveQuerySettings = - (input.toolSearchOverride === undefined && aliasOverrideEnv === undefined) || + (input.toolSearchOverride === undefined && + aliasOverrideEnv === undefined && + autoCompactWindow === undefined) || typeof compactQuerySettings === "string" ? compactQuerySettings : ({ @@ -2034,6 +2040,10 @@ export function makeClaudeQueryOptions(input: { env: { ...compactQuerySettings?.env, ...aliasOverrideEnv, + // Claude Code ranks this env var above the autoCompactWindow setting. + ...(autoCompactWindow === undefined + ? {} + : { CLAUDE_CODE_AUTO_COMPACT_WINDOW: autoCompactWindow }), ...(input.toolSearchOverride === undefined ? {} : { ENABLE_TOOL_SEARCH: input.toolSearchOverride }), From 79daf43c1cab9c9e74733eaf7b95e1926f237d96 Mon Sep 17 00:00:00 2001 From: AJ <114173633+ajbarryiii@users.noreply.github.com> Date: Thu, 12 Nov 2026 16:49:39 -0800 Subject: [PATCH 039/922] fix(desktop): an SSH reconnect during a desktop update no longer locks the updated app out of its T3 home (#26191) Co-authored-by: Julius Marminge --- .gitignore | 2 + .../src/backend/DesktopBackendManager.ts | 12 +- .../src/backend/DesktopBackendPool.test.ts | 263 ++++++++++++++++-- .../desktop/src/backend/DesktopBackendPool.ts | 58 +++- .../src/updates/DesktopUpdates.test.ts | 12 + apps/desktop/src/updates/DesktopUpdates.ts | 33 +++ .../desktop/src/updates/updatesTestHarness.ts | 15 +- .../desktop/src/wsl/DesktopWslBackend.test.ts | 2 +- apps/server/src/cli/sshHelper.ts | 20 +- .../desktopUpdate/DesktopUpdateMarker.test.ts | 57 ++++ .../src/desktopUpdate/DesktopUpdateMarker.ts | 54 ++++ packages/contracts/src/desktopBootstrap.ts | 3 + packages/ssh/src/launcherTestHarness.ts | 233 ++++++++++++++++ packages/ssh/src/tunnel.test.ts | 133 +++++++++ packages/ssh/src/tunnel.ts | 71 ++++- 15 files changed, 923 insertions(+), 45 deletions(-) create mode 100644 apps/server/src/desktopUpdate/DesktopUpdateMarker.test.ts create mode 100644 apps/server/src/desktopUpdate/DesktopUpdateMarker.ts create mode 100644 packages/ssh/src/launcherTestHarness.ts diff --git a/.gitignore b/.gitignore index 85b7c5b4bf02f..1637f475fbbd0 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,5 @@ node_modules/ # pnpm content-addressable store; never belongs in the repo. .pnpm-store/ + +/packages/ssh/.ssh-launcher-test-*/ diff --git a/apps/desktop/src/backend/DesktopBackendManager.ts b/apps/desktop/src/backend/DesktopBackendManager.ts index 970ff2001d399..89ebc9e862ecf 100644 --- a/apps/desktop/src/backend/DesktopBackendManager.ts +++ b/apps/desktop/src/backend/DesktopBackendManager.ts @@ -205,7 +205,7 @@ interface RunBackendProcessOptions extends DesktopBackendStartConfig { readonly outputDrainTimeout?: Duration.Duration; readonly onStarted?: (pid: number) => Effect.Effect; readonly onExitObserved?: () => Effect.Effect; - readonly onReady?: () => Effect.Effect; + readonly onReady?: (pid: number) => Effect.Effect; readonly onReadinessFailure?: (error: BackendReadinessTimeoutError) => Effect.Effect; readonly onOutput?: ( streamName: BackendProcessOutputStream, @@ -252,8 +252,8 @@ export interface BackendInstanceSpec { readonly id: BackendInstanceId; readonly label: Effect.Effect; readonly configResolve: Effect.Effect; - /** Receives the ready run's resolved URL; reading current config could race a subsequent restart. */ - readonly onReady?: (httpBaseUrl: URL) => Effect.Effect; + /** Receives the ready run's URL and pid; reading current config could race a subsequent restart. */ + readonly onReady?: (httpBaseUrl: URL, pid: number) => Effect.Effect; readonly onShutdown?: () => Effect.Effect; readonly onPreflightFailed?: (failure: PreflightFailure) => Effect.Effect; readonly onStateDirOwned?: () => Effect.Effect; @@ -578,7 +578,7 @@ export const runBackendProcess = Effect.fn("runBackendProcess")(function* ( httpBaseUrl: options.httpBaseUrl, timeout: options.readinessTimeout ?? DEFAULT_BACKEND_READINESS_TIMEOUT, }).pipe( - Effect.flatMap(() => options.onReady?.() ?? Effect.void), + Effect.flatMap(() => options.onReady?.(handle.pid) ?? Effect.void), Effect.as(true), Effect.catchTags({ BackendReadinessTimeoutError: (error) => @@ -939,7 +939,7 @@ export const makeBackendInstance = Effect.fn("makeBackendInstance")(function* ( ...run, exitObserved: true, })), - onReady: Effect.fn("desktop.backendInstance.onReady")(function* () { + onReady: Effect.fn("desktop.backendInstance.onReady")(function* (pid) { const isCurrentRun = yield* SubscriptionRef.modify(state, (latest) => { const activeRun = Option.getOrUndefined(latest.active); if (activeRun?.id !== runId) { @@ -959,7 +959,7 @@ export const makeBackendInstance = Effect.fn("makeBackendInstance")(function* ( return; } - yield* spec.onReady?.(config.value.httpBaseUrl) ?? Effect.void; + yield* spec.onReady?.(config.value.httpBaseUrl, pid) ?? Effect.void; if ( config.value.runningDistro !== undefined && config.value.wslRuntimeId !== undefined diff --git a/apps/desktop/src/backend/DesktopBackendPool.test.ts b/apps/desktop/src/backend/DesktopBackendPool.test.ts index c46e0b3a26078..3f7d690eab3d3 100644 --- a/apps/desktop/src/backend/DesktopBackendPool.test.ts +++ b/apps/desktop/src/backend/DesktopBackendPool.test.ts @@ -1,5 +1,5 @@ -import * as NodeServices from "@effect/platform-node/NodeServices"; import { assert, describe, it } from "@effect/vitest"; +import { DESKTOP_UPDATE_IN_PROGRESS_TTL_MS } from "@t3tools/contracts"; import * as Deferred from "effect/Deferred"; import * as Duration from "effect/Duration"; import * as Effect from "effect/Effect"; @@ -110,27 +110,52 @@ const runningConfig = { function layerPool( labelRef: Ref.Ref, - backend?: Effect.Success>, + options: { + readonly config?: DesktopBackendStartConfig; + readonly fileSystem?: Partial; + readonly spawner?: ChildProcessSpawner.ChildProcessSpawner["Service"]; + readonly httpClient?: HttpClient.HttpClient; + readonly onReady?: Effect.Effect; + readonly backend?: Effect.Success>; + } = {}, ): Layer.Layer { return DesktopBackendPool.layer.pipe( Layer.provideMerge( Layer.mergeAll( - FileSystem.layerNoop({ exists: () => Effect.succeed(true) }), + DesktopEnvironment.layer({ + dirname: "/repo/apps/desktop/src", + homeDirectory: "/test-home", + platform: "linux", + processArch: "x64", + appVersion: "1.2.3", + appPath: "/repo", + isPackaged: true, + resourcesPath: "/missing/resources", + runningUnderArm64Translation: false, + }).pipe( + Layer.provide( + Layer.mergeAll(Path.layer, DesktopConfig.layerTest({ T3CODE_HOME: "/test-home" })), + ), + Layer.orDie, + ), + FileSystem.layerNoop(options.fileSystem ?? { exists: () => Effect.succeed(true) }), Path.layer, - backend?.layer ?? + options.backend?.layer ?? Layer.succeed( ChildProcessSpawner.ChildProcessSpawner, - ChildProcessSpawner.make(() => Effect.die("unexpected child process spawn")), + options.spawner ?? + ChildProcessSpawner.make(() => Effect.die("unexpected child process spawn")), ), Layer.succeed( HttpClient.HttpClient, - HttpClient.make((request) => - backend === undefined - ? Effect.die("unexpected HTTP request") - : Effect.succeed( - HttpClientResponse.fromWeb(request, new Response(null, { status: 200 })), - ), - ), + options.httpClient ?? + HttpClient.make((request) => + options.backend === undefined + ? Effect.die("unexpected HTTP request") + : Effect.succeed( + HttpClientResponse.fromWeb(request, new Response(null, { status: 200 })), + ), + ), ), Layer.succeed(DesktopObservability.DesktopBackendOutputLogFactory, { forInstance: () => @@ -155,26 +180,14 @@ function layerPool( }), DesktopBrowserHost.layer, Layer.succeed(DesktopBackendConfiguration.DesktopBackendConfiguration, { - resolvePrimary: Effect.die("unexpected primary config resolve"), + resolvePrimary: options.config + ? Effect.succeed(options.config) + : Effect.die("unexpected primary config resolve"), resolvePrimaryLabel: Ref.get(labelRef), resolveWsl: () => Effect.die("unexpected WSL config resolve"), currentBootstrapToken: Effect.die("unexpected bootstrap token read"), } satisfies DesktopBackendConfiguration.DesktopBackendConfiguration["Service"]), DesktopAppSettings.layerTest(), - DesktopEnvironment.layer({ - dirname: "/repo/apps/desktop/src", - homeDirectory: "/home/test", - platform: "linux", - processArch: "x64", - appVersion: "0.0.0", - appPath: "/repo", - isPackaged: true, - resourcesPath: "/missing/resources", - runningUnderArm64Translation: false, - }).pipe( - Layer.provide(Layer.mergeAll(NodeServices.layer, DesktopConfig.layerTest({}))), - Layer.orDie, - ), DesktopState.layer, DesktopWslEnvironment.layerTest(), ElectronDialog.layer, @@ -186,7 +199,7 @@ function layerPool( activate: Effect.die("unexpected window activate"), createMainIfBackendReady: Effect.die("unexpected window create"), showConnectingSplash: Effect.void, - handleBackendReady: () => Effect.void, + handleBackendReady: () => options.onReady ?? Effect.void, handleBackendNotReady: Effect.void, flushMainWindowBounds: Effect.void, prepareCaptureReveal: Effect.void, @@ -201,7 +214,199 @@ function layerPool( ); } +const markerPath = "/test-home/runtime/desktop-update-in-progress"; +const runtimePath = "/test-home/userdata/server-runtime.json"; + +const makeUpdateMarkerFixture = () => + Effect.gen(function* () { + const allowReady = yield* Deferred.make(); + const runtimeChecked = yield* Deferred.make(); + const markerRemoved = yield* Deferred.make(); + const readyRuns = yield* Queue.unbounded(); + let nextPid = 123; + const files = new Map([[markerPath, JSON.stringify({ startedAt: 0, expiresAt: 60_000 })]]); + const removed: string[] = []; + const config: DesktopBackendStartConfig = { + executablePath: "/electron", + args: [], + entryPath: "/server/bin.mjs", + cwd: "/server", + env: {}, + bootstrap: { + mode: "desktop", + noBrowser: true, + port: 3774, + t3Home: "/test-home", + host: "127.0.0.1", + desktopBootstrapToken: "token", + tailscaleServeEnabled: false, + tailscaleServePort: 443, + }, + bootstrapDelivery: "fd3", + extendEnv: true, + httpBaseUrl: new URL("http://127.0.0.1:3774"), + captureOutput: false, + preflightFailure: Option.none(), + }; + const layer = layerPool(Ref.makeUnsafe("Local"), { + config, + fileSystem: { + exists: (path) => Effect.succeed(files.has(path) || path === config.entryPath), + readFileString: (path) => + (path === runtimePath ? Deferred.succeed(runtimeChecked, undefined) : Effect.void).pipe( + Effect.andThen(Effect.sync(() => files.get(path) ?? "")), + ), + remove: (path) => + Effect.sync(() => { + removed.push(path); + files.delete(path); + }).pipe( + Effect.andThen( + path === markerPath ? Deferred.succeed(markerRemoved, undefined) : Effect.void, + ), + Effect.asVoid, + ), + }, + spawner: ChildProcessSpawner.make(() => + Effect.gen(function* () { + const exited = yield* Deferred.make(); + const exit = Deferred.succeed(exited, ChildProcessSpawner.ExitCode(0)).pipe( + Effect.asVoid, + ); + // Like the real spawner, closing the run's scope ends the process. + yield* Effect.addFinalizer(() => exit); + return ChildProcessSpawner.makeHandle({ + pid: ChildProcessSpawner.ProcessId(nextPid++), + stdout: Stream.empty, + stderr: Stream.empty, + all: Stream.empty, + exitCode: Deferred.await(exited), + isRunning: Effect.succeed(true), + kill: () => exit, + stdin: Sink.drain, + getInputFd: () => Sink.drain, + getOutputFd: () => Stream.empty, + unref: Effect.succeed(Effect.void), + }); + }), + ), + httpClient: HttpClient.make((request) => + Deferred.await(allowReady).pipe( + Effect.as(HttpClientResponse.fromWeb(request, new Response(null, { status: 200 }))), + ), + ), + onReady: Queue.offer(readyRuns, undefined).pipe(Effect.asVoid), + }); + const publishRuntime = (pid: number) => + files.set( + runtimePath, + JSON.stringify({ + version: 1, + pid, + port: 3774, + origin: "http://127.0.0.1:3774", + startedAt: "2026-10-27T00:00:00.000Z", + }), + ); + return { + layer, + files, + removed, + allowReady, + readyRuns, + runtimeChecked, + markerRemoved, + publishRuntime, + }; + }); + describe("DesktopBackendPool", () => { + it.effect( + "keeps the update marker after HTTP readiness until the backend publishes its runtime", + () => + Effect.scoped( + Effect.gen(function* () { + const fixture = yield* makeUpdateMarkerFixture(); + yield* Effect.gen(function* () { + const pool = yield* DesktopBackendPool.DesktopBackendPool; + const primary = yield* pool.primary; + yield* primary.start; + yield* Deferred.succeed(fixture.allowReady, undefined); + yield* Queue.take(fixture.readyRuns); + assert.isTrue( + fixture.files.has(markerPath), + "a launcher could neither wait nor adopt between readiness and publication", + ); + yield* Deferred.await(fixture.runtimeChecked); + yield* TestClock.adjust(Duration.seconds(5)); + assert.isTrue(fixture.files.has(markerPath)); + fixture.publishRuntime(456); + yield* TestClock.adjust(Duration.seconds(1)); + assert.isTrue( + fixture.files.has(markerPath), + "another process's runtime is not the replacement", + ); + fixture.publishRuntime(123); + yield* TestClock.adjust(Duration.seconds(1)); + yield* Deferred.await(fixture.markerRemoved); + assert.deepEqual(fixture.removed, [markerPath]); + }).pipe(Effect.provide(fixture.layer)); + }), + ), + ); + + it.effect("leaves a replacement update marker written while an earlier wait is pending", () => + Effect.scoped( + Effect.gen(function* () { + const fixture = yield* makeUpdateMarkerFixture(); + yield* Effect.gen(function* () { + const pool = yield* DesktopBackendPool.DesktopBackendPool; + const primary = yield* pool.primary; + yield* primary.start; + yield* Deferred.succeed(fixture.allowReady, undefined); + yield* Queue.take(fixture.readyRuns); + yield* Deferred.await(fixture.runtimeChecked); + yield* TestClock.adjust(Duration.millis(DESKTOP_UPDATE_IN_PROGRESS_TTL_MS - 1_000)); + const replacement = JSON.stringify({ startedAt: 59_000, expiresAt: 119_000 }); + fixture.files.set(markerPath, replacement); + yield* TestClock.adjust(Duration.millis(DESKTOP_UPDATE_IN_PROGRESS_TTL_MS)); + assert.equal(fixture.files.get(markerPath), replacement); + assert.deepEqual(fixture.removed, []); + }).pipe(Effect.provide(fixture.layer)); + }), + ), + ); + + it.effect("a later backend run's readiness supersedes the earlier run's marker wait", () => + Effect.scoped( + Effect.gen(function* () { + const fixture = yield* makeUpdateMarkerFixture(); + yield* Effect.gen(function* () { + const pool = yield* DesktopBackendPool.DesktopBackendPool; + const primary = yield* pool.primary; + yield* primary.start; + yield* Deferred.succeed(fixture.allowReady, undefined); + yield* Queue.take(fixture.readyRuns); + yield* Deferred.await(fixture.runtimeChecked); + yield* TestClock.adjust(Duration.seconds(30)); + yield* primary.stop(); + yield* primary.start; + yield* Queue.take(fixture.readyRuns); + yield* TestClock.adjust(Duration.seconds(31)); + assert.isTrue( + fixture.files.has(markerPath), + "the earlier run's wait must not end the later run's handoff", + ); + assert.deepEqual(fixture.removed, []); + fixture.publishRuntime(124); + yield* TestClock.adjust(Duration.millis(100)); + yield* Deferred.await(fixture.markerRemoved); + assert.deepEqual(fixture.removed, [markerPath]); + }).pipe(Effect.provide(fixture.layer)); + }), + ), + ); + it.effect("unregister during pool quit does not interrupt sibling stops", () => Effect.scoped( Effect.gen(function* () { @@ -253,7 +458,7 @@ describe("DesktopBackendPool", () => { assert.isFalse(yield* backend.isRunning); assert.isTrue(Option.isNone((yield* instance.snapshot).activePid)); assert.isTrue(Option.isNone(yield* pool.get(id))); - }).pipe(Effect.provide(layerPool(Ref.makeUnsafe("Windows"), backend))); + }).pipe(Effect.provide(layerPool(Ref.makeUnsafe("Windows"), { backend }))); }), ), ); diff --git a/apps/desktop/src/backend/DesktopBackendPool.ts b/apps/desktop/src/backend/DesktopBackendPool.ts index 82d542b322c84..d69e1ce1427fe 100644 --- a/apps/desktop/src/backend/DesktopBackendPool.ts +++ b/apps/desktop/src/backend/DesktopBackendPool.ts @@ -1,10 +1,17 @@ +import { + DESKTOP_UPDATE_IN_PROGRESS_MARKER_FILE, + DESKTOP_UPDATE_IN_PROGRESS_TTL_MS, +} from "@t3tools/contracts"; import * as Context from "effect/Context"; import * as Deferred from "effect/Deferred"; +import * as Duration from "effect/Duration"; import * as Effect from "effect/Effect"; import * as Exit from "effect/Exit"; +import * as FiberHandle from "effect/FiberHandle"; import * as Layer from "effect/Layer"; import * as Option from "effect/Option"; import * as Path from "effect/Path"; +import * as Schedule from "effect/Schedule"; import * as Schema from "effect/Schema"; import * as Scope from "effect/Scope"; import * as SubscriptionRef from "effect/SubscriptionRef"; @@ -31,6 +38,10 @@ import * as ElectronApp from "../electron/ElectronApp.ts"; const { logWarning: logBackendPoolWarning } = DesktopObservability.makeComponentLogger("desktop-backend-pool"); +const decodeServerRuntime = Schema.decodeUnknownEffect( + Schema.fromJsonString(Schema.Struct({ pid: Schema.Number, port: Schema.Number })), +); + export type BackendInstanceId = DesktopBackendManager.BackendInstanceId; export const BackendInstanceId = DesktopBackendManager.BackendInstanceId; export const PRIMARY_INSTANCE_ID = DesktopBackendManager.PRIMARY_INSTANCE_ID; @@ -106,6 +117,8 @@ type UnregisterAction = export const layer = Layer.effect( DesktopBackendPool, Effect.gen(function* () { + const environment = yield* DesktopEnvironment.DesktopEnvironment; + const fileSystem = yield* FileSystem.FileSystem; const configuration = yield* DesktopBackendConfiguration.DesktopBackendConfiguration; const desktopWindow = yield* DesktopWindow.DesktopWindow; const electronDialog = yield* ElectronDialog.ElectronDialog; @@ -119,6 +132,41 @@ export const layer = Layer.effect( FileSystem.FileSystem | Path.Path | DesktopEnvironment.DesktopEnvironment >(); + const updateMarkerPath = environment.path.join( + environment.baseDir, + "runtime", + DESKTOP_UPDATE_IN_PROGRESS_MARKER_FILE, + ); + const serverRuntimePath = environment.path.join(environment.stateDir, "server-runtime.json"); + // The server publishes its runtime after HTTP readiness. Until then an SSH launcher + // finds nothing to adopt, so dropping the marker earlier lets it start a competing server. + const releaseUpdateMarker = Effect.fn("desktop.backendPool.releaseUpdateMarker")(function* ( + httpBaseUrl: URL, + pid: number, + ) { + const marker = yield* fileSystem.readFileString(updateMarkerPath).pipe(Effect.option); + if (Option.isNone(marker)) { + return; + } + yield* fileSystem.readFileString(serverRuntimePath).pipe( + Effect.flatMap(decodeServerRuntime), + Effect.map((runtime) => runtime.pid === pid && runtime.port === Number(httpBaseUrl.port)), + Effect.orElseSucceed(() => false), + Effect.repeat({ + until: (published) => published, + schedule: Schedule.spaced(Duration.millis(100)), + }), + Effect.timeoutOption(Duration.millis(DESKTOP_UPDATE_IN_PROGRESS_TTL_MS)), + ); + // A later update may have replaced the marker; that handoff is not ours to end. + const current = yield* fileSystem.readFileString(updateMarkerPath).pipe(Effect.option); + if (Option.isSome(current) && current.value === marker.value) { + yield* fileSystem.remove(updateMarkerPath, { force: true }).pipe(Effect.ignore); + } + }); + // One wait at a time: each run's shutdown or readiness ends the previous run's wait. + const updateMarkerWait = yield* FiberHandle.make(); + // Persist fatal Windows fallbacks; transient transport failures must preserve the user's WSL preference. const handlePrimaryPreflightFailure = Effect.fn("desktop.backendPool.primaryPreflightFailed")( function* (failure: DesktopBackendManager.PreflightFailure) { @@ -165,8 +213,9 @@ export const layer = Layer.effect( label: configuration.resolvePrimaryLabel, configResolve: configuration.resolvePrimary, // Absorb window errors so readiness can reset restartAttempt. - onReady: (httpBaseUrl) => - desktopWindow.handleBackendReady(httpBaseUrl).pipe( + onReady: (httpBaseUrl, pid) => + FiberHandle.run(updateMarkerWait, releaseUpdateMarker(httpBaseUrl, pid)).pipe( + Effect.andThen(desktopWindow.handleBackendReady(httpBaseUrl)), // Only once the main window exists, so the recovery window never closes into nothing. Effect.andThen(SubscriptionRef.set(primaryBackendStartup, { _tag: "Ready" })), Effect.catch((error) => @@ -177,7 +226,10 @@ export const layer = Layer.effect( ), onStartupFailure: (failure) => SubscriptionRef.set(primaryBackendStartup, { _tag: "Failing", ...failure }), - onShutdown: () => desktopWindow.handleBackendNotReady, + onShutdown: () => + FiberHandle.clear(updateMarkerWait).pipe( + Effect.andThen(desktopWindow.handleBackendNotReady), + ), onPreflightFailed: handlePrimaryPreflightFailure, onStateDirOwned: () => DesktopHomeOwner.readLiveHomeOwner().pipe( diff --git a/apps/desktop/src/updates/DesktopUpdates.test.ts b/apps/desktop/src/updates/DesktopUpdates.test.ts index b798719949a63..7ee2ff5dd51c1 100644 --- a/apps/desktop/src/updates/DesktopUpdates.test.ts +++ b/apps/desktop/src/updates/DesktopUpdates.test.ts @@ -544,14 +544,17 @@ describe("DesktopUpdates", () => { it.effect("marks the backend stop for an install as an update restart", () => { let markersAtStop: ReadonlyArray = []; + let inProgressAtStop: string | undefined; const harness = makeHarness({ stopBackend: Effect.sync(() => { markersAtStop = [...harness.updateRestartMarkers]; + inProgressAtStop = harness.updateInProgressMarker(); }), }); return Effect.scoped( Effect.gen(function* () { + yield* TestClock.setTime(1_000); const environment = yield* DesktopEnvironment.DesktopEnvironment; const updates = yield* DesktopUpdates.DesktopUpdates; yield* updates.configure; @@ -562,6 +565,12 @@ describe("DesktopUpdates", () => { assert.deepEqual(markersAtStop, [ environment.path.join(environment.baseDir, "runtime", DESKTOP_UPDATE_RESTART_MARKER_FILE), ]); + // SSH launchers wait on this until the replacement backend publishes its runtime. + assert.deepEqual(JSON.parse(inProgressAtStop ?? "null"), { + startedAt: 1_000, + expiresAt: 61_000, + }); + assert.isDefined(harness.updateInProgressMarker()); }), ).pipe(Effect.provide(Layer.merge(TestClock.layer(), harness.layer))); }); @@ -644,9 +653,11 @@ describe("DesktopUpdates", () => { const installFiber = yield* updates.install.pipe(Effect.forkScoped); yield* Deferred.await(stopping); assert.equal(harness.updateRestartMarkers.size, 1); + assert.isDefined(harness.updateInProgressMarker()); yield* Fiber.interrupt(installFiber); assert.equal(harness.updateRestartMarkers.size, 0); + assert.isUndefined(harness.updateInProgressMarker()); }), ).pipe(Effect.provide(Layer.merge(TestClock.layer(), harness.layer))); }), @@ -681,6 +692,7 @@ describe("DesktopUpdates", () => { "startBackend", ]); assert.equal(harness.updateRestartMarkers.size, 0); + assert.isUndefined(harness.updateInProgressMarker()); assert.equal(harness.installRecords.size, 0); }), ).pipe(Effect.provide(Layer.merge(TestClock.layer(), harness.layer))); diff --git a/apps/desktop/src/updates/DesktopUpdates.ts b/apps/desktop/src/updates/DesktopUpdates.ts index 044e24537ca37..db31e0bc112ba 100644 --- a/apps/desktop/src/updates/DesktopUpdates.ts +++ b/apps/desktop/src/updates/DesktopUpdates.ts @@ -1,5 +1,7 @@ import { DESKTOP_UPDATE_RESTART_MARKER_FILE, + DESKTOP_UPDATE_IN_PROGRESS_MARKER_FILE, + DESKTOP_UPDATE_IN_PROGRESS_TTL_MS, DesktopUpdateChannelSchema, type DesktopRuntimeInfo, type DesktopUpdateActionResult, @@ -669,6 +671,34 @@ export const make = Effect.gen(function* () { ), ); + const updateInProgressMarkerPath = environment.path.join( + updateRestartMarkerDir, + DESKTOP_UPDATE_IN_PROGRESS_MARKER_FILE, + ); + const encodeUpdateMarker = Schema.encodeEffect( + Schema.fromJsonString(Schema.Struct({ startedAt: Schema.Number, expiresAt: Schema.Number })), + ); + const updateInProgressTempPath = `${updateInProgressMarkerPath}.tmp`; + const writeUpdateInProgressMarker = Effect.gen(function* () { + const startedAt = DateTime.toEpochMillis(yield* DateTime.now); + const contents = yield* encodeUpdateMarker({ + startedAt, + expiresAt: startedAt + DESKTOP_UPDATE_IN_PROGRESS_TTL_MS, + }); + yield* fileSystem.writeFileString(updateInProgressTempPath, contents); + yield* fileSystem.rename(updateInProgressTempPath, updateInProgressMarkerPath); + }).pipe( + Effect.ensuring( + fileSystem.remove(updateInProgressTempPath, { force: true }).pipe(Effect.ignore), + ), + Effect.catch((error) => + logUpdaterWarning("Could not write the update-in-progress marker.", { errorTag: error._tag }), + ), + ); + const removeUpdateInProgressMarker = fileSystem + .remove(updateInProgressMarkerPath, { force: true }) + .pipe(Effect.ignore); + // Failed or interrupted installs leave no replacement backend; later quits must release the tunnel. const removeUpdateRestartMarker = fileSystem .remove(updateRestartMarkerPath, { force: true }) @@ -724,6 +754,7 @@ export const make = Effect.gen(function* () { Ref.set(desktopState.quitting, false), Ref.set(installRunningBackendsRef, []), removeUpdateRestartMarker, + removeUpdateInProgressMarker, removeInstallRecord, ], { discard: true }, @@ -741,6 +772,7 @@ export const make = Effect.gen(function* () { yield* Ref.set(desktopState.quitting, false); yield* removeUpdateRestartMarker; + yield* removeUpdateInProgressMarker; yield* removeInstallRecord; yield* Effect.gen(function* () { const runningInstances = yield* Ref.getAndSet(installRunningBackendsRef, []); @@ -816,6 +848,7 @@ export const make = Effect.gen(function* () { return yield* Effect.gen(function* () { yield* writeUpdateRestartMarker; + yield* writeUpdateInProgressMarker; const { downloadedVersion } = yield* Ref.get(updateStateRef); if (downloadedVersion !== null) yield* writeInstallRecord(downloadedVersion); // Stop pooled backends and SSH tunnels before quitAndInstall can outrun their scope finalizers. diff --git a/apps/desktop/src/updates/updatesTestHarness.ts b/apps/desktop/src/updates/updatesTestHarness.ts index 06f9e86a97d5c..b118d15ced674 100644 --- a/apps/desktop/src/updates/updatesTestHarness.ts +++ b/apps/desktop/src/updates/updatesTestHarness.ts @@ -244,6 +244,7 @@ export function makeHarness(options: UpdatesHarnessOptions = {}) { : DesktopAppSettings.layer; const updateRestartMarkers = new Set(); + const updateMarkerContents = new Map(); const installRecords = new Map(); let previousInstallRecord = options.installRecord; const isInstallRecord = (path: string) => @@ -269,11 +270,21 @@ export function makeHarness(options: UpdatesHarnessOptions = {}) { writeFileString: (path, data) => Effect.sync(() => { if (isInstallRecord(path)) installRecords.set(path, data); - else updateRestartMarkers.add(path); + else { + if (path.endsWith("/desktop-update-restart")) updateRestartMarkers.add(path); + updateMarkerContents.set(path, data); + } + }), + rename: (from, to) => + Effect.sync(() => { + const contents = updateMarkerContents.get(from); + if (contents !== undefined) updateMarkerContents.set(to, contents); + updateMarkerContents.delete(from); }), remove: (path) => Effect.sync(() => { updateRestartMarkers.delete(path); + updateMarkerContents.delete(path); installRecords.delete(path); if (isInstallRecord(path)) previousInstallRecord = undefined; }), @@ -306,6 +317,8 @@ export function makeHarness(options: UpdatesHarnessOptions = {}) { quitAndInstalls: () => quitAndInstallCount, installSteps, updateRestartMarkers, + updateInProgressMarker: () => + [...updateMarkerContents].find(([path]) => path.endsWith("/desktop-update-in-progress"))?.[1], installRecords, previousInstallRecord: () => previousInstallRecord, downloadCount: () => downloadCount, diff --git a/apps/desktop/src/wsl/DesktopWslBackend.test.ts b/apps/desktop/src/wsl/DesktopWslBackend.test.ts index 8468a9538630c..d9ae6e76c29c2 100644 --- a/apps/desktop/src/wsl/DesktopWslBackend.test.ts +++ b/apps/desktop/src/wsl/DesktopWslBackend.test.ts @@ -154,7 +154,7 @@ describe("DesktopWslBackend", () => { assert.equal(startCount, 1); assert.deepEqual(yield* backend.lastPreflightError, refusal); - yield* clearFailure(new URL("http://127.0.0.1:41773")); + yield* clearFailure(new URL("http://127.0.0.1:41773"), 123); assert.deepEqual(yield* backend.lastPreflightError, Option.none()); yield* recordOwnershipFailure(); const settings = yield* DesktopAppSettings.DesktopAppSettings; diff --git a/apps/server/src/cli/sshHelper.ts b/apps/server/src/cli/sshHelper.ts index 419b096c6a90a..09a729ef44891 100644 --- a/apps/server/src/cli/sshHelper.ts +++ b/apps/server/src/cli/sshHelper.ts @@ -6,8 +6,11 @@ import * as NodeHttp from "node:http"; import * as NodeNet from "node:net"; import * as Effect from "effect/Effect"; +import * as Option from "effect/Option"; import { Argument, Command } from "effect/cli"; +import * as DesktopUpdateMarker from "../desktopUpdate/DesktopUpdateMarker.ts"; + const canBind = (port: number) => new Promise((resolve) => { const server = NodeNet.createServer(); @@ -124,7 +127,22 @@ const runtimePort = Command.make("runtime-port", { ), ); +const updateRemaining = Command.make("update-remaining", { + markerFile: Argument.String("marker-file"), +}).pipe( + Command.withHandler(({ markerFile }) => + DesktopUpdateMarker.DesktopUpdateMarker.use((marker) => marker.remainingWait(markerFile)).pipe( + Effect.flatMap((remaining) => + Effect.sync(() => { + process.stdout.write(Option.match(remaining, { onNone: () => "", onSome: String })); + }), + ), + ), + ), + Command.provide(DesktopUpdateMarker.layer), +); + export const sshHelperCommand = Command.make("__ssh-helper").pipe( Command.unlisted, - Command.withSubcommands([pickPort, waitReady, runtimePort]), + Command.withSubcommands([pickPort, waitReady, runtimePort, updateRemaining]), ); diff --git a/apps/server/src/desktopUpdate/DesktopUpdateMarker.test.ts b/apps/server/src/desktopUpdate/DesktopUpdateMarker.test.ts new file mode 100644 index 0000000000000..6f78c6bd044e2 --- /dev/null +++ b/apps/server/src/desktopUpdate/DesktopUpdateMarker.test.ts @@ -0,0 +1,57 @@ +import { assert, describe, it } from "@effect/vitest"; +import * as Effect from "effect/Effect"; +import * as FileSystem from "effect/FileSystem"; +import * as Layer from "effect/Layer"; +import * as Option from "effect/Option"; +import * as TestClock from "effect/testing/TestClock"; + +import * as DesktopUpdateMarker from "./DesktopUpdateMarker.ts"; + +const remainingWait = (fileSystem: Partial) => + DesktopUpdateMarker.DesktopUpdateMarker.use((marker) => marker.remainingWait("/marker")).pipe( + Effect.provide(DesktopUpdateMarker.layer.pipe(Layer.provide(FileSystem.layerNoop(fileSystem)))), + ); + +describe("DesktopUpdateMarker", () => { + it.effect.each([ + ["fresh", '{"startedAt":0,"expiresAt":60000}', 0, Option.some(60000)], + ["partly elapsed", '{"startedAt":0,"expiresAt":60000}', 8000, Option.some(52000)], + ["expired", '{"startedAt":0,"expiresAt":60000}', 60000, Option.none()], + ["future", '{"startedAt":1000,"expiresAt":61000}', 0, Option.none()], + ["long host TTL", '{"startedAt":0,"expiresAt":600000}', 0, Option.some(60000)], + ["reversed", '{"startedAt":1000,"expiresAt":0}', 0, Option.none()], + ["missing fields", "{}", 0, Option.none()], + ["malformed", "not json", 0, Option.none()], + ] as const)("%s", ([name, contents, now, expected]) => + Effect.gen(function* () { + let removed = false; + yield* TestClock.setTime(now); + const remaining = yield* remainingWait({ + readFileString: () => Effect.succeed(contents), + remove: () => + Effect.sync(() => { + removed = true; + }), + }); + assert.deepStrictEqual(remaining, expected); + assert.isFalse(removed, `${name}: the launcher must never delete the shared marker`); + }), + ); + + it.effect("honours a marker published while it is being read", () => + Effect.gen(function* () { + yield* TestClock.setTime(0); + const remaining = yield* remainingWait({ + readFileString: () => + TestClock.adjust(1000).pipe(Effect.as('{"startedAt":1000,"expiresAt":61000}')), + }); + assert.deepStrictEqual(remaining, Option.some(60000)); + }), + ); + + it.effect("a missing marker allows launch", () => + Effect.gen(function* () { + assert.isTrue(Option.isNone(yield* remainingWait({}))); + }), + ); +}); diff --git a/apps/server/src/desktopUpdate/DesktopUpdateMarker.ts b/apps/server/src/desktopUpdate/DesktopUpdateMarker.ts new file mode 100644 index 0000000000000..1f175bbe7db14 --- /dev/null +++ b/apps/server/src/desktopUpdate/DesktopUpdateMarker.ts @@ -0,0 +1,54 @@ +import { DESKTOP_UPDATE_IN_PROGRESS_TTL_MS } from "@t3tools/contracts"; +import * as Clock from "effect/Clock"; +import * as Context from "effect/Context"; +import * as Effect from "effect/Effect"; +import * as FileSystem from "effect/FileSystem"; +import * as Layer from "effect/Layer"; +import * as Option from "effect/Option"; +import * as Schema from "effect/Schema"; + +const UpdateMarker = Schema.fromJsonString( + Schema.Struct({ startedAt: Schema.Number, expiresAt: Schema.Number }), +); + +export class DesktopUpdateMarker extends Context.Service< + DesktopUpdateMarker, + { + /** + * Remaining SSH launch wait in ms, capped at this build's TTL. + * Read-only: a newer update may have just replaced the marker. + */ + readonly remainingWait: (markerFile: string) => Effect.Effect>; + } +>()("t3/desktopUpdate/DesktopUpdateMarker") {} + +const make = Effect.gen(function* () { + const fileSystem = yield* FileSystem.FileSystem; + + const remainingWait: DesktopUpdateMarker["Service"]["remainingWait"] = Effect.fn( + "DesktopUpdateMarker.remainingWait", + )(function* (markerFile) { + const marker = yield* fileSystem + .readFileString(markerFile) + .pipe(Effect.flatMap(Schema.decodeUnknownEffect(UpdateMarker)), Effect.option); + // Sampled after the read so a marker published mid-read is not seen as future-dated. + const now = yield* Clock.currentTimeMillis; + if (Option.isSome(marker)) { + const { startedAt, expiresAt } = marker.value; + if ( + Number.isFinite(startedAt) && + Number.isFinite(expiresAt) && + startedAt <= now && + expiresAt > now && + expiresAt > startedAt + ) { + return Option.some(Math.min(expiresAt - now, DESKTOP_UPDATE_IN_PROGRESS_TTL_MS)); + } + } + return Option.none(); + }); + + return DesktopUpdateMarker.of({ remainingWait }); +}); + +export const layer = Layer.effect(DesktopUpdateMarker, make); diff --git a/packages/contracts/src/desktopBootstrap.ts b/packages/contracts/src/desktopBootstrap.ts index 48233f4d94d52..5148aa2c1c82e 100644 --- a/packages/contracts/src/desktopBootstrap.ts +++ b/packages/contracts/src/desktopBootstrap.ts @@ -37,3 +37,6 @@ export type DesktopBackendBootstrap = typeof DesktopBackendBootstrap.Type; /** Written to `/runtime` before update shutdown so the backend retains its managed tunnel. */ export const DESKTOP_UPDATE_RESTART_MARKER_FILE = "desktop-update-restart"; + +export const DESKTOP_UPDATE_IN_PROGRESS_MARKER_FILE = "desktop-update-in-progress"; +export const DESKTOP_UPDATE_IN_PROGRESS_TTL_MS = 60_000; diff --git a/packages/ssh/src/launcherTestHarness.ts b/packages/ssh/src/launcherTestHarness.ts new file mode 100644 index 0000000000000..6929f66db91d9 --- /dev/null +++ b/packages/ssh/src/launcherTestHarness.ts @@ -0,0 +1,233 @@ +// @effect-diagnostics nodeBuiltinImport:off - Executes the generated remote launcher in an isolated shell with fake commands and clock. +import * as NodeFS from "node:fs"; +import * as NodePath from "node:path"; +import * as NodeURL from "node:url"; +import * as NodeChildProcess from "node:child_process"; +import * as NodeCrypto from "@effect/platform-node/NodeCrypto"; +import * as NodeServices from "@effect/platform-node/NodeServices"; +import * as Effect from "effect/Effect"; +import * as Layer from "effect/Layer"; +import * as Sink from "effect/Sink"; +import * as Stream from "effect/Stream"; +import { ChildProcessSpawner } from "effect/process"; +import { launchOrReuseRemoteServer, type RemoteT3RunnerOptions } from "./tunnel.ts"; + +// Capture exactly the script sent over SSH, then run it with fake remote commands. +export const captureLauncherFor = Effect.fn("test.captureLauncher")(function* ( + runner: RemoteT3RunnerOptions, +) { + let script = ""; + const spawner = ChildProcessSpawner.make((command) => + Effect.gen(function* () { + if (command._tag === "StandardCommand") { + const stdin = command.options.stdin; + if (typeof stdin === "object" && "stream" in stdin && Stream.isStream(stdin.stream)) { + script = yield* stdin.stream.pipe(Stream.decodeText(), Stream.mkString); + } + } + return ChildProcessSpawner.makeHandle({ + pid: ChildProcessSpawner.ProcessId(123), + stdout: Stream.make(new TextEncoder().encode('{"remotePort":3773}\n')), + stderr: Stream.empty, + all: Stream.empty, + exitCode: Effect.succeed(ChildProcessSpawner.ExitCode(0)), + isRunning: Effect.succeed(false), + kill: () => Effect.void, + stdin: Sink.drain, + getInputFd: () => Sink.drain, + getOutputFd: () => Stream.empty, + unref: Effect.succeed(Effect.void), + }); + }), + ); + yield* launchOrReuseRemoteServer( + { alias: "test", hostname: "test.invalid", username: null, port: null }, + undefined, + runner, + ).pipe( + Effect.provide( + Layer.mergeAll( + NodeServices.layer, + NodeCrypto.layer, + Layer.succeed(ChildProcessSpawner.ChildProcessSpawner, spawner), + ), + ), + ); + return script; +}); + +export const captureLauncher = captureLauncherFor({ nodeScriptPath: "/fake/server.ts" }); + +export function runLauncher( + script: string, + options: { + readonly marker?: unknown; + readonly archive?: boolean; + readonly clearMarkerOnReady?: boolean; + readonly recordedKind?: "managed" | "external"; + readonly clockJump?: number; + readonly readyAt?: number; + readonly initialPort?: number; + // The desktop publishes runtime and removes the marker right after the first runtime read. + readonly publishAfterFirstRuntimeRead?: boolean; + }, +) { + const root = NodeURL.fileURLToPath(new URL("../../../", import.meta.url)); + const home = NodeFS.mkdtempSync(NodePath.join(root, "packages/ssh/.ssh-launcher-test-")); + try { + const bin = NodePath.join(home, "bin"); + const runtime = NodePath.join(home, ".t3/runtime"); + NodeFS.mkdirSync(bin); + NodeFS.mkdirSync(runtime, { recursive: true }); + const markerPath = NodePath.join(runtime, "desktop-update-in-progress"); + if (options.marker) + NodeFS.writeFileSync( + markerPath, + typeof options.marker === "string" ? options.marker : JSON.stringify(options.marker), + ); + NodeFS.writeFileSync(NodePath.join(home, "clock"), "0"); + NodeFS.writeFileSync(NodePath.join(home, "events"), ""); + const executable = (name: string, body: string) => + NodeFS.writeFileSync(NodePath.join(bin, name), `#!/bin/sh\nset -eu\n${body}\n`, { + mode: 0o755, + }); + NodeFS.writeFileSync( + NodePath.join(home, "clock.cjs"), + ` +const fs = require('node:fs'); +Date.now = () => Number(fs.readFileSync(process.env.HOME + '/clock', 'utf8')); +`, + ); + executable( + options.archive ? "test-node" : "node", + ` +case "\${2:-}" in + */server-runtime.json) + # A started server publishes its runtime record, which the launch waits for. + if [ -e "$HOME/started-server" ]; then + printf 'record %s\\n' "$(cat "$HOME/clock")" >> "$HOME/events" + printf '%s 5999' "$(cat "$HOME/started-server")" + exit 0 + fi + NOW="$(cat "$HOME/clock")" + printf 'runtime %s\\n' "$NOW" >> "$HOME/events" + if [ "$NOW" -ge "$TEST_READY_AT" ] || [ -e "$2" ]; then printf '%s %s' "$TEST_SERVER_PID" 4888 + elif [ "$TEST_PUBLISH_AFTER_FIRST_READ" = 1 ]; then + mkdir -p "\${2%/*}" + printf '{}' > "$2" + rm -f "$HOME/.t3/runtime/desktop-update-in-progress" + exit 1 + elif [ -n "$TEST_INITIAL_PORT" ]; then printf '%s %s' "$TEST_SERVER_PID" "$TEST_INITIAL_PORT" + else exit 1; fi ;; + */port) + printf 'start %s\\n' "$(cat "$HOME/clock")" >> "$HOME/events" + printf 5999 ;; + [0-9]*) + NOW="$(cat "$HOME/clock")" + printf 'probe %s %s\\n' "$2" "$NOW" >> "$HOME/events" + [ "$2" = 5999 ] || { [ "$2" = 4888 ] && { [ "$NOW" -ge "$TEST_READY_AT" ] || [ -e "$HOME/.t3/userdata/server-runtime.json" ]; }; } ;; + */desktop-update-in-progress) + printf 'marker %s\\n' "$(cat "$HOME/clock")" >> "$HOME/events" + exec "$TEST_REAL_NODE" --require "$HOME/clock.cjs" "$@" ;; + *) exec "$TEST_REAL_NODE" --require "$HOME/clock.cjs" "$@" ;; +esac`, + ); + executable( + "sleep", + `awk -v seconds="$1" '{ printf "%.0f", $1 + seconds * 1000 }' "$HOME/clock" > "$HOME/clock.next" +mv "$HOME/clock.next" "$HOME/clock" +if [ "$TEST_CLEAR_MARKER" = 1 ] && [ "$(cat "$HOME/clock")" -ge "$TEST_READY_AT" ]; then + rm -f "$HOME/.t3/runtime/desktop-update-in-progress" +fi +if [ -n "$TEST_CLOCK_JUMP" ] && [ ! -e "$HOME/jumped" ]; then + printf '%s' "$TEST_CLOCK_JUMP" > "$HOME/clock" + touch "$HOME/jumped" +fi`, + ); + executable("nohup", 'printf "%s" "$$" > "$HOME/started-server"'); + // The test process stands in for a recorded server; report the serve command it would run. + executable( + "ps", + `if [ "$*" = "-ww -o args= -p $TEST_SERVER_PID" ]; then + printf '/bin/sh %s/.t3/ssh-launch/test-target/run-t3.sh serve --host 127.0.0.1 --port 5999\\n' "$HOME" + exit 0 +fi +PATH=/usr/bin:/bin exec ps "$@"`, + ); + if (options.recordedKind) { + const state = NodePath.join(home, ".t3/ssh-launch/test-target"); + NodeFS.mkdirSync(state, { recursive: true }); + NodeFS.writeFileSync(NodePath.join(state, "pid"), String(process.pid)); + NodeFS.writeFileSync(NodePath.join(state, "port"), "5999"); + NodeFS.writeFileSync(NodePath.join(state, "managed"), options.recordedKind); + const runner = script.split("cat >\"$RUNNER_NEXT\" <<'SH'\n")[1]?.split("\nSH\n")[0]; + if (!runner) throw new Error("runner missing"); + NodeFS.writeFileSync(NodePath.join(state, "run-t3.sh"), runner + "\n"); + } + if (options.archive) { + executable("node", 'printf "unexpected host node invocation\\n" >&2; exit 1'); + const version = NodePath.join(home, ".t3/runtime/versions/1.2.3"); + NodeFS.mkdirSync(version, { recursive: true }); + NodeFS.writeFileSync(NodePath.join(version, ".install-complete"), "1.2.3"); + NodeFS.writeFileSync( + NodePath.join(home, "helper.ts"), + ` +import * as Effect from "effect/Effect"; +import * as NodeServices from "@effect/platform-node/NodeServices"; +import { Command } from "effect/cli"; +import { sshHelperCommand } from ${JSON.stringify(NodePath.join(root, "apps/server/src/cli/sshHelper.ts"))}; +await Effect.runPromise(Command.runWith(sshHelperCommand, { version: "1.2.3" })(process.argv.slice(2)).pipe(Effect.provide(NodeServices.layer))); +`, + ); + NodeFS.writeFileSync( + NodePath.join(version, "t3"), + `#!/bin/sh +set -eu +if [ "$1" = --version ]; then printf 1.2.3; exit; fi +[ "$1" = __ssh-helper ] +case "$2" in + update-remaining) printf 'marker %s\\n' "$(cat "$HOME/clock")" >> "$HOME/events"; exec "$TEST_REAL_NODE" --require "$HOME/clock.cjs" "$HOME/helper.ts" "$2" "$3" ;; + runtime-port | pick-port | wait-ready) exec "$HOME/bin/test-node" - "$3" ;; + *) exit 1 ;; +esac +`, + { mode: 0o755 }, + ); + } + const result = NodeChildProcess.spawnSync("/bin/sh", ["-s", "--", "test-target"], { + input: `kill() { + if [ "$1" = -0 ]; then command kill "$@"; else + printf 'kill %s\\n' "$*" >> "$HOME/events" + return 1 + fi +} +${script}`, + encoding: "utf8", + timeout: 30_000, + env: { + ...process.env, + HOME: home, + PATH: `${bin}:/usr/bin:/bin`, + TEST_REAL_NODE: process.execPath, + TEST_CLEAR_MARKER: options.clearMarkerOnReady ? "1" : "0", + TEST_CLOCK_JUMP: options.clockJump === undefined ? "" : String(options.clockJump), + TEST_SERVER_PID: String(process.pid), + TEST_READY_AT: String(options.readyAt ?? 1_000_000), + TEST_INITIAL_PORT: options.initialPort === undefined ? "" : String(options.initialPort), + TEST_PUBLISH_AFTER_FIRST_READ: options.publishAfterFirstRuntimeRead ? "1" : "0", + }, + }); + if (result.error || result.status !== 0) + throw new Error( + `launcher failed: ${result.error ?? result.status}\n${result.stderr}\n${result.stdout}\n${NodeFS.readFileSync(NodePath.join(home, "events"), "utf8")}`, + ); + return { + output: JSON.parse(result.stdout.trim()), + events: NodeFS.readFileSync(NodePath.join(home, "events"), "utf8").trim().split("\n"), + now: Number(NodeFS.readFileSync(NodePath.join(home, "clock"), "utf8")), + markerExists: NodeFS.existsSync(markerPath), + }; + } finally { + NodeFS.rmSync(home, { recursive: true, force: true }); + } +} diff --git a/packages/ssh/src/tunnel.test.ts b/packages/ssh/src/tunnel.test.ts index 83422c67b18cd..ad020c3bada01 100644 --- a/packages/ssh/src/tunnel.test.ts +++ b/packages/ssh/src/tunnel.test.ts @@ -27,6 +27,7 @@ import { TestClock } from "effect/testing"; import { HttpClient, HttpClientError, HttpClientResponse } from "effect/http"; import { ChildProcess, ChildProcessSpawner } from "effect/process"; +import { captureLauncher, captureLauncherFor, runLauncher } from "./launcherTestHarness.ts"; import * as SshAuth from "./auth.ts"; import { remoteStateKey } from "./command.ts"; import { SshCommandError, SshPasswordPromptError, SshReadinessError } from "./errors.ts"; @@ -1242,3 +1243,135 @@ server.listen(Number(flag("--port") ?? 0), "127.0.0.1", () => { // desktop app with network access on) listens on *:. Linux refuses that // bind unless both sockets set SO_REUSEPORT, so on Linux the preload adds it to // the picker's probe and the holder sets it too. + +describe("SSH launch during desktop update", () => { + it.effect("archive launcher reuses the replacement without host Node", () => + Effect.gen(function* () { + const script = yield* captureLauncherFor({ archiveVersion: "1.2.3" }); + const result = runLauncher(script, { + archive: true, + marker: { startedAt: 0, expiresAt: 60_000 }, + readyAt: 2_000, + }); + assert.deepEqual(result.output, { remotePort: 4888, serverKind: "external" }); + assert.equal(result.now, 2_000); + assert.isFalse(result.events.some((event) => event.startsWith("start "))); + }), + ); + + it.effect.each(["managed", "external"] as const)( + "reuses recorded %s server without runtime metadata or an update wait", + (recordedKind) => + Effect.gen(function* () { + const result = runLauncher(yield* captureLauncher, { + marker: { startedAt: 0, expiresAt: 60_000 }, + recordedKind, + }); + assert.deepEqual(result.output, { remotePort: 5999, serverKind: recordedKind }); + assert.equal(result.now, 0); + assert.isFalse(result.events.some((event) => event.startsWith("kill "))); + assert.isFalse(result.events.some((event) => event.startsWith("start "))); + }), + ); + + it.effect.each([ + ["malformed", "broken"], + ["future", { startedAt: 1_000, expiresAt: 61_000 }], + ["expired", { startedAt: -60_000, expiresAt: 0 }], + ] as const)("preserves %s markers without waiting", ([, marker]) => + Effect.gen(function* () { + const result = runLauncher(yield* captureLauncher, { marker }); + assert.equal(result.now, 0); + assert.isTrue(result.markerExists); + assert.deepEqual(result.output, { remotePort: 5999, serverKind: "managed" }); + }), + ); + + it.effect("bounds the wait when the host clock jumps back", () => + Effect.gen(function* () { + const result = runLauncher(yield* captureLauncher, { + marker: { startedAt: 0, expiresAt: 60_000 }, + clockJump: -30_000, + }); + assert.deepEqual(result.output, { remotePort: 5999, serverKind: "managed" }); + assert.isBelow(result.events.filter((event) => event.startsWith("runtime ")).length, 62); + }), + ); + + it.effect("refreshes runtime after readiness removes the marker between polls", () => + Effect.gen(function* () { + const result = runLauncher(yield* captureLauncher, { + marker: { startedAt: 0, expiresAt: 60_000 }, + readyAt: 8_000, + clearMarkerOnReady: true, + }); + assert.deepEqual(result.output, { remotePort: 4888, serverKind: "external" }); + assert.equal(result.now, 8_000); + assert.isFalse(result.markerExists); + assert.isFalse(result.events.some((event) => event.startsWith("start "))); + assert.isFalse(result.events.some((event) => event.startsWith("kill "))); + }), + ); + + it.effect("reuses a runtime published before the first marker read", () => + Effect.gen(function* () { + const result = runLauncher(yield* captureLauncher, { + marker: { startedAt: 0, expiresAt: 60_000 }, + publishAfterFirstRuntimeRead: true, + }); + assert.deepEqual(result.output, { remotePort: 4888, serverKind: "external" }); + assert.equal(result.now, 0); + assert.isFalse(result.events.some((event) => event.startsWith("start "))); + }), + ); + + it.effect("waits across the eight-second installer gap and reuses the replacement server", () => + Effect.gen(function* () { + const result = runLauncher(yield* captureLauncher, { + marker: { startedAt: 0, expiresAt: 60_000 }, + readyAt: 8_000, + }); + assert.deepEqual(result.output, { remotePort: 4888, serverKind: "external" }); + assert.equal(result.now, 8_000); + assert.isFalse(result.events.some((event) => event.startsWith("start "))); + assert.isAtLeast(result.events.filter((event) => event.startsWith("runtime ")).length, 2); + }), + ); + + it.effect("keeps waiting while a stale runtime record points at a dead port", () => + Effect.gen(function* () { + const result = runLauncher(yield* captureLauncher, { + marker: { startedAt: 0, expiresAt: 60_000 }, + initialPort: 3773, + readyAt: 3_000, + }); + assert.deepEqual(result.output, { remotePort: 4888, serverKind: "external" }); + assert.equal(result.now, 3_000); + assert.isFalse(result.events.some((event) => event.startsWith("start "))); + }), + ); + + it.effect("starts a server when the marker expires without a replacement becoming ready", () => + Effect.gen(function* () { + const result = runLauncher(yield* captureLauncher, { + marker: { startedAt: 0, expiresAt: 60_000 }, + }); + assert.deepEqual(result.output, { remotePort: 5999, serverKind: "managed" }); + assert.isAtLeast(result.now, 60_000); + assert.isAtMost(result.now, 61_000); + assert.isTrue(result.markerExists, "an expired marker is ignored, not deleted"); + assert.equal(result.events.filter((event) => event.startsWith("start ")).length, 1); + }), + ); + + it.effect("starts immediately without a marker", () => + Effect.gen(function* () { + const result = runLauncher(yield* captureLauncher, {}); + assert.deepEqual(result.output, { remotePort: 5999, serverKind: "managed" }); + assert.equal(result.now, 0); + assert.equal(result.events.filter((event) => event.startsWith("start ")).length, 1); + assert.equal(result.events.filter((event) => event.startsWith("marker ")).length, 1); + assert.equal(result.events.filter((event) => event.startsWith("runtime ")).length, 1); + }), + ); +}); diff --git a/packages/ssh/src/tunnel.ts b/packages/ssh/src/tunnel.ts index 3703e80809cac..8a7071ba1a405 100644 --- a/packages/ssh/src/tunnel.ts +++ b/packages/ssh/src/tunnel.ts @@ -1,3 +1,7 @@ +import { + DESKTOP_UPDATE_IN_PROGRESS_MARKER_FILE, + DESKTOP_UPDATE_IN_PROGRESS_TTL_MS, +} from "@t3tools/contracts"; import type { DesktopSshEnvironmentBootstrap, DesktopSshEnvironmentTarget, @@ -72,19 +76,26 @@ const REMOTE_PID_EXIT_WAIT_MS = 2_000; // The server answers HTTP before it writes server-runtime.json, which is how // a launch for another alias finds it. const REMOTE_RUNTIME_RECORD_WAIT_SECONDS = 10; +// The desktop update wait runs under the home lock. Its last poll and the +// adoption after it each add a reuse probe, and the poll adds one sleep. +const REMOTE_UPDATE_WAIT_MS = + DESKTOP_UPDATE_IN_PROGRESS_TTL_MS + + 2 * (REMOTE_REUSE_READY_TIMEOUT_MS + SSH_READY_PROBE_TIMEOUT_MS) + + 1_000; // A launch holds the home lock through up to two reuse probes, readiness, two -// server exit waits, and the runtime record wait; each probe may overrun its -// deadline by one request. +// server exit waits, the runtime record wait, and the update wait; each probe +// may overrun its deadline by one request. const REMOTE_LAUNCH_LOCK_WAIT_SECONDS = Math.ceil( (REMOTE_READY_TIMEOUT_MS + 2 * REMOTE_REUSE_READY_TIMEOUT_MS + 2 * REMOTE_PID_EXIT_WAIT_MS + REMOTE_RUNTIME_RECORD_WAIT_SECONDS * 1000 + - 4 * SSH_READY_PROBE_TIMEOUT_MS) / + 4 * SSH_READY_PROBE_TIMEOUT_MS + + REMOTE_UPDATE_WAIT_MS) / 1000, ); const REMOTE_LAUNCH_TIMEOUT_MS = - REMOTE_LAUNCH_LOCK_WAIT_SECONDS * 1000 + REMOTE_LAUNCH_BASE_TIMEOUT_MS; + REMOTE_LAUNCH_LOCK_WAIT_SECONDS * 1000 + REMOTE_UPDATE_WAIT_MS + REMOTE_LAUNCH_BASE_TIMEOUT_MS; export interface RemoteT3RunnerOptions { readonly nodeScriptPath?: string | null; @@ -717,9 +728,29 @@ try { } NODE } +# This script ships with the SSH client; older clients do not honor this marker. +update_remaining() { + if [ "$T3_ARCHIVE_MODE" = "1" ]; then + "$RUNNER_FILE" __ssh-helper update-remaining "$DEFAULT_SERVER_HOME/runtime/@@T3_UPDATE_MARKER_FILE@@" + return + fi + node - "$DEFAULT_SERVER_HOME/runtime/@@T3_UPDATE_MARKER_FILE@@" <<'NODE' +const fs = require("node:fs"); +const path = process.argv[2]; +try { + const { startedAt, expiresAt } = JSON.parse(fs.readFileSync(path, "utf8")); + const now = Date.now(); + if (Number.isFinite(startedAt) && Number.isFinite(expiresAt) && + startedAt <= now && expiresAt > now && expiresAt > startedAt) { + process.stdout.write(String(Math.min(expiresAt - now, @@T3_UPDATE_TTL_MS@@))); + } +} catch {} +NODE +} REMOTE_PID="$(cat "$PID_FILE" 2>/dev/null || true)" REMOTE_PORT="$(cat "$PORT_FILE" 2>/dev/null || true)" REMOTE_MANAGED="$(cat "$MANAGED_FILE" 2>/dev/null || true)" +adopt_default_server() { DEFAULT_RUNTIME_INFO="$(resolve_default_runtime_port 2>/dev/null || true)" DEFAULT_RUNTIME_PID="" DEFAULT_REMOTE_PORT="" @@ -734,6 +765,7 @@ fi if [ -n "$DEFAULT_REMOTE_PORT" ] && [ "$REMOTE_MANAGED" = "managed" ] && [ "$DEFAULT_RUNTIME_PID" = "$REMOTE_PID" ]; then REMOTE_PORT="$DEFAULT_REMOTE_PORT" printf '%s\\n' "$REMOTE_PORT" >"$PORT_FILE" + return 0 elif [ -n "$DEFAULT_REMOTE_PORT" ]; then REMOTE_PORT="$DEFAULT_REMOTE_PORT" if wait_ready "@@T3_REUSE_READY_TIMEOUT_MS@@"; then @@ -755,12 +787,16 @@ elif [ -n "$DEFAULT_REMOTE_PORT" ]; then REMOTE_PID="" REMOTE_MANAGED="external" fi + return 0 else REMOTE_PID="$(cat "$PID_FILE" 2>/dev/null || true)" REMOTE_PORT="$(cat "$PORT_FILE" 2>/dev/null || true)" REMOTE_MANAGED="$(cat "$MANAGED_FILE" 2>/dev/null || true)" fi fi +return 1 +} +adopt_default_server || true if [ "$REMOTE_MANAGED" = "external" ]; then # A server adopted above has just answered. While it is still alive, probing # it again could catch a momentary stall and launch a second server beside it. @@ -808,6 +844,30 @@ if [ -z "$REMOTE_PORT" ] && [ -z "$DEFAULT_RUNTIME_INFO" ]; then break done fi +if [ -z "$REMOTE_PORT" ]; then + # The sleep count bounds a host clock that stops advancing. + UPDATE_WAITED=0 + UPDATE_SAW_MARKER=0 + while [ "$UPDATE_WAITED" -le @@T3_UPDATE_TTL_SECONDS@@ ]; do + UPDATE_REMAINING="$(update_remaining 2>/dev/null || true)" + [ -n "$UPDATE_REMAINING" ] || break + UPDATE_SAW_MARKER=1 + [ "$UPDATE_WAITED" -lt @@T3_UPDATE_TTL_SECONDS@@ ] || break + if adopt_default_server; then break; fi + REMOTE_PID="" + REMOTE_PORT="" + REMOTE_MANAGED="" + sleep 1 + UPDATE_WAITED=$((UPDATE_WAITED + 1)) + done + # The desktop clears the marker after publishing runtime, possibly before the first marker read, + # so refresh once more before falling back. A cleanly stopped server leaves no runtime file. + if { [ "$UPDATE_SAW_MARKER" -eq 1 ] || [ -f "$DEFAULT_RUNTIME_FILE" ]; } && [ -z "$REMOTE_PORT" ] && ! adopt_default_server; then + REMOTE_PID="" + REMOTE_PORT="" + REMOTE_MANAGED="" + fi +fi if [ -z "$REMOTE_PORT" ]; then REMOTE_PORT="$(pick_port)" || true if [ -z "$REMOTE_PORT" ]; then @@ -953,6 +1013,9 @@ export function buildRemoteNodeEnvScript(input?: RemoteT3RunnerOptions): string function buildRemoteLaunchScript(input?: RemoteT3RunnerOptions): string { return applyScriptPlaceholders(REMOTE_LAUNCH_SCRIPT, { + T3_UPDATE_MARKER_FILE: DESKTOP_UPDATE_IN_PROGRESS_MARKER_FILE, + T3_UPDATE_TTL_MS: String(DESKTOP_UPDATE_IN_PROGRESS_TTL_MS), + T3_UPDATE_TTL_SECONDS: String(DESKTOP_UPDATE_IN_PROGRESS_TTL_MS / 1000), T3_ARCHIVE_MODE: isNodeScriptRunner(input) ? "0" : "1", T3_NODE_ENV_SCRIPT: buildRemoteNodeEnvScript(input), T3_RUNNER_SCRIPT: stripTrailingNewlines(buildRemoteT3RunnerScript(input)), From 0bb6eaa546c91915efbd3f092088c694f3949709 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 16:56:52 -0800 Subject: [PATCH 040/922] fix(web): auto-balanced drafts recheck machine load before sending (#35658) Co-authored-by: Lakshmi Tanmay --- apps/web/src/components/ChatView.tsx | 2 + .../src/components/chat/useComposerSend.ts | 19 +- ...seDraftEnvironmentRouting.browser.test.tsx | 227 ++++++++++++++++++ .../chat/useDraftEnvironmentRouting.ts | 84 ++++++- .../src/hooks/useLoadBalancedEnvironment.ts | 20 ++ 5 files changed, 347 insertions(+), 5 deletions(-) create mode 100644 apps/web/src/components/chat/useDraftEnvironmentRouting.browser.test.tsx diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index 8bc637443837e..79c4b8ceb2fc9 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -1798,6 +1798,7 @@ export default function ChatView(props: ChatViewProps) { const { needsLoadBalancing, loadBalancing, + refreshBeforeSend, onAutoEnvironmentStable, autoEnvironmentLabel, isEnvironmentChanging, @@ -2939,6 +2940,7 @@ export default function ChatView(props: ChatViewProps) { clearUsageLimitsFor, needsLoadBalancing, loadBalancing, + refreshBeforeSend, readPendingEnvironmentChange, pendingApprovals, respondingRequestIds, diff --git a/apps/web/src/components/chat/useComposerSend.ts b/apps/web/src/components/chat/useComposerSend.ts index 648b2fd62bf05..7257dee5ced9e 100644 --- a/apps/web/src/components/chat/useComposerSend.ts +++ b/apps/web/src/components/chat/useComposerSend.ts @@ -96,6 +96,7 @@ import { environmentServerConfigsAtom } from "../../state/server"; import { threadEnvironment } from "../../state/threads"; import { runMobileComposerTransition } from "./draftHeroTransition"; import { useClientSettingsHydrated } from "../../hooks/useSettings"; +import { useStableCallback } from "../../hooks/useStableCallback"; import { environmentPresentations } from "../../state/presentation"; import { approvalRedirectNotice, @@ -216,6 +217,7 @@ interface ComposerSendInput { readonly clearUsageLimitsFor: UsageLimitsPanel["clearFor"]; readonly needsLoadBalancing: boolean; readonly loadBalancing: DraftEnvironmentRouting["loadBalancing"]; + readonly refreshBeforeSend: DraftEnvironmentRouting["refreshBeforeSend"]; readonly readPendingEnvironmentChange: DraftEnvironmentRouting["readPendingEnvironmentChange"]; readonly pendingApprovals: PendingThreadRequests["pendingApprovals"]; readonly respondingRequestIds: PendingThreadRequests["respondingRequestIds"]; @@ -311,6 +313,7 @@ export function useComposerSend(input: ComposerSendInput) { clearUsageLimitsFor, needsLoadBalancing, loadBalancing, + refreshBeforeSend, readPendingEnvironmentChange, pendingApprovals, respondingRequestIds, @@ -1488,5 +1491,19 @@ export function useComposerSend(input: ComposerSendInput) { } }; - return { onSend }; + const onSendLatest = useStableCallback(onSend); + const onSendWithRouting = async (...args: Parameters) => { + args[0]?.preventDefault(); + const refresh = + args[3] || sendInFlightRef.current || readPendingEnvironmentChange() !== null + ? null + : refreshBeforeSend(); + if (refresh === null) return onSend(...args); + sendInFlightRef.current = true; + const ready = await refresh.finally(() => { + sendInFlightRef.current = false; + }); + if (ready) return onSendLatest(...args); + }; + return { onSend: onSendWithRouting }; } diff --git a/apps/web/src/components/chat/useDraftEnvironmentRouting.browser.test.tsx b/apps/web/src/components/chat/useDraftEnvironmentRouting.browser.test.tsx new file mode 100644 index 0000000000000..0dafee8167119 --- /dev/null +++ b/apps/web/src/components/chat/useDraftEnvironmentRouting.browser.test.tsx @@ -0,0 +1,227 @@ +import { PrimaryConnectionTarget } from "@t3tools/client-runtime/connection"; +import * as Option from "effect/Option"; +import type { EnvironmentPresentation } from "../../state/environments"; +import type { ServerProvider } from "@t3tools/contracts"; +import { + scopedThreadKey, + scopeProjectRef, + scopeThreadRef, +} from "@t3tools/client-runtime/environment"; +import { createModelSelection } from "@t3tools/shared/model"; +import { DEFAULT_UNIFIED_SETTINGS } from "@t3tools/contracts/settings"; +import { + EnvironmentId, + ProjectId, + ProviderDriverKind, + ProviderInstanceId, +} from "@t3tools/contracts"; +import { expect, it, vi } from "vite-plus/test"; + +import { act, render } from "../../../test/render"; +import { DraftId, useComposerDraftStore } from "../../composerDraftStore"; +import { useDraftEnvironmentRouting } from "./useDraftEnvironmentRouting"; +import { appAtomRegistry } from "../../rpc/atomRegistry"; +import { draftFanoutSelectionsAtom } from "./chatViewSend"; + +const resources = vi.hoisted(() => ({ + refreshSelection: vi.fn<(ids: readonly EnvironmentId[]) => Promise>(), +})); +vi.mock("../../hooks/useLoadBalancedEnvironment", () => ({ + useLoadBalancedEnvironment: () => ({ + pending: false, + failed: false, + environmentId: null, + refresh: () => {}, + refreshSelection: resources.refreshSelection, + }), +})); +vi.mock("../../state/entities", () => ({ useProjects: () => [] })); +vi.mock("../../hooks/useScratchProject", () => ({ useScratchProject: () => ({}) })); + +function setup() { + resources.refreshSelection.mockReset(); + const a = EnvironmentId.make("machine-a"); + const b = EnvironmentId.make("machine-b"); + const draftId = DraftId.make("fresh-routing-draft"); + const projectId = ProjectId.make("project"); + const store = useComposerDraftStore.getState(); + store.clearDraftThread(draftId); + store.setProjectDraftThreadId(scopeProjectRef(a, projectId), draftId, { + environmentSelection: "auto", + loadBalancedEnvironmentId: a, + }); + store.setPrompt(draftId, "Keep this prompt"); + const provider: ServerProvider = { + instanceId: ProviderInstanceId.make("codex"), + driver: ProviderDriverKind.make("codex"), + enabled: true, + installed: true, + status: "ready", + auth: { status: "authenticated" }, + availability: "available", + version: null, + checkedAt: "2026-11-10T01:00:00.000Z", + models: [], + slashCommands: [], + skills: [], + }; + const input: Parameters[0] = { + draftId, + draftThread: store.getDraftSession(draftId), + envLocked: false, + automaticEnvironment: true, + logicalProjectEnvironments: [a, b].map((environmentId) => ({ + environmentId, + projectId, + label: environmentId, + isPrimary: environmentId === a, + machine: "desktop", + })), + environmentById: new Map( + [a, b].map((id): [EnvironmentId, EnvironmentPresentation] => [ + id, + { + environmentId: id, + label: id, + displayUrl: null, + relayManaged: false, + entry: { + target: new PrimaryConnectionTarget({ + environmentId: id, + label: id, + httpBaseUrl: "http://localhost:3000", + wsBaseUrl: "ws://localhost:3000", + }), + profile: Option.none(), + enabled: true, + }, + connection: { phase: "connected", error: null, traceId: null }, + serverConfig: null, + }, + ]), + ), + providersByEnvironment: new Map([a, b].map((id) => [id, [provider]])), + loadBalancingSettings: { loadBalancingWeights: {} }, + referencedThreadContexts: [], + activeProviderInstanceId: provider.instanceId, + selectedProvider: provider.driver, + composerHasAttachments: false, + activeProjectKey: "project", + activeProjectIsScratch: false, + projectGroupingSettings: DEFAULT_UNIFIED_SETTINGS, + sendInFlightRef: { current: false }, + }; + resources.refreshSelection.mockImplementation(async (ids) => (ids.includes(b) ? b : null)); + return { a, b, draftId, input, store }; +} + +function Harness({ + input, + onPrepared, +}: { + input: Parameters[0]; + onPrepared?: (ready: boolean | null) => void; +}) { + const routing = useDraftEnvironmentRouting(input); + const draft = useComposerDraftStore((state) => state.getDraftSession(input.draftId!)); + return ( + <> + {draft?.environmentId} + + + ); +} + +it("refreshes a stored automatic choice before sending an unsent draft", async () => { + const { a, b, draftId, input, store } = setup(); + const selections = ["model-a", "model-b"].map((model) => + createModelSelection(ProviderInstanceId.make("codex"), model), + ); + const threadId = input.draftThread!.threadId; + const destinationSelections = draftFanoutSelectionsAtom( + scopedThreadKey(scopeThreadRef(b, threadId)), + ); + appAtomRegistry.set(destinationSelections, null); + appAtomRegistry.set( + draftFanoutSelectionsAtom(scopedThreadKey(scopeThreadRef(a, threadId))), + selections, + ); + store.setDraftThreadContext(draftId, { + branch: "main", + envMode: "worktree", + environmentSelection: "auto", + }); + await using screen = await render( + , + ); + await expect.element(screen.getByText(a)).toBeInTheDocument(); + await screen.getByRole("button", { name: "Send" }).click(); + await expect.element(screen.getByText(b)).toBeInTheDocument(); + expect(resources.refreshSelection).toHaveBeenCalledWith([a, b]); + expect(store.getDraftSession(draftId)).toMatchObject({ + loadBalancedEnvironmentId: b, + branch: "main", + envMode: "worktree", + }); + expect(store.getComposerDraft(draftId)?.prompt).toBe("Keep this prompt"); + expect(appAtomRegistry.get(destinationSelections)).toEqual(selections); +}); + +it.each(["manual", "attachments", "promoted"] as const)( + "keeps the machine for %s drafts", + async (kind) => { + const { a, draftId, input, store } = setup(); + if (kind === "manual") store.setDraftThreadContext(draftId, { environmentSelection: "manual" }); + const guardedInput = { + ...input, + automaticEnvironment: kind !== "manual", + composerHasAttachments: kind === "attachments", + draftThread: + kind === "promoted" + ? { + ...input.draftThread!, + promotedTo: { environmentId: a, threadId: input.draftThread!.threadId }, + } + : input.draftThread, + }; + await using screen = await render(); + await screen.getByRole("button", { name: "Send" }).click(); + expect(resources.refreshSelection).not.toHaveBeenCalled(); + expect(store.getDraftSession(draftId)?.environmentId).toBe(a); + }, +); + +it("does not reuse a stored choice when refreshed resources have no winner", async () => { + const { a, input } = setup(); + resources.refreshSelection.mockResolvedValue(null); + const onPrepared = vi.fn(); + await using screen = await render(); + await screen.getByRole("button", { name: "Send" }).click(); + await expect.element(screen.getByText(a)).toBeInTheDocument(); + await vi.waitFor(() => expect(onPrepared).toHaveBeenCalledWith(false)); +}); + +it("abandons a refresh when the draft changes while resources are in flight", async () => { + const { a, b, draftId, input, store } = setup(); + let resolve!: (environmentId: EnvironmentId) => void; + resources.refreshSelection.mockReturnValue( + new Promise((done) => { + resolve = done; + }), + ); + await using screen = await render(); + await screen.getByRole("button", { name: "Send" }).click(); + await act(async () => { + store.setPrompt(draftId, "Edited while checking"); + resolve(b); + }); + await expect.element(screen.getByText(a)).toBeInTheDocument(); + expect(store.getComposerDraft(draftId)?.prompt).toBe("Edited while checking"); +}); diff --git a/apps/web/src/components/chat/useDraftEnvironmentRouting.ts b/apps/web/src/components/chat/useDraftEnvironmentRouting.ts index 1e991899a5537..b59408a35a7cb 100644 --- a/apps/web/src/components/chat/useDraftEnvironmentRouting.ts +++ b/apps/web/src/components/chat/useDraftEnvironmentRouting.ts @@ -9,8 +9,13 @@ import { resolveProjectProviderInstanceEnabled, type ThreadContextRecord, } from "@t3tools/contracts"; -import { scopeProjectRef } from "@t3tools/client-runtime/environment"; +import { + scopedThreadKey, + scopeProjectRef, + scopeThreadRef, +} from "@t3tools/client-runtime/environment"; import { useEffect, useLayoutEffect, useRef, useState } from "react"; +import { flushSync } from "react-dom"; import { toastManager } from "../ui/toast"; import { deriveLogicalProjectKeyFromSettings, @@ -20,6 +25,9 @@ import { useComposerDraftStore, DraftId } from "../../composerDraftStore"; import { type EnvironmentPresentation, useEnvironmentProviders } from "../../state/environments"; import { useProjects } from "../../state/entities"; import type { DraftSessionState } from "../../composerDraftStore"; +import { loadBalancingSendWarning } from "./composerSend.logic"; +import { appAtomRegistry } from "../../rpc/atomRegistry"; +import { draftFanoutSelectionsAtom } from "./chatViewSend"; interface DraftEnvironmentRoutingInput { readonly draftId: DraftId | null; @@ -74,7 +82,7 @@ export function useDraftEnvironmentRouting(input: DraftEnvironmentRoutingInput) const allProjects = useProjects(); const { openScratchProject } = useScratchProject(); const needsLoadBalancing = automaticEnvironment && !draftThread?.loadBalancedEnvironmentId; - const loadBalancingCandidates = needsLoadBalancing + const loadBalancingCandidates = automaticEnvironment ? logicalProjectEnvironments .filter((candidate) => { const environment = environmentById.get(candidate.environmentId); @@ -108,9 +116,76 @@ export function useDraftEnvironmentRouting(input: DraftEnvironmentRoutingInput) .map((candidate) => candidate.environmentId) : []; const loadBalancing = useLoadBalancedEnvironment( - loadBalancingCandidates, + needsLoadBalancing ? loadBalancingCandidates : [], loadBalancingSettings.loadBalancingWeights, ); + const readRouting = useStableCallback(() => ({ input, loadBalancingCandidates })); + const refreshBeforeSend = () => { + if ( + !automaticEnvironment || + !draftId || + !draftThread?.loadBalancedEnvironmentId || + draftThread.promotedTo || + composerHasAttachments + ) + return null; + const originalDraft = getDraftSession(draftId); + const composerDraft = useComposerDraftStore.getState().getComposerDraft(draftId); + return loadBalancing.refreshSelection(loadBalancingCandidates).then((environmentId) => { + const current = readRouting(); + if ( + current.input.draftId !== draftId || + !current.input.automaticEnvironment || + current.input.composerHasAttachments || + current.input.activeProjectKey !== activeProjectKey || + current.input.selectedProvider !== selectedProvider || + current.input.activeProviderInstanceId !== activeProviderInstanceId || + current.input.loadBalancingSettings.loadBalancingWeights !== + loadBalancingSettings.loadBalancingWeights || + current.loadBalancingCandidates.join("\n") !== loadBalancingCandidates.join("\n") || + getDraftSession(draftId) !== originalDraft || + useComposerDraftStore.getState().getComposerDraft(draftId) !== composerDraft + ) + return false; + const target = current.input.logicalProjectEnvironments.find( + (candidate) => candidate.environmentId === environmentId, + ); + if (!target?.projectId) { + toastManager.add({ + type: "warning", + ...loadBalancingSendWarning({ + pending: false, + threadContexts: referencedThreadContexts, + candidateEnvironmentIds: loadBalancingCandidates, + }), + }); + return false; + } + const projectRef = scopeProjectRef(target.environmentId, target.projectId); + if (originalDraft && target.environmentId !== originalDraft.environmentId) { + appAtomRegistry.set( + draftFanoutSelectionsAtom( + scopedThreadKey(scopeThreadRef(target.environmentId, originalDraft.threadId)), + ), + appAtomRegistry.get( + draftFanoutSelectionsAtom( + scopedThreadKey(scopeThreadRef(originalDraft.environmentId, originalDraft.threadId)), + ), + ), + ); + } + // The send must read the target project's composer and provider context after retargeting. + flushSync(() => + setDraftThreadContext(draftId, { + projectRef, + environmentSelection: "auto", + loadBalancedEnvironmentId: target.environmentId, + branch: originalDraft?.branch ?? null, + }), + ); + return true; + }); + }; // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- writes the resolved load-balanced environment into the draft store once the async pick settles useEffect(() => { if (!needsLoadBalancing || loadBalancing.pending || !draftId || sendInFlightRef.current) return; @@ -133,7 +208,7 @@ export function useDraftEnvironmentRouting(input: DraftEnvironmentRoutingInput) setDraftThreadContext, ]); const onAutoEnvironment = () => { - if (envLocked || !draftId) return; + if (envLocked || !draftId || sendInFlightRef.current) return; if (composerHasAttachments) { toastManager.add({ type: "warning", @@ -262,6 +337,7 @@ export function useDraftEnvironmentRouting(input: DraftEnvironmentRoutingInput) return { needsLoadBalancing, loadBalancing, + refreshBeforeSend, onAutoEnvironmentStable, autoEnvironmentLabel, isEnvironmentChanging, diff --git a/apps/web/src/hooks/useLoadBalancedEnvironment.ts b/apps/web/src/hooks/useLoadBalancedEnvironment.ts index 4824945a086c1..d81d23ca3eb9e 100644 --- a/apps/web/src/hooks/useLoadBalancedEnvironment.ts +++ b/apps/web/src/hooks/useLoadBalancedEnvironment.ts @@ -1,5 +1,6 @@ import { RegistryContext, useAtomValue } from "@effect/atom-react"; import { chooseLoadBalancedEnvironment } from "@t3tools/client-runtime/load-balancing"; +import { executeAtomQuery } from "@t3tools/client-runtime/state/runtime"; import type { EnvironmentId } from "@t3tools/contracts"; import { Atom } from "effect/reactivity"; import { useContext } from "react"; @@ -50,6 +51,24 @@ export function useLoadBalancedEnvironment( registry.refresh(serverEnvironment.hostResources({ environmentId, input: {} })); } }; + const refreshSelection = async (ids: readonly EnvironmentId[]) => { + const candidates = await Promise.all( + ids.map(async (environmentId) => { + const result = await executeAtomQuery( + registry, + serverEnvironment.hostResources({ environmentId, input: {} }), + { refresh: true, reportFailure: false, signal: AbortSignal.timeout(5_000) }, + ); + return { + environmentId, + resources: result._tag === "Success" ? result.value : null, + receivedAt: Date.now(), + weight: weights[environmentId] ?? 50, + }; + }), + ); + return chooseLoadBalancedEnvironment(candidates, Date.now()) as EnvironmentId | null; + }; const { evaluatedAt, resources } = useAtomValue(hostResourcesAtom(environmentIds.join("\n"))); const pending = resources.some((resource) => resource.pending); const environmentId = chooseLoadBalancedEnvironment( @@ -61,6 +80,7 @@ export function useLoadBalancedEnvironment( ) as EnvironmentId | null; return { refresh, + refreshSelection, pending, environmentId, failed: !pending && environmentId === null && resources.some((resource) => resource.failed), From 4137412fe933b873692cdb270ffe8ab50834e8ff Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 17:06:52 -0800 Subject: [PATCH 041/922] fix(web): screen readers at Everything hear context compaction start (#35739) --- .../chat/turnDetailAnnouncement.test.ts | 23 +++++++++++++++++-- .../components/chat/turnDetailAnnouncement.ts | 2 +- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/apps/web/src/components/chat/turnDetailAnnouncement.test.ts b/apps/web/src/components/chat/turnDetailAnnouncement.test.ts index 99fcfcd4fd864..42737043c5331 100644 --- a/apps/web/src/components/chat/turnDetailAnnouncement.test.ts +++ b/apps/web/src/components/chat/turnDetailAnnouncement.test.ts @@ -116,11 +116,30 @@ describe("turnDetail", () => { activity: null, }, { - name: "nothing while the context is compacted", + name: "the context being compacted", entries: [ prompt, command("git"), - work("compact", { tone: "info", sourceActivityKind: "context-compaction" }), + work("compact", { + tone: "info", + sourceActivityKind: "context-compaction", + label: "Compacting context", + toolLifecycleStatus: "inProgress", + }), + ], + activity: "Compacting context", + }, + { + name: "nothing once the context is compacted", + entries: [ + prompt, + command("git"), + work("compact", { + tone: "info", + sourceActivityKind: "context-compaction", + label: "Context compacted", + toolLifecycleStatus: "completed", + }), ], activity: null, }, diff --git a/apps/web/src/components/chat/turnDetailAnnouncement.ts b/apps/web/src/components/chat/turnDetailAnnouncement.ts index acebdfb9f7003..593e86e0c3c29 100644 --- a/apps/web/src/components/chat/turnDetailAnnouncement.ts +++ b/apps/web/src/components/chat/turnDetailAnnouncement.ts @@ -106,7 +106,7 @@ export function turnDetail( if (entry.kind === "work") { const work = entry.entry; if (work.sourceActivityKind === "context-compaction") { - activity ??= null; + activity ??= work.toolLifecycleStatus === "inProgress" ? work.label : null; continue; } // Notices, todo lists and checkpoints sit beside the turn's steps without being one. From 59e64eef881632a23f89c4138bcf37f23d92bf93 Mon Sep 17 00:00:00 2001 From: Aviddaram <130821636+darjss@users.noreply.github.com> Date: Fri, 13 Nov 2026 09:08:02 +0800 Subject: [PATCH 042/922] fix(server): t3_thread_read returns the newest items and fits in agent context (#33428) Co-authored-by: Julius Marminge --- apps/server/src/mcp/McpHttpServer.test.ts | 6 +- .../OrchestratorMcpService.activity.test.ts | 109 ++++++++++++++- apps/server/src/mcp/OrchestratorMcpService.ts | 78 +++++++---- apps/server/src/mcp/toolkits/core.test.ts | 3 +- .../mcp/toolkits/orchestrator/tools.test.ts | 2 +- .../src/mcp/toolkits/orchestrator/tools.ts | 2 +- .../ContextHandoffDelivery.ts | 2 +- .../orchestration-v2/ProjectionStore.test.ts | 24 ++++ .../src/orchestration-v2/ProjectionStore.ts | 131 ++++++++++++++---- apps/server/src/peer/RemoteDelegation.test.ts | 1 + apps/server/src/peer/RemoteDelegation.ts | 2 +- .../src/provider/agentContextBudget.json | 2 +- .../orchestrator-mcp-server.md | 12 +- packages/contracts/src/orchestratorMcp.ts | 17 ++- 14 files changed, 318 insertions(+), 73 deletions(-) diff --git a/apps/server/src/mcp/McpHttpServer.test.ts b/apps/server/src/mcp/McpHttpServer.test.ts index 54d3470800280..cdfeab7240a3c 100644 --- a/apps/server/src/mcp/McpHttpServer.test.ts +++ b/apps/server/src/mcp/McpHttpServer.test.ts @@ -696,13 +696,13 @@ it.effect( ...thread, limit: 100, runLimit: 50, - maxCharsPerItem: 50_000, + maxCharsPerItem: 20_000, }); yield* callTool("t3_thread_read", { ...thread, limit: 7, runLimit: 1, maxCharsPerItem: 1 }); expect(calls).toEqual([ - { ...thread, limit: 100, runLimit: 50, maxCharsPerItem: 50_000 }, - { ...thread, limit: 100, runLimit: 50, maxCharsPerItem: 50_000 }, + { ...thread, limit: 100, runLimit: 50, maxCharsPerItem: 20_000 }, + { ...thread, limit: 100, runLimit: 50, maxCharsPerItem: 20_000 }, { ...thread, limit: 7, runLimit: 1, maxCharsPerItem: 1 }, ]); }).pipe(Effect.provide(layerRecordingTools(calls))); diff --git a/apps/server/src/mcp/OrchestratorMcpService.activity.test.ts b/apps/server/src/mcp/OrchestratorMcpService.activity.test.ts index f0f7201d6129b..1932986fd1006 100644 --- a/apps/server/src/mcp/OrchestratorMcpService.activity.test.ts +++ b/apps/server/src/mcp/OrchestratorMcpService.activity.test.ts @@ -176,7 +176,8 @@ it("readThread preserves caller access errors and prefers activity-run status ov Layer.provide( Layer.mergeAll( Layer.mock(ThreadManagementService.ThreadManagementService)({ - getTimelinePage: () => Effect.succeed({ items: [], totalItems: 0, hasMore: false }), + getTimelinePage: () => + Effect.succeed({ items: [], totalItems: 0, hasMore: false, hasEarlier: false }), getThreadRecords: (threadId) => callerUnavailable ? Effect.fail( @@ -328,6 +329,7 @@ it("readThread pages cut-off text without splitting an emoji across pages", asyn ) as unknown as OrchestrationV2ThreadProjection["visibleTurnItems"], totalItems: rows.length, hasMore: remaining.length > options.limit, + hasEarlier: false, }); }, getThreadRecords: () => Effect.succeed(projection), @@ -390,6 +392,107 @@ it("readThread pages cut-off text without splitting an emoji across pages", asyn }).pipe(Effect.provide(layer), Effect.runPromise); }); +it("readThread returns the newest items that fit the response budget", async () => { + const projection = { + thread: baseThread({ + threadId: parentThreadId, + title: "Parent", + instanceId: parentInstanceId, + model: "gpt-5.4", + }), + runs: [makeRun({ id: activeRunId, ordinal: 1, status: "running" })], + visibleTurnItems: [], + providerTurns: [], + runtimeRequests: [], + messages: [], + contextTransfers: [], + subagents: [], + updatedAt: now, + } as unknown as OrchestrationV2ThreadProjection; + // A long thread's newest 100 activity items, the read agents make most. + const rows = Array.from({ length: 100 }, (_, position) => ({ + position, + visibility: "local", + sourceThreadId: parentThreadId, + sourceItemId: TurnItemId.make(`turn-item-mcp-long-${position}`), + item: { + type: "reasoning", + runId: activeRunId, + status: "completed", + title: null, + text: "x".repeat(1_500), + updatedAt: now, + }, + })); + const pageOptions: Array = []; + + const layer = layerOrchestratorService.pipe( + Layer.provide( + Layer.mergeAll( + Layer.mock(ThreadManagementService.ThreadManagementService)({ + getTimelinePage: (_threadId, options) => { + pageOptions.push(options); + return Effect.succeed({ + items: rows as unknown as OrchestrationV2ThreadProjection["visibleTurnItems"], + totalItems: 3_000, + hasMore: false, + hasEarlier: true, + }); + }, + getThreadRecords: () => Effect.succeed(projection), + getProjectThreadRecords: () => Effect.succeed(projection), + getThreadShell: () => + Effect.succeed(projection.thread as unknown as OrchestrationV2ThreadShell), + } satisfies Partial), + ServerSettings.layerTest(), + Layer.mock(ProviderRegistry.ProviderRegistry)({ + getProviders: Effect.succeed([]), + } satisfies Partial), + Layer.mock(ProjectService.ProjectService)({}), + Layer.mock(SecretRequests.SecretRequests)({}), + Layer.mock(RemoteDelegation.RemoteDelegation)({}), + Layer.mock(ScheduledTaskService.ScheduledTaskService)({ + list: () => Effect.succeed({ tasks: [] }), + } satisfies Partial), + Layer.mock(ProviderAdapterRegistry.ProviderAdapterRegistryV2)({ + list: () => Effect.succeed([]), + } satisfies Partial), + NodeCrypto.layer, + ), + ), + ); + + await Effect.gen(function* () { + const service = yield* OrchestratorMcpService.OrchestratorMcpService; + const read = { + threadId: parentThreadId, + view: "activity" as const, + limit: 100, + maxCharsPerItem: 1_500, + }; + const result = yield* service.readThread(makeScope(), read); + // Linked environments and the CLI read as clients without a cursor and follow only hasMore. + const first = yield* service.readThread({ ...makeScope(), thread: undefined }, read); + const fromStart = yield* service.readThread(makeScope(), { ...read, afterPosition: -1 }); + + expect(pageOptions).toEqual([ + { beforePosition: Number.POSITIVE_INFINITY, limit: 100, view: "activity" }, + { limit: 100, view: "activity" }, + { afterPosition: -1, limit: 100, view: "activity" }, + ]); + // Claude Code saves results over ~50k chars of this JSON to a file instead of showing them. + expect(JSON.stringify(result).length).toBeLessThan(31_000); + expect(result.items.length).toBeLessThan(100); + expect(result.items.at(-1)?.position).toBe(99); + expect(result.earlierPosition).toBe(result.items[0]?.position); + expect(result.hasMore).toBe(false); + expect(first.items[0]?.position).toBe(0); + expect(first.hasMore).toBe(true); + expect(first.nextPosition).toBe(first.items.at(-1)?.position); + expect(fromStart.items[0]?.position).toBe(0); + }).pipe(Effect.provide(layer), Effect.runPromise); +}); + it("taskStatus returns task.providerInstanceId rather than the driver kind", async () => { const parentProjection = { thread: baseThread({ @@ -474,7 +577,8 @@ it("taskStatus returns task.providerInstanceId rather than the driver kind", asy Layer.provide( Layer.mergeAll( Layer.mock(ThreadManagementService.ThreadManagementService)({ - getTimelinePage: () => Effect.succeed({ items: [], totalItems: 0, hasMore: false }), + getTimelinePage: () => + Effect.succeed({ items: [], totalItems: 0, hasMore: false, hasEarlier: false }), getThreadRecords: (threadId) => { if (threadId === parentThreadId) return Effect.succeed(parentProjection); if (threadId === childThreadId) return Effect.succeed(childProjection); @@ -595,6 +699,7 @@ it("readThread and sendToThread reach threads in other projects", async () => { items: foreignProjection(threadId).visibleTurnItems, totalItems: 1, hasMore: false, + hasEarlier: false, }), getProjectThreadRecords: (input) => input.threadId === foreignThreadId && input.projectId === foreignProjectId diff --git a/apps/server/src/mcp/OrchestratorMcpService.ts b/apps/server/src/mcp/OrchestratorMcpService.ts index 79038454ee737..e954ae7380935 100644 --- a/apps/server/src/mcp/OrchestratorMcpService.ts +++ b/apps/server/src/mcp/OrchestratorMcpService.ts @@ -146,6 +146,10 @@ const DEFAULT_THREAD_LIST_LIMIT = 10; const DEFAULT_THREAD_READ_LIMIT = 10; const DEFAULT_THREAD_RUN_LIMIT = 10; const DEFAULT_THREAD_ITEM_MAX_CHARS = 500; +// Claude Code saves MCP results over ~25k tokens to a file instead of showing them. Thread JSON +// runs about 2 chars per token, so a read stops adding items here and reports the rest as more. +const THREAD_READ_BUDGET_CHARS = 30_000; +const encodeJsonText = Schema.encodeSync(Schema.fromJsonString(Schema.Unknown)); interface ResolvedTarget { readonly modelSelection: ModelSelection; @@ -3061,20 +3065,25 @@ const make = Effect.gen(function* () { readThread: Effect.fn("OrchestratorMcpService.readThread")(function* (scope, input) { const { parent, target, shell } = yield* loadReadableThread(scope, input.threadId); const view = input.view ?? "messages"; - const afterPosition = input.afterPosition ?? -1; const limit = input.limit ?? DEFAULT_THREAD_READ_LIMIT; const maxChars = input.maxCharsPerItem ?? DEFAULT_THREAD_ITEM_MAX_CHARS; + // Client callers (the CLI, older linked environments) page forward from a cursorless read. + const newestFirst = + input.beforePosition !== undefined || + (input.afterPosition === undefined && scope.thread !== undefined); const timeline = yield* threadManagement .getTimelinePage(input.threadId, { - afterPosition, + ...(input.afterPosition === undefined ? {} : { afterPosition: input.afterPosition }), + ...(newestFirst + ? { beforePosition: input.beforePosition ?? Number.POSITIVE_INFINITY } + : {}), limit, view, ...(input.itemId === undefined ? {} : { itemId: input.itemId }), }) .pipe(Effect.mapError(threadManagementFailure)); - const page = timeline.items; const messageIdsByThread = new Map>(); - for (const row of page) { + for (const row of timeline.items) { if (row.item.type !== "user_message" && row.item.type !== "assistant_message") continue; const ids = messageIdsByThread.get(row.sourceThreadId) ?? []; ids.push(row.item.messageId); @@ -3090,6 +3099,39 @@ const make = Effect.gen(function* () { { concurrency: 1 }, ); const messagesByThreadId = new Map(sourceMessages); + const thread = threadDetail( + scope, + target, + timeline.totalItems, + shell, + yield* Clock.currentTimeMillis, + input.afterPosition === undefined && + input.beforePosition === undefined && + input.itemId === undefined, + ); + const recentRuns = target.runs + .toSorted((left, right) => right.ordinal - left.ordinal) + .slice(0, input.runLimit ?? DEFAULT_THREAD_RUN_LIMIT) + .map((run) => threadRun(target, run)); + const allItems = timeline.items.map((row) => + timelineItem({ + row, + maxChars, + messagesByThreadId, + ...(input.itemId === undefined ? {} : { textOffset: input.textOffset ?? 0 }), + }), + ); + // Keep the end of the page the caller is reading toward, and at least one item. + let size = encodeJsonText({ thread, recentRuns }).length; + let kept = 0; + for (const item of newestFirst ? allItems.toReversed() : allItems) { + size += encodeJsonText(item).length + 1; + if (kept > 0 && size > THREAD_READ_BUDGET_CHARS) break; + kept++; + } + const start = newestFirst ? allItems.length - kept : 0; + const items = allItems.slice(start, start + kept); + const page = timeline.items.slice(start, start + kept); const returnedRunIds = new Set( page.filter((row) => row.sourceThreadId === target.thread.id).map((row) => row.item.runId), ); @@ -3141,28 +3183,12 @@ const make = Effect.gen(function* () { } } return { - thread: threadDetail( - scope, - target, - timeline.totalItems, - shell, - yield* Clock.currentTimeMillis, - input.afterPosition === undefined && input.itemId === undefined, - ), - recentRuns: target.runs - .toSorted((left, right) => right.ordinal - left.ordinal) - .slice(0, input.runLimit ?? DEFAULT_THREAD_RUN_LIMIT) - .map((run) => threadRun(target, run)), - items: page.map((row) => - timelineItem({ - row, - maxChars, - messagesByThreadId, - ...(input.itemId === undefined ? {} : { textOffset: input.textOffset ?? 0 }), - }), - ), - nextPosition: page.at(-1)?.position ?? null, - hasMore: timeline.hasMore, + thread, + recentRuns, + items, + nextPosition: items.at(-1)?.position ?? null, + hasMore: timeline.hasMore || (!newestFirst && kept < allItems.length), + earlierPosition: timeline.hasEarlier || start > 0 ? (items[0]?.position ?? null) : null, } satisfies OrchestratorMcpThreadReadResult; }), sendToThread: Effect.fn("OrchestratorMcpService.sendToThread")(function* (scope, input) { diff --git a/apps/server/src/mcp/toolkits/core.test.ts b/apps/server/src/mcp/toolkits/core.test.ts index 66897e9c39059..5e80cf41b36b5 100644 --- a/apps/server/src/mcp/toolkits/core.test.ts +++ b/apps/server/src/mcp/toolkits/core.test.ts @@ -1114,7 +1114,8 @@ it.effect("discovers workflow stop targets and requires orchestration capability getThreadShell: (id) => Effect.succeed(McpToolAccessTestkit.liveThreadShell(id)), getProjectThreadRecords: () => Effect.succeed(McpToolAccessTestkit.idleThreadProjection(shell)), - getTimelinePage: () => Effect.succeed({ items: [row], totalItems: 1, hasMore: false }), + getTimelinePage: () => + Effect.succeed({ items: [row], totalItems: 1, hasMore: false, hasEarlier: false }), stopWorkflow: (input) => Effect.sync(() => { stopped.push(input); diff --git a/apps/server/src/mcp/toolkits/orchestrator/tools.test.ts b/apps/server/src/mcp/toolkits/orchestrator/tools.test.ts index ea0caa4ce166a..65b88a120b1a3 100644 --- a/apps/server/src/mcp/toolkits/orchestrator/tools.test.ts +++ b/apps/server/src/mcp/toolkits/orchestrator/tools.test.ts @@ -11,7 +11,7 @@ it("states t3_thread_read page size limits in the parameter descriptions", () => const schema = Tool.getJsonSchema(OrchestratorToolkit.tools.t3_thread_read) as { readonly properties: Readonly>; }; - const limits = { limit: "100", runLimit: "50", maxCharsPerItem: "50000" }; + const limits = { limit: "100", runLimit: "50", maxCharsPerItem: "20000" }; for (const [name, maximum] of Object.entries(limits)) { expect(schema.properties[name]?.description, name).toContain(maximum); } diff --git a/apps/server/src/mcp/toolkits/orchestrator/tools.ts b/apps/server/src/mcp/toolkits/orchestrator/tools.ts index 38d8fb4e0ada5..d85786c9f5c17 100644 --- a/apps/server/src/mcp/toolkits/orchestrator/tools.ts +++ b/apps/server/src/mcp/toolkits/orchestrator/tools.ts @@ -245,7 +245,7 @@ const ThreadListTool = Tool.make("t3_thread_list", { const ThreadReadTool = Tool.make("t3_thread_read", { description: - "Read any thread by id. `messages` (default): user and assistant messages and plans. `activity`: all timeline items. Keep reads small: low `limit` and `maxCharsPerItem`. Page with `afterPosition=nextPosition`. Cut-off text: `itemId` with `textOffset=nextTextOffset`. Reading a child's final result marks it delivered. In your reply, name it as its `link` verbatim.", + "Read any thread by id. View `messages` (default) or `activity` (all items). Newest first; older: `beforePosition=earlierPosition`; from the start: `afterPosition=-1`, then `nextPosition`. Cut-off text: `itemId`, `textOffset=nextTextOffset`. Reading a child's final result marks it delivered. In your reply, name it as its `link` verbatim.", parameters: OrchestratorMcpThreadReadInput, success: OrchestratorMcpThreadReadResult, failure: OrchestratorMcpFailure, diff --git a/apps/server/src/orchestration-v2/ContextHandoffDelivery.ts b/apps/server/src/orchestration-v2/ContextHandoffDelivery.ts index 8919030f4a2c1..5211da2faf169 100644 --- a/apps/server/src/orchestration-v2/ContextHandoffDelivery.ts +++ b/apps/server/src/orchestration-v2/ContextHandoffDelivery.ts @@ -44,7 +44,7 @@ export const deliverContextHandoffs = Effect.fn("orchestrationV2.deliverContextH (handoff) => `Context handoff (${handoff.strategy === "fork_delta_summary" ? "merge_back / fork_delta_summary" : handoff.strategy}):\n${ handoff.history?.coverage ?? - `From thread ${handoff.threadId}, runs ${handoff.coveredRunOrdinals.from}-${handoff.coveredRunOrdinals.to}. Recover history with t3_thread_read, view=activity; paginate with afterPosition, and use itemId/textOffset for long items.` + `From thread ${handoff.threadId}, runs ${handoff.coveredRunOrdinals.from}-${handoff.coveredRunOrdinals.to}. Recover history with t3_thread_read, view=activity, afterPosition=-1; paginate with afterPosition=nextPosition, and use itemId/textOffset for long items.` }`, ) .join("\n"); diff --git a/apps/server/src/orchestration-v2/ProjectionStore.test.ts b/apps/server/src/orchestration-v2/ProjectionStore.test.ts index 26d0c9aa192b8..23d64f289623b 100644 --- a/apps/server/src/orchestration-v2/ProjectionStore.test.ts +++ b/apps/server/src/orchestration-v2/ProjectionStore.test.ts @@ -6104,6 +6104,13 @@ it.layer(layerTest)("ProjectionStoreV2", (it) => { for (const view of ["messages", "activity"] as const) { for (const afterPosition of [-1, Math.floor(totalItems / 3), totalItems - 5]) yield* windowed(timeline({ view, afterPosition, limit: 20 })); + for (const beforePosition of [ + Number.POSITIVE_INFINITY, + Math.floor(totalItems / 3), + totalItems - 5, + ]) + yield* windowed(timeline({ view, beforePosition, limit: 20 })); + yield* windowed(timeline({ view, afterPosition: 3, beforePosition: 40, limit: 20 })); } for (const itemId of [newest.sourceItemId, ...tiedWithHidden]) yield* windowed(timeline({ itemId, limit: 1 })); @@ -9834,6 +9841,23 @@ it.layer(layerTest)("ProjectionStoreV2", (it) => { }); assert.deepEqual(followingPage.items, targetAfterRollback.visibleTurnItems.slice(2)); assert.isFalse(followingPage.hasMore); + assert.isTrue(followingPage.hasEarlier); + const newestPage = yield* projectionStore.getTimelinePage(targetThreadId, { + view: "activity", + limit: 2, + beforePosition: Number.POSITIVE_INFINITY, + }); + assert.deepEqual(newestPage.items, targetAfterRollback.visibleTurnItems.slice(-2)); + assert.isFalse(newestPage.hasMore); + assert.isTrue(newestPage.hasEarlier); + const earlierPage = yield* projectionStore.getTimelinePage(targetThreadId, { + view: "activity", + limit: 10, + beforePosition: newestPage.items[0]!.position, + }); + assert.deepEqual(earlierPage.items, targetAfterRollback.visibleTurnItems.slice(0, -2)); + assert.isTrue(earlierPage.hasMore); + assert.isFalse(earlierPage.hasEarlier); const tracedTimelinePage = (limit: number) => Effect.gen(function* () { const { statements, tracer } = traceSqlStatements(); diff --git a/apps/server/src/orchestration-v2/ProjectionStore.ts b/apps/server/src/orchestration-v2/ProjectionStore.ts index f8f822489ddd5..9ad158dd533bb 100644 --- a/apps/server/src/orchestration-v2/ProjectionStore.ts +++ b/apps/server/src/orchestration-v2/ProjectionStore.ts @@ -422,8 +422,13 @@ export type ProjectionRecords = Pick< "thread" | K >; +/** + * A page holds the oldest matches after `afterPosition`, or with `beforePosition`, + * the newest matches before it. `itemId` ignores both bounds. + */ export interface ProjectionTimelinePageOptions { readonly afterPosition?: number; + readonly beforePosition?: number; readonly itemId?: TurnItemId; readonly attachmentId?: string; readonly view?: "messages" | "activity"; @@ -432,7 +437,10 @@ export interface ProjectionTimelinePageOptions { export interface ProjectionTimelinePage { readonly items: ReadonlyArray; readonly totalItems: number; + /** Matches exist after the page. */ readonly hasMore: boolean; + /** Matches exist before the page. */ + readonly hasEarlier: boolean; } export interface ShellSnapshotOptions { @@ -7183,12 +7191,9 @@ export const layer: Layer.Layer = const matchLocalTimelineRows = Effect.fn("ProjectionStore.matchLocalTimelineRows")(function* ( local: LocalTimeline, options: ProjectionTimelinePageOptions, + totalItems: number, ) { const threadId = local.records.thread.id; - const totals = yield* sql<{ count: number }>` - SELECT COUNT(*) AS count FROM orchestration_v2_projection_turn_items - WHERE thread_id = ${threadId}`; - const totalItems = (totals[0]?.count ?? 0) - local.hidden.length; if (options.itemId !== undefined) { const found = (yield* local.read(sql`AND item.turn_item_id = ${options.itemId}`)).filter( local.isVisible, @@ -7198,7 +7203,7 @@ export const layer: Layer.Layer = .visibleBefore(item.ordinal, item.id) .pipe(Effect.map((position) => ({ ...localTimelineRow(item), position }))), ); - return { matching, totalItems }; + return { matching, totalItems, hasEarlier: false }; } const afterPosition = options.afterPosition ?? -1; const firstPosition = Math.max(afterPosition + 1, 0); @@ -7209,7 +7214,7 @@ export const layer: Layer.Layer = WHERE thread_id = ${threadId} ORDER BY ordinal ASC, turn_item_id ASC LIMIT 1 OFFSET ${firstPosition}`; const start = starts[0]?.ordinal; - if (start === undefined) return { matching: [], totalItems }; + if (start === undefined) return { matching: [], totalItems, hasEarlier: false }; const base = yield* local.visibleBefore(start); const hiddenAfter = local.hidden.filter((row) => row.ordinal >= start).length; const messagesOnly = options.view !== "activity"; @@ -7233,13 +7238,69 @@ export const layer: Layer.Layer = positions.set(row.turn_item_id, base + positions.size); } } - const matching = candidates - .map((item, offset) => ({ - ...localTimelineRow(item), - position: messagesOnly ? (positions.get(item.id) ?? -1) : base + offset, - })) - .filter((row) => row.position > afterPosition); - return { matching, totalItems }; + const rows = candidates.map((item, offset) => ({ + ...localTimelineRow(item), + position: messagesOnly ? (positions.get(item.id) ?? -1) : base + offset, + })); + const matching = rows.filter((row) => row.position > afterPosition); + // At most `hidden.length` of the first matches before the start are hidden. + const hasEarlier = + matching.length < rows.length || + (base > 0 && + (!messagesOnly || + (yield* local.read( + sql`AND item.ordinal < ${start} + AND item.type IN ('user_message', 'assistant_message', 'proposed_plan')`, + sql`LIMIT ${local.hidden.length + 1}`, + )).some(local.isVisible))); + return { matching, totalItems, hasEarlier }; + }); + + /** + * A `getTimelinePage` page from `matchLocalTimelineRows`. A backward page reads forward from + * ever earlier starts until it holds `limit` matches or reaches `afterPosition`. + */ + const readLocalTimelinePage = Effect.fn("ProjectionStore.readLocalTimelinePage")(function* ( + local: LocalTimeline, + options: ProjectionTimelinePageOptions, + ) { + const totals = yield* sql<{ count: number }>` + SELECT COUNT(*) AS count FROM orchestration_v2_projection_turn_items + WHERE thread_id = ${local.records.thread.id}`; + const totalItems = (totals[0]?.count ?? 0) - local.hidden.length; + if (options.beforePosition === undefined || options.itemId !== undefined) { + const { matching, hasEarlier } = yield* matchLocalTimelineRows(local, options, totalItems); + return { + page: matching.slice(0, options.limit), + totalItems, + hasMore: matching.length > options.limit, + hasEarlier, + }; + } + const afterPosition = options.afterPosition ?? -1; + const end = Math.min(options.beforePosition, totalItems); + let span = Math.max(options.limit, 1); + while (true) { + // The `span` positions before `end` hold at most `span` matches, so a forward read of + // `span + 1` from the start holds all of them and shows whether any follow. + const from = Math.max(afterPosition, end - span - 1); + const read = yield* matchLocalTimelineRows( + local, + { ...options, afterPosition: from, limit: span }, + totalItems, + ); + const before = read.matching.filter((row) => row.position < end); + if (before.length >= options.limit || from === afterPosition) { + const page = before.slice(Math.max(0, before.length - options.limit)); + return { + page, + totalItems, + hasMore: read.matching.length > before.length, + hasEarlier: read.hasEarlier || before.length > page.length, + }; + } + span *= 2; + } }); const getTimelinePage: ProjectionStoreV2Shape["getTimelinePage"] = (threadId, options) => @@ -7250,7 +7311,10 @@ export const layer: Layer.Layer = options.attachmentId === undefined && Number.isSafeInteger(options.limit) && options.limit >= 0 && - Number.isSafeInteger(options.afterPosition ?? -1) + Number.isSafeInteger(options.afterPosition ?? -1) && + (options.beforePosition === undefined || + options.beforePosition === Number.POSITIVE_INFINITY || + Number.isSafeInteger(options.beforePosition)) ? yield* openLocalTimeline(threadId) : null; const whole = Effect.gen(function* () { @@ -7269,26 +7333,43 @@ export const layer: Layer.Layer = (row) => `${row.thread_id}:${row.turn_item_id}`, ), ); - const matching = index.visible + const inView = index.visible .map((row, position) => ({ ...row, position })) .filter((row) => options.itemId === undefined - ? row.position > (options.afterPosition ?? -1) && - (options.view === "activity" || - ["user_message", "assistant_message", "proposed_plan"].includes( - row.item.type, - )) + ? options.view === "activity" || + ["user_message", "assistant_message", "proposed_plan"].includes(row.item.type) : row.sourceItemId === options.itemId, ) .filter( (row) => attachmentOwners?.has(`${row.sourceThreadId}:${row.sourceItemId}`) ?? true, ); - return { matching, totalItems: index.visible.length }; + const before = options.beforePosition ?? Number.POSITIVE_INFINITY; + const matching = + options.itemId === undefined + ? inView.filter( + (row) => + row.position > (options.afterPosition ?? -1) && row.position < before, + ) + : inView; + const page = + options.beforePosition === undefined + ? matching.slice(0, options.limit) + : matching.slice(Math.max(0, matching.length - options.limit)); + const pageStart = page[0]?.position ?? (options.afterPosition ?? -1) + 1; + return { + page, + totalItems: index.visible.length, + hasMore: + options.beforePosition === undefined + ? matching.length > page.length + : (inView.at(-1)?.position ?? -1) >= before, + hasEarlier: (inView[0]?.position ?? Number.POSITIVE_INFINITY) < pageStart, + }; }); - const { matching, totalItems } = - local === null ? yield* whole : yield* matchLocalTimelineRows(local, options); - const page = matching.slice(0, options.limit); + const { page, totalItems, hasMore, hasEarlier } = + local === null ? yield* whole : yield* readLocalTimelinePage(local, options); const sources = yield* encodeTimelineSources( page .filter((row) => row.synthetic === undefined) @@ -7337,7 +7418,7 @@ export const layer: Layer.Layer = }; }), ); - return { items, totalItems, hasMore: matching.length > page.length }; + return { items, totalItems, hasMore, hasEarlier }; }), ) .pipe( diff --git a/apps/server/src/peer/RemoteDelegation.test.ts b/apps/server/src/peer/RemoteDelegation.test.ts index 4ce583944357c..6d09b6b1b3a68 100644 --- a/apps/server/src/peer/RemoteDelegation.test.ts +++ b/apps/server/src/peer/RemoteDelegation.test.ts @@ -469,6 +469,7 @@ const boxToolkitLayer = (thread: BoxThread) => { options.itemId === undefined && matching.length > 0 && visible.some((entry) => entry.position > matching.at(-1)!.position), + hasEarlier: false, }; }), interruptThread: (input) => diff --git a/apps/server/src/peer/RemoteDelegation.ts b/apps/server/src/peer/RemoteDelegation.ts index 016e825cefa80..3b01c48b01db0 100644 --- a/apps/server/src/peer/RemoteDelegation.ts +++ b/apps/server/src/peer/RemoteDelegation.ts @@ -639,7 +639,7 @@ const make = Effect.gen(function* () { threadId: remote.threadId, itemId: reply.itemId, textOffset, - maxCharsPerItem: 50_000, + maxCharsPerItem: 20_000, }); const part = rest.items[0]; if (part === undefined) break; diff --git a/apps/server/src/provider/agentContextBudget.json b/apps/server/src/provider/agentContextBudget.json index e166af3f78340..2ce96a5c4180c 100644 --- a/apps/server/src/provider/agentContextBudget.json +++ b/apps/server/src/provider/agentContextBudget.json @@ -1,5 +1,5 @@ { "claudeSystemAppendBytes": 5597, "codexAdditionalContextBytes": 7327, - "mcpToolListJsonBytes": 48126 + "mcpToolListJsonBytes": 48099 } diff --git a/docs/orchestration-v2/orchestrator-mcp-server.md b/docs/orchestration-v2/orchestrator-mcp-server.md index 992fb93fcf782..74700c2d006a2 100644 --- a/docs/orchestration-v2/orchestrator-mcp-server.md +++ b/docs/orchestration-v2/orchestrator-mcp-server.md @@ -400,8 +400,16 @@ the environment by thread ID. A deleted thread returns `thread_not_found`. The default `messages` view returns user messages, assistant messages, and proposed plans. The `activity` view also returns summarized tool, reasoning, checkpoint, handoff, and runtime-request items. Large item text is -bounded and reports whether it was truncated. `afterPosition` and -`nextPosition` support incremental reads. +bounded and reports whether it was truncated. An agent in a T3 thread that +reads without a cursor gets the newest items, and `beforePosition=earlierPosition` +reads older ones. Client callers (the CLI, linked environments, outside MCP +clients) start at the oldest item instead, because the CLI and linked +environments on older versions read that way and follow only `hasMore`. +`afterPosition=-1` starts any read at the oldest item, and +`afterPosition=nextPosition` reads newer items. The server stops adding items once the result reaches about 30,000 characters and +reports the rest through `earlierPosition` or `hasMore`. Claude Code saves MCP +results over its token limit to a file instead of showing them, so a read has +to fit whatever `limit` an agent asks for. Thread and message results include required `createdBy` and `creationSource` provenance. MCP-created threads and user-role messages use `createdBy: "agent"` diff --git a/packages/contracts/src/orchestratorMcp.ts b/packages/contracts/src/orchestratorMcp.ts index 65f2c5a0a00af..5f214a0428fe5 100644 --- a/packages/contracts/src/orchestratorMcp.ts +++ b/packages/contracts/src/orchestratorMcp.ts @@ -436,15 +436,12 @@ export const OrchestratorMcpThreadReadInput = Schema.Struct({ itemId: Schema.optional(TurnItemId), textOffset: Schema.optional(NonNegativeInt), view: Schema.optional(Schema.Literals(["messages", "activity"])), - afterPosition: Schema.optional(NonNegativeInt), - limit: Schema.optional(clampedPositiveInt(100)).annotate({ - description: "Max items, 1 to 100.", - }), - runLimit: Schema.optional(clampedPositiveInt(50)).annotate({ - description: "Max recent runs, 1 to 50.", - }), - maxCharsPerItem: Schema.optional(clampedPositiveInt(50_000)).annotate({ - description: "Max chars per item, 1 to 50000.", + afterPosition: Schema.optional(Schema.Int.check(Schema.isGreaterThanOrEqualTo(-1))), + beforePosition: Schema.optional(NonNegativeInt), + limit: Schema.optional(clampedPositiveInt(100)).annotate({ description: "Max 100." }), + runLimit: Schema.optional(clampedPositiveInt(50)).annotate({ description: "Max 50." }), + maxCharsPerItem: Schema.optional(clampedPositiveInt(20_000)).annotate({ + description: "Max 20000.", }), }); export type OrchestratorMcpThreadReadInput = typeof OrchestratorMcpThreadReadInput.Type; @@ -530,6 +527,8 @@ export const OrchestratorMcpThreadReadResult = Schema.Struct({ items: Schema.Array(OrchestratorMcpThreadTimelineItem), nextPosition: Schema.NullOr(NonNegativeInt), hasMore: Schema.Boolean, + /** null when nothing is older than the page. Missing from peers that only read forward. */ + earlierPosition: Schema.optional(Schema.NullOr(NonNegativeInt)), }); export type OrchestratorMcpThreadReadResult = typeof OrchestratorMcpThreadReadResult.Type; From a119af0079df0778a03c36708191240a4514f141 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 17:38:54 -0800 Subject: [PATCH 043/922] fix(server): remote status keeps a local upstream named without a slash (#35766) --- apps/server/src/vcs/GitVcsDriverCore.test.ts | 19 +++++++++++++++++++ apps/server/src/vcs/GitVcsDriverCore.ts | 5 +---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/apps/server/src/vcs/GitVcsDriverCore.test.ts b/apps/server/src/vcs/GitVcsDriverCore.test.ts index fba2a96d5f7f3..677ebb59ae0a7 100644 --- a/apps/server/src/vcs/GitVcsDriverCore.test.ts +++ b/apps/server/src/vcs/GitVcsDriverCore.test.ts @@ -3873,6 +3873,25 @@ it.layer(layerTest)("GitVcsDriver core integration", (it) => { }), ); + it.effect("reports a local upstream without a slash and its divergence", () => + Effect.gen(function* () { + const cwd = yield* makeTmpDir(); + yield* initRepoWithCommit(cwd); + const initialBranch = yield* git(cwd, ["symbolic-ref", "--short", "HEAD"]); + yield* git(cwd, ["branch", "feature"]); + yield* git(cwd, ["commit", "--allow-empty", "-m", "advance base"]); + yield* git(cwd, ["checkout", "feature"]); + yield* git(cwd, ["branch", `--set-upstream-to=${initialBranch}`]); + const driver = yield* GitVcsDriver.GitVcsDriver; + + const remoteStatus = yield* driver.statusDetailsRemote(cwd, { refreshUpstream: false }); + assert.equal(remoteStatus.upstreamRef, initialBranch); + assert.equal(remoteStatus.hasUpstream, true); + assert.equal(remoteStatus.aheadCount, 0); + assert.equal(remoteStatus.behindCount, 1); + }), + ); + it.effect("does not open a project folder laid out as a bare repository", () => Effect.gen(function* () { const cwd = yield* makeTmpDir(); diff --git a/apps/server/src/vcs/GitVcsDriverCore.ts b/apps/server/src/vcs/GitVcsDriverCore.ts index ee1f7bb9cdd06..e183c4958993e 100644 --- a/apps/server/src/vcs/GitVcsDriverCore.ts +++ b/apps/server/src/vcs/GitVcsDriverCore.ts @@ -2098,10 +2098,7 @@ export const makeGitVcsDriverCore = Effect.fn("makeGitVcsDriverCore")(function* branch = branchNameFromHeadRef(branchResult.stdout); } const currentUpstreamRef = yield* readCurrentUpstreamRef(cwd); - let upstreamRef = - currentUpstreamRef === null - ? null - : (parseUpstreamRefByFirstSeparator(currentUpstreamRef)?.upstreamRef ?? null); + let upstreamRef = currentUpstreamRef; // Trimming a remote that starts with Unicode whitespace can leave a leading slash. if (currentUpstreamRef?.startsWith("/")) { upstreamRef = (yield* resolveCurrentUpstream(cwd, currentUpstreamRef))?.upstreamRef ?? null; From 36254ab82eb5e8415f6f3ea12a6dedacc1d0ae8b Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 17:39:13 -0800 Subject: [PATCH 044/922] fix(server): a watched PR stops holding its thread once its checks finish (#33214) Co-authored-by: Claude Opus 5.5 --- .../src/orchestration-v2/Orchestrator.ts | 57 ++++++- .../PullRequestSyncReactor.test.ts | 62 +++++++ .../PullRequestSyncReactor.ts | 38 ++++- .../PullRequestWatchReactor.ts | 18 +- .../ThreadSettlementService.test.ts | 11 ++ .../ThreadSettlementService.ts | 6 +- .../orchestration-v2/pullRequestWatch.test.ts | 58 +++++++ .../src/orchestration-v2/pullRequestWatch.ts | 35 ++-- .../src/orchestration-v2/runtimeLayer.test.ts | 155 +++++++++++++++++- docs/user/source-control.md | 9 +- docs/user/thread-sidebar.md | 2 +- packages/contracts/src/orchestrationV2.ts | 15 ++ packages/contracts/src/threadPullRequest.ts | 5 + ...chestrationV2PendingBackgroundWork.test.ts | 39 +++++ .../orchestrationV2PendingBackgroundWork.ts | 19 ++- 15 files changed, 499 insertions(+), 30 deletions(-) diff --git a/apps/server/src/orchestration-v2/Orchestrator.ts b/apps/server/src/orchestration-v2/Orchestrator.ts index b7ddd77de49c9..bd06785814cf1 100644 --- a/apps/server/src/orchestration-v2/Orchestrator.ts +++ b/apps/server/src/orchestration-v2/Orchestrator.ts @@ -631,6 +631,7 @@ function commandThreadId(command: OrchestrationV2ServerCommand): ThreadId { case "thread.pull-request-link.sync": case "thread.pull-request.watch": case "thread.pull-request-watch.sync": + case "thread.pull-request-watch.checks-reopen": case "thread.pull-request.sync": case "thread.title.regeneration.complete": case "thread.project.adopt-folder": @@ -782,6 +783,26 @@ function withPullRequestWatch( return ended === undefined ? rest : { ...rest, endedWatch: ended }; } +function syncedPullRequestWatch( + existing: ThreadPullRequestWatch | undefined, + command: { + readonly watch: ThreadPullRequestWatch | null; + readonly checksPendingBefore?: boolean | undefined; + }, +): ThreadPullRequestWatch | undefined { + if (command.watch === null) return undefined; + // A push cleared the answer while this read was in flight, so its answer is the old head's. + if (command.checksPendingBefore === undefined || existing?.checksPending !== undefined) { + return command.watch; + } + return withoutChecksAnswer(command.watch); +} + +const withoutChecksAnswer = ({ + checksPending: _answer, + ...watch +}: ThreadPullRequestWatch): ThreadPullRequestWatch => watch; + function legacyPullRequestLink( thread: OrchestrationV2AppThread, linked: ThreadLinkedPullRequest, @@ -3871,6 +3892,7 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio | "thread.pull-request-link.sync" | "thread.pull-request.watch" | "thread.pull-request-watch.sync" + | "thread.pull-request-watch.checks-reopen" | "thread.pull-request.sync" | "thread.title.regeneration.complete" | "thread.runtime-mode.set" @@ -4688,6 +4710,18 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio updatedAt: command.type === "thread.pull-request-link.sync" ? thread.updatedAt : now, }; } + case "thread.pull-request-watch.checks-reopen": { + const linked = threadPullRequestsOf(thread); + if (!linked.some((link) => link.watch?.checksPending !== undefined)) return thread; + return { + ...thread, + pullRequests: linked.map((link) => + link.watch?.checksPending === undefined + ? link + : { ...link, watch: withoutChecksAnswer(link.watch) }, + ), + }; + } case "thread.pull-request.watch": case "thread.pull-request-watch.sync": { const key = normalizeThreadPullRequestKey(command); @@ -4724,7 +4758,7 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio const watch = command.type === "thread.pull-request-watch.sync" ? existing.watch?.startedAt === command.startedAt - ? (command.watch ?? undefined) + ? syncedPullRequestWatch(existing.watch, command) : existing.watch : !command.watching ? undefined @@ -4755,6 +4789,8 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio ...(existing.endedWatch?.approvalAnnounced !== undefined && { approvalAnnounced: existing.endedWatch.approvalAnnounced, }), + // A finished-checks answer may be an older head's; a fresh read decides. + ...(existing.endedWatch?.checksPending === true && { checksPending: true }), ...(existing.endedWatch?.checksAwaitedSince !== undefined && { checksAwaitedSince: existing.endedWatch.checksAwaitedSince, }), @@ -4842,6 +4878,20 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio }; } })(); + if (command.type === "thread.pull-request-watch.checks-reopen") { + if (updatedThread === thread) return; + yield* emit( + events, + command, + )({ + type: "thread.pull-request-synced", + threadId: command.threadId, + providerInstanceId: updatedThread.providerInstanceId, + occurredAt: now, + payload: updatedThread, + }); + return; + } if ( command.type === "thread.pull-request-link.sync" || command.type === "thread.pull-request-watch.sync" @@ -14500,6 +14550,9 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio case "provider.switch": yield* dispatchThreadMutation(command, events, effects); break; + case "thread.pull-request-watch.checks-reopen": + yield* dispatchThreadMutation(command, events, effects); + break; case "thread.pull-request-watch.sync": yield* dispatchPullRequestWatchSync(command, events, effects); break; @@ -14857,6 +14910,8 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio planned.events.length > 0 || isUnobservedAcknowledgement(command) || command.type === "thread.background-work.settle" || + // A read can answer a watch again before a push's reopen lands; nothing is left to clear. + command.type === "thread.pull-request-watch.checks-reopen" || command.type === "thread.interrupt.unresponsive" || command.type === "thread.stop" || command.type === "subagent.stop" || diff --git a/apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts b/apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts index 02a8e43c1d0e2..8ec62d07e75ef 100644 --- a/apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts +++ b/apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts @@ -12,6 +12,7 @@ import { ThreadId, TurnItemId, type OrchestrationV2Command as OrchestrationCommand, + type OrchestrationV2InternalCommand, type OrchestrationV2DomainEvent, type OrchestrationV2Run, type OrchestrationProjectShell, @@ -51,6 +52,10 @@ type SyncCommand = Extract< { readonly type: "thread.pull-request-link.sync" } >; type LinkCommand = Extract; +type ChecksReopenCommand = Extract< + OrchestrationV2InternalCommand, + { readonly type: "thread.pull-request-watch.checks-reopen" } +>; const testCrypto = SecureRandom.make((size) => new Uint8Array(size).fill(1)); @@ -189,6 +194,7 @@ const makeHarness = Effect.fn("makePullRequestSyncHarness")(function* (options: const shellSnapshotReads = yield* Ref.make(0); const syncCommands = yield* Ref.make>([]); const linkCommands = yield* Ref.make>([]); + const reopenCommands = yield* Queue.unbounded(); const summaryCalls = yield* Ref.make>([]); const stackCalls = yield* Ref.make>([]); const domainEvents = yield* Queue.unbounded(); @@ -223,6 +229,11 @@ const makeHarness = Effect.fn("makePullRequestSyncHarness")(function* (options: Effect.as({ sequence: 1, storedEvents: [] }), ); } + if (command.type === "thread.pull-request-watch.checks-reopen") { + return Queue.offer(reopenCommands, command).pipe( + Effect.as({ sequence: 1, storedEvents: [] }), + ); + } return Effect.die(new Error(`Unexpected command: ${command.type}`)); }; @@ -284,6 +295,7 @@ const makeHarness = Effect.fn("makePullRequestSyncHarness")(function* (options: shellSnapshotReads, syncCommands, linkCommands, + reopenCommands, summaryCalls, stackCalls, domainEvents, @@ -1880,6 +1892,56 @@ describe("PullRequestSyncReactor", () => { ), ); + it.effect("reopens a watch's checks when its thread's agent pushes", () => + Effect.scoped( + Effect.gen(function* () { + yield* TestClock.setTime(Date.parse(NOW)); + const watch = { + startedAt: NOW, + headSha: "aaaaaaaaaa", + failedChecks: [], + passed: true, + passedChecks: ["test"], + remarksThrough: NOW, + remarkIds: [], + conflicting: false, + wakes: 0, + }; + const fixture = yield* makeHarness({ + snapshot: makeSnapshot([ + makeThread("agent", { + pullRequests: [ + makeLink(7, { state: "open" }, { watch: { ...watch, checksPending: false } }), + ], + }), + makeThread("unread", { + pullRequests: [makeLink(8, { state: "open" }, { watch })], + }), + ]), + }); + + yield* Effect.gen(function* () { + yield* startAndSweep(fixture); + const agent = ThreadId.make("agent"); + yield* Queue.offerAll(fixture.domainEvents, [ + commandRan(agent, "git status && echo 'then git push'", undefined, "status"), + // A watch that has not read its checks yet has no answer to forget. + commandRan(ThreadId.make("unread"), "git push", undefined, "unread-push"), + commandRan(agent, "cd app && git -C . push --force-with-lease", undefined, "push"), + commandRan(agent, '/bin/zsh -lc "gh stack submit --auto"', undefined, "stack"), + ]); + for (const item of ["push", "stack"]) { + const command = yield* Queue.take(fixture.reopenCommands); + assert.deepStrictEqual( + [command.threadId, command.commandId], + [agent, `server:pr-push-checks:agent:item:agent:${item}`], + ); + } + }).pipe(Effect.provide(fixture.layer)); + }), + ), + ); + it.effect("reads open links again when the run ends, after `merge --auto` left them open", () => Effect.scoped( Effect.gen(function* () { diff --git a/apps/server/src/orchestration-v2/PullRequestSyncReactor.ts b/apps/server/src/orchestration-v2/PullRequestSyncReactor.ts index 7573a95bb4362..b654364d3a7fb 100644 --- a/apps/server/src/orchestration-v2/PullRequestSyncReactor.ts +++ b/apps/server/src/orchestration-v2/PullRequestSyncReactor.ts @@ -72,6 +72,11 @@ const CREATE_COMMANDS = sourceControlDefinitions.definitions.flatMap( ); const createCommandCount = (code: string) => CREATE_COMMANDS.reduce((count, { run }) => count + [...code.matchAll(run)].length, 0); +// A push, directly or through a stack tool, that can start checks on a linked pull request. +const PUSH_COMMAND = new RegExp( + `${COMMAND_START}(?:git(?:\\s+-[cC]\\s+\\S+)*\\s+push|gh\\s+stack\\s+(?:push|submit)|cafe\\s+stack\\s+submit|jj\\s+git\\s+push)(?=$|[\\s;&|)])`, + "u", +); // Codex runs each command as `/bin/zsh -lc `); + + await ServerBrowserPage.drag(page, { source: "#source", target: "#target" }); + + const events = (await page.evaluate("window.events")) as Array; + expect(events.slice(0, 2)).toEqual(["dragstart", "mousemove"]); + expect(events.at(-1)).toBe("mouseup"); + } finally { + await browser.close(); + } + }); }); describe("server browser evaluate", () => { diff --git a/apps/server/src/preview/ServerBrowserPage.ts b/apps/server/src/preview/ServerBrowserPage.ts index 0d5ed3d1ff893..65a283dc3cca4 100644 --- a/apps/server/src/preview/ServerBrowserPage.ts +++ b/apps/server/src/preview/ServerBrowserPage.ts @@ -888,7 +888,8 @@ export const drag = async ( const target = targetLocator(page, { locator: input.target })!; await pointer(await targetPoint(page, source, {}, timeout), "move"); // Observe drag rejection immediately; an unhandled rejection during cursor movement exits the server. - const dragFailure = source.dragTo(target, { timeout }).then( + // Chromium delivers a single move before dragstart; steps give the page mousemoves during the drag. + const dragFailure = source.dragTo(target, { timeout, steps: 5 }).then( () => null, (error: unknown) => ({ error }), ); From bd7d264401e581687d0055891a8fb536f8ca9543 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 01:49:00 -0800 Subject: [PATCH 173/922] fix(server): a fresh-session scheduled run no longer takes over the thread's conversation (#36103) --- .../src/orchestration-v2/Orchestrator.ts | 103 +++++++++++--- .../ProviderSwitch.integration.test.ts | 132 ++++++++++++++++++ 2 files changed, 217 insertions(+), 18 deletions(-) diff --git a/apps/server/src/orchestration-v2/Orchestrator.ts b/apps/server/src/orchestration-v2/Orchestrator.ts index 45edf2c74282e..0fe744c9a9131 100644 --- a/apps/server/src/orchestration-v2/Orchestrator.ts +++ b/apps/server/src/orchestration-v2/Orchestrator.ts @@ -1267,22 +1267,35 @@ function appendContextHandoffId( return handoffId === null ? handoffIds : Array.from(new Set([...handoffIds, handoffId])); } +/** A fresh-session schedule run starts a side conversation; the thread's own one continues past it. */ +function isScheduledFreshRun( + run: Pick, + turnItems: OrchestrationV2ThreadProjection["turnItems"], +): boolean { + // Turn items, unlike messages, are not narrowed to the runs since the latest compaction. + return ( + run.freshContext === true && + turnItems.some( + (item) => + item.type === "user_message" && + item.messageId === run.userMessageId && + item.scheduledTaskId !== undefined, + ) + ); +} + /** Ordinal of the latest started fresh-context run. Runs before it never reach a provider again. */ function contextBoundaryOrdinal( - runs: ReadonlyArray< - Pick< - OrchestrationV2Run, - "ordinal" | "freshContext" | "status" | "startedAt" | "restartContinuationOfRunId" - > - >, + projection: Pick, ): number { let boundary = 0; - for (const run of runs) { + for (const run of projection.runs) { if ( run.freshContext === true && run.status !== "queued" && !cancelledBeforeStart(run) && - run.ordinal > boundary + run.ordinal > boundary && + !isScheduledFreshRun(run, projection.turnItems) ) { boundary = run.ordinal; } @@ -1290,6 +1303,57 @@ function contextBoundaryOrdinal( return boundary; } +/** The provider thread a message continues: the active one, unless a fresh-session schedule run started it. */ +function conversationProviderThread( + projection: Pick< + OrchestrationV2ThreadProjection, + "thread" | "providerThreads" | "runs" | "turnItems" + >, +): OrchestrationV2ProviderThread | undefined { + const startedByScheduledFreshRun = (providerThread: OrchestrationV2ProviderThread) => + projection.runs.some( + (run) => + run.ordinal === providerThread.firstRunOrdinal && + isScheduledFreshRun(run, projection.turnItems), + ); + const active = projection.providerThreads.find( + (candidate) => candidate.id === projection.thread.activeProviderThreadId, + ); + if (active === undefined || !startedByScheduledFreshRun(active)) return active; + const boundary = contextBoundaryOrdinal(projection); + return ( + projection.providerThreads + .filter( + (candidate) => + candidate.appThreadId === projection.thread.id && + candidate.ownerNodeId === null && + candidate.lastRunOrdinal !== null && + !providerThreadPredatesBoundary(candidate, boundary) && + !startedByScheduledFreshRun(candidate), + ) + .toSorted((left, right) => (right.lastRunOrdinal ?? 0) - (left.lastRunOrdinal ?? 0))[0] ?? + active + ); +} + +/** Wakes and fresh starts act on the active session; a message continues the conversation. */ +function dispatchProviderThread( + projection: Pick< + OrchestrationV2ThreadProjection, + "thread" | "providerThreads" | "runs" | "turnItems" + >, + message: Pick, + freshContext: boolean, +): OrchestrationV2ProviderThread | undefined { + return freshContext || + message.notification !== undefined || + message.delegatedCompletion !== undefined + ? projection.providerThreads.find( + (candidate) => candidate.id === projection.thread.activeProviderThreadId, + ) + : conversationProviderThread(projection); +} + /** Threads with no started run (imported, or reserved by another queued run) never cross it. */ function providerThreadPredatesBoundary( providerThread: Pick, @@ -1325,10 +1389,13 @@ function uniqueSessions( } function rootProviderThreadsForProvider( - projection: Pick, + projection: Pick< + OrchestrationV2ThreadProjection, + "providerThreads" | "thread" | "runs" | "turnItems" + >, providerInstanceId: ModelSelection["instanceId"], ): ReadonlyArray { - const boundary = contextBoundaryOrdinal(projection.runs); + const boundary = contextBoundaryOrdinal(projection); return projection.providerThreads .filter( (providerThread) => @@ -2390,12 +2457,10 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio }), ), ); - const activeProviderThread = projection.providerThreads.find( - (candidate) => candidate.id === projection.thread.activeProviderThreadId, - ); const followsCurrent = followsCurrentConversation(queuedMessage); const freshContext = queuedRun.freshContext === true; - const contextBoundary = freshContext ? ordinal : contextBoundaryOrdinal(projection.runs); + const activeProviderThread = dispatchProviderThread(projection, queuedMessage, freshContext); + const contextBoundary = freshContext ? ordinal : contextBoundaryOrdinal(projection); // A run queued before a fresh run started is bound to the conversation that run left behind. const followsLatestContext = !freshContext && @@ -6116,7 +6181,7 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio type: "provider_handoff", }), ); - const contextBoundary = contextBoundaryOrdinal(input.projection.runs); + const contextBoundary = contextBoundaryOrdinal(input.projection); restartHandoff = yield* contextHandoffService .prepareProviderHandoff({ threadId: input.command.threadId, @@ -7080,8 +7145,10 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio return; } - const activeProviderThread = projection.providerThreads.find( - (candidate) => candidate.id === projection.thread.activeProviderThreadId, + const activeProviderThread = dispatchProviderThread( + projection, + { ...command, delegatedCompletion }, + freshContext, ); const activeRun = projection.runs.find(isActiveRun); // Messages after failed or stopped worktree setup must wait for a worktree, @@ -7544,7 +7611,7 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio } const ordinal = nextRunOrdinal(projection); const runId = idAllocator.derive.run({ threadId: command.threadId, ordinal }); - const contextBoundary = freshContext ? ordinal : contextBoundaryOrdinal(projection.runs); + const contextBoundary = freshContext ? ordinal : contextBoundaryOrdinal(projection); const latestCompletedRun = projection.runs.findLast((run) => run.status === "completed"); const latestHandoffRun = projection.runs.findLast(isHandoffSourceRun); const legacyImportItems = diff --git a/apps/server/src/orchestration-v2/testkit/ProviderSwitch.integration.test.ts b/apps/server/src/orchestration-v2/testkit/ProviderSwitch.integration.test.ts index 90207b34f1048..e4371b54ee4b5 100644 --- a/apps/server/src/orchestration-v2/testkit/ProviderSwitch.integration.test.ts +++ b/apps/server/src/orchestration-v2/testkit/ProviderSwitch.integration.test.ts @@ -3417,6 +3417,138 @@ describe("orchestration v2 provider switching", () => { }), ); + it.live("keeps the user's conversation after a scheduled fresh run in the same thread", () => + Effect.gen(function* () { + const cwd = yield* checkpointWorkspace("scheduled-fresh-user-chat"); + const capturedTurns = yield* Ref.make>([]); + const layerRegistry = ProviderAdapterRegistry.layerFromAdapters([ + makeTestAdapter({ + instanceId: CLAUDE_MODEL_SELECTION.instanceId, + driver: CLAUDE_DRIVER, + capabilities: ClaudeProviderCapabilitiesV2, + modelSelection: CLAUDE_MODEL_SELECTION, + responseByRunOrdinal: {}, + capturedTurns, + nativeThreadGeneration: yield* Ref.make(0), + }), + ]); + const threadId = ThreadId.make("thread:scheduled-fresh-user-chat"); + yield* Effect.gen(function* () { + const orchestrator = yield* Orchestrator.OrchestratorV2; + const worker = yield* EffectWorker.OrchestrationEffectWorkerV2; + const send = (name: string, scheduled: boolean) => + orchestrator.dispatch({ + type: "message.dispatch", + createdBy: "user", + creationSource: "web", + commandId: CommandId.make(`command:scheduled-fresh-user-chat:${name}`), + threadId, + messageId: MessageId.make(`message:scheduled-fresh-user-chat:${name}`), + text: name, + attachments: [], + modelSelection: CLAUDE_MODEL_SELECTION, + dispatchMode: { type: "queue_after_active" }, + ...(scheduled + ? { + scheduledTaskId: ScheduledTaskId.make("scheduled-fresh-user-chat"), + freshContext: true, + } + : {}), + }); + yield* orchestrator.dispatch({ + type: "thread.create", + createdBy: "user", + creationSource: "web", + commandId: CommandId.make("command:scheduled-fresh-user-chat:create"), + threadId, + projectId: ProjectId.make("project:scheduled-fresh-user-chat"), + title: "User chat with a fresh-session schedule", + modelSelection: CLAUDE_MODEL_SELECTION, + runtimeMode: "full-access", + interactionMode: "default", + branch: null, + worktreePath: cwd, + }); + const eventSink = yield* EventSink.EventSinkV2; + for (const [name, scheduled] of [ + ["user-first", false], + ["scheduled", true], + ["user-second", false], + ["compaction", false], + ["scheduled-after-compaction", true], + ["user-third", false], + ] as const) { + if (name === "compaction") { + // The user's run compacts, so later dispatches no longer read the first scheduled run's message. + const run = (yield* orchestrator.getThreadProjection(threadId)).runs.at(-1)!; + const compactedAt = yield* DateTime.now; + yield* eventSink.write({ + events: [ + { + id: EventId.make("event:scheduled-fresh-user-chat:compaction"), + type: "turn-item.updated", + threadId, + runId: run.id, + nodeId: run.rootNodeId!, + occurredAt: compactedAt, + payload: { + id: TurnItemId.make("item:scheduled-fresh-user-chat:compaction"), + threadId, + runId: run.id, + nodeId: run.rootNodeId, + providerThreadId: null, + providerTurnId: null, + nativeItemRef: null, + parentItemId: null, + ordinal: 1_000, + status: "completed", + title: null, + startedAt: compactedAt, + completedAt: compactedAt, + updatedAt: compactedAt, + type: "compaction", + driver: CLAUDE_DRIVER, + }, + }, + ], + }); + continue; + } + yield* send(name, scheduled); + yield* worker.drain(); + yield* waitForIdle(threadId); + } + const turns = yield* Ref.get(capturedTurns); + const turnFor = (name: string) => turns.find((turn) => turn.text.endsWith(name)); + assert.notEqual( + turnFor("scheduled")!.nativeThreadId, + turnFor("user-first")!.nativeThreadId, + ); + // The scheduled run's fresh session must not replace the user's conversation. + assert.equal(turnFor("user-second")!.nativeThreadId, turnFor("user-first")!.nativeThreadId); + assert.equal(turnFor("user-third")!.nativeThreadId, turnFor("user-first")!.nativeThreadId); + }).pipe( + Effect.provide( + ProviderReplayHarness.layerWithRegistry( + { + name: "scheduled-fresh-user-chat", + runtimePolicyOverride: { + cwd, + approvalPolicy: "never", + sandboxPolicy: { + type: "readOnly", + access: { type: "fullAccess" }, + networkAccess: false, + }, + }, + }, + layerRegistry, + ), + ), + ); + }), + ); + it.live("keeps the thread a queued fresh run reserved for that run", () => Effect.gen(function* () { const cwd = yield* checkpointWorkspace("fresh-context-reserved"); From 10fbff5ab6d31c494b5c6cfd759d78c12aa731f6 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 01:49:27 -0800 Subject: [PATCH 174/922] fix(server): deferred-steer check and queued cancel no longer read a thread's whole history (#36100) --- .../Orchestrator.control-reads.test.ts | 122 +++++++++++++++++- .../src/orchestration-v2/Orchestrator.ts | 12 +- 2 files changed, 131 insertions(+), 3 deletions(-) diff --git a/apps/server/src/orchestration-v2/Orchestrator.control-reads.test.ts b/apps/server/src/orchestration-v2/Orchestrator.control-reads.test.ts index 21afe0b0574c8..f36ce5bdc564b 100644 --- a/apps/server/src/orchestration-v2/Orchestrator.control-reads.test.ts +++ b/apps/server/src/orchestration-v2/Orchestrator.control-reads.test.ts @@ -2468,6 +2468,19 @@ it.effect("queued-message commands read a long thread's history without walking }), ); walks.push(...(yield* historyWalks("queued-message.promote-to-steer"))); + yield* dispatch("cancelled"); + const cancelledRun = (yield* projections.getThreadProjection(threadId)).runs.at(-1)!; + assert.equal(cancelledRun.status, "queued"); + statements.splice(0); + yield* observed( + orchestrator.dispatch({ + type: "queued-run.cancel", + commandId: CommandId.make("cancel:long-history-reads"), + threadId, + runId: cancelledRun.id, + }), + ); + walks.push(...(yield* historyWalks("queued-run.cancel"))); yield* observed( orchestrator.dispatch({ type: "run.interrupt", @@ -2481,7 +2494,14 @@ it.effect("queued-message commands read a long thread's history without walking const after = yield* projections.getThreadProjection(threadId); assert.deepEqual( after.messages.filter((message) => message.role === "user").map((message) => message.text), - ["Request 1", "Request 2", "Request 3", "/compact", "Request queued, edited"], + [ + "Request 1", + "Request 2", + "Request 3", + "/compact", + "Request cancelled", + "Request queued, edited", + ], ); assert.deepEqual( after.providerThreads.map((providerThread) => providerThread.id), @@ -2490,3 +2510,103 @@ it.effect("queued-message commands read a long thread's history without walking assert.deepEqual(walks, [], walks.join("\n")); }).pipe(Effect.provide(layerTest)), ); + +it.effect("a running provider-turn update reads only the thread's queued and running runs", () => + Effect.gen(function* () { + const runsReads = yield* Deferred.make["compile"]>>(); + let armed = false; + // The deferred-steer reactor runs in a fiber forked by the layer, so observe at layer level. + const observe: Statement.Transformer = (statement) => { + const compiled = statement.compile(); + return armed && /FROM orchestration_v2_projection_runs\b/.test(compiled[0]) + ? Deferred.succeed(runsReads, compiled).pipe(Effect.as(statement)) + : Effect.succeed(statement); + }; + yield* Effect.gen(function* () { + const orchestrator = yield* Orchestrator.OrchestratorV2; + const projections = yield* ProjectionStore.ProjectionStoreV2; + const eventSink = yield* EventSink.EventSinkV2; + const sql = yield* SqlClient.SqlClient; + const threadId = ThreadId.make("thread:deferred-steer-reads"); + const driver = ProviderDriverKind.make("codex"); + const now = yield* DateTime.now; + yield* orchestrator.dispatch({ + type: "thread.create", + commandId: CommandId.make("create-deferred-steer-reads"), + threadId, + projectId: ProjectId.make("project:deferred-steer-reads"), + title: "Deferred steer reads", + modelSelection, + runtimeMode: "full-access", + interactionMode: "default", + branch: null, + worktreePath: null, + createdBy: "user", + creationSource: "web", + }); + yield* orchestrator.dispatch({ + type: "message.dispatch", + commandId: CommandId.make("dispatch:deferred-steer-reads"), + threadId, + messageId: MessageId.make("message:deferred-steer-reads"), + text: "Request", + attachments: [], + dispatchMode: { type: "defer_start" }, + createdBy: "user", + creationSource: "web", + }); + const run = (yield* projections.getThreadProjection(threadId)).runs.at(-1)!; + const providerThreadId = ProviderThreadId.make("provider-thread:deferred-steer-reads"); + yield* eventSink.write({ + events: [ + { + id: EventId.make("event:deferred-steer-reads:run"), + type: "run.updated", + threadId, + runId: run.id, + occurredAt: now, + payload: { ...run, providerThreadId, status: "running", queuePosition: null }, + }, + ], + }); + armed = true; + yield* eventSink.write({ + events: [ + { + id: EventId.make("event:deferred-steer-reads:turn"), + type: "provider-turn.updated", + threadId, + runId: run.id, + occurredAt: now, + payload: { + id: ProviderTurnId.make("provider-turn:deferred-steer-reads"), + providerThreadId, + nodeId: run.rootNodeId!, + runAttemptId: run.activeAttemptId!, + nativeTurnRef: { + driver, + nativeId: "native:deferred-steer-reads", + strength: "strong", + }, + ordinal: 1, + status: "running", + startedAt: now, + completedAt: null, + }, + }, + ], + }); + const [query, params] = yield* Deferred.await(runsReads); + const plan = yield* sql.unsafe<{ detail: string }>(`EXPLAIN QUERY PLAN ${query}`, params); + // Every run the thread ever had, when only queued steers and the running run matter. + assert.isFalse( + plan.some(({ detail }) => /^SEARCH .*runs.* \(thread_id=\?\)$/.test(detail)), + `${plan.map(({ detail }) => detail).join("\n")}\n in: ${query.replace(/\s+/g, " ").trim()}`, + ); + }).pipe( + Effect.provide( + layerTest.pipe(Layer.provide(Layer.succeed(Statement.CurrentTransformer, observe))), + ), + ); + }), +); diff --git a/apps/server/src/orchestration-v2/Orchestrator.ts b/apps/server/src/orchestration-v2/Orchestrator.ts index 0fe744c9a9131..defb1a42c892e 100644 --- a/apps/server/src/orchestration-v2/Orchestrator.ts +++ b/apps/server/src/orchestration-v2/Orchestrator.ts @@ -11236,7 +11236,13 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio const projection = yield* loadProjectionForCommand( command, ["runs", "messages", "nodes", "attempts", "subagents", "turnItems"], - { turnItemTypes: [], messageRoles: ["user"] }, + // Cancelling reads the queued run's own message and root node, never a settled leaf. + { + turnItemTypes: [], + messageRoles: ["user"], + messageRunIds: [command.runId], + omitSettledLeafNodes: true, + }, ); const queuedRun = projection.runs.find((candidate) => candidate.id === command.runId); if (queuedRun === undefined || queuedRun.status !== "queued") { @@ -15348,7 +15354,9 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio if (stored.event.type !== "provider-turn.updated") return; const threadId = stored.event.threadId; const turn = stored.event.payload; - const projection = yield* projectionStore.getThreadRecords(threadId, ["runs"]); + const projection = yield* projectionStore.getThreadRecords(threadId, ["runs"], { + runStatuses: ["queued", "running"], + }); const run = projection.runs.find( (candidate) => candidate.activeAttemptId === turn.runAttemptId && candidate.status === "running", From 21b0b7a0573ea4d00b45c0346bec178f367d7550 Mon Sep 17 00:00:00 2001 From: Simon Maggini Date: Fri, 13 Nov 2026 11:06:23 +0100 Subject: [PATCH 175/922] fix(composer): keep reviews from different Git hosts in suggestions (#36104) Co-authored-by: Julius Marminge --- .../threads/use-composer-command-menu.ts | 3 +- apps/mobile/src/state/queries.test.ts | 3 ++ apps/mobile/src/state/queries.ts | 22 ++++++++-- .../components/chat/useComposerMenuItems.ts | 16 ++++++- apps/web/src/composer-logic.test.ts | 10 +++++ .../src/composerPullRequestMatches.test.ts | 44 +++++++++++++++++-- .../shared/src/composerPullRequestMatches.ts | 17 ++++--- 7 files changed, 96 insertions(+), 19 deletions(-) diff --git a/apps/mobile/src/features/threads/use-composer-command-menu.ts b/apps/mobile/src/features/threads/use-composer-command-menu.ts index 1e66bf4ee2c8e..a77f7089c97bd 100644 --- a/apps/mobile/src/features/threads/use-composer-command-menu.ts +++ b/apps/mobile/src/features/threads/use-composer-command-menu.ts @@ -1,3 +1,4 @@ +import { threadPullRequestKeyOf } from "@t3tools/client-runtime/thread-pull-requests"; import * as Dialog from "../../components/ui/Dialog"; import type { EnvironmentId, @@ -358,7 +359,7 @@ export function useComposerCommandMenu({ if (trigger.kind === "pull-request") { return pullRequestSearch.entries.map((entry) => ({ - id: `pr:${entry.projectId}:${entry.repository}:${entry.number}`, + id: `pr:${entry.projectId}:${threadPullRequestKeyOf(entry)}`, type: "pull-request", pullRequest: { number: entry.number, diff --git a/apps/mobile/src/state/queries.test.ts b/apps/mobile/src/state/queries.test.ts index 12f36dfe2e242..dba11b2e56ea7 100644 --- a/apps/mobile/src/state/queries.test.ts +++ b/apps/mobile/src/state/queries.test.ts @@ -1,8 +1,10 @@ +import { threadPullRequestKeyOf } from "@t3tools/client-runtime/thread-pull-requests"; import { filterComposerPullRequestMatches } from "@t3tools/shared/composerPullRequestMatches"; import { expect, it } from "@effect/vitest"; it("keeps an older exact PR in the mobile menu ahead of twenty newer substring matches", () => { const exact = { + host: "github.com", number: 42, projectId: "project", repository: "example/repo", @@ -14,6 +16,7 @@ it("keeps an older exact PR in the mobile menu ahead of twenty newer substring m updatedAt: "2026-01-01", })); const matches = filterComposerPullRequestMatches({ + keyOf: threadPullRequestKeyOf, entries: [exact, ...recent, exact], projectId: exact.projectId, repository: exact.repository, diff --git a/apps/mobile/src/state/queries.ts b/apps/mobile/src/state/queries.ts index 837d77ce851cf..a4cdbc6244204 100644 --- a/apps/mobile/src/state/queries.ts +++ b/apps/mobile/src/state/queries.ts @@ -1,3 +1,7 @@ +import { + legacyThreadPullRequestKey, + threadPullRequestKeyOf, +} from "@t3tools/client-runtime/thread-pull-requests"; import { composerPullRequestsFromLinks, filterComposerPullRequestMatches, @@ -148,11 +152,16 @@ export function useComposerPullRequestSearch(input: { }) : null, ); + // Only the host: the URL's full repository path would not match the project's selector. + const exactEntry = exact.data + ? { ...exact.data, host: legacyThreadPullRequestKey(exact.data).host } + : null; const entries = (() => { if (input.query === null || input.projectId === null || input.repository === null) return []; if (/^\d*$/.test(input.query)) { return filterComposerPullRequestMatches({ - entries: ready ? [...(exact.data ? [exact.data] : []), ...(list.data?.entries ?? [])] : [], + keyOf: threadPullRequestKeyOf, + entries: ready ? [...(exactEntry ? [exactEntry] : []), ...(list.data?.entries ?? [])] : [], linked, projectId: input.projectId, repository: input.repository, @@ -162,6 +171,7 @@ export function useComposerPullRequestSearch(input: { } if (!ready) { return withLinkedComposerPullRequestsFirst({ + keyOf: threadPullRequestKeyOf, matches: [], linked, query: input.query, @@ -169,7 +179,7 @@ export function useComposerPullRequestSearch(input: { }); } const words = (query ?? "").toLowerCase().split(/\s+/).filter(Boolean); - const found = [...(exact.data ? [exact.data] : []), ...(list.data?.entries ?? [])].filter( + const found = [...(exactEntry ? [exactEntry] : []), ...(list.data?.entries ?? [])].filter( (entry) => entry.projectId === input.projectId && entry.repository.toLowerCase() === input.repository?.toLowerCase() && @@ -177,9 +187,13 @@ export function useComposerPullRequestSearch(input: { `${entry.title} ${entry.headBranch} ${entry.baseBranch}`.toLowerCase().includes(word), ), ); - const unique = new Map(); - for (const entry of found) if (!unique.has(entry.number)) unique.set(entry.number, entry); + const unique = new Map(); + for (const entry of found) { + const key = threadPullRequestKeyOf(entry); + if (!unique.has(key)) unique.set(key, entry); + } return withLinkedComposerPullRequestsFirst({ + keyOf: threadPullRequestKeyOf, matches: [...unique.values()].sort((left, right) => right.updatedAt.localeCompare(left.updatedAt), ), diff --git a/apps/web/src/components/chat/useComposerMenuItems.ts b/apps/web/src/components/chat/useComposerMenuItems.ts index 7620bf8611020..8090157604986 100644 --- a/apps/web/src/components/chat/useComposerMenuItems.ts +++ b/apps/web/src/components/chat/useComposerMenuItems.ts @@ -1,3 +1,7 @@ +import { + legacyThreadPullRequestKey, + threadPullRequestKeyOf, +} from "@t3tools/client-runtime/thread-pull-requests"; import { matchComposerEnvironmentItems, matchComposerThreadItems, @@ -327,10 +331,17 @@ export function useComposerMenuItems({ ) { const exactPullRequest = exactPullRequestLookup.data?.number === pullRequestTriggerNumber - ? [exactPullRequestLookup.data] + ? [ + { + ...exactPullRequestLookup.data, + // Only the host: the URL's full repository path would not match the project's selector. + host: legacyThreadPullRequestKey(exactPullRequestLookup.data).host, + }, + ] : []; const matches = /^\d*$/u.test(composerTrigger.query) ? filterComposerPullRequestMatches({ + keyOf: threadPullRequestKeyOf, entries: [...exactPullRequest, ...(pullRequestLookup.data?.entries ?? [])], linked: linkedPullRequests, projectId: pullRequestProjectId, @@ -339,6 +350,7 @@ export function useComposerMenuItems({ limit: COMPOSER_PULL_REQUEST_RESULT_LIMIT, }) : withLinkedComposerPullRequestsFirst({ + keyOf: threadPullRequestKeyOf, matches: rankPullRequestMatches( (pullRequestLookup.data?.entries ?? []).filter((entry) => { if ( @@ -363,7 +375,7 @@ export function useComposerMenuItems({ limit: COMPOSER_PULL_REQUEST_RESULT_LIMIT, }); return matches.map((pullRequest) => ({ - id: `pull-request:${pullRequest.projectId}:${pullRequest.repository}:${pullRequest.number}`, + id: `pull-request:${pullRequest.projectId}:${threadPullRequestKeyOf(pullRequest)}`, type: "pull-request", pullRequest: { number: pullRequest.number, diff --git a/apps/web/src/composer-logic.test.ts b/apps/web/src/composer-logic.test.ts index 3a93b2efa201c..e7ec86822a547 100644 --- a/apps/web/src/composer-logic.test.ts +++ b/apps/web/src/composer-logic.test.ts @@ -1,3 +1,4 @@ +import { threadPullRequestKeyOf } from "@t3tools/client-runtime/thread-pull-requests"; import { filterComposerPullRequestMatches } from "@t3tools/shared/composerPullRequestMatches"; import { EnvironmentId, MessageId, ThreadId, type AssistantCitation } from "@t3tools/contracts"; import { @@ -331,30 +332,35 @@ describe("detectComposerTrigger", () => { describe("filterComposerPullRequestMatches", () => { const entries = [ { + host: "github.com", number: 7, projectId: "project-1", repository: "t3tools/t3code", updatedAt: "2026-09-01T12:00:00.000Z", }, { + host: "github.com", number: 8987, projectId: "project-1", repository: "T3Tools/T3Code", updatedAt: "2026-09-03T12:00:00.000Z", }, { + host: "github.com", number: 27, projectId: "project-1", repository: "t3tools/t3code", updatedAt: "2026-09-02T12:00:00.000Z", }, { + host: "github.com", number: 27, projectId: "project-1", repository: "t3tools/t3code", updatedAt: "2026-09-01T13:00:00.000Z", }, { + host: "github.com", number: 70, projectId: "project-2", repository: "t3tools/other", @@ -365,6 +371,7 @@ describe("filterComposerPullRequestMatches", () => { it("matches and de-duplicates number fragments within one repository, exact match first", () => { expect( filterComposerPullRequestMatches({ + keyOf: threadPullRequestKeyOf, entries, projectId: "project-1", repository: "t3tools/t3code", @@ -376,18 +383,21 @@ describe("filterComposerPullRequestMatches", () => { it("keeps an older exact match when newer substring matches would fill the limit", () => { const exact = { + host: "github.com", number: 7, projectId: "project-1", repository: "t3tools/t3code", updatedAt: "2020-01-01T00:00:00.000Z", }; const newerSubstringMatches = Array.from({ length: 12 }, (_unused, index) => ({ + host: "github.com", number: 700 + index, projectId: "project-1", repository: "t3tools/t3code", updatedAt: `2026-09-${String(index + 1).padStart(2, "0")}T12:00:00.000Z`, })); const matches = filterComposerPullRequestMatches({ + keyOf: threadPullRequestKeyOf, entries: [...newerSubstringMatches, exact], projectId: "project-1", repository: "t3tools/t3code", diff --git a/packages/shared/src/composerPullRequestMatches.test.ts b/packages/shared/src/composerPullRequestMatches.test.ts index 64fdb946acfa2..7ed872d4804bc 100644 --- a/packages/shared/src/composerPullRequestMatches.test.ts +++ b/packages/shared/src/composerPullRequestMatches.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vite-plus/test"; -import type { ThreadPullRequestLink } from "@t3tools/contracts"; +import type { ThreadPullRequestKey, ThreadPullRequestLink } from "@t3tools/contracts"; import { composerPullRequestsFromLinks, @@ -8,8 +8,12 @@ import { withLinkedComposerPullRequestsFirst, } from "./composerPullRequestMatches.ts"; +const keyOf = (entry: ThreadPullRequestKey) => + `${entry.host.trim().toLowerCase()}/${entry.repository.trim().toLowerCase()}#${entry.number}`; + const entry = (number: number, updatedAt: string) => ({ number, + host: "github.com", projectId: "p1", repository: "owner/repo", updatedAt, @@ -18,6 +22,7 @@ const entry = (number: number, updatedAt: string) => ({ describe("filterComposerPullRequestMatches", () => { it("ranks the exact number above newer substring matches", () => { const result = filterComposerPullRequestMatches({ + keyOf, entries: [entry(1234, "2026-01-03"), entry(123, "2026-01-01"), entry(1230, "2026-01-02")], projectId: "p1", repository: "owner/repo", @@ -29,6 +34,7 @@ describe("filterComposerPullRequestMatches", () => { it("orders by update instant when timestamps carry different UTC offsets", () => { const result = filterComposerPullRequestMatches({ + keyOf, entries: [entry(401, "2026-10-25T02:50:00+02:00"), entry(499, "2026-10-25T02:10:00+01:00")], projectId: "p1", repository: "owner/repo", @@ -66,6 +72,7 @@ describe("linked pull requests", () => { it("offers a linked pull request from another repository above the project's own", () => { const result = filterComposerPullRequestMatches({ + keyOf, entries: [entry(4, "2026-01-03"), { ...entry(4, "2026-01-04"), repository: "owner/other" }], linked: composerPullRequestsFromLinks([link("owner/repo-b", 4)], "p1"), projectId: "p1", @@ -79,8 +86,27 @@ describe("linked pull requests", () => { ]); }); + it("keeps linked reviews with the same repository and number on different hosts", () => { + const github = link("wireshark/wireshark", 1); + const gitlab = link("wireshark/wireshark", 1, { + host: "gitlab.com", + url: "https://gitlab.com/wireshark/wireshark/-/merge_requests/1", + }); + const result = filterComposerPullRequestMatches({ + keyOf, + entries: [], + linked: composerPullRequestsFromLinks([github, gitlab], "p1"), + projectId: "p1", + repository: "wireshark/wireshark", + query: "1", + limit: 10, + }); + expect(result.map((match) => match.url)).toEqual([github.url, gitlab.url]); + }); + it("keeps one row for a linked pull request the project listing already has", () => { const result = filterComposerPullRequestMatches({ + keyOf, entries: [entry(4, "2026-01-03")], linked: composerPullRequestsFromLinks([link("Owner/Repo", 4)], "p1"), projectId: "p1", @@ -98,22 +124,34 @@ describe("linked pull requests", () => { snapshot: { ...link("owner/repo", 7).snapshot!, title: "Fix login" }, }), link("owner/repo", 8), + link("owner/repo", 8, { + host: "gitlab.com", + url: "https://gitlab.com/owner/repo/-/merge_requests/8", + snapshot: { ...link("owner/repo", 8).snapshot!, title: "Fix CI" }, + }), ], "p1", ); const searching = withLinkedComposerPullRequestsFirst({ + keyOf, matches: [], linked, query: "fix", limit: 10, }); - expect(searching.map((match) => match.number)).toEqual([7]); + expect(searching.map((match) => match.number)).toEqual([7, 8]); const searched = withLinkedComposerPullRequestsFirst({ + keyOf, matches: [entry(9, "2026-01-05"), entry(8, "2026-01-03")], linked, query: "fix", limit: 10, }); - expect(searched).toEqual([linked[0], entry(8, "2026-01-03"), entry(9, "2026-01-05")]); + expect(searched).toEqual([ + linked[0], + entry(8, "2026-01-03"), + linked[2], + entry(9, "2026-01-05"), + ]); }); }); diff --git a/packages/shared/src/composerPullRequestMatches.ts b/packages/shared/src/composerPullRequestMatches.ts index 7c6b3955a4500..6eb38cf34ee66 100644 --- a/packages/shared/src/composerPullRequestMatches.ts +++ b/packages/shared/src/composerPullRequestMatches.ts @@ -1,11 +1,9 @@ -import type { ThreadPullRequestLink } from "@t3tools/contracts"; +import type { ThreadPullRequestKey, ThreadPullRequestLink } from "@t3tools/contracts"; import { visibleThreadPullRequests } from "./threadPullRequests.ts"; -export interface ComposerPullRequestMatch { - readonly number: number; +export interface ComposerPullRequestMatch extends ThreadPullRequestKey { readonly projectId: string; - readonly repository: string; readonly updatedAt: string; } @@ -19,6 +17,7 @@ export function composerPullRequestsFromLinks( : [ { projectId, + host: link.host, repository: link.repository, number: link.number, url: link.url, @@ -43,10 +42,10 @@ export function filterComposerPullRequestMatches< readonly repository: string; readonly query: string; readonly limit: number; + readonly keyOf: (entry: Entry | Linked) => string; }): ReadonlyArray { const repository = input.repository.trim().toLowerCase(); - const keyOf = (entry: ComposerPullRequestMatch) => - `${entry.repository.trim().toLowerCase()}#${entry.number}`; + const { keyOf } = input; const linked = (input.linked ?? []).filter((entry) => String(entry.number).includes(input.query)); const linkedKeys = new Set(linked.map(keyOf)); const matchingEntries = input.entries.filter( @@ -62,7 +61,7 @@ export function filterComposerPullRequestMatches< } } const isExactMatch = (entry: ComposerPullRequestMatch) => String(entry.number) === input.query; - const isLinked = (entry: ComposerPullRequestMatch) => linkedKeys.has(keyOf(entry)); + const isLinked = (entry: Entry | Linked) => linkedKeys.has(keyOf(entry)); const updatedAtMs = (entry: ComposerPullRequestMatch) => Date.parse(entry.updatedAt) || 0; // Hermes has no ES2023 array methods, so sort a fresh array. return [...uniqueEntries.values()] @@ -87,9 +86,9 @@ export function withLinkedComposerPullRequestsFirst< readonly linked: ReadonlyArray; readonly query: string; readonly limit: number; + readonly keyOf: (entry: Entry | Linked) => string; }): ReadonlyArray { - const keyOf = (entry: ComposerPullRequestMatch) => - `${entry.repository.trim().toLowerCase()}#${entry.number}`; + const { keyOf } = input; const matchesByKey = new Map(input.matches.map((entry) => [keyOf(entry), entry])); const words = input.query.toLowerCase().split(/\s+/u).filter(Boolean); const linked = input.linked.flatMap((entry): Array => { From ed7e5010baafd73d0164ee1d5adbd21e26f8f9cb Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 02:20:04 -0800 Subject: [PATCH 176/922] fix(web): terminal "Add to chat" now adds to a queued message being edited (#36117) --- .../chat/useQueuedRunEdit.browser.test.tsx | 27 +++++++++++++++++++ .../src/components/chat/useQueuedRunEdit.ts | 14 ++++------ apps/web/src/composerDraftStore.ts | 20 +++++++++++++- 3 files changed, 51 insertions(+), 10 deletions(-) diff --git a/apps/web/src/components/chat/useQueuedRunEdit.browser.test.tsx b/apps/web/src/components/chat/useQueuedRunEdit.browser.test.tsx index 0320dd6d6bb18..3118cd3ec7100 100644 --- a/apps/web/src/components/chat/useQueuedRunEdit.browser.test.tsx +++ b/apps/web/src/components/chat/useQueuedRunEdit.browser.test.tsx @@ -18,6 +18,7 @@ import { toastManager } from "../ui/toast"; import { act, render } from "../../../test/render"; import { useComposerDraftStore, useComposerThreadDraft } from "../../composerDraftStore"; import { formatInlineContextReference } from "../../lib/composerContextReferences"; +import { INLINE_TERMINAL_CONTEXT_PLACEHOLDER } from "../../lib/terminalContext"; import { environmentContextRecord, environmentContextReference, @@ -327,6 +328,32 @@ describe("useQueuedRunEdit", () => { ); }); + it("adds terminal context to the queued message being edited", async () => { + const { hook } = setup(); + await using _screen = await render(view(THREAD_A, "queued", hook)); + await beginChangedEdit(hook); + const target = requireHook(hook).draftTarget; + const inserted = useComposerDraftStore.getState().insertTerminalContext( + target, + `changed${INLINE_TERMINAL_CONTEXT_PLACEHOLDER}`, + { + id: "terminal-context-1", + threadId: THREAD_A.threadId, + createdAt: "2026-01-01T00:00:00.000Z", + terminalId: "default", + terminalLabel: "Terminal 1", + lineStart: 3, + lineEnd: 3, + text: "hello", + }, + 0, + ); + expect(inserted).toBe(true); + expect( + useComposerDraftStore.getState().getComposerDraft(target)?.terminalContexts, + ).toHaveLength(1); + }); + it("keeps an open edit when the user leaves the thread and comes back", async () => { const { hook } = setup(); await using screen = await render(view(THREAD_A, "queued", hook)); diff --git a/apps/web/src/components/chat/useQueuedRunEdit.ts b/apps/web/src/components/chat/useQueuedRunEdit.ts index e5e5c11dff755..0ed3f9228940f 100644 --- a/apps/web/src/components/chat/useQueuedRunEdit.ts +++ b/apps/web/src/components/chat/useQueuedRunEdit.ts @@ -28,7 +28,7 @@ import { Atom } from "effect/reactivity"; import type { RefObject } from "react"; import { useAssetUrls } from "../../assets/assetUrls"; import { - DraftId, + queuedRunEditDraftId, useComposerDraftStore, type ComposerFileAttachment, type ComposerImageAttachment, @@ -95,10 +95,6 @@ interface QueuedRunEditContent { const isDraftOwnedRecord = (record: ComposerContextRecord) => record.kind === "thread" || record.kind === "environment"; -function queuedEditDraftTarget(routeThreadRef: ScopedThreadRef, runId: RunId) { - return DraftId.make(`queued-edit:${scopedThreadKey(routeThreadRef)}:${runId}`); -} - async function submitQueuedRunEdit(input: { readonly environmentId: EnvironmentId; readonly draftTarget: ComposerThreadTarget; @@ -216,7 +212,7 @@ export function useQueuedRunEdit(input: { const editing = activeThreadId === null ? null : storedEdit; const isSaving = useAtomValue(queuedRunEdits.savingAtom)[editKey] === true; const draftTarget = - editing === null ? threadDraftTarget : queuedEditDraftTarget(routeThreadRef, editing.runId); + editing === null ? threadDraftTarget : queuedRunEditDraftId(routeThreadRef, editing.runId); const imageResources = (editing?.existingAttachments ?? []) .filter((attachment) => attachment.type === "image") @@ -239,12 +235,12 @@ export function useQueuedRunEdit(input: { const clearEditDraft = (runId: RunId) => useComposerDraftStore .getState() - .clearComposerContent(queuedEditDraftTarget(routeThreadRef, runId)); + .clearComposerContent(queuedRunEditDraftId(routeThreadRef, runId)); const beginEdit = useStableCallback((request: EditQueuedRunRequest) => { if (activeThreadId === null) return; if (editing !== null && editing.runId !== request.runId) clearEditDraft(editing.runId); - const target = queuedEditDraftTarget(routeThreadRef, request.runId); + const target = queuedRunEditDraftId(routeThreadRef, request.runId); const sentText = stripAttachmentOnlyBootstrapPrompt(request.text); const context = serverProjection?.messages.find( (message) => message.id === request.messageId, @@ -294,7 +290,7 @@ export function useQueuedRunEdit(input: { // unscoped and names the thread: the user may be anywhere by now. onRunLeftQueue: (_, edit) => { const recovery = recoverQueuedMessageEdit({ - editTarget: queuedEditDraftTarget(routeThreadRef, edit.runId), + editTarget: queuedRunEditDraftId(routeThreadRef, edit.runId), threadTarget: threadDraftTarget, originalText: edit.originalText, removedExistingAttachment: edit.removedExistingAttachment === true, diff --git a/apps/web/src/composerDraftStore.ts b/apps/web/src/composerDraftStore.ts index f719780357a2f..68fdc2b2bca36 100644 --- a/apps/web/src/composerDraftStore.ts +++ b/apps/web/src/composerDraftStore.ts @@ -1545,6 +1545,21 @@ export function resolveComposerDraftKey( return threadKey.length > 0 ? threadKey : null; } +const QUEUED_RUN_EDIT_DRAFT_PREFIX = "queued-edit:"; + +// Thread and run ids both contain colons, so the run id is encoded to keep the thread key parseable. +export function queuedRunEditDraftId(threadRef: ScopedThreadRef, runId: string): DraftId { + return DraftId.make( + `${QUEUED_RUN_EDIT_DRAFT_PREFIX}${scopedThreadKey(threadRef)}:${encodeURIComponent(runId)}`, + ); +} + +function queuedRunEditThreadId(draftId: string): ThreadId | null { + if (!draftId.startsWith(QUEUED_RUN_EDIT_DRAFT_PREFIX)) return null; + const rest = draftId.slice(QUEUED_RUN_EDIT_DRAFT_PREFIX.length); + return parseScopedThreadKey(rest.slice(0, rest.lastIndexOf(":")))?.threadId ?? null; +} + function resolveComposerThreadId( state: ComposerThreadLookupState, target: ComposerThreadTarget, @@ -1556,7 +1571,10 @@ function resolveComposerThreadId( if (typeof normalizedTarget !== "string") { return normalizedTarget.threadId; } - return state.draftThreadsByThreadKey[normalizedTarget]?.threadId ?? null; + return ( + state.draftThreadsByThreadKey[normalizedTarget]?.threadId ?? + queuedRunEditThreadId(normalizedTarget) + ); } function getComposerDraftState( From a044f0c0b30c216341fc144d01bb0c7892679c69 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 02:27:15 -0800 Subject: [PATCH 177/922] fix(mobile): a final answer followed by more work in the same run stays visible (#36116) --- apps/mobile/src/lib/threadActivity.test.ts | 10 ++++++++++ apps/mobile/src/lib/threadActivity.ts | 22 +++++++++------------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/apps/mobile/src/lib/threadActivity.test.ts b/apps/mobile/src/lib/threadActivity.test.ts index d932a417d5f43..6de60afc1cb26 100644 --- a/apps/mobile/src/lib/threadActivity.test.ts +++ b/apps/mobile/src/lib/threadActivity.test.ts @@ -1497,6 +1497,16 @@ describe("buildThreadFeed", () => { phase === "final_answer", ); } + const confirmed = { ...answer, phase: "final_answer" as const }; + const continued = buildThreadFeed( + [user, confirmed, passed, final].map((item, index) => projected(item, index)), + ); + expect( + deriveThreadFeedPresentation(continued, null, new Set()).some( + (row) => row.type === "message" && row.message.id === answer.messageId, + ), + ).toBe(true); + expect(rows([user, confirmed, passed, final], "zen")).toEqual(["user", "answer", "final"]); expect(rows([user, steer, step, passed, final], "zen")).toEqual(["user", "steer", "final"]); expect(rows([user, steer, answer, step], "zen", running)).toEqual([ "user", diff --git a/apps/mobile/src/lib/threadActivity.ts b/apps/mobile/src/lib/threadActivity.ts index 67d96c0f8845e..ec755ce12a2c7 100644 --- a/apps/mobile/src/lib/threadActivity.ts +++ b/apps/mobile/src/lib/threadActivity.ts @@ -1103,21 +1103,17 @@ function feedEntryFoldRunId(entry: ThreadFeedEntry, runlessKey: RunId | null): R : null; } -function answersBeforeSteers(feed: ReadonlyArray): ReadonlySet { +function finalAnswerIds(feed: ReadonlyArray): ReadonlySet { const ids = new Set(); - let previous: ThreadFeedEntry | undefined; for (const entry of feed) { if ( entry.type === "message" && - isSteerMessage(entry.message) && - previous?.type === "message" && - previous.message.role === "assistant" && - previous.message.projectedItem?.item.type === "assistant_message" && - previous.message.projectedItem.item.phase === "final_answer" + entry.message.role === "assistant" && + entry.message.projectedItem?.item.type === "assistant_message" && + entry.message.projectedItem.item.phase === "final_answer" ) { - ids.add(previous.message.id); + ids.add(entry.message.id); } - previous = entry; } return ids; } @@ -1129,7 +1125,7 @@ function deriveThreadFeedRunFolds( feedFailedRunIds: ReadonlySet, ): ReadonlyMap { const terminalAssistantMessageIdByRun = new Map(); - const retainedAnswerIds = answersBeforeSteers(feed); + const retainedAnswerIds = finalAnswerIds(feed); const interruptedRunIds = new Set(); const failedRunIds = new Set(feedFailedRunIds); const promptIndexByRunId = new Map(); @@ -1523,7 +1519,7 @@ function zenAnswerMessageIds( ): ReadonlySet { const replies: Array<{ readonly message: ThreadFeedMessage; readonly index: number }> = []; const lastReplyByResponse = new Map(); - const steerAnswers = new Set(answersBeforeSteers(feed)); + const keptAnswers = new Set(finalAnswerIds(feed)); let userMessages = 0; let awaitingReply = false; let candidate: MessageId | null = null; @@ -1538,7 +1534,7 @@ function zenAnswerMessageIds( } const reply = entry.type === "message" && entry.message.role === "assistant" ? entry.message : null; - if (candidate !== null && reply !== null) steerAnswers.add(candidate); + if (candidate !== null && reply !== null) keptAnswers.add(candidate); candidate = null; if (answering && startsResponse(entry)) answeringFrom = index + 1; if (entry.type === "message" && entry.message.role === "user") { @@ -1558,7 +1554,7 @@ function zenAnswerMessageIds( replies .filter( ({ message, index }) => - steerAnswers.has(message.id) || + keptAnswers.has(message.id) || (terminal.has(message.id) && index < answeringFrom && (answeringRunId === null || message.runId !== answeringRunId)), From fa9d85fad55bf42c807e46e6a9a2e7ca44f4c161 Mon Sep 17 00:00:00 2001 From: Bilal Bakr <62337003+Bil0000@users.noreply.github.com> Date: Fri, 13 Nov 2026 13:32:47 +0300 Subject: [PATCH 178/922] fix(web): a server updated with the app reconnects as soon as it is ready (#35327) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> --- .../sidebar/updateEverythingRun.test.ts | 26 ++++++++++++++++++- .../sidebar/updateEverythingRun.tsx | 25 ++++++++++++++++-- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/apps/web/src/components/sidebar/updateEverythingRun.test.ts b/apps/web/src/components/sidebar/updateEverythingRun.test.ts index f451eadc13b2d..c06ff106c1c30 100644 --- a/apps/web/src/components/sidebar/updateEverythingRun.test.ts +++ b/apps/web/src/components/sidebar/updateEverythingRun.test.ts @@ -1,7 +1,9 @@ +import { AVAILABLE_CONNECTION_STATE } from "@t3tools/client-runtime/connection"; import { EnvironmentId, type ServerConfig } from "@t3tools/contracts"; -import { Atom } from "effect/reactivity"; +import { AsyncResult, Atom } from "effect/reactivity"; import { afterEach, describe, expect, it, vi } from "vite-plus/test"; +import { environmentCatalog } from "~/connection/catalog"; import { appAtomRegistry } from "~/rpc/atomRegistry"; import { serverEnvironment } from "~/state/server"; import type { ServerUpdateOutcome, ServerUpdateTarget } from "../ServerUpdateAction"; @@ -60,6 +62,28 @@ describe("startDesktopUpdateLaunchNotice", () => { } }); + it("retries the connection to a restarting server instead of waiting out its backoff", async () => { + const environmentId = EnvironmentId.make("backing-off-machine"); + using _connection = vi + .spyOn(environmentCatalog, "stateAtom") + .mockReturnValue( + Atom.make( + AsyncResult.success({ ...AVAILABLE_CONNECTION_STATE, phase: "backoff" as const }), + ) as unknown as ReturnType, + ); + using retryNow = vi + .spyOn(environmentCatalog.retryNow, "run") + .mockResolvedValue(AsyncResult.success(undefined)); + const stop = relaunchWhileRestarting(environmentId); + try { + await vi.advanceTimersByTimeAsync(1_000); + expect(retryNow).toHaveBeenCalledWith(appAtomRegistry, environmentId); + } finally { + await vi.advanceTimersByTimeAsync(32 * 60 * 1000); + stop(); + } + }); + it("clears the restored state when the server never comes back", async () => { const environmentId = EnvironmentId.make("lost-machine"); const stateAtom = serverEnvironment.updateStateAtom(environmentId); diff --git a/apps/web/src/components/sidebar/updateEverythingRun.tsx b/apps/web/src/components/sidebar/updateEverythingRun.tsx index ff12f9093571e..ac07c82e91b83 100644 --- a/apps/web/src/components/sidebar/updateEverythingRun.tsx +++ b/apps/web/src/components/sidebar/updateEverythingRun.tsx @@ -1,11 +1,18 @@ import { useAtomValue } from "@effect/atom-react"; -import { serverUpdateStateAtom } from "@t3tools/client-runtime/state/server"; +import { AVAILABLE_CONNECTION_STATE } from "@t3tools/client-runtime/connection"; +import { + nudgeReconnectDuringUpdateRestart, + serverUpdateStateAtom, +} from "@t3tools/client-runtime/state/server"; import { EnvironmentId, type ServerConfig } from "@t3tools/contracts"; +import * as Effect from "effect/Effect"; import * as Option from "effect/Option"; import * as Schema from "effect/Schema"; -import { AsyncResult, Atom } from "effect/reactivity"; +import * as Stream from "effect/Stream"; +import { AsyncResult, Atom, AtomRegistry } from "effect/reactivity"; import { APP_VERSION } from "~/branding"; +import { environmentCatalog } from "~/connection/catalog"; import { appAtomRegistry } from "~/rpc/atomRegistry"; import { desktopUpdateStateAtom } from "~/state/desktopUpdate"; import { serverEnvironment } from "~/state/server"; @@ -308,6 +315,7 @@ function followHandedOffServers(servers: ReadonlyArray): void { if (settled) return; settled = true; clearTimeout(timer); + stopReconnectNudge(); queueMicrotask(() => unsubscribe()); appAtomRegistry.set(stateAtom, { status: "idle" }); releaseState(); @@ -329,6 +337,19 @@ function followHandedOffServers(servers: ReadonlyArray): void { () => settle(`Not back after ${HANDOFF_TIMEOUT_MS / 60_000} minutes`), server.startedAt + HANDOFF_TIMEOUT_MS - Date.now(), ); + const stopReconnectNudge = Effect.runCallback( + nudgeReconnectDuringUpdateRestart({ + stateChanges: AtomRegistry.toStream( + appAtomRegistry, + environmentCatalog.stateAtom(server.environmentId), + ).pipe( + Stream.map((state) => AsyncResult.getOrElse(state, () => AVAILABLE_CONNECTION_STATE)), + ), + retryNow: Effect.promise(() => + environmentCatalog.retryNow.run(appAtomRegistry, server.environmentId), + ).pipe(Effect.asVoid), + }), + ); const unsubscribe = appAtomRegistry.subscribe( serverEnvironment.configValueAtom(server.environmentId), (config) => { From 7903b487badeba1e53ba0cc5dc8be76a6c3ae0f4 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 02:34:55 -0800 Subject: [PATCH 179/922] fix(acp): Copilot runs end when its reply is done, not when its async shells exit (#36122) --- .../Adapters/AcpRegistryAdapterV2.test.ts | 89 ++++++++++ .../src/server/copilotAcp.ts | 11 ++ .../src/server/AcpSessionRuntime.ts | 152 +++++++++++------- packages/provider-acp/src/server/adapter.ts | 37 ++++- 4 files changed, 228 insertions(+), 61 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts index 48d9dd82a6ef2..70f45bc8a46c0 100644 --- a/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts @@ -1768,6 +1768,95 @@ describe("AcpRegistryAdapterV2", () => { }).pipe(Effect.provide(layerTest)), ); + // Copilot holds session/prompt while an attached async shell runs (github/copilot-cli#5293); + // its documented foreground-done signal is the opt-in assistant.idle session event. + it.effect("settles Copilot's reply on assistant.idle while an async shell holds the prompt", () => + Effect.gen(function* () { + const sessionId = "copilot-session"; + const sessionEvent = (type: string) => ({ + type: "emit_inbound", + frame: { + kind: "notification", + method: "github.com/copilot/sessionEvent", + params: { sessionId, type, data: {} }, + }, + }); + const update = (sessionUpdate: Record) => + claudeFrames.update(sessionId, sessionUpdate); + const session = yield* openClaudeReplaySession( + [ + { + type: "expect_outbound", + frame: { kind: "request", method: "initialize", params: "" }, + }, + { + type: "emit_inbound", + frame: { + kind: "response", + method: "initialize", + result: { + protocolVersion: 1, + agentInfo: { name: "Copilot", version: "1.0.110" }, + agentCapabilities: { loadSession: true }, + authMethods: [], + }, + }, + }, + { + type: "expect_outbound", + frame: { kind: "request", method: "session/new", params: "" }, + }, + { + type: "emit_inbound", + frame: { kind: "response", method: "session/new", result: { sessionId } }, + }, + { + type: "expect_outbound", + frame: { kind: "request", method: "session/prompt", params: "" }, + }, + // A previous prompt's idle can land before this prompt's turn starts. + sessionEvent("assistant.idle"), + update({ sessionUpdate: "session_info_update", title: "after stale idle" }), + sessionEvent("assistant.turn_start"), + update({ + sessionUpdate: "tool_call", + toolCallId: "shell-1", + title: "sleep 120", + kind: "execute", + status: "completed", + rawInput: { command: "sleep 120", mode: "async", detach: false }, + }), + update({ sessionUpdate: "agent_message_chunk", content: { type: "text", text: "ok" } }), + sessionEvent("assistant.idle"), + update({ sessionUpdate: "session_info_update", title: "after foreground idle" }), + // The shell never exits, so the first session/prompt is never answered. + { + type: "expect_outbound", + frame: { kind: "request", method: "session/prompt", params: "" }, + }, + sessionEvent("assistant.turn_start"), + update({ sessionUpdate: "agent_message_chunk", content: { type: "text", text: "two" } }), + sessionEvent("assistant.idle"), + update({ sessionUpdate: "session_info_update", title: "after second idle" }), + ], + undefined, + false, + "github-copilot-cli", + ); + yield* session.runtime.startTurn(session.turnInput(1)); + const stale = yield* session.throughMarker("after stale idle"); + assert.isFalse(stale.some((event) => event.type === "turn.terminal")); + const foreground = yield* session.throughMarker("after foreground idle"); + const terminal = foreground.find((event) => event.type === "turn.terminal"); + assert.isDefined(terminal, "the run settles once Copilot's foreground work is idle"); + assert.equal(terminal?.type === "turn.terminal" ? terminal.status : null, "completed"); + yield* session.runtime.startTurn(session.turnInput(2)); + const second = yield* session.throughMarker("after second idle"); + const secondTerminal = second.find((event) => event.type === "turn.terminal"); + assert.equal(secondTerminal?.type === "turn.terminal" ? secondTerminal.runOrdinal : null, 2); + }).pipe(Effect.provide(layerTest)), + ); + it.effect.each([ { kind: "approval", stopReason: "end_turn", status: "completed" }, { kind: "question", stopReason: "error", status: "failed" }, diff --git a/packages/provider-acp-registry/src/server/copilotAcp.ts b/packages/provider-acp-registry/src/server/copilotAcp.ts index aeb893496e5d0..8482886892985 100644 --- a/packages/provider-acp-registry/src/server/copilotAcp.ts +++ b/packages/provider-acp-registry/src/server/copilotAcp.ts @@ -22,6 +22,8 @@ export const copilotClientCapabilitiesMeta = { "assistant.message_delta", "assistant.reasoning_delta", "session.compaction_complete", + "assistant.turn_start", + "assistant.idle", ], }, }; @@ -131,6 +133,15 @@ export function makeCopilotSubagentRouting() { } return context.markSessionCompacted(event.sessionId); } + // Copilot holds session/prompt while an attached async shell runs (github/copilot-cli#5293). + case "assistant.turn_start": + case "assistant.idle": { + if (event.agentId !== undefined || data.aborted === true) return Effect.void; + return context.reportForegroundWork({ + sessionId: event.sessionId, + state: event.type === "assistant.idle" ? "idle" : "running", + }); + } default: return Effect.void; } diff --git a/packages/provider-acp/src/server/AcpSessionRuntime.ts b/packages/provider-acp/src/server/AcpSessionRuntime.ts index bfd9cc150f7af..b216d6cc88b47 100644 --- a/packages/provider-acp/src/server/AcpSessionRuntime.ts +++ b/packages/provider-acp/src/server/AcpSessionRuntime.ts @@ -1163,10 +1163,16 @@ export class AcpSessionRuntime extends Context.Service< providerId: string, ) => Effect.Effect; readonly logout: Effect.Effect; - /** options.dispatched settles when cancel can target this prompt. */ + /** + * options.dispatched settles when cancel can target this prompt. options.released lets the + * next prompt go out while this one's response is still held; it still resolves this call. + */ readonly prompt: ( payload: Omit, - options?: { readonly dispatched?: Deferred.Deferred }, + options?: { + readonly dispatched?: Deferred.Deferred; + readonly released?: Deferred.Deferred; + }, ) => Effect.Effect; readonly cancel: Effect.Effect; readonly terminateProcessGroup?: Effect.Effect; @@ -2376,6 +2382,17 @@ export const make = Effect.fn("AcpSessionRuntime.make")(function* ( yield* child.kill({ forceKillAfter: "1 second" }).pipe(Effect.ignore); }); + const joinPrompt = ( + fiber: Fiber.Fiber, + ) => + Fiber.join(fiber).pipe( + Effect.catchCauseIf( + (cause) => options.cancelBehavior !== "wait-for-prompt" && Cause.hasInterruptsOnly(cause), + (_cause) => + Effect.succeed({ stopReason: "cancelled" } satisfies EffectAcpSchema.PromptResponse), + ), + ); + const cancel = Effect.gen(function* () { const started = yield* getStartedState; const activePrompt = yield* Ref.get(activePromptRef); @@ -2616,66 +2633,81 @@ export const make = Effect.fn("AcpSessionRuntime.make")(function* ( Effect.andThen(runLoggedRequest("logout", {}, acp.agent.logout({}))), ), prompt: (payload, promptOptions?) => - promptSerializationSemaphore.withPermit( - Effect.acquireUseRelease( - promptDispatchSemaphore.withPermit( - Effect.gen(function* () { - const started = yield* getStartedState; - yield* closeActiveAssistantSegment({ queue: eventQueue, assistantSegmentRef }); - yield* Ref.set(assistantUpdatesOpenRef, true); - const requestPayload = { - sessionId: started.sessionId, - ...payload, - } satisfies EffectAcpSchema.PromptRequest; - const completed = yield* Deferred.make(); - const fiber = yield* runLoggedRequest( - "session/prompt", - requestPayload, - acp.agent.prompt(requestPayload), - ).pipe(Effect.forkIn(runtimeScope)); - const active = { fiber, completed } satisfies AcpActivePrompt; - yield* Ref.set(activePromptRef, Option.some(active)); - if (promptOptions?.dispatched) { - yield* Deferred.succeed(promptOptions.dispatched, undefined); - } - return active; - }).pipe(notificationSemaphore.withPermit), - ), - (activePrompt) => - Fiber.join(activePrompt.fiber).pipe( - Effect.catchCauseIf( - (cause) => - options.cancelBehavior !== "wait-for-prompt" && Cause.hasInterruptsOnly(cause), - (_cause) => - Effect.succeed({ - stopReason: "cancelled", - } satisfies EffectAcpSchema.PromptResponse), - ), - Effect.tap(() => - closeActiveAssistantSegment({ queue: eventQueue, assistantSegmentRef }), - ), + promptSerializationSemaphore + .withPermit( + Effect.acquireUseRelease( + promptDispatchSemaphore.withPermit( + Effect.gen(function* () { + const started = yield* getStartedState; + yield* closeActiveAssistantSegment({ queue: eventQueue, assistantSegmentRef }); + yield* Ref.set(assistantUpdatesOpenRef, true); + const requestPayload = { + sessionId: started.sessionId, + ...payload, + } satisfies EffectAcpSchema.PromptRequest; + const completed = yield* Deferred.make(); + const fiber = yield* runLoggedRequest( + "session/prompt", + requestPayload, + acp.agent.prompt(requestPayload), + ).pipe(Effect.forkIn(runtimeScope)); + const active = { fiber, completed } satisfies AcpActivePrompt; + yield* Ref.set(activePromptRef, Option.some(active)); + if (promptOptions?.dispatched) { + yield* Deferred.succeed(promptOptions.dispatched, undefined); + } + return active; + }).pipe(notificationSemaphore.withPermit), ), - (activePrompt, result) => - Effect.gen(function* () { - if ( - options.cancelBehavior === "wait-for-prompt" && - Exit.isFailure(result) && - Cause.hasInterrupts(result.cause) - ) { - yield* retireRuntime( - new EffectAcpErrors.AcpTransportError({ - method: "session/prompt", - detail: "The ACP prompt stopped before the agent confirmed completion.", - cause: undefined, - }), - ); - } - yield* Fiber.interrupt(activePrompt.fiber).pipe(Effect.ignore); - yield* Ref.set(activePromptRef, Option.none()); - yield* Deferred.succeed(activePrompt.completed, undefined); - }), + (activePrompt) => { + const settled = joinPrompt(activePrompt.fiber).pipe( + Effect.tap(() => + closeActiveAssistantSegment({ queue: eventQueue, assistantSegmentRef }), + ), + Effect.map((response) => ({ _tag: "Settled" as const, response })), + ); + return promptOptions?.released === undefined + ? settled + : Effect.raceFirst( + settled, + Deferred.await(promptOptions.released).pipe( + Effect.as({ _tag: "Released" as const, fiber: activePrompt.fiber }), + ), + ); + }, + (activePrompt, result) => + Effect.gen(function* () { + if (Exit.isSuccess(result) && result.value._tag === "Released") { + yield* Ref.set(activePromptRef, Option.none()); + yield* Deferred.succeed(activePrompt.completed, undefined); + return; + } + if ( + options.cancelBehavior === "wait-for-prompt" && + Exit.isFailure(result) && + Cause.hasInterrupts(result.cause) + ) { + yield* retireRuntime( + new EffectAcpErrors.AcpTransportError({ + method: "session/prompt", + detail: "The ACP prompt stopped before the agent confirmed completion.", + cause: undefined, + }), + ); + } + yield* Fiber.interrupt(activePrompt.fiber).pipe(Effect.ignore); + yield* Ref.set(activePromptRef, Option.none()); + yield* Deferred.succeed(activePrompt.completed, undefined); + }), + ), + ) + .pipe( + Effect.flatMap((outcome) => + outcome._tag === "Settled" + ? Effect.succeed(outcome.response) + : joinPrompt(outcome.fiber), + ), ), - ), cancel: options.cancelBehavior === "wait-for-prompt" ? promptDispatchSemaphore.withPermit(cancel) diff --git a/packages/provider-acp/src/server/adapter.ts b/packages/provider-acp/src/server/adapter.ts index 723ad6ec5e7c7..24cde9fd967ba 100644 --- a/packages/provider-acp/src/server/adapter.ts +++ b/packages/provider-acp/src/server/adapter.ts @@ -251,6 +251,14 @@ export interface AcpAdapterV2ExtensionContext { }) => Effect.Effect; /** For compactions reported outside ACP `compaction_update`. */ readonly markSessionCompacted: (sessionId: string) => Effect.Effect; + /** + * For agents that hold `session/prompt` past their foreground work on ACP v1. An idle settles + * the run only after a `running` report during it, so an earlier prompt's idle cannot. + */ + readonly reportForegroundWork: (notice: { + readonly sessionId: string; + readonly state: "running" | "idle"; + }) => Effect.Effect; readonly requestUserInput: ( input: AcpAdapterV2UserInputRequest, requestContext: EffectAcpProtocol.AcpRequestContext, @@ -1482,6 +1490,8 @@ interface ActiveAcpTurn { readonly promptWireSettled: Deferred.Deferred; /** Completed once `session/prompt` is the runtime's active prompt. */ readonly promptDispatched: Deferred.Deferred; + /** Frees the runtime for the next prompt while the agent still holds this one's response. */ + readonly foregroundIdle: Deferred.Deferred; /** Clock millis just before `session/prompt` was handed to the runtime. */ promptSentAt: number | null; /** Completed when an update after dispatch matches `cancelAfterPromptStarts.isStart`. */ @@ -6967,6 +6977,27 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( handlerGeneration, markSessionCompacted(sessionId), ).pipe(Effect.asVoid), + reportForegroundWork: (notice) => + runRuntimeCallbackAtGeneration( + handlerGeneration, + Effect.gen(function* () { + if (yield* Ref.get(stoppedRunQuarantine)) return; + const context = yield* Ref.get(activeTurn); + if ( + context === null || + context.finalized || + context.interrupted || + context.nativeThreadId !== notice.sessionId + ) + return; + if (notice.state === "running") { + context.workAccepted = true; + } else if (context.workAccepted) { + yield* Deferred.succeed(context.foregroundIdle, undefined); + yield* finalizeTurn(context, "completed"); + } + }), + ).pipe(Effect.asVoid), applyBackgroundTaskMutation: (incoming) => runRuntimeCallbackAtGeneration( handlerGeneration, @@ -8418,6 +8449,7 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( workAccepted: false, promptWireSettled, promptDispatched, + foregroundIdle: yield* Deferred.make(), promptSentAt: null, promptStarted, promptUsage: undefined, @@ -8564,7 +8596,10 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( ? undefined : yield* flavor.watchPromptOutcome(requestedSessionId); const promptGeneration = yield* Ref.get(runtimeCallbackGeneration); - const promptOptions = { dispatched: context.promptDispatched }; + const promptOptions = { + dispatched: context.promptDispatched, + released: context.foregroundIdle, + }; context.promptSentAt = yield* Clock.currentTimeMillis; if (promptInactivityTimeoutMillis !== undefined) { context.inactivityWatchdog = yield* watchPromptInactivity( From 08be7829df166d6758ff651a993ee3e2ec2de422 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 03:18:36 -0800 Subject: [PATCH 180/922] fix(server): a link forgotten mid-resolve says it is not linked (#36132) --- apps/server/src/peer/PeerLinks.test.ts | 31 ++++++++++++++++++++++++++ apps/server/src/peer/PeerLinks.ts | 13 ++++++----- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/apps/server/src/peer/PeerLinks.test.ts b/apps/server/src/peer/PeerLinks.test.ts index d29a33c1119bb..fcb682ab03faf 100644 --- a/apps/server/src/peer/PeerLinks.test.ts +++ b/apps/server/src/peer/PeerLinks.test.ts @@ -565,6 +565,37 @@ it.effect("a linked peer that is renamed shows its new name", () => ).pipe(Effect.provide(NodeHttpServer.layerTest)), ); +it.effect( + "a link forgotten while it resolves says it is not linked, not that it lost its credential", + () => + Effect.scoped( + Effect.gen(function* () { + const b = yield* serveB(box); + const beforeGet = yield* Ref.make>(Effect.void); + const racing = Layer.effect( + ServerSecretStore.ServerSecretStore, + Effect.map(ServerSecretStore.make, (store) => + ServerSecretStore.ServerSecretStore.of({ + ...store, + get: (name) => + Ref.getAndSet(beforeGet, Effect.void).pipe( + Effect.flatten, + Effect.andThen(store.get(name)), + ), + }), + ), + ); + const a = yield* makeA(laptop, racing); + const pairing = yield* b.auth.issuePairingCredential(); + yield* a.links.link({ url: b.url, pairingCode: pairing.credential, access: "auto" }); + + yield* Ref.set(beforeGet, Effect.orDie(Effect.asVoid(a.links.unlink(box.environmentId)))); + const forgotten = yield* probe(a).pipe(Effect.flip); + expect(forgotten.message).toContain("not linked to"); + }), + ).pipe(Effect.provide(NodeHttpServer.layerTest)), +); + it.effect("tells the agent to link again once the peer revokes the link or it expires", () => Effect.scoped( Effect.gen(function* () { diff --git a/apps/server/src/peer/PeerLinks.ts b/apps/server/src/peer/PeerLinks.ts index b9c70127971b6..2fa08d5b43671 100644 --- a/apps/server/src/peer/PeerLinks.ts +++ b/apps/server/src/peer/PeerLinks.ts @@ -635,13 +635,12 @@ const make = Effect.gen(function* () { const resolve: PeerLinks["Service"]["resolve"] = Effect.fn("PeerLinks.resolve")( function* (environmentId) { + const notLinked = new PeerLinkError({ + reason: "unknown_link", + message: `This environment is not linked to ${environmentId}. t3_environment_links lists the linked ones.`, + }); const row = yield* readRow(environmentId); - if (Option.isNone(row)) { - return yield* new PeerLinkError({ - reason: "unknown_link", - message: `This environment is not linked to ${environmentId}. t3_environment_links lists the linked ones.`, - }); - } + if (Option.isNone(row)) return yield* notLinked; const link = yield* toLink(row.value); if (DateTime.isLessThanOrEqualTo(link.expiresAt, yield* DateTime.now)) { return yield* new PeerLinkError({ @@ -651,6 +650,8 @@ const make = Effect.gen(function* () { } const stored = yield* secrets.get(row.value.secret_name).pipe(Effect.catch(failStorage)); if (Option.isNone(stored)) { + // An unlink between the two reads removes the row before its secret. + if (Option.isNone(yield* readRow(environmentId))) return yield* notLinked; return yield* new PeerLinkError({ reason: "unknown_link", message: `The link to ${link.label} lost its credential. Link it again.`, From 4aec277f79b2d4dabd88f13cfab264d9f80cbcef Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 03:21:14 -0800 Subject: [PATCH 181/922] fix(server): t3_queue and handoff analytics no longer read a thread's whole history (#36130) --- apps/server/src/mcp/McpHttpServer.ts | 23 ++--- apps/server/src/mcp/threadAccess.ts | 8 +- apps/server/src/mcp/toolkits/core.test.ts | 96 +++++++++++++++++++ .../src/mcp/toolkits/thread/handlers.ts | 11 ++- .../src/orchestration-v2/Orchestrator.ts | 12 +++ .../ThreadManagementService.ts | 8 ++ .../src/relay/AgentAwarenessRelay.test.ts | 1 + 7 files changed, 142 insertions(+), 17 deletions(-) diff --git a/apps/server/src/mcp/McpHttpServer.ts b/apps/server/src/mcp/McpHttpServer.ts index 39f679154bcfe..eaf54214ba07b 100644 --- a/apps/server/src/mcp/McpHttpServer.ts +++ b/apps/server/src/mcp/McpHttpServer.ts @@ -1005,21 +1005,16 @@ const withToolAnalytics = const scheduledRunOf = (threadId: string, runId: RunId | null) => Option.isNone(threads) || runId === null ? Effect.succeed(false) - : threads.value - .getThreadRecords(ThreadId.make(threadId), ["runs", "messages"], { + : Effect.gen(function* () { + const id = ThreadId.make(threadId); + const { runs } = yield* threads.value.getThreadRecords(id, ["runs"], { runIds: [runId], - messageRoles: ["user"], - }) - .pipe( - Effect.map((records) => { - const run = records.runs.find((candidate) => candidate.id === runId); - return records.messages.some( - (message) => - message.id === run?.userMessageId && message.scheduledTaskId !== undefined, - ); - }), - Effect.orElseSucceed(() => false), - ); + }); + const run = runs.find((candidate) => candidate.id === runId); + if (run === undefined) return false; + const messages = yield* threads.value.getMessagesById(id, [run.userMessageId]); + return messages.get(run.userMessageId)?.scheduledTaskId !== undefined; + }).pipe(Effect.orElseSucceed(() => false)); const record = /* Request instrumentation already owns the span; keep this helper in that context. */ Effect.fnUntraced( diff --git a/apps/server/src/mcp/threadAccess.ts b/apps/server/src/mcp/threadAccess.ts index 48d972c5be2fd..416592a57fe79 100644 --- a/apps/server/src/mcp/threadAccess.ts +++ b/apps/server/src/mcp/threadAccess.ts @@ -1,4 +1,7 @@ -import type { ProjectionRecordField } from "../orchestration-v2/ProjectionStore.ts"; +import type { + ProjectionRecordField, + ProjectionRecordFilter, +} from "../orchestration-v2/ProjectionStore.ts"; import { CommandId, OrchestratorMcpFailure, @@ -182,7 +185,7 @@ const resolveThreadId = (context: Caller, threadId: ThreadId | undefined) => export const readThread = Effect.fn("mcp.readThread")(function* < K extends ProjectionRecordField = never, ->(threadId?: ThreadId, fields: ReadonlyArray = []) { +>(threadId?: ThreadId, fields: ReadonlyArray = [], filter?: ProjectionRecordFilter) { const context = yield* readCaller(); const targetId = yield* resolveThreadId(context, threadId); const shell = yield* context.threads.getThreadShell(targetId).pipe(Effect.mapError(unavailable)); @@ -192,6 +195,7 @@ export const readThread = Effect.fn("mcp.readThread")(function* < const projection = yield* context.threads .getProjectThreadRecords({ projectId: shell.projectId, threadId: targetId }, fields, { turnItemTypes: ["user_input_request"], + ...filter, }) .pipe( Effect.mapError((error) => diff --git a/apps/server/src/mcp/toolkits/core.test.ts b/apps/server/src/mcp/toolkits/core.test.ts index 5e80cf41b36b5..b2aaed70322cf 100644 --- a/apps/server/src/mcp/toolkits/core.test.ts +++ b/apps/server/src/mcp/toolkits/core.test.ts @@ -45,6 +45,7 @@ import * as ProviderAdapterRegistry from "../../orchestration-v2/ProviderAdapter import * as ThreadLaunchService from "../../orchestration-v2/ThreadLaunchService.ts"; import * as GitVcsDriver from "../../vcs/GitVcsDriver.ts"; import * as ThreadManagement from "../../orchestration-v2/ThreadManagementService.ts"; +import type * as ProjectionStore from "../../orchestration-v2/ProjectionStore.ts"; import * as ThreadSearch from "../../orchestration-v2/ThreadSearch.ts"; import * as PreviewBrowser from "../../preview/PreviewBrowser.ts"; import * as ProjectService from "../../project/ProjectService.ts"; @@ -467,6 +468,101 @@ it.effect("records only failed calls of tools that hand off no work", () => { ); }); +// A thread read whose runs or messages are bounded by nothing but the thread. +const historyReads = (reads: Array) => { + const record = ( + fields: ReadonlyArray, + filter: ProjectionStore.ProjectionRecordFilter | undefined, + ) => { + if ( + fields.includes("runs") && + filter?.runIds === undefined && + filter?.runStatuses === undefined + ) + reads.push("every run"); + if ( + fields.includes("messages") && + filter?.messageIds === undefined && + filter?.messageRunIds === undefined + ) + reads.push("every message"); + }; + const projection = McpToolAccessTestkit.idleThreadProjection( + McpToolAccessTestkit.liveThreadShell(threadId), + ); + return Layer.mock(ThreadManagement.ThreadManagementService)({ + getThreadShell: (id) => Effect.succeed(McpToolAccessTestkit.liveThreadShell(id)), + getProjectThreadRecords: (_target, fields, filter) => + Effect.sync(() => record(fields, filter)).pipe(Effect.as(projection as never)), + getThreadRecords: (_id, fields, filter) => + Effect.sync(() => record(fields, filter)).pipe(Effect.as(projection as never)), + getMessagesById: () => Effect.succeed(new Map()), + dispatch: () => Effect.succeed({ sequence: 1 } as never), + }); +}; + +it.effect("t3_queue list and read load only the queued runs and their messages", () => { + const reads: Array = []; + return Effect.gen(function* () { + const server = yield* McpServer.McpServer; + const call = (args: Record) => + server + .callTool({ name: "t3_queue", arguments: args }) + .pipe( + Effect.provideService(McpInvocationContext.McpInvocationContext, scope), + Effect.provideService(McpSchema.McpServerClient, client), + ); + yield* call({ action: "list" }); + yield* call({ action: "read", queuedRunId: "run:queued" }); + expect(reads).toEqual([]); + }).pipe( + Effect.provide( + layerThreadToolkit.pipe( + Layer.provideMerge(McpHttpServer.layerInProcessMcpServer), + Layer.provide(NodeCrypto.layer), + Layer.provide(historyReads(reads)), + ), + ), + ); +}); + +it.effect("handoff analytics read only the caller's active run and its message", () => { + const reads: Array = []; + const recorded = Deferred.makeUnsafe(); + return Effect.gen(function* () { + const server = yield* McpServer.McpServer; + yield* server + .callTool({ + name: "t3_queue", + arguments: { action: "edit", queuedRunId: "run:queued", text: "Edited" }, + }) + .pipe( + Effect.provideService(McpInvocationContext.McpInvocationContext, scope), + Effect.provideService(McpSchema.McpServerClient, client), + ); + yield* Deferred.await(recorded); + expect(reads).toEqual([]); + }).pipe( + Effect.provide( + layerThreadToolkit.pipe( + Layer.provideMerge(McpHttpServer.layerInProcessMcpServer), + Layer.provide(NodeCrypto.layer), + Layer.provide(historyReads(reads)), + Layer.provide( + Layer.succeed( + AnalyticsService.AnalyticsService, + AnalyticsService.AnalyticsService.of({ + record: () => Deferred.succeed(recorded, undefined).pipe(Effect.asVoid), + flush: Effect.void, + recordOwners: () => Effect.void, + }), + ), + ), + ), + ), + ); +}); + it.effect("rejects an unknown organize target instead of archiving the calling thread", () => { const dispatched: Array = []; return Effect.gen(function* () { diff --git a/apps/server/src/mcp/toolkits/thread/handlers.ts b/apps/server/src/mcp/toolkits/thread/handlers.ts index 62023dd986b55..88bb91bf62b77 100644 --- a/apps/server/src/mcp/toolkits/thread/handlers.ts +++ b/apps/server/src/mcp/toolkits/thread/handlers.ts @@ -269,7 +269,16 @@ export const layer = McpToolAccess.toLayer(ThreadToolkit, { (input) => input.action === "list" || input.action === "read", McpToolAccess.reads((input) => Effect.gen(function* () { - const { projection } = yield* readThread(input.threadId, ["runs", "messages"]); + const { threads, projection: queued } = yield* readThread(input.threadId, ["runs"], { + runStatuses: ["queued"], + }); + const messages = yield* threads + .getMessagesById( + queued.thread.id, + queued.runs.map((run) => run.userMessageId), + ) + .pipe(Effect.mapError(unavailable)); + const projection = { runs: queued.runs, messages: [...messages.values()] }; if (input.action === "list") { const runs = queuedRunsInDeliveryOrder(projection); const cursor = input.cursor ?? 0; diff --git a/apps/server/src/orchestration-v2/Orchestrator.ts b/apps/server/src/orchestration-v2/Orchestrator.ts index defb1a42c892e..26482feb129fd 100644 --- a/apps/server/src/orchestration-v2/Orchestrator.ts +++ b/apps/server/src/orchestration-v2/Orchestrator.ts @@ -430,6 +430,13 @@ export interface OrchestratorV2Shape { options: ProjectionTimelinePageOptions, ) => Effect.Effect; readonly getMessageCount: (threadId: ThreadId) => Effect.Effect; + readonly getMessagesById: ( + threadId: ThreadId, + messageIds: ReadonlyArray, + ) => Effect.Effect< + ReadonlyMap, + OrchestratorV2Error + >; readonly getTranscriptByteFloor: ( threadId: ThreadId, limit: number, @@ -15765,6 +15772,11 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio .getMessageCount(threadId) .pipe(Effect.mapError((cause) => new OrchestratorProjectionError({ threadId, cause }))); }), + getMessagesById: Effect.fn("OrchestratorV2.getMessagesById")(function (threadId, messageIds) { + return projectionStore + .getMessagesById(threadId, messageIds) + .pipe(Effect.mapError((cause) => new OrchestratorProjectionError({ threadId, cause }))); + }), getTranscriptByteFloor: Effect.fn("OrchestratorV2.getTranscriptByteFloor")( function (threadId, limit) { return projectionStore diff --git a/apps/server/src/orchestration-v2/ThreadManagementService.ts b/apps/server/src/orchestration-v2/ThreadManagementService.ts index a69d308884c72..e821096f6c1d7 100644 --- a/apps/server/src/orchestration-v2/ThreadManagementService.ts +++ b/apps/server/src/orchestration-v2/ThreadManagementService.ts @@ -384,6 +384,7 @@ export interface ThreadManagementServiceShape { readonly getThreadHistoryPage: Orchestrator.OrchestratorV2["Service"]["getThreadHistoryPage"]; readonly getTimelinePage: Orchestrator.OrchestratorV2["Service"]["getTimelinePage"]; readonly getMessageCount: Orchestrator.OrchestratorV2["Service"]["getMessageCount"]; + readonly getMessagesById: Orchestrator.OrchestratorV2["Service"]["getMessagesById"]; readonly getTurnItem: (input: { readonly threadId: ThreadId; readonly itemId: TurnItemId; @@ -1652,6 +1653,13 @@ const make = Effect.gen(function* () { Effect.andThen(orchestrator.getMessageCount(threadId)), ); }), + getMessagesById: Effect.fn("ThreadManagementService.getMessagesById")( + function (threadId, messageIds) { + return ensureProjectionTranscript(threadId).pipe( + Effect.andThen(orchestrator.getMessagesById(threadId, messageIds)), + ); + }, + ), getTurnItem: Effect.fn("ThreadManagementService.getTurnItem")(function (input) { return ensureProjectionTranscript(input.threadId).pipe( Effect.andThen(orchestrator.getTurnItem(input)), diff --git a/apps/server/src/relay/AgentAwarenessRelay.test.ts b/apps/server/src/relay/AgentAwarenessRelay.test.ts index 9fd349cc26185..68e2289524c09 100644 --- a/apps/server/src/relay/AgentAwarenessRelay.test.ts +++ b/apps/server/src/relay/AgentAwarenessRelay.test.ts @@ -238,6 +238,7 @@ const makeTestRelay = Effect.fnUntraced(function* ( getThreadHistoryPage: () => Effect.die("unused"), getTimelinePage: () => Effect.die("Unused timeline read"), getMessageCount: () => Effect.die("unused message count"), + getMessagesById: () => Effect.die("unused messages by id"), getTurnItem: () => Effect.die("unused turn item read"), getThreadRecords: () => Effect.die("unused record read"), getThreadProjection: unused, From 2d8a843e6be9ca170f3bce98cc92ad76617b00c4 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 04:32:55 -0800 Subject: [PATCH 182/922] perf(server): shell reads of a worktree or family no longer parse every thread payload (#36146) --- .../orchestration-v2/ProjectionStore.test.ts | 20 +++++++++++++- .../src/orchestration-v2/ProjectionStore.ts | 25 +++++++++++------- apps/server/src/persistence/Migrations.ts | 2 ++ .../Migrations/089_ShellThreadReadIndexes.ts | 26 +++++++++++++++++++ .../reconcileV2PreviewMigration.test.ts | 2 ++ 5 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 apps/server/src/persistence/Migrations/089_ShellThreadReadIndexes.ts diff --git a/apps/server/src/orchestration-v2/ProjectionStore.test.ts b/apps/server/src/orchestration-v2/ProjectionStore.test.ts index 3b34434017e9d..6886912fc4cca 100644 --- a/apps/server/src/orchestration-v2/ProjectionStore.test.ts +++ b/apps/server/src/orchestration-v2/ProjectionStore.test.ts @@ -2807,11 +2807,25 @@ it.effect("SQL shells read a subagent family and a worktree's threads", () => assert.deepEqual([...(yield* family(id("missing")))], []); // Includes another root's idle child on the same path, which a shell may leave out. - const onWorktree = yield* store.getShellSnapshot({ location: "active", worktreePath }); + const { statements, tracer } = traceSqlStatements(); + const onWorktree = yield* store + .getShellSnapshot({ location: "active", worktreePath }) + .pipe(Effect.withTracer(tracer)); assert.sameMembers( onWorktree.threads.map((thread) => thread.id), [id("root"), id("child"), id("other-child")], ); + // A path names a few threads; scanning every thread parses every payload. + const sql = yield* SqlClient.SqlClient; + const threadQuery = statements.find((statement) => + statement.includes("AS latest_run_stop_requested"), + ); + assert.isDefined(threadQuery); + const threadPlan = (yield* sql.unsafe<{ readonly detail: string }>( + `EXPLAIN QUERY PLAN ${threadQuery}`, + [], + )).map((row) => row.detail); + assert.notInclude(threadPlan, "SCAN t", threadPlan.join("\n")); // A fork keeps its deleted source's root, so the deleted root still names the live tree. yield* store.apply({ id: EventId.make("event:family:root-deleted"), @@ -6629,6 +6643,10 @@ it.layer(layerTest)("ProjectionStoreV2", (it) => { assert.isNotEmpty(countQueries); for (const countQuery of countQueries) { for (const detail of yield* planOf(countQuery)) { + // A thread's counts read only each run's status, never its row and payload. + if (/^SEARCH (r|run) /.test(detail)) { + assert.include(detail, "COVERING INDEX", detail); + } if (detail.includes("orchestration_v2_projection_turn_items")) { // Only held input is read from the sparse index; transcript history stays unread. assert.include( diff --git a/apps/server/src/orchestration-v2/ProjectionStore.ts b/apps/server/src/orchestration-v2/ProjectionStore.ts index 841cd0a0b5b7d..721006481e83e 100644 --- a/apps/server/src/orchestration-v2/ProjectionStore.ts +++ b/apps/server/src/orchestration-v2/ProjectionStore.ts @@ -7666,12 +7666,11 @@ export const layer: Layer.Layer = ( SELECT item.payload_json FROM orchestration_v2_projection_turn_items item - INNER JOIN orchestration_v2_projection_runs r ON r.run_id = item.run_id - WHERE r.run_id = presented.run_id - AND r.status = 'failed' + WHERE presented.status = 'failed' AND item.thread_id = t.thread_id + AND item.run_id = presented.run_id AND item.type = 'error' AND item.status = 'failed' - AND item.node_id IS json_extract(r.payload_json, '$.rootNodeId') + AND item.node_id IS json_extract(presented.payload_json, '$.rootNodeId') ORDER BY item.updated_at DESC, item.ordinal DESC, item.turn_item_id DESC LIMIT 1 ) AS terminal_failure_payload_json, @@ -7789,9 +7788,9 @@ export const layer: Layer.Layer = projectId === undefined ? sql`` : sql` AND t.project_id = ${projectId}` }${ location === "active" - ? sql` AND json_extract(t.payload_json, '$.archivedAt') IS NULL` + ? sql` AND t.archived_at IS NULL` : location === "archive" - ? sql` AND json_extract(t.payload_json, '$.archivedAt') IS NOT NULL` + ? sql` AND t.archived_at IS NOT NULL` : sql`` }${ unsettledOnly @@ -7800,7 +7799,8 @@ export const layer: Layer.Layer = }${ familyOf === undefined ? sql`` - : sql` AND json_extract(t.payload_json, '$.lineage.rootThreadId') = ( + : sql` AND CASE WHEN json_valid(t.payload_json) + THEN json_extract(t.payload_json, '$.lineage.rootThreadId') END = ( SELECT json_extract(member.payload_json, '$.lineage.rootThreadId') FROM orchestration_v2_projection_threads member WHERE member.thread_id = ${familyOf} @@ -7808,7 +7808,8 @@ export const layer: Layer.Layer = }${ worktreePath === undefined ? sql`` - : sql` AND json_extract(t.payload_json, '$.worktreePath') = ${worktreePath}` + : sql` AND CASE WHEN json_valid(t.payload_json) + THEN json_extract(t.payload_json, '$.worktreePath') END = ${worktreePath}` }${threadIds === undefined ? sql`` : sql` AND t.thread_id IN (SELECT value FROM json_each(${encodeIdList(threadIds)}))`} ORDER BY t.updated_at ASC, t.thread_id ASC `; @@ -7836,6 +7837,7 @@ export const layer: Layer.Layer = WHEN EXISTS ( SELECT 1 FROM orchestration_v2_projection_runs AS run + INDEXED BY orchestration_v2_projection_runs_run_status_idx WHERE run.run_id = per_run.run_key AND ( run.status IN ('queued', 'cancelled') @@ -7882,7 +7884,10 @@ export const layer: Layer.Layer = SUM(CASE WHEN counts.run_key = '' THEN counts.item_count ELSE 0 END) AS runless_item_count FROM orchestration_v2_projection_turn_item_counts counts - LEFT JOIN orchestration_v2_projection_runs r ON r.run_id = counts.run_key + -- The primary key would load each run's whole row just for its status. + LEFT JOIN orchestration_v2_projection_runs r + INDEXED BY orchestration_v2_projection_runs_run_status_idx + ON r.run_id = counts.run_key WHERE counts.thread_id IN (SELECT value FROM json_each(${encodeIdList(threadIds)})) GROUP BY counts.thread_id `; @@ -8742,7 +8747,7 @@ export const layer: Layer.Layer = ) AS has_remote_tasks FROM orchestration_v2_projection_threads t WHERE t.deleted_at IS NULL - AND json_extract(t.payload_json, '$.archivedAt') IS NULL + AND t.archived_at IS NULL ORDER BY t.updated_at ASC, t.thread_id ASC `; return rows.map((row): ActiveShellIndexEntry => ({ diff --git a/apps/server/src/persistence/Migrations.ts b/apps/server/src/persistence/Migrations.ts index 6399ee7b85950..c076c0119d2f9 100644 --- a/apps/server/src/persistence/Migrations.ts +++ b/apps/server/src/persistence/Migrations.ts @@ -96,6 +96,7 @@ import Migration0085 from "./Migrations/085_TurnItemCounts.ts"; import Migration0086 from "./Migrations/086_QueuedTurnInputIndex.ts"; import Migration0087 from "./Migrations/087_ProjectionProjectsCustomTitle.ts"; import Migration0088 from "./Migrations/088_TurnItemTypeStatusIndex.ts"; +import Migration0089 from "./Migrations/089_ShellThreadReadIndexes.ts"; const migrationEntries = [ [1, "OrchestrationEvents", Migration0001], @@ -187,6 +188,7 @@ const migrationEntries = [ [86, "QueuedTurnInputIndex", Migration0086], [87, "ProjectionProjectsCustomTitle", Migration0087], [88, "TurnItemTypeStatusIndex", Migration0088], + [89, "ShellThreadReadIndexes", Migration0089], ] as const; export const migrationManifest = migrationEntries.map(([id, name]) => [id, name] as const); diff --git a/apps/server/src/persistence/Migrations/089_ShellThreadReadIndexes.ts b/apps/server/src/persistence/Migrations/089_ShellThreadReadIndexes.ts new file mode 100644 index 0000000000000..25133aa84be65 --- /dev/null +++ b/apps/server/src/persistence/Migrations/089_ShellThreadReadIndexes.ts @@ -0,0 +1,26 @@ +import * as Effect from "effect/Effect"; +import * as SqlClient from "effect/sql/SqlClient"; + +export default Effect.gen(function* () { + const sql = yield* SqlClient.SqlClient; + + // Keep these expressions identical to ProjectionStore's shell worktree and family filters. + // json_valid keeps a malformed payload writable, as the other payload indexes do. + yield* sql` + CREATE INDEX IF NOT EXISTS orchestration_v2_projection_threads_worktree_path_idx + ON orchestration_v2_projection_threads( + CASE WHEN json_valid(payload_json) THEN json_extract(payload_json, '$.worktreePath') END + ) + `; + yield* sql` + CREATE INDEX IF NOT EXISTS orchestration_v2_projection_threads_root_thread_idx + ON orchestration_v2_projection_threads( + CASE WHEN json_valid(payload_json) THEN json_extract(payload_json, '$.lineage.rootThreadId') END + ) + `; + // Shell item counts read only a run's status; the primary key would load the whole row. + yield* sql` + CREATE INDEX IF NOT EXISTS orchestration_v2_projection_runs_run_status_idx + ON orchestration_v2_projection_runs(run_id, status) + `; +}); diff --git a/apps/server/src/persistence/reconcileV2PreviewMigration.test.ts b/apps/server/src/persistence/reconcileV2PreviewMigration.test.ts index a2bba7d790eaf..d1158a15e2cbe 100644 --- a/apps/server/src/persistence/reconcileV2PreviewMigration.test.ts +++ b/apps/server/src/persistence/reconcileV2PreviewMigration.test.ts @@ -68,6 +68,7 @@ describe("V2 preview upgrade", () => { [86, "QueuedTurnInputIndex"], [87, "ProjectionProjectsCustomTitle"], [88, "TurnItemTypeStatusIndex"], + [89, "ShellThreadReadIndexes"], ]); assert.deepStrictEqual(yield* runMigrations(), []); assert.deepStrictEqual(yield* sql`SELECT * FROM orchestration_v2_legacy_imports`, imports); @@ -179,6 +180,7 @@ describe("V2 preview upgrade", () => { [86, "QueuedTurnInputIndex"], [87, "ProjectionProjectsCustomTitle"], [88, "TurnItemTypeStatusIndex"], + [89, "ShellThreadReadIndexes"], ]); }).pipe(Effect.provide(NodeSqliteClient.layer({ filename: ":memory:" }))), ); From c7a3f02e3851923ced8ebd000db79f641e11b038 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 05:32:16 -0800 Subject: [PATCH 183/922] fix(desktop): Local environment off survives an unreadable value in desktop-settings.json (#36168) --- .../src/settings/DesktopAppSettings.test.ts | 22 +++++++++++++ .../src/settings/DesktopAppSettings.ts | 31 +++++++++++-------- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/apps/desktop/src/settings/DesktopAppSettings.test.ts b/apps/desktop/src/settings/DesktopAppSettings.test.ts index 1d28ed1862385..04406f63c6b3d 100644 --- a/apps/desktop/src/settings/DesktopAppSettings.test.ts +++ b/apps/desktop/src/settings/DesktopAppSettings.test.ts @@ -240,6 +240,28 @@ describe("DesktopSettings", () => { ), ); + it.effect("keeps Local environment off when another value in the file is unreadable", () => + withSettings( + Effect.gen(function* () { + const environment = yield* DesktopEnvironment.DesktopEnvironment; + const fileSystem = yield* FileSystem.FileSystem; + const settings = yield* DesktopAppSettings.DesktopAppSettings; + yield* fileSystem.makeDirectory(environment.stateDir, { recursive: true }); + yield* fileSystem.writeFileString( + environment.desktopSettingsPath, + `{ "localEnvironmentEnabled": false, "serverExposureMode": "tailnet" }\n`, + ); + + assert.isFalse((yield* settings.load).localEnvironmentEnabled); + yield* settings.setMainWindowBounds({ x: 10, y: 20, width: 800, height: 600 }, false); + assert.include( + yield* fileSystem.readFileString(environment.desktopSettingsPath), + `"localEnvironmentEnabled":false`, + ); + }), + ), + ); + it.effect("rejects window bounds that do not satisfy the domain schema", () => withSettings( Effect.gen(function* () { diff --git a/apps/desktop/src/settings/DesktopAppSettings.ts b/apps/desktop/src/settings/DesktopAppSettings.ts index 1bb8a2521d881..e81da70660648 100644 --- a/apps/desktop/src/settings/DesktopAppSettings.ts +++ b/apps/desktop/src/settings/DesktopAppSettings.ts @@ -90,20 +90,25 @@ const DesktopWindowBoundsDocument = Schema.Struct({ height: Schema.Number, }); +// A value this build cannot read drops only its own key, so the rest of the file +// still loads and is written back instead of every setting resetting to defaults. +const optionalReadableKey = (schema: S) => + Schema.optionalKey(schema.pipe(Schema.catchDecoding(() => Effect.succeedNone))); + const DesktopSettingsDocument = Schema.Struct({ - localEnvironmentEnabled: Schema.optionalKey(Schema.Boolean), - linuxPasswordStore: Schema.optionalKey(Schema.Unknown), - mainWindowBounds: Schema.optionalKey(Schema.NullOr(DesktopWindowBoundsDocument)), - mainWindowMaximized: Schema.optionalKey(Schema.Boolean), - serverExposureMode: Schema.optionalKey(DesktopServerExposureModeSchema), - tailscaleServeEnabled: Schema.optionalKey(Schema.Boolean), - tailscaleServePort: Schema.optionalKey(Schema.Number), - updateChannel: Schema.optionalKey(DesktopUpdateChannelSchema), - updateChannelConfiguredByUser: Schema.optionalKey(Schema.Boolean), - wslBackendEnabled: Schema.optionalKey(Schema.Boolean), - wslMode: Schema.optionalKey(Schema.Literals(["local", "wsl"])), - wslDistro: Schema.optionalKey(Schema.NullOr(Schema.String)), - wslOnly: Schema.optionalKey(Schema.Boolean), + localEnvironmentEnabled: optionalReadableKey(Schema.Boolean), + linuxPasswordStore: optionalReadableKey(Schema.Unknown), + mainWindowBounds: optionalReadableKey(Schema.NullOr(DesktopWindowBoundsDocument)), + mainWindowMaximized: optionalReadableKey(Schema.Boolean), + serverExposureMode: optionalReadableKey(DesktopServerExposureModeSchema), + tailscaleServeEnabled: optionalReadableKey(Schema.Boolean), + tailscaleServePort: optionalReadableKey(Schema.Number), + updateChannel: optionalReadableKey(DesktopUpdateChannelSchema), + updateChannelConfiguredByUser: optionalReadableKey(Schema.Boolean), + wslBackendEnabled: optionalReadableKey(Schema.Boolean), + wslMode: optionalReadableKey(Schema.Literals(["local", "wsl"])), + wslDistro: optionalReadableKey(Schema.NullOr(Schema.String)), + wslOnly: optionalReadableKey(Schema.Boolean), }); type DesktopSettingsDocument = typeof DesktopSettingsDocument.Type; From 095611d1b55930ba23e22068b6659df4c4b53f83 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 05:59:15 -0800 Subject: [PATCH 184/922] fix(mobile): a sub-agent opened from its parent on a narrow iPad keeps Back (#36175) --- apps/mobile/src/components/ui/AppBar.tsx | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/apps/mobile/src/components/ui/AppBar.tsx b/apps/mobile/src/components/ui/AppBar.tsx index 7690b135f9e11..b691faa300dae 100644 --- a/apps/mobile/src/components/ui/AppBar.tsx +++ b/apps/mobile/src/components/ui/AppBar.tsx @@ -1,8 +1,8 @@ import { Toolbar } from "./Toolbar"; import { AppActivityIndicator } from "./AppActivityIndicator"; import type { HeaderBarButtonMailSearchToolbarItem, SearchBarCommands } from "react-native-screens"; -import { NavigationContext } from "@react-navigation/native"; -import { use, useId, useLayoutEffect, useRef } from "react"; +import { NavigationContext, NavigationRouteContext } from "@react-navigation/native"; +import { use, useId, useLayoutEffect, useRef, useSyncExternalStore } from "react"; import { View } from "react-native"; import { createNativeHeaderMenu } from "./nativeHeaderMenu.ios"; import { ScreenHeaderButton } from "./ScreenHeaderButton"; @@ -63,6 +63,17 @@ export function AppBar(props: AppBarProps) { ? { ...props.backInSplitView, onPress: splitBackPress } : null; const navigation = use(NavigationContext); + const route = use(NavigationRouteContext); + // A thread opened from another thread sits on it, not beside the list, so it keeps Back. + const threadBelow = useSyncExternalStore( + (onChange) => navigation?.addListener("state", onChange) ?? (() => {}), + () => { + const routes = navigation?.getState()?.routes; + const index = routes?.findIndex((candidate) => candidate.key === route?.key) ?? -1; + return route?.name === "Thread" && index > 0 && routes?.[index - 1]?.name === "Thread"; + }, + ); + const listBeside = layout.usesSplitView && props.onBackToList !== undefined && !threadBelow; const rootBack = !layout.usesSplitView && props.onBackToList && navigation?.canGoBack() === false ? props.onBackToList @@ -113,7 +124,7 @@ export function AppBar(props: AppBarProps) { headerBackVisible: props.onClose === undefined && splitBack === null && - !(layout.usesSplitView && props.onBackToList) && + !listBeside && !(props.guardBack && props.onBack), ...(props.guardBack ? { gestureEnabled: false } : undefined), title: props.title, From 8610b31ee8df481f8f53bfb9827fe0abe5d0fab2 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 06:19:22 -0800 Subject: [PATCH 185/922] fix(server): Codex usage answering after three seconds is no longer dropped (#36189) --- apps/server/src/provider/CodexProvider.ts | 7 +- .../src/provider/ProviderRegistry.test.ts | 81 +++++++++++++++++++ 2 files changed, 82 insertions(+), 6 deletions(-) diff --git a/apps/server/src/provider/CodexProvider.ts b/apps/server/src/provider/CodexProvider.ts index ab2cda61e53ee..f3bbf514a83e1 100644 --- a/apps/server/src/provider/CodexProvider.ts +++ b/apps/server/src/provider/CodexProvider.ts @@ -57,7 +57,6 @@ import { import * as HostProcess from "@t3tools/shared/HostProcess"; import packageJson from "../../package.json" with { type: "json" }; const isCodexAppServerSpawnError = Schema.is(CodexErrors.CodexAppServerSpawnError); -const RATE_LIMITS_PROBE_TIMEOUT_MS = 3_000; type CodexRateLimitsProbe = | { @@ -670,11 +669,7 @@ const readCodexRateLimits = ( client: CodexClient.CodexAppServerClient["Service"], deadlineMs: number, ) => - withCodexDiscoveryDeadline( - client.request("account/rateLimits/read", null), - deadlineMs, - RATE_LIMITS_PROBE_TIMEOUT_MS, - ).pipe( + withCodexDiscoveryDeadline(client.request("account/rateLimits/read", null), deadlineMs).pipe( Effect.map((response): CodexRateLimitsProbe => response ? { diff --git a/apps/server/src/provider/ProviderRegistry.test.ts b/apps/server/src/provider/ProviderRegistry.test.ts index 0601714dd618e..564a90f40e6ce 100644 --- a/apps/server/src/provider/ProviderRegistry.test.ts +++ b/apps/server/src/provider/ProviderRegistry.test.ts @@ -17,6 +17,7 @@ import * as FileSystem from "effect/FileSystem"; import * as Layer from "effect/Layer"; import * as Path from "effect/Path"; import * as PubSub from "effect/PubSub"; +import * as Queue from "effect/Queue"; import * as Ref from "effect/Ref"; import * as Schema from "effect/Schema"; import * as Scope from "effect/Scope"; @@ -788,6 +789,86 @@ it.layer( }), ); + it.effect("shows Codex usage that answers after three seconds inside the probe budget", () => + Effect.gen(function* () { + const usageRequested = yield* Deferred.make(); + const spawner = ChildProcessSpawner.make(() => + Effect.gen(function* () { + const scope = yield* Effect.scope; + const output = yield* Queue.unbounded(); + const send = (message: unknown) => + Queue.offer(output, encoder.encode(`${JSON.stringify(message)}\n`)); + const results: Record = { + initialize: { + userAgent: "codex_cli_rs/0.167.0", + codexHome: "/nonexistent-codex-home", + platformFamily: "unix", + platformOs: "linux", + }, + "account/read": { + account: { type: "chatgpt", email: "test@example.com", planType: "pro" }, + requiresOpenaiAuth: true, + }, + "config/read": { config: {}, origins: {} }, + "skills/list": { data: [] }, + "model/list": { data: [] }, + }; + const answer = (line: string) => { + const { id, method } = JSON.parse(line) as { id?: number; method?: string }; + if (id === undefined || method === undefined) return Effect.void; + if (method !== "account/rateLimits/read") { + return send({ id, result: results[method] ?? {} }); + } + return Deferred.succeed(usageRequested, undefined).pipe( + Effect.andThen(Effect.sleep("4 seconds")), + Effect.andThen( + send({ + id, + result: { + rateLimits: { + limitId: "codex", + planType: "pro", + primary: { usedPercent: 42, windowDurationMins: 300, resetsAt: 2e9 }, + }, + rateLimitsByLimitId: null, + rateLimitResetCredits: null, + accountId: null, + }, + }), + ), + Effect.forkIn(scope), + ); + }; + const decoder = new TextDecoder(); + let buffered = ""; + return ChildProcessSpawner.makeHandle({ + ...mockHandle({ stdout: "", stderr: "", code: 0 }), + exitCode: Effect.never, + isRunning: Effect.succeed(true), + stdin: Sink.forEach((chunk: Uint8Array) => { + buffered += decoder.decode(chunk, { stream: true }); + const lines = buffered.split("\n"); + buffered = lines.pop() ?? ""; + return Effect.forEach(lines.filter(Boolean), answer, { discard: true }); + }), + stdout: Stream.fromQueue(output), + }); + }), + ); + const fiber = yield* checkCodexProviderStatus(defaultCodexSettings).pipe( + Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, spawner), + Effect.forkChild, + ); + yield* Deferred.await(usageRequested); + yield* TestClock.adjust("25 seconds"); + const status = yield* Fiber.join(fiber); + + assert.strictEqual(status.auth.status, "authenticated"); + assert.isUndefined(status.usageLimits?.unavailable); + assert.strictEqual(status.usageLimits?.windows[0]?.usedPercent, 42); + }), + ); + it.effect("does not run --version when the Codex executable cannot start", () => Effect.gen(function* () { if ((yield* HostProcess.Platform) === "win32") return; From 9a35ab0afeae64ac7c3bf92d674ead365cf55e10 Mon Sep 17 00:00:00 2001 From: shivam <91240327+shivamhwp@users.noreply.github.com> Date: Fri, 13 Nov 2026 19:57:05 +0530 Subject: [PATCH 186/922] fix(mobile): iOS terminal font and theme changes no longer replay output (#36115) Co-authored-by: Claude Haiku 5.5 --- .../t3-terminal/ios/T3TerminalView.swift | 38 +++++++++++++++---- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/apps/mobile/modules/t3-terminal/ios/T3TerminalView.swift b/apps/mobile/modules/t3-terminal/ios/T3TerminalView.swift index d8f0b29ebce52..1ed02e6a16cbf 100644 --- a/apps/mobile/modules/t3-terminal/ios/T3TerminalView.swift +++ b/apps/mobile/modules/t3-terminal/ios/T3TerminalView.swift @@ -285,7 +285,7 @@ public final class T3TerminalView: ExpoView, UITextFieldDelegate, UIEditMenuInte didSet { guard oldValue != fontSize else { return } inputField.font = UIFont.monospacedSystemFont(ofSize: max(fontSize, 13), weight: .regular) - resetSurface() + applyConfigInPlace() } } @@ -321,14 +321,14 @@ public final class T3TerminalView: ExpoView, UITextFieldDelegate, UIEditMenuInte didSet { guard oldValue != appearanceScheme else { return } appearance = TerminalAppearanceScheme(value: appearanceScheme) - resetSurface() + applyConfigInPlace() } } var themeConfig: String = "" { didSet { guard oldValue != themeConfig else { return } - resetSurface() + applyConfigInPlace() } } @@ -663,7 +663,8 @@ public final class T3TerminalView: ExpoView, UITextFieldDelegate, UIEditMenuInte surfaceCreationFailed = true return } - loadThemeConfig(into: config) + // Creation proceeds without the file, as before; font_size is also set on the surface config. + _ = loadThemeConfig(into: config) ghostty_config_finalize(config) defer { ghostty_config_free(config) } @@ -710,6 +711,27 @@ public final class T3TerminalView: ExpoView, UITextFieldDelegate, UIEditMenuInte setNeedsLayout() } + // Font and theme change in place: a new surface would replay output and re-answer its queries. + private func applyConfigInPlace() { + guard let app, let surface else { + resetSurface() + return + } + guard let config = ghostty_config_new() else { return } + defer { ghostty_config_free(config) } + let loaded = loadThemeConfig(into: config) + ghostty_config_finalize(config) + ghostty_app_set_color_scheme(app, appearance.ghosttyColorScheme) + ghostty_surface_set_color_scheme(surface, appearance.ghosttyColorScheme) + tickApp() + // Without the file, the config lacks font-size and would reset the surface to defaults. + if loaded { + ghostty_surface_update_config(surface, config) + } + resizeSurface() + setNeedsLayout() + } + private func destroySurface() { // Unblock the io thread before ghostty_surface_free joins it. tickApp() @@ -933,16 +955,16 @@ public final class T3TerminalView: ExpoView, UITextFieldDelegate, UIEditMenuInte terminalViewport.backgroundColor = backgroundColorValue } - private func loadThemeConfig(into config: ghostty_config_t) { - guard let path = writeThemeConfigFile() else { return } + private func loadThemeConfig(into config: ghostty_config_t) -> Bool { + guard let path = writeThemeConfigFile() else { return false } path.withCString { cString in ghostty_config_load_file(config, cString) } + return true } private func writeThemeConfigFile() -> String? { - guard !themeConfig.isEmpty else { return nil } - let configContents = themeConfig + let configContents = "\(themeConfig)\nfont-size = \(String(format: "%g", Double(fontSize)))\n" let url = URL(fileURLWithPath: NSTemporaryDirectory()) .appendingPathComponent("t3-terminal-theme-\(appearance.rawValue).ghostty") From f313d0a6cb843551fb60e57a454a71e71a3a8c04 Mon Sep 17 00:00:00 2001 From: shivam <91240327+shivamhwp@users.noreply.github.com> Date: Fri, 13 Nov 2026 20:10:55 +0530 Subject: [PATCH 187/922] fix(server): stop device daemon alongside slow hub shutdown (#33566) Co-authored-by: maria-rcks --- .../server/src/device/LocalDeviceHost.test.ts | 68 ++++++++++++++----- apps/server/src/device/LocalDeviceHost.ts | 13 +++- 2 files changed, 61 insertions(+), 20 deletions(-) diff --git a/apps/server/src/device/LocalDeviceHost.test.ts b/apps/server/src/device/LocalDeviceHost.test.ts index e133b4f9db36c..5f7cef54f5277 100644 --- a/apps/server/src/device/LocalDeviceHost.test.ts +++ b/apps/server/src/device/LocalDeviceHost.test.ts @@ -1,7 +1,9 @@ import { describe, expect, it } from "@effect/vitest"; import * as NodePath from "@effect/platform-node/NodePath"; import * as HostProcess from "@t3tools/shared/HostProcess"; +import * as Deferred from "effect/Deferred"; import * as Effect from "effect/Effect"; +import * as Fiber from "effect/Fiber"; import * as Layer from "effect/Layer"; import * as Option from "effect/Option"; import * as Path from "effect/Path"; @@ -45,7 +47,8 @@ const agentFixture = Effect.fn("agentFixture")(function* ( const fs = yield* FileSystem.FileSystem; const path = yield* Path.Path; const baseDir = yield* fs.makeTempDirectoryScoped({ prefix: "t3-device-agent-start-" }); - const hub = { running: true, spawnFails: false }; + const hub = { running: true, spawnFails: false, cleanup: Effect.void }; + const daemonStopRequested = yield* Deferred.make>(); const stateDir = agentDeviceStateDir(path, path.join(baseDir, "userdata")); const daemonHealthy = yield* Ref.make(true); const runs: Array = []; @@ -80,20 +83,22 @@ const agentFixture = Effect.fn("agentFixture")(function* ( description: "Hub entry missing", }), ) - : Effect.succeed( - ChildProcessSpawner.makeHandle({ - pid: ChildProcessSpawner.ProcessId(123), - stdout: Stream.empty, - stderr: Stream.empty, - all: Stream.empty, - exitCode: Effect.never, - isRunning: Effect.sync(() => hub.running), - kill: () => Effect.void, - stdin: Sink.drain, - getInputFd: () => Sink.drain, - getOutputFd: () => Stream.empty, - unref: Effect.succeed(Effect.void), - }), + : Effect.addFinalizer(() => hub.cleanup).pipe( + Effect.as( + ChildProcessSpawner.makeHandle({ + pid: ChildProcessSpawner.ProcessId(123), + stdout: Stream.empty, + stderr: Stream.empty, + all: Stream.empty, + exitCode: Effect.never, + isRunning: Effect.sync(() => hub.running), + kill: () => Effect.void, + stdin: Sink.drain, + getInputFd: () => Sink.drain, + getOutputFd: () => Stream.empty, + unref: Effect.succeed(Effect.void), + }), + ), ), ), ), @@ -102,7 +107,9 @@ const agentFixture = Effect.fn("agentFixture")(function* ( runs.push(input); return input.args.includes("devices") ? startup(stateDir) - : Effect.succeed(input.args.includes("-list-avds") ? avdOutput : processOutput(0)); + : input.args.includes("daemon") + ? Deferred.succeed(daemonStopRequested, input.args).pipe(Effect.as(processOutput(0))) + : Effect.succeed(input.args.includes("-list-avds") ? avdOutput : processOutput(0)); }, }), Effect.provideService( @@ -122,7 +129,7 @@ const agentFixture = Effect.fn("agentFixture")(function* ( ), ); yield* host.ensureReady(() => Effect.void); - return { host, fs, baseDir, stateDir, hub, daemonHealthy, runs }; + return { host, fs, baseDir, stateDir, hub, daemonHealthy, daemonStopRequested, runs }; }); describe("AgentDevice startup", () => { @@ -353,6 +360,33 @@ describe("AgentDevice startup", () => { expect(yield* fs.exists(path.join(stateDir, "daemon.json"))).toBe(false); }).pipe(Effect.scoped, Effect.provide(NodeServices.layer)), ); + + it.effect("stops the agent daemon while the hub is still shutting down", () => + Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const { host, hub, stateDir, daemonStopRequested } = yield* agentFixture((stateDir) => + fs + .writeFileString( + `${stateDir}/daemon.json`, + JSON.stringify({ httpPort: 12345, token: "test-token" }), + ) + .pipe(Effect.orDie, Effect.as(processOutput(0))), + ); + yield* host.ensureAgentReady(() => Effect.void); + const hubExited = yield* Deferred.make(); + hub.cleanup = Deferred.await(hubExited); + const stopping = yield* Effect.forkChild(host.stop); + expect((yield* Deferred.await(daemonStopRequested)).slice(1)).toEqual([ + "daemon", + "stop", + "--state-dir", + stateDir, + ]); + yield* Deferred.succeed(hubExited, undefined); + yield* Fiber.join(stopping); + expect(yield* fs.exists(`${stateDir}/hub.json`)).toBe(false); + }).pipe(Effect.scoped, Effect.provide(NodeServices.layer)), + ); }); const diagnose = ( diff --git a/apps/server/src/device/LocalDeviceHost.ts b/apps/server/src/device/LocalDeviceHost.ts index c5097509dcade..e657d0dcdfc13 100644 --- a/apps/server/src/device/LocalDeviceHost.ts +++ b/apps/server/src/device/LocalDeviceHost.ts @@ -870,9 +870,16 @@ export const make = Effect.fn("LocalDeviceHost.make")(function* () { const stop: DeviceHost.DeviceHost["Service"]["stop"] = startLock.withPermits(1)( Effect.gen(function* () { const running = yield* Ref.getAndSet(runningRef, null); - yield* stopHub(running?.hub); - yield* fs.remove(hubStatePath(), { force: true }).pipe(Effect.ignore); - yield* stopAgentDeviceDaemon; + // Hub cleanup waits for its exit unbounded; it must not strand the detached agent daemon. + yield* Effect.all( + [ + stopHub(running?.hub).pipe( + Effect.andThen(fs.remove(hubStatePath(), { force: true }).pipe(Effect.ignore)), + ), + stopAgentDeviceDaemon, + ], + { concurrency: "unbounded", discard: true }, + ); }), ); From 3ac8b1f587ed34ed038030055a66e2ac52a35216 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:43:07 -0800 Subject: [PATCH 188/922] fix(acp): bound unread notification retention by size (#23217) --- packages/effect-acp/src/protocol.test.ts | 42 ++++++++++++++++++++++++ packages/effect-acp/src/protocol.ts | 17 ++++++---- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/packages/effect-acp/src/protocol.test.ts b/packages/effect-acp/src/protocol.test.ts index 27f949c3a7807..19f58292ac469 100644 --- a/packages/effect-acp/src/protocol.test.ts +++ b/packages/effect-acp/src/protocol.test.ts @@ -239,6 +239,48 @@ it.layer(NodeServices.layer)("effect-acp protocol", (it) => { }), ); + it.effect("evicts unread raw notifications while a slow reader handles an earlier one", () => + Effect.gen(function* () { + const { stdio, input } = yield* makeInMemoryStdio(); + const handled = yield* Queue.unbounded(); + const transport = yield* AcpProtocol.makeAcpPatchedProtocol({ + stdio, + serverRequestMethods: new Set(), + onNotification: (notification) => + Queue.offer(handled, decodeIndex(notification.params).index).pipe(Effect.asVoid), + }); + const send = (index: number, textLength: number) => + Queue.offer(input, largeNotification(index, textLength)).pipe( + Effect.andThen(Queue.take(handled)), + ); + + yield* send(1, 6 * MIB); + yield* send(2, 6 * MIB); + const entered = yield* Deferred.make(); + const release = yield* Deferred.make(); + const reader = yield* transport.incoming.pipe( + Stream.map((notification) => decodeIndex(notification.params).index), + Stream.tap((index) => + index === 1 + ? Deferred.succeed(entered, undefined).pipe(Effect.andThen(Deferred.await(release))) + : Effect.void, + ), + Stream.take(4), + Stream.runCollect, + Effect.forkScoped, + ); + yield* Deferred.await(entered); + + // Notification 2 is still unread, so 3 and 4 push it past the budget. + yield* send(3, 6 * MIB); + yield* send(4, 6 * MIB); + yield* send(5, 1); + yield* Deferred.succeed(release, undefined); + + assert.deepEqual(yield* Fiber.join(reader), [1, 3, 4, 5]); + }), + ); + it.effect("delivers every raw notification to a reader that keeps up, then ends", () => Effect.gen(function* () { const { stdio, input } = yield* makeInMemoryStdio(); diff --git a/packages/effect-acp/src/protocol.ts b/packages/effect-acp/src/protocol.ts index 8ae077e4c5cd9..490c27d8e0b08 100644 --- a/packages/effect-acp/src/protocol.ts +++ b/packages/effect-acp/src/protocol.ts @@ -313,9 +313,8 @@ export const makeAcpPatchedProtocol = Effect.fn("makeAcpPatchedProtocol")(functi const serverQueue = yield* Queue.unbounded(); const clientQueue = yield* Queue.unbounded(); const rawNotifications = yield* Queue.unbounded>(); - // JSON length of the notifications offered since the queue was last empty. - // `incoming` takes the whole backlog on every pull, so an empty queue holds - // nothing, and a read can only make this an overestimate. + // JSON length of the notifications still in the queue. `incoming` takes one + // at a time, so a slow reader holds at most one outside this budget. let rawNotificationsJsonLength = 0; // Raw readers finish with the connection: termination ends the queue, and so // does closing the scope, which interrupts the reader before it terminates. @@ -494,7 +493,6 @@ export const makeAcpPatchedProtocol = Effect.fn("makeAcpPatchedProtocol")(functi // so readers never see more than the limits allow. const bufferRawNotification = (notification: AcpIncomingNotification, lineLength: number) => Effect.sync(() => { - if (Queue.sizeUnsafe(rawNotifications) === 0) rawNotificationsJsonLength = 0; if (!Queue.offerUnsafe(rawNotifications, { notification, lineLength })) return; rawNotificationsJsonLength += lineLength; while ( @@ -1101,8 +1099,15 @@ export const makeAcpPatchedProtocol = Effect.fn("makeAcpPatchedProtocol")(functi clientProtocol, serverProtocol, get incoming() { - return Stream.fromQueue(rawNotifications).pipe( - Stream.map(({ notification }) => notification), + return Stream.fromPull( + Effect.succeed( + Queue.take(rawNotifications).pipe( + Effect.map(({ notification, lineLength }) => { + rawNotificationsJsonLength -= lineLength; + return [notification] as const; + }), + ), + ), ); }, request: sendRequest, From 00f617db4e97dbfc4d713f69d9f90394e7d3b12a Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:43:22 -0800 Subject: [PATCH 189/922] fix(client-runtime): recover subscriptions that stop on a healthy connection (#24400) --- .../client-runtime/src/rpc/client.test.ts | 138 +++++++++++++++++- packages/client-runtime/src/rpc/client.ts | 56 ++++++- .../client-runtime/src/state/runtime.test.ts | 104 +++++++++++++ 3 files changed, 289 insertions(+), 9 deletions(-) diff --git a/packages/client-runtime/src/rpc/client.test.ts b/packages/client-runtime/src/rpc/client.test.ts index 1d0005e35f0a4..de99737a28dd0 100644 --- a/packages/client-runtime/src/rpc/client.test.ts +++ b/packages/client-runtime/src/rpc/client.test.ts @@ -7,15 +7,17 @@ import { } from "@t3tools/contracts"; import { describe, expect, it } from "@effect/vitest"; import * as Cause from "effect/Cause"; +import * as Clock from "effect/Clock"; import * as Deferred from "effect/Deferred"; import * as Effect from "effect/Effect"; import * as Fiber from "effect/Fiber"; import * as Option from "effect/Option"; import * as Queue from "effect/Queue"; import * as Ref from "effect/Ref"; +import * as Schema from "effect/Schema"; import * as Stream from "effect/Stream"; -import * as TestClock from "effect/testing/TestClock"; import * as SubscriptionRef from "effect/SubscriptionRef"; +import * as TestClock from "effect/testing/TestClock"; import { RpcClientError } from "effect/rpc"; import { @@ -45,6 +47,8 @@ const INSTALL_DOWNLOADING: RelayClientInstallProgressEvent = { stage: "downloading", }; +const decodeNumber = Schema.decodeUnknownEffect(Schema.Number); + function session(client: WsRpcProtocolClient): RpcSession.RpcSession { return { client, @@ -265,6 +269,8 @@ describe("environment RPC", () => { while (subscriptions.length < 2) { yield* Queue.take(subscriptionChanges); } + // The pending same-session retry must not resubscribe the replaced session. + yield* TestClock.adjust("1 minute"); yield* Fiber.interrupt(subscriptionFiber); expect(subscriptions).toEqual(["first", "second"]); @@ -272,6 +278,136 @@ describe("environment RPC", () => { }), ); + // The session stays healthy (`closed` never resolves), as when one stream chunk fails to decode, + // so the supervisor will not replace it and only resubscribing restores delivery. + const resumesOnTheSameSession = Effect.fn("TestEnvironmentRpc.resumesOnTheSameSession")( + function* (streamFailure: Stream.Stream) { + const resumedValue = { source: "resumed" } as unknown as ServerLifecycleStreamEvent; + const firstSubscribed = yield* Deferred.make(); + let subscriptions = 0; + const client = { + [WS_METHODS.subscribeServerLifecycle]: () => { + subscriptions += 1; + return subscriptions === 1 + ? Stream.fromEffect(Deferred.succeed(firstSubscribed, undefined)).pipe( + Stream.drain, + Stream.concat(streamFailure), + ) + : Stream.make(resumedValue).pipe(Stream.concat(Stream.never)); + }, + } as unknown as WsRpcProtocolClient; + const { activeSession, retryCount, supervisor } = yield* makeHarness(); + + yield* SubscriptionRef.set(activeSession, Option.some(session(client))); + const resultFiber = yield* subscribe(WS_METHODS.subscribeServerLifecycle, {}).pipe( + Stream.runHead, + Effect.timeoutOption("2 seconds"), + Effect.provideService(EnvironmentSupervisor.EnvironmentSupervisor, supervisor), + Effect.forkChild, + ); + yield* Deferred.await(firstSubscribed); + yield* TestClock.adjust("2 seconds"); + + expect( + yield* Fiber.join(resultFiber), + "durable subscription stopped delivering after its stream ended on a healthy session", + ).toEqual(Option.some(Option.some(resumedValue))); + expect(subscriptions).toBe(2); + expect(yield* Ref.get(retryCount)).toBe(0); + }, + ); + + it.effect("resubscribes on the same session after a transport failure", () => + resumesOnTheSameSession( + Stream.fail( + new RpcClientError.RpcClientError({ + reason: new RpcClientError.RpcClientDefect({ + message: "stream failed", + cause: new Error("stream failed"), + }), + }), + ), + ), + ); + + it.effect("resubscribes on the same session after a stream chunk fails to decode", () => + // Mirrors RpcClient, which decodes each chunk with `Effect.orDie`. + resumesOnTheSameSession( + Stream.fromEffect(decodeNumber("not a number").pipe(Effect.orDie)).pipe(Stream.drain), + ), + ); + + it.effect( + "backs off a same-session stream that keeps failing to decode after its first value", + () => + Effect.gen(function* () { + // Like the shell stream: a valid value (metadata) arrives, then a chunk fails to decode. + const value = { source: "metadata" } as unknown as ServerLifecycleStreamEvent; + const decodeDefect = decodeNumber("not a number").pipe(Effect.orDie); + const subscriptions = yield* Queue.unbounded<{ + readonly session: "first" | "second"; + readonly at: number; + }>(); + let secondSubscriptions = 0; + const failingClient = (name: "first" | "second") => + ({ + [WS_METHODS.subscribeServerLifecycle]: () => + Stream.unwrap( + Effect.gen(function* () { + yield* Queue.offer(subscriptions, { + session: name, + at: yield* Clock.currentTimeMillis, + }); + if (name === "second" && ++secondSubscriptions > 2) return Stream.never; + return Stream.make(value).pipe( + Stream.concat(Stream.fromEffect(decodeDefect).pipe(Stream.drain)), + ); + }), + ), + }) as unknown as WsRpcProtocolClient; + const { activeSession, retryCount, supervisor } = yield* makeHarness(); + + yield* SubscriptionRef.set(activeSession, Option.some(session(failingClient("first")))); + const subscriptionFiber = yield* subscribe( + WS_METHODS.subscribeServerLifecycle, + {}, + { + onExpectedFailure: () => Effect.void, + retryExpectedFailureAfter: "250 millis", + }, + ).pipe( + Stream.runDrain, + Effect.provideService(EnvironmentSupervisor.EnvironmentSupervisor, supervisor), + Effect.forkChild, + ); + + const expectedFirstSessionDelays = [250, 500, 1_000, 2_000, 4_000, 8_000, 16_000, 30_000]; + const firstSessionDelays: number[] = []; + let previous = yield* Queue.take(subscriptions); + for (const delay of expectedFirstSessionDelays) { + yield* TestClock.adjust(delay); + const next = yield* Queue.take(subscriptions); + firstSessionDelays.push(next.at - previous.at); + previous = next; + } + + // A replacement session starts a fresh backoff. + yield* SubscriptionRef.set(activeSession, Option.some(session(failingClient("second")))); + const replaced = yield* Queue.take(subscriptions); + yield* TestClock.adjust(250); + const retried = yield* Queue.take(subscriptions); + yield* Fiber.interrupt(subscriptionFiber); + + expect( + firstSessionDelays, + "same-session decode retries reset to the base delay after every first value", + ).toEqual(expectedFirstSessionDelays); + expect([replaced.session, retried.session]).toEqual(["second", "second"]); + expect(retried.at - replaced.at).toBe(250); + expect(yield* Ref.get(retryCount)).toBe(0); + }), + ); + it.effect("surfaces domain subscription failures without reconnecting", () => Effect.gen(function* () { const domainError = new Error("terminal subscription rejected"); diff --git a/packages/client-runtime/src/rpc/client.ts b/packages/client-runtime/src/rpc/client.ts index 4e3dad24e7a12..ee70400ca47a5 100644 --- a/packages/client-runtime/src/rpc/client.ts +++ b/packages/client-runtime/src/rpc/client.ts @@ -114,6 +114,7 @@ export const isAuthorizationFailure = (cause: Cause.Cause) => ); const MAX_EXPECTED_FAILURE_RETRY_DELAY_MS = 30_000; +const STREAM_FAILURE_RETRY_DELAY = Duration.seconds(1); export const subscriptionRetryDelay = (base: Duration.Input, retries: number) => Duration.millis( @@ -318,6 +319,8 @@ function subscribeDynamicMapped( EnvironmentRpcStreamFailure >; let expectedFailureRetries = 0; + // Not reset by a first value: a stream can emit before every chunk failure. + let streamFailureRetries = 0; const subscribeToSession = (): Stream.Stream> => Stream.suspend(() => Stream.unwrap( @@ -354,6 +357,11 @@ function subscribeDynamicMapped( : Effect.void, ), Stream.catchCause((cause) => { + const retryAfter = (base: Duration.Input, retries: number) => + Stream.fromEffect(Effect.sleep(subscriptionRetryDelay(base, retries))).pipe( + Stream.drain, + Stream.concat(subscribeToSession()), + ); const hasOnlyExpectedFailures = cause.reasons.length > 0 && cause.reasons.every((reason) => reason._tag === "Fail"); @@ -362,7 +370,22 @@ function subscribeDynamicMapped( cause.reasons.every( (reason) => reason._tag === "Fail" && isRpcClientError(reason.error), ); - if (isTransportFailure) { + // The RPC client dies with a SchemaError when one stream chunk fails to + // decode, ending only that request while the socket stays open. A caller + // with `onDefect` owns its defect recovery. + const isChunkDecodeDefect = + options?.onDefect === undefined && + cause.reasons.length > 0 && + cause.reasons.every( + (reason) => reason._tag === "Die" && Schema.isSchemaError(reason.defect), + ); + // Both end one stream while the session can stay healthy, so nothing else + // would replace it. A dead session is replaced by the supervisor, which + // interrupts this retry through switchMap. A finite search must settle + // rather than restart, so it keeps waiting for the next session. + const resubscribesOnSameSession = + tag !== ORCHESTRATION_V2_WS_METHODS.searchThreadStream; + if (isTransportFailure && !resubscribesOnSameSession) { return Stream.fromEffect( Effect.logWarning( "Durable RPC subscription lost its transport; waiting for the next session.", @@ -374,6 +397,29 @@ function subscribeDynamicMapped( ), ).pipe(Stream.drain); } + if ( + resubscribesOnSameSession && + (isTransportFailure || isChunkDecodeDefect) + ) { + return Stream.fromEffect( + Effect.logWarning( + "Durable RPC subscription stream ended; resubscribing.", + { + cause: Cause.pretty(cause), + method: tag, + environmentId: supervisor.target.environmentId, + }, + ), + ).pipe( + Stream.drain, + Stream.concat( + retryAfter( + options?.retryExpectedFailureAfter ?? STREAM_FAILURE_RETRY_DELAY, + streamFailureRetries++, + ), + ), + ); + } if (hasOnlyExpectedFailures && options?.onExpectedFailure !== undefined) { const handled = Stream.fromEffect(options.onExpectedFailure(cause)).pipe( Stream.drain, @@ -384,16 +430,10 @@ function subscribeDynamicMapped( ) { return handled; } - const retryDelay = subscriptionRetryDelay( - options.retryExpectedFailureAfter, - expectedFailureRetries, - ); - expectedFailureRetries += 1; return handled.pipe( Stream.concat( - Stream.fromEffect(Effect.sleep(retryDelay)).pipe(Stream.drain), + retryAfter(options.retryExpectedFailureAfter, expectedFailureRetries++), ), - Stream.concat(subscribeToSession()), ); } // A reported defect parks until the next session or resubscribe. Failing would diff --git a/packages/client-runtime/src/state/runtime.test.ts b/packages/client-runtime/src/state/runtime.test.ts index 0d2c1ba56088d..63f00b28fb173 100644 --- a/packages/client-runtime/src/state/runtime.test.ts +++ b/packages/client-runtime/src/state/runtime.test.ts @@ -18,6 +18,7 @@ import { WS_METHODS, } from "@t3tools/contracts"; import * as Cause from "effect/Cause"; +import * as Clock from "effect/Clock"; import * as DateTime from "effect/DateTime"; import * as Deferred from "effect/Deferred"; import * as Effect from "effect/Effect"; @@ -29,6 +30,7 @@ import * as Queue from "effect/Queue"; import * as Schema from "effect/Schema"; import * as Stream from "effect/Stream"; import * as SubscriptionRef from "effect/SubscriptionRef"; +import * as TestClock from "effect/testing/TestClock"; import type { HttpClient } from "effect/http"; import { AsyncResult, Atom, AtomRegistry } from "effect/reactivity"; @@ -43,6 +45,7 @@ import { import * as EnvironmentRegistry from "../connection/registry.ts"; import * as EnvironmentSupervisor from "../connection/supervisor.ts"; import { EnvironmentRpcUnavailableError } from "../rpc/client.ts"; +import type { WsRpcProtocolClient } from "../rpc/protocol.ts"; import type * as RpcSession from "../rpc/session.ts"; import { createOrchestrationEnvironmentAtoms } from "./orchestration.ts"; import { createReviewEnvironmentAtoms } from "./review.ts"; @@ -54,6 +57,7 @@ import { createTerminalEnvironmentAtoms } from "./terminal.ts"; import { createAtomCommandScheduler, createEnvironmentQueryAtomFamily, + createEnvironmentRpcSubscriptionAtomFamily, selectEnvironmentQueryData, createEnvironmentSubscriptionAtomFamily, createRuntimeCommand, @@ -70,6 +74,8 @@ const QUERY_ENVIRONMENT = new PrimaryConnectionTarget({ wsBaseUrl: "wss://query.example.test", }); +const decodeNumber = Schema.decodeUnknownEffect(Schema.Number); + const QUERY_RPC_SESSION = {} as RpcSession.RpcSession; class TestQueryError extends Schema.TaggedError()("TestQueryError", { @@ -393,6 +399,104 @@ describe("finite environment subscription lifecycle", () => { expect(observed.some((result) => AsyncResult.isFailure(result))).toBe(false); }), ); + it.effect( + "surfaces a decode defect from a finite RPC subscription instead of resubscribing", + () => + Effect.scoped( + Effect.gen(function* () { + const firstSubscribed = yield* Deferred.make(); + const resubscribed = yield* Deferred.make(); + const surfaced = yield* Deferred.make>(); + let subscriptions = 0; + // Mirrors RpcClient, which decodes each chunk with `Effect.orDie`. + const decodeDefect = decodeNumber("not a number").pipe(Effect.orDie); + const client = { + [ORCHESTRATION_V2_WS_METHODS.searchThreadStream]: () => { + subscriptions += 1; + Deferred.doneUnsafe(subscriptions === 1 ? firstSubscribed : resubscribed, Exit.void); + return Stream.fromEffect(decodeDefect).pipe(Stream.drain); + }, + } as unknown as WsRpcProtocolClient; + const rpcSession = { + client, + initialConfig: Effect.never, + subscribeServerConfig: () => Stream.never, + ready: Effect.void, + probe: Effect.void, + closed: Effect.never, + } as unknown as RpcSession.RpcSession; + const supervisor = EnvironmentSupervisor.EnvironmentSupervisor.of({ + target: QUERY_ENVIRONMENT, + state: yield* SubscriptionRef.make(queryConnectionState()), + session: yield* SubscriptionRef.make(Option.some(rpcSession)), + prepared: yield* SubscriptionRef.make>(Option.none()), + connect: Effect.void, + disconnect: Effect.void, + retryNow: Effect.void, + } satisfies EnvironmentSupervisor.EnvironmentSupervisor["Service"]); + const environmentRegistry = EnvironmentRegistry.EnvironmentRegistry.of({ + followStream: (_environmentId: EnvironmentId, stream: Stream.Stream) => + Stream.provideService( + stream, + EnvironmentSupervisor.EnvironmentSupervisor, + supervisor, + ), + } as unknown as EnvironmentRegistry.EnvironmentRegistry["Service"]); + // Atoms run their own fibers; share the test clock so a pending retry is driven by it. + const runtime = Atom.runtime( + Layer.mergeAll( + Layer.succeed(EnvironmentRegistry.EnvironmentRegistry, environmentRegistry), + Layer.succeed(Clock.Clock, yield* Clock.Clock), + ), + ); + // Same options as the progressive thread find in orchestration.ts. + const family = createEnvironmentRpcSubscriptionAtomFamily(runtime, { + label: "test.finite-rpc-subscription", + tag: ORCHESTRATION_V2_WS_METHODS.searchThreadStream, + completeWhen: (result) => result.complete !== false, + idleTtlMs: 0, + }); + const atom = family({ + environmentId: QUERY_ENVIRONMENT.environmentId, + input: {} as never, + }); + const registry = AtomRegistry.make(); + const unsubscribe = registry.subscribe( + atom, + (result) => { + if (AsyncResult.isFailure(result)) + Deferred.doneUnsafe(surfaced, Exit.succeed(result.cause)); + }, + { immediate: true }, + ); + yield* Effect.addFinalizer(() => + Effect.sync(() => { + unsubscribe(); + registry.dispose(); + }), + ); + yield* Deferred.await(firstSubscribed); + // Lets any same-session retry run, so its resubscription can win the race below. + yield* TestClock.adjust("1 minute"); + const outcome = yield* Effect.raceFirst( + Deferred.await(surfaced).pipe( + Effect.map((cause) => ({ _tag: "surfaced", cause }) as const), + ), + Deferred.await(resubscribed).pipe(Effect.as({ _tag: "resubscribed" } as const)), + ); + + expect( + outcome._tag, + "finite subscription resubscribed after a decode defect instead of failing its consumer", + ).toBe("surfaced"); + if (outcome._tag === "surfaced") { + expect(Cause.hasDies(outcome.cause)).toBe(true); + expect(Schema.isSchemaError(Cause.squash(outcome.cause))).toBe(true); + } + expect(subscriptions).toBe(1); + }), + ), + ); it.effect.each([ { completedTtlMs: undefined, subscriptions: 2 }, { completedTtlMs: 60_000, subscriptions: 1 }, From e41941779a6cebb6fc7048466607a394ce2871f5 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:45:15 -0800 Subject: [PATCH 190/922] fix(server): stopping the service during the pre-update backup ends the copy (#34854) --- apps/server/src/serviceLauncher.test.ts | 50 +++++++++++++++++++++++++ apps/server/src/serviceLauncher.ts | 32 +++++++++++----- 2 files changed, 73 insertions(+), 9 deletions(-) diff --git a/apps/server/src/serviceLauncher.test.ts b/apps/server/src/serviceLauncher.test.ts index c7d6c5e5d8f3a..ac699b9c7d6cb 100644 --- a/apps/server/src/serviceLauncher.test.ts +++ b/apps/server/src/serviceLauncher.test.ts @@ -1586,6 +1586,56 @@ process.send({ type: "request-update", targetVersion: "1.1.0", dbPath: paths.dat }), ); + it.effect("starts no trial when stopped during the pre-update backup", () => + Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + const root = yield* fs.makeTempDirectoryScoped({ prefix: "t3-service-backup-stop-" }); + const statePath = path.join(root, "runtime", "service-state.json"); + const childSource = "setInterval(() => {}, 1000);\n"; + for (const version of ["1.0.0", "1.1.0"]) { + yield* writeFakeRuntime( + fs, + path, + path.join(root, "runtime", "versions", version), + childSource, + ); + } + const dbPath = path.join(root, "userdata", "state.sqlite"); + yield* fs.makeDirectory(path.dirname(dbPath), { recursive: true }); + yield* fs.writeFileString(dbPath, "database"); + const pending = { + protocol: SERVICE_LAUNCHER_PROTOCOL, + activeVersion: "1.0.0", + update: { + id: "update-1", + fromVersion: "1.0.0", + targetVersion: "1.1.0", + dbPath, + status: "pending", + }, + } as const; + yield* Effect.promise(() => writeServiceState(statePath, pending)); + const childCount = spawnedChildren.length; + const launcher = new Launcher(root, pending); + + // Recovery is already queued, so this stop lands while the backup runs. + const running = launcher.run(); + yield* Effect.promise(() => launcher.stop("SIGTERM")); + yield* Effect.promise(() => running); + + // A trial started here arms its 30-minute prepared timer, which keeps the stopped launcher alive. + assert.deepEqual( + spawnedChildren.slice(childCount).map((child) => child.spawnargs.join(" ")), + [], + ); + assert.deepEqual(yield* Effect.promise(() => readServiceState(statePath)), pending); + const backupDir = path.join(root, "runtime", "db-backup", "update-1"); + assert.isFalse(yield* fs.exists(backupDir)); + assert.isFalse(yield* fs.exists(`${backupDir}.staging`)); + }), + ); + it.effect("records no update when the server exits during the backup check", () => Effect.gen(function* () { const fs = yield* FileSystem.FileSystem; diff --git a/apps/server/src/serviceLauncher.ts b/apps/server/src/serviceLauncher.ts index c07697007fe57..1a6c07cf43659 100644 --- a/apps/server/src/serviceLauncher.ts +++ b/apps/server/src/serviceLauncher.ts @@ -326,14 +326,18 @@ async function syncDirectory(directory: string): Promise { } } -function runCp(args: ReadonlyArray): Promise { +function runCp(args: ReadonlyArray, signal?: AbortSignal): Promise { return new Promise((resolve) => { - NodeChildProcess.execFile("cp", args, (error) => resolve(error === null)); + NodeChildProcess.execFile("cp", args, { signal }, (error) => resolve(error === null)); }); } // macOS fs.copyFile clone flags fall back to full copies. -async function copyDatabaseFile(source: string, destination: string): Promise { +async function copyDatabaseFile( + source: string, + destination: string, + signal?: AbortSignal, +): Promise { // oxlint-disable-next-line t3code/no-global-process-runtime -- Standalone launcher has no Effect runtime. const platform = process.platform; // cp -c replaces files and breaks hard links; copy into hard-linked destinations instead. @@ -346,7 +350,9 @@ async function copyDatabaseFile(source: string, destination: string): Promise { +async function backupDatabaseOnce( + baseDir: string, + pending: PendingServiceUpdate, + signal: AbortSignal, +): Promise { const backupDir = databaseBackupDir(baseDir, pending.id); if (await pathExists(backupDir)) return; @@ -534,10 +544,11 @@ async function backupDatabaseOnce(baseDir: string, pending: PendingServiceUpdate await NodeFSP.mkdir(stagingDir, { recursive: true, mode: 0o700 }); try { for (const suffix of DB_FILE_SUFFIXES) { + signal.throwIfAborted(); const source = `${pending.dbPath}${suffix}`; if (suffix !== "" && !(await pathExists(source))) continue; const destination = databaseBackupFile(stagingDir, suffix); - await copyDatabaseFile(source, destination); + await copyDatabaseFile(source, destination, signal); await syncFile(destination); } await NodeFSP.rename(stagingDir, backupDir); @@ -830,6 +841,7 @@ export class Launcher { #timer: NodeJS.Timeout | undefined; #transitions: Promise = Promise.resolve(); #stopRequested = false; + readonly #stopSignal = new AbortController(); #stopping = false; #done = false; readonly #completion = Promise.withResolvers(); @@ -948,6 +960,7 @@ export class Launcher { return; } this.#stopRequested = true; + this.#stopSignal.abort(); this.#clearTimer(); this.#enqueue(async () => { // Let in-progress updates start replacements first; replacements observe the marker and own pre-activation tunnel cleanup. @@ -1043,11 +1056,14 @@ export class Launcher { async #startTrial(pending: PendingServiceUpdate): Promise { try { - await backupDatabaseOnce(this.#baseDir, pending); + await backupDatabaseOnce(this.#baseDir, pending, this.#stopSignal.signal); } catch { + // A stop aborts the copy and leaves the update pending for the next start. + if (this.#stopRequested) return; await this.#returnToPrevious(pending, "failed", "db-backup-failed"); return; } + if (this.#stopRequested) return; try { await this.#startChild(pending.targetVersion, "trial", pending); } catch { @@ -1202,8 +1218,6 @@ export class Launcher { this.#child = null; await this.#terminate(child.process); await finishOnlineBackup?.(); - // A stop during a minutes-long copy should not start a trial; restart resumes the pending update. - if (this.#stopRequested) return; await this.#startTrial(pending); } From 928dd049e1af868bc93ce12498270bd9ec9292c2 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:45:32 -0800 Subject: [PATCH 191/922] fix(server): preview browser downloads Chrome 157.0.8103.78 with its security fixes (#34962) --- apps/server/src/preview/PreviewBrowser.ts | 26 +++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/apps/server/src/preview/PreviewBrowser.ts b/apps/server/src/preview/PreviewBrowser.ts index 50ba7b91c56fa..203ec112cccb7 100644 --- a/apps/server/src/preview/PreviewBrowser.ts +++ b/apps/server/src/preview/PreviewBrowser.ts @@ -25,31 +25,31 @@ import { openZipArchive } from "../zipArchive.ts"; // https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json // Never pin below 156.0.8078.70: the shell has no CRLSet and older SPKI blocklists trust // compromised eMudhra intermediates (crrev.com/c/8627687). -const VERSION = "157.0.8103.38"; +const VERSION = "157.0.8103.78"; const ARCHIVES = { linux64: { - bytes: 128_168_542, - sha256: "deafffa74660b34853a4119c361fd427ac8c9fcb62db51ddb8a797cd83a4ba2d", + bytes: 127_965_683, + sha256: "f90329720fb61e5a76da9b6b509b6ad12a484c9c5df0359403e935177c6d153a", }, "linux-arm64": { - bytes: 128_171_139, - sha256: "b9b910a57b2a15eb3e55000a2339f93a973934a413ebfc6e585a50ec6c42fd6c", + bytes: 128_047_138, + sha256: "912fbf877e53de34d7b3cca5104f3b95607d41bd35412ccc6cd2a599ff0c0dbf", }, "mac-arm64": { - bytes: 104_773_711, - sha256: "e6a6b13551aa12f951d0891d79282606b13742837c8fa0505e1272bae116ce82", + bytes: 104_822_985, + sha256: "17bf66d53c1b1104dcb641c5b331cd4ac5d200c778f5feed0934a0b92deaf8d6", }, "mac-x64": { - bytes: 110_442_262, - sha256: "79821745d0a72d2ba752d981284ed0a9e6fa320dad133596941a17dba6186de3", + bytes: 110_132_547, + sha256: "f1a6a9561eaf1f409849538de663695d36d72fbf1ebca4d42e47c7b5f2a157f3", }, win32: { - bytes: 120_390_416, - sha256: "35e0d45c0136448f7b587f6fb7195a0686127a4dfdc23ef3b0e04b5e9ffe16cd", + bytes: 120_403_126, + sha256: "d9829c59dcc79d9e6e920f8ab841f2a9a055dcf54229d756ac0b42dfec303910", }, win64: { - bytes: 126_513_060, - sha256: "1ff4540855478ba0848e03f1ef8d455f77d058b38285df91bc34273788a73446", + bytes: 126_047_001, + sha256: "2138c1583d25d6f3abec5269943b2f430207d87a539895aa9e90cc4697ec0e1f", }, } as const; From d0957bc4b0495789e28769bad62834f5f912d94e Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:47:03 -0800 Subject: [PATCH 192/922] fix(opencode): restarted server stops an orphaned OpenCode server started through a wrapper (#34959) --- .../src/server/OpenCodeServerLedger.test.ts | 51 +++++++++++++++---- .../src/server/OpenCodeServerLedger.ts | 17 +++++-- 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/packages/provider-opencode/src/server/OpenCodeServerLedger.test.ts b/packages/provider-opencode/src/server/OpenCodeServerLedger.test.ts index 1310cdd8b36e0..3fcb52c898d68 100644 --- a/packages/provider-opencode/src/server/OpenCodeServerLedger.test.ts +++ b/packages/provider-opencode/src/server/OpenCodeServerLedger.test.ts @@ -56,7 +56,6 @@ const spawnGroupLeader = (args: ReadonlyArray, script: string) => if (pid === undefined) return yield* Effect.die("spawn failed"); const grouped = yield* Deferred.make(); const exited = yield* Deferred.make(); - const printed = yield* Deferred.make(); child.once("exit", (_code, signal) => Deferred.doneUnsafe(exited, Effect.succeed(signal))); // "close" fires after stdout drains, so a guard line always lands first. It only fires before // "grouped" when the shell died without starting the script, such as from a signal. @@ -77,12 +76,9 @@ const spawnGroupLeader = (args: ReadonlyArray, script: string) => Effect.succeed(`\`ps -o pgid= -p ${pid}\` printed ${JSON.stringify(output)}`), ); } - if (line === "ready") Deferred.doneUnsafe(printed, Effect.void); }); const result = yield* Deferred.await(grouped); - return result === true - ? { pid, exited: Deferred.await(exited), printed: Deferred.await(printed) } - : result; + return result === true ? { pid, exited: Deferred.await(exited) } : result; }); // A pid colliding with a live group id is rare, so a few retries clear it. Repeated failures @@ -152,18 +148,21 @@ describe.each(observedPlatforms)("OpenCodeServerLedger observing as %s", (platfo const fs = yield* FileSystem.FileSystem; const path = yield* Path.Path; const stateDir = yield* fs.makeTempDirectoryScoped({ prefix: "t3-opencode-ledger-" }); - // The inner shell prints once it has exec'd. Until then it still carries the wrapper's - // command line, and recording that would make the reaper skip the group as recycled. + const gate = path.join(stateDir, "gate"); + const ready = path.join(stateDir, "ready"); + NodeChildProcess.execFileSync("mkfifo", [gate, ready]); + // The wrapper's child is recorded before it execs and stopped after. const wrapper = yield* spawnGroup( SERVE_ARGS, - '/bin/sh -c "echo ready; sleep 600 & wait" "$0" "$@" & exit 0', + `(read _ < '${gate}'; exec /bin/sh -c 'echo > "${ready}"; sleep 600 & wait' "$0" "$@") & exit 0`, ); yield* wrapper.exited; - yield* wrapper.printed; expect(groupExists(wrapper.pid)).toBe(true); yield* recordFromDeadServer(stateDir, wrapper); expect(yield* fs.readDirectory(path.join(stateDir, "opencode-servers"))).toHaveLength(1); + yield* fs.writeFileString(gate, "\n"); + yield* fs.readFileString(ready); const restarted = yield* OpenCodeServerLedger.make({ stateDir }); yield* restarted.reapOrphans; @@ -173,6 +172,38 @@ describe.each(observedPlatforms)("OpenCodeServerLedger observing as %s", (platfo }).pipe(provideHost), ); + it.live("stops a group recorded by an older server without serve arguments", () => + Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + const stateDir = yield* fs.makeTempDirectoryScoped({ prefix: "t3-opencode-ledger-" }); + const orphan = yield* spawnGroup(SERVE_ARGS); + yield* recordFromDeadServer(stateDir, orphan); + const entryPath = path.join(stateDir, "opencode-servers", `${orphan.pid}.json`); + const { args: _args, ...legacy } = JSON.parse(yield* fs.readFileString(entryPath)); + yield* fs.writeFileString(entryPath, JSON.stringify(legacy)); + + const restarted = yield* OpenCodeServerLedger.make({ stateDir }); + yield* restarted.reapOrphans; + + expect(groupExists(orphan.pid)).toBe(false); + }).pipe(provideHost), + ); + + it.live("stops a group whose wrapper appends its own options", () => + Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const stateDir = yield* fs.makeTempDirectoryScoped({ prefix: "t3-opencode-ledger-" }); + const orphan = yield* spawnGroup([...SERVE_ARGS, "--log-level=ERROR"]); + yield* recordFromDeadServer(stateDir, orphan); + + const restarted = yield* OpenCodeServerLedger.make({ stateDir }); + yield* restarted.reapOrphans; + + expect(groupExists(orphan.pid)).toBe(false); + }).pipe(provideHost), + ); + it.live("leaves a recycled pid alone when its start time does not match", () => Effect.gen(function* () { const fs = yield* FileSystem.FileSystem; @@ -201,7 +232,7 @@ describe.each(observedPlatforms)("OpenCodeServerLedger observing as %s", (platfo yield* recordFromDeadServer(stateDir, unrelated); const entryPath = path.join(stateDir, "opencode-servers", `${unrelated.pid}.json`); const entry = yield* fs.readFileString(entryPath); - yield* fs.writeFileString(entryPath, entry.replace("--port=4096", "--port=4097")); + yield* fs.writeFileString(entryPath, entry.replaceAll("--port=4096", "--port=4097")); const restarted = yield* OpenCodeServerLedger.make({ stateDir }); yield* restarted.reapOrphans; diff --git a/packages/provider-opencode/src/server/OpenCodeServerLedger.ts b/packages/provider-opencode/src/server/OpenCodeServerLedger.ts index af90d19acd67d..fb3ea7645e9bf 100644 --- a/packages/provider-opencode/src/server/OpenCodeServerLedger.ts +++ b/packages/provider-opencode/src/server/OpenCodeServerLedger.ts @@ -21,6 +21,7 @@ const OpenCodeServerEntry = Schema.Struct({ pid: Schema.Int, startTime: Schema.String, command: Schema.String, + args: Schema.optionalKey(Schema.Array(Schema.String)), port: Schema.Int, stateDir: Schema.String, owner: ProcessIdentity, @@ -73,6 +74,11 @@ const parseDarwinPs = (output: string): ReadonlyArray => ]; }); +// A wrapper's forked child keeps the wrapper's command line until it execs; the +// serve arguments survive the exec, so they identify the server either way. +const runsServe = (observed: ObservedProcess, args: ReadonlyArray) => + observed.command.endsWith(` ${args.join(" ")}`); + const signalGroup = (pgid: number, signal: NodeJS.Signals) => { try { signalProcessGroup(pgid, signal); @@ -193,9 +199,7 @@ export const make = Effect.fn("OpenCodeServerLedger.make")(function* (input: { leader !== undefined && !leader.zombie && leader.pgid === pgid ? [leader] : (yield* observeGroup(pgid)).filter((candidate) => !candidate.zombie); - const member = - members.find((candidate) => candidate.command.endsWith(` ${server.args.join(" ")}`)) ?? - members[0]; + const member = members.find((candidate) => runsServe(candidate, server.args)) ?? members[0]; if (owner === undefined || member === undefined) { if (groupExists(pgid)) { yield* Effect.logWarning( @@ -212,6 +216,7 @@ export const make = Effect.fn("OpenCodeServerLedger.make")(function* (input: { pid: member.pid, startTime: member.startTime, command: member.command, + args: server.args, port: server.port, stateDir: input.stateDir, owner, @@ -239,7 +244,8 @@ export const make = Effect.fn("OpenCodeServerLedger.make")(function* (input: { ); // Signals only a group whose recorded member still has the same pid, start - // time, group, and full command line, so a recycled pid is never touched. + // time, and group and still has the same command line or serve arguments, so + // a recycled pid is never touched. const stopOrphan = Effect.fn("OpenCodeServerLedger.stopOrphan")(function* ( entry: OpenCodeServerEntry, ) { @@ -249,7 +255,8 @@ export const make = Effect.fn("OpenCodeServerLedger.make")(function* (input: { observed.zombie || observed.startTime !== entry.startTime || observed.pgid !== entry.pgid || - observed.command !== entry.command + (observed.command !== entry.command && + (entry.args === undefined || !runsServe(observed, entry.args))) ) { return; } From c398b46af0ec2aa866c5d92f48ed65c0c385cb78 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:47:22 -0800 Subject: [PATCH 193/922] fix(server): Codex text generation runs when launch args define an MCP server (#36223) --- .../CodexTextGeneration.test.ts | 77 ++++++++++++++++++- .../src/textGeneration/CodexTextGeneration.ts | 21 ++++- 2 files changed, 93 insertions(+), 5 deletions(-) diff --git a/apps/server/src/textGeneration/CodexTextGeneration.test.ts b/apps/server/src/textGeneration/CodexTextGeneration.test.ts index ae5c32bf57432..e6e43d606e27f 100644 --- a/apps/server/src/textGeneration/CodexTextGeneration.test.ts +++ b/apps/server/src/textGeneration/CodexTextGeneration.test.ts @@ -58,6 +58,7 @@ interface FakeCodexInput { mcpServers?: ReadonlyArray<{ name: string; enabled: boolean }> | number; requiredCwd?: string; requireInstructions?: string; + requireMcpServersOff?: ReadonlyArray; } function makeFakeCodexBinary(dir: string, input: FakeCodexInput) { @@ -73,6 +74,7 @@ function makeFakeCodexBinary(dir: string, input: FakeCodexInput) { mcpServers: input.mcpServers ?? [], requiredCwd: input.requiredCwd ?? null, requireInstructions: input.requireInstructions ?? null, + requireMcpServersOff: input.requireMcpServersOff ?? [], stderr: input.stderr ?? null, output: input.output, exitCode: input.exitCode ?? 0, @@ -129,6 +131,33 @@ function makeFakeCodexBinary(dir: string, input: FakeCodexInput) { ' process.stderr.write(message + "\\n");', " process.exit(code);", "}", + "// Like Codex: a later mcp_servers={...} override replaces servers earlier -c flags defined.", + "const servers = new Map();", + "const offServers = new Set();", + "for (let index = 0; index < args.length; index += 1) {", + ' if (args[index] !== "-c" && args[index] !== "--config") continue;', + ' const value = args[index + 1] ?? "";', + ' if (value.startsWith("mcp_servers={")) {', + ' const named = [...value.matchAll(/"([^"]+)"=\\{enabled=false\\}/g)].map((match) => match[1]);', + " for (const name of named) offServers.add(name);", + " for (const name of [...servers.keys()]) {", + " if (named.includes(name)) servers.set(name, false);", + " else servers.delete(name);", + " }", + ' } else if (value.startsWith("mcp_servers.")) {', + ' const [name, key] = value.slice("mcp_servers.".length).split(/[.=]/);', + " if (value === `mcp_servers.${name}.enabled=false`) offServers.add(name);", + " // An enabled flag alone toggles a server another layer (config.toml) defines.", + ' if (key === "enabled" && !servers.has(name)) continue;', + ' servers.set(name, servers.get(name) === true || key === "url" || key === "command");', + " }", + "}", + "for (const [name, hasTransport] of servers) {", + ' if (!hasTransport) fail("Error loading config.toml: invalid transport in `mcp_servers." + name + "`", 12);', + "}", + "for (const name of check.requireMcpServersOff) {", + ' if (!offServers.has(name)) fail("MCP server left on: " + name, 13);', + "}", 'if (check.requiredCwd !== null && process.cwd() !== check.requiredCwd) fail("cannot inspect checkout", 10);', 'if (check.requireInstructions !== null && !instructions.includes(check.requireInstructions)) fail("missing writer task", 11);', "if (check.requireArg !== null && !originalArgs.includes(` ${check.requireArg} `)) {", @@ -365,7 +394,7 @@ it.layer(layerCodexTextGenerationTest)("CodexTextGeneration", (it) => { { name: "already-off", enabled: false }, ], requireArg: - '--config features.plugins=false --config features.apps=false --config mcp_servers={"augmenter"={enabled=false},"my.server"={enabled=false}}', + 'exec --config mcp_servers={"augmenter"={enabled=false},"my.server"={enabled=false}} --config developer_instructions="Use', }, (textGeneration) => Effect.gen(function* () { @@ -384,6 +413,52 @@ it.layer(layerCodexTextGenerationTest)("CodexTextGeneration", (it) => { ), ); + it.effect("turns off an MCP server that launch args define without dropping its transport", () => + withFakeCodexEnv( + { + output: JSON.stringify({ title: "Remove default shapes" }), + launchArgs: `-c 'mcp_servers.t3-code.url="http://127.0.0.1:1/mcp"' -c 'mcp_servers.t3-code.enabled=true'`, + mcpServers: [{ name: "t3-code", enabled: true }], + requireMcpServersOff: ["t3-code"], + requireArg: + "--config features.apps=false --config mcp_servers.t3-code.enabled=false --ephemeral", + }, + (textGeneration) => + Effect.gen(function* () { + const result = yield* textGeneration.generateThreadTitle({ + cwd: process.cwd(), + message: "Remove default shapes from characters", + modelSelection: DEFAULT_TEST_MODEL_SELECTION, + }); + expect(result.title).toBe("Remove default shapes"); + }), + ), + ); + + it.effect("keeps MCP servers off when launch args set their own mcp_servers table", () => + withFakeCodexEnv( + { + output: JSON.stringify({ title: "Remove default shapes" }), + launchArgs: `-c 'mcp_servers={"my.server"={command="echo",enabled=true}}'`, + mcpServers: [ + { name: "my.server", enabled: true }, + { name: "my server", enabled: true }, + ], + requireArg: + '--config features.apps=false --config mcp_servers={"my.server"={enabled=false},"my server"={enabled=false}} --config mcp_servers.my server.enabled=false --ephemeral', + }, + (textGeneration) => + Effect.gen(function* () { + const result = yield* textGeneration.generateThreadTitle({ + cwd: process.cwd(), + message: "Remove default shapes from characters", + modelSelection: DEFAULT_TEST_MODEL_SELECTION, + }); + expect(result.title).toBe("Remove default shapes"); + }), + ), + ); + it.effect("still generates when Codex cannot list its MCP servers", () => withFakeCodexEnv( { diff --git a/apps/server/src/textGeneration/CodexTextGeneration.ts b/apps/server/src/textGeneration/CodexTextGeneration.ts index 4de5392502c8c..49c60166111ba 100644 --- a/apps/server/src/textGeneration/CodexTextGeneration.ts +++ b/apps/server/src/textGeneration/CodexTextGeneration.ts @@ -55,6 +55,11 @@ const codexMcpServersOff = (names: ReadonlyArray): string | null => names.length === 0 ? null : `mcp_servers={${names.map((name) => `${JSON.stringify(name)}={enabled=false}`).join(",")}}`; +// Codex splits -c keys at the first "=" and on every dot, so only those names take a dotted flag. +const codexMcpServerOffFlags = (names: ReadonlyArray) => + names + .filter((name) => !name.includes(".") && !name.includes("=")) + .flatMap((name) => ["--config", `mcp_servers.${name}.enabled=false`]); const encodeJsonString = Schema.encodeEffect(Schema.fromJsonString(Schema.Unknown)); export const makeCodexTextGeneration = Effect.fn("makeCodexTextGeneration")(function* ( codexConfig: CodexSettings, @@ -291,20 +296,28 @@ export const makeCodexTextGeneration = Effect.fn("makeCodexTextGeneration")(func } : {}), }; - const mcpServersOff = yield* listEnabledMcpServers({ + const enabledMcpServers = yield* listEnabledMcpServers({ binary, cwd, env, launchArgs: codexMcpListLaunchArgs(launchArgs), - }).pipe(Effect.map(codexMcpServersOff)); + }); + const mcpServersOff = codexMcpServersOff(enabledMcpServers); + const execLaunchArgs = codexExecLaunchArgs(launchArgs); + // A launch-arg mcp_servers={...} table replaces ours and can re-enable dotted names. + const launchArgsSetMcpTable = execLaunchArgs.some((arg) => /\bmcp_servers\s*=/.test(arg)); const spawnCommand = yield* resolveSpawnCommand( binary, [ "exec", - ...codexExecLaunchArgs(launchArgs), + // Before launch args: a later table would replace servers their -c flags define. + ...(mcpServersOff ? ["--config", mcpServersOff] : []), + ...execLaunchArgs, // A user's MCP server could act on the text-generation prompt. ...CODEX_NO_PLUGIN_ARGS, - ...(mcpServersOff ? ["--config", mcpServersOff] : []), + ...(mcpServersOff && launchArgsSetMcpTable ? ["--config", mcpServersOff] : []), + // After launch args, so a launch arg's enabled=true cannot turn a server back on. + ...codexMcpServerOffFlags(enabledMcpServers), "--ephemeral", "--skip-git-repo-check", "-s", From 759e649ea8b306ae3ea8f97ed14e69158204ef8f Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:49:14 -0800 Subject: [PATCH 194/922] fix(server): agent recordings keep up with the page instead of the encoder (#36215) --- apps/server/src/preview/ServerBrowser.test.ts | 38 +++++++++++++--- apps/server/src/preview/ServerBrowser.ts | 45 ++++++++++++------- apps/server/src/preview/ServerBrowserPage.ts | 3 +- 3 files changed, 63 insertions(+), 23 deletions(-) diff --git a/apps/server/src/preview/ServerBrowser.test.ts b/apps/server/src/preview/ServerBrowser.test.ts index d2897987dc1f6..83f6db232cca6 100644 --- a/apps/server/src/preview/ServerBrowser.test.ts +++ b/apps/server/src/preview/ServerBrowser.test.ts @@ -360,12 +360,10 @@ function makeEncoderPage() { document: { createElement: (tag: string) => (tag === "video" ? video : canvas) }, Path2D: function Path2D() {}, MediaRecorder: FakeMediaRecorder, - createImageBitmap: async (blob: Blob) => ({ - width: 1280, - height: 800, - pixels: await blob.text(), - close() {}, - }), + createImageBitmap: async (blob: Blob) => { + await decodeGate?.promise; + return { width: 1280, height: 800, pixels: await blob.text(), close() {} }; + }, atob, btoa, Blob, @@ -386,6 +384,7 @@ function makeEncoderPage() { const contexts: ReturnType[] = []; let encoderPageOverride: Page | undefined; const encoderStreams: Array<{ frameRate: number | undefined; bitsPerSecond: number }> = []; +let decodeGate: PromiseWithResolvers | null = null; const contextRequests: Array<{ profileId: string; isolated: boolean }> = []; let contextGate: PromiseWithResolvers | null = null; let heldStill: (() => Promise) | null = null; @@ -571,6 +570,7 @@ beforeEach(() => { contexts.length = 0; encoderPageOverride = undefined; encoderStreams.length = 0; + decodeGate = null; contextRequests.length = 0; contextGate = null; heldStill = null; @@ -1077,6 +1077,32 @@ it.effect.each([ ).pipe(Effect.provide(layer)), ); +// Chrome stops sending screencast frames while too many are unacked. +it.effect("recordings ack screencast frames without waiting for the encoder to decode them", () => + Effect.scoped( + Effect.gen(function* () { + const { broker, tabId } = yield* ready; + yield* broker.invoke({ scope, tabId, operation: "recordingStart", input: {} }); + const session = contexts[0]!.sessions.find((candidate) => + candidate.send.mock.calls.some(([method]) => method === "Page.startScreencast"), + )!; + const gate = Promise.withResolvers(); + decodeGate = gate; + yield* Effect.addFinalizer(() => Effect.sync(() => gate.resolve())); + for (const sessionId of [1, 2, 3]) { + session.emit("Page.screencastFrame", { + data: Buffer.from(`frame ${sessionId}`).toString("base64"), + sessionId, + metadata: { deviceWidth: 1280 }, + }); + } + expect( + session.send.mock.calls.filter(([method]) => method === "Page.screencastFrameAck"), + ).toHaveLength(3); + }), + ).pipe(Effect.provide(layer)), +); + it.effect.each([{ truncated: false }, { truncated: true }])( "saves a large recording as a binary download and removes its staged file (truncated: $truncated)", ({ truncated }) => diff --git a/apps/server/src/preview/ServerBrowser.ts b/apps/server/src/preview/ServerBrowser.ts index fdffcc49414ed..ee9339c0a9ce3 100644 --- a/apps/server/src/preview/ServerBrowser.ts +++ b/apps/server/src/preview/ServerBrowser.ts @@ -1986,24 +1986,37 @@ const make = Effect.gen(function* () { const opened = await tab.page.context().newCDPSession(tab.page); session = opened; const framesInFlight = new Set>(); + // Chrome withholds frames while acks are outstanding, so ack on arrival and let a + // slow encoder skip to the newest frame instead of throttling the capture. + let pendingFrame: readonly [string, number] | null = null; + const deliverPending = async () => { + while (pendingFrame) { + const next = pendingFrame; + pendingFrame = null; + const accepted = await encoder + .evaluate( + ([data, width]) => + (globalThis as unknown as EncoderWindow).__t3Recorder.frame(data, width), + next, + ) + .catch(() => true); + if (!accepted) { + pendingFrame = null; + await opened.send("Page.stopScreencast").catch(constVoid); + } + } + }; opened.on("Page.screencastFrame", (frame) => { + void opened + .send("Page.screencastFrameAck", { sessionId: frame.sessionId }) + .catch(constVoid); const cssWidth = tab.page.viewportSize()?.width ?? frame.metadata.deviceWidth; - const delivered: Promise = encoder - .evaluate( - ([data, width]) => - (globalThis as unknown as EncoderWindow).__t3Recorder.frame(data, width), - [frame.data, cssWidth] as const, - ) - .then(async (accepted) => { - if (!accepted) await opened.send("Page.stopScreencast"); - }) - .catch(constVoid) - .finally(() => { - framesInFlight.delete(delivered); - void opened - .send("Page.screencastFrameAck", { sessionId: frame.sessionId }) - .catch(constVoid); - }); + const delivering = framesInFlight.size > 0; + pendingFrame = [frame.data, cssWidth]; + if (delivering) return; + const delivered: Promise = deliverPending().finally(() => + framesInFlight.delete(delivered), + ); framesInFlight.add(delivered); }); await opened.send("Page.startScreencast", RECORDING_SCREENCAST); diff --git a/apps/server/src/preview/ServerBrowserPage.ts b/apps/server/src/preview/ServerBrowserPage.ts index 65a283dc3cca4..418b644f52fb7 100644 --- a/apps/server/src/preview/ServerBrowserPage.ts +++ b/apps/server/src/preview/ServerBrowserPage.ts @@ -1103,7 +1103,8 @@ export const recordingEncoderScript = (frameRate: BrowserRecordingFrameRate) => window.__t3Recorder = { async frame(base64, cssWidth) { if (tooLarge) return false; - const bytes = Uint8Array.from(atob(base64), (char) => char.charCodeAt(0)); + // A per-character atob copy costs ~30 ms on a 3200x1800 frame and throttles recordings. + const bytes = Uint8Array.fromBase64(base64); const bitmap = await createImageBitmap(new Blob([bytes], { type: "image/jpeg" })); if (tooLarge) { bitmap.close(); return false; } if (!recorder) { From 9b6dde9a2384b883dda71fd31cab21616caf436c Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:49:28 -0800 Subject: [PATCH 195/922] fix(server): session import finds compressed Codex rollouts (#34947) --- .../src/project/AgentSessionScanner.test.ts | 102 ++++++++++++++++++ .../server/src/project/AgentSessionScanner.ts | 73 +++++++++++-- 2 files changed, 166 insertions(+), 9 deletions(-) diff --git a/apps/server/src/project/AgentSessionScanner.test.ts b/apps/server/src/project/AgentSessionScanner.test.ts index 30db62847e8e1..48b52d97ad132 100644 --- a/apps/server/src/project/AgentSessionScanner.test.ts +++ b/apps/server/src/project/AgentSessionScanner.test.ts @@ -5,6 +5,7 @@ import * as NodeChildProcess from "node:child_process"; import * as NodeFS from "node:fs"; import * as NodeOS from "node:os"; import * as NodeSqlite from "node:sqlite"; +import * as NodeZlib from "node:zlib"; import { describe, expect, it } from "@effect/vitest"; import { AgentSessionImportSource, @@ -174,6 +175,21 @@ const writeTranscript = Effect.fn("AgentSessionScanner.test.writeTranscript")(fu yield* fileSystem.utimes(input.filePath, seconds, seconds); }); +const writeCompressedTranscript = Effect.fn("AgentSessionScanner.test.writeCompressedTranscript")( + function* (input: { + readonly filePath: string; + readonly contents: string; + readonly mtimeMs: number; + }) { + const fileSystem = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + yield* fileSystem.makeDirectory(path.dirname(input.filePath), { recursive: true }); + yield* fileSystem.writeFile(input.filePath, NodeZlib.zstdCompressSync(input.contents)); + const seconds = input.mtimeMs / 1000; + yield* fileSystem.utimes(input.filePath, seconds, seconds); + }, +); + const claudeSessionLine = (cwd: string) => `${JSON.stringify({ type: "user", cwd, sessionId: "s1" })}\n${JSON.stringify({ type: "assistant" })}\n`; @@ -1244,6 +1260,32 @@ it.layer(NodeServices.layer)("AgentSessionScanner", (it) => { const result = yield* runScan({ claudeHomePath, codexHomePath }); + expect(result.candidates.map(({ path, threadCount }) => ({ path, threadCount }))).toEqual([ + { path: workspace, threadCount: 1 }, + ]); + }), + ); + it.effect("discovers projects whose Codex rollouts are zstd-compressed", () => + Effect.gen(function* () { + const path = yield* Path.Path; + const claudeHomePath = yield* makeTempDir("t3code-claude-home-"); + const codexHomePath = yield* makeTempDir("t3code-codex-home-"); + const workspace = yield* makeTempDir("t3code-workspace-"); + yield* writeCompressedTranscript({ + filePath: path.join( + codexHomePath, + "sessions", + "2026", + "05", + "03", + "rollout-2026-05-03T00-00-00-019a5f00-0000-7000-8000-00000000000b.jsonl.zst", + ), + contents: codexRolloutLine(workspace), + mtimeMs: Date.parse("2026-05-03T00:00:00.000Z"), + }); + + const result = yield* runScan({ claudeHomePath, codexHomePath }); + expect(result.candidates.map(({ path, threadCount }) => ({ path, threadCount }))).toEqual([ { path: workspace, threadCount: 1 }, ]); @@ -1252,6 +1294,66 @@ it.layer(NodeServices.layer)("AgentSessionScanner", (it) => { }); describe("recentThreads", () => { + it.effect("imports Codex conversations stored only as zstd-compressed rollouts", () => + Effect.gen(function* () { + const path = yield* Path.Path; + const nowMs = Date.parse("2026-08-24T12:00:00.000Z"); + yield* TestClock.setTime(nowMs); + const claudeHomePath = yield* makeTempDir("t3code-claude-home-"); + const codexHomePath = yield* makeTempDir("t3code-codex-home-"); + const workspace = yield* makeTempDir("t3code-workspace-"); + yield* writeCompressedTranscript({ + filePath: path.join( + codexHomePath, + "sessions", + "2026", + "08", + "20", + "rollout-2026-08-20T10-00-00-019a5f00-0000-7000-8000-00000000000c.jsonl.zst", + ), + contents: [ + encodeTranscriptRecord({ + type: "session_meta", + payload: { id: "019a5f00-0000-7000-8000-00000000000c", cwd: workspace }, + }), + encodeTranscriptRecord({ + type: "event_msg", + timestamp: "2026-08-20T10:00:00.000Z", + payload: { type: "user_message", message: "Compressed prompt" }, + }), + encodeTranscriptRecord({ + type: "response_item", + timestamp: "2026-08-20T10:01:00.000Z", + payload: { + type: "message", + role: "assistant", + content: [{ type: "output_text", text: "Compressed answer" }], + }, + }), + ].join("\n"), + mtimeMs: nowMs - 4 * 24 * 60 * 60 * 1000, + }); + + const threads = yield* runRecentThreads({ + claudeHomePath, + codexHomePath, + workspaceRoot: workspace, + }); + + expect( + threads.map((thread) => ({ + id: thread.providerSessionId, + messages: thread.messages.map((message) => message.text), + })), + ).toEqual([ + { + id: "019a5f00-0000-7000-8000-00000000000c", + messages: ["Compressed prompt", "Compressed answer"], + }, + ]); + }), + ); + it.effect("imports recent Claude, Codex, and Pi sessions for the selected project only", () => Effect.gen(function* () { const path = yield* Path.Path; diff --git a/apps/server/src/project/AgentSessionScanner.ts b/apps/server/src/project/AgentSessionScanner.ts index d9ca41b8f26b1..b47cef441c925 100644 --- a/apps/server/src/project/AgentSessionScanner.ts +++ b/apps/server/src/project/AgentSessionScanner.ts @@ -1,5 +1,6 @@ import * as NodeOS from "node:os"; import * as NodeSqlite from "node:sqlite"; +import * as NodeZlib from "node:zlib"; import { AgentSessionImportSource, @@ -17,11 +18,13 @@ import { import * as Clock from "effect/Clock"; import * as Context from "effect/Context"; import * as DateTime from "effect/DateTime"; +import * as NodeStream from "@effect/platform-node/NodeStream"; import * as Effect from "effect/Effect"; import * as FileSystem from "effect/FileSystem"; import * as Layer from "effect/Layer"; import * as Option from "effect/Option"; import * as Path from "effect/Path"; +import * as Pull from "effect/Pull"; import * as Schema from "effect/Schema"; import * as Semaphore from "effect/Semaphore"; import * as Stream from "effect/Stream"; @@ -177,7 +180,11 @@ const decodeCodexHistoryBase = Schema.decodeUnknownOption( ); // Original rollouts end in their thread ID, rewound ones in `_`. const CODEX_ROLLOUT_ID_PATTERN = - /-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:_([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}))?\.jsonl$/i; + /-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:_([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}))?\.jsonl(?:\.zst)?$/i; +// Codex zstd-compresses older rollouts; their byte limits and offsets count decompressed bytes. +const COMPRESSED_TRANSCRIPT_SUFFIX = ".jsonl.zst"; +const isCompressedTranscript = (filePath: string) => + filePath.endsWith(COMPRESSED_TRANSCRIPT_SUFFIX); // Codex records a chat's project only here; moving a chat leaves its rollout cwd unchanged. const CODEX_STATE_DATABASE = "state_5.sqlite"; const decodeCodexSessionIndexEntry = Schema.decodeUnknownOption( @@ -861,6 +868,33 @@ export const make = Effect.gen(function* () { const statOption = (target: string) => fileSystem.stat(target).pipe(Effect.asSome, Effect.orElseSucceed(Option.none)); + const transcriptChunkReader = Effect.fn("AgentSessionScanner.transcriptChunkReader")(function* ( + file: FileSystem.File, + filePath: string, + ) { + if (!isCompressedTranscript(filePath)) return (size: number) => file.readAlloc(size); + const pull = yield* Stream.toPull( + fileSystem + .stream(filePath) + .pipe(NodeStream.pipeThroughSimple(() => NodeZlib.createZstdDecompress())), + ); + let pending: Array = []; + let done = false; + // Untraced: called once per chunk inside the caller's traced read. + return Effect.fnUntraced(function* (size: number) { + while (pending.length === 0) { + if (done) return Option.none(); + const next = yield* pull.pipe(Pull.catchDone(() => Effect.undefined)); + if (next === undefined) done = true; + else pending = [...next]; + } + const chunk = pending.shift(); + if (chunk === undefined) return Option.none(); + if (chunk.byteLength > size) pending.unshift(chunk.subarray(size)); + return Option.some(chunk.subarray(0, size)); + }); + }); + const directoryIdentity = Effect.fn("AgentSessionScanner.directoryIdentity")(function* ( target: string, knownStats?: FileSystem.File.Info, @@ -1037,11 +1071,15 @@ export const make = Effect.gen(function* () { fileSystem.open(transcript.filePath, { flag: "r" }).pipe( Effect.flatMap((file) => Effect.gen(function* () { + const readChunk = yield* transcriptChunkReader(file, transcript.filePath); + const size = isCompressedTranscript(transcript.filePath) + ? Number.POSITIVE_INFINITY + : transcript.identity.size; const decoder = new TextDecoder(); let remaining = ""; let bytesRead = 0; let recordsRead = 0; - const maxBytes = Math.min(MAX_TRANSCRIPT_SCAN_BYTES, transcript.identity.size); + const maxBytes = Math.min(MAX_TRANSCRIPT_SCAN_BYTES, size); const reserveRecord = () => { if ( recordsRead === MAX_METADATA_RECORDS_PER_TRANSCRIPT || @@ -1073,7 +1111,7 @@ export const make = Effect.gen(function* () { ); budget.operationsRemaining -= 1; budget.bytesRemaining -= readSize; - const next = yield* file.readAlloc(readSize); + const next = yield* readChunk(readSize); if (Option.isNone(next)) { return readLastRecord(); } @@ -1090,7 +1128,7 @@ export const make = Effect.gen(function* () { } } - if (bytesRead < transcript.identity.size) { + if (bytesRead < size) { budget.truncated = true; return null; } @@ -1107,8 +1145,12 @@ export const make = Effect.gen(function* () { source: AgentSessionSource, prefix?: { readonly endByteOffset: number; readonly historyBytes: number }, ) { - const readBytes = prefix?.endByteOffset ?? expected.size; - if (readBytes > expected.size || readBytes > MAX_IMPORTED_TRANSCRIPT_BYTES) return null; + const compressed = isCompressedTranscript(filePath); + const readBytes = + prefix?.endByteOffset ?? (compressed ? MAX_IMPORTED_TRANSCRIPT_BYTES : expected.size); + if ((!compressed && readBytes > expected.size) || readBytes > MAX_IMPORTED_TRANSCRIPT_BYTES) { + return null; + } return yield* Effect.scoped( fileSystem.open(filePath, { flag: "r" }).pipe( @@ -1117,6 +1159,7 @@ export const make = Effect.gen(function* () { if (!sameTranscriptIdentity(expected, transcriptIdentity(filePath, yield* file.stat))) { return null; } + const readChunk = yield* transcriptChunkReader(file, filePath); const records: Array = []; const claudeHistory = createClaudeHistoryWindow(); let cwd = Option.none(); @@ -1177,10 +1220,12 @@ export const make = Effect.gen(function* () { }; while (bytesRead < readBytes) { - const next = yield* file.readAlloc( + const next = yield* readChunk( Math.min(TRANSCRIPT_PREFIX_BYTES, readBytes - bytesRead), ); if (Option.isNone(next)) { + // A compressed rollout's decompressed length is only known at its end. + if (compressed && prefix === undefined) break; return null; } @@ -1398,7 +1443,12 @@ export const make = Effect.gen(function* () { } const directory = path.join(sessionsDir, year, month, day); for (const entry of (yield* readDirectory(directory)).toSorted().toReversed()) { - if (!entry.startsWith("rollout-") || !entry.endsWith(".jsonl")) continue; + if ( + !entry.startsWith("rollout-") || + !(entry.endsWith(".jsonl") || isCompressedTranscript(entry)) + ) { + continue; + } if (operationsRemaining <= 0) { truncated = true; break; @@ -2024,7 +2074,12 @@ export const make = Effect.gen(function* () { { source: candidate.source, providerInstanceId: candidate.providerInstanceId, - fallbackSessionId: path.basename(transcript.filePath, ".jsonl"), + fallbackSessionId: path.basename( + transcript.filePath, + isCompressedTranscript(transcript.filePath) + ? COMPRESSED_TRANSCRIPT_SUFFIX + : ".jsonl", + ), lastActiveAtMs: transcript.mtimeMs, }, inheritedRecords === null From 148612e181446ed6b1e87dd013f5ad7f488ba01d Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:50:54 -0800 Subject: [PATCH 196/922] fix(opencode): usage scans reuse unchanged rows and run off the event loop (#34897) --- .../src/server/usage.test.ts | 93 ++++++++++++++++++ .../provider-opencode/src/server/usage.ts | 98 ++++++++++++++++--- 2 files changed, 179 insertions(+), 12 deletions(-) diff --git a/packages/provider-opencode/src/server/usage.test.ts b/packages/provider-opencode/src/server/usage.test.ts index d211563738ad5..02d1e5dc8cc28 100644 --- a/packages/provider-opencode/src/server/usage.test.ts +++ b/packages/provider-opencode/src/server/usage.test.ts @@ -1,3 +1,4 @@ +import type * as NodeWorkerThreads from "node:worker_threads"; import * as NodeServices from "@effect/platform-node/NodeServices"; import { assert, describe, it } from "@effect/vitest"; import { DEFAULT_SERVER_SETTINGS, ProviderInstanceId } from "@t3tools/contracts"; @@ -13,6 +14,27 @@ import { vi } from "vite-plus/test"; import { openCodeUsageReader, readOpenCodeUsage } from "./usage.ts"; +const readerWorkers = vi.hoisted(() => ({ started: 0, enabled: false })); + +// Statement spies only see the main thread, so reader workers fail to start unless a test enables them. +vi.mock("node:worker_threads", async (importOriginal) => { + const actual = await importOriginal(); + class ReaderWorker extends actual.Worker { + constructor(...args: ConstructorParameters) { + super( + ...((readerWorkers.enabled + ? args + : [ + "throw new Error('reader workers disabled');", + { eval: true }, + ]) as ConstructorParameters), + ); + readerWorkers.started++; + } + } + return { ...actual, Worker: ReaderWorker }; +}); + const openDatabase = (filename: string) => Layer.build(NodeSqliteClient.layer({ filename })).pipe( Effect.map(Context.get(SqlClient.SqlClient)), @@ -141,6 +163,7 @@ describe("readOpenCodeUsage", () => { ); } let statements = 0; + let bodyReads = 0; const originalAll = NodeSqlite.StatementSync.prototype.all; yield* Effect.acquireRelease( Effect.sync(() => @@ -149,6 +172,7 @@ describe("readOpenCodeUsage", () => { ...params ) { statements++; + if (this.sourceSQL.includes("data ->")) bodyReads++; return originalAll.apply(this, params); }), ), @@ -161,6 +185,51 @@ describe("readOpenCodeUsage", () => { ["opencode:a", "opencode:b", "opencode:c"], ); assert.isBelow(statements, 10); + + bodyReads = 0; + const repeated = yield* readOpenCodeUsage(dir, sinceMs); + assert.deepStrictEqual( + repeated.files.flatMap((file) => file.records).map((record) => record.dedupeKey), + ["opencode:a", "opencode:b", "opencode:c"], + ); + // An unchanged database must not have its message bodies read and parsed again. + assert.strictEqual(bodyReads, 0); + }).pipe(Effect.provide(NodeServices.layer)), + ); + + it.effect("does not reuse rows from a replaced or restored database file", () => + Effect.gen(function* () { + const fileSystem = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + const dir = yield* fileSystem.makeTempDirectoryScoped({ prefix: "usage-replaced-" }); + const write = (name: string, input: number) => + Effect.scoped( + Effect.gen(function* () { + const db = yield* openDatabase(path.join(dir, name)); + yield* db.unsafe("PRAGMA journal_mode = WAL"); + yield* db.unsafe( + "CREATE TABLE message (id TEXT, session_id TEXT, time_created INTEGER, time_updated INTEGER, data TEXT)", + ); + yield* db.unsafe( + "INSERT INTO message(rowid, id, session_id, time_created, time_updated, data) VALUES (1, 'a', 's', 1, 1, ?)", + [JSON.stringify({ modelID: "m", tokens: { input } })], + ); + }), + ); + const input = Effect.map( + readOpenCodeUsage(dir, 0), + (result) => result.files[0]?.records[0]?.totals.uncachedInputTokens, + ); + yield* write("opencode.db", 100); + assert.strictEqual(yield* input, 100); + yield* write("replacement.db", 900); + yield* fileSystem.rename(path.join(dir, "replacement.db"), path.join(dir, "opencode.db")); + assert.strictEqual(yield* input, 900); + // A backup restored in place keeps the inode and birth time, like `cp -p`. + yield* write("backup.db", 500); + yield* fileSystem.copyFile(path.join(dir, "backup.db"), path.join(dir, "opencode.db")); + yield* fileSystem.utimes(path.join(dir, "opencode.db"), 0, 0); + assert.strictEqual(yield* input, 500); }).pipe(Effect.provide(NodeServices.layer)), ); @@ -188,6 +257,27 @@ describe("readOpenCodeUsage", () => { const legacy = path.join(dir, "storage", "message", message.sessionID); yield* fileSystem.makeDirectory(legacy, { recursive: true }); yield* fileSystem.writeFileString(path.join(legacy, "msg-1.json"), JSON.stringify(message)); + yield* Effect.acquireRelease( + Effect.sync(() => { + readerWorkers.enabled = true; + readerWorkers.started = 0; + }), + () => Effect.sync(() => (readerWorkers.enabled = false)), + ); + let mainThreadBodyReads = 0; + const originalAll = NodeSqlite.StatementSync.prototype.all; + yield* Effect.acquireRelease( + Effect.sync(() => + vi.spyOn(NodeSqlite.StatementSync.prototype, "all").mockImplementation(function ( + this: NodeSqlite.StatementSync, + ...params + ) { + if (this.sourceSQL.includes("data ->")) mainThreadBodyReads++; + return originalAll.apply(this, params); + }), + ), + (spy) => Effect.sync(() => spy.mockRestore()), + ); const first = yield* readOpenCodeUsage(dir, 0); assert.isFalse(first.error); const records = first.files.flatMap((file) => file.records); @@ -212,6 +302,9 @@ describe("readOpenCodeUsage", () => { ["opencode:msg-2"], ); assert.isAbove(Number((yield* fileSystem.stat(path.join(dir, "opencode.db-wal"))).size), 0); + // A large database must not be read on the server's event loop. + assert.isAbove(readerWorkers.started, 0); + assert.strictEqual(mainThreadBodyReads, 0); }).pipe(Effect.provide(NodeServices.layer)), ); diff --git a/packages/provider-opencode/src/server/usage.ts b/packages/provider-opencode/src/server/usage.ts index 4ae7b6df358e9..8d9bb28c70b34 100644 --- a/packages/provider-opencode/src/server/usage.ts +++ b/packages/provider-opencode/src/server/usage.ts @@ -11,6 +11,7 @@ import * as FileSystem from "effect/FileSystem"; import * as Option from "effect/Option"; import * as Path from "effect/Path"; import type * as PlatformError from "effect/PlatformError"; +import * as Semaphore from "effect/Semaphore"; import * as SqlClient from "effect/sql/SqlClient"; import type { OpenCodeSettings } from "../settings.ts"; @@ -93,6 +94,18 @@ export interface OpenCodeUsageReadResult { readonly error: boolean; } +interface CachedRow { + readonly updated: unknown; + readonly size: unknown; + readonly created: unknown; + readonly record: UsageRecord | null; +} + +// Parsed rows by `${databasePath}\0${table}`, then rowid, so unchanged rows are not read again. +const rowCache = new Map }>(); +// Concurrent scans of the same database would each read every uncached row. +const scanLock = Semaphore.makeUnsafe(1); + const isNotFound = (cause: PlatformError.PlatformError) => cause.reason._tag === "NotFound"; const MESSAGE_PAGE_SIZE = 64; @@ -116,6 +129,7 @@ const LEGACY_STAT_BATCH = 256; export const readOpenCodeUsage = Effect.fn("readOpenCodeUsage")(function* ( root: string, sinceMs: number, + retentionCutoffMs = sinceMs, ): Effect.fn.Return { const fileSystem = yield* FileSystem.FileSystem; const path = yield* Path.Path; @@ -164,6 +178,22 @@ export const readOpenCodeUsage = Effect.fn("readOpenCodeUsage")(function* ( found = true; const file = { path: path.join(root, name), records: [] as UsageRecord[] }; files.push(file); + // Taken before the snapshot opens, so a write that races the scan invalidates its rows. + const [main, wal] = yield* Effect.forEach([file.path, `${file.path}-wal`], (target) => + Effect.option(fileSystem.stat(target)), + ); + const stamp = (info: Option.Option) => + Option.match(info, { + onNone: () => "none", + onSome: (stat) => `${stat.size}:${Option.getOrNull(stat.mtime)?.getTime()}`, + }); + // A replaced or restored database can repeat rowids and change markers, so every key includes + // the main file; WAL commits leave it alone until a checkpoint. + const identity = Option.match(main!, { + onNone: () => "none", + onSome: (stat) => + `${stat.dev}:${Option.getOrNull(stat.ino)}:${Option.getOrNull(stat.birthtime)?.getTime()}/${stamp(main!)}`, + }); yield* Effect.gen(function* () { const sql = yield* SqlClient.SqlClient; // Fail promptly on live-writer locks instead of stalling the server. @@ -182,30 +212,53 @@ export const readOpenCodeUsage = Effect.fn("readOpenCodeUsage")(function* ( ), ); const timestamp = columns.has("time_created") ? "time_created" : "NULL"; + const updated = columns.has("time_updated") ? "time_updated" : "NULL"; + // Without time_updated an in-place edit can keep the length, so any database write counts. + const version = updated === "NULL" ? `${identity}/${stamp(wal!)}` : identity; const predicates = table === "session_message" ? ["type = 'assistant'"] : []; if (timestamp !== "NULL") predicates.push("time_created >= ?"); - // List only rowids so SQLite can use time indexes without reading message bodies. - const listed = (yield* sql.unsafe<{ readonly row_id: number }>( - `SELECT rowid AS row_id FROM ${table} + // List rowids and change markers so SQLite can use time indexes without reading message + // bodies; octet_length comes from the record header. + const listed = (yield* sql.unsafe<{ + readonly row_id: number; + readonly updated: unknown; + readonly size: unknown; + readonly created: unknown; + }>( + `SELECT rowid AS row_id, ${updated} AS updated, octet_length(data) AS size, + ${timestamp} AS created + FROM ${table} ${predicates.length ? `WHERE ${predicates.join(" AND ")}` : ""}`, timestamp === "NULL" ? [] : [sinceMs], )).toSorted((a, b) => a.row_id - b.row_id); databaseRows += listed.length; + const key = `${file.path}\0${table}`; + const previous = rowCache.get(key); + const reusable = previous?.version === version ? previous.rows : undefined; + const cached = new Map(); + const misses: typeof listed = []; + for (const row of listed) { + const hit = reusable?.get(row.row_id); + if (hit && hit.updated === row.updated && hit.size === row.size) + cached.set(row.row_id, hit); + else misses.push(row); + } // Filter and project in SQLite: user diffs and assistant bodies can be hundreds of MB. const validAssistant = `CASE WHEN typeof(data) = 'text' AND json_valid(data) THEN json_type(data, '$.role') IS NULL OR data ->> '$.role' = 'assistant' END`; // Omit per-page spans; the enclosing scan records row and page counts. - for (let start = 0; start < listed.length; start += MESSAGE_PAGE_SIZE) { - const page = listed.slice(start, start + MESSAGE_PAGE_SIZE); + for (let start = 0; start < misses.length; start += MESSAGE_PAGE_SIZE) { + const page = misses.slice(start, start + MESSAGE_PAGE_SIZE); databasePages++; const rows = yield* sql .unsafe<{ + readonly row_id: number; readonly id: unknown; readonly session_id: unknown; readonly data: unknown; readonly created: unknown; }>( - `SELECT id, session_id, ${timestamp} AS created, json_object( + `SELECT rowid AS row_id, id, session_id, ${timestamp} AS created, json_object( 'tokens', data -> '$.tokens', 'cost', data -> '$.cost', 'model', data -> '$.model', 'modelID', data -> '$.modelID', 'providerID', data -> '$.providerID', @@ -217,9 +270,10 @@ export const readOpenCodeUsage = Effect.fn("readOpenCodeUsage")(function* ( page.map((row) => row.row_id), ) .pipe(Effect.withTracerEnabled(false)); + const parsed = new Map(); for (const row of rows) { - append( - file.records, + parsed.set( + row.row_id, parseOpenCodeMessage(text(row.data), { id: text(row.id), sessionId: text(row.session_id), @@ -227,12 +281,28 @@ export const readOpenCodeUsage = Effect.fn("readOpenCodeUsage")(function* ( }), ); } + // Rows the SQL filter dropped are cached as empty so they are not read again either. + for (const row of page) { + cached.set(row.row_id, { ...row, record: parsed.get(row.row_id) ?? null }); + } yield* Effect.yieldNow; } + for (const row of listed) append(file.records, cached.get(row.row_id)!.record); + // Rows before this window were not listed; keep them for a wider window until retention. + for (const [rowId, entry] of reusable ?? []) { + const created = entry.created; + if (typeof created === "number" && created < sinceMs && created >= retentionCutoffMs) + cached.set(rowId, entry); + } + rowCache.set(key, { version, rows: cached }); } }).pipe( (read) => Effect.flatMap(SqlClient.SqlClient, (sql) => sql.withTransaction(read)), - Effect.provide(NodeSqliteClient.layer({ filename: file.path, readonly: true })), + // Run the scan on a reader worker so large databases do not block the server's event loop. + NodeSqliteClient.readOnly, + Effect.provide( + NodeSqliteClient.layer({ filename: file.path, readonly: true, readerWorker: true }), + ), Effect.catchTags({ SqlError: () => { error = true; @@ -312,7 +382,7 @@ export const readOpenCodeUsage = Effect.fn("readOpenCodeUsage")(function* ( "usage.database_pages": databasePages, }); return { files, missing: !found && !error, error }; -}); +}, scanLock.withPermit); const resolveOpenCodeDataDirs = Effect.fn("resolveOpenCodeDataDirs")(function* ( environment: NodeJS.ProcessEnv, @@ -346,7 +416,11 @@ export type OpenCodeUsageReaderEnv = FileSystem.FileSystem | Path.Path; export const openCodeUsageReader: ProviderUsageReader = { kind: "scan", provider: "opencode", - scan: Effect.fn("openCodeUsageReader.scan")(function* ({ instances, windowStartMs }) { + scan: Effect.fn("openCodeUsageReader.scan")(function* ({ + instances, + windowStartMs, + retentionCutoffMs, + }) { const roots = new Set(); for (const instance of instances) { for (const root of yield* resolveOpenCodeDataDirs(instance.environment)) roots.add(root); @@ -354,7 +428,7 @@ export const openCodeUsageReader: ProviderUsageReader - readOpenCodeUsage(dir, windowStartMs).pipe( + readOpenCodeUsage(dir, windowStartMs, retentionCutoffMs).pipe( Effect.map((result) => ({ dir, files: result.missing && !result.error ? null : result.files, From d3ef7e8e527ce2076ee858fc4c5360955da54b8a Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:51:25 -0800 Subject: [PATCH 197/922] fix(cursor): send the catalog's default model parameters on every Cursor run (#28722) --- .../provider-cursor/src/server/adapter.ts | 9 ++- .../provider-cursor/src/server/driver.test.ts | 2 +- packages/provider-cursor/src/server/driver.ts | 1 + .../src/server/sdkModel.test.ts | 73 +++++++++++++++++++ .../provider-cursor/src/server/sdkModel.ts | 20 ++++- .../src/server/textGeneration.ts | 9 ++- 6 files changed, 106 insertions(+), 8 deletions(-) create mode 100644 packages/provider-cursor/src/server/sdkModel.test.ts diff --git a/packages/provider-cursor/src/server/adapter.ts b/packages/provider-cursor/src/server/adapter.ts index 1e160be188f08..6b3be72833b97 100644 --- a/packages/provider-cursor/src/server/adapter.ts +++ b/packages/provider-cursor/src/server/adapter.ts @@ -307,6 +307,7 @@ const CURSOR_AGENT_SETTING_SOURCES = [ export function makeCursorAgentOptions(input: { readonly apiKey?: string; readonly modelSelection: ModelSelection; + readonly models?: ReadonlyArray; readonly runtimePolicy: ProviderAdapter.ProviderAdapterV2RuntimePolicy; readonly threadId: ThreadId; readonly mcpSession: McpProviderSession.McpProviderSessionConfig | undefined; @@ -315,7 +316,7 @@ export function makeCursorAgentOptions(input: { const policy = cursorRuntimeAgentPolicy(input.runtimePolicy, input.platform); const mcpServers = cursorMcpServers(input.mcpSession); return { - model: cursorSdkModelSelection(input.modelSelection), + model: cursorSdkModelSelection(input.modelSelection, input.models), name: `T3 Code ${input.threadId}`, mode: input.runtimePolicy.interactionMode === "plan" ? "plan" : "agent", ...(input.apiKey === undefined ? {} : { apiKey: input.apiKey }), @@ -2296,6 +2297,7 @@ export const makeCursorAdapterV2 = Effect.fn("makeCursorAdapterV2")(function* ( const options = makeCursorAgentOptions({ ...(apiKey === undefined ? {} : { apiKey }), modelSelection: openInput.modelSelection, + models: adapterOptions.getModels?.() ?? [], runtimePolicy: openInput.runtimePolicy, platform, threadId: openInput.threadId, @@ -2486,7 +2488,10 @@ export const makeCursorAdapterV2 = Effect.fn("makeCursorAdapterV2")(function* ( message, summarize: compacted, options: { - model: cursorSdkModelSelection(turnInput.modelSelection), + model: cursorSdkModelSelection( + turnInput.modelSelection, + adapterOptions.getModels?.() ?? [], + ), mode: turnInput.runtimePolicy.interactionMode === "plan" ? "plan" : "agent", ...(Object.keys(turnMcpServers).length === 0 ? {} diff --git a/packages/provider-cursor/src/server/driver.test.ts b/packages/provider-cursor/src/server/driver.test.ts index 6ff8bd7685648..213d413b6dee2 100644 --- a/packages/provider-cursor/src/server/driver.test.ts +++ b/packages/provider-cursor/src/server/driver.test.ts @@ -389,7 +389,7 @@ it.layer(layerTest)("CursorDriver", (it) => { allowance: DEFAULT_HANDOFF_TOKEN_CAP, }, catalogDefault: { - model: { id: "claude-opus-5-5" }, + model: { id: "claude-opus-5-5", params: [{ id: "context", value: "1m" }] }, window: 1_000_000, allowance: DEFAULT_HANDOFF_TOKEN_CAP, }, diff --git a/packages/provider-cursor/src/server/driver.ts b/packages/provider-cursor/src/server/driver.ts index ef50abb0a93b4..85ab45b107d71 100644 --- a/packages/provider-cursor/src/server/driver.ts +++ b/packages/provider-cursor/src/server/driver.ts @@ -208,6 +208,7 @@ export const CursorDriver: ProviderDriver< processEnv, auth.requireApiKey, auth.withAccess, + () => catalogModels, ); const checkProvider = auth.readApiKey.pipe( diff --git a/packages/provider-cursor/src/server/sdkModel.test.ts b/packages/provider-cursor/src/server/sdkModel.test.ts new file mode 100644 index 0000000000000..4ad129e1ae239 --- /dev/null +++ b/packages/provider-cursor/src/server/sdkModel.test.ts @@ -0,0 +1,73 @@ +import { ProviderInstanceId } from "@t3tools/contracts"; +import { describe, expect, it } from "vite-plus/test"; + +import { cursorSdkModelSelection } from "./sdkModel.ts"; +import { buildCursorDiscoveredModelsFromSdk } from "./status.ts"; + +const instanceId = ProviderInstanceId.make("cursor"); +const models = buildCursorDiscoveredModelsFromSdk([ + { + id: "grok-4.5", + displayName: "Grok 4.5", + parameters: [ + { + id: "effort", + displayName: "Effort", + values: [{ value: "low" }, { value: "medium" }, { value: "high" }], + }, + { id: "fast", displayName: "Fast", values: [{ value: "false" }, { value: "true" }] }, + ], + variants: [ + { + displayName: "Grok 4.5 High Fast", + isDefault: true, + params: [ + { id: "effort", value: "high" }, + { id: "fast", value: "true" }, + ], + }, + ], + }, +]); + +describe("cursorSdkModelSelection", () => { + it.each([ + { + name: "fills unset catalog parameters and keeps Fast off", + options: undefined, + params: [ + { id: "effort", value: "high" }, + { id: "fast", value: "false" }, + ], + }, + { + name: "keeps explicit options", + options: [ + { id: "effort", value: "low" }, + { id: "fastMode", value: true }, + ], + params: [ + { id: "effort", value: "low" }, + { id: "fast", value: "true" }, + ], + }, + ])("$name", ({ options, params }) => { + const selection = cursorSdkModelSelection( + { instanceId, model: "grok-4.5", ...(options === undefined ? {} : { options }) }, + models, + ); + expect({ + ...selection, + params: selection.params?.toSorted((a, b) => a.id.localeCompare(b.id)), + }).toEqual({ + id: "grok-4.5", + params, + }); + }); + + it("sends no parameters for a model missing from the catalog", () => { + expect(cursorSdkModelSelection({ instanceId, model: "auto" }, models)).toEqual({ + id: "default", + }); + }); +}); diff --git a/packages/provider-cursor/src/server/sdkModel.ts b/packages/provider-cursor/src/server/sdkModel.ts index fec0bafc45eee..ec2a53b6aea71 100644 --- a/packages/provider-cursor/src/server/sdkModel.ts +++ b/packages/provider-cursor/src/server/sdkModel.ts @@ -55,13 +55,27 @@ export function cursorContextWindowTokens( return Number.isSafeInteger(tokens) && tokens > 0 ? tokens : undefined; } -export function cursorSdkModelSelection(modelSelection: ModelSelection): CursorSdkModelSelection { +export function cursorSdkModelSelection( + modelSelection: ModelSelection, + models: ReadonlyArray = [], +): CursorSdkModelSelection { + const explicit = modelSelection.options ?? []; + const descriptors = + models.find((model) => model.slug === modelSelection.model)?.capabilities?.optionDescriptors ?? + []; + // Some Cursor plans reject runs that leave a catalog parameter unset; T3 keeps Fast off until picked. + const defaults = descriptors.flatMap((descriptor) => { + if (explicit.some((option) => option.id === descriptor.id)) return []; + const value = descriptor.id === "fastMode" ? false : getProviderOptionCurrentValue(descriptor); + return value === undefined ? [] : [{ id: descriptor.id, value }]; + }); + const options = [...explicit, ...defaults]; return { id: modelSelection.model === "auto" ? "default" : modelSelection.model, - ...(modelSelection.options === undefined || modelSelection.options.length === 0 + ...(options.length === 0 ? {} : { - params: modelSelection.options.map((option): ModelParameterValue => ({ + params: options.map((option): ModelParameterValue => ({ id: cursorSdkParameterId(option.id), value: String(option.value), })), diff --git a/packages/provider-cursor/src/server/textGeneration.ts b/packages/provider-cursor/src/server/textGeneration.ts index 278839558ee92..82982dfabbb5f 100644 --- a/packages/provider-cursor/src/server/textGeneration.ts +++ b/packages/provider-cursor/src/server/textGeneration.ts @@ -5,7 +5,11 @@ import * as Effect from "effect/Effect"; import * as Option from "effect/Option"; import * as Schema from "effect/Schema"; -import { type ProviderSetupError, TextGenerationError } from "@t3tools/contracts"; +import { + type ProviderSetupError, + type ServerProviderModel, + TextGenerationError, +} from "@t3tools/contracts"; import type { CursorSettings } from "../settings.ts"; import * as TextGenerationOperations from "@t3tools/provider-core/server/textGenerationOperations"; @@ -51,6 +55,7 @@ export const makeCursorTextGeneration = Effect.fn("makeCursorTextGeneration")(fu environment?: NodeJS.ProcessEnv, resolveApiKey?: Effect.Effect, withAccess?: CursorAuth["withAccess"], + getModels?: () => ReadonlyArray, ) { const fs = yield* FileSystem.FileSystem; const sdk = yield* CursorSdk.CursorSdk; @@ -117,7 +122,7 @@ export const makeCursorTextGeneration = Effect.fn("makeCursorTextGeneration")(fu const agentOptions = { apiKey, mode: "plan", - model: cursorSdkModelSelection(modelSelection), + model: cursorSdkModelSelection(modelSelection, getModels?.() ?? []), local: { cwd, store, From 0568a63aac2d8c7617917686ceb93701dd37fcdc Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:52:07 -0800 Subject: [PATCH 198/922] =?UTF-8?q?fix(server):=20agents=20point=20to=20Se?= =?UTF-8?q?ttings=20=E2=86=92=20Labs=20when=20the=20link=20tools=20are=20h?= =?UTF-8?q?idden=20(#30371)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/provider/agentContextBudget.json | 4 ++-- evals/mcp-tool-use/cases/orchestration.ndjson | 2 ++ .../provider-core/src/server/orchestrationInstructions.ts | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/server/src/provider/agentContextBudget.json b/apps/server/src/provider/agentContextBudget.json index 65f2b6b6c451e..e7901a8656ebe 100644 --- a/apps/server/src/provider/agentContextBudget.json +++ b/apps/server/src/provider/agentContextBudget.json @@ -1,5 +1,5 @@ { - "claudeSystemAppendBytes": 5597, - "codexAdditionalContextBytes": 7327, + "claudeSystemAppendBytes": 5594, + "codexAdditionalContextBytes": 7324, "mcpToolListJsonBytes": 48094 } diff --git a/evals/mcp-tool-use/cases/orchestration.ndjson b/evals/mcp-tool-use/cases/orchestration.ndjson index 28e89df5597e8..ead48236bd922 100644 --- a/evals/mcp-tool-use/cases/orchestration.ndjson +++ b/evals/mcp-tool-use/cases/orchestration.ndjson @@ -34,6 +34,8 @@ {"id": "two-children-same-model", "area": "orchestration", "kind": "bad", "pattern": "named-model rule read as a cap", "experience": "Asked for two Sol xhigh subagents, an Astra parent started one and refused the second, citing 'One child per named model' (#24967).", "rule": "Before delegate_task ... One child per named model. (intended: every named model gets a child; read as a cap of one child per model)", "privacy": "commit-safe", "setup": {"role": "top", "mocks": {"orchestrator_capabilities": {"parentThreadId": "33333333-3333-4333-8333-333333333333", "inheritedProviderInstanceId": "claudeAgent", "inheritedModel": "claude-sonnet-5-5", "inheritedOptions": [{"id": "effort", "value": "high"}], "runtimeMode": "full-access", "interactionMode": "default", "features": {"appOwnedSubagents": true, "asyncPolling": true, "cancellation": true, "batchThreadCreation": true, "threadManagement": true, "incrementalThreadRead": true, "scheduledTasks": true}, "providers": [{"providerInstanceId": "claudeAgent", "driverKind": "claudeAgent", "displayName": "Claude", "models": [{"id": "claude-opus-5-5", "label": "Claude Opus 5.5", "options": [{"id": "effort", "values": ["low", "medium", "high", "xhigh", "max"], "default": "high"}, {"id": "fastMode", "type": "boolean", "default": false}]}, {"id": "claude-sonnet-5-5", "label": "Claude Sonnet 5.5", "options": [{"id": "effort", "values": ["low", "medium", "high", "xhigh", "max"], "default": "high"}]}, {"id": "claude-haiku-5-5", "label": "Claude Haiku 5.5", "options": [{"id": "effort", "values": ["low", "medium", "high", "xhigh", "max"], "default": "high"}]}]}, {"providerInstanceId": "codex", "driverKind": "codex", "displayName": "Codex", "models": [{"id": "gpt-6.1-sol", "label": "GPT-6.1 Sol", "options": [{"id": "reasoningEffort", "values": ["low", "medium", "high", "xhigh", "max"], "default": "high"}, {"id": "serviceTier", "values": ["default", "priority"], "default": "default"}]}]}, {"providerInstanceId": "muse", "driverKind": "muse", "displayName": "Muse Code", "runtimeModes": ["approval-required", "full-access"], "models": [{"id": "muse-wonder-full", "label": "Muse Wonder Full", "options": [{"id": "reasoningEffort", "values": ["minimal", "low", "medium", "high", "xhigh", "max"], "default": "high"}]}]}, {"providerInstanceId": "grok", "driverKind": "grok", "displayName": "Grok", "models": [{"id": "grok-4.7", "label": "Grok 4.7", "options": []}]}]}, "delegate_task": "default"}}, "prompt": "Launch two Sol xhigh subagents. Give each a trivial task that only replies OK.", "expect": {"calls": [{"tool": "delegate_task", "args": {"target.model": "gpt-6.1-sol", "target.options.reasoningEffort": "xhigh"}}], "minCalls": {"delegate_task": 2}, "callsMustNot": [{"tool": "delegate_task", "args": {"target.model": "~muse"}}, {"tool": "delegate_task", "args": {"target.model": "~claude"}}]}, "notes": "From #24967. One child plus the parent doing the work fails, and so does a second model in place of Sol."} {"id": "worker-counts-per-model", "area": "orchestration", "kind": "bad", "pattern": "named-model rule read as a cap", "experience": "Asked for 20 Sol workers and 20 Luna workers, the agent started one worker per model (#25359).", "rule": "Before delegate_task ... One child per named model. (intended: every named model gets a child; read as a cap of one child per model)", "privacy": "commit-safe", "setup": {"role": "top", "mocks": {"orchestrator_capabilities": {"parentThreadId": "33333333-3333-4333-8333-333333333333", "inheritedProviderInstanceId": "claudeAgent", "inheritedModel": "claude-sonnet-5-5", "inheritedOptions": [{"id": "effort", "value": "high"}], "runtimeMode": "full-access", "interactionMode": "default", "features": {"appOwnedSubagents": true, "asyncPolling": true, "cancellation": true, "batchThreadCreation": true, "threadManagement": true, "incrementalThreadRead": true, "scheduledTasks": true}, "providers": [{"providerInstanceId": "claudeAgent", "driverKind": "claudeAgent", "displayName": "Claude", "models": [{"id": "claude-opus-5-5", "label": "Claude Opus 5.5", "options": [{"id": "effort", "values": ["low", "medium", "high", "xhigh", "max"], "default": "high"}, {"id": "fastMode", "type": "boolean", "default": false}]}, {"id": "claude-sonnet-5-5", "label": "Claude Sonnet 5.5", "options": [{"id": "effort", "values": ["low", "medium", "high", "xhigh", "max"], "default": "high"}]}, {"id": "claude-haiku-5-5", "label": "Claude Haiku 5.5", "options": [{"id": "effort", "values": ["low", "medium", "high", "xhigh", "max"], "default": "high"}]}]}, {"providerInstanceId": "codex", "driverKind": "codex", "displayName": "Codex", "models": [{"id": "gpt-6.1-sol", "label": "GPT-6.1 Sol", "options": [{"id": "reasoningEffort", "values": ["low", "medium", "high", "xhigh", "max"], "default": "high"}, {"id": "serviceTier", "values": ["default", "priority"], "default": "default"}]}]}, {"providerInstanceId": "muse", "driverKind": "muse", "displayName": "Muse Code", "runtimeModes": ["approval-required", "full-access"], "models": [{"id": "muse-wonder-full", "label": "Muse Wonder Full", "options": [{"id": "reasoningEffort", "values": ["minimal", "low", "medium", "high", "xhigh", "max"], "default": "high"}]}]}, {"providerInstanceId": "grok", "driverKind": "grok", "displayName": "Grok", "models": [{"id": "grok-4.7", "label": "Grok 4.7", "options": []}]}]}, "delegate_task": "default"}, "world": {"files": {"tests/flaky/retry.test.ts": "it('retry is flaky', async () => { /* fails 1 in 5 runs */ });\n", "tests/flaky/upload.test.ts": "it('upload is flaky', async () => { /* fails 1 in 5 runs */ });\n", "tests/flaky/session.test.ts": "it('session is flaky', async () => { /* fails 1 in 5 runs */ });\n", "tests/flaky/search.test.ts": "it('search is flaky', async () => { /* fails 1 in 5 runs */ });\n", "tests/flaky/billing.test.ts": "it('billing is flaky', async () => { /* fails 1 in 5 runs */ });\n", "tests/flaky/webhook.test.ts": "it('webhook is flaky', async () => { /* fails 1 in 5 runs */ });\n"}}}, "prompt": "Six tests in tests/flaky/ fail now and then. Start 3 Muse Wonder Full workers and 3 Grok workers, one test file each, to find and fix the flake.", "expect": {"calls": [{"tool": "delegate_task", "args": {"target.model": "muse-wonder-full"}}, {"tool": "delegate_task", "args": {"target.model": "grok-4.7"}}], "minCalls": {"delegate_task": 6}}, "notes": "Scaled down from the real 20 Sol + 20 Luna ask. Muse and Grok need delegate_task from every parent, so a native Sol helper cannot pass or fail it."} {"id": "linked-thread-chip-reads-there", "area": "orchestration", "kind": "guard", "pattern": "thread chip from a linked machine read on this one", "experience": "A thread chip from a linked machine names its environmentId; an agent that reads it without passing that id reads this machine, where the thread does not exist.", "rule": "The thread chip names its environmentId; t3_thread_read takes it.", "privacy": "commit-safe", "setup": {"role": "top", "linkedEnvironments": true, "mocks": {"t3_environment_links": {"environmentId": "environment-laptop", "links": [{"environmentId": "environment-vps", "label": "Hetzner VPS", "status": "reachable", "access": "auto-accept-edits", "expiresAt": "2026-12-01T00:00:00.000Z", "lastError": null}], "notListed": "Not listed: not linked yet. Call t3_environment_link with a hint from the user's words."}, "t3_thread_read": {"thread": {"threadId": "thread-deploy-api", "title": "Deploy the API", "status": "idle"}, "items": [{"position": 1, "createdBy": "user", "text": "Deploy the API to the VPS and check the health endpoint."}, {"position": 2, "createdBy": "assistant", "text": "Deployed. /health returns 200, but /health/db times out after 5s: the API can't reach Postgres on 10.0.0.5:5432."}], "nextPosition": 3, "hasMore": false}}}, "prompt": "Pick up where [Deploy the API](t3-context://v1/thread/thread_deploy-api) left off. What is still failing?", "promptContext": {"records": [{"version": 1, "kind": "thread", "contextId": "thread_deploy-api", "label": "Deploy the API", "environmentId": "environment-vps", "threadId": "thread-deploy-api", "title": "Deploy the API"}]}, "expect": {"calls": [{"tool": "t3_thread_read", "args": {"threadId": "thread-deploy-api", "environmentId": "environment-vps"}}], "notCalls": ["t3_environment_link"]}, "source": {"request": "akj on #17130: attach a linked machine's thread without dragging"}} +{"id": "vps-delegate-links-off-names-setting", "area": "orchestration", "kind": "bad", "pattern": "hidden link tools, setting never named", "experience": "With Linked environments off, the default, an agent asked to delegate to the user's VPS searched for t3_environment_link, then said the tool was not in this build and never named the setting that turns it on.", "rule": "The link tools are absent while Settings → Labs → Linked environments is off; the agent tells the user to turn it on there.", "privacy": "commit-safe", "setup": {"role": "top"}, "prompt": "Delegate this to my vps: run `uname -a` there and tell me the result. Do not edit any files here.", "expect": {"textMust": ["Labs", "Linked environments"], "notCalls": ["delegate_task", "t3_environment_links", "t3_environment_link"]}, "source": {"issue": "pingdotgg/t3code#30358"}} +{"id": "vps-delegate-links-on-calls-link", "area": "orchestration", "kind": "control", "pattern": "unlinked machine with Linked environments on", "experience": "With Linked environments on, a machine the user names that is not linked gets a t3_environment_link card, not advice to turn the setting on.", "rule": "A machine the user names that is not linked: call t3_environment_link with a hint from their words.", "privacy": "commit-safe", "setup": {"role": "top", "linkedEnvironments": true, "mocks": {"t3_environment_links": {"environmentId": "environment-laptop", "links": [], "notListed": "Not listed: not linked yet. Call t3_environment_link with a hint from the user's words."}, "t3_environment_link": {"status": "pending", "turnItemId": "turn-item-link-card-1"}}}, "prompt": "Delegate this to my vps: run `uname -a` there and tell me the result. Do not edit any files here.", "expect": {"calls": [{"tool": "t3_environment_link"}], "textMustNot": ["Labs", "([Tt]urn on|[Ee]nable)[^.\\n]*[Ll]inked environments"]}, "source": {"issue": "pingdotgg/t3code#30358"}} {"id": "background-wait-unmatched-id", "area": "orchestration", "kind": "guard", "pattern": "waits on a task ID that matches no background work, then ends the turn as if waiting", "experience": "One agent called t3_background_wait with the literal ID 'placeholder', another with a Claude subagent ID. The tool returned a normal result listing the ID under `unmatched`, so the agent said it would continue when the work came back and ended its turn. Nothing ever woke it.", "rule": "To wait for a background command or Monitor you started (tests, a build), call `t3_background_wait` with its task ID before you end your turn.", "privacy": "commit-safe", "setup": {"role": "top", "harness": "claude", "priorTurns": [{"role": "user", "text": "Run the full test suite in the background and fix whatever fails. It takes about 15 minutes."}, {"role": "assistant", "toolCalls": [{"tool": "Bash", "input": {"command": "vp test run", "description": "Run the full test suite", "run_in_background": true}, "result": "Command running in background with ID: bq7m2x9k. Output is being written to: /tmp/claude/tasks/bq7m2x9k.output"}, {"tool": "t3_background_wait", "input": {"taskIds": ["placeholder"]}, "result": "default"}]}], "world": {"backgroundTasks": ["bq7m2x9k"], "tests": "The suite started a minute ago and runs for about 15 minutes. Until then /tmp/claude/tasks/bq7m2x9k.output lists 38 passing test files and no failures yet."}}, "prompt": "I'm heading out for a bit. Tell me what failed when it's done.", "expect": {"calls": [{"tool": "t3_background_wait", "args": {"taskIds": ["bq7m2x9k"]}}]}, "source": {"issue": "#29772"}, "notes": "The seeded wait gets T3's real result for an ID the session does not know. The tests are still running, so the only way to keep the thread waiting is a wait on bq7m2x9k. In replay, Sonnet 5.5 and Opus 5.5 also recover from main's success result, so this guards the recovery rather than reproducing the incident. Claude only: t3_background_wait is a Claude tool.", "maxSteps": 8} {"id": "background-wait-matched-id", "area": "orchestration", "kind": "control", "pattern": "waits on the right task ID, then ends the turn", "experience": "With the background command's own ID registered, ending the turn is correct: T3 keeps the thread working and wakes it when the tests finish.", "rule": "To wait for a background command or Monitor you started (tests, a build), call `t3_background_wait` with its task ID before you end your turn.", "privacy": "commit-safe", "setup": {"role": "top", "harness": "claude", "priorTurns": [{"role": "user", "text": "Run the full test suite in the background and fix whatever fails. It takes about 15 minutes."}, {"role": "assistant", "toolCalls": [{"tool": "Bash", "input": {"command": "vp test run", "description": "Run the full test suite", "run_in_background": true}, "result": "Command running in background with ID: bq7m2x9k. Output is being written to: /tmp/claude/tasks/bq7m2x9k.output"}, {"tool": "t3_background_wait", "input": {"taskIds": ["bq7m2x9k"]}, "result": "default"}]}], "world": {"backgroundTasks": ["bq7m2x9k"], "tests": "The suite started a minute ago and runs for about 15 minutes. Until then /tmp/claude/tasks/bq7m2x9k.output lists 38 passing test files and no failures yet."}}, "prompt": "I'm heading out for a bit. Tell me what failed when it's done.", "expect": {"maxCalls": {"t3_background_wait": 1, "Bash": 3}, "notCalls": ["ScheduleWakeup"]}, "source": {"issue": "#29772"}, "notes": "Same thread as background-wait-unmatched-id, with a wait T3 matched. Guards against a fix that makes agents distrust a good wait and poll; a few looks at the output are ordinary. Claude only.", "maxSteps": 8} {"id": "settle-this-thread-after-cleanup", "area": "orchestration", "kind": "bad", "pattern": "settle read as plain English for finish", "experience": "Asked to clean up scratch files and settle this thread, the agent deleted the files and ended the turn without calling t3_thread_organize (#26749).", "rule": "A request to settle this thread calls t3_thread_organize with action settle.", "privacy": "commit-safe", "notes": "From #26749. Claude defers MCP tools, so only the tool's name is visible until ToolSearch loads it; 'settle' appears only in the t3_thread_organize description.", "setup": {"role": "top", "world": {"files": {"scratch/run-1.log": "ok\n", "scratch/run-2.log": "ok\n", "src/index.ts": "export const x = 1;\n"}}, "mocks": {"t3_thread_organize": {"settlesWhenTurnEnds": true}}}, "prompt": "Clean up the scratch files and settle this thread.", "expect": {"calls": [{"tool": "t3_thread_organize", "args": {"action": "settle"}}], "notCalls": ["t3_thread_update"]}} diff --git a/packages/provider-core/src/server/orchestrationInstructions.ts b/packages/provider-core/src/server/orchestrationInstructions.ts index bb4d33d2c56e2..4ce08d71119fe 100644 --- a/packages/provider-core/src/server/orchestrationInstructions.ts +++ b/packages/provider-core/src/server/orchestrationInstructions.ts @@ -13,8 +13,8 @@ Ordinary coding tasks need no T3 tools. - As a subagent or child, do the work yourself. Start no subagents unless your task says to.`, `- \`t3_thread_launch\` and \`create_threads\` make new top-level threads, only when the user asks for a new thread. "Subagent", "delegate", and "parallel" never mean one. Worktree thread: set \`workspaceStrategy\`. Honor a requested base. Otherwise independent work uses the default branch as \`remote/branch\` with \`startFromOrigin:true\`; with no remote, use the local default. Required unpublished commits and dependent work use their local base. Shell worktrees don't bind it, and no checkout setup in its prompt. No \`workspaceStrategy\`: project root, not your worktree. - Given a thread id, \`t3_thread_read\` it before you answer about it. Asked to settle a thread, this one too: \`t3_thread_organize\`. -- Another machine: \`t3_environment_links\` lists linked ones. Pass its \`environmentId\` to a T3 tool to act there. Ids are then that machine's, so pass \`threadId\`. -- A machine the user names that isn't linked ("delegate this to my vps"): call \`t3_environment_link\` with a \`hint\` from their words. Never ask for a pairing code in chat. +- Another machine: \`t3_environment_links\` lists linked ones. Pass its \`environmentId\` and that machine's \`threadId\` to T3 tools. +- Unlinked ("delegate this to my vps"): \`t3_environment_link\` with a \`hint\` from the user's words, never a pairing code in chat. No link tools: say to enable Settings → Labs → Linked environments. - In your reply, mention a thread by its \`link\`, verbatim, never a plain title or bare id. - A login, token, PIN, pairing code or sudo password only the user can give: call \`request_secret\`, not a chat ask or a handoff. Not for access you have. Sudo: if \`sudo -n \` needs a password, use \`delivery: "file"\` and run \`sudo -S -p '' < "$file"\`; the password takes stdin, so give other input as a file argument. Asked only to schedule: \`schedule_task\` without running its prompt. - T3 tools may load late. Try the name once before you call it absent.`, From 139ec8080f37781bf4576f63186022b0a8472b71 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:52:21 -0800 Subject: [PATCH 199/922] fix(server): Claude no longer dispatches skill mentions from handoff history (#34497) --- .../Adapters/ClaudeAdapterV2.test.ts | 50 +++++++++++++++++++ .../Adapters/ClaudeAdapterV2.ts | 30 ++++++++--- .../ProviderTurnStartService.ts | 7 ++- .../provider/Drivers/ClaudeSkillDispatch.ts | 4 +- .../src/server/ProviderAdapter.ts | 2 + 5 files changed, 81 insertions(+), 12 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts index 18a16e2f63102..155370da1757d 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts @@ -109,6 +109,7 @@ import * as ClaudeAdapterV2 from "./ClaudeAdapterV2.ts"; import * as IdAllocator from "@t3tools/provider-core/server/IdAllocator"; import * as ProviderInstallationGate from "../../provider/ProviderInstallationGate.ts"; import { ClaudeOrchestratorReplayHarness } from "./ClaudeAdapterV2.testkit.ts"; +import { withInlineContext } from "../ContextHandoffDelivery.ts"; import { provideDeterministicTestRuntime } from "../testkit/DeterministicRuntime.ts"; import { runOrchestratorV2Scenario } from "../testkit/OrchestratorScenario.ts"; import { layerProviderReplay } from "../testkit/ProviderReplayHarness.ts"; @@ -5483,6 +5484,55 @@ describe("ClaudeAdapterV2 background wake turns", () => { ), ); + // regression: #34393 a provider switch replayed a $skill from the handoff history + it.effect("dispatches only skills from the user's text, not from inline handoff history", () => + Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + const homePath = yield* fs.makeTempDirectoryScoped({ prefix: "t3-claude-skill-handoff-" }); + const directory = path.join(homePath, "skills", "review"); + yield* fs.makeDirectory(directory, { recursive: true }); + yield* fs.writeFileString( + path.join(directory, "SKILL.md"), + "---\nname: review\n---\nFollow the review instructions.\n", + ); + const harness = yield* makeWakeHarnessWithOptions({ + settings: { ...DEFAULT_CLAUDE_SETTINGS, homePath }, + }); + const history = "Context handoff:\n[Historical user; user_message]\n$review the diff"; + const text = withInlineContext(history, "continue"); + yield* harness.runtime.startTurn({ + ...makeClaudeTestTurnInput({ + threadId: harness.threadId, + providerThread: harness.providerThread, + now: yield* DateTime.now, + attemptId: RunAttemptId.make("skill-handoff"), + text, + attachments: [], + runtimePolicy: { ...CLAUDE_TEST_RUNTIME_POLICY, cwd: homePath }, + }), + inlineContextLength: text.length - "continue".length, + }); + + const content = harness.offeredMessages[0]?.message.content; + const blocks = + typeof content === "string" + ? [content] + : (content ?? []).map((block) => (block.type === "text" ? block.text : "")); + assert.isFalse(blocks.some((text) => text.startsWith("/review"))); + assert.include(blocks.join("\n"), "$review the diff"); + }).pipe( + Effect.provide( + Layer.mergeAll( + IdAllocator.layer, + McpProviderSessions.layer, + NodeServices.layer, + NodeCrypto.layer, + ), + ), + ), + ); + // regression: #15475 MCP title arriving after the tool starts must survive to completion it.effect.each([ { isError: false, title: "Check weather" }, diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts index 64537c7e5fa8f..b3c1fd1c1fed4 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts @@ -2631,12 +2631,15 @@ export function makeClaudeUserMessage(input: { readonly text: string; readonly priority?: SDKUserMessage["priority"]; readonly skills?: ReadonlyMap; + readonly skillMentionsFrom?: number; readonly uuid?: SDKUserMessage["uuid"]; }): SDKUserMessage { // Claude expands a skill only when `/name` starts the last text block. // Keep the whole request before that block; see ClaudeSkillDispatch. const dispatch = - input.skills === undefined ? undefined : planClaudeSkillDispatch(input.text, input.skills); + input.skills === undefined + ? undefined + : planClaudeSkillDispatch(input.text, input.skills, input.skillMentionsFrom); // Claude runs `/goal` only when it opens the prompt, so a goal stays one block. const isGoalCommand = parseGoalCommand({ text: input.text }) !== null; return { @@ -2801,11 +2804,15 @@ const makeClaudeUserMessageWithAttachments = Effect.fnUntraced(function* (input: readonly fileSystem: FileSystem.FileSystem; readonly pdfReservation: Effect.Success>; readonly skills?: ReadonlyMap; + readonly skillMentionsFrom?: number; }) { if (input.attachments.length === 0) { const message = makeClaudeUserMessage({ text: input.text, ...(input.skills === undefined ? {} : { skills: input.skills }), + ...(input.skillMentionsFrom === undefined + ? {} + : { skillMentionsFrom: input.skillMentionsFrom }), ...(input.priority === undefined ? {} : { priority: input.priority }), ...(input.uuid === undefined ? {} : { uuid: input.uuid }), }); @@ -2829,7 +2836,7 @@ const makeClaudeUserMessageWithAttachments = Effect.fnUntraced(function* (input: const dispatch = input.skills === undefined ? undefined - : planClaudeSkillDispatch(textWithAttachmentPaths, input.skills); + : planClaudeSkillDispatch(textWithAttachmentPaths, input.skills, input.skillMentionsFrom); const content: Array = []; // Base64 adds a third to the payload. Leave room below Anthropic's 32 MB // request limit for text, instructions, and SDK framing. The SDK does not @@ -12422,15 +12429,24 @@ export const makeClaudeAdapterV2 = Effect.fn("makeClaudeAdapterV2")(function* ( pdfBudgets.get(nativeThreadId)!, persistAttachmentBudget(nativeThreadId), ); + const promptText = applyClaudePromptEffortPrefix( + turnInput.message.text, + compileClaudeModelSelection(turnInput.modelSelection, modelCatalog).promptEffort, + ); const userMessage = promptUuid === null ? null : yield* makeClaudeUserMessageWithAttachments({ - text: applyClaudePromptEffortPrefix( - turnInput.message.text, - compileClaudeModelSelection(turnInput.modelSelection, modelCatalog) - .promptEffort, - ), + text: promptText, + // Mentions in inline handoff history are history, not this turn's skill. + ...(turnInput.inlineContextLength === undefined + ? {} + : { + skillMentionsFrom: + promptText.length - + turnInput.message.text.slice(turnInput.inlineContextLength).trimEnd() + .length, + }), attachments: turnInput.message.attachments, attachmentsDir, fileSystem, diff --git a/apps/server/src/orchestration-v2/ProviderTurnStartService.ts b/apps/server/src/orchestration-v2/ProviderTurnStartService.ts index 8f01d117e1739..ddb9416682710 100644 --- a/apps/server/src/orchestration-v2/ProviderTurnStartService.ts +++ b/apps/server/src/orchestration-v2/ProviderTurnStartService.ts @@ -1639,12 +1639,11 @@ export const layer: Layer.Layer< .filter((part) => part !== "") .join("\n\n"); const { restartContinuationOfRunId: _resumedRunId, ...promptedInput } = turnInput; + const text = goalCommand ? userText : withInlineContext(context, userText); yield* start({ ...(noteContinuation ? promptedInput : turnInput), - message: { - ...turnInput.message, - text: goalCommand ? userText : withInlineContext(context, userText), - }, + message: { ...turnInput.message, text }, + ...(text === userText ? {} : { inlineContextLength: text.length - userText.length }), }).pipe( // Clear pending handoff markers for refused prompts so the next turn retains the native session. Effect.tapError((error) => diff --git a/apps/server/src/provider/Drivers/ClaudeSkillDispatch.ts b/apps/server/src/provider/Drivers/ClaudeSkillDispatch.ts index 6ce141eec733e..bdf2ed1cae61a 100644 --- a/apps/server/src/provider/Drivers/ClaudeSkillDispatch.ts +++ b/apps/server/src/provider/Drivers/ClaudeSkillDispatch.ts @@ -22,12 +22,14 @@ export interface ClaudeSkillDispatch { export function planClaudeSkillDispatch( prompt: string, skills: ReadonlyMap, + /** Mentions before this offset, such as inline handoff history, stay plain text. */ + mentionsFrom = 0, ): ClaudeSkillDispatch | undefined { const mentions = [...prompt.matchAll(SKILL_MENTION_PATTERN)].flatMap((match) => { const name = match[2] ?? ""; const skill = skills.get(name); - if (!skill) return []; const start = (match.index ?? 0) + (match[1]?.length ?? 0); + if (!skill || start < mentionsFrom) return []; return [{ name, skill, start, end: (match.index ?? 0) + match[0].length }]; }); const last = mentions.at(-1); diff --git a/packages/provider-core/src/server/ProviderAdapter.ts b/packages/provider-core/src/server/ProviderAdapter.ts index fc83ac128324e..5b1b6301fa48b 100644 --- a/packages/provider-core/src/server/ProviderAdapter.ts +++ b/packages/provider-core/src/server/ProviderAdapter.ts @@ -535,6 +535,8 @@ export interface ProviderAdapterV2TurnInput { readonly rootNodeId: NodeId; readonly providerThread: OrchestrationV2ProviderThread; readonly message: ProviderAdapterV2TurnMessage; + /** Leading characters of `message.text` that are inline handoff context, not the user's words. */ + readonly inlineContextLength?: number; readonly modelSelection: ModelSelection; readonly runtimePolicy: ProviderAdapterV2RuntimePolicy; readonly appContext?: ReadonlyArray<{ readonly key: string; readonly text: string }>; From 4b316fd5445b8921985b9ac2b1b8075fbe08a688 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:52:45 -0800 Subject: [PATCH 200/922] fix(web): clear deleted checkout labels from the sidebar (#25063) --- apps/server/src/ws.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/server/src/ws.ts b/apps/server/src/ws.ts index 66512ab6a22c0..1f2a148734d4e 100644 --- a/apps/server/src/ws.ts +++ b/apps/server/src/ws.ts @@ -3157,7 +3157,15 @@ export const layerWsRpc = ( [WS_METHODS.vcsCreateWorktree]: (input) => gitWorkflow.createWorktree(input).pipe(Effect.tap(() => refreshGitStatus(input.cwd))), [WS_METHODS.vcsRemoveWorktree]: (input) => - gitWorkflow.removeWorktree(input).pipe(Effect.tap(() => refreshGitStatus(input.cwd))), + gitWorkflow.removeWorktree(input).pipe( + Effect.tap(() => refreshGitStatus(input.cwd)), + // Subscribers of the removed checkout learn it is no longer a repository. + Effect.tap(() => + vcsStatusBroadcaster + .refreshLocalStatus(input.path) + .pipe(Effect.ignoreCause({ log: true }), Effect.forkDetach, Effect.asVoid), + ), + ), [WS_METHODS.vcsCreateRef]: (input) => gitWorkflow.createRef(input).pipe(Effect.tap(() => refreshGitStatus(input.cwd))), [WS_METHODS.vcsSwitchRef]: (input) => From 4582a3bc682d1258ae79ae4c0024a054dd5e64f2 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:55:29 -0800 Subject: [PATCH 201/922] fix(server): MacPorts-owned agent CLIs are no longer updated through npm or their own updater (#36229) --- .../src/server/maintenanceResolver.test.ts | 49 +++++++++++++++++++ .../src/server/maintenanceResolver.ts | 33 +++++++++++++ 2 files changed, 82 insertions(+) diff --git a/packages/provider-core/src/server/maintenanceResolver.test.ts b/packages/provider-core/src/server/maintenanceResolver.test.ts index 0d4ad83f88e61..3475881732fae 100644 --- a/packages/provider-core/src/server/maintenanceResolver.test.ts +++ b/packages/provider-core/src/server/maintenanceResolver.test.ts @@ -1634,6 +1634,55 @@ it.layer( }), ); + for (const fixture of [ + { + name: "an npm-shaped package", + definition: packageToolUpdate, + target: ["lib", "node_modules", "@example", "package-tool", "bin", "package-tool.exe"], + }, + { + name: "a launcher script", + definition: nativePackageToolUpdate, + target: ["share", "native-package-tool", "native-package-tool"], + }, + ]) { + it.effect.skipIf(!symlinksSupported || windowsHost)( + `leaves ${fixture.name} owned by MacPorts to MacPorts`, + () => + Effect.gen(function* () { + const prefix = yield* makeTempDir("t3-macports"); + writeExecutable(NodePath.join(prefix, "bin", "port")); + const target = NodePath.join(prefix, ...fixture.target); + writeExecutable(target); + const launcher = NodePath.join(prefix, "bin", NodePath.basename(target, ".exe")); + NodeFS.symlinkSync(target, launcher); + + const capabilities = yield* resolveProviderMaintenanceCapabilitiesEffect( + fixture.definition, + { binaryPath: launcher, env: { PATH: NodePath.join(prefix, "bin") } }, + ).pipe( + Effect.provideService(HostProcess.Platform, "darwin"), + Effect.provideService( + ChildProcessSpawner.ChildProcessSpawner, + stdoutSpawner((command, args) => + NodePath.basename(command) === "port" && args.includes("provides") + ? args.includes("-q") + ? "package-tool\n" + : args + .filter((arg) => arg.startsWith("/")) + .map((file) => `${file} is provided by: package-tool\n`) + .join("") + : "", + ), + ), + ); + + expect(capabilities.update).toBeNull(); + expect(capabilities.manualCommand).toBe("sudo port upgrade package-tool"); + }), + ); + } + it("quotes copyable command words the shell would split", () => { const posix = makeProviderMaintenanceCapabilities({ provider: driver("packageTool"), diff --git a/packages/provider-core/src/server/maintenanceResolver.ts b/packages/provider-core/src/server/maintenanceResolver.ts index 88730be615d78..1d7125325381e 100644 --- a/packages/provider-core/src/server/maintenanceResolver.ts +++ b/packages/provider-core/src/server/maintenanceResolver.ts @@ -802,6 +802,15 @@ export const resolvePackageManagedProviderMaintenance = Effect.fn( if (commandPaths.some(isNixStoreCommandPath)) { return manual; } + const macPortsName = yield* resolveMacPortsOwner(context); + if (macPortsName !== null) { + return makeManualOnlyProviderMaintenanceCapabilities({ + provider: definition.provider, + packageName, + installPath: context.realCommandPath, + ...(macPortsName ? { manualCommand: `sudo port upgrade ${macPortsName}` } : {}), + }); + } const nativeUpdate = definition.nativeUpdate; const nativeEnv = nativeUpdate?.env; @@ -1020,6 +1029,30 @@ const isMiseWrapperScript = Effect.fn("isMiseWrapperScript")(function* ( return script.startsWith("#!") && /\bmise\s+(?:x|exec)\b/.test(script); }); +/** + * The port that installed the executable, "" when MacPorts owns it under an unusable name, + * or null when it does not. MacPorts prefixes are root-owned and its Claude port disables + * `claude update`, so neither npm nor the native updater can upgrade these installs. + */ +const resolveMacPortsOwner = Effect.fn("resolveMacPortsOwner")(function* ( + context: ProviderMaintenanceResolutionContext, +) { + if (context.platform === "win32") return null; + const fileSystem = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + const siblingPort = path.join(path.dirname(context.resolvedCommandPath), "port"); + const portPath = (yield* fileSystem.exists(siblingPort).pipe(Effect.orElseSucceed(() => false))) + ? siblingPort + : yield* resolveCommandPath("port", { env: context.env }); + if (!portPath) return null; + const prefix = `${normalizeCommandPath(path.dirname(path.dirname(portPath)))}/`; + if (!normalizeCommandPath(context.realCommandPath).startsWith(prefix)) return null; + const output = yield* runProbe(portPath, ["provides", context.realCommandPath], context.env); + const name = output ? /\bis provided by: (\S+)/.exec(output)?.[1] : undefined; + if (name === undefined) return null; + return /^[\w.+-]+$/.test(name) ? name : ""; +}); + // Volta bin links only identify its shim; the package image proves ownership. const isVoltaPackageInstall = Effect.fn("isVoltaPackageInstall")(function* ( context: ProviderMaintenanceResolutionContext, From 286eeea19f8b9b06f84c61c6a2f46fba65c52313 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 08:56:04 -0800 Subject: [PATCH 202/922] test(desktop): AppImage shim test no longer writes into its temp dir after the shim exits (#36235) --- apps/desktop/src/app/DesktopCliShim.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/desktop/src/app/DesktopCliShim.test.ts b/apps/desktop/src/app/DesktopCliShim.test.ts index d43e7a8388b83..3e8b4967dfde5 100644 --- a/apps/desktop/src/app/DesktopCliShim.test.ts +++ b/apps/desktop/src/app/DesktopCliShim.test.ts @@ -56,7 +56,7 @@ const fakeAppImage = (canMount = true, app = REPORTER) => { `echo $$ >'${root}/mounter.pid'`, canMount ? `echo '${image}'` : 'echo "Cannot mount AppImage"; exit 1', // Like the FUSE runtime, any of these unmounts. fd 3 reports to the test when it is open. - `trap 'echo unmounted >&3 2>/dev/null; touch "${root}/unmounted"; exit 0' TERM HUP INT`, + "trap 'echo unmounted >&3 2>/dev/null; exit 0' TERM HUP INT", "trap 'echo mounted >&3 2>/dev/null' WINCH", "while :; do sleep 0.05; done", "", From f62fa296f065b6399fb68edf1863e6f4c831641b Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 09:01:05 -0800 Subject: [PATCH 203/922] fix(web): Add to another machine can find ignored files past the first 200 (#36228) --- .../src/environment/ServerEnvironment.ts | 1 + .../src/workspace/WorkspaceEntries.test.ts | 14 +++ apps/server/src/workspace/WorkspaceEntries.ts | 6 +- .../components/AddProjectToMachineDialog.tsx | 116 ++++++++++++------ apps/web/src/lib/addProjectToMachine.ts | 3 + packages/contracts/src/environment.ts | 2 + packages/contracts/src/project.ts | 2 + 7 files changed, 108 insertions(+), 36 deletions(-) diff --git a/apps/server/src/environment/ServerEnvironment.ts b/apps/server/src/environment/ServerEnvironment.ts index 912a30f563684..2c79189878e8a 100644 --- a/apps/server/src/environment/ServerEnvironment.ts +++ b/apps/server/src/environment/ServerEnvironment.ts @@ -274,6 +274,7 @@ export const make = Effect.gen(function* () { projectCloneTracking: true, projectOrganization: true, ignoredFileListing: true, + ignoredFileSearch: true, triage: true, oneTimeSchedules: true, freshContext: true, diff --git a/apps/server/src/workspace/WorkspaceEntries.test.ts b/apps/server/src/workspace/WorkspaceEntries.test.ts index 348b5f877ac24..d20e378bae053 100644 --- a/apps/server/src/workspace/WorkspaceEntries.test.ts +++ b/apps/server/src/workspace/WorkspaceEntries.test.ts @@ -433,6 +433,20 @@ it.layer(layerTest, { excludeTestServices: true })("WorkspaceEntries", (it) => { }); }), ); + + it.effect("finds ignored files that sort past the listing limit", () => + Effect.gen(function* () { + const cwd = yield* makeTempDir({ git: true }); + yield* writeTextFile(cwd, ".gitignore", "*.secret\n"); + for (let index = 1; index <= 205; index += 1) { + yield* writeTextFile(cwd, `file-${String(index).padStart(3, "0")}.secret`, "s"); + } + + const workspaceEntries = yield* WorkspaceEntries.WorkspaceEntries; + const listed = yield* workspaceEntries.listIgnoredFiles({ cwd, query: "file-205" }); + expect(listed.files).toContainEqual({ path: "file-205.secret", byteLength: 1 }); + }), + ); }); describe("search", () => { diff --git a/apps/server/src/workspace/WorkspaceEntries.ts b/apps/server/src/workspace/WorkspaceEntries.ts index cac706f7ca4a2..43c8fae4dfcaf 100644 --- a/apps/server/src/workspace/WorkspaceEntries.ts +++ b/apps/server/src/workspace/WorkspaceEntries.ts @@ -576,9 +576,13 @@ export const make = Effect.gen(function* () { }) .pipe(Effect.orElseSucceed(() => undefined)); if (!result || result.exitCode !== 0) return { files: [], truncated: false }; + // Filter before the cap so files sorting past it stay reachable by search. + const query = input.query?.toLowerCase() ?? ""; const paths = result.stdout .split("\0") - .filter((entry) => entry.length > 0 && !entry.endsWith("/")) + .filter( + (entry) => entry.length > 0 && !entry.endsWith("/") && entry.toLowerCase().includes(query), + ) .toSorted(); const files = yield* Effect.promise(() => Promise.all( diff --git a/apps/web/src/components/AddProjectToMachineDialog.tsx b/apps/web/src/components/AddProjectToMachineDialog.tsx index 3d9c064cfcb23..3bb70c8b609eb 100644 --- a/apps/web/src/components/AddProjectToMachineDialog.tsx +++ b/apps/web/src/components/AddProjectToMachineDialog.tsx @@ -26,6 +26,7 @@ import { useAddProjectTargets } from "../hooks/useAddProjectTargets"; import { useNewThreadHandler } from "../hooks/useHandleNewThread"; import { useLogicalProjectEnvironments } from "../hooks/useLogicalProjectEnvironments"; import { + COPIED_FILES_MAX_COUNT, COPYABLE_FILE_MAX_BYTES, addProjectToMachine, isDefaultCopiedFile, @@ -35,6 +36,7 @@ import { newProjectId } from "../lib/utils"; import { readProject, subscribeProject, useProject } from "../state/entities"; import { useEnvironments } from "../state/environments"; import { projectEnvironment } from "../state/projects"; +import { useDebouncedValue } from "../state/queries"; import { useEnvironmentQuery } from "../state/query"; import { EnvironmentMachineIcon } from "./EnvironmentMachineIcon"; import { Button } from "./ui/button"; @@ -121,8 +123,10 @@ function AddProjectToMachineDialog({ request }: { request: AddProjectToMachineRe const [pathOverride, setPathOverride] = useState(null); const destinationPath = pathOverride ?? defaultPath; - const canListFiles = source?.serverConfig?.environment.capabilities.ignoredFileListing === true; - const ignoredFiles = useEnvironmentQuery( + const capabilities = source?.serverConfig?.environment.capabilities; + const canListFiles = capabilities?.ignoredFileListing === true; + const canSearchFiles = canListFiles && capabilities?.ignoredFileSearch === true; + const allIgnoredFiles = useEnvironmentQuery( project && canListFiles ? projectEnvironment.listIgnoredFiles({ environmentId: project.environmentId, @@ -130,13 +134,29 @@ function AddProjectToMachineDialog({ request }: { request: AddProjectToMachineRe }) : null, ); + const [fileQuery, setFileQuery] = useState(""); + const sentFileQuery = useDebouncedValue(fileQuery.trim(), 120); + const searching = canSearchFiles && sentFileQuery.length > 0; + const searchedFiles = useEnvironmentQuery( + project && searching + ? projectEnvironment.listIgnoredFiles({ + environmentId: project.environmentId, + input: { cwd: project.workspaceRoot, query: sentFileQuery }, + }) + : null, + ); + const ignoredFiles = searching ? searchedFiles : allIgnoredFiles; const files = ignoredFiles.data?.files ?? []; - const [selected, setSelected] = useState | null>(null); - const selectedFiles = selected ?? defaultSelection(files); + // Keyed by path with the file kept, so picks made under one search survive the next. + const [selected, setSelected] = useState | null>(null); + const selectedFiles = selected ?? defaultSelection(allIgnoredFiles.data?.files ?? []); const copyable = files.filter((file) => file.byteLength <= COPYABLE_FILE_MAX_BYTES); - const selectedBytes = files - .filter((file) => selectedFiles.has(file.path)) - .reduce((total, file) => total + file.byteLength, 0); + const allCopyableSelected = copyable.every((file) => selectedFiles.has(file.path)); + const atSelectionLimit = selectedFiles.size >= COPIED_FILES_MAX_COUNT; + const selectedBytes = [...selectedFiles.values()].reduce( + (total, file) => total + file.byteLength, + 0, + ); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(null); @@ -146,11 +166,19 @@ function AddProjectToMachineDialog({ request }: { request: AddProjectToMachineRe const unavailable = project === null || target === null || - (canListFiles && ignoredFiles.data === null && ignoredFiles.error === null); - const toggleFile = (path: string, checked: boolean) => { - const next = new Set(selectedFiles); - if (checked) next.add(path); - else next.delete(path); + (canListFiles && allIgnoredFiles.data === null && allIgnoredFiles.error === null); + const toggleFile = (file: ProjectIgnoredFile, checked: boolean) => { + const next = new Map(selectedFiles); + if (!checked) next.delete(file.path); + else if (!atSelectionLimit) next.set(file.path, file); + setSelected(next); + }; + const toggleShownFiles = () => { + const next = new Map(selectedFiles); + for (const file of copyable) { + if (allCopyableSelected) next.delete(file.path); + else if (next.size < COPIED_FILES_MAX_COUNT) next.set(file.path, file); + } setSelected(next); }; @@ -198,7 +226,7 @@ function AddProjectToMachineDialog({ request }: { request: AddProjectToMachineRe title: project.title, remoteUrl, destinationPath: destinationPath.trim(), - files: files.filter((file) => selectedFiles.has(file.path)).map((file) => file.path), + files: [...selectedFiles.keys()], }); close(); openClonedProject(scopeProjectRef(target.environmentId, projectId)); @@ -334,33 +362,41 @@ function AddProjectToMachineDialog({ request }: { request: AddProjectToMachineRe {copyable.length > 0 ? ( <> - {selectedFiles.size} of {files.length} + {selectedFiles.size} of {allIgnoredFiles.data?.files.length ?? 0} {selectedBytes > 0 ? ` · ${formatBytes(selectedBytes)}` : ""} - ) : null} + {canSearchFiles && (allIgnoredFiles.data?.truncated || fileQuery.length > 0) ? ( + setFileQuery(event.target.value)} + // Enter would otherwise submit the clone. + onKeyDown={(event) => { + if (event.key === "Enter") event.preventDefault(); + }} + spellCheck={false} + autoComplete="off" + /> + ) : null} {ignoredFiles.error ? (

{ignoredFiles.error}

) : files.length === 0 ? (

- {ignoredFiles.isSuccess - ? "No ignored files to copy." - : "Finding ignored files…"} + {!ignoredFiles.isSuccess + ? "Finding ignored files…" + : searching + ? "No ignored files match." + : "No ignored files to copy."}

) : (
@@ -369,7 +405,8 @@ function AddProjectToMachineDialog({ request }: { request: AddProjectToMachineRe key={file.path} file={file} checked={selectedFiles.has(file.path)} - onCheckedChange={(checked) => toggleFile(file.path, checked)} + disabled={atSelectionLimit && !selectedFiles.has(file.path)} + onCheckedChange={(checked) => toggleFile(file, checked)} /> ))}
@@ -377,6 +414,7 @@ function AddProjectToMachineDialog({ request }: { request: AddProjectToMachineRe {ignoredFiles.data?.truncated ? (

Showing the first {files.length} files. + {canSearchFiles ? " Search to find the rest." : ""}

) : null}

Plan

", + ); + const render = yield* writeItem("item:render", { + type: "dynamic_tool", + status: "completed", + toolName: "mcp__t3-code__html_render", + input: {}, + output: [ + { + type: "text", + text: JSON.stringify({ htmlRender: { attachmentId: page, title: "Plan", height: 300 } }), + }, + ], + }); + const eventSink = yield* EventSink.EventSinkV2; + const now = yield* DateTime.now; + const run = (yield* orchestrator.getThreadRecords(threadId, ["runs"])).runs[0]!; + yield* eventSink.write({ + events: [ + { + id: EventId.make("event:run-done"), + type: "run.updated", + threadId, + runId: run.id, + providerInstanceId: instanceId, + occurredAt: now, + payload: { ...run, status: "completed", completedAt: now }, + }, + ], + }); + const forkId = ThreadId.make("thread:guest-share-fork"); + yield* orchestrator.dispatch({ + type: "thread.fork", + commandId: CommandId.make("fork"), + sourceThreadId: threadId, + targetThreadId: forkId, + sourcePoint: { type: "run", runId: run.id }, + createdBy: "user", + creationSource: "web", + }); + const { url } = yield* guestShares.create({ threadId: forkId }); + const { token: session } = yield* guestShares.redeem({ + credential: url.slice(url.indexOf("#") + 1), + name: "Sam", + }); + + const detail = (yield* guestShares.item(session, command)).item; + assert.deepInclude(detail, { input: "ls /work/src", output: "/work/src/auth.ts\n" }); + const frames = Array.from( + yield* Stream.runCollect(yield* guestShares.commandOutput(session, command)), + ); + assert.deepEqual(frames, [ + { kind: "replace", text: "/work/src/auth.ts\n", truncated: false, running: false }, + ]); + assert.deepEqual(yield* guestShares.render(session, render), { + path: resolveAttachmentPathById({ attachmentsDir, attachmentId: page })!, + title: "Plan", + }); + }).pipe(Effect.provide(layerTest)), +); + it.effect("pages the guest back through turns older than the stream's snapshot", () => Effect.gen(function* () { const { guestShares, credential } = yield* shareThread; diff --git a/apps/server/src/guest/GuestShareService.ts b/apps/server/src/guest/GuestShareService.ts index 71550d622358d..b5b21a7af2ae7 100644 --- a/apps/server/src/guest/GuestShareService.ts +++ b/apps/server/src/guest/GuestShareService.ts @@ -639,17 +639,26 @@ const make = Effect.gen(function* () { itemId: string, ) { const { thread } = yield* authorize(session, "session"); - const item = yield* orchestrator - .getTurnItem({ threadId: thread.id, itemId: TurnItemId.make(itemId) }) - .pipe(Effect.mapError(() => unavailable)); + const id = TurnItemId.make(itemId); + const item = + (yield* orchestrator + .getTurnItem({ threadId: thread.id, itemId: id }) + .pipe(Effect.mapError(() => unavailable))) ?? + // A fork shows its source's earlier items, which stay in the source thread. + (thread.forkedFrom === null + ? null + : yield* orchestrator.getTimelinePage(thread.id, { itemId: id, limit: 1 }).pipe( + Effect.map((page) => page.items[0]?.item ?? null), + Effect.mapError(() => unavailable), + )); return item === null ? yield* unavailable : { thread, item }; }); const render = Effect.fn("GuestShareService.render")(function* (session: string, itemId: string) { - const { thread, item } = yield* threadItem(session, itemId); + const { item } = yield* threadItem(session, itemId); if (item.type !== "dynamic_tool") return yield* unavailable; const reference = htmlRenderFromToolItem(item); - const [attachmentId] = threadHtmlRenderAttachmentIds(thread.id, [item]); + const [attachmentId] = threadHtmlRenderAttachmentIds(item.threadId, [item]); const path = attachmentId === undefined ? null @@ -685,9 +694,9 @@ const make = Effect.gen(function* () { session: string, itemId: string, ) { - const { thread, item } = yield* threadItem(session, itemId); + const { item } = yield* threadItem(session, itemId); if (item.type !== "command_execution") return yield* unavailable; - return commandOutputs.subscribe({ threadId: thread.id, itemId: item.id }).pipe( + return commandOutputs.subscribe({ threadId: item.threadId, itemId: item.id }).pipe( // A lost hub stream ends the output; the row reloads it when reopened. Stream.catchCause(() => Stream.empty), Stream.interruptWhen(untilRevoked(session)), From 355adf265cfbf0f11c3918a7ddea904bffd33907 Mon Sep 17 00:00:00 2001 From: Wesley Smits Date: Sun, 15 Nov 2026 07:46:30 +0300 Subject: [PATCH 886/922] docs(user): Tailscale HTTPS lists what the tailnet needs (#23759) Co-authored-by: Julius Marminge --- docs/user/remote-access.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/user/remote-access.md b/docs/user/remote-access.md index 34c61e94a7c83..29b7650d41907 100644 --- a/docs/user/remote-access.md +++ b/docs/user/remote-access.md @@ -196,6 +196,13 @@ Mobile keeps its manual environment selection. Join both devices to the same tailnet. In the desktop app, enable **Tailscale HTTPS** in **Settings → Sharing & access**. Turn it off there to remove that route. +Your tailnet needs MagicDNS and HTTPS certificates enabled; see +[Tailscale's HTTPS setup](https://tailscale.com/docs/how-to/set-up-https-certificates). +On Linux, T3 Code also needs permission to manage Tailscale; see +[operator permission](https://tailscale.com/docs/reference/troubleshooting/linux/linux-operator-permission) +for non-root users. If any of these is missing, T3 Code still starts but can't +add the HTTPS route. + To start a command-line server with Tailscale HTTPS: ```bash From e6344bebd8f28f4f58ead7cb409ae8c64f1cdfc2 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:46:51 -0800 Subject: [PATCH 887/922] fix(client-runtime): MCP app results with images reach the app instead of waiting forever (#31338) --- .../client-runtime/src/mcpApps/host.test.ts | 45 +++++++++++++++++++ packages/client-runtime/src/mcpApps/host.ts | 28 ++++++++++-- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/packages/client-runtime/src/mcpApps/host.test.ts b/packages/client-runtime/src/mcpApps/host.test.ts index 46e254cbb84ee..fb1d79e93f7f0 100644 --- a/packages/client-runtime/src/mcpApps/host.test.ts +++ b/packages/client-runtime/src/mcpApps/host.test.ts @@ -130,6 +130,51 @@ describe("makeMcpAppHost", () => { expect(sent.find((m) => m.id === 2)?.result).toEqual({ content: [] }); }); + it("delivers results whose stored image blocks lost their bytes, which the MCP Apps SDK rejects", async () => { + const { host, sent } = setup({ + callTool: async () => ({ + content: [ + { type: "text", text: "rendered" }, + { type: "image", mimeType: "image/png", sizeBytes: 300 }, + { type: "image", mimeType: "image/png", data: "iVBORw0KGgo=" }, + ], + structuredContent: { rendered: true }, + }), + }); + initialize(host); + host.setToolCall({ + arguments: {}, + result: { + content: [ + { type: "text", text: "Chart ready" }, + { type: "image", source: { type: "base64", media_type: "image/png", sizeBytes: 300 } }, + { type: "text", text: "[Image: source: /tmp/chart.png]" }, + ], + structuredContent: { chart: "sales" }, + }, + }); + host.receive({ jsonrpc: "2.0", id: 2, method: "tools/call", params: { name: "render" } }); + await flush(); + + const notified = sent.find((m) => m.method === "ui/notifications/tool-result")?.params as { + content: ReadonlyArray; + structuredContent: unknown; + }; + expect(notified.structuredContent).toEqual({ chart: "sales" }); + expect(notified.content).toContainEqual({ type: "text", text: "Chart ready" }); + expect(notified.content).not.toContainEqual(expect.objectContaining({ type: "image" })); + + const answered = sent.find((m) => m.id === 2)?.result as { + content: ReadonlyArray; + structuredContent: unknown; + }; + expect(answered.structuredContent).toEqual({ rendered: true }); + expect(answered.content).toEqual([ + { type: "text", text: "rendered" }, + { type: "image", mimeType: "image/png", data: "iVBORw0KGgo=" }, + ]); + }); + it("sends a later result for a call that had none, without repeating its input", () => { const { host, sent } = setup(); initialize(host); diff --git a/packages/client-runtime/src/mcpApps/host.ts b/packages/client-runtime/src/mcpApps/host.ts index 8c72233aa99a7..0010945f21b38 100644 --- a/packages/client-runtime/src/mcpApps/host.ts +++ b/packages/client-runtime/src/mcpApps/host.ts @@ -131,13 +131,35 @@ function isId(value: unknown): value is JsonRpcId { return typeof value === "string" || (typeof value === "number" && Number.isFinite(value)); } +const MCP_CONTENT_BLOCK_STRING_FIELDS: ReadonlyMap> = new Map([ + ["text", ["text"]], + ["image", ["data", "mimeType"]], + ["audio", ["data", "mimeType"]], + ["resource_link", ["uri", "name"]], +]); + +function isMcpContentBlock(block: unknown): boolean { + if (!Predicate.isObject(block) || typeof block.type !== "string") return false; + if (block.type === "resource") { + const resource = block.resource; + return ( + Predicate.isObject(resource) && + typeof resource.uri === "string" && + (typeof resource.text === "string" || typeof resource.blob === "string") + ); + } + const fields = MCP_CONTENT_BLOCK_STRING_FIELDS.get(block.type); + return fields !== undefined && fields.every((field) => typeof block[field] === "string"); +} + /** - * Providers can report absent fields as null (Codex sends `_meta: null`), which - * the MCP Apps SDK rejects, dropping the whole notification or response. + * The MCP Apps SDK rejects the whole notification or response over one field it + * does not accept: null for an absent field (Codex sends `_meta: null`), or a + * content block MCP does not define, such as an image whose bytes storage stripped. */ function normalizeMcpAppToolResult(result: McpAppCallToolResult): McpAppCallToolResult { return { - content: Array.isArray(result.content) ? result.content : [], + content: Array.isArray(result.content) ? result.content.filter(isMcpContentBlock) : [], ...(Predicate.isObject(result.structuredContent) ? { structuredContent: result.structuredContent } : {}), From a9386ac8a6768f07db8839d8ebe34d923a92b833 Mon Sep 17 00:00:00 2001 From: Dhairya <127371606+Dkm0315@users.noreply.github.com> Date: Sun, 15 Nov 2026 10:17:13 +0530 Subject: [PATCH 888/922] fix(gitlab): a pasted repository URL is looked up by its project path on its host (#35209) Co-authored-by: Julius Marminge --- .../src/server/GitLabCli.test.ts | 32 +++++++++++++++++++ .../src/server/GitLabCli.ts | 27 +++++++++++++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/packages/source-control-gitlab/src/server/GitLabCli.test.ts b/packages/source-control-gitlab/src/server/GitLabCli.test.ts index e5257991cbf4a..884556c67f048 100644 --- a/packages/source-control-gitlab/src/server/GitLabCli.test.ts +++ b/packages/source-control-gitlab/src/server/GitLabCli.test.ts @@ -268,6 +268,38 @@ layer("GitLabCli.layer", (it) => { }), ); + it.effect.each([ + { repository: "group/project", args: ["api", "projects/group%2Fproject"] }, + { + repository: "https://gitlab.example.com:8443/group/sub/project.git", + args: ["api", "--hostname", "gitlab.example.com:8443", "projects/group%2Fsub%2Fproject"], + }, + { + repository: "https://gitlab.com/group/project/-/tree/main", + args: ["api", "--hostname", "gitlab.com", "projects/group%2Fproject"], + }, + ])("looks up $repository by its project path", ({ repository, args }) => + Effect.gen(function* () { + mockedRun.mockReturnValueOnce( + Effect.succeed( + processOutput( + JSON.stringify({ + path_with_namespace: "group/project", + web_url: "https://sourcecontrol.example.com/group/project", + http_url_to_repo: "https://sourcecontrol.example.com/group/project.git", + ssh_url_to_repo: "git@sourcecontrol.example.com:group/project.git", + }), + ), + ), + ); + + const glab = yield* GitLabCli.GitLabCli; + yield* glab.getRepositoryCloneUrls({ cwd: "/repo", repository }); + + expect(mockedRun).toHaveBeenCalledWith(expect.objectContaining({ command: "glab", args })); + }), + ); + it.effect("keeps non-merge-request not-found failures generic", () => Effect.gen(function* () { const cause = new VcsProcessExitError({ diff --git a/packages/source-control-gitlab/src/server/GitLabCli.ts b/packages/source-control-gitlab/src/server/GitLabCli.ts index ffa6d701b221d..649b33cd41332 100644 --- a/packages/source-control-gitlab/src/server/GitLabCli.ts +++ b/packages/source-control-gitlab/src/server/GitLabCli.ts @@ -421,6 +421,26 @@ function parseRepositoryPath(repository: string): { return { namespacePath, projectPath }; } +function parseRepositoryLookup(repository: string): { + readonly host: string | null; + readonly projectPath: string; +} { + const trimmed = repository.trim(); + if (!/^https?:\/\//i.test(trimmed)) return { host: null, projectPath: repository }; + try { + const url = new URL(trimmed); + const projectPath = decodeURIComponent(url.pathname) + .replace(/\/-(?:\/.*)?$/, "") + .replace(/^\/+|\/+$/g, "") + .replace(/\.git$/, ""); + return projectPath.length === 0 + ? { host: null, projectPath: repository } + : { host: url.host, projectPath }; + } catch { + return { host: null, projectPath: repository }; + } +} + // glab prints a missing project or merge request as a bare 404, and an expired // OAuth login as an `invalid_grant` refresh failure without suggesting `glab auth login`. const classifyGlabFailure = (stderr: string): VcsProcessExitFailureKind | null => { @@ -568,9 +588,14 @@ export const make = Effect.gen(function* () { ); }), getRepositoryCloneUrls: Effect.fn("GitLabCli.getRepositoryCloneUrls")(function (input) { + const { host, projectPath } = parseRepositoryLookup(input.repository); return execute({ cwd: input.cwd, - args: ["api", `projects/${encodeURIComponent(input.repository)}`], + args: [ + "api", + ...(host === null ? [] : ["--hostname", host]), + `projects/${encodeURIComponent(projectPath)}`, + ], }).pipe( Effect.map((result) => result.stdout.trim()), Effect.flatMap((raw) => From e9d8ac5673c54ddfb4efda196ee7ebaae15208c9 Mon Sep 17 00:00:00 2001 From: Nathan Wong Date: Sun, 15 Nov 2026 12:47:31 +0800 Subject: [PATCH 889/922] fix(server): skip user hooks in Codex text generation (#35203) Co-authored-by: Nathan Wong <20381195+thelogicmatrix@users.noreply.github.com> Co-authored-by: Julius Marminge Co-authored-by: Claude Opus 5.5 --- .../src/provider/codexLaunchArgs.test.ts | 9 +++++++++ apps/server/src/provider/codexLaunchArgs.ts | 13 ++++++++++-- .../CodexTextGeneration.test.ts | 20 +++++++++++++++++++ .../src/textGeneration/CodexTextGeneration.ts | 5 +++++ 4 files changed, 45 insertions(+), 2 deletions(-) diff --git a/apps/server/src/provider/codexLaunchArgs.test.ts b/apps/server/src/provider/codexLaunchArgs.test.ts index 8f4e1b7ca6d6a..e74b29d44818c 100644 --- a/apps/server/src/provider/codexLaunchArgs.test.ts +++ b/apps/server/src/provider/codexLaunchArgs.test.ts @@ -38,6 +38,15 @@ describe("codexExecLaunchArgs", () => { ); }); + it("drops launch args that enable user hooks", () => { + NodeAssert.deepStrictEqual( + codexExecLaunchArgs( + "--enable hooks --enable=hooks --enable codex_hooks --enable=codex_hooks --enable foo --disable hooks", + ), + ["--enable", "foo", "--disable", "hooks"], + ); + }); + it("does not pair value-taking flags with adjacent flags", () => { NodeAssert.deepStrictEqual(codexExecLaunchArgs("--config --strict-config --enable --disable"), [ "--strict-config", diff --git a/apps/server/src/provider/codexLaunchArgs.ts b/apps/server/src/provider/codexLaunchArgs.ts index 31ff37e31deb5..e49314ee83e0d 100644 --- a/apps/server/src/provider/codexLaunchArgs.ts +++ b/apps/server/src/provider/codexLaunchArgs.ts @@ -62,8 +62,17 @@ const filterLaunchArgs = (launchArgs: string | undefined, allowed: LaunchArgFilt return kept; }; -export const codexExecLaunchArgs = (launchArgs?: string) => - filterLaunchArgs(launchArgs, EXEC_FILTER); +const HOOK_FEATURES = new Set(["hooks", "codex_hooks"]); + +// Feature toggles beat config overrides, so a launch arg's hook enable would undo ours. +export const codexExecLaunchArgs = (launchArgs?: string) => { + const args = filterLaunchArgs(launchArgs, EXEC_FILTER); + return args.filter((arg, index) => { + if (arg.startsWith("--enable=")) return !HOOK_FEATURES.has(arg.slice("--enable=".length)); + if (arg === "--enable") return !HOOK_FEATURES.has(args[index + 1] ?? ""); + return !(args[index - 1] === "--enable" && HOOK_FEATURES.has(arg)); + }); +}; export const codexMcpListLaunchArgs = (launchArgs?: string) => filterLaunchArgs(launchArgs, MCP_LIST_FILTER); diff --git a/apps/server/src/textGeneration/CodexTextGeneration.test.ts b/apps/server/src/textGeneration/CodexTextGeneration.test.ts index e6e43d606e27f..1a1a5c43b0a0d 100644 --- a/apps/server/src/textGeneration/CodexTextGeneration.test.ts +++ b/apps/server/src/textGeneration/CodexTextGeneration.test.ts @@ -499,6 +499,26 @@ it.layer(layerCodexTextGenerationTest)("CodexTextGeneration", (it) => { ), ); + it.effect("keeps user hooks off over launch args that turn them on", () => + withFakeCodexEnv( + { + output: JSON.stringify({ title: "Hookless title" }), + launchArgs: "--config features.hooks=true --enable hooks", + requireArg: "--config features.codex_hooks=false --config features.hooks=false", + forbidArg: "--enable", + }, + (textGeneration) => + Effect.gen(function* () { + const result = yield* textGeneration.generateThreadTitle({ + cwd: process.cwd(), + message: "Describe this change", + modelSelection: DEFAULT_TEST_MODEL_SELECTION, + }); + expect(result.title).toBe("Hookless title"); + }), + ), + ); + it.effect("passes exec-safe launch args into codex exec", () => withFakeCodexEnv( { diff --git a/apps/server/src/textGeneration/CodexTextGeneration.ts b/apps/server/src/textGeneration/CodexTextGeneration.ts index 49c60166111ba..fc741aaaeb262 100644 --- a/apps/server/src/textGeneration/CodexTextGeneration.ts +++ b/apps/server/src/textGeneration/CodexTextGeneration.ts @@ -326,6 +326,11 @@ export const makeCodexTextGeneration = Effect.fn("makeCodexTextGeneration")(func model, "--config", `model_reasoning_effort="${reasoningEffort}"`, + // Current Codex gives hooks precedence over the historical codex_hooks alias. + "--config", + "features.codex_hooks=false", + "--config", + "features.hooks=false", ...(serviceTier ? ["--config", `service_tier="${serviceTier}"`] : []), "--output-schema", schemaPath, From 808dae1584351f6884439424f64114cf568f9a19 Mon Sep 17 00:00:00 2001 From: Nei Cardoso de Oliveira Neto Date: Sun, 15 Nov 2026 01:47:38 -0300 Subject: [PATCH 890/922] fix(server): worktrees of git-annex repositories can be removed (#34065) Co-authored-by: Julius Marminge --- apps/server/src/storageCleanup.test.ts | 31 +++++++- apps/server/src/storageCleanup.ts | 16 ++-- apps/server/src/vcs/GitVcsDriverCore.test.ts | 35 +++++++++ apps/server/src/vcs/worktreeRemoval.ts | 80 +++++++++++++++++--- 4 files changed, 141 insertions(+), 21 deletions(-) diff --git a/apps/server/src/storageCleanup.test.ts b/apps/server/src/storageCleanup.test.ts index 278f97865be81..cf56bde07f214 100644 --- a/apps/server/src/storageCleanup.test.ts +++ b/apps/server/src/storageCleanup.test.ts @@ -649,6 +649,15 @@ const cleanupTestLayer = GitVcsDriver.layer.pipe( Layer.provideMerge(ServerConfig.layerTest(process.cwd(), { prefix: "storage-cleanup-" })), Layer.provideMerge(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer)), ); +const annexWorktree = Effect.fnUntraced(function* ( + fixture: Effect.Success>, + worktree: string, +) { + const adminDir = (yield* fixture.command(worktree, ["rev-parse", "--absolute-git-dir"])).stdout; + yield* fixture.fs.remove(`${worktree}/.git`); + yield* fixture.fs.symlink(adminDir.trim(), `${worktree}/.git`); +}); + const runCleanupTest = ( effect: Effect.Effect< A, @@ -2099,7 +2108,7 @@ describe("orphan worktree reports", () => { ), ); - it.live.each(["nested", "direct"] as const)( + it.live.each(["nested", "direct", "annexed"] as const)( "reports a linked orphan's size without removing its files (%s)", (location) => runCleanupTest( @@ -2108,8 +2117,13 @@ describe("orphan worktree reports", () => { fixture.setThreads([]); const orphan = `${fixture.config.worktreesDir}/${location === "nested" ? "repository/" : ""}orphan`; yield* fixture.command(fixture.repo, ["worktree", "add", "-b", "orphan", orphan]); - const sizes = yield* Effect.forEach(yield* fixture.fs.readDirectory(orphan), (name) => - allocatedBytes(fixture.fs, `${orphan}/${name}`), + if (location === "annexed") yield* annexWorktree(fixture, orphan); + const sizes = yield* Effect.forEach( + // Links are not measured, and the annexed `.git` is one. + (yield* fixture.fs.readDirectory(orphan)).filter( + (name) => location !== "annexed" || name !== ".git", + ), + (name) => allocatedBytes(fixture.fs, `${orphan}/${name}`), ); const outside = yield* fixture.fs.makeTempDirectoryScoped(); yield* fixture.fs.writeFileString(`${outside}/external`, "outside data"); @@ -2963,6 +2977,17 @@ describe("storage cleanup reports and local file policies", () => { }), ), ); + it.live("removes a worktree whose .git file git-annex replaced with a symlink", () => + runCleanupTest( + Effect.gen(function* () { + const fixture = yield* cleanupFixture(); + const { service, worktree, fs } = fixture; + yield* annexWorktree(fixture, worktree); + expect((yield* service.runNow).entries[0]).toMatchObject({ outcome: "removed" }); + expect(yield* fs.exists(worktree)).toBe(false); + }), + ), + ); it.live("keeps a worktree when the inspection cannot read its directories", () => runCleanupTest( Effect.gen(function* () { diff --git a/apps/server/src/storageCleanup.ts b/apps/server/src/storageCleanup.ts index 6e38b58009039..43ff8254daa6d 100644 --- a/apps/server/src/storageCleanup.ts +++ b/apps/server/src/storageCleanup.ts @@ -58,7 +58,7 @@ import * as TerminalManager from "./terminal/Manager.ts"; import { isFilesystemRoot, managedWorktreesDirectories } from "./worktreesDirectory.ts"; import * as GitVcsDriver from "./vcs/GitVcsDriver.ts"; import { isNonRepositoryGitStderr } from "./vcs/GitVcsDriverCore.ts"; -import { removeLinkedWorktree } from "./vcs/worktreeRemoval.ts"; +import { isLinkedWorktree, removeLinkedWorktree } from "./vcs/worktreeRemoval.ts"; import { withWorkspaceLease } from "./workspace/workspaceLease.ts"; import * as HostProcess from "@t3tools/shared/HostProcess"; import * as NodeSqliteClient from "@t3tools/shared/nodeSqliteClient"; @@ -591,7 +591,7 @@ const make = Effect.gen(function* () { const modified = Option.getOrNull((yield* fs.stat(worktreePath)).mtime); if (modified !== null && modified.getTime() > now - ORPHAN_WORKTREE_GRACE_MS) return; const gitPath = path.join(worktreePath, ".git"); - const linked = (yield* fs.exists(gitPath)) && (yield* fs.stat(gitPath)).type === "File"; + const linked = (yield* fs.exists(gitPath)) && (yield* isLinkedWorktree(worktreePath)); reported.add(key); const remaining = measurementDeadline - (yield* Clock.currentTimeMillis); if (!orphanSizes.has(key) && (firstMeasurement || remaining > 0)) { @@ -636,7 +636,7 @@ const make = Effect.gen(function* () { (worktree) => Effect.gen(function* () { if (pathKey(yield* fs.realPath(worktree)) !== pathKey(worktree)) return false; - return (yield* fs.stat(path.join(worktree, ".git"))).type === "File"; + return yield* isLinkedWorktree(worktree); }).pipe(Effect.orElseSucceed(() => false)), ); }); @@ -647,7 +647,7 @@ const make = Effect.gen(function* () { if (referenced.has(pathKey(projectDirectory))) return; const gitPath = path.join(projectDirectory, ".git"); if (yield* fs.exists(gitPath)) { - if ((yield* fs.stat(gitPath)).type === "File") yield* report(projectDirectory); + if (yield* isLinkedWorktree(projectDirectory)) yield* report(projectDirectory); return; } for (const worktreePath of yield* directories(projectDirectory, root)) { @@ -1084,10 +1084,10 @@ const make = Effect.gen(function* () { return "worktree is a symbolic link"; if (!roots.some((root) => inside(root, realPath))) return "outside the managed worktree folder"; - const gitLink = yield* fs - .stat(path.join(worktreePath, ".git")) - .pipe(Effect.catchReason("PlatformError", "NotFound", () => Effect.undefined)); - if (gitLink?.type !== "File") return "not a linked worktree"; + const linked = yield* isLinkedWorktree(worktreePath).pipe( + Effect.catchReason("PlatformError", "NotFound", () => Effect.succeed(false)), + ); + if (!linked) return "not a linked worktree"; return null; }); const deletedRows = yield* sql<{ payload_json: string; workspaceRoot: string }>` diff --git a/apps/server/src/vcs/GitVcsDriverCore.test.ts b/apps/server/src/vcs/GitVcsDriverCore.test.ts index b0f24c61def1e..7802a254f127a 100644 --- a/apps/server/src/vcs/GitVcsDriverCore.test.ts +++ b/apps/server/src/vcs/GitVcsDriverCore.test.ts @@ -7262,6 +7262,41 @@ it.layer(layerTest)("GitVcsDriver core integration", (it) => { }), ); + it.effect.skipIf(!symlinksSupported)( + "removes a worktree whose .git file git-annex replaced with a symlink, keeping the symlink when refused", + () => + Effect.gen(function* () { + const cwd = yield* makeTmpDir(); + const { initialBranch } = yield* initRepoWithCommit(cwd); + const pathService = yield* Path.Path; + const worktreePath = pathService.join(yield* makeTmpDir("git-worktrees-"), "annexed"); + const driver = yield* GitVcsDriver.GitVcsDriver; + yield* driver.createWorktree({ + cwd, + path: worktreePath, + refName: initialBranch, + newRefName: "feature/annexed", + }); + const gitFile = pathService.join(worktreePath, ".git"); + const adminDir = (yield* git(worktreePath, ["rev-parse", "--absolute-git-dir"])).trim(); + NodeFS.rmSync(gitFile); + NodeFS.symlinkSync(adminDir, gitFile); + yield* writeTextFile(worktreePath, "notes.txt", "draft\n"); + + const refused = yield* Effect.result(driver.removeWorktree({ cwd, path: worktreePath })); + + assert.isTrue(Result.isFailure(refused)); + assert.isTrue(NodeFS.lstatSync(gitFile).isSymbolicLink()); + assert.equal(NodeFS.realpathSync(gitFile), NodeFS.realpathSync(adminDir)); + NodeFS.rmSync(pathService.join(worktreePath, "notes.txt")); + + yield* driver.removeWorktree({ cwd, path: worktreePath }); + + assert.isFalse(NodeFS.existsSync(worktreePath)); + assert.isFalse(NodeFS.existsSync(adminDir)); + }), + ); + it.effect("leaves a folder alone that only shares the worktree's short name", () => Effect.gen(function* () { const cwd = yield* makeTmpDir(); diff --git a/apps/server/src/vcs/worktreeRemoval.ts b/apps/server/src/vcs/worktreeRemoval.ts index f1140cdcc3a48..b48994873b282 100644 --- a/apps/server/src/vcs/worktreeRemoval.ts +++ b/apps/server/src/vcs/worktreeRemoval.ts @@ -9,6 +9,42 @@ import type * as GitVcsDriver from "./GitVcsDriver.ts"; const INDEX_LIST_MAX_BYTES = 64 * 1024 * 1024; +/** + * git-annex replaces a linked worktree's `.git` file with a symlink to its admin + * directory, so its symlinks into `.git/annex` resolve. Git then refuses to remove it. + */ +const annexedAdminDir = Effect.fn("WorktreeRemoval.annexedAdminDir")( + function* (worktreePath: string) { + const fileSystem = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + const adminDir = path.resolve( + worktreePath, + yield* fileSystem.readLink(path.join(worktreePath, ".git")), + ); + const pointsBackTo = path.dirname( + path.resolve( + adminDir, + (yield* fileSystem.readFileString(path.join(adminDir, "gitdir"))).trim(), + ), + ); + return (yield* fileSystem.realPath(pointsBackTo)) === (yield* fileSystem.realPath(worktreePath)) + ? Option.some(adminDir) + : Option.none(); + }, + Effect.orElseSucceed(() => Option.none()), +); + +export const isLinkedWorktree = Effect.fn("WorktreeRemoval.isLinkedWorktree")(function* ( + worktreePath: string, +) { + const fileSystem = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + return ( + (yield* fileSystem.stat(path.join(worktreePath, ".git"))).type === "File" || + Option.isSome(yield* annexedAdminDir(worktreePath)) + ); +}); + /** * Git for Windows before 2.54 follows NTFS junctions; newer Git leaves them behind. * On Windows, mirror Git's removal checks, then delete with Node's `rm`, which @@ -33,6 +69,39 @@ export const removeLinkedWorktree = Effect.fn("WorktreeRemoval.removeLinkedWorkt // Git refuses to remove a worktree with untracked files unless forced, but // its check honors `status.showUntrackedFiles=no` and would delete them. const statusConfig = ["-c", "status.showUntrackedFiles=normal"]; + // Git's own refusals, worded the way it prints them. + const refuse = (message: string, cause?: unknown) => + new GitCommandError({ + operation: input.operation, + command: "git worktree remove", + cwd: input.cwd, + detail: `fatal: ${message}`, + ...(cause === undefined ? {} : { cause }), + }); + const annexed = yield* annexedAdminDir(worktreePath); + if (Option.isSome(annexed)) { + const adminDir = annexed.value; + const writeGitFile = fileSystem.writeFileString(gitFile, `gitdir: ${adminDir}\n`); + // A kept worktree's annexed files resolve only through the symlink; a gitdir + // file is the fallback when it cannot be recreated. + yield* Effect.addFinalizer(() => + fileSystem.exists(worktreePath).pipe( + Effect.flatMap((kept) => + kept + ? fileSystem.remove(gitFile, { force: true }).pipe( + Effect.andThen(fileSystem.symlink(adminDir, gitFile)), + Effect.catch(() => writeGitFile), + ) + : Effect.void, + ), + Effect.ignore, + ), + ); + yield* fileSystem.remove(gitFile).pipe( + Effect.andThen(writeGitFile), + Effect.mapError((cause) => refuse(`failed to replace '${gitFile}'`, cause)), + ); + } const linked = (yield* HostProcess.isWindows) && (yield* fileSystem.stat(gitFile).pipe( @@ -50,15 +119,6 @@ export const removeLinkedWorktree = Effect.fn("WorktreeRemoval.removeLinkedWorkt ]); } - // Git's own refusals, worded the way it prints them. - const refuse = (message: string, cause?: unknown) => - new GitCommandError({ - operation: input.operation, - command: "git worktree remove", - cwd: input.cwd, - detail: `fatal: ${message}`, - ...(cause === undefined ? {} : { cause }), - }); const gitOutput = (cwd: string, args: ReadonlyArray, env?: NodeJS.ProcessEnv) => input .execute({ @@ -153,4 +213,4 @@ export const removeLinkedWorktree = Effect.fn("WorktreeRemoval.removeLinkedWorkt ); // The folder is gone, so Git only drops the worktree's metadata. return yield* input.run(["worktree", "remove", "--force", "--force", "--", worktreePath]); -}); +}, Effect.scoped); From 46fff7943e9a2eb84e2b281cb69f0edec3e4f380 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:48:09 -0800 Subject: [PATCH 891/922] fix(server): Codex model changes no longer restart a shared session from another worktree (#34129) --- .../ProviderSwitchService.test.ts | 28 +++++++++++++++++++ .../orchestration-v2/ProviderSwitchService.ts | 14 ++++------ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/apps/server/src/orchestration-v2/ProviderSwitchService.test.ts b/apps/server/src/orchestration-v2/ProviderSwitchService.test.ts index cde112bb74b09..a1442b82e10cd 100644 --- a/apps/server/src/orchestration-v2/ProviderSwitchService.test.ts +++ b/apps/server/src/orchestration-v2/ProviderSwitchService.test.ts @@ -314,3 +314,31 @@ it.effect("distinguishes compatible and incompatible instances of the same drive ), ), ); + +it.effect( + "applies a next-turn selection change when a shared session's cwd is another thread's", + () => + Effect.gen(function* () { + const service = yield* ProviderSwitch.ProviderSwitchServiceV2; + const thread = projection(); + const result = yield* service.plan({ + projection: { + ...thread, + providerSessions: [{ ...thread.providerSessions[0]!, cwd: "/other-thread-worktree" }], + }, + targetModelSelection: { + instanceId: currentInstanceId, + model: "gpt-5.1-codex", + options: [{ id: "fastMode", value: true }], + }, + }); + assert.equal(result.transition.type, "switch_model_in_session"); + assert.deepEqual(result.releaseProviderSessionIds, []); + }).pipe( + Effect.provide( + layerTest({ [currentInstanceId]: { continuationKey: "codex:account:primary" } }, () => + Effect.succeed({ type: "apply_on_next_turn" }), + ), + ), + ), +); diff --git a/apps/server/src/orchestration-v2/ProviderSwitchService.ts b/apps/server/src/orchestration-v2/ProviderSwitchService.ts index a31b5120964ed..69c3f351602b5 100644 --- a/apps/server/src/orchestration-v2/ProviderSwitchService.ts +++ b/apps/server/src/orchestration-v2/ProviderSwitchService.ts @@ -113,6 +113,10 @@ export const layer: Layer.Layer< sessionCapabilities: negotiatedCapabilities, }) : undefined; + // A selection change keeps the thread where it is. A shared session's cwd is the + // workspace of whichever thread opened it, not a move of this thread. + const workspace = + projection.thread.worktreePath ?? currentSession?.cwd ?? ""; const transition = Option.isNone(targetInstance) || Option.isNone(targetAdapter) ? ({ @@ -133,10 +137,7 @@ export const layer: Layer.Layer< modelSelection: current, runtimeMode: projection.thread.runtimeMode, interactionMode: projection.thread.interactionMode, - workspace: - currentSession?.cwd ?? - projection.thread.worktreePath ?? - "", + workspace, }, target: { driver: targetInstance.value.driver, @@ -147,10 +148,7 @@ export const layer: Layer.Layer< modelSelection: targetModelSelection, runtimeMode: projection.thread.runtimeMode, interactionMode: projection.thread.interactionMode, - workspace: - projection.thread.worktreePath ?? - currentSession?.cwd ?? - "", + workspace, available: targetInstance.value.enabled, }, ...(selectionTransition === undefined ? {} : { selectionTransition }), From 4c9a87309df17cba60df154456bc1d3434b6243a Mon Sep 17 00:00:00 2001 From: Gourav Kumar Dhiman Date: Sun, 15 Nov 2026 10:18:26 +0530 Subject: [PATCH 892/922] fix(cursor): an aborted Cursor SDK stall no longer stops the server (#23354) Co-authored-by: Claude Sonnet 5.5 Co-authored-by: Julius Marminge --- .../src/server/CursorSdk.test.ts | 16 ++++++++++++++++ .../provider-cursor/src/server/CursorSdk.ts | 18 ++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/packages/provider-cursor/src/server/CursorSdk.test.ts b/packages/provider-cursor/src/server/CursorSdk.test.ts index ee53c36764344..a14b051b65747 100644 --- a/packages/provider-cursor/src/server/CursorSdk.test.ts +++ b/packages/provider-cursor/src/server/CursorSdk.test.ts @@ -68,6 +68,22 @@ describe("CursorSdk unhandled rejection guard", () => { }), ); + it.effect("keeps the server running when the SDK aborts a stalled request", () => + Effect.gen(function* () { + const stall = new DOMException("This operation was aborted", "AbortError"); + stall.stack = "AbortError: This operation was aborted\n at Is.onStall (689.js:1:111536)"; + assert.deepStrictEqual(yield* rejectThroughGuard(stall), []); + }), + ); + + it.effect("still exits on an abort that was not raised from onStall", () => + Effect.gen(function* () { + const abort = new DOMException("onStall was aborted", "AbortError"); + abort.stack = "AbortError: onStall was aborted\n at somewhereElse (app.js:1:1)"; + assert.deepStrictEqual(yield* rejectThroughGuard(abort), [[1]]); + }), + ); + it.effect("keeps the server running when the SDK writes after its request stream ended", () => Effect.gen(function* () { // Shaped like `ConnectError.from(e, Code.Aborted)` from the SDK's connect-node body pump. diff --git a/packages/provider-cursor/src/server/CursorSdk.ts b/packages/provider-cursor/src/server/CursorSdk.ts index 0ac52526ad2f9..71eb9d28ff076 100644 --- a/packages/provider-cursor/src/server/CursorSdk.ts +++ b/packages/provider-cursor/src/server/CursorSdk.ts @@ -55,6 +55,20 @@ function isCursorClosedStreamWrite(reason: unknown): boolean { ); } +/** + * When the SDK's stall detector fires it aborts the request, then rejects a promise + * nothing awaits. The abort is the SDK's own recovery, so it must not stop the server. + * Only an abort raised from `onStall` counts; any other AbortError is still unexpected. + */ +function isCursorStallAbort(reason: unknown): boolean { + return ( + reason instanceof Error && + reason.name === "AbortError" && + typeof reason.stack === "string" && + /^\s+at (?:\S+\.)?onStall\b/m.test(reason.stack) + ); +} + function onUnhandledRejection(reason: unknown): void { if (isCursorShellSpawnFailure(reason)) { console.error("Cursor shell spawn failed. The server will keep running.", reason); @@ -64,6 +78,10 @@ function onUnhandledRejection(reason: unknown): void { console.error("Cursor SDK wrote to a closed stream. The server will keep running."); return; } + if (isCursorStallAbort(reason)) { + console.error("Cursor SDK aborted a stalled request. The server will keep running."); + return; + } if (process.listenerCount("unhandledRejection") > 1) { return; } From 9b380396316ca8c414f0c884bfda8b3024bfac28 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:48:43 -0800 Subject: [PATCH 893/922] fix(forgejo): prefer the deepest-mounted login when a root login also matches (#35916) Co-authored-by: Claude Opus 5.5 --- packages/source-control-forgejo/src/server/ForgejoCli.ts | 9 ++++++++- .../src/server/ForgejoSourceControlProvider.test.ts | 5 +++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/source-control-forgejo/src/server/ForgejoCli.ts b/packages/source-control-forgejo/src/server/ForgejoCli.ts index 5fa49386c37e0..6a408b47550be 100644 --- a/packages/source-control-forgejo/src/server/ForgejoCli.ts +++ b/packages/source-control-forgejo/src/server/ForgejoCli.ts @@ -184,7 +184,7 @@ export function matchForgejoLogin( requestedHost?: string, hostOnly = false, ) { - const matches = [ + let matches = [ ...new Map( logins .filter((login) => { @@ -204,6 +204,13 @@ export function matchForgejoLogin( .map((login) => [login.name, login]), ).values(), ]; + if (!remote.ssh && remote.path) { + // A root login matches every path on its host; the instance mounted deepest owns the remote. + const depth = (login: (typeof matches)[number]) => + parseForgejoRemote(login.url)?.path.length ?? 0; + const deepest = Math.max(...matches.map(depth)); + matches = matches.filter((login) => depth(login) === deepest); + } return matches.length === 1 ? matches[0] : new Set(matches.map((login) => login.url)).size === 1 diff --git a/packages/source-control-forgejo/src/server/ForgejoSourceControlProvider.test.ts b/packages/source-control-forgejo/src/server/ForgejoSourceControlProvider.test.ts index a113a722af8d7..76137928af065 100644 --- a/packages/source-control-forgejo/src/server/ForgejoSourceControlProvider.test.ts +++ b/packages/source-control-forgejo/src/server/ForgejoSourceControlProvider.test.ts @@ -1524,6 +1524,11 @@ it.effect("does not choose a default Forgejo login across ambiguous SSH server p url: `http://forgejo.local:4000/${login.name}`, })); assert.isUndefined(ForgejoCli.matchForgejoLogin(mounted, hostOnly!, undefined, true)); + const rootAndMounted = [logins[1]!, { ...logins[0]!, url: "http://forgejo.local:4000/gitea" }]; + const underMount = ForgejoCli.parseForgejoRemote( + "http://forgejo.local:4000/gitea/maria/project.git", + ); + assert.strictEqual(ForgejoCli.matchForgejoLogin(rootAndMounted, underMount!)?.name, "one"); }), ); From 2123168a5568cfa79e6741b321e2e042779d7079 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:48:59 -0800 Subject: [PATCH 894/922] fix(opencode): Go-key-only instances keep OpenCode Go usage on OpenCode 2 (#36519) Co-authored-by: Claude Opus 5.5 --- .../src/server/driver.test.ts | 79 +++++++++++++++++++ .../provider-opencode/src/server/driver.ts | 5 +- 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/packages/provider-opencode/src/server/driver.test.ts b/packages/provider-opencode/src/server/driver.test.ts index b3c628e28fc63..da5263b9989e3 100644 --- a/packages/provider-opencode/src/server/driver.test.ts +++ b/packages/provider-opencode/src/server/driver.test.ts @@ -1053,6 +1053,85 @@ it.layer(layer)("OpenCodeDriver runtime selection", (it) => { assert.strictEqual(serverStarts, starts); }).pipe(Effect.scoped, Effect.provide(TestClock.layer())), ); + + it.effect("reads Go usage from a stored key when the local server has no Console workspace", () => + Effect.gen(function* () { + let goUsageReads = 0; + const usageStarted = yield* Deferred.make(); + const server = HttpClient.make((request) => { + if (request.url === "https://opencode.ai/zen/go/v1/usage") { + goUsageReads += 1; + assert.strictEqual(request.headers.authorization, "Bearer test-go-key"); + const window = { percent: 10, resetsAt: "2026-11-01T00:00:00.000Z" }; + return Effect.succeed( + HttpClientResponse.fromWeb( + request, + Response.json({ usage: { rolling: window, weekly: window, monthly: window } }), + ), + ); + } + const path = new URL(request.url).pathname; + if (path === "/api/experimental/usage/limits") { + const response = HttpClientResponse.fromWeb( + request, + Response.json({ location: { directory: "/work" }, data: null }), + ); + return Deferred.succeed(usageStarted, undefined).pipe(Effect.as(response)); + } + const body = + path === "/api/info" + ? JSON.parse(OPENCODE_2_RESPONSES["/api/info"].body) + : { location: { directory: "/work" }, data: [] }; + return Effect.succeed(HttpClientResponse.fromWeb(request, Response.json(body))); + }); + const runtime = { + ...openCode2Runtime, + startOpenCodeServerProcess: ({ + verify, + }: Parameters< + OpenCodeRuntime.OpenCodeRuntime["Service"]["startOpenCodeServerProcess"] + >[0]) => + Effect.gen(function* () { + const url = "http://127.0.0.1:4096"; + const version = verify ? yield* verify(url) : "2.0.18"; + return { url, version, isRunning: Effect.succeed(true), exitCode: Effect.never }; + }), + }; + const instance = yield* OpenCodeDriver.create({ + instanceId: ProviderInstanceId.make("opencode-go-key-only"), + displayName: undefined, + environment: [ + { + name: "OPENCODE_AUTH_CONTENT", + sensitive: true, + value: JSON.stringify({ "opencode-go": { type: "api", key: "test-go-key" } }), + }, + { name: "OPENCODE_API_KEY", sensitive: true, value: "" }, + ], + enabled: true, + config: OpenCodeDriver.defaultConfig(), + }).pipe( + Effect.provide(TestProviderHost.layer()), + Effect.provideService(HttpClient.HttpClient, server), + Effect.provideService(OpenCodeRuntime.OpenCodeRuntime, runtime), + ); + const initial = yield* instance.snapshot.streamChanges.pipe( + Stream.filter((entry) => entry.usageLimits !== undefined), + Stream.take(1), + Stream.runCollect, + Effect.forkChild, + ); + yield* Deferred.await(usageStarted); + yield* TestClock.adjust("5 seconds"); + const [snapshot] = Array.from(yield* Fiber.join(initial)); + assert.strictEqual(snapshot?.usageLimits?.unavailable, undefined); + assert.deepStrictEqual( + snapshot?.usageLimits?.windows.map((window) => window.kind), + ["session", "weekly", "monthly"], + ); + assert.strictEqual(goUsageReads, 1); + }).pipe(Effect.scoped, Effect.provide(TestClock.layer())), + ); }); // npm links into opencode-ai for 1.x and @opencode/cli for 2.x. diff --git a/packages/provider-opencode/src/server/driver.ts b/packages/provider-opencode/src/server/driver.ts index 9b39fed2546b5..8b49c8c801219 100644 --- a/packages/provider-opencode/src/server/driver.ts +++ b/packages/provider-opencode/src/server/driver.ts @@ -483,7 +483,10 @@ export const OpenCodeDriver: ProviderDriver< connection.usageLimits(host.paths.cwd), ); if (limits === undefined) unsupportedUsageVersion = runtime.version; - return limits ?? (yield* legacyUsageLimits); + if (limits !== undefined && limits.unavailable?.reason !== "unsupported") return limits; + // Without a Console workspace the server reports nothing, but a local Go key still has usage. + const legacy = yield* legacyUsageLimits; + return limits !== undefined && legacy.unavailable?.reason === "unsupported" ? limits : legacy; }).pipe( Effect.timeout("10 seconds"), Effect.catch(() => From 25a1afe7d5ee47246015ef4d56e08b227bb282c9 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:49:16 -0800 Subject: [PATCH 895/922] fix(client-runtime): opening an old search result keeps messages in order (#29711) Co-authored-by: Claude Opus 5.5 --- .../src/state/threadHistoryMerge.test.ts | 38 +++++++++++++++++++ .../src/state/threadHistoryMerge.ts | 38 +++++++++++++++++-- 2 files changed, 72 insertions(+), 4 deletions(-) diff --git a/packages/client-runtime/src/state/threadHistoryMerge.test.ts b/packages/client-runtime/src/state/threadHistoryMerge.test.ts index 3f2be832a2b23..95f2b01e7347e 100644 --- a/packages/client-runtime/src/state/threadHistoryMerge.test.ts +++ b/packages/client-runtime/src/state/threadHistoryMerge.test.ts @@ -175,6 +175,44 @@ describe("threadHistoryMerge", () => { ]); }); + it("keeps an older answer before a full page that only covers the later part of a conversation page", () => { + const [question, olderAnswer, reasoningA, reasoningB, reasoningC, newerAnswer] = [ + row(0), + row(1), + row(2), + row(3), + row(4), + row(5), + ]; + const window = [row(6), row(7)]; + const projection = { + ...v2Projection, + turnItems: window.map((entry) => entry.item), + visibleTurnItems: window.map((entry, position) => ({ ...entry, position })), + }; + const conversation = mergeOlderHistoryIntoProjection(projection, [ + question, + olderAnswer, + newerAnswer, + ]); + const full = mergeOlderHistoryIntoProjection(conversation, [ + reasoningA, + reasoningB, + reasoningC, + newerAnswer, + ]); + expect(full.visibleTurnItems.map((entry) => entry.sourceItemId)).toEqual([ + "item-0", + "item-1", + "item-2", + "item-3", + "item-4", + "item-5", + "item-6", + "item-7", + ]); + }); + it("does not resurrect a local item hidden while an older page was in flight", () => { const stalePageRow = row(1); const currentItem = { diff --git a/packages/client-runtime/src/state/threadHistoryMerge.ts b/packages/client-runtime/src/state/threadHistoryMerge.ts index 62eba89d587f2..ee9174e8fbe81 100644 --- a/packages/client-runtime/src/state/threadHistoryMerge.ts +++ b/packages/client-runtime/src/state/threadHistoryMerge.ts @@ -49,6 +49,39 @@ function renumberVisible( return rows.map((row, position) => (row.position === position ? row : { ...row, position })); } +// A page is a contiguous history range, so current rows before its first +// visible row are older than the page start and new page rows sit just +// before the next row both lists share. +function interleavePage( + current: ReadonlyArray, + page: ReadonlyArray, + pageKeys: ReadonlySet, +): OrchestrationV2ProjectedTurnItem[] { + const currentIndex = new Map(current.map((row, index) => [projectedItemKey(row), index])); + const merged: OrchestrationV2ProjectedTurnItem[] = []; + let pending: OrchestrationV2ProjectedTurnItem[] = []; + let next = 0; + const emitCurrentThrough = (end: number) => { + for (; next < end; next += 1) { + const row = current[next]!; + if (!pageKeys.has(projectedItemKey(row))) merged.push(row); + } + }; + for (const row of page) { + const index = currentIndex.get(projectedItemKey(row)); + if (index === undefined) { + pending.push(row); + continue; + } + emitCurrentThrough(index + 1); + merged.push(...pending, row); + pending = []; + } + merged.push(...pending); + emitCurrentThrough(current.length); + return merged; +} + export function mergeOlderHistoryIntoProjection( projection: OrchestrationV2ThreadProjection, olderItems: ReadonlyArray, @@ -149,10 +182,7 @@ export function mergeOlderHistoryIntoProjection( ]; if (anchor.visibility === "local") turnItemById.set(String(updated.item.id), updated.item); } else { - visible = [ - ...page, - ...projection.visibleTurnItems.filter((row) => !pageKeys.has(projectedItemKey(row))), - ]; + visible = interleavePage(projection.visibleTurnItems, page, pageKeys); } if ( visible.length === projection.visibleTurnItems.length && From 6a510c48947b87edbe0a18186f2ca36ea369b86f Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:49:32 -0800 Subject: [PATCH 896/922] fix(server): MCP OAuth rejects a resource with an empty fragment (#35808) Co-authored-by: Claude Opus 5.5 --- apps/server/src/auth/McpOAuth.test.ts | 11 +++++++++++ apps/server/src/auth/McpOAuth.ts | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/server/src/auth/McpOAuth.test.ts b/apps/server/src/auth/McpOAuth.test.ts index 4ad56edeeaf80..d72a716673e66 100644 --- a/apps/server/src/auth/McpOAuth.test.ts +++ b/apps/server/src/auth/McpOAuth.test.ts @@ -292,6 +292,17 @@ it.effect("registers loopback and https clients and never redirects for an unver expect(unregistered.status).toBe(400); expect(unregistered.headers.get("location")).toBeNull(); + for (const resource of [`${ORIGIN}/mcp#section`, `${ORIGIN}/mcp#`]) { + const wrongTarget = yield* handler( + at( + `/oauth/mcp/authorize?${new URLSearchParams({ ...authorizeParams(clientId), resource })}`, + ), + ); + expect(wrongTarget.status).toBe(302); + const location = new URL(wrongTarget.headers.get("location")!, ORIGIN); + expect(location.searchParams.get("error"), resource).toBe("invalid_target"); + } + const query = new URLSearchParams(authorizeParams(clientId)).toString(); const handoff = yield* handler(at(`/oauth/mcp/authorize?${query}`)); expect(handoff.status).toBe(302); diff --git a/apps/server/src/auth/McpOAuth.ts b/apps/server/src/auth/McpOAuth.ts index 73db062040bb8..fdb0e4044f1df 100644 --- a/apps/server/src/auth/McpOAuth.ts +++ b/apps/server/src/auth/McpOAuth.ts @@ -134,9 +134,11 @@ export const redirectMatches = (registered: string, presented: string): boolean const sameResource = (urls: McpOAuthUrls, presented: string | undefined): boolean => { if (presented === undefined) return true; + // URL.hash misses empty fragments, which RFC 8707 §2 also forbids. + if (presented.includes("#")) return false; try { const url = new URL(presented); - return url.hash === "" && `${url.origin}${url.pathname.replace(/\/+$/u, "")}` === urls.resource; + return `${url.origin}${url.pathname.replace(/\/+$/u, "")}` === urls.resource; } catch { return false; } From 5de10b91d9d563459690a5ecc290b033573090b8 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:49:47 -0800 Subject: [PATCH 897/922] fix(provider-core): branch-name generation no longer starts the user's task (#36222) Co-authored-by: Claude Opus 5.5 --- packages/provider-core/src/server/textGenerationPrompts.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/provider-core/src/server/textGenerationPrompts.ts b/packages/provider-core/src/server/textGenerationPrompts.ts index 5d48ea79d8cd3..61be2c1a6a222 100644 --- a/packages/provider-core/src/server/textGenerationPrompts.ts +++ b/packages/provider-core/src/server/textGenerationPrompts.ts @@ -335,6 +335,7 @@ export function buildBranchNamePrompt(input: BranchNamePromptInput) { ]), ]), "If images are attached, use them as primary context for visual/UI issues.", + "The user message describes work for another agent. Do not answer it, start the work, read files, or run commands; name the branch from the message and its attachments.", ], message: input.message, attachments: input.attachments, From 32a6a7f70b6a204098507764abe209e75a56015d Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:50:04 -0800 Subject: [PATCH 898/922] fix(web): desktop window recovers when its backend restarts during a renderer reload (#26612) Co-authored-by: Claude Opus 5.5 --- apps/web/src/authBootstrap.test.ts | 49 +++++++++++++++++++++++ apps/web/src/environments/primary/auth.ts | 6 ++- apps/web/test/environmentHttpTest.ts | 6 ++- 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/apps/web/src/authBootstrap.test.ts b/apps/web/src/authBootstrap.test.ts index 65c6f8edd3424..f444c64cb16ad 100644 --- a/apps/web/src/authBootstrap.test.ts +++ b/apps/web/src/authBootstrap.test.ts @@ -8,6 +8,7 @@ import { import { createBrowserHistory } from "@tanstack/react-router"; import * as DateTime from "effect/DateTime"; import * as Effect from "effect/Effect"; +import { HttpClientError, HttpClientRequest } from "effect/http"; import { afterEach, beforeEach, describe, expect, it, vi } from "vite-plus/test"; import { installEnvironmentHttpTest } from "../test/environmentHttpTest"; @@ -165,6 +166,54 @@ describe("resolveInitialServerAuthGateState", () => { expect(testApi.calls.browserSession).toEqual([{ credential: "desktop-bootstrap-token" }]); }); + it("retries the desktop bootstrap while the backend is still unreachable", async () => { + const nextSession = sequence( + unauthenticatedSession(DESKTOP_AUTH), + authenticatedSession(DESKTOP_AUTH), + ); + const testApi = await installAuthApi({ + session: nextSession, + browserSession: () => Effect.succeed(browserSession(["orchestration:read", "access:write"])), + }); + // What FetchHttpClient yields when nothing listens on the backend port. + const connectionRefused = new HttpClientError.HttpClientError({ + reason: new HttpClientError.TransportError({ + request: HttpClientRequest.get("http://localhost:3773/api/auth/session"), + cause: new TypeError("Failed to fetch"), + }), + }); + let unreachableAttempts = 1; + __setPrimaryHttpRunnerForTests((effect) => { + if (unreachableAttempts > 0) { + unreachableAttempts -= 1; + return Promise.reject(connectionRefused); + } + return testApi.run(effect); + }); + + const testWindow = installTestBrowser("http://localhost/"); + testWindow.desktopBridge = { + getLocalEnvironmentBootstraps: () => [ + { + id: "primary", + label: "Local", + httpBaseUrl: "http://localhost:3773", + wsBaseUrl: "ws://localhost:3773", + bootstrapToken: "desktop-bootstrap-token", + }, + ], + } as unknown as DesktopBridge; + + const { resolveInitialServerAuthGateState } = await import("./environments/primary"); + + vi.useFakeTimers({ toFake: ["setTimeout", "Date"] }); + await Promise.all([ + expect(resolveInitialServerAuthGateState()).resolves.toEqual({ status: "authenticated" }), + vi.advanceTimersByTimeAsync(1_000), + ]); + expect(testApi.calls.browserSession).toEqual([{ credential: "desktop-bootstrap-token" }]); + }); + it("takes a pairing token from the location hash and strips it immediately", async () => { const testWindow = installTestBrowser("http://localhost/#token=pairing-token"); const { takePairingTokenFromUrl } = await import("./environments/primary"); diff --git a/apps/web/src/environments/primary/auth.ts b/apps/web/src/environments/primary/auth.ts index 5a1261039f10b..dbc5d64b37b51 100644 --- a/apps/web/src/environments/primary/auth.ts +++ b/apps/web/src/environments/primary/auth.ts @@ -294,7 +294,7 @@ function waitForBootstrapRetry(delayMs: number): Promise { function isTransientBootstrapError(error: unknown): boolean { if (isPrimaryEnvironmentRequestError(error)) { - return TRANSIENT_BOOTSTRAP_STATUS_CODES.has(error.status); + return TRANSIENT_BOOTSTRAP_STATUS_CODES.has(error.status) || isTransportError(error.cause); } if (error instanceof TypeError) { @@ -304,6 +304,10 @@ function isTransientBootstrapError(error: unknown): boolean { return error instanceof DOMException && error.name === "AbortError"; } +function isTransportError(error: unknown): boolean { + return HttpClientError.isHttpClientError(error) && error.reason._tag === "TransportError"; +} + async function bootstrapServerAuth(urlCredential: string | null): Promise { const currentSession = await fetchSessionState(); if (currentSession.authenticated && !urlCredential) { diff --git a/apps/web/test/environmentHttpTest.ts b/apps/web/test/environmentHttpTest.ts index 9cbe10794f358..5bf621547a2b1 100644 --- a/apps/web/test/environmentHttpTest.ts +++ b/apps/web/test/environmentHttpTest.ts @@ -23,7 +23,7 @@ import { HttpApiTest } from "effect/http-api"; import * as HttpApiBuilder from "effect/http-api/HttpApiBuilder"; import { PrimaryEnvironmentHttpClient } from "../src/environments/primary/httpClient"; -import { __setPrimaryHttpRunnerForTests } from "../src/lib/runtime"; +import { __setPrimaryHttpRunnerForTests, type PrimaryHttpEffectRunner } from "../src/lib/runtime"; type BrowserSessionHandler = ( payload: AuthBrowserSessionRequest, @@ -127,10 +127,12 @@ export async function installEnvironmentHttpTest(scenario: EnvironmentHttpTestSc ); const runtime = ManagedRuntime.make(Layer.succeed(PrimaryEnvironmentHttpClient, client)); - __setPrimaryHttpRunnerForTests((effect) => runtime.runPromise(effect)); + const run: PrimaryHttpEffectRunner = (effect) => runtime.runPromise(effect); + __setPrimaryHttpRunnerForTests(run); return { calls, + run, async dispose() { __setPrimaryHttpRunnerForTests(); await runtime.dispose(); From 8bc7a08227489288f059c8d3a8a0939722c39f05 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:50:16 -0800 Subject: [PATCH 899/922] fix(server): an explicit Tailscale IPv6 bind is advertised as a tailnet route (#34742) --- apps/server/src/environment/DirectEndpoints.test.ts | 11 +++++++++++ apps/server/src/environment/DirectEndpoints.ts | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/apps/server/src/environment/DirectEndpoints.test.ts b/apps/server/src/environment/DirectEndpoints.test.ts index 5e1459b3dc2ab..09ecc1ee8c8c9 100644 --- a/apps/server/src/environment/DirectEndpoints.test.ts +++ b/apps/server/src/environment/DirectEndpoints.test.ts @@ -246,6 +246,17 @@ describe("resolveBoundEndpoints", () => { ).toEqual([{ kind: "tailnet", httpBaseUrl: "http://100.101.102.103:3773/" }]); }); + it("reports an explicit bind to Tailscale's IPv6 address as the tailnet route", () => { + expect( + resolveBoundEndpoints({ + platform: "linux", + host: "fd7a:115c:a1e0::1", + port: 3773, + interfaces: INTERFACES, + }), + ).toEqual([{ kind: "tailnet", httpBaseUrl: "http://[fd7a:115c:a1e0::1]:3773/" }]); + }); + it("never reports an IPv4-mapped host, which can name the client's own loopback", () => { expect( resolveBoundEndpoints({ diff --git a/apps/server/src/environment/DirectEndpoints.ts b/apps/server/src/environment/DirectEndpoints.ts index e883766e070c4..4508d208e75e6 100644 --- a/apps/server/src/environment/DirectEndpoints.ts +++ b/apps/server/src/environment/DirectEndpoints.ts @@ -40,6 +40,7 @@ export class DirectEndpoints extends Context.Service< >()("t3/environment/DirectEndpoints") {} // Credentials travel over HTTP; public IPs leak them and hostnames can resolve differently per client. +// Wildcard binds stay IPv4: the private-network listener check accepts only IPv4 peers. const isAdvertisableAddress = (address: string): boolean => NodeNet.isIPv4(address) && !address.startsWith("127.") && isPrivateNetworkAddress(address); @@ -81,7 +82,10 @@ export function resolveBoundEndpoints(input: { !(input.platform === "win32" && WINDOWS_HOST_ADAPTER_MAC.test(entry.mac)), ) .map((entry) => entry.address) - : [input.host!].filter(isAdvertisableAddress); + : [input.host!].filter( + (address) => + isAdvertisableAddress(address) || (NodeNet.isIPv6(address) && isTailnetHost(address)), + ); return [...new Set(addresses)] .filter((address) => !input.onCloudVm || tailscaleAddresses.has(address)) .map((address) => ({ From 9bea6f7eb0dee2ce6aefc5a4f584351e510397a8 Mon Sep 17 00:00:00 2001 From: Omar Espinosa <77650361+OmarAlex24@users.noreply.github.com> Date: Sat, 14 Nov 2026 22:50:34 -0600 Subject: [PATCH 900/922] fix(server): agent slice memory limits follow live memory changes (#30581) Co-authored-by: Claude Opus 5.5 Co-authored-by: Julius Marminge --- apps/server/src/process/agentScope.test.ts | 47 +++++++++++++++++++++- apps/server/src/process/agentScope.ts | 47 +++++++++++++++++----- 2 files changed, 83 insertions(+), 11 deletions(-) diff --git a/apps/server/src/process/agentScope.test.ts b/apps/server/src/process/agentScope.test.ts index a44ff15359f35..49674354b2532 100644 --- a/apps/server/src/process/agentScope.test.ts +++ b/apps/server/src/process/agentScope.test.ts @@ -12,6 +12,7 @@ import * as FileSystem from "effect/FileSystem"; import * as Layer from "effect/Layer"; import * as Logger from "effect/Logger"; import { ChildProcess, ChildProcessSpawner } from "effect/process"; +import { vi } from "vite-plus/test"; import * as ServerConfig from "../config.ts"; import { makeCodexAppServerSpawnCommand } from "../orchestration-v2/Adapters/CodexAdapterV2.ts"; @@ -19,6 +20,13 @@ import * as ProcessRunner from "../processRunner.ts"; import * as ProviderProcesses from "./providerProcesses.ts"; import { classifyScope, make, ownedAgentSlice, type ScopeState } from "./agentScope.ts"; +const GiB = 1024 ** 3; +const memory = vi.hoisted(() => ({ total: 16 * 1024 ** 3 })); +vi.mock("node:os", async (importOriginal) => ({ + ...(await importOriginal()), + totalmem: () => memory.total, +})); + const running: ScopeState = { loadState: "loaded", activeState: "active", @@ -49,6 +57,7 @@ const withFakeSystemd = ( readonly scope: Effect.Success; readonly units: Map; readonly calls: ReadonlyArray>; + readonly failingVerbs: Set; readonly stateDir: string; readonly cgroupRoot: string; }) => Effect.Effect, @@ -73,6 +82,7 @@ const withFakeSystemd = ( const cgroupRoot = NodePath.join(bin, "cgroup"); const units = new Map(); const calls: Array> = []; + const failingVerbs = new Set(); const output = (stdout: string, code = 0): ProcessRunner.ProcessRunOutput => ({ stdout, stderr: "", @@ -91,6 +101,7 @@ const withFakeSystemd = ( return output("", 1); } const [, verb, unit = ""] = args; + if (failingVerbs.has(verb!)) return output("", 1); if (stopFails && verb === "stop") { return { ...output(""), @@ -127,7 +138,7 @@ const withFakeSystemd = ( fileSystem.writeFileString(path.replace("/sys/fs/cgroup", cgroupRoot), data, options), }), ); - return yield* body({ scope, units, calls, stateDir, cgroupRoot }).pipe( + return yield* body({ scope, units, calls, failingVerbs, stateDir, cgroupRoot }).pipe( Effect.ensuring(Effect.sync(() => NodeFS.rmSync(bin, { recursive: true, force: true }))), ); }).pipe( @@ -320,6 +331,40 @@ describe("AgentScope service", () => { ), ); + it.effect("follows a live memory change at the next launch", () => { + memory.total = 16 * GiB; + return withFakeSystemd(({ scope, calls, failingVerbs }) => + Effect.gen(function* () { + const launch = scope.wrap({ command: "agent", args: [], name: "t", threadId: "a" }); + const memoryLimits = () => + calls + .filter( + ([, verb, , slice]) => verb === "set-property" && slice === "app-t3code-agents.slice", + ) + .map((args) => args.slice(4)); + yield* launch; + yield* launch; + expect(memoryLimits()).toEqual([[`MemoryHigh=${10 * GiB}`, `MemoryMax=${12 * GiB}`]]); + + // A VM balloon or `pct set --memory` grows RAM while the server keeps running. + memory.total = 22 * GiB; + failingVerbs.add("set-property"); + yield* launch; + yield* launch; + failingVerbs.delete("set-property"); + yield* launch; + yield* launch; + const grown = [`MemoryHigh=${16 * GiB}`, `MemoryMax=${18 * GiB}`]; + expect(memoryLimits()).toEqual([ + [`MemoryHigh=${10 * GiB}`, `MemoryMax=${12 * GiB}`], + grown, + grown, + grown, + ]); + }), + ); + }); + it.effect("stops agents a killed server left before startup completes", () => withFakeSystemd( ({ scope, calls, stateDir }) => diff --git a/apps/server/src/process/agentScope.ts b/apps/server/src/process/agentScope.ts index 7adc4c453be08..1e52e680b6f8d 100644 --- a/apps/server/src/process/agentScope.ts +++ b/apps/server/src/process/agentScope.ts @@ -14,6 +14,7 @@ import * as Effect from "effect/Effect"; import * as FileSystem from "effect/FileSystem"; import * as Layer from "effect/Layer"; import * as Path from "effect/Path"; +import * as Semaphore from "effect/Semaphore"; import * as ServerConfig from "../config.ts"; import * as ProcessRunner from "../processRunner.ts"; @@ -193,20 +194,44 @@ export const make = Effect.gen(function* () { slice, ...properties, ]); - if (result._tag === "None" || result.value.code !== 0) { - yield* Effect.logWarning("Could not set resource limits on an agents slice", { - slice, - properties, - stderr: result._tag === "Some" ? result.value.stderr.trim() : undefined, - }); - } + if (result._tag === "Some" && result.value.code === 0) return true; + yield* Effect.logWarning("Could not set resource limits on an agents slice", { + slice, + properties, + stderr: result._tag === "Some" ? result.value.stderr.trim() : undefined, + }); + return false; }); - const limits = agentSliceMemoryLimits(NodeOS.totalmem()); - yield* setProperties(AGENT_SLICE, [`MemoryHigh=${limits.high}`, `MemoryMax=${limits.max}`]); + // VMs and containers can resize RAM live, so each launch re-checks the total + // the limits came from. A failed update is retried by the next launch. + let appliedTotal: number | undefined; + const memoryLimitsLock = yield* Semaphore.make(1); + const applyMemoryLimits = memoryLimitsLock.withPermits(1)( + Effect.gen(function* () { + const total = NodeOS.totalmem(); + if (total === appliedTotal) return; + const limits = agentSliceMemoryLimits(total); + const applied = yield* setProperties(AGENT_SLICE, [ + `MemoryHigh=${limits.high}`, + `MemoryMax=${limits.max}`, + ]); + if (!applied) return; + if (appliedTotal !== undefined) { + yield* Effect.logInfo("Agent memory limits follow a memory change", { + slice: AGENT_SLICE, + previousTotal: appliedTotal, + total, + ...limits, + }); + } + appliedTotal = total; + }), + ); + yield* applyMemoryLimits; yield* setProperties(AGENTS_PARENT_SLICE, AGENTS_PARENT_PROPERTIES); yield* Effect.logInfo("Agent scopes are on", { slice: AGENT_SLICE, - ...limits, + ...agentSliceMemoryLimits(NodeOS.totalmem()), oomPolicy: supportsOomPolicy, }); return { @@ -214,6 +239,7 @@ export const make = Effect.gen(function* () { systemctl, runtimeDir, supportsOomPolicy, + applyMemoryLimits, }; }), ); @@ -403,6 +429,7 @@ export const make = Effect.gen(function* () { if (resolved === null) return { command, args }; const scope = yield* systemd; if (scope === undefined) return agentScopeCommand({ command: resolved, args }); + yield* scope.applyMemoryLimits; const unit = `t3code-${name}-${NodeCrypto.randomUUID().slice(0, 8)}.scope`; // A continuing shared scope cannot attribute a tool's OOM to one thread. // Clear the launch thread's previous scope instead. From d6795eac3c662caf713ac6e024b7dd5eb642d8ab Mon Sep 17 00:00:00 2001 From: Alex Southwell Date: Sun, 15 Nov 2026 15:50:52 +1100 Subject: [PATCH 901/922] fix(grok): background text generation no longer inherits Grok always-approve (#29692) Co-authored-by: Claude Opus 5.5 Co-authored-by: Julius Marminge --- .../testFixtures/grok-text-mock-agent.mjs | 53 ++++++++++++++----- .../textGeneration/GrokTextGeneration.test.ts | 19 +++++-- .../src/server/textGeneration.ts | 6 +++ 3 files changed, 61 insertions(+), 17 deletions(-) diff --git a/apps/server/src/provider/testFixtures/grok-text-mock-agent.mjs b/apps/server/src/provider/testFixtures/grok-text-mock-agent.mjs index 357bdb7fe564d..b8cb949a5fb71 100644 --- a/apps/server/src/provider/testFixtures/grok-text-mock-agent.mjs +++ b/apps/server/src/provider/testFixtures/grok-text-mock-agent.mjs @@ -5,12 +5,35 @@ const sessionId = "grok-text-session"; let currentModelId = "grok-mock-default"; const models = ["grok-mock-default", "grok-mock-alt"]; const write = (message) => process.stdout.write(`${JSON.stringify(message)}\n`); +const permissionRequestId = 9001; +let pendingPromptId; +const completePrompt = (id) => { + write({ + jsonrpc: "2.0", + method: "session/update", + params: { + sessionId, + update: { + sessionUpdate: "agent_message_chunk", + content: { type: "text", text: process.env.T3_ACP_PROMPT_RESPONSE_TEXT ?? "" }, + }, + }, + }); + write({ jsonrpc: "2.0", id, result: { stopReason: "end_turn" } }); +}; for await (const line of NodeReadline.createInterface({ input: process.stdin })) { const request = JSON.parse(line); if (process.env.T3_ACP_REQUEST_LOG_PATH) { NodeFS.appendFileSync(process.env.T3_ACP_REQUEST_LOG_PATH, `${line}\n`); } + if (request.method === undefined) { + if (request.id === permissionRequestId && pendingPromptId !== undefined) { + completePrompt(pendingPromptId); + pendingPromptId = undefined; + } + continue; + } if (request.id === undefined) continue; let result; switch (request.method) { @@ -43,19 +66,25 @@ for await (const line of NodeReadline.createInterface({ input: process.stdin })) result = {}; break; case "session/prompt": - write({ - jsonrpc: "2.0", - method: "session/update", - params: { - sessionId, - update: { - sessionUpdate: "agent_message_chunk", - content: { type: "text", text: process.env.T3_ACP_PROMPT_RESPONSE_TEXT ?? "" }, + if (process.env.T3_ACP_REQUEST_PERMISSION) { + pendingPromptId = request.id; + write({ + jsonrpc: "2.0", + id: permissionRequestId, + method: "session/request_permission", + params: { + sessionId, + toolCall: { toolCallId: "tool-1", kind: "execute", title: "Run `git status`" }, + options: [ + { optionId: "allow-once", name: "Yes", kind: "allow_once" }, + { optionId: "reject-once", name: "No", kind: "reject_once" }, + ], }, - }, - }); - result = { stopReason: "end_turn" }; - break; + }); + continue; + } + completePrompt(request.id); + continue; default: write({ jsonrpc: "2.0", diff --git a/apps/server/src/textGeneration/GrokTextGeneration.test.ts b/apps/server/src/textGeneration/GrokTextGeneration.test.ts index 26ab9e79c7103..adb911623f800 100644 --- a/apps/server/src/textGeneration/GrokTextGeneration.test.ts +++ b/apps/server/src/textGeneration/GrokTextGeneration.test.ts @@ -35,7 +35,7 @@ function makeAcpGrokWrapper(dir: string, env: Record): string { env, source: execScriptSource({ scriptPath: mockAgentPath, - expectedArgs: ["agent", "stdio"], + expectedArgs: ["--permission-mode", "default", "agent", "stdio"], }), }); } @@ -58,14 +58,19 @@ function withFakeAcpGrok( }).pipe(Effect.scoped); } -function readJsonRpcRequests( - filePath: string, -): ReadonlyArray<{ readonly method?: string; readonly params?: Record }> { +function readJsonRpcRequests(filePath: string): ReadonlyArray<{ + readonly id?: unknown; + readonly method?: string; + readonly params?: Record; +}> { return NodeFS.readFileSync(filePath, "utf8") .trim() .split("\n") .filter((line) => line.length > 0) - .map((line) => JSON.parse(line) as { method?: string; params?: Record }); + .map( + (line) => + JSON.parse(line) as { id?: unknown; method?: string; params?: Record }, + ); } it.layer(layerGrokTextGenerationTest)("GrokTextGeneration", (it) => { @@ -78,6 +83,7 @@ it.layer(layerGrokTextGenerationTest)("GrokTextGeneration", (it) => { return withFakeAcpGrok( { T3_ACP_REQUEST_LOG_PATH: requestLogPath, + T3_ACP_REQUEST_PERMISSION: "1", T3_ACP_PROMPT_RESPONSE_TEXT: JSON.stringify({ subject: "Add Grok provider", body: "Wire up the ACP runtime and headless text generation path.", @@ -110,6 +116,9 @@ it.layer(layerGrokTextGenerationTest)("GrokTextGeneration", (it) => { request.params?.modelId === "grok-mock-alt", ), ).toBe(true); + expect(requests.find((request) => request.id === 9001)).toMatchObject({ + result: { outcome: { outcome: "cancelled" } }, + }); }), ); }); diff --git a/packages/provider-grok/src/server/textGeneration.ts b/packages/provider-grok/src/server/textGeneration.ts index 61a6b2d482f53..a5307709c3fbf 100644 --- a/packages/provider-grok/src/server/textGeneration.ts +++ b/packages/provider-grok/src/server/textGeneration.ts @@ -40,11 +40,17 @@ export const makeGrokTextGeneration = Effect.fn("makeGrokTextGeneration")(functi environment, cwd, clientInfo: { name: "t3-code-git-text", version: "0.0.0" }, + // Grok config may always-approve; ask mode sends tool approvals here, and none are granted. + runtimeMode: "approval-required", }).pipe( Effect.provideService(SecureRandom.SecureRandom, random), Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, commandSpawner), ); + yield* runtime.handleRequestPermission(() => + Effect.succeed({ outcome: { outcome: "cancelled" as const } }), + ); + yield* runtime.handleSessionUpdate((notification) => { const update = notification.update; if (update.sessionUpdate !== "agent_message_chunk") { From 17db7082c0679e51371412ed823c79eac39e4e81 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:51:08 -0800 Subject: [PATCH 902/922] fix(server): preview port discovery stops polling while no client is in the foreground (#29782) Co-authored-by: Claude Opus 5.5 --- apps/server/src/preview/PortScanner.test.ts | 56 ++++++++++++++++++--- apps/server/src/preview/PortScanner.ts | 7 ++- apps/server/src/server.ts | 5 +- 3 files changed, 60 insertions(+), 8 deletions(-) diff --git a/apps/server/src/preview/PortScanner.test.ts b/apps/server/src/preview/PortScanner.test.ts index 1ed544910b1bc..d9b226e21f4fe 100644 --- a/apps/server/src/preview/PortScanner.test.ts +++ b/apps/server/src/preview/PortScanner.test.ts @@ -22,6 +22,7 @@ import * as TestClock from "effect/testing/TestClock"; import { expect, vi } from "vite-plus/test"; import { FetchHttpClient } from "effect/http"; +import * as BackgroundPolicy from "../background/BackgroundPolicy.ts"; import * as ProcessRunner from "../processRunner.ts"; import * as PortScanner from "./PortScanner.ts"; @@ -44,12 +45,18 @@ const processProbeFailure: ProcessRunner.ProcessRunner["Service"]["run"] = (inpu const layerNoProc = FileSystem.layerNoop({}); +const layerForeground = Layer.mock(BackgroundPolicy.BackgroundPolicy)({ + shouldRunOpportunisticWork: Effect.succeed(true), +}); + +const layerScanner = PortScanner.layer.pipe(Layer.provide(layerForeground)); + const layerProbeFailure = ( run: ProcessRunner.ProcessRunner["Service"]["run"], fetch: typeof globalThis.fetch = globalThis.fetch, fileSystem: Layer.Layer = layerNoProc, ) => - PortScanner.layer.pipe( + layerScanner.pipe( Layer.provide( Layer.mergeAll( fileSystem, @@ -86,10 +93,12 @@ const layerLsofScanner = (input: { readonly pid: () => number; readonly fetch: typeof globalThis.fetch; readonly stdout?: () => string; + readonly backgroundPolicy?: Layer.Layer; }) => PortScanner.layer.pipe( Layer.provide( Layer.mergeAll( + input.backgroundPolicy ?? layerForeground, layerNoProc, Layer.succeed(ProcessRunner.ProcessRunner, { run: () => @@ -287,6 +296,41 @@ effectIt.effect("stops probing a subscriber's configured paths after its scope c }).pipe(Effect.scoped, Effect.provide(layer)); }); +effectIt.effect("skips scheduled scans while no client is in the foreground", () => { + let lsofRuns = 0; + let foreground = true; + const layer = layerLsofScanner({ + pid: () => 1234, + fetch: (() => Promise.resolve(new Response("not found", { status: 404 }))) as typeof fetch, + stdout: () => { + lsofRuns += 1; + return `p1234\ncnode\nn*:${LSOF_TEST_PORT}\n`; + }, + backgroundPolicy: Layer.mock(BackgroundPolicy.BackgroundPolicy)({ + shouldRunOpportunisticWork: Effect.sync(() => foreground), + }), + }); + + return Effect.gen(function* () { + const scanner = yield* PortScanner.PortDiscovery; + yield* scanner.subscribe( + { configuredUrls: [`http://localhost:${LSOF_TEST_PORT}/`], initialSnapshot: [] }, + () => Effect.void, + ); + yield* scanner.retain; + const afterInitialScan = lsofRuns; + expect(afterInitialScan).toBeGreaterThan(0); + + foreground = false; + yield* TestClock.adjust(Duration.seconds(15)); + expect(lsofRuns).toBe(afterInitialScan); + + foreground = true; + yield* TestClock.adjust(Duration.seconds(3)); + expect(lsofRuns).toBeGreaterThan(afterInitialScan); + }).pipe(Effect.scoped, Effect.provide(layer)); +}); + effectIt.effect("uses the current configured fragment when readiness comes from cache", () => { const requests: string[] = []; const fetchFn = ((input: Parameters[0]) => { @@ -554,7 +598,7 @@ effectIt.effect.each([ let lsofSpawns = 0; let procWalks = 0; const missing = FileSystem.makeNoop({}); - const layer = PortScanner.layer.pipe( + const layer = layerScanner.pipe( Layer.provide( Layer.mergeAll( FileSystem.layerNoop({ @@ -635,7 +679,7 @@ effectIt.effect("ignores a partial Windows netstat snapshot when one query exits requests.push(String(input)); return Promise.resolve(new Response("hello", { headers: { "content-type": "text/html" } })); }) as typeof globalThis.fetch; - const layer = PortScanner.layer.pipe( + const layer = layerScanner.pipe( Layer.provide( Layer.mergeAll( layerNoProc, @@ -744,7 +788,7 @@ effectIt.effect.each(["linux", "darwin", "win32"] as const)( const fileReads: string[] = []; const requests: string[] = []; const missing = FileSystem.makeNoop({}); - const layer = PortScanner.layer.pipe( + const layer = layerScanner.pipe( Layer.provide( Layer.mergeAll( FileSystem.layerNoop({ @@ -811,7 +855,7 @@ effectIt.effect.each(["linux", "darwin"] as const)( "/proc/4242/environ": `PATH=/usr/bin\0${PortScanner.AGENT_THREAD_ENV}=thread-agent\0`, "/proc/5000/environ": "PATH=/usr/bin\0", }; - const layer = PortScanner.layer.pipe( + const layer = layerScanner.pipe( Layer.provide( Layer.mergeAll( FileSystem.layerNoop({ @@ -1051,7 +1095,7 @@ effectIt.live.skipIf(HostProcess.Platform.defaultValue() === "win32")( }).pipe( Effect.scoped, Effect.provide( - PortScanner.layer.pipe( + layerScanner.pipe( Layer.provide(ProcessRunner.layer), Layer.provide(Layer.mergeAll(NodeServices.layer, FetchHttpClient.layer)), ), diff --git a/apps/server/src/preview/PortScanner.ts b/apps/server/src/preview/PortScanner.ts index 12421453ade56..d950cd636f4f5 100644 --- a/apps/server/src/preview/PortScanner.ts +++ b/apps/server/src/preview/PortScanner.ts @@ -24,6 +24,7 @@ import * as Scope from "effect/Scope"; import * as Semaphore from "effect/Semaphore"; import { FetchHttpClient, HttpClient } from "effect/http"; +import * as BackgroundPolicy from "../background/BackgroundPolicy.ts"; import * as WindowsTcpListeners from "../process/windowsTcpListeners.ts"; import * as ProcessRunner from "../processRunner.ts"; @@ -508,6 +509,7 @@ export const make = Effect.gen(function* PortDiscoveryMake() { const hostPlatform = yield* HostProcess.Platform; const listenerDiscovery = (yield* HostProcess.Environment)[PORT_DISCOVERY_ENV] !== "0"; const httpClient = (yield* HttpClient.HttpClient).pipe(HttpClient.withScope); + const backgroundPolicy = yield* BackgroundPolicy.BackgroundPolicy; const stateRef = yield* Ref.make({ listeners: new Map(), terminalProcesses: new Map(), @@ -973,7 +975,10 @@ export const make = Effect.gen(function* PortDiscoveryMake() { const pollIfRetained = Ref.get(stateRef).pipe( Effect.flatMap((state) => (state.retainCount > 0 ? pollTick() : Effect.void)), ); - yield* Effect.forkScoped(pollIfRetained.pipe(Effect.repeat(Schedule.spaced(POLL_INTERVAL)))); + const scheduledPoll = backgroundPolicy.shouldRunOpportunisticWork.pipe( + Effect.flatMap((foreground) => (foreground ? pollIfRetained : Effect.void)), + ); + yield* Effect.forkScoped(scheduledPoll.pipe(Effect.repeat(Schedule.spaced(POLL_INTERVAL)))); const acquireRetention = Effect.fn("PortDiscovery.retain")(function* () { const wasIdle = yield* Ref.modify(stateRef, (state) => [ diff --git a/apps/server/src/server.ts b/apps/server/src/server.ts index 30f003bf12891..47c4a4c9a20ec 100644 --- a/apps/server/src/server.ts +++ b/apps/server/src/server.ts @@ -506,7 +506,10 @@ const layerVcs = Layer.empty.pipe( const layerCheckpointStore = CheckpointStore.layer.pipe(Layer.provide(layerVcsDriverRegistry)); -const layerPortScanner = PortScanner.layer.pipe(Layer.provide(ProcessRunner.layer)); +const layerPortScanner = PortScanner.layer.pipe( + Layer.provide(ProcessRunner.layer), + Layer.provide(layerBackground), +); const layerTerminal = TerminalManager.layer( ProviderInstanceRegistryHydration.deriveProviderInstanceConfigMap, From da95a04763163dc7ccd213de3a14f3eaefea2dfc Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:51:24 -0800 Subject: [PATCH 903/922] fix(web): right-panel shortcuts work on a new, unsent thread (#35189) --- .../src/shortcuts/chatRouteCommands.test.ts | 33 +++++++++++++++++++ apps/web/src/shortcuts/chatRouteCommands.ts | 11 +++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/apps/web/src/shortcuts/chatRouteCommands.test.ts b/apps/web/src/shortcuts/chatRouteCommands.test.ts index a4c6b53279c84..3979368ff9032 100644 --- a/apps/web/src/shortcuts/chatRouteCommands.test.ts +++ b/apps/web/src/shortcuts/chatRouteCommands.test.ts @@ -3,11 +3,14 @@ import type { AnyRouter } from "@tanstack/react-router"; import { describe, expect, it, vi } from "vite-plus/test"; import * as commandPalette from "../commandPaletteBus"; +import { DraftId, useComposerDraftStore } from "../composerDraftStore"; +import * as previewActions from "../components/preview/previewActionBus"; import * as settings from "../hooks/useSettings"; import * as storage from "../hooks/useLocalStorage"; import * as threadActions from "../lib/chatThreadActions"; import * as entities from "../state/entities"; import * as projectsState from "../state/projects"; +import * as session from "../state/session"; import { Atom } from "effect/reactivity"; import type { Project } from "../types"; import { installChatRouteCommands } from "./chatRouteCommands"; @@ -73,3 +76,33 @@ describe("new thread commands", () => { } }); }); + +describe("preview commands", () => { + it.each([ + { command: "preview.find", action: "find" }, + { command: "preview.refresh", action: "refresh" }, + { command: "preview.focusUrl", action: "focus-url" }, + ] as const)("$command reaches the right panel on a draft thread", ({ command, action }) => { + const draftId = DraftId.make("draft-1"); + useComposerDraftStore + .getState() + .setProjectDraftThreadId( + { environmentId: EnvironmentId.make("local"), projectId: ProjectId.make("active") }, + draftId, + ); + using stack = new DisposableStack(); + stack.defer(() => useComposerDraftStore.getState().clearDraftThread(draftId)); + using _scope = vi.spyOn(session, "readEnvironmentScope").mockReturnValue(true); + using dispatch = vi.spyOn(previewActions, "dispatchPreviewAction").mockImplementation(() => {}); + using register = vi.spyOn(dispatcher, "registerCommands").mockReturnValue(() => {}); + const router = { + state: { matches: [{ routeId: "/_chat/draft/$draftId", params: { draftId } }] }, + } as unknown as AnyRouter; + stack.defer(installChatRouteCommands(router)); + const event = { preventDefault: vi.fn(), stopPropagation: vi.fn() } as unknown as KeyboardEvent; + + register.mock.calls[0]![0][command]!(event); + + expect(dispatch).toHaveBeenCalledWith(action); + }); +}); diff --git a/apps/web/src/shortcuts/chatRouteCommands.ts b/apps/web/src/shortcuts/chatRouteCommands.ts index a08e2fa5a46f4..81c5cc29a2cfb 100644 --- a/apps/web/src/shortcuts/chatRouteCommands.ts +++ b/apps/web/src/shortcuts/chatRouteCommands.ts @@ -55,6 +55,13 @@ export function installChatRouteCommands(router: AnyRouter): () => void { const target = readRouteTarget(); return target?.kind === "server" ? target.threadRef : null; }; + const readRouteEnvironmentId = () => { + const target = readRouteTarget(); + if (!target) return null; + return target.kind === "server" + ? target.threadRef.environmentId + : (useComposerDraftStore.getState().getDraftSession(target.draftId)?.environmentId ?? null); + }; const readPreviewOpen = () => { const threadRef = readRouteThreadRef(); // Store-only on purpose: the URL-aware arbitration lives in ChatView's @@ -114,8 +121,8 @@ export function installChatRouteCommands(router: AnyRouter): () => void { (action: PreviewAction): CommandHandler => (event) => { claim(event); - const threadRef = readRouteThreadRef(); - if (threadRef && canOperatePreview(threadRef.environmentId)) dispatchPreviewAction(action); + const environmentId = readRouteEnvironmentId(); + if (environmentId && canOperatePreview(environmentId)) dispatchPreviewAction(action); }; return registerCommands( From e3c7c082cfecb84e3fae3ebf1512a8a016e3b1ae Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:51:43 -0800 Subject: [PATCH 904/922] fix(desktop): a backend busy right after startup no longer ends in a fatal HTTP 500 screen (#34918) --- .../DesktopLocalEnvironmentAuth.test.ts | 32 +++++++++++++++++++ .../backend/DesktopLocalEnvironmentAuth.ts | 3 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/apps/desktop/src/backend/DesktopLocalEnvironmentAuth.test.ts b/apps/desktop/src/backend/DesktopLocalEnvironmentAuth.test.ts index e82e3afea7303..c15ce3932bb80 100644 --- a/apps/desktop/src/backend/DesktopLocalEnvironmentAuth.test.ts +++ b/apps/desktop/src/backend/DesktopLocalEnvironmentAuth.test.ts @@ -1,11 +1,13 @@ import * as NodeCrypto from "@effect/platform-node/NodeCrypto"; import { assert, describe, it } from "@effect/vitest"; +import * as Clock from "effect/Clock"; import * as Deferred from "effect/Deferred"; import * as Duration from "effect/Duration"; import * as Effect from "effect/Effect"; import * as Fiber from "effect/Fiber"; import * as Layer from "effect/Layer"; import * as Ref from "effect/Ref"; +import * as Result from "effect/Result"; import * as HttpClient from "effect/http/HttpClient"; import * as HttpClientRequest from "effect/http/HttpClientRequest"; import * as HttpClientResponse from "effect/http/HttpClientResponse"; @@ -238,4 +240,34 @@ describe("DesktopLocalEnvironmentAuth", () => { assert.strictEqual(yield* Ref.get(requestCount), 1); }).pipe(Effect.provide(TestClock.layer())), ); + + it.effect("waits through a backend that stalls for 30 seconds after it is ready", () => + Effect.gen(function* () { + const requestCount = yield* Ref.make(0); + const layerHttpClient = Layer.succeed( + HttpClient.HttpClient, + HttpClient.make((request) => + Effect.gen(function* () { + yield* Ref.update(requestCount, (count) => count + 1); + const now = yield* Clock.currentTimeMillis; + return now < 30_000 ? yield* Effect.never : tokenResponse(request); + }), + ), + ); + const auth = yield* DesktopLocalEnvironmentAuth.DesktopLocalEnvironmentAuth.pipe( + Effect.provide( + DesktopLocalEnvironmentAuth.layer.pipe( + Layer.provide(Layer.mergeAll(layerPool, layerHttpClient, NodeCrypto.layerMac)), + ), + ), + ); + + const fiber = yield* auth.getBearerToken.pipe(Effect.result, Effect.forkChild); + yield* TestClock.adjust(Duration.seconds(45)); + const result = yield* Fiber.join(fiber); + + assert.isTrue(Result.isSuccess(result)); + assert.strictEqual(yield* Ref.get(requestCount), 4); + }).pipe(Effect.provide(TestClock.layer())), + ); }); diff --git a/apps/desktop/src/backend/DesktopLocalEnvironmentAuth.ts b/apps/desktop/src/backend/DesktopLocalEnvironmentAuth.ts index 6c7d24623d40f..89aa3cd2a678c 100644 --- a/apps/desktop/src/backend/DesktopLocalEnvironmentAuth.ts +++ b/apps/desktop/src/backend/DesktopLocalEnvironmentAuth.ts @@ -17,7 +17,8 @@ import * as HttpClient from "effect/http/HttpClient"; import * as DesktopBackendPool from "./DesktopBackendPool.ts"; -const BOOTSTRAP_TRANSIENT_RETRY_TIMEOUT = Duration.seconds(15); +// Each /oauth/token attempt may take 10 s, so a backend busy after ready needs several attempts. +const BOOTSTRAP_TRANSIENT_RETRY_TIMEOUT = Duration.seconds(60); const BOOTSTRAP_TRANSIENT_RETRY_INTERVAL = Duration.millis(500); const TRANSIENT_BOOTSTRAP_STATUS_CODES = new Set([502, 503, 504]); From 3cd8b0537101d2d2bfe23f378b73984a816a9b5f Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:52:00 -0800 Subject: [PATCH 905/922] fix(onepassword): a failed batch read no longer outlasts the 45-second bound (#35937) Co-authored-by: Claude Opus 5.5 --- .../src/server/driver.test.ts | 29 +++++++++++- .../src/server/driver.ts | 44 +++++++++++-------- 2 files changed, 54 insertions(+), 19 deletions(-) diff --git a/packages/secret-provider-onepassword/src/server/driver.test.ts b/packages/secret-provider-onepassword/src/server/driver.test.ts index 62675b1d0cbfb..e5bf73a74e196 100644 --- a/packages/secret-provider-onepassword/src/server/driver.test.ts +++ b/packages/secret-provider-onepassword/src/server/driver.test.ts @@ -2,9 +2,12 @@ import * as NodeCrypto from "@effect/platform-node/NodeCrypto"; import * as NodeFileSystem from "@effect/platform-node/NodeFileSystem"; import { assert, describe, it } from "@effect/vitest"; +import * as Clock from "effect/Clock"; import * as Deferred from "effect/Deferred"; +import type * as Duration from "effect/Duration"; import * as Effect from "effect/Effect"; import * as Fiber from "effect/Fiber"; +import * as FileSystem from "effect/FileSystem"; import * as Layer from "effect/Layer"; import * as Sink from "effect/Sink"; import * as Stream from "effect/Stream"; @@ -23,6 +26,7 @@ type OpResult = { readonly stderr?: string; readonly code?: number; readonly hang?: boolean; + readonly delay?: Duration.Input; }; function fakeOp(answer: (args: ReadonlyArray) => OpResult) { @@ -41,7 +45,9 @@ function fakeOp(answer: (args: ReadonlyArray) => OpResult) { pid: ChildProcessSpawner.ProcessId(1), exitCode: result.hang ? Effect.never - : Effect.succeed(ChildProcessSpawner.ExitCode(result.code ?? 0)), + : Effect.sleep(result.delay ?? 0).pipe( + Effect.as(ChildProcessSpawner.ExitCode(result.code ?? 0)), + ), isRunning: Effect.succeed(false), kill: () => Effect.void, unref: Effect.succeed(Effect.void), @@ -152,4 +158,25 @@ describe("1Password driver", () => { assert.strictEqual(op.invocations.length, 1); }).pipe(Effect.provide(op.layer)); }); + + it.effect("gives up within the read timeout when a slow batch fails", () => { + const op = fakeOp((args) => + args.includes("inject") + ? { code: 1, delay: "40 seconds" } + : { stdout: "sk-a", delay: "40 seconds" }, + ); + // Keeps the temp template off real disk I/O so the virtual clock alone drives the read. + const templateFile = FileSystem.layerNoop({ + makeTempFileScoped: () => Effect.succeed("/template"), + writeFileString: () => Effect.void, + }); + return Effect.gen(function* () { + const reading = yield* driver + .read({ account }, ["op://Private/OpenAI/credential", "op://Private/Anthropic/key"]) + .pipe(Effect.andThen(Clock.currentTimeMillis), Effect.forkChild); + yield* TestClock.adjust("5 minutes"); + + assert.isAtMost(yield* Fiber.join(reading), 45_000); + }).pipe(Effect.provide(Layer.merge(op.layer, templateFile))); + }); }); diff --git a/packages/secret-provider-onepassword/src/server/driver.ts b/packages/secret-provider-onepassword/src/server/driver.ts index 8d309bbbd7366..c67494da667cd 100644 --- a/packages/secret-provider-onepassword/src/server/driver.ts +++ b/packages/secret-provider-onepassword/src/server/driver.ts @@ -76,21 +76,14 @@ const readTogether = Effect.fn("OnePasswordDriver.readTogether")(function* ( return values.map(nonEmpty); }, Effect.scoped); -/** `None` when 1Password did not answer in time; a failed run reads as `Some(undefined)`. */ -const bounded = ( +const recover = ( stage: "read" | "inject", effect: Effect.Effect, ) => effect.pipe( - Effect.timeoutOption(READ_TIMEOUT), - Effect.tap((outcome) => - Option.isNone(outcome) - ? Effect.logWarning("1Password did not answer in time", { stage }) - : Effect.void, - ), Effect.catch((error) => Effect.logWarning("Could not run 1Password", { stage, error: error._tag }).pipe( - Effect.as(Option.some(undefined)), + Effect.as(undefined), ), ), ); @@ -99,14 +92,29 @@ export const driver = defineSecretProviderDriver({ kind: definition.kind, definition, read: Effect.fn("OnePasswordDriver.read")(function* ({ account }, references) { - if (references.length > 1) { - const together = yield* bounded("inject", readTogether(account, references)); - // Reading one by one after a timeout would only wait that long again for each reference. - if (Option.isNone(together)) return references.map(() => undefined); - if (together.value !== undefined) return together.value; - } - return yield* Effect.forEach(references, (reference) => - bounded("read", readOne(account, reference)).pipe(Effect.map(Option.getOrUndefined)), - ); + // One deadline covers the batch and the fallback; a reference not read by then is unreadable. + const values: Array = references.map(() => undefined); + const outcome = yield* Effect.gen(function* () { + if (references.length > 1) { + const together = yield* recover("inject", readTogether(account, references)); + if (together !== undefined) return together; + } + yield* Effect.forEach( + references, + (reference, index) => + recover("read", readOne(account, reference)).pipe( + Effect.map((value) => { + values[index] = value; + }), + ), + { discard: true }, + ); + return values; + }).pipe(Effect.timeoutOption(READ_TIMEOUT)); + if (Option.isSome(outcome)) return outcome.value; + yield* Effect.logWarning("1Password did not answer in time", { + references: references.length, + }); + return values; }), }); From d5726cb88c3e80548de5d4e2f4cec0ebaa224760 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:52:17 -0800 Subject: [PATCH 906/922] fix(server): agents get no device tools or instructions while the Device hub is off (#32542) Co-authored-by: Claude Opus 5.5 --- apps/server/src/mcp/McpDeviceToolkit.test.ts | 2 +- .../src/mcp/toolkits/device/handlers.ts | 2 +- .../ProviderSessionManager.test.ts | 47 +++++++++++++++++++ .../ProviderSessionManager.ts | 7 ++- 4 files changed, 54 insertions(+), 4 deletions(-) diff --git a/apps/server/src/mcp/McpDeviceToolkit.test.ts b/apps/server/src/mcp/McpDeviceToolkit.test.ts index 91c33029be305..11a4e9ca589e5 100644 --- a/apps/server/src/mcp/McpDeviceToolkit.test.ts +++ b/apps/server/src/mcp/McpDeviceToolkit.test.ts @@ -235,7 +235,7 @@ it.effect("registers the device tools and returns the screenshot as image conten expect(denied.content).toEqual([ { type: "text", - text: "Agent device access is turned off for this environment. Ask the user to turn on Agent device access in Settings > Integrations > Devices; it applies when the agent session next starts, such as in a new thread.", + text: "Agent device access is turned off for this environment. Ask the user to turn on the Device hub and Agent device access in Settings > Integrations > Devices; it applies when the agent session next starts, such as in a new thread.", }, ]); }), diff --git a/apps/server/src/mcp/toolkits/device/handlers.ts b/apps/server/src/mcp/toolkits/device/handlers.ts index 382beed7284ac..099a9bae9e2d3 100644 --- a/apps/server/src/mcp/toolkits/device/handlers.ts +++ b/apps/server/src/mcp/toolkits/device/handlers.ts @@ -89,7 +89,7 @@ const requireDeviceAccess = McpInvocationContext.requireThreadMcpCapability("dev () => new DeviceToolUnavailableError({ reason: - "Agent device access is turned off for this environment. Ask the user to turn on Agent device access in Settings > Integrations > Devices; it applies when the agent session next starts, such as in a new thread.", + "Agent device access is turned off for this environment. Ask the user to turn on the Device hub and Agent device access in Settings > Integrations > Devices; it applies when the agent session next starts, such as in a new thread.", }), ), ); diff --git a/apps/server/src/orchestration-v2/ProviderSessionManager.test.ts b/apps/server/src/orchestration-v2/ProviderSessionManager.test.ts index 09441e2659166..1ed6361549202 100644 --- a/apps/server/src/orchestration-v2/ProviderSessionManager.test.ts +++ b/apps/server/src/orchestration-v2/ProviderSessionManager.test.ts @@ -813,6 +813,8 @@ function runBrowserAccessScenario(input: { readonly enableAgentBrowserAccess: boolean; readonly projectOverride: boolean; readonly deviceOverride?: boolean; + readonly enableAgentDeviceAccess?: boolean; + readonly enableDeviceSupport?: boolean; readonly createThread?: boolean; readonly projectExists?: boolean; readonly delegatedBy?: ThreadId; @@ -867,6 +869,12 @@ function runBrowserAccessScenario(input: { projectServiceLayer: layerProjectService, serverSettingsLayer: ServerSettings.layerTest({ enableAgentBrowserAccess: input.enableAgentBrowserAccess, + ...(input.enableAgentDeviceAccess === undefined + ? {} + : { enableAgentDeviceAccess: input.enableAgentDeviceAccess }), + ...(input.enableDeviceSupport === undefined + ? {} + : { enableDeviceSupport: input.enableDeviceSupport }), projectSettingsOverrides: { [projectId]: { enableAgentBrowserAccess: input.projectOverride, @@ -5569,6 +5577,7 @@ it.effect( enableAgentBrowserAccess: false, projectOverride: false, deviceOverride: true, + enableDeviceSupport: true, }); assert.isTrue(enabled?.capabilities?.has("device")); assert.isFalse(enabled?.browserToolsAvailable); @@ -5576,12 +5585,49 @@ it.effect( enableAgentBrowserAccess: false, projectOverride: false, deviceOverride: true, + enableDeviceSupport: true, projectExists: false, }); assert.isFalse(denied?.capabilities?.has("device")); }), ); +it.effect("ProviderSessionManagerV2 withholds device tools while device support is off", () => + Effect.gen(function* () { + const global = yield* runBrowserAccessScenario({ + enableAgentBrowserAccess: false, + projectOverride: false, + enableAgentDeviceAccess: true, + enableDeviceSupport: false, + }); + assert.isFalse( + global?.capabilities?.has("device"), + "global agent device access granted device tools with device support off", + ); + const project = yield* runBrowserAccessScenario({ + enableAgentBrowserAccess: false, + projectOverride: false, + deviceOverride: true, + enableDeviceSupport: false, + }); + assert.isFalse( + project?.capabilities?.has("device"), + "project agent device access granted device tools with device support off", + ); + const missingProject = yield* runBrowserAccessScenario({ + enableAgentBrowserAccess: false, + projectOverride: false, + enableAgentDeviceAccess: true, + enableDeviceSupport: false, + projectExists: false, + }); + assert.isFalse( + missingProject?.capabilities?.has("device"), + "agent device access granted device tools with device support off for a missing project", + ); + }), +); + // Device instructions reach delegated children only because their own sessions hold `device`. it.effect("ProviderSessionManagerV2 gives a delegated child its project's device access", () => Effect.gen(function* () { @@ -5589,6 +5635,7 @@ it.effect("ProviderSessionManagerV2 gives a delegated child its project's device enableAgentBrowserAccess: false, projectOverride: false, deviceOverride: true, + enableDeviceSupport: true, delegatedBy: ThreadId.make("thread-provider-session-manager-parent"), }); assert.isTrue(child?.capabilities?.has("device")); diff --git a/apps/server/src/orchestration-v2/ProviderSessionManager.ts b/apps/server/src/orchestration-v2/ProviderSessionManager.ts index ca54c14b2cb95..2e9adb9c8a54c 100644 --- a/apps/server/src/orchestration-v2/ProviderSessionManager.ts +++ b/apps/server/src/orchestration-v2/ProviderSessionManager.ts @@ -469,13 +469,16 @@ export const layerWithOptions = ( if (Option.isNone(project)) return { browser: browserOverridden ? false : settings.enableAgentBrowserAccess, - device: deviceOverridden ? false : settings.enableAgentDeviceAccess, + device: + settings.enableDeviceSupport && + !deviceOverridden && + settings.enableAgentDeviceAccess, }; } const effective = resolveProjectSettings(settings, thread.projectId).settings; return { browser: effective.enableAgentBrowserAccess, - device: effective.enableAgentDeviceAccess, + device: settings.enableDeviceSupport && effective.enableAgentDeviceAccess, }; }).pipe( Effect.catch((cause) => From fa5fde4bea16c5abc23a92bdba8dc9ba2c792548 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:52:43 -0800 Subject: [PATCH 907/922] fix(server): clients paired over Tailscale Serve keep their own address (#35559) --- apps/server/src/auth/utils.test.ts | 23 +++++++++++++++++++++++ apps/server/src/auth/utils.ts | 15 ++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/apps/server/src/auth/utils.test.ts b/apps/server/src/auth/utils.test.ts index 30784ab33ceb0..f9c228aeb418b 100644 --- a/apps/server/src/auth/utils.test.ts +++ b/apps/server/src/auth/utils.test.ts @@ -24,6 +24,29 @@ describe("deriveAuthClientMetadata", () => { }); }); + it("records the forwarded client address of a request proxied by Tailscale Serve", () => { + const metadata = deriveAuthClientMetadata({ + request: { + headers: { + "x-forwarded-for": "100.64.0.2", + "x-forwarded-host": "host-a.tailnet-name.ts.net", + "x-forwarded-proto": "https", + }, + source: { remoteAddress: "127.0.0.1" }, + } as never, + }); + + expect(metadata.ipAddress).toBe("100.64.0.2"); + + const direct = deriveAuthClientMetadata({ + request: { + headers: { "x-forwarded-for": "100.64.0.2" }, + source: { remoteAddress: "192.168.1.20" }, + } as never, + }); + expect(direct.ipAddress).toBe("192.168.1.20"); + }); + it.each([ [ "Edge on Android", diff --git a/apps/server/src/auth/utils.ts b/apps/server/src/auth/utils.ts index c1b8dc92fbe00..12c27cc1fdf57 100644 --- a/apps/server/src/auth/utils.ts +++ b/apps/server/src/auth/utils.ts @@ -166,12 +166,25 @@ function readRemoteAddressFromSource(source: unknown): string | undefined { return normalizeIpAddress(candidate.socket?.remoteAddress ?? candidate.remoteAddress); } +const isLoopbackIpAddress = (address: string): boolean => + (NodeNet.isIPv4(address) && address.startsWith("127.")) || address === "::1"; + +// A loopback peer is a local reverse proxy (Tailscale Serve); trust only the entry it appended. +function resolveClientIpAddress(request: HttpServerRequest.HttpServerRequest): string | undefined { + const peer = readRemoteAddressFromSource(request.source); + if (!peer || !isLoopbackIpAddress(peer)) { + return peer; + } + const forwarded = normalizeIpAddress(request.headers["x-forwarded-for"]?.split(",").at(-1)); + return forwarded && NodeNet.isIP(forwarded) !== 0 ? forwarded : peer; +} + export function deriveAuthClientMetadata(input: { readonly request: HttpServerRequest.HttpServerRequest; readonly presented?: AuthClientPresentationMetadata; }): AuthClientMetadata { const userAgent = normalizeNonEmptyString(input.request.headers["user-agent"]); - const ipAddress = readRemoteAddressFromSource(input.request.source); + const ipAddress = resolveClientIpAddress(input.request); const os = input.presented?.os ?? inferOs(userAgent); const browser = inferBrowser(userAgent); return { From 3947e223515e3a15dc72011856fff9bad47a54c5 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:52:58 -0800 Subject: [PATCH 908/922] fix(server): HTML previews load relative video and audio files (#36199) Co-authored-by: Claude Opus 5.5 --- apps/server/src/assets/AssetAccess.test.ts | 9 +++++++++ apps/server/src/assets/AssetAccess.ts | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/apps/server/src/assets/AssetAccess.test.ts b/apps/server/src/assets/AssetAccess.test.ts index 8f050c3748c56..d137305317327 100644 --- a/apps/server/src/assets/AssetAccess.test.ts +++ b/apps/server/src/assets/AssetAccess.test.ts @@ -1012,6 +1012,15 @@ describe("AssetAccess", () => { kind: "file", path: canonicalCssPath, }); + yield* fileSystem.makeDirectory(path.join(root, "clips")); + for (const mediaName of ["clips/clip.mp4", "clips/clip.webm", "clips/clip.mp3"]) { + const mediaPath = path.join(root, mediaName); + yield* fileSystem.writeFileString(mediaPath, "media bytes"); + expect(yield* resolveAsset(token, mediaName)).toMatchObject({ + kind: "file", + path: yield* fileSystem.realPath(mediaPath), + }); + } for (const extension of ["otf", "ttf", "woff", "woff2"]) { const fontName = `preview.${extension}`; const fontPath = path.join(root, fontName); diff --git a/apps/server/src/assets/AssetAccess.ts b/apps/server/src/assets/AssetAccess.ts index b1c1b28b626cd..5674372bee1a9 100644 --- a/apps/server/src/assets/AssetAccess.ts +++ b/apps/server/src/assets/AssetAccess.ts @@ -94,6 +94,18 @@ const PREVIEW_ASSET_EXTENSIONS = new Set([ ".png", ".svg", ".webp", + ".m4v", + ".mp4", + ".ogv", + ".webm", + ".aac", + ".flac", + ".m4a", + ".mp3", + ".oga", + ".ogg", + ".opus", + ".wav", ".css", ".js", ".mjs", From dc7ea2c1b0dcc320d7b7e901ce6982cd9f3ecab2 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:53:15 -0800 Subject: [PATCH 909/922] fix(server): a linked launch above the link's access names the link, not the parent mode (#27334) Co-authored-by: Claude Opus 5.5 --- apps/server/src/peer/PeerForwarding.test.ts | 35 ++++++++++++++++++ apps/server/src/peer/PeerForwarding.ts | 39 +++++++++++++++++---- 2 files changed, 68 insertions(+), 6 deletions(-) diff --git a/apps/server/src/peer/PeerForwarding.test.ts b/apps/server/src/peer/PeerForwarding.test.ts index baae43ed7f768..5f53bfdf5b9dd 100644 --- a/apps/server/src/peer/PeerForwarding.test.ts +++ b/apps/server/src/peer/PeerForwarding.test.ts @@ -14,10 +14,12 @@ import { } from "@t3tools/contracts"; import { expect, it } from "@effect/vitest"; import * as Context from "effect/Context"; +import * as Duration from "effect/Duration"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import * as Option from "effect/Option"; import * as Ref from "effect/Ref"; +import * as TestClock from "effect/testing/TestClock"; import { McpSchema, McpServer } from "effect/ai"; import * as ServerConfig from "../config.ts"; @@ -705,3 +707,36 @@ it.effect("refuses what a linked environment cannot take before anything leaves" }), ).pipe(Effect.provide(NodeHttpServer.layerTest)), ); + +it.effect("refuses a launch there above the link's access, naming the link", () => + Effect.scoped( + Effect.gen(function* () { + const seen = yield* Ref.make(nothingSeen); + const linkSession = yield* Ref.make(""); + const b = yield* serveBox(seen, linkSession); + const a = yield* makeLaptop; + yield* linkTo(a.links, b, "auto"); + yield* Ref.set(linkSession, (yield* b.linkedSessions)[0]!.sessionId); + + // A full-access agent here asks for more than the link allows there. + const launchAboveLink = a.call("thread:laptop-full", "t3_thread_launch", { + environmentId: box.environmentId, + projectId: boxProject, + title: "Run the suite there", + modelSelection: { instanceId: ProviderInstanceId.make("codex"), model: "gpt-5" }, + message: "Run the suite.", + runtimeMode: "full-access", + }); + const { message } = failureOf(yield* launchAboveLink); + expect(message).toContain('"Box"'); + expect(message).toContain("auto"); + expect(message).toContain("full-access"); + expect(message).not.toContain("parent mode"); + expect((yield* Ref.get(seen)).launches).toEqual([]); + + // Once the link has expired, that is what the agent needs to hear. + yield* TestClock.adjust(Duration.days(31)); + expect(failureOf(yield* launchAboveLink).message).toContain("expired"); + }), + ).pipe(Effect.provide(NodeHttpServer.layerTest)), +); diff --git a/apps/server/src/peer/PeerForwarding.ts b/apps/server/src/peer/PeerForwarding.ts index f6fdb40beede0..080f701c45cb2 100644 --- a/apps/server/src/peer/PeerForwarding.ts +++ b/apps/server/src/peer/PeerForwarding.ts @@ -8,6 +8,8 @@ import { OrchestratorMcpThreadReadResult, OrchestratorMcpThreadWaitInput, OrchestratorMcpThreadWaitResult, + type PeerLinkError, + RuntimeMode, } from "@t3tools/contracts"; import * as Context from "effect/Context"; import * as Digest from "effect/crypto/Digest"; @@ -15,9 +17,11 @@ import * as DateTime from "effect/DateTime"; import * as Effect from "effect/Effect"; import * as Hex from "effect/encoding/Hex"; import * as Layer from "effect/Layer"; +import * as Option from "effect/Option"; import * as Schema from "effect/Schema"; import type * as Tool from "effect/ai/Tool"; +import { runtimeModeRank } from "../mcp/delegatedTaskModes.ts"; import { assertNotLinked } from "../mcp/linkOrigin.ts"; import * as McpInvocationContext from "../mcp/McpInvocationContext.ts"; import { readCaller, unavailable } from "../mcp/threadAccess.ts"; @@ -82,6 +86,11 @@ export const linkedEnvironmentsOff = new OrchestratorMcpFailure({ "Linked environments is off on this machine, so no tool can act on another machine. Leave out environmentId to work here; the user can turn it on in Settings → Labs.", }); +const isRuntimeMode = Schema.is(RuntimeMode); + +const linkStorageFailure = (error: PeerLinkError) => + new OrchestratorMcpFailure({ code: "orchestration_error", message: error.message }); + /** The linked environment a call names, or nothing when it names this one. */ export const remoteTarget = (scope: Scope, environmentId: EnvironmentId | undefined) => environmentId === scope.environmentId ? undefined : environmentId; @@ -116,6 +125,28 @@ const make = Effect.gen(function* () { Effect.orDie, ); + /** + * The linked environment refuses a mode above the link's access too, but as + * "broader than parent mode", which misleads when the parent here is broader. + * A read-only link refuses the launch there with its own capability error, + * and an expired one is left to say it expired. + */ + const assertWithinLinkAccess = Effect.fn("PeerForwarding.assertWithinLinkAccess")(function* ( + environmentId: EnvironmentId, + requested: unknown, + ) { + if (!isRuntimeMode(requested)) return; + const link = yield* links.get(environmentId).pipe(Effect.mapError(linkStorageFailure)); + if (Option.isNone(link)) return; + if (DateTime.isLessThanOrEqualTo(link.value.expiresAt, yield* DateTime.now)) return; + const { label, access } = link.value; + if (access === "read-only" || runtimeModeRank(requested) <= runtimeModeRank(access)) return; + return yield* new OrchestratorMcpFailure({ + code: "runtime_mode_escalation_denied", + message: `Linked environment "${label}" was linked with ${access} access, so work there cannot run in ${requested}. Omit runtimeMode to run it at a mode up to ${access}, or link it again with broader access.`, + }); + }); + /** Tool and contract schemas are plain data: they encode and decode without services. */ const forward = Effect.fn("PeerForwarding.forward")(function* ( scope: Scope, @@ -130,6 +161,7 @@ const make = Effect.gen(function* () { params, ).pipe(Effect.mapError(unavailable))) as Record; const { environmentId: _target, ...args } = encoded; + yield* assertWithinLinkAccess(environmentId, args.runtimeMode); // A pending upload lives here, so it cannot go with the call. if (Array.isArray(args.attachments) && args.attachments.length > 0) { return yield* new OrchestratorMcpFailure({ @@ -230,12 +262,7 @@ const make = Effect.gen(function* () { function* (scope) { yield* forwardingCaller(scope); yield* requireEnabled; - const listed = yield* links.list.pipe( - Effect.mapError( - (error) => - new OrchestratorMcpFailure({ code: "orchestration_error", message: error.message }), - ), - ); + const listed = yield* links.list.pipe(Effect.mapError(linkStorageFailure)); return { environmentId: scope.environmentId, links: listed.map((link) => ({ From bf8fd416a2b3698adad5670dd6cdf21e34a35c63 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:53:32 -0800 Subject: [PATCH 910/922] fix(server): Claude append launch text may start with two hyphens (#35598) --- .../Adapters/ClaudeAdapterV2.test.ts | 30 +++++++++++++++++++ .../Adapters/ClaudeAdapterV2.ts | 12 ++++++-- packages/shared/src/cliArgs.test.ts | 8 +++++ packages/shared/src/cliArgs.ts | 5 +++- 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts index b416bedc88601..421d82b157dd1 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts @@ -1256,6 +1256,36 @@ describe("ClaudeAdapterV2 append-system-prompt-file launch argument", () => { const appendSystemPrompt = (options: ClaudeAdapterV2.ClaudeAgentSdkQueryOptions | undefined) => (options?.systemPrompt as { readonly append?: string } | undefined)?.append; + // regression: #35594 append text starting with "--" was read as a missing value + it.effect("sends append launch text that starts with two hyphens to Claude", () => + Effect.scoped( + Effect.gen(function* () { + const fileSystem = yield* FileSystem.FileSystem; + const cwd = yield* fileSystem.makeTempDirectoryScoped({ prefix: "t3-claude-append-cwd-" }); + const plain = yield* startTurnWithLaunchArgs("", cwd); + const { exit, opened } = yield* startTurnWithLaunchArgs( + '--append-system-prompt "-- Always answer in English"', + cwd, + ); + assert.isTrue(Exit.isSuccess(exit)); + assert.lengthOf(opened, 1); + assert.equal( + appendSystemPrompt(opened[0]), + `${appendSystemPrompt(plain.opened[0])}\n\n-- Always answer in English`, + ); + }).pipe( + Effect.provide( + Layer.mergeAll( + IdAllocator.layer, + McpProviderSessions.layer, + NodeServices.layer, + NodeCrypto.layer, + ), + ), + ), + ), + ); + it.effect("sends append launch arguments to Claude after the T3 instructions", () => Effect.gen(function* () { const fileSystem = yield* FileSystem.FileSystem; diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts index 8f7185eed3004..30cf9c77314c5 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts @@ -355,6 +355,9 @@ function mergeClaudeStreamUsage( }; } export const CLAUDE_DEFAULT_INSTANCE_ID = defaultInstanceIdForDriver(CLAUDE_PROVIDER); +// The Claude CLI takes the next token as this flag's value even when it starts with `--`. +const claudeLaunchArgParseOptions = { valueFlags: ["append-system-prompt"] }; + const CLAUDE_SCRIPT_EXTENSIONS = [".js", ".mjs", ".tsx", ".ts", ".jsx"]; // The SDK has no control-request deadline; the CLI waits up to 30 s per MCP server. const CLAUDE_MCP_REGISTRATION_TIMEOUT = "90 seconds"; @@ -2150,7 +2153,9 @@ export function makeClaudeQueryOptions(input: { // The SDK replaces this flag with options.settings, so it arrives read as sdkSettings. settings: _launchArgSettings, ...extraArgs - } = input.settings === undefined ? {} : parseCliArgs(input.settings.launchArgs).flags; + } = input.settings === undefined + ? {} + : parseCliArgs(input.settings.launchArgs, claudeLaunchArgParseOptions).flags; // Claude Code overwrites its CLI append text with the SDK's initialize // appendSystemPrompt, so launch-argument text has to travel in that value. // The CLI puts file text before inline text and trims one trailing newline. @@ -2320,7 +2325,7 @@ const readClaudeAppendSystemPromptFile = Effect.fnUntraced(function* (input: { readonly path: Path.Path; }) { if (input.settings === undefined) return undefined; - const flags = parseCliArgs(input.settings.launchArgs).flags; + const flags = parseCliArgs(input.settings.launchArgs, claudeLaunchArgParseOptions).flags; // parseCliArgs gives null for a flag with no following value. An explicit // `--append-system-prompt ""` is a value the CLI accepts, so it stays. if (flags["append-system-prompt"] === null) { @@ -2365,7 +2370,8 @@ const readClaudeLaunchArgSettings = Effect.fn("ClaudeAdapterV2.readLaunchArgSett readonly path: Path.Path; }) { if (input.settings === undefined) return undefined; - const value = parseCliArgs(input.settings.launchArgs).flags.settings; + const value = parseCliArgs(input.settings.launchArgs, claudeLaunchArgParseOptions).flags + .settings; if (value === undefined) return undefined; const trimmed = value?.trim() ?? ""; if (trimmed.length === 0) return yield* new ClaudeSettingsLaunchArgError({}); diff --git a/packages/shared/src/cliArgs.test.ts b/packages/shared/src/cliArgs.test.ts index 465feb3b049fc..62a4b3190edd9 100644 --- a/packages/shared/src/cliArgs.test.ts +++ b/packages/shared/src/cliArgs.test.ts @@ -107,6 +107,14 @@ describe("parseCliArgs", () => { }); }); + it("value flag consumes a next token that starts with --", () => { + expect( + parseCliArgs(["--append-system-prompt", "-- text", "--chrome"], { + valueFlags: ["append-system-prompt"], + }), + ).toEqual({ flags: { "append-system-prompt": "-- text", chrome: null }, positionals: [] }); + }); + it("boolean flag does not consume next token as value", () => { expect(parseCliArgs(["--github-output", "1.2.3"], { booleanFlags: ["github-output"] })).toEqual( { diff --git a/packages/shared/src/cliArgs.ts b/packages/shared/src/cliArgs.ts index cfcda09e88a04..5b064aae8e3b0 100644 --- a/packages/shared/src/cliArgs.ts +++ b/packages/shared/src/cliArgs.ts @@ -5,6 +5,8 @@ export interface ParsedCliArgs { export interface ParseCliArgsOptions { readonly booleanFlags?: readonly string[]; + /** Flags that always take the next token as their value, even one starting with `--`. */ + readonly valueFlags?: readonly string[]; } export function tokenizeCliArgs(args?: string): ReadonlyArray { @@ -70,6 +72,7 @@ export function parseCliArgs( ): ParsedCliArgs { const tokens = typeof args === "string" ? tokenizeCliArgs(args) : Array.from(args); const booleanSet = options?.booleanFlags ? new Set(options.booleanFlags) : undefined; + const valueSet = options?.valueFlags ? new Set(options.valueFlags) : undefined; const flags: Record = {}; const positionals: string[] = []; @@ -97,7 +100,7 @@ export function parseCliArgs( } const next = tokens[i + 1]; - if (next !== undefined && !next.startsWith("--")) { + if (next !== undefined && (valueSet?.has(rest) || !next.startsWith("--"))) { flags[rest] = next; i++; } else { From 64a481c2af8e65b95679af7707726e1e59ce8d75 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:53:49 -0800 Subject: [PATCH 911/922] fix(cursor): text generation retries without the sandbox when send rejects it (#34844) --- .../src/server/textGeneration.test.ts | 17 ++++++++++++----- .../src/server/textGeneration.ts | 16 ++++++++++------ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/packages/provider-cursor/src/server/textGeneration.test.ts b/packages/provider-cursor/src/server/textGeneration.test.ts index a4b3c039cf92e..4ca9d56def34a 100644 --- a/packages/provider-cursor/src/server/textGeneration.test.ts +++ b/packages/provider-cursor/src/server/textGeneration.test.ts @@ -108,11 +108,18 @@ describe("CursorTextGeneration", () => { it.effect("continues in the temp directory when the SDK cannot sandbox", () => Effect.gen(function* () { - cursorSdkMock.create.mockImplementationOnce(async () => { - throw new Error( - "Local SDK sandboxing was requested, but sandboxing is not supported in this environment. Disable local.sandboxOptions.enabled or remove ~/.cursor/sandbox.json to run without sandboxing.", - ); - }); + // The SDK checks sandbox support lazily, so create succeeds and send rejects. + cursorSdkMock.create.mockImplementationOnce(async () => ({ + close: cursorSdkMock.close, + [Symbol.asyncDispose]: async () => { + cursorSdkMock.close(); + }, + send: async () => { + throw new Error( + "Local SDK sandboxing was requested, but sandboxing is not supported in this environment. Disable local.sandboxOptions.enabled or remove ~/.cursor/sandbox.json to run without sandboxing.", + ); + }, + })); const textGeneration = yield* makeCursorTextGeneration(cursorSettings, { CURSOR_API_KEY: "test-cursor-key", }); diff --git a/packages/provider-cursor/src/server/textGeneration.ts b/packages/provider-cursor/src/server/textGeneration.ts index 82982dfabbb5f..ba581bef38c1d 100644 --- a/packages/provider-cursor/src/server/textGeneration.ts +++ b/packages/provider-cursor/src/server/textGeneration.ts @@ -152,12 +152,11 @@ export const makeCursorTextGeneration = Effect.fn("makeCursorTextGeneration")(fu catch: sdkFailure("Cursor SDK agent could not be created."), }); - const request = Effect.gen(function* () { - // Empty cwd and setting sources isolate the run from user projects even if sandboxing fails. + const runPrompt = Effect.fn("CursorTextGeneration.runPrompt")(function* ( + sandboxEnabled: boolean, + ) { const agent = yield* Effect.acquireRelease( - createCursorAgent(true).pipe( - Effect.catchIf(cursorSandboxUnsupported, () => createCursorAgent(false)), - ), + createCursorAgent(sandboxEnabled), (agent) => Effect.tryPromise({ try: () => agent[Symbol.asyncDispose](), @@ -185,7 +184,12 @@ export const makeCursorTextGeneration = Effect.fn("makeCursorTextGeneration")(fu try: () => run.wait(), catch: sdkFailure("Cursor SDK run failed."), }); - }).pipe(Effect.scoped); + }, Effect.scoped); + // The SDK may reject sandboxing in create or lazily in send. Empty cwd and setting + // sources isolate the unsandboxed retry from user projects. + const request = runPrompt(true).pipe( + Effect.catchIf(cursorSandboxUnsupported, () => runPrompt(false)), + ); const promptResult = yield* request.pipe( Effect.timeoutOption(CURSOR_TIMEOUT_MS), Effect.flatMap( From 5ee4fd4f25a5fa009ccf173191eaed507e42e9f6 Mon Sep 17 00:00:00 2001 From: Sudharsan <126713117+Sidreyas@users.noreply.github.com> Date: Sun, 15 Nov 2026 10:24:00 +0530 Subject: [PATCH 912/922] fix(server): resolve Claude WinGet launchers on Windows (#32138) Co-authored-by: Julius Marminge --- .../src/provider/Drivers/ClaudeExecutable.test.ts | 13 +++++++++++++ .../server/src/provider/Drivers/ClaudeExecutable.ts | 10 +++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/apps/server/src/provider/Drivers/ClaudeExecutable.test.ts b/apps/server/src/provider/Drivers/ClaudeExecutable.test.ts index e1319caf69b16..b6dc61470e497 100644 --- a/apps/server/src/provider/Drivers/ClaudeExecutable.test.ts +++ b/apps/server/src/provider/Drivers/ClaudeExecutable.test.ts @@ -9,6 +9,9 @@ const NPM_DIR = "C:\\Users\\dev\\AppData\\Roaming\\npm"; const NPM_SHIM = `${NPM_DIR}\\claude.cmd`; const NPM_PACKAGE_EXE = `${NPM_DIR}\\node_modules\\@anthropic-ai\\claude-code\\bin\\claude.exe`; const NPM_PACKAGE_CLI = `${NPM_DIR}\\node_modules\\@anthropic-ai\\claude-code\\cli.js`; +const WINGET_DIR = "C:\\Users\\dev\\AppData\\Local\\Microsoft\\WinGet"; +const WINGET_SHIM = `${WINGET_DIR}\\Links\\claude.cmd`; +const WINGET_EXE = `${WINGET_DIR}\\Packages\\Anthropic.ClaudeCode_Microsoft.Winget.Source_8wekyb3d8bbwe\\claude.exe`; function withWindowsResolution(input: { readonly resolvedCommand: string | undefined; @@ -37,6 +40,16 @@ describe("resolveClaudeSdkExecutablePath", () => { }), ); + it.effect("follows the WinGet launcher to the package's native binary", () => + Effect.gen(function* () { + expect( + yield* resolveClaudeSdkExecutablePath("claude", {}).pipe( + withWindowsResolution({ resolvedCommand: WINGET_SHIM, existingFiles: [WINGET_EXE] }), + ), + ).toBe(WINGET_EXE); + }), + ); + it.effect("follows .bat and .ps1 launcher shims the same way", () => Effect.gen(function* () { for (const shim of [`${NPM_DIR}\\claude.bat`, `${NPM_DIR}\\claude.ps1`]) { diff --git a/apps/server/src/provider/Drivers/ClaudeExecutable.ts b/apps/server/src/provider/Drivers/ClaudeExecutable.ts index 5e4cbb4db6efe..5797066446b99 100644 --- a/apps/server/src/provider/Drivers/ClaudeExecutable.ts +++ b/apps/server/src/provider/Drivers/ClaudeExecutable.ts @@ -13,10 +13,14 @@ const WINDOWS_SHIM_EXTENSIONS: ReadonlySet = new Set([".cmd", ".bat", ". export const isWindowsClaudeLauncherShimPath = (filePath: string): boolean => WINDOWS_SHIM_EXTENSIONS.has(NodePath.win32.extname(filePath).toLowerCase()); -/** New packages provide bin/claude.exe; older packages need a JavaScript runtime for cli.js. */ -const NPM_PACKAGE_ENTRY_CANDIDATES = [ +/** + * npm: new packages provide bin/claude.exe; older ones need a JavaScript runtime for cli.js. + * WinGet: Links\claude.cmd forwards to the package's native executable under ..\Packages. + */ +const PACKAGE_ENTRY_CANDIDATES = [ ["node_modules", "@anthropic-ai", "claude-code", "bin", "claude.exe"], ["node_modules", "@anthropic-ai", "claude-code", "cli.js"], + ["..", "Packages", "Anthropic.ClaudeCode_Microsoft.Winget.Source_8wekyb3d8bbwe", "claude.exe"], ] as const; export type ExecutableFileCheck = (filePath: string) => boolean; @@ -53,7 +57,7 @@ export const resolveClaudeSdkExecutablePath = Effect.fn("resolveClaudeSdkExecuta } const shimDirectory = NodePath.win32.dirname(resolved); - for (const entrySegments of NPM_PACKAGE_ENTRY_CANDIDATES) { + for (const entrySegments of PACKAGE_ENTRY_CANDIDATES) { const candidate = NodePath.win32.join(shimDirectory, ...entrySegments); if (isFile(candidate)) { return candidate; From 365a62aa84f498894a84e63be988d73a77768803 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:54:06 -0800 Subject: [PATCH 913/922] fix(server): Claude knows decline feedback is the user's message (#27871) Co-authored-by: Claude Opus 5.5 --- .../Adapters/ClaudeAdapterV2.test.ts | 16 ++++++++++++++++ .../orchestration-v2/Adapters/ClaudeAdapterV2.ts | 9 +++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts index 421d82b157dd1..68a07086ff2f1 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts @@ -970,6 +970,22 @@ describe("ClaudeAdapterV2 session permissions", () => { assert.equal(result.decisionClassification, "user_reject"); assert.equal(result.message, "User declined tool execution."); assert.equal(result.interrupt, undefined); + + // regression: #27854 bare feedback read to Claude as a tool error, not the user's words + const withFeedback = ClaudeAdapterV2.permissionResultFromDecision({ + toolName: "Bash", + decision: "decline", + toolInput: { command: "make" }, + toolUseID: "denied-build", + feedback: " Use the dry-run flag first. ", + }); + assert.equal(withFeedback.behavior, "deny"); + if (withFeedback.behavior !== "deny") return; + assert.equal(withFeedback.decisionClassification, "user_reject"); + assert.equal( + withFeedback.message, + "The user declined this tool call and said:\nUse the dry-run flag first.", + ); }); it("forces suggested permission updates to session scope", () => { diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts index 30cf9c77314c5..5b91ed7590584 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts @@ -4274,13 +4274,14 @@ export function permissionResultFromDecision(input: { }; } + const feedback = input.feedback?.trim(); return { behavior: "deny", - message: - input.feedback?.trim() || - (input.decision === "cancel" + message: feedback + ? `The user declined this tool call and said:\n${feedback}` + : input.decision === "cancel" ? "User cancelled tool execution." - : "User declined tool execution."), + : "User declined tool execution.", toolUseID: input.toolUseID, decisionClassification: "user_reject", ...(input.decision === "cancel" ? { interrupt: true } : {}), From ea4e7c1a6042e70341dd9d3de6724f4a1566c761 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:54:23 -0800 Subject: [PATCH 914/922] fix(acp): permission answers send the agent's option id unchanged (#35837) Co-authored-by: Claude Opus 5.5 --- .../Adapters/AcpAdapterV2.test.ts | 16 ++++++++++++++++ packages/provider-acp/src/server/adapter.ts | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts index c2e0a65c36377..3f5423a848e16 100644 --- a/apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts @@ -5877,6 +5877,22 @@ describe("AcpAdapterV2", () => { ], optionId: "allow-once", }, + { + label: "answers Always allow with the agent's option id unchanged when it has spaces", + options: [ + { optionId: " opaque-choice ", name: "Allow once", kind: "allow_once" }, + { optionId: "reject-once", name: "Reject", kind: "reject_once" }, + ], + optionId: " opaque-choice ", + }, + { + label: "answers Always allow with a whitespace-only option id instead of cancelling", + options: [ + { optionId: " ", name: "Allow once", kind: "allow_once" }, + { optionId: "reject-once", name: "Reject", kind: "reject_once" }, + ], + optionId: " ", + }, ] as const)("$label", ({ options, optionId }) => Effect.gen(function* () { const childProcessSpawner = yield* ChildProcessSpawner.ChildProcessSpawner; diff --git a/packages/provider-acp/src/server/adapter.ts b/packages/provider-acp/src/server/adapter.ts index 896b2def4aeee..ffaa205d4ab9e 100644 --- a/packages/provider-acp/src/server/adapter.ts +++ b/packages/provider-acp/src/server/adapter.ts @@ -1415,7 +1415,7 @@ function selectPermissionOptionId( decision: Exclude, ): string | undefined { const optionIdOfKind = (kind: EffectAcpSchema.PermissionOption["kind"]) => - request.options.find((option) => option.kind === kind)?.optionId.trim() || undefined; + request.options.find((option) => option.kind === kind)?.optionId; if (decision === "acceptForSession") { // Agents may offer only allow_once, and answering "cancelled" would stop the turn the user approved. return optionIdOfKind("allow_always") ?? optionIdOfKind("allow_once"); From 3466f9e99c75b6f0addf32489b87165ba08c9b77 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:54:39 -0800 Subject: [PATCH 915/922] fix(server): forwarded calls to a linked environment no longer wait out a silent first address (#35546) --- apps/server/src/peer/PeerLinks.test.ts | 32 +++++++++++++++++++++++ apps/server/src/peer/PeerLinks.ts | 35 +++++++++++++------------- 2 files changed, 50 insertions(+), 17 deletions(-) diff --git a/apps/server/src/peer/PeerLinks.test.ts b/apps/server/src/peer/PeerLinks.test.ts index fcb682ab03faf..6923037b6f7c4 100644 --- a/apps/server/src/peer/PeerLinks.test.ts +++ b/apps/server/src/peer/PeerLinks.test.ts @@ -444,6 +444,38 @@ it.effect("lists a peer as reachable at another address while its first one slee ).pipe(Effect.provide(NodeHttpServer.layerTest)), ); +it.effect("resolves a link at its answering address without waiting out a sleeping first", () => + Effect.scoped( + Effect.gen(function* () { + const b = yield* serveB(box); + const described = yield* HttpClient.get(`${b.url}/.well-known/t3/environment`).pipe( + Effect.flatMap((response) => response.text), + Effect.provide(FetchHttpClient.layer), + ); + const elsewhere = yield* serveRaw(() => + Effect.succeed(HttpServerResponse.text(described, { contentType: "application/json" })), + ); + const a = yield* makeA(laptop); + const pairing = yield* b.auth.issuePairingCredential(); + yield* a.links.link({ + url: b.url, + alternateUrls: [elsewhere], + pairingCode: pairing.credential, + access: "auto", + }); + + yield* Ref.set(b.asleep, true); + const first = yield* a.links.resolve(box.environmentId).pipe(Effect.forkScoped); + yield* Queue.take(b.unanswered); + yield* TestClock.adjust(Duration.seconds(3)); + expect((yield* Fiber.join(first)).url).toBe(elsewhere); + + // The clock no longer moves: a resolve that probes the sleeping address first never returns. + expect((yield* a.links.resolve(box.environmentId)).url).toBe(elsewhere); + }), + ).pipe(Effect.provide(NodeHttpServer.layerTest)), +); + it.effect("cancelling a descriptor probe aborts its request and leaves later resolves fresh", () => Effect.scoped( Effect.gen(function* () { diff --git a/apps/server/src/peer/PeerLinks.ts b/apps/server/src/peer/PeerLinks.ts index 2fa08d5b43671..6fddf407cf4d4 100644 --- a/apps/server/src/peer/PeerLinks.ts +++ b/apps/server/src/peer/PeerLinks.ts @@ -658,36 +658,37 @@ const make = Effect.gen(function* () { }); } // The token goes only to an address that still answers as this peer, - // so one that now answers as another machine never receives it. - let fenced = true; - let label = link.label; - const url = yield* Effect.findFirst(link.urls, (candidate) => - answersAs(candidate, environmentId).pipe( - Effect.map((found) => { - if (Option.isNone(found)) return false; - fenced = linkLimitsHold(found.value); - label = found.value.label; - return true; - }), - ), - ); - if (Option.isNone(url)) { + // so one that now answers as another machine never receives it. The + // addresses race, so a silent one never delays one that answers. + const answered = + link.urls.length === 0 + ? Option.none() + : yield* Effect.raceAll( + link.urls.map((url) => + answersAs(url, environmentId).pipe( + Effect.flatMap(Effect.fromOption), + Effect.map((peer) => ({ url, peer })), + ), + ), + ).pipe(Effect.option); + if (Option.isNone(answered)) { return yield* new PeerLinkError({ reason: "unreachable", message: `${link.label} did not answer at ${link.urls.join(", ")}.`, }); } + const { url, peer } = answered.value; // A link made before the peer had to fence linked work, or a peer moved // back to such a version, would carry work past those limits. - if (!fenced) { + if (!linkLimitsHold(peer)) { return yield* new PeerLinkError({ reason: "incompatible", message: `${link.label} runs a T3 Code version that cannot keep a linked agent's limits. Update it, then link again.`, }); } return { - link: yield* withLabel(link, label), - url: url.value, + link: yield* withLabel(link, peer.label), + url, token: new TextDecoder().decode(stored.value), }; }, From 2c2a286ad0bd45d25c7e7b54feee3664e42292c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mahir=20Taha=20=C3=96zdin?= Date: Sun, 15 Nov 2026 07:54:55 +0300 Subject: [PATCH 916/922] fix(server): Claude sessions no longer log a canUseTool shadowing warning (#31548) Co-authored-by: Julius Marminge --- .../Adapters/ClaudeAdapterV2.test.ts | 33 +++++++++++++++++++ .../Adapters/ClaudeAdapterV2.ts | 30 ++++++++++++++--- 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts index 68a07086ff2f1..0d1366dbd858e 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts @@ -757,6 +757,39 @@ describe("ClaudeAdapterV2 MCP query overrides", () => { }); }); +describe("ClaudeAdapterV2 SDK warnings", () => { + it("drops only the SDK's canUseTool shadowing warning while opening a query", async () => { + using emitWarning = vi.spyOn(process, "emitWarning").mockImplementation(() => {}); + for (const options of [ + { permissionMode: "default", allowedTools: [ClaudeAdapterV2.CLAUDE_T3_MCP_TOOL_WILDCARD] }, + { permissionMode: "bypassPermissions", allowDangerouslySkipPermissions: true }, + ] satisfies ReadonlyArray) { + const query = ClaudeAdapterV2.withoutClaudeCanUseToolShadowedWarning(() => + ClaudeSdk.query({ + prompt: "", + options: { + ...options, + canUseTool: async (_toolName, input) => ({ behavior: "allow", updatedInput: input }), + pathToClaudeCodeExecutable: "/nonexistent/claude", + }, + }), + ); + await query.next().catch(() => undefined); + } + ClaudeAdapterV2.withoutClaudeCanUseToolShadowedWarning(() => + process.emitWarning("unrelated", { code: "UNRELATED_WARNING" }), + ); + + assert.deepEqual( + emitWarning.mock.calls.map(([, options]) => + typeof options === "object" ? options.code : options, + ), + ["UNRELATED_WARNING"], + ); + assert.strictEqual(process.emitWarning, emitWarning); + }); +}); + describe("ClaudeAdapterV2 native protocol logging", () => { it("injects thread-scoped MCP configuration without logging the credential", () => { const threadId = ThreadId.make("thread-claude-mcp"); diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts index 5b91ed7590584..877cb1afe5322 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts @@ -1355,6 +1355,26 @@ const forkClaudeSessionInWorker = Effect.fn("forkClaudeSessionInWorker")(functio ); }); +const CLAUDE_CAN_USE_TOOL_SHADOWED_WARNING = "CLAUDE_SDK_CAN_USE_TOOL_SHADOWED"; + +// query() warns when canUseTool meets bypassPermissions or bare allowedTools. T3 installs +// canUseTool in every mode on purpose (AskUserQuestion, ask rules), so it is per-session noise. +export function withoutClaudeCanUseToolShadowedWarning(run: () => A): A { + const emitWarning = process.emitWarning; + process.emitWarning = function (this: NodeJS.Process, ...args: Parameters) { + const [, options] = args; + if (typeof options === "object" && options.code === CLAUDE_CAN_USE_TOOL_SHADOWED_WARNING) { + return; + } + return Reflect.apply(emitWarning, this, args); + } as typeof emitWarning; + try { + return run(); + } finally { + process.emitWarning = emitWarning; + } +} + export const layerQueryRunner: Layer.Layer< ClaudeAgentSdkQueryRunner, never, @@ -1563,10 +1583,12 @@ export const layerQueryRunner: Layer.Layer< const queryRuntime = yield* Effect.uninterruptibleMask((restore) => Effect.try({ try: () => - query({ - prompt, - options: { ...options, spawnClaudeCodeProcess }, - }), + withoutClaudeCanUseToolShadowedWarning(() => + query({ + prompt, + options: { ...options, spawnClaudeCodeProcess }, + }), + ), catch: (cause) => queryRunnerError(cause, "query"), }).pipe( Effect.tap((queryRuntime) => From 85a81b7a8b0af7e0f7702fbe359ff6b311256182 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:55:11 -0800 Subject: [PATCH 917/922] fix(server): Claude text generation honors --settings launch args (#34874) --- .../Adapters/ClaudeAdapterV2.ts | 2 +- .../ClaudeTextGeneration.test.ts | 29 +++++++++++++++++++ .../textGeneration/ClaudeTextGeneration.ts | 14 +++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts index 877cb1afe5322..0ac551140704f 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts @@ -2384,7 +2384,7 @@ const decodeClaudeLaunchArgSettings = Schema.decodeUnknownEffect( * relative to the thread's cwd (the project or its worktree). * makeClaudeQueryOptions merges the result beneath T3's own settings. */ -const readClaudeLaunchArgSettings = Effect.fn("ClaudeAdapterV2.readLaunchArgSettings")( +export const readClaudeLaunchArgSettings = Effect.fn("ClaudeAdapterV2.readLaunchArgSettings")( function* (input: { readonly settings: ClaudeSettings | undefined; readonly cwd: string | null; diff --git a/apps/server/src/textGeneration/ClaudeTextGeneration.test.ts b/apps/server/src/textGeneration/ClaudeTextGeneration.test.ts index a7041d5d249e5..d2e165ea3b2b5 100644 --- a/apps/server/src/textGeneration/ClaudeTextGeneration.test.ts +++ b/apps/server/src/textGeneration/ClaudeTextGeneration.test.ts @@ -234,6 +234,35 @@ it.layer(layerClaudeTextGenerationTest)("ClaudeTextGeneration", (it) => { }), ); + it.effect("passes --settings from the instance launch args to Claude text generation", () => + withFakeClaudeEnv( + { + output: JSON.stringify({ + structured_output: { + title: "Use instance settings", + }, + }), + argsMustContain: `"env":{"ANTHROPIC_VERTEX_PROJECT_ID":"vertex-project-a"}`, + claudeConfig: { + launchArgs: `--settings '{"env":{"ANTHROPIC_VERTEX_PROJECT_ID":"vertex-project-a"}}'`, + }, + }, + (textGeneration) => + Effect.gen(function* () { + const generated = yield* textGeneration.generateThreadTitle({ + cwd: process.cwd(), + message: "thread title", + modelSelection: { + instanceId: ProviderInstanceId.make("claudeAgent"), + model: SYNTHETIC_CLAUDE_STANDARD_MODEL, + }, + }); + + expect(generated.title).toBe(sanitizeThreadTitle("Use instance settings")); + }), + ), + ); + it.effect("retries without --no-session-persistence when the Claude CLI rejects it", () => withFakeClaudeEnv( { diff --git a/apps/server/src/textGeneration/ClaudeTextGeneration.ts b/apps/server/src/textGeneration/ClaudeTextGeneration.ts index 756a068926a60..a523a3873a2c5 100644 --- a/apps/server/src/textGeneration/ClaudeTextGeneration.ts +++ b/apps/server/src/textGeneration/ClaudeTextGeneration.ts @@ -1,6 +1,7 @@ import * as Effect from "effect/Effect"; import * as FileSystem from "effect/FileSystem"; import * as Option from "effect/Option"; +import * as Path from "effect/Path"; import * as Schema from "effect/Schema"; import * as Scope from "effect/Scope"; import * as Stream from "effect/Stream"; @@ -33,6 +34,7 @@ import { hasClaudeManagedMcpConfig, makeClaudeEnvironment, } from "../provider/Drivers/ClaudeHome.ts"; +import { readClaudeLaunchArgSettings } from "../orchestration-v2/Adapters/ClaudeAdapterV2.ts"; const CLAUDE_TIMEOUT_MS = 180_000; /** `--tools` takes bare names; patterns go in the allow list. */ @@ -105,6 +107,7 @@ export const makeClaudeTextGeneration = Effect.fn("makeClaudeTextGeneration")(fu ) { const commandSpawner = yield* ChildProcessSpawner.ChildProcessSpawner; const fileSystem = yield* FileSystem.FileSystem; + const path = yield* Path.Path; const claudeEnvironment = yield* makeClaudeEnvironment(claudeSettings, environment); const scopedModelCatalog = modelCatalog.pipe( Effect.map((catalog) => scopeClaudeModelCatalog(catalog, claudeSettings.customModels)), @@ -200,7 +203,18 @@ export const makeClaudeTextGeneration = Effect.fn("makeClaudeTextGeneration")(fu : undefined; const fastMode = fastModeDescriptor?.type === "boolean" ? fastModeDescriptor.currentValue : undefined; + const launchArgSettings = yield* readClaudeLaunchArgSettings({ + settings: claudeSettings, + cwd, + fileSystem, + path, + }).pipe( + Effect.mapError( + (cause) => new TextGenerationError({ operation, detail: cause.message, cause }), + ), + ); const settings = { + ...launchArgSettings, disableAllHooks: true, ...(typeof thinking === "boolean" ? { alwaysThinkingEnabled: thinking } : {}), ...(fastMode ? { fastMode: true } : {}), From 12042ffb29349c8da2382bd8d92836f9bcae0fe8 Mon Sep 17 00:00:00 2001 From: jacobcorbett Date: Sun, 15 Nov 2026 04:55:21 +0000 Subject: [PATCH 918/922] docs: align delegation guide with current MCP contract (#31045) Co-authored-by: Julius Marminge --- .../orchestrator-mcp-server.md | 94 +++++-------------- 1 file changed, 25 insertions(+), 69 deletions(-) diff --git a/docs/orchestration-v2/orchestrator-mcp-server.md b/docs/orchestration-v2/orchestrator-mcp-server.md index 6476aa5578524..c930ac1739f91 100644 --- a/docs/orchestration-v2/orchestrator-mcp-server.md +++ b/docs/orchestration-v2/orchestrator-mcp-server.md @@ -232,31 +232,31 @@ any catalog model. Creates a T3-owned child thread and immediately dispatches the supplied task prompt. +The [shared contract](../../packages/contracts/src/orchestratorMcp.ts) is authoritative for +inputs and results, including target options and linked-environment fields. + ```ts -type DelegateTaskInput = { - task: string; - target?: { - providerInstanceId?: string; - driverKind?: string; - model?: string; - }; - title?: string; - role?: "implementation" | "research" | "review" | "design" | "test" | "general"; - mode?: "async" | "wait"; - timeoutMs?: number; - clientRequestId?: string; - runtimeMode?: "inherit" | "approval-required" | "auto-accept-edits" | "full-access"; - interactionMode?: "inherit" | "plan" | "default"; -}; +import type { + OrchestratorMcpDelegateTaskInput as DelegateTaskInput, + OrchestratorMcpDelegateTaskResult as DelegateTaskResult, +} from "@t3tools/contracts"; ``` -Provider, model, runtime mode, and interaction mode inherit from the parent -when omitted. A driver-only target inherits the parent's provider instance +For local delegation, provider, model, runtime mode, and interaction mode inherit +from the parent when omitted. A driver-only target inherits the parent's provider instance when it can run child tasks, and otherwise selects an available instance of that driver; an explicit `providerInstanceId` is honored exactly and fails when unavailable. Selecting a different provider without a model uses that provider's first advertised model. +Set `target.options` using the options returned by `orchestrator_capabilities`, such as +`{effort: "max"}`. Supplied values override inherited selections; `{}` or `[]` clears them. +For local delegation, use `isolation: "worktree"` for a separate prepared checkout from +the parent's commit; the default `"shared"` uses the parent's checkout. Uncommitted parent +edits are not copied. A linked-environment target (`target.environmentId`) runs in the remote +project's checkout and rejects worktree isolation. To launch an isolated thread there, use +`t3_thread_launch` with `environmentId` and a worktree `workspaceStrategy`. + A provider runs a runtime mode it does not offer as `approval-required`, so a child would ask for approval on every command. `orchestrator_capabilities` lists `runtimeModes` only for a provider that offers some of the modes, and @@ -280,8 +280,10 @@ provider session. The request becomes the V2 command `mode: "async"` returns the current durable state immediately. `mode: "wait"` waits for the task result, including nested work and completion follow-ups, or until the timeout expires. A wait timeout does not cancel the child; the result sets -`waitTimedOut: true`, and the caller can continue with `task_status`. A pending blocking -question also ends the wait with `hasPendingQuestion: true` and `waitTimedOut: false`. +`waitTimedOut: true`. When the result includes `next`, completion wakes the parent: +do not wait on the task or poll it; continue other work, and end the turn when none is +left. A pending blocking question also ends the wait with `hasPendingQuestion: true` and +`waitTimedOut: false`. If `hasPendingQuestion`, pass `threadId=childThreadId` to `t3_pending_request` with action `list`, `read` (with `requestId`), or `respond`, or ask the user; the task's completion still wakes this thread. A pending live approval for the task's own unfinished work also ends the wait. Its identity appears in `pendingApproval`; @@ -289,41 +291,6 @@ it grants no approval authority. Read the fresh full request in the child thread responding, since the durable record can outlive its provider callback. Async questions do not end the wait. -```ts -type DelegateTaskResult = { - taskId: string; - childThreadId: string; - childRunId: string | null; - childNodeId: string; - status: - | "queued" - | "starting" - | "running" - | "waiting" - | "completed" - | "failed" - | "cancelled" - | "interrupted"; - workState: "working" | "waiting_for_children" | "result_available"; - hasPendingChildRuns: boolean; - providerInstanceId: string; - model: string | null; - summary: string | null; - resultContextTransferId: string | null; - latestTerminalRunId: string | null; - latestTerminalStatus: "completed" | "failed" | "cancelled" | "interrupted" | null; - latestTerminalSummary: string | null; - latestTerminalResultContextTransferId: string | null; - hasPendingQuestion: boolean; - pendingApproval: { - requestId: string; - kind: "command" | "file-read" | "file-change" | "mcp-elicitation" | "permission"; - runId: string; - } | null; - waitTimedOut: boolean; -}; -``` - ### `task_status` Reads a delegated task from the parent thread's durable projection. A task ID @@ -360,26 +327,15 @@ optional cancellation reason. Creates between one and twenty ordinary top-level T3 threads: ```ts -type CreateThreadsInput = { - threads: Array<{ - prompt?: string; - title?: string; - target?: { - providerInstanceId?: string; - driverKind?: string; - model?: string; - }; - runtimeMode?: "inherit" | "approval-required" | "auto-accept-edits" | "full-access"; - interactionMode?: "inherit" | "plan" | "default"; - }>; - clientRequestId?: string; -}; +import type { OrchestratorMcpCreateThreadsInput as CreateThreadsInput } from "@t3tools/contracts"; ``` Each entry independently resolves provider, model, and modes. The new threads inherit the parent's project, branch, and worktree path, but they have no sub-agent lineage. Entries with a prompt immediately dispatch a run; entries -without a prompt remain idle. +without a prompt remain idle. `create_threads` is local-only: `target.environmentId` and +`target.projectId` are ignored even though the shared target contract accepts them. Use +`t3_thread_launch` with `environmentId` and `projectId` to select another environment or project. ### `t3_thread_launch` From 23ba9b3551177fe2a593f59f3030d54898d97d68 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:55:29 -0800 Subject: [PATCH 919/922] fix(server): fx threads load the user's profile MCP servers (#29538) Co-authored-by: Claude Opus 5.5 --- .../orchestration-v2/Adapters/FxAdapterV2.test.ts | 13 +++++++++++-- .../fixtures/fx_early_stop/fx_transcript.ndjson | 2 +- .../fixtures/fx_subagent/fx_transcript.ndjson | 2 +- .../fixtures/message_steering/fx_transcript.ndjson | 2 +- .../fixtures/multi_turn/fx_transcript.ndjson | 2 +- .../fixtures/queued_turn/fx_transcript.ndjson | 2 +- .../testkit/fixtures/simple/fx_transcript.ndjson | 2 +- .../tool_call_denied_write/fx_transcript.ndjson | 2 +- .../fx_transcript.ndjson | 2 +- .../fixtures/turn_interrupt/fx_transcript.ndjson | 2 +- docs/user/providers-fx.md | 2 ++ packages/provider-acp/src/server/adapter.ts | 1 + packages/provider-fx/src/server/acpSupport.ts | 2 ++ packages/provider-fx/src/server/adapter.ts | 6 +++++- 14 files changed, 30 insertions(+), 12 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/FxAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/FxAdapterV2.test.ts index 7a39e5468cfb6..6e21a3f4428e1 100644 --- a/apps/server/src/orchestration-v2/Adapters/FxAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/FxAdapterV2.test.ts @@ -277,7 +277,11 @@ describe("FxAdapterV2", () => { runtimeMode: "auto", frames: [ ...initialize, - outbound("session/new", { cwd: "", mcpServers: "" }), + outbound("session/new", { + cwd: "", + mcpServers: "", + _meta: { fx: { profileMcpServers: true } }, + }), answer("session/new", fxSession({ model: FX_DEFAULT_MODEL, modes })), ...setConfig( "mode", @@ -298,7 +302,12 @@ describe("FxAdapterV2", () => { loadSessionId: SESSION_ID, frames: [ ...initialize, - outbound("session/load"), + outbound("session/load", { + sessionId: SESSION_ID, + cwd: "", + mcpServers: "", + _meta: { fx: { profileMcpServers: true } }, + }), answer("session/load", fxSession({ model: NAMED_MODEL, modes: FX_0_0_13_MODES })), // Config id `model`, never fx's `provider`, and never T3's "default". ...setConfig( diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/fx_early_stop/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/fx_early_stop/fx_transcript.ndjson index 443a33b13ca30..f1d868c622672 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/fx_early_stop/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/fx_early_stop/fx_transcript.ndjson @@ -1,7 +1,7 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"fx_early_stop","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} {"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} -{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} +{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","_meta":{"fx":{"profileMcpServers":true}},"mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"available_commands_update","availableCommands":[]}}}} {"type":"expect_outbound","label":"request:session/set_config_option","frame":{"kind":"request","method":"session/set_config_option","params":{"sessionId":"fx-session-01","configId":"effort","value":"medium"}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/fx_subagent/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/fx_subagent/fx_transcript.ndjson index 99ce6d8a0b7ba..964a666072aca 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/fx_subagent/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/fx_subagent/fx_transcript.ndjson @@ -1,7 +1,7 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"fx_subagent","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.14","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} {"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.14"},"authMethods":[]}}} -{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} +{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","_meta":{"fx":{"profileMcpServers":true}},"mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"openai/gpt-5.2","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2-codex","name":"openai/gpt-5.2-codex"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-codex-max","name":"openai/gpt-5.1-codex-max"},{"value":"openai/gpt-5.1-codex","name":"openai/gpt-5.1-codex"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5-codex","name":"openai/gpt-5-codex"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"moonshotai/kimi-k3.1-pro","name":"moonshotai/kimi-k3.1-pro"},{"value":"moonshotai/kimi-k3.1-pro-highspeed","name":"moonshotai/kimi-k3.1-pro-highspeed"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"xiaomi/mimo-v2.6-pro","name":"xiaomi/mimo-v2.6-pro"},{"value":"xiaomi/mimo-v2.6-pro-ultraspeed","name":"xiaomi/mimo-v2.6-pro-ultraspeed"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"xiaomi/mimo-v2.5-pro","name":"xiaomi/mimo-v2.5-pro"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-terra","name":"openai/gpt-6.1-terra"},{"value":"openai/gpt-6.1-terra-fast","name":"openai/gpt-6.1-terra-fast"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"google/gemma-4-31b-it","name":"google/gemma-4-31b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-v3.1","name":"deepseek/deepseek-v3.1"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/muse-spark-open","name":"meta/muse-spark-open"},{"value":"meta/muse-wonder-1.0","name":"meta/muse-wonder-1.0"},{"value":"meta/muse-spark-1.3","name":"meta/muse-spark-1.3"},{"value":"meta/muse-spark-1.3-contributor","name":"meta/muse-spark-1.3-contributor"},{"value":"meta/muse-glimmer-30b","name":"meta/muse-glimmer-30b"},{"value":"meta/muse-spark-1.2","name":"meta/muse-spark-1.2"},{"value":"meta/muse-spark-1.2-contributor","name":"meta/muse-spark-1.2-contributor"},{"value":"meta/muse-spark-1.1","name":"meta/muse-spark-1.1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"mistral/mistral-large-4","name":"mistral/mistral-large-4"},{"value":"mistral/mistral-medium-3.5","name":"mistral/mistral-medium-3.5"},{"value":"mistral/mistral-large-3","name":"mistral/mistral-large-3"},{"value":"mistral/mistral-small","name":"mistral/mistral-small"},{"value":"mistral/mistral-nemo","name":"mistral/mistral-nemo"},{"value":"mistral/codestral","name":"mistral/codestral"},{"value":"alibaba/qwen3.8-max-prime","name":"alibaba/qwen3.8-max-prime"},{"value":"alibaba/qwen3.8-max-0902","name":"alibaba/qwen3.8-max-0902"},{"value":"alibaba/qwen3.8-27b","name":"alibaba/qwen3.8-27b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3.7-plus","name":"alibaba/qwen3.7-plus"},{"value":"alibaba/qwen3.7-max","name":"alibaba/qwen3.7-max"},{"value":"alibaba/qwen3.6-27b","name":"alibaba/qwen3.6-27b"},{"value":"alibaba/qwen3.6-plus","name":"alibaba/qwen3.6-plus"},{"value":"alibaba/qwen3.5-plus","name":"alibaba/qwen3.5-plus"},{"value":"alibaba/qwen3-max-thinking","name":"alibaba/qwen3-max-thinking"},{"value":"alibaba/qwen3-vl-instruct","name":"alibaba/qwen3-vl-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-14b","name":"alibaba/qwen-3-14b"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-30b","name":"alibaba/qwen-3-30b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"inception/mercury-3","name":"inception/mercury-3"},{"value":"reflection/beam","name":"reflection/beam"},{"value":"reflection/beam-free","name":"reflection/beam-free"},{"value":"nvidia/nemotron-3.5-super-vl","name":"nvidia/nemotron-3.5-super-vl"},{"value":"nvidia/nemotron-3.5-lightning-free","name":"nvidia/nemotron-3.5-lightning-free"},{"value":"liquid/lfm2.5-24b-a2b","name":"liquid/lfm2.5-24b-a2b"},{"value":"callstack/apex","name":"callstack/apex"},{"value":"stealth/glyph-cluster","name":"stealth/glyph-cluster"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"sakana/fugu-max","name":"sakana/fugu-max"},{"value":"sakana/fugu-ultra-v2","name":"sakana/fugu-ultra-v2"},{"value":"inception/mercury-2.5","name":"inception/mercury-2.5"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"mixedbread/toast-1","name":"mixedbread/toast-1"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"sakana/namazu","name":"sakana/namazu"},{"value":"thinkingmachines/inkling-small","name":"thinkingmachines/inkling-small"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"poolside/laguna-s-2.1-free","name":"poolside/laguna-s-2.1-free"},{"value":"poolside/laguna-s-2.1","name":"poolside/laguna-s-2.1"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"thinkingmachines/inkling","name":"thinkingmachines/inkling"},{"value":"tencent/hy3","name":"tencent/hy3"},{"value":"bytedance/seed-2.1-turbo","name":"bytedance/seed-2.1-turbo"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"sakana/fugu-ultra","name":"sakana/fugu-ultra"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"moonshotai/kimi-k2.7-code-highspeed","name":"moonshotai/kimi-k2.7-code-highspeed"},{"value":"moonshotai/kimi-k2.7-code","name":"moonshotai/kimi-k2.7-code"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"xiaomi/mimo-v2.5","name":"xiaomi/mimo-v2.5"},{"value":"moonshotai/kimi-k2.6","name":"moonshotai/kimi-k2.6"},{"value":"zai/glm-5.1","name":"zai/glm-5.1"},{"value":"arcee-ai/trinity-large-thinking","name":"arcee-ai/trinity-large-thinking"},{"value":"zai/glm-5v-turbo","name":"zai/glm-5v-turbo"},{"value":"zai/glm-5-turbo","name":"zai/glm-5-turbo"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"inception/mercury-2","name":"inception/mercury-2"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-3-nano-30b-a3b","name":"nvidia/nemotron-3-nano-30b-a3b"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"zai/glm-4.6","name":"zai/glm-4.6"},{"value":"bytedance/seed-1.6","name":"bytedance/seed-1.6"},{"value":"bytedance/seed-1.8","name":"bytedance/seed-1.8"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"zai/glm-4.5v","name":"zai/glm-4.5v"},{"value":"zai/glm-4.5","name":"zai/glm-4.5"},{"value":"zai/glm-4.5-air","name":"zai/glm-4.5-air"},{"value":"moonshotai/kimi-k2","name":"moonshotai/kimi-k2"},{"value":"cohere/command-a","name":"cohere/command-a"},{"value":"inception/mercury-coder-small","name":"inception/mercury-coder-small"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash-1017","name":"deepseek/deepseek-v4.1-flash-1017"},{"value":"deepseek/deepseek-v4.1-flash-1017-fast","name":"deepseek/deepseek-v4.1-flash-1017-fast"},{"value":"deepseek/deepseek-v4.1-flash-fast","name":"deepseek/deepseek-v4.1-flash-fast"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash-vision-exp","name":"deepseek/deepseek-v4-flash-vision-exp"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"alibaba/qwen3.8-omni-flash","name":"alibaba/qwen3.8-omni-flash"},{"value":"alibaba/qwen3.8-flash","name":"alibaba/qwen3.8-flash"},{"value":"alibaba/qwen3.7-flash","name":"alibaba/qwen3.7-flash"},{"value":"alibaba/qwen3.5-flash","name":"alibaba/qwen3.5-flash"},{"value":"inclusionai/ling-3.1-flash","name":"inclusionai/ling-3.1-flash"},{"value":"xiaomi/mimo-v2.6-flash","name":"xiaomi/mimo-v2.6-flash"},{"value":"zai/glm-5.3-flashx","name":"zai/glm-5.3-flashx"},{"value":"inclusionai/ling-3.0-flash-vl","name":"inclusionai/ling-3.0-flash-vl"},{"value":"inclusionai/ling-3.0-flash-sante","name":"inclusionai/ling-3.0-flash-sante"},{"value":"inclusionai/ling-3.0-flash-fin","name":"inclusionai/ling-3.0-flash-fin"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"inclusionai/ling-3.0-flash","name":"inclusionai/ling-3.0-flash"},{"value":"stepfun/step-3.7-flash","name":"stepfun/step-3.7-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"zai/glm-4.7-flashx","name":"zai/glm-4.7-flashx"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5.1-codex-mini","name":"openai/gpt-5.1-codex-mini"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-4-argon","name":"google/gemini-4-argon"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"mistral/ministral-14b","name":"mistral/ministral-14b"},{"value":"mistral/ministral-3b","name":"mistral/ministral-3b"},{"value":"mistral/ministral-8b","name":"mistral/ministral-8b"},{"value":"minimax/minimax-m3.1-flash","name":"minimax/minimax-m3.1-flash"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.7","name":"minimax/minimax-m2.7"},{"value":"minimax/minimax-m2.7-highspeed","name":"minimax/minimax-m2.7-highspeed"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.5-highspeed","name":"minimax/minimax-m2.5-highspeed"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"minimax/minimax-m2.1-lightning","name":"minimax/minimax-m2.1-lightning"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"minimax/minimax-m2","name":"minimax/minimax-m2"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"meituan/longcat-2.5-preview","name":"meituan/longcat-2.5-preview"},{"value":"stepfun/step-5-preview","name":"stepfun/step-5-preview"},{"value":"tencent/hy4-preview","name":"tencent/hy4-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"},{"value":"interfaze/interfaze-beta","name":"interfaze/interfaze-beta"},{"value":"tencent/hy-mt2-pro","name":"tencent/hy-mt2-pro"},{"value":"scaledown/scaledown-extract-1","name":"scaledown/scaledown-extract-1"},{"value":"scaledown/scaledown-summarize-1","name":"scaledown/scaledown-summarize-1"},{"value":"elorian/glimpse","name":"elorian/glimpse"},{"value":"tencent/hy-mt2-plus","name":"tencent/hy-mt2-plus"},{"value":"inference-net/schematron-v2-small","name":"inference-net/schematron-v2-small"},{"value":"inference-net/schematron-v2-turbo","name":"inference-net/schematron-v2-turbo"},{"value":"morph/morph-v3-fast","name":"morph/morph-v3-fast"},{"value":"morph/morph-v3-large","name":"morph/morph-v3-large"},{"value":"perplexity/sonar","name":"perplexity/sonar"},{"value":"tencent/hy-mt2-lite","name":"tencent/hy-mt2-lite"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"auto","name":"Auto","description":"Check actions with an automatic safety review instead of asking","_meta":{"fx":{"permissionMode":"auto"}}},{"value":"ask","name":"Ask","description":"Request permission before making any changes","_meta":{"fx":{"permissionMode":"ask"}}},{"value":"full-access","name":"Full access","description":"Run every action without asking, outside the sandbox","_meta":{"fx":{"permissionMode":"yolo"}}}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"auto","options":[{"value":"auto","name":"default"},{"value":"none","name":"none"},{"value":"minimal","name":"minimal"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"}]},{"id":"fast","name":"Fast Mode","description":"Uses the model's fast lane","category":"model","type":"select","currentValue":"false","options":[{"value":"false","name":"off"},{"value":"true","name":"on"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"auto","name":"Auto","description":"Check actions with an automatic safety review instead of asking"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"},{"id":"full-access","name":"Full access","description":"Run every action without asking, outside the sandbox"}]}}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"available_commands_update","availableCommands":[]}}}} {"type":"expect_outbound","label":"request:session/set_config_option","frame":{"kind":"request","method":"session/set_config_option","params":{"sessionId":"fx-session-01","configId":"effort","value":"medium"}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/fx_transcript.ndjson index 86c9b5d36e00e..18eed3d4670bb 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/fx_transcript.ndjson @@ -1,7 +1,7 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"message_steering","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} {"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} -{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} +{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","_meta":{"fx":{"profileMcpServers":true}},"mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} {"type":"expect_outbound","label":"request:session/set_config_option","frame":{"kind":"request","method":"session/set_config_option","params":{"sessionId":"fx-session-01","configId":"effort","value":"medium"}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"available_commands_update","availableCommands":[]}}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/fx_transcript.ndjson index d7c5cd808504d..fe27477574e29 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/fx_transcript.ndjson @@ -1,7 +1,7 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"multi_turn","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} {"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} -{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} +{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","_meta":{"fx":{"profileMcpServers":true}},"mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"available_commands_update","availableCommands":[]}}}} {"type":"expect_outbound","label":"request:session/set_config_option","frame":{"kind":"request","method":"session/set_config_option","params":{"sessionId":"fx-session-01","configId":"effort","value":"medium"}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/queued_turn/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/queued_turn/fx_transcript.ndjson index 28d92260dcecd..c099f2ad978ff 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/queued_turn/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/queued_turn/fx_transcript.ndjson @@ -1,7 +1,7 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"queued_turn","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} {"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} -{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} +{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","_meta":{"fx":{"profileMcpServers":true}},"mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"available_commands_update","availableCommands":[]}}}} {"type":"expect_outbound","label":"request:session/set_config_option","frame":{"kind":"request","method":"session/set_config_option","params":{"sessionId":"fx-session-01","configId":"effort","value":"medium"}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/simple/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/simple/fx_transcript.ndjson index 923aa3d611f4a..c4c00bf558656 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/simple/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/simple/fx_transcript.ndjson @@ -1,7 +1,7 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"simple","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} {"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} -{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} +{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","_meta":{"fx":{"profileMcpServers":true}},"mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"available_commands_update","availableCommands":[]}}}} {"type":"expect_outbound","label":"request:session/set_config_option","frame":{"kind":"request","method":"session/set_config_option","params":{"sessionId":"fx-session-01","configId":"effort","value":"medium"}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_denied_write/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_denied_write/fx_transcript.ndjson index 5a643d4df438c..454db28728fd1 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_denied_write/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_denied_write/fx_transcript.ndjson @@ -1,7 +1,7 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"tool_call_denied_write","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} {"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} -{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} +{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","_meta":{"fx":{"profileMcpServers":true}},"mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"available_commands_update","availableCommands":[]}}}} {"type":"expect_outbound","label":"request:session/set_config_option","frame":{"kind":"request","method":"session/set_config_option","params":{"sessionId":"fx-session-01","configId":"effort","value":"medium"}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/fx_transcript.ndjson index 1f9c4cd5e1cfe..23b12ea6cacfa 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/fx_transcript.ndjson @@ -1,7 +1,7 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"tool_call_read_only_on_request","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} {"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} -{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} +{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","_meta":{"fx":{"profileMcpServers":true}},"mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"available_commands_update","availableCommands":[]}}}} {"type":"expect_outbound","label":"request:session/set_config_option","frame":{"kind":"request","method":"session/set_config_option","params":{"sessionId":"fx-session-01","configId":"effort","value":"medium"}}} diff --git a/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt/fx_transcript.ndjson b/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt/fx_transcript.ndjson index 23191a20397de..cd3e07191adb4 100644 --- a/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt/fx_transcript.ndjson +++ b/apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt/fx_transcript.ndjson @@ -1,7 +1,7 @@ {"type":"transcript_start","provider":"fx","protocol":"acp.ndjson-jsonrpc","version":"1","scenario":"turn_interrupt","metadata":{"generatedBy":"live-fx-recorder","fxVersion":"0.0.13","normalization":"Session ids are fx-session-NN, the workspace is , HOME is /home/fx-replay and the recording user is fx-replay. T3-owned prompt text, MCP servers and initialize params other than clientCapabilities and _meta are . User skill names, emails and token-shaped strings are removed. Timestamps are kept as recorded.","droppedFrames":0}} {"type":"expect_outbound","label":"request:initialize","frame":{"kind":"request","method":"initialize","params":{"protocolVersion":2,"info":"","capabilities":"","clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false,"session":{"notices":{},"compaction":{}},"elicitation":{"form":{}}},"clientInfo":""}}} {"type":"emit_inbound","label":"response:initialize","frame":{"kind":"response","method":"initialize","result":{"protocolVersion":1,"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":true,"audio":false,"embeddedContext":true},"mcpCapabilities":{"http":true,"sse":true,"acp":true},"sessionCapabilities":{"list":{},"resume":{},"close":{},"systemPrompt":{}},"_meta":{"fx":{"steering":true}}},"agentInfo":{"name":"fx","title":"fx","version":"0.0.13"},"authMethods":[]}}} -{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","mcpServers":""}}} +{"type":"expect_outbound","label":"request:session/new","frame":{"kind":"request","method":"session/new","params":{"cwd":"","_meta":{"fx":{"profileMcpServers":true}},"mcpServers":""}}} {"type":"emit_inbound","label":"response:session/new","frame":{"kind":"response","method":"session/new","result":{"sessionId":"fx-session-01","configOptions":[{"id":"provider","name":"Provider","category":"model","type":"select","currentValue":"gateway","options":[{"value":"gateway","name":"Vercel AI Gateway"},{"value":"codex","name":"Codex subscription"},{"value":"grok","name":"Grok subscription"}]},{"id":"model","name":"Model","category":"model","type":"select","currentValue":"anthropic/claude-opus-5.5","options":[{"value":"anthropic/claude-sonnet-5.5","name":"anthropic/claude-sonnet-5.5"},{"value":"anthropic/claude-opus-5.5","name":"anthropic/claude-opus-5.5"},{"value":"anthropic/claude-opus-5.5-fast","name":"anthropic/claude-opus-5.5-fast"},{"value":"anthropic/claude-opus-5","name":"anthropic/claude-opus-5"},{"value":"anthropic/claude-opus-5-fast","name":"anthropic/claude-opus-5-fast"},{"value":"anthropic/claude-sonnet-5","name":"anthropic/claude-sonnet-5"},{"value":"anthropic/claude-opus-4.8","name":"anthropic/claude-opus-4.8"},{"value":"anthropic/claude-opus-4.8-fast","name":"anthropic/claude-opus-4.8-fast"},{"value":"anthropic/claude-opus-4.7","name":"anthropic/claude-opus-4.7"},{"value":"anthropic/claude-sonnet-4.6","name":"anthropic/claude-sonnet-4.6"},{"value":"anthropic/claude-opus-4.6","name":"anthropic/claude-opus-4.6"},{"value":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5"},{"value":"anthropic/claude-sonnet-4.5","name":"anthropic/claude-sonnet-4.5"},{"value":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4"},{"value":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4"},{"value":"openai/gpt-5.6-luna","name":"openai/gpt-5.6-luna"},{"value":"openai/gpt-5.6-luna-fast","name":"openai/gpt-5.6-luna-fast"},{"value":"openai/gpt-5.6-sol","name":"openai/gpt-5.6-sol"},{"value":"openai/gpt-5.6-sol-fast","name":"openai/gpt-5.6-sol-fast"},{"value":"openai/gpt-5.6-terra","name":"openai/gpt-5.6-terra"},{"value":"openai/gpt-5.6-terra-fast","name":"openai/gpt-5.6-terra-fast"},{"value":"openai/gpt-5.5","name":"openai/gpt-5.5"},{"value":"openai/gpt-5.5-fast","name":"openai/gpt-5.5-fast"},{"value":"openai/gpt-5.5-pro","name":"openai/gpt-5.5-pro"},{"value":"openai/gpt-5.4-nano","name":"openai/gpt-5.4-nano"},{"value":"openai/gpt-5.4","name":"openai/gpt-5.4"},{"value":"openai/gpt-5.4-fast","name":"openai/gpt-5.4-fast"},{"value":"openai/gpt-5.4-pro","name":"openai/gpt-5.4-pro"},{"value":"openai/gpt-5.3-codex","name":"openai/gpt-5.3-codex"},{"value":"openai/gpt-5.3-codex-fast","name":"openai/gpt-5.3-codex-fast"},{"value":"openai/gpt-5.2","name":"openai/gpt-5.2"},{"value":"openai/gpt-5.2-fast","name":"openai/gpt-5.2-fast"},{"value":"openai/gpt-5.2-pro","name":"openai/gpt-5.2-pro"},{"value":"openai/gpt-5.1-thinking","name":"openai/gpt-5.1-thinking"},{"value":"openai/gpt-5.1-thinking-fast","name":"openai/gpt-5.1-thinking-fast"},{"value":"openai/gpt-5-pro","name":"openai/gpt-5-pro"},{"value":"openai/gpt-5","name":"openai/gpt-5"},{"value":"openai/gpt-5-fast","name":"openai/gpt-5-fast"},{"value":"openai/gpt-5-nano","name":"openai/gpt-5-nano"},{"value":"openai/o3-pro","name":"openai/o3-pro"},{"value":"openai/o3","name":"openai/o3"},{"value":"openai/o3-fast","name":"openai/o3-fast"},{"value":"openai/o1","name":"openai/o1"},{"value":"deepseek/deepseek-v4-pro-0813","name":"deepseek/deepseek-v4-pro-0813"},{"value":"deepseek/deepseek-v4-pro","name":"deepseek/deepseek-v4-pro"},{"value":"spacexai/grok-4.7","name":"spacexai/grok-4.7"},{"value":"spacexai/grok-4.6","name":"spacexai/grok-4.6"},{"value":"spacexai/grok-4.5","name":"spacexai/grok-4.5"},{"value":"spacexai/grok-4.3","name":"spacexai/grok-4.3"},{"value":"spacexai/grok-4.20-multi-agent","name":"spacexai/grok-4.20-multi-agent"},{"value":"spacexai/grok-4.20-non-reasoning","name":"spacexai/grok-4.20-non-reasoning"},{"value":"spacexai/grok-4.20-reasoning","name":"spacexai/grok-4.20-reasoning"},{"value":"spacexai/grok-4.1-fast-non-reasoning","name":"spacexai/grok-4.1-fast-non-reasoning"},{"value":"spacexai/grok-4.1-fast-reasoning","name":"spacexai/grok-4.1-fast-reasoning"},{"value":"amazon/nova-pro","name":"amazon/nova-pro"},{"value":"anthropic/claude-fable-5.1","name":"anthropic/claude-fable-5.1"},{"value":"anthropic/claude-fable-5","name":"anthropic/claude-fable-5"},{"value":"openai/gpt-6.1-sol","name":"openai/gpt-6.1-sol"},{"value":"openai/gpt-6.1-sol-fast","name":"openai/gpt-6.1-sol-fast"},{"value":"openai/gpt-6-luna","name":"openai/gpt-6-luna"},{"value":"openai/gpt-6-luna-fast","name":"openai/gpt-6-luna-fast"},{"value":"openai/gpt-6-sol","name":"openai/gpt-6-sol"},{"value":"openai/gpt-6-sol-fast","name":"openai/gpt-6-sol-fast"},{"value":"openai/gpt-6-astra","name":"openai/gpt-6-astra"},{"value":"openai/gpt-6-astra-fast","name":"openai/gpt-6-astra-fast"},{"value":"openai/gpt-oss-safeguard-120b","name":"openai/gpt-oss-safeguard-120b"},{"value":"openai/gpt-oss-safeguard-20b","name":"openai/gpt-oss-safeguard-20b"},{"value":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b"},{"value":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b"},{"value":"openai/gpt-4.1","name":"openai/gpt-4.1"},{"value":"openai/gpt-4.1-fast","name":"openai/gpt-4.1-fast"},{"value":"openai/gpt-4.1-nano","name":"openai/gpt-4.1-nano"},{"value":"openai/gpt-4.1-nano-fast","name":"openai/gpt-4.1-nano-fast"},{"value":"openai/gpt-4o","name":"openai/gpt-4o"},{"value":"openai/gpt-4o-fast","name":"openai/gpt-4o-fast"},{"value":"openai/gpt-4-turbo","name":"openai/gpt-4-turbo"},{"value":"openai/gpt-3.5-turbo","name":"openai/gpt-3.5-turbo"},{"value":"google/gemma-4-26b-a4b-it","name":"google/gemma-4-26b-a4b-it"},{"value":"deepseek/deepseek-v3.2","name":"deepseek/deepseek-v3.2"},{"value":"deepseek/deepseek-v3.2-thinking","name":"deepseek/deepseek-v3.2-thinking"},{"value":"deepseek/deepseek-r1","name":"deepseek/deepseek-r1"},{"value":"meta/llama-4-maverick","name":"meta/llama-4-maverick"},{"value":"meta/llama-4-scout","name":"meta/llama-4-scout"},{"value":"meta/llama-3.3-70b","name":"meta/llama-3.3-70b"},{"value":"meta/llama-3.1-70b","name":"meta/llama-3.1-70b"},{"value":"meta/llama-3.1-8b","name":"meta/llama-3.1-8b"},{"value":"alibaba/qwen3.8-2.4t-a95b","name":"alibaba/qwen3.8-2.4t-a95b"},{"value":"alibaba/qwen3.8-max","name":"alibaba/qwen3.8-max"},{"value":"alibaba/qwen3-next-80b-a3b-instruct","name":"alibaba/qwen3-next-80b-a3b-instruct"},{"value":"alibaba/qwen3-next-80b-a3b-thinking","name":"alibaba/qwen3-next-80b-a3b-thinking"},{"value":"alibaba/qwen3-coder-30b-a3b","name":"alibaba/qwen3-coder-30b-a3b"},{"value":"alibaba/qwen3-coder","name":"alibaba/qwen3-coder"},{"value":"alibaba/qwen3-coder-next","name":"alibaba/qwen3-coder-next"},{"value":"alibaba/qwen-3-235b","name":"alibaba/qwen-3-235b"},{"value":"alibaba/qwen-3-32b","name":"alibaba/qwen-3-32b"},{"value":"fireworks/ember-1","name":"fireworks/ember-1"},{"value":"zai/glm-5.3-fast","name":"zai/glm-5.3-fast"},{"value":"zai/glm-5.3","name":"zai/glm-5.3"},{"value":"nvidia/nemotron-3.5-lightning","name":"nvidia/nemotron-3.5-lightning"},{"value":"moonshotai/kimi-k3-fast","name":"moonshotai/kimi-k3-fast"},{"value":"moonshotai/kimi-k3","name":"moonshotai/kimi-k3"},{"value":"zai/glm-5.2-fast","name":"zai/glm-5.2-fast"},{"value":"zai/glm-5.2","name":"zai/glm-5.2"},{"value":"nvidia/nemotron-3-ultra-550b-a55b","name":"nvidia/nemotron-3-ultra-550b-a55b"},{"value":"spacexai/grok-build-0.1","name":"spacexai/grok-build-0.1"},{"value":"nvidia/nemotron-3-super-120b-a12b","name":"nvidia/nemotron-3-super-120b-a12b"},{"value":"zai/glm-5","name":"zai/glm-5"},{"value":"moonshotai/kimi-k2.5","name":"moonshotai/kimi-k2.5"},{"value":"zai/glm-4.7","name":"zai/glm-4.7"},{"value":"nvidia/nemotron-nano-12b-v2-vl","name":"nvidia/nemotron-nano-12b-v2-vl"},{"value":"nvidia/nemotron-nano-9b-v2","name":"nvidia/nemotron-nano-9b-v2"},{"value":"amazon/nova-micro","name":"amazon/nova-micro"},{"value":"deepseek/deepseek-v4.1-flash","name":"deepseek/deepseek-v4.1-flash"},{"value":"deepseek/deepseek-v4-flash","name":"deepseek/deepseek-v4-flash"},{"value":"deepseek/deepseek-v4-flash-0731","name":"deepseek/deepseek-v4-flash-0731"},{"value":"zai/glm-5.3-flash","name":"zai/glm-5.3-flash"},{"value":"zai/glm-4.7-flash","name":"zai/glm-4.7-flash"},{"value":"anthropic/claude-haiku-5.5","name":"anthropic/claude-haiku-5.5"},{"value":"anthropic/claude-haiku-4.5","name":"anthropic/claude-haiku-4.5"},{"value":"anthropic/claude-3-haiku","name":"anthropic/claude-3-haiku"},{"value":"openai/gpt-5.4-mini","name":"openai/gpt-5.4-mini"},{"value":"openai/gpt-5.4-mini-fast","name":"openai/gpt-5.4-mini-fast"},{"value":"openai/gpt-5-mini","name":"openai/gpt-5-mini"},{"value":"openai/gpt-5-mini-fast","name":"openai/gpt-5-mini-fast"},{"value":"openai/gpt-4.1-mini","name":"openai/gpt-4.1-mini"},{"value":"openai/gpt-4.1-mini-fast","name":"openai/gpt-4.1-mini-fast"},{"value":"openai/o4-mini","name":"openai/o4-mini"},{"value":"openai/o4-mini-fast","name":"openai/o4-mini-fast"},{"value":"openai/o3-mini","name":"openai/o3-mini"},{"value":"openai/gpt-4o-mini","name":"openai/gpt-4o-mini"},{"value":"openai/gpt-4o-mini-fast","name":"openai/gpt-4o-mini-fast"},{"value":"google/gemini-3.8-flash","name":"google/gemini-3.8-flash"},{"value":"google/gemini-3.7-flash","name":"google/gemini-3.7-flash"},{"value":"google/gemini-3.5-flash-lite","name":"google/gemini-3.5-flash-lite"},{"value":"google/gemini-3.6-flash","name":"google/gemini-3.6-flash"},{"value":"google/gemini-3.5-flash","name":"google/gemini-3.5-flash"},{"value":"google/gemini-3.1-flash-lite","name":"google/gemini-3.1-flash-lite"},{"value":"google/gemini-3-flash","name":"google/gemini-3-flash"},{"value":"google/gemini-2.5-flash-lite","name":"google/gemini-2.5-flash-lite"},{"value":"google/gemini-2.5-flash","name":"google/gemini-2.5-flash"},{"value":"google/gemini-2.5-pro","name":"google/gemini-2.5-pro"},{"value":"minimax/minimax-m3","name":"minimax/minimax-m3"},{"value":"minimax/minimax-m2.5","name":"minimax/minimax-m2.5"},{"value":"minimax/minimax-m2.1","name":"minimax/minimax-m2.1"},{"value":"amazon/nova-2-lite","name":"amazon/nova-2-lite"},{"value":"amazon/nova-lite","name":"amazon/nova-lite"},{"value":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview"},{"value":"spacexai/grok-4.20-multi-agent-beta","name":"spacexai/grok-4.20-multi-agent-beta"},{"value":"spacexai/grok-4.20-non-reasoning-beta","name":"spacexai/grok-4.20-non-reasoning-beta"},{"value":"spacexai/grok-4.20-reasoning-beta","name":"spacexai/grok-4.20-reasoning-beta"}]},{"id":"mode","name":"Session Mode","description":"Controls how the agent requests permission","category":"mode","type":"select","currentValue":"ask","options":[{"value":"code","name":"Code","description":"Write and modify code with full tool access","permissionMode":"auto"},{"value":"ask","name":"Ask","description":"Request permission before making any changes","permissionMode":"ask"}]},{"id":"effort","name":"Reasoning Effort","description":"Controls how much the model thinks before responding","category":"thought_level","type":"select","currentValue":"xhigh","options":[{"value":"auto","name":"default"},{"value":"low","name":"low"},{"value":"medium","name":"medium"},{"value":"high","name":"high"},{"value":"xhigh","name":"xhigh"},{"value":"max","name":"max"}]}],"modes":{"currentModeId":"ask","availableModes":[{"id":"code","name":"Code","description":"Write and modify code with full tool access"},{"id":"ask","name":"Ask","description":"Request permission before making any changes"}]}}}} {"type":"emit_inbound","label":"notification:session/update:available_commands_update","frame":{"kind":"notification","method":"session/update","params":{"sessionId":"fx-session-01","update":{"sessionUpdate":"available_commands_update","availableCommands":[]}}}} {"type":"expect_outbound","label":"request:session/set_config_option","frame":{"kind":"request","method":"session/set_config_option","params":{"sessionId":"fx-session-01","configId":"effort","value":"medium"}}} diff --git a/docs/user/providers-fx.md b/docs/user/providers-fx.md index 312ca7898f6c4..4f80998169d43 100644 --- a/docs/user/providers-fx.md +++ b/docs/user/providers-fx.md @@ -27,6 +27,8 @@ T3 Code does not show fx's backend selector. To use Codex, Grok, or Vercel AI Ga Type `$` in the composer to list the skills fx finds in its skill folders, in the order fx's own skill menu shows them. When two different skills share a name, the menu lists the one fx loads for that name: the first copy in fx's folder order, starting with the workspace. The menu shows one skill per name regardless of case; to run a skill whose name differs only in case, such as `Review` next to `review`, type its exact name. +fx threads load the MCP servers from fx's profile config, `~/.fx/mcp.json`, on the machine that runs the T3 Code server. + ## Permission modes fx offers two composer modes. diff --git a/packages/provider-acp/src/server/adapter.ts b/packages/provider-acp/src/server/adapter.ts index ffaa205d4ab9e..dc12bd7aa1e14 100644 --- a/packages/provider-acp/src/server/adapter.ts +++ b/packages/provider-acp/src/server/adapter.ts @@ -210,6 +210,7 @@ export interface AcpAdapterV2RuntimeInput { readonly processEnvironment?: NodeJS.ProcessEnv; readonly resumeSessionId?: string; readonly interruptPromptOnCancel?: boolean; + readonly sessionMeta?: NonNullable; readonly clientCapabilities: EffectAcpSchema.InitializeRequest["clientCapabilities"]; readonly clientInfo: AcpSessionRuntime.AcpSessionRuntimeOptions["clientInfo"]; readonly requestLogger?: NonNullable; diff --git a/packages/provider-fx/src/server/acpSupport.ts b/packages/provider-fx/src/server/acpSupport.ts index b77a4431faf1a..5e93585c9a455 100644 --- a/packages/provider-fx/src/server/acpSupport.ts +++ b/packages/provider-fx/src/server/acpSupport.ts @@ -56,6 +56,8 @@ export const FX_SUPPORTED_RUNTIME_MODES = [ ] as const satisfies ReadonlyArray; /** fx 0.0.13 answers a cancelled prompt with `stopReason: cancelled`. */ export const FX_ACP_CANCEL_BEHAVIOR = "wait-for-prompt" as const; +/** fx inherits the user's `~/.fx/mcp.json` servers only when session setup asks for them. */ +export const FX_SESSION_META = { fx: { profileMcpServers: true } }; /** * Supervised runs fx's `ask` mode and Auto its automatic review. An explicit diff --git a/packages/provider-fx/src/server/adapter.ts b/packages/provider-fx/src/server/adapter.ts index b48293f4fb986..0837da3337c35 100644 --- a/packages/provider-fx/src/server/adapter.ts +++ b/packages/provider-fx/src/server/adapter.ts @@ -19,6 +19,7 @@ import { applyFxEffortDefault, applyFxModelSelection, FX_DRIVER_KIND, + FX_SESSION_META, fxPermissionDisposition, fxSessionModeForPolicy, makeFxAcpRuntime, @@ -180,7 +181,10 @@ function makeFxAcpAdapterFlavor(options: FxAdapterV2Options): AcpAdapterV2Flavor driver: FX_DRIVER_KIND, runtimeHarness: "fx", capabilities: FxProviderCapabilitiesV2, - makeRuntime: (input) => makeRuntime(input).pipe(Effect.map(withFxSessionMode)), + makeRuntime: (input) => + makeRuntime({ ...input, sessionMeta: () => FX_SESSION_META }).pipe( + Effect.map(withFxSessionMode), + ), applyModelSelection: ({ runtime, modelSelection }) => applyFxModelSelection(runtime, modelSelection, options.defaultModel).pipe( Effect.tap(() => applyFxEffortDefault(runtime, modelSelection)), From 93cd25a99b29f608787b9ad1b26c95ef5c1d67c1 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:55:46 -0800 Subject: [PATCH 920/922] fix(acp-registry): executables named like ..agent count as inside their install folder (#35840) Co-authored-by: Claude Opus 5.5 --- .../src/server/AcpRegistrySupport.test.ts | 34 +++++++++++++++++++ .../src/server/AcpRegistrySupport.ts | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/provider-acp-registry/src/server/AcpRegistrySupport.test.ts b/packages/provider-acp-registry/src/server/AcpRegistrySupport.test.ts index a54a55b458a08..e503b678e037a 100644 --- a/packages/provider-acp-registry/src/server/AcpRegistrySupport.test.ts +++ b/packages/provider-acp-registry/src/server/AcpRegistrySupport.test.ts @@ -709,6 +709,40 @@ describe("AcpRegistrySupport", () => { ); }); + it.effect("installs a contained binary whose name starts with two dots", () => { + const agent = makeAgent({ + binary: { "linux-x86_64": { archive: archiveUrl, cmd: "..example-agent" } }, + }); + return Effect.gen(function* () { + const fileSystem = yield* FileSystem.FileSystem; + const cacheDir = yield* fileSystem.makeTempDirectoryScoped({ + prefix: "t3-acp-registry-dot-name-", + }); + const resolver = yield* AcpRegistrySupport.makeAcpRegistryCatalog({ + cacheDir, + toolsDir: `${cacheDir}/tools`, + registryUrl, + }); + const resolved = yield* resolver.resolve(settings(), "/workspace"); + + expect(resolved.spawn.command).toContain( + "/tools/example-agent/1.2.3/linux-x86_64/..example-agent", + ); + }).pipe( + Effect.scoped, + Effect.provide( + layerResolver((request) => + Effect.succeed( + HttpClientResponse.fromWeb( + request, + new Response(request.url === registryUrl ? makeRegistry(agent) : "#!/bin/sh\n"), + ), + ), + ), + ), + ); + }); + it.effect("keeps a prepared binary ready after the registry advances its version", () => { const makeBinaryAgent = (version: string) => ({ ...makeAgent({ diff --git a/packages/provider-acp-registry/src/server/AcpRegistrySupport.ts b/packages/provider-acp-registry/src/server/AcpRegistrySupport.ts index 2b6c3c483cf53..3b9de1bedc51e 100644 --- a/packages/provider-acp-registry/src/server/AcpRegistrySupport.ts +++ b/packages/provider-acp-registry/src/server/AcpRegistrySupport.ts @@ -1361,7 +1361,7 @@ export const makeAcpRegistryCatalog = Effect.fn("AcpRegistryCatalog.make")(funct const rootRealPath = yield* fileSystem.realPath(root); const executableRealPath = yield* fileSystem.realPath(executablePath); const relative = path.relative(rootRealPath, executableRealPath); - if (relative.startsWith("..") || path.isAbsolute(relative)) { + if (relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) { return yield* new AcpRegistryError({ reason: "archive_invalid", detail: "ACP Registry archive command resolves outside its installation directory.", From 0f0c1ca196943505ef454c0002a3a9918919e2ed Mon Sep 17 00:00:00 2001 From: MarcoDotIO Date: Sat, 14 Nov 2026 23:55:55 -0500 Subject: [PATCH 921/922] fix(server): usage mapped onto a Pi, Cursor or Antigravity model prices at that model's rate (#32219) Co-authored-by: Julius Marminge --- .../src/provider/Drivers/AntigravityUsage.ts | 7 +- .../Drivers/antigravityUsageReader.ts | 15 ++-- apps/server/src/usage/UsageService.test.ts | 70 +++++++++++++++++++ apps/server/src/usage/UsageService.ts | 7 ++ .../server/src/usage/usageAggregation.test.ts | 1 + apps/server/src/usage/usageAggregation.ts | 11 ++- packages/provider-core/src/server/usage.ts | 16 +++-- packages/provider-cursor/src/server/driver.ts | 2 + packages/provider-pi/src/server/usage.ts | 2 + 9 files changed, 116 insertions(+), 15 deletions(-) diff --git a/apps/server/src/provider/Drivers/AntigravityUsage.ts b/apps/server/src/provider/Drivers/AntigravityUsage.ts index 5cb55ed77ac09..2eb9744a3e42a 100644 --- a/apps/server/src/provider/Drivers/AntigravityUsage.ts +++ b/apps/server/src/provider/Drivers/AntigravityUsage.ts @@ -15,7 +15,11 @@ import * as Layer from "effect/Layer"; import * as Path from "effect/Path"; import { resolveAntigravityInstanceDirectories } from "../antigravityAuthSupport.ts"; -import { makeAntigravityUsageCache, readAntigravityUsage } from "./antigravityUsageReader.ts"; +import { + antigravityRateModel, + makeAntigravityUsageCache, + readAntigravityUsage, +} from "./antigravityUsageReader.ts"; export class AntigravityUsage extends Context.Service< AntigravityUsage, @@ -123,6 +127,7 @@ export const layer = Layer.effect(AntigravityUsage, make); export const antigravityUsageReader: ProviderUsageReader = { kind: "scan", provider: "antigravity", + rateModel: antigravityRateModel, scan: ({ instances, windowStartMs }) => AntigravityUsage.pipe(Effect.flatMap((usage) => usage.scan({ instances, windowStartMs }))), }; diff --git a/apps/server/src/provider/Drivers/antigravityUsageReader.ts b/apps/server/src/provider/Drivers/antigravityUsageReader.ts index 4d473f50c9d67..532233f7facce 100644 --- a/apps/server/src/provider/Drivers/antigravityUsageReader.ts +++ b/apps/server/src/provider/Drivers/antigravityUsageReader.ts @@ -129,18 +129,19 @@ const MODEL_IDS: Record = { }; // Effort and routing variants share the base model's price. -function withRateModel(record: UsageRecord): UsageRecord { - const base = record.model.replace( - /-(?:extra-low|low|medium|high|tiered|control|thinking|agent)$/, - "", - ); - const rateModel = /^gemini-3-flash-(?:agent(?:-[ab])?|[ab])$/.test(record.model) +export const antigravityRateModel = (model: string) => { + const base = model.replace(/-(?:extra-low|low|medium|high|tiered|control|thinking|agent)$/, ""); + return /^gemini-3-flash-(?:agent(?:-[ab])?|[ab])$/.test(model) ? "gemini-3.5-flash" - : record.model === "gemini-3.7-flash-safety-le" + : model === "gemini-3.7-flash-safety-le" ? "gemini-3.7-flash" : base === "gemini-3-flash" ? "gemini-3-flash-preview" : base; +}; + +function withRateModel(record: UsageRecord): UsageRecord { + const rateModel = antigravityRateModel(record.model); return rateModel === record.model ? record : { ...record, rateModel }; } diff --git a/apps/server/src/usage/UsageService.test.ts b/apps/server/src/usage/UsageService.test.ts index 101fafc5bde8d..01cbf3a9f52ce 100644 --- a/apps/server/src/usage/UsageService.test.ts +++ b/apps/server/src/usage/UsageService.test.ts @@ -1227,6 +1227,76 @@ describe("UsageService", () => { }), ); + it.effect("prices Pi usage mapped onto a Pi model at that model's rate", () => + Effect.gen(function* () { + const { home, settings } = yield* setup; + const dir = NodePath.join(home, "pi", "sessions", "project"); + const message = (id: string, model: string) => ({ + type: "message", + id, + timestamp: "2026-08-01T10:00:00Z", + message: { + role: "assistant", + provider: "anthropic", + model, + usage: { input: 10, output: 5 }, + }, + }); + yield* Effect.promise(async () => { + await NodeFSP.mkdir(dir, { recursive: true }); + await NodeFSP.writeFile( + NodePath.join(dir, "session.jsonl"), + [ + { type: "session", id: "session" }, + message("released", "actual-model"), + message("preview", "actual-model-preview"), + ] + .map((line) => encodeUnknownJsonString(line)) + .join("\n") + "\n", + ); + }); + const summary = yield* Effect.gen(function* () { + const service = yield* UsageService.make; + return yield* service.readSummary(WINDOW); + }).pipe( + Effect.scoped, + Effect.provide( + layerService({ + prefix: "usage-pi-model-alias", + home, + ratesDocument: { + "actual-model": { input_cost_per_token: 1, output_cost_per_token: 4 }, + }, + settings: { + ...settings, + usageModelAliases: { "anthropic/actual-model-preview": "anthropic/actual-model" }, + }, + }), + ), + ); + assert.deepStrictEqual( + summary.buckets + .filter((bucket) => bucket.provider === "pi") + .map(({ model, records, unpricedRecords, costUsd, costSource }) => ({ + model, + records, + unpricedRecords, + costUsd, + costSource, + })), + [ + { + model: "anthropic/actual-model", + records: 2, + unpricedRecords: 0, + costUsd: 60, + costSource: "modelPriced", + }, + ], + ); + }), + ); + it.effect( "reads Muse inference history once, persists appended usage, and reprices unknown models", () => diff --git a/apps/server/src/usage/UsageService.ts b/apps/server/src/usage/UsageService.ts index 1a3ec8ced8350..a59fbc66a02ca 100644 --- a/apps/server/src/usage/UsageService.ts +++ b/apps/server/src/usage/UsageService.ts @@ -90,6 +90,12 @@ const scanReaders = BUILT_IN_USAGE_DRIVERS.flatMap((driver) => driver.usage?.kind === "scan" ? [{ driver, reader: driver.usage }] : [], ); +const providerRateModels = new Map( + BUILT_IN_USAGE_DRIVERS.flatMap(({ usage }) => + usage?.rateModel === undefined ? [] : [[usage.provider, usage.rateModel] as const], + ), +); + const transcriptFormats = new Map( transcriptReaders.map(({ reader }) => [reader.provider, reader.format] as const), ); @@ -997,6 +1003,7 @@ export const make = Effect.gen(function* () { rates, priceOverrides, modelAliases, + rateModel: (provider, model) => providerRateModels.get(provider)?.(model), ...(input.modelFilter === undefined ? {} : { modelFilter: input.modelFilter }), }); diff --git a/apps/server/src/usage/usageAggregation.test.ts b/apps/server/src/usage/usageAggregation.test.ts index 3819903606be2..58953fbcfafea 100644 --- a/apps/server/src/usage/usageAggregation.test.ts +++ b/apps/server/src/usage/usageAggregation.test.ts @@ -277,6 +277,7 @@ describe("UsageAggregator", () => { untilDay: "2026-08-31", rates, modelAliases: resolveModelAliases({ "example-preview": "claude-fable-5" }), + rateModel: () => "claude-fable", }); aggregator.add(record()); aggregator.add(record({ model: "example-preview", rateModel: "example-preview-high" })); diff --git a/apps/server/src/usage/usageAggregation.ts b/apps/server/src/usage/usageAggregation.ts index ce7a78a99d9c1..f4c39753548fd 100644 --- a/apps/server/src/usage/usageAggregation.ts +++ b/apps/server/src/usage/usageAggregation.ts @@ -10,7 +10,7 @@ import type { } from "@t3tools/contracts"; import { EMPTY_TOTALS, type UsageRecord } from "@t3tools/provider-core/server/usage"; -import { cacheSavingsUsd, priceUsage, type RateTable } from "./usagePricing.ts"; +import { cacheSavingsUsd, lookupRate, priceUsage, type RateTable } from "./usagePricing.ts"; // en-CA gives ISO-ordered parts in the requested zone; Date getters are host-local. function makeDayFormatter(timeZone: string): (timestampMs: number) => string { @@ -70,6 +70,7 @@ export interface AggregateOptions { readonly rates: RateTable; readonly priceOverrides?: RateTable; readonly modelAliases?: ReadonlyMap; + readonly rateModel?: (provider: UsageRecord["provider"], model: string) => string | undefined; readonly modelFilter?: UsageModelFilter; readonly resolution?: UsageResolution; readonly sinceTimeMs?: number; @@ -341,12 +342,16 @@ export class UsageAggregator { if (priced.costSource === "providerReported") bucket.providerReportedRecords += 1; } - // Aliases use the target's rate, replacing provider-specific rateModel. + // Aliases use the target's rate. Only an unpriced target goes through the provider's own rate naming. #mapModel(record: UsageRecord): UsageRecord { const model = this.#options.modelAliases?.get(record.model); if (model === undefined) return record; const { rateModel: _rateModel, ...rest } = record; - return { ...rest, model }; + const rateModel = + lookupRate(this.#options.rates, model) === null + ? this.#options.rateModel?.(record.provider, model) + : undefined; + return rateModel === undefined ? { ...rest, model } : { ...rest, model, rateModel }; } // Time-ordered records usually reuse the previous bucket; avoid rebuilding its key. diff --git a/packages/provider-core/src/server/usage.ts b/packages/provider-core/src/server/usage.ts index c2c75a641e53a..ff4c14dfefe00 100644 --- a/packages/provider-core/src/server/usage.ts +++ b/packages/provider-core/src/server/usage.ts @@ -105,8 +105,16 @@ export interface ProviderUsageScanInput { readonly awaitRefresh: boolean; } +interface ProviderUsageRateModel { + /** + * The rate-table name for a model ID this provider records with a separate `rateModel`, so + * usage mapped onto that ID prices like the provider's own records of it. + */ + readonly rateModel?: (model: string) => string; +} + export type ProviderUsageReader = - | { + | (ProviderUsageRateModel & { readonly kind: "transcripts"; readonly provider: UsageProviderKind; readonly format: TranscriptUsageFormat; @@ -126,12 +134,12 @@ export type ProviderUsageReader = never, R >; - } - | { + }) + | (ProviderUsageRateModel & { readonly kind: "scan"; readonly provider: UsageProviderKind; /** Fails only when the whole usage read cannot go on; an unreadable source is a status. */ readonly scan: ( input: ProviderUsageScanInput, ) => Effect.Effect, UsageReadError, R>; - }; + }); diff --git a/packages/provider-cursor/src/server/driver.ts b/packages/provider-cursor/src/server/driver.ts index 85ab45b107d71..4b7477295fbd8 100644 --- a/packages/provider-cursor/src/server/driver.ts +++ b/packages/provider-cursor/src/server/driver.ts @@ -10,6 +10,7 @@ import * as FileSystem from "effect/FileSystem"; import * as Path from "effect/Path"; import * as Schema from "effect/Schema"; import * as HttpClient from "effect/http/HttpClient"; +import { cursorRateModel } from "./accountUsage.ts"; import { readCursorUsageLimits } from "./usageLimits.ts"; import * as ProviderHost from "@t3tools/provider-core/server/ProviderHost"; @@ -72,6 +73,7 @@ export const CursorDriver: ProviderDriver< usage: { kind: "scan", provider: "cursor", + rateModel: cursorRateModel, scan: ({ instances, windowStartMs, retentionCutoffMs, awaitRefresh }) => CursorUsageAccounts.CursorUsageAccounts.pipe( Effect.flatMap((accounts) => diff --git a/packages/provider-pi/src/server/usage.ts b/packages/provider-pi/src/server/usage.ts index f3a2cb4ed03c9..2e274b464864a 100644 --- a/packages/provider-pi/src/server/usage.ts +++ b/packages/provider-pi/src/server/usage.ts @@ -129,6 +129,8 @@ export const piUsageReader: ProviderUsageReader = { kind: "transcripts", provider: "pi", format: piUsageFormat, + // Pi model IDs are `/`. + rateModel: (model) => model.slice(model.indexOf("/") + 1), directories: Effect.fn("piUsageReader.directories")(function* ({ config, environment }) { const path = yield* Path.Path; const home = yield* HostProcess.HomeDirectory; From 3209fa9534f0d8cc0213963d6dfdb11522bde3d2 Mon Sep 17 00:00:00 2001 From: Wout Stiens <71498452+StiensWout@users.noreply.github.com> Date: Sun, 15 Nov 2026 05:56:02 +0100 Subject: [PATCH 922/922] fix(server): resuming a queue no longer bypasses failed worktree setup (#36616) Co-authored-by: Claude Opus 5.5 Co-authored-by: GPT 6.1 Sol Co-authored-by: Julius Marminge --- apps/server/src/orchestration-v2/Orchestrator.ts | 7 +++++++ apps/server/src/orchestration-v2/runtimeLayer.test.ts | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/apps/server/src/orchestration-v2/Orchestrator.ts b/apps/server/src/orchestration-v2/Orchestrator.ts index 3b15161670c01..6d32118b17f6b 100644 --- a/apps/server/src/orchestration-v2/Orchestrator.ts +++ b/apps/server/src/orchestration-v2/Orchestrator.ts @@ -15217,6 +15217,13 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio cause: "Continue the limited thread before resuming its queue.", }); } + if (worktreeSetupPending(projection)) { + return yield* new OrchestratorDispatchError({ + commandId: command.commandId, + commandType: command.type, + cause: "Retry worktree setup or choose a workspace before resuming the queue.", + }); + } const now = yield* DateTime.now; const queued = projection.runs.filter((run) => run.status === "queued"); for (const run of queued) { diff --git a/apps/server/src/orchestration-v2/runtimeLayer.test.ts b/apps/server/src/orchestration-v2/runtimeLayer.test.ts index d488c76f313b1..3ad71bc5177ea 100644 --- a/apps/server/src/orchestration-v2/runtimeLayer.test.ts +++ b/apps/server/src/orchestration-v2/runtimeLayer.test.ts @@ -7996,6 +7996,15 @@ it.layer(layerTest)("OrchestrationV2LayerLive lifecycle", (it) => { yield* witness.end("active", "completed"); assert.equal(yield* Queue.take(witness.startedRunIds), (yield* witness.runFor("queued")).id); assert.isTrue((yield* dispatcher.runFor("issue")).queueHeld); + const resume = yield* orchestrator + .dispatch({ + type: "queue.resume", + commandId: CommandId.make(`${dispatcherId}:resume`), + threadId: dispatcherId, + }) + .pipe(Effect.flip); + assert.include(String(resume.cause), "Retry worktree setup"); + assert.isTrue((yield* dispatcher.runFor("issue")).queueHeld); }), );

@@ -415,29 +453,37 @@ function projectSubdirectory(repositoryRoot: string | undefined, workspaceRoot: : ""; } -function defaultSelection(files: readonly ProjectIgnoredFile[]): ReadonlySet { - return new Set( +function defaultSelection( + files: readonly ProjectIgnoredFile[], +): ReadonlyMap { + return new Map( files .filter( (file) => file.byteLength <= COPYABLE_FILE_MAX_BYTES && isDefaultCopiedFile(file.path), ) - .map((file) => file.path), + .map((file) => [file.path, file]), ); } function IgnoredFileRow({ file, checked, + disabled, onCheckedChange, }: { file: ProjectIgnoredFile; checked: boolean; + disabled: boolean; onCheckedChange: (checked: boolean) => void; }) { const tooLarge = file.byteLength > COPYABLE_FILE_MAX_BYTES; return ( ( query: string, pageSize: number, operation: "directorySearch" | "fileSearch" | "grep" | "mixedSearch", - execute: () => Result, + execute: () => Promise>, ): Effect.fn.Return { - const result = yield* Effect.try({ + // fff's searches wait on its picker lock, which its watcher can hold for minutes. + const result = yield* Effect.tryPromise({ try: execute, catch: (cause) => new WorkspaceSearchIndexSearchFailed({ cwd, queryLength: query.length, pageSize, - reason: `FileFinder.${operation} threw unexpectedly.`, + reason: `FileFinder.${operation} rejected unexpectedly.`, cause, }), }); @@ -616,9 +626,12 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( const directories: string[] = []; // fff's pageIndex is an offset into the results, not a page number. for (let pageIndex = 0; ; pageIndex += SYMLINK_DIRECTORY_PAGE_SIZE) { - const result = yield* Effect.sync(() => { + const result = yield* Effect.promise(async () => { try { - return finder.directorySearch("", { pageIndex, pageSize: SYMLINK_DIRECTORY_PAGE_SIZE }); + return await finder.directorySearchAsync("", { + pageIndex, + pageSize: SYMLINK_DIRECTORY_PAGE_SIZE, + }); } catch { return undefined; } @@ -629,7 +642,6 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( if (directory) directories.push(directory); } if (result.value.items.length < SYMLINK_DIRECTORY_PAGE_SIZE) return directories; - yield* Effect.yieldNow; } }, ); @@ -682,7 +694,7 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( }); const scanSymlinkEntries = Effect.fn("WorkspaceSearchIndex.scanSymlinkEntries")(function* () { - const indexComplete = !finder.isScanning(); + const indexComplete = !(yield* isScanning); const directories = yield* listIndexedDirectories(); const scanned = yield* Effect.forEach( ["", ...directories], @@ -833,7 +845,7 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( query: string, pageSize: number, operation: "directorySearch" | "fileSearch" | "mixedSearch", - execute: (pageSize: number) => Result>, + execute: (pageSize: number) => Promise>>, pathOf: (item: I) => string, ): Effect.fn.Return, WorkspaceSearchIndexSearchFailed> { let size = pageSize; @@ -895,12 +907,12 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( const list: WorkspaceSearchIndex["Service"]["list"] = Effect.fn("WorkspaceSearchIndex.list")( function* () { - const incompleteBeforeQuery = hasIncompleteInitialScan(); + const incompleteBeforeQuery = yield* hasIncompleteInitialScan(); const result = yield* searchVisible( "", WORKSPACE_INDEX_PAGE_SIZE, "mixedSearch", - (pageSize) => finder.mixedSearch("", { pageSize }), + (pageSize) => finder.mixedSearchAsync("", { pageSize }), mixedItemPath, ); const mapped = mapMixedSearchResult(result, WORKSPACE_INDEX_MAX_ENTRIES, hostIsWindows); @@ -941,7 +953,7 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( query, pageSize, "fileSearch", - (size) => finder.fileSearch(query, { pageSize: size }), + (size) => finder.fileSearchAsync(query, { pageSize: size }), (item) => item.relativePath, ); return merge(mapFileSearchResult(result, indexLimit, hostIsWindows, imageOnly)); @@ -951,7 +963,7 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( query, pageSize, "directorySearch", - (size) => finder.directorySearch(query, { pageSize: size }), + (size) => finder.directorySearchAsync(query, { pageSize: size }), (item) => item.relativePath, ); return merge(mapDirectorySearchResult(result, indexLimit, hostIsWindows)); @@ -960,7 +972,7 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( query, pageSize, "mixedSearch", - (size) => finder.mixedSearch(query, { pageSize: size }), + (size) => finder.mixedSearchAsync(query, { pageSize: size }), mixedItemPath, ); return merge(mapMixedSearchResult(result, indexLimit, hostIsWindows)); @@ -973,7 +985,7 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( // matching is subsequence-based, so dropping them still matches "[id]" and "a{b}" paths. // "{" is dropped only when the query finds nothing as a glob, so "*.{ts,tsx}" keeps working. const query = rawQuery.replaceAll("[", ""); - const incompleteBeforeQuery = hasIncompleteInitialScan(); + const incompleteBeforeQuery = yield* hasIncompleteInitialScan(); let mapped = yield* searchNames(query, limit, kind, imageOnly); if (mapped.entries.length === 0 && query.includes("{")) { mapped = yield* searchNames(query.replaceAll("{", ""), limit, kind, imageOnly); @@ -998,7 +1010,7 @@ export const make = Effect.fn("WorkspaceSearchIndex.make")(function* ( do { const remainingTimeBudgetMs = Math.max(1, Math.ceil(deadline - performance.now())); const result = yield* runSearch(input.query, input.limit, "grep", () => - finder.grep(searchQuery, { + finder.grepAsync(searchQuery, { mode: regexMode ? "regex" : "plain", smartCase: !input.caseSensitive && !regexMode, maxMatchesPerFile: Math.min(CONTENT_SEARCH_MAX_MATCHES_PER_FILE, rawPageSize), diff --git a/patches/@ff-labs__fff-node@0.11.0.patch b/patches/@ff-labs__fff-node@0.11.0.patch index 8468783d2a6a5..198ac430e0d18 100644 --- a/patches/@ff-labs__fff-node@0.11.0.patch +++ b/patches/@ff-labs__fff-node@0.11.0.patch @@ -30,10 +30,10 @@ index 0f90eedca20655ccd30b8f28e433b2094341fbdf..c2ef86927d6e3ab0e8584330fa0ac3fd /** Total number of items (files + dirs) that matched */ totalMatched: number; diff --git a/dist/finder.d.ts b/dist/finder.d.ts -index 452102d720cc19b0560cfc9e2f1a320687047c92..3d3211c70a7de4b97792edb32cc9466c8ba89547 100644 +index 452102d720cc19b0560cfc9e2f1a320687047c92..490dba5277c8d751b53ed239c0ce77f3e11f9c43 100644 --- a/dist/finder.d.ts +++ b/dist/finder.d.ts -@@ -242,6 +242,10 @@ export declare class FileFinder implements FileFinderApi { +@@ -242,6 +242,18 @@ export declare class FileFinder implements FileFinderApi { * background watcher might have missed. */ scanFiles(): Result; @@ -41,10 +41,18 @@ index 452102d720cc19b0560cfc9e2f1a320687047c92..3d3211c70a7de4b97792edb32cc9466c + * Trigger a rescan without blocking the JS thread. Patched in T3 Code. + */ + scanFilesAsync(): Promise>; ++ /** `fileSearch` without blocking the JS thread. Patched in T3 Code. */ ++ fileSearchAsync(query: string, options?: SearchOptions): Promise>; ++ /** `directorySearch` without blocking the JS thread. Patched in T3 Code. */ ++ directorySearchAsync(query: string, options?: DirSearchOptions): Promise>; ++ /** `mixedSearch` without blocking the JS thread. Patched in T3 Code. */ ++ mixedSearchAsync(query: string, options?: SearchOptions): Promise>; ++ /** `grep` without blocking the JS thread. Patched in T3 Code. */ ++ grepAsync(query: string, options?: GrepOptions): Promise>; /** * Check if a scan is currently in progress. */ -@@ -254,6 +258,10 @@ export declare class FileFinder implements FileFinderApi { +@@ -254,6 +266,10 @@ export declare class FileFinder implements FileFinderApi { * Get the current scan progress. */ getScanProgress(): Result; @@ -56,7 +64,7 @@ index 452102d720cc19b0560cfc9e2f1a320687047c92..3d3211c70a7de4b97792edb32cc9466c * Wait for the initial file scan to complete. * Non-blocking: polls `isScanning` and yields to the event loop between checks. diff --git a/dist/index.js b/dist/index.js -index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588ac7f86cc9 100644 +index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..5d9fbf45095bd2b2ff1c321c03b85414498bde57 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,7 +1,7 @@ @@ -140,7 +148,20 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a if ("ok" in res) return res; freeResult(res.rawPtr); return { ok: true, value: void 0 }; -@@ -426,9 +459,9 @@ function ffiDestroy(handle) { +@@ -417,18 +450,20 @@ function ffiCreate(basePath, frecencyDbPath, historyDbPath, _useUnsafeNoLock, en + } + function ffiDestroy(handle) { + loadLibrary(); +- load({ ++ return load({ + library: LIBRARY_KEY, + funcName: "fff_destroy", + retType: DataType.Void, + paramsType: [DataType.External], +- paramsValue: [handle] ++ paramsValue: [handle], ++ runInNewThread: true ++ }).catch(() => { }); } var FFF_FILE_ITEM_STRUCT = { @@ -153,7 +174,7 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a size: DataType.U64, modified: DataType.U64, access_frecency_score: DataType.I64, -@@ -445,8 +478,9 @@ var FFF_SCORE_STRUCT = { +@@ -445,8 +480,9 @@ var FFF_SCORE_STRUCT = { distance_penalty: DataType.I32, current_file_penalty: DataType.I32, combo_match_boost: DataType.I32, @@ -164,7 +185,7 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a }; var FFF_SEARCH_RESULT_STRUCT = { items: DataType.External, -@@ -462,8 +496,8 @@ var FFF_SEARCH_RESULT_STRUCT = { +@@ -462,8 +498,8 @@ var FFF_SEARCH_RESULT_STRUCT = { location_end_col: DataType.I32 }; var FFF_DIR_ITEM_STRUCT = { @@ -175,7 +196,7 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a max_access_frecency: DataType.I32 }; var FFF_DIR_SEARCH_RESULT_STRUCT = { -@@ -475,9 +509,9 @@ var FFF_DIR_SEARCH_RESULT_STRUCT = { +@@ -475,9 +511,9 @@ var FFF_DIR_SEARCH_RESULT_STRUCT = { }; var FFF_MIXED_ITEM_STRUCT = { item_type: DataType.U8, @@ -188,7 +209,7 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a size: DataType.U64, modified: DataType.U64, access_frecency_score: DataType.I64, -@@ -500,10 +534,10 @@ var FFF_MIXED_SEARCH_RESULT_STRUCT = { +@@ -500,10 +536,10 @@ var FFF_MIXED_SEARCH_RESULT_STRUCT = { location_end_col: DataType.I32 }; var FFF_GREP_MATCH_STRUCT = { @@ -203,7 +224,7 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a match_ranges: DataType.External, context_before: DataType.External, context_after: DataType.External, -@@ -598,18 +632,13 @@ function readMixedItemFromRaw(raw) { +@@ -598,18 +634,13 @@ function readMixedItemFromRaw(raw) { } function callAccessor(funcName, resultPtr, index, structDef) { loadLibrary(); @@ -224,7 +245,7 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a } function ptrOffset(base, bytes) { return load({ -@@ -766,6 +795,7 @@ function parseSearchResult(rawPtr) { +@@ -766,6 +797,7 @@ function parseSearchResult(rawPtr) { } const items = []; const scores = []; @@ -232,7 +253,7 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a for (let i = 0; i < count; i++) { const rawItem = callAccessor( "fff_search_result_get_item", -@@ -774,13 +804,15 @@ function parseSearchResult(rawPtr) { +@@ -774,13 +806,15 @@ function parseSearchResult(rawPtr) { FFF_FILE_ITEM_STRUCT ); items.push(readFileItemFromRaw(rawItem)); @@ -255,7 +276,7 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a } load({ library: LIBRARY_KEY, -@@ -824,6 +856,7 @@ function parseDirSearchResult(rawPtr) { +@@ -824,6 +858,7 @@ function parseDirSearchResult(rawPtr) { const count = sr.count; const items = []; const scores = []; @@ -263,7 +284,7 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a for (let i = 0; i < count; i++) { const rawItem = callAccessor( "fff_dir_search_result_get_item", -@@ -832,13 +865,15 @@ function parseDirSearchResult(rawPtr) { +@@ -832,13 +867,15 @@ function parseDirSearchResult(rawPtr) { FFF_DIR_ITEM_STRUCT ); items.push(readDirItemFromRaw(rawItem)); @@ -286,7 +307,7 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a } load({ library: LIBRARY_KEY, -@@ -897,6 +932,7 @@ function parseMixedSearchResult(rawPtr) { +@@ -897,6 +934,7 @@ function parseMixedSearchResult(rawPtr) { } const items = []; const scores = []; @@ -294,7 +315,7 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a for (let i = 0; i < count; i++) { const rawItem = callAccessor( "fff_mixed_search_result_get_item", -@@ -905,13 +941,15 @@ function parseMixedSearchResult(rawPtr) { +@@ -905,13 +943,15 @@ function parseMixedSearchResult(rawPtr) { FFF_MIXED_ITEM_STRUCT ); items.push(readMixedItemFromRaw(rawItem)); @@ -317,7 +338,83 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a } load({ library: LIBRARY_KEY, -@@ -1188,7 +1226,11 @@ var FFF_SCAN_PROGRESS_STRUCT = { +@@ -932,7 +972,7 @@ function parseMixedSearchResult(rawPtr) { + } + return { ok: true, value: result }; + } +-function ffiSearch(handle, query, currentFile, maxThreads, pageIndex, pageSize, comboBoostMultiplier, minComboCount) { ++function ffiSearch(handle, query, currentFile, maxThreads, pageIndex, pageSize, comboBoostMultiplier, minComboCount, onNativeThread = false) { + loadLibrary(); + const rawPtr = load({ + library: LIBRARY_KEY, +@@ -966,9 +1006,10 @@ function ffiSearch(handle, query, currentFile, maxThreads, pageIndex, pageSize, + comboBoostMultiplier, + minComboCount + ], +- freeResultMemory: false ++ freeResultMemory: false, ++ runInNewThread: onNativeThread + }); +- return parseSearchResult(rawPtr); ++ return onNativeThread ? rawPtr.then(parseSearchResult) : parseSearchResult(rawPtr); + } + function ffiGlob(handle, pattern, currentFile, maxThreads, pageIndex, pageSize) { + loadLibrary(); +@@ -995,7 +1036,7 @@ function ffiGlob(handle, pattern, currentFile, maxThreads, pageIndex, pageSize) + }); + return parseSearchResult(rawPtr); + } +-function ffiSearchDirectories(handle, query, currentFile, maxThreads, pageIndex, pageSize) { ++function ffiSearchDirectories(handle, query, currentFile, maxThreads, pageIndex, pageSize, onNativeThread = false) { + loadLibrary(); + const rawPtr = load({ + library: LIBRARY_KEY, +@@ -1016,11 +1057,12 @@ function ffiSearchDirectories(handle, query, currentFile, maxThreads, pageIndex, + // page_size + ], + paramsValue: [handle, query, currentFile ?? "", maxThreads, pageIndex, pageSize], +- freeResultMemory: false ++ freeResultMemory: false, ++ runInNewThread: onNativeThread + }); +- return parseDirSearchResult(rawPtr); ++ return onNativeThread ? rawPtr.then(parseDirSearchResult) : parseDirSearchResult(rawPtr); + } +-function ffiSearchMixed(handle, query, currentFile, maxThreads, pageIndex, pageSize, comboBoostMultiplier, minComboCount) { ++function ffiSearchMixed(handle, query, currentFile, maxThreads, pageIndex, pageSize, comboBoostMultiplier, minComboCount, onNativeThread = false) { + loadLibrary(); + const rawPtr = load({ + library: LIBRARY_KEY, +@@ -1054,11 +1096,12 @@ function ffiSearchMixed(handle, query, currentFile, maxThreads, pageIndex, pageS + comboBoostMultiplier, + minComboCount + ], +- freeResultMemory: false ++ freeResultMemory: false, ++ runInNewThread: onNativeThread + }); +- return parseMixedSearchResult(rawPtr); ++ return onNativeThread ? rawPtr.then(parseMixedSearchResult) : parseMixedSearchResult(rawPtr); + } +-function ffiLiveGrep(handle, query, mode, maxFileSize, maxMatchesPerFile, smartCase, fileOffset, pageLimit, timeBudgetMs, enforceTimeBudget, beforeContext, afterContext, classifyDefinitions) { ++function ffiLiveGrep(handle, query, mode, maxFileSize, maxMatchesPerFile, smartCase, fileOffset, pageLimit, timeBudgetMs, enforceTimeBudget, beforeContext, afterContext, classifyDefinitions, onNativeThread = false) { + loadLibrary(); + const rawPtr = load({ + library: LIBRARY_KEY, +@@ -1107,9 +1150,10 @@ function ffiLiveGrep(handle, query, mode, maxFileSize, maxMatchesPerFile, smartC + afterContext, + classifyDefinitions + ], +- freeResultMemory: false ++ freeResultMemory: false, ++ runInNewThread: onNativeThread + }); +- return parseGrepResult(rawPtr); ++ return onNativeThread ? rawPtr.then(parseGrepResult) : parseGrepResult(rawPtr); + } + function ffiMultiGrep(handle, patternsJoined, constraints, maxFileSize, maxMatchesPerFile, smartCase, fileOffset, pageLimit, timeBudgetMs, enforceTimeBudget, beforeContext, afterContext, classifyDefinitions) { + loadLibrary(); +@@ -1188,7 +1232,11 @@ var FFF_SCAN_PROGRESS_STRUCT = { }; function ffiGetScanProgress(handle) { loadLibrary(); @@ -330,16 +427,18 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a if ("ok" in res) return res; const handlePtr = res.struct.handle; freeResult(res.rawPtr); -@@ -1429,6 +1471,8 @@ var FileFinder = class _FileFinder { +@@ -1429,6 +1477,10 @@ var FileFinder = class _FileFinder { handle; /** Native ids of this instance's active watch subscriptions. */ watchers = /* @__PURE__ */ new Set(); + /** Patched in T3 Code: in-flight native-thread calls by function name. */ + nativeThreadCalls = /* @__PURE__ */ new Map(); ++ /** Patched in T3 Code: the last search queued on a native thread. */ ++ nativeSearchTail = null; constructor(handle) { this.handle = handle; } -@@ -1485,12 +1529,37 @@ var FileFinder = class _FileFinder { +@@ -1485,12 +1537,115 @@ var FileFinder = class _FileFinder { destroy() { if (this.handle !== null) { const handle = this.handle; @@ -349,13 +448,15 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a - ffiWatchCleanupAfterDestroy(handle, this.watchers); - this.watchers.clear(); + this.watchers = /* @__PURE__ */ new Set(); -+ const release = () => { -+ ffiDestroy(handle); ++ // Patched in T3 Code: freeing the handle waits on the picker lock, so it runs on a ++ // native thread, after any native-thread call still using the handle. ++ const release = () => ffiDestroy(handle).finally(() => { + ffiWatchCleanupAfterDestroy(handle, watchers); -+ }; -+ // Patched in T3 Code: a native-thread call may still be using the handle. -+ if (this.nativeThreadCalls.size > 0) { -+ Promise.allSettled(this.nativeThreadCalls.values()).then(release); ++ }); ++ const pending = [...this.nativeThreadCalls.values()]; ++ if (this.nativeSearchTail) pending.push(this.nativeSearchTail); ++ if (pending.length > 0) { ++ Promise.allSettled(pending).then(release); + } else { + release(); + } @@ -376,11 +477,87 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a + }); + this.nativeThreadCalls.set(funcName, call); + return call; ++ } ++ /** ++ * Patched in T3 Code: runs a search on a libuv pool thread. Searches on one finder run one at ++ * a time, so while fff's watcher holds the picker lock a finder holds at most one pool thread. ++ */ ++ searchOnNativeThread(search) { ++ const guard = this.ensureAlive(); ++ if (!guard.ok) return Promise.resolve(guard); ++ const call = (this.nativeSearchTail ?? Promise.resolve()).then(() => { ++ const alive = this.ensureAlive(); ++ return alive.ok ? search(alive.value) : alive; ++ }).catch((cause) => err(String(cause))); ++ this.nativeSearchTail = call; ++ call.finally(() => { ++ if (this.nativeSearchTail === call) this.nativeSearchTail = null; ++ }); ++ return call; ++ } ++ /** Patched in T3 Code: `fileSearch` without blocking the JS thread. */ ++ fileSearchAsync(query, options) { ++ return this.searchOnNativeThread((handle) => ffiSearch( ++ handle, ++ query, ++ options?.currentFile ?? "", ++ options?.maxThreads ?? 0, ++ options?.pageIndex ?? 0, ++ options?.pageSize ?? 0, ++ options?.comboBoostMultiplier ?? 0, ++ options?.minComboCount ?? 0, ++ true ++ )); ++ } ++ /** Patched in T3 Code: `directorySearch` without blocking the JS thread. */ ++ directorySearchAsync(query, options) { ++ return this.searchOnNativeThread((handle) => ffiSearchDirectories( ++ handle, ++ query, ++ options?.currentFile ?? null, ++ options?.maxThreads ?? 0, ++ options?.pageIndex ?? 0, ++ options?.pageSize ?? 0, ++ true ++ )); ++ } ++ /** Patched in T3 Code: `mixedSearch` without blocking the JS thread. */ ++ mixedSearchAsync(query, options) { ++ return this.searchOnNativeThread((handle) => ffiSearchMixed( ++ handle, ++ query, ++ options?.currentFile ?? "", ++ options?.maxThreads ?? 0, ++ options?.pageIndex ?? 0, ++ options?.pageSize ?? 0, ++ options?.comboBoostMultiplier ?? 0, ++ options?.minComboCount ?? 0, ++ true ++ )); ++ } ++ /** Patched in T3 Code: `grep` without blocking the JS thread. */ ++ grepAsync(query, options) { ++ return this.searchOnNativeThread((handle) => ffiLiveGrep( ++ handle, ++ query, ++ options?.mode ?? "plain", ++ options?.maxFileSize ?? 0, ++ options?.maxMatchesPerFile ?? 0, ++ options?.smartCase ?? true, ++ options?.cursor?._offset ?? 0, ++ options?.pageSize ?? 0, ++ options?.timeBudgetMs ?? 0, ++ options?.enforceTimeBudget ?? false, ++ options?.beforeContext ?? 0, ++ options?.afterContext ?? 0, ++ options?.classifyDefinitions ?? false, ++ true ++ )); + } /** * Check if this instance has been destroyed. */ -@@ -1757,6 +1826,18 @@ var FileFinder = class _FileFinder { +@@ -1757,6 +1912,18 @@ var FileFinder = class _FileFinder { if (!guard.ok) return guard; return ffiScanFiles(guard.value); } @@ -399,7 +576,7 @@ index 7c1d722eabc8d8eb98998eb48c5fe9d70b749d10..138e590bdcb1bc4fd33f7d195b8d588a /** * Check if a scan is currently in progress. */ -@@ -1838,7 +1919,8 @@ var FileFinder = class _FileFinder { +@@ -1838,7 +2005,8 @@ var FileFinder = class _FileFinder { if (!guard.ok) return guard; const deadline = Date.now() + timeoutMs; while (true) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 744838ebefa9b..bbca8110a7837 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -364,7 +364,7 @@ patchedDependencies: '@cursor/sdk@1.2.0': 57f502128bf6accd976963b126e227c86a45d815a53a8dc450461beae3bed4a4 '@effect/vitest@4.1.2': 299510b71c36537a832a67e9d160a5f112a5f326a29e95c41cb45fc8234e47c7 '@expo/ui@58.0.27': 9f2547678939f4ec78fe45163b6455aad63d3c80353d7e0cc783f6a61a7ccc2f - '@ff-labs/fff-node@0.11.0': a71dc3a5544fc47afacf0fe9da04dccec3018e625a76c96087ebfdf35e293768 + '@ff-labs/fff-node@0.11.0': 3be7107340e5f388114da259637828cd47f2b32eb8ae572440715c4e38cffe6e '@legendapp/list@3.7.2': 3c68607b8bb7a531873bcbe0b197d163ef1fdb4d4cf52a4ddf9d2b3804671658 '@muse-code/sdk@1.4.6': 7b495b607fc5d76b444c7c4d58821e839726a30e6f3c53564f0d59f2d5b42101 '@pierre/diffs@1.7.0-beta.3': 4a64f63a0def94c5add9d86d70560d26d6857e1f5150133862e42e1fd77bc4e8 @@ -857,7 +857,7 @@ importers: version: 4.1.2(bufferutil@4.1.0)(effect@4.1.3)(utf-8-validate@6.0.6) '@ff-labs/fff-node': specifier: 0.11.0 - version: 0.11.0(patch_hash=a71dc3a5544fc47afacf0fe9da04dccec3018e625a76c96087ebfdf35e293768) + version: 0.11.0(patch_hash=3be7107340e5f388114da259637828cd47f2b32eb8ae572440715c4e38cffe6e) '@muse-code/sdk': specifier: 1.4.6 version: 1.4.6(patch_hash=7b495b607fc5d76b444c7c4d58821e839726a30e6f3c53564f0d59f2d5b42101)(@types/node@24.12.4) @@ -15148,7 +15148,7 @@ snapshots: '@ff-labs/fff-bin-win32-x64@0.11.0': optional: true - '@ff-labs/fff-node@0.11.0(patch_hash=a71dc3a5544fc47afacf0fe9da04dccec3018e625a76c96087ebfdf35e293768)': + '@ff-labs/fff-node@0.11.0(patch_hash=3be7107340e5f388114da259637828cd47f2b32eb8ae572440715c4e38cffe6e)': dependencies: ffi-rs: 1.3.2 optionalDependencies: From 8171cd09d59ea0f49dd80c31260c8c9f9b8fc675 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 11:14:25 -0800 Subject: [PATCH 237/922] fix(desktop): mouse back and forward stay inside the browser tab (#33276) --- apps/desktop/src/preview/GuestProtocol.ts | 2 +- apps/desktop/src/preview/Manager.test.ts | 63 +++++++++++++++++++++ apps/desktop/src/preview/Manager.ts | 32 +++++++---- apps/desktop/src/preview/PickPreload.ts | 52 ++++++++--------- apps/desktop/src/preview/RecordingCursor.ts | 11 ++-- 5 files changed, 116 insertions(+), 44 deletions(-) diff --git a/apps/desktop/src/preview/GuestProtocol.ts b/apps/desktop/src/preview/GuestProtocol.ts index 0a9f4cb85c008..1d24079d1947f 100644 --- a/apps/desktop/src/preview/GuestProtocol.ts +++ b/apps/desktop/src/preview/GuestProtocol.ts @@ -5,7 +5,6 @@ export const ANNOTATION_CAPTURED_CHANNEL = "preview:annotation-captured"; export const ANNOTATION_THEME_CHANNEL = "preview:annotation-theme"; export const ANNOTATION_SEND_ENABLED_CHANNEL = "preview:annotation-send-enabled"; export const HUMAN_INPUT_CHANNEL = "preview:human-input"; -export const MOUSE_NAVIGATE_CHANNEL = "preview:mouse-navigate"; // Sent to the hosting element (ipc-message). The web app mirrors this // literal in HostedBrowserWebview because it cannot import from the desktop app. export const POINTER_DOWN_HOST_CHANNEL = "preview:pointer-down"; @@ -15,6 +14,7 @@ export const RECORDING_POINTER_CHANNEL = "preview:recording-pointer"; export const RECORDING_KEY_CHANNEL = "preview:recording-key"; export const RECORDING_INPUT_CHANNEL = "preview:recording-input"; export const RECORDING_CONTROLLER_CHANNEL = "preview:recording-controller"; +export const THUMB_PRESS_CHANNEL = "preview:thumb-press"; export const PASSKEY_CREATE_CHANNEL = "preview:passkey-create"; export const PASSKEY_GET_CHANNEL = "preview:passkey-get"; export const PASSKEY_BRIDGE_ARGUMENT = "--t3code-preview-passkey-bridge"; diff --git a/apps/desktop/src/preview/Manager.test.ts b/apps/desktop/src/preview/Manager.test.ts index b344b1ac93b2b..530a1200378b1 100644 --- a/apps/desktop/src/preview/Manager.test.ts +++ b/apps/desktop/src/preview/Manager.test.ts @@ -745,6 +745,69 @@ describe("PreviewManager", () => { ), ); + effectIt.effect("keeps mouse back and forward buttons inside the preview tab", () => + withManager((manager) => + Effect.gen(function* () { + const preview = makeFaviconWebContents(); + const goBack = vi.fn(); + const goForward = vi.fn(); + const send = vi.fn(); + let canGoBack = false; + Object.assign(preview.webContents, { + navigationHistory: { + canGoBack: () => canGoBack, + canGoForward: () => true, + goBack, + goForward, + }, + getZoomFactor: () => 2, + send, + }); + fromId.mockReturnValue(preview.webContents); + yield* manager.createTab("tab_mouse_navigation"); + yield* manager.registerWebview("tab_mouse_navigation", 42); + + // Electron reports thumb buttons as "back"/"forward" for every frame of the guest, iframes included. + const beforeMouse = preview.listeners.get("before-mouse-event"); + expect(beforeMouse, "guest has no before-mouse-event listener").toBeDefined(); + const press = (type: "mouseDown" | "mouseUp", button: string) => { + const preventDefault = vi.fn(); + beforeMouse!({ preventDefault } as never, { type, button, x: 10, y: 10 } as never); + return preventDefault; + }; + + // At the start of tab history the press is still swallowed, or the host app goes back instead. + expect(press("mouseDown", "back")).toHaveBeenCalledOnce(); + expect(press("mouseUp", "back")).toHaveBeenCalledOnce(); + expect(goBack).not.toHaveBeenCalled(); + + canGoBack = true; + expect(press("mouseDown", "back")).toHaveBeenCalledOnce(); + expect(goBack).not.toHaveBeenCalled(); + expect(press("mouseUp", "back")).toHaveBeenCalledOnce(); + expect(goBack).toHaveBeenCalledOnce(); + expect(press("mouseDown", "forward")).toHaveBeenCalledOnce(); + expect(press("mouseUp", "forward")).toHaveBeenCalledOnce(); + expect(goForward).toHaveBeenCalledOnce(); + for (const button of ["left", "right"]) { + expect(press("mouseDown", button)).not.toHaveBeenCalled(); + expect(press("mouseUp", button)).not.toHaveBeenCalled(); + } + expect(goBack).toHaveBeenCalledOnce(); + expect(goForward).toHaveBeenCalledOnce(); + // The guest replays dropped presses for human input and recordings, in CSS px. + expect(send.mock.calls.filter(([channel]) => channel === "preview:thumb-press")).toEqual([ + ["preview:thumb-press", "down", 5, 5, 3], + ["preview:thumb-press", "up", 5, 5, 3], + ["preview:thumb-press", "down", 5, 5, 3], + ["preview:thumb-press", "up", 5, 5, 3], + ["preview:thumb-press", "down", 5, 5, 4], + ["preview:thumb-press", "up", 5, 5, 4], + ]); + }), + ), + ); + effectIt.effect("keeps editing and forwarded shortcuts in whichever tab holds focus", () => withManager((manager) => Effect.gen(function* () { diff --git a/apps/desktop/src/preview/Manager.ts b/apps/desktop/src/preview/Manager.ts index 0fc48165ffccf..49b61c73316f3 100644 --- a/apps/desktop/src/preview/Manager.ts +++ b/apps/desktop/src/preview/Manager.ts @@ -81,13 +81,13 @@ import { CANCEL_PICK_CHANNEL, ELEMENT_PICKED_CHANNEL, HUMAN_INPUT_CHANNEL, - MOUSE_NAVIGATE_CHANNEL, PAGE_UNHANDLED_SHORTCUT_CHANNEL, RECORDING_CURSOR_CHANNEL, RECORDING_INPUT_CHANNEL, RECORDING_CONTROLLER_CHANNEL, RECORDING_POINTER_CHANNEL, START_PICK_CHANNEL, + THUMB_PRESS_CHANNEL, } from "./GuestProtocol.ts"; import { isPreviewAnnotationPayload } from "./PickedElementPayload.ts"; import { captureFavicon, safeHttpOrigin, selectFaviconCandidates } from "./FaviconCapture.ts"; @@ -1490,15 +1490,27 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function const humanInput = (_event: unknown, rawSignal?: unknown): void => { runFork(handleHumanInput(rawSignal)); }; - const mouseNavigate = (_event: unknown, payload?: unknown): void => { - const direction = - typeof payload === "object" && payload !== null && "direction" in payload - ? (payload as { direction?: unknown }).direction - : undefined; - if (direction !== "back" && direction !== "forward") return; + // Chromium navigates the outermost WebContents (the host app) on thumb buttons, even from guest iframes. + const beforeMouse = (event: Electron.Event, mouse: Electron.MouseInputEvent): void => { + // Electron reports thumb buttons as "back" and "forward", which its typings omit. + const button: string | undefined = mouse.button; + if (button !== "back" && button !== "forward") return; + if (mouse.type !== "mouseDown" && mouse.type !== "mouseUp") return; + event.preventDefault(); + // The page never sees the press, so the guest replays it; these coordinates are DIPs, not CSS px. + const zoom = wc.getZoomFactor(); + const phase = mouse.type === "mouseDown" ? "down" : "up"; + wc.send( + THUMB_PRESS_CHANNEL, + phase, + mouse.x / zoom, + mouse.y / zoom, + button === "back" ? 3 : 4, + ); + if (phase !== "up") return; runFork( attempt({ operation: "mouseNavigate", tabId, webContentsId: wc.id }, () => { - if (direction === "back") { + if (button === "back") { if (wc.navigationHistory.canGoBack()) wc.navigationHistory.goBack(); } else if (wc.navigationHistory.canGoForward()) { wc.navigationHistory.goForward(); @@ -1608,9 +1620,9 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function wc.off("found-in-page", foundInPage as never); wc.off("did-create-window", windowCreated); wc.off("before-input-event", beforeInput); + wc.off("before-mouse-event", beforeMouse); wc.ipc.off(HUMAN_INPUT_CHANNEL, humanInput); wc.ipc.off(RECORDING_INPUT_CHANNEL, recordingInput); - wc.ipc.off(MOUSE_NAVIGATE_CHANNEL, mouseNavigate); wc.ipc.off(PAGE_UNHANDLED_SHORTCUT_CHANNEL, pageUnhandledShortcut); detachPasskeys(); }).pipe(Effect.ignore), @@ -1631,7 +1643,6 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function wc.on("found-in-page", foundInPage as never); wc.ipc.on(HUMAN_INPUT_CHANNEL, humanInput); wc.ipc.on(RECORDING_INPUT_CHANNEL, recordingInput); - wc.ipc.on(MOUSE_NAVIGATE_CHANNEL, mouseNavigate); wc.ipc.on(PAGE_UNHANDLED_SHORTCUT_CHANNEL, pageUnhandledShortcut); detachPasskeys = passkeys.attachGuest(wc); wc.setWindowOpenHandler((details) => { @@ -1659,6 +1670,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function }); wc.on("did-create-window", windowCreated); wc.on("before-input-event", beforeInput); + wc.on("before-mouse-event", beforeMouse); }); yield* Ref.update(attachedRef, (attached) => replaceMap(attached, (copy) => { diff --git a/apps/desktop/src/preview/PickPreload.ts b/apps/desktop/src/preview/PickPreload.ts index cbaf873e49332..42867b9d9cb44 100644 --- a/apps/desktop/src/preview/PickPreload.ts +++ b/apps/desktop/src/preview/PickPreload.ts @@ -39,7 +39,6 @@ import { CANCEL_PICK_CHANNEL, ELEMENT_PICKED_CHANNEL, HUMAN_INPUT_CHANNEL, - MOUSE_NAVIGATE_CHANNEL, POINTER_DOWN_HOST_CHANNEL, PAGE_UNHANDLED_SHORTCUT_CHANNEL, RECORDING_CURSOR_CHANNEL, @@ -48,6 +47,7 @@ import { RECORDING_INPUT_CHANNEL, RECORDING_CONTROLLER_CHANNEL, START_PICK_CHANNEL, + THUMB_PRESS_CHANNEL, } from "./GuestProtocol.ts"; const OVERLAY_ATTRIBUTE = "data-t3code-annotation-ui"; const INPUT_LAYER_ATTRIBUTE = "data-t3code-annotation-input"; @@ -249,34 +249,28 @@ const isolateOverlayKey = (event: KeyboardEvent): void => { for (const type of ["keydown", "keypress", "keyup"] as const) window.addEventListener(type, isolateOverlayKey, true); -const MOUSE_BUTTON_BACK = 3; -const MOUSE_BUTTON_FORWARD = 4; - -const navigationDirectionForButton = (button: number): "back" | "forward" | null => { - if (button === MOUSE_BUTTON_BACK) return "back"; - if (button === MOUSE_BUTTON_FORWARD) return "forward"; - return null; -}; - -// Chromium routes thumb-button navigation to the focused WebContents; navigate this hovered guest explicitly. -const suppressNavigationButton = (event: MouseEvent): void => { - if (!event.isTrusted || navigationDirectionForButton(event.button) === null) return; - event.preventDefault(); - event.stopImmediatePropagation(); -}; - -const requestNavigationForButton = (event: MouseEvent): void => { - if (!event.isTrusted) return; - const direction = navigationDirectionForButton(event.button); - if (direction === null) return; - event.preventDefault(); - event.stopImmediatePropagation(); - ipcRenderer.send(MOUSE_NAVIGATE_CHANNEL, { direction }); -}; - -window.addEventListener("mousedown", suppressNavigationButton, true); -window.addEventListener("mouseup", requestNavigationForButton, true); -window.addEventListener("auxclick", suppressNavigationButton, true); +let replayedThumbPress: { readonly x: number; readonly y: number } | null = null; +ipcRenderer.on( + THUMB_PRESS_CHANNEL, + (_event, phase: unknown, x: unknown, y: unknown, button: unknown) => { + if (phase !== "down" && phase !== "up") return; + if (typeof x !== "number" || typeof y !== "number" || typeof button !== "number") return; + // Main reports presses inside a frame in that frame's coordinates. + const inFrame = document.querySelector("iframe:hover, frame:hover, object:hover, embed:hover"); + if (phase === "up") { + const pressed = replayedThumbPress; + replayedThumbPress = null; + // A replayed press is always released, at its own point if the release lands in a frame. + if (pressed) recordingCursor?.press(inFrame ? pressed : { x, y }, "up"); + return; + } + if (inFrame) return; + replayedThumbPress = { x, y }; + ipcRenderer.sendToHost(POINTER_DOWN_HOST_CHANNEL); + ipcRenderer.send(HUMAN_INPUT_CHANNEL, { kind: "pointer", x, y, button }); + recordingCursor?.press({ x, y }, "down"); + }, +); const nextId = createAnnotationIdSource(); diff --git a/apps/desktop/src/preview/RecordingCursor.ts b/apps/desktop/src/preview/RecordingCursor.ts index 29f1865de291f..ab74c361b68e0 100644 --- a/apps/desktop/src/preview/RecordingCursor.ts +++ b/apps/desktop/src/preview/RecordingCursor.ts @@ -156,13 +156,15 @@ export function installRecordingCursor( moveHuman(point); pointer(point, "move"); }; + const press = (point: { readonly x: number; readonly y: number }, phase: "down" | "up") => { + if (phase === "down") moveHuman(point); + pointer(point, phase); + }; const pointerDown = (event: PointerEvent) => { - if (event.pointerType === "touch") return; - moveHuman({ x: event.clientX, y: event.clientY }); - pointer({ x: event.clientX, y: event.clientY }, "down"); + if (event.pointerType !== "touch") press({ x: event.clientX, y: event.clientY }, "down"); }; const pointerUp = (event: PointerEvent) => { - if (event.pointerType !== "touch") pointer({ x: event.clientX, y: event.clientY }, "up"); + if (event.pointerType !== "touch") press({ x: event.clientX, y: event.clientY }, "up"); }; const keyDown = (event: KeyboardEvent) => { if (event.isComposing || event.repeat) return; @@ -196,6 +198,7 @@ export function installRecordingCursor( window.addEventListener("blur", hide); return { move, + press, keyPress, setController, setTheme, From fcd06873e8df977a882ba025e706aba4f160acb0 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 11:18:45 -0800 Subject: [PATCH 238/922] fix(web): removing a checkout moves its open draft to a remaining checkout (#36276) --- .../ProjectSettingsPanel.browser.test.tsx | 34 ++++++++++++++++++- .../settings/ProjectSettingsPanel.tsx | 15 +++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/apps/web/src/components/settings/ProjectSettingsPanel.browser.test.tsx b/apps/web/src/components/settings/ProjectSettingsPanel.browser.test.tsx index 9576820832323..0d505c3250f11 100644 --- a/apps/web/src/components/settings/ProjectSettingsPanel.browser.test.tsx +++ b/apps/web/src/components/settings/ProjectSettingsPanel.browser.test.tsx @@ -132,7 +132,8 @@ vi.mock(import("../files/projectFilesQueryState"), async (original) => ({ getProjectFileQueryAtom: () => missingProjectFile, })); -import { useComposerDraftStore } from "../../composerDraftStore"; +import { scopeProjectRef } from "@t3tools/client-runtime/environment"; +import { DraftId, useComposerDraftStore } from "../../composerDraftStore"; import { appAtomRegistry } from "../../rpc/atomRegistry"; import { assetEnvironment } from "../../state/assets"; import { buildSidebarProjectSnapshots } from "../../sidebarProjectGrouping"; @@ -418,6 +419,37 @@ describe("project settings permissions", () => { expect(screen.router.state.location.href).toBe(initialHref); }); + it("moves a draft on the removed checkout to a remaining checkout of the group", async () => { + setup(); + const draftId = DraftId.make("draft-handed-off"); + const [primaryProject, remoteProject] = state.projects; + const drafts = useComposerDraftStore.getState(); + drafts.setLogicalProjectDraftThreadId( + "github.com/example/shared-repo", + scopeProjectRef(primaryId, primaryProject!.id), + draftId, + ); + // "Add to another machine" hands the open draft to the new checkout this way. + drafts.setDraftThreadContext(draftId, { + projectRef: scopeProjectRef(remoteId, remoteProject!.id), + environmentSelection: "manual", + loadBalancedEnvironmentId: null, + }); + drafts.setPrompt(draftId, "keep this prompt"); + await using screen = await mountPanel(); + + await userEvent.click(removeCheckout(screen, "/work/remote")); + await vi.waitFor(() => expect(state.releaseUploads).toHaveBeenCalledOnce()); + + expect(useComposerDraftStore.getState().getDraftSession(draftId)).toMatchObject({ + environmentId: primaryId, + projectId: primaryProject!.id, + }); + expect(useComposerDraftStore.getState().getComposerDraft(draftId)?.prompt).toBe( + "keep this prompt", + ); + }); + it("rechecks every removal target after confirmation before deleting or clearing drafts", async () => { setup(); const confirmed = deferred(); diff --git a/apps/web/src/components/settings/ProjectSettingsPanel.tsx b/apps/web/src/components/settings/ProjectSettingsPanel.tsx index c1e15267234b3..3f370ce7108d3 100644 --- a/apps/web/src/components/settings/ProjectSettingsPanel.tsx +++ b/apps/web/src/components/settings/ProjectSettingsPanel.tsx @@ -362,6 +362,13 @@ function ProjectDetail({ if (checkProjectAccess(members, "Failed to remove project")) return; const draftStore = useComposerDraftStore.getState(); + const remainingMember = allMembers.find( + (candidate) => + !members.some( + (member) => + member.environmentId === candidate.environmentId && member.id === candidate.id, + ), + ); for (const member of members) { if (checkProjectAccess([member], "Failed to remove project")) return; const memberThreads = projectThreads.filter( @@ -388,7 +395,13 @@ function ProjectDetail({ memberThreads.map((thread) => scopeThreadRef(thread.environmentId, thread.id)), ); const projectDraftThread = draftStore.getDraftThreadByProjectRef(projectRef); - if (projectDraftThread) { + if (projectDraftThread && remainingMember) { + draftStore.setDraftThreadContext(projectDraftThread.draftId, { + projectRef: scopeProjectRef(remainingMember.environmentId, remainingMember.id), + environmentSelection: "manual", + loadBalancedEnvironmentId: null, + }); + } else if (projectDraftThread) { draftStore.clearDraftThread(projectDraftThread.draftId); } draftStore.clearProjectDraftThreadId(projectRef); From 9efd960925f0899c0a6d045d128557c5d82818e8 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 11:21:49 -0800 Subject: [PATCH 239/922] fix(mobile): a Settings link sent to the running app opens the Settings tab (#36262) --- apps/mobile/src/App.tsx | 23 ++++++----- .../workspace-tab-navigation.test.ts | 39 ++++++++++++++++++- .../features/settings/settings-navigation.ts | 18 +++++++++ 3 files changed, 70 insertions(+), 10 deletions(-) diff --git a/apps/mobile/src/App.tsx b/apps/mobile/src/App.tsx index fc4dfdf3a417a..b92c0ca9d42c5 100644 --- a/apps/mobile/src/App.tsx +++ b/apps/mobile/src/App.tsx @@ -83,7 +83,10 @@ import { splashCanHide, useLaunchSplashHomeRowsPending, } from "./features/home/home-launch-splash"; -import { restoreSettingsLinkState } from "./features/settings/settings-navigation"; +import { + restoreSettingsLinkState, + settingsLinkAction, +} from "./features/settings/settings-navigation"; import { hydrateWorkspaceSelections, launchWorkspaceURL, @@ -143,14 +146,16 @@ const appLinking = { getActionFromState: ( state: Parameters[0], options: Parameters[1], - ): ReturnType => - // Our router handles the selection; React Navigation's type only lists its own actions. - (workspaceDetailLinkAction(state) as ReturnType) ?? - pairingFormLinkAction( - state, - rootNavigationRef.isReady() ? rootNavigationRef.getRootState() : undefined, - ) ?? - getActionFromState(state, options), + ): ReturnType => { + const current = rootNavigationRef.isReady() ? rootNavigationRef.getRootState() : undefined; + return ( + // Our router handles the selection; React Navigation's type only lists its own actions. + (workspaceDetailLinkAction(state) as ReturnType) ?? + pairingFormLinkAction(state, current) ?? + settingsLinkAction(state, current) ?? + getActionFromState(state, options) + ); + }, getStateFromPath: getAppStateFromPath, }; diff --git a/apps/mobile/src/features/layout/workspace/workspace-tab-navigation.test.ts b/apps/mobile/src/features/layout/workspace/workspace-tab-navigation.test.ts index 3f217fd70c8bc..3cd3fe6d0978f 100644 --- a/apps/mobile/src/features/layout/workspace/workspace-tab-navigation.test.ts +++ b/apps/mobile/src/features/layout/workspace/workspace-tab-navigation.test.ts @@ -1,6 +1,7 @@ +import * as NodeModule from "node:module"; import { describe, expect, it } from "vite-plus/test"; -import { restoreSettingsLinkState } from "../../settings/settings-navigation"; +import { restoreSettingsLinkState, settingsLinkAction } from "../../settings/settings-navigation"; import { workspaceSelectionsIn, workspaceTabColumns, @@ -19,6 +20,17 @@ const pullRequest = { params: { environmentId: "env", projectId: "project", repository: "o/r", number: 7 }, }; const settings = { key: "settings", name: "Settings" }; +const requireFromNative = NodeModule.createRequire( + NodeModule.createRequire(import.meta.url).resolve("@react-navigation/native/package.json"), +); +const { getStateFromPath } = requireFromNative("@react-navigation/core") as { + readonly getStateFromPath: typeof import("@react-navigation/native").getStateFromPath; +}; +const { StackRouter } = NodeModule.createRequire( + requireFromNative.resolve("@react-navigation/core/package.json"), +)("@react-navigation/routers") as { + readonly StackRouter: typeof import("@react-navigation/native").StackRouter; +}; const available = { thread: () => true, pullRequest: () => true }; const names = (state: { routes: readonly { name: string }[] }) => state.routes.map((route) => route.name); @@ -218,6 +230,31 @@ describe("Settings links", () => { expect(restoreSettingsLinkState(bare, undefined)).toBe(bare); }); + it("opens a link sent to the running app on the Settings tab, as its button does", () => { + const screens = { + Home: "", + Settings: "settings", + SettingsAbout: "settings/about", + SettingsAppearance: "settings/appearance", + }; + const router = StackRouter({}); + const options = { routeNames: Object.keys(screens), routeParamList: {}, routeGetIdList: {} }; + const open = router.getRehydratedState( + { index: 2, routes: [{ name: "Home" }, { name: "Settings" }, { name: "SettingsAbout" }] }, + options, + ); + const follow = (path: string) => { + const link = getStateFromPath(path, { initialRouteName: "Home", screens })!; + const action = settingsLinkAction(link, open)!; + return router.getStateForAction(open, action, options)!; + }; + + expect(names(follow("settings"))).toEqual(["Home", "Settings"]); + const appearance = follow("settings/appearance"); + expect(names(appearance)).toEqual(["Home", "Settings", "SettingsAppearance"]); + expect(appearance.routes[1]!.key).toBe(open.routes[1]!.key); + }); + it("opens the sign-in link as a modal over the workspace", () => { const state = { routes: [{ name: "Home" }, { name: "SettingsAuth" }] }; expect(restoreSettingsLinkState(state, "SettingsAppearance")).toBe(state); diff --git a/apps/mobile/src/features/settings/settings-navigation.ts b/apps/mobile/src/features/settings/settings-navigation.ts index b97bc948c0a2b..a414d1014a695 100644 --- a/apps/mobile/src/features/settings/settings-navigation.ts +++ b/apps/mobile/src/features/settings/settings-navigation.ts @@ -91,6 +91,24 @@ export function settingsNavigationState, + current: NavigationState | undefined, +) { + const top = link.routes.at(-1); + if (!current || !top || top.state || !isSettingsRoute(top.name)) return undefined; + const page = top.name === "Settings" ? undefined : (top.name as SettingsPageName); + return { + type: "RESET" as const, + payload: settingsNavigationState(current, page, top.params), + target: current.key, + }; +} + /** Opens one Settings page in the Settings tab, from anywhere outside it. */ export function openSettings( navigation: RootStackNavigation, From c83e78fe073db40b17cd6d478a88fe575125bb96 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 11:44:41 -0800 Subject: [PATCH 240/922] fix(web): Shift+Return after closed inline code or bold starts a plain line (#36285) --- ...rPromptEditorTiptap.input.browser.test.tsx | 25 +++++++++++++++++++ apps/web/src/composer-markdown-source.ts | 14 ++++++++--- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/apps/web/src/components/ComposerPromptEditorTiptap.input.browser.test.tsx b/apps/web/src/components/ComposerPromptEditorTiptap.input.browser.test.tsx index cd01804f8efe3..a614f4823f289 100644 --- a/apps/web/src/components/ComposerPromptEditorTiptap.input.browser.test.tsx +++ b/apps/web/src/components/ComposerPromptEditorTiptap.input.browser.test.tsx @@ -599,6 +599,31 @@ describe("Markdown markers around styled text", () => { expected: "**bo**\n**ld** after", marks: { bold: ["bo", "ld"] }, }, + { + name: "a line break after typed inline code leaves the next line plain", + value: "", + caret: 1, + keys: "`Test`{Shift>}{Enter}{/Shift}f", + expected: "`Test`\nf", + marks: { code: ["Test"] }, + }, + { + name: "a line break after typed bold leaves the next line plain", + value: "", + caret: 1, + keys: "**Test**{Shift>}{Enter}{/Shift}f", + expected: "**Test**\nf", + marks: { bold: ["Test"] }, + }, + { + name: "bold turned on after typed bold carries across a line break", + value: "", + caret: 1, + keys: `**Test**${isMacPlatform(navigator.platform) ? "{Meta>}b{/Meta}" : "{Control>}b{/Control}"}{Shift>}{Enter}{/Shift}f`, + expected: "**Test**\n**f**", + // The caret beside f shows it as source. + marks: { bold: ["Test"] }, + }, { name: "splitting a list item inside bold keeps both halves bold", value: "- **bold** after", diff --git a/apps/web/src/composer-markdown-source.ts b/apps/web/src/composer-markdown-source.ts index c4119b981b18c..c57985f12e345 100644 --- a/apps/web/src/composer-markdown-source.ts +++ b/apps/web/src/composer-markdown-source.ts @@ -221,9 +221,9 @@ function collapseRegion(tr: Transaction, region: TextRange, type: MarkType): voi function collapseMarkdownSource( tr: Transaction, keep: (region: TextRange) => boolean = () => false, -): void { +): TextRange[] { const type = tr.doc.type.schema.marks[MARKDOWN_SOURCE_MARK]; - if (!type) return; + if (!type) return []; const regions: TextRange[] = []; for (const region of sourceRegions(tr.doc, type)) { const extended = withAdjacentDelimiters(tr.doc, region); @@ -235,6 +235,7 @@ function collapseMarkdownSource( if (keep(region)) tr.addMark(region.from, region.to, type.create()); else collapseRegion(tr, region, type); } + return regions; } function mapSelection(tr: Transaction, selection: Selection, map: (pos: number) => number) { @@ -248,7 +249,14 @@ function mapSelection(tr: Transaction, selection: Selection, map: (pos: number) /** Parses all shown source first, so a command that splits it keeps its styles. */ export const collapseShownMarkdownSource: Command = ({ tr }) => { - collapseMarkdownSource(tr); + const { selection } = tr; + const type = tr.doc.type.schema.marks[MARKDOWN_SOURCE_MARK]; + const marks = tr.storedMarks ?? selection.$from.marks(); + const regions = collapseMarkdownSource(tr); + // A caret after the closing markers is outside the styles, though parsed text there is inclusive. + if (type && selection.empty && regions.some(({ to }) => to === selection.from)) { + tr.setStoredMarks(type.removeFromSet(marks)); + } return true; }; From e94db17ead0e52813b38c0b67537843b44634d44 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 11:57:35 -0800 Subject: [PATCH 241/922] fix(mobile): adding a folder that is already a project opens it (#34942) --- .../projects/AddProjectScreen.test.ts | 79 +++++++++- .../features/projects/AddProjectScreen.tsx | 143 +++++++++++++----- 2 files changed, 178 insertions(+), 44 deletions(-) diff --git a/apps/mobile/src/features/projects/AddProjectScreen.test.ts b/apps/mobile/src/features/projects/AddProjectScreen.test.ts index ab331d0149e15..4718133f7a5a5 100644 --- a/apps/mobile/src/features/projects/AddProjectScreen.test.ts +++ b/apps/mobile/src/features/projects/AddProjectScreen.test.ts @@ -6,7 +6,11 @@ import * as NodeModule from "node:module"; import type { EnvironmentConnectionPhase } from "@t3tools/client-runtime/connection"; import { workspaceDetailRouter } from "../layout/workspace/workspace-detail-selection"; import type { NavigationState } from "@react-navigation/native"; -import { AuthOrchestrationOperateScope, AuthSourceControlWriteScope } from "@t3tools/contracts"; +import { + AuthFilesystemReadScope, + AuthOrchestrationOperateScope, + AuthSourceControlWriteScope, +} from "@t3tools/contracts"; import * as Cause from "effect/Cause"; import { AsyncResult } from "effect/reactivity"; import { act, createElement, isValidElement, type ReactNode } from "react"; @@ -22,7 +26,9 @@ const state = vi.hoisted(() => ({ id: string; title: string; workspaceRoot: string; + repositoryIdentity?: { canonicalKey: string }; }[], + cloneDestinations: [] as string[], createResult: null as Promise | null, createNewResult: null as Promise | null, startCloneResult: null as Promise | null, @@ -134,7 +140,15 @@ vi.mock("../../state/use-remote-environment-registry", () => ({ }), })); vi.mock("../../state/use-atom-command", () => ({ useAtomCommand: (command: unknown) => command })); -vi.mock("../../state/use-atom-query-runner", () => ({ useAtomQueryRunner: () => () => {} })); +// Only filesystem.browse of `~` answers, with the host's home as its parentPath. +vi.mock("../../state/use-atom-query-runner", () => ({ + useAtomQueryRunner: + () => + async ({ input }: { input?: { partialPath?: string } }) => + input?.partialPath === "~" + ? AsyncResult.success({ parentPath: "/home/tester", entries: [] }) + : undefined, +})); vi.mock("../../state/query", () => ({ useEnvironmentQuery: () => ({ data: null }) })); vi.mock("../../state/presentation", () => ({ useEnvironmentPresentation: () => ({ isReady: true, presentation: null }), @@ -144,6 +158,7 @@ vi.mock("../../state/sourceControl", () => ({ sourceControlEnvironment: { discovery: (input: unknown) => input, startProjectClone: async ({ input }: { input: { destinationPath: string } }) => { + state.cloneDestinations.push(input.destinationPath); if (state.startCloneResult) return state.startCloneResult; NodeFS.mkdirSync(input.destinationPath); return AsyncResult.success(undefined); @@ -230,7 +245,7 @@ function cloneAction() { renderScreen(() => AddProjectDestinationScreen({ environmentId: "environment", - remoteUrl: "https://example.com/repo.git", + remoteUrl: "https://example.com/owner/repo.git", repositoryName: "repo", }), ), @@ -274,6 +289,38 @@ describe("clone project permissions", () => { expect(state.projects).toEqual([]); }, ); + + it.each([ + [ + "opens the existing project of that repository instead of cloning into its folder", + "example.com/owner/repo", + false, + ], + ["leaves a folder holding another repository to the clone", "example.com/owner/other", true], + ])("%s", async (_name, canonicalKey, clones) => { + state.scopes.add(AuthOrchestrationOperateScope); + state.cloneDestinations = []; + state.startCloneResult = Promise.resolve( + AsyncResult.failure(Cause.fail(new Error("Destination is not empty"))), + ); + state.existingProjects = [ + { + environmentId: "environment", + id: "existing", + title: "repo", + workspaceRoot: NodePath.join(state.baseDirectory, "repo"), + repositoryIdentity: { canonicalKey }, + }, + ]; + try { + await cloneAction()(); + + expect(state.cloneDestinations.length > 0).toBe(clones); + } finally { + state.existingProjects = []; + state.startCloneResult = null; + } + }); }); function mountProjectFlow( @@ -488,10 +535,10 @@ describe("add project source environment", () => { }); describe("local project navigation", () => { - function setup() { + function setup(baseDirectory = "/tmp/t3-mobile-audit-fixture") { state.navigationState = undefined; state.scopes = new Set([AuthOrchestrationOperateScope]); - state.baseDirectory = "/tmp/t3-mobile-audit-fixture"; + state.baseDirectory = baseDirectory; state.projects = []; state.dispatch.mockReset(); state.alert.mockReset(); @@ -523,6 +570,28 @@ describe("local project navigation", () => { ); }); + it("opens an existing project typed as a home-relative path instead of creating it", async () => { + state.existingProjects = [ + { + environmentId: "environment", + id: "existing", + title: "bike-documents", + workspaceRoot: "/home/tester/projects/bike-documents", + }, + ]; + try { + const { created, projected, submit } = setup("~/projects/bike-documents/"); + state.scopes.add(AuthFilesystemReadScope); + created.resolve(AsyncResult.success(undefined)); + projected.resolve(null); + await submit(); + + expect(state.projects).toEqual([]); + } finally { + state.existingProjects = []; + } + }); + it("does not replace a reopened flow when the previous submission finishes", async () => { const { created, projected, submit } = setup(); const navigation = mountProjectFlow(false); diff --git a/apps/mobile/src/features/projects/AddProjectScreen.tsx b/apps/mobile/src/features/projects/AddProjectScreen.tsx index 33b7de17c3914..56518cd071eac 100644 --- a/apps/mobile/src/features/projects/AddProjectScreen.tsx +++ b/apps/mobile/src/features/projects/AddProjectScreen.tsx @@ -387,7 +387,26 @@ function useBrowsePathInput( [browseNavigation], ); - return { isBrowseNavigating, pathInput, setPathInput, navigateToBrowsePath }; + // Registered roots are absolute and `~` expands on the host, so ask the host for its home. + const resolveHomePath = async (path: string): Promise => { + if ( + !/^~(?:[\\/]|$)/.test(path) || + !environment || + !readEnvironmentScope(environment.environmentId, AuthFilesystemReadScope) || + !canPreloadBrowsePath(environmentRuntime?.connectionState) + ) { + return path; + } + const home = await loadBrowsePath({ + environmentId: environment.environmentId, + input: { partialPath: "~" }, + }); + return AsyncResult.isSuccess(home) && home.value + ? `${home.value.parentPath.replace(/[\\/]+$/, "")}${path.slice(1)}` + : path; + }; + + return { isBrowseNavigating, pathInput, setPathInput, navigateToBrowsePath, resolveHomePath }; } function useEnvironmentOptions( @@ -730,16 +749,76 @@ async function draftWithPrompt( return draftId; } -function useCreateProject(environment: EnvironmentOption | null) { +function useOpenExistingProject(environment: EnvironmentOption | null) { const openNewTaskDraft = useOpenNewTaskDraft(); - const navigation = useNavigation(); - const createProject = useAtomCommand(projectEnvironment.create, { reportFailure: false }); const updateProject = useAtomCommand(projectEnvironment.update, { label: "project unarchive", }); const projects = useProjects(); - return async (workspaceRoot: string, originRoute = getActiveRoute(navigation)) => { + return async ( + path: string, + originRoute: ReturnType, + clone?: { readonly remoteUrl: string; readonly prompt: string | null }, + ): Promise => { + if (!environment) return false; + const existing = findExistingAddProject({ + projects, + environmentId: environment.environmentId, + path, + }); + if (!existing) return false; + // A folder holding another repository is not this clone; let the clone report it occupied. + if ( + clone && + existing.repositoryIdentity?.canonicalKey !== + sourceControlClients.repositoryKeyFromRemote(clone.remoteUrl) + ) { + return false; + } + const prompt = clone?.prompt; + // Adding an archived project's folder again brings the project back. + const unarchived = + existing.archivedAt == null || + ( + await updateProject({ + environmentId: existing.environmentId, + input: { projectId: existing.id, archived: false }, + }) + )._tag === "Success"; + Dialog.alert( + "Project already exists", + unarchived ? existing.title : `${existing.title} is still archived. Try again later.`, + ); + openNewTaskDraft( + { + environmentId: existing.environmentId, + projectId: existing.id, + title: existing.title, + ...(prompt + ? await draftWithPrompt(existing.environmentId, existing.id, prompt).then( + (draftId) => ({ draftId }), + () => ({}), + ) + : {}), + }, + originRoute, + ); + return true; + }; +} + +function useCreateProject(environment: EnvironmentOption | null) { + const openNewTaskDraft = useOpenNewTaskDraft(); + const navigation = useNavigation(); + const createProject = useAtomCommand(projectEnvironment.create, { reportFailure: false }); + const openExistingProject = useOpenExistingProject(environment); + + return async ( + workspaceRoot: string, + originRoute = getActiveRoute(navigation), + lookupPath = workspaceRoot, + ) => { if ( !environment || !canCreateProjectInEnvironment(environment.connectionState) || @@ -752,33 +831,7 @@ function useCreateProject(environment: EnvironmentOption | null) { return; } - const existing = findExistingAddProject({ - projects, - environmentId: environment.environmentId, - path: workspaceRoot, - }); - if (existing) { - // Adding an archived project's folder again brings the project back. - const unarchived = - existing.archivedAt == null || - ( - await updateProject({ - environmentId: existing.environmentId, - input: { projectId: existing.id, archived: false }, - }) - )._tag === "Success"; - Dialog.alert( - "Project already exists", - unarchived ? existing.title : `${existing.title} is still archived. Try again later.`, - ); - openNewTaskDraft( - { - environmentId: existing.environmentId, - projectId: existing.id, - title: existing.title, - }, - originRoute, - ); + if (await openExistingProject(lookupPath, originRoute)) { return; } @@ -1313,8 +1366,9 @@ export function AddProjectLocalFolderScreen(props: { readonly environmentId?: st environment?.environmentId ?? null, AuthOrchestrationOperateScope, ); + const navigation = useNavigation(); const createProject = useCreateProject(environment); - const { isBrowseNavigating, navigateToBrowsePath, pathInput, setPathInput } = + const { isBrowseNavigating, navigateToBrowsePath, pathInput, setPathInput, resolveHomePath } = useBrowsePathInput(environment); const [isSubmitting, setIsSubmitting] = useState(false); const [error, setError] = useState(null); @@ -1333,7 +1387,11 @@ export function AddProjectLocalFolderScreen(props: { readonly environmentId?: st } setIsSubmitting(true); - const result = await createProject(resolved.path); + const originRoute = getActiveRoute(navigation); + const lookupPath = resolved.path.startsWith("~") + ? await resolveHomePath(resolved.path) + : resolved.path; + const result = await createProject(resolved.path, originRoute, lookupPath); if (result && AsyncResult.isFailure(result)) { setError(errorMessage(Cause.squash(result.cause))); } @@ -1404,11 +1462,9 @@ export function AddProjectDestinationScreen(props: { ? getCloneDirectoryPath(remoteUrl, true, repositoryName) : null; const cloneDirectoryName = ghqDirectoryPath?.split("/").at(-1) ?? repositoryName; - const { isBrowseNavigating, navigateToBrowsePath, pathInput, setPathInput } = useBrowsePathInput( - environment, - cloneDirectoryName, - ghqDirectoryPath ?? repositoryName, - ); + const { isBrowseNavigating, navigateToBrowsePath, pathInput, setPathInput, resolveHomePath } = + useBrowsePathInput(environment, cloneDirectoryName, ghqDirectoryPath ?? repositoryName); + const openExistingProject = useOpenExistingProject(environment); const [isSubmitting, setIsSubmitting] = useState(false); const [error, setError] = useState(null); @@ -1436,6 +1492,15 @@ export function AddProjectDestinationScreen(props: { const originRoute = getActiveRoute(navigation); setIsSubmitting(true); + if ( + await openExistingProject(await resolveHomePath(resolved.path), originRoute, { + remoteUrl, + prompt: prompt ?? null, + }) + ) { + setIsSubmitting(false); + return; + } const title = inferProjectTitleFromPath(resolved.path); const startResult = await startProjectClone({ environmentId: environment.environmentId, From 41e69ffa06574e6528c64f2b607b001966ce5ead Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 12:03:05 -0800 Subject: [PATCH 242/922] fix(contracts): agents keep working after starting an async delegate (#34924) --- evals/mcp-tool-use/cases/orchestration.ndjson | 1 + .../cases/threads-vs-tasks.ndjson | 20 +++++++++---------- .../contracts/src/orchestratorMcp.test.ts | 15 ++++++++++++++ packages/contracts/src/orchestratorMcp.ts | 5 +++-- 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/evals/mcp-tool-use/cases/orchestration.ndjson b/evals/mcp-tool-use/cases/orchestration.ndjson index ead48236bd922..df13d9cd6313b 100644 --- a/evals/mcp-tool-use/cases/orchestration.ndjson +++ b/evals/mcp-tool-use/cases/orchestration.ndjson @@ -44,3 +44,4 @@ {"id": "settle-after-delayed-merge-waits", "area": "orchestration", "kind": "guard", "pattern": "settle before delayed work finishes", "experience": "Asked to merge a PR once its checks pass and then settle this thread, an agent following the #26749 settle bullet can settle in the first turn; a settled thread refuses watch_pull_request and drops PR-watch wakes, so the merge never happens.", "rule": "Asked to settle ... a thread, including this one: call t3_thread_organize. (the request is to settle after the merge, not now)", "privacy": "commit-safe", "notes": "From the CodeRabbit finding on #26765. Settling this thread applies at turn end, and Orchestrator.ts rejects watch wakes on a settled thread. Good: watch #123 and end the turn without settling. gh pr merge --auto plus a settle would still lose the wake that confirms the merge.", "setup": {"role": "top", "priorTurns": [{"role": "user", "text": "Okay this looks good to me. Any risk merging it?"}, {"role": "assistant", "text": "Low risk. [#123](https://github.com/acme/app/pull/123) only adds an accessible title to the HTML preview frame, and the new test covers it. Two checks are still running: Check and Test Web.", "toolCalls": [{"tool": "Bash", "input": {"command": "gh pr view 123 --json title,files --jq '.title, .files[].path'"}, "result": "fix(web): HTML preview frame gets an accessible title\napps/web/src/HtmlPreview.tsx\napps/web/src/HtmlPreview.test.tsx"}, {"tool": "Bash", "input": {"command": "gh pr checks 123"}, "result": "Lint\tpass\t41s\nTypecheck\tpass\t1m2s\nCheck\tpending\t0\nTest Web\tpending\t0"}, {"tool": "link_pull_request", "input": {"url": "https://github.com/acme/app/pull/123"}, "result": {"host": "github.com", "repository": "acme/app", "number": 123, "url": "https://github.com/acme/app/pull/123", "alreadyLinked": false}}]}], "mocks": {"watch_pull_request": "default", "link_pull_request": "default", "t3_thread_organize": {"settlesWhenTurnEnds": true}}, "world": {"branch": "fix/html-preview-title", "commits": [{"sha": "abc1234", "subject": "fix(web): HTML preview frame gets an accessible title"}], "diff": "diff --git a/apps/web/src/HtmlPreview.tsx b/apps/web/src/HtmlPreview.tsx\n--- a/apps/web/src/HtmlPreview.tsx\n+++ b/apps/web/src/HtmlPreview.tsx\n@@ -1,3 +1,3 @@\n export function HtmlPreview({ html }: { html: string }) {\n- return `, + ); + const field = page.locator("#host #field"); + const box = (await field.boundingBox())!; + await page.mouse.click(box.x + box.width / 2, box.y + box.height / 2); + await ServerBrowserPage.type(page, { text: "shadow" }); + expect(await field.inputValue()).toBe("shadow"); + + // Refused for now: focus inside a frame cannot be checked from the top document. + const inner = page.frameLocator("iframe").locator("#inner"); + await inner.click(); + await expect(ServerBrowserPage.type(page, { text: "frame" })).rejects.toMatchObject({ + tag: "PreviewAutomationTargetNotEditableError", + }); + expect(await inner.inputValue()).toBe(""); + }); + it("shows dotted fields as dots wherever their value appears, keeping text values and refs", async () => { await page.setContent(`
password:
@@ -932,6 +951,55 @@ describe("server browser evaluate", () => { }); }); +describe("server browser type", () => { + // As on a desktop tab whose Playwright utility world never answers. + const stalledPage = (focusAnswer: () => Promise, typed: string[]) => + ({ + locator: () => ({ last: () => ({ count: () => new Promise(() => {}) }) }), + evaluate: focusAnswer, + keyboard: { insertText: async (text: string) => void typed.push(text) }, + }) as unknown as Page; + + it("types into the focused field when Playwright's utility world never answers", async () => { + vi.useFakeTimers(); + try { + const typed: string[] = []; + let outcome: unknown = "pending"; + const page = stalledPage(async () => true, typed); + void ServerBrowserPage.type(page, { text: "hello", timeoutMs: 300 }).then( + () => (outcome = "typed"), + (error: unknown) => (outcome = error), + ); + await vi.advanceTimersByTimeAsync(300); + expect(outcome).toBe("typed"); + expect(typed).toEqual(["hello"]); + } finally { + vi.useRealTimers(); + } + }); + + it("stops at its timeout without typing when the page never answers", async () => { + vi.useFakeTimers(); + try { + const typed: string[] = []; + let outcome: unknown = "pending"; + const page = stalledPage(() => new Promise(() => {}), typed); + void ServerBrowserPage.type(page, { text: "hello", timeoutMs: 300 }).then( + () => (outcome = "typed"), + (error: unknown) => (outcome = error), + ); + await vi.advanceTimersByTimeAsync(300); + expect(outcome).toMatchObject({ + tag: "PreviewAutomationTimeoutError", + detail: { timeoutMs: 300 }, + }); + expect(typed).toEqual([]); + } finally { + vi.useRealTimers(); + } + }); +}); + describe("server browser unresponsive script", () => { it("leaves a page that answers alone", async () => { const send = vi.fn(async (_method: string) => ({})); diff --git a/apps/server/src/preview/ServerBrowserPage.ts b/apps/server/src/preview/ServerBrowserPage.ts index 18878cbf2c22d..ac37b9914ef76 100644 --- a/apps/server/src/preview/ServerBrowserPage.ts +++ b/apps/server/src/preview/ServerBrowserPage.ts @@ -896,6 +896,76 @@ const clickTarget = async ( return point; }; +type FocusCandidate = { + readonly tagName: string; + readonly type?: string; + readonly disabled?: boolean; + readonly readOnly?: boolean; + readonly isContentEditable?: boolean; + readonly shadowRoot?: { readonly activeElement: FocusCandidate | null } | null; + readonly focus?: () => void; + getRootNode(): { readonly activeElement?: FocusCandidate | null }; + contains(other: FocusCandidate): boolean; +}; + +// Serialized into the page's main world, so it must not reference module scope. +const focusTextTarget = (target: FocusCandidate | null) => { + let element = + target ?? + (globalThis as unknown as { document: { activeElement: FocusCandidate | null } }).document + .activeElement; + if (target === null) { + while (element?.shadowRoot?.activeElement) element = element.shadowRoot.activeElement; + // Focus inside a frame cannot be checked from here, and an editable frame would pass as contentEditable. + if (element && ["IFRAME", "FRAME", "FENCEDFRAME", "OBJECT", "EMBED"].includes(element.tagName)) + return false; + } + if (element == null) return false; + // Require an enabled, focused text target to avoid losing input or sending it to the previous field. + const nonText = [ + "button", + "checkbox", + "color", + "file", + "hidden", + "image", + "radio", + "range", + "reset", + "submit", + ]; + const textControl = + element.tagName === "TEXTAREA" || + (element.tagName === "INPUT" && !nonText.includes(element.type ?? "text")); + if (!(textControl || element.isContentEditable) || element.disabled || element.readOnly) { + return false; + } + element.focus?.(); + const active = element.getRootNode().activeElement; + return active != null && (active === element || element.contains(active)); +}; + +// A `*:focus` locator needs Playwright's utility world, which some desktop tabs never get. +const focusedTextField = async (page: Page, timeout: number) => { + let timer: ReturnType | undefined; + const expired = new Promise((_, reject) => { + timer = setTimeout( + () => + reject( + new ServerBrowserOperationError({ + tag: "PreviewAutomationTimeoutError", + message: `The page did not report its focused element within ${timeout}ms, so no text was typed.`, + detail: { timeoutMs: timeout }, + }), + ), + timeout, + ); + }); + return await Promise.race([page.evaluate(focusTextTarget, null), expired]).finally(() => + clearTimeout(timer), + ); +}; + export const type = async (page: Page, input: PreviewAutomationTypeInput) => { const timeout = input.timeoutMs ?? DEFAULT_TIMEOUT_MS; const locator = targetLocator(page, input); @@ -903,46 +973,10 @@ export const type = async (page: Page, input: PreviewAutomationTypeInput) => { await locator.fill(input.text, { timeout }); return; } - // A shadow host also matches :focus; use its innermost focused descendant. - const target = locator ?? page.locator("*:focus").last(); const focused = - (locator !== null || (await target.count()) > 0) && - (await target.evaluate( - (element) => { - // Require an enabled, focused text target to avoid losing input or sending it to the previous field. - const control = element as unknown as { - readonly type?: string; - readonly disabled?: boolean; - readonly readOnly?: boolean; - readonly isContentEditable?: boolean; - readonly focus?: () => void; - }; - const nonText = [ - "button", - "checkbox", - "color", - "file", - "hidden", - "image", - "radio", - "range", - "reset", - "submit", - ]; - const textControl = - element.tagName === "TEXTAREA" || - (element.tagName === "INPUT" && !nonText.includes(control.type ?? "text")); - if (!(textControl || control.isContentEditable) || control.disabled || control.readOnly) { - return false; - } - control.focus?.(); - const root = element.getRootNode() as { readonly activeElement?: typeof element | null }; - const active = root.activeElement; - return active != null && (active === element || element.contains(active)); - }, - undefined, - { timeout }, - )); + locator === null + ? await focusedTextField(page, timeout) + : await locator.evaluate(focusTextTarget, undefined, { timeout }); if (focused !== true) { throw new ServerBrowserOperationError({ tag: "PreviewAutomationTargetNotEditableError", From 4aead9e6d99243c4f000df07222308c62022bb6f Mon Sep 17 00:00:00 2001 From: Malte Buttjer Date: Sun, 15 Nov 2026 05:39:32 +0100 Subject: [PATCH 861/922] fix(server): Claude MCP elicitations T3 cannot show are cancelled, not declined (#33575) Co-authored-by: Claude Opus 5.5 --- .../src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts | 4 ++-- .../src/orchestration-v2/Adapters/ClaudeAdapterV2.ts | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts index cb9aadef97ad0..b416bedc88601 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts @@ -7177,7 +7177,7 @@ describe("ClaudeAdapterV2 background wake turns", () => { }).pipe(Effect.scoped, Effect.provide(testLayer)), ); - it.effect("declines URL and value forms without a card", () => + it.effect("cancels URL and value forms without a card", () => Effect.gen(function* () { const { elicit, runtimeRequests } = yield* startElicitationTurn(); for (const request of [ @@ -7191,7 +7191,7 @@ describe("ClaudeAdapterV2 background wake turns", () => { }, }, ] satisfies ReadonlyArray) { - assert.deepEqual(yield* Fiber.join(yield* elicit(request)), { action: "decline" }); + assert.deepEqual(yield* Fiber.join(yield* elicit(request)), { action: "cancel" }); } assert.isEmpty(runtimeRequests()); }).pipe(Effect.scoped, Effect.provide(testLayer)), diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts index 1539b054c6e7c..8f7185eed3004 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts @@ -12215,14 +12215,17 @@ export const makeClaudeAdapterV2 = Effect.fn("makeClaudeAdapterV2")(function* ( const context = yield* Ref.get(activeTurn); if (acceptance === undefined || context === null) { yield* Effect.logWarning( - "Declined an MCP elicitation the approval card cannot answer.", + "Cancelled an MCP elicitation the approval card cannot answer.", { serverName: request.serverName, mode: request.mode, activeTurn: context !== null, }, ); - return { action: "decline" } satisfies ElicitationResult; + // No card was shown, so the user made no choice. MCP reserves + // "decline" for an explicit no; "cancel" tells the server the + // request was dismissed and may be asked another way. + return { action: "cancel" } satisfies ElicitationResult; } const grantKey = `${request.serverName}\u0000${request.message}`; if ((yield* Ref.get(mcpElicitationSessionGrants)).has(grantKey)) { From c8c210203c48875a1249b1f6d299a43a1f220835 Mon Sep 17 00:00:00 2001 From: Sudharsan <126713117+Sidreyas@users.noreply.github.com> Date: Sun, 15 Nov 2026 10:09:39 +0530 Subject: [PATCH 862/922] fix(server): log canceled relay requests at debug level (#32215) Co-authored-by: Julius Marminge --- .../src/cloud/ManagedEndpointRuntime.test.ts | 15 +++++++++++++++ apps/server/src/cloud/ManagedEndpointRuntime.ts | 8 ++++++++ 2 files changed, 23 insertions(+) diff --git a/apps/server/src/cloud/ManagedEndpointRuntime.test.ts b/apps/server/src/cloud/ManagedEndpointRuntime.test.ts index dae9d870c8a75..c7caf65264631 100644 --- a/apps/server/src/cloud/ManagedEndpointRuntime.test.ts +++ b/apps/server/src/cloud/ManagedEndpointRuntime.test.ts @@ -180,6 +180,21 @@ describe("CloudManagedEndpointRuntime", () => { expect( ManagedEndpointRuntime.classifyRelayClientOutput("2026-06-17T02:00:00Z PNC runtime panic"), ).toBe("warning"); + for (const prefix of ["", "Request failed "]) { + expect( + ManagedEndpointRuntime.classifyRelayClientOutput( + `2026-06-17T02:00:00Z ERR ${prefix}error="Incoming request ended abruptly: context canceled" connIndex=0`, + ), + ).toBe("debug"); + } + for (const line of [ + '2026-06-17T02:00:00Z ERR error="Incoming request ended abruptly: context deadline exceeded" connIndex=0', + '2026-06-17T02:00:00Z ERR Failed to serve tunnel connection error="context canceled"', + '2026-06-17T02:00:00Z FTL error="Incoming request ended abruptly: context canceled"', + '2026-06-17T02:00:00Z PNC error="Incoming request ended abruptly: context canceled"', + ]) { + expect(ManagedEndpointRuntime.classifyRelayClientOutput(line)).toBe("warning"); + } }); it("classifies connection unregistration apart from registration and routine output", () => { diff --git a/apps/server/src/cloud/ManagedEndpointRuntime.ts b/apps/server/src/cloud/ManagedEndpointRuntime.ts index 6d14e23182344..ffc533486d3ea 100644 --- a/apps/server/src/cloud/ManagedEndpointRuntime.ts +++ b/apps/server/src/cloud/ManagedEndpointRuntime.ts @@ -168,6 +168,14 @@ export function classifyRelayClientOutput( if (/\bRegistered tunnel connection\b/iu.test(line)) { return "connected"; } + // cloudflared logs a browser closing its request mid-stream as ERR; the tunnel itself is fine. + if ( + /\bERR\s+(?:Request failed\s+)?error="Incoming request ended abruptly: context canceled"(?:\s|$)/u.test( + line, + ) + ) { + return "debug"; + } // cloudflared uses zerolog FTL/PNC for fatal/panic; classify them above debug too. if (/\b(?:ERR|WRN|FTL|PNC)\b/u.test(line)) { return "warning"; From 3f1b132e970f698562b1a12749b94f8ac8fc1e0d Mon Sep 17 00:00:00 2001 From: ajinkyajacob <82514259+ajinkyajacob@users.noreply.github.com> Date: Sun, 15 Nov 2026 10:10:15 +0530 Subject: [PATCH 863/922] fix(acp): give Command Code T3's MCP endpoint over HTTP (#34004) Co-authored-by: CommandCodeBot --- .../Adapters/AcpRegistryAdapterV2.test.ts | 34 +++++++++++- .../src/server/AcpRegistrySupport.test.ts | 49 +++++++++++++++++ .../src/server/adapter.ts | 9 +++- .../src/server/mcpTransport.test.ts | 53 +++++++++++++++++++ .../src/server/mcpTransport.ts | 27 ++++++++++ 5 files changed, 169 insertions(+), 3 deletions(-) create mode 100644 packages/provider-acp-registry/src/server/mcpTransport.test.ts create mode 100644 packages/provider-acp-registry/src/server/mcpTransport.ts diff --git a/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts index 8982fb122fc7b..fd009041fd93f 100644 --- a/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts @@ -1259,7 +1259,7 @@ describe("AcpRegistryAdapterV2", () => { }).pipe(Effect.provide(layerTest)), ); - it.effect("gives Copilot T3's MCP server over HTTP when it advertises HTTP", () => + it.effect("gives HTTP-capable agents T3's MCP server over HTTP", () => Effect.gen(function* () { const selfInvocation = yield* resolveSelfInvocation(); const mockAgentPath = yield* (yield* Path.Path).fromFileUrl( @@ -1345,6 +1345,14 @@ describe("AcpRegistryAdapterV2", () => { }; return { new: sent("session/new"), load: sent("session/load") }; }); + const plainHttp = (authorization: string) => [ + { + type: "http", + name: "t3-code", + url: endpoint, + headers: [{ name: "Authorization", value: authorization }], + }, + ]; const http = (authorization: string) => [ { type: "http", @@ -1389,6 +1397,30 @@ describe("AcpRegistryAdapterV2", () => { new: stdio("Bearer opened-token"), load: stdio("Bearer rotated-token"), }); + // Command Code cannot start the stdio bridge on Windows: it spawns MCP commands through + // cmd.exe, which splits the unquoted T3 executable path at the space. + const commandCode = { + source: "local", + commandPath: "C:\\tools\\cmdc.exe", + commandArgs: ["acp"], + }; + // Command Code is not Copilot: no deferred tool-exposure header. + assert.deepEqual(yield* sessionMcpServers(commandCode, { T3_ACP_MCP_HTTP: "1" }), { + new: plainHttp("Bearer opened-token"), + load: plainHttp("Bearer rotated-token"), + }); + assert.deepEqual(yield* sessionMcpServers(commandCode), { + new: stdio("Bearer opened-token"), + load: stdio("Bearer rotated-token"), + }); + // Any other local agent keeps the stdio bridge. + assert.deepEqual( + yield* sessionMcpServers( + { source: "local", commandPath: "C:\\tools\\node.exe", commandArgs: ["agent.mjs"] }, + { T3_ACP_MCP_HTTP: "1" }, + ), + { new: stdio("Bearer opened-token"), load: stdio("Bearer rotated-token") }, + ); }).pipe(Effect.provide(layerTest)), ); diff --git a/packages/provider-acp-registry/src/server/AcpRegistrySupport.test.ts b/packages/provider-acp-registry/src/server/AcpRegistrySupport.test.ts index 6d83c3d1c5b71..a54a55b458a08 100644 --- a/packages/provider-acp-registry/src/server/AcpRegistrySupport.test.ts +++ b/packages/provider-acp-registry/src/server/AcpRegistrySupport.test.ts @@ -23,6 +23,7 @@ import * as ChildProcess from "effect/process/ChildProcess"; import * as ChildProcessSpawner from "effect/process/ChildProcessSpawner"; import * as AcpRegistrySupport from "./AcpRegistrySupport.ts"; +import { prefersHttpMcpTransport } from "./mcpTransport.ts"; import * as TestProviderHost from "@t3tools/provider-testing/TestProviderHost"; const registryUrl = "https://registry.test/registry.json"; @@ -336,6 +337,54 @@ describe("AcpRegistrySupport", () => { ), ); + it.effect("resolves the local Command Code configurations the HTTP selector matches", () => + Effect.gen(function* () { + const fileSystem = yield* FileSystem.FileSystem; + const cacheDir = yield* fileSystem.makeTempDirectoryScoped({ + prefix: "t3-acp-command-code-", + }); + const catalog = (executable: string) => + AcpRegistrySupport.makeAcpRegistryCatalog({ + cacheDir, + toolsDir: `${cacheDir}/tools`, + registryUrl, + }).pipe( + Effect.provideService(HostProcess.Platform, "win32"), + Effect.provideService(SpawnExecutableResolution, () => executable), + ); + + const bare = decodeAcpRegistrySettings({ source: "local", commandPath: "cmdc" }); + expect(prefersHttpMcpTransport(bare)).toBe(true); + expect( + yield* (yield* catalog("C:\\bin\\cmdc.exe")).resolve(bare, "/workspace"), + ).toMatchObject({ spawn: { command: "C:\\bin\\cmdc.exe", shell: false } }); + // A bare name that PATHEXT resolves to a batch shim never launches, so the transport it + // selects cannot matter: there is no session to attach MCP servers to. + expect( + yield* (yield* catalog("C:\\bin\\cmdc.cmd")).resolve(bare, "/workspace").pipe(Effect.flip), + ).toMatchObject({ reason: "runner_unavailable" }); + + const vendored = decodeAcpRegistrySettings({ + source: "local", + commandPath: "node.exe", + commandArgs: [ + "C:\\Users\\me\\.t3\\bin\\cmdcode\\node_modules\\command-code\\dist\\index.mjs", + "acp", + ], + }); + expect(prefersHttpMcpTransport(vendored)).toBe(true); + expect( + yield* (yield* catalog("C:\\Program Files\\nodejs\\node.exe")).resolve( + vendored, + "/workspace", + ), + ).toMatchObject({ spawn: { command: "C:\\Program Files\\nodejs\\node.exe" } }); + }).pipe( + Effect.scoped, + Effect.provide(layerResolver(() => Effect.die("unexpected registry request"))), + ), + ); + it.effect("reports missing or non-executable local commands without registry fallback", () => Effect.gen(function* () { const fileSystem = yield* FileSystem.FileSystem; diff --git a/packages/provider-acp-registry/src/server/adapter.ts b/packages/provider-acp-registry/src/server/adapter.ts index 25656a9d808e1..31ef391d19c34 100644 --- a/packages/provider-acp-registry/src/server/adapter.ts +++ b/packages/provider-acp-registry/src/server/adapter.ts @@ -17,6 +17,7 @@ import { isCopilotLostSessionError, makeCopilotSubagentRouting, } from "./copilotAcp.ts"; +import { prefersHttpMcpTransport } from "./mcpTransport.ts"; import { defaultInstanceIdForDriver, ProviderDriverKind } from "@t3tools/contracts"; import { readCustomModelEntries } from "@t3tools/shared/model"; import { AcpRegistrySettings } from "../settings.ts"; @@ -221,6 +222,11 @@ export const makeAcpRegistryAdapterV2 = Effect.fn("makeAcpRegistryAdapterV2")(fu } : options; const copilotRouting = isCopilot ? makeCopilotSubagentRouting() : undefined; + // Copilot CLI 1.0.105 rejects stdio MCP servers from the client, and Command Code cannot + // start the stdio bridge on Windows (it spawns MCP commands through cmd.exe, which splits + // the unquoted "T3 Code (Beta).exe" path). Both take T3's MCP endpoint over ACP HTTP. + const useHttpMcpServers = + copilotRouting !== undefined || prefersHttpMcpTransport(options.settings); const flavor: AcpAdapterV2Flavor = { driver: ACP_REGISTRY_PROVIDER, // Cancelling a Copilot prompt also kills the background agents it started. @@ -268,8 +274,6 @@ export const makeAcpRegistryAdapterV2 = Effect.fn("makeAcpRegistryAdapterV2")(fu ? {} : { clientCapabilitiesMeta: copilotClientCapabilitiesMeta, - // Copilot CLI 1.0.105 rejects stdio MCP servers from the client. - mcpOverHttp: true, deferMcpTools: true, registerExtensions: copilotRouting.registerExtensions, normalizeSessionUpdate: copilotRouting.normalizeSessionUpdate, @@ -278,6 +282,7 @@ export const makeAcpRegistryAdapterV2 = Effect.fn("makeAcpRegistryAdapterV2")(fu // session/new reports a built-in default, not the model Copilot runs (github/copilot-cli#5363). alwaysSetModel: true, }), + mcpOverHttp: useHttpMcpServers, makeRuntime: options.makeRuntime ?? makeAcpRegistryRuntime(runtimeOptions, catalog), ...(runtimeCoordinator === undefined ? {} diff --git a/packages/provider-acp-registry/src/server/mcpTransport.test.ts b/packages/provider-acp-registry/src/server/mcpTransport.test.ts new file mode 100644 index 0000000000000..3de01b35ba9d0 --- /dev/null +++ b/packages/provider-acp-registry/src/server/mcpTransport.test.ts @@ -0,0 +1,53 @@ +import { describe, expect, it } from "@effect/vitest"; +import * as Schema from "effect/Schema"; + +import { AcpRegistrySettings } from "../settings.ts"; +import { prefersHttpMcpTransport } from "./mcpTransport.ts"; + +const decodeSettings = Schema.decodeSync(AcpRegistrySettings); + +const local = (commandPath: string, commandArgs: string[] = []) => + decodeSettings({ source: "local", commandPath, commandArgs }); + +describe("prefersHttpMcpTransport", () => { + it("uses HTTP for the vendored Command Code launcher", () => { + expect( + prefersHttpMcpTransport( + local("C:\\Users\\me\\.t3\\bin\\cmdcode\\node.exe", [ + "C:\\Users\\me\\.t3\\bin\\cmdcode\\node_modules\\command-code\\dist\\index.mjs", + "acp", + ]), + ), + ).toBe(true); + expect( + prefersHttpMcpTransport( + local("C:\\tools\\node.exe", ["C:\\src\\command-code\\dist\\cli.mjs", "acp"]), + ), + ).toBe(true); + }); + + it("uses HTTP for the global Command Code executable", () => { + expect(prefersHttpMcpTransport(local("C:\\tools\\cmdc.exe", ["acp"]))).toBe(true); + expect(prefersHttpMcpTransport(local("/usr/local/bin/cmdc"))).toBe(true); + }); + + it("keeps the stdio bridge for a batch shim T3 refuses to launch", () => { + expect(prefersHttpMcpTransport(local("C:\\tools\\cmdc.cmd", ["acp"]))).toBe(false); + }); + + it("keeps the stdio bridge for other local agents", () => { + expect( + prefersHttpMcpTransport( + local("C:\\tools\\node.exe", ["C:\\tools\\some-other-agent\\dist\\index.mjs", "acp"]), + ), + ).toBe(false); + expect(prefersHttpMcpTransport(local("C:\\tools\\claude-agent-acp.exe"))).toBe(false); + expect(prefersHttpMcpTransport(local("C:\\tools\\command-code\\runner.mjs"))).toBe(false); + }); + + it("keeps the stdio bridge for registry agents", () => { + expect( + prefersHttpMcpTransport(decodeSettings({ source: "registry", agentId: "claude-acp" })), + ).toBe(false); + }); +}); diff --git a/packages/provider-acp-registry/src/server/mcpTransport.ts b/packages/provider-acp-registry/src/server/mcpTransport.ts new file mode 100644 index 0000000000000..49881663a9111 --- /dev/null +++ b/packages/provider-acp-registry/src/server/mcpTransport.ts @@ -0,0 +1,27 @@ +import type { AcpRegistrySettings } from "../settings.ts"; + +// AcpRegistrySupport.validateLocalExecutable refuses .cmd/.bat on Windows, so only native +// executables are launchable. +const COMMAND_CODE_EXECUTABLES = /^(?:cmdc|command-code|commandcode)(?:\.exe)?$/iu; +const COMMAND_CODE_ENTRY_POINTS = [ + /(?:^|[\\/])node_modules[\\/]command-code[\\/]/iu, + /(?:^|[\\/])command-code[\\/]dist[\\/](?:index|cli)\.mjs$/iu, +]; + +/** + * Agents that take T3's MCP endpoint over ACP HTTP: Command Code cannot start the stdio + * bridge on Windows, where it spawns MCP commands through cmd.exe and the unquoted T3 + * executable path splits at the space. + */ +export function prefersHttpMcpTransport(settings: AcpRegistrySettings): boolean { + if (settings.source !== "local") { + return false; + } + const executable = settings.commandPath.split(/[\\/]/u).pop() ?? ""; + return ( + COMMAND_CODE_EXECUTABLES.test(executable) || + settings.commandArgs.some((argument) => + COMMAND_CODE_ENTRY_POINTS.some((pattern) => pattern.test(argument)), + ) + ); +} From 1e60d60519cdc246f70f71c8b36e18ff5c34c41a Mon Sep 17 00:00:00 2001 From: amr sarhan <167830562+amr807@users.noreply.github.com> Date: Sun, 15 Nov 2026 07:40:31 +0300 Subject: [PATCH 864/922] Fix #29433: Restore Codex MCP apps after thread unload (#29498) Co-authored-by: amr sarhan Co-authored-by: Julius Marminge --- .../Adapters/CodexAdapterV2.test.ts | 118 ++++++++++++++++++ .../Adapters/CodexAdapterV2.ts | 90 +++++++++---- 2 files changed, 185 insertions(+), 23 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.test.ts index 4af8bdb574404..0b991444ede49 100644 --- a/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.test.ts @@ -7988,6 +7988,124 @@ describe("CodexAdapterV2 post-settle continuation", () => { ], }); + it.effect("resumes an unloaded native thread and retries an MCP resource read", () => + Effect.scoped( + Effect.gen(function* () { + const scenario = "mcp-resource-thread-recovery"; + const nativeThreadId = `native-${scenario}`; + const preamble = codexReplayPreamble({ + nativeThreadId, + nativeTurnId: "unused-turn", + prompt: "unused-prompt", + }).slice(0, 5); + + const resourceResult = { + contents: [ + { + uri: MCP_APP_RESOURCE, + mimeType: "text/html;profile=mcp-app", + text: MCP_APP_HTML, + _meta: { ui: { csp: { connectDomains: ["https://api.weather.test"] } } }, + }, + ], + }; + + const transcript = makeCodexReplayTranscript({ + scenario, + entries: [ + ...preamble, + { + type: "expect_outbound", + label: "initial MCP resource read", + frame: { + id: 3, + method: "mcpServer/resource/read", + params: { + threadId: nativeThreadId, + server: "weather", + uri: MCP_APP_RESOURCE, + }, + }, + }, + { + type: "emit_inbound", + label: "native thread is unloaded", + frame: { + id: 3, + error: { + code: -32600, + message: `thread not found: ${nativeThreadId}`, + }, + }, + }, + { + type: "expect_outbound", + label: "resume unloaded native thread", + frame: { + id: 4, + method: "thread/resume", + params: { + threadId: nativeThreadId, + excludeTurns: true, + config: CodexAdapterV2.CODEX_THREAD_CONFIG, + }, + }, + }, + { + type: "emit_inbound", + label: "native thread resumed", + frame: { + id: 4, + result: { + thread: { id: nativeThreadId, updatedAt: 1782622450 }, + }, + }, + }, + { + type: "expect_outbound", + label: "retry MCP resource read", + frame: { + id: 5, + method: "mcpServer/resource/read", + params: { + threadId: nativeThreadId, + server: "weather", + uri: MCP_APP_RESOURCE, + }, + }, + }, + { + type: "emit_inbound", + label: "MCP resource read succeeds", + frame: { id: 5, result: resourceResult }, + }, + ], + }); + + const harness = yield* makeCodexReplayHarness(transcript); + const mcpApps = harness.runtime.mcpApps; + assert.ok(mcpApps, "Codex runtime should expose MCP apps"); + + const result = yield* mcpApps.readResource({ + providerThread: harness.providerThread, + server: "weather", + uri: MCP_APP_RESOURCE, + }); + + assert.deepEqual(result, resourceResult); + }).pipe( + Effect.provide( + Layer.mergeAll( + IdAllocator.layer, + McpProviderSessions.layer, + NodeServices.layer, + NodeCrypto.layer, + ), + ), + ), + ), + ); + it.effect("captures an MCP app's resource and holds the turn open until it lands", () => Effect.gen(function* () { const appCaptured = yield* Deferred.make(); diff --git a/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts b/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts index fe0e5dc17f40b..f637002c10f87 100644 --- a/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts +++ b/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts @@ -379,6 +379,14 @@ function isCodexActiveWriterError(error: unknown): boolean { ); } +function isCodexThreadNotFoundError(error: unknown): boolean { + return ( + isCodexAppServerRequestError(error) && + error.code === -32600 && + error.errorMessage.startsWith("thread not found:") + ); +} + function codexTimestamp(seconds: number | null | undefined): DateTime.Utc { return seconds === null || seconds === undefined ? DateTime.nowUnsafe() @@ -2773,7 +2781,7 @@ export const makeCodexAdapterV2 = Effect.fn("makeCodexAdapterV2")(function* ( CodexAppServerInputStreamEndedError: () => Effect.succeed({ terminated: true }), // Unloading kills terminals, so "thread not found" means nothing remains to stop. CodexAppServerRequestError: (error) => - error.code === -32600 && error.errorMessage.startsWith("thread not found:") + isCodexThreadNotFoundError(error) ? Effect.succeed({ terminated: true }) : Effect.fail(error), }), @@ -7720,17 +7728,45 @@ export const makeCodexAdapterV2 = Effect.fn("makeCodexAdapterV2")(function* ( detail, payload: cause, }); + // Codex unloads idle threads; MCP requests against one fail until it is resumed. + const withLoadedThread = ( + providerThread: OrchestrationV2ProviderThread, + threadId: string, + request: Effect.Effect, + ) => + request.pipe( + Effect.catchIf(isCodexThreadNotFoundError, () => + readMcpSession(providerThread.appThreadId).pipe( + Effect.flatMap((mcpSession) => + resumeNativeThread(threadId, { + excludeTurns: true, + ...codexThreadRuntimeParams({ + threadId: providerThread.appThreadId, + mcpSession, + modelSelection: input.modelSelection, + runtimePolicy: input.runtimePolicy, + }), + }), + ), + Effect.andThen(request), + ), + ), + ); const mcpApps: ProviderAdapter.ProviderAdapterV2McpApps = { listTools: Effect.fn("CodexAdapterV2.listTools")( function* (toolsInput) { const threadId = yield* getNativeThreadId(toolsInput.providerThread); - const response = yield* ensureInitialized.pipe( - Effect.andThen( - client.request("mcpServerStatus/list", { - threadId, - serverName: toolsInput.server, - detail: "toolsAndAuthOnly", - }), + const response = yield* withLoadedThread( + toolsInput.providerThread, + threadId, + ensureInitialized.pipe( + Effect.andThen( + client.request("mcpServerStatus/list", { + threadId, + serverName: toolsInput.server, + detail: "toolsAndAuthOnly", + }), + ), ), ); const server = response.data.find((entry) => entry.name === toolsInput.server); @@ -7741,14 +7777,18 @@ export const makeCodexAdapterV2 = Effect.fn("makeCodexAdapterV2")(function* ( callTool: Effect.fn("CodexAdapterV2.callTool")( function* (callInput) { const threadId = yield* getNativeThreadId(callInput.providerThread); - const response = yield* ensureInitialized.pipe( - Effect.andThen( - client.request("mcpServer/tool/call", { - threadId, - server: callInput.server, - tool: callInput.tool, - arguments: callInput.arguments as Schema.Json, - }), + const response = yield* withLoadedThread( + callInput.providerThread, + threadId, + ensureInitialized.pipe( + Effect.andThen( + client.request("mcpServer/tool/call", { + threadId, + server: callInput.server, + tool: callInput.tool, + arguments: callInput.arguments as Schema.Json, + }), + ), ), ); return { @@ -7765,13 +7805,17 @@ export const makeCodexAdapterV2 = Effect.fn("makeCodexAdapterV2")(function* ( readResource: Effect.fn("CodexAdapterV2.readResource")( function* (readInput) { const threadId = yield* getNativeThreadId(readInput.providerThread); - const response = yield* ensureInitialized.pipe( - Effect.andThen( - client.request("mcpServer/resource/read", { - threadId, - server: readInput.server, - uri: readInput.uri, - }), + const response = yield* withLoadedThread( + readInput.providerThread, + threadId, + ensureInitialized.pipe( + Effect.andThen( + client.request("mcpServer/resource/read", { + threadId, + server: readInput.server, + uri: readInput.uri, + }), + ), ), ); return { contents: response.contents }; From 0bd581b078f22dbd33e8b14ce930a5eb55c6fca1 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:40:48 -0800 Subject: [PATCH 865/922] fix(server): regenerate an empty persisted secret instead of failing startup (#32053) Co-authored-by: Claude Opus 5.5 --- .../server/src/auth/ServerSecretStore.test.ts | 83 +++++++++++++++++++ apps/server/src/auth/ServerSecretStore.ts | 17 ++++ 2 files changed, 100 insertions(+) diff --git a/apps/server/src/auth/ServerSecretStore.test.ts b/apps/server/src/auth/ServerSecretStore.test.ts index 08a33e2fde3c5..fa216177f494a 100644 --- a/apps/server/src/auth/ServerSecretStore.test.ts +++ b/apps/server/src/auth/ServerSecretStore.test.ts @@ -113,6 +113,55 @@ const layerConcurrentCreateSecretStore = () => Layer.provideMerge(layerConcurrentReadMissFileSystem), ); +// Both callers read the empty secret before either repairs it, and the second removal of the +// secret file waits until the first caller has returned its key. +const layerConcurrentEmptyRepairFileSystem = (firstReturned: Deferred.Deferred) => + Layer.effect( + FileSystem.FileSystem, + Effect.gen(function* () { + const fileSystem = yield* FileSystem.FileSystem; + const readCountRef = yield* Ref.make(0); + const removeCountRef = yield* Ref.make(0); + const readBarrier = yield* Deferred.make(); + const isSecretPath = (path: string) => /[\\/]session-signing-key\.bin$/.test(path); + + return { + ...fileSystem, + readFile: (path) => + isSecretPath(path) + ? Ref.updateAndGet(readCountRef, (count) => count + 1).pipe( + Effect.flatMap((count) => + count > 2 + ? fileSystem.readFile(path) + : Effect.gen(function* () { + if (count === 2) { + yield* Deferred.succeed(readBarrier, void 0); + } + yield* Deferred.await(readBarrier); + return yield* fileSystem.readFile(path); + }), + ), + ) + : fileSystem.readFile(path), + remove: (path, options) => + isSecretPath(path) + ? Ref.updateAndGet(removeCountRef, (count) => count + 1).pipe( + Effect.flatMap((count) => + count > 1 ? Deferred.await(firstReturned) : Effect.void, + ), + Effect.flatMap(() => fileSystem.remove(path, options)), + ) + : fileSystem.remove(path, options), + } satisfies FileSystem.FileSystem; + }), + ).pipe(Layer.provide(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer))); + +const layerConcurrentEmptyRepairSecretStore = (firstReturned: Deferred.Deferred) => + ServerSecretStore.layer.pipe( + Layer.provide(layerServerConfig()), + Layer.provideMerge(layerConcurrentEmptyRepairFileSystem(firstReturned)), + ); + it.layer(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer))("ServerSecretStore.layer", (it) => { it.effect("reuses an existing secret instead of regenerating it", () => Effect.gen(function* () { @@ -125,6 +174,40 @@ it.layer(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer))("ServerSecretStor }).pipe(Effect.provide(layerServerSecretStore())), ); + it.effect("replaces an empty persisted secret with a fresh random one", () => + Effect.gen(function* () { + const secretStore = yield* ServerSecretStore.ServerSecretStore; + yield* secretStore.set("session-signing-key", new Uint8Array()); + + const secret = yield* secretStore.getOrCreateRandom("session-signing-key", 32); + const persisted = yield* secretStore.get("session-signing-key"); + + assert.equal(secret.byteLength, 32); + assert.deepEqual(Array.from(Option.getOrThrow(persisted)), Array.from(secret)); + }).pipe(Effect.provide(layerServerSecretStore())), + ); + + it.effect("keeps the repaired secret when concurrent callers find it empty", () => + Effect.gen(function* () { + const firstReturned = yield* Deferred.make(); + yield* Effect.gen(function* () { + const secretStore = yield* ServerSecretStore.ServerSecretStore; + yield* secretStore.set("session-signing-key", new Uint8Array()); + const getOrCreate = secretStore + .getOrCreateRandom("session-signing-key", 32) + .pipe(Effect.tap(() => Deferred.succeed(firstReturned, void 0))); + + const [first, second] = yield* Effect.all([getOrCreate, getOrCreate], { + concurrency: "unbounded", + }); + const persisted = Option.getOrThrow(yield* secretStore.get("session-signing-key")); + + assert.deepEqual(Array.from(first), Array.from(persisted)); + assert.deepEqual(Array.from(second), Array.from(persisted)); + }).pipe(Effect.provide(layerConcurrentEmptyRepairSecretStore(firstReturned))); + }), + ); + it.effect("returns the persisted secret when concurrent creators race", () => Effect.gen(function* () { const secretStore = yield* ServerSecretStore.ServerSecretStore; diff --git a/apps/server/src/auth/ServerSecretStore.ts b/apps/server/src/auth/ServerSecretStore.ts index e950acb38a71d..cabded3d0c7b0 100644 --- a/apps/server/src/auth/ServerSecretStore.ts +++ b/apps/server/src/auth/ServerSecretStore.ts @@ -8,6 +8,7 @@ import * as Path from "effect/Path"; import * as Predicate from "effect/Predicate"; import * as PlatformError from "effect/PlatformError"; import * as Schema from "effect/Schema"; +import * as Semaphore from "effect/Semaphore"; import * as ServerConfig from "../config.ts"; @@ -169,6 +170,9 @@ export const make = Effect.gen(function* () { ); const resolveSecretPath = (name: string) => path.join(serverConfig.secretsDir, `${name}.bin`); + const emptySecretRepair = yield* Semaphore.make(1); + const isMissingOrNonEmpty = (secret: Option.Option) => + Option.isNone(secret) || secret.value.byteLength > 0; const get: ServerSecretStore["Service"]["get"] = (name) => fileSystem.readFile(resolveSecretPath(name)).pipe( @@ -263,6 +267,19 @@ export const make = Effect.gen(function* () { const getOrCreateRandom: ServerSecretStore["Service"]["getOrCreateRandom"] = (name, bytes) => get(name).pipe( + // Older builds could persist a 0-byte secret, which is never a usable key. Re-read under + // the permit, and keep it until an interrupted removal settles, so a caller that saw the + // empty file cannot remove a key another caller created. + Effect.filterOrElse(isMissingOrNonEmpty, () => + emptySecretRepair.withPermits(1)( + get(name).pipe( + Effect.filterOrElse(isMissingOrNonEmpty, () => + remove(name).pipe(Effect.as(Option.none())), + ), + Effect.uninterruptible, + ), + ), + ), Effect.flatMap( Option.match({ onSome: Effect.succeed, From f2839735efaa4a53a9532ffff64f68d308d43b91 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:41:05 -0800 Subject: [PATCH 866/922] fix(server): Gemini Spark can register its six MCP OAuth redirect URIs (#31319) Co-authored-by: Claude Opus 5.5 --- apps/server/src/auth/McpOAuth.test.ts | 65 +++++++++++++++++++++++++++ apps/server/src/auth/McpOAuth.ts | 18 +++++++- 2 files changed, 81 insertions(+), 2 deletions(-) diff --git a/apps/server/src/auth/McpOAuth.test.ts b/apps/server/src/auth/McpOAuth.test.ts index 4cd276c51133b..35701dd529768 100644 --- a/apps/server/src/auth/McpOAuth.test.ts +++ b/apps/server/src/auth/McpOAuth.test.ts @@ -229,6 +229,34 @@ it.effect("registers loopback and https clients and never redirects for an unver expect(response.status).toBe(400); expect(yield* json(response)).toMatchObject({ error: "invalid_redirect_uri" }); } + // JSON escaping can inflate the signed client_id past what an authorize URL can carry. + const oversized = yield* handler( + at("/oauth/mcp/register", { + method: "POST", + headers: { "content-type": "application/json" }, + body: encodeJson({ + redirect_uris: Array.from( + { length: 10 }, + (_, index) => `https://bot.example/${index}/${'"'.repeat(480)}`, + ), + }), + }), + ); + expect(oversized.status).toBe(400); + const fiveLongCallbacks = yield* handler( + at("/oauth/mcp/register", { + method: "POST", + headers: { "content-type": "application/json" }, + body: encodeJson({ + client_name: "A".repeat(100), + redirect_uris: Array.from( + { length: 5 }, + (_, index) => `https://a.co/${index}/${"界".repeat(497)}`, + ), + }), + }), + ); + expect(fiveLongCallbacks.status).toBe(201); const registered = yield* register(handler); expect(registered.status).toBe(201); @@ -411,6 +439,43 @@ it.live("signs in a hosted agent with an https callback that asked for a client ), ); +it.live("signs in Gemini, which registers six user-bound redirect URIs for one client", () => + withRoutes((handler, auth) => + Effect.gen(function* () { + const redirectUris = Array.from( + { length: 6 }, + (_, index) => + `https://oauth-redirect.googleusercontent.com/r/user_bound_custom-mcp-test${index}`, + ); + const registered = yield* handler( + at("/oauth/mcp/register", { + method: "POST", + headers: { "content-type": "application/json" }, + body: encodeJson({ + client_name: "Google", + redirect_uris: redirectUris, + token_endpoint_auth_method: "client_secret_basic", + }), + }), + ); + const client = (yield* json(registered)) as { client_id: string }; + expect(client).toMatchObject({ redirect_uris: redirectUris }); + expect(registered.status).toBe(201); + + const callbackUrl = redirectUris[5]!; + const params = authorizeParams(client.client_id, callbackUrl); + const pairing = yield* auth.issuePairingCredential(); + const approved = yield* decide(handler, params, { + _tag: "pairing-code", + access: "approval-required", + code: pairing.credential, + }); + const callback = new URL(approved.redirectTo!); + expect(`${callback.origin}${callback.pathname}`).toBe(callbackUrl); + }), + ), +); + it.live("rejects a wrong PKCE verifier and spends the code", () => withRoutes((handler, auth) => Effect.gen(function* () { diff --git a/apps/server/src/auth/McpOAuth.ts b/apps/server/src/auth/McpOAuth.ts index 426cb2213f3ef..73db062040bb8 100644 --- a/apps/server/src/auth/McpOAuth.ts +++ b/apps/server/src/auth/McpOAuth.ts @@ -54,8 +54,12 @@ import { requestUrl } from "../requestUrl.ts"; const SIGNING_SECRET_NAME = "mcp-oauth-signing-key"; const AUTHORIZATION_CODE_TTL_MS = 60_000; const MAX_CLIENT_NAME_LENGTH = 100; -const MAX_REDIRECT_URIS = 5; +const MAX_REDIRECT_URIS = 10; const MAX_REDIRECT_URI_LENGTH = 512; +// The client_id rides in the authorize URL. Past the original five-URI limit, cap it to leave room +// under Node's 16 KB header cap for an encoded redirect_uri and state. +const MAX_UNBOUNDED_CLIENT_ID_REDIRECT_URIS = 5; +const MAX_CLIENT_ID_LENGTH = 10_240; const DEFAULT_CLIENT_NAME = "MCP client"; const LOOPBACK_HOSTNAMES = new Set(["localhost", "127.0.0.1", "[::1]"]); const CODE_CHALLENGE_PATTERN = /^[A-Za-z0-9_-]{43}$/; @@ -348,8 +352,18 @@ const make = Effect.gen(function* () { "Linked environments is off on that machine. Turn it on in its Settings → Labs.", }); } + const clientId = yield* signClientId(name, redirectUris, peerLink); + if ( + redirectUris.length > MAX_UNBOUNDED_CLIENT_ID_REDIRECT_URIS && + clientId.length > MAX_CLIENT_ID_LENGTH + ) { + return yield* new AuthMcpRegistrationError({ + error: "invalid_redirect_uri", + error_description: "Redirect URIs are too long to fit in an authorization request.", + }); + } return { - clientId: yield* signClientId(name, redirectUris, peerLink), + clientId, name, redirectUris, peerLink, From 5f6b5a8e60a2ef8e3caa09a4665abc198120dcd9 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:41:22 -0800 Subject: [PATCH 867/922] fix(cli): the already-running error names the t3 pair command that connects (#31543) Co-authored-by: Claude Opus 5.5 --- apps/server/src/cli/config.test.ts | 53 ++++++++++++++++++++++++++++++ apps/server/src/cli/config.ts | 8 ++++- docs/user/install.md | 7 ++-- 3 files changed, 64 insertions(+), 4 deletions(-) diff --git a/apps/server/src/cli/config.test.ts b/apps/server/src/cli/config.test.ts index 5e09dda2c164f..ddbc49e1ced74 100644 --- a/apps/server/src/cli/config.test.ts +++ b/apps/server/src/cli/config.test.ts @@ -214,6 +214,59 @@ it.layer(NodeServices.layer)("cli config resolution", (it) => { }), ); + it.effect("names the pair command for the refused server's home", () => + Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + const child = yield* liveProcess; + assert(child.pid !== undefined); + for (const source of ["flag", "T3CODE_HOME", "default"] as const) { + const home = yield* fs.makeTempDirectoryScoped({ prefix: "t3-cli-preflight-pair-" }); + const baseDir = source === "default" ? path.join(home, ".t3") : home; + const stateDir = path.join(baseDir, "userdata"); + yield* fs.makeDirectory(stateDir, { recursive: true }); + yield* fs.writeFileString( + path.join(stateDir, "server-runtime.json"), + yield* encodeUnknownJson({ + version: 1, + pid: child.pid, + port: 3773, + origin: "http://127.0.0.1:3773", + startedAt: "2026-10-01T00:00:00.000Z", + }), + ); + const error = yield* resolveServerConfig( + { + ...minimalWebFlags(baseDir), + baseDir: source === "flag" ? Option.some(baseDir) : Option.none(), + cwd: Option.some(path.join(home, "project")), + }, + Option.none(), + { rejectRunningServer: true }, + ).pipe( + Effect.provide( + Layer.merge( + NetService.layer, + ConfigProvider.layer( + ConfigProvider.fromEnv({ + env: source === "T3CODE_HOME" ? { T3CODE_HOME: baseDir } : {}, + }), + ), + ), + ), + Effect.provideService(HostProcess.HomeDirectory, home), + Effect.provideService(HostProcess.Platform, "linux"), + Effect.flip, + ); + // A temp dir with spaces or backslashes is single-quoted for the shell. + const homePattern = baseDir.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + expect(String(error)).toMatch( + new RegExp(`pair --base-dir (${homePattern}|'${homePattern}')`), + ); + } + }), + ); + it.effect("enables a trimmed reusable auth token only for web dev mode", () => Effect.gen(function* () { const baseDir = yield* FileSystem.FileSystem.pipe( diff --git a/apps/server/src/cli/config.ts b/apps/server/src/cli/config.ts index a7b9584d1a7e6..25d6c6eb62dd6 100644 --- a/apps/server/src/cli/config.ts +++ b/apps/server/src/cli/config.ts @@ -27,6 +27,7 @@ import { resolveServiceLauncherMode } from "../cloud/serviceLauncherClient.ts"; import * as ServerConfig from "../config.ts"; import { expandHomePath, resolveBaseDir } from "../os-jank.ts"; import { isProcessAlive, readPersistedServerRuntimeState } from "../serverRuntimeState.ts"; +import { resolveHostCliCommand } from "./invocation.ts"; const modeFlag = Flag.Literals("mode", ServerConfig.RuntimeMode.literals).pipe( Flag.withDescription("Runtime mode. `desktop` keeps loopback defaults unless overridden."), @@ -355,8 +356,13 @@ export const resolveServerConfig = Effect.fn("config.resolveServerConfig")(funct runtime.value.pid !== process.pid && isProcessAlive(runtime.value.pid) ) { + // Bare `t3 pair` prefers a linked worktree's `.t3`, so always name this home. + const { command: pairCommand } = yield* resolveHostCliCommand("pair", [ + "--base-dir", + baseDir, + ]); return yield* new CliError.UserError({ - cause: `A T3 Code server is already running for ${baseDir} (pid ${runtime.value.pid}, ${runtime.value.origin}). Connect to that server, stop it before starting another, or use a different --base-dir.`, + cause: `A T3 Code server is already running for ${baseDir} (pid ${runtime.value.pid}, ${runtime.value.origin}). To open it, run \`${pairCommand}\` and open the pairing URL it prints. To start another server, stop this one first or use a different --base-dir.`, }); } } diff --git a/docs/user/install.md b/docs/user/install.md index 13e5e01a313c8..2842006053035 100644 --- a/docs/user/install.md +++ b/docs/user/install.md @@ -42,9 +42,10 @@ Run `t3 help` or `t3 --help` for the full reference. To start in a new working directory, use an explicit path such as `t3 ./my-project`. A bare directory name is accepted only if it already exists. -If `t3` or `t3 start` reports an already running server, connect to that server -instead. Stop it before starting a replacement, or use a different `--base-dir` -for an independent server. +If `t3` or `t3 start` reports an already running server, run the `t3 pair` +command it names and open the pairing URL to connect to that server. Stop it +before starting a replacement, or use a different `--base-dir` for an +independent server. To try T3 Code once without installing it, run `npx t3@latest` instead (needs Node.js for `npx`). It offers to install the `t3` command first. If you say no, From 2a66bf26e868ffa0393da8fdb2db3d62519820ed Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:41:38 -0800 Subject: [PATCH 868/922] fix(server): read_pull_request_guide reads no-checkout hosts through the caller's project (#35913) Co-authored-by: Claude Opus 5.5 --- .../toolkits/pullRequests/handlers.test.ts | 30 +++++++++++++++++ .../src/mcp/toolkits/pullRequests/handlers.ts | 32 +++++++++++++------ 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/apps/server/src/mcp/toolkits/pullRequests/handlers.test.ts b/apps/server/src/mcp/toolkits/pullRequests/handlers.test.ts index db13197ea6ffb..3c454cbe6e48c 100644 --- a/apps/server/src/mcp/toolkits/pullRequests/handlers.test.ts +++ b/apps/server/src/mcp/toolkits/pullRequests/handlers.test.ts @@ -726,6 +726,36 @@ describe("pull request guide tools", () => { }), ); + it.effect( + "reads a guide on a host readable without a checkout through the caller's project", + () => + Effect.gen(function* () { + const api = makeProject({ + canonicalKey: "bitbucket.org/acme/api", + locator: { + source: "git-remote", + remoteName: "origin", + remoteUrl: "git@bitbucket.org:acme/api.git", + }, + provider: SourceControlProviderKind.make("bitbucket"), + displayName: "acme/api", + owner: "acme", + name: "api", + }); + const harness = yield* makeHarness({ project: api }); + const result = yield* harness.call("read_pull_request_guide", { + url: "https://bitbucket.org/acme/web/pull-requests/123", + }); + expect(result).toMatchObject({ + host: "bitbucket.org", + repository: "acme/web", + number: 123, + guide: null, + currentHeadSha: "head-1", + }); + }), + ); + it.effect("finds an Azure DevOps checkout for a pull request named by its full path", () => Effect.gen(function* () { const azure = { diff --git a/apps/server/src/mcp/toolkits/pullRequests/handlers.ts b/apps/server/src/mcp/toolkits/pullRequests/handlers.ts index 954e33e85c3e2..b738b2d8b4359 100644 --- a/apps/server/src/mcp/toolkits/pullRequests/handlers.ts +++ b/apps/server/src/mcp/toolkits/pullRequests/handlers.ts @@ -244,10 +244,17 @@ const make = Effect.gen(function* () { input, target, project: projectForPullRequest(known, target, callerProject), + callerProject, failure: null, })), Effect.catch((error) => - Effect.succeed({ input, target: null, project: undefined, failure: error.message }), + Effect.succeed({ + input, + target: null, + project: undefined, + callerProject, + failure: error.message, + }), ), ), ); @@ -492,18 +499,25 @@ const make = Effect.gen(function* () { if (entry !== undefined && entry.target === null) { return yield* new PullRequestGuideFailedError({ detail: entry.failure ?? "" }); } - if (entry === undefined || entry.target === null || entry.project === undefined) { + // Hosts readable without a checkout (GitHub, Bitbucket, Forgejo) are read through the + // caller's project; PullRequestService decides whether the host allows that. + const project = entry?.project ?? entry?.callerProject; + if (entry === undefined || entry.target === null || project === undefined) { return yield* new PullRequestProjectNotFoundError({ repository: entry?.target.repository ?? input.repository ?? "", }); } - const result = yield* reviewGuides.get(guideReference(entry.project, entry.target)).pipe( - Effect.mapError( - (error) => - new PullRequestGuideFailedError({ - detail: guideFailureDetail(error), - cause: error, - }), + const target = entry.target; + const result = yield* reviewGuides.get(guideReference(project, target)).pipe( + Effect.mapError((error) => + entry.project === undefined && + error._tag === "PullRequestUnavailableError" && + error.reason === "provider-unsupported" + ? new PullRequestProjectNotFoundError({ repository: target.repository }) + : new PullRequestGuideFailedError({ + detail: guideFailureDetail(error), + cause: error, + }), ), ); return { From 467ec62e08d8fe5e56dca223b8aa91bb5100b8fc Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:41:54 -0800 Subject: [PATCH 869/922] fix(server): Codex calls delegate_task directly instead of from Code Mode (#30019) Co-authored-by: Claude Opus 5.5 --- .../Adapters/CodexAdapterV2.test.ts | 4 ++-- .../orchestration-v2/Adapters/CodexAdapterV2.ts | 10 +++++----- docs/orchestration-v2/orchestrator-mcp-server.md | 14 ++++++++------ 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.test.ts index 0b991444ede49..01acc8e75f464 100644 --- a/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.test.ts @@ -2006,13 +2006,13 @@ describe("CodexAdapterV2 post-settle continuation", () => { url: "http://127.0.0.1:43123/mcp", tool_timeout_sec: 3_900, http_headers: { Authorization: "Bearer secret-codex-token" }, - disabled_tools: ["t3_thread_wait"], + disabled_tools: ["t3_thread_wait", "delegate_task"], }, "mcp_servers.t3-code-direct": { url: "http://127.0.0.1:43123/mcp", tool_timeout_sec: 3_900, http_headers: { Authorization: "Bearer secret-codex-token" }, - enabled_tools: ["t3_thread_wait"], + enabled_tools: ["t3_thread_wait", "delegate_task"], omit_tools_from: ["code_mode", "deferred"], }, }, diff --git a/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts b/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts index f637002c10f87..ee35f0a61671a 100644 --- a/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts +++ b/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts @@ -1492,7 +1492,7 @@ const CODEX_T3_MCP_TOOL_TIMEOUT_SEC = 65 * 60; // Holds T3 tools Codex must call directly, never from Code Mode. Calls arrive as // `t3-code-direct.`; t3McpToolPresentation.ts must keep resolving that form. const CODEX_T3_DIRECT_MCP_SERVER = "t3-code-direct"; -const CODEX_DIRECT_ONLY_T3_TOOL = "t3_thread_wait"; +const CODEX_DIRECT_ONLY_T3_TOOLS = ["t3_thread_wait", "delegate_task"]; function codexThreadRuntimeParams(input: { readonly threadId: ThreadId | null; @@ -1526,12 +1526,12 @@ function codexThreadRuntimeParams(input: { ? {} : { // Override only T3's servers so launch-argument MCP servers survive. - "mcp_servers.t3-code": { ...t3Server, disabled_tools: [CODEX_DIRECT_ONLY_T3_TOOL] }, - // Code Mode runs a blocking wait as a nested call, and the model keeps working - // around it. A second, direct-only registration makes it a plain tool call. + "mcp_servers.t3-code": { ...t3Server, disabled_tools: CODEX_DIRECT_ONLY_T3_TOOLS }, + // Code Mode runs a blocking wait or delegate wait as a nested call, and the model + // keeps polling it. A second, direct-only registration makes it a plain tool call. [`mcp_servers.${CODEX_T3_DIRECT_MCP_SERVER}`]: { ...t3Server, - enabled_tools: [CODEX_DIRECT_ONLY_T3_TOOL], + enabled_tools: CODEX_DIRECT_ONLY_T3_TOOLS, omit_tools_from: ["code_mode", "deferred"], }, }), diff --git a/docs/orchestration-v2/orchestrator-mcp-server.md b/docs/orchestration-v2/orchestrator-mcp-server.md index 198f0ec70dbba..6476aa5578524 100644 --- a/docs/orchestration-v2/orchestrator-mcp-server.md +++ b/docs/orchestration-v2/orchestrator-mcp-server.md @@ -63,12 +63,14 @@ Codex gets T3's MCP server in each thread's `thread/start`, `thread/resume`, and `thread/fork` config, with the provider-session token in an `Authorization` header. The same server is registered twice: -- `t3-code`: every tool except `t3_thread_wait`. -- `t3-code-direct`: only `t3_thread_wait`, with `omit_tools_from = ["code_mode", "deferred"]`. - -Code Mode runs a nested call as part of a script, so the model keeps working -while a blocking wait runs. The second entry makes the wait a direct tool call, -like Codex's own wait tools. Codex reports calls as `.`, so +- `t3-code`: every tool except `t3_thread_wait` and `delegate_task`. +- `t3-code-direct`: only `t3_thread_wait` and `delegate_task`, with + `omit_tools_from = ["code_mode", "deferred"]`. + +Code Mode yields a script after about 30 seconds, so the model polls a blocking +`t3_thread_wait` or `delegate_task` with `mode: "wait"`, resending its context +on each poll. The second entry makes both direct tool calls, like Codex's own +wait tools. Codex reports calls as `.`, so `packages/shared/src/t3McpToolPresentation.ts` must resolve both server names. Tool display and pending-work detection depend on it. From c6a120a958c8b8f768375b8fae536fa6c0582914 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:42:05 -0800 Subject: [PATCH 870/922] fix(forgejo): review guides work for checkouts whose SSH remote is not the web host (#29784) Co-authored-by: Claude Opus 5.5 --- packages/source-control-core/src/shared/definition.ts | 1 + .../source-control-forgejo/src/shared/definition.test.ts | 7 +++++++ packages/source-control-forgejo/src/shared/definition.ts | 9 +++++---- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/source-control-core/src/shared/definition.ts b/packages/source-control-core/src/shared/definition.ts index 167d89a67f878..09248a72e35b3 100644 --- a/packages/source-control-core/src/shared/definition.ts +++ b/packages/source-control-core/src/shared/definition.ts @@ -73,6 +73,7 @@ export type ChangeRequestHostIdentity = | { readonly canonicalKey?: string | undefined; readonly locator?: { readonly remoteUrl: string } | undefined; + readonly webUrl?: string | undefined; } | null | undefined; diff --git a/packages/source-control-forgejo/src/shared/definition.test.ts b/packages/source-control-forgejo/src/shared/definition.test.ts index 8fcf2d4f7a1e1..bd0708e30688c 100644 --- a/packages/source-control-forgejo/src/shared/definition.test.ts +++ b/packages/source-control-forgejo/src/shared/definition.test.ts @@ -169,5 +169,12 @@ describe("Forgejo change request host", () => { expect( definition.changeRequestHost?.(identity("ssh://git@forge.example:2222/git/team/repo.git")), ).toBe("forge.example"); + expect( + definition.changeRequestHost?.( + identity("ssh://git@ssh.forge.example:2222/git/team/repo.git", { + webUrl: "http://forge.example:3000/git/team/repo", + }), + ), + ).toBe("forge.example:3000"); }); }); diff --git a/packages/source-control-forgejo/src/shared/definition.ts b/packages/source-control-forgejo/src/shared/definition.ts index 0cee42cdf8132..3c2b861bbbcce 100644 --- a/packages/source-control-forgejo/src/shared/definition.ts +++ b/packages/source-control-forgejo/src/shared/definition.ts @@ -4,7 +4,6 @@ import { buildCommitUrl, changeRequestUrlBelow, type ChangeRequestHostIdentity, - type ChangeRequestProjectIdentity, defineSourceControl, isChangeRequestAuthorityOfProject, isChangeRequestInProjectRepository, @@ -34,8 +33,8 @@ const changeRequestHeadRef = (number: number) => `refs/pull/${number}/head`; * The repository's browser URL the server resolved from the signed-in account, which is the * only place a Forgejo mounted below a path says so. */ -function resolvedWebUrl(identity: ChangeRequestProjectIdentity): URL | null { - if (!identity.webUrl) return null; +function resolvedWebUrl(identity: ChangeRequestHostIdentity): URL | null { + if (!identity?.webUrl) return null; try { const url = new URL(identity.webUrl); return url.protocol === "http:" || url.protocol === "https:" ? url : null; @@ -44,8 +43,10 @@ function resolvedWebUrl(identity: ChangeRequestProjectIdentity): URL | null { } } -/** A server's identity includes its port, which only an HTTP remote names. */ +/** A server's identity includes its port, which only its web URL or an HTTP remote names. */ function changeRequestHost(identity: ChangeRequestHostIdentity): string { + const web = resolvedWebUrl(identity); + if (web) return web.host.toLowerCase(); try { const remote = new URL(identity?.locator?.remoteUrl ?? ""); if (remote.protocol === "http:" || remote.protocol === "https:") { From 9791bce79865c0a54d24e940f35569233231231a Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:42:22 -0800 Subject: [PATCH 871/922] fix(effect-acp): reject elicitation modes the client did not advertise (#35839) Co-authored-by: Claude Opus 5.5 --- packages/effect-acp/src/client.test.ts | 60 ++++++++++++++++++++++++-- packages/effect-acp/src/client.ts | 50 +++++++++++++-------- 2 files changed, 89 insertions(+), 21 deletions(-) diff --git a/packages/effect-acp/src/client.test.ts b/packages/effect-acp/src/client.test.ts index 0c82aad033b9e..d5c22ae1fcae5 100644 --- a/packages/effect-acp/src/client.test.ts +++ b/packages/effect-acp/src/client.test.ts @@ -388,6 +388,7 @@ it.layer(NodeServices.layer)("effect-acp client", (it) => { clientCapabilities: { fs: { readTextFile: false, writeTextFile: false }, terminal: false, + elicitation: { form: {} }, }, clientInfo: { name: "effect-acp-test", @@ -486,6 +487,7 @@ it.layer(NodeServices.layer)("effect-acp client", (it) => { clientCapabilities: { fs: { readTextFile: false, writeTextFile: false }, terminal: false, + elicitation: { form: {} }, }, clientInfo: { name: "effect-acp-test", @@ -541,7 +543,10 @@ it.layer(NodeServices.layer)("effect-acp client", (it) => { Ref.update(updates, (current) => [...current, notification]), ); - yield* acp.agent.initialize({ protocolVersion: 2 }); + yield* acp.agent.initialize({ + protocolVersion: 2, + clientCapabilities: { elicitation: { form: {} } }, + }); yield* acp.agent.authenticate({ methodId: "cursor_login" }); const session = yield* acp.agent.createSession({ cwd: process.cwd(), mcpServers: [] }); yield* acp.agent.prompt({ @@ -664,6 +669,7 @@ it.layer(NodeServices.layer)("effect-acp client", (it) => { clientCapabilities: { fs: { readTextFile: false, writeTextFile: false }, terminal: false, + elicitation: { form: {} }, }, clientInfo: { name: "effect-acp-test", @@ -1533,7 +1539,7 @@ it.layer(NodeServices.layer)("effect-acp client", (it) => { ); yield* acp.agent.initialize({ protocolVersion: 2, - clientCapabilities: {}, + clientCapabilities: { elicitation: { form: {} } }, clientInfo: { name: "effect-acp-test", version: "0.0.0" }, }); const session = yield* acp.agent.createSession({ cwd: process.cwd(), mcpServers: [] }); @@ -1580,7 +1586,7 @@ it.layer(NodeServices.layer)("effect-acp client", (it) => { ); yield* acp.agent.initialize({ protocolVersion: 2, - clientCapabilities: {}, + clientCapabilities: { elicitation: { form: {} } }, clientInfo: { name: "effect-acp-test", version: "0.0.0" }, }); const session = yield* acp.agent.createSession({ cwd: process.cwd(), mcpServers: [] }); @@ -1716,6 +1722,54 @@ it.effect.each(["accept", "decline", "cancel"] as const)( }), ); +it.effect.each([1, 2] as const)( + "rejects a URL elicitation the client did not advertise on wire v%s", + (wireVersion) => + Effect.gen(function* () { + const { stdio, input, output } = yield* makeInMemoryStdio(); + const acp = yield* AcpClient.make(stdio); + const init = yield* acp.agent + .initialize({ protocolVersion: 2, clientCapabilities: { elicitation: { form: {} } } }) + .pipe(Effect.forkChild); + const initialize = yield* decodeWireResponse(yield* Queue.take(output)); + yield* Queue.offer( + input, + yield* encodeJsonl(jsonRpcResponse(Schema.Unknown), { + jsonrpc: "2.0", + id: (initialize as { id: number }).id, + result: + wireVersion === 2 + ? { protocolVersion: 2, info: { name: "fixture", version: "1" }, capabilities: {} } + : { protocolVersion: 1, agentCapabilities: {} }, + }), + ); + yield* Fiber.join(init); + const calls = yield* Ref.make(0); + yield* acp.handleElicitation(() => + Ref.update(calls, (n) => n + 1).pipe(Effect.as({ action: "accept" as const })), + ); + yield* Queue.offer( + input, + yield* encodeJsonl(jsonRpcRequest("elicitation/create", Schema.Unknown), { + jsonrpc: "2.0", + id: 81, + headers: [], + method: "elicitation/create", + params: { + sessionId: "session-1", + mode: "url", + message: "Sign in", + url: "https://example.test/auth", + elicitationId: "auth-1", + }, + }), + ); + const response = yield* decodeWireError(yield* Queue.take(output)); + assert.equal(response.error.code, -32602); + assert.equal(yield* Ref.get(calls), 0); + }).pipe(Effect.scoped), +); + it.effect.each(["elicitation/complete", "session/elicitation/complete"])( "delivers %s notifications to the completion handler", (method) => diff --git a/packages/effect-acp/src/client.ts b/packages/effect-acp/src/client.ts index 0117835329381..b1dcf700e62e1 100644 --- a/packages/effect-acp/src/client.ts +++ b/packages/effect-acp/src/client.ts @@ -797,6 +797,7 @@ export const make = Effect.fn("effect-acp/AcpClient.make")(function* ( | undefined; let negotiatedProtocolGeneration: 1 | 2 | undefined; let sessionDeleteSupported = false; + let advertisedClientCapabilities: AcpSchema.InitializeRequest["clientCapabilities"] | undefined; const runNotificationHandlers =
( registration: BufferedNotificationHandler, @@ -984,6 +985,16 @@ export const make = Effect.fn("effect-acp/AcpClient.make")(function* ( cause, ).toProtocolError(), ), + Effect.filterOrFail( + (request) => + advertisedClientCapabilities === undefined || + (request.mode !== "form" && request.mode !== "url") || + advertisedClientCapabilities.elicitation?.[request.mode] != null, + (request) => + AcpError.AcpRequestError.invalidParams( + `Elicitation mode '${request.mode}' was not advertised by the client.`, + ).toProtocolError(), + ), Effect.flatMap((request) => runHandler( coreHandlers.elicitation, @@ -1088,24 +1099,27 @@ export const make = Effect.fn("effect-acp/AcpClient.make")(function* ( }, agent: { initialize: (payload) => - callRpc( - AGENT_METHODS.initialize, - rpc[AGENT_METHODS.initialize](toNegotiatingInitializeRequest(payload)), - ).pipe( - Effect.map((response) => { - // ACP v1 protocolVersion values were not generation identifiers in - // every shipped agent. Antigravity, for example, reports version 2 - // with the v1 agentInfo/agentCapabilities response shape. - const isV2 = isV2InitializeResponse(response); - negotiatedProtocolGeneration = isV2 ? 2 : 1; - const normalized = isV2 - ? normalizeInitializeResponse(response) - : (response as AcpSchema.InitializeResponse); - sessionDeleteSupported = - normalized.agentCapabilities?.sessionCapabilities?.delete != null; - return normalized; - }), - ), + Effect.suspend(() => { + advertisedClientCapabilities = payload.clientCapabilities ?? {}; + return callRpc( + AGENT_METHODS.initialize, + rpc[AGENT_METHODS.initialize](toNegotiatingInitializeRequest(payload)), + ).pipe( + Effect.map((response) => { + // ACP v1 protocolVersion values were not generation identifiers in + // every shipped agent. Antigravity, for example, reports version 2 + // with the v1 agentInfo/agentCapabilities response shape. + const isV2 = isV2InitializeResponse(response); + negotiatedProtocolGeneration = isV2 ? 2 : 1; + const normalized = isV2 + ? normalizeInitializeResponse(response) + : (response as AcpSchema.InitializeResponse); + sessionDeleteSupported = + normalized.agentCapabilities?.sessionCapabilities?.delete != null; + return normalized; + }), + ); + }), authenticate: (payload) => negotiatedProtocolGeneration === 1 ? callRpc( From 6c0032d655e2866bc2284c41ee5c260508ed7069 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:42:39 -0800 Subject: [PATCH 872/922] fix(server): MCP refuses disallowed browser origins with 403 before auth and CORS (#35810) Co-authored-by: Claude Opus 5.5 --- apps/server/src/http.ts | 12 ++++++++- apps/server/src/httpCors.ts | 3 +++ apps/server/src/mcp/McpHttpServer.test.ts | 31 +++++++++++++++++++++++ apps/server/src/mcp/McpHttpServer.ts | 8 ++++-- 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/apps/server/src/http.ts b/apps/server/src/http.ts index bbff00acb6f78..8a4bebbec83c4 100644 --- a/apps/server/src/http.ts +++ b/apps/server/src/http.ts @@ -52,6 +52,7 @@ import { browserApiCorsAllowedHeaders, browserApiCorsAllowedMethods, DESKTOP_RENDERER_ORIGINS, + MCP_HTTP_PATH, } from "./httpCors.ts"; import { requestUrl } from "./requestUrl.ts"; @@ -258,7 +259,7 @@ export const layerBrowserApiCors = Layer.unwrap( const config = yield* ServerConfig.ServerConfig; const devOrigin = config.devUrl?.origin; // Credentialed dev requests need explicit Vite/Electron origins; packaged desktop uses the default wildcard. - return HttpRouter.cors({ + const cors = HttpMiddleware.cors({ ...(devOrigin ? { allowedOrigins: [devOrigin, ...DESKTOP_RENDERER_ORIGINS, ...config.devAllowedOrigins], @@ -269,6 +270,15 @@ export const layerBrowserApiCors = Layer.unwrap( allowedHeaders: browserApiCorsAllowedHeaders, maxAge: 600, }); + return HttpRouter.middleware( + (httpEffect) => { + const withCors = cors(httpEffect); + return Effect.flatMap(HttpServerRequest.HttpServerRequest, (request) => + request.url.split("?", 1)[0] === MCP_HTTP_PATH ? httpEffect : withCors, + ); + }, + { global: true }, + ); }), ); diff --git a/apps/server/src/httpCors.ts b/apps/server/src/httpCors.ts index 18b537f17abad..b96e58ead9fca 100644 --- a/apps/server/src/httpCors.ts +++ b/apps/server/src/httpCors.ts @@ -11,3 +11,6 @@ export const browserApiCorsAllowedHeaders = [ ] as const; export const DESKTOP_RENDERER_ORIGINS = ["t3code://app", "t3code-dev://app"] as const; + +/** MCP refuses every browser Origin with 403, so the browser CORS layer must not answer for it. */ +export const MCP_HTTP_PATH = "/mcp"; diff --git a/apps/server/src/mcp/McpHttpServer.test.ts b/apps/server/src/mcp/McpHttpServer.test.ts index 0aef85d23e6f1..3c80cdf55fe1e 100644 --- a/apps/server/src/mcp/McpHttpServer.test.ts +++ b/apps/server/src/mcp/McpHttpServer.test.ts @@ -49,6 +49,7 @@ import * as DeviceService from "../device/DeviceService.ts"; import * as PullRequestReviewGuideService from "../pullRequest/PullRequestReviewGuideService.ts"; import * as PullRequestService from "../pullRequest/PullRequestService.ts"; import * as ServerConfig from "../config.ts"; +import * as ServerHttp from "../http.ts"; import * as ServerSettings from "../serverSettings.ts"; import { advertisedJsonSchema } from "./advertisedJsonSchema.ts"; import * as McpHttpServer from "./McpHttpServer.ts"; @@ -1257,6 +1258,12 @@ it.effect("admits provider and OAuth client credentials and points only clients ), }), ), + Layer.provide(ServerHttp.layerBrowserApiCors), + Layer.provide( + ServerConfig.layerTest(process.cwd(), { prefix: "t3-mcp-origin-test-" }).pipe( + Layer.provide(NodeServices.layer), + ), + ), ); const traced = recordSpans(); yield* HttpRouter.serve(serverLayer, { disableListenLog: true, disableLogger: true }).pipe( @@ -1339,6 +1346,30 @@ it.effect("admits provider and OAuth client credentials and points only clients (span) => span.name.startsWith("mcp.tool.") || span.name.startsWith("McpServer."), ), ).toEqual([]); + + // A present, disallowed Origin is refused with 403 before credentials or CORS answer. + const foreignOrigin = (method: "POST" | "OPTIONS", token: string | undefined) => + httpClient.execute( + HttpClientRequest.make(method)("/mcp", { + headers: { + origin: "https://untrusted.invalid", + accept: "application/json, text/event-stream", + "access-control-request-method": "POST", + ...(token === undefined ? {} : { authorization: `Bearer ${token}` }), + }, + ...(method === "POST" + ? { + body: HttpBody.text( + `{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1.0.0"}}}`, + "application/json", + ), + } + : {}), + }), + ); + expect((yield* foreignOrigin("POST", providerToken)).status).toBe(403); + expect((yield* foreignOrigin("POST", undefined)).status).toBe(403); + expect((yield* foreignOrigin("OPTIONS", undefined)).status).toBe(403); }), ).pipe(Effect.provide(NodeHttpServer.layerTest)), ); diff --git a/apps/server/src/mcp/McpHttpServer.ts b/apps/server/src/mcp/McpHttpServer.ts index ecbd1ba39e3c3..752702e390a2f 100644 --- a/apps/server/src/mcp/McpHttpServer.ts +++ b/apps/server/src/mcp/McpHttpServer.ts @@ -89,6 +89,7 @@ import * as HtmlHandlers from "./toolkits/html/handlers.ts"; import { MessageToolkit } from "./toolkits/message/tools.ts"; import * as MessageHandlers from "./toolkits/message/handlers.ts"; import { HtmlPreviewTool, HtmlPreviewToolkit, HtmlRenderToolkit } from "./toolkits/html/tools.ts"; +import { MCP_HTTP_PATH } from "../httpCors.ts"; import { requestUrl } from "../requestUrl.ts"; const mcpResourceMetadataUrl = (request: HttpServerRequest.HttpServerRequest) => @@ -279,7 +280,10 @@ const makeMcpAuthMiddleware = Effect.gen(function* () { }); // Untraced: a span here would wrap the tool call; the HTTP server span already covers it. return Effect.fnUntraced(function* (httpEffect) { - const admitted = yield* authenticateRequest(yield* HttpServerRequest.HttpServerRequest); + const request = yield* HttpServerRequest.HttpServerRequest; + // The transport allows no browser Origin; refuse it before credentials, as the MCP spec requires. + if (request.headers.origin !== undefined) return HttpServerResponse.empty({ status: 403 }); + const admitted = yield* authenticateRequest(request); if (HttpServerResponse.isHttpServerResponse(admitted)) return admitted; return yield* httpEffect.pipe( Effect.provideService(McpInvocationContext.McpInvocationContext, admitted), @@ -1327,7 +1331,7 @@ export const layerMcpTransport = (registrations: Layer.Layer Date: Sun, 15 Nov 2026 10:13:02 +0530 Subject: [PATCH 873/922] fix(mcp): explain cross-thread permission rejections (#36934) Co-authored-by: Julius Marminge Co-authored-by: Claude Opus 5.5 --- apps/server/src/mcp/OrchestratorMcpService.ts | 8 +++---- apps/server/src/mcp/threadAccess.test.ts | 23 ++++++++++++++++++- apps/server/src/mcp/threadAccess.ts | 9 +++++++- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/apps/server/src/mcp/OrchestratorMcpService.ts b/apps/server/src/mcp/OrchestratorMcpService.ts index a057bd51deba5..e878322472aa4 100644 --- a/apps/server/src/mcp/OrchestratorMcpService.ts +++ b/apps/server/src/mcp/OrchestratorMcpService.ts @@ -132,7 +132,7 @@ import { runtimeModeRank, taskPrompt, } from "./delegatedTaskModes.ts"; -import { isLiveCallerShell, threadNotFound } from "./threadAccess.ts"; +import { assertTargetWithinLimits, isLiveCallerShell, threadNotFound } from "./threadAccess.ts"; import * as SecretRequests from "../secrets/SecretRequests.ts"; import * as PeerForwarding from "../peer/PeerForwarding.ts"; import * as RemoteDelegation from "../peer/RemoteDelegation.ts"; @@ -3362,8 +3362,7 @@ const make = Effect.gen(function* () { sendToThread: Effect.fn("OrchestratorMcpService.sendToThread")(function* (scope, input) { const { parent, limits, target } = yield* loadScopedThread(scope, input.threadId, ["runs"]); yield* assertLiveCallerForOtherThread(scope, parent, target); - yield* resolveRuntimeMode(limits.runtimeMode, target.thread.runtimeMode); - yield* resolveInteractionMode(limits.interactionMode, target.thread.interactionMode); + yield* assertTargetWithinLimits(limits, target.thread); const mode = input.mode ?? "auto"; const key = yield* requestKey(input.clientRequestId); @@ -3467,8 +3466,7 @@ const make = Effect.gen(function* () { interruptThread: Effect.fn("OrchestratorMcpService.interruptThread")(function* (scope, input) { const { parent, limits, target } = yield* loadScopedThread(scope, input.threadId, ["runs"]); yield* assertLiveCallerForOtherThread(scope, parent, target); - yield* resolveRuntimeMode(limits.runtimeMode, target.thread.runtimeMode); - yield* resolveInteractionMode(limits.interactionMode, target.thread.interactionMode); + yield* assertTargetWithinLimits(limits, target.thread); const key = yield* requestKey(input.clientRequestId); // A peer from before `stop` drops it when decoding, so it interrupts // the run instead, as this call did then. diff --git a/apps/server/src/mcp/threadAccess.test.ts b/apps/server/src/mcp/threadAccess.test.ts index 3b4683871dcc7..914b42426540b 100644 --- a/apps/server/src/mcp/threadAccess.test.ts +++ b/apps/server/src/mcp/threadAccess.test.ts @@ -11,7 +11,7 @@ import * as Layer from "effect/Layer"; import * as ThreadManagement from "../orchestration-v2/ThreadManagementService.ts"; import * as McpInvocationContext from "./McpInvocationContext.ts"; import { liveThreadShell } from "./McpToolAccess.testkit.ts"; -import { readThread } from "./threadAccess.ts"; +import { assertTargetWithinLimits, readThread } from "./threadAccess.ts"; const bareId = ThreadId.make("5d0b4a3e-8c1f-4a52-9d37-2f6c7e1b9a04"); const claudeCode: McpInvocationContext.McpClientCaller = { @@ -117,3 +117,24 @@ it.effect("points an unencoded delegated-task id at the encoded thread it belong expect(error.message).toContain(`\`${encoded}\``); }), ); + +it.effect("identifies the target and effective caller ceiling when a thread write is refused", () => + Effect.gen(function* () { + for (const [runtimeMode, interactionMode, code] of [ + ["approval-required", "default", "runtime_mode_escalation_denied"], + ["full-access", "plan", "interaction_mode_escalation_denied"], + ["approval-required", "plan", "runtime_mode_escalation_denied"], + ] as const) { + const target = liveThreadShell(bareId, { runtimeMode: "full-access" }); + const error = yield* assertTargetWithinLimits({ runtimeMode, interactionMode }, target).pipe( + Effect.flip, + ); + + expect(error.code).toBe(code); + expect(error.message).toContain(bareId); + expect(error.message).toContain("full-access/default"); + expect(error.message).toContain(`${runtimeMode}/${interactionMode}`); + expect(error.message).not.toMatch(/child|parent mode/i); + } + }), +); diff --git a/apps/server/src/mcp/threadAccess.ts b/apps/server/src/mcp/threadAccess.ts index cc5a4651a5de7..8cce38949cdd0 100644 --- a/apps/server/src/mcp/threadAccess.ts +++ b/apps/server/src/mcp/threadAccess.ts @@ -144,11 +144,18 @@ export const loadCaller = Effect.fn("mcp.loadCaller")(function* () { export const assertTargetWithinLimits = ( limits: CallerLimits, - target: { readonly runtimeMode: RuntimeMode; readonly interactionMode: ProviderInteractionMode }, + target: Pick, ) => resolveRuntimeMode(limits.runtimeMode, target.runtimeMode).pipe( Effect.andThen(resolveInteractionMode(limits.interactionMode, target.interactionMode)), Effect.asVoid, + Effect.mapError( + (error) => + new OrchestratorMcpFailure({ + code: error.code, + message: `Thread "${target.id}" runs in ${target.runtimeMode}/${target.interactionMode}, above this caller's ${limits.runtimeMode}/${limits.interactionMode} limit. For linked calls, this limit is also capped by the link's approved access. This call does not create an approval request. Have the user act directly in the target thread through an authorized client.`, + }), + ), ); /** Background subagents retain credentials until provider exit; archived threads and other instances cannot act. */ From 1672b51630a309d49eee19120aba5352399821a3 Mon Sep 17 00:00:00 2001 From: Jiri Kvapil <53862157+kvapca@users.noreply.github.com> Date: Sun, 15 Nov 2026 05:43:10 +0100 Subject: [PATCH 874/922] fix(web): Add Environment drops the old tab's error when switching mode (#32157) Co-authored-by: Julius Marminge --- .../AddEnvironmentDialog.browser.test.tsx | 18 ++++++++++++++++++ .../settings/AddEnvironmentDialog.tsx | 1 + 2 files changed, 19 insertions(+) diff --git a/apps/web/src/components/settings/AddEnvironmentDialog.browser.test.tsx b/apps/web/src/components/settings/AddEnvironmentDialog.browser.test.tsx index 6b4d0a08a629f..a2c000257e7b5 100644 --- a/apps/web/src/components/settings/AddEnvironmentDialog.browser.test.tsx +++ b/apps/web/src/components/settings/AddEnvironmentDialog.browser.test.tsx @@ -97,6 +97,24 @@ describe("AddEnvironmentDialog", () => { await expectDefaultModeAfterReopen(); }); + it("drops an SSH error when switching to Remote link", async () => { + using _bridge = setup(); + await using _screen = await render(); + + mocks.connectSshEnvironment.mockResolvedValueOnce( + AsyncResult.failure(Cause.fail(new Error("ssh: connection refused"))), + ); + await openDialogOnSsh(); + await userEvent.type(page.getByPlaceholder("Search hosts or type devbox"), "devbox"); + await userEvent.click( + page.getByRole("dialog").getByRole("button", { name: "Add environment" }), + ); + await expect.element(page.getByText(/connection refused/)).toBeInTheDocument(); + + await userEvent.click(remoteCard()); + await expect.element(page.getByText(/connection refused/)).not.toBeInTheDocument(); + }); + it("clears the form after dismissing it on SSH", async () => { using _bridge = setup(); await using _screen = await render(); diff --git a/apps/web/src/components/settings/AddEnvironmentDialog.tsx b/apps/web/src/components/settings/AddEnvironmentDialog.tsx index ed366c4b03e7c..1002f188c78db 100644 --- a/apps/web/src/components/settings/AddEnvironmentDialog.tsx +++ b/apps/web/src/components/settings/AddEnvironmentDialog.tsx @@ -369,6 +369,7 @@ export function AddEnvironmentDialog({ )} disabled={isAddingSavedBackend} onClick={() => { + if (!selected) onErrorChange(null); setSavedBackendMode(input.mode); }} > From 3e29748f969521bc7c9661d222b1e19689a8b771 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:43:14 -0800 Subject: [PATCH 875/922] fix(server): malformed MCP client registration returns an RFC 7591 error body (#35809) Co-authored-by: Claude Opus 5.5 --- apps/server/src/auth/McpOAuth.test.ts | 12 ++++++++++++ apps/server/src/auth/mcpOAuthHttp.ts | 20 ++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/apps/server/src/auth/McpOAuth.test.ts b/apps/server/src/auth/McpOAuth.test.ts index 35701dd529768..4ad56edeeaf80 100644 --- a/apps/server/src/auth/McpOAuth.test.ts +++ b/apps/server/src/auth/McpOAuth.test.ts @@ -258,6 +258,18 @@ it.effect("registers loopback and https clients and never redirects for an unver ); expect(fiveLongCallbacks.status).toBe(201); + for (const malformed of [ + { client_name: 42, redirect_uris: [REDIRECT] }, + { redirect_uris: REDIRECT }, + ]) { + const response = yield* handler(postJson("/oauth/mcp/register", malformed)); + expect(response.status).toBe(400); + expect(response.headers.get("content-type")).toMatch(/^application\/json/); + expect(yield* json<{ error: string }>(response)).toMatchObject({ + error: expect.stringMatching(/^invalid_(client_metadata|redirect_uri)$/), + }); + } + const registered = yield* register(handler); expect(registered.status).toBe(201); const { client_id: clientId } = (yield* json(registered)) as { client_id: string }; diff --git a/apps/server/src/auth/mcpOAuthHttp.ts b/apps/server/src/auth/mcpOAuthHttp.ts index a411c635e30e4..6e10362000adf 100644 --- a/apps/server/src/auth/mcpOAuthHttp.ts +++ b/apps/server/src/auth/mcpOAuthHttp.ts @@ -2,6 +2,8 @@ import { AuthMcpApprovalError, AuthMcpAuthorizationRequest, AuthMcpClientAccess, + AuthMcpClientRegistration, + AuthMcpRegistrationError, EnvironmentHttpApi, mcpClientScopes, } from "@t3tools/contracts"; @@ -42,6 +44,10 @@ const noStore = HttpEffect.appendPreResponseHandler((_request, response) => const requestUrls = Effect.map(HttpServerRequest.HttpServerRequest, McpOAuth.requestUrls); const decodeAuthorizationRequest = Schema.decodeEffect(AuthMcpAuthorizationRequest); +// Decoded by the handler so malformed metadata gets the RFC 7591 error, not HttpApi's empty 400. +const decodeClientRegistration = Schema.decodeUnknownEffect( + Schema.fromJsonString(AuthMcpClientRegistration), +); /** * An unverified client or redirect is reported, never redirected; any other problem goes back to @@ -100,8 +106,18 @@ export const layer = HttpApiBuilder.group( .handle("authorizationServer", () => requestUrls.pipe(Effect.map(McpOAuth.authorizationServerMetadata)), ) - .handle("register", ({ payload }) => - oauth.register(payload).pipe( + .handleRaw("register", ({ request }) => + request.text.pipe( + Effect.orDie, + Effect.flatMap(decodeClientRegistration), + Effect.mapError( + (cause) => + new AuthMcpRegistrationError({ + error: "invalid_client_metadata", + error_description: `Invalid client metadata: ${cause.message}`, + }), + ), + Effect.flatMap(oauth.register), Effect.map((client) => ({ client_id: client.clientId, client_name: client.name, From e57041a1dff1545119576f9d5c6007610433f98e Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:43:40 -0800 Subject: [PATCH 876/922] fix(server): pairing codes typed in hyphen- or space-separated groups are accepted (#35069) --- apps/server/src/auth/PairingGrantStore.test.ts | 16 ++++++++++++++++ apps/server/src/auth/PairingGrantStore.ts | 6 ++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/apps/server/src/auth/PairingGrantStore.test.ts b/apps/server/src/auth/PairingGrantStore.test.ts index 5184beb096807..3f95ce46ec695 100644 --- a/apps/server/src/auth/PairingGrantStore.test.ts +++ b/apps/server/src/auth/PairingGrantStore.test.ts @@ -70,6 +70,22 @@ it.layer(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer))("PairingGrantStor ), ); + it.effect("accepts a one-time token typed in hyphen- or space-separated groups", () => + Effect.gen(function* () { + const bootstrapCredentials = yield* PairingGrantStore.PairingGrantStore; + const issued = yield* bootstrapCredentials.issueOneTimeToken(); + const formatted = issued.credential.match(/.{1,4}/g)!.join("-"); + const consumed = yield* bootstrapCredentials.consume(formatted.toLowerCase()); + const second = yield* bootstrapCredentials.issueOneTimeToken(); + const spaced = yield* bootstrapCredentials.consume( + second.credential.match(/.{1,4}/g)!.join(" "), + ); + + expect(consumed.method).toBe("one-time-token"); + expect(spaced.method).toBe("one-time-token"); + }).pipe(Effect.provide(layerPairingGrantStore())), + ); + it.effect("atomically consumes a one-time token when multiple requests race", () => Effect.gen(function* () { const bootstrapCredentials = yield* PairingGrantStore.PairingGrantStore; diff --git a/apps/server/src/auth/PairingGrantStore.ts b/apps/server/src/auth/PairingGrantStore.ts index f5f558d57526a..62d78d3495013 100644 --- a/apps/server/src/auth/PairingGrantStore.ts +++ b/apps/server/src/auth/PairingGrantStore.ts @@ -637,8 +637,10 @@ const make = Effect.gen(function* () { } // Only credentials in the issued pairing-code formats are case-insensitive. - const pairingCredential = PAIRING_TOKEN_PATTERN.test(credential) - ? credential.toUpperCase() + // People type codes in groups such as XXXX-XXXX-XXXX. + const compactCredential = credential.replace(/[\s-]/g, ""); + const pairingCredential = PAIRING_TOKEN_PATTERN.test(compactCredential) + ? compactCredential.toUpperCase() : (parseMcpApprovalCode(credential)?.code ?? credential); // Check scopes in the UPDATE so rejected requests cannot spend one-time links. From 137a8691384817e4c2e65f16ec8777e7ff0fb1fc Mon Sep 17 00:00:00 2001 From: Dias <87440198+JoaoMarcos44@users.noreply.github.com> Date: Sun, 15 Nov 2026 01:43:51 -0300 Subject: [PATCH 877/922] fix(shared): use HTTP for schemeless loopback previews (#29710) Co-authored-by: maria-rcks Co-authored-by: Julius Marminge Co-authored-by: Claude Opus 5.5 --- packages/shared/src/preview.test.ts | 10 ++++++++++ packages/shared/src/preview.ts | 9 ++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/shared/src/preview.test.ts b/packages/shared/src/preview.test.ts index d381156090b57..e6245e9c39ec0 100644 --- a/packages/shared/src/preview.test.ts +++ b/packages/shared/src/preview.test.ts @@ -149,6 +149,16 @@ describe("resolveSearchUrlTemplate", () => { }); describe("normalizePreviewUrl", () => { + it.each([ + ["127.0.0.2:3000/path", "http://127.0.0.2:3000/path"], + ["127.255.255.254:443/path", "http://127.255.255.254:443/path"], + ["0x7f.0.0.2:3000", "http://127.0.0.2:3000/"], + ["127.0.0.2.example.com:3000", "https://127.0.0.2.example.com:3000/"], + ["https://127.0.0.2:80/path", "https://127.0.0.2:80/path"], + ])("infers the scheme for loopback-looking %s", (input, expected) => { + expect(normalizePreviewUrl(input)).toBe(expected); + }); + it("tells agents how to open a blank tab and which URLs are accepted", () => { expect(() => normalizePreviewUrl("about:blank")).toThrow( /preview_open, omit url when creating a new tab[^.]*blank tab/i, diff --git a/packages/shared/src/preview.ts b/packages/shared/src/preview.ts index 6740b50d26eb0..3fe6894e72b5a 100644 --- a/packages/shared/src/preview.ts +++ b/packages/shared/src/preview.ts @@ -194,9 +194,8 @@ export function normalizePreviewUrl(rawUrl: string): string { }); } const useHttp = LOOPBACK_PREFIX_PATTERN.test(trimmed); - const candidate = URL_SCHEME_WITH_AUTHORITY_PATTERN.test(trimmed) - ? trimmed - : `${useHttp ? "http" : "https"}://${trimmed}`; + const hasExplicitScheme = URL_SCHEME_WITH_AUTHORITY_PATTERN.test(trimmed); + const candidate = hasExplicitScheme ? trimmed : `${useHttp ? "http" : "https"}://${trimmed}`; let parsed: URL; try { parsed = new URL(candidate); @@ -215,5 +214,9 @@ export function normalizePreviewUrl(rawUrl: string): string { protocol: parsed.protocol, }); } + // Re-parse rather than swap the protocol so an explicit :443 survives as a non-default HTTP port. + if (!hasExplicitScheme && !useHttp && isLocalLoopbackHost(parsed.hostname)) { + return new URL(`http://${trimmed}`).href; + } return parsed.href; } From 166cb008972b63a0537a5cdda153c45ac70f86eb Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:44:08 -0800 Subject: [PATCH 878/922] fix(opencode): Full access subagents start without approval prompts (#35401) --- packages/provider-opencode/src/server/adapter.test.ts | 7 +++++++ packages/provider-opencode/src/server/adapter.ts | 6 +++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/provider-opencode/src/server/adapter.test.ts b/packages/provider-opencode/src/server/adapter.test.ts index c28e6ff52b34b..e215a2f6fdde2 100644 --- a/packages/provider-opencode/src/server/adapter.test.ts +++ b/packages/provider-opencode/src/server/adapter.test.ts @@ -4898,6 +4898,13 @@ describe("OpenCodeAdapterV2", () => { const fullAccess = openCodePermissionRules(runtimePolicy("full-access")); assert.equal(permissionAction(fullAccess, "bash"), "allow"); assert.equal(permissionAction(fullAccess, "edit"), "allow"); + const fullAccessRulesCopiedToTaskChildren = fullAccess.filter( + (rule) => rule.permission === "external_directory" || rule.action === "deny", + ); + assert.equal( + permissionAction(fullAccessRulesCopiedToTaskChildren, "external_directory"), + "allow", + ); const granularApproval = openCodePermissionRules( runtimePolicy("full-access", { diff --git a/packages/provider-opencode/src/server/adapter.ts b/packages/provider-opencode/src/server/adapter.ts index 2f645c58ae7c8..602977628612d 100644 --- a/packages/provider-opencode/src/server/adapter.ts +++ b/packages/provider-opencode/src/server/adapter.ts @@ -662,7 +662,11 @@ export function openCodePermissionRules( sandboxType === undefined && runtimePolicy.runtimeMode === "full-access"; if (!requiresApproval && (externallySandboxed || dangerFullAccess || implicitFullAccess)) { - return [{ permission: "*", pattern: "*", action: "allow" }]; + // Task children copy only external_directory and deny rules before their first tool call. + return [ + { permission: "*", pattern: "*", action: "allow" }, + { permission: "external_directory", pattern: "*", action: "allow" }, + ]; } // Children initially inherit only denies; seed them before overrides to protect the policy-install gap. From 9dbb8028457c0fc068fa333a984a0478c07e6fb4 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:44:23 -0800 Subject: [PATCH 879/922] fix(desktop): saving keeps a connection catalog this build cannot read (#34944) --- .../app/DesktopConnectionCatalogStore.test.ts | 62 ++++++++++++++++ .../src/app/DesktopConnectionCatalogStore.ts | 73 +++++++++++++++---- 2 files changed, 120 insertions(+), 15 deletions(-) diff --git a/apps/desktop/src/app/DesktopConnectionCatalogStore.test.ts b/apps/desktop/src/app/DesktopConnectionCatalogStore.test.ts index 5dfde9103f152..b58b583fd6cd5 100644 --- a/apps/desktop/src/app/DesktopConnectionCatalogStore.test.ts +++ b/apps/desktop/src/app/DesktopConnectionCatalogStore.test.ts @@ -300,4 +300,66 @@ describe("DesktopConnectionCatalogStore", () => { assert.deepStrictEqual(yield* store.get, Option.some('{"schemaVersion":1,"targets":[]}')); }).pipe(Effect.provide(NodeServices.layer)), ); + + const emptyCatalog = + '{"schemaVersion":1,"targets":[],"profiles":[],"credentials":[],"remoteDpopTokens":[],"disabledEnvironmentIds":[]}'; + const savedFilesHolding = Effect.fn(function* (stateDir: string, contents: string) { + const fileSystem = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + const kept: string[] = []; + for (const name of yield* fileSystem.readDirectory(stateDir)) { + const file = path.join(stateDir, name); + if ((yield* fileSystem.stat(file)).type !== "File") continue; + if ((yield* fileSystem.readFileString(file)) === contents) kept.push(name); + } + return kept; + }); + + it.effect("keeps a catalog this build cannot decode when the next save replaces it", () => + withStore( + Effect.gen(function* () { + const path = yield* Path.Path; + const environment = yield* DesktopEnvironment.DesktopEnvironment; + const fileSystem = yield* FileSystem.FileSystem; + const store = yield* DesktopConnectionCatalogStore.DesktopConnectionCatalogStore; + const catalogPath = path.join(environment.stateDir, "connection-catalog.json"); + assert.isTrue( + yield* store.set( + '{"schemaVersion":1,"targets":[{"_tag":"FutureConnectionTarget","environmentId":"remote"}],"profiles":[],"credentials":[],"remoteDpopTokens":[],"disabledEnvironmentIds":[]}', + ), + ); + const original = yield* fileSystem.readFileString(catalogPath); + + yield* store.get; + assert.isTrue(yield* store.set(emptyCatalog)); + + assert.isNotEmpty(yield* savedFilesHolding(environment.stateDir, original)); + }), + ), + ); + + it.effect("keeps a catalog that no longer decrypts when the next save replaces it", () => + Effect.gen(function* () { + const path = yield* Path.Path; + const fileSystem = yield* FileSystem.FileSystem; + const baseDir = yield* fileSystem.makeTempDirectoryScoped({ + prefix: "t3-desktop-connection-catalog-test-", + }); + const failDecrypt = yield* Ref.make(false); + const store = yield* DesktopConnectionCatalogStore.DesktopConnectionCatalogStore.pipe( + Effect.provide(layerFor(baseDir, true, failDecrypt)), + ); + const stateDir = path.join(baseDir, "userdata"); + assert.isTrue(yield* store.set('{"schemaVersion":1,"targets":[]}')); + const original = yield* fileSystem.readFileString( + path.join(stateDir, "connection-catalog.json"), + ); + + yield* Ref.set(failDecrypt, true); + yield* store.get.pipe(Effect.flip); + assert.isTrue(yield* store.set(emptyCatalog)); + + assert.isNotEmpty(yield* savedFilesHolding(stateDir, original)); + }).pipe(Effect.provide(NodeServices.layer), Effect.scoped), + ); }); diff --git a/apps/desktop/src/app/DesktopConnectionCatalogStore.ts b/apps/desktop/src/app/DesktopConnectionCatalogStore.ts index 3240df3636e38..5db49e5f9504c 100644 --- a/apps/desktop/src/app/DesktopConnectionCatalogStore.ts +++ b/apps/desktop/src/app/DesktopConnectionCatalogStore.ts @@ -15,6 +15,7 @@ import { fromLenientJson } from "@t3tools/shared/schemaJson"; import * as Context from "effect/Context"; import * as SecureRandom from "effect/crypto/SecureRandom"; import * as Effect from "effect/Effect"; +import * as Clock from "effect/Clock"; import * as Base64 from "effect/encoding/Base64"; import * as FileSystem from "effect/FileSystem"; import * as Layer from "effect/Layer"; @@ -45,6 +46,9 @@ const RuntimeConnectionCatalogDocumentJson = Schema.fromJsonString( const encodeRuntimeConnectionCatalogDocumentJson = Schema.encodeEffect( RuntimeConnectionCatalogDocumentJson, ); +const decodeRuntimeConnectionCatalogDocumentJson = Schema.decodeEffect( + RuntimeConnectionCatalogDocumentJson, +); const DesktopConnectionCatalogStoreWriteOperation = Schema.Literals([ "create-temporary-file-name", @@ -52,6 +56,7 @@ const DesktopConnectionCatalogStoreWriteOperation = Schema.Literals([ "create-directory", "write-temporary-file", "replace-catalog-file", + "keep-unreadable-catalog", ]); const DesktopConnectionCatalogStoreMigrationOperation = Schema.Literals([ @@ -395,6 +400,57 @@ export const make = Effect.gen(function* () { ), ); + const decryptDocument = (document: EncryptedConnectionCatalogDocument) => + decodeSecretBytes(catalogPath, document.encryptedCatalog).pipe( + Effect.flatMap((encryptedCatalog) => + safeStorage.decryptString(encryptedCatalog).pipe( + Effect.mapError( + (cause) => + new DesktopConnectionCatalogStoreProtectionError({ + operation: "decrypt-catalog", + catalogPath, + cause, + }), + ), + ), + ), + ); + + // A catalog this build cannot decrypt or decode may still hold another build's saved + // environments and credentials, so a save copies it aside instead of destroying it. + const keepUnreadableCatalog = Effect.gen(function* () { + const readable = yield* readDocument(fileSystem, catalogPath).pipe( + Effect.flatMap( + Option.match({ + onNone: () => Effect.succeed(true), + onSome: (document) => + decryptDocument(document).pipe( + Effect.flatMap(decodeRuntimeConnectionCatalogDocumentJson), + Effect.as(true), + ), + }), + ), + Effect.orElseSucceed(() => false), + ); + if (readable) { + return; + } + const keptPath = `${catalogPath}.unreadable-${yield* Clock.currentTimeMillis}`; + yield* fileSystem.copyFile(catalogPath, keptPath).pipe( + Effect.mapError( + (cause) => + new DesktopConnectionCatalogStoreWriteError({ + operation: "keep-unreadable-catalog", + path: keptPath, + cause, + }), + ), + ); + yield* Effect.logWarning("Kept an unreadable connection catalog before replacing it.", { + keptPath, + }); + }); + const writeCatalog = Effect.fn("desktop.connectionCatalogStore.writeCatalog")(function* ( catalog: string, ) { @@ -470,26 +526,13 @@ export const make = Effect.gen(function* () { if (!(yield* encryptionAvailable)) { return Option.none(); } - const decrypted = yield* decodeSecretBytes(catalogPath, document.value.encryptedCatalog).pipe( - Effect.flatMap((encryptedCatalog) => - safeStorage.decryptString(encryptedCatalog).pipe( - Effect.mapError( - (cause) => - new DesktopConnectionCatalogStoreProtectionError({ - operation: "decrypt-catalog", - catalogPath, - cause, - }), - ), - ), - ), - ); - return Option.some(decrypted); + return Option.some(yield* decryptDocument(document.value)); }).pipe(Effect.withSpan("desktop.connectionCatalogStore.get")), set: Effect.fn("desktop.connectionCatalogStore.set")(function* (catalog) { if (!(yield* encryptionAvailable)) { return false; } + yield* keepUnreadableCatalog; yield* writeCatalog(catalog); return true; }), From dcd39b4b6e37fbf8568817e328235f96106e0a66 Mon Sep 17 00:00:00 2001 From: Prem Chaitanya Prathi Date: Sun, 15 Nov 2026 10:14:40 +0530 Subject: [PATCH 880/922] fix(pi): model list loads when the server's folder has a project MCP config (#28557) Co-authored-by: maria-rcks Co-authored-by: Julius Marminge Co-authored-by: Claude Opus 5.5 --- .../provider-pi/src/server/status.test.ts | 61 ++++++++++++++++++- packages/provider-pi/src/server/status.ts | 60 ++++++++++++++++-- 2 files changed, 114 insertions(+), 7 deletions(-) diff --git a/packages/provider-pi/src/server/status.test.ts b/packages/provider-pi/src/server/status.test.ts index 37fa28c00e42a..3c562b461579d 100644 --- a/packages/provider-pi/src/server/status.test.ts +++ b/packages/provider-pi/src/server/status.test.ts @@ -19,6 +19,13 @@ const decodeRpcRequest = Schema.decodeSync( Schema.fromJsonString(Schema.Struct({ id: Schema.String, type: Schema.String })), ); const encodeJsonLine = Schema.encodeSync(Schema.fromJsonString(Schema.Unknown)); +const STARTUP_DIALOG = `${encodeJsonLine({ + type: "extension_ui_request", + id: "ui-1", + method: "select", + title: "Allow project MCP server “github”?", + options: ["Don't allow", "Allow"], +})}\n`; function processHandle(input: { readonly stdout?: string; @@ -118,6 +125,10 @@ const piDiscoverySpawner = ( readonly version?: string; readonly state?: unknown; readonly authCheck?: string | undefined; + /** Without `--no-approve`, print a project-trust dialog and exit 0 as Pi 1.x does. */ + readonly startupDialog?: boolean; + /** What `--no-approve` lists once project-local extensions are skipped. */ + readonly declinedProjectInventory?: unknown; } = {}, ) => Effect.succeed( @@ -132,13 +143,24 @@ const piDiscoverySpawner = ( ? Effect.die(`Unexpected pi ${args.join(" ")}`) : Effect.succeed(processHandle({ stdout: options.authCheck, exitCode: 1 })); } + if ( + options.startupDialog === true && + !args.includes("--no-extensions") && + !args.includes("--no-approve") + ) { + return Effect.succeed(processHandle({ stdout: STARTUP_DIALOG })); + } if (args.includes("--no-extensions") && extensionFreeInventory === exitsWithoutExtensions) { return Effect.succeed( processHandle({ stderr: 'Error: Unknown provider "demo".', exitCode: 1 }), ); } return piRpcProcess( - args.includes("--no-extensions") ? extensionFreeInventory : inventory, + args.includes("--no-extensions") + ? extensionFreeInventory + : args.includes("--no-approve") && options.declinedProjectInventory !== undefined + ? options.declinedProjectInventory + : inventory, args.includes("--no-extensions") ? onExtensionFreeModelRequest : Effect.void, options.state, ); @@ -423,6 +445,43 @@ describe("PiProvider", () => { }).pipe(Effect.provide(NodeServices.layer)), ); + it.effect.each([ + { launchArgs: "", startupDialog: true, models: ["default", "anthropic/claude-opus"] }, + { launchArgs: "--approve", startupDialog: true, models: ["default"] }, + { + launchArgs: "", + startupDialog: false, + models: ["default", "anthropic/claude-opus", "project/local-model"], + }, + ])( + "keeps project trust unless a startup dialog blocks discovery (dialog: $startupDialog, launch args '$launchArgs')", + (row) => + Effect.gen(function* () { + const spawner = yield* piDiscoverySpawner( + { + models: [ + { provider: "anthropic", id: "claude-opus" }, + { provider: "project", id: "local-model" }, + ], + }, + undefined, + undefined, + { + startupDialog: row.startupDialog, + declinedProjectInventory: { models: [{ provider: "anthropic", id: "claude-opus" }] }, + }, + ); + const snapshot = yield* checkPiProviderStatus({ + ...settings, + launchArgs: row.launchArgs, + }).pipe(Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, spawner)); + assert.deepEqual( + snapshot.models.map((model) => model.slug), + row.models, + ); + }).pipe(Effect.provide(NodeServices.layer)), + ); + // regression: #18498 a malformed model inventory must not restore stale Pi models it.effect.each([ ["missing models", {}], diff --git a/packages/provider-pi/src/server/status.ts b/packages/provider-pi/src/server/status.ts index 43fa8f60c08a5..86a8e63de753c 100644 --- a/packages/provider-pi/src/server/status.ts +++ b/packages/provider-pi/src/server/status.ts @@ -8,6 +8,7 @@ import type { PiSettings } from "../settings.ts"; import { causeErrorTag } from "@t3tools/shared/observability"; import { resolveSpawnCommand } from "@t3tools/shared/shell"; import { compareSemverVersions } from "@t3tools/shared/semver"; +import * as Cause from "effect/Cause"; import * as DateTime from "effect/DateTime"; import * as Effect from "effect/Effect"; import * as Stream from "effect/Stream"; @@ -167,6 +168,36 @@ const makePiDiscoveryConnection = Effect.fnUntraced(function* ( return connection; }); +// A failed response echoes Pi's own `command` field as the operation, so log only names we sent. +const PI_LOGGED_RPC_OPERATIONS = new Set([ + "spawn", + "read", + "write", + "exit", + "terminate", + "get_state", + "get_available_models", + "get_commands", +]); + +const PI_PROJECT_TRUST_ARGUMENTS = new Set(["--approve", "-a", "--no-approve", "-na"]); + +const readPiInventory = Effect.fn("PiProviderStatus.readPiInventory")(function* ( + piSettings: PiSettings, + environment: NodeJS.ProcessEnv, + launchArgs: ReadonlyArray, + timeoutMs: number, + cwd?: string, +) { + const connection = yield* makePiDiscoveryConnection(piSettings, environment, launchArgs, cwd); + const stateData = yield* connection.request({ type: "get_state" }, timeoutMs); + const modelsData = yield* connection.request({ type: "get_available_models" }, timeoutMs); + const commandsData = yield* connection + .request({ type: "get_commands" }, timeoutMs) + .pipe(Effect.orElseSucceed(() => undefined)); + return { stateData, modelsData, commandsData }; +}, Effect.scoped); + // Text generation runs Pi with --no-extensions, so it cannot load models that an // extension or package registers. Listing models with that launch tells them apart. const discoverPiTextGenerationModelSlugs = Effect.fn( @@ -217,12 +248,25 @@ const discoverPiViaRpc = Effect.fn("PiProviderStatus.discoverPiViaRpc")(function }), Effect.forkScoped, ); - const connection = yield* makePiDiscoveryConnection(piSettings, environment, launchArgs, cwd); - const stateData = yield* connection.request({ type: "get_state" }, timeoutMs); - const modelsData = yield* connection.request({ type: "get_available_models" }, timeoutMs); - const commandsData = yield* connection - .request({ type: "get_commands" }, timeoutMs) - .pipe(Effect.orElseSucceed(() => undefined)); + const { stateData, modelsData, commandsData } = yield* readPiInventory( + piSettings, + environment, + launchArgs, + timeoutMs, + cwd, + ).pipe( + // Pi's RPC mode reads stdin only after session_start, so a startup dialog (an MCP adapter asking + // to approve a project server) can never be answered and Pi exits. Retry declining project trust + // unless the user chose a trust mode, so trusted projects keep their project-local models. + Effect.catchIf( + (error) => + error._tag === "PiRpcError" && + (error.operation === "read" || error.operation === "exit") && + !launchArgs.some((arg) => PI_PROJECT_TRUST_ARGUMENTS.has(arg)), + () => + readPiInventory(piSettings, environment, [...launchArgs, "--no-approve"], timeoutMs, cwd), + ), + ); const discoveredModels = yield* Effect.fromResult(parseDiscoveredModels(modelsData, stateData)); const { slashCommands, skills } = parsePiDiscoveredCommands(commandsData); const textGenerationModelSlugs = yield* Fiber.join(textGenerationModelSlugsFiber); @@ -532,8 +576,12 @@ export const checkPiProviderStatus = Effect.fn("checkPiProviderStatus")(function Effect.exit, ); if (Exit.isFailure(discoveryExit)) { + const failure = Cause.findErrorOption(discoveryExit.cause); yield* Effect.logWarning("Pi RPC discovery failed.", { errorTag: causeErrorTag(discoveryExit.cause), + ...(Option.isSome(failure) && PI_LOGGED_RPC_OPERATIONS.has(failure.value.operation) + ? { operation: failure.value.operation } + : {}), }); return buildServerProvider({ presentation: PI_PRESENTATION, From 5a31f1749d4f96b94cc682113e221cd520cdc591 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:44:57 -0800 Subject: [PATCH 881/922] fix(server): Git LFS images in pull request descriptions load the object, not its pointer (#35466) --- .../src/server/gitHubMediaFetch.test.ts | 64 +++++++++++++++++++ .../src/server/gitHubMediaFetch.ts | 16 ++++- .../src/shared/gitHubMedia.ts | 8 +++ 3 files changed, 87 insertions(+), 1 deletion(-) diff --git a/packages/source-control-github/src/server/gitHubMediaFetch.test.ts b/packages/source-control-github/src/server/gitHubMediaFetch.test.ts index 762ec4ce1c106..b55af4232384d 100644 --- a/packages/source-control-github/src/server/gitHubMediaFetch.test.ts +++ b/packages/source-control-github/src/server/gitHubMediaFetch.test.ts @@ -125,6 +125,70 @@ describe("GitHubMediaFetch", () => { ); }); + it.effect("serves a Git LFS file's object, not the pointer a raw read returns", () => { + const object = "\x89PNG real object bytes"; + const oid = "5a8f16132efe3eb67a8dea335571beac2745147010dabcedde78dbe708e6bccd"; + const pointer = `version https://git-lfs.github.com/spec/v1\noid sha256:${oid}\nsize ${object.length}\n`; + return Effect.gen(function* () { + const fetchMedia = yield* GitHubMediaFetch.make; + const response = yield* fetchMedia({ + url: "https://raw.githubusercontent.com/owner/repo/HEAD/art/background.png", + headers: {}, + }); + expect(response?.status).toBe(200); + expect(yield* response!.text).toBe(object); + }).pipe( + Effect.provide( + Layer.merge( + Layer.mock(GitHubRest.GitHubRest)({}), + Layer.mock(GitHubCredentials.GitHubCredentials)({ + get: (host) => + Effect.succeed({ + host, + token: Redacted.make("signed-in"), + source: "gh" as const, + fingerprint: "fingerprint", + }), + }), + ), + ), + // GitHub's two routes to the object: the LFS media host and the Git LFS batch API. + Effect.provideService( + HttpClient.HttpClient, + HttpClient.make((request) => { + const url = new URL(request.url); + const respond = (body: string | null, init: ResponseInit) => + Effect.succeed(HttpClientResponse.fromWeb(request, new Response(body, init))); + if (url.hostname === "raw.githubusercontent.com") { + return respond(pointer, { headers: { "content-type": "text/plain; charset=utf-8" } }); + } + if ( + url.hostname === "media.githubusercontent.com" || + url.hostname === "lfs.example.com" + ) { + return respond(object, { headers: { "content-type": "image/png" } }); + } + if (url.pathname.endsWith(".git/info/lfs/objects/batch")) { + return respond( + JSON.stringify({ + objects: [ + { + oid, + size: object.length, + actions: { download: { href: `https://lfs.example.com/${oid}` } }, + }, + ], + }), + { headers: { "content-type": "application/vnd.git-lfs+json" } }, + ); + } + return respond(null, { status: 404 }); + }), + ), + Effect.scoped, + ); + }); + it.effect("keeps the credential off the object store a redirect hands the media to", () => { const authorizations: Array<[string, string | undefined]> = []; return Effect.gen(function* () { diff --git a/packages/source-control-github/src/server/gitHubMediaFetch.ts b/packages/source-control-github/src/server/gitHubMediaFetch.ts index b03c0d327a6ce..f64aec28b7f0c 100644 --- a/packages/source-control-github/src/server/gitHubMediaFetch.ts +++ b/packages/source-control-github/src/server/gitHubMediaFetch.ts @@ -9,7 +9,7 @@ import { type HttpClientResponse, } from "effect/http"; -import { GITHUB_CREDENTIALED_MEDIA_HOSTS } from "../shared/gitHubMedia.ts"; +import { GITHUB_CREDENTIALED_MEDIA_HOSTS, gitHubLfsMediaUrl } from "../shared/gitHubMedia.ts"; import * as GitHubCredentials from "./GitHubCredentials.ts"; import * as GitHubRest from "./GitHubRest.ts"; @@ -164,6 +164,20 @@ export const make = Effect.gen(function* () { request.headers, signedIn?.token ?? null, ); + const lfsUrl = gitHubLfsMediaUrl(request.url); + if (lfsUrl !== null && response !== null && contentTypeOf(response) === "text/plain") { + const lfs = yield* fetchFollowingRedirects( + lfsUrl, + request.headers, + signedIn?.token ?? null, + ); + if ( + (lfs?.status === 200 || lfs?.status === 206) && + MEDIA_CONTENT_TYPE_PATTERN.test(contentTypeOf(lfs)) + ) { + return lfs; + } + } if (response === null || contentTypeOf(response) !== "text/html") return response; } if (cacheKey === null || repository === undefined || signedIn === null) return response; diff --git a/packages/source-control-github/src/shared/gitHubMedia.ts b/packages/source-control-github/src/shared/gitHubMedia.ts index 466f96c5a1c2c..6acdb17ce1e90 100644 --- a/packages/source-control-github/src/shared/gitHubMedia.ts +++ b/packages/source-control-github/src/shared/gitHubMedia.ts @@ -46,6 +46,14 @@ function rawFile(fetchUrl: string): SourceControlMediaUrl { return media(fetchUrl, COMMIT_SHA_PATTERN.test(ref) ? { immutable: true } : {}); } +/** Where GitHub serves a Git LFS object; a raw read of an LFS-tracked file returns its pointer. */ +export function gitHubLfsMediaUrl(rawUrl: string): string | null { + const url = URL.parse(rawUrl); + return url?.protocol === "https:" && url.hostname.toLowerCase() === RAW_HOST + ? `https://${LFS_HOST}/media${url.pathname}${url.search}` + : null; +} + export function gitHubMediaUrl(url: URL): SourceControlMediaUrl | null { if (url.protocol !== "https:") return null; const host = url.hostname.toLowerCase(); From 98f885ac1aa0536786ae221a108fb11f9eab3c44 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:45:14 -0800 Subject: [PATCH 882/922] fix(server): desktop preview uploads accept files over 50 MB (#30299) Co-authored-by: Claude Opus 5.5 --- .../src/preview/ServerBrowserContexts.test.ts | 46 +++++++++++++++++++ .../src/preview/ServerBrowserContexts.ts | 3 +- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/apps/server/src/preview/ServerBrowserContexts.test.ts b/apps/server/src/preview/ServerBrowserContexts.test.ts index 8a5a280d1f1b8..413b41eb08b4b 100644 --- a/apps/server/src/preview/ServerBrowserContexts.test.ts +++ b/apps/server/src/preview/ServerBrowserContexts.test.ts @@ -1,4 +1,8 @@ +// @effect-diagnostics nodeBuiltinImport:off - Hands a real file on disk to a real desktop browser. import * as NodeEvents from "node:events"; +import * as NodeFS from "node:fs"; +import * as NodeOS from "node:os"; +import * as NodePath from "node:path"; import { INCOGNITO_BROWSER_PROFILE_ID } from "@t3tools/contracts"; import { chromium, type Browser, type BrowserContext, type BrowserType } from "playwright-core"; @@ -12,6 +16,7 @@ const launches = vi.hoisted(() => ({ mkdir: vi.fn().mockResolvedValue(undefined), rm: vi.fn().mockResolvedValue(undefined), })); +const launchPersistentChromium = chromium.launchPersistentContext.bind(chromium); vi.spyOn(chromium, "launch").mockImplementation(launches.launch); vi.spyOn(chromium, "launchPersistentContext").mockImplementation(launches.persistent); vi.mock("node:fs/promises", () => ({ mkdir: launches.mkdir, rm: launches.rm })); @@ -347,4 +352,45 @@ describe("ServerBrowserContexts", () => { expect(browser.close).toHaveBeenCalledTimes(1); expect(browser.created[0]?.close).toHaveBeenCalled(); }); + + it("uploads a file over 50 MB to a desktop tab, which shares the server's filesystem", async () => { + const directory = NodeFS.mkdtempSync(NodePath.join(NodeOS.tmpdir(), "t3-desktop-upload-")); + const userDataDir = NodePath.join(directory, "profile"); + const pool = new ServerBrowserContexts(options()); + try { + const desktop = await launchPersistentChromium(userDataDir, { + headless: true, + args: ["--remote-debugging-port=0"], + }); + try { + const [port] = NodeFS.readFileSync( + NodePath.join(userDataDir, "DevToolsActivePort"), + "utf8", + ).split("\n"); + const { browser, page } = await pool.connectDesktopPage(`http://127.0.0.1:${port}`); + try { + const file = NodePath.join(directory, "large.bin"); + NodeFS.writeFileSync(file, ""); + NodeFS.truncateSync(file, 51 * 1024 * 1024); + await page.setContent(``); + await page.locator("input").setInputFiles(file); + expect( + await page.$eval("input", (input) => + Array.from( + (input as unknown as { files: ArrayLike<{ name: string; size: number }> }).files, + ({ name, size }) => ({ name, size }), + ), + ), + ).toEqual([{ name: "large.bin", size: 51 * 1024 * 1024 }]); + } finally { + await browser.close(); + } + } finally { + await pool.close(); + await desktop.close(); + } + } finally { + NodeFS.rmSync(directory, { recursive: true, force: true }); + } + }); }); diff --git a/apps/server/src/preview/ServerBrowserContexts.ts b/apps/server/src/preview/ServerBrowserContexts.ts index 03088a173a815..ec7fc926cad46 100644 --- a/apps/server/src/preview/ServerBrowserContexts.ts +++ b/apps/server/src/preview/ServerBrowserContexts.ts @@ -279,7 +279,8 @@ export class ServerBrowserContexts { async connectDesktopPage(endpoint: string) { const { chromium } = loadPlaywright(); - const browser = await chromium.connectOverCDP(endpoint, { timeout: 15_000 }); + // Only a same-machine desktop backend gets the browser channel, so uploads can pass file paths. + const browser = await chromium.connectOverCDP(endpoint, { isLocal: true, timeout: 15_000 }); const page = browser.contexts().flatMap((context) => context.pages())[0]; if (!page) { await browser.close().catch(constVoid); From d430dff14f57da1619e39574104a3adeaf2f6d7d Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:45:30 -0800 Subject: [PATCH 883/922] fix(usage): keep default-home history after the default account moves (#36727) Co-authored-by: Claude Opus 5.5 --- apps/server/src/usage/UsageService.test.ts | 29 ++++++++++++++++++++++ apps/server/src/usage/UsageService.ts | 5 ++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/apps/server/src/usage/UsageService.test.ts b/apps/server/src/usage/UsageService.test.ts index d40beb989ec21..101fafc5bde8d 100644 --- a/apps/server/src/usage/UsageService.test.ts +++ b/apps/server/src/usage/UsageService.test.ts @@ -214,6 +214,7 @@ const layerService = (input: { Layer.provideMerge(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer)), Layer.provideMerge(Layer.succeed(HostProcess.Platform, input.platform ?? "linux")), Layer.provideMerge(Layer.succeed(HostProcess.Hostname, input.hostname ?? "usage-test-host")), + Layer.provideMerge(Layer.succeed(HostProcess.HomeDirectory, input.home)), Layer.provideMerge(ServerSettings.layerTest(input.settings)), Layer.provideMerge( Layer.succeed( @@ -2493,6 +2494,34 @@ describe("UsageService", () => { }), ); + it.effect("keeps default-home history after the default account moves to a custom home", () => + Effect.gen(function* () { + const { transcript, settings, home } = yield* setup; + const defaultHome = NodePath.join(home, "default-claude"); + const defaultProjects = NodePath.join(defaultHome, "projects", "proj"); + yield* Effect.promise(async () => { + await NodeFSP.writeFile(transcript, claudeLine(1, 5)); + await NodeFSP.mkdir(defaultProjects, { recursive: true }); + await NodeFSP.writeFile( + NodePath.join(defaultProjects, "earlier.jsonl"), + claudeLine(2, 7, "claude-fable-5", "earlier-session"), + ); + }); + const summary = yield* UsageService.make.pipe( + Effect.flatMap((service) => service.readSummary(WINDOW)), + Effect.provide( + layerService({ + prefix: "usage-service-default-home-test", + home, + environment: { CLAUDE_CONFIG_DIR: defaultHome }, + settings, + }), + ), + ); + assert.strictEqual(totalOutputTokens(summary), 12); + }), + ); + it.effect( "uses explicit account settings before environment and default homes, then refreshes them", () => diff --git a/apps/server/src/usage/UsageService.ts b/apps/server/src/usage/UsageService.ts index d84de15a59ed9..1a3ec8ced8350 100644 --- a/apps/server/src/usage/UsageService.ts +++ b/apps/server/src/usage/UsageService.ts @@ -360,9 +360,8 @@ export const make = Effect.gen(function* () { > = Object.entries(settings.providerInstances) .filter(([, instance]) => instance.driver === driver.driverKind) .map(([id, instance]) => [ProviderInstanceId.make(id), instance, true] as const); - if (!Object.hasOwn(settings.providerInstances, driver.driverKind)) { - entries.push([ProviderInstanceId.make(driver.driverKind), {}, false]); - } + // History in the driver's default home stays counted after every instance moves elsewhere; readers dedupe shared directories. + entries.push([ProviderInstanceId.make(driver.driverKind), {}, false]); const decodeConfig = Schema.decodeUnknownOption(driver.configSchema); return yield* Effect.forEach( entries, From 1dfc746c8f4b22814b16da35cb54900233bfdb27 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 14 Nov 2026 20:45:46 -0800 Subject: [PATCH 884/922] fix(provider-acp): approving a Devin plan never picks its bypass-permissions option (#34474) --- .../Adapters/AcpRegistryAdapterV2.test.ts | 111 +++++++++++++++++- .../src/server/adapter.ts | 2 + .../src/server/devinAcp.ts | 7 ++ packages/provider-acp/src/server/adapter.ts | 14 ++- 4 files changed, 130 insertions(+), 4 deletions(-) diff --git a/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts index fd009041fd93f..97fb6e636054f 100644 --- a/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/AcpRegistryAdapterV2.test.ts @@ -234,6 +234,7 @@ const openClaudeReplaySession = Effect.fn("openClaudeReplaySession")(function* ( }).pipe(Effect.andThen(Queue.offer(offered, undefined)), Effect.asVoid), }; const instanceId = ProviderInstanceId.make("claude-lifecycle"); + const outgoing = yield* Queue.unbounded(); let onTermination: NonNullable< AcpSessionRuntime.AcpSessionRuntimeOptions["onTermination"] > = () => Effect.die("Runtime has not started"); @@ -255,7 +256,17 @@ const openClaudeReplaySession = Effect.fn("openClaudeReplaySession")(function* ( ...(continuationEnabled ? { continuationRequests } : {}), makeRuntime: (runtimeInput: Parameters[0]) => { onTermination = runtimeInput.onTermination; - return replayRuntime(runtimeInput); + return replayRuntime({ + ...runtimeInput, + protocolLogging: { + logIncoming: false, + logOutgoing: true, + logger: (event) => + event.stage === "raw" && typeof event.payload === "string" + ? Queue.offer(outgoing, JSON.parse(event.payload)).pipe(Effect.asVoid) + : Effect.void, + }, + }); }, }; const adapter = yield* makeAcpRegistryAdapterV2(adapterOptions).pipe( @@ -365,6 +376,7 @@ const openClaudeReplaySession = Effect.fn("openClaudeReplaySession")(function* ( terminal, offers, offered, + outgoing, terminate: () => onTermination( new EffectAcpErrors.AcpTransportError({ @@ -2274,6 +2286,103 @@ describe("AcpRegistryAdapterV2", () => { }).pipe(Effect.provide(layerTest)), ); + it.effect("approves Devin's plan without choosing a bypass option it lists first", () => + Effect.gen(function* () { + const session = yield* openClaudeReplaySession( + [ + ...claudeFrames.open.map((entry) => + entry.frame.method === "initialize" && entry.type === "emit_inbound" + ? { + ...entry, + frame: { + ...entry.frame, + result: { protocolVersion: 1, agentCapabilities: {}, authMethods: [] }, + }, + } + : entry, + ), + { + type: "expect_outbound", + frame: { kind: "request", method: "session/prompt", params: "" }, + }, + claudeFrames.update(CLAUDE_ROOT_SESSION, { + sessionUpdate: "tool_call", + toolCallId: "exit-plan", + title: "Exit plan mode", + kind: "switch_mode", + status: "pending", + }), + { + type: "emit_inbound", + frame: { + kind: "request", + method: "session/request_permission", + params: { + sessionId: CLAUDE_ROOT_SESSION, + toolCall: { toolCallId: "exit-plan" }, + // Devin gives both plan approvals allow_once and does not promise their order. + options: [ + { + optionId: "plan_bypass", + name: "Yes, implement plan and bypass permissions", + kind: "allow_once", + }, + { + optionId: "plan_accept_edits", + name: "Yes, implement plan and accept edits", + kind: "allow_once", + }, + { optionId: "reject_once", name: "No, plan needs changes", kind: "reject_once" }, + ], + }, + }, + }, + { + type: "expect_outbound", + frame: { + kind: "response", + method: "session/request_permission", + result: { outcome: { outcome: "selected", optionId: "" } }, + }, + }, + { + type: "emit_inbound", + frame: { + kind: "response", + method: "session/prompt", + result: { stopReason: "end_turn" }, + }, + }, + claudeFrames.closeRequest, + claudeFrames.closed, + ], + undefined, + false, + "devin", + ); + yield* session.runtime.startTurn(session.turnInput(1)).pipe(Effect.forkScoped); + const seen = yield* session.until( + (event) => + event.type === "runtime_request.updated" && event.runtimeRequest.status === "pending", + ); + const request = seen.at(-1)!; + if (request.type !== "runtime_request.updated") throw new Error("Missing request"); + yield* session.runtime.respondToRuntimeRequest({ + requestId: request.runtimeRequest.id, + decision: "accept", + }); + let answer: unknown; + while (answer === undefined) { + const frame = (yield* Queue.take(session.outgoing)) as { + readonly result?: { readonly outcome?: { readonly optionId?: string } }; + }; + answer = frame.result?.outcome; + } + assert.deepEqual(answer, { outcome: "selected", optionId: "plan_accept_edits" }); + assert.equal((yield* session.terminal).status, "completed"); + }).pipe(Effect.provide(layerTest), Effect.scoped), + ); + it.effect("keeps stopped child tools interrupted when a late output chunk arrives", () => Effect.gen(function* () { const { update } = claudeFrames; diff --git a/packages/provider-acp-registry/src/server/adapter.ts b/packages/provider-acp-registry/src/server/adapter.ts index 31ef391d19c34..360ba35e8cc5c 100644 --- a/packages/provider-acp-registry/src/server/adapter.ts +++ b/packages/provider-acp-registry/src/server/adapter.ts @@ -7,6 +7,7 @@ import { normalizeDevinSessionUpdate, normalizeDevinToolCall, extractDevinSubagentUpdate, + devinAnswerablePermissionOptions, } from "./devinAcp.ts"; import { extractDroidElicitationForm } from "./droidAcp.ts"; import { extractOmpElicitationForm } from "./ompAcp.ts"; @@ -268,6 +269,7 @@ export const makeAcpRegistryAdapterV2 = Effect.fn("makeAcpRegistryAdapterV2")(fu normalizeSessionUpdate: normalizeDevinSessionUpdate, normalizeToolCall: normalizeDevinToolCall, extractSubagentUpdate: extractDevinSubagentUpdate, + answerablePermissionOptions: devinAnswerablePermissionOptions, } : {}), ...(copilotRouting === undefined diff --git a/packages/provider-acp-registry/src/server/devinAcp.ts b/packages/provider-acp-registry/src/server/devinAcp.ts index 4368a4cfaf437..bc148eaa3969b 100644 --- a/packages/provider-acp-registry/src/server/devinAcp.ts +++ b/packages/provider-acp-registry/src/server/devinAcp.ts @@ -54,3 +54,10 @@ export function extractDevinSubagentUpdate( result: typeof completed?.summary === "string" ? completed.summary : null, }; } + +// Devin's plan exit offers several allow_once options in no promised order; T3 never answers with bypass. +export function devinAnswerablePermissionOptions( + request: AcpSchema.RequestPermissionRequest, +): ReadonlyArray { + return request.options.filter((option) => option.optionId.trim() !== "plan_bypass"); +} diff --git a/packages/provider-acp/src/server/adapter.ts b/packages/provider-acp/src/server/adapter.ts index e0fb9d0f61ae2..896b2def4aeee 100644 --- a/packages/provider-acp/src/server/adapter.ts +++ b/packages/provider-acp/src/server/adapter.ts @@ -486,6 +486,10 @@ export interface AcpAdapterV2Flavor { readonly approvalOptions?: ( request: EffectAcpSchema.RequestPermissionRequest, ) => ReadonlyArray; + /** Options T3 may answer with; the rest (e.g. Devin's bypass-permissions plan exit) are never sent. */ + readonly answerablePermissionOptions?: ( + request: EffectAcpSchema.RequestPermissionRequest, + ) => ReadonlyArray; readonly onSessionEvent?: ( event: AcpSessionRuntime.AcpSessionRuntimeEvent, ) => Effect.Effect; @@ -6861,6 +6865,10 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( yield* userInput.acknowledgeNativeResponse; return response ?? ({ outcome: { outcome: "cancelled" } } as const); } + const answerableParams = + flavor.answerablePermissionOptions === undefined + ? params + : { ...params, options: flavor.answerablePermissionOptions(params) }; const dispositionFor = ( policy: ProviderAdapter.ProviderAdapterV2RuntimePolicy, request: EffectAcpSchema.RequestPermissionRequest = params, @@ -6887,7 +6895,7 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( : params, ); if (disposition === "allow") { - const optionId = selectAutoApprovedPermissionOption(params); + const optionId = selectAutoApprovedPermissionOption(answerableParams); return { _tag: "Immediate" as const, response: @@ -6897,7 +6905,7 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( }; } if (disposition === "deny") { - const optionId = selectPermissionOptionId(params, "decline"); + const optionId = selectPermissionOptionId(answerableParams, "decline"); return { _tag: "Immediate" as const, response: @@ -6979,7 +6987,7 @@ export const makeAcpAdapterV2 = Effect.fn("makeAcpAdapterV2")(function* ( if (decision === "cancel") { return { outcome: { outcome: "cancelled" } } as const; } - const optionId = selectPermissionOptionId(params, decision); + const optionId = selectPermissionOptionId(answerableParams, decision); return optionId === undefined ? ({ outcome: { outcome: "cancelled" } } as const) : ({ outcome: { outcome: "selected", optionId } } as const); From 1b9121ba59bb57af21e94de61e6c9eaef84163dc Mon Sep 17 00:00:00 2001 From: Alex Southwell Date: Sun, 15 Nov 2026 15:46:02 +1100 Subject: [PATCH 885/922] fix(server): guests of a forked thread can expand the commands it inherited (#29764) Co-authored-by: Claude Opus 5.5 Co-authored-by: Julius Marminge --- .../src/guest/GuestShareService.test.ts | 79 +++++++++++++++++++ apps/server/src/guest/GuestShareService.ts | 23 ++++-- 2 files changed, 95 insertions(+), 7 deletions(-) diff --git a/apps/server/src/guest/GuestShareService.test.ts b/apps/server/src/guest/GuestShareService.test.ts index 5a873eeb23952..b377cd1ce00b0 100644 --- a/apps/server/src/guest/GuestShareService.test.ts +++ b/apps/server/src/guest/GuestShareService.test.ts @@ -37,6 +37,7 @@ import { resolveAttachmentPathById, sweepStalePendingAttachments, } from "../attachmentStore.ts"; +import { resolveAttachmentRelativePath } from "../attachmentPaths.ts"; import * as ServerSecretStore from "../auth/ServerSecretStore.ts"; import { CloudManagedEndpointRuntime } from "../cloud/ManagedEndpointRuntime.ts"; import * as ServerConfig from "../config.ts"; @@ -449,6 +450,10 @@ const writeItem = ( | Pick< Extract, "type" | "status" | "fileName" | "diffStr" | "oldStr" | "newStr" + > + | Pick< + Extract, + "type" | "status" | "toolName" | "input" | "output" >, ) => Effect.gen(function* () { @@ -539,6 +544,80 @@ it.effect("gives the guest a command's detail and output, but no file diffs", () }).pipe(Effect.provide(layerTest)), ); +it.effect("gives a fork's guest the commands the fork shows from its source thread", () => + Effect.gen(function* () { + const { orchestrator, guestShares } = yield* shareThread; + const command = yield* writeItem("item:command", { + type: "command_execution", + status: "completed", + input: "ls /work/src", + output: "/work/src/auth.ts\n", + }); + const { attachmentsDir } = yield* ServerConfig.ServerConfig; + const page = createAttachmentId(threadId, "html")!; + yield* (yield* FileSystem.FileSystem).writeFileString( + resolveAttachmentRelativePath({ attachmentsDir, relativePath: `${page}.html` })!, + "

wdia5%)1s%+r}>w6z=8YYz@eXfVvO=P%a?dG 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