( bytes: Buffer, mimeType: string | undefined, persistId: string, )
| 146 | * for PDFs, pandas for xlsx, etc.). |
| 147 | */ |
| 148 | export async function persistBinaryContent( |
| 149 | bytes: Buffer, |
| 150 | mimeType: string | undefined, |
| 151 | persistId: string, |
| 152 | ): Promise<PersistBinaryResult> { |
| 153 | await ensureToolResultsDir() |
| 154 | const ext = extensionForMimeType(mimeType) |
| 155 | const filepath = join(getToolResultsDir(), `${persistId}.${ext}`) |
| 156 | |
| 157 | try { |
| 158 | await writeFile(filepath, bytes) |
| 159 | } catch (error) { |
| 160 | const err = toError(error) |
| 161 | logError(err) |
| 162 | return { error: err.message } |
| 163 | } |
| 164 | |
| 165 | // mime type and extension are safe fixed-vocabulary strings (not paths/code) |
| 166 | logEvent('tengu_binary_content_persisted', { |
| 167 | mimeType: (mimeType ?? |
| 168 | 'unknown') as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, |
| 169 | sizeBytes: bytes.length, |
| 170 | ext: ext as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, |
| 171 | }) |
| 172 | |
| 173 | return { filepath, size: bytes.length, ext } |
| 174 | } |
| 175 | |
| 176 | /** |
| 177 | * Build a short message telling Claude where binary content was saved. |
no test coverage detected