@goodandready/dsh-plugin-notify 0.3.0 → 0.3.2

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
@@ -4,6 +4,30 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.3.2] - 2026-09-19
8
+
9
+ ### Fixed
10
+ - **Settings reachable again on the plugin's own page**: the current core
11
+ (0.1.6-alpha.2) renders a plugin's configuration page only for entries registered
12
+ in the plugin-list seat `plugins.item` — that is how `dsh-agentrouter` and
13
+ `dsh-agent-orchestrator` show their settings, while the row seat and the legacy card
14
+ alone leave the page without the form. The view-aware card is now registered there
15
+ too (`id: 'plugin-notify'` — the row id from `cordis.patch.yml` — order 40, static
16
+ label); both older seats stay as fallbacks.
17
+
18
+ ## [0.3.1] - 2026-09-19
19
+
20
+ ### Fixed
21
+ - **Settings reachable again**: the card registered into `settings.plugin.item`, a
22
+ slot the current DSH core (0.1.6-alpha.2) no longer renders, so the plugin's
23
+ settings were unreachable. The surface now registers into the Plugins page row
24
+ seat `plugins.row.config`, keyed `@goodandready/dsh-plugin-notify#plugin-notify`
25
+ — the row id `cordis.patch.yml` declares is `plugin-notify`, not the directory
26
+ name. The plugin's row gains a configure control whose page is the settings form
27
+ (`view: 'page'`, open and without our card chrome — the host page draws the title,
28
+ icon, crumb and padding) plus a one-line state for `view: 'summary'`. The legacy
29
+ seat stays registered as a fallback for older cores.
30
+
7
31
  ## [0.3.0] - 2026-09-18
8
32
 
9
33
  ### Added
package/README.md CHANGED
@@ -5,6 +5,7 @@
5
5
  <h3>Remote IM webhooks for turn done, errors, and approval waits</h3>
6
6
 
7
7
  <p align="center">
8
+ <a href="https://www.npmjs.com/package/@goodandready/dsh-plugin-notify"><img src="https://img.shields.io/npm/v/@goodandready/dsh-plugin-notify.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
8
9
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-10b981.svg?style=for-the-badge&labelColor=064e3b" alt="license"></a>
9
10
  <a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/DSH-Plugin-8b5cf6.svg?style=for-the-badge&labelColor=2e1065" alt="DSH Plugin"></a>
10
11
  <a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-20%2B-f59e0b.svg?style=for-the-badge&labelColor=451a03" alt="Node version"></a>
@@ -88,7 +89,7 @@ graph TD
88
89
 
89
90
  ## Install
90
91
 
91
- This package is private (GitHub Packages). After you have registry access:
92
+ Install via the DSH web profile:
92
93
 
93
94
  ```sh
94
95
  dsh plugin --profile web add @goodandready/dsh-plugin-notify
package/README.ru.md CHANGED
@@ -5,6 +5,7 @@
5
5
  <h3>Удалённые IM-webhook уведомления о завершении хода, ошибке и ожидании approval</h3>
6
6
 
7
7
  <p align="center">
8
+ <a href="https://www.npmjs.com/package/@goodandready/dsh-plugin-notify"><img src="https://img.shields.io/npm/v/@goodandready/dsh-plugin-notify.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
8
9
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-10b981.svg?style=for-the-badge&labelColor=064e3b" alt="license"></a>
9
10
  <a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/DSH-Plugin-8b5cf6.svg?style=for-the-badge&labelColor=2e1065" alt="DSH Plugin"></a>
10
11
  <a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-20%2B-f59e0b.svg?style=for-the-badge&labelColor=451a03" alt="Node version"></a>
package/README.zh.md CHANGED
@@ -5,6 +5,7 @@
5
5
  <h3>回合完成、出错、等待审批时发送远程 IM Webhook 通知</h3>
6
6
 
7
7
  <p align="center">
8
+ <a href="https://www.npmjs.com/package/@goodandready/dsh-plugin-notify"><img src="https://img.shields.io/npm/v/@goodandready/dsh-plugin-notify.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
8
9
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-10b981.svg?style=for-the-badge&labelColor=064e3b" alt="license"></a>
9
10
  <a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/DSH-Plugin-8b5cf6.svg?style=for-the-badge&labelColor=2e1065" alt="DSH Plugin"></a>
10
11
  <a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-20%2B-f59e0b.svg?style=for-the-badge&labelColor=451a03" alt="Node version"></a>
package/lib/client.js CHANGED
@@ -4,6 +4,11 @@ window.__ModuleLoader__.load({
4
4
  var module = { exports: {} }
5
5
  const React = require('react')
6
6
  const NS = '@goodandready/dsh-plugin-notify'
7
+ // Plugins page row seat (DSH 0.1.6-alpha.2): key = '<package name>#<row id>'.
8
+ // The row id declared by cordis.patch.yml is 'plugin-notify' (not the folder name).
9
+ const PKG = '@goodandready/dsh-plugin-notify'
10
+ const ROW_ID = 'plugin-notify'
11
+ const ROW_CONFIG_KEY = PKG + '#' + ROW_ID
7
12
  const CHANNELS = ['feishu', 'wecom', 'dingtalk', 'slack', 'discord', 'custom']
8
13
 
9
14
  const en = {
@@ -574,8 +579,15 @@ window.__ModuleLoader__.load({
574
579
  : null,
575
580
  )
576
581
 
577
- return React.createElement('li', { className: 'pn-card' },
578
- React.createElement('button', { type: 'button', className: 'pn-head', 'aria-expanded': open, onClick: () => setOpen((v) => !v) },
582
+ // Row seat (plugins.row.config): the host page draws title/icon/crumb and the
583
+ // padding, so the summary is a one-liner and the page drops our card chrome.
584
+ if (props && props.view === 'summary') {
585
+ return React.createElement('span', { className: 'pn-sub' }, t('subtitle'))
586
+ }
587
+ const page = !!(props && props.view === 'page')
588
+
589
+ return React.createElement(page ? 'div' : 'li', { className: page ? 'pn-page' : 'pn-card' },
590
+ React.createElement('button', { type: 'button', className: 'pn-head', style: page ? { display: 'none' } : undefined, 'aria-expanded': page ? true : open, onClick: () => setOpen((v) => !v) },
579
591
  React.createElement('span', { style: { display: 'flex', flexDirection: 'column' } },
580
592
  React.createElement('span', { className: 'pn-title' }, t('title')),
581
593
  React.createElement('span', { className: 'pn-sub' }, t('subtitle')),
@@ -668,6 +680,23 @@ window.__ModuleLoader__.load({
668
680
  ctx.effect(() => ctx.locale.register(NS, { en, zh }), 'dsh-plugin-notify: dictionaries')
669
681
 
670
682
  try {
683
+ // Plugin-list seat (plugins.item) first: the seat the current core
684
+ // (0.1.6-alpha.2) renders as the plugin's own page with its configuration. The
685
+ // label is a static string on purpose — it is resolved while the page renders,
686
+ // and a locale lookup there would take the whole client batch down with it.
687
+ ctx.slots.inject('plugins.item', () => {
688
+ ctx.slots.register(
689
+ { name: 'plugins.item', id: ROW_ID, order: 40, label: () => 'Notify', locale: NS, inject: () => ({ ctx }) },
690
+ (props) => React.createElement(NotifyCard, { ...props, ctx }),
691
+ )
692
+ })
693
+ // Row seat and the legacy seat kept as fallbacks for older cores.
694
+ ctx.slots.inject('plugins.row.config', () => {
695
+ ctx.slots.register(
696
+ { name: 'plugins.row.config', key: ROW_CONFIG_KEY, locale: NS, order: 40, inject: () => ({ ctx }) },
697
+ (props) => React.createElement(NotifyCard, { ...props, ctx }),
698
+ )
699
+ })
671
700
  ctx.slots.inject('settings.plugin.item', () => {
672
701
  ctx.slots.register(
673
702
  { name: 'settings.plugin.item', key: NS, locale: NS, order: 40, inject: () => ({ ctx }) },
@@ -675,7 +704,7 @@ window.__ModuleLoader__.load({
675
704
  )
676
705
  })
677
706
  } catch (e) {
678
- console.warn('[dsh-plugin-notify] settings.plugin.item failed', e)
707
+ console.warn('[dsh-plugin-notify] settings seats failed', e)
679
708
  }
680
709
 
681
710
  let currentSettings = {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goodandready/dsh-plugin-notify",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "DSH plugin: audio chimes, cross-session toasts, desktop push, and IM webhooks for turn completion, errors, and approvals.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -56,5 +56,16 @@
56
56
  },
57
57
  "publishConfig": {
58
58
  "access": "public"
59
- }
59
+ },
60
+ "author": "GooDAnDReaDY <support@goodandready.app>",
61
+ "keywords": [
62
+ "dsh",
63
+ "dsh-plugin",
64
+ "deepseek-harness",
65
+ "notifications",
66
+ "webhooks",
67
+ "desktop-push",
68
+ "audio-chimes",
69
+ "toasts"
70
+ ]
60
71
  }