Skip to content

v0.20.0

Choose a tag to compare

@miragon-release-please miragon-release-please released this 13 Oct 10:56
c673ea1

0.20.0 (2026-10-13)

⚠ BREAKING CHANGES

  • widget-shell: inlineRowBudget, DEFAULT_INLINE_ROWS and InlineBudget.rows are gone, replaced by the measured fit (InlineFitBox, useInlineRows). RowsBudgeted takes the paged list's rows. PagedViewData gains fit and footerLabels.
  • camunda7_show_user_profile, camunda7_user_profile_data and camunda7_save_user_profile are renamed to camunda7_show_settings, camunda7_settings_data and camunda7_save_settings; the widget id camunda7:user-profile is camunda7:settings; camunda7_save_settings no longer takes language (use shell_save_settings). AppShellProviders and ProfileGate take no profileTool. settingsLayout and filterLayoutToWidgets come from @miragon-ai/widget-shell/widgets, and camunda7's cockpitViews take no view context. A composition root passes { profileStore, allowSave } to createShellPlugin and spreads shellWidgets into its widget registry.
  • camunda7: the view payloads replace bpmnXml with diagramDefinitionId (camunda7) or carry no diagram at all (analytics_show_bpmn_heatmap, analytics_bpmn_heatmap_data). The widgets read the XML from the new app-only feeds camunda7_bpmn_xml_data and analytics_bpmn_xml_data. BpmnDiagram takes definitionId (+ engineId) instead of bpmnXml; BpmnCanvas draws XML already in hand.
  • widget-shell: buildDataFeedResult returns { content } only: the feed payload is JSON text, no structuredContent. Read it with the toolkit's parseToolResult. The camunda7:bpmnXml key of camunda7:load-process-instance is gone.
  • widget-shell: installToolCallLogging is removed from @miragon-ai/widget-shell/server (mcp-use logs requests itself). MCP_DEBUG_LEVEL is no longer a known variable; use mcp-use's MCP_USE_LOG_LEVEL. A module named twice in MCP_ACTIVE_MODULES fails the boot.
  • analytics: the duration histograms are now camunda_*_duration_milliseconds and record milliseconds; the incident counters gain process_definition_version; VersionCompareResult.notes is removed. Upgrade the engine plugin and the analytics client together; dashboards and alert rules of your own need the new names and the reading rules in metrics-contract.json. A clustered engine needs a unique service.instance.id per node.

Features

  • analytics: millisecond histograms, versioned incidents, honest first counts and committed-only metrics (#388) (28dfa26), closes #337
  • camunda7: one action group per view, every action one button size (#405) (483d386)
  • camunda7: warn at boot that passthrough auth is for trusted single-audience setups only (#390) (3c39be9), closes #330
  • the shell owns the UI language and the settings page (#397) (8fa4fb3), closes #346
  • widget-shell: an inline confirmation opens beside its opener (#400) (ce80c39), closes #344
  • widget-shell: focus after navigation, fullscreen in a drill, no pip, an outlier floor (#399) (4657df5), closes #344
  • widget-shell: inline lists fit the host's height by measuring their rows (#404) (6791363)
  • widget-shell: inline views are cards that fit the host's height budget (#398) (1b563e2), closes #396
  • widget-shell: views ask for a border, the bundle gets a budget (#401) (266ab71), closes #344

Bug Fixes

  • camunda7: row actions have the one action size, level with their icon buttons (#408) (84fcb31)
  • camunda7: the instances list finds an instance by its id, and pages in one order (#402) (5207a8e)
  • docs and skills match the code, guarded; connectors declare the toolkit-ui peer (#395) (7fff7f4), closes #345
  • widget-shell: the segmented toggle's selection follows its rounded corners (#406) (d0423e2)

Code Refactoring

  • camunda7: views name the diagram they draw; the widgets read its XML by id (#394) (4169059), closes #342
  • widget-shell: feeds answer once, diagrams are read once, summaries claim no UI (#393) (8bd2e51), closes #342
  • widget-shell: one request log, one module per name, honest tool-call metrics (#392) (4665445), closes #346