ds-harness-remote 0.3.8
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/LICENSE +21 -0
- package/README.md +103 -0
- package/cordis.patch.yml +7 -0
- package/dist/adapters/agent-adapter.d.ts +35 -0
- package/dist/adapters/agent-adapter.d.ts.map +1 -0
- package/dist/adapters/agent-adapter.js +80 -0
- package/dist/adapters/agent-adapter.js.map +1 -0
- package/dist/adapters/permission-adapter.d.ts +13 -0
- package/dist/adapters/permission-adapter.d.ts.map +1 -0
- package/dist/adapters/permission-adapter.js +67 -0
- package/dist/adapters/permission-adapter.js.map +1 -0
- package/dist/adapters/session-adapter.d.ts +38 -0
- package/dist/adapters/session-adapter.d.ts.map +1 -0
- package/dist/adapters/session-adapter.js +230 -0
- package/dist/adapters/session-adapter.js.map +1 -0
- package/dist/adapters/workspace-adapter.d.ts +13 -0
- package/dist/adapters/workspace-adapter.d.ts.map +1 -0
- package/dist/adapters/workspace-adapter.js +21 -0
- package/dist/adapters/workspace-adapter.js.map +1 -0
- package/dist/api-proxy-switch.d.ts +33 -0
- package/dist/api-proxy-switch.d.ts.map +1 -0
- package/dist/api-proxy-switch.js +107 -0
- package/dist/api-proxy-switch.js.map +1 -0
- package/dist/bin/doctor.d.ts +3 -0
- package/dist/bin/doctor.d.ts.map +1 -0
- package/dist/bin/doctor.js +13 -0
- package/dist/bin/doctor.js.map +1 -0
- package/dist/client-runtime.d.ts +98 -0
- package/dist/client-runtime.d.ts.map +1 -0
- package/dist/client-runtime.js +421 -0
- package/dist/client-runtime.js.map +1 -0
- package/dist/client-secure-transport.d.ts +22 -0
- package/dist/client-secure-transport.d.ts.map +1 -0
- package/dist/client-secure-transport.js +129 -0
- package/dist/client-secure-transport.js.map +1 -0
- package/dist/client.d.ts +12 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.github.js +2938 -0
- package/dist/client.js +2938 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +33 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +80 -0
- package/dist/config.js.map +1 -0
- package/dist/connection-controller.d.ts +39 -0
- package/dist/connection-controller.d.ts.map +1 -0
- package/dist/connection-controller.js +170 -0
- package/dist/connection-controller.js.map +1 -0
- package/dist/control-runtime.d.ts +36 -0
- package/dist/control-runtime.d.ts.map +1 -0
- package/dist/control-runtime.js +265 -0
- package/dist/control-runtime.js.map +1 -0
- package/dist/event-sequencer.d.ts +23 -0
- package/dist/event-sequencer.d.ts.map +1 -0
- package/dist/event-sequencer.js +54 -0
- package/dist/event-sequencer.js.map +1 -0
- package/dist/harness-api-bridge.d.ts +55 -0
- package/dist/harness-api-bridge.d.ts.map +1 -0
- package/dist/harness-api-bridge.js +387 -0
- package/dist/harness-api-bridge.js.map +1 -0
- package/dist/identity-store.d.ts +45 -0
- package/dist/identity-store.d.ts.map +1 -0
- package/dist/identity-store.js +183 -0
- package/dist/identity-store.js.map +1 -0
- package/dist/ids.d.ts +2 -0
- package/dist/ids.d.ts.map +1 -0
- package/dist/ids.js +17 -0
- package/dist/ids.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16091 -0
- package/dist/index.js.map +7 -0
- package/dist/logging.d.ts +18 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +30 -0
- package/dist/logging.js.map +1 -0
- package/dist/pairing-controller.d.ts +52 -0
- package/dist/pairing-controller.d.ts.map +1 -0
- package/dist/pairing-controller.js +73 -0
- package/dist/pairing-controller.js.map +1 -0
- package/dist/pending-approvals.d.ts +14 -0
- package/dist/pending-approvals.d.ts.map +1 -0
- package/dist/pending-approvals.js +52 -0
- package/dist/pending-approvals.js.map +1 -0
- package/dist/remote-api-proxy.d.ts +12 -0
- package/dist/remote-api-proxy.d.ts.map +1 -0
- package/dist/remote-api-proxy.js +191 -0
- package/dist/remote-api-proxy.js.map +1 -0
- package/dist/remote-directory-browser.d.ts +16 -0
- package/dist/remote-directory-browser.d.ts.map +1 -0
- package/dist/remote-directory-browser.js +48 -0
- package/dist/remote-directory-browser.js.map +1 -0
- package/dist/rpc-router.d.ts +21 -0
- package/dist/rpc-router.d.ts.map +1 -0
- package/dist/rpc-router.js +93 -0
- package/dist/rpc-router.js.map +1 -0
- package/dist/server-api.d.ts +80 -0
- package/dist/server-api.d.ts.map +1 -0
- package/dist/server-api.js +405 -0
- package/dist/server-api.js.map +1 -0
- package/dist/server-connection.d.ts +70 -0
- package/dist/server-connection.d.ts.map +1 -0
- package/dist/server-connection.js +759 -0
- package/dist/server-connection.js.map +1 -0
- package/dist/server-credentials.d.ts +46 -0
- package/dist/server-credentials.d.ts.map +1 -0
- package/dist/server-credentials.js +71 -0
- package/dist/server-credentials.js.map +1 -0
- package/dist/service.d.ts +56 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +162 -0
- package/dist/service.js.map +1 -0
- package/dist/typert-gateway-switch.d.ts +19 -0
- package/dist/typert-gateway-switch.d.ts.map +1 -0
- package/dist/typert-gateway-switch.js +41 -0
- package/dist/typert-gateway-switch.js.map +1 -0
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +12 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +12 -0
- package/dist/version.js.map +1 -0
- package/dist/werift-rtc.d.ts +85 -0
- package/dist/werift-rtc.d.ts.map +1 -0
- package/dist/werift-rtc.js +164 -0
- package/dist/werift-rtc.js.map +1 -0
- package/package.json +98 -0
- package/public.d.ts +19 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* werift-backed Node RTC factory (webrtc-implementation-plan.md §6.2).
|
|
3
|
+
*
|
|
4
|
+
* werift is a pure-TypeScript WebRTC implementation with no native addons, so
|
|
5
|
+
* it installs and runs on Linux x64/ARM64 without toolchains. The factory is
|
|
6
|
+
* loaded lazily: `loadWeriftFactory` dynamically imports werift on first use,
|
|
7
|
+
* keeping DSH startup time and memory unaffected for hosts that never receive
|
|
8
|
+
* a WebRTC offer (or run with `forceRelay`).
|
|
9
|
+
*/
|
|
10
|
+
import type { RtcIceCandidateInit, RtcPeerConnectionFactory, RtcStats } from '@dsh-remote/webrtc';
|
|
11
|
+
interface WeriftModule {
|
|
12
|
+
RTCPeerConnection: new (config?: WeriftConfig) => WeriftPeerConnection;
|
|
13
|
+
}
|
|
14
|
+
interface WeriftConfig {
|
|
15
|
+
iceServers?: Array<{
|
|
16
|
+
urls: string | string[];
|
|
17
|
+
username?: string;
|
|
18
|
+
credential?: string;
|
|
19
|
+
}>;
|
|
20
|
+
iceUseIpv6?: boolean;
|
|
21
|
+
iceUseLinkLocalAddress?: boolean;
|
|
22
|
+
iceInterfaceAddresses?: {
|
|
23
|
+
udp4?: string;
|
|
24
|
+
udp6?: string;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
interface WeriftPeerConnection {
|
|
28
|
+
connectionState: string;
|
|
29
|
+
iceConnectionState: string;
|
|
30
|
+
iceGatheringState: string;
|
|
31
|
+
signalingState: string;
|
|
32
|
+
onconnectionstatechange: (() => void) | null;
|
|
33
|
+
oniceconnectionstatechange: (() => void) | null;
|
|
34
|
+
onicegatheringstatechange: (() => void) | null;
|
|
35
|
+
onicecandidate: ((event: {
|
|
36
|
+
candidate?: {
|
|
37
|
+
toJSON(): RtcIceCandidateInit;
|
|
38
|
+
};
|
|
39
|
+
}) => void) | null;
|
|
40
|
+
ondatachannel: ((event: {
|
|
41
|
+
channel: WeriftDataChannel;
|
|
42
|
+
}) => void) | null;
|
|
43
|
+
createDataChannel(label: string, options: {
|
|
44
|
+
ordered: boolean;
|
|
45
|
+
}): WeriftDataChannel;
|
|
46
|
+
createOffer(): Promise<{
|
|
47
|
+
type: 'offer' | 'answer';
|
|
48
|
+
sdp: string;
|
|
49
|
+
}>;
|
|
50
|
+
createAnswer(): Promise<{
|
|
51
|
+
type: 'offer' | 'answer';
|
|
52
|
+
sdp: string;
|
|
53
|
+
}>;
|
|
54
|
+
setLocalDescription(description?: {
|
|
55
|
+
type: string;
|
|
56
|
+
sdp?: string;
|
|
57
|
+
}): Promise<unknown>;
|
|
58
|
+
setRemoteDescription(description: {
|
|
59
|
+
type: string;
|
|
60
|
+
sdp?: string;
|
|
61
|
+
}): Promise<void>;
|
|
62
|
+
addIceCandidate(candidate?: RtcIceCandidateInit | null): Promise<void>;
|
|
63
|
+
getStats(): Promise<RtcStats>;
|
|
64
|
+
close(): Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
interface WeriftDataChannel {
|
|
67
|
+
readonly label: string;
|
|
68
|
+
readonly ordered: boolean;
|
|
69
|
+
readyState: string;
|
|
70
|
+
bufferedAmount: number;
|
|
71
|
+
onopen: (() => void) | null;
|
|
72
|
+
onclose: (() => void) | null;
|
|
73
|
+
onerror: (() => void) | null;
|
|
74
|
+
onmessage: ((event: {
|
|
75
|
+
data: string | Uint8Array;
|
|
76
|
+
}) => void) | null;
|
|
77
|
+
send(data: Buffer | string): void;
|
|
78
|
+
close(): void;
|
|
79
|
+
}
|
|
80
|
+
/** Load (once) a werift-backed factory, or `undefined` when it cannot be loaded. */
|
|
81
|
+
export declare function loadWeriftFactory(): Promise<RtcPeerConnectionFactory | undefined>;
|
|
82
|
+
/** Synchronous factory for tests and callers that already resolved werift. */
|
|
83
|
+
export declare function buildWeriftFactory(werift: WeriftModule): RtcPeerConnectionFactory;
|
|
84
|
+
export {};
|
|
85
|
+
//# sourceMappingURL=werift-rtc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"werift-rtc.d.ts","sourceRoot":"","sources":["../src/werift-rtc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* werift-backed Node RTC factory (webrtc-implementation-plan.md §6.2).
|
|
3
|
+
*
|
|
4
|
+
* werift is a pure-TypeScript WebRTC implementation with no native addons, so
|
|
5
|
+
* it installs and runs on Linux x64/ARM64 without toolchains. The factory is
|
|
6
|
+
* loaded lazily: `loadWeriftFactory` dynamically imports werift on first use,
|
|
7
|
+
* keeping DSH startup time and memory unaffected for hosts that never receive
|
|
8
|
+
* a WebRTC offer (or run with `forceRelay`).
|
|
9
|
+
*/
|
|
10
|
+
import { networkInterfaces } from 'node:os';
|
|
11
|
+
let cachedFactory;
|
|
12
|
+
/** Load (once) a werift-backed factory, or `undefined` when it cannot be loaded. */
|
|
13
|
+
export async function loadWeriftFactory() {
|
|
14
|
+
if (cachedFactory !== undefined)
|
|
15
|
+
return cachedFactory;
|
|
16
|
+
try {
|
|
17
|
+
const werift = (await import('werift'));
|
|
18
|
+
cachedFactory = buildWeriftFactory(werift);
|
|
19
|
+
return cachedFactory;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Synchronous factory for tests and callers that already resolved werift. */
|
|
26
|
+
export function buildWeriftFactory(werift) {
|
|
27
|
+
return {
|
|
28
|
+
create(configuration) {
|
|
29
|
+
const hostIpv4 = detectHostIpv4();
|
|
30
|
+
const raw = new werift.RTCPeerConnection({
|
|
31
|
+
iceServers: (configuration.iceServers ?? []),
|
|
32
|
+
iceUseIpv6: false,
|
|
33
|
+
iceUseLinkLocalAddress: false,
|
|
34
|
+
...(hostIpv4 === undefined ? {} : { iceInterfaceAddresses: { udp4: hostIpv4 } }),
|
|
35
|
+
});
|
|
36
|
+
let onIceCandidate = null;
|
|
37
|
+
let onDataChannel = null;
|
|
38
|
+
raw.onicecandidate = event => {
|
|
39
|
+
if (onIceCandidate === null)
|
|
40
|
+
return;
|
|
41
|
+
onIceCandidate({ candidate: event.candidate === undefined ? null : event.candidate.toJSON() });
|
|
42
|
+
};
|
|
43
|
+
raw.ondatachannel = event => {
|
|
44
|
+
if (onDataChannel === null)
|
|
45
|
+
return;
|
|
46
|
+
onDataChannel({ channel: adaptDataChannel(event.channel) });
|
|
47
|
+
};
|
|
48
|
+
const pc = {
|
|
49
|
+
get connectionState() { return raw.connectionState; },
|
|
50
|
+
get iceConnectionState() { return raw.iceConnectionState; },
|
|
51
|
+
get iceGatheringState() { return raw.iceGatheringState; },
|
|
52
|
+
get signalingState() { return raw.signalingState; },
|
|
53
|
+
set onconnectionstatechange(value) { raw.onconnectionstatechange = value; },
|
|
54
|
+
get onconnectionstatechange() { return raw.onconnectionstatechange; },
|
|
55
|
+
set oniceconnectionstatechange(value) { raw.oniceconnectionstatechange = value; },
|
|
56
|
+
get oniceconnectionstatechange() { return raw.oniceconnectionstatechange; },
|
|
57
|
+
set onicegatheringstatechange(value) { raw.onicegatheringstatechange = value; },
|
|
58
|
+
get onicegatheringstatechange() { return raw.onicegatheringstatechange; },
|
|
59
|
+
set onicecandidate(value) { onIceCandidate = value; },
|
|
60
|
+
get onicecandidate() { return onIceCandidate; },
|
|
61
|
+
set ondatachannel(value) { onDataChannel = value; },
|
|
62
|
+
get ondatachannel() { return onDataChannel; },
|
|
63
|
+
createDataChannel(label, options) {
|
|
64
|
+
return adaptDataChannel(raw.createDataChannel(label, { ordered: options?.ordered ?? true }));
|
|
65
|
+
},
|
|
66
|
+
createOffer() { return raw.createOffer(); },
|
|
67
|
+
createAnswer() { return raw.createAnswer(); },
|
|
68
|
+
setLocalDescription(description) { return raw.setLocalDescription(description).then(() => undefined); },
|
|
69
|
+
setRemoteDescription(description) { return raw.setRemoteDescription(description); },
|
|
70
|
+
addIceCandidate(candidate) { return raw.addIceCandidate(candidate); },
|
|
71
|
+
getStats() { return raw.getStats(); },
|
|
72
|
+
close() { void raw.close().catch(() => undefined); },
|
|
73
|
+
};
|
|
74
|
+
return pc;
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function adaptDataChannel(raw) {
|
|
79
|
+
return {
|
|
80
|
+
get label() { return raw.label; },
|
|
81
|
+
get ordered() { return raw.ordered; },
|
|
82
|
+
get readyState() { return raw.readyState; },
|
|
83
|
+
get bufferedAmount() { return raw.bufferedAmount; },
|
|
84
|
+
binaryType: 'arraybuffer',
|
|
85
|
+
set onopen(value) { raw.onopen = value; },
|
|
86
|
+
get onopen() { return raw.onopen; },
|
|
87
|
+
set onmessage(value) {
|
|
88
|
+
raw.onmessage = value === null ? null : event => value({ data: toArrayBuffer(event.data) });
|
|
89
|
+
},
|
|
90
|
+
get onmessage() { return null; },
|
|
91
|
+
set onclose(value) { raw.onclose = value; },
|
|
92
|
+
get onclose() { return raw.onclose; },
|
|
93
|
+
set onerror(value) { raw.onerror = value; },
|
|
94
|
+
get onerror() { return raw.onerror; },
|
|
95
|
+
onbufferedamountlow: null,
|
|
96
|
+
send(data) {
|
|
97
|
+
const bytes = typeof data === 'string' ? Buffer.byteLength(data) : data.byteLength;
|
|
98
|
+
try {
|
|
99
|
+
raw.send(typeof data === 'string' ? data : Buffer.from(data));
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
console.error('[werift-send-error] bytes=' + bytes, error instanceof Error ? error.message : error);
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
close() { raw.close(); },
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function toArrayBuffer(data) {
|
|
110
|
+
if (typeof data === 'string')
|
|
111
|
+
return data;
|
|
112
|
+
// `Buffer.prototype.slice()` (unlike `Uint8Array.prototype.slice()`) returns a
|
|
113
|
+
// *view* over the pooled 8 KiB receive buffer, so slicing the underlying
|
|
114
|
+
// ArrayBuffer by byte offset/length is required to extract just the message.
|
|
115
|
+
return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Pick the single best IPv4 host address for ICE gathering.
|
|
119
|
+
*
|
|
120
|
+
* On macOS a host exposes many interfaces (WiFi `en0`, Thunderbolt `en1-4`,
|
|
121
|
+
* `bridge*`, Apple Wireless Direct Link `awdl0`/`llw0`, and several VPN `utun*`
|
|
122
|
+
* tunnels whose small MTUs drop large SCTP packets). Gathering a candidate for
|
|
123
|
+
* every interface lets ICE select a bad path. Restrict werift to one real
|
|
124
|
+
* interface and disable IPv6/link-local so the DataChannel rides the same
|
|
125
|
+
* interface as the Server control connection.
|
|
126
|
+
*/
|
|
127
|
+
function detectHostIpv4() {
|
|
128
|
+
const preferred = [];
|
|
129
|
+
const fallback = [];
|
|
130
|
+
for (const [name, addresses] of Object.entries(networkInterfaces())) {
|
|
131
|
+
if (isVirtualInterface(name))
|
|
132
|
+
continue;
|
|
133
|
+
for (const address of addresses ?? []) {
|
|
134
|
+
if (address.internal || address.family !== 'IPv4')
|
|
135
|
+
continue;
|
|
136
|
+
const ip = address.address;
|
|
137
|
+
if (ip.startsWith('127.') || ip.startsWith('169.254.') || isCgnat(ip))
|
|
138
|
+
continue;
|
|
139
|
+
if (isPrivate(ip))
|
|
140
|
+
preferred.push(ip);
|
|
141
|
+
else
|
|
142
|
+
fallback.push(ip);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return preferred[0] ?? fallback[0];
|
|
146
|
+
}
|
|
147
|
+
function isVirtualInterface(name) {
|
|
148
|
+
return /^(utun|ppp|bridge|awdl|llw|gif|stf|anpi|ap\d|en[1-9]\d*$)/i.test(name);
|
|
149
|
+
}
|
|
150
|
+
function isCgnat(ip) {
|
|
151
|
+
const parts = ip.split('.').map(Number);
|
|
152
|
+
return parts.length === 4 && parts[0] === 100 && parts[1] >= 64 && parts[1] <= 127;
|
|
153
|
+
}
|
|
154
|
+
function isPrivate(ip) {
|
|
155
|
+
const parts = ip.split('.').map(Number);
|
|
156
|
+
if (parts.length !== 4)
|
|
157
|
+
return false;
|
|
158
|
+
if (parts[0] === 10)
|
|
159
|
+
return true;
|
|
160
|
+
if (parts[0] === 192 && parts[1] === 168)
|
|
161
|
+
return true;
|
|
162
|
+
return parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=werift-rtc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"werift-rtc.js","sourceRoot":"","sources":["../src/werift-rtc.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ds-harness-remote",
|
|
3
|
+
"version": "0.3.8",
|
|
4
|
+
"description": "DeepSeek 远程连接",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./public.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./public.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
14
|
+
"./client": "./dist/client.js",
|
|
15
|
+
"./package.json": "./package.json"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"cordis.patch.yml",
|
|
20
|
+
"public.d.ts",
|
|
21
|
+
"README.md",
|
|
22
|
+
"LICENSE"
|
|
23
|
+
],
|
|
24
|
+
"dsh": {
|
|
25
|
+
"bundle": {
|
|
26
|
+
"patch": "./cordis.patch.yml"
|
|
27
|
+
},
|
|
28
|
+
"client": {
|
|
29
|
+
"inject": [
|
|
30
|
+
"@deepseek-ai/dsh-client-connection",
|
|
31
|
+
"@deepseek-ai/dsh-client-locale",
|
|
32
|
+
"@deepseek-ai/dsh-client-ui-sidebar",
|
|
33
|
+
"@deepseek-ai/dsh-client-ui-slots",
|
|
34
|
+
"@deepseek-ai/dsh-client-ui-settings",
|
|
35
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins"
|
|
36
|
+
],
|
|
37
|
+
"platform": "web"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@deepseek-ai/schemastery": "^3.18.1",
|
|
42
|
+
"qrcode": "^1.5.4",
|
|
43
|
+
"werift": "0.24.4",
|
|
44
|
+
"zod": "^3.24.1"
|
|
45
|
+
},
|
|
46
|
+
"peerDependencies": {
|
|
47
|
+
"@deepseek-ai/cordis": ">=4.0.1 <5",
|
|
48
|
+
"@deepseek-ai/dsh-client-connection": ">=0.1.0-rc.6 <0.2.0",
|
|
49
|
+
"@deepseek-ai/dsh-client-locale": ">=0.1.0-rc.6 <0.2.0",
|
|
50
|
+
"@deepseek-ai/dsh-client-ui-settings": ">=0.1.0-rc.6 <0.2.0",
|
|
51
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins": ">=0.1.0-rc.6 <0.2.0",
|
|
52
|
+
"@deepseek-ai/dsh-client-ui-sidebar": ">=0.1.0-rc.6 <0.2.0",
|
|
53
|
+
"@deepseek-ai/dsh-client-ui-slots": ">=0.1.0-rc.6 <0.2.0",
|
|
54
|
+
"@deepseek-ai/dsh-host-apiproxy": ">=0.1.0-rc.6 <0.2.0",
|
|
55
|
+
"@deepseek-ai/dsh-settings": ">=0.1.0-rc.6 <0.2.0",
|
|
56
|
+
"react": ">=18.2.0 <19"
|
|
57
|
+
},
|
|
58
|
+
"peerDependenciesMeta": {
|
|
59
|
+
"@deepseek-ai/dsh-client-connection": {
|
|
60
|
+
"optional": true
|
|
61
|
+
},
|
|
62
|
+
"@deepseek-ai/dsh-client-locale": {
|
|
63
|
+
"optional": true
|
|
64
|
+
},
|
|
65
|
+
"@deepseek-ai/dsh-client-ui-sidebar": {
|
|
66
|
+
"optional": true
|
|
67
|
+
},
|
|
68
|
+
"@deepseek-ai/dsh-client-ui-slots": {
|
|
69
|
+
"optional": true
|
|
70
|
+
},
|
|
71
|
+
"@deepseek-ai/dsh-client-ui-settings": {
|
|
72
|
+
"optional": true
|
|
73
|
+
},
|
|
74
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins": {
|
|
75
|
+
"optional": true
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"devDependencies": {
|
|
79
|
+
"@deepseek-ai/cordis": "4.0.1",
|
|
80
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.1.0-rc.6",
|
|
81
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins": "0.1.0-rc.6",
|
|
82
|
+
"@deepseek-ai/dsh-host-apiproxy": "0.1.0-rc.6",
|
|
83
|
+
"@deepseek-ai/dsh-settings": "0.1.0-rc.6",
|
|
84
|
+
"@types/qrcode": "^1.5.5",
|
|
85
|
+
"esbuild": "^0.25.0",
|
|
86
|
+
"typescript": "^5.7.3",
|
|
87
|
+
"vitest": "^2.1.8",
|
|
88
|
+
"@dsh-remote/crypto": "0.1.0",
|
|
89
|
+
"@dsh-remote/webrtc": "0.1.0",
|
|
90
|
+
"@dsh-remote/client-core": "0.1.0",
|
|
91
|
+
"@dsh-remote/protocol": "0.1.0"
|
|
92
|
+
},
|
|
93
|
+
"scripts": {
|
|
94
|
+
"build": "node scripts/verify-version-sync.mjs && tsc -p tsconfig.json && node scripts/build-bundles.mjs",
|
|
95
|
+
"check": "node scripts/verify-version-sync.mjs && tsc -p tsconfig.test.json",
|
|
96
|
+
"test": "node scripts/verify-version-sync.mjs && vitest run"
|
|
97
|
+
}
|
|
98
|
+
}
|
package/public.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis'
|
|
2
|
+
|
|
3
|
+
export interface Config {
|
|
4
|
+
enabled?: boolean
|
|
5
|
+
role?: 'host' | 'client' | 'both'
|
|
6
|
+
serverUrl?: string
|
|
7
|
+
deviceName?: string
|
|
8
|
+
forceRelay?: boolean
|
|
9
|
+
logLevel?: 'debug' | 'info' | 'warn' | 'error'
|
|
10
|
+
reconnect?: boolean | {
|
|
11
|
+
initialDelayMs?: number
|
|
12
|
+
maxDelayMs?: number
|
|
13
|
+
jitter?: number
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export declare const name: 'dsh-remote'
|
|
18
|
+
export declare const Config: unknown
|
|
19
|
+
export declare function apply(ctx: Context, config?: Config): void
|