agl 41.0.1 → 41.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/changelog.md +24 -0
  2. package/dist_serve/bundle.js +1448 -1448
  3. package/dist_serve/bundle.js.map +2 -2
  4. package/dist_ts/00_commitinfo_data.js +1 -1
  5. package/dist_ts/aglapi/aglapisurface.document.js +7 -3
  6. package/dist_ts/classes.authmodels.d.ts +15 -0
  7. package/dist_ts/classes.authmodels.js +78 -7
  8. package/dist_ts/classes.authstore.js +23 -6
  9. package/dist_ts/classes.cli.js +8 -3
  10. package/dist_ts/classes.controller.d.ts +13 -0
  11. package/dist_ts/classes.controller.js +51 -14
  12. package/dist_ts/classes.controllermanagement.d.ts +53 -6
  13. package/dist_ts/classes.controllermanagement.js +180 -72
  14. package/dist_ts/classes.inferencegateway.d.ts +6 -6
  15. package/dist_ts/classes.inferencegateway.js +28 -15
  16. package/dist_ts/classes.inferenceusage.d.ts +19 -7
  17. package/dist_ts/classes.inferenceusage.js +49 -13
  18. package/dist_ts/classes.inferenceusagetap.d.ts +15 -3
  19. package/dist_ts/classes.inferenceusagetap.js +16 -9
  20. package/dist_ts/classes.processinspection.d.ts +3 -1
  21. package/dist_ts/classes.processinspection.js +4 -2
  22. package/dist_ts/classes.proxycontrol.d.ts +22 -7
  23. package/dist_ts/classes.proxycontrol.js +5 -3
  24. package/dist_ts/classes.proxycontrolclient.d.ts +4 -3
  25. package/dist_ts/classes.proxycontrolclient.js +7 -5
  26. package/dist_ts/classes.proxydaemon.d.ts +6 -4
  27. package/dist_ts/classes.proxydaemon.js +42 -17
  28. package/dist_ts/classes.proxyleaseholder.d.ts +11 -2
  29. package/dist_ts/classes.proxyleaseholder.js +25 -2
  30. package/dist_ts/classes.proxystore.d.ts +3 -2
  31. package/dist_ts/classes.proxystore.js +5 -2
  32. package/dist_ts/classes.upgradecoordinator.d.ts +2 -1
  33. package/dist_ts/classes.upgradecoordinator.js +13 -10
  34. package/dist_ts/classes.upgradetransaction.d.ts +6 -0
  35. package/dist_ts/classes.upgradetransaction.js +38 -13
  36. package/dist_ts/classes.usagefeed.js +3 -2
  37. package/dist_ts/functions.controllermanagementsurface.d.ts +37 -0
  38. package/dist_ts/functions.controllermanagementsurface.js +110 -0
  39. package/dist_ts/functions.inferencecli.d.ts +6 -3
  40. package/dist_ts/functions.inferencecli.js +9 -5
  41. package/dist_ts/functions.inferencecliarguments.d.ts +1 -1
  42. package/dist_ts/functions.inferencecliarguments.js +19 -7
  43. package/dist_ts/functions.inferencelaunch.d.ts +30 -9
  44. package/dist_ts/functions.inferencelaunch.js +49 -23
  45. package/dist_ts/interfaces.auth.d.ts +14 -3
  46. package/dist_ts/interfaces.auth.js +4 -3
  47. package/dist_ts_interfaces/index.d.ts +1 -0
  48. package/dist_ts_interfaces/index.js +2 -1
  49. package/dist_ts_interfaces/interfaces.d.ts +6 -1
  50. package/dist_ts_interfaces/interfaces.js +2 -2
  51. package/dist_ts_interfaces/management.d.ts +33 -0
  52. package/dist_ts_interfaces/management.js +35 -0
  53. package/dist_ts_interfaces/metrics.d.ts +29 -7
  54. package/dist_ts_interfaces/metrics.js +14 -1
  55. package/package.json +6 -5
  56. package/readme.md +123 -28
  57. package/ts/00_commitinfo_data.ts +1 -1
  58. package/ts/aglapi/aglapisurface.document.ts +6 -2
  59. package/ts/classes.authmodels.ts +74 -5
  60. package/ts/classes.authstore.ts +24 -4
  61. package/ts/classes.cli.ts +9 -2
  62. package/ts/classes.controller.ts +98 -59
  63. package/ts/classes.controllermanagement.ts +284 -107
  64. package/ts/classes.inferencegateway.ts +31 -19
  65. package/ts/classes.inferenceusage.ts +58 -19
  66. package/ts/classes.inferenceusagetap.ts +27 -8
  67. package/ts/classes.processinspection.ts +2 -1
  68. package/ts/classes.proxycontrol.ts +25 -9
  69. package/ts/classes.proxycontrolclient.ts +7 -4
  70. package/ts/classes.proxydaemon.ts +43 -17
  71. package/ts/classes.proxyleaseholder.ts +36 -7
  72. package/ts/classes.proxystore.ts +8 -3
  73. package/ts/classes.upgradecoordinator.ts +20 -11
  74. package/ts/classes.upgradetransaction.ts +53 -2
  75. package/ts/classes.usagefeed.ts +2 -1
  76. package/ts/functions.controllermanagementsurface.ts +149 -0
  77. package/ts/functions.inferencecli.ts +15 -7
  78. package/ts/functions.inferencecliarguments.ts +16 -6
  79. package/ts/functions.inferencelaunch.ts +57 -23
  80. package/ts/interfaces.auth.ts +14 -3
  81. package/ts_interfaces/index.ts +1 -0
  82. package/ts_interfaces/interfaces.ts +6 -1
  83. package/ts_interfaces/management.ts +52 -0
  84. package/ts_interfaces/metrics.ts +34 -7
  85. package/ts_web/00_commitinfo_data.ts +1 -1
  86. package/ts_web/classes.controllersocketclient.ts +5 -2
  87. package/ts_web/elements.metricsboard.ts +68 -18
@@ -1,11 +1,33 @@
1
1
  import * as plugins from './plugins.js';
2
- import { type IControllerStatus, type IReq_ControllerUpgradeLaunch, type IReq_ControllerUpgradePrepareBegin, type IReq_ControllerUpgradeFinalize } from '../dist_ts_interfaces/index.js';
2
+ import { type IControllerStatus, type IReq_ControllerUpgradeLaunch, type IReq_ControllerUpgradePrepareBegin, type IReq_ControllerUpgradeFinalize, type TControllerManagementTypedRequest } from '../dist_ts_interfaces/index.js';
3
3
  export interface IControllerStatusExpectation {
4
4
  packageName: string;
5
5
  packageVersion: string;
6
6
  protocolVersion?: number;
7
7
  upgradeManagementVersion: number;
8
8
  }
9
+ /**
10
+ * A declared management protocol (`controllerManagementProtocolVersion` in a package, `managementProtocolVersion`
11
+ * in a status): a safe integer of 1 or more.
12
+ */
13
+ export declare const isControllerManagementProtocolVersion: (valueArg: unknown) => valueArg is number;
14
+ /** A controller a management call is addressed to, by what it declares about its management endpoint. */
15
+ export interface IControllerManagementTarget {
16
+ /**
17
+ * The management protocol the controller declares (`controllerManagementProtocolVersion`): the status's own
18
+ * `managementProtocolVersion` once the controller runs, or what the installed package that runs it declares in
19
+ * its `package.json`. Absent when it declares none, as every release older than the endpoint.
20
+ */
21
+ managementProtocolVersion?: number;
22
+ }
23
+ /**
24
+ * A status read: the identity the status must report, and the declaration that decides how it is read, which comes
25
+ * from the package expected to run the controller, since there is no status yet. Every caller states it, absent
26
+ * included.
27
+ */
28
+ export interface IControllerStatusQuery extends IControllerStatusExpectation {
29
+ managementProtocolVersion: number | undefined;
30
+ }
9
31
  export declare const controllerUpgradePrepareBeginRequestTimeoutMs = 30000;
10
32
  /**
11
33
  * Validates a controller status document against the expected identity. Without an expected protocol version
@@ -15,12 +37,37 @@ export declare const controllerUpgradePrepareBeginRequestTimeoutMs = 30000;
15
37
  * which this release acts on, are checked exactly at every protocol.
16
38
  */
17
39
  export declare const assertControllerStatus: (statusArg: unknown, expectationArg: IControllerStatusExpectation, knownProtocolVersionArg?: number) => IControllerStatus;
18
- export declare const requestControllerUpgradePrepareBegin: (portArg: number, tokenArg: string, targetVersionArg: string, gracePeriodMsArg: number) => Promise<IReq_ControllerUpgradePrepareBegin['response']>;
19
- export declare const requestControllerUpgradeFinalize: (portArg: number, tokenArg: string, modeArg: IReq_ControllerUpgradeFinalize['request']['mode'], timeoutMsArg?: number) => Promise<IReq_ControllerUpgradeFinalize['response']>;
20
- export declare const queryControllerStatus: (portArg: number, expectationArg: IControllerStatusExpectation, timeoutMsArg?: number) => Promise<IControllerStatus>;
21
- export declare const tryQueryControllerStatus: (portArg: number, expectationArg: IControllerStatusExpectation) => Promise<IControllerStatus | undefined>;
40
+ /**
41
+ * How this build reaches a controller's management methods, decided by the controller's declaration alone: over its
42
+ * loopback management endpoint when it declares a management protocol, which every later release keeps whatever
43
+ * transport its browser speaks, and over its controller socket when it declares none (a release older than the
44
+ * endpoint, such as a source an upgrade recovery restores), which serves them in every release up to this one.
45
+ * There is no second attempt over the other transport.
46
+ */
47
+ export declare const controllerManagementTransport: (targetArg: IControllerManagementTarget) => 'http' | 'socket';
48
+ /** A management request the controller answered with an error, or whose answer this build cannot read. */
49
+ export declare class ControllerManagementError extends Error {
50
+ readonly code?: string | undefined;
51
+ constructor(messageArg: string, code?: string | undefined);
52
+ }
53
+ /**
54
+ * Sends one management request over loopback HTTP: a TypedRequest envelope of exactly `method`, `request`,
55
+ * `response: null`, `correlation` and `requestInstanceId`, as a TypedRequest client sends it, with no credential
56
+ * beside what the request itself carries.
57
+ */
58
+ export declare const requestControllerManagement: <T extends TControllerManagementTypedRequest>(portArg: number, methodArg: T['method'], requestArg: T['request'], optionsArg: {
59
+ timeoutMs: number;
60
+ }) => Promise<unknown>;
61
+ export declare const requestControllerUpgradePrepareBegin: (portArg: number, controllerArg: IControllerManagementTarget, tokenArg: string, targetVersionArg: string, gracePeriodMsArg: number) => Promise<IReq_ControllerUpgradePrepareBegin['response']>;
62
+ export declare const requestControllerUpgradeFinalize: (portArg: number, controllerArg: IControllerManagementTarget, tokenArg: string, modeArg: IReq_ControllerUpgradeFinalize['request']['mode'], timeoutMsArg?: number) => Promise<IReq_ControllerUpgradeFinalize['response']>;
63
+ /**
64
+ * Reads a controller's status over the transport the query's declaration picks. The upgrade calls that follow take
65
+ * the status itself as their target, so from then on the controller's own declaration decides.
66
+ */
67
+ export declare const queryControllerStatus: (portArg: number, queryArg: IControllerStatusQuery, timeoutMsArg?: number) => Promise<IControllerStatus>;
68
+ export declare const tryQueryControllerStatus: (portArg: number, queryArg: IControllerStatusQuery) => Promise<IControllerStatus | undefined>;
22
69
  export declare const isLoopbackPortListening: (portArg: number, timeoutMsArg?: number) => Promise<boolean>;
23
- export declare const requestControllerUpgradeLaunch: (portArg: number, tokenArg: string, timeoutMsArg?: number) => Promise<IReq_ControllerUpgradeLaunch['response']>;
70
+ export declare const requestControllerUpgradeLaunch: (portArg: number, controllerArg: IControllerManagementTarget, tokenArg: string, timeoutMsArg?: number) => Promise<IReq_ControllerUpgradeLaunch['response']>;
24
71
  export declare const waitUntilControllerExited: (optionsArg: {
25
72
  pid: number;
26
73
  cliPath: string;
@@ -1,10 +1,15 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import { parseUpgradeBlockers } from './classes.upgradecoordinator.js';
3
- import { controllerPackageName, controllerProtocolVersion, controllerServiceUnitName, } from '../dist_ts_interfaces/index.js';
3
+ import { controllerManagementResponseMaximumBytes, controllerManagementTypedRequestPath, controllerPackageName, controllerProtocolVersion, controllerServiceUnitName, } from '../dist_ts_interfaces/index.js';
4
4
  import { controllerProcessIdentityIsLive, signalVerifiedControllerProcess, } from './classes.processinspection.js';
5
5
  import { AglControllerService } from './classes.controllerservice.js';
6
6
  const currentCliName = String(controllerPackageName) === 'agl' ? 'agl' : 'hcon';
7
7
  const currentRuntimeName = currentCliName === 'agl' ? 'AGL' : currentCliName;
8
+ /**
9
+ * A declared management protocol (`controllerManagementProtocolVersion` in a package, `managementProtocolVersion`
10
+ * in a status): a safe integer of 1 or more.
11
+ */
12
+ export const isControllerManagementProtocolVersion = (valueArg) => (typeof valueArg === 'number' && Number.isSafeInteger(valueArg) && valueArg >= 1);
8
13
  const harnessStates = ['starting', 'ready', 'stopping', 'stopped', 'failed'];
9
14
  /** The controller protocol version that added each harness to the status document. */
10
15
  const controllerHarnessIntroductions = {
@@ -135,6 +140,8 @@ export const assertControllerStatus = (statusArg, expectationArg, knownProtocolV
135
140
  || (expectationArg.protocolVersion !== undefined
136
141
  && status.protocolVersion !== expectationArg.protocolVersion)
137
142
  || status.upgradeManagementVersion !== expectationArg.upgradeManagementVersion
143
+ || (status.managementProtocolVersion !== undefined
144
+ && !isControllerManagementProtocolVersion(status.managementProtocolVersion))
138
145
  || !Number.isSafeInteger(status.controllerPid)
139
146
  || !Number.isSafeInteger(status.processGroupId)
140
147
  || typeof status.processFingerprint !== 'string'
@@ -162,64 +169,182 @@ export const assertControllerStatus = (statusArg, expectationArg, knownProtocolV
162
169
  delete readableStatus.proxy;
163
170
  return readableStatus;
164
171
  };
165
- export const requestControllerUpgradePrepareBegin = async (portArg, tokenArg, targetVersionArg, gracePeriodMsArg) => {
166
- const abortController = new AbortController();
167
- const timeout = setTimeout(() => abortController.abort(), controllerUpgradePrepareBeginRequestTimeoutMs);
168
- let socket;
169
- try {
170
- socket = await plugins.typedsocket.TypedSocket.createClient(new plugins.typedrequest.TypedRouter(), `http://127.0.0.1:${portArg}`, {
171
- autoReconnect: false,
172
- maxRetries: 0,
173
- abortSignal: abortController.signal,
174
- });
175
- const response = await socket.createTypedRequest('controller.upgrade.prepare.begin', undefined, {
176
- timeoutMs: controllerUpgradePrepareBeginRequestTimeoutMs,
177
- abortSignal: abortController.signal,
178
- }).fire({ token: tokenArg, targetVersion: targetVersionArg, gracePeriodMs: gracePeriodMsArg });
179
- if (!response
180
- || typeof response !== 'object'
181
- || Array.isArray(response)
182
- || Object.keys(response).length !== 1
183
- || response.accepted !== true)
184
- throw new Error('The controller returned an invalid upgrade preparation response.');
185
- return response;
172
+ /**
173
+ * How this build reaches a controller's management methods, decided by the controller's declaration alone: over its
174
+ * loopback management endpoint when it declares a management protocol, which every later release keeps whatever
175
+ * transport its browser speaks, and over its controller socket when it declares none (a release older than the
176
+ * endpoint, such as a source an upgrade recovery restores), which serves them in every release up to this one.
177
+ * There is no second attempt over the other transport.
178
+ */
179
+ export const controllerManagementTransport = (targetArg) => (isControllerManagementProtocolVersion(targetArg.managementProtocolVersion) ? 'http' : 'socket');
180
+ /** A management request the controller answered with an error, or whose answer this build cannot read. */
181
+ export class ControllerManagementError extends Error {
182
+ code;
183
+ constructor(messageArg, code) {
184
+ super(messageArg);
185
+ this.code = code;
186
+ this.name = 'ControllerManagementError';
186
187
  }
187
- finally {
188
- clearTimeout(timeout);
189
- await socket?.stop();
188
+ }
189
+ const maximumManagementErrorTextBytes = 4_096;
190
+ const isPlainRecord = (valueArg) => (typeof valueArg === 'object' && valueArg !== null && !Array.isArray(valueArg));
191
+ /**
192
+ * Reads one answer of the management endpoint: the envelope must answer this very request (method, request
193
+ * instance and correlation) and carry `response`; an `error` is the controller's refusal. Keys this build does not
194
+ * read are left alone, so a later release may add some.
195
+ */
196
+ const readControllerManagementAnswer = (answerArg, requestArg) => {
197
+ if (!isPlainRecord(answerArg)
198
+ || answerArg.method !== requestArg.method
199
+ || answerArg.requestInstanceId !== requestArg.requestInstanceId
200
+ || !isPlainRecord(answerArg.correlation)
201
+ || answerArg.correlation.id !== requestArg.correlationId
202
+ || answerArg.correlation.phase !== 'response'
203
+ || !Object.hasOwn(answerArg, 'response'))
204
+ throw new ControllerManagementError('The controller returned an invalid management answer.', 'protocol_mismatch');
205
+ if (answerArg.error === undefined)
206
+ return answerArg.response;
207
+ if (!isPlainRecord(answerArg.error) || typeof answerArg.error.text !== 'string') {
208
+ throw new ControllerManagementError('The controller returned an invalid management answer.', 'protocol_mismatch');
190
209
  }
210
+ const data = answerArg.error.data;
211
+ const code = isPlainRecord(data) && typeof data.code === 'string' && data.code.length <= 128 ? data.code : undefined;
212
+ const text = Buffer.byteLength(answerArg.error.text, 'utf8') <= maximumManagementErrorTextBytes
213
+ ? answerArg.error.text
214
+ : 'The controller refused the management request.';
215
+ throw new ControllerManagementError(text, code);
191
216
  };
192
- export const requestControllerUpgradeFinalize = async (portArg, tokenArg, modeArg, timeoutMsArg = 60_000) => {
193
- const socket = await plugins.typedsocket.TypedSocket.createClient(new plugins.typedrequest.TypedRouter(), `http://127.0.0.1:${portArg}`, { autoReconnect: false, maxRetries: 0 });
217
+ /** Sends one envelope to the management endpoint on 127.0.0.1 and returns the answer's bytes. */
218
+ const postControllerManagementEnvelope = (portArg, bodyArg, signalArg) => new Promise((resolve, reject) => {
219
+ const request = plugins.http.request({
220
+ protocol: 'http:',
221
+ hostname: '127.0.0.1',
222
+ port: portArg,
223
+ path: controllerManagementTypedRequestPath,
224
+ method: 'POST',
225
+ agent: false,
226
+ signal: signalArg,
227
+ headers: {
228
+ Host: `127.0.0.1:${portArg}`,
229
+ 'Content-Type': 'application/json',
230
+ Accept: 'application/json',
231
+ 'Content-Length': String(bodyArg.byteLength),
232
+ Connection: 'close',
233
+ },
234
+ }, (responseArg) => {
235
+ const statusCode = responseArg.statusCode ?? 0;
236
+ const contentType = responseArg.headers['content-type'];
237
+ if (statusCode !== 200) {
238
+ responseArg.resume();
239
+ reject(new ControllerManagementError(`The controller refused the management request with HTTP ${statusCode}.`, 'http_refused'));
240
+ return;
241
+ }
242
+ if (typeof contentType !== 'string' || !/^application\/json(?:;|$)/iu.test(contentType)) {
243
+ responseArg.resume();
244
+ reject(new ControllerManagementError('The controller returned an invalid management answer.', 'protocol_mismatch'));
245
+ return;
246
+ }
247
+ const chunks = [];
248
+ let byteLength = 0;
249
+ responseArg.on('data', (chunkArg) => {
250
+ const chunk = Buffer.isBuffer(chunkArg) ? chunkArg : Buffer.from(chunkArg);
251
+ byteLength += chunk.byteLength;
252
+ if (byteLength > controllerManagementResponseMaximumBytes) {
253
+ responseArg.destroy();
254
+ reject(new ControllerManagementError('The controller management answer exceeded its size limit.', 'response_limit'));
255
+ return;
256
+ }
257
+ chunks.push(chunk);
258
+ });
259
+ responseArg.once('end', () => resolve(Buffer.concat(chunks, byteLength)));
260
+ responseArg.once('error', reject);
261
+ });
262
+ request.once('error', reject);
263
+ request.end(bodyArg);
264
+ });
265
+ /**
266
+ * Sends one management request over loopback HTTP: a TypedRequest envelope of exactly `method`, `request`,
267
+ * `response: null`, `correlation` and `requestInstanceId`, as a TypedRequest client sends it, with no credential
268
+ * beside what the request itself carries.
269
+ */
270
+ export const requestControllerManagement = async (portArg, methodArg, requestArg, optionsArg) => {
271
+ const identity = {
272
+ method: methodArg,
273
+ requestInstanceId: plugins.crypto.randomUUID(),
274
+ correlationId: plugins.crypto.randomUUID(),
275
+ };
276
+ const body = Buffer.from(JSON.stringify({
277
+ method: methodArg,
278
+ request: requestArg,
279
+ response: null,
280
+ correlation: { id: identity.correlationId, phase: 'request' },
281
+ requestInstanceId: identity.requestInstanceId,
282
+ }), 'utf8');
283
+ const timeoutSignal = AbortSignal.timeout(optionsArg.timeoutMs);
284
+ let answerBytes;
194
285
  try {
195
- return await socket.createTypedRequest('controller.upgrade.finalize', undefined, { timeoutMs: timeoutMsArg }).fire({ token: tokenArg, mode: modeArg });
286
+ answerBytes = await postControllerManagementEnvelope(portArg, body, timeoutSignal);
196
287
  }
197
- finally {
198
- await socket.stop();
288
+ catch (errorArg) {
289
+ if (timeoutSignal.aborted && !(errorArg instanceof ControllerManagementError)) {
290
+ throw new ControllerManagementError(`The controller did not answer ${methodArg} within ${optionsArg.timeoutMs} ms.`, 'timeout');
291
+ }
292
+ throw errorArg;
293
+ }
294
+ let answer;
295
+ try {
296
+ const text = answerBytes.toString('utf8');
297
+ if (!Buffer.from(text, 'utf8').equals(answerBytes))
298
+ throw new Error('invalid UTF-8');
299
+ answer = JSON.parse(text);
300
+ }
301
+ catch {
302
+ throw new ControllerManagementError('The controller returned an invalid management answer.', 'protocol_mismatch');
199
303
  }
304
+ return readControllerManagementAnswer(answer, identity);
200
305
  };
201
- export const queryControllerStatus = async (portArg, expectationArg, timeoutMsArg = 2_500) => {
202
- const abortController = new AbortController();
203
- const timeout = setTimeout(() => abortController.abort(), timeoutMsArg);
306
+ /** Fires one management request over the controller socket, for a controller that declares no management protocol. */
307
+ const requestControllerManagementOverSocket = async (portArg, methodArg, requestArg, optionsArg) => {
308
+ const signal = AbortSignal.timeout(optionsArg.timeoutMs);
204
309
  let socket;
205
310
  try {
206
- const router = new plugins.typedrequest.TypedRouter();
207
- socket = await plugins.typedsocket.TypedSocket.createClient(router, `http://127.0.0.1:${portArg}`, {
208
- autoReconnect: false,
209
- maxRetries: 0,
210
- abortSignal: abortController.signal,
211
- });
212
- const request = socket.createTypedRequest('controller.status', undefined, { timeoutMs: timeoutMsArg, abortSignal: abortController.signal });
213
- return assertControllerStatus(await request.fire({}), expectationArg);
311
+ socket = await plugins.typedsocket.TypedSocket.createClient(new plugins.typedrequest.TypedRouter(), `http://127.0.0.1:${portArg}`, { autoReconnect: false, maxRetries: 0, abortSignal: signal });
312
+ return await socket.createTypedRequest(methodArg, undefined, { timeoutMs: optionsArg.timeoutMs, abortSignal: signal }).fire(requestArg);
214
313
  }
215
314
  finally {
216
- clearTimeout(timeout);
217
315
  await socket?.stop();
218
316
  }
219
317
  };
220
- export const tryQueryControllerStatus = async (portArg, expectationArg) => {
318
+ const requestManagedController = (portArg, controllerArg, methodArg, requestArg, optionsArg) => controllerManagementTransport(controllerArg) === 'http'
319
+ ? requestControllerManagement(portArg, methodArg, requestArg, optionsArg)
320
+ : requestControllerManagementOverSocket(portArg, methodArg, requestArg, optionsArg);
321
+ export const requestControllerUpgradePrepareBegin = async (portArg, controllerArg, tokenArg, targetVersionArg, gracePeriodMsArg) => {
322
+ const response = await requestManagedController(portArg, controllerArg, 'controller.upgrade.prepare.begin', { token: tokenArg, targetVersion: targetVersionArg, gracePeriodMs: gracePeriodMsArg }, { timeoutMs: controllerUpgradePrepareBeginRequestTimeoutMs });
323
+ if (!isPlainRecord(response)
324
+ || Object.keys(response).length !== 1
325
+ || response.accepted !== true)
326
+ throw new Error('The controller returned an invalid upgrade preparation response.');
327
+ return { accepted: true };
328
+ };
329
+ export const requestControllerUpgradeFinalize = async (portArg, controllerArg, tokenArg, modeArg, timeoutMsArg = 60_000) => {
330
+ const response = await requestManagedController(portArg, controllerArg, 'controller.upgrade.finalize', { token: tokenArg, mode: modeArg }, { timeoutMs: timeoutMsArg });
331
+ if (!isPlainRecord(response) || response.finalized !== true) {
332
+ throw new Error('The controller returned an invalid upgrade finalization response.');
333
+ }
334
+ const { continued, failed } = response;
335
+ if (typeof continued !== 'number' || !Number.isSafeInteger(continued) || continued < 0
336
+ || typeof failed !== 'number' || !Number.isSafeInteger(failed) || failed < 0)
337
+ throw new Error('The controller returned an invalid upgrade finalization response.');
338
+ return { finalized: true, continued, failed };
339
+ };
340
+ /**
341
+ * Reads a controller's status over the transport the query's declaration picks. The upgrade calls that follow take
342
+ * the status itself as their target, so from then on the controller's own declaration decides.
343
+ */
344
+ export const queryControllerStatus = async (portArg, queryArg, timeoutMsArg = 2_500) => assertControllerStatus(await requestManagedController(portArg, queryArg, 'controller.status', {}, { timeoutMs: timeoutMsArg }), queryArg);
345
+ export const tryQueryControllerStatus = async (portArg, queryArg) => {
221
346
  try {
222
- return await queryControllerStatus(portArg, expectationArg);
347
+ return await queryControllerStatus(portArg, queryArg);
223
348
  }
224
349
  catch {
225
350
  return undefined;
@@ -242,33 +367,16 @@ export const isLoopbackPortListening = async (portArg, timeoutMsArg = 500) => {
242
367
  socket.once('error', () => finish(false));
243
368
  });
244
369
  };
245
- export const requestControllerUpgradeLaunch = async (portArg, tokenArg, timeoutMsArg = 15_000) => {
246
- const abortController = new AbortController();
247
- const timeout = setTimeout(() => abortController.abort(), timeoutMsArg);
248
- let socket;
249
- try {
250
- const router = new plugins.typedrequest.TypedRouter();
251
- socket = await plugins.typedsocket.TypedSocket.createClient(router, `http://127.0.0.1:${portArg}`, {
252
- autoReconnect: false,
253
- maxRetries: 0,
254
- abortSignal: abortController.signal,
255
- });
256
- const response = await socket.createTypedRequest('controller.upgrade.launch', undefined, { timeoutMs: timeoutMsArg, abortSignal: abortController.signal }).fire({ token: tokenArg });
257
- if (!response
258
- || typeof response !== 'object'
259
- || response.accepted !== true
260
- || !Number.isSafeInteger(response.workerPid)
261
- || response.workerPid < 2
262
- || typeof response.logFilePath !== 'string'
263
- || !plugins.path.isAbsolute(response.logFilePath)) {
264
- throw new Error(`The controller returned an invalid ${currentCliName} upgrade launch response.`);
265
- }
266
- return response;
267
- }
268
- finally {
269
- clearTimeout(timeout);
270
- await socket?.stop();
271
- }
370
+ export const requestControllerUpgradeLaunch = async (portArg, controllerArg, tokenArg, timeoutMsArg = 15_000) => {
371
+ const response = await requestManagedController(portArg, controllerArg, 'controller.upgrade.launch', { token: tokenArg }, { timeoutMs: timeoutMsArg });
372
+ const invalid = new Error(`The controller returned an invalid ${currentCliName} upgrade launch response.`);
373
+ if (!isPlainRecord(response) || response.accepted !== true)
374
+ throw invalid;
375
+ const { workerPid, logFilePath } = response;
376
+ if (typeof workerPid !== 'number' || !Number.isSafeInteger(workerPid) || workerPid < 2
377
+ || typeof logFilePath !== 'string' || !plugins.path.isAbsolute(logFilePath))
378
+ throw invalid;
379
+ return { accepted: true, workerPid, logFilePath };
272
380
  };
273
381
  export const waitUntilControllerExited = async (optionsArg, timeoutMsArg) => {
274
382
  const deadline = Date.now() + timeoutMsArg;
@@ -391,4 +499,4 @@ export const stopRunningController = async (optionsArg) => {
391
499
  await stopVerifiedController(optionsArg);
392
500
  return 'signals';
393
501
  };
394
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jb250cm9sbGVybWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2NsYXNzZXMuY29udHJvbGxlcm1hbmFnZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUNMLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIseUJBQXlCLEdBTzFCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNMLCtCQUErQixFQUMvQiwrQkFBK0IsR0FDaEMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV0RSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2hGLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7QUFTN0UsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFVLENBQUM7QUFDdEYsc0ZBQXNGO0FBQ3RGLE1BQU0sOEJBQThCLEdBQWdEO0lBQ2xGLFFBQVEsRUFBRSxDQUFDO0lBQ1gsSUFBSSxFQUFFLENBQUM7SUFDUCxLQUFLLEVBQUUsRUFBRTtJQUNULE1BQU0sRUFBRSxFQUFFO0NBQ1gsQ0FBQztBQUNGLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLDZDQUE2QyxHQUFHLE1BQU0sQ0FBQztBQUVwRSxNQUFNLG1CQUFtQixHQUFHLENBQUMsU0FB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
502
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jb250cm9sbGVybWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2NsYXNzZXMuY29udHJvbGxlcm1hbmFnZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUNMLHdDQUF3QyxFQUN4QyxvQ0FBb0MsRUFDcEMscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qix5QkFBeUIsR0FRMUIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLCtCQUErQixHQUNoQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXRFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDaEYsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztBQVM3RTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxDQUFDLFFBQWlCLEVBQXNCLEVBQUUsQ0FBQyxDQUM5RixPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxDQUNoRixDQUFDO0FBcUJGLE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBVSxDQUFDO0FBQ3RGLHNGQUFzRjtBQUN0RixNQUFNLDhCQUE4QixHQUFnRDtJQUNsRixR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
@@ -50,9 +50,9 @@ export interface IInferenceGatewayOptions {
50
50
  usageLedger: IInferenceUsageLedger;
51
51
  /**
52
52
  * The confined listener's Unix socket, bound beside the loopback port and made this user's alone (0600, in a private
53
- * directory that holds nothing else). It accepts confined credentials alone and serves them the Claude pool's three
54
- * endpoints Claude Code uses (`confinedEndpoints`), exactly as the loopback listener serves them; unset, the gateway has
55
- * no confined listener and admits no confined credential.
53
+ * directory that holds nothing else). It accepts confined credentials alone and serves them the three endpoints Claude
54
+ * Code uses (`confinedEndpoints`) of their pool, the Claude or the ChatGPT pool, exactly as the loopback listener serves
55
+ * Claude Code on that pool; unset, the gateway has no confined listener and admits no confined credential.
56
56
  */
57
57
  confinedSocketPath?: string;
58
58
  }
@@ -106,8 +106,8 @@ export interface IInferenceGatewayClientOptions {
106
106
  */
107
107
  sessionScope?: string;
108
108
  /**
109
- * Where the credential is accepted; `loopback` when unset. A confined credential is a lease of the Claude pool, accepted
110
- * on the confined listener alone.
109
+ * Where the credential is accepted; `loopback` when unset. A confined credential is a lease of the Claude or the ChatGPT
110
+ * pool, accepted on the confined listener alone, and stays on the pool it was issued for.
111
111
  */
112
112
  route?: TInferenceGatewayRoute;
113
113
  }
@@ -161,7 +161,7 @@ export declare const inferencePaymentCause: (providerArg: TInferenceProvider, cr
161
161
  export declare const assertInferenceRoutingPolicy: (policyArg: IInferenceRoutingPolicy) => void;
162
162
  /**
163
163
  * Authenticated Responses and Messages endpoints with bounded, cancelable streaming, on a loopback listener and, for
164
- * confined credentials, a Unix socket that serves the Claude pool alone.
164
+ * confined credentials, a Unix socket that serves Claude Code's endpoints alone.
165
165
  */
166
166
  export declare class InferenceGateway {
167
167
  private readonly options;