@blue-soda/dsh-remote 0.5.5 → 0.5.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/README.md +2 -2
- package/cordis.patch.yml +30 -30
- package/dist/client.github.js +1 -1
- package/dist/client.js +1 -1
- package/dist/index.js +371 -80
- package/dist/index.js.map +4 -4
- package/dsh-plugin.json +41 -41
- package/package.json +165 -165
- package/dist/acp.d.ts +0 -75
- package/dist/acp.d.ts.map +0 -1
- package/dist/acp.js +0 -61
- package/dist/acp.js.map +0 -1
- package/dist/api-proxy-switch.d.ts +0 -33
- package/dist/api-proxy-switch.d.ts.map +0 -1
- package/dist/api-proxy-switch.js +0 -109
- package/dist/api-proxy-switch.js.map +0 -1
- package/dist/atomic-file.d.ts +0 -16
- package/dist/atomic-file.d.ts.map +0 -1
- package/dist/atomic-file.js +0 -81
- package/dist/atomic-file.js.map +0 -1
- package/dist/bin/doctor.d.ts +0 -3
- package/dist/bin/doctor.d.ts.map +0 -1
- package/dist/bin/doctor.js +0 -13
- package/dist/bin/doctor.js.map +0 -1
- package/dist/cli.d.ts +0 -32
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -289
- package/dist/cli.js.map +0 -1
- package/dist/client-runtime.d.ts +0 -375
- package/dist/client-runtime.d.ts.map +0 -1
- package/dist/client-runtime.js +0 -1768
- package/dist/client-runtime.js.map +0 -1
- package/dist/client-secure-transport.d.ts +0 -23
- package/dist/client-secure-transport.d.ts.map +0 -1
- package/dist/client-secure-transport.js +0 -144
- package/dist/client-secure-transport.js.map +0 -1
- package/dist/client-target-store.d.ts +0 -40
- package/dist/client-target-store.d.ts.map +0 -1
- package/dist/client-target-store.js +0 -79
- package/dist/client-target-store.js.map +0 -1
- package/dist/client.d.ts +0 -13
- package/dist/client.d.ts.map +0 -1
- package/dist/codex/app-server.d.ts +0 -71
- package/dist/codex/app-server.d.ts.map +0 -1
- package/dist/codex/app-server.js +0 -268
- package/dist/codex/app-server.js.map +0 -1
- package/dist/codex/codex-image-codec.d.ts +0 -7
- package/dist/codex/codex-image-codec.d.ts.map +0 -1
- package/dist/codex/codex-image-codec.js +0 -288
- package/dist/codex/codex-image-codec.js.map +0 -1
- package/dist/codex/domain.d.ts +0 -102
- package/dist/codex/domain.d.ts.map +0 -1
- package/dist/codex/domain.js +0 -1323
- package/dist/codex/domain.js.map +0 -1
- package/dist/codex/method-policy.d.ts +0 -338
- package/dist/codex/method-policy.d.ts.map +0 -1
- package/dist/codex/method-policy.js +0 -141
- package/dist/codex/method-policy.js.map +0 -1
- package/dist/codex/peer-bridge.d.ts +0 -57
- package/dist/codex/peer-bridge.d.ts.map +0 -1
- package/dist/codex/peer-bridge.js +0 -299
- package/dist/codex/peer-bridge.js.map +0 -1
- package/dist/codex/permissions.d.ts +0 -4
- package/dist/codex/permissions.d.ts.map +0 -1
- package/dist/codex/permissions.js +0 -21
- package/dist/codex/permissions.js.map +0 -1
- package/dist/codex/session-id.d.ts +0 -10
- package/dist/codex/session-id.d.ts.map +0 -1
- package/dist/codex/session-id.js +0 -15
- package/dist/codex/session-id.js.map +0 -1
- package/dist/codex/virtual-harness.d.ts +0 -209
- package/dist/codex/virtual-harness.d.ts.map +0 -1
- package/dist/codex/virtual-harness.js +0 -2650
- package/dist/codex/virtual-harness.js.map +0 -1
- package/dist/codex-workspace-bridge.d.ts +0 -108
- package/dist/codex-workspace-bridge.d.ts.map +0 -1
- package/dist/codex-workspace-bridge.js +0 -502
- package/dist/codex-workspace-bridge.js.map +0 -1
- package/dist/config.d.ts +0 -99
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -127
- package/dist/config.js.map +0 -1
- package/dist/connection-controller.d.ts +0 -44
- package/dist/connection-controller.d.ts.map +0 -1
- package/dist/connection-controller.js +0 -185
- package/dist/connection-controller.js.map +0 -1
- package/dist/control-route.d.ts +0 -34
- package/dist/control-route.d.ts.map +0 -1
- package/dist/control-route.js +0 -136
- package/dist/control-route.js.map +0 -1
- package/dist/control-runtime.d.ts +0 -138
- package/dist/control-runtime.d.ts.map +0 -1
- package/dist/control-runtime.js +0 -543
- package/dist/control-runtime.js.map +0 -1
- package/dist/control-stream.d.ts +0 -67
- package/dist/control-stream.d.ts.map +0 -1
- package/dist/control-stream.js +0 -179
- package/dist/control-stream.js.map +0 -1
- package/dist/defaults.d.ts +0 -9
- package/dist/defaults.d.ts.map +0 -1
- package/dist/defaults.js +0 -9
- package/dist/defaults.js.map +0 -1
- package/dist/file-viewer-bridge.d.ts +0 -30
- package/dist/file-viewer-bridge.d.ts.map +0 -1
- package/dist/file-viewer-bridge.js +0 -128
- package/dist/file-viewer-bridge.js.map +0 -1
- package/dist/file-viewer-contract.d.ts +0 -5
- package/dist/file-viewer-contract.d.ts.map +0 -1
- package/dist/file-viewer-contract.js +0 -4
- package/dist/file-viewer-contract.js.map +0 -1
- package/dist/harness-api-bridge.d.ts +0 -81
- package/dist/harness-api-bridge.d.ts.map +0 -1
- package/dist/harness-api-bridge.js +0 -862
- package/dist/harness-api-bridge.js.map +0 -1
- package/dist/harness-api-history.d.ts +0 -3
- package/dist/harness-api-history.d.ts.map +0 -1
- package/dist/harness-api-history.js +0 -59
- package/dist/harness-api-history.js.map +0 -1
- package/dist/harness-remote-bridge.d.ts +0 -60
- package/dist/harness-remote-bridge.d.ts.map +0 -1
- package/dist/harness-remote-bridge.js +0 -540
- package/dist/harness-remote-bridge.js.map +0 -1
- package/dist/harness-version.d.ts +0 -23
- package/dist/harness-version.d.ts.map +0 -1
- package/dist/harness-version.js +0 -95
- package/dist/harness-version.js.map +0 -1
- package/dist/identity-store.d.ts +0 -45
- package/dist/identity-store.d.ts.map +0 -1
- package/dist/identity-store.js +0 -186
- package/dist/identity-store.js.map +0 -1
- package/dist/ids.d.ts +0 -2
- package/dist/ids.d.ts.map +0 -1
- package/dist/ids.js +0 -17
- package/dist/ids.js.map +0 -1
- package/dist/index.d.ts +0 -78
- package/dist/index.d.ts.map +0 -1
- package/dist/logging.d.ts +0 -18
- package/dist/logging.d.ts.map +0 -1
- package/dist/logging.js +0 -30
- package/dist/logging.js.map +0 -1
- package/dist/loopback-host.d.ts +0 -20
- package/dist/loopback-host.d.ts.map +0 -1
- package/dist/loopback-host.js +0 -245
- package/dist/loopback-host.js.map +0 -1
- package/dist/loopback-preview.d.ts +0 -19
- package/dist/loopback-preview.d.ts.map +0 -1
- package/dist/loopback-preview.js +0 -232
- package/dist/loopback-preview.js.map +0 -1
- package/dist/native-rtc-helper.d.ts +0 -14
- package/dist/native-rtc-helper.d.ts.map +0 -1
- package/dist/native-rtc-helper.js +0 -575
- package/dist/native-rtc-helper.js.map +0 -1
- package/dist/remote-api-proxy.d.ts +0 -17
- package/dist/remote-api-proxy.d.ts.map +0 -1
- package/dist/remote-api-proxy.js +0 -451
- package/dist/remote-api-proxy.js.map +0 -1
- package/dist/remote-directory-browser.d.ts +0 -16
- package/dist/remote-directory-browser.d.ts.map +0 -1
- package/dist/remote-directory-browser.js +0 -48
- package/dist/remote-directory-browser.js.map +0 -1
- package/dist/remote-file-content-provider.d.ts +0 -48
- package/dist/remote-file-content-provider.d.ts.map +0 -1
- package/dist/remote-file-content-provider.js +0 -93
- package/dist/remote-file-content-provider.js.map +0 -1
- package/dist/remote-typert-gateway.d.ts +0 -20
- package/dist/remote-typert-gateway.d.ts.map +0 -1
- package/dist/remote-typert-gateway.js +0 -334
- package/dist/remote-typert-gateway.js.map +0 -1
- package/dist/rpc-binary-attachments.d.ts +0 -33
- package/dist/rpc-binary-attachments.d.ts.map +0 -1
- package/dist/rpc-binary-attachments.js +0 -142
- package/dist/rpc-binary-attachments.js.map +0 -1
- package/dist/rpc-router.d.ts +0 -31
- package/dist/rpc-router.d.ts.map +0 -1
- package/dist/rpc-router.js +0 -201
- package/dist/rpc-router.js.map +0 -1
- package/dist/safe-error.d.ts +0 -8
- package/dist/safe-error.d.ts.map +0 -1
- package/dist/safe-error.js +0 -20
- package/dist/safe-error.js.map +0 -1
- package/dist/server-api.d.ts +0 -109
- package/dist/server-api.d.ts.map +0 -1
- package/dist/server-api.js +0 -520
- package/dist/server-api.js.map +0 -1
- package/dist/server-connection.d.ts +0 -79
- package/dist/server-connection.d.ts.map +0 -1
- package/dist/server-connection.js +0 -1023
- package/dist/server-connection.js.map +0 -1
- package/dist/server-credentials.d.ts +0 -55
- package/dist/server-credentials.d.ts.map +0 -1
- package/dist/server-credentials.js +0 -108
- package/dist/server-credentials.js.map +0 -1
- package/dist/service.d.ts +0 -151
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js +0 -448
- package/dist/service.js.map +0 -1
- package/dist/session-format-compat.d.ts +0 -3
- package/dist/session-format-compat.d.ts.map +0 -1
- package/dist/session-format-compat.js +0 -183
- package/dist/session-format-compat.js.map +0 -1
- package/dist/status-stream.d.ts +0 -48
- package/dist/status-stream.d.ts.map +0 -1
- package/dist/status-stream.js +0 -133
- package/dist/status-stream.js.map +0 -1
- package/dist/terminal-policy.d.ts +0 -21
- package/dist/terminal-policy.d.ts.map +0 -1
- package/dist/terminal-policy.js +0 -68
- package/dist/terminal-policy.js.map +0 -1
- package/dist/tui-command.d.ts +0 -13
- package/dist/tui-command.d.ts.map +0 -1
- package/dist/tui-command.js +0 -392
- package/dist/tui-command.js.map +0 -1
- package/dist/typert-gateway-contract.d.ts +0 -59
- package/dist/typert-gateway-contract.d.ts.map +0 -1
- package/dist/typert-gateway-contract.js +0 -2
- package/dist/typert-gateway-contract.js.map +0 -1
- package/dist/typert-gateway-switch.d.ts +0 -85
- package/dist/typert-gateway-switch.d.ts.map +0 -1
- package/dist/typert-gateway-switch.js +0 -448
- package/dist/typert-gateway-switch.js.map +0 -1
- package/dist/types.d.ts +0 -20
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/version.d.ts +0 -12
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -12
- package/dist/version.js.map +0 -1
- package/dist/werift-rtc.d.ts +0 -121
- package/dist/werift-rtc.d.ts.map +0 -1
- package/dist/werift-rtc.js +0 -490
- package/dist/werift-rtc.js.map +0 -1
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { REMOTE_FILE_CHUNK_BYTES } from './file-viewer-contract.js';
|
|
2
|
-
/** Fail closed for legacy/unknown Hosts that predate remote file-viewer support. */
|
|
3
|
-
export function shouldUseRemoteFileViewer(status) {
|
|
4
|
-
return status.mode === 'remote' && status.remoteFeatures?.fileViewer === true;
|
|
5
|
-
}
|
|
6
|
-
export const REMOTE_FILE_SAVE_AS_MAX_BYTES = 100 * 1024 * 1024;
|
|
7
|
-
export const REMOTE_FILE_FAST_SAVE_AS_MAX_BYTES = 1024 * 1024 * 1024;
|
|
8
|
-
export function shouldAllowRemoteFileSaveAs(status) {
|
|
9
|
-
return shouldUseRemoteFileViewer(status) && (status.transport === 'LAN' || status.transport === 'P2P' || status.transport === 'TURN');
|
|
10
|
-
}
|
|
11
|
-
export function remoteFileSaveAsMaxBytes(status) {
|
|
12
|
-
return status.transport === 'LAN' || status.transport === 'P2P'
|
|
13
|
-
? REMOTE_FILE_FAST_SAVE_AS_MAX_BYTES
|
|
14
|
-
: REMOTE_FILE_SAVE_AS_MAX_BYTES;
|
|
15
|
-
}
|
|
16
|
-
/** Browser-side provider registered into dsh-file-viewer's `fileViewer` service. */
|
|
17
|
-
export function createRemoteFileContentProvider(call, options = {}) {
|
|
18
|
-
return {
|
|
19
|
-
id: 'dsh-remote-files',
|
|
20
|
-
priority: 10_000,
|
|
21
|
-
supports: () => true,
|
|
22
|
-
saveAsAllowed: () => ({
|
|
23
|
-
allowed: currentSaveAsAllowed(options.saveAsAllowed),
|
|
24
|
-
maxBytes: currentSaveAsMaxBytes(options.saveAsMaxBytes),
|
|
25
|
-
}),
|
|
26
|
-
async stat(locator, signal) {
|
|
27
|
-
const value = await call('fileviewer.stat', { path: locator }, signal);
|
|
28
|
-
if (!value.exists)
|
|
29
|
-
return undefined;
|
|
30
|
-
return {
|
|
31
|
-
name: value.name,
|
|
32
|
-
size: value.isDirectory ? 0 : value.size,
|
|
33
|
-
mime: value.mime,
|
|
34
|
-
mtimeMs: value.mtimeMs,
|
|
35
|
-
isDirectory: value.isDirectory,
|
|
36
|
-
};
|
|
37
|
-
},
|
|
38
|
-
async read(locator, request) {
|
|
39
|
-
if (!Number.isInteger(request.offset) || request.offset < 0)
|
|
40
|
-
throw new Error('A non-negative integer offset is required.');
|
|
41
|
-
if (!Number.isInteger(request.length) || request.length <= 0)
|
|
42
|
-
throw new Error('A positive integer length is required.');
|
|
43
|
-
const chunks = [];
|
|
44
|
-
let received = 0;
|
|
45
|
-
while (received < request.length) {
|
|
46
|
-
request.signal.throwIfAborted();
|
|
47
|
-
const length = Math.min(REMOTE_FILE_CHUNK_BYTES, request.length - received);
|
|
48
|
-
const offset = request.offset + received;
|
|
49
|
-
const range = await call('fileviewer.readRange', { path: locator, offset, length }, request.signal);
|
|
50
|
-
if (range.offset !== offset)
|
|
51
|
-
throw new Error('The Remote Host returned a mismatched file range.');
|
|
52
|
-
const bytes = decodeBase64(range.data);
|
|
53
|
-
if (bytes.byteLength > length)
|
|
54
|
-
throw new Error('The Remote Host returned more file bytes than requested.');
|
|
55
|
-
chunks.push(bytes);
|
|
56
|
-
received += bytes.byteLength;
|
|
57
|
-
if (range.eof || bytes.byteLength === 0)
|
|
58
|
-
break;
|
|
59
|
-
}
|
|
60
|
-
const merged = new Uint8Array(received);
|
|
61
|
-
let cursor = 0;
|
|
62
|
-
for (const chunk of chunks) {
|
|
63
|
-
merged.set(chunk, cursor);
|
|
64
|
-
cursor += chunk.byteLength;
|
|
65
|
-
}
|
|
66
|
-
return merged;
|
|
67
|
-
},
|
|
68
|
-
async list(locator, signal) {
|
|
69
|
-
const value = await call('fileviewer.list', { path: locator }, signal);
|
|
70
|
-
return value.entries.map(entry => ({
|
|
71
|
-
locator: entry.path,
|
|
72
|
-
name: entry.name,
|
|
73
|
-
size: entry.isDirectory ? 0 : (entry.size ?? 0),
|
|
74
|
-
mtimeMs: entry.mtimeMs,
|
|
75
|
-
isDirectory: entry.isDirectory,
|
|
76
|
-
}));
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
function currentSaveAsAllowed(value) {
|
|
81
|
-
return typeof value === 'function' ? value() : value === true;
|
|
82
|
-
}
|
|
83
|
-
function currentSaveAsMaxBytes(value) {
|
|
84
|
-
return typeof value === 'function' ? value() : value ?? REMOTE_FILE_SAVE_AS_MAX_BYTES;
|
|
85
|
-
}
|
|
86
|
-
function decodeBase64(value) {
|
|
87
|
-
const binary = atob(value);
|
|
88
|
-
const bytes = new Uint8Array(binary.length);
|
|
89
|
-
for (let index = 0; index < binary.length; index += 1)
|
|
90
|
-
bytes[index] = binary.charCodeAt(index);
|
|
91
|
-
return bytes;
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=remote-file-content-provider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remote-file-content-provider.js","sourceRoot":"","sources":["../src/remote-file-content-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { type RemoteClientCore } from '@dsh-remote/client-core';
|
|
2
|
-
import { type SessionFormatCompatibility } from './session-format-compat.js';
|
|
3
|
-
import type { RemoteTypertGatewayTarget, TypertGatewayRequest, TypertRpcResult } from './typert-gateway-contract.js';
|
|
4
|
-
/** Client-side alpha Gateway carrier over the authenticated Remote channel. */
|
|
5
|
-
export declare class RemoteTypertGateway implements RemoteTypertGatewayTarget {
|
|
6
|
-
private readonly client;
|
|
7
|
-
private readonly compatibility?;
|
|
8
|
-
private readonly harnessVersion?;
|
|
9
|
-
constructor(client: RemoteClientCore, compatibility?: SessionFormatCompatibility | undefined, harnessVersion?: string | undefined);
|
|
10
|
-
invoke(request: TypertGatewayRequest): Promise<unknown>;
|
|
11
|
-
dispatch(endpoint: string, payload: unknown, signal: AbortSignal): Promise<TypertRpcResult>;
|
|
12
|
-
private legacyWelcomeAcknowledged;
|
|
13
|
-
private settingsDescribeValue?;
|
|
14
|
-
/** DSH <=0.1.6 cannot persist the 0.1.7 welcome acknowledgement remotely. */
|
|
15
|
-
private normalizeLegacyWelcomeSettings;
|
|
16
|
-
open(endpoint: string, payload: unknown, signal: AbortSignal): Promise<AsyncIterable<unknown>>;
|
|
17
|
-
private iterate;
|
|
18
|
-
private callTransferred;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=remote-typert-gateway.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remote-typert-gateway.d.ts","sourceRoot":"","sources":["../src/remote-typert-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAYlF,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EACpB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AAOrC,+EAA+E;AAC/E,qBAAa,mBAAoB,YAAW,yBAAyB;IAEjE,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAFf,MAAM,EAAE,gBAAgB,EACxB,aAAa,CAAC,EAAE,0BAA0B,YAAA,EAC1C,cAAc,CAAC,EAAE,MAAM,YAAA;IAGpC,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAUvD,QAAQ,CACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,eAAe,CAAC;IA0B3B,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,qBAAqB,CAAC,CAAyB;IAEvD,6EAA6E;IAC7E,OAAO,CAAC,8BAA8B;IAiBhC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAoBrF,OAAO;YAyBR,eAAe;CA2D9B"}
|
|
@@ -1,334 +0,0 @@
|
|
|
1
|
-
import { RemoteClientError } from '@dsh-remote/client-core';
|
|
2
|
-
import { HARNESS_API_TRANSFER_CHUNK_BYTES, MAX_HARNESS_API_TRANSFER_BYTES, } from '@dsh-remote/protocol';
|
|
3
|
-
import { uuidV7 } from './ids.js';
|
|
4
|
-
import { hydrateRpcAttachments } from './rpc-binary-attachments.js';
|
|
5
|
-
import { normalizeLegacySessionGatewayValue, } from './session-format-compat.js';
|
|
6
|
-
const DIRECT_REMOTE_CALL_BYTES = 2 * 1024 * 1024;
|
|
7
|
-
const WELCOME_NOTICE_NAMESPACE = 'ui-settings-general';
|
|
8
|
-
const WELCOME_NOTICE_FIELD = 'welcomeNoticeVersion';
|
|
9
|
-
const WELCOME_NOTICE_VERSION = '2026-08-13.1';
|
|
10
|
-
/** Client-side alpha Gateway carrier over the authenticated Remote channel. */
|
|
11
|
-
export class RemoteTypertGateway {
|
|
12
|
-
client;
|
|
13
|
-
compatibility;
|
|
14
|
-
harnessVersion;
|
|
15
|
-
constructor(client, compatibility, harnessVersion) {
|
|
16
|
-
this.client = client;
|
|
17
|
-
this.compatibility = compatibility;
|
|
18
|
-
this.harnessVersion = harnessVersion;
|
|
19
|
-
}
|
|
20
|
-
async invoke(request) {
|
|
21
|
-
const result = await this.dispatch(`${request.namespace}/${request.method}`, { args: request.args }, request.signal ?? new AbortController().signal);
|
|
22
|
-
if (result.ok)
|
|
23
|
-
return result.value;
|
|
24
|
-
throw remoteFailure(result.error);
|
|
25
|
-
}
|
|
26
|
-
async dispatch(endpoint, payload, signal) {
|
|
27
|
-
// The Remote Gateway contract requires a single plain-object `args` field.
|
|
28
|
-
// Keep the payload unchanged here: converting it to positional arrays makes
|
|
29
|
-
// current Hosts reject even empty calls such as `llm/listProviders`.
|
|
30
|
-
const request = { endpoint, payload };
|
|
31
|
-
const encoded = new TextEncoder().encode(JSON.stringify(request));
|
|
32
|
-
let response;
|
|
33
|
-
if (encoded.byteLength > DIRECT_REMOTE_CALL_BYTES) {
|
|
34
|
-
response = await this.callTransferred(encoded, signal);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
try {
|
|
38
|
-
response = await this.client.rpc('harness.remote.call', request, signal);
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
if (!hasErrorCode(error, 'RESPONSE_TOO_LARGE'))
|
|
42
|
-
throw error;
|
|
43
|
-
response = await this.callTransferred(encoded, signal);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
const result = parseRpcResult(hydrateRpcAttachments(response));
|
|
47
|
-
const settingsResult = this.normalizeLegacyWelcomeSettings(endpoint, payload, result);
|
|
48
|
-
if (settingsResult !== undefined)
|
|
49
|
-
return settingsResult;
|
|
50
|
-
if (result.ok && this.compatibility === 'legacy-to-v3') {
|
|
51
|
-
return { ...result, value: normalizeLegacySessionGatewayValue(endpoint, result.value) };
|
|
52
|
-
}
|
|
53
|
-
return result;
|
|
54
|
-
}
|
|
55
|
-
legacyWelcomeAcknowledged = false;
|
|
56
|
-
settingsDescribeValue;
|
|
57
|
-
/** DSH <=0.1.6 cannot persist the 0.1.7 welcome acknowledgement remotely. */
|
|
58
|
-
normalizeLegacyWelcomeSettings(endpoint, payload, result) {
|
|
59
|
-
if (!isLegacyRemoteHost(this.harnessVersion))
|
|
60
|
-
return undefined;
|
|
61
|
-
if (endpoint === 'settings/describe' && result.ok && isRecord(result.value)) {
|
|
62
|
-
this.settingsDescribeValue = result.value;
|
|
63
|
-
return this.legacyWelcomeAcknowledged ? { ...result, value: patchWelcomeDescribe(result.value) } : undefined;
|
|
64
|
-
}
|
|
65
|
-
if (endpoint !== 'settings/mutate' || !isRecord(payload) || !isRecord(payload.args))
|
|
66
|
-
return undefined;
|
|
67
|
-
const args = payload.args;
|
|
68
|
-
if (args.ns !== WELCOME_NOTICE_NAMESPACE || !isWelcomeNoticeOperation(args.ops))
|
|
69
|
-
return undefined;
|
|
70
|
-
// Older Hosts reject the 0.1.7 onboarding field before returning a usable
|
|
71
|
-
// settings snapshot. Treat the acknowledgement as client-local in that
|
|
72
|
-
// case; a later describe is patched when one becomes available.
|
|
73
|
-
const value = patchWelcomeDescribe(this.settingsDescribeValue ?? { namespaces: [] });
|
|
74
|
-
this.legacyWelcomeAcknowledged = true;
|
|
75
|
-
return { ok: true, value };
|
|
76
|
-
}
|
|
77
|
-
async open(endpoint, payload, signal) {
|
|
78
|
-
const streamId = uuidV7();
|
|
79
|
-
const queue = new AsyncValueQueue();
|
|
80
|
-
const unsubscribe = this.client.onEvent(event => routeStreamEvent(event, streamId, queue));
|
|
81
|
-
const unsubscribeClose = this.client.onClose(() => {
|
|
82
|
-
queue.fail(new RemoteClientError('TRANSPORT_CLOSED', 'The remote Harness stream transport closed.'));
|
|
83
|
-
});
|
|
84
|
-
const onAbort = () => queue.close();
|
|
85
|
-
signal.addEventListener('abort', onAbort, { once: true });
|
|
86
|
-
try {
|
|
87
|
-
await this.client.rpc('harness.remote.stream.open', { streamId, endpoint, payload }, signal);
|
|
88
|
-
}
|
|
89
|
-
catch (error) {
|
|
90
|
-
signal.removeEventListener('abort', onAbort);
|
|
91
|
-
unsubscribe();
|
|
92
|
-
unsubscribeClose();
|
|
93
|
-
throw error;
|
|
94
|
-
}
|
|
95
|
-
return this.iterate(streamId, endpoint, queue, unsubscribe, unsubscribeClose, signal, onAbort);
|
|
96
|
-
}
|
|
97
|
-
async *iterate(streamId, endpoint, queue, unsubscribe, unsubscribeClose, signal, onAbort) {
|
|
98
|
-
try {
|
|
99
|
-
for await (const value of queue) {
|
|
100
|
-
const hydrated = hydrateRpcAttachments(value);
|
|
101
|
-
yield this.compatibility === 'legacy-to-v3'
|
|
102
|
-
? normalizeLegacySessionGatewayValue(endpoint, hydrated)
|
|
103
|
-
: hydrated;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
finally {
|
|
107
|
-
signal.removeEventListener('abort', onAbort);
|
|
108
|
-
unsubscribe();
|
|
109
|
-
unsubscribeClose();
|
|
110
|
-
queue.close();
|
|
111
|
-
await this.client.rpc('harness.remote.stream.close', { streamId }).catch(() => undefined);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
async callTransferred(encoded, signal) {
|
|
115
|
-
if (encoded.byteLength > MAX_HARNESS_API_TRANSFER_BYTES) {
|
|
116
|
-
throw new Error('The Harness Remote request exceeds the transfer limit.');
|
|
117
|
-
}
|
|
118
|
-
const transferId = uuidV7();
|
|
119
|
-
const totalChunks = Math.ceil(encoded.byteLength / HARNESS_API_TRANSFER_CHUNK_BYTES);
|
|
120
|
-
let opened = false;
|
|
121
|
-
try {
|
|
122
|
-
await this.client.rpc('harness.remote.transfer.open', {
|
|
123
|
-
transferId,
|
|
124
|
-
totalBytes: encoded.byteLength,
|
|
125
|
-
totalChunks,
|
|
126
|
-
}, signal);
|
|
127
|
-
opened = true;
|
|
128
|
-
for (let index = 0; index < totalChunks; index += 1) {
|
|
129
|
-
const start = index * HARNESS_API_TRANSFER_CHUNK_BYTES;
|
|
130
|
-
const chunk = encoded.subarray(start, Math.min(start + HARNESS_API_TRANSFER_CHUNK_BYTES, encoded.byteLength));
|
|
131
|
-
await this.client.rpc('harness.remote.transfer.chunk', {
|
|
132
|
-
transferId,
|
|
133
|
-
index,
|
|
134
|
-
data: bytesToBase64(chunk),
|
|
135
|
-
}, signal);
|
|
136
|
-
}
|
|
137
|
-
const committed = await this.client.rpc('harness.remote.transfer.commit', { transferId }, signal);
|
|
138
|
-
if (committed.kind === 'inline')
|
|
139
|
-
return committed.response;
|
|
140
|
-
if (committed.transferId !== transferId
|
|
141
|
-
|| committed.totalBytes <= 0
|
|
142
|
-
|| committed.totalBytes > MAX_HARNESS_API_TRANSFER_BYTES
|
|
143
|
-
|| committed.totalChunks !== Math.ceil(committed.totalBytes / HARNESS_API_TRANSFER_CHUNK_BYTES)) {
|
|
144
|
-
throw new Error('The remote Host returned an invalid Harness Remote transfer descriptor.');
|
|
145
|
-
}
|
|
146
|
-
const responseBytes = new Uint8Array(committed.totalBytes);
|
|
147
|
-
let offset = 0;
|
|
148
|
-
for (let index = 0; index < committed.totalChunks; index += 1) {
|
|
149
|
-
const result = await this.client.rpc('harness.remote.transfer.read', { transferId, index }, signal);
|
|
150
|
-
if (result.transferId !== transferId || result.index !== index) {
|
|
151
|
-
throw new Error('The remote Host returned an out-of-order Harness Remote transfer chunk.');
|
|
152
|
-
}
|
|
153
|
-
const chunk = base64ToBytes(result.data);
|
|
154
|
-
const expectedBytes = Math.min(HARNESS_API_TRANSFER_CHUNK_BYTES, committed.totalBytes - offset);
|
|
155
|
-
if (chunk.byteLength !== expectedBytes) {
|
|
156
|
-
throw new Error('The remote Host returned an invalid Harness Remote transfer chunk.');
|
|
157
|
-
}
|
|
158
|
-
responseBytes.set(chunk, offset);
|
|
159
|
-
offset += chunk.byteLength;
|
|
160
|
-
}
|
|
161
|
-
return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(responseBytes));
|
|
162
|
-
}
|
|
163
|
-
finally {
|
|
164
|
-
if (opened)
|
|
165
|
-
await this.client.rpc('harness.remote.transfer.close', { transferId }).catch(() => undefined);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
class AsyncValueQueue {
|
|
170
|
-
values = [];
|
|
171
|
-
bytes = 0;
|
|
172
|
-
waiters = [];
|
|
173
|
-
closed = false;
|
|
174
|
-
error;
|
|
175
|
-
push(value) {
|
|
176
|
-
if (this.closed)
|
|
177
|
-
return;
|
|
178
|
-
const waiter = this.waiters.shift();
|
|
179
|
-
if (waiter !== undefined) {
|
|
180
|
-
waiter({ done: false, value });
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
const bytes = new TextEncoder().encode(JSON.stringify(value) ?? '').byteLength;
|
|
184
|
-
if (this.values.length >= 256 || this.bytes + bytes > 4 * 1024 * 1024) {
|
|
185
|
-
this.values.length = 0;
|
|
186
|
-
this.bytes = 0;
|
|
187
|
-
this.fail(new RemoteClientError('TRANSPORT_CLOSED', 'Remote stream consumer is too slow; reconnect to recover.'));
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
this.bytes += bytes;
|
|
191
|
-
this.values.push({ value, bytes });
|
|
192
|
-
}
|
|
193
|
-
close() {
|
|
194
|
-
if (this.closed)
|
|
195
|
-
return;
|
|
196
|
-
this.closed = true;
|
|
197
|
-
for (const waiter of this.waiters.splice(0))
|
|
198
|
-
waiter({ done: true, value: undefined });
|
|
199
|
-
}
|
|
200
|
-
fail(error) {
|
|
201
|
-
if (this.closed)
|
|
202
|
-
return;
|
|
203
|
-
this.error = error;
|
|
204
|
-
this.close();
|
|
205
|
-
}
|
|
206
|
-
async *[Symbol.asyncIterator]() {
|
|
207
|
-
while (true) {
|
|
208
|
-
if (this.values.length > 0) {
|
|
209
|
-
const entry = this.values.shift();
|
|
210
|
-
this.bytes -= entry.bytes;
|
|
211
|
-
yield entry.value;
|
|
212
|
-
continue;
|
|
213
|
-
}
|
|
214
|
-
if (this.closed) {
|
|
215
|
-
if (this.error !== undefined)
|
|
216
|
-
throw this.error;
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
const next = await new Promise(resolve => this.waiters.push(resolve));
|
|
220
|
-
if (next.done) {
|
|
221
|
-
if (this.error !== undefined)
|
|
222
|
-
throw this.error;
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
yield next.value;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
function routeStreamEvent(event, streamId, queue) {
|
|
230
|
-
if (event.event === 'harness.remote.frame') {
|
|
231
|
-
const data = event.data;
|
|
232
|
-
if (data.streamId === streamId && data.hasValue === true)
|
|
233
|
-
queue.push(data.value);
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
if (event.event !== 'harness.remote.stream.closed')
|
|
237
|
-
return;
|
|
238
|
-
const data = event.data;
|
|
239
|
-
if (data.streamId !== streamId)
|
|
240
|
-
return;
|
|
241
|
-
if (data.reason === 'failed') {
|
|
242
|
-
const failure = data.failure;
|
|
243
|
-
queue.fail(remoteFailure({
|
|
244
|
-
code: typeof failure?.code === 'string' ? failure.code : 'internal',
|
|
245
|
-
message: typeof failure?.message === 'string' ? failure.message : 'The remote Harness stream failed.',
|
|
246
|
-
details: isRecord(failure?.details) ? failure.details : {},
|
|
247
|
-
}));
|
|
248
|
-
}
|
|
249
|
-
else {
|
|
250
|
-
queue.close();
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
function parseRpcResult(value) {
|
|
254
|
-
if (!isRecord(value))
|
|
255
|
-
throw new Error('The remote Host returned an invalid Gateway result.');
|
|
256
|
-
if (value.ok === true)
|
|
257
|
-
return Object.hasOwn(value, 'value') ? { ok: true, value: value.value } : { ok: true };
|
|
258
|
-
if (value.ok !== false || !isRecord(value.error)
|
|
259
|
-
|| typeof value.error.code !== 'string'
|
|
260
|
-
|| typeof value.error.message !== 'string'
|
|
261
|
-
|| !isRecord(value.error.details)) {
|
|
262
|
-
throw new Error('The remote Host returned an invalid Gateway failure.');
|
|
263
|
-
}
|
|
264
|
-
return {
|
|
265
|
-
ok: false,
|
|
266
|
-
error: { code: value.error.code, message: value.error.message, details: value.error.details },
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
function remoteFailure(failure) {
|
|
270
|
-
// v0.1.2-alpha.2+ identifies RemoteError values structurally across bundles and
|
|
271
|
-
// realms. Keep this carrier dependency-free so the same build still runs on
|
|
272
|
-
// older Harness releases, while preserving current stream failures at the local mux.
|
|
273
|
-
return Object.assign(new Error(failure.message), {
|
|
274
|
-
isDSHRemoteError: true,
|
|
275
|
-
code: failure.code,
|
|
276
|
-
details: failure.details,
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
function bytesToBase64(bytes) {
|
|
280
|
-
let binary = '';
|
|
281
|
-
for (let offset = 0; offset < bytes.byteLength; offset += 0x8000) {
|
|
282
|
-
binary += String.fromCharCode(...bytes.subarray(offset, Math.min(offset + 0x8000, bytes.byteLength)));
|
|
283
|
-
}
|
|
284
|
-
return btoa(binary);
|
|
285
|
-
}
|
|
286
|
-
function base64ToBytes(value) {
|
|
287
|
-
let binary;
|
|
288
|
-
try {
|
|
289
|
-
binary = atob(value);
|
|
290
|
-
}
|
|
291
|
-
catch {
|
|
292
|
-
throw new Error('The remote Host returned malformed Harness Remote transfer data.');
|
|
293
|
-
}
|
|
294
|
-
const bytes = new Uint8Array(binary.length);
|
|
295
|
-
for (let index = 0; index < binary.length; index += 1)
|
|
296
|
-
bytes[index] = binary.charCodeAt(index);
|
|
297
|
-
if (bytesToBase64(bytes) !== value)
|
|
298
|
-
throw new Error('The remote Host returned non-canonical Harness Remote transfer data.');
|
|
299
|
-
return bytes;
|
|
300
|
-
}
|
|
301
|
-
function isRecord(value) {
|
|
302
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
303
|
-
}
|
|
304
|
-
function hasErrorCode(error, code) {
|
|
305
|
-
return error instanceof Error && 'code' in error && error.code === code;
|
|
306
|
-
}
|
|
307
|
-
function isLegacyRemoteHost(version) {
|
|
308
|
-
if (version === undefined)
|
|
309
|
-
return false;
|
|
310
|
-
const match = /^(?:dsh-)?v?(\d+)\.(\d+)\.(\d+)(?:-|$)/u.exec(version.trim());
|
|
311
|
-
if (match === null)
|
|
312
|
-
return false;
|
|
313
|
-
return Number(match[1]) === 0 && Number(match[2]) === 1 && Number(match[3]) < 7;
|
|
314
|
-
}
|
|
315
|
-
function isWelcomeNoticeOperation(value) {
|
|
316
|
-
return Array.isArray(value) && value.some(operation => (isRecord(operation)
|
|
317
|
-
&& operation.op === 'set'
|
|
318
|
-
&& Array.isArray(operation.path)
|
|
319
|
-
&& operation.path.length === 1
|
|
320
|
-
&& operation.path[0] === WELCOME_NOTICE_FIELD
|
|
321
|
-
&& operation.value === WELCOME_NOTICE_VERSION));
|
|
322
|
-
}
|
|
323
|
-
function patchWelcomeDescribe(value) {
|
|
324
|
-
if (!Array.isArray(value.namespaces))
|
|
325
|
-
return value;
|
|
326
|
-
const namespaces = value.namespaces.map(namespace => {
|
|
327
|
-
if (!isRecord(namespace) || namespace.ns !== WELCOME_NOTICE_NAMESPACE)
|
|
328
|
-
return namespace;
|
|
329
|
-
const current = isRecord(namespace.value) ? namespace.value : {};
|
|
330
|
-
return { ...namespace, value: { ...current, [WELCOME_NOTICE_FIELD]: WELCOME_NOTICE_VERSION } };
|
|
331
|
-
});
|
|
332
|
-
return { ...value, namespaces };
|
|
333
|
-
}
|
|
334
|
-
//# sourceMappingURL=remote-typert-gateway.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remote-typert-gateway.js","sourceRoot":"","sources":["../src/remote-typert-gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Rehydrate the out-of-band byte attachments DSH puts beside a Gateway result.
|
|
3
|
-
*
|
|
4
|
-
* The Harness Gateway encodes a result containing a `Uint8Array` as a placeholder plus an
|
|
5
|
-
* attachment list — `{ ok: true, value: { data: null, … }, attachments: [{ path: ['data'],
|
|
6
|
-
* bytes }] }` — and its own connection layer copies `bytes` back to `path` before the value is
|
|
7
|
-
* validated against the generated schema (`z.instanceof(Uint8Array)`, emitted by
|
|
8
|
-
* `typert/generator`). A native Remote call never touches that layer, so our carrier sees the
|
|
9
|
-
* envelope raw, JSON-encoded: the placeholder stays `null` and the bytes arrive as
|
|
10
|
-
* `{ "0": 137, "1": 80, … }`. Handing that to DSH fails with
|
|
11
|
-
* `expected "Uint8Array", path: ["data"]`, which is exactly the image-preview failure.
|
|
12
|
-
*
|
|
13
|
-
* Hydrating here keeps the carrier compatible with any Host version: a Host that never sends
|
|
14
|
-
* attachments passes through untouched.
|
|
15
|
-
*/
|
|
16
|
-
export declare function hydrateRpcAttachments(result: unknown): unknown;
|
|
17
|
-
/**
|
|
18
|
-
* Mirror of the same wire form for our own Host half.
|
|
19
|
-
*
|
|
20
|
-
* A native Remote call leaves the Host through this plugin's tunnel, which JSON-encodes whatever the
|
|
21
|
-
* Gateway returned. DSH rehydrates its own result before the Host plugin sees it, so the bytes arrive
|
|
22
|
-
* as a real \`Uint8Array\` again - and \`JSON.stringify\` turns that into \`{"0":137,"1":80,…}\`, a shape no
|
|
23
|
-
* generated schema accepts. Sending DSH's own form instead (a placeholder plus \`attachments\`) keeps one
|
|
24
|
-
* convention on both sides of the tunnel and lets \`hydrateRpcAttachments\` put the bytes back. A result
|
|
25
|
-
* without bytes is returned untouched, and tagging twice changes nothing.
|
|
26
|
-
*
|
|
27
|
-
* @param result - Gateway result about to be JSON-encoded for the client.
|
|
28
|
-
* @returns the same result, or one carrying byte attachments.
|
|
29
|
-
*/
|
|
30
|
-
export declare function collectRpcAttachments<T>(result: T): T;
|
|
31
|
-
/** Decode one byte value in any shape a JSON hop can produce, or undefined when it is not bytes. */
|
|
32
|
-
export declare function decodeByteValue(value: unknown): Uint8Array | undefined;
|
|
33
|
-
//# sourceMappingURL=rpc-binary-attachments.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-binary-attachments.d.ts","sourceRoot":"","sources":["../src/rpc-binary-attachments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAiB9D;AAsDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAMrD;AAgCD,oGAAoG;AACpG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAMtE"}
|