Skip to content

v0.14.2

Choose a tag to compare

@github-actions github-actions released this 25 Sep 14:03
· 90 commits to main since this release
ad3c6c1

Changed

  • Two element tags inside the shell were renamed: lw-content-area is now lw-address-pane-header, and lw-content-secondary-pane is now lw-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 how activate() waits for the store. A test double that builds a StateHandle by hand needs the member too.
  • The agent connection's flush() answers one open call per request (#652): call it until it answers null once 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