feat(feedback): add the Web surface for message feedback

Consume the durable message-feedback sidecar from #2217 in the browser:
per-message Like/Dislike with an optional note, contributed through a
declared assistant-actions slot.

- carry MessageId on finalized AssistantMessageNode so a target is nameable
- declare conversation.chat.assistant-actions and render it in the
  IconActions row between copy and branch
- hold one FeedbackController per Session with per-item ifVersion CAS,
  reconciling a version-conflict from the reply's authoritative item
- mount messageFeedbackRemote alongside goalsRemote
This commit is contained in:
Chinesezjc
2026-08-11 16:58:40 +08:00
parent 5d591e55c1
commit 526febc44d
72 changed files with 2095 additions and 22 deletions

63
pnpm-lock.yaml generated
View File

@@ -831,6 +831,9 @@ importers:
'@deepseek-ai/dsh-invariants':
specifier: workspace:^
version: link:../../support/invariants
'@deepseek-ai/dsh-message-feedback':
specifier: workspace:^
version: link:../../feedback/message-feedback
'@deepseek-ai/dsh-session':
specifier: workspace:^
version: link:../../core/session
@@ -1533,6 +1536,9 @@ importers:
'@deepseek-ai/dsh-client-ui-deliverables':
specifier: workspace:^
version: link:../../client/ui-deliverables
'@deepseek-ai/dsh-client-ui-feedback':
specifier: workspace:^
version: link:../../client/ui-feedback
'@deepseek-ai/dsh-client-ui-goal':
specifier: workspace:^
version: link:../../client/ui-goal
@@ -2099,6 +2105,51 @@ importers:
specifier: ~18.3.1
version: 18.3.31
packages/client/ui-feedback:
devDependencies:
'@deepseek-ai/cordis':
specifier: workspace:^
version: link:../../../vendor/cordis
'@deepseek-ai/dsh-api-remotes':
specifier: workspace:^
version: link:../../api/remotes
'@deepseek-ai/dsh-client-locale':
specifier: workspace:^
version: link:../locale
'@deepseek-ai/dsh-client-runtime':
specifier: workspace:^
version: link:../runtime
'@deepseek-ai/dsh-client-test-runtime':
specifier: workspace:^
version: link:../test-runtime
'@deepseek-ai/dsh-client-ui-conversation':
specifier: workspace:^
version: link:../ui-conversation
'@deepseek-ai/dsh-client-ui-primitives':
specifier: workspace:^
version: link:../ui-primitives
'@deepseek-ai/dsh-client-ui-slots':
specifier: workspace:^
version: link:../ui-slots
'@deepseek-ai/dsh-invariants':
specifier: workspace:^
version: link:../../support/invariants
'@deepseek-ai/dsh-message-feedback':
specifier: workspace:^
version: link:../../feedback/message-feedback
'@testing-library/react':
specifier: ^16.1.0
version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@types/react':
specifier: ~18.3.1
version: 18.3.31
react:
specifier: ^18.2.0
version: 18.3.1
react-dom:
specifier: ^18.2.0
version: 18.3.1(react@18.3.1)
packages/client/ui-goal:
devDependencies:
'@deepseek-ai/cordis':
@@ -2859,15 +2910,15 @@ importers:
specifier: ^9.0.0
version: 9.0.0
devDependencies:
'@deepseek-ai/dsh-client-locale':
specifier: workspace:^
version: link:../locale
'@deepseek-ai/cordis':
specifier: workspace:^
version: link:../../../vendor/cordis
'@deepseek-ai/dsh-agent':
specifier: workspace:^
version: link:../../core/agent
'@deepseek-ai/dsh-client-locale':
specifier: workspace:^
version: link:../locale
'@deepseek-ai/dsh-client-runtime':
specifier: workspace:^
version: link:../runtime
@@ -4495,12 +4546,12 @@ importers:
'@deepseek-ai/dsh-workspace':
specifier: workspace:^
version: link:../../workspace/workspace
fflate:
specifier: ^0.8.2
version: 0.8.3
'@deepseek-ai/schemastery':
specifier: link:../../../vendor/schemastery
version: link:../../../vendor/schemastery
fflate:
specifier: ^0.8.2
version: 0.8.3
zod:
specifier: ^4.4.3
version: 4.4.3