@blue-soda/dsh-remote 0.5.6 → 0.5.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.
Files changed (232) hide show
  1. package/README.md +14 -3
  2. package/cordis.patch.yml +30 -30
  3. package/dist/client.github.js +1 -1
  4. package/dist/client.js +1 -1
  5. package/dist/index.js +1216 -396
  6. package/dist/index.js.map +4 -4
  7. package/dsh-plugin.json +41 -41
  8. package/package.json +165 -165
  9. package/dist/acp.d.ts +0 -75
  10. package/dist/acp.d.ts.map +0 -1
  11. package/dist/acp.js +0 -61
  12. package/dist/acp.js.map +0 -1
  13. package/dist/api-proxy-switch.d.ts +0 -33
  14. package/dist/api-proxy-switch.d.ts.map +0 -1
  15. package/dist/api-proxy-switch.js +0 -109
  16. package/dist/api-proxy-switch.js.map +0 -1
  17. package/dist/atomic-file.d.ts +0 -16
  18. package/dist/atomic-file.d.ts.map +0 -1
  19. package/dist/atomic-file.js +0 -81
  20. package/dist/atomic-file.js.map +0 -1
  21. package/dist/bin/doctor.d.ts +0 -3
  22. package/dist/bin/doctor.d.ts.map +0 -1
  23. package/dist/bin/doctor.js +0 -13
  24. package/dist/bin/doctor.js.map +0 -1
  25. package/dist/cli.d.ts +0 -32
  26. package/dist/cli.d.ts.map +0 -1
  27. package/dist/cli.js +0 -289
  28. package/dist/cli.js.map +0 -1
  29. package/dist/client-runtime.d.ts +0 -375
  30. package/dist/client-runtime.d.ts.map +0 -1
  31. package/dist/client-runtime.js +0 -1768
  32. package/dist/client-runtime.js.map +0 -1
  33. package/dist/client-secure-transport.d.ts +0 -23
  34. package/dist/client-secure-transport.d.ts.map +0 -1
  35. package/dist/client-secure-transport.js +0 -144
  36. package/dist/client-secure-transport.js.map +0 -1
  37. package/dist/client-target-store.d.ts +0 -40
  38. package/dist/client-target-store.d.ts.map +0 -1
  39. package/dist/client-target-store.js +0 -79
  40. package/dist/client-target-store.js.map +0 -1
  41. package/dist/client.d.ts +0 -13
  42. package/dist/client.d.ts.map +0 -1
  43. package/dist/codex/app-server.d.ts +0 -71
  44. package/dist/codex/app-server.d.ts.map +0 -1
  45. package/dist/codex/app-server.js +0 -268
  46. package/dist/codex/app-server.js.map +0 -1
  47. package/dist/codex/codex-image-codec.d.ts +0 -7
  48. package/dist/codex/codex-image-codec.d.ts.map +0 -1
  49. package/dist/codex/codex-image-codec.js +0 -288
  50. package/dist/codex/codex-image-codec.js.map +0 -1
  51. package/dist/codex/domain.d.ts +0 -102
  52. package/dist/codex/domain.d.ts.map +0 -1
  53. package/dist/codex/domain.js +0 -1323
  54. package/dist/codex/domain.js.map +0 -1
  55. package/dist/codex/method-policy.d.ts +0 -338
  56. package/dist/codex/method-policy.d.ts.map +0 -1
  57. package/dist/codex/method-policy.js +0 -141
  58. package/dist/codex/method-policy.js.map +0 -1
  59. package/dist/codex/peer-bridge.d.ts +0 -57
  60. package/dist/codex/peer-bridge.d.ts.map +0 -1
  61. package/dist/codex/peer-bridge.js +0 -299
  62. package/dist/codex/peer-bridge.js.map +0 -1
  63. package/dist/codex/permissions.d.ts +0 -4
  64. package/dist/codex/permissions.d.ts.map +0 -1
  65. package/dist/codex/permissions.js +0 -21
  66. package/dist/codex/permissions.js.map +0 -1
  67. package/dist/codex/session-id.d.ts +0 -10
  68. package/dist/codex/session-id.d.ts.map +0 -1
  69. package/dist/codex/session-id.js +0 -15
  70. package/dist/codex/session-id.js.map +0 -1
  71. package/dist/codex/virtual-harness.d.ts +0 -209
  72. package/dist/codex/virtual-harness.d.ts.map +0 -1
  73. package/dist/codex/virtual-harness.js +0 -2650
  74. package/dist/codex/virtual-harness.js.map +0 -1
  75. package/dist/codex-workspace-bridge.d.ts +0 -108
  76. package/dist/codex-workspace-bridge.d.ts.map +0 -1
  77. package/dist/codex-workspace-bridge.js +0 -502
  78. package/dist/codex-workspace-bridge.js.map +0 -1
  79. package/dist/config.d.ts +0 -99
  80. package/dist/config.d.ts.map +0 -1
  81. package/dist/config.js +0 -127
  82. package/dist/config.js.map +0 -1
  83. package/dist/connection-controller.d.ts +0 -44
  84. package/dist/connection-controller.d.ts.map +0 -1
  85. package/dist/connection-controller.js +0 -185
  86. package/dist/connection-controller.js.map +0 -1
  87. package/dist/control-route.d.ts +0 -34
  88. package/dist/control-route.d.ts.map +0 -1
  89. package/dist/control-route.js +0 -136
  90. package/dist/control-route.js.map +0 -1
  91. package/dist/control-runtime.d.ts +0 -138
  92. package/dist/control-runtime.d.ts.map +0 -1
  93. package/dist/control-runtime.js +0 -543
  94. package/dist/control-runtime.js.map +0 -1
  95. package/dist/control-stream.d.ts +0 -67
  96. package/dist/control-stream.d.ts.map +0 -1
  97. package/dist/control-stream.js +0 -179
  98. package/dist/control-stream.js.map +0 -1
  99. package/dist/defaults.d.ts +0 -9
  100. package/dist/defaults.d.ts.map +0 -1
  101. package/dist/defaults.js +0 -9
  102. package/dist/defaults.js.map +0 -1
  103. package/dist/file-viewer-bridge.d.ts +0 -30
  104. package/dist/file-viewer-bridge.d.ts.map +0 -1
  105. package/dist/file-viewer-bridge.js +0 -128
  106. package/dist/file-viewer-bridge.js.map +0 -1
  107. package/dist/file-viewer-contract.d.ts +0 -5
  108. package/dist/file-viewer-contract.d.ts.map +0 -1
  109. package/dist/file-viewer-contract.js +0 -4
  110. package/dist/file-viewer-contract.js.map +0 -1
  111. package/dist/harness-api-bridge.d.ts +0 -81
  112. package/dist/harness-api-bridge.d.ts.map +0 -1
  113. package/dist/harness-api-bridge.js +0 -862
  114. package/dist/harness-api-bridge.js.map +0 -1
  115. package/dist/harness-api-history.d.ts +0 -3
  116. package/dist/harness-api-history.d.ts.map +0 -1
  117. package/dist/harness-api-history.js +0 -59
  118. package/dist/harness-api-history.js.map +0 -1
  119. package/dist/harness-remote-bridge.d.ts +0 -60
  120. package/dist/harness-remote-bridge.d.ts.map +0 -1
  121. package/dist/harness-remote-bridge.js +0 -540
  122. package/dist/harness-remote-bridge.js.map +0 -1
  123. package/dist/harness-version.d.ts +0 -23
  124. package/dist/harness-version.d.ts.map +0 -1
  125. package/dist/harness-version.js +0 -95
  126. package/dist/harness-version.js.map +0 -1
  127. package/dist/identity-store.d.ts +0 -45
  128. package/dist/identity-store.d.ts.map +0 -1
  129. package/dist/identity-store.js +0 -186
  130. package/dist/identity-store.js.map +0 -1
  131. package/dist/ids.d.ts +0 -2
  132. package/dist/ids.d.ts.map +0 -1
  133. package/dist/ids.js +0 -17
  134. package/dist/ids.js.map +0 -1
  135. package/dist/index.d.ts +0 -78
  136. package/dist/index.d.ts.map +0 -1
  137. package/dist/logging.d.ts +0 -18
  138. package/dist/logging.d.ts.map +0 -1
  139. package/dist/logging.js +0 -30
  140. package/dist/logging.js.map +0 -1
  141. package/dist/loopback-host.d.ts +0 -20
  142. package/dist/loopback-host.d.ts.map +0 -1
  143. package/dist/loopback-host.js +0 -245
  144. package/dist/loopback-host.js.map +0 -1
  145. package/dist/loopback-preview.d.ts +0 -19
  146. package/dist/loopback-preview.d.ts.map +0 -1
  147. package/dist/loopback-preview.js +0 -232
  148. package/dist/loopback-preview.js.map +0 -1
  149. package/dist/native-rtc-helper.d.ts +0 -14
  150. package/dist/native-rtc-helper.d.ts.map +0 -1
  151. package/dist/native-rtc-helper.js +0 -575
  152. package/dist/native-rtc-helper.js.map +0 -1
  153. package/dist/remote-api-proxy.d.ts +0 -17
  154. package/dist/remote-api-proxy.d.ts.map +0 -1
  155. package/dist/remote-api-proxy.js +0 -451
  156. package/dist/remote-api-proxy.js.map +0 -1
  157. package/dist/remote-directory-browser.d.ts +0 -16
  158. package/dist/remote-directory-browser.d.ts.map +0 -1
  159. package/dist/remote-directory-browser.js +0 -48
  160. package/dist/remote-directory-browser.js.map +0 -1
  161. package/dist/remote-file-content-provider.d.ts +0 -48
  162. package/dist/remote-file-content-provider.d.ts.map +0 -1
  163. package/dist/remote-file-content-provider.js +0 -93
  164. package/dist/remote-file-content-provider.js.map +0 -1
  165. package/dist/remote-typert-gateway.d.ts +0 -20
  166. package/dist/remote-typert-gateway.d.ts.map +0 -1
  167. package/dist/remote-typert-gateway.js +0 -334
  168. package/dist/remote-typert-gateway.js.map +0 -1
  169. package/dist/rpc-binary-attachments.d.ts +0 -33
  170. package/dist/rpc-binary-attachments.d.ts.map +0 -1
  171. package/dist/rpc-binary-attachments.js +0 -142
  172. package/dist/rpc-binary-attachments.js.map +0 -1
  173. package/dist/rpc-router.d.ts +0 -31
  174. package/dist/rpc-router.d.ts.map +0 -1
  175. package/dist/rpc-router.js +0 -201
  176. package/dist/rpc-router.js.map +0 -1
  177. package/dist/safe-error.d.ts +0 -8
  178. package/dist/safe-error.d.ts.map +0 -1
  179. package/dist/safe-error.js +0 -20
  180. package/dist/safe-error.js.map +0 -1
  181. package/dist/server-api.d.ts +0 -109
  182. package/dist/server-api.d.ts.map +0 -1
  183. package/dist/server-api.js +0 -520
  184. package/dist/server-api.js.map +0 -1
  185. package/dist/server-connection.d.ts +0 -79
  186. package/dist/server-connection.d.ts.map +0 -1
  187. package/dist/server-connection.js +0 -1023
  188. package/dist/server-connection.js.map +0 -1
  189. package/dist/server-credentials.d.ts +0 -55
  190. package/dist/server-credentials.d.ts.map +0 -1
  191. package/dist/server-credentials.js +0 -108
  192. package/dist/server-credentials.js.map +0 -1
  193. package/dist/service.d.ts +0 -151
  194. package/dist/service.d.ts.map +0 -1
  195. package/dist/service.js +0 -448
  196. package/dist/service.js.map +0 -1
  197. package/dist/session-format-compat.d.ts +0 -3
  198. package/dist/session-format-compat.d.ts.map +0 -1
  199. package/dist/session-format-compat.js +0 -183
  200. package/dist/session-format-compat.js.map +0 -1
  201. package/dist/status-stream.d.ts +0 -48
  202. package/dist/status-stream.d.ts.map +0 -1
  203. package/dist/status-stream.js +0 -133
  204. package/dist/status-stream.js.map +0 -1
  205. package/dist/terminal-policy.d.ts +0 -21
  206. package/dist/terminal-policy.d.ts.map +0 -1
  207. package/dist/terminal-policy.js +0 -68
  208. package/dist/terminal-policy.js.map +0 -1
  209. package/dist/tui-command.d.ts +0 -13
  210. package/dist/tui-command.d.ts.map +0 -1
  211. package/dist/tui-command.js +0 -392
  212. package/dist/tui-command.js.map +0 -1
  213. package/dist/typert-gateway-contract.d.ts +0 -59
  214. package/dist/typert-gateway-contract.d.ts.map +0 -1
  215. package/dist/typert-gateway-contract.js +0 -2
  216. package/dist/typert-gateway-contract.js.map +0 -1
  217. package/dist/typert-gateway-switch.d.ts +0 -85
  218. package/dist/typert-gateway-switch.d.ts.map +0 -1
  219. package/dist/typert-gateway-switch.js +0 -448
  220. package/dist/typert-gateway-switch.js.map +0 -1
  221. package/dist/types.d.ts +0 -20
  222. package/dist/types.d.ts.map +0 -1
  223. package/dist/types.js +0 -2
  224. package/dist/types.js.map +0 -1
  225. package/dist/version.d.ts +0 -12
  226. package/dist/version.d.ts.map +0 -1
  227. package/dist/version.js +0 -12
  228. package/dist/version.js.map +0 -1
  229. package/dist/werift-rtc.d.ts +0 -121
  230. package/dist/werift-rtc.d.ts.map +0 -1
  231. package/dist/werift-rtc.js +0 -490
  232. 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"}