dsh-cliworker-now 0.7.6 → 0.7.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.en.md +53 -11
- package/README.md +56 -11
- package/lib/account-models.mjs +49 -18
- package/lib/client.js +1221 -151
- package/lib/client.js.map +1 -1
- package/lib/grok-catalog.mjs +2 -2
- package/lib/hermes-native-entry.py +48 -13
- package/lib/hermes-nous-refresh.py +331 -0
- package/lib/index.js +9469 -6030
- package/lib/index.js.map +1 -1
- package/lib/native-launch.mjs +62 -7
- package/lib/native-spawn.mjs +32 -0
- package/lib/pi-installation.mjs +27 -3
- package/lib/pi-native-catalog.mjs +17 -7
- package/lib/pi-omp-bridge.mjs +2 -2
- package/lib/pi-omp-refresh.mjs +3 -3
- package/lib/private-launch.mjs +6 -2
- package/lib/terminal-bridge.mjs +2 -2
- package/lib/typert.host.js +265 -25
- package/lib/typert.remote-client.d.ts +8 -0
- package/lib/typert.remote-client.d.ts.map +1 -1
- package/lib/typert.remote-client.js +241 -25
- package/lib/types/client/account-query-queue.d.ts +16 -0
- package/lib/types/client/account-query-queue.js +61 -0
- package/lib/types/client/account-query-queue.js.map +1 -0
- package/lib/types/client/account-terminal.d.ts +6 -2
- package/lib/types/client/account-terminal.js +260 -31
- package/lib/types/client/account-terminal.js.map +1 -1
- package/lib/types/client/cli-executable-settings.d.ts +13 -0
- package/lib/types/client/cli-executable-settings.js +128 -0
- package/lib/types/client/cli-executable-settings.js.map +1 -0
- package/lib/types/client/management-styles.d.ts +1 -1
- package/lib/types/client/management-styles.js +4 -0
- package/lib/types/client/management-styles.js.map +1 -1
- package/lib/types/client/settings-dialog.js +196 -80
- package/lib/types/client/settings-dialog.js.map +1 -1
- package/lib/types/client/styles.d.ts +1 -1
- package/lib/types/client/styles.js +18 -16
- package/lib/types/client/styles.js.map +1 -1
- package/lib/types/client/zcode-login-link-provider.d.ts +9 -0
- package/lib/types/client/zcode-login-link-provider.js +105 -0
- package/lib/types/client/zcode-login-link-provider.js.map +1 -0
- package/lib/types/client/zcode-login-link.d.ts +16 -0
- package/lib/types/client/zcode-login-link.js +194 -0
- package/lib/types/client/zcode-login-link.js.map +1 -0
- package/lib/types/host/account-models.d.mts +10 -2
- package/lib/types/host/account-models.mjs +49 -18
- package/lib/types/host/accounts.d.ts +3 -2
- package/lib/types/host/accounts.js +168 -29
- package/lib/types/host/accounts.js.map +1 -1
- package/lib/types/host/adapters.d.ts +3 -1
- package/lib/types/host/adapters.js +138 -11
- package/lib/types/host/adapters.js.map +1 -1
- package/lib/types/host/agy-background-environment.d.ts +2 -0
- package/lib/types/host/agy-background-environment.js +7 -0
- package/lib/types/host/agy-background-environment.js.map +1 -0
- package/lib/types/host/agy-models.d.ts +2 -1
- package/lib/types/host/agy-models.js +6 -6
- package/lib/types/host/agy-models.js.map +1 -1
- package/lib/types/host/agy-windows-account.d.ts +14 -0
- package/lib/types/host/agy-windows-account.js +104 -0
- package/lib/types/host/agy-windows-account.js.map +1 -0
- package/lib/types/host/authorized-catalog.js +13 -4
- package/lib/types/host/authorized-catalog.js.map +1 -1
- package/lib/types/host/claude-native-oauth.d.ts +17 -0
- package/lib/types/host/claude-native-oauth.js +274 -0
- package/lib/types/host/claude-native-oauth.js.map +1 -0
- package/lib/types/host/claude-own-route.d.ts +45 -0
- package/lib/types/host/claude-own-route.js +375 -0
- package/lib/types/host/claude-own-route.js.map +1 -0
- package/lib/types/host/cli-account-binding.d.ts +2 -1
- package/lib/types/host/cli-account-binding.js +64 -21
- package/lib/types/host/cli-account-binding.js.map +1 -1
- package/lib/types/host/cli-executable-paths.d.ts +30 -0
- package/lib/types/host/cli-executable-paths.js +272 -0
- package/lib/types/host/cli-executable-paths.js.map +1 -0
- package/lib/types/host/codex-models.d.ts +3 -1
- package/lib/types/host/codex-models.js +41 -4
- package/lib/types/host/codex-models.js.map +1 -1
- package/lib/types/host/extended-adapters.d.ts +3 -2
- package/lib/types/host/extended-adapters.js +9 -7
- package/lib/types/host/extended-adapters.js.map +1 -1
- package/lib/types/host/first-party-models.d.ts +5 -0
- package/lib/types/host/first-party-models.js +173 -50
- package/lib/types/host/first-party-models.js.map +1 -1
- package/lib/types/host/hermes-accounts.js +68 -9
- package/lib/types/host/hermes-accounts.js.map +1 -1
- package/lib/types/host/hermes-adapter.d.ts +3 -0
- package/lib/types/host/hermes-adapter.js +13 -4
- package/lib/types/host/hermes-adapter.js.map +1 -1
- package/lib/types/host/hermes-installation.js +54 -35
- package/lib/types/host/hermes-installation.js.map +1 -1
- package/lib/types/host/hermes-models.js +21 -2
- package/lib/types/host/hermes-models.js.map +1 -1
- package/lib/types/host/hermes-native-entry.py +48 -13
- package/lib/types/host/hermes-nous-refresh.py +331 -0
- package/lib/types/host/hermes-nous.d.ts +5 -1
- package/lib/types/host/hermes-nous.js +5 -5
- package/lib/types/host/hermes-nous.js.map +1 -1
- package/lib/types/host/hermes-renewal.d.ts +27 -0
- package/lib/types/host/hermes-renewal.js +292 -0
- package/lib/types/host/hermes-renewal.js.map +1 -0
- package/lib/types/host/hermes-windows-installation.d.ts +5 -0
- package/lib/types/host/hermes-windows-installation.js +91 -0
- package/lib/types/host/hermes-windows-installation.js.map +1 -0
- package/lib/types/host/index.d.ts +12 -0
- package/lib/types/host/index.js +138 -8
- package/lib/types/host/index.js.map +1 -1
- package/lib/types/host/kimi-accounts.d.ts +2 -0
- package/lib/types/host/kimi-accounts.js +4 -2
- package/lib/types/host/kimi-accounts.js.map +1 -1
- package/lib/types/host/kimi-oauth-models.d.ts +14 -0
- package/lib/types/host/kimi-oauth-models.js +246 -0
- package/lib/types/host/kimi-oauth-models.js.map +1 -0
- package/lib/types/host/mimo-metadata-cache.d.ts +22 -0
- package/lib/types/host/mimo-metadata-cache.js +121 -0
- package/lib/types/host/mimo-metadata-cache.js.map +1 -0
- package/lib/types/host/native-capability-cache.d.ts +11 -0
- package/lib/types/host/native-capability-cache.js +94 -0
- package/lib/types/host/native-capability-cache.js.map +1 -0
- package/lib/types/host/native-launch.mjs +62 -7
- package/lib/types/host/native-process.d.ts +3 -1
- package/lib/types/host/native-process.js +30 -5
- package/lib/types/host/native-process.js.map +1 -1
- package/lib/types/host/native-spawn.mjs +32 -0
- package/lib/types/host/opencode-native.js +13 -0
- package/lib/types/host/opencode-native.js.map +1 -1
- package/lib/types/host/pi-installation.d.mts +1 -1
- package/lib/types/host/pi-installation.mjs +27 -3
- package/lib/types/host/pi-omp-adapter.js +17 -3
- package/lib/types/host/pi-omp-adapter.js.map +1 -1
- package/lib/types/host/pi-omp-native.js +5 -3
- package/lib/types/host/pi-omp-native.js.map +1 -1
- package/lib/types/host/pi-omp-refresh.mjs +3 -3
- package/lib/types/host/private-launch.mjs +23 -0
- package/lib/types/host/process.d.ts +3 -0
- package/lib/types/host/process.js +3 -1
- package/lib/types/host/process.js.map +1 -1
- package/lib/types/host/routing.js +25 -2
- package/lib/types/host/routing.js.map +1 -1
- package/lib/types/host/runtime.js +21 -5
- package/lib/types/host/runtime.js.map +1 -1
- package/lib/types/host/settings-catalog-cache.d.ts +28 -0
- package/lib/types/host/settings-catalog-cache.js +189 -0
- package/lib/types/host/settings-catalog-cache.js.map +1 -0
- package/lib/types/host/windows-account-bootstrap.ps1 +44 -0
- package/lib/types/host/windows-account-launch.mjs +47 -0
- package/lib/types/host/windows-account-owner.ps1 +137 -0
- package/lib/types/host/windows-account-stdio.mjs +19 -0
- package/lib/types/host/windows-account-terminal.d.ts +17 -0
- package/lib/types/host/windows-account-terminal.js +208 -0
- package/lib/types/host/windows-account-terminal.js.map +1 -0
- package/lib/types/host/windows-agy-account.ps1 +81 -0
- package/lib/types/host/windows-cli-installation.d.ts +35 -0
- package/lib/types/host/windows-cli-installation.js +164 -0
- package/lib/types/host/windows-cli-installation.js.map +1 -0
- package/lib/types/host/windows-codex-launch.d.ts +9 -0
- package/lib/types/host/windows-codex-launch.js +216 -0
- package/lib/types/host/windows-codex-launch.js.map +1 -0
- package/lib/types/host/windows-desktop-cli-installation.d.ts +20 -0
- package/lib/types/host/windows-desktop-cli-installation.js +420 -0
- package/lib/types/host/windows-desktop-cli-installation.js.map +1 -0
- package/lib/types/host/windows-hidden-launch.mjs +51 -0
- package/lib/types/host/windows-hidden-process.d.ts +12 -0
- package/lib/types/host/windows-hidden-process.js +116 -0
- package/lib/types/host/windows-hidden-process.js.map +1 -0
- package/lib/types/host/zcode-adapter.js +5 -1
- package/lib/types/host/zcode-adapter.js.map +1 -1
- package/lib/types/host/zcode-grok-accounts.d.ts +3 -1
- package/lib/types/host/zcode-grok-accounts.js +60 -11
- package/lib/types/host/zcode-grok-accounts.js.map +1 -1
- package/lib/types/shared/accounts.d.ts +4 -0
- package/lib/types/shared/cli-settings.d.ts +8 -0
- package/lib/windows-account-bootstrap.ps1 +44 -0
- package/lib/windows-account-launch.mjs +47 -0
- package/lib/windows-account-owner.ps1 +137 -0
- package/lib/windows-account-stdio.mjs +19 -0
- package/lib/windows-agy-account.ps1 +81 -0
- package/lib/windows-hidden-launch.mjs +51 -0
- package/lib/zcode-resume.mjs +2 -2
- package/package.json +2 -2
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { lstat } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { validateHermesHomeDirectory } from "./hermes-adapter.js";
|
|
6
|
+
import { hermesAccountEnvironment } from "./hermes-account-context.js";
|
|
7
|
+
import { assertHermesOwnAccounts, hermesPoolEntryUnavailable, readHermesAccountMaterial, } from "./hermes-models.js";
|
|
8
|
+
import { hermesNativeCommand } from "./hermes-installation.js";
|
|
9
|
+
import { HermesNousError, hermesNousMinimumTtl, selectHermesNousSource, } from "./hermes-nous.js";
|
|
10
|
+
import { projectHermesUnsuppressedAuth, hermesUnsuppressedEnvironment } from "./hermes-suppression.js";
|
|
11
|
+
import { ProcessCleanupUnconfirmedError } from "./process.js";
|
|
12
|
+
const messages = {
|
|
13
|
+
relogin: 'Hermes 登录已失效,请重新登录',
|
|
14
|
+
unavailable: 'Hermes 登录暂时无法续期,请稍后刷新',
|
|
15
|
+
changed: 'Hermes 账号来源已变化,请刷新后重试',
|
|
16
|
+
unsupported: '当前 Hermes 安装不支持安全续期,请更新原生 CLI 后重试',
|
|
17
|
+
busy: 'Hermes 账号终端正在运行,请关闭后刷新',
|
|
18
|
+
};
|
|
19
|
+
export class HermesRenewalError extends HermesNousError {
|
|
20
|
+
state;
|
|
21
|
+
constructor(state) {
|
|
22
|
+
super(messages[state]);
|
|
23
|
+
this.state = state;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const homes = new Map();
|
|
27
|
+
function homeKey(home) {
|
|
28
|
+
const canonical = validateHermesHomeDirectory(home);
|
|
29
|
+
return { home: canonical, key: process.platform === 'win32' ? canonical.toLowerCase() : canonical };
|
|
30
|
+
}
|
|
31
|
+
function retire(key, state) {
|
|
32
|
+
if (!state.flight && !state.reserved && !state.poisoned && homes.get(key) === state)
|
|
33
|
+
homes.delete(key);
|
|
34
|
+
}
|
|
35
|
+
function available(state) {
|
|
36
|
+
if (state.poisoned)
|
|
37
|
+
throw new ProcessCleanupUnconfirmedError();
|
|
38
|
+
if (state.reserved)
|
|
39
|
+
throw new HermesRenewalError('busy');
|
|
40
|
+
}
|
|
41
|
+
/** No bearer, refresh token or email enters the command line or public result. */
|
|
42
|
+
export function hermesNousPrincipalDigest(source) {
|
|
43
|
+
const p = source.principal;
|
|
44
|
+
return createHash('sha256')
|
|
45
|
+
.update(JSON.stringify([
|
|
46
|
+
'hermes-nous-v1',
|
|
47
|
+
p.subject,
|
|
48
|
+
p.organization,
|
|
49
|
+
p.issuer,
|
|
50
|
+
p.clientId ?? '',
|
|
51
|
+
source.route.portal,
|
|
52
|
+
source.route.inference,
|
|
53
|
+
]))
|
|
54
|
+
.digest('hex');
|
|
55
|
+
}
|
|
56
|
+
async function snapshot(home, signal) {
|
|
57
|
+
try {
|
|
58
|
+
await lstat(join(home, 'config.yaml'));
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (error.code === 'ENOENT')
|
|
62
|
+
return;
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
const selected = await readHermesAccountMaterial(home, signal);
|
|
66
|
+
if (selected.config.model?.provider !== 'nous' || selected.auth.active_provider !== 'nous')
|
|
67
|
+
return;
|
|
68
|
+
const raw = await assertHermesOwnAccounts(home, signal);
|
|
69
|
+
if (raw.config.model?.provider !== 'nous' || raw.auth.active_provider !== 'nous')
|
|
70
|
+
return;
|
|
71
|
+
const material = {
|
|
72
|
+
...raw,
|
|
73
|
+
auth: projectHermesUnsuppressedAuth(raw.auth),
|
|
74
|
+
env: hermesUnsuppressedEnvironment(raw.auth, raw.env, 'nous'),
|
|
75
|
+
};
|
|
76
|
+
// Suppressed/deleted credentials never become a renewal source.
|
|
77
|
+
if (!material.auth.providers?.nous)
|
|
78
|
+
return;
|
|
79
|
+
const source = selectHermesNousSource(material, { allowExpired: true });
|
|
80
|
+
const ttl = hermesNousMinimumTtl(material.env);
|
|
81
|
+
const state = material.auth.providers.nous;
|
|
82
|
+
return {
|
|
83
|
+
material,
|
|
84
|
+
source,
|
|
85
|
+
ttl,
|
|
86
|
+
state,
|
|
87
|
+
digest: hermesNousPrincipalDigest(source),
|
|
88
|
+
identity: JSON.stringify([
|
|
89
|
+
hermesNousPrincipalDigest(source),
|
|
90
|
+
state.client_id || 'hermes-cli',
|
|
91
|
+
source.route,
|
|
92
|
+
]),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
async function capture(input, home, digest, ttl, signal) {
|
|
96
|
+
if (!input.backend)
|
|
97
|
+
throw new HermesRenewalError('unsupported');
|
|
98
|
+
const executable = input.executable ?? (await input.resolveExecutable?.(signal));
|
|
99
|
+
if (!executable)
|
|
100
|
+
throw new HermesRenewalError('unsupported');
|
|
101
|
+
const argv = await hermesNativeCommand(executable, ['--cliworker-nous-refresh', digest], signal);
|
|
102
|
+
// Unknown standalone launchers must not receive our private protocol as a CLI command.
|
|
103
|
+
if (argv[2] !== fileURLToPath(new URL('./hermes-native-entry.py', import.meta.url)))
|
|
104
|
+
throw new HermesRenewalError('unsupported');
|
|
105
|
+
signal.throwIfAborted();
|
|
106
|
+
// Once rotation starts, cancellation waits for the bounded native transaction to
|
|
107
|
+
// persist its new refresh token. Killing it on UI cancellation could spend the
|
|
108
|
+
// old single-use grant without saving the replacement (especially Windows Job).
|
|
109
|
+
const deadline = AbortSignal.timeout(8000);
|
|
110
|
+
const child = input.backend.spawn({
|
|
111
|
+
argv: [process.execPath, fileURLToPath(new URL('./private-launch.mjs', import.meta.url)), ...argv],
|
|
112
|
+
cwd: home,
|
|
113
|
+
env: {
|
|
114
|
+
...hermesAccountEnvironment(home),
|
|
115
|
+
HERMES_SHARED_AUTH_DIR: join(home, 'shared'),
|
|
116
|
+
HERMES_NOUS_MIN_KEY_TTL_SECONDS: String(ttl),
|
|
117
|
+
PYTHONDONTWRITEBYTECODE: '1',
|
|
118
|
+
ELECTRON_RUN_AS_NODE: '1',
|
|
119
|
+
},
|
|
120
|
+
stdio: { stdin: 'ignore', stdout: 'pipe', stderr: 'pipe' },
|
|
121
|
+
graceMs: input.graceMs ?? 5000,
|
|
122
|
+
signal: deadline,
|
|
123
|
+
});
|
|
124
|
+
void child.done.catch(() => undefined);
|
|
125
|
+
let output = '', bytes = 0;
|
|
126
|
+
const read = async (stream, keep) => {
|
|
127
|
+
if (stream)
|
|
128
|
+
for await (const chunk of stream) {
|
|
129
|
+
bytes += Buffer.byteLength(chunk);
|
|
130
|
+
if (bytes > 8192)
|
|
131
|
+
throw new HermesRenewalError('unavailable');
|
|
132
|
+
if (keep)
|
|
133
|
+
output += String(chunk);
|
|
134
|
+
if (output.length > 512)
|
|
135
|
+
throw new HermesRenewalError('unavailable');
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
const readers = [read(child.stdout, true), read(child.stderr, false)];
|
|
139
|
+
try {
|
|
140
|
+
await Promise.all(readers);
|
|
141
|
+
const result = await child.done;
|
|
142
|
+
if (deadline.aborted || result.exitCode !== 0)
|
|
143
|
+
throw new HermesRenewalError('unavailable');
|
|
144
|
+
let receipt;
|
|
145
|
+
try {
|
|
146
|
+
receipt = JSON.parse(output);
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
throw new HermesRenewalError('unavailable');
|
|
150
|
+
}
|
|
151
|
+
if (!receipt ||
|
|
152
|
+
receipt.version !== 1 ||
|
|
153
|
+
Object.keys(receipt).sort().join(',') !== 'state,version' ||
|
|
154
|
+
!['ready', 'relogin', 'unavailable', 'changed', 'unsupported'].includes(receipt.state))
|
|
155
|
+
throw new HermesRenewalError('unavailable');
|
|
156
|
+
if (receipt.state !== 'ready')
|
|
157
|
+
throw new HermesRenewalError(receipt.state);
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
output = '';
|
|
161
|
+
let exited = false;
|
|
162
|
+
try {
|
|
163
|
+
child.terminate();
|
|
164
|
+
exited = await child.waitForExit();
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
/* fail closed below */
|
|
168
|
+
}
|
|
169
|
+
if (!exited)
|
|
170
|
+
throw new ProcessCleanupUnconfirmedError();
|
|
171
|
+
await Promise.allSettled([...readers, child.done]);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async function renew(input, home, signal) {
|
|
175
|
+
signal.throwIfAborted();
|
|
176
|
+
const before = await snapshot(home, signal);
|
|
177
|
+
if (!before || before.source.expires > Date.now() + before.ttl * 1000)
|
|
178
|
+
return;
|
|
179
|
+
if (typeof before.state.refresh_token !== 'string' ||
|
|
180
|
+
!before.state.refresh_token.trim() ||
|
|
181
|
+
before.state.refresh_token.length > 32768 ||
|
|
182
|
+
/[\x00-\x20\x7f]/.test(before.state.refresh_token))
|
|
183
|
+
throw new HermesRenewalError('relogin');
|
|
184
|
+
if (before.material.auth.credential_pool.nous.some((row) => hermesPoolEntryUnavailable(row, before.material.config.model?.default)))
|
|
185
|
+
throw new HermesRenewalError('unavailable');
|
|
186
|
+
await capture(input, home, before.digest, before.ttl, signal);
|
|
187
|
+
// Always reread even if all subscribers left while the native transaction ran.
|
|
188
|
+
const after = await snapshot(home, new AbortController().signal);
|
|
189
|
+
if (!after || after.identity !== before.identity)
|
|
190
|
+
throw new HermesRenewalError('changed');
|
|
191
|
+
if (after.source.expires <= Date.now() + after.ttl * 1000)
|
|
192
|
+
throw new HermesRenewalError('unavailable');
|
|
193
|
+
}
|
|
194
|
+
function abortable(operation, signal) {
|
|
195
|
+
signal.throwIfAborted();
|
|
196
|
+
return new Promise((resolve, reject) => {
|
|
197
|
+
const abort = () => reject(signal.reason);
|
|
198
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
199
|
+
operation
|
|
200
|
+
.then(resolve, reject)
|
|
201
|
+
.finally(() => signal.removeEventListener('abort', abort))
|
|
202
|
+
.catch(() => { });
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
/** Share only an in-flight renewal, never a completed authorization decision. */
|
|
206
|
+
export async function ensureHermesNousFresh(input) {
|
|
207
|
+
input.signal.throwIfAborted();
|
|
208
|
+
const { home, key } = homeKey(input.home);
|
|
209
|
+
const state = homes.get(key) ?? {};
|
|
210
|
+
homes.set(key, state);
|
|
211
|
+
available(state);
|
|
212
|
+
let flight = state.flight;
|
|
213
|
+
if (flight?.readers.size && [...flight.readers].every((reader) => reader.signal.aborted))
|
|
214
|
+
flight.controller.abort();
|
|
215
|
+
if (flight?.controller.signal.aborted) {
|
|
216
|
+
await abortable(flight.operation.catch(() => { }), input.signal);
|
|
217
|
+
return ensureHermesNousFresh(input);
|
|
218
|
+
}
|
|
219
|
+
if (!flight) {
|
|
220
|
+
const controller = new AbortController();
|
|
221
|
+
flight = { controller, operation: Promise.resolve(), readers: new Set(), settled: false };
|
|
222
|
+
state.flight = flight;
|
|
223
|
+
const current = flight;
|
|
224
|
+
current.operation = Promise.resolve()
|
|
225
|
+
.then(() => renew(input, home, controller.signal))
|
|
226
|
+
.catch((error) => {
|
|
227
|
+
if (error instanceof ProcessCleanupUnconfirmedError)
|
|
228
|
+
state.poisoned = true;
|
|
229
|
+
if (error instanceof HermesNousError || error instanceof ProcessCleanupUnconfirmedError)
|
|
230
|
+
throw error;
|
|
231
|
+
controller.signal.throwIfAborted();
|
|
232
|
+
throw new HermesRenewalError('unavailable');
|
|
233
|
+
})
|
|
234
|
+
.finally(() => {
|
|
235
|
+
current.settled = true;
|
|
236
|
+
if (state.flight === current)
|
|
237
|
+
state.flight = undefined;
|
|
238
|
+
retire(key, state);
|
|
239
|
+
});
|
|
240
|
+
void current.operation.catch(() => { });
|
|
241
|
+
}
|
|
242
|
+
const reader = { signal: input.signal };
|
|
243
|
+
flight.readers.add(reader);
|
|
244
|
+
try {
|
|
245
|
+
await abortable(flight.operation, input.signal);
|
|
246
|
+
input.signal.throwIfAborted();
|
|
247
|
+
available(state);
|
|
248
|
+
}
|
|
249
|
+
finally {
|
|
250
|
+
flight.readers.delete(reader);
|
|
251
|
+
if (!flight.readers.size && !flight.settled) {
|
|
252
|
+
flight.controller.abort();
|
|
253
|
+
await flight.operation.catch((error) => {
|
|
254
|
+
if (error instanceof ProcessCleanupUnconfirmedError)
|
|
255
|
+
throw error;
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/** Hold until the account terminal's entire managed range has exited. */
|
|
261
|
+
export async function reserveHermesAccount(home, signal) {
|
|
262
|
+
signal.throwIfAborted();
|
|
263
|
+
const { key } = homeKey(home);
|
|
264
|
+
const state = homes.get(key) ?? {};
|
|
265
|
+
homes.set(key, state);
|
|
266
|
+
available(state);
|
|
267
|
+
const owner = Symbol();
|
|
268
|
+
state.reserved = owner;
|
|
269
|
+
const release = () => {
|
|
270
|
+
if (state.reserved === owner)
|
|
271
|
+
state.reserved = undefined;
|
|
272
|
+
retire(key, state);
|
|
273
|
+
};
|
|
274
|
+
try {
|
|
275
|
+
if (state.flight) {
|
|
276
|
+
state.flight.controller.abort();
|
|
277
|
+
await state.flight.operation.catch((error) => {
|
|
278
|
+
if (error instanceof ProcessCleanupUnconfirmedError)
|
|
279
|
+
throw error;
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
signal.throwIfAborted();
|
|
283
|
+
if (state.poisoned)
|
|
284
|
+
throw new ProcessCleanupUnconfirmedError();
|
|
285
|
+
return release;
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
release();
|
|
289
|
+
throw error;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=hermes-renewal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-renewal.js","sourceRoot":"","sources":["../../../src/host/hermes-renewal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Read only the single stored __main__.py member emitted by distlib. No ZIP
|
|
2
|
+
* extraction, Python evaluation, installer invocation, or account lookup. */
|
|
3
|
+
export declare function hermesDistlibSource(bytes: Buffer): string | undefined;
|
|
4
|
+
export declare function hermesLauncherCheckout(source: string): string | undefined;
|
|
5
|
+
export declare function windowsHermesCheckout(executable: string, command: string[], signal?: AbortSignal): Promise<string | undefined>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { open, realpath } from 'node:fs/promises';
|
|
3
|
+
import { basename, isAbsolute } from 'node:path';
|
|
4
|
+
/** Read only the single stored __main__.py member emitted by distlib. No ZIP
|
|
5
|
+
* extraction, Python evaluation, installer invocation, or account lookup. */
|
|
6
|
+
export function hermesDistlibSource(bytes) {
|
|
7
|
+
if (bytes.length < 128 || bytes.toString('ascii', 0, 2) !== 'MZ')
|
|
8
|
+
return;
|
|
9
|
+
const end = bytes.length - 22;
|
|
10
|
+
if (bytes.readUInt32LE(end) !== 0x06054b50)
|
|
11
|
+
return;
|
|
12
|
+
if (bytes.readUInt16LE(end + 4) !== 0 ||
|
|
13
|
+
bytes.readUInt16LE(end + 6) !== 0 ||
|
|
14
|
+
bytes.readUInt16LE(end + 8) !== 1 ||
|
|
15
|
+
bytes.readUInt16LE(end + 10) !== 1 ||
|
|
16
|
+
bytes.readUInt16LE(end + 20) !== 0)
|
|
17
|
+
throw new Error('Unsupported Hermes launcher archive');
|
|
18
|
+
const centralSize = bytes.readUInt32LE(end + 12);
|
|
19
|
+
const central = end - centralSize;
|
|
20
|
+
if (central < 64 || centralSize < 46 || bytes.readUInt32LE(central) !== 0x02014b50)
|
|
21
|
+
throw new Error('Invalid Hermes launcher directory');
|
|
22
|
+
const nameSize = bytes.readUInt16LE(central + 28);
|
|
23
|
+
const size = bytes.readUInt32LE(central + 24);
|
|
24
|
+
const local = central - bytes.readUInt32LE(end + 16) + bytes.readUInt32LE(central + 42);
|
|
25
|
+
if (centralSize !== 46 + nameSize ||
|
|
26
|
+
bytes.subarray(central + 46, end).toString('utf8') !== '__main__.py' ||
|
|
27
|
+
bytes.readUInt16LE(central + 8) !== 0 ||
|
|
28
|
+
bytes.readUInt16LE(central + 10) !== 0 ||
|
|
29
|
+
bytes.readUInt32LE(central + 20) !== size ||
|
|
30
|
+
size > 128 * 1024 ||
|
|
31
|
+
local < 64 ||
|
|
32
|
+
local + 30 > central ||
|
|
33
|
+
bytes.readUInt32LE(local) !== 0x04034b50 ||
|
|
34
|
+
bytes.readUInt16LE(local + 6) !== 0 ||
|
|
35
|
+
bytes.readUInt16LE(local + 8) !== 0 ||
|
|
36
|
+
bytes.readUInt32LE(local + 18) !== size ||
|
|
37
|
+
bytes.readUInt32LE(local + 22) !== size ||
|
|
38
|
+
bytes.readUInt16LE(local + 26) !== nameSize ||
|
|
39
|
+
bytes.readUInt16LE(local + 28) !== 0 ||
|
|
40
|
+
local + 30 + nameSize + size !== central ||
|
|
41
|
+
bytes.subarray(local + 30, local + 30 + nameSize).toString('utf8') !== '__main__.py')
|
|
42
|
+
throw new Error('Invalid Hermes launcher member');
|
|
43
|
+
return bytes.subarray(local + 30 + nameSize, central).toString('utf8');
|
|
44
|
+
}
|
|
45
|
+
export function hermesLauncherCheckout(source) {
|
|
46
|
+
if (!source.startsWith('import os, re, sys\n') ||
|
|
47
|
+
!source.includes('sys._hermes_pin_default_home = True\n') ||
|
|
48
|
+
!source.includes('import hermes_bootstrap') ||
|
|
49
|
+
!source.includes('from hermes_cli.main import main'))
|
|
50
|
+
return;
|
|
51
|
+
// Python's repr(path) uses only literal escaped backslashes/quotes here.
|
|
52
|
+
// Do not evaluate the launcher, interpolate its statements, or accept expressions.
|
|
53
|
+
const roots = [
|
|
54
|
+
...source.matchAll(/^sys\.path\.insert\(0, ('(?:[^'\\\r\n]|\\[\\'])+'|"(?:[^"\\\r\n]|\\[\\"])+")\)\r?$/gm),
|
|
55
|
+
];
|
|
56
|
+
if (roots.length !== 1)
|
|
57
|
+
throw new Error('Ambiguous Hermes checkout');
|
|
58
|
+
const path = roots[0][1].slice(1, -1).replace(/\\([\\'"])/g, '$1');
|
|
59
|
+
if (!isAbsolute(path) || path.includes('\0'))
|
|
60
|
+
throw new Error('Invalid Hermes checkout');
|
|
61
|
+
return path;
|
|
62
|
+
}
|
|
63
|
+
export async function windowsHermesCheckout(executable, command, signal) {
|
|
64
|
+
let source;
|
|
65
|
+
if (basename(executable).toLowerCase() === 'hermes.exe') {
|
|
66
|
+
const file = await open(executable, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
|
|
67
|
+
try {
|
|
68
|
+
const info = await file.stat();
|
|
69
|
+
if (!info.isFile() || info.nlink !== 1 || info.size > 1024 * 1024)
|
|
70
|
+
throw new Error('Unsafe Hermes launcher');
|
|
71
|
+
source = hermesDistlibSource(await file.readFile());
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
await file.close();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (command[1] === '-I' && command[2] === '-c') {
|
|
78
|
+
const encoded = /^import base64; exec\(base64\.b64decode\('([A-Za-z0-9+/]+={0,2})'\)\)$/.exec(command[3] ?? '');
|
|
79
|
+
if (encoded)
|
|
80
|
+
source = Buffer.from(encoded[1], 'base64').toString('utf8');
|
|
81
|
+
}
|
|
82
|
+
signal?.throwIfAborted();
|
|
83
|
+
if (source === undefined)
|
|
84
|
+
return;
|
|
85
|
+
const checkout = hermesLauncherCheckout(source);
|
|
86
|
+
if (!checkout)
|
|
87
|
+
return;
|
|
88
|
+
// Canonical spelling is part of the native install_key hash.
|
|
89
|
+
return realpath(checkout);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=hermes-windows-installation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-windows-installation.js","sourceRoot":"","sources":["../../../src/host/hermes-windows-installation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAEhD;6EAC6E;AAC7E,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI;QAAE,OAAM;IACxE,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;IAC7B,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,UAAU;QAAE,OAAM;IAClD,IACE,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;QACjC,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;QACjC,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;QACjC,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;QAClC,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;QAElC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,GAAG,GAAG,WAAW,CAAA;IACjC,IAAI,OAAO,GAAG,EAAE,IAAI,WAAW,GAAG,EAAE,IAAI,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,UAAU;QAChF,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IACjD,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IAC7C,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IACvF,IACE,WAAW,KAAK,EAAE,GAAG,QAAQ;QAC7B,KAAK,CAAC,QAAQ,CAAC,OAAO,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,aAAa;QACpE,KAAK,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC;QACrC,KAAK,CAAC,YAAY,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;QACtC,KAAK,CAAC,YAAY,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,IAAI;QACzC,IAAI,GAAG,GAAG,GAAG,IAAI;QACjB,KAAK,GAAG,EAAE;QACV,KAAK,GAAG,EAAE,GAAG,OAAO;QACpB,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,UAAU;QACxC,KAAK,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACnC,KAAK,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACnC,KAAK,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI;QACvC,KAAK,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI;QACvC,KAAK,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,QAAQ;QAC3C,KAAK,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACpC,KAAK,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,KAAK,OAAO;QACxC,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,aAAa;QAEpF,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,IACE,CAAC,MAAM,CAAC,UAAU,CAAC,sBAAsB,CAAC;QAC1C,CAAC,MAAM,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACzD,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC3C,CAAC,MAAM,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAEpD,OAAM;IACR,yEAAyE;IACzE,mFAAmF;IACnF,MAAM,KAAK,GAAG;QACZ,GAAG,MAAM,CAAC,QAAQ,CAChB,sFAAsF,CACvF;KACF,CAAA;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;IACpE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACpE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IACxF,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAkB,EAClB,OAAiB,EACjB,MAAoB;IAEpB,IAAI,MAA0B,CAAA;IAC9B,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,KAAK,YAAY,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;QACrG,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;YAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI;gBAC/D,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;YAC3C,MAAM,GAAG,mBAAmB,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QACrD,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,wEAAwE,CAAC,IAAI,CAC3F,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CACjB,CAAA;QACD,IAAI,OAAO;YAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC3E,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,IAAI,MAAM,KAAK,SAAS;QAAE,OAAM;IAChC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAC/C,IAAI,CAAC,QAAQ;QAAE,OAAM;IACrB,6DAA6D;IAC7D,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC3B,CAAC"}
|
|
@@ -71,6 +71,7 @@ export declare class CliWorkerService extends TypertRemoteService {
|
|
|
71
71
|
private selectionBindings;
|
|
72
72
|
private selectionProjects;
|
|
73
73
|
private displayedBindings;
|
|
74
|
+
private settingsCatalogs?;
|
|
74
75
|
private disposed;
|
|
75
76
|
/** @param ctx - Harness services. @param config - Validated deployment options. */
|
|
76
77
|
constructor(ctx: Context, config: Config);
|
|
@@ -107,10 +108,18 @@ export declare class CliWorkerService extends TypertRemoteService {
|
|
|
107
108
|
setCliEnabled(parentSessionId: string, cli: string, enabled: boolean, signal: AbortSignal): Promise<string>;
|
|
108
109
|
/** @param parentSessionId - Owning session. @param cli - Selected CLI. @param signal - Query lifetime. @returns Safe account status JSON. */
|
|
109
110
|
accountStatus(parentSessionId: string, cli: string, signal: AbortSignal): Promise<string>;
|
|
111
|
+
private executablePathSnapshot;
|
|
112
|
+
private probeExecutablePath;
|
|
113
|
+
/** @param parentSessionId - Owning session. @param cli - Selected CLI. @param signal - Query lifetime. @returns Machine-local executable path and availability JSON. */
|
|
114
|
+
cliExecutablePath(parentSessionId: string, cli: string, signal: AbortSignal): Promise<string>;
|
|
115
|
+
/** @param parentSessionId - Owning session. @param cli - Selected CLI. @param path - Full file path for manual selection. @param action - manual, refresh or auto. @param signal - Mutation/query lifetime. @returns Saved machine-local path and fresh availability JSON. */
|
|
116
|
+
refreshCliExecutablePath(parentSessionId: string, cli: string, path: string, action: string, signal: AbortSignal): Promise<string>;
|
|
110
117
|
/** @param parentSessionId - Owning session. @param cli - Selected CLI. @param action - Explicit human action. @param signal - Startup lifetime. @returns Managed account terminal identity and instruction JSON. */
|
|
111
118
|
accountStart(parentSessionId: string, cli: string, action: string, signal: AbortSignal): Promise<string>;
|
|
112
119
|
/** @param source - One current CLI-native source, never a filesystem path. */
|
|
113
120
|
accountStartForSource(parentSessionId: string, cli: string, action: string, source: string, signal: AbortSignal): Promise<string>;
|
|
121
|
+
/** @param provider - Explicit ZCode native login provider, never a URL or logout source. */
|
|
122
|
+
accountStartForProvider(parentSessionId: string, cli: string, action: string, provider: string, signal: AbortSignal): Promise<string>;
|
|
114
123
|
private startAccount;
|
|
115
124
|
/** @param parentSessionId - Owning session. @param accountId - Account terminal identity. @param signal - Stream lifetime. @returns Ephemeral terminal frame JSON. */
|
|
116
125
|
accountWatch(parentSessionId: string, accountId: string, signal: AbortSignal): AsyncIterable<string>;
|
|
@@ -124,6 +133,9 @@ export declare class CliWorkerService extends TypertRemoteService {
|
|
|
124
133
|
catalog(parentSessionId: string, signal: AbortSignal): Promise<string>;
|
|
125
134
|
/** @param parentSessionId - Parent session identity. @param cli - Selected CLI. @param signal - Caller lifetime. @returns CLI catalog and saved project preference. */
|
|
126
135
|
catalogForCli(parentSessionId: string, cli: string, signal: AbortSignal): Promise<string>;
|
|
136
|
+
/** @param parentSessionId - Parent session identity. @param cli - Selected CLI. @param signal - Caller lifetime. @returns Fresh model catalog and saved project preference. */
|
|
137
|
+
refreshCatalogForCli(parentSessionId: string, cli: string, signal: AbortSignal): Promise<string>;
|
|
138
|
+
private settingsCatalog;
|
|
127
139
|
/** @param parentSessionId - Parent session identity. @param selection - JSON model and effort. @param signal - Caller lifetime. @returns Saved JSON preference. */
|
|
128
140
|
configure(parentSessionId: string, selection: string, signal: AbortSignal): Promise<string>;
|
|
129
141
|
/** @param parentSessionId - Owning session. @param workerId - Idle worker. @param selection - JSON preference. @param signal - Caller lifetime. @returns Saved worker configuration. */
|