@0xmaxma/claude-gateway 1.8.4 → 1.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +11 -2
  2. package/config.template.json +5 -3
  3. package/dist/agent/model-catalog.d.ts.map +1 -1
  4. package/dist/agent/model-catalog.js +5 -13
  5. package/dist/agent/model-catalog.js.map +1 -1
  6. package/dist/agent/runner.d.ts +1 -1
  7. package/dist/agent/runner.d.ts.map +1 -1
  8. package/dist/agent/runner.js +22 -3
  9. package/dist/agent/runner.js.map +1 -1
  10. package/dist/api/apps-router.d.ts.map +1 -1
  11. package/dist/api/apps-router.js +31 -9
  12. package/dist/api/apps-router.js.map +1 -1
  13. package/dist/api/gateway-router.js +1 -1
  14. package/dist/api/gateway-router.js.map +1 -1
  15. package/dist/api/packages.d.ts.map +1 -1
  16. package/dist/api/packages.js +17 -1
  17. package/dist/api/packages.js.map +1 -1
  18. package/dist/api/share-router.d.ts +8 -0
  19. package/dist/api/share-router.d.ts.map +1 -1
  20. package/dist/api/share-router.js +100 -10
  21. package/dist/api/share-router.js.map +1 -1
  22. package/dist/apps/agent-manager.d.ts +35 -2
  23. package/dist/apps/agent-manager.d.ts.map +1 -1
  24. package/dist/apps/agent-manager.js +131 -15
  25. package/dist/apps/agent-manager.js.map +1 -1
  26. package/dist/apps/installer.d.ts +49 -1
  27. package/dist/apps/installer.d.ts.map +1 -1
  28. package/dist/apps/installer.js +74 -17
  29. package/dist/apps/installer.js.map +1 -1
  30. package/dist/cli/args.d.ts +6 -0
  31. package/dist/cli/args.d.ts.map +1 -1
  32. package/dist/cli/args.js +9 -1
  33. package/dist/cli/args.js.map +1 -1
  34. package/dist/cli/commands/logs.d.ts.map +1 -1
  35. package/dist/cli/commands/logs.js +91 -18
  36. package/dist/cli/commands/logs.js.map +1 -1
  37. package/dist/cli/commands/service.d.ts.map +1 -1
  38. package/dist/cli/commands/service.js +61 -7
  39. package/dist/cli/commands/service.js.map +1 -1
  40. package/dist/cli/index.d.ts.map +1 -1
  41. package/dist/cli/index.js +12 -3
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/cli/output.d.ts +34 -0
  44. package/dist/cli/output.d.ts.map +1 -1
  45. package/dist/cli/output.js +56 -10
  46. package/dist/cli/output.js.map +1 -1
  47. package/dist/config/claude-settings.d.ts +41 -0
  48. package/dist/config/claude-settings.d.ts.map +1 -0
  49. package/dist/config/claude-settings.js +102 -0
  50. package/dist/config/claude-settings.js.map +1 -0
  51. package/dist/index.js +10 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/session/process.d.ts +43 -1
  54. package/dist/session/process.d.ts.map +1 -1
  55. package/dist/session/process.js +154 -9
  56. package/dist/session/process.js.map +1 -1
  57. package/dist/share/share-store.d.ts +45 -4
  58. package/dist/share/share-store.d.ts.map +1 -1
  59. package/dist/share/share-store.js +127 -23
  60. package/dist/share/share-store.js.map +1 -1
  61. package/dist/shutdown-signals.d.ts +18 -0
  62. package/dist/shutdown-signals.d.ts.map +1 -1
  63. package/dist/shutdown-signals.js +33 -2
  64. package/dist/shutdown-signals.js.map +1 -1
  65. package/mcp/server.ts +2 -2
  66. package/mcp/tools/image/module.ts +10 -3
  67. package/mcp/tools/share-file/module.ts +169 -0
  68. package/mcp/tools/shared/share-client.ts +8 -4
  69. package/mcp/tools/telegram/receiver-server.ts +12 -2
  70. package/package.json +1 -1
  71. package/mcp/tools/share-image/module.ts +0 -120
@@ -33,9 +33,13 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ShareStore = exports.ShareError = exports.ARTIFACT_RETENTION_MS = exports.DEFAULT_MAX_TOTAL_BYTES = exports.DEFAULT_MAX_FILE_BYTES = exports.DEFAULT_MAX_REFS = exports.DEFAULT_SHARE_TTL_SECONDS = exports.MINT_DEDUPE_WINDOW_MS = exports.SHARE_TOKEN_RE = void 0;
36
+ exports.ShareStore = exports.SHARE_ALLOW_KINDS = exports.ShareError = exports.ARTIFACT_RETENTION_MS = exports.DEFAULT_MAX_TOTAL_BYTES = exports.DEFAULT_MAX_FILE_BYTES = exports.DEFAULT_MAX_REFS = exports.DEFAULT_SHARE_TTL_SECONDS = exports.MINT_DEDUPE_WINDOW_MS = exports.SHARE_TOKEN_RE = void 0;
37
+ exports.shareEnv = shareEnv;
37
38
  exports.shareLimitsFromEnv = shareLimitsFromEnv;
38
39
  exports.detectImageMime = detectImageMime;
40
+ exports.isShareAllowKind = isShareAllowKind;
41
+ exports.detectShareMime = detectShareMime;
42
+ exports.mimeDetectorFor = mimeDetectorFor;
39
43
  exports.validateShareFile = validateShareFile;
40
44
  const fs = __importStar(require("fs"));
41
45
  const path = __importStar(require("path"));
@@ -67,15 +71,26 @@ exports.DEFAULT_MAX_TOTAL_BYTES = 50 * 1024 * 1024; // 50 MiB
67
71
  * TTL (max 24h) and any live session, so removal never breaks an active ref. */
68
72
  exports.ARTIFACT_RETENTION_MS = 30 * 24 * 60 * 60 * 1000; // 30 days
69
73
  const ARTIFACT_PRUNE_THROTTLE_MS = 60 * 60 * 1000; // sweep at most once/hour
74
+ /**
75
+ * Read a share setting, preferring the neutral `SHARE_*` name and falling back
76
+ * to the legacy `IMAGE_SHARE_*` one (#444). Both names are forwarded to session
77
+ * subprocesses, so an operator who set either keeps working. An empty value
78
+ * counts as unset — `src/session/process.ts` forwards unset vars as `''`, and
79
+ * without this an empty new name would shadow a real legacy one.
80
+ */
81
+ function shareEnv(suffix) {
82
+ const pick = (v) => (v !== undefined && v !== '' ? v : undefined);
83
+ return pick(process.env[`SHARE_${suffix}`]) ?? pick(process.env[`IMAGE_SHARE_${suffix}`]);
84
+ }
70
85
  function shareLimitsFromEnv() {
71
86
  const num = (v, dflt) => {
72
87
  const n = Number(v);
73
88
  return Number.isFinite(n) && n > 0 ? Math.floor(n) : dflt;
74
89
  };
75
90
  return {
76
- maxRefs: num(process.env.IMAGE_SHARE_MAX_REFS, exports.DEFAULT_MAX_REFS),
77
- maxFileBytes: num(process.env.IMAGE_SHARE_MAX_FILE_BYTES, exports.DEFAULT_MAX_FILE_BYTES),
78
- maxTotalBytes: num(process.env.IMAGE_SHARE_MAX_TOTAL_BYTES, exports.DEFAULT_MAX_TOTAL_BYTES),
91
+ maxRefs: num(shareEnv('MAX_REFS'), exports.DEFAULT_MAX_REFS),
92
+ maxFileBytes: num(shareEnv('MAX_FILE_BYTES'), exports.DEFAULT_MAX_FILE_BYTES),
93
+ maxTotalBytes: num(shareEnv('MAX_TOTAL_BYTES'), exports.DEFAULT_MAX_TOTAL_BYTES),
79
94
  };
80
95
  }
81
96
  /** Typed error with a stable machine-readable code (used for HTTP mapping). */
@@ -86,7 +101,10 @@ class ShareError extends Error {
86
101
  }
87
102
  }
88
103
  exports.ShareError = ShareError;
89
- /** Phase-1 formats: PNG / JPEG / WebP only (§11). GIF/SVG/PDF are rejected. */
104
+ /** Raster image formats: PNG / JPEG / WebP (§11). GIF/SVG/PDF are NOT images
105
+ * here — callers that genuinely need "is this an image" (LINE image messages,
106
+ * provider image-edit refs, the session image catalog) must keep using this
107
+ * one rather than the wider detectShareMime below. */
90
108
  function detectImageMime(header) {
91
109
  if (header.length >= 3 && header[0] === 0xff && header[1] === 0xd8 && header[2] === 0xff)
92
110
  return 'image/jpeg';
@@ -98,14 +116,40 @@ function detectImageMime(header) {
98
116
  return 'image/webp';
99
117
  return null;
100
118
  }
119
+ exports.SHARE_ALLOW_KINDS = ['image', 'any'];
120
+ function isShareAllowKind(v) {
121
+ return typeof v === 'string' && exports.SHARE_ALLOW_KINDS.includes(v);
122
+ }
123
+ /** `%PDF-` — the only non-image format on the share allowlist (#444). */
124
+ function isPdf(header) {
125
+ return (header.length >= 5 &&
126
+ header[0] === 0x25 && header[1] === 0x50 && header[2] === 0x44 && header[3] === 0x46 && header[4] === 0x2d);
127
+ }
128
+ /**
129
+ * The full share allowlist: the three raster image types plus PDF. Deliberately
130
+ * limited to inert binary formats — `text/html`, `image/svg+xml` and
131
+ * `application/octet-stream` are NOT here and must not be added, because the
132
+ * share origin serves them to a browser and they would turn it into an XSS
133
+ * surface (§11).
134
+ */
135
+ function detectShareMime(header) {
136
+ return detectImageMime(header) ?? (isPdf(header) ? 'application/pdf' : null);
137
+ }
138
+ /** Pick the sniffer that matches a share's allow-kind. */
139
+ function mimeDetectorFor(allow) {
140
+ return allow === 'any' ? detectShareMime : detectImageMime;
141
+ }
101
142
  /**
102
143
  * Validate a local ref (absolute or media-relative path) for sharing (§12):
103
144
  * canonicalize, require containment in the agent's media root, reject symlink
104
145
  * escapes, require a regular file, validate magic bytes and the per-file cap.
105
146
  * Returns only the media-root-relative path — client-supplied absolute paths
106
147
  * are never persisted. Throws ShareError with a stable code.
148
+ *
149
+ * `allow` defaults to 'image' so every existing caller keeps today's behaviour;
150
+ * only a caller that has explicitly opted into documents passes 'any' (#444).
107
151
  */
108
- function validateShareFile(agentsBaseDir, agentId, ref, maxFileBytes = exports.DEFAULT_MAX_FILE_BYTES) {
152
+ function validateShareFile(agentsBaseDir, agentId, ref, maxFileBytes = exports.DEFAULT_MAX_FILE_BYTES, allow = 'image') {
109
153
  const root = media_store_1.MediaStore.agentMediaRoot(agentsBaseDir, agentId);
110
154
  let resolved;
111
155
  try {
@@ -131,13 +175,13 @@ function validateShareFile(agentsBaseDir, agentId, ref, maxFileBytes = exports.D
131
175
  stat = fs.lstatSync(resolved); // realpath already followed links; lstat guards devices/FIFOs
132
176
  }
133
177
  catch {
134
- throw new ShareError('image_ref_not_found', 'referenced image file does not exist');
178
+ throw new ShareError('share_ref_not_found', 'referenced file does not exist');
135
179
  }
136
180
  if (!stat.isFile()) {
137
181
  throw new ShareError('invalid_path', 'referenced path is not a regular file');
138
182
  }
139
183
  if (stat.size > maxFileBytes) {
140
- throw new ShareError('image_too_large', `image exceeds ${maxFileBytes} bytes`);
184
+ throw new ShareError('file_too_large', `file exceeds ${maxFileBytes} bytes`);
141
185
  }
142
186
  const header = Buffer.alloc(12);
143
187
  const fd = fs.openSync(resolved, 'r');
@@ -147,9 +191,11 @@ function validateShareFile(agentsBaseDir, agentId, ref, maxFileBytes = exports.D
147
191
  finally {
148
192
  fs.closeSync(fd);
149
193
  }
150
- const mime = detectImageMime(header);
194
+ const mime = mimeDetectorFor(allow)(header);
151
195
  if (!mime) {
152
- throw new ShareError('unsupported_image_type', 'only PNG, JPEG and WebP can be shared');
196
+ throw new ShareError('unsupported_file_type', allow === 'any'
197
+ ? 'only PNG, JPEG, WebP and PDF can be shared'
198
+ : 'only PNG, JPEG and WebP can be shared');
153
199
  }
154
200
  const relativePath = path.relative(root, resolved);
155
201
  if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
@@ -169,8 +215,22 @@ class ShareStore {
169
215
  this.db.exec('PRAGMA journal_mode=WAL');
170
216
  this.db.exec('PRAGMA busy_timeout=5000');
171
217
  this.db.exec('PRAGMA foreign_keys=ON');
218
+ // #444: the table was `image_shares` back when the bridge could only carry
219
+ // images. Rename in place — and BEFORE the CREATE TABLE IF NOT EXISTS
220
+ // below, which would otherwise create an empty `file_shares` beside the
221
+ // real data and silently 404 every live share. Shares are ephemeral (TTL
222
+ // <= 24h, swept by cleanupExpired) so nothing durable is at stake, but
223
+ // renaming keeps shares minted before the upgrade resolving after it.
224
+ const hasTable = (name) => !!this.db.prepare(`SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?`).get(name);
225
+ if (hasTable('image_shares') && !hasTable('file_shares')) {
226
+ this.db.exec('ALTER TABLE image_shares RENAME TO file_shares');
227
+ // RENAME TO carries indexes over under their OLD names, so drop the old
228
+ // one rather than let CREATE INDEX IF NOT EXISTS add a duplicate.
229
+ this.db.exec('DROP INDEX IF EXISTS image_shares_expiry');
230
+ console.log('[share] renamed legacy image_shares table to file_shares');
231
+ }
172
232
  this.db.exec(`
173
- CREATE TABLE IF NOT EXISTS image_shares (
233
+ CREATE TABLE IF NOT EXISTS file_shares (
174
234
  id TEXT PRIMARY KEY,
175
235
  token_hash BLOB NOT NULL UNIQUE,
176
236
  agent_id TEXT NOT NULL,
@@ -179,9 +239,10 @@ class ShareStore {
179
239
  purpose TEXT NOT NULL,
180
240
  created_at INTEGER NOT NULL,
181
241
  expires_at INTEGER NOT NULL,
182
- revoked_at INTEGER
242
+ revoked_at INTEGER,
243
+ allow_kind TEXT NOT NULL DEFAULT 'image'
183
244
  );
184
- CREATE INDEX IF NOT EXISTS image_shares_expiry ON image_shares(expires_at);
245
+ CREATE INDEX IF NOT EXISTS file_shares_expiry ON file_shares(expires_at);
185
246
 
186
247
  CREATE TABLE IF NOT EXISTS image_artifacts (
187
248
  id TEXT PRIMARY KEY,
@@ -205,6 +266,43 @@ class ShareStore {
205
266
  if (!cols.some((c) => c.name === 'prompt')) {
206
267
  this.db.exec('ALTER TABLE image_artifacts ADD COLUMN prompt TEXT');
207
268
  }
269
+ // Same story for `allow_kind` (#444): DBs minted before documents were
270
+ // allowed carry image-only shares, and 'image' is exactly their existing
271
+ // behaviour, so the default backfills them correctly.
272
+ const shareCols = this.db.prepare(`PRAGMA table_info(file_shares)`).all();
273
+ if (!shareCols.some((c) => c.name === 'allow_kind')) {
274
+ this.db.exec(`ALTER TABLE file_shares ADD COLUMN allow_kind TEXT NOT NULL DEFAULT 'image'`);
275
+ }
276
+ // `image_shares` surviving THIS far means a downgrade recreated it (the
277
+ // pre-#444 release runs its own CREATE TABLE IF NOT EXISTS) and minted
278
+ // into it, and we have now rolled forward. The rename guard above no
279
+ // longer fires — both tables exist — so without this those shares would
280
+ // 404 until their TTL ran out while the orphan table stayed in the file
281
+ // forever. Fold the rows in (they are image-only by definition: the
282
+ // release that wrote them knew nothing else) and drop the orphan, so the
283
+ // migration is idempotent across a rollback rather than one-shot. Runs
284
+ // after the ALTER above so `allow_kind` is guaranteed to exist.
285
+ if (hasTable('image_shares')) {
286
+ const legacy = this.db.prepare(`SELECT COUNT(*) AS n FROM image_shares`).get();
287
+ const before = this.db.prepare(`SELECT COUNT(*) AS n FROM file_shares`).get();
288
+ this.db.exec(`
289
+ INSERT OR IGNORE INTO file_shares
290
+ (id, token_hash, agent_id, session_id, relative_path, purpose, created_at, expires_at, revoked_at, allow_kind)
291
+ SELECT id, token_hash, agent_id, session_id, relative_path, purpose, created_at, expires_at, revoked_at, 'image'
292
+ FROM image_shares
293
+ `);
294
+ const after = this.db.prepare(`SELECT COUNT(*) AS n FROM file_shares`).get();
295
+ // DROP TABLE takes the table's indexes with it.
296
+ this.db.exec('DROP TABLE image_shares');
297
+ // Say so. Reaching here at all means this deployment was rolled back
298
+ // across #444 and rolled forward again — rare, and worth a line in the
299
+ // log rather than a database that quietly changed shape. `skipped` is
300
+ // non-zero only when OR IGNORE hit the token_hash UNIQUE, i.e. the same
301
+ // token exists in both tables; the file_shares row wins because it is the
302
+ // one this build minted. No token or path is logged (§19).
303
+ const folded = after.n - before.n;
304
+ console.log(`[share] migrated legacy image_shares: rows=${legacy.n} folded=${folded} skipped=${legacy.n - folded}`);
305
+ }
208
306
  }
209
307
  // ── artifacts (§8) ────────────────────────────────────────────────────────
210
308
  registerArtifact(a) {
@@ -261,11 +359,14 @@ class ShareStore {
261
359
  /**
262
360
  * Mint a share. `dedupeRef` is the caller-facing identity of the ref
263
361
  * (e.g. "artifact:img_x" or "path:<relative>") — an identical mint for the
264
- * same (agent, session, ref, purpose) within MINT_DEDUPE_WINDOW_MS returns
265
- * the SAME token (§17.4) so provider-side dedupe keeps working.
362
+ * same (agent, session, ref, purpose, allowKind) within MINT_DEDUPE_WINDOW_MS
363
+ * returns the SAME token (§17.4) so provider-side dedupe keeps working.
364
+ * `allowKind` is part of the key because two mints of the same file under
365
+ * different allow-kinds are different capabilities and must not collapse.
266
366
  */
267
367
  mintShare(a) {
268
- const key = [a.agentId, a.sessionId, a.dedupeRef, a.purpose].join('');
368
+ const allowKind = a.allowKind ?? 'image';
369
+ const key = [a.agentId, a.sessionId, a.dedupeRef, a.purpose, allowKind].join('\0');
269
370
  const now = Date.now();
270
371
  const cached = this.mintCache.get(key);
271
372
  if (cached && now - cached.mintedAtMs < exports.MINT_DEDUPE_WINDOW_MS && cached.expiresAtMs > now) {
@@ -275,8 +376,8 @@ class ShareStore {
275
376
  const tokenHash = (0, crypto_1.createHash)('sha256').update(token).digest();
276
377
  const shareId = `shr_${(0, crypto_1.randomBytes)(9).toString('base64url')}`;
277
378
  const expiresAtMs = now + a.ttlSeconds * 1000;
278
- this.db.prepare(`INSERT INTO image_shares (id, token_hash, agent_id, session_id, relative_path, purpose, created_at, expires_at)
279
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(shareId, tokenHash, a.agentId, a.sessionId, a.relativePath, a.purpose, now, expiresAtMs);
379
+ this.db.prepare(`INSERT INTO file_shares (id, token_hash, agent_id, session_id, relative_path, purpose, created_at, expires_at, allow_kind)
380
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(shareId, tokenHash, a.agentId, a.sessionId, a.relativePath, a.purpose, now, expiresAtMs, allowKind);
280
381
  this.mintCache.set(key, { shareId, token, expiresAtMs, deduped: false, mintedAtMs: now });
281
382
  this.pruneMintCache(now);
282
383
  return { shareId, token, expiresAtMs, deduped: false };
@@ -286,8 +387,8 @@ class ShareStore {
286
387
  if (!exports.SHARE_TOKEN_RE.test(token))
287
388
  return null;
288
389
  const tokenHash = (0, crypto_1.createHash)('sha256').update(token).digest();
289
- const row = this.db.prepare(`SELECT id, agent_id, session_id, relative_path, purpose
290
- FROM image_shares
390
+ const row = this.db.prepare(`SELECT id, agent_id, session_id, relative_path, purpose, allow_kind
391
+ FROM file_shares
291
392
  WHERE token_hash = ? AND revoked_at IS NULL AND expires_at > ?`).get(tokenHash, Date.now());
292
393
  if (!row)
293
394
  return null;
@@ -297,16 +398,19 @@ class ShareStore {
297
398
  sessionId: row.session_id,
298
399
  relativePath: row.relative_path,
299
400
  purpose: row.purpose,
401
+ // Anything unrecognised (or a legacy NULL) falls back to the strictest
402
+ // kind — an unknown value must never widen what a share can serve.
403
+ allowKind: isShareAllowKind(row.allow_kind) ? row.allow_kind : 'image',
300
404
  };
301
405
  }
302
406
  getShareOwner(shareId) {
303
- const row = this.db.prepare(`SELECT agent_id, session_id, purpose FROM image_shares WHERE id = ? AND revoked_at IS NULL`).get(shareId);
407
+ const row = this.db.prepare(`SELECT agent_id, session_id, purpose FROM file_shares WHERE id = ? AND revoked_at IS NULL`).get(shareId);
304
408
  return row ? { agentId: row.agent_id, sessionId: row.session_id, purpose: row.purpose } : null;
305
409
  }
306
410
  /** Revoke a share by id. Also evicts any idempotency-cache entry pointing at
307
411
  * it so a post-revoke mint issues a FRESH token. Returns false when unknown. */
308
412
  revokeShare(shareId) {
309
- const res = this.db.prepare(`UPDATE image_shares SET revoked_at = ? WHERE id = ? AND revoked_at IS NULL`).run(Date.now(), shareId);
413
+ const res = this.db.prepare(`UPDATE file_shares SET revoked_at = ? WHERE id = ? AND revoked_at IS NULL`).run(Date.now(), shareId);
310
414
  for (const [key, entry] of this.mintCache) {
311
415
  if (entry.shareId === shareId)
312
416
  this.mintCache.delete(key);
@@ -316,7 +420,7 @@ class ShareStore {
316
420
  /** Lazy cleanup — delete expired rows. Safe to call opportunistically. */
317
421
  cleanupExpired() {
318
422
  try {
319
- this.db.prepare(`DELETE FROM image_shares WHERE expires_at <= ?`).run(Date.now());
423
+ this.db.prepare(`DELETE FROM file_shares WHERE expires_at <= ?`).run(Date.now());
320
424
  }
321
425
  catch {
322
426
  /* best-effort */
@@ -1 +1 @@
1
- {"version":3,"file":"share-store.js","sourceRoot":"","sources":["../../src/share/share-store.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,gDAUC;AAYD,0CASC;AAgBD,8CAkDC;AA1ID,uCAAyB;AACzB,2CAA6B;AAC7B,mCAAiD;AACjD,6CAA2C;AAC3C,wDAAoD;AAEpD;;;;;;;;;GASG;AAEH,8DAA8D;AACjD,QAAA,cAAc,GAAG,qBAAqB,CAAC;AAEpD;;;uDAGuD;AAC1C,QAAA,qBAAqB,GAAG,KAAM,CAAC;AAE/B,QAAA,yBAAyB,GAAG,IAAI,CAAC,CAAC,iBAAiB;AACnD,QAAA,gBAAgB,GAAG,CAAC,CAAC;AACrB,QAAA,sBAAsB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,SAAS;AACpD,QAAA,uBAAuB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,SAAS;AAClE;iFACiF;AACpE,QAAA,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,UAAU;AACzE,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,0BAA0B;AAQ7E,SAAgB,kBAAkB;IAChC,MAAM,GAAG,GAAG,CAAC,CAAqB,EAAE,IAAY,EAAU,EAAE;QAC1D,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,wBAAgB,CAAC;QAChE,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,8BAAsB,CAAC;QACjF,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,+BAAuB,CAAC;KACrF,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAa,UAAW,SAAQ,KAAK;IAEnC,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAND,gCAMC;AAED,+EAA+E;AAC/E,SAAgB,eAAe,CAAC,MAAc;IAC5C,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC;IAC9G,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,WAAW,CAAC;IACnI,IACE,MAAM,CAAC,MAAM,IAAI,EAAE;QACnB,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI;QACpF,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI;QACtF,OAAO,YAAY,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC;AASD;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAC/B,aAAqB,EACrB,OAAe,EACf,GAAW,EACX,eAAuB,8BAAsB;IAE7C,MAAM,IAAI,GAAG,wBAAU,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC/D,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,wEAAwE;YACxE,gDAAgD;YAChD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC5E,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3D,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,wBAAU,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,sCAAsC,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,8DAA8D;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,UAAU,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,uCAAuC,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,GAAG,YAAY,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,iBAAiB,EAAE,iBAAiB,YAAY,QAAQ,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,UAAU,CAAC,wBAAwB,EAAE,uCAAuC,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnD,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,sCAAsC,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC;AAuCD,MAAa,UAAU;IAQrB,YAAY,MAAc;QAN1B;kFAC0E;QACzD,cAAS,GAAG,IAAI,GAAG,EAAgD,CAAC;QACrF,oFAAoF;QAC5E,wBAAmB,GAAG,CAAC,CAAC;QAG9B,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,EAAE,GAAG,IAAI,0BAAY,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4BZ,CAAC,CAAC;QACH,sEAAsE;QACtE,yEAAyE;QACzE,+CAA+C;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,EAA6B,CAAC;QACpG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,6EAA6E;IAE7E,gBAAgB,CAAC,CAShB;QACC,MAAM,EAAE,GAAG,OAAO,IAAA,oBAAW,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,EAAE,CAAC,OAAO,CACb;6CACuC,CACxC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;QAC1I,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;uFACmF;IAC3E,iBAAiB;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,IAAI,CAAC,mBAAmB,GAAG,0BAA0B;YAAE,OAAO;QACxE,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC;QAC/B,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,6BAAqB,CAAC,CAAC;QACxG,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;IAED;uEACmE;IACnE,eAAe,CAAC,OAAe,EAAE,SAAiB,EAAE,UAAkB;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB;6EACuE,CACxE,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,CAWvB,CAAC;QACd,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO;YACL,UAAU,EAAE,GAAG,CAAC,EAAE;YAClB,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;YACzB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;SACzB,CAAC;IACJ,CAAC;IAED;;;;iEAI6D;IAC7D,kBAAkB,CAChB,OAAe,EACf,SAAiB,EACjB,YAAoB;QAEpB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB;;oDAE8C,CAC/C,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,CAAsD,CAAC;QAC7F,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAED,6EAA6E;IAE7E;;;;;OAKG;IACH,SAAS,CAAC,CAOT;QACC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,6BAAqB,IAAI,MAAM,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC;YAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1G,CAAC;QACD,MAAM,KAAK,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9D,MAAM,OAAO,GAAG,OAAO,IAAA,oBAAW,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9D,MAAM,WAAW,GAAG,GAAG,GAAG,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;QAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,CACb;uCACiC,CAClC,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QAC/F,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzD,CAAC;IAED,sEAAsE;IACtE,aAAa,CAAC,KAAa;QACzB,IAAI,CAAC,sBAAc,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB;;sEAEgE,CACjE,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAEd,CAAC;QACd,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,EAAE;YACf,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,OAAe;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB,4FAA4F,CAC7F,CAAC,GAAG,CAAC,OAAO,CAA0E,CAAC;QACxF,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACjG,CAAC;IAED;qFACiF;IACjF,WAAW,CAAC,OAAe;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB,4EAA4E,CAC7E,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,0EAA0E;IAC1E,cAAc;QACZ,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACpF,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,GAAW;QAChC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,GAAG,GAAG,KAAK,CAAC,UAAU,IAAI,6BAAqB,IAAI,KAAK,CAAC,WAAW,IAAI,GAAG,EAAE,CAAC;gBAChF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA1OD,gCA0OC"}
1
+ {"version":3,"file":"share-store.js","sourceRoot":"","sources":["../../src/share/share-store.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,24 @@
24
24
  * hand-run process is stopped, and its default action skips handlers entirely.
25
25
  */
26
26
  export declare const SHUTDOWN_SIGNALS: readonly NodeJS.Signals[];
27
+ /**
28
+ * sysexits.h `EX_TEMPFAIL` — "temporary failure, user is invited to retry".
29
+ * Used by callers that trigger their own shutdown (see `requestExitCode`) but
30
+ * need `Restart=on-failure` systemd units to treat the exit as failure-worth-
31
+ * restarting, rather than the default clean-shutdown code 0. See issue #450:
32
+ * an API-triggered update SIGTERMs the gateway itself expecting the
33
+ * supervisor to bring it back, but `on-failure` only restarts on a non-zero
34
+ * exit or a signal kill, not on a graceful `exit(0)`.
35
+ */
36
+ export declare const EX_TEMPFAIL = 75;
37
+ /**
38
+ * Overrides the exit code the *next* signal-driven shutdown uses, then resets
39
+ * to 0 (the default clean-exit code) once consumed — so a caller that
40
+ * triggers its own shutdown (e.g. the package updater sending itself
41
+ * SIGTERM) can request `on-failure` supervisors restart it, without pinning
42
+ * every future shutdown to the same code.
43
+ */
44
+ export declare function requestExitCode(code: number): void;
27
45
  export interface ShutdownSignalOptions {
28
46
  /** The teardown itself. Invoked at most once, no matter how many signals arrive. */
29
47
  run: (signal: string) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown-signals.d.ts","sourceRoot":"","sources":["../src/shutdown-signals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,CAAC,OAAO,EAAoC,CAAC;AAE3F,MAAM,WAAW,qBAAqB;IACpC,oFAAoF;IACpF,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,kEAAkE;IAClE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,yDAAyD;IACzD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,6DAA6D;IAC7D,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAA;KAAE,CAAC;CAC/D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,qBAAqB,GAC1B,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAgCnC"}
1
+ {"version":3,"file":"shutdown-signals.d.ts","sourceRoot":"","sources":["../src/shutdown-signals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,CAAC,OAAO,EAAoC,CAAC;AAE3F;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,KAAK,CAAC;AAI9B;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,MAAM,WAAW,qBAAqB;IACpC,oFAAoF;IACpF,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,kEAAkE;IAClE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,yDAAyD;IACzD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,6DAA6D;IAC7D,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAA;KAAE,CAAC;CAC/D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,qBAAqB,GAC1B,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAyCnC"}
@@ -18,7 +18,8 @@
18
18
  * graceful path exists to avoid.
19
19
  */
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.SHUTDOWN_SIGNALS = void 0;
21
+ exports.EX_TEMPFAIL = exports.SHUTDOWN_SIGNALS = void 0;
22
+ exports.requestExitCode = requestExitCode;
22
23
  exports.registerShutdownSignals = registerShutdownSignals;
23
24
  /**
24
25
  * Every signal that means "wind down cleanly".
@@ -28,6 +29,27 @@ exports.registerShutdownSignals = registerShutdownSignals;
28
29
  * hand-run process is stopped, and its default action skips handlers entirely.
29
30
  */
30
31
  exports.SHUTDOWN_SIGNALS = ['SIGTERM', 'SIGINT', 'SIGHUP'];
32
+ /**
33
+ * sysexits.h `EX_TEMPFAIL` — "temporary failure, user is invited to retry".
34
+ * Used by callers that trigger their own shutdown (see `requestExitCode`) but
35
+ * need `Restart=on-failure` systemd units to treat the exit as failure-worth-
36
+ * restarting, rather than the default clean-shutdown code 0. See issue #450:
37
+ * an API-triggered update SIGTERMs the gateway itself expecting the
38
+ * supervisor to bring it back, but `on-failure` only restarts on a non-zero
39
+ * exit or a signal kill, not on a graceful `exit(0)`.
40
+ */
41
+ exports.EX_TEMPFAIL = 75;
42
+ let pendingExitCode = 0;
43
+ /**
44
+ * Overrides the exit code the *next* signal-driven shutdown uses, then resets
45
+ * to 0 (the default clean-exit code) once consumed — so a caller that
46
+ * triggers its own shutdown (e.g. the package updater sending itself
47
+ * SIGTERM) can request `on-failure` supervisors restart it, without pinning
48
+ * every future shutdown to the same code.
49
+ */
50
+ function requestExitCode(code) {
51
+ pendingExitCode = code;
52
+ }
31
53
  /**
32
54
  * Register a handler for every shutdown signal and return the deduplicated
33
55
  * shutdown function, so callers (e.g. the crash handlers) can trigger the same
@@ -38,9 +60,18 @@ function registerShutdownSignals(opts) {
38
60
  const onError = opts.onError ?? ((err) => console.error('[gateway] Shutdown failed:', err));
39
61
  const target = opts.target ?? process;
40
62
  let inFlight = null;
63
+ // Captured once, by whichever signal actually starts the teardown — not
64
+ // re-read when it resolves. A second signal that merely joins an
65
+ // already-in-flight shutdown (e.g. an operator's own `kill <pid>` landing
66
+ // while an update-triggered self-restart is still draining connections)
67
+ // must not let an unrelated `requestExitCode()` call made in that window
68
+ // change the exit code of a shutdown it didn't start.
69
+ let exitCode = 0;
41
70
  const shutdown = (signal) => {
42
71
  if (inFlight)
43
72
  return inFlight;
73
+ exitCode = pendingExitCode;
74
+ pendingExitCode = 0;
44
75
  opts.onBegin?.(signal);
45
76
  inFlight = opts.run(signal);
46
77
  return inFlight;
@@ -51,7 +82,7 @@ function registerShutdownSignals(opts) {
51
82
  // rejection skipped `.then(exit)` entirely and the gateway hung on the
52
83
  // signal — holding its port and its children — which is a worse outcome
53
84
  // than an unclean exit. Exit non-zero so the failure stays visible.
54
- void shutdown(signal).then(() => exit(0), (err) => {
85
+ void shutdown(signal).then(() => exit(exitCode), (err) => {
55
86
  onError(err);
56
87
  exit(1);
57
88
  });
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown-signals.js","sourceRoot":"","sources":["../src/shutdown-signals.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AA6BH,0DAkCC;AA7DD;;;;;;GAMG;AACU,QAAA,gBAAgB,GAA8B,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAe3F;;;;GAIG;AACH,SAAgB,uBAAuB,CACrC,IAA2B;IAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GACX,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC;IAEtC,IAAI,QAAQ,GAAyB,IAAI,CAAC;IAE1C,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAiB,EAAE;QACjD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;QACvB,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,wBAAgB,EAAE,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACrB,0EAA0E;YAC1E,uEAAuE;YACvE,wEAAwE;YACxE,oEAAoE;YACpE,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CACxB,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EACb,CAAC,GAAG,EAAE,EAAE;gBACN,OAAO,CAAC,GAAG,CAAC,CAAC;gBACb,IAAI,CAAC,CAAC,CAAC,CAAC;YACV,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"shutdown-signals.js","sourceRoot":"","sources":["../src/shutdown-signals.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AA+BH,0CAEC;AAoBD,0DA2CC;AA9FD;;;;;;GAMG;AACU,QAAA,gBAAgB,GAA8B,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAE3F;;;;;;;;GAQG;AACU,QAAA,WAAW,GAAG,EAAE,CAAC;AAE9B,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,IAAY;IAC1C,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC;AAeD;;;;GAIG;AACH,SAAgB,uBAAuB,CACrC,IAA2B;IAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GACX,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC;IAEtC,IAAI,QAAQ,GAAyB,IAAI,CAAC;IAC1C,wEAAwE;IACxE,iEAAiE;IACjE,0EAA0E;IAC1E,wEAAwE;IACxE,yEAAyE;IACzE,sDAAsD;IACtD,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAiB,EAAE;QACjD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,QAAQ,GAAG,eAAe,CAAC;QAC3B,eAAe,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;QACvB,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,wBAAgB,EAAE,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACrB,0EAA0E;YAC1E,uEAAuE;YACvE,wEAAwE;YACxE,oEAAoE;YACpE,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CACxB,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EACpB,CAAC,GAAG,EAAE,EAAE;gBACN,OAAO,CAAC,GAAG,CAAC,CAAC;gBACb,IAAI,CAAC,CAAC,CAAC,CAAC;YACV,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
package/mcp/server.ts CHANGED
@@ -21,7 +21,7 @@ import { SkillsModule } from './tools/skills/module';
21
21
  import { AgentModule } from './tools/agent/module';
22
22
  import { BrowserModule } from './tools/browser/module';
23
23
  import { ImageModule } from './tools/image/module';
24
- import { ShareImageModule } from './tools/share-image/module';
24
+ import { ShareFileModule } from './tools/share-file/module';
25
25
  import { AppsModule } from './tools/apps/module';
26
26
  import { ApiModule } from './tools/api/module';
27
27
  import { MemoryModule } from './tools/memory/module';
@@ -46,7 +46,7 @@ const modules: AnyModule[] = [
46
46
  new AgentModule(),
47
47
  new BrowserModule(),
48
48
  new ImageModule(),
49
- new ShareImageModule(),
49
+ new ShareFileModule(),
50
50
  new AppsModule(),
51
51
  new ApiModule(),
52
52
  new MemoryModule(),
@@ -456,7 +456,11 @@ export class ImageModule implements ToolModule {
456
456
  error: { content: [{ type: 'text', text }], isError: true },
457
457
  });
458
458
  const maxRefs = (() => {
459
- const n = Number(process.env.IMAGE_SHARE_MAX_REFS);
459
+ // #444: the neutral SHARE_* name wins; IMAGE_SHARE_* is the legacy
460
+ // fallback. Both are forwarded to this subprocess, and unset vars arrive
461
+ // as '' — so treat empty as unset rather than letting it shadow the other.
462
+ const raw = process.env.SHARE_MAX_REFS || process.env.IMAGE_SHARE_MAX_REFS;
463
+ const n = Number(raw);
460
464
  return Number.isFinite(n) && n > 0 ? Math.floor(n) : 5;
461
465
  })();
462
466
  if (refs.length > maxRefs) {
@@ -493,8 +497,11 @@ export class ImageModule implements ToolModule {
493
497
  minted = await createShares(localRefs.map((e) => e.ref), { purpose: 'codex_ref' });
494
498
  } catch (err) {
495
499
  if (err instanceof ShareClientError) {
496
- if (err.code === 'image_ref_not_found') {
497
- return fail('generate_image: image_ref_not_found: the referenced image/artifact does not exist in this session.');
500
+ // #444 renamed this gateway error code image_ref_not_found ->
501
+ // share_ref_not_found. Match both: this subprocess can be talking to
502
+ // a gateway that predates the rename.
503
+ if (err.code === 'share_ref_not_found' || err.code === 'image_ref_not_found') {
504
+ return fail(`generate_image: ${err.code}: the referenced image/artifact does not exist in this session.`);
498
505
  }
499
506
  return fail(`generate_image: ${err.code}: ${err.message}`);
500
507
  }