diff --git a/desktop/src/components/markdown/MarkdownRenderer.test.tsx b/desktop/src/components/markdown/MarkdownRenderer.test.tsx
index 3bb7ffc8..164897b4 100644
--- a/desktop/src/components/markdown/MarkdownRenderer.test.tsx
+++ b/desktop/src/components/markdown/MarkdownRenderer.test.tsx
@@ -57,6 +57,19 @@ describe('MarkdownRenderer', () => {
expect(screen.getByText('Body copy.')).toBeInTheDocument()
})
+ it('gives default markdown lists enough inset to keep bullets inside message cards', () => {
+ const { container } = render(
+ ,
+ )
+
+ const root = container.firstChild as HTMLDivElement
+ expect(root.className).toContain('prose-ul:pl-5')
+ expect(root.className).toContain('prose-ol:pl-5')
+ expect(root.className).toContain('prose-ul:list-outside')
+ expect(root.className).toContain('prose-ol:list-outside')
+ expect(screen.getByText('First item')).toBeInTheDocument()
+ })
+
it('applies compact prose classes for dense surfaces', () => {
const { container } = render(
{
expect(useCLITaskStore.getState()).toMatchObject({
tasks: [],
resetting: true,
- completedAndDismissed: false,
- dismissedCompletionKey: null,
+ completedAndDismissed: true,
+ dismissedCompletionKey: 'session-1::1::Keep current session isolated::completed::::|session-1::2::Second completed task::completed::::',
expanded: false,
})
@@ -107,6 +107,34 @@ describe('cliTaskStore', () => {
expect(useCLITaskStore.getState().resetting).toBe(false)
})
+ it('keeps a dismissed completed list hidden if polling returns it again', async () => {
+ const completedTasks = [
+ makeTask('session-1', 'completed'),
+ { ...makeTask('session-1', 'completed'), id: '2', subject: 'Second completed task' },
+ ]
+
+ vi.mocked(cliTasksApi.resetTaskList).mockResolvedValue({ ok: true })
+ vi.mocked(cliTasksApi.getTasksForList).mockResolvedValue({ tasks: completedTasks })
+
+ useCLITaskStore.setState({
+ sessionId: 'session-1',
+ tasks: completedTasks,
+ expanded: true,
+ completedAndDismissed: false,
+ dismissedCompletionKey: null,
+ })
+
+ await useCLITaskStore.getState().resetCompletedTasks()
+ await useCLITaskStore.getState().fetchSessionTasks('session-1')
+
+ expect(useCLITaskStore.getState()).toMatchObject({
+ tasks: completedTasks,
+ completedAndDismissed: true,
+ dismissedCompletionKey: 'session-1::1::Keep current session isolated::completed::::|session-1::2::Second completed task::completed::::',
+ expanded: false,
+ })
+ })
+
it('refreshes tasks for the currently tracked session by default', async () => {
vi.mocked(cliTasksApi.getTasksForList).mockResolvedValue({
tasks: [makeTask('session-1', 'in_progress')],
diff --git a/desktop/src/stores/cliTaskStore.ts b/desktop/src/stores/cliTaskStore.ts
index 192f9892..8f7007ca 100644
--- a/desktop/src/stores/cliTaskStore.ts
+++ b/desktop/src/stores/cliTaskStore.ts
@@ -165,8 +165,8 @@ export const useCLITaskStore = create((set, get) => ({
set({
tasks: [],
resetting: true,
- completedAndDismissed: false,
- dismissedCompletionKey: null,
+ completedAndDismissed: true,
+ dismissedCompletionKey: completionKey,
expanded: false,
})