From 0a640706adcf15968ebc5436e83c6a9c5b8cc4ad Mon Sep 17 00:00:00 2001 From: Josh Lambert Date: Thu, 9 Jul 2026 17:15:19 -0400 Subject: [PATCH 1/2] fix(cli): resolve Bedrock SSO credentials --- .changeset/fix-bedrock-sso.md | 5 +++ bun.lock | 3 -- packages/opencode/package.json | 1 - packages/opencode/script/build.ts | 2 +- .../feature-plugins/session/preview-pane.tsx | 24 +++++++++-- .../opencode/src/cli/cmd/tui/util/signal.ts | 18 +++++++-- .../opencode/test/kilocode/tui/signal.test.ts | 40 +++++++++++++++++++ 7 files changed, 82 insertions(+), 11 deletions(-) create mode 100644 .changeset/fix-bedrock-sso.md create mode 100644 packages/opencode/test/kilocode/tui/signal.test.ts diff --git a/.changeset/fix-bedrock-sso.md b/.changeset/fix-bedrock-sso.md new file mode 100644 index 00000000000..b3da606f8ce --- /dev/null +++ b/.changeset/fix-bedrock-sso.md @@ -0,0 +1,5 @@ +--- +"@kilocode/cli": patch +--- + +Resolve AWS Bedrock credentials from SSO profiles in packaged CLI builds. diff --git a/bun.lock b/bun.lock index 9eb6a34760c..37d004f63bb 100644 --- a/bun.lock +++ b/bun.lock @@ -500,7 +500,6 @@ "@secretlint/secretlint-rule-preset-recommend": "10.2.2", "@silvia-odwyer/photon-node": "0.3.4", "@solid-primitives/event-bus": "1.1.2", - "@solid-primitives/scheduled": "1.5.2", "@types/ws": "8.18.1", "@zip.js/zip.js": "2.7.62", "ai": "catalog:", @@ -1975,8 +1974,6 @@ "@solid-primitives/rootless": ["@solid-primitives/rootless@1.5.2", "", { "dependencies": { "@solid-primitives/utils": "^6.3.2" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-9HULb0QAzL2r47CCad0M+NKFtQ+LrGGNHZfteX/ThdGvKIg2o2GYhBooZubTCd/RTu2l2+Nw4s+dEfiDGvdrrQ=="], - "@solid-primitives/scheduled": ["@solid-primitives/scheduled@1.5.2", "", { "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-/j2igE0xyNaHhj6kMfcUQn5rAVSTLbAX+CDEBm25hSNBmNiHLu2lM7Usj2kJJ5j36D67bE8wR1hBNA8hjtvsQA=="], - "@solid-primitives/static-store": ["@solid-primitives/static-store@0.1.3", "", { "dependencies": { "@solid-primitives/utils": "^6.4.0" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-uxez7SXnr5GiRnzqO2IEDjOJRIXaG+0LZLBizmUA1FwSi+hrpuMzVBwyk70m4prcl8X6FDDXUl9O8hSq8wHbBQ=="], "@solid-primitives/trigger": ["@solid-primitives/trigger@1.2.3", "", { "dependencies": { "@solid-primitives/utils": "^6.4.0" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-Za2JebEiDyfamjmDwRaESYqBBYOlgYGzB8kHYH0QrkXyLf2qNADlKdGN+z3vWSLCTDcKxChS43Kssjuc0OZhng=="], diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 044b0a0c5e0..2d2572bbdd6 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -129,7 +129,6 @@ "@secretlint/secretlint-rule-preset-recommend": "10.2.2", "@silvia-odwyer/photon-node": "0.3.4", "@solid-primitives/event-bus": "1.1.2", - "@solid-primitives/scheduled": "1.5.2", "@types/ws": "8.18.1", "@zip.js/zip.js": "2.7.62", "ai": "catalog:", diff --git a/packages/opencode/script/build.ts b/packages/opencode/script/build.ts index c6171f9d3b3..afa5b54859b 100755 --- a/packages/opencode/script/build.ts +++ b/packages/opencode/script/build.ts @@ -292,7 +292,7 @@ for (const item of targets) { const workerRelativePath = path.relative(dir, parserWorker).replaceAll("\\", "/") await Bun.build({ - conditions: ["browser"], + conditions: ["bun", "node"], // kilocode_change - load Node credential providers in packaged builds tsconfig: "./tsconfig.json", plugins: [plugin], // kilocode_change start - skip sourcemaps for release builds (each .js.map adds ~50 MB per target → ~600 MB total) diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/session/preview-pane.tsx b/packages/opencode/src/cli/cmd/tui/feature-plugins/session/preview-pane.tsx index 34244622b3a..45776d14b9b 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/session/preview-pane.tsx +++ b/packages/opencode/src/cli/cmd/tui/feature-plugins/session/preview-pane.tsx @@ -1,7 +1,6 @@ -import { createResource, Show, createMemo, createSignal, onMount, type Accessor, type JSX } from "solid-js" +import { createResource, Show, createMemo, createSignal, onCleanup, onMount, type Accessor, type JSX } from "solid-js" // kilocode_change import { TextAttributes, type RGBA } from "@opentui/core" import { useTerminalDimensions } from "@opentui/solid" -import { debounce, leadingAndTrailing } from "@solid-primitives/scheduled" import type { Message, Part, Session as SdkSession, SnapshotFileDiff } from "@kilocode/sdk/v2" import { useTheme } from "@tui/context/theme" import { useSDK } from "@tui/context/sdk" @@ -77,7 +76,26 @@ export function prefetchPreviews(sdk: Sdk, sync: Sync, sessionIDs: readonly stri export function createLeadingTrailingSignal(initial: T, ms: number): [Accessor, (v: T) => void, (v: T) => void] { const [get, set] = createSignal(initial) const setNow = (v: T) => set(() => v) - const schedule = leadingAndTrailing(debounce, setNow, ms) + // kilocode_change start - preserve scheduling when Solid resolves its Node export + let timer: ReturnType | undefined + let queued = false + let value = initial + const schedule = (next: T) => { + value = next + if (!timer) setNow(next) + else queued = true + if (timer) clearTimeout(timer) + timer = setTimeout(() => { + timer = undefined + if (!queued) return + queued = false + setNow(value) + }, ms) + } + onCleanup(() => { + if (timer) clearTimeout(timer) + }) + // kilocode_change end return [get, setNow, schedule] } diff --git a/packages/opencode/src/cli/cmd/tui/util/signal.ts b/packages/opencode/src/cli/cmd/tui/util/signal.ts index 7d20ae04ba3..d903914a5a5 100644 --- a/packages/opencode/src/cli/cmd/tui/util/signal.ts +++ b/packages/opencode/src/cli/cmd/tui/util/signal.ts @@ -1,10 +1,22 @@ import { createEffect, createSignal, on, onCleanup, type Accessor } from "solid-js" -import { debounce, type Scheduled } from "@solid-primitives/scheduled" -export function createDebouncedSignal(value: T, ms: number): [Accessor, Scheduled<[value: T]>] { +// kilocode_change start - Solid's Node export disables browser-only scheduling primitives +export function createDebouncedSignal(value: T, ms: number): [Accessor, (value: T) => void] { const [get, set] = createSignal(value) - return [get, debounce((v: T) => set(() => v), ms)] + let timer: ReturnType | undefined + const debounced = (next: T) => { + if (timer) clearTimeout(timer) + timer = setTimeout(() => { + timer = undefined + set(() => next) + }, ms) + } + onCleanup(() => { + if (timer) clearTimeout(timer) + }) + return [get, debounced] } +// kilocode_change end export function createFadeIn(show: Accessor, enabled: Accessor) { const [alpha, setAlpha] = createSignal(show() ? 1 : 0) diff --git a/packages/opencode/test/kilocode/tui/signal.test.ts b/packages/opencode/test/kilocode/tui/signal.test.ts new file mode 100644 index 00000000000..d9349730d13 --- /dev/null +++ b/packages/opencode/test/kilocode/tui/signal.test.ts @@ -0,0 +1,40 @@ +import { describe, expect, test } from "bun:test" +import { createRoot } from "solid-js" +import { createLeadingTrailingSignal } from "@tui/feature-plugins/session/preview-pane" +import { createDebouncedSignal } from "@tui/util/signal" + +describe("TUI scheduling", () => { + test("debounces signal updates", async () => { + await createRoot(async (dispose) => { + const [value, schedule] = createDebouncedSignal("initial", 10) + + schedule("first") + schedule("last") + expect(value()).toBe("initial") + + await Bun.sleep(30) + expect(value()).toBe("last") + dispose() + }) + }) + + test("updates on the leading and trailing edges", async () => { + await createRoot(async (dispose) => { + const [value, , schedule] = createLeadingTrailingSignal("initial", 10) + + schedule("leading") + expect(value()).toBe("leading") + + schedule("middle") + schedule("trailing") + expect(value()).toBe("leading") + + await Bun.sleep(30) + expect(value()).toBe("trailing") + + schedule("next") + expect(value()).toBe("next") + dispose() + }) + }) +}) From 185adbff30d8e5bef963727e40107459916e66c0 Mon Sep 17 00:00:00 2001 From: Josh Lambert Date: Thu, 9 Jul 2026 17:41:42 -0400 Subject: [PATCH 2/2] docs(cli): reference upstream Bedrock fixes --- packages/opencode/script/build.ts | 2 +- .../src/cli/cmd/tui/feature-plugins/session/preview-pane.tsx | 2 +- packages/opencode/src/cli/cmd/tui/util/signal.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/opencode/script/build.ts b/packages/opencode/script/build.ts index afa5b54859b..796beac84d5 100755 --- a/packages/opencode/script/build.ts +++ b/packages/opencode/script/build.ts @@ -292,7 +292,7 @@ for (const item of targets) { const workerRelativePath = path.relative(dir, parserWorker).replaceAll("\\", "/") await Bun.build({ - conditions: ["bun", "node"], // kilocode_change - load Node credential providers in packaged builds + conditions: ["bun", "node"], // kilocode_change - port anomalyco/opencode#30873; current form from #31566 tsconfig: "./tsconfig.json", plugins: [plugin], // kilocode_change start - skip sourcemaps for release builds (each .js.map adds ~50 MB per target → ~600 MB total) diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/session/preview-pane.tsx b/packages/opencode/src/cli/cmd/tui/feature-plugins/session/preview-pane.tsx index 45776d14b9b..d19d726ce6d 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/session/preview-pane.tsx +++ b/packages/opencode/src/cli/cmd/tui/feature-plugins/session/preview-pane.tsx @@ -76,7 +76,7 @@ export function prefetchPreviews(sdk: Sdk, sync: Sync, sessionIDs: readonly stri export function createLeadingTrailingSignal(initial: T, ms: number): [Accessor, (v: T) => void, (v: T) => void] { const [get, set] = createSignal(initial) const setNow = (v: T) => set(() => v) - // kilocode_change start - preserve scheduling when Solid resolves its Node export + // kilocode_change start - Kilo preview equivalent of anomalyco/opencode#31748 let timer: ReturnType | undefined let queued = false let value = initial diff --git a/packages/opencode/src/cli/cmd/tui/util/signal.ts b/packages/opencode/src/cli/cmd/tui/util/signal.ts index d903914a5a5..e538a4d47da 100644 --- a/packages/opencode/src/cli/cmd/tui/util/signal.ts +++ b/packages/opencode/src/cli/cmd/tui/util/signal.ts @@ -1,6 +1,6 @@ import { createEffect, createSignal, on, onCleanup, type Accessor } from "solid-js" -// kilocode_change start - Solid's Node export disables browser-only scheduling primitives +// kilocode_change start - port anomalyco/opencode#31748 for Node build conditions export function createDebouncedSignal(value: T, ms: number): [Accessor, (value: T) => void] { const [get, set] = createSignal(value) let timer: ReturnType | undefined