ds-harness-remote 0.3.32 → 0.3.34
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 +3 -3
- package/dist/client-runtime.d.ts +2 -1
- package/dist/client-runtime.d.ts.map +1 -1
- package/dist/client-runtime.js +73 -31
- package/dist/client-runtime.js.map +1 -1
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.github.js +88 -54
- package/dist/client.js +88 -54
- package/dist/client.js.map +1 -1
- package/dist/harness-api-bridge.d.ts.map +1 -1
- package/dist/harness-api-bridge.js +2 -5
- package/dist/harness-api-bridge.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1384 -113
- 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/rpc-router.d.ts +1 -6
- package/dist/rpc-router.d.ts.map +1 -1
- package/dist/rpc-router.js +5 -20
- package/dist/rpc-router.js.map +1 -1
- package/dist/safe-error.d.ts +8 -0
- package/dist/safe-error.d.ts.map +1 -0
- package/dist/safe-error.js +20 -0
- package/dist/safe-error.js.map +1 -0
- 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 +4 -2
- 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/public.d.ts +1 -1
package/dist/client.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 = "ds-harness-remote", localeNamespace = "
|
|
1694
|
+
var clientModuleId = "ds-harness-remote", localeNamespace = "ds-harness-remote", en = {
|
|
1695
1695
|
pluginTitle: "DeepSeek Remote",
|
|
1696
1696
|
pluginDescription: "Connect once. Available anytime.",
|
|
1697
1697
|
expandSettings: "Show settings: {name}",
|
|
@@ -1798,6 +1798,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
1798
1798
|
remoteProgressProbeRelay: "Preparing Relay",
|
|
1799
1799
|
remoteProgressProbeRelayDetail: "Preparing the encrypted Server Relay fallback if direct paths do not open.",
|
|
1800
1800
|
remoteProgressTryingPrefix: "Trying ",
|
|
1801
|
+
remoteProgressUsingPrefix: "Using ",
|
|
1801
1802
|
remoteProgressLoadingWorkspaces: "Loading workspaces",
|
|
1802
1803
|
remoteProgressLoadingWorkspacesDetail: "Reading the remote Harness workspace list through the tunnel.",
|
|
1803
1804
|
remoteProgressOpeningWorkspace: "Opening workspace",
|
|
@@ -1992,6 +1993,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
1992
1993
|
remoteProgressProbeRelay: "\u6B63\u5728\u51C6\u5907 Relay",
|
|
1993
1994
|
remoteProgressProbeRelayDetail: "\u5982\u679C\u76F4\u8FDE\u8DEF\u5F84\u672A\u6253\u5F00\uFF0C\u5C06\u56DE\u843D\u5230\u52A0\u5BC6\u7684 Server Relay\u3002",
|
|
1994
1995
|
remoteProgressTryingPrefix: "\u6B63\u5728\u5C1D\u8BD5 ",
|
|
1996
|
+
remoteProgressUsingPrefix: "\u5DF2\u8FDE\u63A5 ",
|
|
1995
1997
|
remoteProgressLoadingWorkspaces: "\u6B63\u5728\u52A0\u8F7D\u5DE5\u4F5C\u533A",
|
|
1996
1998
|
remoteProgressLoadingWorkspacesDetail: "\u901A\u8FC7\u96A7\u9053\u8BFB\u53D6\u8FDC\u7AEF Harness \u5DE5\u4F5C\u533A\u5217\u8868\u3002",
|
|
1997
1999
|
remoteProgressOpeningWorkspace: "\u6B63\u5728\u6253\u5F00\u5DE5\u4F5C\u533A",
|
|
@@ -2113,20 +2115,39 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2113
2115
|
return value === "lan" ? { label: "remoteProgressProbeLan", detail: "remoteProgressProbeLanDetail" } : value === "p2p" ? { label: "remoteProgressProbeP2p", detail: "remoteProgressProbeP2pDetail" } : value === "turn" ? { label: "remoteProgressProbeTurn", detail: "remoteProgressProbeTurnDetail" } : { label: "remoteProgressProbeRelay", detail: "remoteProgressProbeRelayDetail" };
|
|
2114
2116
|
}
|
|
2115
2117
|
function connectHostProgressSteps(preferredTransports) {
|
|
2116
|
-
let transports = normalizedPreferredTransports(preferredTransports);
|
|
2118
|
+
let transports = normalizedPreferredTransports(preferredTransports), probeTransports = transports.filter((transport) => transport !== "relay" || transports.length === 1);
|
|
2117
2119
|
return [
|
|
2118
2120
|
{ label: "remoteProgressCheckingHost", detail: "remoteProgressCheckingHostDetail", percent: 12 },
|
|
2119
2121
|
{ label: "remoteProgressAuthorizingPeer", detail: "remoteProgressAuthorizingPeerDetail", percent: 30, delayMs: 280 },
|
|
2120
|
-
...
|
|
2122
|
+
...probeTransports.map((transport, index) => ({
|
|
2121
2123
|
...transportProgressCopy(transport),
|
|
2122
2124
|
percent: Math.min(76, 42 + index * 10),
|
|
2123
2125
|
delayMs: 680 + index * 360,
|
|
2124
|
-
transports,
|
|
2125
|
-
activeTransport: transport
|
|
2126
|
+
transports: probeTransports,
|
|
2127
|
+
activeTransport: transport,
|
|
2128
|
+
routeVerb: "trying"
|
|
2126
2129
|
})),
|
|
2127
2130
|
{ label: "remoteProgressLoadingWorkspaces", detail: "remoteProgressLoadingWorkspacesDetail", percent: 84, delayMs: 1520, transports }
|
|
2128
2131
|
];
|
|
2129
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
|
+
}
|
|
2130
2151
|
function connectionErrorMessage(code, t) {
|
|
2131
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");
|
|
2132
2153
|
}
|
|
@@ -2146,7 +2167,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2146
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(
|
|
2147
2168
|
"span",
|
|
2148
2169
|
{ className: "dshRemoteProgressRoute" },
|
|
2149
|
-
props.t("remoteProgressTryingPrefix"),
|
|
2170
|
+
props.t(progress.routeVerb === "using" ? "remoteProgressUsingPrefix" : "remoteProgressTryingPrefix"),
|
|
2150
2171
|
progress.transports.map((transport, index) => React.createElement(
|
|
2151
2172
|
React.Fragment,
|
|
2152
2173
|
{ key: `${transport}:${index}` },
|
|
@@ -2180,7 +2201,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2180
2201
|
}, React.createElement("span", { style: { width: `${percent}%` } }))
|
|
2181
2202
|
);
|
|
2182
2203
|
}
|
|
2183
|
-
async function runRemoteProgress(steps, setProgress, progressRun, action) {
|
|
2204
|
+
async function runRemoteProgress(steps, setProgress, progressRun, action, readyProgress) {
|
|
2184
2205
|
let runId = progressRun.current + 1;
|
|
2185
2206
|
progressRun.current = runId;
|
|
2186
2207
|
let apply2 = (next) => {
|
|
@@ -2190,7 +2211,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2190
2211
|
let timers = rest.map((step) => window.setTimeout(() => apply2(step), step.delayMs ?? 0));
|
|
2191
2212
|
try {
|
|
2192
2213
|
let result = await action();
|
|
2193
|
-
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;
|
|
2194
2215
|
} finally {
|
|
2195
2216
|
timers.forEach((timer) => window.clearTimeout(timer)), progressRun.current === runId && setProgress(void 0);
|
|
2196
2217
|
}
|
|
@@ -2492,12 +2513,18 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2492
2513
|
}, t(provider === "github" ? "githubLogin" : "zhihuLogin")), selectHost = async (host) => {
|
|
2493
2514
|
setBusy(!0), setError(void 0);
|
|
2494
2515
|
try {
|
|
2495
|
-
|
|
2516
|
+
let result = await runRemoteProgress(
|
|
2496
2517
|
connectHostProgressSteps(status?.preferredTransports),
|
|
2497
2518
|
setProgress,
|
|
2498
2519
|
progressRun,
|
|
2499
|
-
() =>
|
|
2500
|
-
|
|
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);
|
|
2501
2528
|
} catch (reason) {
|
|
2502
2529
|
setError(messageOf(reason));
|
|
2503
2530
|
} finally {
|
|
@@ -2573,20 +2600,22 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2573
2600
|
if (!(selectedHost === void 0 || path.trim() === "")) {
|
|
2574
2601
|
setBusy(!0), setError(void 0);
|
|
2575
2602
|
try {
|
|
2576
|
-
await runRemoteProgress(
|
|
2603
|
+
let nextStatus = await runRemoteProgress(
|
|
2577
2604
|
openWorkspaceProgressSteps,
|
|
2578
2605
|
setProgress,
|
|
2579
2606
|
progressRun,
|
|
2580
2607
|
() => props.control("workspace.open", {
|
|
2581
2608
|
targetDeviceId: selectedHost.deviceId,
|
|
2582
2609
|
path: path.trim()
|
|
2583
|
-
})
|
|
2584
|
-
|
|
2610
|
+
}),
|
|
2611
|
+
connectedProgress
|
|
2612
|
+
);
|
|
2613
|
+
setStatus(nextStatus), window.location.reload();
|
|
2585
2614
|
} catch (reason) {
|
|
2586
2615
|
setError(messageOf(reason)), setBusy(!1);
|
|
2587
2616
|
}
|
|
2588
2617
|
}
|
|
2589
|
-
}, remoteLabel = status?.mode === "remote" ? t("activeRemote", { name: status.target?.name ?? t("host") }) : t("remoteEntry")
|
|
2618
|
+
}, remoteLabel = status?.mode === "remote" ? t("activeRemote", { name: status.target?.name ?? t("host") }) : t("remoteEntry");
|
|
2590
2619
|
return React.createElement(
|
|
2591
2620
|
React.Fragment,
|
|
2592
2621
|
null,
|
|
@@ -2761,39 +2790,34 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2761
2790
|
React.createElement(
|
|
2762
2791
|
"div",
|
|
2763
2792
|
{ className: "dshRemoteSectionHeading" },
|
|
2764
|
-
React.createElement("strong", null, t("chooseHost")),
|
|
2765
2793
|
React.createElement(
|
|
2766
2794
|
"div",
|
|
2767
|
-
{ className: "
|
|
2768
|
-
React.createElement(
|
|
2795
|
+
{ className: "dshRemoteSectionTitle" },
|
|
2796
|
+
React.createElement("strong", null, t("chooseHost")),
|
|
2797
|
+
status?.hostAuthorizationAvailable ? React.createElement(
|
|
2769
2798
|
"div",
|
|
2770
|
-
{ className: "
|
|
2771
|
-
React.createElement(
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
|
|
2781
|
-
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
onChange: (event) => void setCurrentDeviceControl(event.target.checked)
|
|
2793
|
-
})
|
|
2794
|
-
) : null
|
|
2795
|
-
),
|
|
2796
|
-
selectedHost === void 0 ? null : React.createElement("button", {
|
|
2799
|
+
{ className: "dshRemoteHostControlToggle" },
|
|
2800
|
+
React.createElement("span", null, t("allowControlCurrentDevice")),
|
|
2801
|
+
React.createElement("input", {
|
|
2802
|
+
type: "checkbox",
|
|
2803
|
+
role: "switch",
|
|
2804
|
+
disabled: busy,
|
|
2805
|
+
"aria-label": t("allowControlCurrentDevice"),
|
|
2806
|
+
checked: status.host?.authorized === !0,
|
|
2807
|
+
onChange: (event) => void setCurrentDeviceControl(event.target.checked)
|
|
2808
|
+
})
|
|
2809
|
+
) : null,
|
|
2810
|
+
React.createElement("button", {
|
|
2811
|
+
type: "button",
|
|
2812
|
+
className: "dshRemoteAccountExit",
|
|
2813
|
+
disabled: busy,
|
|
2814
|
+
onClick: () => void logoutRemote()
|
|
2815
|
+
}, t("exitRemoteAccount"))
|
|
2816
|
+
),
|
|
2817
|
+
selectedHost === void 0 ? null : React.createElement(
|
|
2818
|
+
"div",
|
|
2819
|
+
{ className: "dshRemoteSectionActions" },
|
|
2820
|
+
React.createElement("button", {
|
|
2797
2821
|
type: "button",
|
|
2798
2822
|
onClick: () => {
|
|
2799
2823
|
setSelectedHost(void 0), setWorkspaces([]), setDirectory(void 0), setPath(""), setAddingWorkspace(!1), setError(void 0);
|
|
@@ -2932,7 +2956,13 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
2932
2956
|
setBusy(!0), setError(void 0);
|
|
2933
2957
|
try {
|
|
2934
2958
|
let action = () => props.control("mode.set", { mode, ...targetDeviceId === void 0 ? {} : { targetDeviceId } });
|
|
2935
|
-
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();
|
|
2936
2966
|
} catch (reason) {
|
|
2937
2967
|
setError(messageOf(reason)), setBusy(!1);
|
|
2938
2968
|
}
|
|
@@ -3080,7 +3110,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3080
3110
|
} finally {
|
|
3081
3111
|
setBusy(!1);
|
|
3082
3112
|
}
|
|
3083
|
-
}, 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(
|
|
3084
3114
|
"div",
|
|
3085
3115
|
null,
|
|
3086
3116
|
React.createElement("dt", null, label),
|
|
@@ -3239,7 +3269,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3239
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)}",
|
|
3240
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)}",
|
|
3241
3271
|
".dshRemotePageBody{padding:24px;overflow:auto;display:flex;flex-direction:column;gap:24px}.dshRemotePageBody button{font:inherit;color:inherit}",
|
|
3242
|
-
".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}",
|
|
3243
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)}",
|
|
3244
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}",
|
|
3245
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)}",
|
|
@@ -3254,7 +3284,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3254
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}",
|
|
3255
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}",
|
|
3256
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}",
|
|
3257
|
-
'.
|
|
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}}',
|
|
3258
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}",
|
|
3259
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)}",
|
|
3260
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}}",
|
|
@@ -3281,6 +3311,10 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3281
3311
|
].join(""), document.head.append(style), () => style.remove();
|
|
3282
3312
|
}
|
|
3283
3313
|
function apply(ctx) {
|
|
3314
|
+
if (window.__DS_HARNESS_REMOTE_CLIENT_ACTIVE__) return;
|
|
3315
|
+
window.__DS_HARNESS_REMOTE_CLIENT_ACTIVE__ = !0, ctx.effect(() => () => {
|
|
3316
|
+
window.__DS_HARNESS_REMOTE_CLIENT_ACTIVE__ = !1;
|
|
3317
|
+
}, "ds-harness-remote: client singleton");
|
|
3284
3318
|
let t = ctx.locale.bind(localeNamespace), control = async (endpoint, payload = {}) => {
|
|
3285
3319
|
let result;
|
|
3286
3320
|
for (let attempt = 0; ; attempt += 1)
|
|
@@ -3311,7 +3345,7 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3311
3345
|
}), () => {
|
|
3312
3346
|
disposed = !0, unsubscribe?.();
|
|
3313
3347
|
};
|
|
3314
|
-
}, "
|
|
3348
|
+
}, "ds-harness-remote: resume selected workspace"), ctx.inject(["fileViewer"], (fileViewerContext) => {
|
|
3315
3349
|
let viewer = fileViewerContext.get("fileViewer");
|
|
3316
3350
|
viewer !== void 0 && fileViewerContext.effect(() => {
|
|
3317
3351
|
let active = !0, unregister, latestSaveAsAllowed = !1, sync = async () => {
|
|
@@ -3333,16 +3367,16 @@ Minimum version required to store current data is: ` + bestVersion + `.
|
|
|
3333
3367
|
return () => {
|
|
3334
3368
|
active = !1, window.clearInterval(timer), unregister?.();
|
|
3335
3369
|
};
|
|
3336
|
-
}, "
|
|
3337
|
-
}), ctx.effect(() => ctx.locale.register(localeNamespace, { zh, en }), "
|
|
3370
|
+
}, "ds-harness-remote: remote file viewer provider");
|
|
3371
|
+
}), ctx.effect(() => ctx.locale.register(localeNamespace, { zh, en }), "ds-harness-remote: dictionaries"), ctx.effect(installStyle, "ds-harness-remote: client styles"), ctx.slots.inject("shell.overlay", () => ctx.slots.register({
|
|
3338
3372
|
name: "shell.overlay",
|
|
3339
|
-
id: "
|
|
3373
|
+
id: "ds-harness-remote-global-context",
|
|
3340
3374
|
order: 20,
|
|
3341
3375
|
locale: localeNamespace,
|
|
3342
3376
|
inject: () => ({ control })
|
|
3343
3377
|
}, RemoteSessionHeaderAction)), ctx.slots.inject("sidebar.footer.action", () => ctx.slots.register({
|
|
3344
3378
|
name: "sidebar.footer.action",
|
|
3345
|
-
id: "
|
|
3379
|
+
id: "ds-harness-remote-workspace",
|
|
3346
3380
|
order: -20,
|
|
3347
3381
|
locale: localeNamespace,
|
|
3348
3382
|
inject: () => ({
|