@goodandready/dsh-dsml-artifact-guard 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ---
9
9
 
10
+ ## 0.2.4
11
+
12
+ ### Fixed
13
+ - The settings card no longer waits for the removed `settingsScope` service. It uses `configForms` on current DeepSeek Harness (#41).
14
+
15
+ ## [0.2.3] - 2026-09-19
16
+
17
+ ### Fixed
18
+ - **Settings reachable again on the plugin's own page**: the card registered into
19
+ `settings.plugin.item` / `plugins.row.config`, and the current DSH core
20
+ (0.1.6-alpha.2) only renders a plugin's configuration page for entries registered
21
+ in the plugin list seat `plugins.item` — that is how `dsh-agentrouter` and
22
+ `dsh-agent-orchestrator` show their settings. The view-aware `PluginItem` is now
23
+ registered there as well (`id: 'dsh-dsml-artifact-guard'`, order 95, static label),
24
+ with the row seat and the legacy card kept as fallbacks.
25
+ - The render path was hardened on the way: `PluginCard` is wrapped in its own error
26
+ boundary so a throw inside this card cannot take the whole client batch down.
27
+
10
28
  ## [0.2.2] - 2026-09-18
11
29
 
12
30
  ### Fixed
package/lib/client.js CHANGED
@@ -102,9 +102,9 @@ window.__ModuleLoader__.load({
102
102
  });
103
103
 
104
104
  const scopeRef = React.useRef(null);
105
- if (!scopeRef.current && _ctx && _ctx.settingsScope) {
105
+ if (!scopeRef.current && _ctx && _ctx.configForms) {
106
106
  try {
107
- scopeRef.current = _ctx.settingsScope.bind({ namespace: NS });
107
+ scopeRef.current = _ctx.configForms.get(NS);
108
108
  } catch (e) {
109
109
  scopeRef.current = null;
110
110
  }
@@ -541,7 +541,7 @@ window.__ModuleLoader__.load({
541
541
  return React.createElement(PluginCard, Object.assign({}, props, { bare: true }));
542
542
  }
543
543
 
544
- exports.inject = ['slots', 'settingsScope', 'locale'];
544
+ exports.inject = ['slots', 'configForms', 'locale'];
545
545
  exports.apply = function apply(ctx) {
546
546
  if (typeof ctx.locale?.register === 'function') {
547
547
  try {
@@ -591,6 +591,26 @@ window.__ModuleLoader__.load({
591
591
  )
592
592
  );
593
593
 
594
+ // List seat (plugins.item): the seat the Plugins page really renders as the
595
+ // plugin's own page with its configuration — the page draws the title, icon
596
+ // and crumb and asks for view 'summary' (the card's one-liner) or view 'page'
597
+ // (the form), both served by PluginItem. The label is a static string on
598
+ // purpose: it is resolved while the page renders, and a locale lookup there
599
+ // would take the whole client batch down with it.
600
+ registerSlotWhenReady('plugins.item', () =>
601
+ ctx.slots.register(
602
+ {
603
+ name: 'plugins.item',
604
+ id: 'dsh-dsml-artifact-guard',
605
+ order: 95,
606
+ label: () => 'DSML Artifact Guard',
607
+ locale: NS,
608
+ inject: () => ({ ctx }),
609
+ },
610
+ PluginItem
611
+ )
612
+ );
613
+
594
614
  registerSlotWhenReady('settings.plugin.item', () =>
595
615
  ctx.slots.register(
596
616
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goodandready/dsh-dsml-artifact-guard",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Sanitizes leaked DeepSeek DSML closing tags from model text streams",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",