Plan A2UI chat surfaces
This commit is contained in:
46
PLAN.md
46
PLAN.md
@@ -18,6 +18,7 @@ sessions, tools, and turn orchestration.
|
|||||||
| Model runtime | Download workflow implemented | Persisted model choice, DSpark toggle, idle timeout, and Rust-native background main/DSpark downloads with progress, ETA, stop, restart-resume, size checks, and SHA-256 verification | Loading, inference, idle unloading, and Metal integration |
|
| Model runtime | Download workflow implemented | Persisted model choice, DSpark toggle, idle timeout, and Rust-native background main/DSpark downloads with progress, ETA, stop, restart-resume, size checks, and SHA-256 verification | Loading, inference, idle unloading, and Metal integration |
|
||||||
| Local endpoint | Not started | Nothing listening | OpenAI-compatible HTTP and streaming surfaces |
|
| Local endpoint | Not started | Nothing listening | OpenAI-compatible HTTP and streaming surfaces |
|
||||||
| Agent | UI shell only | Empty conversation pane and composer placeholder | Messages, generation, tools, approvals, compaction, and cancellation |
|
| Agent | UI shell only | Empty conversation pane and composer placeholder | Messages, generation, tools, approvals, compaction, and cancellation |
|
||||||
|
| A2UI | Future extension | bDS2 provides the reference structured render-tool contract | Native inline surfaces for local chat after core chat and tools are stable |
|
||||||
| Dev brain | Not started | No vault access | Obsidian vault selection, durable access, and agent knowledge/memory tools |
|
| Dev brain | Not started | No vault access | Obsidian vault selection, durable access, and agent knowledge/memory tools |
|
||||||
| Release | Not started | Development binary builds and tests | `.app` packaging, signing, entitlements, and notarization |
|
| Release | Not started | Development binary builds and tests | `.app` packaging, signing, entitlements, and notarization |
|
||||||
|
|
||||||
@@ -369,6 +370,49 @@ continue from the persisted session. With Dev Brain enabled, store a memory in
|
|||||||
one session and retrieve it with a cited vault-relative note path from a session
|
one session and retrieve it with a cited vault-relative note path from a session
|
||||||
in another project after restarting the app.
|
in another project after restarting the app.
|
||||||
|
|
||||||
|
## Phase 5 — A2UI rich local-chat surfaces
|
||||||
|
|
||||||
|
Status: **future extension; not part of the core milestone**. Start only after
|
||||||
|
ordinary local chat, structured tool calls, transcript persistence, and
|
||||||
|
cancellation are stable. Use the A2UI implementation in `../bDS2` as the
|
||||||
|
behavioral reference, especially its render-tool schemas, typed surface
|
||||||
|
normalization, inline message placement, chart geometry, and interaction state.
|
||||||
|
|
||||||
|
- Expose typed `render_card`, `render_chart`, `render_form`, `render_list`,
|
||||||
|
`render_metric`, `render_mindmap`, `render_table`, and `render_tabs` tools to
|
||||||
|
the local agent. Keep these tools presentation-only; they return structured
|
||||||
|
data and do not perform project mutations themselves.
|
||||||
|
- Support the bDS2 chart set initially: bar, stacked bar, line, area, pie,
|
||||||
|
donut, and heatmap. Render charts and mind maps with native Iced primitives
|
||||||
|
and SVG geometry inside the assistant message rather than adding a web view.
|
||||||
|
- Treat tool arguments as untrusted data. Validate type, nesting depth, row and
|
||||||
|
series counts, numeric values, labels, action names, and payload size before
|
||||||
|
rendering. Never accept model-authored HTML, JavaScript, styles, file URLs, or
|
||||||
|
arbitrary commands.
|
||||||
|
- Attach each validated surface to the assistant message/tool call that created
|
||||||
|
it and persist the versioned structured payload with the transcript. A
|
||||||
|
restarted session must reconstruct the same surface without asking the model
|
||||||
|
to emit it again.
|
||||||
|
- Build a surface only after its tool arguments are complete and valid while
|
||||||
|
allowing ordinary assistant text to continue streaming. Malformed or unknown
|
||||||
|
render payloads fall back to a bounded JSON/text representation and must not
|
||||||
|
fail the surrounding chat turn.
|
||||||
|
- Preserve local interaction state for forms and tabs. Dispatch form submits
|
||||||
|
and card actions through a small allowlist of application actions; any action
|
||||||
|
that mutates files, settings, or external state still follows the normal
|
||||||
|
approval path.
|
||||||
|
- Provide keyboard navigation, readable labels, theme-aware colors, and a text
|
||||||
|
or tabular fallback for chart data so the information remains accessible and
|
||||||
|
copyable.
|
||||||
|
- Keep A2UI local-chat-only initially. Do not extend the OpenAI-compatible HTTP
|
||||||
|
surface or invent a general plugin/component protocol until a real client
|
||||||
|
requires it.
|
||||||
|
|
||||||
|
Exit criterion: ask the local agent to present fixture data as each supported
|
||||||
|
surface type; verify a chart and nested tab surface render correctly, an
|
||||||
|
interactive form returns validated values, malformed payloads degrade safely,
|
||||||
|
and all surfaces survive application restart with their message history.
|
||||||
|
|
||||||
## Verification and packaging
|
## Verification and packaging
|
||||||
|
|
||||||
Status: **partially implemented**. Formatting, Clippy, build, and unit-test
|
Status: **partially implemented**. Formatting, Clippy, build, and unit-test
|
||||||
@@ -398,3 +442,5 @@ tests, and release packaging remain open.
|
|||||||
finally port the agent tools.
|
finally port the agent tools.
|
||||||
5. Add the opt-in Dev Brain tool after local file/search boundaries and agent
|
5. Add the opt-in Dev Brain tool after local file/search boundaries and agent
|
||||||
approvals are stable.
|
approvals are stable.
|
||||||
|
6. Add bDS2-style A2UI render tools and native inline surfaces after the core
|
||||||
|
local chat/tool loop is complete.
|
||||||
|
|||||||
Reference in New Issue
Block a user