@groundnuty/macf-channel-server 0.2.56 → 0.2.57
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/shutdown.d.ts +33 -2
- package/dist/shutdown.d.ts.map +1 -1
- package/dist/shutdown.js +70 -12
- package/dist/shutdown.js.map +1 -1
- package/package.json +2 -2
package/dist/shutdown.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Registry } from '@groundnuty/macf-core';
|
|
2
2
|
import type { HttpsServer, HealthState, Logger } from '@groundnuty/macf-core';
|
|
3
3
|
/**
|
|
4
|
-
* Registers SIGTERM, SIGINT, and MCP-stdin-close handlers that clean
|
|
5
|
-
* the agent's registry variable and stop the HTTPS server.
|
|
4
|
+
* Registers SIGTERM, SIGINT, SIGHUP, and MCP-stdin-close handlers that clean
|
|
5
|
+
* up the agent's registry variable and stop the HTTPS server.
|
|
6
6
|
*
|
|
7
7
|
* The channel-server runs as the Claude TUI's MCP stdio child. A normal TUI
|
|
8
8
|
* exit (`/exit`, or SIGTERM-to-the-TUI) does NOT deliver a SIGTERM/SIGINT to
|
|
@@ -12,6 +12,37 @@ import type { HttpsServer, HealthState, Logger } from '@groundnuty/macf-core';
|
|
|
12
12
|
* DR-031 TTL heartbeat (#589) remains the backstop for hard kills (SIGKILL /
|
|
13
13
|
* OOM / power loss) where no handler runs at all.
|
|
14
14
|
*
|
|
15
|
+
* macf#1035: `#627`'s stdin wiring was verified live to NOT actually
|
|
16
|
+
* deregister, despite passing every existing (mocked-`process.exit`) unit
|
|
17
|
+
* test. Root-caused to two independent, additive defects, both fixed here:
|
|
18
|
+
*
|
|
19
|
+
* 1. **Once-guard stale-value race (this file).** The previous guard was a
|
|
20
|
+
* `shuttingDown` boolean + a `lastResult` snapshot updated only when the
|
|
21
|
+
* WINNING invocation finished. Node's stdin 'end' is ALWAYS immediately
|
|
22
|
+
* followed by 'close' (`autoDestroy`/`emitClose` default `true` — verified
|
|
23
|
+
* empirically via a real child-process repro, not a rare race), and both
|
|
24
|
+
* are wired to the same handler. The 'close'-triggered second call saw
|
|
25
|
+
* `shuttingDown === true` and returned `lastResult` — which was still its
|
|
26
|
+
* *initial* value (`true`), because the first (real) call was still
|
|
27
|
+
* awaiting the async registry delete. That spurious `true` needs only one
|
|
28
|
+
* microtask hop to resolve, so its `process.exit(0)` always won the race
|
|
29
|
+
* against the real cleanup's multi-await chain (a genuine network round
|
|
30
|
+
* trip) and killed the process mid-deregister — on every graceful exit,
|
|
31
|
+
* not occasionally. Existing tests never caught this because they mock
|
|
32
|
+
* `process.exit`, so the abandoned real cleanup kept running silently in
|
|
33
|
+
* the background instead of being cut off (see `cleanupPromise` below for
|
|
34
|
+
* the fix: memoize the in-flight PROMISE, not a boolean-plus-snapshot).
|
|
35
|
+
* 2. **SIGHUP was unhandled (fixed by the new `process.on('SIGHUP', ...)`
|
|
36
|
+
* below).** Verified live via a tmux-topology repro matching how
|
|
37
|
+
* `claude.sh` actually launches agents (DR-013 tmux self-wrap execs into
|
|
38
|
+
* `claude`, which spawns the channel-server as a non-detached child —
|
|
39
|
+
* same session/process group as the pty): tearing down the pane after the
|
|
40
|
+
* simulated TUI process exits (tmux's default `remain-on-exit off`
|
|
41
|
+
* destroys the pty) delivers SIGHUP to the still-running channel-server
|
|
42
|
+
* child. SIGHUP's default disposition is immediate termination with NO
|
|
43
|
+
* handler run — worse than defect 1, since it skips the graceful path
|
|
44
|
+
* (and the stdin 'end' event) entirely rather than merely racing it.
|
|
45
|
+
*
|
|
15
46
|
* Returns a cleanup function that can also be called directly.
|
|
16
47
|
*/
|
|
17
48
|
export declare function registerShutdownHandler(config: {
|
package/dist/shutdown.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE9E
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAC3D;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACtD;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACrD;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;CAChD,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CA6KzC"}
|
package/dist/shutdown.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Registers SIGTERM, SIGINT, and MCP-stdin-close handlers that clean
|
|
3
|
-
* the agent's registry variable and stop the HTTPS server.
|
|
2
|
+
* Registers SIGTERM, SIGINT, SIGHUP, and MCP-stdin-close handlers that clean
|
|
3
|
+
* up the agent's registry variable and stop the HTTPS server.
|
|
4
4
|
*
|
|
5
5
|
* The channel-server runs as the Claude TUI's MCP stdio child. A normal TUI
|
|
6
6
|
* exit (`/exit`, or SIGTERM-to-the-TUI) does NOT deliver a SIGTERM/SIGINT to
|
|
@@ -10,16 +10,50 @@
|
|
|
10
10
|
* DR-031 TTL heartbeat (#589) remains the backstop for hard kills (SIGKILL /
|
|
11
11
|
* OOM / power loss) where no handler runs at all.
|
|
12
12
|
*
|
|
13
|
+
* macf#1035: `#627`'s stdin wiring was verified live to NOT actually
|
|
14
|
+
* deregister, despite passing every existing (mocked-`process.exit`) unit
|
|
15
|
+
* test. Root-caused to two independent, additive defects, both fixed here:
|
|
16
|
+
*
|
|
17
|
+
* 1. **Once-guard stale-value race (this file).** The previous guard was a
|
|
18
|
+
* `shuttingDown` boolean + a `lastResult` snapshot updated only when the
|
|
19
|
+
* WINNING invocation finished. Node's stdin 'end' is ALWAYS immediately
|
|
20
|
+
* followed by 'close' (`autoDestroy`/`emitClose` default `true` — verified
|
|
21
|
+
* empirically via a real child-process repro, not a rare race), and both
|
|
22
|
+
* are wired to the same handler. The 'close'-triggered second call saw
|
|
23
|
+
* `shuttingDown === true` and returned `lastResult` — which was still its
|
|
24
|
+
* *initial* value (`true`), because the first (real) call was still
|
|
25
|
+
* awaiting the async registry delete. That spurious `true` needs only one
|
|
26
|
+
* microtask hop to resolve, so its `process.exit(0)` always won the race
|
|
27
|
+
* against the real cleanup's multi-await chain (a genuine network round
|
|
28
|
+
* trip) and killed the process mid-deregister — on every graceful exit,
|
|
29
|
+
* not occasionally. Existing tests never caught this because they mock
|
|
30
|
+
* `process.exit`, so the abandoned real cleanup kept running silently in
|
|
31
|
+
* the background instead of being cut off (see `cleanupPromise` below for
|
|
32
|
+
* the fix: memoize the in-flight PROMISE, not a boolean-plus-snapshot).
|
|
33
|
+
* 2. **SIGHUP was unhandled (fixed by the new `process.on('SIGHUP', ...)`
|
|
34
|
+
* below).** Verified live via a tmux-topology repro matching how
|
|
35
|
+
* `claude.sh` actually launches agents (DR-013 tmux self-wrap execs into
|
|
36
|
+
* `claude`, which spawns the channel-server as a non-detached child —
|
|
37
|
+
* same session/process group as the pty): tearing down the pane after the
|
|
38
|
+
* simulated TUI process exits (tmux's default `remain-on-exit off`
|
|
39
|
+
* destroys the pty) delivers SIGHUP to the still-running channel-server
|
|
40
|
+
* child. SIGHUP's default disposition is immediate termination with NO
|
|
41
|
+
* handler run — worse than defect 1, since it skips the graceful path
|
|
42
|
+
* (and the stdin 'end' event) entirely rather than merely racing it.
|
|
43
|
+
*
|
|
13
44
|
* Returns a cleanup function that can also be called directly.
|
|
14
45
|
*/
|
|
15
46
|
export function registerShutdownHandler(config) {
|
|
16
47
|
const { agentName, registry, instanceId, httpsServer, healthState, registryHeartbeat, outboxTicker, inboxTicker, logger } = config;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
48
|
+
// macf#1035: memoize the IN-FLIGHT PROMISE, not a `shuttingDown` boolean +
|
|
49
|
+
// `lastResult` snapshot. The old shape returned `lastResult`'s stale
|
|
50
|
+
// default (`true`) to any trigger that arrived while the winning trigger's
|
|
51
|
+
// cleanup was still in flight (see the module docblock for the verified
|
|
52
|
+
// 'end'-then-'close' race). Sharing the actual promise means every caller
|
|
53
|
+
// — however many triggers land in the same tick — awaits the SAME real
|
|
54
|
+
// outcome; none can observe a not-yet-updated placeholder.
|
|
55
|
+
let cleanupPromise;
|
|
56
|
+
async function runCleanup(trigger) {
|
|
23
57
|
logger.info('shutdown_start', {
|
|
24
58
|
agent: agentName,
|
|
25
59
|
...(trigger !== undefined ? { trigger } : {}),
|
|
@@ -123,9 +157,21 @@ export function registerShutdownHandler(config) {
|
|
|
123
157
|
ok = false;
|
|
124
158
|
}
|
|
125
159
|
logger.info('shutdown_complete', { agent: agentName, ok });
|
|
126
|
-
lastResult = ok;
|
|
127
160
|
return ok;
|
|
128
161
|
}
|
|
162
|
+
// macf#1035: the exported `cleanup` is now a thin memoizing wrapper. The
|
|
163
|
+
// FIRST call assigns `cleanupPromise` synchronously (before `runCleanup`'s
|
|
164
|
+
// first `await` — `??=` and the assignment inside it happen in the same
|
|
165
|
+
// synchronous tick, so no second caller can ever race the assignment
|
|
166
|
+
// itself) and every subsequent call — regardless of trigger — returns that
|
|
167
|
+
// SAME promise. Only the winning trigger's value is ever passed to
|
|
168
|
+
// `runCleanup` (matches the pre-#1035 "trigger recorded once" contract);
|
|
169
|
+
// later triggers are ignored for logging purposes but correctly await the
|
|
170
|
+
// real, shared outcome instead of a stale placeholder.
|
|
171
|
+
function cleanup(trigger) {
|
|
172
|
+
cleanupPromise ??= runCleanup(trigger);
|
|
173
|
+
return cleanupPromise;
|
|
174
|
+
}
|
|
129
175
|
// Exit 1 when any cleanup step failed so external monitors (systemd,
|
|
130
176
|
// macf-actions heartbeat) surface the degraded state instead of
|
|
131
177
|
// silently absorbing it into a clean exit (#103 R2). The `trigger` is
|
|
@@ -135,13 +181,25 @@ export function registerShutdownHandler(config) {
|
|
|
135
181
|
};
|
|
136
182
|
process.on('SIGTERM', handlerFor('SIGTERM'));
|
|
137
183
|
process.on('SIGINT', handlerFor('SIGINT'));
|
|
184
|
+
// macf#1035: tmux teardown after a TUI `/exit` closes the pane's pty and
|
|
185
|
+
// delivers SIGHUP to the channel-server child (spawned by Claude Code
|
|
186
|
+
// without setsid/detach, so it shares the pty's foreground process group)
|
|
187
|
+
// — verified live via a tmux-topology repro. SIGHUP's default disposition
|
|
188
|
+
// is immediate, unconditional termination; without a handler the process
|
|
189
|
+
// dies before the stdin 'end' event below ever fires. This process has no
|
|
190
|
+
// useful existence without its parent TUI, so treating a hangup exactly
|
|
191
|
+
// like SIGTERM/SIGINT (graceful deregister, then exit) is the correct
|
|
192
|
+
// response, not merely a defensive one.
|
|
193
|
+
process.on('SIGHUP', handlerFor('SIGHUP'));
|
|
138
194
|
// macf#627: a normal Claude-TUI exit does NOT signal this MCP-stdio child —
|
|
139
195
|
// it only sees stdin reach EOF ('end') / be destroyed ('close') as the parent
|
|
140
196
|
// departs. Wire the SAME deregister handler to both events so a graceful TUI
|
|
141
197
|
// exit deregisters rather than stranding the registry slot until the DR-031
|
|
142
|
-
// TTL backstop (#589). `cleanup()`'s once-guard (
|
|
143
|
-
// await) makes a stdin-close racing a
|
|
144
|
-
//
|
|
198
|
+
// TTL backstop (#589). `cleanup()`'s once-guard (memoized promise, set
|
|
199
|
+
// synchronously before any await — macf#1035) makes a stdin-close racing a
|
|
200
|
+
// SIGTERM — or 'end' then 'close' — run the deregister exactly once, and
|
|
201
|
+
// every racing trigger awaits the SAME real completion rather than a stale
|
|
202
|
+
// placeholder. The child lingers ~8s after TUI exit
|
|
145
203
|
// (devops-observed), ample for the async deregister: the in-flight `cleanup()`
|
|
146
204
|
// promise plus the still-bound HTTPS server keep the event loop alive, and we
|
|
147
205
|
// exit only from `cleanup()`'s `.then()` — never mid-deregister.
|
package/dist/shutdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"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"}
|
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.57",
|
|
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.57",
|
|
37
37
|
"@modelcontextprotocol/sdk": "~1.29.0",
|
|
38
38
|
"@opentelemetry/api": "1.9.1",
|
|
39
39
|
"@opentelemetry/core": "2.7.0",
|