@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.
Files changed (232) hide show
  1. package/README.md +2 -2
  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 +371 -80
  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,540 +0,0 @@
1
- import { HARNESS_API_TRANSFER_CHUNK_BYTES, MAX_ACTIVE_TRANSFERS_PER_DIRECTION, MAX_ALPHA_STREAMS_PER_CONNECTION, MAX_HARNESS_API_TRANSFER_BYTES, TRANSFER_IDLE_MS, } from '@dsh-remote/protocol';
2
- import { z } from 'zod';
3
- import { TerminalPolicy, TERMINAL_CALLS, TERMINAL_STREAMS } from './terminal-policy.js';
4
- import { harnessSessionGeneration } from './harness-version.js';
5
- import { listRemoteDirectory } from './remote-directory-browser.js';
6
- import { RpcError } from './rpc-router.js';
7
- import { collectRpcAttachments } from './rpc-binary-attachments.js';
8
- const endpointSchema = z.string().min(1).max(128).regex(/^(?:\$events(?:\/result)?|[A-Za-z0-9_$.-]+\/[A-Za-z0-9_$.-]+)$/);
9
- const callSchema = z.object({ endpoint: endpointSchema, payload: z.unknown() }).strict();
10
- const streamOpenSchema = z.object({
11
- streamId: z.string().min(1).max(128),
12
- endpoint: endpointSchema,
13
- payload: z.unknown(),
14
- }).strict();
15
- const streamCloseSchema = z.object({ streamId: z.string().min(1).max(128) }).strict();
16
- const commandExecuteArgsSchema = z.object({
17
- agentId: z.string().min(1).max(128),
18
- line: z.string().min(1).max(2048),
19
- // dsh-commands <= 0.1.2 calls this field `images`; dsh-commands 0.1.5
20
- // renamed it to `submittedAttachments`. Only empty arrays are exposed by
21
- // the Remote bridge; command attachments are deliberately out of scope.
22
- images: z.array(z.never()).length(0).optional(),
23
- submittedAttachments: z.array(z.never()).length(0).optional(),
24
- }).strict().superRefine((value, context) => {
25
- if (value.images !== undefined && value.submittedAttachments !== undefined) {
26
- context.addIssue({
27
- code: z.ZodIssueCode.custom,
28
- message: 'Use either images or submittedAttachments, not both.',
29
- path: ['submittedAttachments'],
30
- });
31
- }
32
- });
33
- const commandExecutePayloadSchema = z.object({ args: commandExecuteArgsSchema }).strict();
34
- const transferOpenSchema = z.object({
35
- transferId: z.string().uuid(),
36
- totalBytes: z.number().int().positive().max(MAX_HARNESS_API_TRANSFER_BYTES),
37
- totalChunks: z.number().int().positive(),
38
- }).strict();
39
- const transferChunkSchema = z.object({
40
- transferId: z.string().uuid(),
41
- index: z.number().int().nonnegative(),
42
- data: z.string().min(1),
43
- }).strict();
44
- const transferIdSchema = z.object({ transferId: z.string().uuid() }).strict();
45
- const transferReadSchema = z.object({
46
- transferId: z.string().uuid(),
47
- index: z.number().int().nonnegative(),
48
- }).strict();
49
- const directoryListSchema = z.object({
50
- path: z.string().min(1).max(4096).optional(),
51
- }).strict();
52
- const MAX_ACTIVE_STREAMS = MAX_ALPHA_STREAMS_PER_CONNECTION;
53
- const MAX_ACTIVE_TRANSFERS = MAX_ACTIVE_TRANSFERS_PER_DIRECTION;
54
- const INLINE_TRANSFER_RESPONSE_BYTES = 2 * 1024 * 1024;
55
- /** Fixed v0.1.2 Typert Remote subset exposed to authenticated peers. */
56
- export const HARNESS_REMOTE_ALLOWLIST = [
57
- '$events',
58
- '$events/result',
59
- 'agentPresets/list',
60
- 'agentPresets/read',
61
- 'agentPresets/select',
62
- 'commands/execute',
63
- 'commands/list',
64
- 'credentials/describe',
65
- 'credentials/set',
66
- 'credentials/unset',
67
- 'directoryPicker/list',
68
- 'fileReferences/list',
69
- 'goals/clear',
70
- 'goals/complete',
71
- 'goals/create',
72
- 'goals/edit',
73
- 'goals/pause',
74
- 'goals/resume',
75
- 'llm/discoverModels',
76
- 'llm/listConfigurableProviders',
77
- 'llm/listProviders',
78
- 'messageFeedback/delete',
79
- 'messageFeedback/list',
80
- 'messageFeedback/put',
81
- 'pluginInventory/list',
82
- 'permissionPresets/catalog',
83
- 'session/attachment',
84
- 'session/cancel',
85
- 'session/canOpenWorkspacePath',
86
- 'session/control',
87
- 'session/create',
88
- 'session/follow',
89
- 'session/fork',
90
- 'session/list',
91
- 'session/modelCatalog',
92
- 'session/page',
93
- 'session/prompt',
94
- 'session/projections',
95
- 'session/initializeDefaultModel',
96
- 'session/workspacePathApplications',
97
- 'session/rename',
98
- 'session/search',
99
- 'session/selectModel',
100
- 'session/updateQueue',
101
- 'sessionReferenceResolver/candidates',
102
- 'settings/describe',
103
- 'settings/mutate',
104
- 'settings/replace',
105
- 'settings/update',
106
- 'skills/list',
107
- 'subagents/interruptByParent',
108
- 'subagents/list',
109
- 'subagents/prompt',
110
- 'workspaceFiles/list',
111
- 'workspaceFiles/stat',
112
- 'workspaceFiles/read',
113
- 'workspaceFiles/readBytes',
114
- 'workspaceFiles/readAll',
115
- 'workspaceFiles/readRelated',
116
- 'workspaceFiles/changes',
117
- 'officeToPdf/render',
118
- 'officeToPdf/generation',
119
- 'workspace/archiveSession',
120
- 'workspace/create',
121
- 'workspace/delete',
122
- 'workspace/follow',
123
- 'workspace/insertBefore',
124
- 'workspace/insertSessionBefore',
125
- 'workspace/rename',
126
- 'workspace/unarchiveSession',
127
- 'workspace/initializeDefault',
128
- 'workspace/pinSession',
129
- 'workspace/unpinSession',
130
- ];
131
- const allowedEndpoints = new Set(HARNESS_REMOTE_ALLOWLIST);
132
- /** Host-side adapter from the encrypted peer channel to the official alpha Gateway carrier. */
133
- export class HarnessRemoteBridge {
134
- gateway;
135
- publish;
136
- logger;
137
- harnessVersion;
138
- terminal;
139
- codexWorkspace;
140
- streams = new Map();
141
- incomingTransfers = new Map();
142
- outgoingTransfers = new Map();
143
- constructor(gateway, publish, logger, harnessVersion, terminal = new TerminalPolicy(() => false, "", new Map()), codexWorkspace) {
144
- this.gateway = gateway;
145
- this.publish = publish;
146
- this.logger = logger;
147
- this.harnessVersion = harnessVersion;
148
- this.terminal = terminal;
149
- this.codexWorkspace = codexWorkspace;
150
- }
151
- /**
152
- * Answer one remote Gateway call.
153
- *
154
- * Bytes have to leave in DSH's own form: this result is JSON-encoded on its way to the client, and a
155
- * \`Uint8Array\` would arrive there as \`{"0":…}\` and fail the generated schema (the image-preview
156
- * failure). Tagging here, hydrating on the client, keeps one convention on both sides.
157
- */
158
- async call(input) {
159
- return collectRpcAttachments(await this.dispatchCall(input));
160
- }
161
- async dispatchCall(input) {
162
- const params = callSchema.parse(input);
163
- this.assertAllowed(params.endpoint);
164
- if (TERMINAL_STREAMS.has(params.endpoint))
165
- throw new RpcError('METHOD_NOT_ALLOWED', 'Use a stream for this terminal endpoint.');
166
- if (['settings/update', 'settings/replace', 'settings/mutate'].includes(params.endpoint)) {
167
- const args = requestArgs(params.payload);
168
- if (args.ns === 'ds-harness-remote' || args.ns === 'dsh-remote') {
169
- throw new RpcError('PERMISSION_DENIED', 'Remote access settings can only be changed locally on the Host.');
170
- }
171
- }
172
- const reservation = params.endpoint.startsWith('terminal/') ? this.terminal.check(params.endpoint, params.payload) : undefined;
173
- let codexResult;
174
- if (this.codexWorkspace !== undefined) {
175
- try {
176
- codexResult = await this.codexWorkspace.call(params.endpoint, params.payload, AbortSignal.timeout(60_000));
177
- }
178
- catch (error) {
179
- // A failed allocation must release the device ownership it reserved.
180
- if (reservation !== undefined) {
181
- this.terminal.result(params.endpoint, params.payload, { ok: false, error: { code: 'FAILED', message: '', details: {} } }, reservation);
182
- }
183
- throw error;
184
- }
185
- }
186
- if (codexResult !== undefined)
187
- return reservation === undefined ? codexResult : this.terminal.result(params.endpoint, params.payload, codexResult, reservation);
188
- if (params.endpoint === 'session/canOpenWorkspacePath') {
189
- return { ok: true, value: true };
190
- }
191
- const startedAt = performance.now();
192
- const signal = AbortSignal.timeout(60_000);
193
- try {
194
- const nativePayload = normalizeWorkspaceRequestPayload(params.endpoint, params.payload, this.harnessVersion);
195
- const nativeResult = params.endpoint === 'commands/execute'
196
- ? await dispatchCommandForHost(this.gateway, params.payload, signal, this.harnessVersion)
197
- : await this.gateway.dispatch(params.endpoint, nativePayload, signal);
198
- const result = params.endpoint === 'directoryPicker/list' && needsDirectoryFallback(nativeResult)
199
- ? await this.directoryList(params.payload, signal)
200
- : nativeResult;
201
- this.logger?.debug('harness remote call ok', {
202
- endpoint: params.endpoint,
203
- durationMs: Math.round(performance.now() - startedAt),
204
- });
205
- return reservation === undefined ? result : this.terminal.result(params.endpoint, params.payload, result, reservation);
206
- }
207
- catch (error) {
208
- if (reservation !== undefined)
209
- this.terminal.result(params.endpoint, params.payload, { ok: false, error: { code: 'FAILED', message: '', details: {} } }, reservation);
210
- if (params.endpoint === 'directoryPicker/list') {
211
- const result = await this.directoryList(params.payload, signal);
212
- this.logger?.debug('harness remote call ok', {
213
- endpoint: params.endpoint,
214
- durationMs: Math.round(performance.now() - startedAt),
215
- fallback: 'directory-browser',
216
- });
217
- return result;
218
- }
219
- this.logger?.warn('harness remote call failed', {
220
- endpoint: params.endpoint,
221
- durationMs: Math.round(performance.now() - startedAt),
222
- code: this.gateway.failure(error).code,
223
- });
224
- throw error;
225
- }
226
- }
227
- async directoryList(payload, signal) {
228
- const args = requestArgs(payload);
229
- const params = directoryListSchema.parse(args);
230
- return { ok: true, value: await listRemoteDirectory(params.path, signal) };
231
- }
232
- openTransfer(input) {
233
- this.pruneTransfers();
234
- const params = transferOpenSchema.parse(input);
235
- if (params.totalChunks !== Math.ceil(params.totalBytes / HARNESS_API_TRANSFER_CHUNK_BYTES)) {
236
- throw new RpcError('INVALID_MESSAGE', 'The Harness Remote transfer chunk count is invalid.');
237
- }
238
- if (this.incomingTransfers.has(params.transferId) || this.outgoingTransfers.has(params.transferId)) {
239
- throw new RpcError('REQUEST_CONFLICT', 'The Harness Remote transfer id is already active.');
240
- }
241
- if (this.incomingTransfers.size >= MAX_ACTIVE_TRANSFERS) {
242
- throw new RpcError('RATE_LIMITED', 'Too many Harness Remote transfers are active.', undefined, true);
243
- }
244
- this.incomingTransfers.set(params.transferId, {
245
- totalBytes: params.totalBytes,
246
- totalChunks: params.totalChunks,
247
- chunks: [],
248
- receivedBytes: 0,
249
- touchedAt: Date.now(),
250
- });
251
- return { opened: true, transferId: params.transferId };
252
- }
253
- appendTransfer(input) {
254
- this.pruneTransfers();
255
- const params = transferChunkSchema.parse(input);
256
- const transfer = this.incomingTransfers.get(params.transferId);
257
- if (transfer === undefined)
258
- throw new RpcError('TRANSFER_NOT_FOUND', 'The Harness Remote transfer is not active.');
259
- if (params.index !== transfer.chunks.length || params.index >= transfer.totalChunks) {
260
- this.incomingTransfers.delete(params.transferId);
261
- throw new RpcError('INVALID_MESSAGE', 'Harness Remote transfer chunks must arrive exactly once and in order.');
262
- }
263
- const chunk = decodeCanonicalBase64(params.data);
264
- const expectedBytes = Math.min(HARNESS_API_TRANSFER_CHUNK_BYTES, transfer.totalBytes - params.index * HARNESS_API_TRANSFER_CHUNK_BYTES);
265
- if (chunk.byteLength !== expectedBytes) {
266
- this.incomingTransfers.delete(params.transferId);
267
- throw new RpcError('INVALID_MESSAGE', 'The Harness Remote transfer chunk size is invalid.');
268
- }
269
- transfer.chunks.push(chunk);
270
- transfer.receivedBytes += chunk.byteLength;
271
- transfer.touchedAt = Date.now();
272
- return { accepted: true, transferId: params.transferId, index: params.index };
273
- }
274
- async commitTransfer(input) {
275
- this.pruneTransfers();
276
- const params = transferIdSchema.parse(input);
277
- const transfer = this.incomingTransfers.get(params.transferId);
278
- if (transfer === undefined)
279
- throw new RpcError('TRANSFER_NOT_FOUND', 'The Harness Remote transfer is not active.');
280
- this.incomingTransfers.delete(params.transferId);
281
- if (transfer.chunks.length !== transfer.totalChunks || transfer.receivedBytes !== transfer.totalBytes) {
282
- throw new RpcError('INVALID_MESSAGE', 'The Harness Remote transfer is incomplete.');
283
- }
284
- let request;
285
- try {
286
- request = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(concatChunks(transfer.chunks, transfer.totalBytes)));
287
- }
288
- catch {
289
- throw new RpcError('INVALID_MESSAGE', 'The Harness Remote transfer does not contain a valid request.');
290
- }
291
- const response = await this.call(callSchema.parse(request));
292
- const responseBytes = new TextEncoder().encode(JSON.stringify(response));
293
- if (responseBytes.byteLength <= INLINE_TRANSFER_RESPONSE_BYTES)
294
- return { kind: 'inline', response };
295
- if (responseBytes.byteLength > MAX_HARNESS_API_TRANSFER_BYTES) {
296
- throw new RpcError('RESPONSE_TOO_LARGE', 'The Harness Remote response exceeds the bounded transfer limit.');
297
- }
298
- if (this.outgoingTransfers.size >= MAX_ACTIVE_TRANSFERS) {
299
- throw new RpcError('RATE_LIMITED', 'Too many Harness Remote response transfers are active.', undefined, true);
300
- }
301
- const totalChunks = Math.ceil(responseBytes.byteLength / HARNESS_API_TRANSFER_CHUNK_BYTES);
302
- this.outgoingTransfers.set(params.transferId, {
303
- bytes: responseBytes,
304
- totalChunks,
305
- nextIndex: 0,
306
- touchedAt: Date.now(),
307
- });
308
- return { kind: 'chunked', transferId: params.transferId, totalBytes: responseBytes.byteLength, totalChunks };
309
- }
310
- readTransfer(input) {
311
- this.pruneTransfers();
312
- const params = transferReadSchema.parse(input);
313
- const transfer = this.outgoingTransfers.get(params.transferId);
314
- if (transfer === undefined)
315
- throw new RpcError('TRANSFER_NOT_FOUND', 'The Harness Remote response transfer is not active.');
316
- if (params.index !== transfer.nextIndex || params.index >= transfer.totalChunks) {
317
- this.outgoingTransfers.delete(params.transferId);
318
- throw new RpcError('INVALID_MESSAGE', 'Harness Remote response chunks must be read exactly once and in order.');
319
- }
320
- const start = params.index * HARNESS_API_TRANSFER_CHUNK_BYTES;
321
- const end = Math.min(start + HARNESS_API_TRANSFER_CHUNK_BYTES, transfer.bytes.byteLength);
322
- transfer.nextIndex += 1;
323
- transfer.touchedAt = Date.now();
324
- return {
325
- transferId: params.transferId,
326
- index: params.index,
327
- data: Buffer.from(transfer.bytes.subarray(start, end)).toString('base64'),
328
- };
329
- }
330
- closeTransfer(input) {
331
- const params = transferIdSchema.parse(input);
332
- const closed = this.incomingTransfers.delete(params.transferId) || this.outgoingTransfers.delete(params.transferId);
333
- return { closed, transferId: params.transferId };
334
- }
335
- async openStream(input) {
336
- const params = streamOpenSchema.parse(input);
337
- this.assertAllowed(params.endpoint);
338
- if (params.endpoint.startsWith('settings/'))
339
- throw new RpcError('METHOD_NOT_ALLOWED', 'Settings endpoints are not streams.');
340
- if (TERMINAL_CALLS.has(params.endpoint))
341
- throw new RpcError('METHOD_NOT_ALLOWED', 'This terminal endpoint is not a stream.');
342
- if (TERMINAL_STREAMS.has(params.endpoint))
343
- this.terminal.check(params.endpoint, params.payload);
344
- if (this.streams.has(params.streamId))
345
- throw new RpcError('REQUEST_CONFLICT', 'The Harness Remote stream is already open.');
346
- if (this.streams.size >= MAX_ACTIVE_STREAMS) {
347
- throw new RpcError('RATE_LIMITED', 'Too many Harness Remote streams are open.', undefined, true);
348
- }
349
- const controller = new AbortController();
350
- this.streams.set(params.streamId, { controller });
351
- let source;
352
- try {
353
- source = (this.codexWorkspace === undefined ? undefined : await this.codexWorkspace.open(params.endpoint, params.payload, controller.signal))
354
- ?? await this.gateway.open(params.endpoint, normalizeWorkspaceChangesPayload(params.endpoint, params.payload, this.harnessVersion), controller.signal);
355
- controller.signal.throwIfAborted();
356
- }
357
- catch (error) {
358
- this.streams.delete(params.streamId);
359
- controller.abort();
360
- throw error;
361
- }
362
- void this.pump(params.streamId, source, controller.signal);
363
- return { opened: true, streamId: params.streamId };
364
- }
365
- closeStream(input) {
366
- const params = streamCloseSchema.parse(input);
367
- const active = this.streams.get(params.streamId);
368
- if (active !== undefined) {
369
- this.streams.delete(params.streamId);
370
- active.controller.abort('client-closed');
371
- }
372
- return { closed: active !== undefined, streamId: params.streamId };
373
- }
374
- async closeAll(reason = 'peer-disconnected') {
375
- const streams = [...this.streams.entries()];
376
- this.streams.clear();
377
- this.incomingTransfers.clear();
378
- this.outgoingTransfers.clear();
379
- for (const [, stream] of streams)
380
- stream.controller.abort(reason);
381
- await this.codexWorkspace?.closeAll();
382
- }
383
- assertAllowed(endpoint) {
384
- if (!allowedEndpoints.has(endpoint) && !TERMINAL_CALLS.has(endpoint) && !TERMINAL_STREAMS.has(endpoint)) {
385
- throw new RpcError('METHOD_NOT_ALLOWED', 'The requested Harness Remote endpoint is not allowed.');
386
- }
387
- if (endpoint === '$events' && !this.gateway.supportsCarrier) {
388
- throw new RpcError('FEATURE_NOT_SUPPORTED', 'This Harness version does not support Remote event transport.');
389
- }
390
- }
391
- async pump(streamId, source, signal) {
392
- let reason = 'completed';
393
- let failure;
394
- try {
395
- for await (const value of source) {
396
- if (signal.aborted)
397
- break;
398
- await this.publish('harness.remote.frame', {
399
- streamId,
400
- hasValue: true,
401
- ...(value === undefined ? {} : { value: collectRpcAttachments(value) }),
402
- });
403
- }
404
- if (signal.aborted)
405
- reason = 'cancelled';
406
- }
407
- catch (error) {
408
- reason = signal.aborted ? 'cancelled' : 'failed';
409
- if (!signal.aborted)
410
- failure = this.gateway.failure(error);
411
- }
412
- finally {
413
- this.streams.delete(streamId);
414
- await this.publish('harness.remote.stream.closed', {
415
- streamId,
416
- reason,
417
- ...(failure === undefined ? {} : { failure }),
418
- }).catch(() => undefined);
419
- }
420
- }
421
- pruneTransfers() {
422
- const cutoff = Date.now() - TRANSFER_IDLE_MS;
423
- for (const [id, transfer] of this.incomingTransfers)
424
- if (transfer.touchedAt < cutoff)
425
- this.incomingTransfers.delete(id);
426
- for (const [id, transfer] of this.outgoingTransfers)
427
- if (transfer.touchedAt < cutoff)
428
- this.outgoingTransfers.delete(id);
429
- }
430
- }
431
- /**
432
- * DSH 0.1.7 changed workspaceFiles/changes from a Session-wide feed to a
433
- * target-scoped feed that requires `path`. Older Web/Client bundles still
434
- * open the Session-wide form. Keep that request working on a 0.1.7 Host by
435
- * watching the workspace root; the legacy client continues filtering frames
436
- * by the file it has opened. Do not add the field to older Hosts, whose
437
- * generated Typert schema rejects unknown arguments.
438
- */
439
- function normalizeWorkspaceChangesPayload(endpoint, payload, harnessVersion) {
440
- if (endpoint !== 'workspaceFiles/changes' || !requiresWorkspaceChangePath(harnessVersion))
441
- return payload;
442
- if (!isRecord(payload) || !isRecord(payload.args) || Object.hasOwn(payload.args, 'path'))
443
- return payload;
444
- return { ...payload, args: { ...payload.args, path: '.' } };
445
- }
446
- /**
447
- * DSH 0.1.7 nests the byte range under `options`, while older clients send
448
- * it directly on the request args. Keep the translation Host-version gated:
449
- * older generated descriptors reject the new `options` field.
450
- */
451
- function normalizeWorkspaceRequestPayload(endpoint, payload, harnessVersion) {
452
- if (!isRecord(payload) || !isRecord(payload.args))
453
- return payload;
454
- const args = payload.args;
455
- if (endpoint === 'workspaceFiles/readBytes' && requiresWorkspaceChangePath(harnessVersion)) {
456
- if (!Object.hasOwn(args, 'range') || Object.hasOwn(args, 'options'))
457
- return payload;
458
- const { range, ...rest } = args;
459
- return { ...payload, args: { ...rest, options: { range } } };
460
- }
461
- // DSH 0.2 removes the first-use naming request; accept a legacy client
462
- // payload while keeping the generated 0.2 endpoint's zero-argument shape.
463
- if (endpoint === 'workspace/initializeDefault' && isDshV02OrNewer(harnessVersion) && Object.hasOwn(args, 'request')) {
464
- const { request: _request, ...rest } = args;
465
- return { ...payload, args: rest };
466
- }
467
- return payload;
468
- }
469
- function isDshV02OrNewer(version) {
470
- const match = /^(?:dsh-)?v?(\d+)\.(\d+)\.(\d+)(?:-|$)/u.exec(version?.trim() ?? '');
471
- if (match === null)
472
- return false;
473
- return Number(match[1]) === 0 && Number(match[2]) >= 2;
474
- }
475
- function requiresWorkspaceChangePath(version) {
476
- const match = /^(?:dsh-)?v?(\d+)\.(\d+)\.(\d+)(?:-|$)/u.exec(version?.trim() ?? '');
477
- if (match === null)
478
- return false;
479
- return Number(match[1]) === 0
480
- && ((Number(match[2]) === 1 && Number(match[3]) >= 7) || Number(match[2]) === 2);
481
- }
482
- async function dispatchCommandForHost(gateway, payload, signal, harnessVersion) {
483
- const parsed = commandExecutePayloadSchema.parse(payload);
484
- const legacyPayload = {
485
- args: {
486
- agentId: parsed.args.agentId,
487
- line: parsed.args.line,
488
- images: parsed.args.images ?? [],
489
- },
490
- };
491
- const currentPayload = {
492
- args: {
493
- agentId: parsed.args.agentId,
494
- line: parsed.args.line,
495
- submittedAttachments: parsed.args.submittedAttachments ?? [],
496
- },
497
- };
498
- const args = harnessSessionGeneration(harnessVersion) === 'v3' ? currentPayload : legacyPayload;
499
- return gateway.dispatch('commands/execute', args, signal);
500
- }
501
- function decodeCanonicalBase64(value) {
502
- const bytes = Buffer.from(value, 'base64');
503
- if (bytes.toString('base64') !== value)
504
- throw new RpcError('INVALID_MESSAGE', 'The Harness Remote transfer chunk is invalid.');
505
- return bytes;
506
- }
507
- function concatChunks(chunks, totalBytes) {
508
- const result = new Uint8Array(totalBytes);
509
- let offset = 0;
510
- for (const chunk of chunks) {
511
- result.set(chunk, offset);
512
- offset += chunk.byteLength;
513
- }
514
- return result;
515
- }
516
- function needsDirectoryFallback(result) {
517
- if (result.ok)
518
- return false;
519
- const code = result.error.code.toLocaleLowerCase();
520
- const message = result.error.message.toLocaleLowerCase();
521
- return code.includes('capability')
522
- || code === 'directory-picker/unavailable'
523
- || code === 'directory-picker-unavailable'
524
- || message.includes('browse capability')
525
- || message.includes('browser capability')
526
- || message.includes('brower capability')
527
- || message.includes('directory-picker-unavailable');
528
- }
529
- function requestArgs(payload) {
530
- const root = record(payload);
531
- const args = isRecord(root.args) ? root.args : root;
532
- return record(args.request ?? args._request ?? args);
533
- }
534
- function record(value) {
535
- return isRecord(value) ? value : {};
536
- }
537
- function isRecord(value) {
538
- return typeof value === 'object' && value !== null && !Array.isArray(value);
539
- }
540
- //# sourceMappingURL=harness-remote-bridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"harness-remote-bridge.js","sourceRoot":"","sources":["../src/harness-remote-bridge.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- export type HarnessSessionGeneration = 'legacy' | 'v3';
2
- export declare function normalizeHarnessVersion(value: unknown): string | undefined;
3
- export declare function selectHarnessVersion(reportedVersion: string | undefined, distributionVersion: string | undefined): string | undefined;
4
- /**
5
- * Select the Typert Session wire generation used by supported DSH builds.
6
- * Unknown builds stay on the established v0.1.2 profile; package peer ranges
7
- * prevent them from being presented as supported installations.
8
- */
9
- export declare function harnessSessionGeneration(version: string | undefined): HarnessSessionGeneration;
10
- /**
11
- * Compatibility fallback for Harness builds whose host.describe still returns
12
- * the historical 0.0.1 placeholder.
13
- *
14
- * Both supported entrypoint layouts must be covered. A CLI/dsh-TUI entrypoint
15
- * sits below the @deepseek-ai/dsh package root, so only its ancestor chain is
16
- * worth walking. The 0.2.0 Desktop shell instead launches its own
17
- * `@deepseek-ai/dsh-desktop-host` entrypoint from inside `app.asar`, where the
18
- * ancestors carry only the desktop shell and runtime manifests while the
19
- * Harness CLI package is a sibling; resolve that package through the
20
- * entrypoint's module scope.
21
- */
22
- export declare function readHarnessDistributionVersion(entrypoint?: string | undefined): Promise<string | undefined>;
23
- //# sourceMappingURL=harness-version.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"harness-version.d.ts","sourceRoot":"","sources":["../src/harness-version.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,IAAI,CAAA;AAEtD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAK1E;AAED,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,mBAAmB,EAAE,MAAM,GAAG,SAAS,GACtC,MAAM,GAAG,SAAS,CAGpB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,wBAAwB,CAS9F;AAcD;;;;;;;;;;;GAWG;AACH,wBAAsB,8BAA8B,CAClD,UAAU,GAAE,MAAM,GAAG,SAA2B,GAC/C,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2B7B"}