feat(jobs): ingest.blob worker (content-addressed)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
root
2026-06-01 03:36:15 +10:00
parent 3ccfd20b5f
commit eceebd2947
3 changed files with 81 additions and 1 deletions

View File

@@ -1,8 +1,9 @@
import * as queue from './queue.js';
import * as echo from './workers/echo.js';
import * as url from './workers/url.js';
import * as blob from './workers/blob.js';
const WORKERS = [echo, url];
const WORKERS = [echo, url, blob];
export async function registerWorkers() {
for (const w of WORKERS) {

31
lib/jobs/workers/blob.js Normal file
View File

@@ -0,0 +1,31 @@
import fs from 'node:fs/promises';
import * as refs from '../../db/repos/refs.js';
import { defaultStore } from '../../ingest/blob_store.js';
export const NAME = 'ingest.blob';
function kindFor(content_type, filename) {
if (content_type?.startsWith('image/')) return 'image';
if (content_type === 'application/pdf' || filename?.toLowerCase().endsWith('.pdf')) return 'pdf';
return 'file';
}
export async function handler(job) {
const { space_id, tmp_path, filename, content_type, meta = {} } = job.data;
const buf = await fs.readFile(tmp_path);
const { sha, path } = await defaultStore().write(buf);
try { await fs.unlink(tmp_path); } catch { /* */ }
const kind = kindFor(content_type, filename);
const row = await refs.create({
space_id,
kind,
source_url: null,
title: meta.title || filename || sha.slice(0, 12),
summary: null,
body_text: null,
blob_path: path,
metadata: { sha, content_type, filename, size: buf.length, ...(meta.metadata || {}) }
}, { kind: 'system', id: null });
return { ref_id: row.id, sha };
}