@xmanrui/dsh-im 4.17.0 → 4.17.1

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/README.en.md CHANGED
@@ -226,6 +226,8 @@ DingTalk menus use a shared template built into the plugin; no template setup is
226
226
 
227
227
  ## Local development
228
228
 
229
+ The Web profile is verified with unmodified DSH `0.1.2-alpha.4`, `0.1.2-alpha.5`, `0.1.2-rc.1`, `0.1.3-alpha.1`, and `0.1.5-alpha.1`. All use the same dsh-im management RPC adapter through the public Connection `/api` Fetch registry; no DSH patch or rebuild is required. After upgrading the plugin, restart the Host and refresh the settings page so both sides use the same plugin build.
230
+
229
231
  ```sh
230
232
  npm install
231
233
  npm run check
@@ -242,7 +244,7 @@ IM management RPCs accept loopback browsers by default. When a Web profile is de
242
244
  rpcAuthority: trusted-host
243
245
  ```
244
246
 
245
- `trusted-host` reuses Harness's Host/Origin fence; it is not user authentication. Anyone who can reach that LAN authority can inspect bot status, scan or submit application credentials, reconnect bots, and remove bots. Enable it only on a trusted network.
247
+ `trusted-host` allows trusted authorities to reach IM management after Harness browser authentication and Host/Origin checks. The default `loopback` policy additionally requires loopback Host and Origin values; update and inbound TTL management always remain loopback-only.
246
248
 
247
249
  ### Bot chat message language
248
250
 
package/README.md CHANGED
@@ -232,6 +232,8 @@ Logo 由 dsh-im 的浏览器适配显示,无需修改 DSH。适配保留原始
232
232
 
233
233
  ## 本地开发
234
234
 
235
+ Web profile 已验证兼容原版 DSH `0.1.2-alpha.4`、`0.1.2-alpha.5`、`0.1.2-rc.1`、`0.1.3-alpha.1` 和 `0.1.5-alpha.1`。这些版本共用 dsh-im 的管理 RPC 适配,通过 Connection 的公开 `/api` Fetch 注册接口工作,无需修改或重新编译 DSH。升级插件后重启 Host 并刷新设置页,使 Host 和客户端使用同一版插件。
236
+
235
237
  ```sh
236
238
  npm install
237
239
  npm run check
@@ -248,7 +250,7 @@ IM 管理 RPC 默认仅接受回环浏览器。如果 Web profile 在受信任
248
250
  rpcAuthority: trusted-host
249
251
  ```
250
252
 
251
- `trusted-host` 只复用 Harness Host/Origin 防护,不是用户认证。启用后,能访问该局域网地址的人也能查看机器人状态、扫码或提交应用凭据、重连和删除机器人;只应在可信网络中使用。
253
+ `trusted-host` 允许已通过 Harness 浏览器认证和 Host/Origin 检查的受信任地址访问 IM 管理接口。默认 `loopback` 还要求回环 Host 和 Origin;更新与入站 TTL 管理始终仅允许回环访问。
252
254
 
253
255
  ### 聊天消息语言
254
256
 
package/lib/client.js CHANGED
@@ -566,12 +566,23 @@ __export(index_exports, {
566
566
  name: () => name
567
567
  });
568
568
  module.exports = __toCommonJS(index_exports);
569
+
570
+ // plugin-src/management-rpc.mjs
571
+ function rpcEndpoint(channel4) {
572
+ if (!/^\/[A-Za-z0-9._~-]+$/.test(channel4)) throw new TypeError("Invalid IM RPC channel");
573
+ return `dsh-im${channel4}`;
574
+ }
575
+ function callManagementRpc(connection, channel4, method, payload, signal) {
576
+ return connection.rpc.call("/api", rpcEndpoint(channel4), { method, payload }, signal);
577
+ }
578
+
579
+ // plugin-src/client/index.js
569
580
  var React28 = __toESM(require("react"), 1);
570
581
 
571
582
  // package.json
572
583
  var package_default = {
573
584
  name: "@xmanrui/dsh-im",
574
- version: "4.17.0",
585
+ version: "4.17.1",
575
586
  description: "\u628A\u5341\u79CD IM \u673A\u5668\u4EBA\u548C\u516C\u7F51 AI Office \u63A5\u5165\u672C\u673A DeepSeek Harness\u3002 Connect ten IM channels and a public AI Office to a local DeepSeek Harness.",
576
587
  keywords: [
577
588
  "deepseek-harness",
@@ -668,12 +679,13 @@ var package_default = {
668
679
  platform: "web"
669
680
  },
670
681
  compatibility: {
671
- dsh: "0.1.2-alpha.4 || 0.1.2-alpha.5 || 0.1.2-rc.1 || 0.1.3-alpha.1",
682
+ dsh: "0.1.2-alpha.4 || 0.1.2-alpha.5 || 0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.5-alpha.1",
672
683
  dshReleases: {
673
684
  "0.1.2-alpha.4": "compatible",
674
685
  "0.1.2-alpha.5": "compatible",
675
686
  "0.1.2-rc.1": "compatible",
676
- "0.1.3-alpha.1": "compatible"
687
+ "0.1.3-alpha.1": "compatible",
688
+ "0.1.5-alpha.1": "compatible"
677
689
  },
678
690
  profiles: [
679
691
  "web"
@@ -17516,20 +17528,20 @@ function apply(ctx) {
17516
17528
  for (const dispose of disposers.reverse()) dispose();
17517
17529
  };
17518
17530
  }, "im-settings: install combined channel styles");
17519
- const feishuRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(FEISHU_RPC_CHANNEL, endpoint, payload, signal);
17520
- const weixinRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(WEIXIN_RPC_CHANNEL, endpoint, payload, signal);
17521
- const dingtalkRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(DINGTALK_RPC_CHANNEL, endpoint, payload, signal);
17522
- const qqRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(QQ_RPC_CHANNEL, endpoint, payload, signal);
17523
- const wecomRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(WECOM_RPC_CHANNEL, endpoint, payload, signal);
17524
- const wecomAppRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(WECOM_APP_RPC_CHANNEL, endpoint, payload, signal);
17525
- const telegramRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(TELEGRAM_RPC_CHANNEL, endpoint, payload, signal);
17526
- const discordRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(DISCORD_RPC_CHANNEL, endpoint, payload, signal);
17527
- const whatsappRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(WHATSAPP_RPC_CHANNEL, endpoint, payload, signal);
17528
- const slackRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(SLACK_RPC_CHANNEL, endpoint, payload, signal);
17529
- const officeRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(OFFICE_RPC_CHANNEL, endpoint, payload, signal);
17530
- const updateRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(UPDATE_RPC_CHANNEL, endpoint, payload, signal);
17531
- const deliveryRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(DELIVERY_RPC_CHANNEL, endpoint, payload, signal);
17532
- const globalSettingsRpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(GLOBAL_SETTINGS_RPC_CHANNEL, endpoint, payload, signal);
17531
+ const feishuRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, FEISHU_RPC_CHANNEL, endpoint, payload, signal);
17532
+ const weixinRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, WEIXIN_RPC_CHANNEL, endpoint, payload, signal);
17533
+ const dingtalkRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, DINGTALK_RPC_CHANNEL, endpoint, payload, signal);
17534
+ const qqRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, QQ_RPC_CHANNEL, endpoint, payload, signal);
17535
+ const wecomRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, WECOM_RPC_CHANNEL, endpoint, payload, signal);
17536
+ const wecomAppRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, WECOM_APP_RPC_CHANNEL, endpoint, payload, signal);
17537
+ const telegramRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, TELEGRAM_RPC_CHANNEL, endpoint, payload, signal);
17538
+ const discordRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, DISCORD_RPC_CHANNEL, endpoint, payload, signal);
17539
+ const whatsappRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, WHATSAPP_RPC_CHANNEL, endpoint, payload, signal);
17540
+ const slackRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, SLACK_RPC_CHANNEL, endpoint, payload, signal);
17541
+ const officeRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, OFFICE_RPC_CHANNEL, endpoint, payload, signal);
17542
+ const updateRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, UPDATE_RPC_CHANNEL, endpoint, payload, signal);
17543
+ const deliveryRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, DELIVERY_RPC_CHANNEL, endpoint, payload, signal);
17544
+ const globalSettingsRpcCall = (endpoint, payload, signal) => callManagementRpc(ctx.connection, GLOBAL_SETTINGS_RPC_CHANNEL, endpoint, payload, signal);
17533
17545
  const workspaceDirectoryPicker = Object.freeze({
17534
17546
  listDirectory: (path, signal) => callWorkspaceDirectoryApi(ctx, "listDirectory", path, signal),
17535
17547
  pickDirectory: () => callWorkspaceDirectoryApi(ctx, "pickDirectory")