Some checks failed
CI / Typecheck & Lint (pull_request) Failing after 1s
- Add image intent detection (draw/illustrate/visualize/create an image) via `detectImageRequest()` in agent.ts; exports used by jobs and sessions - Add `executeImageWork()` to AgentService: calls Gemini generateImage with graceful fallback stub PNG when Gemini credentials are absent - Add `job_media` table (migration 0010) for base64 image storage with 7-day TTL; entity_id is polymorphic for both jobs and session requests - Add `media_type TEXT` column to jobs table (flagged during eval phase) - Add `calculateImageFeeSats()` / `calculateImageFeeUsd()` to PricingService; uses IMAGE_GENERATION_FLAT_RATE_USD env var (default $0.04) - Jobs route: detect image jobs in eval phase, route to Gemini in execution, store image in job_media; expose GET /api/jobs/:id/media endpoint - Sessions route: detect image requests, call executeImageWork, store in job_media, return mediaUrl and mediaType in response - Estimate route: return image pricing and mediaType:'image' for image requests - Event bus: add optional mediaUrl/mediaType to job:completed event - Frontend session.js: render generated images inline with download button Fixes #19 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
27 lines
1.4 KiB
SQL
27 lines
1.4 KiB
SQL
-- Migration: Image generation media storage (#19)
|
|
-- Adds job_media table for storing generated images (base64) with 7-day TTL.
|
|
-- Also adds media_type column to jobs table to flag image-type work.
|
|
|
|
-- ── job_media ─────────────────────────────────────────────────────────────────
|
|
-- Stores generated media for both standalone jobs and session requests.
|
|
-- entity_id is polymorphic: job ID or session request ID.
|
|
-- expires_at is set to NOW + 7 days at insert time.
|
|
|
|
CREATE TABLE IF NOT EXISTS job_media (
|
|
id TEXT PRIMARY KEY,
|
|
entity_id TEXT NOT NULL, -- job ID or session request ID
|
|
entity_type TEXT NOT NULL, -- 'job' | 'session_request'
|
|
media_type TEXT NOT NULL, -- 'image'
|
|
mime_type TEXT NOT NULL, -- e.g. 'image/png'
|
|
data TEXT NOT NULL, -- base64-encoded image data
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
expires_at TIMESTAMPTZ NOT NULL
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_job_media_entity_id ON job_media(entity_id);
|
|
|
|
-- ── jobs.media_type ───────────────────────────────────────────────────────────
|
|
-- Nullable flag set during eval phase for image-generation requests.
|
|
|
|
ALTER TABLE jobs ADD COLUMN IF NOT EXISTS media_type TEXT;
|