dsh-remote-web 0.6.10-beta.6 → 0.6.10-beta.7
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/lib/client.js +60 -8
- package/lib/index.js +1 -1
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -40,6 +40,28 @@ window.__ModuleLoader__.load({
|
|
|
40
40
|
var exports = module.exports;
|
|
41
41
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
42
42
|
|
|
43
|
+
// ── 微信通道能力**镜像**(面板展示用;判定真身在 clients/dsh-remote/wechat-runtime.mjs)──
|
|
44
|
+
//
|
|
45
|
+
// ⚠️ 这两份必须一致,`wechat-bot-ui.test.mjs` 会逐项比对。
|
|
46
|
+
// 面板多承诺一项,用户绑完去微信一试就会拿到付费提示 —— 只会觉得产品骗人。
|
|
47
|
+
// 业主口径:「免费用户支持什么能力,就有什么能力,不要承诺过多的能力,保持前后一致」。
|
|
48
|
+
// 之所以放在顶层常量而不是内联在 JSX 里:测试要能把它们抠出来跟运行时表对账。
|
|
49
|
+
var WECHAT_FREE_CAPS = ["notify", "approve", "status", "stop", "assign.continue"];
|
|
50
|
+
// 付费侧也用**细粒度**列出:面板要能跟"文案挂在哪个能力上"一一对上,
|
|
51
|
+
// 而运行时那边写粗粒度 "assign" —— 前缀规则下 assign 天然覆盖 assign.new/assign.continue,
|
|
52
|
+
// 所以两边不冲突(有测试按前缀规则核对)。
|
|
53
|
+
var WECHAT_PAID_CAPS = ["notify", "approve", "status", "stop", "assign.new", "assign.continue", "sessions", "summary"];
|
|
54
|
+
var WECHAT_FREE_MSGS_PER_MONTH = 20;
|
|
55
|
+
/** 能力 → 给用户看的一句话(顺序即展示顺序)。 */
|
|
56
|
+
var WECHAT_CAP_LABELS = [
|
|
57
|
+
{ cap: "notify", free: "任务完成 / 出错 / 停下 推送到微信", paid: "" },
|
|
58
|
+
{ cap: "approve", free: "要你拍板时,回一个数字就完成决定", paid: "" },
|
|
59
|
+
{ cap: "assign.continue", free: "继续已有任务(回复即续接)", paid: "" },
|
|
60
|
+
{ cap: "assign.new", free: "", paid: "在微信里开新任务" },
|
|
61
|
+
{ cap: "sessions", free: "", paid: "列出 / 切换会话" },
|
|
62
|
+
{ cap: "summary", free: "", paid: "随时重发重要结论" }
|
|
63
|
+
];
|
|
64
|
+
|
|
43
65
|
var react = require("react");
|
|
44
66
|
var h = react.createElement;
|
|
45
67
|
var useState = react.useState;
|
|
@@ -4444,16 +4466,46 @@ window.__ModuleLoader__.load({
|
|
|
4444
4466
|
// 位置:内嵌内容体的**最上面**,在「连接微信机器人」按钮之前(DOM 顺序也一样)——
|
|
4445
4467
|
// 第一次进来的人先看懂用途,再决定要不要绑。紧凑小字,
|
|
4446
4468
|
// 不会把连接按钮挤出首屏(见 .dru-wx-intro 的样式注释)。
|
|
4447
|
-
//
|
|
4448
|
-
//
|
|
4449
|
-
//
|
|
4469
|
+
//
|
|
4470
|
+
// ★ 能力对照是**数据驱动**的,不再是写死的四行:
|
|
4471
|
+
// · 判定来源 = `wx.caps`(微信通道**实际在用**的那一份,见 status()),
|
|
4472
|
+
// 所以"面板上写的"与"微信里强制的"不可能不一致(业主:话术与权限必须一致);
|
|
4473
|
+
// · 拿不到才退回本地面板镜像(旧版 bridge),两份由 wechat-bot-ui.test.mjs 锁死;
|
|
4474
|
+
// · 免费用户会看到**锁定的会员项**(🔒)—— 这就是业主要的"对比展示付费多什么"。
|
|
4450
4475
|
// 已绑定态同样保留:它是常驻的用途说明(不是一次性引导气泡),不占用任何按钮。
|
|
4476
|
+
var wxPlan = (wx && wx.plan) ? String(wx.plan) : "free";
|
|
4477
|
+
var wxIsPaid = wxPlan !== "free";
|
|
4478
|
+
var wxCaps = (wx && Array.isArray(wx.caps) && wx.caps.length) ? wx.caps : null;
|
|
4479
|
+
var wxHas = function (cap) {
|
|
4480
|
+
var list = wxCaps || (wxIsPaid ? WECHAT_PAID_CAPS : WECHAT_FREE_CAPS);
|
|
4481
|
+
return list.some(function (c) { return c === cap || cap.indexOf(c + ".") === 0; });
|
|
4482
|
+
};
|
|
4483
|
+
var capRows = [];
|
|
4484
|
+
// 状态还没读到时**不显示锁**:否则付费用户会先看到一排 🔒 再变成 ✅(闪一下很难看)
|
|
4485
|
+
if (wx) {
|
|
4486
|
+
WECHAT_CAP_LABELS.forEach(function (row, i) {
|
|
4487
|
+
var text = row.free || row.paid;
|
|
4488
|
+
if (!text) return;
|
|
4489
|
+
var ok = wxHas(row.cap);
|
|
4490
|
+
capRows.push(h("div", { className: "dru-wx-intro-row", key: "cap" + i },
|
|
4491
|
+
(ok ? "✅ " : "🔒 ") + text + (ok ? "" : "(会员)")));
|
|
4492
|
+
});
|
|
4493
|
+
} else {
|
|
4494
|
+
WECHAT_CAP_LABELS.forEach(function (row, i) {
|
|
4495
|
+
var text = row.free || row.paid;
|
|
4496
|
+
if (text) capRows.push(h("div", { className: "dru-wx-intro-row", key: "cap" + i }, "· " + text));
|
|
4497
|
+
});
|
|
4498
|
+
}
|
|
4499
|
+
var quotaRow = (!wxIsPaid && WECHAT_FREE_MSGS_PER_MONTH > 0)
|
|
4500
|
+
? h("div", { className: "dru-wx-intro-row" },
|
|
4501
|
+
"· 免费版每月 " + WECHAT_FREE_MSGS_PER_MONTH + " 条消息额度"
|
|
4502
|
+
+ (wx ? "(本月已用 " + Number(wx.messages_used_this_month || 0) + " 条)" : ""))
|
|
4503
|
+
: null;
|
|
4451
4504
|
var intro = h("div", { className: "dru-wx-intro", role: "note", "aria-label": "微信机器人通道能做什么" },
|
|
4452
|
-
h("div", { className: "dru-wx-intro-title" },
|
|
4453
|
-
|
|
4454
|
-
|
|
4455
|
-
|
|
4456
|
-
h("div", { className: "dru-wx-intro-row" }, "· **会员**:还能直接在微信里交代任务、切换会话,并对同一个任务继续追问。")
|
|
4505
|
+
h("div", { className: "dru-wx-intro-title" },
|
|
4506
|
+
wx ? (wxIsPaid ? "你现在能用的(会员)" : "你现在能用的(免费)") : "绑定后能做什么"),
|
|
4507
|
+
capRows,
|
|
4508
|
+
quotaRow
|
|
4457
4509
|
);
|
|
4458
4510
|
|
|
4459
4511
|
if (loading && !wx && !fail) {
|
package/lib/index.js
CHANGED
|
@@ -2481,7 +2481,7 @@ const PLUGIN_ID = "dsh-remote-web";
|
|
|
2481
2481
|
const PLUGIN_LEGACY_IDS = ["dsh-remote-ui"];
|
|
2482
2482
|
const PLUGIN_ALL_IDS = [PLUGIN_ID, ...PLUGIN_LEGACY_IDS];
|
|
2483
2483
|
/** 插件自身发布版本(与 dsh-remote 根包同步递增)。 */
|
|
2484
|
-
const PLUGIN_VERSION = "0.6.10-beta.
|
|
2484
|
+
const PLUGIN_VERSION = "0.6.10-beta.7";
|
|
2485
2485
|
const UPDATE_LOG = ".dsh-update.log";
|
|
2486
2486
|
const UPDATE_MARKER = ".dsh-update-running";
|
|
2487
2487
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-remote-web",
|
|
3
|
-
"version": "0.6.10-beta.
|
|
3
|
+
"version": "0.6.10-beta.7",
|
|
4
4
|
"description": "公网远程控制 DeepSeek Harness(dsh web):安装即得专属加密地址,人在外面也能用手机访问电脑上的 dsh——无需同一局域网/WiFi、无需公网 IP 与内网穿透,全程加密;手机端 100% 还原电脑体验(对话/工具/审批/设置)。技术用户可选自建服务,流量走自己的服务器。Remote control DeepSeek Harness (dsh web) from anywhere over the public internet — install, get an encrypted URL, use it from your phone on any network (dual-half cordis plugin: Settings panel + same-origin /dsh-remote routes). (2026-09 由 dsh-remote-ui 更名 / renamed from dsh-remote-ui; dsh-remote 的 dsh web 插件半,不是纯 UI/皮肤插件)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|