@sentropic/h2a-runtime 0.98.6 → 0.98.7-rc.1
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/dist/attach.d.ts +2 -0
- package/dist/attach.d.ts.map +1 -1
- package/dist/attach.js +73 -6
- package/dist/attach.js.map +1 -1
- package/dist/auth-login.d.ts +24 -1
- package/dist/auth-login.d.ts.map +1 -1
- package/dist/auth-login.js +132 -4
- package/dist/auth-login.js.map +1 -1
- package/dist/central-mcp.d.ts +2 -0
- package/dist/central-mcp.d.ts.map +1 -1
- package/dist/central-mcp.js +90 -3
- package/dist/central-mcp.js.map +1 -1
- package/dist/cli-help-groups.js +1 -1
- package/dist/cli-help-groups.js.map +1 -1
- package/dist/crash-log.d.ts +112 -0
- package/dist/crash-log.d.ts.map +1 -0
- package/dist/crash-log.js +560 -0
- package/dist/crash-log.js.map +1 -0
- package/dist/gateway-host/live-declarations.d.ts +58 -0
- package/dist/gateway-host/live-declarations.d.ts.map +1 -0
- package/dist/gateway-host/live-declarations.js +423 -0
- package/dist/gateway-host/live-declarations.js.map +1 -0
- package/dist/gateway-host/live-registration.d.ts +162 -0
- package/dist/gateway-host/live-registration.d.ts.map +1 -0
- package/dist/gateway-host/live-registration.js +455 -0
- package/dist/gateway-host/live-registration.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +79 -1
- package/dist/index.js.map +1 -1
- package/dist/native-host.d.ts.map +1 -1
- package/dist/native-host.js +27 -5
- package/dist/native-host.js.map +1 -1
- package/dist/native-terminal/journal.d.ts +5 -0
- package/dist/native-terminal/journal.d.ts.map +1 -1
- package/dist/native-terminal/journal.js +28 -16
- package/dist/native-terminal/journal.js.map +1 -1
- package/dist/native-terminal/op.d.ts +13 -0
- package/dist/native-terminal/op.d.ts.map +1 -1
- package/dist/native-terminal/op.js +64 -5
- package/dist/native-terminal/op.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +79 -16
- package/dist/run.js.map +1 -1
- package/dist/terminal-reset.d.ts +104 -0
- package/dist/terminal-reset.d.ts.map +1 -0
- package/dist/terminal-reset.js +229 -0
- package/dist/terminal-reset.js.map +1 -0
- package/dist/tmux.d.ts +23 -3
- package/dist/tmux.d.ts.map +1 -1
- package/dist/tmux.js +47 -16
- package/dist/tmux.js.map +1 -1
- package/dist/vendor/engram-live/contracts.d.ts +208 -0
- package/dist/vendor/engram-live/contracts.js +558 -0
- package/dist/vendor/engram-live/integration.d.ts +73 -0
- package/dist/vendor/engram-live/integration.js +194 -0
- package/dist/vendor/engram-live/registration.d.ts +138 -0
- package/dist/vendor/engram-live/registration.js +360 -0
- package/package.json +2 -2
package/dist/attach.d.ts
CHANGED
|
@@ -32,6 +32,8 @@ export type ReconnectOptions = {
|
|
|
32
32
|
readonly maxDelayMs?: number;
|
|
33
33
|
/** Consecutive short-lived streams tolerated before giving up. */
|
|
34
34
|
readonly maxShortCycles?: number;
|
|
35
|
+
/** Reopen attempts per outage before declaring the stream lost. */
|
|
36
|
+
readonly maxAttempts?: number;
|
|
35
37
|
};
|
|
36
38
|
export type AttachResult = {
|
|
37
39
|
readonly close: () => Promise<void>;
|
package/dist/attach.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../src/attach.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../src/attach.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;CACvC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,mEAAmE;IACnE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAgBF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC,CAAC;AA+BF,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAqZ1E;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CACR,aAAa,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC,CACH,CAsBA;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAkBhC;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAUvD;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC7C,SAAS,GAAE,OAAO,KAAa,EAC/B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAyBnD;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAqBxE;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,OAAO,GAAG,YAAY,GAAG,SAAS,CAAC,CAoB7C;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,EACD,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAyCzB"}
|
package/dist/attach.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { authHeaders, DEFAULT_SESSION_TARGET } from "./config.js";
|
|
2
2
|
import { ensureConnected } from "./tunnel.js";
|
|
3
|
+
import { appendCrashLog, crashSignalName } from "./crash-log.js";
|
|
4
|
+
import { resetClientTerminal, restoreTtyState, saveTtyState, SIGNAL_NUMBERS, } from "./terminal-reset.js";
|
|
3
5
|
const DEFAULT_RECONNECT = {
|
|
4
6
|
minStreamMs: 1000,
|
|
5
7
|
baseDelayMs: 250,
|
|
6
8
|
maxDelayMs: 8000,
|
|
7
9
|
maxShortCycles: 10,
|
|
10
|
+
maxAttempts: 120,
|
|
8
11
|
};
|
|
9
12
|
const DEFAULT_INPUT_RETRY = {
|
|
10
13
|
maxAttempts: 6,
|
|
@@ -62,6 +65,7 @@ export async function attach(options) {
|
|
|
62
65
|
signal: controller.signal,
|
|
63
66
|
});
|
|
64
67
|
if (!sseResponse.ok || !sseResponse.body) {
|
|
68
|
+
appendCrashLog("attach", { event: "refusal", sessionId, reason: "sse-open-failed", detail: `${sseResponse.status} ${sseResponse.statusText}` });
|
|
65
69
|
throw new Error(`attach: SSE stream returned ${sseResponse.status} ${sseResponse.statusText}`);
|
|
66
70
|
}
|
|
67
71
|
let reader = sseResponse.body.getReader();
|
|
@@ -70,9 +74,16 @@ export async function attach(options) {
|
|
|
70
74
|
const finished = new Promise((resolve) => {
|
|
71
75
|
finishedResolve = resolve;
|
|
72
76
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
// rev351-2/3.2: the remote session drives the REAL client terminal via
|
|
78
|
+
// relayed VT bytes (plus raw stdin). Every close path — detach, remote
|
|
79
|
+
// exit, 404, give-up — must emit the VT reset and restore termios/raw,
|
|
80
|
+
// even when the live session keeps running server-side and emits no
|
|
81
|
+
// closing sequence of its own.
|
|
82
|
+
// rev351r2-2: shared save/restore home (terminal-reset.ts), no local copy.
|
|
83
|
+
const ttyState = saveTtyState(stdin);
|
|
84
|
+
const restoreClientTerminal = () => {
|
|
85
|
+
restoreTtyState(ttyState, stdin, () => resetClientTerminal(stdout));
|
|
86
|
+
};
|
|
76
87
|
if (stdin.isTTY)
|
|
77
88
|
stdin.setRawMode?.(true);
|
|
78
89
|
stdin.resume();
|
|
@@ -197,11 +208,26 @@ export async function attach(options) {
|
|
|
197
208
|
};
|
|
198
209
|
stdin.on("data", onStdin);
|
|
199
210
|
stdout.on?.("resize", onResize);
|
|
211
|
+
// Async relay: the event loop runs, so handlers CAN execute (unlike the
|
|
212
|
+
// blocking spawnSync wrappers). On a fatal signal, reset synchronously and
|
|
213
|
+
// preserve signal-death semantics via 128+n.
|
|
214
|
+
const signalHandlers = new Map();
|
|
215
|
+
const uninstallSignals = () => {
|
|
216
|
+
for (const [signal, handler] of signalHandlers) {
|
|
217
|
+
process.removeListener(signal, handler);
|
|
218
|
+
}
|
|
219
|
+
signalHandlers.clear();
|
|
220
|
+
};
|
|
200
221
|
let closed = false;
|
|
201
222
|
const close = async () => {
|
|
202
223
|
if (closed)
|
|
203
224
|
return;
|
|
204
225
|
closed = true;
|
|
226
|
+
// rev351r2-5: restore FIRST, before the drain wait below. Uninstalling
|
|
227
|
+
// the handlers and then waiting left a window where a signal killed
|
|
228
|
+
// without reset; the restore is idempotent, the wait is not.
|
|
229
|
+
restoreClientTerminal();
|
|
230
|
+
uninstallSignals();
|
|
205
231
|
if (detachTimer) {
|
|
206
232
|
clearTimeout(detachTimer);
|
|
207
233
|
detachTimer = null;
|
|
@@ -215,11 +241,33 @@ export async function attach(options) {
|
|
|
215
241
|
aborted = true;
|
|
216
242
|
controller.abort();
|
|
217
243
|
stdout.off?.("resize", onResize);
|
|
218
|
-
if (stdin.isTTY)
|
|
219
|
-
stdin.setRawMode?.(wasRaw);
|
|
220
244
|
stdin.pause();
|
|
221
245
|
finishedResolve();
|
|
222
246
|
};
|
|
247
|
+
for (const signal of ["SIGHUP", "SIGINT", "SIGQUIT", "SIGTERM"]) {
|
|
248
|
+
const number = SIGNAL_NUMBERS[signal] ?? 0;
|
|
249
|
+
const handler = () => {
|
|
250
|
+
if (closed) {
|
|
251
|
+
process.exit(128 + number);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
try {
|
|
255
|
+
restoreClientTerminal();
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
uninstallSignals();
|
|
259
|
+
try {
|
|
260
|
+
controller.abort();
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
// Best effort before exiting.
|
|
264
|
+
}
|
|
265
|
+
process.exit(128 + number);
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
signalHandlers.set(signal, handler);
|
|
269
|
+
process.on(signal, handler);
|
|
270
|
+
}
|
|
223
271
|
(async () => {
|
|
224
272
|
let buffer = "";
|
|
225
273
|
// Outer loop: stream → on unexpected end (network change / sleep / tunnel
|
|
@@ -257,6 +305,20 @@ export async function attach(options) {
|
|
|
257
305
|
}
|
|
258
306
|
}
|
|
259
307
|
else if (envelope.type === "terminal.exited") {
|
|
308
|
+
const exitedPayload = envelope.payload;
|
|
309
|
+
const exitedCode = typeof exitedPayload.exitCode === "number" && Number.isSafeInteger(exitedPayload.exitCode)
|
|
310
|
+
? exitedPayload.exitCode
|
|
311
|
+
: undefined;
|
|
312
|
+
const exitedSignal = crashSignalName(typeof exitedPayload.signal === "number" || typeof exitedPayload.signal === "string"
|
|
313
|
+
? exitedPayload.signal
|
|
314
|
+
: undefined);
|
|
315
|
+
appendCrashLog("attach", {
|
|
316
|
+
event: "sessionExit",
|
|
317
|
+
sessionId,
|
|
318
|
+
...(exitedCode !== undefined ? { exitCode: exitedCode } : {}),
|
|
319
|
+
...(exitedSignal ? { signal: exitedSignal } : {}),
|
|
320
|
+
detail: "terminal.exited",
|
|
321
|
+
});
|
|
260
322
|
await close();
|
|
261
323
|
return;
|
|
262
324
|
}
|
|
@@ -300,6 +362,7 @@ export async function attach(options) {
|
|
|
300
362
|
`(${futileCycles} times in a row, last one after ${lifetimeMs}ms) — giving up ` +
|
|
301
363
|
`instead of reconnecting in a loop. The session may still be alive: ` +
|
|
302
364
|
`retry with h2a attach ${sessionId}.\r\n`);
|
|
365
|
+
appendCrashLog("attach", { event: "refusal", sessionId, reason: "reconnect-give-up", detail: `${futileCycles} futile cycles, last stream ${lifetimeMs}ms` });
|
|
303
366
|
await close();
|
|
304
367
|
return;
|
|
305
368
|
}
|
|
@@ -317,7 +380,7 @@ export async function attach(options) {
|
|
|
317
380
|
stderr.write("\r\n[h2a] connection lost — reconnecting…\r\n");
|
|
318
381
|
buffer = "";
|
|
319
382
|
let reopened = false;
|
|
320
|
-
for (let attempt = 0; attempt <
|
|
383
|
+
for (let attempt = 0; attempt < reconnectCfg.maxAttempts && !closed; attempt++) {
|
|
321
384
|
try {
|
|
322
385
|
await ensureConnected(baseUrl, stderr);
|
|
323
386
|
const resp = await doFetch(joinUrl(baseUrl, `/sessions/${sessionId}/events`), {
|
|
@@ -326,6 +389,7 @@ export async function attach(options) {
|
|
|
326
389
|
});
|
|
327
390
|
if (resp.status === 404) {
|
|
328
391
|
stderr.write("[h2a] session ended\r\n");
|
|
392
|
+
appendCrashLog("attach", { event: "sessionExit", sessionId, reason: "http-404" });
|
|
329
393
|
await close();
|
|
330
394
|
return;
|
|
331
395
|
}
|
|
@@ -346,6 +410,9 @@ export async function attach(options) {
|
|
|
346
410
|
await new Promise((r) => setTimeout(r, 1000));
|
|
347
411
|
}
|
|
348
412
|
if (!reopened) {
|
|
413
|
+
// No child exited: the event stream would not reopen, so this attach
|
|
414
|
+
// ends. `exit` (not `childExit`) keeps the record honest.
|
|
415
|
+
appendCrashLog("attach", { event: "exit", sessionId, reason: "reconnect-failed", detail: "could not reopen the event stream" });
|
|
349
416
|
await close();
|
|
350
417
|
return;
|
|
351
418
|
}
|
package/dist/attach.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../src/attach.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../src/attach.ts"],"names":[],"mappings":"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"}
|
package/dist/auth-login.d.ts
CHANGED
|
@@ -5,5 +5,28 @@ export type LoginCommand = {
|
|
|
5
5
|
};
|
|
6
6
|
export declare function getLoginCommand(profile: CliProfile): LoginCommand | undefined;
|
|
7
7
|
export type RunInteractive = (cmd: LoginCommand) => Promise<number>;
|
|
8
|
-
export
|
|
8
|
+
export type InteractiveLoginDeps = {
|
|
9
|
+
readonly spawnImpl?: (command: string, args: ReadonlyArray<string>, options: {
|
|
10
|
+
stdio: "inherit";
|
|
11
|
+
}) => {
|
|
12
|
+
on(event: string, listener: (...args: never[]) => void): unknown;
|
|
13
|
+
kill?(signal?: NodeJS.Signals): boolean;
|
|
14
|
+
};
|
|
15
|
+
readonly reset?: () => void;
|
|
16
|
+
readonly stdin?: Pick<NodeJS.ReadStream, "isTTY" | "isRaw" | "setRawMode"> & {
|
|
17
|
+
readonly fd?: unknown;
|
|
18
|
+
};
|
|
19
|
+
readonly stdout?: {
|
|
20
|
+
isTTY?: boolean;
|
|
21
|
+
fd?: unknown;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* rev351-3.3: `h2a auth login` hands the REAL terminal to the CLI login flow
|
|
26
|
+
* over inherited stdio. Reset the VT modes and restore termios/raw on every
|
|
27
|
+
* exit path (clean exit, spawn error, child signal death mapped to 128+n).
|
|
28
|
+
* Async spawn: the event loop runs, so parent signals forward to the child,
|
|
29
|
+
* reset, then exit 128+n (like the native attach path).
|
|
30
|
+
*/
|
|
31
|
+
export declare function runInteractiveLogin(cmd: LoginCommand, deps?: InteractiveLoginDeps): Promise<number>;
|
|
9
32
|
//# sourceMappingURL=auth-login.d.ts.map
|
package/dist/auth-login.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-login.d.ts","sourceRoot":"","sources":["../src/auth-login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-login.d.ts","sourceRoot":"","sources":["../src/auth-login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAkBtD,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACtC,CAAC;AAEF,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,CAE7E;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AASpE,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,CACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,OAAO,EAAE;QAAE,KAAK,EAAE,SAAS,CAAA;KAAE,KAC1B;QACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC;QACjE,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;KACzC,CAAC;IACF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,GAAG,YAAY,CAAC,GAAG;QAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACrD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,YAAY,EACjB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAyHjB"}
|
package/dist/auth-login.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
+
import { resetClientTerminal, restoreTtyState, saveTtyState, SIGNAL_NUMBERS, } from "./terminal-reset.js";
|
|
2
3
|
/**
|
|
3
4
|
* The local enrollment command for each profile that ships a non-interactive
|
|
4
5
|
* (or terminal-driven) login. Profiles without an entry authenticate through
|
|
@@ -11,11 +12,138 @@ const PROFILE_LOGIN = {
|
|
|
11
12
|
export function getLoginCommand(profile) {
|
|
12
13
|
return PROFILE_LOGIN[profile];
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
+
/**
|
|
16
|
+
* rev351r2-4: how long the login waits for a forwarded parent signal to take
|
|
17
|
+
* effect before escalating to SIGKILL. Cooperative children die in
|
|
18
|
+
* milliseconds; only a signal-ignoring child ever sees the SIGKILL.
|
|
19
|
+
*/
|
|
20
|
+
const LOGIN_SIGNAL_GRACE_MS = 500;
|
|
21
|
+
/**
|
|
22
|
+
* rev351-3.3: `h2a auth login` hands the REAL terminal to the CLI login flow
|
|
23
|
+
* over inherited stdio. Reset the VT modes and restore termios/raw on every
|
|
24
|
+
* exit path (clean exit, spawn error, child signal death mapped to 128+n).
|
|
25
|
+
* Async spawn: the event loop runs, so parent signals forward to the child,
|
|
26
|
+
* reset, then exit 128+n (like the native attach path).
|
|
27
|
+
*/
|
|
28
|
+
export function runInteractiveLogin(cmd, deps = {}) {
|
|
29
|
+
const spawnImpl = deps.spawnImpl ??
|
|
30
|
+
((command, args, options) => spawn(command, [...args], options));
|
|
31
|
+
const doReset = deps.reset ??
|
|
32
|
+
(() => {
|
|
33
|
+
resetClientTerminal(deps.stdout ?? process.stdout);
|
|
34
|
+
});
|
|
35
|
+
const stdin = deps.stdin ?? process.stdin;
|
|
36
|
+
// rev351r2-2: shared save/restore home (terminal-reset.ts), no local copy.
|
|
37
|
+
const ttyState = saveTtyState(stdin);
|
|
38
|
+
const restore = () => {
|
|
39
|
+
restoreTtyState(ttyState, stdin, doReset);
|
|
40
|
+
};
|
|
15
41
|
return new Promise((resolve) => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
42
|
+
let settled = false;
|
|
43
|
+
// rev351r2-4: set once a parent signal arrives; the child `close` below
|
|
44
|
+
// then exits 128+n instead of resolving the login promise, and `finish`
|
|
45
|
+
// stays out of the way so a late spawn error cannot resolve after exit.
|
|
46
|
+
let signaled = null;
|
|
47
|
+
let graceTimer = null;
|
|
48
|
+
const signalHandlers = new Map();
|
|
49
|
+
const uninstallSignals = () => {
|
|
50
|
+
for (const [signal, handler] of signalHandlers) {
|
|
51
|
+
process.removeListener(signal, handler);
|
|
52
|
+
}
|
|
53
|
+
signalHandlers.clear();
|
|
54
|
+
};
|
|
55
|
+
const exitAfterSignal = () => {
|
|
56
|
+
const pending = signaled;
|
|
57
|
+
if (!pending)
|
|
58
|
+
return;
|
|
59
|
+
signaled = null;
|
|
60
|
+
if (graceTimer) {
|
|
61
|
+
clearTimeout(graceTimer);
|
|
62
|
+
graceTimer = null;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
restore();
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
uninstallSignals();
|
|
69
|
+
process.exit(128 + pending.number);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const finish = (code) => {
|
|
73
|
+
if (settled || signaled)
|
|
74
|
+
return;
|
|
75
|
+
settled = true;
|
|
76
|
+
uninstallSignals();
|
|
77
|
+
restore();
|
|
78
|
+
resolve(code);
|
|
79
|
+
};
|
|
80
|
+
let child;
|
|
81
|
+
try {
|
|
82
|
+
child = spawnImpl(cmd.command, [...cmd.args], { stdio: "inherit" });
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
finish(127);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const childEvents = child;
|
|
89
|
+
for (const signal of ["SIGHUP", "SIGINT", "SIGQUIT", "SIGTERM"]) {
|
|
90
|
+
const handler = () => {
|
|
91
|
+
if (signaled) {
|
|
92
|
+
// Second signal during the grace wait: escalate and leave at once.
|
|
93
|
+
if (graceTimer) {
|
|
94
|
+
clearTimeout(graceTimer);
|
|
95
|
+
graceTimer = null;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
child?.kill?.("SIGKILL");
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Best effort escalation before exiting.
|
|
102
|
+
}
|
|
103
|
+
exitAfterSignal();
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
signaled = { number: SIGNAL_NUMBERS[signal] ?? 0 };
|
|
107
|
+
try {
|
|
108
|
+
child?.kill?.(signal);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// Best effort forwarding before waiting for the child.
|
|
112
|
+
}
|
|
113
|
+
if (!signaled)
|
|
114
|
+
return;
|
|
115
|
+
// rev351r2-4: wait for the forwarded signal to take effect instead of
|
|
116
|
+
// exiting at once — a child that ignores it (trap '' TERM) would
|
|
117
|
+
// otherwise survive orphaned and scribble after the prompt returns.
|
|
118
|
+
graceTimer = setTimeout(() => {
|
|
119
|
+
graceTimer = null;
|
|
120
|
+
try {
|
|
121
|
+
child?.kill?.("SIGKILL");
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Best effort escalation; the close below exits.
|
|
125
|
+
}
|
|
126
|
+
// A real child always reports close after SIGKILL; never hang the
|
|
127
|
+
// login if it somehow does not.
|
|
128
|
+
graceTimer = setTimeout(exitAfterSignal, LOGIN_SIGNAL_GRACE_MS);
|
|
129
|
+
graceTimer.unref?.();
|
|
130
|
+
}, LOGIN_SIGNAL_GRACE_MS);
|
|
131
|
+
graceTimer.unref?.();
|
|
132
|
+
};
|
|
133
|
+
signalHandlers.set(signal, handler);
|
|
134
|
+
process.on(signal, handler);
|
|
135
|
+
}
|
|
136
|
+
childEvents.on("error", () => finish(127));
|
|
137
|
+
childEvents.on("close", (code, signal) => {
|
|
138
|
+
if (signaled) {
|
|
139
|
+
exitAfterSignal();
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (signal)
|
|
143
|
+
finish(128 + (SIGNAL_NUMBERS[signal] ?? 0));
|
|
144
|
+
else
|
|
145
|
+
finish(code ?? 1);
|
|
146
|
+
});
|
|
19
147
|
});
|
|
20
148
|
}
|
|
21
149
|
//# sourceMappingURL=auth-login.js.map
|
package/dist/auth-login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-login.js","sourceRoot":"","sources":["../src/auth-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-login.js","sourceRoot":"","sources":["../src/auth-login.ts"],"names":[],"mappings":"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"}
|
package/dist/central-mcp.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export type CentralMcpPreparation = Readonly<{
|
|
|
6
6
|
status: "degraded";
|
|
7
7
|
reason: string;
|
|
8
8
|
}>;
|
|
9
|
+
/** Raw (unstructured) central MCP server output. Read by `h2a logs`, rotated at spawn. */
|
|
10
|
+
export declare function resolveCentralMcpLogPath(): string;
|
|
9
11
|
/**
|
|
10
12
|
* Ensure the persisted central endpoint is served. A live matching marker is
|
|
11
13
|
* reused; dead registrations are reclaimed by the existing foreground serve
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"central-mcp.d.ts","sourceRoot":"","sources":["../src/central-mcp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"central-mcp.d.ts","sourceRoot":"","sources":["../src/central-mcp.ts"],"names":[],"mappings":"AA4DA,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,CAAC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GACrE,QAAQ,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAuDrD,0FAA0F;AAC1F,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAuFD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,GAAE,QAAQ,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAM,GACxC,OAAO,CAAC,QAAQ,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,CAAC,CA6DzE;AA+ED,mFAAmF;AACnF,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,QAAQ,CAAC;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAiC9C;AAED,2FAA2F;AAC3F,wBAAsB,2BAA2B,CAC/C,OAAO,GAAE,QAAQ,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAM,GACxC,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAU5C"}
|
package/dist/central-mcp.js
CHANGED
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
* existing foreground command as a detached child when necessary.
|
|
6
6
|
*/
|
|
7
7
|
import { spawn } from "node:child_process";
|
|
8
|
-
import { chmodSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
8
|
+
import { chmodSync, closeSync, constants, existsSync, mkdirSync, openSync, readFileSync, readSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
9
9
|
import { homedir } from "node:os";
|
|
10
10
|
import { dirname, join } from "node:path";
|
|
11
11
|
import { getH2aConfig, resolveConfigPath, setH2aConfig } from "./config.js";
|
|
12
|
+
import { appendCrashLog, MAX_CRASH_LOG_BYTES } from "./crash-log.js";
|
|
12
13
|
const CENTRAL_PORT_BASE = 47_000;
|
|
13
14
|
const CENTRAL_PORT_SPAN = 10_000;
|
|
14
15
|
const CENTRAL_START_TIMEOUT_MS = 10_000;
|
|
@@ -57,17 +58,84 @@ function configuredCentralEndpoint() {
|
|
|
57
58
|
});
|
|
58
59
|
return endpoint;
|
|
59
60
|
}
|
|
61
|
+
/** Raw (unstructured) central MCP server output. Read by `h2a logs`, rotated at spawn. */
|
|
62
|
+
export function resolveCentralMcpLogPath() {
|
|
63
|
+
return join(dirname(resolveConfigPath()), "mcp-central.log");
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Cap a rotated raw log to its last bound bytes, line-aligned, mode
|
|
67
|
+
* preserved. Reads the tail window positionally — the (possibly huge)
|
|
68
|
+
* rotation is never loaded whole.
|
|
69
|
+
*/
|
|
70
|
+
function boundRawLogTail(path) {
|
|
71
|
+
let fd;
|
|
72
|
+
try {
|
|
73
|
+
const size = statSync(path).size;
|
|
74
|
+
if (size <= MAX_CRASH_LOG_BYTES)
|
|
75
|
+
return;
|
|
76
|
+
fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
77
|
+
const tail = Buffer.alloc(MAX_CRASH_LOG_BYTES);
|
|
78
|
+
const start = size - MAX_CRASH_LOG_BYTES;
|
|
79
|
+
for (let offset = 0; offset < tail.length;) {
|
|
80
|
+
const read = readSync(fd, tail, offset, tail.length - offset, start + offset);
|
|
81
|
+
if (read <= 0)
|
|
82
|
+
break;
|
|
83
|
+
offset += read;
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
closeSync(fd);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
/* fall through to the truncation below */
|
|
90
|
+
}
|
|
91
|
+
fd = undefined;
|
|
92
|
+
const cut = tail.indexOf(0x0a);
|
|
93
|
+
writeFileSync(path, cut < 0 ? tail : tail.subarray(cut + 1));
|
|
94
|
+
chmodSync(path, 0o600);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
/* best-effort: bounding never blocks the spawn below */
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
if (fd !== undefined) {
|
|
101
|
+
try {
|
|
102
|
+
closeSync(fd);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
/* bounding never throws */
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
60
110
|
function centralLogFile() {
|
|
61
|
-
const path =
|
|
111
|
+
const path = resolveCentralMcpLogPath();
|
|
62
112
|
mkdirSync(dirname(path), { recursive: true });
|
|
113
|
+
// Bounded at spawn: rotate the raw server output instead of growing it
|
|
114
|
+
// forever, and cap the rotation so a long-running server cannot leave an
|
|
115
|
+
// unbounded `.1` behind either. Output written between spawns is still
|
|
116
|
+
// unbounded (only the server could pace that); `h2a logs` shows its tail.
|
|
117
|
+
try {
|
|
118
|
+
if (existsSync(path) && statSync(path).size >= MAX_CRASH_LOG_BYTES) {
|
|
119
|
+
try {
|
|
120
|
+
unlinkSync(`${path}.1`);
|
|
121
|
+
}
|
|
122
|
+
catch { /* missing rotation is fine */ }
|
|
123
|
+
renameSync(path, `${path}.1`);
|
|
124
|
+
boundRawLogTail(`${path}.1`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch { /* rotation is best-effort; the spawn below still proceeds */ }
|
|
63
128
|
return path;
|
|
64
129
|
}
|
|
65
130
|
async function waitForCentralStart(core, endpoint, spawnFailure) {
|
|
66
131
|
const deadline = Date.now() + CENTRAL_START_TIMEOUT_MS;
|
|
67
132
|
while (Date.now() < deadline) {
|
|
68
133
|
const failure = spawnFailure();
|
|
69
|
-
if (failure)
|
|
134
|
+
if (failure) {
|
|
135
|
+
// The server child never started: a startup failure, not a child exit.
|
|
136
|
+
appendCrashLog("mcp-server", { event: "startupError", reason: "spawn-failed", detail: failure.message });
|
|
70
137
|
throw failure;
|
|
138
|
+
}
|
|
71
139
|
const ping = await core.centralMcpPing(endpoint, CENTRAL_START_POLL_MS);
|
|
72
140
|
if (ping.kind === "generation") {
|
|
73
141
|
const marker = core.readCentralMcpMarker();
|
|
@@ -77,6 +145,9 @@ async function waitForCentralStart(core, endpoint, spawnFailure) {
|
|
|
77
145
|
}
|
|
78
146
|
await delay(CENTRAL_START_POLL_MS);
|
|
79
147
|
}
|
|
148
|
+
// No child exited: the launcher gave up waiting, so `exit` (not
|
|
149
|
+
// `childExit`) keeps the record honest.
|
|
150
|
+
appendCrashLog("mcp-server", { event: "exit", reason: "readiness-timeout", detail: endpoint });
|
|
80
151
|
throw new Error(`central MCP did not become ready at ${endpoint} within ${CENTRAL_START_TIMEOUT_MS}ms`);
|
|
81
152
|
}
|
|
82
153
|
/**
|
|
@@ -93,12 +164,14 @@ export async function ensureCentralMcp(options = {}) {
|
|
|
93
164
|
if (marker) {
|
|
94
165
|
const ping = await core.centralMcpPing(marker.endpoint);
|
|
95
166
|
if (ping.kind === "ambiguous") {
|
|
167
|
+
appendCrashLog("mcp-server", { event: "refusal", instanceId: marker.generation, reason: "ambiguous-liveness", detail: marker.endpoint });
|
|
96
168
|
throw new Error(`central MCP liveness at ${marker.endpoint} is ambiguous; refusing to start another server`);
|
|
97
169
|
}
|
|
98
170
|
if (ping.kind === "generation") {
|
|
99
171
|
if (marker.endpoint === endpoint && ping.generation === marker.generation) {
|
|
100
172
|
return { endpoint, generation: marker.generation };
|
|
101
173
|
}
|
|
174
|
+
appendCrashLog("mcp-server", { event: "refusal", instanceId: marker.generation, reason: "marker-listener-mismatch", detail: marker.endpoint });
|
|
102
175
|
throw new Error(`central MCP marker/listener mismatch (${marker.endpoint}, generation ${marker.generation}); refusing to replace a live server`);
|
|
103
176
|
}
|
|
104
177
|
}
|
|
@@ -119,6 +192,20 @@ export async function ensureCentralMcp(options = {}) {
|
|
|
119
192
|
child.once("error", (error) => {
|
|
120
193
|
spawnError = error;
|
|
121
194
|
});
|
|
195
|
+
// A post-readiness crash leaves a structured record while this launcher
|
|
196
|
+
// is still alive. (Once the launcher exits, only the raw server output
|
|
197
|
+
// in mcp-central.log witnesses a later death — see `h2a logs`.)
|
|
198
|
+
child.once("exit", (code, signal) => {
|
|
199
|
+
if (code === 0 || (code === null && signal === null))
|
|
200
|
+
return;
|
|
201
|
+
appendCrashLog("mcp-server", {
|
|
202
|
+
event: "childExit",
|
|
203
|
+
reason: "server-exit",
|
|
204
|
+
...(typeof code === "number" ? { exitCode: code } : {}),
|
|
205
|
+
...(typeof signal === "string" && signal.length > 0 ? { signal } : {}),
|
|
206
|
+
detail: `central MCP server exited${typeof signal === "string" && signal.length > 0 ? ` on ${signal}` : ""}`,
|
|
207
|
+
});
|
|
208
|
+
});
|
|
122
209
|
child.unref();
|
|
123
210
|
}
|
|
124
211
|
finally {
|