From e30f642e37a8901c6f9575f97dfd03c721c4acc7 Mon Sep 17 00:00:00 2001 From: 07akioni <07akioni2@gmail.com> Date: Mon, 27 Jul 2026 17:23:36 +0800 Subject: [PATCH 01/51] refactor(todos): update TodoRow styling and logic, add IconChecklistOutline16, and enhance AssistantMarkdown rendering --- apps/web/tests/todo-display.snapshot.ts | 2 +- .../src/client/chat/AssistantMarkdown.tsx | 8 ++++- .../src/client/toolviews/todo-row.module.css | 35 ++++++++++++++----- .../src/client/toolviews/todo-row.tsx | 22 ++++++++---- .../tests/coverage-tails.spec.tsx | 14 ++++++++ .../client/ui-primitives/src/icons/index.tsx | 10 ++++++ .../client/ui-primitives/tests/icons.spec.tsx | 4 +-- 7 files changed, 77 insertions(+), 18 deletions(-) diff --git a/apps/web/tests/todo-display.snapshot.ts b/apps/web/tests/todo-display.snapshot.ts index 3116bf4242..86603b676c 100644 --- a/apps/web/tests/todo-display.snapshot.ts +++ b/apps/web/tests/todo-display.snapshot.ts @@ -158,7 +158,7 @@ it('renders the todo_write turn: dedicated tool row + the dock plan strip', asyn "text": "○浏览器验收", }, ], - "row": "☰更新任务清单1/3 已完成 · 实现 fixture 样本", + "row": "更新任务清单1/3 已完成 · 实现 fixture 样本", "rowState": "ok", } `) diff --git a/packages/client/ui-conversation/src/client/chat/AssistantMarkdown.tsx b/packages/client/ui-conversation/src/client/chat/AssistantMarkdown.tsx index 0e91afcc07..2e2f8a6678 100644 --- a/packages/client/ui-conversation/src/client/chat/AssistantMarkdown.tsx +++ b/packages/client/ui-conversation/src/client/chat/AssistantMarkdown.tsx @@ -40,13 +40,19 @@ function ThinkRow({ text, running }: { text: string; running: boolean }) { export const AssistantMarkdown = memo(function AssistantMarkdown({ blocks, streaming, interrupted }: AssistantMarkdownProps) { const last = blocks.length - 1 + // Tool-call heads render as tool rows in the chat view's grouping pass, so + // a node that is only those heads (or empty) would paint an empty root + // between tool groups — skip the shell unless something visible remains. + const hasVisible = streaming === true + || interrupted === true + || blocks.some((block) => block.kind !== 'tool-call') + if (!hasVisible) return null return (
= (props: P) => ReactNode
+/**
+ * Registrant hooks compartment: bare observable sources (getSnapshot +
+ * subscribe pairs) supplied under the reserved `hooks` key of an inject
+ * face. The registrant-private twin of the `sessions.provide` hooks
+ * compartment: the renderer binds each source into a `use & PropsStore & PropsStore(sel: (s: string) => S) => S; hooks?: unknown; plain?: string }) => {
+ seen.push({ hooks: props.hooks, plain: props.plain, read: props.useBadge!(s => s) })
+ return null
+ },
+ inject: () => ({ plain: 'kept', hooks: { badge } }),
+ })
+ mountRoot(h, { 'k.single': SINGLE_ROOT }, renderSlot => renderSlot('k.single', {}))
+ // The raw compartment is consumed by the binding; the plain member passes through.
+ expect(seen.at(-1)).toEqual({ hooks: undefined, plain: 'kept', read: 'cold' })
+ act(() => { badge.set('hot') })
+ expect(seen.at(-1)!['read']).toBe('hot')
+ })
+
it('session inject receives sessionId and caches per (entry x session): switch-back reuses', () => {
const h = makeHost()
h.declare('k.session', SINGLE_SESSION)
From 305f185ede0a40e064a2f618007323d1b6cde318 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 28 Jul 2026 04:13:32 +0000
Subject: [PATCH 32/51] chore(deps): bump actions/upload-artifact from 6 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)
---
updated-dependencies:
- dependency-name: actions/upload-artifact
dependency-version: '7'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]