@0xmaxma/claude-gateway 1.8.2 → 1.8.4

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 (99) hide show
  1. package/README.md +63 -2
  2. package/config.template.json +4 -0
  3. package/dist/agent/dreaming/config.d.ts +6 -0
  4. package/dist/agent/dreaming/config.d.ts.map +1 -1
  5. package/dist/agent/dreaming/config.js +17 -24
  6. package/dist/agent/dreaming/config.js.map +1 -1
  7. package/dist/agent/knowledge/config.d.ts.map +1 -1
  8. package/dist/agent/knowledge/config.js +7 -13
  9. package/dist/agent/knowledge/config.js.map +1 -1
  10. package/dist/agent/runner.d.ts +87 -13
  11. package/dist/agent/runner.d.ts.map +1 -1
  12. package/dist/agent/runner.js +342 -117
  13. package/dist/agent/runner.js.map +1 -1
  14. package/dist/agent/turn-stream.d.ts +202 -0
  15. package/dist/agent/turn-stream.d.ts.map +1 -0
  16. package/dist/agent/turn-stream.js +322 -0
  17. package/dist/agent/turn-stream.js.map +1 -0
  18. package/dist/api/apps-router.d.ts.map +1 -1
  19. package/dist/api/apps-router.js +14 -2
  20. package/dist/api/apps-router.js.map +1 -1
  21. package/dist/api/gateway-router.d.ts.map +1 -1
  22. package/dist/api/gateway-router.js +2 -3
  23. package/dist/api/gateway-router.js.map +1 -1
  24. package/dist/api/line-webhook-router.d.ts +43 -1
  25. package/dist/api/line-webhook-router.d.ts.map +1 -1
  26. package/dist/api/line-webhook-router.js +286 -38
  27. package/dist/api/line-webhook-router.js.map +1 -1
  28. package/dist/api/router.d.ts +7 -1
  29. package/dist/api/router.d.ts.map +1 -1
  30. package/dist/api/router.js +328 -114
  31. package/dist/api/router.js.map +1 -1
  32. package/dist/apps/agent-manager.d.ts.map +1 -1
  33. package/dist/apps/agent-manager.js +4 -1
  34. package/dist/apps/agent-manager.js.map +1 -1
  35. package/dist/apps/installer.d.ts +75 -2
  36. package/dist/apps/installer.d.ts.map +1 -1
  37. package/dist/apps/installer.js +198 -13
  38. package/dist/apps/installer.js.map +1 -1
  39. package/dist/cli/commands/debug-bundle.d.ts.map +1 -1
  40. package/dist/cli/commands/debug-bundle.js +9 -52
  41. package/dist/cli/commands/debug-bundle.js.map +1 -1
  42. package/dist/cli/commands/gateway.d.ts +6 -1
  43. package/dist/cli/commands/gateway.d.ts.map +1 -1
  44. package/dist/cli/commands/gateway.js +14 -3
  45. package/dist/cli/commands/gateway.js.map +1 -1
  46. package/dist/cli/commands/logs.d.ts +37 -0
  47. package/dist/cli/commands/logs.d.ts.map +1 -0
  48. package/dist/cli/commands/logs.js +356 -0
  49. package/dist/cli/commands/logs.js.map +1 -0
  50. package/dist/cli/index.d.ts.map +1 -1
  51. package/dist/cli/index.js +16 -5
  52. package/dist/cli/index.js.map +1 -1
  53. package/dist/cli/logs-dir.d.ts +69 -0
  54. package/dist/cli/logs-dir.d.ts.map +1 -0
  55. package/dist/cli/logs-dir.js +166 -0
  56. package/dist/cli/logs-dir.js.map +1 -0
  57. package/dist/config/agent-env.d.ts +41 -0
  58. package/dist/config/agent-env.d.ts.map +1 -0
  59. package/dist/config/agent-env.js +154 -0
  60. package/dist/config/agent-env.js.map +1 -0
  61. package/dist/config/loader.d.ts +33 -2
  62. package/dist/config/loader.d.ts.map +1 -1
  63. package/dist/config/loader.js +33 -9
  64. package/dist/config/loader.js.map +1 -1
  65. package/dist/config/watcher.d.ts +1 -0
  66. package/dist/config/watcher.d.ts.map +1 -1
  67. package/dist/config/watcher.js +22 -1
  68. package/dist/config/watcher.js.map +1 -1
  69. package/dist/index.js +50 -51
  70. package/dist/index.js.map +1 -1
  71. package/dist/load-dotenv.d.ts +17 -0
  72. package/dist/load-dotenv.d.ts.map +1 -1
  73. package/dist/load-dotenv.js +32 -9
  74. package/dist/load-dotenv.js.map +1 -1
  75. package/dist/logger.d.ts +52 -1
  76. package/dist/logger.d.ts.map +1 -1
  77. package/dist/logger.js +264 -2
  78. package/dist/logger.js.map +1 -1
  79. package/dist/session/store.d.ts +9 -0
  80. package/dist/session/store.d.ts.map +1 -1
  81. package/dist/session/store.js +12 -0
  82. package/dist/session/store.js.map +1 -1
  83. package/dist/shell/bypass-dialog.d.ts +234 -0
  84. package/dist/shell/bypass-dialog.d.ts.map +1 -0
  85. package/dist/shell/bypass-dialog.js +339 -0
  86. package/dist/shell/bypass-dialog.js.map +1 -0
  87. package/dist/shell/claude-pty-shell.js +67 -3
  88. package/dist/shell/claude-pty-shell.js.map +1 -1
  89. package/dist/shell/screen.d.ts +22 -11
  90. package/dist/shell/screen.d.ts.map +1 -1
  91. package/dist/shell/screen.js +50 -32
  92. package/dist/shell/screen.js.map +1 -1
  93. package/dist/types.d.ts +40 -0
  94. package/dist/types.d.ts.map +1 -1
  95. package/dist/utils/config-num.d.ts +22 -0
  96. package/dist/utils/config-num.d.ts.map +1 -0
  97. package/dist/utils/config-num.js +34 -0
  98. package/dist/utils/config-num.js.map +1 -0
  99. package/package.json +1 -1
@@ -33,7 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.safeFileExt = safeFileExt;
37
+ exports.safeAttachmentName = safeAttachmentName;
36
38
  exports.normalizeLineEvent = normalizeLineEvent;
39
+ exports.markMediaUnavailable = markMediaUnavailable;
37
40
  exports.parseCliPostback = parseCliPostback;
38
41
  exports.normalizeLinePostback = normalizeLinePostback;
39
42
  exports.createLineWebhookHandler = createLineWebhookHandler;
@@ -48,10 +51,10 @@ const line_mention_1 = require("./line-mention");
48
51
  const media_store_1 = require("../history/media-store");
49
52
  const image_sniff_1 = require("../shared/image-sniff");
50
53
  const LOADING_SECONDS = 20; // 5..60, multiple of 5; 1:1 chats only
51
- // Inbound image cap. Sourced from MediaStore, which is where the downloaded
52
- // bytes end up — a router-local literal could drift into accepting an image the
53
- // store then rejects.
54
- const MAX_IMAGE_BYTES = media_store_1.MediaStore.maxUploadBytes;
54
+ // Inbound media cap — images and files alike. Sourced from MediaStore, which is
55
+ // where the downloaded bytes end up — a router-local literal could drift into
56
+ // accepting media the store then rejects.
57
+ const MAX_MEDIA_BYTES = media_store_1.MediaStore.maxUploadBytes;
55
58
  /** A sane public hostname: letters, digits, dot, hyphen, optional :port. */
56
59
  const HOST_RE = /^[A-Za-z0-9.\-:]+$/;
57
60
  /** Extract host[:port] from a configured publicUrl (e.g. "https://vm.example.com/gateway"
@@ -109,34 +112,176 @@ function persistPublicBase(workspace, host, logger) {
109
112
  }
110
113
  }
111
114
  /**
112
- * Fetch an inbound LINE image's bytes via the blob (data) API and write them to
113
- * a temp file, returning its absolute path. The runner copies this into the
114
- * agent's permanent MediaStore and tells the agent to Read it (meta.image_path).
115
- * Returns null on failure; the turn still forwards (agent sees the text/empty).
115
+ * Extensions a browser would treat as ACTIVE content. A staged file is reachable
116
+ * over the authenticated media endpoint (`GET /api/agents/:id/media/*`, which
117
+ * hands the extension to `res.sendFile` and so to Express's Content-Type lookup),
118
+ * so a sender-named `x.html` or `x.svg` opened from the UI would execute script on
119
+ * the gateway's own origin. Naming them `bin` costs nothing — the bytes still reach
120
+ * the agent unchanged, and that endpoint content-sniffs a `.bin` against image/PDF
121
+ * magic only, falling back to application/octet-stream. This is a denylist by
122
+ * necessity (an allowlist would degrade every legitimate but unlisted document
123
+ * type), so it is the second line: `X-Content-Type-Options: nosniff` on that
124
+ * endpoint is the first.
125
+ *
126
+ * NOT hand-picked — that is how the first cut of this list ended up denying `xml`
127
+ * and `xsl` while letting `xsd` and `rng` through, which `mime` resolves to the
128
+ * very same `application/xml`. The list below is DERIVED from the table
129
+ * `res.sendFile` actually consults (`mime@1.6.0`'s `types.json`, reached via
130
+ * express → send), taking every extension whose type is:
131
+ *
132
+ * - HTML — `text/html`, `application/xhtml+xml`
133
+ * - XML-parsed — `text/xml`, `application/xml`, `application/xml-dtd`, and
134
+ * anything with a `+xml` suffix, which Blink's
135
+ * `IsXMLMIMEType` renders through the XML parser and so
136
+ * honours an `<?xml-stylesheet?>` PI (XSLT → scripted HTML)
137
+ * - script / style — any `javascript` / `ecmascript` subtype, and `text/css`
138
+ *
139
+ * plus the server-side extensions (`php`, `jsp`, `asp*`, `hta`) that predate the
140
+ * derivation. Regenerate after an express/send major bump — the suffix guard in
141
+ * `isBrowserActiveExt` covers new `*htm`/`*html`/`*xml` spellings until then.
116
142
  */
117
- async function downloadLineImage(blobClient, messageId) {
118
- const stream = await blobClient.getMessageContent(messageId);
119
- const dest = path.join(os.tmpdir(), `line-img-${messageId}-${Date.now()}.tmp`);
143
+ const BROWSER_ACTIVE_EXTS = new Set([
144
+ 'asp', 'aspx', 'atom', 'atomcat', 'atomsvc', 'ccxml', 'cdxml', 'cjs', 'css', 'dae',
145
+ 'davmount', 'dbk', 'dd2', 'dtb', 'dtd', 'ecma', 'emma', 'es3', 'et3', 'gml', 'gpx',
146
+ 'grxml', 'hal', 'hta', 'htm', 'html', 'ink', 'inkml', 'irp', 'js', 'jsp', 'kml',
147
+ 'lasxml', 'lbe', 'link66', 'lostxml', 'mads', 'mathml', 'meta4', 'metalink', 'mets',
148
+ 'mjs', 'mods', 'mpd', 'mpkg', 'mrcx', 'mscml', 'musicxml', 'mxml', 'ncx', 'omdoc', 'opf',
149
+ 'osfpvg', 'php', 'pls', 'pskcxml', 'rdf', 'res', 'rif', 'rl', 'rld', 'rng', 'rs', 'rsd',
150
+ 'rss', 'sbml', 'sdkd', 'sdkm', 'shf', 'shtm', 'shtml', 'smi', 'smil', 'sru', 'srx',
151
+ 'ssdl', 'ssml', 'svg', 'svgz', 'tei', 'teicorpus', 'tfi', 'uoml', 'uvt', 'uvvt', 'vxml',
152
+ 'wadl', 'wbs', 'wsdl', 'wspolicy', 'x3d', 'x3dz', 'xaml', 'xdf', 'xdm', 'xdp', 'xdssc',
153
+ 'xenc', 'xer', 'xht', 'xhtml', 'xhvml', 'xlf', 'xml', 'xop', 'xpl', 'xsd', 'xsl', 'xslt',
154
+ 'xsm', 'xspf', 'xul', 'xvm', 'xvml', 'yin', 'zaz', 'zmm',
155
+ ]);
156
+ /**
157
+ * True when serving a file under this extension could execute script on the
158
+ * gateway's origin. The trailing-family test is deliberate belt-and-braces: a
159
+ * future `types.json` entry like `dhtml` or `foo.xml` variant lands in the same
160
+ * two dangerous families, and this catches it without a code change.
161
+ */
162
+ function isBrowserActiveExt(ext) {
163
+ return BROWSER_ACTIVE_EXTS.has(ext) || /(?:htm|html|xml)$/.test(ext);
164
+ }
165
+ /**
166
+ * Extension for an inbound LINE **file**, derived from the sender-supplied name.
167
+ *
168
+ * LINE reports NO MIME type on `file` message events (an image's type can be
169
+ * sniffed from its bytes; a document's cannot), so the name is the only signal —
170
+ * and it is untrusted webhook input. Treat it as hostile: take the last
171
+ * dot-segment, lowercase it, and accept it only when it is a short alphanumeric
172
+ * run that a browser will not execute. Anything else — traversal segments, path
173
+ * separators, percent-escapes, spaces, an over-long suffix, no suffix at all, or
174
+ * an active-content type — degrades to `bin` rather than reaching the filesystem.
175
+ * A multi-part suffix collapses to its last part ("archive.tar.gz" → "gz"), which
176
+ * is enough for the agent to recognise the file.
177
+ */
178
+ function safeFileExt(fileName) {
179
+ const raw = typeof fileName === 'string' ? fileName : '';
180
+ const dot = raw.lastIndexOf('.');
181
+ // dot <= 0 covers both "no suffix" and a leading-dot name (".env" has no ext).
182
+ if (dot <= 0 || dot === raw.length - 1)
183
+ return 'bin';
184
+ const ext = raw.slice(dot + 1).toLowerCase();
185
+ if (!/^[a-z0-9]{1,8}$/.test(ext))
186
+ return 'bin';
187
+ return isBrowserActiveExt(ext) ? 'bin' : ext;
188
+ }
189
+ /**
190
+ * The sender-supplied file name as surfaced to the agent (`meta.attachment_name`).
191
+ *
192
+ * This string is echoed into the `<channel>` XML the model reads, where
193
+ * `buildChannelXml` escapes only `"` — so strip the control characters and angle
194
+ * brackets that could otherwise forge tag structure, collapse whitespace, and cap
195
+ * the length. It is a LABEL only: the staging path is always built from the
196
+ * message id (see `mediaTempPath`), never from this value. Returns '' when
197
+ * nothing usable survives, and the caller then omits the meta key entirely.
198
+ */
199
+ function safeAttachmentName(fileName) {
200
+ const raw = typeof fileName === 'string' ? fileName : '';
201
+ return raw
202
+ // Control characters (newlines included) and the angle brackets that could
203
+ // forge `<channel ...>` structure in the prompt. Replaced with a space rather
204
+ // than removed, so "a\nb.pdf" cannot silently become the different name
205
+ // "ab.pdf".
206
+ // eslint-disable-next-line no-control-regex
207
+ .replace(/[\u0000-\u001F\u007F<>]/g, ' ')
208
+ .replace(/\s+/g, ' ')
209
+ .trim()
210
+ .slice(0, 120)
211
+ .trim();
212
+ }
213
+ /**
214
+ * Staging path for inbound media. The message id is squeezed to a safe token so a
215
+ * hostile id can never steer the write out of the temp directory — the id is
216
+ * signature-verified webhook input, but the path is built defensively anyway.
217
+ */
218
+ function mediaTempPath(prefix, messageId) {
219
+ const safeId = messageId.replace(/[^A-Za-z0-9_-]/g, '').slice(0, 64) || 'unknown';
220
+ return path.join(os.tmpdir(), `${prefix}-${safeId}-${Date.now()}.tmp`);
221
+ }
222
+ /**
223
+ * Media rejected for size — a distinct type so the caller can tell the agent WHY
224
+ * the bytes are missing without echoing a raw error string into the prompt.
225
+ */
226
+ class MediaTooLargeError extends Error {
227
+ constructor() {
228
+ super(`media exceeds ${MAX_MEDIA_BYTES} byte cap`);
229
+ this.name = 'MediaTooLargeError';
230
+ }
231
+ }
232
+ /**
233
+ * Stream inbound media bytes into `dest`, enforcing MAX_MEDIA_BYTES, then rename
234
+ * to the final extension. `resolveExt` is called once with the first chunk —
235
+ * images sniff their type from the bytes, files take it from the sanitised name.
236
+ *
237
+ * Returns the final absolute path, or null when the stream carried no bytes.
238
+ *
239
+ * EVERY failure path — the cap, a mid-transfer socket error, a full disk — closes
240
+ * the write handle and removes the partial `.tmp` before rethrowing. Without that
241
+ * an interrupted transfer leaks a file descriptor for the lifetime of the process
242
+ * and leaves the partial file behind: nothing sweeps `os.tmpdir()`, and a caller
243
+ * that swallows the throw (handlePost does, to keep forwarding the turn) would
244
+ * never notice.
245
+ */
246
+ async function drainToFile(stream, dest, resolveExt) {
120
247
  const fileStream = fs.createWriteStream(dest);
121
248
  let total = 0;
122
- let ext = 'jpg';
249
+ let ext = 'bin';
123
250
  let firstChunk = true;
124
- for await (const chunk of stream) {
125
- const b = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
126
- total += b.length;
127
- if (total > MAX_IMAGE_BYTES) {
128
- stream.destroy?.();
129
- fileStream.destroy();
130
- fs.rmSync(dest, { force: true });
131
- throw new Error(`image exceeds ${MAX_IMAGE_BYTES} byte cap`);
132
- }
133
- if (firstChunk) {
134
- ext = (0, image_sniff_1.sniffImageExt)(b);
135
- firstChunk = false;
251
+ try {
252
+ for await (const chunk of stream) {
253
+ const b = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
254
+ total += b.length;
255
+ if (total > MAX_MEDIA_BYTES) {
256
+ // Stop pulling bytes we are going to discard; the catch below closes the
257
+ // file handle and unlinks the partial write.
258
+ stream.destroy?.();
259
+ throw new MediaTooLargeError();
260
+ }
261
+ if (firstChunk) {
262
+ ext = resolveExt(b);
263
+ firstChunk = false;
264
+ }
265
+ fileStream.write(b);
136
266
  }
137
- fileStream.write(b);
267
+ await new Promise((resolve, reject) => fileStream.end((err) => err ? reject(err) : resolve()));
268
+ }
269
+ catch (err) {
270
+ // Wait for 'close' before unlinking. fs.createWriteStream opens its fd on the
271
+ // thread pool, so a failure this early can still have an open() in flight —
272
+ // removing the path first just lets that open recreate it, leaving an empty
273
+ // file behind (and the handle open until GC).
274
+ await new Promise((resolve) => {
275
+ if (fileStream.closed) {
276
+ resolve();
277
+ return;
278
+ }
279
+ fileStream.once('close', () => resolve());
280
+ fileStream.destroy();
281
+ });
282
+ fs.rmSync(dest, { force: true });
283
+ throw err;
138
284
  }
139
- await new Promise((resolve, reject) => fileStream.end((err) => err ? reject(err) : resolve()));
140
285
  if (total === 0) {
141
286
  fs.rmSync(dest, { force: true });
142
287
  return null;
@@ -145,6 +290,34 @@ async function downloadLineImage(blobClient, messageId) {
145
290
  fs.renameSync(dest, finalDest);
146
291
  return finalDest;
147
292
  }
293
+ /**
294
+ * Fetch an inbound LINE image's bytes via the blob (data) API and write them to
295
+ * a temp file, returning its absolute path. The runner copies this into the
296
+ * agent's permanent MediaStore and tells the agent to Read it (meta.image_path).
297
+ * Returns null on failure; the turn still forwards (agent sees the text/empty).
298
+ */
299
+ async function downloadLineImage(blobClient, messageId) {
300
+ const stream = await blobClient.getMessageContent(messageId);
301
+ return drainToFile(stream, mediaTempPath('line-img', messageId), (first) => (0, image_sniff_1.sniffImageExt)(first));
302
+ }
303
+ /**
304
+ * Fetch an inbound LINE **file** (PDF, ZIP, docs, …) the same way, with the
305
+ * extension derived from the sender-supplied name instead of sniffed bytes.
306
+ *
307
+ * `declaredSize` is LINE's own `fileSize` on the event: reject on it up front so
308
+ * an oversized document is never pulled over the wire at all (the same early-reject
309
+ * Slack does on `content-length`, src/api/slack-webhook-router.ts:85-88). It is a
310
+ * cheap optimisation, not the guard — `drainToFile` re-enforces the cap while
311
+ * reading, so a missing or understated value cannot blow past it.
312
+ */
313
+ async function downloadLineFile(blobClient, messageId, fileName, declaredSize) {
314
+ if (Number.isFinite(declaredSize) && declaredSize > MAX_MEDIA_BYTES) {
315
+ throw new MediaTooLargeError();
316
+ }
317
+ const ext = safeFileExt(fileName);
318
+ const stream = await blobClient.getMessageContent(messageId);
319
+ return drainToFile(stream, mediaTempPath('line-file', messageId), () => ext);
320
+ }
148
321
  /**
149
322
  * One-time pairing-code message. The code is a VISUAL-MATCH token: the sender
150
323
  * reports it to the admin, who matches it against the UI before adding them to
@@ -162,7 +335,8 @@ function pairingMessage(code, kind) {
162
335
  }
163
336
  /**
164
337
  * Normalize a LINE webhook event into the gateway's {content, meta} intake shape.
165
- * Returns null for anything we don't handle in the POC (non-text, non-user source).
338
+ * Returns null for anything we don't handle (message types other than text/image/
339
+ * file, or a source we can't key a conversation on).
166
340
  *
167
341
  * `resolved` lets the caller pass the source it already resolved for the access
168
342
  * gate, so a single event isn't re-parsed; omitted, it resolves here.
@@ -171,9 +345,11 @@ function normalizeLineEvent(event, resolved) {
171
345
  if (event.type !== 'message')
172
346
  return null;
173
347
  const msg = event.message;
174
- // Text and image are handled; image bytes are fetched separately in handlePost
175
- // (via the LINE blob API) and surfaced to the agent through meta.image_path.
176
- if (!msg || (msg.type !== 'text' && msg.type !== 'image'))
348
+ // Text, image, and file are handled. Image/file bytes are fetched separately in
349
+ // handlePost (via the LINE blob API) and surfaced to the agent through
350
+ // meta.image_path the generic "local path the agent should Read" channel,
351
+ // which the runner stages into MediaStore regardless of media kind.
352
+ if (!msg || (msg.type !== 'text' && msg.type !== 'image' && msg.type !== 'file'))
177
353
  return null;
178
354
  // Accept 1:1 user, group, and room sources. chat_id is the conversation key
179
355
  // (userId / groupId / roomId — the reply/push target); user_id is the human
@@ -194,10 +370,48 @@ function normalizeLineEvent(event, resolved) {
194
370
  };
195
371
  if (msg.type === 'image')
196
372
  meta.media_type = 'image';
373
+ let content = text;
374
+ if (msg.type === 'file') {
375
+ const file = msg;
376
+ meta.media_type = 'file';
377
+ // `attachment_kind` is a cross-channel vocabulary the model reads off the
378
+ // <channel> tag, not a LINE-specific label — Telegram already emits
379
+ // 'document' for a generic file (mcp/tools/telegram/receiver-server.ts), so
380
+ // match it rather than teaching the agent a second word for the same thing.
381
+ meta.attachment_kind = 'document';
382
+ const name = safeAttachmentName(file.fileName);
383
+ if (name)
384
+ meta.attachment_name = name;
385
+ // A LINE file message carries no caption. Without a placeholder `content`
386
+ // would be empty, and the runner labels an empty content with an image_path
387
+ // as "(photo)" in the session context and history DB (src/agent/runner.ts).
388
+ content = name ? `(file: ${name})` : '(file)';
389
+ }
197
390
  if (typeof event.replyToken === 'string') {
198
391
  meta.reply_token = event.replyToken;
199
392
  }
200
- return { content: text, meta };
393
+ return { content, meta };
394
+ }
395
+ /**
396
+ * Rewrite a normalized media message whose bytes never arrived.
397
+ *
398
+ * Without this the turn still reaches the agent carrying `(file: report.pdf)` and
399
+ * `attachment_kind="document"` but NO `image_path`, which is indistinguishable
400
+ * from a staged file the agent simply has not opened yet — so the agent either
401
+ * stays silent or claims to have read something it never received. That is the
402
+ * silent-drop shape issue #429 was about, reappearing for the failure path.
403
+ *
404
+ * `reason` is a fixed phrase chosen by the caller, never a raw error string: the
405
+ * result lands in the `<channel>` element body, which `buildChannelXml` does not
406
+ * escape, so an SDK error message could otherwise forge tag structure. The
407
+ * attachment meta is left in place — the name is still useful context, and its
408
+ * `image_path` is (correctly) absent.
409
+ */
410
+ function markMediaUnavailable(norm, mediaType, reason) {
411
+ delete norm.meta.image_path;
412
+ const name = norm.meta.attachment_name;
413
+ const label = mediaType === 'image' ? 'image' : name ? `file: ${name}` : 'file';
414
+ norm.content = `(${label} — not available: ${reason})`;
201
415
  }
202
416
  /** Parse a `/cli` approve/deny postback payload, or null when it's not ours. */
203
417
  function parseCliPostback(data) {
@@ -464,7 +678,14 @@ function createLineWebhookHandler(agents, logDir, opts = {}) {
464
678
  // Group/room activation gate: unless requireMention is explicitly false,
465
679
  // only respond when the bot is @mentioned (native isSelf or its name).
466
680
  // DMs (line_chat_type === 'user') always pass. This runs after normalize
467
- // so non-message / non-text-image events are already filtered out.
681
+ // so unhandled message types are already filtered out.
682
+ //
683
+ // NOTE: LINE attaches `mention` to TEXT messages only, so an image or file
684
+ // posted in a group can never satisfy this gate — such media reaches the
685
+ // agent in DMs, and in groups only when requireMention is false. That is
686
+ // the pre-existing behaviour for images and is left unchanged for files:
687
+ // waiving the gate for media would let any group member push attachments
688
+ // at the agent without ever addressing it.
468
689
  if (norm.meta.line_chat_type !== 'user' && cfg?.requireMention !== false) {
469
690
  const msg = event.message;
470
691
  if (!(0, line_mention_1.wasBotMentioned)(msg)) {
@@ -476,20 +697,47 @@ function createLineWebhookHandler(agents, logDir, opts = {}) {
476
697
  continue;
477
698
  }
478
699
  }
479
- // Inbound image: fetch the bytes via the blob API and hand the agent an
700
+ // Inbound media: fetch the bytes via the blob API and hand the agent an
480
701
  // absolute path (meta.image_path). The runner persists it to MediaStore
481
702
  // and instructs the agent to Read it, same as Telegram attachments.
482
- if (norm.meta.media_type === 'image' && blobClient && norm.meta.message_id) {
703
+ // Images and files share that path; meta.media_type tells them apart.
704
+ const mediaType = norm.meta.media_type;
705
+ if ((mediaType === 'image' || mediaType === 'file') && blobClient && norm.meta.message_id) {
483
706
  try {
484
- const imgPath = await downloadLineImage(blobClient, norm.meta.message_id);
485
- if (imgPath)
486
- norm.meta.image_path = imgPath;
707
+ let mediaPath;
708
+ if (mediaType === 'image') {
709
+ mediaPath = await downloadLineImage(blobClient, norm.meta.message_id);
710
+ }
711
+ else {
712
+ // The extension comes from the RAW event name (safeFileExt sanitises
713
+ // it itself) — meta.attachment_name is the display label and has
714
+ // already had characters stripped, which could corrupt the suffix.
715
+ const file = event.message;
716
+ mediaPath = await downloadLineFile(blobClient, norm.meta.message_id, file.fileName, file.fileSize);
717
+ }
718
+ // A null path means the blob API answered with zero bytes. Both that and
719
+ // a throw leave the agent with no file, so both must say so — see
720
+ // markMediaUnavailable.
721
+ if (mediaPath) {
722
+ norm.meta.image_path = mediaPath;
723
+ // Staging copy under os.tmpdir(): the runner owns it from here and
724
+ // deletes it once MediaStore has its permanent copy. Nothing else
725
+ // sweeps the temp dir, so without this every inbound attachment —
726
+ // up to MediaStore.maxUploadBytes each — stays on disk forever.
727
+ norm.meta.media_ephemeral = '1';
728
+ }
729
+ else
730
+ markMediaUnavailable(norm, mediaType, 'the sender uploaded no content');
487
731
  }
488
732
  catch (err) {
489
- logger.warn('LINE webhook: image download failed', {
733
+ logger.warn('LINE webhook: media download failed', {
734
+ mediaType,
490
735
  messageId: norm.meta.message_id,
491
736
  error: err.message,
492
737
  });
738
+ markMediaUnavailable(norm, mediaType, err instanceof MediaTooLargeError
739
+ ? `larger than the ${Math.floor(MAX_MEDIA_BYTES / (1024 * 1024))} MB limit`
740
+ : 'the download failed');
493
741
  }
494
742
  }
495
743
  // Loading animation (best-effort, 1:1 only — LINE rejects it for
@@ -1 +1 @@
1
- {"version":3,"file":"line-webhook-router.js","sourceRoot":"","sources":["../../src/api/line-webhook-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"line-webhook-router.js","sourceRoot":"","sources":["../../src/api/line-webhook-router.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,13 @@
1
- import { Router } from 'express';
1
+ import { Router, Response } from 'express';
2
2
  import { AgentRunner } from '../agent/runner';
3
3
  import { AgentConfig, ApiKey, ModelConfig } from '../types';
4
4
  export declare function isValidSessionId(v: unknown): v is string;
5
5
  export declare function isValidAgentId(v: unknown): v is string;
6
+ /**
7
+ * Write SSE headers and start the idle keepalive. Exported for tests: the
8
+ * keepalive is time-based and only observable on a stream deliberately held
9
+ * open, which is exactly what an end-to-end HTTP test cannot do.
10
+ */
11
+ export declare function openSseStream(res: Response): void;
6
12
  export declare function createApiRouter(agentRunners: Map<string, AgentRunner>, agentConfigs: Map<string, AgentConfig>, apiKeys: ApiKey[], configPath?: string, models?: ModelConfig[]): Router;
7
13
  //# sourceMappingURL=router.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/api/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAOpD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAe,WAAW,EAAE,MAAM,UAAU,CAAC;AAgDzE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAExD;AAMD,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAEtD;AAoID,wBAAgB,eAAe,CAC7B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACtC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACtC,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,WAAW,EAAE,GACrB,MAAM,CAwjGR"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/api/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAW,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOpD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAe,WAAW,EAAE,MAAM,UAAU,CAAC;AAiDzE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAExD;AAMD,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAEtD;AAuED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CA4CjD;AAoID,wBAAgB,eAAe,CAC7B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACtC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACtC,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,WAAW,EAAE,GACrB,MAAM,CA4oGR"}