Skip to content

feat: plugin SDK (identity, owned computations, recipes, applications, welcome tiles) - #374

Merged
PierreRaybaut merged 50 commits into
developfrom
feat/plugin-sdk-implementation
Oct 7, 2026
Merged

PierreRaybaut merged 50 commits into
developfrom
feat/plugin-sdk-implementation

Conversation

@PierreRaybaut

@PierreRaybaut PierreRaybaut commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Plugin SDK for DataLab desktop: stable plugin identities, plugin-owned computations, headless recipes, packaged examples, an Applications catalog, welcome page tiles and a plugin project generator. Validated with the Camera and Pulse characterization pilots.

Contents

  • Stable plugin identity: PLUGIN_INFO.id (with a module/class fallback for legacy plugins), typed capabilities, enablement stored by ID with migration of legacy names, and plugin discovery through the datalab.plugins entry point group.
  • Plugin-owned computations: register_computations() hook, feature IDs of the form <plugin_id>:<local_id>, automatic removal on disable/reload/uninstall, and rollback if registration fails.
  • Headless recipes: versioned, typed recipe contracts, a transactional Desktop recipe runner, and recipe run provenance stored in output metadata.
  • Examples and Applications: packaged and generated plugin examples, and a non-modal top-level Applications catalog (recipes, examples, launchers).
  • Welcome page tiles: application plugins add tiles to a new Applications section at the top of the welcome page. By default, one tile per plugin (name, description and PluginInfo.icon) opens its page in the catalog; plugins may declare several WelcomeTile values in WELCOME_TILES, each with an optional package:path icon and launcher method. The section keeps a configurable number of rows (two by default): applications come pinned first, then recently used, then by name, may be hidden, and a last tile opens the catalog for those left out. Secondary tiles are shown when there is room and otherwise move to the menu of the main tile; the catalog gains a search field and the same welcome page options. Tiles refresh when plugins are loaded, reloaded or disabled; launcher errors are reported without closing DataLab.
  • Plugin icons: PluginInfo.icon is shown in the Applications catalog, on welcome page tiles and in the Configure plugins... dialog; plugins without icon use a generic one.
  • Plugin project generator: datalab-plugin create produces a layered project (core / workflow / adapters) with tests, docs and Ruff-clean code.
  • Large campaigns: batched object loading and refresh for HDF5 workspaces and multi-object recipe results.

Merges with develop

develop was first merged in 49a3835 after two preparatory PRs (#372 deterministic feature lookup, #373 Qt 6 preview test fix) and SigimaX PR DataLab-Platform/SigimaX#7 (qthelpers fixes previously carried by this branch).

  • Feature identity follows develop's naming: built-in feature IDs are function names; plugin feature IDs are namespaced by their owner plugin (or module for legacy unowned plugins). The computing registry is keyed by ID.
  • Metadata, History recording and replay, re-processing and analysis recomputation all carry the feature ID, so plugin features that reuse a built-in function are never confused with the built-in.
  • Follow-up fixes: calc and the Web API only fall back to another panel when a feature is not found; deleting a plugin analysis result clears its parameters; owned features record their plugin as origin.
  • SDK release notes moved to 1.4; French UI and documentation catalogs are complete (no empty or fuzzy entries).

develop was merged again in f783180 to bring the welcome page (#375), on which the welcome page tiles build, and in 9d6ace0 to bring the welcome page shown whenever the current panel is empty (#376).

Validation

  • Full test suite: 741 passed, 3 skipped.
  • Camera pilot: 132 passed; Pulse pilot: 82 passed. Their feat/plugin-sdk-implementation branches add dedicated SVG icons; Camera relies on the default tile, Pulse declares two tiles (application page and demo campaign).

Assisted-by: Claude Opus 5.5

Persist plugin enablement by namespaced IDs with legacy migration.

Assisted-by: GPT-5.6 Sol
Introduce stable feature IDs, ownership-aware cleanup, and reload-safe computation registration.

Assisted-by: GPT-5.6 Sol
Expose immutable capability metadata and display translated labels in the plugin configuration dialog.

Assisted-by: GPT-5.6 Sol
Combine pip-installed entry points with convention-based discovery, preserving provenance and rejecting stable ID collisions.

Assisted-by: GPT-5.6 Sol
Define typed inputs, named outputs, scalar-result anchors, diagnostics,
and technology-neutral progress and cancellation for plugin recipes.

Assisted-by: GPT-5.6 Sol
Validate recipe inputs and commit cross-panel outputs atomically.
Compensate partial workspace mutations when insertion fails.

Assisted-by: GPT-5.6 Sol
Attach versioned run records to every successful recipe output.
Preserve shared UUID provenance across JSON and HDF5 round trips.

Assisted-by: GPT-5.6 Sol
Resolve example workspaces through importlib.resources.
Validate recipe links and open native HDF5 examples on Desktop.

Assisted-by: GPT-5.6 Sol
Format long identity constants so generated plugin projects pass their bundled Ruff checks without manual edits.

Assisted-by: GPT-5.6 Sol
Assisted-by: GitHub Copilot
Add explicit plugin-owned recipe launchers, safeguarded example
opening, and documentation links to the Applications catalog.

Assisted-by: GitHub Copilot
Assisted-by: Claude Fable 5
Allow application plugins to materialize in-memory scientific objects with immutable recipe defaults while preserving packaged resource examples.

Assisted-by: GPT-5.6 Sol
Render wrapped titles, versions and descriptions directly in catalog rows and improve the dialog layout for easier scanning.

Assisted-by: GPT-5.6 Sol
Route open_example() through materialize_example() so in-memory campaigns load into the panels, and keep the data for parameter prefill.

Assisted-by: GPT-5.6 Sol
- Refactored `BasePlotHandler` to improve plot item management, including the introduction of a mapping for plot item OIDs to enhance retrieval efficiency.
- Implemented atomic batch operations for adding objects in `ObjectModel`, ensuring order preservation and rollback capabilities on failure.
- Updated `RecipeRunner` to batch outputs by panel, optimizing the handling of recipe results and reducing unnecessary refreshes.
- Enhanced HDF5 workspace loading to support batch processing of signals and images, improving performance for large datasets.
- Added unit tests to validate new functionalities and ensure robustness in bulk operations and context management.
- Improved signal blocking behavior in `block_signals` to restore previous states accurately.
- Updated release notes to reflect significant performance improvements and new features.
Built-in feature IDs follow develop's function names; plugin feature IDs are namespaced by their owner plugin (or module). SDK notes move to 1.4.

Assisted-by: Claude Opus 5.5
Owned features also record their plugin as origin, so missing-plugin warnings name it.

Assisted-by: Claude Opus 5.5
Assisted-by: Claude Opus 5.5
@PierreRaybaut
PierreRaybaut marked this pull request as draft October 5, 2026 19:57
@PierreRaybaut PierreRaybaut changed the title feat: plugin SDK (identity, owned computations, recipes, applications) feat: plugin SDK (identity, owned computations, recipes, applications, welcome tiles) Oct 6, 2026
@ThomasMalletCodra ThomasMalletCodra added this to the V1.4.0 milestone Oct 6, 2026
… refresh (#382)

* feat(applications): collapsible list and method accordion

Assisted-by: Claude Opus 5.5

* feat(welcome): align the Desktop welcome page with DataLab-Web

Assisted-by: Claude Opus 5.5
…plementation

# Conflicts:
#	datalab/locale/fr/LC_MESSAGES/datalab.po
#	doc/locale/fr/LC_MESSAGES/release_notes/release_1.04.po
#	doc/release_notes/release_1.04.md
…ls (#384)

* feat(applications): guide users to set the metadata methods expect

Assisted-by: Claude Opus 5.5

* feat(plugins): menu entries, selection gating and instruments for tools

Assisted-by: Claude Opus 5.5
@PierreRaybaut
PierreRaybaut marked this pull request as ready for review October 7, 2026 18:25
@PierreRaybaut
PierreRaybaut merged commit 0ec52c3 into develop Oct 7, 2026
5 of 6 checks passed
@PierreRaybaut
PierreRaybaut deleted the feat/plugin-sdk-implementation branch October 7, 2026 20:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants