junis 0.4.3 → 0.4.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 (2) hide show
  1. package/dist/cli/index.js +14 -9
  2. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -190,13 +190,16 @@ async function uploadLargeFile(relay, base64Data, filename, contentType) {
190
190
  function isLargeBase64(base64) {
191
191
  return base64.length * 0.75 > LARGE_FILE_THRESHOLD;
192
192
  }
193
- function detectContentType(base64) {
194
- const header = base64.slice(0, 16);
195
- if (header.startsWith("/9j/")) return "image/jpeg";
196
- if (header.startsWith("iVBOR")) return "image/png";
197
- if (header.startsWith("R0lGO")) return "image/gif";
198
- if (header.startsWith("UklGR")) return "image/webp";
199
- if (header.startsWith("JVBER")) return "application/pdf";
193
+ function detectContentType(buffer) {
194
+ if (buffer[0] === 137 && buffer[1] === 80 && buffer[2] === 78 && buffer[3] === 71) return "image/png";
195
+ if (buffer[0] === 255 && buffer[1] === 216 && buffer[2] === 255) return "image/jpeg";
196
+ if (buffer[0] === 71 && buffer[1] === 73 && buffer[2] === 70 && buffer[3] === 56) return "image/gif";
197
+ if (buffer[0] === 37 && buffer[1] === 80 && buffer[2] === 68 && buffer[3] === 70) return "application/pdf";
198
+ if (buffer[0] === 82 && buffer[1] === 73 && buffer[2] === 70 && buffer[3] === 70 && buffer[8] === 87 && buffer[9] === 69 && buffer[10] === 66 && buffer[11] === 80) return "image/webp";
199
+ if (buffer[4] === 102 && buffer[5] === 116 && buffer[6] === 121 && buffer[7] === 112) return "video/mp4";
200
+ if (buffer[0] === 82 && buffer[1] === 73 && buffer[2] === 70 && buffer[3] === 70 && buffer[8] === 87 && buffer[9] === 65 && buffer[10] === 86 && buffer[11] === 69) return "audio/wav";
201
+ if (buffer[0] === 73 && buffer[1] === 68 && buffer[2] === 51) return "audio/mpeg";
202
+ if (buffer[0] === 255 && (buffer[1] === 251 || buffer[1] === 243 || buffer[1] === 242)) return "audio/mpeg";
200
203
  return "application/octet-stream";
201
204
  }
202
205
 
@@ -455,7 +458,8 @@ var RelayClient = class {
455
458
  }
456
459
  } else if (item.type === "text" && typeof item.text === "string" && isLargeBase64(item.text) && /^[A-Za-z0-9+/\n\r]+=*$/.test(item.text.trim())) {
457
460
  try {
458
- const contentType = detectContentType(item.text);
461
+ const buffer = Buffer.from(item.text, "base64");
462
+ const contentType = detectContentType(buffer);
459
463
  if (contentType === "application/octet-stream") {
460
464
  content[i] = { type: "text", text: "[Binary file detected. Use the share_file tool to provide a download link to the user. Do not display this message.]" };
461
465
  continue;
@@ -465,7 +469,8 @@ var RelayClient = class {
465
469
  content[i] = { type: "text", text: url };
466
470
  } catch (err) {
467
471
  console.error("Failed to upload large text base64:", err);
468
- const contentType = detectContentType(item.text);
472
+ const buffer = Buffer.from(item.text, "base64");
473
+ const contentType = detectContentType(buffer);
469
474
  const ext = contentType.split("/")[1] || "bin";
470
475
  item.text = `[\uD30C\uC77C \uC5C5\uB85C\uB4DC \uC2E4\uD328: ${String(err)}. \uD30C\uC77C\uBA85: file.${ext}]`;
471
476
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "junis",
3
- "version": "0.4.3",
3
+ "version": "0.4.4",
4
4
  "description": "One-line device control for AI agents",
5
5
  "type": "module",
6
6
  "bin": {