feat(web): settings for AGENT_NOTIFY_SUMMARY chat display (default hide) (#1477)

* feat(web): render AGENT_NOTIFY_SUMMARY as compact metadata

* fix(web): defer summary rendering until completion

* fix(shared): preserve indentation when splitting summaries

* fix(web): guard unknown summary statuses

* feat(web): settings for AGENT_NOTIFY_SUMMARY chat display (default hide)

Add hub setting sibling to emit (#1376): show compact NotifySummaryText
when on; strip footer from chat/copy when off. Store/parse/FCM unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(web): address #1477 Majors for display setting

Allow any namespace to GET hub-settings (PUT stays owner-only) so
sessionSummaryInChat applies hub-wide. Reject whitespace-delimited
AGENT_NOTIFY_SUMMARY examples so default-hide does not eat prose.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(shared): allow indented AGENT_NOTIFY_SUMMARY footers

Keep rejecting whitespace-delimited prose examples, but accept a
standalone footer whose only prefix is leading indentation.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(web): poll hub display setting; hide empty notify footers

Refetch sessionSummaryInChat so open clients pick up owner toggles.
When display is on, recognized footers without status/summary/action
still strip raw JSON instead of falling back to MarkdownText.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(web): poll notify display once in chat shell

Move hub-settings refetchInterval off per-message hooks into HappyThread
context. Strip well-formed footers while streaming when display is off.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(web,hub): QueryClient for HappyThread tests; atomic hub-settings

Wrap HappyThread mobile-scroll tests in QueryClientProvider after the
chat-shell hub-settings poll. Read/write both hub setting flags in one
settings.json snapshot under the shared lock.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Ananovo <78636812+techotaku39@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
HeavyGee
2026-08-12 10:10:36 +08:00
committed by GitHub
co-authored by Cursor Ananovo
parent c69a88afae
commit 51ae260a3f
23 changed files with 723 additions and 110 deletions
+12 -4
View File
@@ -58,14 +58,22 @@ export const CreateSessionResponseSchema = z.object({
export type CreateSessionResponse = z.infer<typeof CreateSessionResponseSchema>
export const HubSettingsResponseSchema = z.object({
sessionSummaryContract: z.boolean()
sessionSummaryContract: z.boolean(),
/** Show compact AGENT_NOTIFY_SUMMARY in chat (default off / hide). */
sessionSummaryInChat: z.boolean()
})
export type HubSettingsResponse = z.infer<typeof HubSettingsResponseSchema>
export const UpdateHubSettingsRequestSchema = z.object({
sessionSummaryContract: z.boolean()
})
export const UpdateHubSettingsRequestSchema = z
.object({
sessionSummaryContract: z.boolean().optional(),
sessionSummaryInChat: z.boolean().optional()
})
.refine(
(data) => data.sessionSummaryContract !== undefined || data.sessionSummaryInChat !== undefined,
{ message: 'At least one hub setting field is required' }
)
export type UpdateHubSettingsRequest = z.infer<typeof UpdateHubSettingsRequestSchema>