ds-harness-remote 0.3.31 → 0.3.33
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.md +5 -5
- package/cordis.patch.yml +1 -1
- package/dist/client-runtime.d.ts +2 -1
- package/dist/client-runtime.d.ts.map +1 -1
- package/dist/client-runtime.js +74 -31
- package/dist/client-runtime.js.map +1 -1
- package/dist/client.github.js +90 -39
- package/dist/client.js +89 -38
- package/dist/client.js.map +1 -1
- package/dist/control-runtime.d.ts.map +1 -1
- package/dist/control-runtime.js +1 -0
- package/dist/control-runtime.js.map +1 -1
- package/dist/harness-api-bridge.d.ts +2 -1
- package/dist/harness-api-bridge.d.ts.map +1 -1
- package/dist/harness-api-bridge.js +30 -2
- package/dist/harness-api-bridge.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1372 -94
- package/dist/index.js.map +4 -4
- package/dist/native-rtc-helper.d.ts +4 -0
- package/dist/native-rtc-helper.d.ts.map +1 -0
- package/dist/native-rtc-helper.js +539 -0
- package/dist/native-rtc-helper.js.map +1 -0
- package/dist/server-api.d.ts +2 -0
- package/dist/server-api.d.ts.map +1 -1
- package/dist/server-api.js +3 -0
- package/dist/server-api.js.map +1 -1
- package/dist/server-connection.d.ts.map +1 -1
- package/dist/server-connection.js +43 -2
- package/dist/server-connection.js.map +1 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +6 -3
- package/dist/service.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/werift-rtc.d.ts +45 -9
- package/dist/werift-rtc.d.ts.map +1 -1
- package/dist/werift-rtc.js +356 -35
- package/dist/werift-rtc.js.map +1 -1
- package/package.json +4 -1
package/dist/client.github.js
CHANGED
|
@@ -1691,7 +1691,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
1691
1691
|
var CONTROL_RPC_PREFIX = "/ds-harness-remote";
|
|
1692
1692
|
|
|
1693
1693
|
// src/client.ts
|
|
1694
|
-
var clientModuleId = "
|
|
1694
|
+
var clientModuleId = "ds-harness-remote", localeNamespace = "dsh-remote", en = {
|
|
1695
1695
|
pluginTitle: "DeepSeek Remote",
|
|
1696
1696
|
pluginDescription: "Connect once. Available anytime.",
|
|
1697
1697
|
expandSettings: "Show settings: {name}",
|
|
@@ -1740,6 +1740,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
1740
1740
|
local: "Local",
|
|
1741
1741
|
remoteTarget: "Remote \xB7 {name}",
|
|
1742
1742
|
thisMachineLocal: "This machine (Local)",
|
|
1743
|
+
currentDevice: "Current device",
|
|
1743
1744
|
noRemoteHosts: "No authorized remote Host for this account.",
|
|
1744
1745
|
online: "Online",
|
|
1745
1746
|
offline: "Offline",
|
|
@@ -1796,6 +1797,8 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
1796
1797
|
remoteProgressProbeTurnDetail: "Checking the TURN relay path for restricted networks.",
|
|
1797
1798
|
remoteProgressProbeRelay: "Preparing Relay",
|
|
1798
1799
|
remoteProgressProbeRelayDetail: "Preparing the encrypted Server Relay fallback if direct paths do not open.",
|
|
1800
|
+
remoteProgressTryingPrefix: "Trying ",
|
|
1801
|
+
remoteProgressUsingPrefix: "Using ",
|
|
1799
1802
|
remoteProgressLoadingWorkspaces: "Loading workspaces",
|
|
1800
1803
|
remoteProgressLoadingWorkspacesDetail: "Reading the remote Harness workspace list through the tunnel.",
|
|
1801
1804
|
remoteProgressOpeningWorkspace: "Opening workspace",
|
|
@@ -1932,6 +1935,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
1932
1935
|
local: "\u672C\u5730",
|
|
1933
1936
|
remoteTarget: "\u8FDC\u7A0B \xB7 {name}",
|
|
1934
1937
|
thisMachineLocal: "\u6B64\u8BBE\u5907\uFF08\u672C\u5730\uFF09",
|
|
1938
|
+
currentDevice: "\u5F53\u524D\u8BBE\u5907",
|
|
1935
1939
|
noRemoteHosts: "\u6B64\u8D26\u53F7\u6CA1\u6709\u5DF2\u6388\u6743\u7684\u8FDC\u7A0B Host\u3002",
|
|
1936
1940
|
online: "\u5728\u7EBF",
|
|
1937
1941
|
offline: "\u79BB\u7EBF",
|
|
@@ -1988,6 +1992,8 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
1988
1992
|
remoteProgressProbeTurnDetail: "\u68C0\u67E5\u53D7\u9650\u7F51\u7EDC\u4E0B\u53EF\u7528\u7684 TURN \u4E2D\u7EE7\u8DEF\u5F84\u3002",
|
|
1989
1993
|
remoteProgressProbeRelay: "\u6B63\u5728\u51C6\u5907 Relay",
|
|
1990
1994
|
remoteProgressProbeRelayDetail: "\u5982\u679C\u76F4\u8FDE\u8DEF\u5F84\u672A\u6253\u5F00\uFF0C\u5C06\u56DE\u843D\u5230\u52A0\u5BC6\u7684 Server Relay\u3002",
|
|
1995
|
+
remoteProgressTryingPrefix: "\u6B63\u5728\u5C1D\u8BD5 ",
|
|
1996
|
+
remoteProgressUsingPrefix: "\u5DF2\u8FDE\u63A5 ",
|
|
1991
1997
|
remoteProgressLoadingWorkspaces: "\u6B63\u5728\u52A0\u8F7D\u5DE5\u4F5C\u533A",
|
|
1992
1998
|
remoteProgressLoadingWorkspacesDetail: "\u901A\u8FC7\u96A7\u9053\u8BFB\u53D6\u8FDC\u7AEF Harness \u5DE5\u4F5C\u533A\u5217\u8868\u3002",
|
|
1993
1999
|
remoteProgressOpeningWorkspace: "\u6B63\u5728\u6253\u5F00\u5DE5\u4F5C\u533A",
|
|
@@ -2102,24 +2108,46 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2102
2108
|
function transportLabel(value, t) {
|
|
2103
2109
|
return t(value === "lan" ? "remoteNetworkLan" : value === "p2p" ? "remoteNetworkP2p" : value === "turn" ? "remoteNetworkTurn" : "remoteNetworkRelay");
|
|
2104
2110
|
}
|
|
2111
|
+
function transportDiagnosticLabel(value) {
|
|
2112
|
+
return value === "lan" ? "LAN" : value === "p2p" ? "P2P" : value === "turn" ? "TURN" : "Relay";
|
|
2113
|
+
}
|
|
2105
2114
|
function transportProgressCopy(value) {
|
|
2106
2115
|
return value === "lan" ? { label: "remoteProgressProbeLan", detail: "remoteProgressProbeLanDetail" } : value === "p2p" ? { label: "remoteProgressProbeP2p", detail: "remoteProgressProbeP2pDetail" } : value === "turn" ? { label: "remoteProgressProbeTurn", detail: "remoteProgressProbeTurnDetail" } : { label: "remoteProgressProbeRelay", detail: "remoteProgressProbeRelayDetail" };
|
|
2107
2116
|
}
|
|
2108
2117
|
function connectHostProgressSteps(preferredTransports) {
|
|
2109
|
-
let transports = normalizedPreferredTransports(preferredTransports);
|
|
2118
|
+
let transports = normalizedPreferredTransports(preferredTransports), probeTransports = transports.filter((transport) => transport !== "relay" || transports.length === 1);
|
|
2110
2119
|
return [
|
|
2111
2120
|
{ label: "remoteProgressCheckingHost", detail: "remoteProgressCheckingHostDetail", percent: 12 },
|
|
2112
2121
|
{ label: "remoteProgressAuthorizingPeer", detail: "remoteProgressAuthorizingPeerDetail", percent: 30, delayMs: 280 },
|
|
2113
|
-
...
|
|
2122
|
+
...probeTransports.map((transport, index) => ({
|
|
2114
2123
|
...transportProgressCopy(transport),
|
|
2115
2124
|
percent: Math.min(76, 42 + index * 10),
|
|
2116
2125
|
delayMs: 680 + index * 360,
|
|
2117
|
-
transports,
|
|
2118
|
-
activeTransport: transport
|
|
2126
|
+
transports: probeTransports,
|
|
2127
|
+
activeTransport: transport,
|
|
2128
|
+
routeVerb: "trying"
|
|
2119
2129
|
})),
|
|
2120
2130
|
{ label: "remoteProgressLoadingWorkspaces", detail: "remoteProgressLoadingWorkspacesDetail", percent: 84, delayMs: 1520, transports }
|
|
2121
2131
|
];
|
|
2122
2132
|
}
|
|
2133
|
+
function statusTransportPreference(status) {
|
|
2134
|
+
if (status?.transport === "LAN") return "lan";
|
|
2135
|
+
if (status?.transport === "P2P") return "p2p";
|
|
2136
|
+
if (status?.transport === "TURN") return "turn";
|
|
2137
|
+
if (status?.transport === "Relay") return "relay";
|
|
2138
|
+
}
|
|
2139
|
+
function connectedProgress(status) {
|
|
2140
|
+
let activeTransport = statusTransportPreference(status);
|
|
2141
|
+
if (activeTransport !== void 0)
|
|
2142
|
+
return {
|
|
2143
|
+
label: "remoteProgressReady",
|
|
2144
|
+
detail: "remoteProgressReadyDetail",
|
|
2145
|
+
percent: 100,
|
|
2146
|
+
transports: [activeTransport],
|
|
2147
|
+
activeTransport,
|
|
2148
|
+
routeVerb: "using"
|
|
2149
|
+
};
|
|
2150
|
+
}
|
|
2123
2151
|
function connectionErrorMessage(code, t) {
|
|
2124
2152
|
return t(code === "ACCOUNT_AUTH_REQUIRED" || code === "AUTH_INVALID" || code === "TOKEN_EXPIRED" ? "connectionAuthorizationExpired" : code === "DEVICE_REVOKED" ? "connectionDeviceRevoked" : code === "DEVICE_OWNERSHIP_REQUIRED" ? "connectionOwnershipRequired" : code === "RATE_LIMITED" ? "connectionRateLimited" : code === "UNSUPPORTED_VERSION" ? "connectionVersionMismatch" : code === "INVALID_MESSAGE" ? "connectionInvalidResponse" : code === "CONNECTION_FAILED" || code === "SERVER_NOT_CONFIGURED" ? "connectionReachability" : "connectionUnexpected");
|
|
2125
2153
|
}
|
|
@@ -2136,7 +2164,19 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2136
2164
|
function RemoteProgressView(props) {
|
|
2137
2165
|
let progress = props.progress;
|
|
2138
2166
|
if (progress === void 0) return null;
|
|
2139
|
-
let percent = Math.max(0, Math.min(100, Math.round(progress.percent)))
|
|
2167
|
+
let percent = Math.max(0, Math.min(100, Math.round(progress.percent))), activeTransportIndex = progress.transports?.findIndex((transport) => transport === progress.activeTransport) ?? -1, detail = progress.transports !== void 0 && progress.activeTransport !== void 0 && activeTransportIndex > -1 ? React.createElement(
|
|
2168
|
+
"span",
|
|
2169
|
+
{ className: "dshRemoteProgressRoute" },
|
|
2170
|
+
props.t(progress.routeVerb === "using" ? "remoteProgressUsingPrefix" : "remoteProgressTryingPrefix"),
|
|
2171
|
+
progress.transports.map((transport, index) => React.createElement(
|
|
2172
|
+
React.Fragment,
|
|
2173
|
+
{ key: `${transport}:${index}` },
|
|
2174
|
+
index === 0 ? null : React.createElement("span", { className: "dshRemoteProgressRouteArrow", "aria-hidden": !0 }, " -> "),
|
|
2175
|
+
React.createElement("span", {
|
|
2176
|
+
className: index === activeTransportIndex ? "isActive" : void 0
|
|
2177
|
+
}, transportDiagnosticLabel(transport))
|
|
2178
|
+
))
|
|
2179
|
+
) : props.t(progress.detail);
|
|
2140
2180
|
return React.createElement(
|
|
2141
2181
|
"div",
|
|
2142
2182
|
{
|
|
@@ -2150,6 +2190,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2150
2190
|
React.createElement("strong", null, props.t(progress.label)),
|
|
2151
2191
|
React.createElement("span", null, `${percent}%`)
|
|
2152
2192
|
),
|
|
2193
|
+
React.createElement("p", null, detail),
|
|
2153
2194
|
React.createElement("div", {
|
|
2154
2195
|
className: "dshRemoteProgressBar",
|
|
2155
2196
|
role: "progressbar",
|
|
@@ -2157,18 +2198,10 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2157
2198
|
"aria-valuemax": 100,
|
|
2158
2199
|
"aria-valuenow": percent,
|
|
2159
2200
|
"aria-label": props.t(progress.label)
|
|
2160
|
-
}, React.createElement("span", { style: { width: `${percent}%` } }))
|
|
2161
|
-
progress.transports === void 0 ? null : React.createElement("div", {
|
|
2162
|
-
className: "dshRemoteProgressTransports",
|
|
2163
|
-
"aria-label": props.t("preferredTransports")
|
|
2164
|
-
}, progress.transports.map((transport, index) => React.createElement("span", {
|
|
2165
|
-
key: `${transport}:${index}`,
|
|
2166
|
-
className: transport === progress.activeTransport ? "isActive" : void 0
|
|
2167
|
-
}, React.createElement("i", { "aria-hidden": !0 }, String(index + 1)), transportLabel(transport, props.t)))),
|
|
2168
|
-
React.createElement("p", null, props.t(progress.detail))
|
|
2201
|
+
}, React.createElement("span", { style: { width: `${percent}%` } }))
|
|
2169
2202
|
);
|
|
2170
2203
|
}
|
|
2171
|
-
async function runRemoteProgress(steps, setProgress, progressRun, action) {
|
|
2204
|
+
async function runRemoteProgress(steps, setProgress, progressRun, action, readyProgress) {
|
|
2172
2205
|
let runId = progressRun.current + 1;
|
|
2173
2206
|
progressRun.current = runId;
|
|
2174
2207
|
let apply2 = (next) => {
|
|
@@ -2178,7 +2211,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2178
2211
|
let timers = rest.map((step) => window.setTimeout(() => apply2(step), step.delayMs ?? 0));
|
|
2179
2212
|
try {
|
|
2180
2213
|
let result = await action();
|
|
2181
|
-
return apply2({ label: "remoteProgressReady", detail: "remoteProgressReadyDetail", percent: 100 }), await new Promise((resolve) => window.setTimeout(resolve,
|
|
2214
|
+
return apply2(readyProgress?.(result) ?? { label: "remoteProgressReady", detail: "remoteProgressReadyDetail", percent: 100 }), await new Promise((resolve) => window.setTimeout(resolve, 520)), result;
|
|
2182
2215
|
} finally {
|
|
2183
2216
|
timers.forEach((timer) => window.clearTimeout(timer)), progressRun.current === runId && setProgress(void 0);
|
|
2184
2217
|
}
|
|
@@ -2480,12 +2513,18 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2480
2513
|
}, t(provider === "github" ? "githubLogin" : "zhihuLogin")), selectHost = async (host) => {
|
|
2481
2514
|
setBusy(!0), setError(void 0);
|
|
2482
2515
|
try {
|
|
2483
|
-
|
|
2516
|
+
let result = await runRemoteProgress(
|
|
2484
2517
|
connectHostProgressSteps(status?.preferredTransports),
|
|
2485
2518
|
setProgress,
|
|
2486
2519
|
progressRun,
|
|
2487
|
-
() =>
|
|
2488
|
-
|
|
2520
|
+
async () => {
|
|
2521
|
+
let nextWorkspaces = await props.control("workspaces.list", { targetDeviceId: host.deviceId }), nextStatus = await props.control("status").catch(() => {
|
|
2522
|
+
});
|
|
2523
|
+
return nextStatus !== void 0 && setStatus(nextStatus), { workspaces: nextWorkspaces, status: nextStatus };
|
|
2524
|
+
},
|
|
2525
|
+
(result2) => connectedProgress(result2.status)
|
|
2526
|
+
);
|
|
2527
|
+
setWorkspaces(result.workspaces), setSelectedHost(host), setPath(""), setAddingWorkspace(!1), setDirectory(void 0);
|
|
2489
2528
|
} catch (reason) {
|
|
2490
2529
|
setError(messageOf(reason));
|
|
2491
2530
|
} finally {
|
|
@@ -2561,15 +2600,17 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2561
2600
|
if (!(selectedHost === void 0 || path.trim() === "")) {
|
|
2562
2601
|
setBusy(!0), setError(void 0);
|
|
2563
2602
|
try {
|
|
2564
|
-
await runRemoteProgress(
|
|
2603
|
+
let nextStatus = await runRemoteProgress(
|
|
2565
2604
|
openWorkspaceProgressSteps,
|
|
2566
2605
|
setProgress,
|
|
2567
2606
|
progressRun,
|
|
2568
2607
|
() => props.control("workspace.open", {
|
|
2569
2608
|
targetDeviceId: selectedHost.deviceId,
|
|
2570
2609
|
path: path.trim()
|
|
2571
|
-
})
|
|
2572
|
-
|
|
2610
|
+
}),
|
|
2611
|
+
connectedProgress
|
|
2612
|
+
);
|
|
2613
|
+
setStatus(nextStatus), window.location.reload();
|
|
2573
2614
|
} catch (reason) {
|
|
2574
2615
|
setError(messageOf(reason)), setBusy(!1);
|
|
2575
2616
|
}
|
|
@@ -2749,10 +2790,10 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2749
2790
|
React.createElement(
|
|
2750
2791
|
"div",
|
|
2751
2792
|
{ className: "dshRemoteSectionHeading" },
|
|
2752
|
-
React.createElement("strong", null, t("chooseHost")),
|
|
2753
2793
|
React.createElement(
|
|
2754
2794
|
"div",
|
|
2755
|
-
{ className: "
|
|
2795
|
+
{ className: "dshRemoteSectionTitle" },
|
|
2796
|
+
React.createElement("strong", null, t("chooseHost")),
|
|
2756
2797
|
status?.hostAuthorizationAvailable ? React.createElement(
|
|
2757
2798
|
"div",
|
|
2758
2799
|
{ className: "dshRemoteHostControlToggle" },
|
|
@@ -2766,18 +2807,22 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2766
2807
|
onChange: (event) => void setCurrentDeviceControl(event.target.checked)
|
|
2767
2808
|
})
|
|
2768
2809
|
) : null,
|
|
2769
|
-
selectedHost === void 0 ? null : React.createElement("button", {
|
|
2770
|
-
type: "button",
|
|
2771
|
-
onClick: () => {
|
|
2772
|
-
setSelectedHost(void 0), setWorkspaces([]), setDirectory(void 0), setPath(""), setAddingWorkspace(!1), setError(void 0);
|
|
2773
|
-
}
|
|
2774
|
-
}, t("backToHosts")),
|
|
2775
2810
|
React.createElement("button", {
|
|
2776
2811
|
type: "button",
|
|
2777
2812
|
className: "dshRemoteAccountExit",
|
|
2778
2813
|
disabled: busy,
|
|
2779
2814
|
onClick: () => void logoutRemote()
|
|
2780
2815
|
}, t("exitRemoteAccount"))
|
|
2816
|
+
),
|
|
2817
|
+
selectedHost === void 0 ? null : React.createElement(
|
|
2818
|
+
"div",
|
|
2819
|
+
{ className: "dshRemoteSectionActions" },
|
|
2820
|
+
React.createElement("button", {
|
|
2821
|
+
type: "button",
|
|
2822
|
+
onClick: () => {
|
|
2823
|
+
setSelectedHost(void 0), setWorkspaces([]), setDirectory(void 0), setPath(""), setAddingWorkspace(!1), setError(void 0);
|
|
2824
|
+
}
|
|
2825
|
+
}, t("backToHosts"))
|
|
2781
2826
|
)
|
|
2782
2827
|
),
|
|
2783
2828
|
selectedHost === void 0 ? React.createElement("div", { className: "dshRemoteHostList" }, devices.length === 0 ? React.createElement("p", null, t(busy ? "checkingConnection" : "noRemoteHosts")) : devices.map((device) => React.createElement(
|
|
@@ -2911,7 +2956,13 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2911
2956
|
setBusy(!0), setError(void 0);
|
|
2912
2957
|
try {
|
|
2913
2958
|
let action = () => props.control("mode.set", { mode, ...targetDeviceId === void 0 ? {} : { targetDeviceId } });
|
|
2914
|
-
mode === "remote" ? await runRemoteProgress(
|
|
2959
|
+
setStatus(mode === "remote" ? await runRemoteProgress(
|
|
2960
|
+
connectHostProgressSteps(status?.preferredTransports),
|
|
2961
|
+
setProgress,
|
|
2962
|
+
progressRun,
|
|
2963
|
+
action,
|
|
2964
|
+
connectedProgress
|
|
2965
|
+
) : await action()), window.location.reload();
|
|
2915
2966
|
} catch (reason) {
|
|
2916
2967
|
setError(messageOf(reason)), setBusy(!1);
|
|
2917
2968
|
}
|
|
@@ -3059,7 +3110,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3059
3110
|
} finally {
|
|
3060
3111
|
setBusy(!1);
|
|
3061
3112
|
}
|
|
3062
|
-
}, transport = status.transport ?? "Disconnected", networkLabel = t(transport === "P2P" ? "remoteNetworkP2p" : transport === "TURN" ? "remoteNetworkTurn" : transport === "Relay" ? "remoteNetworkRelay" : transport === "LAN" ? "remoteNetworkLan" : "remoteNetworkOffline"), networkOnline = status.connected === !0 && transport !== "Disconnected", routeVia = t(transport === "P2P" ? "connectionRouteP2p" : transport === "TURN" ? "connectionRouteTurn" : transport === "Relay" ? "connectionRouteRelay" : "connectionRouteLan"), routeViaDetail = t(transport === "P2P" ? "connectionRouteP2pDetail" : transport === "TURN" ? "connectionRouteTurnDetail" : transport === "Relay" ? "connectionRouteRelayDetail" : "connectionRouteLanDetail"), network = status.network, webRtc = network?.webRtc, controlStateLabel = network?.controlChannelState === "connecting" ? t("controlStateConnecting") : network?.controlChannelState === "open" ? t("controlStateOpen") : network?.controlChannelState === "closing" ? t("controlStateClosing") : t("controlStateClosed"), detailValue = (value) => value === void 0 || value === "" ? t("notProvided") : String(value), candidateLabel = (value) => value === "host" ? t("candidateHost") : value === "srflx" ? t("candidateSrflx") : value === "prflx" ? t("candidatePrflx") : value === "relay" ? t("candidateRelay") : detailValue(value), fact = (label, value, mono = !1) => React.createElement(
|
|
3113
|
+
}, transport = status.network?.webRtc?.mode ?? status.transport ?? "Disconnected", networkLabel = t(transport === "P2P" ? "remoteNetworkP2p" : transport === "TURN" ? "remoteNetworkTurn" : transport === "Relay" ? "remoteNetworkRelay" : transport === "LAN" ? "remoteNetworkLan" : "remoteNetworkOffline"), networkOnline = status.connected === !0 && transport !== "Disconnected", routeVia = t(transport === "P2P" ? "connectionRouteP2p" : transport === "TURN" ? "connectionRouteTurn" : transport === "Relay" ? "connectionRouteRelay" : "connectionRouteLan"), routeViaDetail = t(transport === "P2P" ? "connectionRouteP2pDetail" : transport === "TURN" ? "connectionRouteTurnDetail" : transport === "Relay" ? "connectionRouteRelayDetail" : "connectionRouteLanDetail"), network = status.network, webRtc = network?.webRtc, controlStateLabel = network?.controlChannelState === "connecting" ? t("controlStateConnecting") : network?.controlChannelState === "open" ? t("controlStateOpen") : network?.controlChannelState === "closing" ? t("controlStateClosing") : t("controlStateClosed"), detailValue = (value) => value === void 0 || value === "" ? t("notProvided") : String(value), candidateLabel = (value) => value === "host" ? t("candidateHost") : value === "srflx" ? t("candidateSrflx") : value === "prflx" ? t("candidatePrflx") : value === "relay" ? t("candidateRelay") : detailValue(value), fact = (label, value, mono = !1) => React.createElement(
|
|
3063
3114
|
"div",
|
|
3064
3115
|
null,
|
|
3065
3116
|
React.createElement("dt", null, label),
|
|
@@ -3218,11 +3269,11 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3218
3269
|
".dshRemotePage{width:min(720px,100%);max-height:min(760px,calc(100vh - 40px));display:flex;flex-direction:column;background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);border-radius:14px;overflow:hidden;animation:dshRemotePageIn .18s cubic-bezier(.25,1,.5,1)}",
|
|
3219
3270
|
".dshRemotePageHeader{min-height:72px;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:14px 24px;border-bottom:1px solid var(--dsw-alias-border-l2)}.dshRemotePageIntro{min-width:0;flex:1}.dshRemotePageHeader strong{display:block;font-size:18px;line-height:1.4}.dshRemotePageHeader p{min-width:0;max-width:70ch;margin:3px 0 0;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:1.5}.dshRemotePageHeader>button{width:40px;height:40px;flex:0 0 auto;border:0;border-radius:8px;background:transparent;color:inherit;font-size:24px;cursor:pointer}.dshRemotePageHeader>button:hover{background:var(--dsw-alias-interactive-bg-hover)}",
|
|
3220
3271
|
".dshRemotePageBody{padding:24px;overflow:auto;display:flex;flex-direction:column;gap:24px}.dshRemotePageBody button{font:inherit;color:inherit}",
|
|
3221
|
-
".dshRemoteSectionHeading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:10px}.
|
|
3272
|
+
".dshRemoteSectionHeading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:10px}.dshRemoteSectionTitle{min-width:0;display:flex;align-items:center;gap:10px}.dshRemoteSectionTitle>strong{font-size:14px}.dshRemoteSectionActions{display:flex;align-items:center;gap:14px}.dshRemoteSectionActions>button{border:0;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer;padding:5px 0;font-size:12px}.dshRemoteSectionActions>button:hover:not(:disabled){color:var(--dsw-alias-label-primary);text-decoration:underline}",
|
|
3222
3273
|
".dshRemoteSectionHeading>.dshRemoteAddWorkspace{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;padding:0;border-radius:50%;font-size:20px;line-height:1}.dshRemoteSectionHeading>.dshRemoteAddWorkspace:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}",
|
|
3223
3274
|
".dshRemoteHostList{display:flex;flex-direction:column;border-top:1px solid var(--dsw-alias-border-l2)}.dshRemoteHostList>button{min-height:58px;display:flex;align-items:center;justify-content:space-between;gap:16px;text-align:left;border:0;border-bottom:1px solid var(--dsw-alias-border-l2);background:transparent;padding:10px 4px;cursor:pointer}.dshRemoteHostList>button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.dshRemoteHostList>button:disabled{opacity:.5;cursor:default}.dshRemoteHostList>button>span{min-width:0;display:flex;flex-direction:column;gap:3px}.dshRemoteHostList>button strong{font-size:14px;font-weight:500}.dshRemoteHostList small,.dshRemoteSelectedHost small{color:var(--dsw-alias-label-secondary);font-size:12px}",
|
|
3224
3275
|
".dshRemoteSelectedHost{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 14px;border-radius:10px;background:var(--dsw-alias-bg-layer-2)}",
|
|
3225
|
-
".dshRemoteProgress{display:flex;flex-direction:column;gap:8px;margin:12px 0;padding:12px 14px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;background:var(--dsw-alias-bg-layer-2)}.dshRemoteProgressHeader{display:flex;align-items:center;justify-content:space-between;gap:12px}.dshRemoteProgressHeader strong{font-size:13px;font-weight:600}.dshRemoteProgressHeader span{color:var(--dsw-alias-label-secondary);font-size:12px}.dshRemoteProgressBar{height:6px;overflow:hidden;border-radius:999px;background:var(--dsw-alias-bg-layer-3)}.dshRemoteProgressBar>span{display:block;height:100%;border-radius:inherit;background:var(--dsw-alias-brand-primary);transition:width .22s ease-out}.
|
|
3276
|
+
".dshRemoteProgress{display:flex;flex-direction:column;gap:8px;margin:12px 0;padding:12px 14px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;background:var(--dsw-alias-bg-layer-2)}.dshRemoteProgressHeader{display:flex;align-items:center;justify-content:space-between;gap:12px}.dshRemoteProgressHeader strong{font-size:13px;font-weight:600}.dshRemoteProgressHeader span{color:var(--dsw-alias-label-secondary);font-size:12px}.dshRemoteProgressBar{height:6px;overflow:hidden;border-radius:999px;background:var(--dsw-alias-bg-layer-3)}.dshRemoteProgressBar>span{display:block;height:100%;border-radius:inherit;background:var(--dsw-alias-brand-primary);transition:width .22s ease-out}.dshRemoteProgress p{margin:0;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.45}.dshRemoteProgressRoute{font-weight:500}.dshRemoteProgressRoute .isActive{color:var(--dsw-alias-state-success-primary);font-weight:700}.dshRemoteProgressRouteArrow{color:var(--dsw-alias-label-tertiary)}@media(prefers-reduced-motion:reduce){.dshRemoteProgressBar>span{transition:none}}",
|
|
3226
3277
|
'.dshRemoteBrowser{display:flex;flex-direction:column}.dshRemoteCrumbs{display:flex;align-items:center;gap:4px;overflow:auto;padding:2px 0 10px}.dshRemoteCrumbs>button{flex:0 0 auto;border:0;background:transparent;color:var(--dsw-alias-label-secondary);padding:5px 7px;border-radius:6px;cursor:pointer}.dshRemoteCrumbs>button:not(:last-child)::after{content:" /";color:var(--dsw-alias-label-tertiary)}.dshRemoteCrumbs>button:disabled{color:var(--dsw-alias-label-primary);font-weight:600}',
|
|
3227
3278
|
".dshRemoteDirectoryList{min-height:72px;display:flex;flex-direction:column;border-top:1px solid var(--dsw-alias-border-l2)}.dshRemoteDirectoryList>button{min-height:52px;display:grid;grid-template-columns:auto 1fr;column-gap:10px;text-align:left;border:0;border-bottom:1px solid var(--dsw-alias-border-l2);background:transparent;padding:8px 4px;cursor:pointer}.dshRemoteDirectoryList>button:hover,.dshRemoteDirectoryList>button.isSelected{background:var(--dsw-alias-interactive-bg-hover)}.dshRemoteDirectoryList>button.isSelected{color:var(--dsw-alias-label-primary)}.dshRemoteDirectoryList>button>span:first-child{grid-row:1/3}.dshRemoteDirectoryList>button>small{grid-column:2;color:var(--dsw-alias-label-secondary);overflow:hidden;text-overflow:ellipsis}.dshRemoteDirectoryList>p,.dshRemoteHint{margin:12px 0;color:var(--dsw-alias-label-secondary);font-size:13px}",
|
|
3228
3279
|
".dshRemoteFolderBrowser{margin-top:14px}.dshRemoteFolderBrowser>p,.dshRemoteFolderList>p{margin:12px 0;color:var(--dsw-alias-label-secondary);font-size:13px}.dshRemoteFolderList{max-height:260px;overflow:auto;border-block:1px solid var(--dsw-alias-border-l2)}.dshRemoteFolderList>button{width:100%;min-height:42px;display:flex;align-items:center;gap:9px;border:0;border-bottom:1px solid var(--dsw-alias-border-l2);background:transparent;padding:7px 6px;text-align:left;cursor:pointer}.dshRemoteFolderList>button:hover{background:var(--dsw-alias-interactive-bg-hover)}.dshRemoteFolderBrowser>small{display:block;margin-top:8px;color:var(--dsw-alias-state-warn-label)}",
|
|
@@ -3233,8 +3284,8 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3233
3284
|
".dshRemoteClientLogin{width:min(440px,100%);display:flex;flex-direction:column;gap:8px}.dshRemoteClientLogin input{min-height:40px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-3);color:inherit;padding:0 12px;font:inherit}.dshRemoteClientLogin button{align-self:flex-start;min-height:40px;border:0;border-radius:8px;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-1);padding:8px 16px;cursor:pointer}",
|
|
3234
3285
|
".dshRemoteQrLogin{width:min(440px,100%);display:flex;flex-direction:column;align-items:center;gap:8px;padding:6px 0 2px;text-align:center}.dshRemoteQrLogin img,.dshRemoteQrPlaceholder{box-sizing:border-box;width:200px;height:200px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:#fff;padding:8px}.dshRemoteQrOpen{display:flex;flex-direction:column;align-items:center;gap:5px;color:var(--dsw-alias-label-secondary);font-size:12px;text-decoration:none}.dshRemoteQrOpen:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.dshRemoteQrOpen:hover img{border-color:var(--dsw-alias-label-dimmed)}.dshRemoteQrOpen:focus-visible{border-radius:12px;outline:2px solid var(--dsw-alias-brand-primary);outline-offset:3px}.dshRemoteQrPlaceholder{display:flex;align-items:center;justify-content:center;color:var(--dsw-alias-label-secondary)}.dshRemoteQrLogin>strong{font-size:14px}.dshRemoteQrLogin>p{max-width:48ch;margin:0;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.5}.dshRemoteQrLogin>.dshRemoteServiceAddress{margin-top:2px;color:var(--dsw-alias-label-tertiary)}.dshRemoteServiceAddress>a{color:var(--dsw-alias-label-secondary);text-decoration:none}.dshRemoteServiceAddress>a:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.dshRemoteQrLogin>button,.dshRemoteClientLogin>.dshRemoteLoginSwitch{min-height:32px;border:0;background:transparent;color:var(--dsw-alias-label-secondary);padding:4px 8px;font:inherit;font-size:12px;cursor:pointer}.dshRemoteQrLogin>button:hover,.dshRemoteClientLogin>.dshRemoteLoginSwitch:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.dshRemoteClientLogin>.dshRemoteLoginSwitch{align-self:flex-start;background:transparent;color:var(--dsw-alias-label-secondary);padding-left:0}",
|
|
3235
3286
|
".dshRemoteEnable{box-sizing:border-box;width:100%;min-height:388px}.dshRemoteLoginHeading{max-width:100%;display:flex;align-items:baseline;gap:10px;overflow:hidden;white-space:nowrap}.dshRemoteLoginTitle{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dshRemoteLoginHeading>span{flex:0 0 auto;color:var(--dsw-alias-label-secondary);font-size:13px;font-weight:400}.dshRemoteLoginTabs{width:100%}.dshRemoteLoginTabs>button{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dshRemoteLoginTabs>button.isActive::after{right:0;left:0;border-radius:0}.dshRemoteClientLogin,.dshRemoteQrLogin{box-sizing:border-box;width:min(440px,100%);height:300px;min-height:300px;align-self:center}.dshRemoteClientLogin{align-items:stretch;padding-top:16px}.dshRemoteClientLogin>button{align-self:stretch;width:100%}.dshRemoteQrLogin{padding-top:12px}",
|
|
3236
|
-
'.dshRemoteHostControlToggle{display:flex;align-items:center;gap:
|
|
3237
|
-
".dshRemoteAccountExit{flex:0 0 auto}.dshRemoteAccountExit:disabled{opacity:.5;cursor:default;text-decoration:none}",
|
|
3287
|
+
'.dshRemoteHostControlToggle{display:flex;align-items:center;gap:7px;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px;white-space:nowrap;cursor:default}.dshRemoteHostControlToggle>input{appearance:none;box-sizing:border-box;position:relative;width:32px;height:18px;flex:0 0 auto;margin:0;border:1px solid var(--dsw-alias-label-secondary);border-radius:999px;background:var(--dsw-alias-bg-layer-3);cursor:pointer;box-shadow:inset 0 0 0 1px var(--dsw-alias-border-l2);transition:background .16s ease-out,border-color .16s ease-out,box-shadow .16s ease-out}.dshRemoteHostControlToggle>input::after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:var(--dsw-alias-label-secondary);transition:transform .16s ease-out,background .16s ease-out}.dshRemoteHostControlToggle>input:checked{border-color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-state-success-primary);box-shadow:none}.dshRemoteHostControlToggle>input:checked::after{transform:translateX(14px);background:var(--dsw-alias-bg-layer-1)}.dshRemoteHostControlToggle>input:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.dshRemoteHostControlToggle>input:disabled{opacity:.5;cursor:default}@media(prefers-reduced-motion:reduce){.dshRemoteHostControlToggle>input,.dshRemoteHostControlToggle>input::after{transition:none}}',
|
|
3288
|
+
".dshRemoteAccountExit{flex:0 0 auto;border:0;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer;padding:5px 0;font-size:12px;line-height:1.5;white-space:nowrap}.dshRemoteAccountExit:hover:not(:disabled){color:var(--dsw-alias-label-primary);text-decoration:underline}.dshRemoteAccountExit:disabled{opacity:.5;cursor:default;text-decoration:none}",
|
|
3238
3289
|
".dshRemoteLocalLink{align-self:flex-start;border:0;background:transparent;color:var(--dsw-alias-label-secondary);padding:4px 0;cursor:pointer}.dshRemoteLocalLink:hover{color:var(--dsw-alias-label-primary)}",
|
|
3239
3290
|
"@keyframes dshRemotePageIn{from{opacity:0;transform:translateY(6px) scale(.99)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.dshRemotePage{animation:none}}@media(max-width:620px){.dshRemoteBackdrop{padding:12px}.dshRemotePage{max-height:calc(100vh - 24px)}.dshRemotePageHeader{padding:12px 16px}.dshRemoteSectionHeading{align-items:flex-start;flex-direction:column;gap:8px}.dshRemoteSectionActions{width:100%;justify-content:space-between}.dshRemotePageBody{padding:20px 16px}.dshRemoteOpenBar{align-items:flex-end}.dshRemoteOpenBar>button{min-height:48px}}",
|
|
3240
3291
|
".dshRemoteBackdrop{position:fixed;inset:0;z-index:1000;background:var(--dsw-alias-bg-mask-3);display:grid;place-items:center;padding:20px}",
|
|
@@ -3330,8 +3381,8 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3330
3381
|
})
|
|
3331
3382
|
}, RemoteWorkspaceAction)), ctx.slots.inject("settings.plugin.item", () => ctx.slots.register({
|
|
3332
3383
|
name: "settings.plugin.item",
|
|
3333
|
-
key: "
|
|
3334
|
-
id: "
|
|
3384
|
+
key: "ds-harness-remote",
|
|
3385
|
+
id: "ds-harness-remote",
|
|
3335
3386
|
order: 30,
|
|
3336
3387
|
locale: localeNamespace,
|
|
3337
3388
|
inject: () => ({ control })
|