@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.
- package/README.md +14 -3
- package/cordis.patch.yml +30 -30
- package/dist/client.github.js +1 -1
- package/dist/client.js +1 -1
- package/dist/index.js +1216 -396
- 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
package/dist/tui-command.js
DELETED
|
@@ -1,392 +0,0 @@
|
|
|
1
|
-
import { renderCompactTerminalQr, renderTerminalQr } from './cli.js';
|
|
2
|
-
import { ENABLED_QR_PROVIDERS, ServerApiError, isEnabledQrProvider, oauthProviderName } from './server-api.js';
|
|
3
|
-
const QR_POLL_INTERVAL_MS = 2_000;
|
|
4
|
-
const REMOTE_LOGIN_SCENE_ID = 'remote-login';
|
|
5
|
-
const REMOTE_STATUS_SCENE_ID = 'remote-status';
|
|
6
|
-
/** Soft TUI integration: Desktop profiles never wait for terminal-only services. */
|
|
7
|
-
export function installTuiRemoteCommand(ctx, resolveTarget) {
|
|
8
|
-
const tuiContext = ctx;
|
|
9
|
-
// The bundle's TUI-only Loader row exposes these services at the entry
|
|
10
|
-
// boundary. A Desktop entry has neither and stays completely inert here.
|
|
11
|
-
const commands = tuiContext.get('commands', false);
|
|
12
|
-
if (commands === undefined)
|
|
13
|
-
return;
|
|
14
|
-
// Newer dsh-TUI versions attribute commands to their owning plugin through
|
|
15
|
-
// this optional service. Older versions only expose the direct registry.
|
|
16
|
-
const pluginHost = tuiContext.get('tuiPluginHost', false);
|
|
17
|
-
const trees = tuiContext.get('tuiCommandTrees', false);
|
|
18
|
-
const scenes = tuiContext.get('tuiScenes', false);
|
|
19
|
-
const login = new RemoteLoginController(resolveTarget);
|
|
20
|
-
const LoginScene = createRemoteLoginScene(login);
|
|
21
|
-
const StatusScene = createRemoteStatusScene(resolveTarget);
|
|
22
|
-
tuiContext.effect(() => {
|
|
23
|
-
const definition = {
|
|
24
|
-
name: 'remote',
|
|
25
|
-
description: 'Manage Remote Host login and connection status',
|
|
26
|
-
input: { hint: '[status | login [github|zhihu] | logout]' },
|
|
27
|
-
recordInput: false,
|
|
28
|
-
handler: async ({ rawInput }) => {
|
|
29
|
-
const args = rawInput.trim().split(/\s+/u).filter(Boolean);
|
|
30
|
-
const command = args[0] ?? 'status';
|
|
31
|
-
if (command === 'status' && args.length <= 1) {
|
|
32
|
-
if (scenes?.open(REMOTE_STATUS_SCENE_ID) === true)
|
|
33
|
-
return { kind: 'success' };
|
|
34
|
-
return { kind: 'success', text: formatRemoteStatusInline(resolveTarget()) };
|
|
35
|
-
}
|
|
36
|
-
if (command === 'login' && args.length <= 2) {
|
|
37
|
-
const provider = args[1] ?? ENABLED_QR_PROVIDERS[0] ?? 'wechat';
|
|
38
|
-
if (!isEnabledQrProvider(provider)) {
|
|
39
|
-
return { kind: 'error', text: `Usage: /remote login [${ENABLED_QR_PROVIDERS.join('|')}]` };
|
|
40
|
-
}
|
|
41
|
-
if (scenes === undefined) {
|
|
42
|
-
return {
|
|
43
|
-
kind: 'error',
|
|
44
|
-
text: `The Remote login screen is unavailable. Run "ds-harness-remote login ${provider}" outside dsh-TUI, then restart it.`,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
login.start(provider);
|
|
48
|
-
if (!scenes.open(REMOTE_LOGIN_SCENE_ID)) {
|
|
49
|
-
login.cancel();
|
|
50
|
-
return { kind: 'error', text: 'The Remote login screen is unavailable.' };
|
|
51
|
-
}
|
|
52
|
-
return { kind: 'success' };
|
|
53
|
-
}
|
|
54
|
-
if (command === 'logout' && args.length === 1) {
|
|
55
|
-
const target = resolveTarget();
|
|
56
|
-
if (target === undefined)
|
|
57
|
-
return remoteNotReady();
|
|
58
|
-
try {
|
|
59
|
-
await target.runtime.clearHostAuthorization();
|
|
60
|
-
return {
|
|
61
|
-
kind: 'success',
|
|
62
|
-
text: 'Remote Host logged out and its local device identity was rotated.',
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
return {
|
|
67
|
-
kind: 'error',
|
|
68
|
-
text: `Local Remote Host credentials were cleared, but Server revocation failed (${errorCode(error)}).`,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (command === 'config') {
|
|
73
|
-
return { kind: 'error', text: 'Host configuration is not supported yet.' };
|
|
74
|
-
}
|
|
75
|
-
return { kind: 'error', text: remoteCommandUsage() };
|
|
76
|
-
},
|
|
77
|
-
};
|
|
78
|
-
const disposeCommand = registerRemoteCommand(tuiContext, commands, pluginHost, definition);
|
|
79
|
-
const disposeTree = registerOptional(tuiContext, 'command completion', () => trees?.register({
|
|
80
|
-
root: 'remote',
|
|
81
|
-
descriptions: {
|
|
82
|
-
en: 'Manage Remote Host login and connection status',
|
|
83
|
-
zh: '管理 Remote Host 登录和连接状态',
|
|
84
|
-
},
|
|
85
|
-
children: remoteCommandChildren,
|
|
86
|
-
}));
|
|
87
|
-
const disposeScene = registerOptional(tuiContext, 'login scene', () => scenes?.register({
|
|
88
|
-
id: REMOTE_LOGIN_SCENE_ID,
|
|
89
|
-
title: 'Remote Host login',
|
|
90
|
-
component: LoginScene,
|
|
91
|
-
}, tuiContext));
|
|
92
|
-
const disposeStatusScene = registerOptional(tuiContext, 'status scene', () => scenes?.register({
|
|
93
|
-
id: REMOTE_STATUS_SCENE_ID,
|
|
94
|
-
title: 'Remote Host status',
|
|
95
|
-
component: StatusScene,
|
|
96
|
-
}, tuiContext));
|
|
97
|
-
return () => {
|
|
98
|
-
login.cancel();
|
|
99
|
-
disposeCommand();
|
|
100
|
-
disposeTree();
|
|
101
|
-
disposeScene();
|
|
102
|
-
disposeStatusScene();
|
|
103
|
-
};
|
|
104
|
-
}, 'ds-harness-remote: dsh-tui /remote command');
|
|
105
|
-
}
|
|
106
|
-
function registerRemoteCommand(ctx, commands, pluginHost, definition) {
|
|
107
|
-
if (pluginHost === undefined)
|
|
108
|
-
return commands.register(definition);
|
|
109
|
-
try {
|
|
110
|
-
return pluginHost.registerCommand(ctx, definition);
|
|
111
|
-
}
|
|
112
|
-
catch (error) {
|
|
113
|
-
// dsh rc.2 with dsh-TUI 0.10.0-beta.4 mounts the mediated service but its
|
|
114
|
-
// Cordis bundle loader does not admit third-party activations yet. Keep the
|
|
115
|
-
// command usable on that exact compatibility seam; every other mediated
|
|
116
|
-
// registration failure remains fail-closed.
|
|
117
|
-
if (!hasErrorCode(error, 'COMPONENT_NOT_ADMITTED'))
|
|
118
|
-
throw error;
|
|
119
|
-
ctx.logger.debug('dsh-TUI Remote command is using the legacy command registry because Component admission is unavailable');
|
|
120
|
-
return commands.register(definition);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
function hasErrorCode(error, code) {
|
|
124
|
-
return typeof error === 'object' && error !== null && 'code' in error
|
|
125
|
-
&& error.code === code;
|
|
126
|
-
}
|
|
127
|
-
function registerOptional(ctx, feature, register) {
|
|
128
|
-
try {
|
|
129
|
-
return register() ?? (() => { });
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
ctx.logger.warn(`dsh-TUI Remote ${feature} is unavailable`, { code: errorCode(error) });
|
|
133
|
-
return () => { };
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
function remoteCommandChildren(canonicalPath) {
|
|
137
|
-
if (canonicalPath.length === 1 && canonicalPath[0] === 'remote') {
|
|
138
|
-
return [
|
|
139
|
-
{
|
|
140
|
-
name: 'status',
|
|
141
|
-
description: 'Show Remote Host authorization and connection status',
|
|
142
|
-
descriptions: { zh: '查看 Remote Host 授权和连接状态' },
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
name: 'login',
|
|
146
|
-
description: 'Authorize this Host with a GitHub or Zhihu QR code',
|
|
147
|
-
descriptions: { zh: '使用 GitHub 或知乎二维码授权当前 Host' },
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
name: 'logout',
|
|
151
|
-
description: 'Revoke this Host and rotate its local identity',
|
|
152
|
-
descriptions: { zh: '撤销当前 Host 并轮换本地身份' },
|
|
153
|
-
},
|
|
154
|
-
];
|
|
155
|
-
}
|
|
156
|
-
if (canonicalPath.length === 2 && canonicalPath[0] === 'remote' && canonicalPath[1] === 'login') {
|
|
157
|
-
return ENABLED_QR_PROVIDERS.map((provider, index) => ({
|
|
158
|
-
name: provider,
|
|
159
|
-
description: `Sign in with ${oauthProviderName(provider)}${index === 0 ? ' (default)' : ''}`,
|
|
160
|
-
descriptions: { zh: `使用${oauthProviderName(provider)}登录${index === 0 ? '(默认)' : ''}` },
|
|
161
|
-
}));
|
|
162
|
-
}
|
|
163
|
-
return [];
|
|
164
|
-
}
|
|
165
|
-
function remoteStatusLines(target) {
|
|
166
|
-
if (target === undefined) {
|
|
167
|
-
return ['Remote Host is disabled or still starting. Check the ds-harness-remote settings and retry.'];
|
|
168
|
-
}
|
|
169
|
-
const { runtime, config } = target;
|
|
170
|
-
const status = runtime.hostStatus();
|
|
171
|
-
const diagnostics = runtime.diagnostics();
|
|
172
|
-
const codex = runtime.codexStatus();
|
|
173
|
-
const capabilities = new Set(diagnostics.capabilities);
|
|
174
|
-
const connection = status.online
|
|
175
|
-
? 'online'
|
|
176
|
-
: status.starting
|
|
177
|
-
? 'starting'
|
|
178
|
-
: status.reconnecting
|
|
179
|
-
? 'reconnecting'
|
|
180
|
-
: status.accountRequired
|
|
181
|
-
? 'authorization required'
|
|
182
|
-
: 'offline';
|
|
183
|
-
return [
|
|
184
|
-
`Server: ${config.serverUrl ?? 'not configured'}`,
|
|
185
|
-
'Host control: enabled',
|
|
186
|
-
`Device: ${status.deviceId ?? 'not initialized'}`,
|
|
187
|
-
`Authorization: ${status.authorized ? status.account === undefined ? 'logged in' : `logged in (${status.account})` : 'logged out'}`,
|
|
188
|
-
`Server connection: ${connection}`,
|
|
189
|
-
...(status.error === undefined ? [] : [`Connection error: ${status.error}`]),
|
|
190
|
-
...(status.error === 'CONNECTION_REPLACED'
|
|
191
|
-
? ['Another instance is using this Host identity. Stop it or use a separate DSH_HOME before reconnecting.']
|
|
192
|
-
: status.error === 'SERVER_CREDENTIALS_BUSY'
|
|
193
|
-
? ['Credential refresh is locked. Stop all instances before removing an orphaned server-credentials.json.refresh-lock and authorizing again.']
|
|
194
|
-
: status.accountRequired ? ['Authorize again with /remote login [github|zhihu].'] : []),
|
|
195
|
-
`Harness Remote API: ${capabilities.has('harness.api.v1')
|
|
196
|
-
? 'available (ApiProxy)'
|
|
197
|
-
: capabilities.has('harness.remote.v3')
|
|
198
|
-
? 'available (Typert Remote Session V3)'
|
|
199
|
-
: capabilities.has('harness.remote.v1')
|
|
200
|
-
? 'available (Typert Remote)'
|
|
201
|
-
: 'unavailable'}`,
|
|
202
|
-
`Remote clients: ${diagnostics.activeConnections}`,
|
|
203
|
-
`Codex Remote: ${codex.enabled ? codex.state : 'disabled'}`,
|
|
204
|
-
'',
|
|
205
|
-
'Commands: /remote login [github|zhihu] · /remote status · /remote logout',
|
|
206
|
-
];
|
|
207
|
-
}
|
|
208
|
-
function formatRemoteStatusInline(target) {
|
|
209
|
-
return remoteStatusLines(target).filter(Boolean).join(' · ');
|
|
210
|
-
}
|
|
211
|
-
function remoteCommandUsage() {
|
|
212
|
-
return [
|
|
213
|
-
'Usage:',
|
|
214
|
-
' /remote',
|
|
215
|
-
' /remote status',
|
|
216
|
-
' /remote login [github|zhihu]',
|
|
217
|
-
' /remote logout',
|
|
218
|
-
].join('\n');
|
|
219
|
-
}
|
|
220
|
-
function remoteNotReady() {
|
|
221
|
-
return {
|
|
222
|
-
kind: 'error',
|
|
223
|
-
text: 'Remote Host is disabled or still starting. Check the ds-harness-remote settings and retry.',
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
class RemoteLoginController {
|
|
227
|
-
resolveTarget;
|
|
228
|
-
current = { phase: 'idle', provider: 'zhihu' };
|
|
229
|
-
listeners = new Set();
|
|
230
|
-
attempt = 0;
|
|
231
|
-
constructor(resolveTarget) {
|
|
232
|
-
this.resolveTarget = resolveTarget;
|
|
233
|
-
}
|
|
234
|
-
snapshot = () => this.current;
|
|
235
|
-
subscribe = (listener) => {
|
|
236
|
-
this.listeners.add(listener);
|
|
237
|
-
return () => { this.listeners.delete(listener); };
|
|
238
|
-
};
|
|
239
|
-
start(provider) {
|
|
240
|
-
const attempt = ++this.attempt;
|
|
241
|
-
this.update({ phase: 'loading', provider });
|
|
242
|
-
void this.run(attempt, provider);
|
|
243
|
-
}
|
|
244
|
-
cancel() {
|
|
245
|
-
this.attempt += 1;
|
|
246
|
-
}
|
|
247
|
-
async run(attempt, provider) {
|
|
248
|
-
try {
|
|
249
|
-
const target = this.resolveTarget();
|
|
250
|
-
if (target === undefined)
|
|
251
|
-
throw new Error('REMOTE_NOT_READY');
|
|
252
|
-
const session = await target.runtime.startHostOAuthQrLogin(provider);
|
|
253
|
-
const [qr, compactQr] = await Promise.all([
|
|
254
|
-
renderTerminalQr(session.scanUrl),
|
|
255
|
-
renderCompactTerminalQr(session.scanUrl),
|
|
256
|
-
]);
|
|
257
|
-
if (attempt !== this.attempt)
|
|
258
|
-
return;
|
|
259
|
-
this.update({ phase: 'waiting', provider, qr, compactQr, scanUrl: session.scanUrl });
|
|
260
|
-
await this.poll(attempt, provider, session, target.runtime);
|
|
261
|
-
}
|
|
262
|
-
catch (error) {
|
|
263
|
-
if (attempt !== this.attempt)
|
|
264
|
-
return;
|
|
265
|
-
this.update({ phase: 'error', provider, error: errorCode(error) });
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
async poll(attempt, provider, session, runtime) {
|
|
269
|
-
const deadline = Date.now() + session.expiresIn * 1_000;
|
|
270
|
-
while (attempt === this.attempt && Date.now() < deadline) {
|
|
271
|
-
try {
|
|
272
|
-
const result = await runtime.pollHostOAuthQrLogin(session.qrId);
|
|
273
|
-
if (attempt !== this.attempt)
|
|
274
|
-
return;
|
|
275
|
-
if (result.status === 'complete') {
|
|
276
|
-
this.update({ phase: 'complete', provider, account: result.authorization.account });
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
if (result.status === 'expired')
|
|
280
|
-
break;
|
|
281
|
-
}
|
|
282
|
-
catch (error) {
|
|
283
|
-
if (!(error instanceof ServerApiError) || !error.retryable)
|
|
284
|
-
throw error;
|
|
285
|
-
}
|
|
286
|
-
await wait(Math.min(QR_POLL_INTERVAL_MS, Math.max(1, deadline - Date.now())));
|
|
287
|
-
}
|
|
288
|
-
if (attempt === this.attempt)
|
|
289
|
-
this.update({ phase: 'expired', provider });
|
|
290
|
-
}
|
|
291
|
-
update(snapshot) {
|
|
292
|
-
this.current = snapshot;
|
|
293
|
-
for (const listener of this.listeners)
|
|
294
|
-
listener(snapshot);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
function createRemoteLoginScene(controller) {
|
|
298
|
-
return function RemoteLoginScene({ React, ui, close }) {
|
|
299
|
-
const [snapshot, setSnapshot] = React.useState(controller.snapshot());
|
|
300
|
-
const terminal = ui.useTerminalSize();
|
|
301
|
-
React.useEffect(() => {
|
|
302
|
-
const unsubscribe = controller.subscribe(setSnapshot);
|
|
303
|
-
return () => {
|
|
304
|
-
unsubscribe();
|
|
305
|
-
controller.cancel();
|
|
306
|
-
};
|
|
307
|
-
}, []);
|
|
308
|
-
ui.useInput((input, key) => {
|
|
309
|
-
if (key.escape === true || input.toLowerCase() === 'q') {
|
|
310
|
-
controller.cancel();
|
|
311
|
-
close();
|
|
312
|
-
}
|
|
313
|
-
});
|
|
314
|
-
const provider = oauthProviderName(snapshot.provider);
|
|
315
|
-
const other = ENABLED_QR_PROVIDERS.filter(candidate => candidate !== snapshot.provider)
|
|
316
|
-
.map(candidate => `/remote login ${candidate}`).join(' or ');
|
|
317
|
-
const children = [
|
|
318
|
-
React.createElement(ui.Text, { key: 'title', bold: true, color: 'accent' }, 'Remote Host login'),
|
|
319
|
-
React.createElement(ui.Text, { key: 'provider' }, other === ''
|
|
320
|
-
? `Provider: ${provider}`
|
|
321
|
-
: `Provider: ${provider} · You can also use ${other}`),
|
|
322
|
-
];
|
|
323
|
-
if (snapshot.phase === 'loading') {
|
|
324
|
-
children.push(React.createElement(ui.Text, { key: 'loading', color: 'subtle' }, 'Creating authorization QR code…'));
|
|
325
|
-
}
|
|
326
|
-
else if (snapshot.phase === 'waiting' && snapshot.qr !== undefined && snapshot.scanUrl !== undefined) {
|
|
327
|
-
const fullRows = snapshot.qr.split('\n').length;
|
|
328
|
-
const fullColumns = printableWidth(snapshot.qr.split('\n')[0] ?? '');
|
|
329
|
-
const useFullQr = terminal.rows >= fullRows + 7 && terminal.columns >= fullColumns + 4;
|
|
330
|
-
const qr = useFullQr || snapshot.compactQr === undefined ? snapshot.qr : snapshot.compactQr;
|
|
331
|
-
const qrRows = qr.split('\n').length;
|
|
332
|
-
const qrColumns = printableWidth(qr.split('\n')[0] ?? '');
|
|
333
|
-
if (terminal.rows < qrRows + 7 || terminal.columns < qrColumns + 4) {
|
|
334
|
-
children.push(React.createElement(ui.Text, { key: 'size-warning', color: 'warning' }, `Resize the terminal to at least ${qrColumns + 4} × ${qrRows + 7} if the QR code is clipped.`));
|
|
335
|
-
}
|
|
336
|
-
children.push(React.createElement(ui.Text, { key: 'scan' }, 'Scan this QR code to authorize this Host:'), React.createElement(ui.Text, { key: 'qr', wrap: 'truncate' }, qr), React.createElement(ui.Text, { key: 'url', color: 'link', underline: true }, terminalLink(snapshot.scanUrl)), React.createElement(ui.Text, { key: 'waiting', color: 'subtle' }, 'Waiting for authorization…'));
|
|
337
|
-
}
|
|
338
|
-
else if (snapshot.phase === 'complete') {
|
|
339
|
-
children.push(React.createElement(ui.Text, { key: 'complete', color: 'success' }, snapshot.account === undefined
|
|
340
|
-
? 'Remote Host login complete. The Host is reconnecting now.'
|
|
341
|
-
: `Remote Host login complete for ${snapshot.account}. The Host is reconnecting now.`));
|
|
342
|
-
}
|
|
343
|
-
else if (snapshot.phase === 'expired') {
|
|
344
|
-
children.push(React.createElement(ui.Text, { key: 'expired', color: 'warning' }, 'The QR code expired. Close this screen and run /remote login again.'));
|
|
345
|
-
}
|
|
346
|
-
else if (snapshot.phase === 'error') {
|
|
347
|
-
children.push(React.createElement(ui.Text, { key: 'error', color: 'error' }, `Remote Host login failed (${snapshot.error ?? 'UNKNOWN'}).`));
|
|
348
|
-
}
|
|
349
|
-
children.push(React.createElement(ui.Text, { key: 'close', color: 'subtle' }, 'Press Esc or q to return.'));
|
|
350
|
-
return React.createElement(ui.Box, {
|
|
351
|
-
flexDirection: 'column',
|
|
352
|
-
gap: 1,
|
|
353
|
-
paddingX: Math.max(0, Math.min(2, Math.floor((terminal.columns - 1) / 2))),
|
|
354
|
-
}, ...children);
|
|
355
|
-
};
|
|
356
|
-
}
|
|
357
|
-
function createRemoteStatusScene(resolveTarget) {
|
|
358
|
-
return function RemoteStatusScene({ React, ui, close }) {
|
|
359
|
-
const terminal = ui.useTerminalSize();
|
|
360
|
-
ui.useInput((input, key) => {
|
|
361
|
-
if (key.escape === true || input.toLowerCase() === 'q')
|
|
362
|
-
close();
|
|
363
|
-
});
|
|
364
|
-
const children = [
|
|
365
|
-
React.createElement(ui.Text, { key: 'title', bold: true, color: 'accent' }, 'Remote Host status'),
|
|
366
|
-
...remoteStatusLines(resolveTarget()).map((line, index) => React.createElement(ui.Text, { key: `status-${index}`, color: line === '' ? 'subtle' : undefined }, line === '' ? ' ' : line)),
|
|
367
|
-
React.createElement(ui.Text, { key: 'close', color: 'subtle' }, 'Press Esc or q to return.'),
|
|
368
|
-
];
|
|
369
|
-
return React.createElement(ui.Box, {
|
|
370
|
-
flexDirection: 'column',
|
|
371
|
-
gap: 1,
|
|
372
|
-
paddingX: Math.max(0, Math.min(2, Math.floor((terminal.columns - 1) / 2))),
|
|
373
|
-
}, ...children);
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
function terminalLink(url) {
|
|
377
|
-
return `\u001B]8;;${url}\u0007${url}\u001B]8;;\u0007`;
|
|
378
|
-
}
|
|
379
|
-
function printableWidth(value) {
|
|
380
|
-
return value.replace(/\u001B\[[0-9;]*m/gu, '').length;
|
|
381
|
-
}
|
|
382
|
-
function errorCode(error) {
|
|
383
|
-
if (error instanceof ServerApiError)
|
|
384
|
-
return error.code;
|
|
385
|
-
if (error instanceof Error && 'code' in error && typeof error.code === 'string')
|
|
386
|
-
return error.code;
|
|
387
|
-
return 'CONNECTION_FAILED';
|
|
388
|
-
}
|
|
389
|
-
function wait(milliseconds) {
|
|
390
|
-
return new Promise(resolve => setTimeout(resolve, milliseconds));
|
|
391
|
-
}
|
|
392
|
-
//# sourceMappingURL=tui-command.js.map
|
package/dist/tui-command.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tui-command.js","sourceRoot":"","sources":["../src/tui-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AACpE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAA2C,MAAM,iBAAiB,CAAA;AAGvJ,MAAM,mBAAmB,GAAG,KAAK,CAAA;AACjC,MAAM,qBAAqB,GAAG,cAAc,CAAA;AAC5C,MAAM,sBAAsB,GAAG,eAAe,CAAA;AAmF9C,oFAAoF;AACpF,MAAM,UAAU,uBAAuB,CACrC,GAAY,EACZ,aAAgD;IAEhD,MAAM,UAAU,GAAG,GAAiB,CAAA;IACpC,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAmC,CAAA;IACpF,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAM;IAClC,2EAA2E;IAC3E,yEAAyE;IACzE,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAkC,CAAA;IAC1F,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAuC,CAAA;IAC5F,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAiC,CAAA;IACjF,MAAM,KAAK,GAAG,IAAI,qBAAqB,CAAC,aAAa,CAAC,CAAA;IACtD,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAA;IAChD,MAAM,WAAW,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAA;IAE1D,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE;QACrB,MAAM,UAAU,GAA0B;YACxC,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,gDAAgD;YAC7D,KAAK,EAAE,EAAE,IAAI,EAAE,0CAA0C,EAAE;YAC3D,WAAW,EAAE,KAAK;YAClB,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;gBAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;gBAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAA;gBACnC,IAAI,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBAC7C,IAAI,MAAM,EAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK,IAAI;wBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;oBAC7E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,wBAAwB,CAAC,aAAa,EAAE,CAAC,EAAE,CAAA;gBAC7E,CAAC;gBACD,IAAI,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAA;oBAC/D,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACnC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;oBAC5F,CAAC;oBACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;wBACzB,OAAO;4BACL,IAAI,EAAE,OAAO;4BACb,IAAI,EAAE,wEAAwE,QAAQ,qCAAqC;yBAC5H,CAAA;oBACH,CAAC;oBACD,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;oBACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;wBACxC,KAAK,CAAC,MAAM,EAAE,CAAA;wBACd,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,yCAAyC,EAAE,CAAA;oBAC3E,CAAC;oBACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;gBAC5B,CAAC;gBACD,IAAI,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9C,MAAM,MAAM,GAAG,aAAa,EAAE,CAAA;oBAC9B,IAAI,MAAM,KAAK,SAAS;wBAAE,OAAO,cAAc,EAAE,CAAA;oBACjD,IAAI,CAAC;wBACH,MAAM,MAAM,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAA;wBAC7C,OAAO;4BACL,IAAI,EAAE,SAAS;4BACf,IAAI,EAAE,mEAAmE;yBAC1E,CAAA;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO;4BACL,IAAI,EAAE,OAAO;4BACb,IAAI,EAAE,6EAA6E,SAAS,CAAC,KAAK,CAAC,IAAI;yBACxG,CAAA;oBACH,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACzB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,0CAA0C,EAAE,CAAA;gBAC5E,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,CAAA;YACtD,CAAC;SACF,CAAA;QACD,MAAM,cAAc,GAAG,qBAAqB,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;QAC1F,MAAM,WAAW,GAAG,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;YACzF,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE;gBACZ,EAAE,EAAE,gDAAgD;gBACpD,EAAE,EAAE,wBAAwB;aAC7B;YACD,QAAQ,EAAE,qBAAqB;SAClC,CAAC,CAAC,CAAA;QACH,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;YACpF,EAAE,EAAE,qBAAqB;YACzB,KAAK,EAAE,mBAAmB;YAC1B,SAAS,EAAE,UAAU;SACxB,EAAE,UAAU,CAAC,CAAC,CAAA;QACf,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC3F,EAAE,EAAE,sBAAsB;YAC1B,KAAK,EAAE,oBAAoB;YAC3B,SAAS,EAAE,WAAW;SACzB,EAAE,UAAU,CAAC,CAAC,CAAA;QAEf,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,MAAM,EAAE,CAAA;YACd,cAAc,EAAE,CAAA;YAChB,WAAW,EAAE,CAAA;YACb,YAAY,EAAE,CAAA;YACd,kBAAkB,EAAE,CAAA;QACtB,CAAC,CAAA;IACH,CAAC,EAAE,4CAA4C,CAAC,CAAA;AAClD,CAAC;AAED,SAAS,qBAAqB,CAC5B,GAAY,EACZ,QAA4B,EAC5B,UAAyC,EACzC,UAAiC;IAEjC,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAClE,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0EAA0E;QAC1E,4EAA4E;QAC5E,wEAAwE;QACxE,4CAA4C;QAC5C,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,wBAAwB,CAAC;YAAE,MAAM,KAAK,CAAA;QAC/D,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,wGAAwG,CAAC,CAAA;QAC1H,OAAO,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IACtC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,IAAY;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK;WAC/D,KAA4B,CAAC,IAAI,KAAK,IAAI,CAAA;AAClD,CAAC;AAED,SAAS,gBAAgB,CACvB,GAAY,EACZ,OAAe,EACf,QAAwC;IAExC,IAAI,CAAC;QACH,OAAO,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,OAAO,iBAAiB,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACvF,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,aAAgC;IAC7D,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO;YACL;gBACE,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sDAAsD;gBACnE,YAAY,EAAE,EAAE,EAAE,EAAE,wBAAwB,EAAE;aAC/C;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,oDAAoD;gBACjE,YAAY,EAAE,EAAE,EAAE,EAAE,2BAA2B,EAAE;aAClD;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gDAAgD;gBAC7D,YAAY,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE;aAC1C;SACF,CAAA;IACH,CAAC;IACD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAChG,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,gBAAgB,iBAAiB,CAAC,QAAQ,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5F,YAAY,EAAE,EAAE,EAAE,EAAE,KAAK,iBAAiB,CAAC,QAAQ,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE;SACvF,CAAC,CAAC,CAAA;IACL,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAmC;IAC5D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,4FAA4F,CAAC,CAAA;IACvG,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IAClC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAA;IACnC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IACnC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IACtD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM;QAC9B,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,MAAM,CAAC,QAAQ;YACf,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,MAAM,CAAC,YAAY;gBACnB,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,MAAM,CAAC,eAAe;oBACtB,CAAC,CAAC,wBAAwB;oBAC1B,CAAC,CAAC,SAAS,CAAA;IACnB,OAAO;QACL,WAAW,MAAM,CAAC,SAAS,IAAI,gBAAgB,EAAE;QACjD,uBAAuB;QACvB,WAAW,MAAM,CAAC,QAAQ,IAAI,iBAAiB,EAAE;QACjD,kBAAkB,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE;QACnI,sBAAsB,UAAU,EAAE;QAClC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5E,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,qBAAqB;YACxC,CAAC,CAAC,CAAC,uGAAuG,CAAC;YAC3G,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,yBAAyB;gBAC1C,CAAC,CAAC,CAAC,0IAA0I,CAAC;gBAC9I,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,oDAAoD,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,uBAAuB,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACvD,CAAC,CAAC,sBAAsB;YACxB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC;gBACrC,CAAC,CAAC,sCAAsC;gBACxC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC;oBACrC,CAAC,CAAC,2BAA2B;oBAC/B,CAAC,CAAC,aAAa,EAAE;QACrB,mBAAmB,WAAW,CAAC,iBAAiB,EAAE;QAClD,iBAAiB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE;QAC3D,EAAE;QACF,0EAA0E;KAC3E,CAAA;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAmC;IACnE,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC9D,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;QACL,QAAQ;QACR,WAAW;QACX,kBAAkB;QAClB,gCAAgC;QAChC,kBAAkB;KACnB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,SAAS,cAAc;IACrB,OAAO;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,4FAA4F;KACnG,CAAA;AACH,CAAC;AAED,MAAM,qBAAqB;IAKI;IAJrB,OAAO,GAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;IACpD,SAAS,GAAG,IAAI,GAAG,EAAqC,CAAA;IACjE,OAAO,GAAG,CAAC,CAAA;IAEnB,YAA6B,aAAgD;QAAhD,kBAAa,GAAb,aAAa,CAAmC;IAAG,CAAC;IAEjF,QAAQ,GAAG,GAAkB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAA;IAE5C,SAAS,GAAG,CAAC,QAA2C,EAAgB,EAAE;QACxE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5B,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,CAAA;IAClD,CAAC,CAAA;IAED,KAAK,CAAC,QAAuB;QAC3B,MAAM,OAAO,GAAG,EAAE,IAAI,CAAC,OAAO,CAAA;QAC9B,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAClC,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,OAAO,IAAI,CAAC,CAAA;IACnB,CAAC;IAEO,KAAK,CAAC,GAAG,CAAC,OAAe,EAAE,QAAuB;QACxD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;YACnC,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;YAC7D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YACpE,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACxC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;gBACjC,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC;aACzC,CAAC,CAAA;YACF,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO;gBAAE,OAAM;YACpC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;YACpF,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO;gBAAE,OAAM;YACpC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACpE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,IAAI,CAChB,OAAe,EACf,QAAuB,EACvB,OAAuB,EACvB,OAA0B;QAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,GAAG,KAAK,CAAA;QACvD,OAAO,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YACzD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBAC/D,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO;oBAAE,OAAM;gBACpC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAA;oBACnF,OAAM;gBACR,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;oBAAE,MAAK;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,KAAK,YAAY,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS;oBAAE,MAAM,KAAK,CAAA;YACzE,CAAC;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QAC/E,CAAC;QACD,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAA;IAC3E,CAAC;IAEO,MAAM,CAAC,QAAuB;QACpC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAA;QACvB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS;YAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC3D,CAAC;CACF;AAED,SAAS,sBAAsB,CAAC,UAAiC;IAC/D,OAAO,SAAS,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAkB;QACnE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAA;QACrE,MAAM,QAAQ,GAAG,EAAE,CAAC,eAAe,EAAE,CAAA;QACrC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;YACnB,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;YACrD,OAAO,GAAG,EAAE;gBACV,WAAW,EAAE,CAAA;gBACb,UAAU,CAAC,MAAM,EAAE,CAAA;YACrB,CAAC,CAAA;QACH,CAAC,EAAE,EAAE,CAAC,CAAA;QACN,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACzB,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACvD,UAAU,CAAC,MAAM,EAAE,CAAA;gBACnB,KAAK,EAAE,CAAA;YACT,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,KAAK,QAAQ,CAAC,QAAQ,CAAC;aACpF,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9D,MAAM,QAAQ,GAAc;YAC1B,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,mBAAmB,CAAC;YAChG,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,KAAK,KAAK,EAAE;gBAC5D,CAAC,CAAC,aAAa,QAAQ,EAAE;gBACzB,CAAC,CAAC,aAAa,QAAQ,uBAAuB,KAAK,EAAE,CAAC;SACzD,CAAA;QAED,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,iCAAiC,CAAC,CAAC,CAAA;QACrH,CAAC;aAAM,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACvG,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;YAC/C,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YACpE,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,IAAI,WAAW,GAAG,CAAC,CAAA;YACtF,MAAM,EAAE,GAAG,SAAS,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAA;YAC3F,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;YACpC,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YACzD,IAAI,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;gBACnE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAC/B,EAAE,CAAC,IAAI,EACP,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,EACzC,mCAAmC,SAAS,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,6BAA6B,CAC9F,CAAC,CAAA;YACJ,CAAC;YACD,QAAQ,CAAC,IAAI,CACX,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,2CAA2C,CAAC,EAC1F,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,EACjE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAC5G,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,4BAA4B,CAAC,CAChG,CAAA;QACH,CAAC;aAAM,IAAI,QAAQ,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAC/B,EAAE,CAAC,IAAI,EACP,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EACrC,QAAQ,CAAC,OAAO,KAAK,SAAS;gBAC5B,CAAC,CAAC,2DAA2D;gBAC7D,CAAC,CAAC,kCAAkC,QAAQ,CAAC,OAAO,iCAAiC,CACxF,CAAC,CAAA;QACJ,CAAC;aAAM,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,qEAAqE,CAAC,CAAC,CAAA;QAC1J,CAAC;aAAM,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,6BAA6B,QAAQ,CAAC,KAAK,IAAI,SAAS,IAAI,CAAC,CAAC,CAAA;QAC7I,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,2BAA2B,CAAC,CAAC,CAAA;QAC3G,OAAO,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE;YACjC,aAAa,EAAE,QAAQ;YACvB,GAAG,EAAE,CAAC;YACN,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC3E,EAAE,GAAG,QAAQ,CAAC,CAAA;IACjB,CAAC,CAAA;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,aAAgD;IAEhD,OAAO,SAAS,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAkB;QACpE,MAAM,QAAQ,GAAG,EAAE,CAAC,eAAe,EAAE,CAAA;QACrC,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACzB,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAA;QACjE,CAAC,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAc;YAC1B,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,oBAAoB,CAAC;YACjG,GAAG,iBAAiB,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAC5E,EAAE,CAAC,IAAI,EACP,EAAE,GAAG,EAAE,UAAU,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,EACrE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CACzB,CAAC;YACF,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,2BAA2B,CAAC;SAC7F,CAAA;QACD,OAAO,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE;YACjC,aAAa,EAAE,QAAQ;YACvB,GAAG,EAAE,CAAC;YACN,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC3E,EAAE,GAAG,QAAQ,CAAC,CAAA;IACjB,CAAC,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,aAAa,GAAG,SAAS,GAAG,kBAAkB,CAAA;AACvD,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAA;AACvD,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,YAAY,cAAc;QAAE,OAAO,KAAK,CAAC,IAAI,CAAA;IACtD,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAA;IAClG,OAAO,mBAAmB,CAAA;AAC5B,CAAC;AAED,SAAS,IAAI,CAAC,YAAoB;IAChC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAA;AAClE,CAAC"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
export interface TypertGatewayRequest {
|
|
2
|
-
namespace: string;
|
|
3
|
-
method: string;
|
|
4
|
-
/** Typert Remote payloads require one plain object under `args`. */
|
|
5
|
-
args: Readonly<Record<string, unknown>>;
|
|
6
|
-
signal?: AbortSignal;
|
|
7
|
-
}
|
|
8
|
-
export type TypertRpcResult = {
|
|
9
|
-
ok: true;
|
|
10
|
-
value?: unknown;
|
|
11
|
-
} | {
|
|
12
|
-
ok: false;
|
|
13
|
-
error: {
|
|
14
|
-
code: string;
|
|
15
|
-
message: string;
|
|
16
|
-
details: Record<string, unknown>;
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
/** Legacy carrier open (≤0.1.6): the third argument is the cancellation signal. */
|
|
20
|
-
export type LegacyWireStreamOpen = (endpoint: string, payload: unknown, signal: AbortSignal) => Promise<AsyncIterable<unknown>>;
|
|
21
|
-
/**
|
|
22
|
-
* dsh 0.1.7-rc.1 carrier open: the third argument is the Client uplink and the
|
|
23
|
-
* cancellation signal moves to the fifth position. Passing an `AbortSignal` as
|
|
24
|
-
* the third argument makes the Host throw `signals[0] is not of type AbortSignal`.
|
|
25
|
-
*/
|
|
26
|
-
export type Rc1WireStreamOpen = (endpoint: string, payload: unknown, uplink: AsyncIterable<unknown>, peer: unknown, signal: AbortSignal) => Promise<AsyncIterable<unknown>>;
|
|
27
|
-
/** Carrier open signature of the running Harness release. */
|
|
28
|
-
export type TypertWireStreamOpen = LegacyWireStreamOpen | Rc1WireStreamOpen;
|
|
29
|
-
export interface TypertGatewayWireStreamLike {
|
|
30
|
-
open: TypertWireStreamOpen;
|
|
31
|
-
failure(error: unknown): {
|
|
32
|
-
code: string;
|
|
33
|
-
message: string;
|
|
34
|
-
details: Record<string, unknown>;
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
/** Public Gateway face shared by Harness rc.2 and alpha releases. */
|
|
38
|
-
export interface TypertGatewayLike {
|
|
39
|
-
invoke(request: TypertGatewayRequest): Promise<unknown>;
|
|
40
|
-
stream?(request: TypertGatewayRequest): Promise<AsyncIterable<unknown>>;
|
|
41
|
-
wireStream?: TypertGatewayWireStreamLike;
|
|
42
|
-
}
|
|
43
|
-
/** Carrier-level face captured from the alpha Gateway before target switching. */
|
|
44
|
-
export interface LocalTypertGateway extends TypertGatewayLike {
|
|
45
|
-
dispatch(endpoint: string, payload: unknown, signal: AbortSignal): Promise<TypertRpcResult>;
|
|
46
|
-
open(endpoint: string, payload: unknown, signal: AbortSignal): Promise<AsyncIterable<unknown>>;
|
|
47
|
-
failure(error: unknown): {
|
|
48
|
-
code: string;
|
|
49
|
-
message: string;
|
|
50
|
-
details: Record<string, unknown>;
|
|
51
|
-
};
|
|
52
|
-
supportsCarrier: boolean;
|
|
53
|
-
}
|
|
54
|
-
export interface RemoteTypertGatewayTarget {
|
|
55
|
-
invoke(request: TypertGatewayRequest): Promise<unknown>;
|
|
56
|
-
dispatch(endpoint: string, payload: unknown, signal: AbortSignal): Promise<TypertRpcResult>;
|
|
57
|
-
open(endpoint: string, payload: unknown, signal: AbortSignal): Promise<AsyncIterable<unknown>>;
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=typert-gateway-contract.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typert-gateway-contract.d.ts","sourceRoot":"","sources":["../src/typert-gateway-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typert-gateway-contract.js","sourceRoot":"","sources":["../src/typert-gateway-contract.ts"],"names":[],"mappings":""}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import type { LocalTypertGateway, RemoteTypertGatewayTarget, TypertGatewayLike, TypertGatewayRequest, TypertRpcResult } from './typert-gateway-contract.js';
|
|
2
|
-
type RemoteInvoke = (request: TypertGatewayRequest) => Promise<unknown>;
|
|
3
|
-
type CarrierDispatch = (endpoint: string, payload: unknown, signal: AbortSignal) => Promise<TypertRpcResult>;
|
|
4
|
-
type CarrierOpen = (endpoint: string, payload: unknown, signal: AbortSignal) => Promise<AsyncIterable<unknown>>;
|
|
5
|
-
export interface RemoteCommandSupport {
|
|
6
|
-
execute: boolean;
|
|
7
|
-
list: boolean;
|
|
8
|
-
}
|
|
9
|
-
/** Keeps the official Gateway object stable while its selected Host changes. */
|
|
10
|
-
export declare class TypertGatewaySwitch {
|
|
11
|
-
private readonly runtime;
|
|
12
|
-
private readonly originalInvoke;
|
|
13
|
-
private readonly localInvoke;
|
|
14
|
-
private readonly originalStream?;
|
|
15
|
-
private readonly localStream?;
|
|
16
|
-
private readonly originalDispatch?;
|
|
17
|
-
private readonly localDispatch?;
|
|
18
|
-
private readonly originalOpen?;
|
|
19
|
-
private readonly localOpen?;
|
|
20
|
-
private remoteInvoke?;
|
|
21
|
-
private remoteTarget?;
|
|
22
|
-
private remoteSupport;
|
|
23
|
-
private target?;
|
|
24
|
-
private installed;
|
|
25
|
-
/** Defaults to reachable so a caller that never wires this keeps the old behaviour. */
|
|
26
|
-
private remoteAvailability;
|
|
27
|
-
constructor(gateway: TypertGatewayLike);
|
|
28
|
-
/** Original local dispatcher, used by the Host bridge without switch recursion. */
|
|
29
|
-
local(): LocalTypertGateway;
|
|
30
|
-
supportsCarrier(): boolean;
|
|
31
|
-
status(): {
|
|
32
|
-
mode: 'local' | 'remote';
|
|
33
|
-
target?: {
|
|
34
|
-
deviceId: string;
|
|
35
|
-
name: string;
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
install(): void;
|
|
39
|
-
selectRemote(remote: RemoteInvoke | RemoteTypertGatewayTarget, support?: RemoteCommandSupport, target?: {
|
|
40
|
-
deviceId: string;
|
|
41
|
-
name: string;
|
|
42
|
-
}): void;
|
|
43
|
-
selectLocal(): void;
|
|
44
|
-
/**
|
|
45
|
-
* The local shell's carriers, for a remote target that owns only part of the
|
|
46
|
-
* endpoint space. The Codex virtual Harness owns the CodeX domain; the shell's own
|
|
47
|
-
* settings bootstrap, plugin registry and account reads must stay here, or the
|
|
48
|
-
* window describes the remote Host instead of this installation.
|
|
49
|
-
* @returns the captured local carriers, absent when the running release has none.
|
|
50
|
-
*/
|
|
51
|
-
localCarrier(): {
|
|
52
|
-
dispatch?: CarrierDispatch;
|
|
53
|
-
open?: CarrierOpen;
|
|
54
|
-
};
|
|
55
|
-
restore(): void;
|
|
56
|
-
/**
|
|
57
|
-
* Whether the peer a remote target routes to is reachable right now.
|
|
58
|
-
*
|
|
59
|
-
* A remote-mode boot still needs its own local services — localizations, theme,
|
|
60
|
-
* the plugin registry — before any remote work can happen. Routing those to a
|
|
61
|
-
* peer that is not connected leaves them unanswered, so the whole shell fails to
|
|
62
|
-
* activate: a dropped connection becomes "the application is unavailable" and
|
|
63
|
-
* stays that way until the user restarts into local mode. Serve local while the
|
|
64
|
-
* peer is away; the live session takes over again as soon as it is reachable.
|
|
65
|
-
*/
|
|
66
|
-
setRemoteAvailability(check: () => boolean): void;
|
|
67
|
-
private routesToRemote;
|
|
68
|
-
private selectInvoke;
|
|
69
|
-
/**
|
|
70
|
-
* Run a remote call, and answer it locally when the peer turns out not to serve
|
|
71
|
-
* that endpoint. A remote-mode boot still issues RPCs only the local shell can
|
|
72
|
-
* answer: the Desktop asks the local Web server for its locale bootstrap over the
|
|
73
|
-
* remote mux before any remote work happens. Forwarding those swept them to a host
|
|
74
|
-
* that does not implement them, the locale plugin failed, and every entry
|
|
75
|
-
* depending on it stayed pending. A genuine business error still propagates.
|
|
76
|
-
* @param endpoint - endpoint being routed, for the diagnostic warning.
|
|
77
|
-
* @param remote - the remote carrier call.
|
|
78
|
-
* @param local - the local call used when the peer could not answer.
|
|
79
|
-
* @returns the remote or local result.
|
|
80
|
-
*/
|
|
81
|
-
private withLocalFallback;
|
|
82
|
-
private failure;
|
|
83
|
-
}
|
|
84
|
-
export {};
|
|
85
|
-
//# sourceMappingURL=typert-gateway-switch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typert-gateway-switch.d.ts","sourceRoot":"","sources":["../src/typert-gateway-switch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAElB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EAChB,MAAM,8BAA8B,CAAA;AAGrC,KAAK,YAAY,GAAG,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AACvE,KAAK,eAAe,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;AAC5G,KAAK,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;AAgD/G,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;CACd;AAID,gFAAgF;AAChF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA0C;IAC1E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA0C;IACvE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAiB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAiC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAa;IACxC,OAAO,CAAC,YAAY,CAAC,CAAc;IACnC,OAAO,CAAC,YAAY,CAAC,CAA2B;IAChD,OAAO,CAAC,aAAa,CAAwD;IAC7E,OAAO,CAAC,MAAM,CAAC,CAAoC;IACnD,OAAO,CAAC,SAAS,CAAQ;IACzB,uFAAuF;IACvF,OAAO,CAAC,kBAAkB,CAA4B;gBAE1C,OAAO,EAAE,iBAAiB;IAYtC,mFAAmF;IACnF,KAAK,IAAI,kBAAkB;IAuB3B,eAAe,IAAI,OAAO;IAI1B,MAAM,IAAI;QAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE;IAMnF,OAAO,IAAI,IAAI;IAiFf,YAAY,CACV,MAAM,EAAE,YAAY,GAAG,yBAAyB,EAChD,OAAO,GAAE,oBAA0C,EACnD,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAC1C,IAAI;IAQP,WAAW,IAAI,IAAI;IAOnB;;;;;;OAMG;IACH,YAAY,IAAI;QAAE,QAAQ,CAAC,EAAE,eAAe,CAAC;QAAC,IAAI,CAAC,EAAE,WAAW,CAAA;KAAE;IAOlE,OAAO,IAAI,IAAI;IAUf;;;;;;;;;OASG;IACH,qBAAqB,CAAC,KAAK,EAAE,MAAM,OAAO,GAAG,IAAI;IAEjD,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,YAAY;IA0BpB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,OAAO;CAQhB"}
|