The deployment owner adds folders of photos and videos in the media settings. A per-folder background job indexes them (relative path, kind, size, capture date, dimensions, duration), re-indexes every six hours, and drops files that are gone. The owner's own runs get two tools: search_media (words in folder and file names, kind, capture date range, newest first) and import_media (copies one file into the conversation as an artifact). Files are never changed; hidden entries and symlinks are skipped, and an import must resolve inside its folder. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wy1md9QE1ayJbDCwJ4vAQs
53 lines
1.9 KiB
SQL
53 lines
1.9 KiB
SQL
-- Folders on the server whose photos and videos a user's bots can search and use, and their index.
|
|
-- CreateTable
|
|
CREATE TABLE "media_library_sources" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"path" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'idle',
|
|
"error" TEXT,
|
|
"assetCount" INTEGER NOT NULL DEFAULT 0,
|
|
"lastSyncedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "media_library_sources_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "media_library_assets" (
|
|
"id" TEXT NOT NULL,
|
|
"sourceId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"relativePath" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"kind" TEXT NOT NULL,
|
|
"mimeType" TEXT NOT NULL,
|
|
"size" BIGINT NOT NULL,
|
|
"modifiedAt" TIMESTAMP(3) NOT NULL,
|
|
"takenAt" TIMESTAMP(3) NOT NULL,
|
|
"width" INTEGER,
|
|
"height" INTEGER,
|
|
"durationMs" INTEGER,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "media_library_assets_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "media_library_sources_userId_path_key" ON "media_library_sources"("userId", "path");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "media_library_assets_userId_takenAt_idx" ON "media_library_assets"("userId", "takenAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "media_library_assets_sourceId_relativePath_key" ON "media_library_assets"("sourceId", "relativePath");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "media_library_sources" ADD CONSTRAINT "media_library_sources_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "media_library_assets" ADD CONSTRAINT "media_library_assets_sourceId_fkey" FOREIGN KEY ("sourceId") REFERENCES "media_library_sources"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|