@groundnuty/macf-channel-server 0.2.41 → 0.2.43
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/alive-ticker.d.ts +31 -0
- package/dist/alive-ticker.d.ts.map +1 -0
- package/dist/alive-ticker.js +36 -0
- package/dist/alive-ticker.js.map +1 -0
- package/dist/crash-handlers.d.ts +58 -0
- package/dist/crash-handlers.d.ts.map +1 -0
- package/dist/crash-handlers.js +97 -0
- package/dist/crash-handlers.js.map +1 -0
- package/dist/forensic-log.d.ts +36 -0
- package/dist/forensic-log.d.ts.map +1 -0
- package/dist/forensic-log.js +93 -0
- package/dist/forensic-log.js.map +1 -0
- package/dist/lifecycle.d.ts +30 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +28 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/server.js +88 -5
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Periodic "alive" tick (groundnuty/macf#642).
|
|
3
|
+
*
|
|
4
|
+
* Writes a heartbeat line to the forensic log every 60s. The point is NOT the
|
|
5
|
+
* line itself but its absence: when the channel-server dies a SILENT death — an
|
|
6
|
+
* OOM-kill, SIGKILL, or power loss where no crash handler or shutdown handler
|
|
7
|
+
* ever runs — the forensic log simply stops. The last `alive` line then bounds
|
|
8
|
+
* the death to a ≤60s window, the difference between "we know roughly when it
|
|
9
|
+
* died" and "no signal at all".
|
|
10
|
+
*
|
|
11
|
+
* Lifecycle MIRRORS `createRegistryHeartbeat` / `createOtelReachabilityProbe`:
|
|
12
|
+
* an `unref()`'d `setInterval` that can never pin the event loop open, plus an
|
|
13
|
+
* idempotent `stop()`. The tick is wrapped best-effort so a logger throw (disk
|
|
14
|
+
* full) can never escape and crash the process via an uncaught timer exception.
|
|
15
|
+
*/
|
|
16
|
+
import type { Logger } from '@groundnuty/macf-core';
|
|
17
|
+
import type { LifecycleTracker } from './lifecycle.js';
|
|
18
|
+
export declare const DEFAULT_ALIVE_TICK_INTERVAL_MS = 60000;
|
|
19
|
+
export interface AliveTicker {
|
|
20
|
+
/** Start the periodic tick (no-op if already started). */
|
|
21
|
+
readonly start: () => void;
|
|
22
|
+
/** Clear the interval (idempotent; safe before start). */
|
|
23
|
+
readonly stop: () => void;
|
|
24
|
+
}
|
|
25
|
+
export declare function createAliveTicker(opts: {
|
|
26
|
+
readonly logger: Logger;
|
|
27
|
+
readonly lifecycle: Pick<LifecycleTracker, 'snapshot'>;
|
|
28
|
+
/** Cadence in ms; default 60s. */
|
|
29
|
+
readonly intervalMs?: number;
|
|
30
|
+
}): AliveTicker;
|
|
31
|
+
//# sourceMappingURL=alive-ticker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alive-ticker.d.ts","sourceRoot":"","sources":["../src/alive-ticker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,eAAO,MAAM,8BAA8B,QAAS,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACvD,kCAAkC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,WAAW,CAiCd"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export const DEFAULT_ALIVE_TICK_INTERVAL_MS = 60_000;
|
|
2
|
+
export function createAliveTicker(opts) {
|
|
3
|
+
const { logger, lifecycle } = opts;
|
|
4
|
+
const intervalMs = opts.intervalMs ?? DEFAULT_ALIVE_TICK_INTERVAL_MS;
|
|
5
|
+
let timer = null;
|
|
6
|
+
function tick() {
|
|
7
|
+
try {
|
|
8
|
+
const snap = lifecycle.snapshot();
|
|
9
|
+
logger.info('alive', {
|
|
10
|
+
phase: snap.phase,
|
|
11
|
+
uptime_ms: snap.uptime_ms,
|
|
12
|
+
pid: process.pid,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// Best-effort: a logger throw (e.g. disk full) must never escape a timer
|
|
17
|
+
// callback and become an uncaughtException. The next tick retries.
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
start() {
|
|
22
|
+
if (timer !== null)
|
|
23
|
+
return;
|
|
24
|
+
timer = setInterval(tick, intervalMs);
|
|
25
|
+
// Never let the alive-tick interval keep the process alive.
|
|
26
|
+
timer.unref();
|
|
27
|
+
},
|
|
28
|
+
stop() {
|
|
29
|
+
if (timer !== null) {
|
|
30
|
+
clearInterval(timer);
|
|
31
|
+
timer = null;
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=alive-ticker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alive-ticker.js","sourceRoot":"","sources":["../src/alive-ticker.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC;AASrD,MAAM,UAAU,iBAAiB,CAAC,IAKjC;IACC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,8BAA8B,CAAC;IACrE,IAAI,KAAK,GAA0C,IAAI,CAAC;IAExD,SAAS,IAAI;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,yEAAyE;YACzE,mEAAmE;QACrE,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK;YACH,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO;YAC3B,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACtC,4DAA4D;YAC5D,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,IAAI;YACF,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,aAAa,CAAC,KAAK,CAAC,CAAC;gBACrB,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Top-level crash handlers (groundnuty/macf#642).
|
|
3
|
+
*
|
|
4
|
+
* The channel-server previously had NO `uncaughtException` /
|
|
5
|
+
* `unhandledRejection` handlers — only `shutdown.ts`'s SIGTERM/SIGINT/stdin
|
|
6
|
+
* paths and the `main().catch` bootstrap guard. So an exception thrown outside
|
|
7
|
+
* an awaited boundary, or a rejected promise nobody awaited, would terminate
|
|
8
|
+
* the process via Node's default handler with (at best) an unformatted stderr
|
|
9
|
+
* dump — and stderr is exactly the channel Claude Code stops draining under
|
|
10
|
+
* load. The result: a silent death with no forensic trail.
|
|
11
|
+
*
|
|
12
|
+
* These handlers close that gap. On a fatal uncaught error they:
|
|
13
|
+
* 1. log the full error + stack + last-known lifecycle phase to the forensic
|
|
14
|
+
* FILE logger AND stderr (belt-and-suspenders — either may be the only
|
|
15
|
+
* surviving channel),
|
|
16
|
+
* 2. attempt a graceful registry deregister via the shutdown `cleanup`, but
|
|
17
|
+
* behind a HARD TIMEOUT so a wedged cleanup can never hang the handler,
|
|
18
|
+
* 3. `process.exit(1)`.
|
|
19
|
+
*
|
|
20
|
+
* Transport-independent: nothing here assumes the MCP stdio mount — it works
|
|
21
|
+
* identically for a future HTTP/SSE transport. Every dependency is injectable
|
|
22
|
+
* for tests; production wires `process.on` / `process.exit` / `process.stderr`.
|
|
23
|
+
*/
|
|
24
|
+
import type { Logger } from '@groundnuty/macf-core';
|
|
25
|
+
import type { LifecycleTracker } from './lifecycle.js';
|
|
26
|
+
/**
|
|
27
|
+
* Hard cap on the graceful-deregister attempt inside a crash handler. The
|
|
28
|
+
* process is already dying; we give the deregister a bounded best-effort window
|
|
29
|
+
* then exit regardless, so a wedged registry call can never strand the handler.
|
|
30
|
+
*/
|
|
31
|
+
export declare const DEFAULT_CRASH_DEREGISTER_TIMEOUT_MS = 5000;
|
|
32
|
+
export type CrashKind = 'uncaught_exception' | 'unhandled_rejection';
|
|
33
|
+
export interface RegisterCrashHandlersDeps {
|
|
34
|
+
readonly logger: Logger;
|
|
35
|
+
readonly lifecycle: Pick<LifecycleTracker, 'snapshot'>;
|
|
36
|
+
/**
|
|
37
|
+
* Returns the shutdown `cleanup` (instance-id-guarded deregister + server
|
|
38
|
+
* stop) if it has been wired yet, else `undefined`. A getter — not the
|
|
39
|
+
* function directly — because a crash can fire during early startup BEFORE
|
|
40
|
+
* `registerShutdownHandler` has run, in which case there is nothing to
|
|
41
|
+
* deregister and the handler skips cleanup.
|
|
42
|
+
*/
|
|
43
|
+
readonly getCleanup?: () => (() => Promise<unknown>) | undefined;
|
|
44
|
+
/** Hard deregister timeout (ms); defaults to {@link DEFAULT_CRASH_DEREGISTER_TIMEOUT_MS}. */
|
|
45
|
+
readonly deregisterTimeoutMs?: number;
|
|
46
|
+
/** Injectable for tests; defaults to `process.exit`. */
|
|
47
|
+
readonly exit?: (code: number) => void;
|
|
48
|
+
/** Injectable for tests; defaults to `process.stderr.write`. */
|
|
49
|
+
readonly stderrWrite?: (msg: string) => void;
|
|
50
|
+
/** Injectable for tests; defaults to `process.on`. */
|
|
51
|
+
readonly register?: (event: 'uncaughtException' | 'unhandledRejection', handler: (err: unknown) => void) => void;
|
|
52
|
+
}
|
|
53
|
+
export interface CrashHandlers {
|
|
54
|
+
/** The shared handler — exported so tests can drive it deterministically. */
|
|
55
|
+
readonly handle: (kind: CrashKind, err: unknown) => Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
export declare function registerCrashHandlers(deps: RegisterCrashHandlersDeps): CrashHandlers;
|
|
58
|
+
//# sourceMappingURL=crash-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crash-handlers.d.ts","sourceRoot":"","sources":["../src/crash-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,mCAAmC,OAAQ,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;AAErE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACvD;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IACjE,6FAA6F;IAC7F,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,wDAAwD;IACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,gEAAgE;IAChE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,sDAAsD;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAClB,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,EACjD,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,KAC5B,IAAI,CAAC;CACX;AAED,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,yBAAyB,GAAG,aAAa,CA2GpF"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hard cap on the graceful-deregister attempt inside a crash handler. The
|
|
3
|
+
* process is already dying; we give the deregister a bounded best-effort window
|
|
4
|
+
* then exit regardless, so a wedged registry call can never strand the handler.
|
|
5
|
+
*/
|
|
6
|
+
export const DEFAULT_CRASH_DEREGISTER_TIMEOUT_MS = 5_000;
|
|
7
|
+
export function registerCrashHandlers(deps) {
|
|
8
|
+
const timeoutMs = deps.deregisterTimeoutMs ?? DEFAULT_CRASH_DEREGISTER_TIMEOUT_MS;
|
|
9
|
+
const exit = deps.exit ?? ((code) => { process.exit(code); });
|
|
10
|
+
const stderrWrite = deps.stderrWrite ?? ((msg) => { process.stderr.write(msg); });
|
|
11
|
+
const register = deps.register ??
|
|
12
|
+
((event, handler) => {
|
|
13
|
+
process.on(event, handler);
|
|
14
|
+
});
|
|
15
|
+
let handling = false;
|
|
16
|
+
function safeLogError(event, data) {
|
|
17
|
+
try {
|
|
18
|
+
deps.logger.error(event, data);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// The file sink itself failed (e.g. disk full) — stderr below is the
|
|
22
|
+
// backstop. Never let the diagnostic emitter mask the crash.
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function safeStderr(msg) {
|
|
26
|
+
try {
|
|
27
|
+
stderrWrite(msg);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Nothing left — stderr is gone too. Swallow so we still reach exit().
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function runCleanupWithTimeout(cleanup) {
|
|
34
|
+
let timer;
|
|
35
|
+
try {
|
|
36
|
+
const outcome = await Promise.race([
|
|
37
|
+
cleanup().then(() => ({ kind: 'done' }), (error) => ({ kind: 'failed', error })),
|
|
38
|
+
new Promise((resolve) => {
|
|
39
|
+
timer = setTimeout(() => resolve({ kind: 'timeout' }), timeoutMs);
|
|
40
|
+
timer.unref?.();
|
|
41
|
+
}),
|
|
42
|
+
]);
|
|
43
|
+
if (outcome.kind === 'timeout') {
|
|
44
|
+
safeLogError('crash_cleanup_timeout', { timeout_ms: timeoutMs });
|
|
45
|
+
safeStderr(`macf-channel-server: crash cleanup exceeded ${String(timeoutMs)}ms — ` +
|
|
46
|
+
'exiting without a confirmed clean deregister.\n');
|
|
47
|
+
}
|
|
48
|
+
else if (outcome.kind === 'failed') {
|
|
49
|
+
safeLogError('crash_cleanup_failed', {
|
|
50
|
+
error: outcome.error instanceof Error ? outcome.error.message : String(outcome.error),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
if (timer !== undefined)
|
|
56
|
+
clearTimeout(timer);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function handle(kind, err) {
|
|
60
|
+
if (handling) {
|
|
61
|
+
// A crash WHILE handling a crash — don't loop or re-run cleanup; force exit.
|
|
62
|
+
safeStderr(`macf-channel-server: re-entrant ${kind} during crash handling — forcing exit.\n`);
|
|
63
|
+
exit(1);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
handling = true;
|
|
67
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
68
|
+
const stack = err instanceof Error ? (err.stack ?? '') : '';
|
|
69
|
+
const snap = deps.lifecycle.snapshot();
|
|
70
|
+
// File-logger half (load-bearing — survives a non-draining stdout pipe).
|
|
71
|
+
safeLogError(kind, {
|
|
72
|
+
error,
|
|
73
|
+
stack,
|
|
74
|
+
lifecycle_phase: snap.phase,
|
|
75
|
+
uptime_ms: snap.uptime_ms,
|
|
76
|
+
pid: process.pid,
|
|
77
|
+
});
|
|
78
|
+
// stderr half (loud — the file sink may have failed; either may be the
|
|
79
|
+
// only surviving channel).
|
|
80
|
+
safeStderr(`macf-channel-server FATAL ${kind}: ${error}\n${stack}\n` +
|
|
81
|
+
` lifecycle=${snap.phase} uptime_ms=${String(snap.uptime_ms)} pid=${String(process.pid)}\n`);
|
|
82
|
+
// Best-effort graceful deregister, bounded by a hard timeout.
|
|
83
|
+
const cleanup = deps.getCleanup?.();
|
|
84
|
+
if (cleanup !== undefined) {
|
|
85
|
+
await runCleanupWithTimeout(cleanup);
|
|
86
|
+
}
|
|
87
|
+
exit(1);
|
|
88
|
+
}
|
|
89
|
+
register('uncaughtException', (err) => {
|
|
90
|
+
void handle('uncaught_exception', err);
|
|
91
|
+
});
|
|
92
|
+
register('unhandledRejection', (reason) => {
|
|
93
|
+
void handle('unhandled_rejection', reason);
|
|
94
|
+
});
|
|
95
|
+
return { handle };
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=crash-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crash-handlers.js","sourceRoot":"","sources":["../src/crash-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Logger } from '@groundnuty/macf-core';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the effective forensic-log path.
|
|
4
|
+
*
|
|
5
|
+
* 1. explicit, non-empty `MACF_LOG_PATH` → used as-is (back-compat).
|
|
6
|
+
* 2. `$XDG_STATE_HOME/macf/<agentName>-channel.log`
|
|
7
|
+
* 3. `$HOME/.local/state/macf/<agentName>-channel.log`
|
|
8
|
+
* 4. `<os-tmpdir>/macf/<agentName>-channel.log` (last-ditch — always writable)
|
|
9
|
+
*
|
|
10
|
+
* Pure: no filesystem side effects (the caller's logger creates parent dirs).
|
|
11
|
+
* `env` is injectable for tests.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveForensicLogPath(opts: {
|
|
14
|
+
readonly agentName: string;
|
|
15
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
16
|
+
}): string;
|
|
17
|
+
export interface ForensicLogger {
|
|
18
|
+
/** The structured logger (file sink, or stderr-only if the file failed). */
|
|
19
|
+
readonly logger: Logger;
|
|
20
|
+
/** The resolved forensic-log path (even if the file sink failed to open). */
|
|
21
|
+
readonly logPath: string;
|
|
22
|
+
/** Whether the file sink is active (false → degraded to stderr-only). */
|
|
23
|
+
readonly fileActive: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build the channel-server's forensic logger. Resolves the path, then attempts
|
|
27
|
+
* a real file logger; on any failure to open the file sink (unwritable dir,
|
|
28
|
+
* etc.) it logs a LOUD stderr warning and degrades to a stderr-only logger so
|
|
29
|
+
* the server still starts and still produces *some* trail.
|
|
30
|
+
*/
|
|
31
|
+
export declare function createForensicLogger(opts: {
|
|
32
|
+
readonly agentName: string;
|
|
33
|
+
readonly debug: boolean;
|
|
34
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
35
|
+
}): ForensicLogger;
|
|
36
|
+
//# sourceMappingURL=forensic-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forensic-log.d.ts","sourceRoot":"","sources":["../src/forensic-log.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC,GAAG,MAAM,CAOT;AAyBD,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC,GAAG,cAAc,CAoBjB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guaranteed forensic log (groundnuty/macf#642).
|
|
3
|
+
*
|
|
4
|
+
* The per-agent channel-server runs as the Claude TUI's MCP stdio child. Under
|
|
5
|
+
* load Claude Code stops draining the stdio pipe, so stderr is an unreliable
|
|
6
|
+
* failure channel — and the macf-core logger NO-OPS entirely when
|
|
7
|
+
* `MACF_LOG_PATH` is unset. The net effect: the channel-server can die with no
|
|
8
|
+
* trail at all.
|
|
9
|
+
*
|
|
10
|
+
* This module makes a file-based forensic log the always-on default — defense-
|
|
11
|
+
* in-depth, never relying on `claude.sh` to have exported `MACF_LOG_PATH`. An
|
|
12
|
+
* explicitly-set `MACF_LOG_PATH` still wins (back-compat); otherwise we resolve
|
|
13
|
+
* a deterministic path under `$XDG_STATE_HOME` (or `$HOME/.local/state`, or the
|
|
14
|
+
* OS tmpdir as a last-ditch) so a forensic trail exists regardless of the
|
|
15
|
+
* launch environment.
|
|
16
|
+
*
|
|
17
|
+
* The safety net must never itself become the crash cause: `createForensicLogger`
|
|
18
|
+
* degrades to a stderr-only logger if the file sink can't be created (e.g. an
|
|
19
|
+
* unwritable state dir), reporting `fileActive: false` rather than throwing.
|
|
20
|
+
*/
|
|
21
|
+
import { tmpdir } from 'node:os';
|
|
22
|
+
import { join } from 'node:path';
|
|
23
|
+
import { createLogger } from '@groundnuty/macf-core';
|
|
24
|
+
/**
|
|
25
|
+
* Resolve the effective forensic-log path.
|
|
26
|
+
*
|
|
27
|
+
* 1. explicit, non-empty `MACF_LOG_PATH` → used as-is (back-compat).
|
|
28
|
+
* 2. `$XDG_STATE_HOME/macf/<agentName>-channel.log`
|
|
29
|
+
* 3. `$HOME/.local/state/macf/<agentName>-channel.log`
|
|
30
|
+
* 4. `<os-tmpdir>/macf/<agentName>-channel.log` (last-ditch — always writable)
|
|
31
|
+
*
|
|
32
|
+
* Pure: no filesystem side effects (the caller's logger creates parent dirs).
|
|
33
|
+
* `env` is injectable for tests.
|
|
34
|
+
*/
|
|
35
|
+
export function resolveForensicLogPath(opts) {
|
|
36
|
+
const env = opts.env ?? process.env;
|
|
37
|
+
const explicit = env['MACF_LOG_PATH'];
|
|
38
|
+
if (explicit !== undefined && explicit !== '')
|
|
39
|
+
return explicit;
|
|
40
|
+
const fileName = `${sanitizeAgentName(opts.agentName)}-channel.log`;
|
|
41
|
+
return join(forensicStateDir(env), 'macf', fileName);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The base state directory for the default forensic log, mirroring the XDG
|
|
45
|
+
* Base Directory spec (`$XDG_STATE_HOME`, else `$HOME/.local/state`). Falls back
|
|
46
|
+
* to the OS tmpdir so the path is always writable even in a degenerate
|
|
47
|
+
* environment (no HOME — e.g. some CI / container contexts).
|
|
48
|
+
*/
|
|
49
|
+
function forensicStateDir(env) {
|
|
50
|
+
const xdg = env['XDG_STATE_HOME'];
|
|
51
|
+
if (xdg !== undefined && xdg !== '')
|
|
52
|
+
return xdg;
|
|
53
|
+
const home = env['HOME'];
|
|
54
|
+
if (home !== undefined && home !== '')
|
|
55
|
+
return join(home, '.local', 'state');
|
|
56
|
+
return tmpdir();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Sanitize an agent name into a filesystem-safe single path segment — guards
|
|
60
|
+
* against path traversal / separators in an unexpected `MACF_AGENT_NAME`.
|
|
61
|
+
*/
|
|
62
|
+
function sanitizeAgentName(name) {
|
|
63
|
+
const cleaned = name.replace(/[^A-Za-z0-9._-]/g, '_');
|
|
64
|
+
return cleaned === '' ? 'agent' : cleaned;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Build the channel-server's forensic logger. Resolves the path, then attempts
|
|
68
|
+
* a real file logger; on any failure to open the file sink (unwritable dir,
|
|
69
|
+
* etc.) it logs a LOUD stderr warning and degrades to a stderr-only logger so
|
|
70
|
+
* the server still starts and still produces *some* trail.
|
|
71
|
+
*/
|
|
72
|
+
export function createForensicLogger(opts) {
|
|
73
|
+
const logPath = resolveForensicLogPath({ agentName: opts.agentName, env: opts.env });
|
|
74
|
+
try {
|
|
75
|
+
// createLogger creates parent dirs + the file synchronously in its
|
|
76
|
+
// constructor, so a throw here means the file sink is unusable.
|
|
77
|
+
const logger = createLogger({ logPath, debug: opts.debug });
|
|
78
|
+
return { logger, logPath, fileActive: true };
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
82
|
+
try {
|
|
83
|
+
process.stderr.write(`macf-channel-server: WARNING — could not open forensic log at ${logPath}: ${msg}. ` +
|
|
84
|
+
'Falling back to stderr-only logging (no durable crash trail). See macf#642.\n');
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
/* nothing left — stderr itself is gone */
|
|
88
|
+
}
|
|
89
|
+
// Force the stderr sink on (debug:true) so the degraded logger still emits.
|
|
90
|
+
return { logger: createLogger({ debug: true }), logPath, fileActive: false };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=forensic-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forensic-log.js","sourceRoot":"","sources":["../src/forensic-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAGtC;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;IACtC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IAE/D,MAAM,QAAQ,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;IACpE,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,GAAsB;IAC9C,MAAM,GAAG,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAClC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,GAAG,CAAC;IAChD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5E,OAAO,MAAM,EAAE,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5C,CAAC;AAWD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAIpC;IACC,MAAM,OAAO,GAAG,sBAAsB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC;QACH,mEAAmE;QACnE,gEAAgE;QAChE,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iEAAiE,OAAO,KAAK,GAAG,IAAI;gBAClF,+EAA+E,CAClF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;QACD,4EAA4E;QAC5E,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC/E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lifecycle-phase tracker (groundnuty/macf#642).
|
|
3
|
+
*
|
|
4
|
+
* A tiny mutable holder for the channel-server's current startup/runtime phase
|
|
5
|
+
* plus process uptime. The crash handlers and the periodic alive-tick read its
|
|
6
|
+
* snapshot so the forensic log pinpoints WHERE the process was when it died —
|
|
7
|
+
* the difference between "crashed mid-boot" and "crashed while serving" is the
|
|
8
|
+
* first thing an operator needs.
|
|
9
|
+
*
|
|
10
|
+
* Free-form `phase` strings (not an enum) keep server.ts able to annotate any
|
|
11
|
+
* step without a schema round-trip; the canonical phases server.ts uses are
|
|
12
|
+
* boot → otel-bootstrapped → config-loaded → mcp-connected → port-bound →
|
|
13
|
+
* collision-checked → registered → serving.
|
|
14
|
+
*/
|
|
15
|
+
export interface LifecycleSnapshot {
|
|
16
|
+
readonly phase: string;
|
|
17
|
+
readonly uptime_ms: number;
|
|
18
|
+
}
|
|
19
|
+
export interface LifecycleTracker {
|
|
20
|
+
/** Advance the current phase. */
|
|
21
|
+
readonly set: (phase: string) => void;
|
|
22
|
+
/** Read the current phase + uptime (now − startedAt). */
|
|
23
|
+
readonly snapshot: () => LifecycleSnapshot;
|
|
24
|
+
}
|
|
25
|
+
export declare function createLifecycleTracker(opts?: {
|
|
26
|
+
readonly initial?: string;
|
|
27
|
+
/** Injectable epoch-ms clock for tests; defaults to `Date.now`. */
|
|
28
|
+
readonly now?: () => number;
|
|
29
|
+
}): LifecycleTracker;
|
|
30
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,iBAAiB,CAAC;CAC5C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B,GAAG,gBAAgB,CAanB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lifecycle-phase tracker (groundnuty/macf#642).
|
|
3
|
+
*
|
|
4
|
+
* A tiny mutable holder for the channel-server's current startup/runtime phase
|
|
5
|
+
* plus process uptime. The crash handlers and the periodic alive-tick read its
|
|
6
|
+
* snapshot so the forensic log pinpoints WHERE the process was when it died —
|
|
7
|
+
* the difference between "crashed mid-boot" and "crashed while serving" is the
|
|
8
|
+
* first thing an operator needs.
|
|
9
|
+
*
|
|
10
|
+
* Free-form `phase` strings (not an enum) keep server.ts able to annotate any
|
|
11
|
+
* step without a schema round-trip; the canonical phases server.ts uses are
|
|
12
|
+
* boot → otel-bootstrapped → config-loaded → mcp-connected → port-bound →
|
|
13
|
+
* collision-checked → registered → serving.
|
|
14
|
+
*/
|
|
15
|
+
export function createLifecycleTracker(opts) {
|
|
16
|
+
const now = opts?.now ?? (() => Date.now());
|
|
17
|
+
const startedAt = now();
|
|
18
|
+
let phase = opts?.initial ?? 'boot';
|
|
19
|
+
return {
|
|
20
|
+
set(next) {
|
|
21
|
+
phase = next;
|
|
22
|
+
},
|
|
23
|
+
snapshot() {
|
|
24
|
+
return { phase, uptime_ms: now() - startedAt };
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAcH,MAAM,UAAU,sBAAsB,CAAC,IAItC;IACC,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,GAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;IACxB,IAAI,KAAK,GAAG,IAAI,EAAE,OAAO,IAAI,MAAM,CAAC;IAEpC,OAAO;QACL,GAAG,CAAC,IAAY;YACd,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;QACD,QAAQ;YACN,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;QACjD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -9,7 +9,6 @@ import { bootstrapOtel } from './otel.js';
|
|
|
9
9
|
import { SpanKind, SpanStatusCode } from '@opentelemetry/api';
|
|
10
10
|
import { getTracer, SpanNames } from './tracing.js';
|
|
11
11
|
import { loadConfig } from '@groundnuty/macf-core';
|
|
12
|
-
import { createLogger } from '@groundnuty/macf-core';
|
|
13
12
|
import { createMcpChannel } from './mcp.js';
|
|
14
13
|
import { createHealthState } from './health.js';
|
|
15
14
|
import { createHttpsServer } from './https.js';
|
|
@@ -19,6 +18,10 @@ import { PACKAGE_VERSION } from './package-version.js';
|
|
|
19
18
|
import { createRegistry, createRegistryFromConfig } from '@groundnuty/macf-core';
|
|
20
19
|
import { checkCollision, CollisionError, RegisterRaceError } from './collision.js';
|
|
21
20
|
import { registerShutdownHandler } from './shutdown.js';
|
|
21
|
+
import { createForensicLogger } from './forensic-log.js';
|
|
22
|
+
import { createLifecycleTracker } from './lifecycle.js';
|
|
23
|
+
import { registerCrashHandlers } from './crash-handlers.js';
|
|
24
|
+
import { createAliveTicker } from './alive-ticker.js';
|
|
22
25
|
import { createRegistryHeartbeat, resolveHeartbeatIntervalMs } from './registry-heartbeat.js';
|
|
23
26
|
import { createTokenRefresher } from './token-refresh.js';
|
|
24
27
|
import { createRefreshAwareClient } from './refresh-aware-client.js';
|
|
@@ -40,10 +43,53 @@ async function main() {
|
|
|
40
43
|
// the SDK packages + registers the global provider. See macf#196.
|
|
41
44
|
await bootstrapOtel();
|
|
42
45
|
const config = loadConfig();
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
// macf#642: a GUARANTEED forensic file log. The macf-core logger NO-OPS when
|
|
47
|
+
// MACF_LOG_PATH is unset, and stderr is unreliable (Claude Code stops draining
|
|
48
|
+
// the stdio pipe under load) — so the channel-server could die with no trail.
|
|
49
|
+
// createForensicLogger defaults the path to $XDG_STATE_HOME / $HOME/.local/state
|
|
50
|
+
// when the launcher didn't export MACF_LOG_PATH (defense-in-depth; an explicit
|
|
51
|
+
// MACF_LOG_PATH still wins), and degrades to stderr-only rather than crashing if
|
|
52
|
+
// the file sink can't be opened.
|
|
53
|
+
const { logger, logPath: forensicLogPath, fileActive } = createForensicLogger({
|
|
54
|
+
agentName: config.agentName,
|
|
45
55
|
debug: config.debug,
|
|
46
56
|
});
|
|
57
|
+
// Loud startup forensic line — file AND stderr regardless of debug — so the
|
|
58
|
+
// resolved log path is discoverable + the first line bounds the process start.
|
|
59
|
+
logger.info('forensic_log_active', {
|
|
60
|
+
log_path: forensicLogPath,
|
|
61
|
+
file_active: fileActive,
|
|
62
|
+
pid: process.pid,
|
|
63
|
+
version: PACKAGE_VERSION,
|
|
64
|
+
});
|
|
65
|
+
process.stderr.write(`macf-channel-server: forensic log → ${forensicLogPath}` +
|
|
66
|
+
(fileActive ? '' : ' (file sink UNAVAILABLE — stderr only)') +
|
|
67
|
+
` [pid ${String(process.pid)}, v${PACKAGE_VERSION}]\n`);
|
|
68
|
+
// macf#642: lifecycle-phase tracker — the crash handlers + alive-tick read this
|
|
69
|
+
// so the forensic log pinpoints WHERE the process was when it died.
|
|
70
|
+
const lifecycle = createLifecycleTracker({ initial: 'boot' });
|
|
71
|
+
// macf#642: top-level crash handlers, registered EARLY (before the rest of
|
|
72
|
+
// startup) so an uncaughtException / unhandledRejection during boot still lands
|
|
73
|
+
// in the forensic log + attempts a bounded graceful deregister, then exits 1.
|
|
74
|
+
// The shutdown `cleanup` is wired later (it needs the registry + HTTPS server);
|
|
75
|
+
// the getter returns undefined until then, so an early crash logs + exits
|
|
76
|
+
// without a deregister it has nothing to perform.
|
|
77
|
+
let shutdownCleanup;
|
|
78
|
+
registerCrashHandlers({
|
|
79
|
+
logger,
|
|
80
|
+
lifecycle,
|
|
81
|
+
getCleanup: () => shutdownCleanup,
|
|
82
|
+
});
|
|
83
|
+
// macf#642: record the process exit code in the forensic log. The 'exit' event
|
|
84
|
+
// allows only synchronous work — logger.info uses appendFileSync (sync), so the
|
|
85
|
+
// line is durably written before the process is gone.
|
|
86
|
+
process.on('exit', (code) => {
|
|
87
|
+
logger.info('process_exit', {
|
|
88
|
+
code,
|
|
89
|
+
pid: process.pid,
|
|
90
|
+
lifecycle_phase: lifecycle.snapshot().phase,
|
|
91
|
+
});
|
|
92
|
+
});
|
|
47
93
|
// macf#473 piece 2 (DR-025): the authoritative write-ahead comms-ledger,
|
|
48
94
|
// a SIBLING of channel.log derived from MACF_LOG_PATH. A no-op when
|
|
49
95
|
// logPath is unset (mirrors `logger`). The `appendEdge` writer is
|
|
@@ -90,7 +136,27 @@ async function main() {
|
|
|
90
136
|
// DR-030 E1: read the comms-ledger (sibling of logPath) for last_processed.
|
|
91
137
|
logPath: config.logPath,
|
|
92
138
|
});
|
|
139
|
+
// macf#642: a boundary try/catch around the /notify delivery path. https.ts
|
|
140
|
+
// already catches at the request boundary (→ 500), but a dedicated catch here
|
|
141
|
+
// attributes the failure to the notify handler (payload type + stack) AND guards
|
|
142
|
+
// the fire-and-forget sub-calls (e.g. wakeViaTmux) so nothing can escape as an
|
|
143
|
+
// unhandledRejection. Re-thrown so the request boundary still returns 500 — the
|
|
144
|
+
// delivery genuinely failed; this only adds a louder, attributed log.
|
|
93
145
|
const onNotify = async (payload) => {
|
|
146
|
+
try {
|
|
147
|
+
await deliverNotification(payload);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
logger.error('notify_handler_error', {
|
|
151
|
+
type: payload.type,
|
|
152
|
+
issue: payload.issue_number,
|
|
153
|
+
error: err instanceof Error ? err.message : String(err),
|
|
154
|
+
stack: err instanceof Error ? (err.stack ?? '') : '',
|
|
155
|
+
});
|
|
156
|
+
throw err;
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
async function deliverNotification(payload) {
|
|
94
160
|
const meta = { type: payload.type };
|
|
95
161
|
if (payload.issue_number !== undefined) {
|
|
96
162
|
meta['issue_number'] = String(payload.issue_number);
|
|
@@ -197,7 +263,7 @@ async function main() {
|
|
|
197
263
|
detail: 'MACF_WORKSPACE_DIR unset',
|
|
198
264
|
});
|
|
199
265
|
}
|
|
200
|
-
}
|
|
266
|
+
}
|
|
201
267
|
// P2: Build the project registry + (GitHub-mode only) /sign varsClient.
|
|
202
268
|
//
|
|
203
269
|
// Pre-macf#317 this section also called `await generateToken()` to
|
|
@@ -473,8 +539,10 @@ async function main() {
|
|
|
473
539
|
});
|
|
474
540
|
// P1: Connect MCP channel
|
|
475
541
|
await mcp.connect();
|
|
542
|
+
lifecycle.set('mcp-connected'); // macf#642 forensic phase marker
|
|
476
543
|
// P1: Bind port
|
|
477
544
|
const { actualPort } = await httpsServer.start(config.port, config.host);
|
|
545
|
+
lifecycle.set('port-bound'); // macf#642 forensic phase marker
|
|
478
546
|
// P2: Collision detection. The HTTPS server is already bound + serving
|
|
479
547
|
// (P1 above), so a version-aware takeover (groundnuty/macf#424) only fires
|
|
480
548
|
// for an instance that can actually serve — a crash-on-boot newer instance
|
|
@@ -489,6 +557,7 @@ async function main() {
|
|
|
489
557
|
agentCertPath: config.agentCertPath,
|
|
490
558
|
agentKeyPath: config.agentKeyPath,
|
|
491
559
|
}, PACKAGE_VERSION, logger);
|
|
560
|
+
lifecycle.set('collision-checked'); // macf#642 forensic phase marker
|
|
492
561
|
if (collisionResult.action === 'abort') {
|
|
493
562
|
await httpsServer.stop();
|
|
494
563
|
throw new CollisionError(config.routingLabel, collisionResult.existing.host, collisionResult.existing.port);
|
|
@@ -520,6 +589,7 @@ async function main() {
|
|
|
520
589
|
await httpsServer.stop();
|
|
521
590
|
throw new RegisterRaceError(config.routingLabel, registerResult.current);
|
|
522
591
|
}
|
|
592
|
+
lifecycle.set('registered'); // macf#642 forensic phase marker
|
|
523
593
|
logger.info('registered', {
|
|
524
594
|
agent: config.routingLabel,
|
|
525
595
|
host: config.advertiseHost,
|
|
@@ -548,7 +618,10 @@ async function main() {
|
|
|
548
618
|
// carries OUR instance_id, so a newer instance that took over the slot
|
|
549
619
|
// (groundnuty/macf#424) while we ran is never clobbered on our exit. Also
|
|
550
620
|
// clears the registry-heartbeat interval (DR-031) on the way out.
|
|
551
|
-
|
|
621
|
+
// macf#642: capture the returned cleanup so the top-level crash handlers can
|
|
622
|
+
// attempt the same instance-id-guarded graceful deregister (behind a hard
|
|
623
|
+
// timeout) on an uncaughtException / unhandledRejection.
|
|
624
|
+
shutdownCleanup = registerShutdownHandler({
|
|
552
625
|
agentName: config.routingLabel,
|
|
553
626
|
registry,
|
|
554
627
|
instanceId: config.instanceId,
|
|
@@ -559,13 +632,23 @@ async function main() {
|
|
|
559
632
|
});
|
|
560
633
|
// Start the periodic heartbeat now that its stop() is wired into shutdown.
|
|
561
634
|
registryHeartbeat.start();
|
|
635
|
+
lifecycle.set('serving'); // macf#642 forensic phase marker
|
|
562
636
|
logger.info('server_started', {
|
|
563
637
|
port: actualPort,
|
|
564
638
|
host: config.advertiseHost,
|
|
565
639
|
agent: config.agentName,
|
|
566
640
|
type: config.agentType,
|
|
567
641
|
instance_id: config.instanceId,
|
|
642
|
+
pid: process.pid,
|
|
643
|
+
version: PACKAGE_VERSION,
|
|
644
|
+
log_path: forensicLogPath,
|
|
568
645
|
});
|
|
646
|
+
// macf#642: periodic "alive" tick to the forensic log (every 60s, unref()'d so
|
|
647
|
+
// it can't pin the event loop). Its purpose is its ABSENCE — when the server
|
|
648
|
+
// dies a SILENT death (OOM / SIGKILL / power loss) no crash handler runs and
|
|
649
|
+
// the log just stops; the last `alive` line then bounds the death to a ≤60s
|
|
650
|
+
// window. Started last so the log shows the server reached steady state.
|
|
651
|
+
createAliveTicker({ logger, lifecycle }).start();
|
|
569
652
|
} // end runStartup
|
|
570
653
|
}
|
|
571
654
|
main().catch((err) => {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA,mEAAmE;AACnE,kEAAkE;AAClE,2DAA2D;AAC3D,uEAAuE;AACvE,qEAAqE;AACrE,8CAA8C;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,gCAAgC,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAiB5E,KAAK,UAAU,IAAI;IACjB,gEAAgE;IAChE,2CAA2C;IAC3C,kEAAkE;IAClE,kEAAkE;IAClE,MAAM,aAAa,EAAE,CAAC;IAEtB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,6EAA6E;IAC7E,+EAA+E;IAC/E,8EAA8E;IAC9E,iFAAiF;IACjF,+EAA+E;IAC/E,iFAAiF;IACjF,iCAAiC;IACjC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,oBAAoB,CAAC;QAC5E,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAC;IAEH,4EAA4E;IAC5E,+EAA+E;IAC/E,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;QACjC,QAAQ,EAAE,eAAe;QACzB,WAAW,EAAE,UAAU;QACvB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uCAAuC,eAAe,EAAE;QACtD,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wCAAwC,CAAC;QAC5D,SAAS,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,eAAe,KAAK,CACzD,CAAC;IAEF,gFAAgF;IAChF,oEAAoE;IACpE,MAAM,SAAS,GAAG,sBAAsB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9D,2EAA2E;IAC3E,gFAAgF;IAChF,8EAA8E;IAC9E,gFAAgF;IAChF,0EAA0E;IAC1E,kDAAkD;IAClD,IAAI,eAAqD,CAAC;IAC1D,qBAAqB,CAAC;QACpB,MAAM;QACN,SAAS;QACT,UAAU,EAAE,GAAG,EAAE,CAAC,eAAe;KAClC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,gFAAgF;IAChF,sDAAsD;IACtD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1B,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;YAC1B,IAAI;YACJ,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,eAAe,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK;SAC5C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,oEAAoE;IACpE,kEAAkE;IAClE,wEAAwE;IACxE,yEAAyE;IACzE,0EAA0E;IAC1E,2EAA2E;IAC3E,yDAAyD;IACzD,MAAM,WAAW,GAAG,iBAAiB,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,MAAM,gBAAgB,GAAG,CAAC,IAAqB,EAAQ,EAAE,CACvD,UAAU,CACR;QACE,MAAM,EAAE,WAAW;QACnB,MAAM;QACN,iBAAiB,EAAE,CAAC,UAAU,EAAE,EAAE,CAChC,gCAAgC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;YACxC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,SAAS;YACpC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO;YACxC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,SAAS;SAC7C,CAAC;KACL,EACD,IAAI,CACL,CAAC;IAEJ,qEAAqE;IACrE,iEAAiE;IACjE,kEAAkE;IAClE,iEAAiE;IACjE,iEAAiE;IACjE,0BAA0B;IAC1B,IAAI,CAAC;QACH,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE;YAC7B,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACvD,IAAI,EAAG,GAAyB,CAAC,IAAI,IAAI,SAAS;SACnD,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,KAAK,UAAU,UAAU;QACzB,MAAM,GAAG,GAAG,gBAAgB,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9D,6EAA6E;QAC7E,8EAA8E;QAC9E,0EAA0E;QAC1E,qEAAqE;QACrE,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE;YACtE,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE,MAAM,CAAC,aAAa;YAC9B,4EAA4E;YAC5E,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QAEH,4EAA4E;QAC5E,8EAA8E;QAC9E,iFAAiF;QACjF,+EAA+E;QAC/E,gFAAgF;QAChF,sEAAsE;QACtE,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAsB,EAAiB,EAAE;YAC/D,IAAI,CAAC;gBACH,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;oBACnC,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,KAAK,EAAE,OAAO,CAAC,YAAY;oBAC3B,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;oBACvD,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;iBACrD,CAAC,CAAC;gBACH,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,UAAU,mBAAmB,CAAC,OAAsB;YACvD,MAAM,IAAI,GAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5D,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACvC,IAAI,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YAClC,CAAC;YAED,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAC9D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YACtC,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC7B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,YAAY;aAC5B,CAAC,CAAC;YAEH,kEAAkE;YAClE,+DAA+D;YAC/D,kCAAkC;YAClC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,CAAC,eAAe,CAC1B,SAAS,CAAC,OAAO,EACjB,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAC3B,KAAK,EAAE,IAAI,EAAE,EAAE;gBACb,IAAI,CAAC;oBACH,MAAM,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC1C,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,eAAe,CAAC,GAAY,CAAC,CAAC;oBACnC,IAAI,CAAC,SAAS,CAAC;wBACb,IAAI,EAAE,cAAc,CAAC,KAAK;wBAC1B,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;qBAC1D,CAAC,CAAC;oBACH,MAAM,GAAG,CAAC;gBACZ,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,CAAC;YACH,CAAC,CACF,CAAC;YACF,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAE5B,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,YAAY;aAC5B,CAAC,CAAC;YAEH,kEAAkE;YAClE,0DAA0D;YAC1D,+DAA+D;YAC/D,6DAA6D;YAC7D,8DAA8D;YAC9D,+DAA+D;YAC/D,6DAA6D;YAC7D,iDAAiD;YACjD,EAAE;YACF,oEAAoE;YACpE,kEAAkE;YAClE,kEAAkE;YAClE,4DAA4D;YAC5D,qEAAqE;YACrE,qEAAqE;YACrE,mEAAmE;YACnE,wDAAwD;YACxD,kEAAkE;YAClE,YAAY;YACZ,EAAE;YACF,oEAAoE;YACpE,iEAAiE;YACjE,6DAA6D;YAC7D,oEAAoE;YACpE,qEAAqE;YACrE,mEAAmE;YACnE,iEAAiE;YACjE,gEAAgE;YAChE,2BAA2B;YAC3B,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,YAAY,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;oBAC/B,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,MAAM,EAAE,6FAA6F;iBACtG,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC7C,kEAAkE;gBAClE,gEAAgE;gBAChE,8DAA8D;gBAC9D,+DAA+D;gBAC/D,6DAA6D;gBAC7D,WAAW;gBACX,IAAI,YAAY,CAAC,MAAM,KAAK,gCAAgC,EAAE,CAAC;oBAC7D,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE;wBAC5C,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;wBACnC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;qBAClC,CAAC,CAAC;gBACL,CAAC;gBACD,2DAA2D;gBAC3D,uDAAuD;gBACvD,8DAA8D;gBAC9D,WAAW,CAAC,OAAO,EAAE;oBACnB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,OAAO,EAAE,MAAM,CAAC,WAAW;oBAC3B,MAAM,EAAE,MAAM,CAAC,UAAU;oBACzB,MAAM;iBACP,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;oBAC/B,MAAM,EAAE,kBAAkB;oBAC1B,MAAM,EAAE,0BAA0B;iBACnC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,EAAE;QACF,mEAAmE;QACnE,kEAAkE;QAClE,sEAAsE;QACtE,mEAAmE;QACnE,sEAAsE;QACtE,+DAA+D;QAC/D,EAAE;QACF,wDAAwD;QACxD,2EAA2E;QAC3E,mEAAmE;QACnE,kEAAkE;QAClE,mEAAmE;QACnE,iEAAiE;QACjE,iEAAiE;QACjE,wEAAwE;QACxE,uEAAuE;QACvE,uDAAuD;QACvD,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC;QAEzD,sEAAsE;QACtE,mEAAmE;QACnE,sEAAsE;QACtE,uEAAuE;QACvE,sEAAsE;QACtE,oEAAoE;QACpE,0CAA0C;QAC1C,2EAA2E;QAC3E,kEAAkE;QAClE,mEAAmE;QACnE,MAAM,cAAc,GAAG,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAExD,IAAI,QAAQ,CAAC;QACb,IAAI,UAAmE,CAAC;QAExE,IAAI,eAAe,EAAE,CAAC;YACpB,gEAAgE;YAChE,gEAAgE;YAChE,sEAAsE;YACtE,qCAAqC;YACrC,QAAQ,GAAG,wBAAwB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACzE,8DAA8D;QAChE,CAAC;aAAM,CAAC;YACN,mEAAmE;YACnE,iEAAiE;YACjE,kEAAkE;YAClE,6DAA6D;YAC7D,mBAAmB;YACnB,IAAI,cAAsB,CAAC;YAC3B,QAAQ,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC7B,KAAK,KAAK;oBACR,cAAc,GAAG,SAAS,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;oBAChD,MAAM;gBACR,KAAK,SAAS;oBACZ,cAAc,GAAG,UAAU,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC1E,MAAM;gBACR,KAAK,MAAM;oBACT,cAAc,GAAG,UAAU,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC3E,MAAM;YACV,CAAC;YAED,qEAAqE;YACrE,mEAAmE;YACnE,iEAAiE;YACjE,MAAM,cAAc,GAAG,wBAAwB,CAAC;gBAC9C,UAAU,EAAE,cAAc;gBAC1B,cAAc;gBACd,MAAM;aACP,CAAC,CAAC;YACH,QAAQ,GAAG,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAE1D,mEAAmE;YACnE,oEAAoE;YACpE,oCAAoC;YACpC,UAAU,GAAG,wBAAwB,CAAC;gBACpC,UAAU,EAAE,cAAc;gBAC1B,cAAc;gBACd,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAED,yEAAyE;QACzE,0EAA0E;QAC1E,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAC;QAE9C,iEAAiE;QACjE,2EAA2E;QAC3E,mEAAmE;QACnE,MAAM,MAAM,GAAG,KAAK,EAAE,OAAoB,EAAoC,EAAE;YAC9E,kEAAkE;YAClE,kEAAkE;YAClE,mEAAmE;YACnE,wCAAwC;YACxC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,SAAS,CACjB,GAAG,EACH,qDAAqD;oBACnD,4DAA4D;oBAC5D,4CAA4C,CAC/C,CAAC;YACJ,CAAC;YACD,MAAM,gBAAgB,GAAG,UAAU,CAAC;YACpC,gEAAgE;YAChE,IAAI,EAAuC,CAAC;YAC5C,IAAI,CAAC;gBACH,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,oCAAoC,CAAC,CAAC;YACjE,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC5B,iEAAiE;gBACjE,MAAM,SAAS,GAAG,eAAe,CAAC;oBAChC,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,SAAS,EAAE,OAAO,CAAC,UAAU;oBAC7B,KAAK,EAAE,cAAc;iBACtB,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBACpC,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,YAAY,EAAE,SAAS,CAAC,WAAW;iBACpC,CAAC,CAAC;gBACH,OAAO;oBACL,YAAY,EAAE,SAAS,CAAC,WAAW;oBACnC,WAAW,EAAE,SAAS,CAAC,WAAW;iBACnC,CAAC;YACJ,CAAC;YAED,yEAAyE;YACzE,0EAA0E;YAC1E,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC;gBAC7C,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,WAAW,EAAE,OAAO,CAAC,YAAa;gBAClC,KAAK,EAAE,cAAc;gBACrB,MAAM,EAAE,gBAAgB;aACzB,CAAC,CAAC;YAEH,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC1B,gEAAgE;gBAChE,gEAAgE;gBAChE,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;gBACzE,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,+BAA+B,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YAE3E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;gBAC5B,MAAM,EAAE,OAAO,CAAC,GAAG;gBACnB,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,SAAS,EAAE,EAAE,CAAC,OAAO;gBACrB,QAAQ,EAAE,EAAE,CAAC,MAAM;aACpB,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YACpE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,CAAC,CAAC;QAEF,iDAAiD;QACjD,iEAAiE;QACjE,gEAAgE;QAChE,qCAAqC;QACrC,MAAM,SAAS,GAAG,cAAc,CAAC;YAC/B,4EAA4E;YAC5E,2DAA2D;YAC3D,SAAS,EAAE,MAAM,CAAC,YAAY;YAC9B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,GAAG,EAAE,WAAW,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,EAAE;YACrD,OAAO,EAAE,eAAe;SACzB,CAAC,CAAC;QAEH,sEAAsE;QACtE,qEAAqE;QACrE,qEAAqE;QACrE,sDAAsD;QACtD,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QAElC,MAAM,WAAW,GAAG,iBAAiB,CAAC;YACpC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,QAAQ;YACR,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE;YAClC,MAAM;YACN,SAAS;YACT,SAAS;YACT,MAAM;YACN,+DAA+D;YAC/D,sEAAsE;YACtE,+DAA+D;YAC/D,gBAAgB;YAChB,aAAa,EAAE,MAAM,CAAC,SAAS;YAC/B,4EAA4E;YAC5E,mEAAmE;YACnE,6CAA6C;YAC7C,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;QAEH,mEAAmE;QACnE,mEAAmE;QACnE,sEAAsE;QACtE,gEAAgE;QAChE,kEAAkE;QAClE,qEAAqE;QACrE,kDAAkD;QAClD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,EAAE,UAAU,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACvG,gEAAgE;QAChE,kEAAkE;QAClE,+DAA+D;QAC/D,6CAA6C;QAC7C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACtD,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACrE,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;YAC9B,iBAAiB;YACjB,gBAAgB;YAChB,SAAS;SACV,CAAC,CAAC;QACH,MAAM,cAAc,GAAG;YACrB,QAAQ;YACR,aAAa,EAAE,MAAM,CAAC,SAAS;YAC/B,iBAAiB;YACjB,gBAAgB;YAChB,SAAS;YACT,MAAM;YACN,SAAS;YACT,sEAAsE;YACtE,2DAA2D;YAC3D,gBAAgB;SACjB,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,YAAY,CAClB,aAAa,EACb;YACE,WAAW,EAAE,kEAAkE;gBAC7E,+EAA+E;gBAC/E,8EAA8E;gBAC9E,qFAAqF;gBACrF,+EAA+E;gBAC/E,gDAAgD;YAClD,WAAW,EAAE,qBAAqB;YAClC,YAAY,EAAE,sBAAsB;SACrC,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClE,+CAA+C;gBAC/C,8DAA8D;gBAC9D,gEAAgE;gBAChE,6BAA6B;gBAC7B,iBAAiB,EAAE,EAAE,GAAG,MAAM,EAAE;gBAChC,OAAO,EAAE,MAAM,CAAC,eAAe,GAAG,CAAC,IAAI,MAAM,CAAC,eAAe,KAAK,CAAC;aACpE,CAAC;QACJ,CAAC,CACF,CAAC;QAEF,oEAAoE;QACpE,oEAAoE;QACpE,kEAAkE;QAClE,oEAAoE;QACpE,qEAAqE;QACrE,oEAAoE;QACpE,uDAAuD;QACvD,gEAAgE;QAChE,oEAAoE;QACpE,WAAW;QACX,MAAM,EACJ,kBAAkB,EAClB,6BAA6B,EAC7B,8BAA8B,GAC/B,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACpC,MAAM,cAAc,GAAG;YACrB,aAAa,EAAE,MAAM,CAAC,SAAS;YAC/B,MAAM;SACP,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,YAAY,CAClB,sBAAsB,EACtB;YACE,WAAW,EAAE,iEAAiE;gBAC5E,gFAAgF;gBAChF,2EAA2E;gBAC3E,gFAAgF;gBAChF,gFAAgF;gBAChF,6BAA6B;YAC/B,WAAW,EAAE,6BAA6B;YAC1C,YAAY,EAAE,8BAA8B;SAC7C,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAC/D,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClE,iBAAiB,EAAE,EAAE,GAAG,MAAM,EAAE;gBAChC,uDAAuD;gBACvD,+DAA+D;gBAC/D,+DAA+D;gBAC/D,+CAA+C;gBAC/C,OAAO,EAAE,KAAK;aACf,CAAC;QACJ,CAAC,CACF,CAAC;QAEF,0BAA0B;QAC1B,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACpB,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,iCAAiC;QAEjE,gBAAgB;QAChB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACzE,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,iCAAiC;QAE9D,uEAAuE;QACvE,2EAA2E;QAC3E,2EAA2E;QAC3E,yCAAyC;QACzC,6EAA6E;QAC7E,2EAA2E;QAC3E,8EAA8E;QAC9E,2EAA2E;QAC3E,yEAAyE;QACzE,MAAM,eAAe,GAAG,MAAM,cAAc,CAC1C,MAAM,CAAC,YAAY,EACnB,QAAQ,EACR;YACE,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,EACD,eAAe,EACf,MAAM,CACP,CAAC;QACF,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,iCAAiC;QAErE,IAAI,eAAe,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACvC,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,cAAc,CACtB,MAAM,CAAC,YAAY,EACnB,eAAe,CAAC,QAAQ,CAAC,IAAI,EAC7B,eAAe,CAAC,QAAQ,CAAC,IAAI,CAC9B,CAAC;QACJ,CAAC;QAED,wEAAwE;QACxE,MAAM,SAAS,GAAc;YAC3B,IAAI,EAAE,MAAM,CAAC,aAAa;YAC1B,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,MAAM,CAAC,SAAmC;YAChD,WAAW,EAAE,MAAM,CAAC,UAAU;YAC9B,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAClC,CAAC;QAEF,oEAAoE;QACpE,wEAAwE;QACxE,2EAA2E;QAC3E,yEAAyE;QACzE,6EAA6E;QAC7E,2EAA2E;QAC3E,MAAM,YAAY,GAChB,eAAe,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1E,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CACvD,MAAM,CAAC,YAAY,EACnB,SAAS,EACT,YAAY,CACb,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAChC,KAAK,EAAE,MAAM,CAAC,YAAY;gBAC1B,iBAAiB,EAAE,YAAY,EAAE,WAAW,IAAI,IAAI;gBACpD,gBAAgB,EAAE,cAAc,CAAC,OAAO,EAAE,WAAW,IAAI,IAAI;gBAC7D,YAAY,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI;gBAClD,YAAY,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI;aACnD,CAAC,CAAC;YACH,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3E,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,iCAAiC;QAC9D,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE;YACxB,KAAK,EAAE,MAAM,CAAC,YAAY;YAC1B,IAAI,EAAE,MAAM,CAAC,aAAa;YAC1B,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,MAAM,CAAC,UAAU;SAC/B,CAAC,CAAC;QAEH,0EAA0E;QAC1E,gFAAgF;QAChF,wEAAwE;QACxE,iFAAiF;QACjF,6EAA6E;QAC7E,iFAAiF;QACjF,8EAA8E;QAC9E,+EAA+E;QAC/E,yEAAyE;QACzE,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;YAChD,QAAQ;YACR,SAAS,EAAE,MAAM,CAAC,YAAY;YAC9B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM;YACN,UAAU,EAAE,0BAA0B,CAAC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;SAC3F,CAAC,CAAC;QAEH,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,uEAAuE;QACvE,0EAA0E;QAC1E,kEAAkE;QAClE,6EAA6E;QAC7E,0EAA0E;QAC1E,yDAAyD;QACzD,eAAe,GAAG,uBAAuB,CAAC;YACxC,SAAS,EAAE,MAAM,CAAC,YAAY;YAC9B,QAAQ;YACR,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,WAAW;YACX,WAAW,EAAE,MAAM;YACnB,iBAAiB;YACjB,MAAM;SACP,CAAC,CAAC;QAEH,2EAA2E;QAC3E,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAE1B,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,iCAAiC;QAC3D,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC5B,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,MAAM,CAAC,aAAa;YAC1B,KAAK,EAAE,MAAM,CAAC,SAAS;YACvB,IAAI,EAAE,MAAM,CAAC,SAAS;YACtB,WAAW,EAAE,MAAM,CAAC,UAAU;YAC9B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,eAAe;SAC1B,CAAC,CAAC;QAEH,+EAA+E;QAC/E,6EAA6E;QAC7E,6EAA6E;QAC7E,4EAA4E;QAC5E,yEAAyE;QACzE,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACjD,CAAC,CAAE,iBAAiB;AACtB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,yEAAyE;IACzE,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,qEAAqE;IACrE,kEAAkE;IAClE,wEAAwE;IACxE,0EAA0E;IAC1E,yEAAyE;IACzE,uBAAuB;IACvB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAC9D,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CACtB,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@groundnuty/macf-channel-server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.43",
|
|
4
4
|
"description": "MCP channel server for the Multi-Agent Coordination Framework. HTTPS + mTLS endpoint agents connect to for inter-agent messaging (notify), CI-completion routing, and /sign certificate issuance. Invoked by Claude Code's plugin via `npx -y @groundnuty/macf-channel-server` per DR-022.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"test:integration": "vitest run --config vitest.integration.config.ts"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@groundnuty/macf-core": "0.2.
|
|
36
|
+
"@groundnuty/macf-core": "0.2.43",
|
|
37
37
|
"@modelcontextprotocol/sdk": "~1.29.0",
|
|
38
38
|
"@opentelemetry/api": "1.9.1",
|
|
39
39
|
"@opentelemetry/core": "2.7.0",
|