Commit 3fd150f
fix: close AG-UI audit gaps F1–F4 + F6 (composer clear, light scheme, graceful stop, json-render values, markdown tracking) (#663)
* docs(ag-ui): correct F3 — stray 'Success' was a truncated delta, real gap is the error banner
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* docs(ag-ui): Phase 3 gap-closure implementation plan
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(examples/ag-ui): set data-color-scheme so light mode reaches the page chrome (F2)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(chat): chat-input clears the textarea after submit (F1)
ngModel does not write a programmatic clear back to the view under
zoneless + OnPush, so sent text stayed in the composer. Bind
[value]/(input) directly and drop FormsModule.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(chat): restore textarea name attribute + test convention cleanups (review)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(ag-ui): treat stop()-induced aborts as graceful cancellation (F3)
abortRun() makes the AG-UI client report onRunFailed('BodyStreamBuffer
was aborted'), which rendered a red error banner for a user-initiated
stop. Track abort intent and settle the store as idle instead.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* perf(chat): track markdown children by index, not identity (F6)
Re-parsed markdown produces new child objects every stream delta;
identity tracking re-created the DOM subtree per chunk (NG0956).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(chat): resolve json-render statePath object values to scalars (F4)
The json-render schema prompt (examples/*/python/src/schemas/json_render.py)
documents state-bound props as { statePath: "/path" } with spec.state as
the initial value model, but @json-render/core only resolves $state/
$bindState expressions — the raw object fell through to the a2ui catalog
components and interpolated as the literal string "[object Object]"
(KPI Text values, Slider labels, TextField values, Overview metrics).
chat-generative-ui now (a) normalizes { statePath: p } props to the
engine-native { $bindState: p } plus a _bindings map (mirroring what
surfaceToSpec does for A2UI path refs, so user input writes back), and
(b) seeds spec.state into the provided store — the chat composition's
shared store starts empty and render-spec only self-seeds when no store
input is given. User-modified paths are never clobbered on spec re-emits.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(chat): isolate json-render stores per surface + seed-effect tracking (review)
Passing the conversation-wide internal store into every generative-ui
surface made same-key dashboards collide across messages (regenerate,
multi-dashboard, thread switch). Match a2ui isolation: only an explicit
consumer store is shared; otherwise render-spec self-seeds per instance.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(cockpit): pass explicit stores to json-render dashboards + pin composition isolation (review)
The store-isolation fix means backend-state sync reaches json-render
surfaces only via an explicit consumer store; the two cockpit dashboard
capabilities want exactly those shared live semantics, so they now opt
in. Adds a composition-level test pinning the isolation binding.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* chore(chat): drop unused @angular/forms peer dependency
chat-input no longer uses ngModel (F1); dependency-checks lint flagged
the stale peer. Consumer-visible: @threadplane/chat no longer requires
@angular/forms.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(ag-ui): also settle abort-shaped RUN_ERROR events on stop (F3)
The AG-UI client surfaces a user abort through the event stream as
RUN_ERROR in addition to onRunFailed; the event path bypassed the
graceful-stop guard, so the error banner still appeared in live smoke.
Introduces an abortSettled flag alongside abortRequested: the first
delivery (event or onRunFailed) settles the store as idle and sets
abortSettled; any subsequent delivery for the same abort is swallowed
by settleIfAborted() without re-touching the store. Both flags are
reset together at the top of submit() so the next run starts clean
and genuine failures after a previous stop are never suppressed.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* docs(ag-ui): Phase 3 closure status — F1-F4 + main F6 closed, residuals logged
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(ag-ui): reset abort flags in regenerate + settle duplicate aborts defensively (review)
stop -> regenerate -> stop left the store wedged in streaming because
regenerate never reset the abort flags and the duplicate-delivery guard
returned without settling. Also documents the json-render store-isolation
change in the chat CHANGELOG and fixes the README peer table.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* chore(docs): regenerate api docs
* ci: retrigger checks after bot docs regeneration
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>1 parent b871ba2 commit 3fd150f
25 files changed
Lines changed: 1506 additions & 52 deletions
File tree
- apps/website/content/docs/chat/api
- cockpit
- ag-ui/json-render
- angular/src/app
- python
- docs
- src
- chat/generative-ui/angular/src/app
- docs/superpowers
- plans
- specs
- examples/ag-ui/angular
- e2e
- src
- app/shell
- libs
- ag-ui/src/lib
- chat
- src/lib
- compositions/chat
- markdown
- views
- primitives
- chat-generative-ui
- chat-input
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2153 | 2153 | | |
2154 | 2154 | | |
2155 | 2155 | | |
| 2156 | + | |
| 2157 | + | |
| 2158 | + | |
| 2159 | + | |
| 2160 | + | |
| 2161 | + | |
2156 | 2162 | | |
2157 | 2163 | | |
2158 | 2164 | | |
| |||
2393 | 2399 | | |
2394 | 2400 | | |
2395 | 2401 | | |
| 2402 | + | |
| 2403 | + | |
| 2404 | + | |
| 2405 | + | |
| 2406 | + | |
| 2407 | + | |
| 2408 | + | |
| 2409 | + | |
| 2410 | + | |
| 2411 | + | |
| 2412 | + | |
| 2413 | + | |
| 2414 | + | |
2396 | 2415 | | |
2397 | 2416 | | |
2398 | 2417 | | |
| |||
2782 | 2801 | | |
2783 | 2802 | | |
2784 | 2803 | | |
| 2804 | + | |
| 2805 | + | |
| 2806 | + | |
| 2807 | + | |
| 2808 | + | |
| 2809 | + | |
2785 | 2810 | | |
2786 | 2811 | | |
2787 | 2812 | | |
| |||
3277 | 3302 | | |
3278 | 3303 | | |
3279 | 3304 | | |
| 3305 | + | |
| 3306 | + | |
| 3307 | + | |
| 3308 | + | |
| 3309 | + | |
| 3310 | + | |
3280 | 3311 | | |
3281 | 3312 | | |
3282 | 3313 | | |
| |||
4702 | 4733 | | |
4703 | 4734 | | |
4704 | 4735 | | |
4705 | | - | |
| 4736 | + | |
4706 | 4737 | | |
4707 | 4738 | | |
4708 | 4739 | | |
| |||
Lines changed: 7 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
30 | 31 | | |
31 | 32 | | |
32 | 33 | | |
33 | | - | |
| 34 | + | |
34 | 35 | | |
35 | 36 | | |
36 | 37 | | |
| |||
44 | 45 | | |
45 | 46 | | |
46 | 47 | | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
47 | 53 | | |
48 | 54 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
| 19 | + | |
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| 25 | + | |
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
| |||
31 | 32 | | |
32 | 33 | | |
33 | 34 | | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
34 | 38 | | |
35 | 39 | | |
36 | 40 | | |
37 | | - | |
| 41 | + | |
38 | 42 | | |
39 | 43 | | |
40 | 44 | | |
| |||
76 | 80 | | |
77 | 81 | | |
78 | 82 | | |
79 | | - | |
80 | | - | |
| 83 | + | |
| 84 | + | |
81 | 85 | | |
82 | 86 | | |
83 | 87 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
21 | | - | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
| |||
Lines changed: 8 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
31 | 32 | | |
32 | 33 | | |
33 | 34 | | |
34 | | - | |
| 35 | + | |
35 | 36 | | |
36 | 37 | | |
37 | 38 | | |
| |||
50 | 51 | | |
51 | 52 | | |
52 | 53 | | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
53 | 60 | | |
54 | 61 | | |
55 | 62 | | |
| |||
0 commit comments