summaryrefslogtreecommitdiffhomepage
path: root/packages/app
diff options
context:
space:
mode:
authorBrendan Allan <[email protected]>2026-03-23 19:48:34 +0800
committerGitHub <[email protected]>2026-03-23 11:48:34 +0000
commit36dfe1646b2bb4c329238f765c8100981014022b (patch)
tree09221eeb5579065ac62dff5676d6c943f0c8bf3c /packages/app
parent6926dc26d159080c506247ca414ec9a305f32c1b (diff)
downloadopencode-36dfe1646b2bb4c329238f765c8100981014022b.tar.gz
opencode-36dfe1646b2bb4c329238f765c8100981014022b.zip
fix(app): only navigate prompt history when input is empty (#18775)
Diffstat (limited to 'packages/app')
-rw-r--r--packages/app/e2e/prompt/prompt-history.spec.ts7
-rw-r--r--packages/app/src/components/prompt-input/history.test.ts7
-rw-r--r--packages/app/src/components/prompt-input/history.ts2
3 files changed, 11 insertions, 5 deletions
diff --git a/packages/app/e2e/prompt/prompt-history.spec.ts b/packages/app/e2e/prompt/prompt-history.spec.ts
index ec6899814..1c9c07955 100644
--- a/packages/app/e2e/prompt/prompt-history.spec.ts
+++ b/packages/app/e2e/prompt/prompt-history.spec.ts
@@ -108,7 +108,10 @@ test("prompt history restores unsent draft with arrow navigation", async ({ page
await page.keyboard.type(draft)
await wait(page, draft)
- await edge(page, "start")
+ // Clear the draft before navigating history (ArrowUp only works when prompt is empty)
+ await prompt.fill("")
+ await wait(page, "")
+
await page.keyboard.press("ArrowUp")
await wait(page, second)
@@ -119,7 +122,7 @@ test("prompt history restores unsent draft with arrow navigation", async ({ page
await wait(page, second)
await page.keyboard.press("ArrowDown")
- await wait(page, draft)
+ await wait(page, "")
})
})
diff --git a/packages/app/src/components/prompt-input/history.test.ts b/packages/app/src/components/prompt-input/history.test.ts
index 37b5ce196..5e9c2c66e 100644
--- a/packages/app/src/components/prompt-input/history.test.ts
+++ b/packages/app/src/components/prompt-input/history.test.ts
@@ -126,7 +126,7 @@ describe("prompt-input history", () => {
test("canNavigateHistoryAtCursor only allows prompt boundaries", () => {
const value = "a\nb\nc"
- expect(canNavigateHistoryAtCursor("up", value, 0)).toBe(true)
+ expect(canNavigateHistoryAtCursor("up", value, 0)).toBe(false)
expect(canNavigateHistoryAtCursor("down", value, 0)).toBe(false)
expect(canNavigateHistoryAtCursor("up", value, 2)).toBe(false)
@@ -135,11 +135,14 @@ describe("prompt-input history", () => {
expect(canNavigateHistoryAtCursor("up", value, 5)).toBe(false)
expect(canNavigateHistoryAtCursor("down", value, 5)).toBe(true)
- expect(canNavigateHistoryAtCursor("up", "abc", 0)).toBe(true)
+ expect(canNavigateHistoryAtCursor("up", "abc", 0)).toBe(false)
expect(canNavigateHistoryAtCursor("down", "abc", 3)).toBe(true)
expect(canNavigateHistoryAtCursor("up", "abc", 1)).toBe(false)
expect(canNavigateHistoryAtCursor("down", "abc", 1)).toBe(false)
+ expect(canNavigateHistoryAtCursor("up", "", 0)).toBe(true)
+ expect(canNavigateHistoryAtCursor("down", "", 0)).toBe(true)
+
expect(canNavigateHistoryAtCursor("up", "abc", 0, true)).toBe(true)
expect(canNavigateHistoryAtCursor("up", "abc", 3, true)).toBe(true)
expect(canNavigateHistoryAtCursor("down", "abc", 0, true)).toBe(true)
diff --git a/packages/app/src/components/prompt-input/history.ts b/packages/app/src/components/prompt-input/history.ts
index de6265321..79e8abc0d 100644
--- a/packages/app/src/components/prompt-input/history.ts
+++ b/packages/app/src/components/prompt-input/history.ts
@@ -27,7 +27,7 @@ export function canNavigateHistoryAtCursor(direction: "up" | "down", text: strin
const atStart = position === 0
const atEnd = position === text.length
if (inHistory) return atStart || atEnd
- if (direction === "up") return position === 0
+ if (direction === "up") return position === 0 && text.length === 0
return position === text.length
}