dsh-messager 0.1.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.
Files changed (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +86 -0
  3. package/README.md +241 -0
  4. package/assets/icon.png +0 -0
  5. package/cordis.patch.yml +11 -0
  6. package/lib/channels/feishu.d.ts +58 -0
  7. package/lib/channels/feishu.d.ts.map +1 -0
  8. package/lib/channels/feishu.js +77 -0
  9. package/lib/channels/feishu.js.map +1 -0
  10. package/lib/channels/system.d.ts +26 -0
  11. package/lib/channels/system.d.ts.map +1 -0
  12. package/lib/channels/system.js +73 -0
  13. package/lib/channels/system.js.map +1 -0
  14. package/lib/client.js +2001 -0
  15. package/lib/client.js.map +1 -0
  16. package/lib/config-route.d.ts +55 -0
  17. package/lib/config-route.d.ts.map +1 -0
  18. package/lib/config-route.js +170 -0
  19. package/lib/config-route.js.map +1 -0
  20. package/lib/config-shared.d.ts +28 -0
  21. package/lib/config-shared.d.ts.map +1 -0
  22. package/lib/config-shared.js +7 -0
  23. package/lib/config-shared.js.map +1 -0
  24. package/lib/config.d.ts +82 -0
  25. package/lib/config.d.ts.map +1 -0
  26. package/lib/config.js +59 -0
  27. package/lib/config.js.map +1 -0
  28. package/lib/index.d.ts +15 -0
  29. package/lib/index.d.ts.map +1 -0
  30. package/lib/index.js +152 -0
  31. package/lib/index.js.map +1 -0
  32. package/lib/notify.d.ts +75 -0
  33. package/lib/notify.d.ts.map +1 -0
  34. package/lib/notify.js +157 -0
  35. package/lib/notify.js.map +1 -0
  36. package/lib/settings.d.ts +23 -0
  37. package/lib/settings.d.ts.map +1 -0
  38. package/lib/settings.js +23 -0
  39. package/lib/settings.js.map +1 -0
  40. package/lib/signals.d.ts +57 -0
  41. package/lib/signals.d.ts.map +1 -0
  42. package/lib/signals.js +52 -0
  43. package/lib/signals.js.map +1 -0
  44. package/lib/templates.d.ts +40 -0
  45. package/lib/templates.d.ts.map +1 -0
  46. package/lib/templates.js +107 -0
  47. package/lib/templates.js.map +1 -0
  48. package/lib/types/client/card-controller.d.ts +171 -0
  49. package/lib/types/client/card-controller.d.ts.map +1 -0
  50. package/lib/types/client/config.d.ts +20 -0
  51. package/lib/types/client/config.d.ts.map +1 -0
  52. package/lib/types/client/diff.d.ts +26 -0
  53. package/lib/types/client/diff.d.ts.map +1 -0
  54. package/lib/types/client/fetch-scope.d.ts +29 -0
  55. package/lib/types/client/fetch-scope.d.ts.map +1 -0
  56. package/lib/types/client/index.d.ts +24 -0
  57. package/lib/types/client/index.d.ts.map +1 -0
  58. package/lib/types/client/locales.d.ts +92 -0
  59. package/lib/types/client/locales.d.ts.map +1 -0
  60. package/lib/types/client/section.d.ts +16 -0
  61. package/lib/types/client/section.d.ts.map +1 -0
  62. package/lib/types/client/settings-form.d.ts +22 -0
  63. package/lib/types/client/settings-form.d.ts.map +1 -0
  64. package/lib/types/config-shared.d.ts +28 -0
  65. package/lib/types/config-shared.d.ts.map +1 -0
  66. package/lib/types/config.d.ts +82 -0
  67. package/lib/types/config.d.ts.map +1 -0
  68. package/package.json +96 -0
@@ -0,0 +1,92 @@
1
+ /**
2
+ * dsh-messager 客户端字典(zh / en),注册进 DSH locale 服务
3
+ * (ctx.locale.register('dsh-messager', { zh, en }))。
4
+ * 键集合必须 zh/en 一致(tests/locales.spec.ts 校验)。
5
+ */
6
+ declare module '@deepseek-ai/dsh-client-ui-slots' {
7
+ interface LocaleNamespaceMap {
8
+ /** 本插件字典键(typed bind / slot locale 声明)。 */
9
+ 'dsh-messager': keyof typeof zh;
10
+ }
11
+ }
12
+ export declare const zh: {
13
+ nav: string;
14
+ 'section.description': string;
15
+ 'group.triggers': string;
16
+ 'group.system': string;
17
+ 'group.browser': string;
18
+ 'group.feishu': string;
19
+ 'group.message': string;
20
+ 'field.triggers.interaction': string;
21
+ 'field.triggers.completed': string;
22
+ 'field.triggers.error': string;
23
+ 'field.system.enabled': string;
24
+ 'field.system.icon': string;
25
+ 'field.system.verbosity': string;
26
+ 'field.browser.enabled': string;
27
+ 'field.browser.icon': string;
28
+ 'field.browser.onlyWhenHidden': string;
29
+ 'field.browser.verbosity': string;
30
+ 'field.feishu.enabled': string;
31
+ 'field.feishu.webhookUrl': string;
32
+ 'field.feishu.secret': string;
33
+ 'field.feishu.timeoutMs': string;
34
+ 'field.feishu.verbosity': string;
35
+ 'field.message.titlePrefix': string;
36
+ 'field.message.includeSessionTitle': string;
37
+ 'field.message.guiUrl': string;
38
+ 'hint.system.icon': string;
39
+ 'hint.feishu.secret': string;
40
+ 'hint.message.titlePrefix': string;
41
+ 'action.save': string;
42
+ 'action.saving': string;
43
+ 'action.discard': string;
44
+ 'action.reset': string;
45
+ 'badge.overridden': string;
46
+ 'status.readOnly': string;
47
+ 'status.saveFailed': string;
48
+ 'status.invalidInput': string;
49
+ 'status.invalidField': string;
50
+ 'status.unavailable': string;
51
+ };
52
+ export declare const en: {
53
+ nav: string;
54
+ 'section.description': string;
55
+ 'group.triggers': string;
56
+ 'group.system': string;
57
+ 'group.browser': string;
58
+ 'group.feishu': string;
59
+ 'group.message': string;
60
+ 'field.triggers.interaction': string;
61
+ 'field.triggers.completed': string;
62
+ 'field.triggers.error': string;
63
+ 'field.system.enabled': string;
64
+ 'field.system.icon': string;
65
+ 'field.system.verbosity': string;
66
+ 'field.browser.enabled': string;
67
+ 'field.browser.icon': string;
68
+ 'field.browser.onlyWhenHidden': string;
69
+ 'field.browser.verbosity': string;
70
+ 'field.feishu.enabled': string;
71
+ 'field.feishu.webhookUrl': string;
72
+ 'field.feishu.secret': string;
73
+ 'field.feishu.timeoutMs': string;
74
+ 'field.feishu.verbosity': string;
75
+ 'field.message.titlePrefix': string;
76
+ 'field.message.includeSessionTitle': string;
77
+ 'field.message.guiUrl': string;
78
+ 'hint.system.icon': string;
79
+ 'hint.feishu.secret': string;
80
+ 'hint.message.titlePrefix': string;
81
+ 'action.save': string;
82
+ 'action.saving': string;
83
+ 'action.discard': string;
84
+ 'action.reset': string;
85
+ 'badge.overridden': string;
86
+ 'status.readOnly': string;
87
+ 'status.saveFailed': string;
88
+ 'status.invalidInput': string;
89
+ 'status.invalidField': string;
90
+ 'status.unavailable': string;
91
+ };
92
+ //# sourceMappingURL=locales.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,2CAA2C;QAC3C,cAAc,EAAE,MAAM,OAAO,EAAE,CAAA;KAChC;CACF;AAED,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Cd,CAAA;AAED,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Cd,CAAA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 设置页分区组件:渲染在 设置 → 「通知&信使」分区(Agent预设下方,动态 order)。
3
+ *
4
+ * 数据走 webServer 配置路由(见 src/config-route.ts / fetch-scope.ts),
5
+ * 不受 Web 设置白名单门控 —— 发行版(未打补丁)同样可读写。
6
+ * 表单体复用 MessagerSettingsForm;文案经 face 平铺的 t() 取当前语言。
7
+ */
8
+ import type { PropsRuntime, InjectFace } from '@deepseek-ai/dsh-client-ui-slots';
9
+ import type { MessagerCardFace } from './card-controller.js';
10
+ export type MessagerSectionProps = PropsRuntime<'settings.section'> & InjectFace<MessagerCardFace>;
11
+ /**
12
+ * dsh-messager 设置分区(设置页「通知&信使」)。
13
+ * @param props - 槽位 owner props + 注入面(useMessagerCard + 动作 + t)。
14
+ */
15
+ export declare function MessagerSection(props: MessagerSectionProps): import("react").JSX.Element;
16
+ //# sourceMappingURL=section.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../../src/client/section.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAEhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAG5D,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC,kBAAkB,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;AA+BlG;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,+BAe1D"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * dsh-messager 设置表单体(设置页分区共用)。
3
+ *
4
+ * 渲染全部字段分组(FieldRow)+ 底部操作栏(放弃修改 / 保存),
5
+ * 样式沿用 DSH 主题变量(--dsw-alias-*),与 ValueField 布局同源。
6
+ * 文案经 t() 取当前语言(字典见 locales.ts);字段 label/hint 为翻译键。
7
+ */
8
+ import type { MessagerCardActions, MessagerCardState } from './card-controller.js';
9
+ /** 分组标题的翻译键(键见 locales.ts;导出供字典一致性测试)。 */
10
+ export declare const GROUP_TITLE_KEYS: Record<string, string>;
11
+ /**
12
+ * 设置表单体:全部字段分组 + 底部操作栏。
13
+ * @param state - 控制器快照(useMessagerCard 的返回)。
14
+ * @param actions - 控制器动作(edit/reset/save/discard)。
15
+ * @param t - 翻译函数(键 → 当前语言文案)。
16
+ */
17
+ export declare function MessagerSettingsForm({ state, actions, t }: {
18
+ state: MessagerCardState;
19
+ actions: MessagerCardActions;
20
+ t: (key: string) => string;
21
+ }): import("react").JSX.Element;
22
+ //# sourceMappingURL=settings-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-form.d.ts","sourceRoot":"","sources":["../../../src/client/settings-form.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAiB,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAEjG,0CAA0C;AAC1C,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMnD,CAAA;AA2ND;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;IAC1D,KAAK,EAAE,iBAAiB,CAAA;IACxB,OAAO,EAAE,mBAAmB,CAAA;IAC5B,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;CAC3B,+BAqDA"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 配置路由的跨端共享类型(host 与浏览器 client 共用,不得 import 任何
3
+ * Node/浏览器专属模块)。
4
+ */
5
+ /** 配置路由路径(挂在 DSH webServer 上,同源访问)。 */
6
+ export declare const CONFIG_PATH = "/dsh-messager/config";
7
+ /** client ScopeLike 快照同构的配置视图。 */
8
+ export interface ConfigView {
9
+ status: 'ready' | 'unavailable';
10
+ value: unknown;
11
+ user: unknown;
12
+ base: unknown;
13
+ writable: boolean;
14
+ mode: 'host';
15
+ revision?: number;
16
+ }
17
+ /** client ScopeWriteOp 同构的写操作。 */
18
+ export interface ConfigWriteOp {
19
+ op: 'set' | 'unset';
20
+ path: string[];
21
+ value?: unknown;
22
+ }
23
+ /** POST /dsh-messager/config 的请求体。 */
24
+ export interface ConfigWriteBody {
25
+ ops: ConfigWriteOp[];
26
+ expectedRevision?: number;
27
+ }
28
+ //# sourceMappingURL=config-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-shared.d.ts","sourceRoot":"","sources":["../../src/config-shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,uCAAuC;AACvC,eAAO,MAAM,WAAW,yBAAyB,CAAA;AAEjD,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,GAAG,aAAa,CAAA;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,KAAK,GAAG,OAAO,CAAA;IACnB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,aAAa,EAAE,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * dsh-messager 配置模型。
3
+ *
4
+ * 本 schema 同时承担两个角色:
5
+ * - host 端的 Loader config(cordis.yml 中该插件行的 `config:`,成为 settings 命名空间的 base 层);
6
+ * - `ctx.settings.register('messager', Config, { base })` 的命名空间 schema,
7
+ * 因此 Web 设置页会自动渲染配置表单,用户层可覆盖 base。
8
+ *
9
+ * 有效值优先级:schema 默认值 → base(cordis.yml)→ 用户层(设置页)。
10
+ */
11
+ import Schema from '@deepseek-ai/schemastery';
12
+ /** 通知内容繁复度。 */
13
+ export type Verbosity = 'minimal' | 'normal' | 'detailed';
14
+ /** 触发时机开关(需求 1:什么时候通知)。 */
15
+ export interface TriggerConfig {
16
+ /** 会话需要交互(审批 / 提问 / 计划待审)时通知。 */
17
+ interaction: boolean;
18
+ /** 任务执行完毕时通知。 */
19
+ completed: boolean;
20
+ /** 任务出错时通知。 */
21
+ error: boolean;
22
+ }
23
+ /** 系统通知通道(OS 级 toast,host 端由 node-notifier 投递)。 */
24
+ export interface SystemChannelConfig {
25
+ enabled: boolean;
26
+ /** 图标:绝对路径(或包内 assets/icon.png 的绝对路径)。 */
27
+ icon?: string;
28
+ verbosity: Verbosity;
29
+ }
30
+ /** 浏览器通知通道(Web Notification API,client 端投递)。 */
31
+ export interface BrowserChannelConfig {
32
+ enabled: boolean;
33
+ /** 图标:URL 或 data URL。 */
34
+ icon?: string;
35
+ /** 仅当页面隐藏/未聚焦时才弹通知,避免看着界面还被打扰。 */
36
+ onlyWhenHidden: boolean;
37
+ verbosity: Verbosity;
38
+ }
39
+ /** 飞书机器人通道(webhook 版,即自定义机器人 webhook,host 端投递)。 */
40
+ export interface FeishuChannelConfig {
41
+ enabled: boolean;
42
+ /** 飞书自定义机器人 webhook 地址。 */
43
+ webhookUrl?: string;
44
+ /** 签名密钥(飞书机器人 webhook“安全设置-签名校验”),配置后按 HMAC-SHA256 签名。 */
45
+ secret?: string;
46
+ /** 单次请求超时(ms)。 */
47
+ timeoutMs: number;
48
+ verbosity: Verbosity;
49
+ }
50
+ /** 去重 / 节流配置。 */
51
+ export interface DedupConfig {
52
+ /** 同一会话同一类触发的冷却时间(ms)。 */
53
+ interactionCooldownMs: number;
54
+ /** 完成通知防抖窗口(ms):等待 turn/end 事件以丰富内容并合并边界抖动。 */
55
+ completedDebounceMs: number;
56
+ /** 每通道每分钟通知上限(防止第三方通道限流/刷屏)。 */
57
+ perChannelPerMinute: number;
58
+ }
59
+ /** 消息内容配置。 */
60
+ export interface MessageConfig {
61
+ /** 标题前缀,例如 "[DSH]"。 */
62
+ titlePrefix?: string;
63
+ /** 正文是否附带会话标题。 */
64
+ includeSessionTitle: boolean;
65
+ /** GUI 地址,用于通知中的“打开”链接/按钮。 */
66
+ guiUrl: string;
67
+ }
68
+ export interface Config {
69
+ triggers: TriggerConfig;
70
+ system: SystemChannelConfig;
71
+ browser: BrowserChannelConfig;
72
+ feishu: FeishuChannelConfig;
73
+ dedup: DedupConfig;
74
+ message: MessageConfig;
75
+ }
76
+ export declare const Config: Schema<Config>;
77
+ /**
78
+ * 用 schema 默认值解析一份配置(输入可省略任意字段)。
79
+ * 与 cordis Loader 的校验同源,保证“默认值 → base → 用户层”的解析一致。
80
+ */
81
+ export declare function resolveConfig(input?: Partial<Config>): Config;
82
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,eAAe;AACf,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAA;AAEzD,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,WAAW,EAAE,OAAO,CAAA;IACpB,iBAAiB;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe;IACf,KAAK,EAAE,OAAO,CAAA;CACf;AAED,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kCAAkC;IAClC,cAAc,EAAE,OAAO,CAAA;IACvB,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,iBAAiB;AACjB,MAAM,WAAW,WAAW;IAC1B,0BAA0B;IAC1B,qBAAqB,EAAE,MAAM,CAAA;IAC7B,+CAA+C;IAC/C,mBAAmB,EAAE,MAAM,CAAA;IAC3B,gCAAgC;IAChC,mBAAmB,EAAE,MAAM,CAAA;CAC5B;AAED,cAAc;AACd,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kBAAkB;IAClB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,aAAa,CAAA;IACvB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,OAAO,EAAE,oBAAoB,CAAA;IAC7B,MAAM,EAAE,mBAAmB,CAAA;IAC3B,KAAK,EAAE,WAAW,CAAA;IAClB,OAAO,EAAE,aAAa,CAAA;CACvB;AAID,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAsChC,CAAA;AAEF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,GAAE,OAAO,CAAC,MAAM,CAAM,GAAG,MAAM,CAEjE"}
package/package.json ADDED
@@ -0,0 +1,96 @@
1
+ {
2
+ "name": "dsh-messager",
3
+ "version": "0.1.4",
4
+ "description": "DeepSeek Harness 通知插件:会话交互/任务完成/出错时通过系统通知、浏览器通知、飞书机器人(webhook)推送提醒",
5
+ "type": "module",
6
+ "main": "lib/index.js",
7
+ "types": "lib/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./lib/index.d.ts",
11
+ "default": "./lib/index.js"
12
+ },
13
+ "./client": {
14
+ "types": "./lib/types/client/index.d.ts",
15
+ "default": "./lib/client.js"
16
+ },
17
+ "./src/*": "./src/*",
18
+ "./package.json": "./package.json"
19
+ },
20
+ "files": [
21
+ "lib",
22
+ "assets",
23
+ "cordis.patch.yml",
24
+ "README.md"
25
+ ],
26
+ "scripts": {
27
+ "build": "tsc -p tsconfig.json && tsc -p tsconfig.client.json && pnpm run build:client",
28
+ "build:client": "tsdown",
29
+ "prepare": "pnpm run build",
30
+ "prepublishOnly": "pnpm run test",
31
+ "typecheck": "tsc --noEmit -p tsconfig.json",
32
+ "test": "vitest run",
33
+ "test:watch": "vitest"
34
+ },
35
+ "dependencies": {
36
+ "@deepseek-ai/cordis": "^4.0.1",
37
+ "@deepseek-ai/dsh-agent": "0.1.0-rc.6",
38
+ "@deepseek-ai/dsh-api-remotes": "0.1.0-rc.6",
39
+ "@deepseek-ai/dsh-client-connection": "0.1.0-rc.6",
40
+ "@deepseek-ai/dsh-client-locale": "0.1.0-rc.6",
41
+ "@deepseek-ai/dsh-client-runtime": "0.1.0-rc.6",
42
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.0-rc.6",
43
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.0-rc.6",
44
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.0-rc.6",
45
+ "@deepseek-ai/dsh-host-webserver": "0.1.0-rc.6",
46
+ "@deepseek-ai/dsh-session": "0.1.0-rc.6",
47
+ "@deepseek-ai/dsh-session-title": "0.1.0-rc.6",
48
+ "@deepseek-ai/dsh-settings": "0.1.0-rc.6",
49
+ "@deepseek-ai/dsh-user-approval": "0.1.0-rc.6",
50
+ "@deepseek-ai/schemastery": "^3.18.1",
51
+ "node-notifier": "^10.0.1",
52
+ "react": "^18.2.0"
53
+ },
54
+ "devDependencies": {
55
+ "@types/node": "^26.2.0",
56
+ "@types/node-notifier": "^8.0.5",
57
+ "@types/react": "~18.3.31",
58
+ "tsdown": "^0.22.14",
59
+ "typescript": "^6.0.3",
60
+ "vitest": "^4.1.10"
61
+ },
62
+ "dsh": {
63
+ "bundle": {
64
+ "patch": "./cordis.patch.yml"
65
+ },
66
+ "client": {
67
+ "inject": [
68
+ "@deepseek-ai/dsh-client-runtime",
69
+ "@deepseek-ai/dsh-client-connection",
70
+ "@deepseek-ai/dsh-client-locale",
71
+ "@deepseek-ai/dsh-api-remotes",
72
+ "@deepseek-ai/dsh-client-ui-slots",
73
+ "@deepseek-ai/dsh-client-ui-settings",
74
+ "@deepseek-ai/dsh-client-ui-primitives"
75
+ ],
76
+ "platform": "web"
77
+ }
78
+ },
79
+ "engines": {
80
+ "node": ">=20"
81
+ },
82
+ "publishConfig": {
83
+ "registry": "https://registry.npmjs.org"
84
+ },
85
+ "keywords": [
86
+ "dsh",
87
+ "dsh-plugin",
88
+ "deepseek-harness",
89
+ "deepseek-harness-plugin",
90
+ "notification",
91
+ "feishu",
92
+ "webhook"
93
+ ],
94
+ "packageManager": "pnpm@11.7.0",
95
+ "license": "MIT"
96
+ }