Linear Attachments 是一个用于在 Linear 中处理附件的技能,主要覆盖上传文件、添加链接附件以及带认证下载附件三类操作。
用途与两种附件类型
该技能区分两种附件形式。第一种是文件附件,存储于 Linear S3(预签名方式),适合截图、日志、设计文件等。第二种是链接附件,仅保存外部 URL,适合关联 GitHub PR、Figma、Notion、Loom 等内容。
文件上传流程
文件上传采用三步流程:
第一步,预留上传 URL,调用 client.fileUpload,传入 contentType、filename 和 size,返回 uploadUrl、headers 以及 assetUrl。
第二步,PUT 字节,使用 fetch 向 uploadUrl 发送 PUT 请求,body 为文件内容,headers 由返回的 headers 数组转换而来。
第三步,将附件关联到 issue,调用 client.attachmentCreate,传入 issueId、url(即 assetUrl)、title 和 contentType。
资料中还提供了一个位于 lib/attachment-upload.ts 的辅助函数 uploadFileToLinear,接收 client、issueId、filePath 和可选 title,返回附件 ID。
大文件与分片上传
对于大于 50MB 的文件,Linear 的预签名 URL 支持 S3 分片上传:拆分为 5MB 的分片,每片通过带 partNumber 查询参数的 PUT 上传,最后用 POST ?uploads 完成。资料指出大多数使用场景都在 50MB 以下,只有日志和视频会用到分片上传。
链接附件
链接附件通过 client.attachmentLinkCreate(issueId, url, title) 添加。Linear 会根据 URL 模式推断预览,支持的范围包括 GitHub PR / issue / commit、Figma、Notion、Loom、Vimeo、Slack thread 以及通用的 OG 富页面。
带认证下载
资产 URL 需要在 Authorization: Bearer <token> 中携带相同的 Linear 令牌。资料强调不要公开分享这些 URL:它们会在 7 天后过期,但在该时间窗口内暴露即构成泄露。示例代码使用 fetch 携带 LINEAR_API_KEY 获取内容并转为 Buffer。若需与最终用户分享,可通过自己的服务签发短期有效的签名 URL。
集成与桥接
资料提到 Harness Code 中,文件附件通过评论中的资产 URL 链接(而非复制)到关联 PR;由于 URL 需要认证,审阅者必须是 Linear 成员。在启用了 Linear Diffs 的 GitHub 中,PR 上下文可原生渲染,附件仍以资产 URL 方式链接。
安全注意事项
资料给出以下安全建议:声明 content-type 前先验证(不要信任用户输入);在上层限制上传大小(通常为 100MB);在客户端可行时剥离图片 EXIF;不要将用户文件字节经过自己的后端,而应将其重定向到 Linear 的预签名 URL。
限制与未提供信息
该技能的具体可用平台、安装方式、收费或价格信息,资料中暂未提供。