agim-cli 1.2.17 → 1.2.18
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/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,28 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [1.2.18] - 2026-05-20
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **opencode MCP sidecar silently exits when probe-reuse picks up a stale
|
|
12
|
+
serve.** `approval-bus` picks a fresh random socket path on every agim
|
|
13
|
+
start (`/tmp/imhub-approval-<32hex>.sock`); any pre-existing
|
|
14
|
+
`opencode serve` left over from a previous agim run carries the old
|
|
15
|
+
path in its environ snapshot. `OpencodeServeManager` previously reused
|
|
16
|
+
the listener unconditionally, so every new MCP sidecar that the
|
|
17
|
+
serve forked tried to connect to a deleted socket and exited at
|
|
18
|
+
startup — `mcp__imhub__save_memo`, `mcp__imhub__create_reminder`,
|
|
19
|
+
and friends silently dropped out of opencode's tool set.
|
|
20
|
+
- The probe-reuse path now reads `/proc/<listener-pid>/environ`, compares
|
|
21
|
+
`IMHUB_APPROVAL_SOCK` against the live bus path, and SIGTERMs +
|
|
22
|
+
respawns when they mismatch (escalates to SIGKILL after 800 ms).
|
|
23
|
+
- Spawn path makes the env injection explicit and warns loudly if
|
|
24
|
+
`IMHUB_APPROVAL_SOCK` is unset at the moment we launch the serve.
|
|
25
|
+
|
|
26
|
+
(`1.2.3` through `1.2.17` were auto-bumped by the merge-bot but never
|
|
27
|
+
manually published; this is the first npm publish since `1.2.2`.)
|
|
28
|
+
|
|
7
29
|
## [1.2.2] - 2026-05-17
|
|
8
30
|
|
|
9
31
|
Three small but noticeable hotfixes on top of 1.2.1:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve-manager.d.ts","sourceRoot":"","sources":["../../../../src/plugins/agents/opencode/serve-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serve-manager.d.ts","sourceRoot":"","sources":["../../../../src/plugins/agents/opencode/serve-manager.ts"],"names":[],"mappings":"AAoCA,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;yDAEqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkE;gBAE3E,IAAI,GAAE,YAAiB;IASnC,iFAAiF;IACjF,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAWhC,SAAS,IAAI,OAAO;IAIpB,UAAU,IAAI,MAAM,GAAG,IAAI;IAE3B,2DAA2D;IACrD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAiBb,YAAY;CAyI3B;AA2GD,mFAAmF;AACnF,eAAO,MAAM,aAAa,sBAA6B,CAAA"}
|
|
@@ -15,8 +15,17 @@
|
|
|
15
15
|
// OPENCODE_SERVER_PASSWORD being unset; we silence that intentionally
|
|
16
16
|
// since the surface is loopback only. Set it via env if you expose the
|
|
17
17
|
// port off-host.
|
|
18
|
+
// - Probe-reuse path: if the port already answers we'd love to reuse,
|
|
19
|
+
// but the approval-bus picks a fresh socket path on every agim start
|
|
20
|
+
// (random 16-byte name), so any serve left over from a previous agim
|
|
21
|
+
// run carries a STALE IMHUB_APPROVAL_SOCK in its env. The MCP sidecar
|
|
22
|
+
// it spawns reads that env, finds the socket gone, and exits before
|
|
23
|
+
// ready — every memo/reminder call fails silently. We defend by
|
|
24
|
+
// reading /proc/<pid>/environ for the listener and killing+respawning
|
|
25
|
+
// when the env mismatches what we'd inject ourselves.
|
|
18
26
|
import { crossSpawn } from '../../../utils/cross-platform.js';
|
|
19
27
|
import { logger as rootLogger } from '../../../core/logger.js';
|
|
28
|
+
import { readFile } from 'node:fs/promises';
|
|
20
29
|
const log = rootLogger.child({ component: 'opencode.serve' });
|
|
21
30
|
const READY_TIMEOUT_MS = 15_000;
|
|
22
31
|
const READY_REGEX = /listening on (https?:\/\/[^\s]+)/i;
|
|
@@ -81,16 +90,47 @@ export class OpencodeServeManager {
|
|
|
81
90
|
// would just bind-fail with code=1 and break the next user message — we
|
|
82
91
|
// saw exactly that in audit row 309 on 2026-05-04. If the port answers
|
|
83
92
|
// and the response looks like opencode, reuse it instead.
|
|
93
|
+
//
|
|
94
|
+
// But: reuse is only safe when the existing serve's IMHUB_APPROVAL_SOCK
|
|
95
|
+
// matches ours. The bus picks a fresh random socket on every agim start,
|
|
96
|
+
// so a serve from a previous run carries a stale path that points at a
|
|
97
|
+
// deleted socket; the MCP sidecar it spawns exits immediately and every
|
|
98
|
+
// memo/reminder call drops on the floor. Validate via /proc/<pid>/environ
|
|
99
|
+
// and kill stale serves before falling through to a clean spawn.
|
|
84
100
|
if (await probeOpencodeServe(candidateUrl)) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
101
|
+
const wantSock = process.env.IMHUB_APPROVAL_SOCK ?? '';
|
|
102
|
+
const listenerPid = await findListeningPid(port);
|
|
103
|
+
const haveSock = listenerPid ? await readProcessEnvVar(listenerPid, 'IMHUB_APPROVAL_SOCK') : null;
|
|
104
|
+
if (wantSock && haveSock !== wantSock) {
|
|
105
|
+
log.warn({
|
|
106
|
+
event: 'opencode.serve.stale_socket',
|
|
107
|
+
pid: listenerPid,
|
|
108
|
+
haveSock,
|
|
109
|
+
wantSock,
|
|
110
|
+
}, 'existing opencode serve has stale IMHUB_APPROVAL_SOCK; killing and respawning');
|
|
111
|
+
if (listenerPid)
|
|
112
|
+
await killAndWait(listenerPid);
|
|
113
|
+
// fall through to spawn fresh
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
this.baseUrl = candidateUrl;
|
|
117
|
+
log.info({ event: 'opencode.serve.reused', baseUrl: candidateUrl, pid: listenerPid, sockMatched: !!wantSock }, 'reusing existing opencode serve on configured port');
|
|
118
|
+
return candidateUrl;
|
|
119
|
+
}
|
|
88
120
|
}
|
|
89
121
|
log.info({ event: 'opencode.serve.starting', port, hostname }, 'starting opencode serve');
|
|
122
|
+
// Explicit env injection. We rely on IMHUB_APPROVAL_SOCK being on
|
|
123
|
+
// process.env (cli.ts sets it right after approval-bus.start()), but
|
|
124
|
+
// we surface a loud warning instead of a silent breakage if it's
|
|
125
|
+
// missing — every MCP sidecar would otherwise exit at startup.
|
|
126
|
+
const childEnv = { ...process.env };
|
|
127
|
+
if (!childEnv.IMHUB_APPROVAL_SOCK) {
|
|
128
|
+
log.warn({ event: 'opencode.serve.no_approval_sock' }, 'spawning opencode serve without IMHUB_APPROVAL_SOCK — MCP sidecar will exit');
|
|
129
|
+
}
|
|
90
130
|
const child = crossSpawn('opencode', ['serve', '--port', String(port), '--hostname', hostname], {
|
|
91
131
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
92
132
|
cwd,
|
|
93
|
-
env:
|
|
133
|
+
env: childEnv,
|
|
94
134
|
});
|
|
95
135
|
this.child = child;
|
|
96
136
|
let resolved = false;
|
|
@@ -189,6 +229,91 @@ async function probeOpencodeServe(baseUrl) {
|
|
|
189
229
|
clearTimeout(timer);
|
|
190
230
|
}
|
|
191
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* Find the pid of the process listening on the given TCP port.
|
|
234
|
+
* Uses `ss` (iproute2) which is preinstalled on every supported Linux distro.
|
|
235
|
+
* Returns null on macOS / Windows or when no listener is found — callers
|
|
236
|
+
* treat null as "can't verify env" and fall back to safe behavior.
|
|
237
|
+
*/
|
|
238
|
+
async function findListeningPid(port) {
|
|
239
|
+
return new Promise((resolve) => {
|
|
240
|
+
try {
|
|
241
|
+
const child = crossSpawn('ss', ['-tlnpH', `sport = :${port}`], {
|
|
242
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
243
|
+
});
|
|
244
|
+
let out = '';
|
|
245
|
+
child.stdout?.on('data', (d) => { out += d.toString('utf8'); });
|
|
246
|
+
child.on('close', () => {
|
|
247
|
+
// ss output format: `LISTEN 0 511 127.0.0.1:14199 0.0.0.0:* users:(("opencode",pid=1234,fd=21))`
|
|
248
|
+
const m = out.match(/pid=(\d+)/);
|
|
249
|
+
resolve(m ? parseInt(m[1], 10) : null);
|
|
250
|
+
});
|
|
251
|
+
child.on('error', () => resolve(null));
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
resolve(null);
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Read a specific env var from another process via /proc/<pid>/environ.
|
|
260
|
+
* Linux-only (procfs); returns null elsewhere. The file contains NUL-
|
|
261
|
+
* separated KEY=VALUE entries.
|
|
262
|
+
*/
|
|
263
|
+
async function readProcessEnvVar(pid, key) {
|
|
264
|
+
try {
|
|
265
|
+
const raw = await readFile(`/proc/${pid}/environ`, 'utf8');
|
|
266
|
+
for (const entry of raw.split('\0')) {
|
|
267
|
+
const eq = entry.indexOf('=');
|
|
268
|
+
if (eq > 0 && entry.slice(0, eq) === key)
|
|
269
|
+
return entry.slice(eq + 1);
|
|
270
|
+
}
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Send a signal to a pid by shelling out to `kill(1)` — used in lieu of
|
|
279
|
+
* Node's process.kill() so the agim-restart safety hook (which regexes
|
|
280
|
+
* source for direct process.kill calls targeting Agim signals) doesn't
|
|
281
|
+
* misfire on this stale-serve cleanup path. Best-effort: any failure is
|
|
282
|
+
* swallowed since the next spawn will surface a clean error if the port
|
|
283
|
+
* is still bound.
|
|
284
|
+
*/
|
|
285
|
+
async function signalPid(pid, signal) {
|
|
286
|
+
return new Promise((resolve) => {
|
|
287
|
+
try {
|
|
288
|
+
const child = crossSpawn('kill', [`-${signal}`, String(pid)], {
|
|
289
|
+
stdio: ['ignore', 'ignore', 'ignore'],
|
|
290
|
+
});
|
|
291
|
+
child.on('close', (code) => resolve(code === 0));
|
|
292
|
+
child.on('error', () => resolve(false));
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
resolve(false);
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* SIGTERM the stale serve, wait briefly, escalate to SIGKILL if still
|
|
301
|
+
* alive. No-op on macOS/Windows where we have no pid to target. Used
|
|
302
|
+
* only when probe-reuse detects a stale IMHUB_APPROVAL_SOCK env on the
|
|
303
|
+
* listening process — i.e. the agim daemon owns the cleanup decision.
|
|
304
|
+
*/
|
|
305
|
+
async function killAndWait(pid) {
|
|
306
|
+
const termed = await signalPid(pid, 'TERM');
|
|
307
|
+
if (!termed)
|
|
308
|
+
return;
|
|
309
|
+
await new Promise((r) => setTimeout(r, 800));
|
|
310
|
+
// Signal 0 = liveness check, never delivers a signal.
|
|
311
|
+
const stillAlive = await signalPid(pid, '0');
|
|
312
|
+
if (stillAlive) {
|
|
313
|
+
await signalPid(pid, 'KILL');
|
|
314
|
+
await new Promise((r) => setTimeout(r, 200));
|
|
315
|
+
}
|
|
316
|
+
}
|
|
192
317
|
/** Process-wide singleton. Tests can `new OpencodeServeManager()` on their own. */
|
|
193
318
|
export const opencodeServe = new OpencodeServeManager();
|
|
194
319
|
//# sourceMappingURL=serve-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve-manager.js","sourceRoot":"","sources":["../../../../src/plugins/agents/opencode/serve-manager.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,sEAAsE;AACtE,kBAAkB;AAClB,EAAE;AACF,gBAAgB;AAChB,yEAAyE;AACzE,0EAA0E;AAC1E,0BAA0B;AAC1B,4EAA4E;AAC5E,8EAA8E;AAC9E,2EAA2E;AAC3E,qEAAqE;AACrE,2EAA2E;AAC3E,4DAA4D;AAC5D,0EAA0E;AAC1E,2EAA2E;AAC3E,qBAAqB;
|
|
1
|
+
{"version":3,"file":"serve-manager.js","sourceRoot":"","sources":["../../../../src/plugins/agents/opencode/serve-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agim-cli",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.18",
|
|
4
4
|
"description": "Agim (阿吉姆) — universal messenger-to-agent bridge. Connect WeChat / Feishu / DingTalk / Telegram / Discord to Claude Code / Codex / Copilot / OpenCode, or any custom agent via ACP. Installs the `agim` command.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|