Render card, chart, form, list, metric, mindmap, table, tabs, text, and JSON using fixed native components; never execute assistant HTML or JavaScript.
Support bar, stacked-bar, line, area, pie, donut, and heatmap charts. Accept chartType and chart_type, default to bar, and treat invalid numeric values as zero.
Support text, textarea, select, checkbox, date, and number form fields.
Persist form values, selected tabs, and dismissed surfaces per conversation using stable message/tool-index identities.
Keep existing non-dismissed surfaces visible and expanded while later assistant output streams.
Include current form values in submitted action payloads.
Allow only open post/media/settings/chat, switch view, set view, and sidebar/panel toggles. Reject unknown actions and invalid identifiers visibly.
Render unknown nested content as text or inspectable JSON.
Implementation notes
Read docs/UI_STYLE_GUIDE.md before UI work.
Extend Chat state rather than creating a second message renderer.
Use native widgets and existing navigation messages.
Follow red/green TDD and compare ../bDS2 chat_editor/tool_surfaces.ex, chart_view.ex, and their tests when needed.
Acceptance criteria
Every surface, chart, and form type has focused rendering/state tests.
Conversation reopen restores fields, selected tabs, and dismissals against the same surface IDs.
Streaming a later response does not remove prior surfaces.
Action allow-list, invalid payloads, nested fallback, and raw HTML/script safety are tested.
Form action payloads contain the current persisted values.
All UI is localized and keyboard accessible.
cargo fmt --all -- --check, cargo build --workspace, and cargo test --workspace pass.
## Goal
Add safe structured assistant surfaces to the completed Chat feature, including persistent interaction state and allow-listed application actions.
## Current state
- specs/editor_chat.allium defines the surface values and UI behavior.
- specs/ai.allium defines structured render tools.
- No A2UI renderer or surface state repository exists.
- This issue depends on persistent conversational AI and streaming tool calls.
## Required behavior
- Recognize render_card, render_chart, render_form, render_list, render_metric, render_mindmap, render_table, and render_tabs tool results.
- Render card, chart, form, list, metric, mindmap, table, tabs, text, and JSON using fixed native components; never execute assistant HTML or JavaScript.
- Support bar, stacked-bar, line, area, pie, donut, and heatmap charts. Accept chartType and chart_type, default to bar, and treat invalid numeric values as zero.
- Support text, textarea, select, checkbox, date, and number form fields.
- Persist form values, selected tabs, and dismissed surfaces per conversation using stable message/tool-index identities.
- Keep existing non-dismissed surfaces visible and expanded while later assistant output streams.
- Include current form values in submitted action payloads.
- Allow only open post/media/settings/chat, switch view, set view, and sidebar/panel toggles. Reject unknown actions and invalid identifiers visibly.
- Render unknown nested content as text or inspectable JSON.
## Implementation notes
- Read docs/UI_STYLE_GUIDE.md before UI work.
- Extend Chat state rather than creating a second message renderer.
- Use native widgets and existing navigation messages.
- Follow red/green TDD and compare ../bDS2 chat_editor/tool_surfaces.ex, chart_view.ex, and their tests when needed.
## Acceptance criteria
- Every surface, chart, and form type has focused rendering/state tests.
- Conversation reopen restores fields, selected tabs, and dismissals against the same surface IDs.
- Streaming a later response does not remove prior surfaces.
- Action allow-list, invalid payloads, nested fallback, and raw HTML/script safety are tested.
- Form action payloads contain the current persisted values.
- All UI is localized and keyboard accessible.
- cargo fmt --all -- --check, cargo build --workspace, and cargo test --workspace pass.
Implemented in fd4fd74. Added eight structured render tools; fixed native card, chart, form, list, metric, mind-map, table, tab, text, and JSON surfaces; all seven chart types and six form controls; stable per-conversation form, tab, and dismissal persistence; live streaming surfaces; safe nested fallbacks; inert assistant markup; and a strict visible action allow-list. Added the generated SQLite migration, five-locale UI strings, README and extension-plan updates, migration/reopen/streaming/action/rendering tests, and packaged-app inspection. Neutral comparison against issue #22, bDS2 ToolSurfaces/ChartView/ChatEditor, and editor_chat/ai Allium found and corrected heatmap-segment, tool-marker-order, and unknown-render fallback gaps. cargo fmt, workspace check, clippy with warnings denied, workspace build, all 47 Allium specs with zero findings, and cargo test --workspace all pass.
Implemented in fd4fd74. Added eight structured render tools; fixed native card, chart, form, list, metric, mind-map, table, tab, text, and JSON surfaces; all seven chart types and six form controls; stable per-conversation form, tab, and dismissal persistence; live streaming surfaces; safe nested fallbacks; inert assistant markup; and a strict visible action allow-list. Added the generated SQLite migration, five-locale UI strings, README and extension-plan updates, migration/reopen/streaming/action/rendering tests, and packaged-app inspection. Neutral comparison against issue #22, bDS2 ToolSurfaces/ChartView/ChatEditor, and editor_chat/ai Allium found and corrected heatmap-segment, tool-marker-order, and unknown-render fallback gaps. cargo fmt, workspace check, clippy with warnings denied, workspace build, all 47 Allium specs with zero findings, and cargo test --workspace all pass.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Goal
Add safe structured assistant surfaces to the completed Chat feature, including persistent interaction state and allow-listed application actions.
Current state
Required behavior
Implementation notes
Acceptance criteria
Implemented in
fd4fd74. Added eight structured render tools; fixed native card, chart, form, list, metric, mind-map, table, tab, text, and JSON surfaces; all seven chart types and six form controls; stable per-conversation form, tab, and dismissal persistence; live streaming surfaces; safe nested fallbacks; inert assistant markup; and a strict visible action allow-list. Added the generated SQLite migration, five-locale UI strings, README and extension-plan updates, migration/reopen/streaming/action/rendering tests, and packaged-app inspection. Neutral comparison against issue #22, bDS2 ToolSurfaces/ChartView/ChatEditor, and editor_chat/ai Allium found and corrected heatmap-segment, tool-marker-order, and unknown-render fallback gaps. cargo fmt, workspace check, clippy with warnings denied, workspace build, all 47 Allium specs with zero findings, and cargo test --workspace all pass.