v0.14.2
Changed
- Two element tags inside the shell were renamed:
lw-content-areais nowlw-address-pane-header, andlw-content-secondary-paneis nowlw-surface-body. They are not part of the published contract, but a product's unlayered CSS may target them. - A plugin's state handle gains
onChange(#647): it is called whenever the value arrives or changes, needs no injection context, and is howactivate()waits for the store. A test double that builds aStateHandleby hand needs the member too. - The agent connection's
flush()answers one open call per request (#652): call it until it answersnullonce a run is over. A call left open is refused rather than run; a call carried by chunks is still closed by a run that finishes.
Fixed
- fix(ag-ui): the agent connection answers every call a run leaves open (#652)
- fix(shell): the plugin store keeps its detail reachable on a narrow screen (#651)
- fix(shell): a plugin the operator deployed offers no install in the store (#650)
- fix(shell): a select option draws an icon the registry knows (#649)
- fix(frame-kit): a state write made before the connection is sent once connected (#646)
- fix(shell): a plugin state value with no JSON form is refused (#645)
- fix(shell): invocations waiting side by side no longer count as a chain (#644)
- fix(devkit): the Tailwind source path is taken literally (#497)
- fix(cli): read the entry stylesheet in every form, name errors once (#496)
- fix(cli): the workspace above a nested package is found (#495)
- fix(devkit): the Nx route names what it leaves untouched (#494)
- fix(devkit): a forced distribution keeps the occupant's build settings (#493)
- fix(devkit): the weaver generator composes the weaver without a test runner too (#492)
- fix(devkit): the generated weaver notes name real regions and the recorded versions (#491)
- fix(frame-kit): the frame declaration drops an empty export statement (#490)
- fix(shell): a pane body lets go of the mounts of surfaces it no longer shows (#489)
- fix(shell): drag between inner panes works for an address with a colon (#488)
- fix(shell): closing the pane that fills the area ends the blow-up (#487)
- fix(shell): a panel drag whose edge disappears still ends (#486)
- fix(shell): moving a view to the other sidebar by keyboard is announced (#485)
- fix(shell): claims that tie on an address are reported whatever their shape (#484)
- fix(shell): the stored language is applied from the product's settings port (#483)
- fix(shell): the pane arrangement reads the saved workspaces from the settings port (#482)
- fix(shell): actions on open work in the search act where it stands (#481)
- fix(shell): a rail entry that only opens a menu can be curated (#480)
- fix(shell): release grants of failed activations and report missing required plugins (#479)
- fix(shell): a deployed plugin's settings are reachable from the installed list (#478)
- fix(shell): a plugin renames and re-actions only surfaces it registered (#477)
- fix(shell): a failing menu entry reaches the error handler (#476)
- fix(shell): a list menu marks its entry in effect and keeps every icon (#475)
What's Changed
- feat(demo): show tab badges, leaving out a child and a plugin menu by @yesbert in #472
- docs(openspec): readability worklist and the defects found while reading by @yesbert in #473
- refactor(shell): cut the content tab services by what they do by @yesbert in #474
- fix(shell): a list menu marks its entry in effect and keeps every icon by @yesbert in #475
- fix(shell): a failing menu entry reaches the error handler by @yesbert in #476
- fix(shell): a plugin renames and re-actions only surfaces it registered by @yesbert in #477
- fix(shell): a deployed plugin's settings are reachable from the installed list by @yesbert in #478
- fix(shell): release grants of failed activations and report missing required plugins by @yesbert in #479
- fix(shell): a rail entry that only opens a menu can be curated by @yesbert in #480
- fix(shell): actions on open work in the search act where it stands by @yesbert in #481
- fix(shell): the pane arrangement reads the saved workspaces from the settings port by @yesbert in #482
- fix(shell): the stored language is applied from the product's settings port by @yesbert in #483
- fix(shell): claims that tie on an address are reported whatever their shape by @yesbert in #484
- fix(shell): moving a view to the other sidebar by keyboard is announced by @yesbert in #485
- fix(shell): a panel drag whose edge disappears still ends by @yesbert in #486
- fix(shell): closing the pane that fills the area ends the blow-up by @yesbert in #487
- fix(shell): drag between inner panes works for an address with a colon by @yesbert in #488
- fix(shell): a pane body lets go of the mounts of surfaces it no longer shows by @yesbert in #489
- fix(frame-kit): the frame declaration drops an empty export statement by @yesbert in #490
- fix(devkit): the generated weaver notes name real regions and the recorded versions by @yesbert in #491
- fix(devkit): the weaver generator composes the weaver without a test runner too by @yesbert in #492
- fix(devkit): a forced distribution keeps the occupant's build settings by @yesbert in #493
- fix(devkit): the Nx route names what it leaves untouched by @yesbert in #494
- fix(cli): the workspace above a nested package is found by @yesbert in #495
- fix(cli): read the entry stylesheet in every form, name errors once by @yesbert in #496
- fix(devkit): the Tailwind source path is taken literally by @yesbert in #497
- fix(testbed): typing in the RPC sandbox keeps focus by @yesbert in #498
- fix(testbed): the minimal store plugin registers its own page by @yesbert in #499
- fix(testbed): the static sandbox page loads the kit stylesheet by @yesbert in #500
- fix(demo): closing periods and dates follow the local calendar by @yesbert in #501
- fix(demo): quote commands accept quotes created after startup by @yesbert in #502
- fix(demo): the dashboard's colour observer stops with its view by @yesbert in #503
- docs(openspec): waiting for the store at activation is an owner decision by @yesbert in #504
- fix(demo): the quotes plugin activates when storage is blocked by @yesbert in #505
- fix(example): a ticket link opens its ticket whatever the case by @yesbert in #506
- fix(website): the landing page's pictures are copied and checked by @yesbert in #507
- fix(website): the sidebar guard matches whole routes by @yesbert in #508
- refactor(shell): whether this window is a pop-out is one fact by @yesbert in #509
- refactor(shell): one helper binds a stored setting to a signal by @yesbert in #510
- refactor(shell): the saved workspace list is a persisted setting by @yesbert in #511
- refactor(shell): the plugin lists and grants are persisted settings by @yesbert in #512
- refactor(shell): the stored-value helpers get a folder of their own by @yesbert in #513
- refactor(shell): the rail's choices are persisted settings by @yesbert in #514
- refactor(shell): the panels read their records with the shared parsers by @yesbert in #515
- docs(openspec): the readability change records what stays as it is by @yesbert in #516
- refactor(shell): each storage key is declared once by @yesbert in #517
- refactor(shell): unsaved work gets a folder, two tree files their names by @yesbert in #518
- refactor(shell): the retention key grammar lives in one module by @yesbert in #519
- refactor(shell): one rule says when the wording may have changed by @yesbert in #520
- refactor(shell): the layout questions are answered once by @yesbert in #521
- refactor(shell): the tab label module moves to the pane chrome by @yesbert in #522
- refactor(shell): a tab's label is patched in one place by @yesbert in #523
- refactor(shell): host command ids are named once by @yesbert in #524
- refactor(shell): the fallback language and tone colours are stated once by @yesbert in #525
- refactor(shell): wide dialogs share one frame by @yesbert in #526
- refactor(shell): names say what they hold by @yesbert in #527
- refactor(shell): one rule says which chrome item is offered by @yesbert in #528
- refactor(shell): what a pane offers is read from one place by @yesbert in #529
- refactor(shell): code only specs called is gone by @yesbert in #530
- refactor(shell): the route table carries only what is read from it by @yesbert in #531
- refactor(shell): theme and text size start with provideShell by @yesbert in #532
- refactor(shell): host commands and built-in menus named for what they hold by @yesbert in #533
- refactor(shell): each host command sits beside what it opens by @yesbert in #534
- refactor(shell): provideShell reads as named groups by @yesbert in #535
- refactor(shell): each edge and the drawer are drawn once by @yesbert in #536
- refactor(shell): rail and sidebar moves share one chord and announcement by @yesbert in #537
- refactor(shell): menu and move names say what they do by @yesbert in #538
- refactor(shell): four files move to the slice that owns them by @yesbert in #539
- refactor(shell): the rail reads as its entries, marking and label fit by @yesbert in #540
- refactor(shell): the update service keeps checking and hands off the rest by @yesbert in #541
- refactor(shell): small names in views and the side panel by @yesbert in #542
- refactor(shell): the theme token list and the plugin layer are two files by @yesbert in #543
- refactor(shell): the composition checks are pure functions by @yesbert in #544
- refactor(shell): the address helper is named for what it answers by @yesbert in #545
- refactor(shell): the public barrel reads by slice by @yesbert in #546
- refactor(shell): what draws a surface in a pane has its own folder by @yesbert in #547
- refactor(shell): the content region's pieces are named for what they draw by @yesbert in #548
- refactor(shell): the iframe surface keeps the component and hands off the rest by @yesbert in #549
- refactor(shell): typed surface route data and one route builder by @yesbert in #550
- refactor(shell): the content route table and the router are two files by @yesbert in #551
- refactor(shell): the pane targets are one list and say what they answer by @yesbert in #552
- refactor(shell): the tab context menu takes one deps object by @yesbert in #553
- refactor(shell): rail and view curation are two row sources by @yesbert in #554
- refactor(shell): smaller content items read plainly by @yesbert in #555
- refactor(shell): the pane tree's read-only walks are built on leavesOf by @yesbert in #556
- refactor(shell): one pane reference, one name for carrying the address by @yesbert in #557
- refactor(shell): view pane paths go through two helpers by @yesbert in #558
- refactor(shell): the pane tree service holds the arrangement and its commands by @yesbert in #559
- refactor(shell): the retained view stash keeps its lifecycle by @yesbert in #560
- refactor(shell): the retention policy file holds the policy by @yesbert in #561
- refactor(shell): unsaved work is found, saved and asked about in one place by @yesbert in #562
- refactor(shell): the tab strip hands off overflow and its menu context by @yesbert in #563
- refactor(shell): the drag service keeps drag state; drop zones loop by @yesbert in #564
- refactor(shell): smaller pane items say what they mean by @yesbert in #565
- test(shell): the retention spec is split by the file it tests by @yesbert in #566
- refactor(shell): plugin files move to the folders their names promise by @yesbert in #567
- refactor(shell): the catalog entry and the installed record are two files by @yesbert in #568
- refactor(shell): the contribution registry has a slice of its own by @yesbert in #569
- refactor(shell): one word for each step of a plugin's lifecycle by @yesbert in #570
- refactor(shell): enablement alone decides that a deployed plugin is on by @yesbert in #571
- refactor(shell): one store consent service; the disable guard answers by @yesbert in #572
- refactor(shell): one service holds the plugin catalog by @yesbert in #573
- refactor(shell): store figures are pipes, one plugin icon component by @yesbert in #574
- refactor(shell): the registry filters omissions once, badges apart by @yesbert in #575
- refactor(shell): the plugin context injects, facades and rules apart by @yesbert in #576
- refactor(shell): the frame RPC reads in parts by @yesbert in #577
- refactor(shell): plugin state admits a write, then indexes its key by @yesbert in #578
- refactor(shell): the built-in and the starting workspace have own names by @yesbert in #579
- refactor(shell): one definition baseline, one panel declaration by @yesbert in #580
- refactor(shell): foundation keeps only what fits its rule by @yesbert in #581
- refactor(shell): the workspace declaration is a folder of its own by @yesbert in #582
- refactor(shell): the workspace service delegates to four parts by @yesbert in #583
- refactor(shell): workspace/baseline/ becomes catalog/ and working-state/ by @yesbert in #584
- refactor(shell): the workspace dialog's rows share their markers by @yesbert in #585
- refactor(shell): the translation loader reads in parts by @yesbert in #586
- refactor(shell): persistence groups its cross-tab and identity parts by @yesbert in #587
- refactor(shell): settings/ becomes settings-dialog/ by @yesbert in #588
- refactor(shell): the small names of the workspace and state area by @yesbert in #589
- test(shell): workspace specs by concept, waits named for what they wait by @yesbert in #590
- refactor(shell): commands/ splits into keyboard/ and palette/ by @yesbert in #591
- refactor(shell): the frame-kit entry moves to surface-kit/ by @yesbert in #592
- refactor(shell): the menu service resolves, draws and presents apart by @yesbert in #593
- refactor(shell): one alias table for chords, one claims function by @yesbert in #594
- refactor(shell): the palette builds rows outside the component by @yesbert in #595
- refactor(shell): one element list and shared element behaviours by @yesbert in #596
- refactor(shell): the select, tooltip and nav tree read in parts by @yesbert in #597
- refactor(shell): the frame entry keeps its declarations, jobs move out by @yesbert in #598
- refactor(shell): capture reads the frame's wire shape, one word each by @yesbert in #599
- refactor(shell): dialogs build footers once and decide results once by @yesbert in #600
- refactor(shell): the icon registry is the store; one ownership check by @yesbert in #601
- docs(packages): the plugin-sdk and frame-kit READMEs say what they are by @yesbert in #602
- docs(plugin-sdk): the smaller contract files say what holds now by @yesbert in #603
- docs(plugin-sdk): plugin, surface and content-route say what holds now by @yesbert in #604
- docs(plugin-sdk): every ctx member says which capability it needs by @yesbert in #605
- docs(plugin-sdk): one term per concept, and hovers that open plainly by @yesbert in #606
- refactor(plugin-sdk): the contract's files sit in folders by theme by @yesbert in #607
- refactor(plugin-sdk): the host's route and view shapes read from the surface by @yesbert in #608
- docs(shell, ag-ui): the published JSDoc says what holds now by @yesbert in #609
- refactor(frame-kit): one source for the elements, named build steps by @yesbert in #610
- chore(platform): workspace configuration names only what exists by @yesbert in #611
- refactor(devkit): four files named after what they hold by @yesbert in #612
- refactor(tooling): one source for ids, casing, choices and the version by @yesbert in #613
- refactor(devkit): the Nx generators map their options like every route by @yesbert in #614
- refactor(devkit): each scaffold sits beside its recipe by @yesbert in #615
- refactor(devkit): registering a plugin is rendered once by @yesbert in #616
- refactor(devkit): the Nx generators apply amendments through one function by @yesbert in #617
- refactor(devkit): region ids are named once and interpolated by @yesbert in #618
- refactor(cli): run.ts dispatches through a command table by @yesbert in #619
- refactor(cli): one reader of angular.json, and amending cut by concern by @yesbert in #620
- refactor(cli): init steps are a union, flags are typed once by @yesbert in #621
- refactor(tooling): resolved inputs and validator helpers say what they are by @yesbert in #622
- refactor(devkit): the weaver recipe resolves in one file and templates in another by @yesbert in #623
- docs(devkit): the scaffolded code reads without simulating it by @yesbert in #624
- refactor(tooling): one bundle helper for both bins, test fixtures written once by @yesbert in #625
- docs(tooling): the READMEs describe the packages as they are by @yesbert in #626
- chore(testbed): drop the Aspire proxy and the JUnit reporter nobody reads by @yesbert in #627
- refactor(testbed): the weaver's files sit in folders named for what they exercise by @yesbert in #628
- refactor(testbed): one persisted choice, and principals known by name by @yesbert in #629
- refactor(testbed): each capability registers its own contributions by @yesbert in #630
- refactor(testbed): containers are called containers in the code too by @yesbert in #631
- refactor(testbed): names say what they serve, and the leftovers go by @yesbert in #632
- refactor(testbed): main.ts reads as the table of contents of the distribution by @yesbert in #633
- refactor(testbed): the static sandbox is named for the rest route it exercises by @yesbert in #634
- refactor(testbed): the store plugins say what they register by @yesbert in #635
- refactor(testbed): the RPC sandbox page is a skeleton its script fills by @yesbert in #636
- refactor(testbed): the example plugins' scripts are linted by @yesbert in #637
- refactor(platform): the two platform apps ship one icon set by @yesbert in #638
- test(testbed-weaver): one Transloco setup for the component specs by @yesbert in #639
- fix(testbed): the RPC sandbox page is stamped from a template once its script runs by @yesbert in #640
- test(testbed-e2e): helpers copied between specs live in support/helpers.ts by @yesbert in #641
- docs(openspec): record the owner's decisions of 2026-09-25 by @yesbert in #642
- docs(openspec): propose generated components take the application's prefix by @yesbert in #643
- fix(shell): invocations waiting side by side no longer count as a chain by @yesbert in #644
- fix(shell): a plugin state value with no JSON form is refused by @yesbert in #645
- fix(frame-kit): a state write made before the connection is sent once connected by @yesbert in #646
- feat(plugin-sdk): a plugin's state handle tells a listener when its value arrives by @yesbert in #647
- test(shell): the choices of a command in the page are read when used by @yesbert in #648
- fix(shell): a select option draws an icon the registry knows by @yesbert in #649
- fix(shell): a plugin the operator deployed offers no install in the store by @yesbert in #650
- fix(shell): the plugin store keeps its detail reachable on a narrow screen by @yesbert in #651
- fix(ag-ui): the agent connection answers every call a run leaves open by @yesbert in #652
- fix(demo): a cancelled customer is not created, and an accepted quote is not sent by @yesbert in #653
- chore: bump version to 0.14.2 by @yesbert in #654
Full Changelog: v0.14.1...v0.14.2