Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
f1a2107
wip(app): timeline changes
adamdotdevin Feb 11, 2026
efacb2d
wip(app): timeline changes
adamdotdevin Feb 11, 2026
0a1ee03
wip(app): timeline changes
adamdotdevin Feb 11, 2026
e34d609
wip(app): timeline changes
adamdotdevin Feb 11, 2026
f1930f5
tweak(ui): adjust user message bubble styling
iamdavidhill Feb 12, 2026
8855d59
tweak(ui): refine copy tooltip text and spacing
iamdavidhill Feb 12, 2026
3a3597c
tweak(ui): flatten tool and collapsible UI
iamdavidhill Feb 12, 2026
9321316
tweak(ui): style agent title and link
iamdavidhill Feb 12, 2026
cc3d2a9
tweak(ui): tighten chevron spacing
iamdavidhill Feb 12, 2026
9a3ddb7
fix(ui): allow explore agent output to fully expand
iamdavidhill Feb 12, 2026
0d914a6
tweak(ui): refine tool typography and truncation
iamdavidhill Feb 12, 2026
1e248d4
tweak(ui): strengthen user message text
iamdavidhill Feb 12, 2026
8ffce18
tweak(ui): tighten response copy tooltip gutter
iamdavidhill Feb 12, 2026
6b07c2b
tweak(ui): style edit/write tool content container
iamdavidhill Feb 12, 2026
34add5e
tweak(ui): unify tool header typography
iamdavidhill Feb 12, 2026
cdf2cdb
tweak(ui): remove context tool icons and add tool spacing
iamdavidhill Feb 12, 2026
e3b4e88
tweak(ui): adjust tool output spacing and title weight
iamdavidhill Feb 12, 2026
c52c368
tweak(ui): prevent copy button layout shift
iamdavidhill Feb 12, 2026
62afd70
tweak(ui): add markdown copy tooltip and restyle button
iamdavidhill Feb 12, 2026
2eb8b0c
tweak(ui): expand user message hover area
iamdavidhill Feb 12, 2026
7f8ee9d
refactor(ui): rework bash output container and copy
iamdavidhill Feb 12, 2026
fbf447c
tweak(ui): remove horizontal padding from todos and question answers
iamdavidhill Feb 12, 2026
504a95f
fix(ui): improve bash output scrolling and wrapping
iamdavidhill Feb 12, 2026
f8c12ad
tweak(ui): show spinners after titles and lock tools until done
iamdavidhill Feb 12, 2026
c35317e
wip(app): timeline changes
adamdotdevin Feb 12, 2026
f5ca478
wip(app): timeline changes
adamdotdevin Feb 12, 2026
f22ac01
wip(app): timeline changes
adamdotdevin Feb 12, 2026
47e6fec
wip(app): timeline changes
adamdotdevin Feb 12, 2026
f1f4e0f
wip(app): timeline changes
adamdotdevin Feb 12, 2026
6e73ca2
wip(app): timeline changes
adamdotdevin Feb 12, 2026
f8b39de
fix(app): only show prompt suggestion on empty session
iamdavidhill Feb 12, 2026
0a1c78a
tweak(app): polish session feed indicators
iamdavidhill Feb 13, 2026
c7be547
tweak(ui): set thinking text to 14px
iamdavidhill Feb 13, 2026
170e92f
fix(ui): only show response copy on finished last turn
iamdavidhill Feb 13, 2026
f689798
tweak(app): match pinned todos styling to prompt input
iamdavidhill Feb 13, 2026
a4ed41a
fix(app): keep jump-to-bottom above prompt tools
iamdavidhill Feb 13, 2026
725ee17
wip(app): timeline changes
adamdotdevin Feb 13, 2026
e4fcd5a
wip(app): timeline changes
adamdotdevin Feb 13, 2026
4a61cfe
tweak (ui): prompt button size
iamdavidhill Feb 13, 2026
67f2f53
tweak(app): move context toggle to session header
iamdavidhill Feb 13, 2026
975c2cd
tweak(app): adjust session header spacing
iamdavidhill Feb 13, 2026
2015fc3
tweak(app): set 14px top-left radius
iamdavidhill Feb 13, 2026
9ac7fe4
tweak(app): reduce sidebar project title size
iamdavidhill Feb 13, 2026
a62c04d
tweak(app): align session options menu
iamdavidhill Feb 13, 2026
78b69c5
tweak(ui): match message copy button sizes
iamdavidhill Feb 13, 2026
062d8c3
tweak(ui): restyle edited files indicator
iamdavidhill Feb 13, 2026
547cc6d
tweak(app): use default cursor for context chips
iamdavidhill Feb 13, 2026
8d11464
tweak(ui): remove diff header background
iamdavidhill Feb 13, 2026
1cd2ff1
tweak(ui): widen message part title gap
iamdavidhill Feb 13, 2026
af1f747
tweak(app): set 12px radius for prompt and todos
iamdavidhill Feb 13, 2026
700060d
tweak(app): update attach button icon and spacing
iamdavidhill Feb 13, 2026
f74fcda
feat(app): add add-file shortcut in prompt
iamdavidhill Feb 13, 2026
a092735
tweak(app): use 14px medium for changes dropdown
iamdavidhill Feb 13, 2026
42fd0e8
tweak(app): reduce top-left radius to 12px
iamdavidhill Feb 13, 2026
61119af
tweak(app): adjust todo dock header spacing
iamdavidhill Feb 13, 2026
cad8298
tweak(app): improve collapsed todo preview
iamdavidhill Feb 13, 2026
e2a2a23
tweak(app): move todo preview into header
iamdavidhill Feb 13, 2026
64b19c6
tweak(app): update todo header summary text
iamdavidhill Feb 13, 2026
bf746e8
tweak(app): use default cursor for todo header text
iamdavidhill Feb 13, 2026
343e6f3
tweak(app): set collapsed todo height to 78px
iamdavidhill Feb 13, 2026
31224af
tweak(app): shimmer collapsed in-progress todo preview
iamdavidhill Feb 13, 2026
f65ff49
tweak(app): pulse and shimmer in-progress todos
iamdavidhill Feb 13, 2026
4414076
tweak(app): add todo list top fade mask
iamdavidhill Feb 13, 2026
2ac0b53
fix(app): keep in-progress todo visible
iamdavidhill Feb 13, 2026
373f5cd
fix(app): stabilize todo dock header and scroll
iamdavidhill Feb 13, 2026
f40ad4a
feat(app): auto-hide todo dock with smoother transition
iamdavidhill Feb 13, 2026
cb07e86
tweak(app): move prompt controls into footer dock
iamdavidhill Feb 13, 2026
080eb09
tweak(app): refine prompt footer dock spacing
iamdavidhill Feb 13, 2026
34e3bf5
tweak(app): fade provider icon in model trigger
iamdavidhill Feb 13, 2026
f10ff3d
tweak(app): align prompt input padding
iamdavidhill Feb 13, 2026
7ef06a1
tweak(app): adjust sidebar bottom icon group offset
iamdavidhill Feb 13, 2026
82c9b34
tweak(app): restyle prompt suggestions popover
iamdavidhill Feb 13, 2026
01e3eeb
tweak(ui): soften aborted message styling
iamdavidhill Feb 13, 2026
310c471
tweak(ui): match patch tool styling to edit
iamdavidhill Feb 13, 2026
0a5a4c3
tweak(app/ui): restyle questions dock
iamdavidhill Feb 14, 2026
4ac6377
refactor(app): overlay prompt actions and focus input
iamdavidhill Feb 14, 2026
9c8e1e4
tweak(app): show shell info in prompt footer dock
iamdavidhill Feb 14, 2026
ef24b05
tweak(app): add prompt icon
iamdavidhill Feb 16, 2026
9ce8c33
tweak(app): add toggle for shell
iamdavidhill Feb 16, 2026
324db66
tweak(app): improve message timeline title padding
iamdavidhill Feb 16, 2026
63b9fd5
tweak(ui): remove diffs trigger horizontal padding
iamdavidhill Feb 16, 2026
67fa93a
tweak(ui): nudge diffs bars lower
iamdavidhill Feb 16, 2026
bce3551
tweak(app/ui): use chevrons for history nav
iamdavidhill Feb 16, 2026
7b0deeb
tweak(app): prevent session title jump on edit
iamdavidhill Feb 16, 2026
f8f8164
tweak(app/ui): polish titlebar icon buttons
iamdavidhill Feb 16, 2026
f441eb2
tweak(app/ui): align titlebar icon hover and spacing
iamdavidhill Feb 16, 2026
14478e3
tweak(app/ui): unify titlebar toggle active state
iamdavidhill Feb 16, 2026
f198802
tweak(app): show file tree toggle only with review
iamdavidhill Feb 16, 2026
7118a69
tweak(app/ui): update file tree toggle icon
iamdavidhill Feb 16, 2026
1464c61
tweak(app/ui): update review toggle icon
iamdavidhill Feb 16, 2026
045a8b5
tweak(app): animate file tree toggle reveal
iamdavidhill Feb 16, 2026
b88ffd6
tweak(app): tighten open-in button padding
iamdavidhill Feb 16, 2026
943d696
tweak(app): adjust status button spacing
iamdavidhill Feb 16, 2026
ff3445c
tweak(app): increase sidebar vertical padding
iamdavidhill Feb 16, 2026
efe0209
tweak(app): reduce add file and submit button gap
iamdavidhill Feb 16, 2026
9ef7a4f
tweak(app): add gap to prompt mode toggle
iamdavidhill Feb 16, 2026
76928f5
tweak(app): resize prompt mode toggle icons
iamdavidhill Feb 16, 2026
43d1d43
tweak(app): simplify shell prompt input
iamdavidhill Feb 16, 2026
f9f022c
fix(app): hide comments in shell mode
iamdavidhill Feb 16, 2026
0bbc919
tweak(app): strengthen shell mode toggle icon
iamdavidhill Feb 16, 2026
415e98c
tweak(app): animate prompt action buttons
iamdavidhill Feb 16, 2026
7db5c93
tweak(ui): make question progress segments 16px
iamdavidhill Feb 16, 2026
0cab45d
tweak(app): remove question dock margin
iamdavidhill Feb 16, 2026
356f6b9
tweak(ui): highlight active question segment
iamdavidhill Feb 16, 2026
c0da5e7
tweak(ui): match question pick state to comment hover
iamdavidhill Feb 16, 2026
948ab25
tweak(ui): adjust question radio picked colors
iamdavidhill Feb 16, 2026
5bf9840
tweak(app): make question progress segments clickable
iamdavidhill Feb 16, 2026
e72ff62
tweak(app): make custom answer input wrap
iamdavidhill Feb 16, 2026
a1b3b20
tweak(app): constrain question dock height
iamdavidhill Feb 16, 2026
dc2226a
tweak(ui): adjust question popup scroll padding
iamdavidhill Feb 16, 2026
e377971
fix(ui): prevent question option shadow clipping
iamdavidhill Feb 16, 2026
61ed445
fix(app): allow custom answer select and deselect
iamdavidhill Feb 16, 2026
d85b38d
tweak(ui): remove todo shimmer and soften dismissed questions
iamdavidhill Feb 16, 2026
aaf4fc7
fix(app): clear todo dock and inline dismissed questions
iamdavidhill Feb 16, 2026
566b048
tweak(ui): match dismissed questions meta styling
iamdavidhill Feb 16, 2026
d0a4f40
tweak(ui): align todo checkbox and 130% leading
iamdavidhill Feb 16, 2026
d15a8a8
tweak(ui): pulse stop icon while streaming
iamdavidhill Feb 16, 2026
e5946c5
chore: cleanup
adamdotdevin Feb 16, 2026
b0cd173
chore: cleanup
adamdotdevin Feb 16, 2026
654c156
chore: cleanup
adamdotdevin Feb 16, 2026
baaec4e
chore: cleanup
adamdotdevin Feb 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions packages/app/e2e/models/model-picker.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ test("smoke model selection updates prompt footer", async ({ page, gotoSession }
const key = await target.getAttribute("data-key")
if (!key) throw new Error("Failed to resolve model key from list item")

const name = (await target.locator("span").first().innerText()).trim()
const model = key.split(":").slice(1).join(":")

await input.fill(model)
Expand All @@ -37,6 +36,13 @@ test("smoke model selection updates prompt footer", async ({ page, gotoSession }

await expect(dialog).toHaveCount(0)

const form = page.locator(promptSelector).locator("xpath=ancestor::form[1]")
await expect(form.locator('[data-component="button"]').filter({ hasText: name }).first()).toBeVisible()
await page.locator(promptSelector).click()
await page.keyboard.type("/model")
await expect(command).toBeVisible()
await command.hover()
await page.keyboard.press("Enter")

const dialogAgain = page.getByRole("dialog")
await expect(dialogAgain).toBeVisible()
await expect(dialogAgain.locator(`[data-slot="list-item"][data-key="${key}"][data-selected="true"]`)).toBeVisible()
})
2 changes: 1 addition & 1 deletion packages/app/src/components/dialog-select-model.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ export function ModelSelectorPopover(props: {
}}
modal={false}
placement="top-start"
gutter={8}
gutter={4}
>
<Kobalte.Trigger as={props.triggerAs ?? "div"} {...props.triggerProps}>
{props.children}
Expand Down
438 changes: 296 additions & 142 deletions packages/app/src/components/prompt-input.tsx

Large diffs are not rendered by default.

7 changes: 3 additions & 4 deletions packages/app/src/components/prompt-input/context-items.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,9 @@ export const PromptContextItems: Component<ContextItemsProps> = (props) => {
>
<div
classList={{
"group shrink-0 flex flex-col rounded-[6px] pl-2 pr-1 py-1 max-w-[200px] h-12 transition-all transition-transform shadow-xs-border hover:shadow-xs-border-hover": true,
"cursor-pointer hover:bg-surface-interactive-weak": !!item.commentID && !selected,
"cursor-pointer bg-surface-interactive-hover hover:bg-surface-interactive-hover shadow-xs-border-hover":
selected,
"group shrink-0 flex flex-col rounded-[6px] pl-2 pr-1 py-1 max-w-[200px] h-12 cursor-default transition-all transition-transform shadow-xs-border hover:shadow-xs-border-hover": true,
"hover:bg-surface-interactive-weak": !!item.commentID && !selected,
"bg-surface-interactive-hover hover:bg-surface-interactive-hover shadow-xs-border-hover": selected,
"bg-background-stronger": !selected,
}}
onClick={() => props.openComment(item)}
Expand Down
19 changes: 16 additions & 3 deletions packages/app/src/components/prompt-input/placeholder.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,40 @@ describe("promptPlaceholder", () => {
mode: "shell",
commentCount: 0,
example: "example",
suggest: true,
t,
})
expect(value).toBe("prompt.placeholder.shell")
})

test("returns summarize placeholders for comment context", () => {
expect(promptPlaceholder({ mode: "normal", commentCount: 1, example: "example", t })).toBe(
expect(promptPlaceholder({ mode: "normal", commentCount: 1, example: "example", suggest: true, t })).toBe(
"prompt.placeholder.summarizeComment",
)
expect(promptPlaceholder({ mode: "normal", commentCount: 2, example: "example", t })).toBe(
expect(promptPlaceholder({ mode: "normal", commentCount: 2, example: "example", suggest: true, t })).toBe(
"prompt.placeholder.summarizeComments",
)
})

test("returns default placeholder with example", () => {
test("returns default placeholder with example when suggestions enabled", () => {
const value = promptPlaceholder({
mode: "normal",
commentCount: 0,
example: "translated-example",
suggest: true,
t,
})
expect(value).toBe("prompt.placeholder.normal:translated-example")
})

test("returns simple placeholder when suggestions disabled", () => {
const value = promptPlaceholder({
mode: "normal",
commentCount: 0,
example: "translated-example",
suggest: false,
t,
})
expect(value).toBe("prompt.placeholder.simple")
})
})
2 changes: 2 additions & 0 deletions packages/app/src/components/prompt-input/placeholder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ type PromptPlaceholderInput = {
mode: "normal" | "shell"
commentCount: number
example: string
suggest: boolean
t: (key: string, params?: Record<string, string>) => string
}

export function promptPlaceholder(input: PromptPlaceholderInput) {
if (input.mode === "shell") return input.t("prompt.placeholder.shell")
if (input.commentCount > 1) return input.t("prompt.placeholder.summarizeComments")
if (input.commentCount === 1) return input.t("prompt.placeholder.summarizeComment")
if (!input.suggest) return input.t("prompt.placeholder.simple")
return input.t("prompt.placeholder.normal", { example: input.example })
}
6 changes: 3 additions & 3 deletions packages/app/src/components/prompt-input/slash-popover.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ export const PromptPopover: Component<PromptPopoverProps> = (props) => {
ref={(el) => {
if (props.popover === "slash") props.setSlashPopoverRef(el)
}}
class="absolute inset-x-0 -top-3 -translate-y-full origin-bottom-left max-h-80 min-h-10
overflow-auto no-scrollbar flex flex-col p-2 rounded-md
border border-border-base bg-surface-raised-stronger-non-alpha shadow-md"
class="absolute inset-x-0 -top-2 -translate-y-full origin-bottom-left max-h-80 min-h-10
overflow-auto no-scrollbar flex flex-col p-2 rounded-[12px]
bg-surface-raised-stronger-non-alpha shadow-[var(--shadow-lg-border-base)]"
onMouseDown={(e) => e.preventDefault()}
>
<Switch>
Expand Down
4 changes: 4 additions & 0 deletions packages/app/src/components/prompt-input/submit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,17 @@ export function createPromptSubmit(input: PromptSubmitInput) {
queued.abort.abort()
queued.cleanup()
pending.delete(sessionID)
globalSync.todo.set(sessionID, undefined)
return Promise.resolve()
}
return sdk.client.session
.abort({
sessionID,
})
.catch(() => {})
.finally(() => {
globalSync.todo.set(sessionID, undefined)
})
}

const restoreCommentItems = (items: CommentItem[]) => {
Expand Down
Loading
Loading