@penclipai/server 2026.602.2 → 2026.602.3-canary.0

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 (81) hide show
  1. package/dist/routes/issues.d.ts.map +1 -1
  2. package/dist/routes/issues.js +26 -1
  3. package/dist/routes/issues.js.map +1 -1
  4. package/package.json +17 -17
  5. package/ui-dist/assets/{_basePickBy-CeTFxbQW.js → _basePickBy-BYxlHKKN.js} +1 -1
  6. package/ui-dist/assets/{_baseUniq-D0ujdjSD.js → _baseUniq-B26yarIc.js} +1 -1
  7. package/ui-dist/assets/{arc-BO6fFqoX.js → arc-BDauvvDc.js} +1 -1
  8. package/ui-dist/assets/{architectureDiagram-VXUJARFQ-D2UpP8cQ.js → architectureDiagram-VXUJARFQ-BKDhI01I.js} +1 -1
  9. package/ui-dist/assets/{blockDiagram-VD42YOAC-BR95g_Bq.js → blockDiagram-VD42YOAC-D0usrWE7.js} +1 -1
  10. package/ui-dist/assets/{browser-ponyfill-f87cfQ5P.js → browser-ponyfill-ebpW4-qy.js} +1 -1
  11. package/ui-dist/assets/{c4Diagram-YG6GDRKO-DI5tPMqa.js → c4Diagram-YG6GDRKO-y9PV6qun.js} +1 -1
  12. package/ui-dist/assets/channel-CBWRFI7_.js +1 -0
  13. package/ui-dist/assets/{chunk-4BX2VUAB-DYVTUDCW.js → chunk-4BX2VUAB-BOw0TFbH.js} +1 -1
  14. package/ui-dist/assets/{chunk-55IACEB6-D0QGIKOI.js → chunk-55IACEB6-DHk7xA0k.js} +1 -1
  15. package/ui-dist/assets/{chunk-B4BG7PRW-DMGouDbX.js → chunk-B4BG7PRW-DAXyHAAS.js} +1 -1
  16. package/ui-dist/assets/{chunk-DI55MBZ5-CDoOezvn.js → chunk-DI55MBZ5-wyKz_I6_.js} +1 -1
  17. package/ui-dist/assets/{chunk-FMBD7UC4-BsnMSmde.js → chunk-FMBD7UC4-BgkGSsnk.js} +1 -1
  18. package/ui-dist/assets/{chunk-QN33PNHL-DakMd-Np.js → chunk-QN33PNHL-yedqG5PM.js} +1 -1
  19. package/ui-dist/assets/{chunk-QZHKN3VN-DqQUmo7x.js → chunk-QZHKN3VN-CpGfFp9R.js} +1 -1
  20. package/ui-dist/assets/{chunk-TZMSLE5B-BhHr3bYf.js → chunk-TZMSLE5B-DfY2ZBKD.js} +1 -1
  21. package/ui-dist/assets/classDiagram-2ON5EDUG-BBWLyelg.js +1 -0
  22. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-BBWLyelg.js +1 -0
  23. package/ui-dist/assets/clone-BpiELgqW.js +1 -0
  24. package/ui-dist/assets/{cose-bilkent-S5V4N54A-Cu5Xt36m.js → cose-bilkent-S5V4N54A-BvjsWHQj.js} +1 -1
  25. package/ui-dist/assets/{dagre-6UL2VRFP-oB6IWi02.js → dagre-6UL2VRFP-Dh1PluzR.js} +1 -1
  26. package/ui-dist/assets/{diagram-PSM6KHXK-CvrdSiPO.js → diagram-PSM6KHXK-CAz3sT0T.js} +1 -1
  27. package/ui-dist/assets/{diagram-QEK2KX5R-DQSpEaL6.js → diagram-QEK2KX5R-B6WaPPrb.js} +1 -1
  28. package/ui-dist/assets/{diagram-S2PKOQOG-Ckv-tSzv.js → diagram-S2PKOQOG-fkF5os8X.js} +1 -1
  29. package/ui-dist/assets/{erDiagram-Q2GNP2WA-B_hA9waW.js → erDiagram-Q2GNP2WA-tK6MhzrJ.js} +1 -1
  30. package/ui-dist/assets/{flowDiagram-NV44I4VS-Bb0ZY-IZ.js → flowDiagram-NV44I4VS-CaNFUnRl.js} +1 -1
  31. package/ui-dist/assets/{ganttDiagram-JELNMOA3-DKwCKDGB.js → ganttDiagram-JELNMOA3-CeG0sDmd.js} +1 -1
  32. package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-DAzn2J50.js → gitGraphDiagram-V2S2FVAM-TLvK324z.js} +1 -1
  33. package/ui-dist/assets/{graph-Cl-tjvPX.js → graph-Bqo7M0Vd.js} +1 -1
  34. package/ui-dist/assets/{index-DzltSrZq.js → index-94t6F9ti.js} +1 -1
  35. package/ui-dist/assets/{index-km6491jM.js → index-BDBeR_Ms.js} +1 -1
  36. package/ui-dist/assets/{index-DlxftVuv.js → index-BOwEJNiM.js} +1 -1
  37. package/ui-dist/assets/{index-CQo-Yt-A.js → index-BaZON7l-.js} +1 -1
  38. package/ui-dist/assets/{index-u71Xs_3k.js → index-Bcj8kPOw.js} +1 -1
  39. package/ui-dist/assets/{index-CbYaoEKW.js → index-Bg1l5Rb-.js} +1 -1
  40. package/ui-dist/assets/{index-C-t56Owg.js → index-Btz0iQUD.js} +1 -1
  41. package/ui-dist/assets/{index-DL1vj0uy.js → index-BxZkEvQt.js} +1 -1
  42. package/ui-dist/assets/{index-DNDIa7NC.js → index-BySmbMst.js} +1 -1
  43. package/ui-dist/assets/{index-CfPehaOb.js → index-CF55bUu0.js} +1 -1
  44. package/ui-dist/assets/{index-DF7nqDl_.js → index-CYbzoPxp.js} +1 -1
  45. package/ui-dist/assets/{index-8GC1rVe0.js → index-ColgDk6f.js} +1 -1
  46. package/ui-dist/assets/{index-ChV-aw4S.js → index-Cw_JDhgf.js} +1 -1
  47. package/ui-dist/assets/{index-BsoFGxYP.js → index-Cymc8BwS.js} +1 -1
  48. package/ui-dist/assets/{index-LLPT1gK0.js → index-D8kLtV6y.js} +1 -1
  49. package/ui-dist/assets/{index-CwlKP6-n.js → index-DS5mbkob.js} +164 -164
  50. package/ui-dist/assets/{index-BtF-hm9b.js → index-DWUw2jaA.js} +1 -1
  51. package/ui-dist/assets/{index-B4Zx0-UV.js → index-DXJLiZGe.js} +1 -1
  52. package/ui-dist/assets/{index-DxJJ3F_W.js → index-DYP1MjhS.js} +1 -1
  53. package/ui-dist/assets/{index-DG38TZml.js → index-DfswLslQ.js} +1 -1
  54. package/ui-dist/assets/{index-Dl6o6n5E.js → index-DsRbE9l_.js} +1 -1
  55. package/ui-dist/assets/{index-Do6HXiXB.js → index-UtXv_ECo.js} +1 -1
  56. package/ui-dist/assets/{index-BPtAEykT.js → index-rvgEgE3e.js} +1 -1
  57. package/ui-dist/assets/{infoDiagram-HS3SLOUP-DEL8kyRP.js → infoDiagram-HS3SLOUP-3Rv7QaIb.js} +1 -1
  58. package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-CRSQwCYB.js → journeyDiagram-XKPGCS4Q-BAtPBBtl.js} +1 -1
  59. package/ui-dist/assets/{kanban-definition-3W4ZIXB7-B4y2cOh8.js → kanban-definition-3W4ZIXB7-BkOtXBkh.js} +1 -1
  60. package/ui-dist/assets/{layout-BpvTQ45G.js → layout-Gwcoi7Xv.js} +1 -1
  61. package/ui-dist/assets/{linear-CYavthmK.js → linear-DHbYmiWq.js} +1 -1
  62. package/ui-dist/assets/{mermaid.core-CYlgTsL-.js → mermaid.core-aP1deKhG.js} +4 -4
  63. package/ui-dist/assets/{mindmap-definition-VGOIOE7T-D5EKPjo-.js → mindmap-definition-VGOIOE7T-8SJJRsUG.js} +1 -1
  64. package/ui-dist/assets/{pieDiagram-ADFJNKIX-C2JvyqX-.js → pieDiagram-ADFJNKIX-p2ACVxJ8.js} +1 -1
  65. package/ui-dist/assets/{quadrantDiagram-AYHSOK5B--5eHpwLO.js → quadrantDiagram-AYHSOK5B-ChUyFUsT.js} +1 -1
  66. package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-DWl0VcDt.js → requirementDiagram-UZGBJVZJ-C3Q-59mi.js} +1 -1
  67. package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-DTVD0t60.js → sankeyDiagram-TZEHDZUN-BGYmIL4H.js} +1 -1
  68. package/ui-dist/assets/{sequenceDiagram-WL72ISMW-DqRlRIie.js → sequenceDiagram-WL72ISMW-smCwAbus.js} +1 -1
  69. package/ui-dist/assets/{stateDiagram-FKZM4ZOC-pmJVfUSI.js → stateDiagram-FKZM4ZOC-hzZiJVWR.js} +1 -1
  70. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-CKxY16nW.js +1 -0
  71. package/ui-dist/assets/{timeline-definition-IT6M3QCI-D4a7yShw.js → timeline-definition-IT6M3QCI-C9Bpauwv.js} +1 -1
  72. package/ui-dist/assets/{treemap-GDKQZRPO-B99Tnc1-.js → treemap-GDKQZRPO-BB3Cb_8q.js} +1 -1
  73. package/ui-dist/assets/{xychartDiagram-PRI3JC2R-DtVbo4uj.js → xychartDiagram-PRI3JC2R-BR4l4kRx.js} +1 -1
  74. package/ui-dist/index.html +1 -1
  75. package/ui-dist/locales/en/common.json +5 -0
  76. package/ui-dist/locales/zh-CN/common.json +5 -0
  77. package/ui-dist/assets/channel-CET4O6ry.js +0 -1
  78. package/ui-dist/assets/classDiagram-2ON5EDUG-D0t_5_AY.js +0 -1
  79. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-D0t_5_AY.js +0 -1
  80. package/ui-dist/assets/clone-CsJH_z-2.js +0 -1
  81. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-tJvkm5fW.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/routes/issues.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAUxC,OAAO,EAmCL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAI3B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAkD1D,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,0CAA0C,CAAC;AASlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AA8BhF,KAAK,oBAAoB,GAAG;IAC1B,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACtF,CAAC;AAitBF,wBAAgB,WAAW,CACzB,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,cAAc,EACvB,IAAI,GAAE;IACJ,qBAAqB,CAAC,EAAE;QACtB,0BAA0B,CAAC,KAAK,CAAC,EAAE;YACjC,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,GAAG,CAAC,EAAE,IAAI,CAAC;SACZ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACtB,CAAC;IACF,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CACtC,8CAs3KP"}
1
+ {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/routes/issues.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAUxC,OAAO,EAmCL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAI3B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAkD1D,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,0CAA0C,CAAC;AASlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AA8BhF,KAAK,oBAAoB,GAAG;IAC1B,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACtF,CAAC;AAyuBF,wBAAgB,WAAW,CACzB,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,cAAc,EACvB,IAAI,GAAE;IACJ,qBAAqB,CAAC,EAAE;QACtB,0BAA0B,CAAC,KAAK,CAAC,EAAE;YACjC,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,GAAG,CAAC,EAAE,IAAI,CAAC;SACZ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACtB,CAAC;IACF,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CACtC,8CA03KP"}
@@ -63,6 +63,27 @@ function applyCreateIssueStatusDefault(req, res, next) {
63
63
  function buildAttachmentContentPath(attachmentId) {
64
64
  return `/api/attachments/${attachmentId}/content`;
65
65
  }
66
+ const GENERIC_ATTACHMENT_CONTENT_TYPES = new Set([
67
+ "application/octet-stream",
68
+ "binary/octet-stream",
69
+ "application/x-binary",
70
+ ]);
71
+ function inferVideoContentTypeFromFilename(filename) {
72
+ const lower = (filename ?? "").toLowerCase();
73
+ if (lower.endsWith(".mp4") || lower.endsWith(".m4v"))
74
+ return "video/mp4";
75
+ if (lower.endsWith(".webm"))
76
+ return "video/webm";
77
+ if (lower.endsWith(".mov") || lower.endsWith(".qt") || lower.endsWith(".quicktime"))
78
+ return "video/quicktime";
79
+ return null;
80
+ }
81
+ function resolveAttachmentResponseContentType(input) {
82
+ const storedContentType = normalizeContentType(input.storedContentType || input.objectContentType);
83
+ if (!GENERIC_ATTACHMENT_CONTENT_TYPES.has(storedContentType))
84
+ return storedContentType;
85
+ return inferVideoContentTypeFromFilename(input.originalFilename) ?? storedContentType;
86
+ }
66
87
  function requiresPaperclipAttachmentMetadata(input, fallback) {
67
88
  const type = typeof input.type === "string" ? input.type : fallback?.type ?? null;
68
89
  const provider = typeof input.provider === "string" ? input.provider : fallback?.provider ?? null;
@@ -5314,7 +5335,11 @@ export function issueRoutes(db, storage, opts = {}) {
5314
5335
  return;
5315
5336
  }
5316
5337
  const object = await storage.getObject(attachment.companyId, attachment.objectKey, range.kind === "range" ? { range: { start: range.start, end: range.end } } : undefined);
5317
- const responseContentType = normalizeContentType(attachment.contentType || object.contentType);
5338
+ const responseContentType = resolveAttachmentResponseContentType({
5339
+ storedContentType: attachment.contentType,
5340
+ objectContentType: object.contentType,
5341
+ originalFilename: attachment.originalFilename,
5342
+ });
5318
5343
  res.setHeader("Content-Type", responseContentType);
5319
5344
  res.setHeader("Cache-Control", "private, max-age=60");
5320
5345
  res.setHeader("X-Content-Type-Options", "nosniff");