@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,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"}
|