diff --git a/packages/ai/test/anthropic-alignment.test.ts b/packages/ai/test/anthropic-alignment.test.ts index 329f760cf..0d4ace1e0 100644 --- a/packages/ai/test/anthropic-alignment.test.ts +++ b/packages/ai/test/anthropic-alignment.test.ts @@ -400,7 +400,7 @@ describe("Anthropic request fingerprint alignment", () => { expect(Array.isArray(tlsOptions?.ca)).toBe(true); const caValues = (tlsOptions?.ca ?? []) as string[]; expect(caValues.length).toBeGreaterThanOrEqual(tls.rootCertificates.length + 1); - expect(caValues.slice(0, tls.rootCertificates.length)).toEqual(tls.rootCertificates); + expect(caValues.slice(0, tls.rootCertificates.length)).toEqual([...tls.rootCertificates]); expect(caValues.at(-1)).toContain("BEGIN CERTIFICATE"); expect(tlsOptions?.cert).toContain("BEGIN CERTIFICATE"); expect(tlsOptions?.key).toContain("BEGIN PRIVATE KEY"); diff --git a/packages/coding-agent/src/modes/components/status-line.ts b/packages/coding-agent/src/modes/components/status-line.ts index 06e43a5fb..7b843d997 100644 --- a/packages/coding-agent/src/modes/components/status-line.ts +++ b/packages/coding-agent/src/modes/components/status-line.ts @@ -254,7 +254,7 @@ export class StatusLineComponent implements Component { const currentContext = branch ? createPrCacheContext(branch, this.#cachedBranchRepoId ?? null) : null; if (canReuseCachedPr(this.#cachedPr, this.#cachedPrContext, currentContext)) { - return this.#cachedPr; + return this.#cachedPr ?? null; } if (this.#cachedPr !== undefined) { diff --git a/packages/coding-agent/src/modes/controllers/extension-ui-controller.ts b/packages/coding-agent/src/modes/controllers/extension-ui-controller.ts index 1bca1a791..6fcb50126 100644 --- a/packages/coding-agent/src/modes/controllers/extension-ui-controller.ts +++ b/packages/coding-agent/src/modes/controllers/extension-ui-controller.ts @@ -19,18 +19,7 @@ import type { InteractiveModeContext } from "../../modes/types"; import { setTerminalTitle } from "../../utils/title-generator"; export class ExtensionUiController { - #hookSelectorOverlay: OverlayHandle | undefined; - #hookInputOverlay: OverlayHandle | undefined; #extensionTerminalInputUnsubscribers = new Set<() => void>(); - - readonly #dialogOverlayOptions = { - anchor: "bottom-center", - width: "80%", - minWidth: 40, - maxHeight: "70%", - margin: 1, - } as const; - constructor(private ctx: InteractiveModeContext) {} /** @@ -575,8 +564,6 @@ export class ExtensionUiController { dialogOptions?.signal?.removeEventListener("abort", onAbort); resolve(value); }; - this.#hookSelectorOverlay?.hide(); - this.#hookSelectorOverlay = undefined; const maxVisible = Math.max(4, Math.min(15, this.ctx.ui.terminal.rows - 12)); this.ctx.hookSelector = new HookSelectorComponent( title, @@ -597,7 +584,10 @@ export class ExtensionUiController { maxVisible, }, ); - this.#hookSelectorOverlay = this.ctx.ui.showOverlay(this.ctx.hookSelector, this.#dialogOverlayOptions); + this.ctx.editorContainer.clear(); + this.ctx.editorContainer.addChild(this.ctx.hookSelector); + this.ctx.ui.setFocus(this.ctx.hookSelector); + this.ctx.ui.requestRender(); if (dialogOptions?.signal) { if (dialogOptions.signal.aborted) { onAbort(); @@ -612,8 +602,8 @@ export class ExtensionUiController { */ hideHookSelector(): void { this.ctx.hookSelector?.dispose(); - this.#hookSelectorOverlay?.hide(); - this.#hookSelectorOverlay = undefined; + this.ctx.editorContainer.clear(); + this.ctx.editorContainer.addChild(this.ctx.editor); this.ctx.hookSelector = undefined; this.ctx.ui.setFocus(this.ctx.editor); this.ctx.ui.requestRender(); @@ -650,8 +640,6 @@ export class ExtensionUiController { dialogOptions?.signal?.removeEventListener("abort", onAbort); resolve(value); }; - this.#hookInputOverlay?.hide(); - this.#hookInputOverlay = undefined; this.ctx.hookInput = new HookInputComponent( title, placeholder, @@ -664,7 +652,10 @@ export class ExtensionUiController { finish(undefined); }, ); - this.#hookInputOverlay = this.ctx.ui.showOverlay(this.ctx.hookInput, this.#dialogOverlayOptions); + this.ctx.editorContainer.clear(); + this.ctx.editorContainer.addChild(this.ctx.hookInput); + this.ctx.ui.setFocus(this.ctx.hookInput); + this.ctx.ui.requestRender(); if (dialogOptions?.signal) { if (dialogOptions.signal.aborted) { onAbort(); @@ -680,8 +671,8 @@ export class ExtensionUiController { */ hideHookInput(): void { this.ctx.hookInput?.dispose(); - this.#hookInputOverlay?.hide(); - this.#hookInputOverlay = undefined; + this.ctx.editorContainer.clear(); + this.ctx.editorContainer.addChild(this.ctx.editor); this.ctx.hookInput = undefined; this.ctx.ui.setFocus(this.ctx.editor); this.ctx.ui.requestRender();