@happyvertical/smrt-images 0.49.2 → 0.49.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ import { join } from "node:path";
7
7
  import { Asset, persistMediaBundleInspection as persistImageMediaBundleInspection } from "@happyvertical/smrt-assets";
8
8
  import { TenantIsolationError, TenantScoped, getCurrentTenant, isSuperAdminBypass } from "@happyvertical/smrt-tenancy";
9
9
  //#region src/__smrt-register__.ts
10
- ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":0,\"packageName\":\"@happyvertical/smrt-images\",\"packageVersion\":\"0.49.2\",\"objects\":{\"@happyvertical/smrt-images:Image\":{\"name\":\"image\",\"className\":\"Image\",\"qualifiedName\":\"@happyvertical/smrt-images:Image\",\"collection\":\"assets\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/images/src/image.ts\",\"packageName\":\"@happyvertical/smrt-images\",\"fields\":{\"created_at\":{\"type\":\"datetime\",\"required\":false},\"updated_at\":{\"type\":\"datetime\",\"required\":false},\"tenantId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"generated\":true,\"source\":\"tenantScoped_decorator\",\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"mode\":\"optional\",\"field\":\"tenantId\",\"autoFilter\":true,\"autoPopulate\":true,\"allowSuperAdminBypass\":false}}},\"name\":{\"type\":\"text\",\"required\":false},\"sourceUri\":{\"type\":\"text\",\"required\":false},\"mimeType\":{\"type\":\"text\",\"required\":false},\"description\":{\"type\":\"text\",\"required\":false},\"metadata\":{\"type\":\"text\",\"required\":false},\"version\":{\"type\":\"integer\",\"required\":true,\"default\":1},\"primaryVersionId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Asset\"},\"typeSlug\":{\"type\":\"text\",\"required\":false},\"statusSlug\":{\"type\":\"text\",\"required\":false},\"ownerProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\"},\"sourceAssetId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Asset\"},\"folderId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Folder\"},\"sourceType\":{\"type\":\"text\",\"required\":false},\"externalId\":{\"type\":\"text\",\"required\":false},\"externalRefs\":{\"type\":\"text\",\"required\":false},\"createdAt\":{\"type\":\"text\",\"required\":false},\"updatedAt\":{\"type\":\"text\",\"required\":false},\"width\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"height\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"alt\":{\"type\":\"text\",\"required\":false,\"default\":\"\"}},\"methods\":{\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string, unknown>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"metadata\",\"type\":\"Record<string, unknown>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"mergeMetadata\":{\"name\":\"mergeMetadata\",\"async\":false,\"parameters\":[{\"name\":\"metadata\",\"type\":\"Record<string, unknown>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getExternalRefs\":{\"name\":\"getExternalRefs\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string, AssetExternalReference>\",\"isStatic\":false,\"isPublic\":true},\"getExternalRef\":{\"name\":\"getExternalRef\",\"async\":false,\"parameters\":[{\"name\":\"provider\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"AssetExternalReference | null\",\"isStatic\":false,\"isPublic\":true},\"setExternalRef\":{\"name\":\"setExternalRef\",\"async\":false,\"parameters\":[{\"name\":\"provider\",\"type\":\"string\",\"optional\":false},{\"name\":\"reference\",\"type\":\"any\",\"optional\":false,\"typeUnresolved\":true}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getTags\":{\"name\":\"getTags\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Tag[]>\",\"isStatic\":false,\"isPublic\":true},\"hasTag\":{\"name\":\"hasTag\",\"async\":true,\"parameters\":[{\"name\":\"tagSlug\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"getSource\":{\"name\":\"getSource\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Asset | null>\",\"isStatic\":false,\"isPublic\":true},\"getDerivatives\":{\"name\":\"getDerivatives\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Asset[]>\",\"isStatic\":false,\"isPublic\":true},\"getType\":{\"name\":\"getType\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<AssetType | null>\",\"isStatic\":false,\"isPublic\":true},\"getStatus\":{\"name\":\"getStatus\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<AssetStatus | null>\",\"isStatic\":false,\"isPublic\":true},\"getAssociations\":{\"name\":\"getAssociations\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<AssetAssociation[]>\",\"isStatic\":false,\"isPublic\":true},\"associateWith\":{\"name\":\"associateWith\",\"async\":true,\"parameters\":[{\"name\":\"metaType\",\"type\":\"string\",\"optional\":false},{\"name\":\"metaId\",\"type\":\"string\",\"optional\":false},{\"name\":\"role\",\"type\":\"any\",\"optional\":true,\"default\":\"default\"}],\"returnType\":\"Promise<AssetAssociation>\",\"isStatic\":false,\"isPublic\":true},\"getBySlug\":{\"name\":\"getBySlug\",\"async\":true,\"parameters\":[{\"name\":\"_slug\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Asset | null>\",\"isStatic\":true,\"isPublic\":true},\"isValidImageFormat\":{\"name\":\"isValidImageFormat\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isHighResolution\":{\"name\":\"isHighResolution\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"generateAltText\":{\"name\":\"generateAltText\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"generateAltText\"]},\"cli\":{\"skipApiCheck\":true},\"tenantScoped\":{\"mode\":\"optional\"},\"tableName\":\"assets\",\"tableStrategy\":\"sti\"},\"extends\":\"Asset\",\"exportName\":\"Image\",\"collectionExportName\":\"ImageCollection\",\"validationRules\":[{\"field\":\"version\",\"rule\":\"required\",\"fieldType\":\"integer\"}],\"schema\":{\"tableName\":\"assets\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"assets\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"_meta_type\\\" TEXT NOT NULL,\\n \\\"_meta_data\\\" JSON,\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID,\\n \\\"name\\\" TEXT,\\n \\\"source_uri\\\" TEXT,\\n \\\"mime_type\\\" TEXT,\\n \\\"description\\\" TEXT,\\n \\\"metadata\\\" TEXT,\\n \\\"version\\\" INTEGER DEFAULT 1,\\n \\\"primary_version_id\\\" UUID,\\n \\\"type_slug\\\" TEXT,\\n \\\"status_slug\\\" TEXT,\\n \\\"owner_profile_id\\\" UUID,\\n \\\"source_asset_id\\\" UUID,\\n \\\"folder_id\\\" UUID,\\n \\\"source_type\\\" TEXT,\\n \\\"external_id\\\" TEXT,\\n \\\"external_refs\\\" TEXT,\\n \\\"width\\\" INTEGER DEFAULT 0,\\n \\\"height\\\" INTEGER DEFAULT 0,\\n \\\"alt\\\" TEXT DEFAULT ''\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"_meta_type\":{\"type\":\"TEXT\",\"notNull\":true},\"_meta_data\":{\"type\":\"JSON\",\"notNull\":false},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false},\"source_uri\":{\"type\":\"TEXT\",\"notNull\":false},\"mime_type\":{\"type\":\"TEXT\",\"notNull\":false},\"description\":{\"type\":\"TEXT\",\"notNull\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false},\"version\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":1},\"primary_version_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"foreignKey\":{\"table\":\"assets\",\"column\":\"id\",\"onDelete\":\"NO ACTION\",\"onUpdate\":\"CASCADE\"}},\"type_slug\":{\"type\":\"TEXT\",\"notNull\":false},\"status_slug\":{\"type\":\"TEXT\",\"notNull\":false},\"owner_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false},\"source_asset_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"foreignKey\":{\"table\":\"assets\",\"column\":\"id\",\"onDelete\":\"NO ACTION\",\"onUpdate\":\"CASCADE\"}},\"folder_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false},\"source_type\":{\"type\":\"TEXT\",\"notNull\":false},\"external_id\":{\"type\":\"TEXT\",\"notNull\":false},\"external_refs\":{\"type\":\"TEXT\",\"notNull\":false},\"width\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"height\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"alt\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"assets_slug_context_meta_type_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\",\"_meta_type\"],\"unique\":true},{\"name\":\"assets_meta_type_idx\",\"columns\":[\"_meta_type\"]},{\"name\":\"assets_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"assets_primary_version_id_idx\",\"columns\":[\"primary_version_id\"]},{\"name\":\"assets_owner_profile_id_idx\",\"columns\":[\"owner_profile_id\"]},{\"name\":\"assets_source_asset_id_idx\",\"columns\":[\"source_asset_id\"]},{\"name\":\"assets_folder_id_idx\",\"columns\":[\"folder_id\"]}],\"version\":\"dd79a8b6\"}},\"@happyvertical/smrt-images:ImageCollection\":{\"name\":\"imagecollection\",\"className\":\"ImageCollection\",\"qualifiedName\":\"@happyvertical/smrt-images:ImageCollection\",\"collection\":\"assets\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/images/src/images.ts\",\"packageName\":\"@happyvertical/smrt-images\",\"fields\":{},\"methods\":{\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"findGlobal\":{\"name\":\"findGlobal\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithGlobals\":{\"name\":\"findWithGlobals\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getByMinDimensions\":{\"name\":\"getByMinDimensions\",\"async\":true,\"parameters\":[{\"name\":\"minWidth\",\"type\":\"number\",\"optional\":false},{\"name\":\"minHeight\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getByMaxDimensions\":{\"name\":\"getByMaxDimensions\",\"async\":true,\"parameters\":[{\"name\":\"maxWidth\",\"type\":\"number\",\"optional\":false},{\"name\":\"maxHeight\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getLandscape\":{\"name\":\"getLandscape\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getPortrait\":{\"name\":\"getPortrait\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getSquare\":{\"name\":\"getSquare\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getMissingAltText\":{\"name\":\"getMissingAltText\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getHighResolution\":{\"name\":\"getHighResolution\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getByAspectRatio\":{\"name\":\"getByAspectRatio\",\"async\":true,\"parameters\":[{\"name\":\"minRatio\",\"type\":\"number\",\"optional\":false},{\"name\":\"maxRatio\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"assets\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Image\",\"exportName\":\"ImageCollection\",\"collectionExportName\":\"ImageCollectionCollection\",\"schema\":{\"tableName\":\"assets\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"assets\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"assets_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true},{\"name\":\"assets_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"90ab8d34\"}}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-assets\",\"@happyvertical/smrt-core\",\"@happyvertical/smrt-prompts\",\"@happyvertical/smrt-tenancy\"]}"));
10
+ ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":0,\"packageName\":\"@happyvertical/smrt-images\",\"packageVersion\":\"0.49.4\",\"objects\":{\"@happyvertical/smrt-images:Image\":{\"name\":\"image\",\"className\":\"Image\",\"qualifiedName\":\"@happyvertical/smrt-images:Image\",\"collection\":\"assets\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/images/src/image.ts\",\"packageName\":\"@happyvertical/smrt-images\",\"fields\":{\"created_at\":{\"type\":\"datetime\",\"required\":false},\"updated_at\":{\"type\":\"datetime\",\"required\":false},\"tenantId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"generated\":true,\"source\":\"tenantScoped_decorator\",\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"mode\":\"optional\",\"field\":\"tenantId\",\"autoFilter\":true,\"autoPopulate\":true,\"allowSuperAdminBypass\":false}}},\"name\":{\"type\":\"text\",\"required\":false},\"sourceUri\":{\"type\":\"text\",\"required\":false},\"mimeType\":{\"type\":\"text\",\"required\":false},\"description\":{\"type\":\"text\",\"required\":false},\"metadata\":{\"type\":\"text\",\"required\":false},\"version\":{\"type\":\"integer\",\"required\":true,\"default\":1},\"primaryVersionId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Asset\"},\"typeSlug\":{\"type\":\"text\",\"required\":false},\"statusSlug\":{\"type\":\"text\",\"required\":false},\"ownerProfileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\"},\"sourceAssetId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Asset\"},\"folderId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Folder\"},\"sourceType\":{\"type\":\"text\",\"required\":false},\"externalId\":{\"type\":\"text\",\"required\":false},\"externalRefs\":{\"type\":\"text\",\"required\":false},\"createdAt\":{\"type\":\"text\",\"required\":false},\"updatedAt\":{\"type\":\"text\",\"required\":false},\"width\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"height\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"alt\":{\"type\":\"text\",\"required\":false,\"default\":\"\"}},\"methods\":{\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string, unknown>\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"metadata\",\"type\":\"Record<string, unknown>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"mergeMetadata\":{\"name\":\"mergeMetadata\",\"async\":false,\"parameters\":[{\"name\":\"metadata\",\"type\":\"Record<string, unknown>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getExternalRefs\":{\"name\":\"getExternalRefs\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string, AssetExternalReference>\",\"isStatic\":false,\"isPublic\":true},\"getExternalRef\":{\"name\":\"getExternalRef\",\"async\":false,\"parameters\":[{\"name\":\"provider\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"AssetExternalReference | null\",\"isStatic\":false,\"isPublic\":true},\"setExternalRef\":{\"name\":\"setExternalRef\",\"async\":false,\"parameters\":[{\"name\":\"provider\",\"type\":\"string\",\"optional\":false},{\"name\":\"reference\",\"type\":\"any\",\"optional\":false,\"typeUnresolved\":true}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getTags\":{\"name\":\"getTags\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Tag[]>\",\"isStatic\":false,\"isPublic\":true},\"hasTag\":{\"name\":\"hasTag\",\"async\":true,\"parameters\":[{\"name\":\"tagSlug\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"getSource\":{\"name\":\"getSource\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Asset | null>\",\"isStatic\":false,\"isPublic\":true},\"getDerivatives\":{\"name\":\"getDerivatives\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Asset[]>\",\"isStatic\":false,\"isPublic\":true},\"getType\":{\"name\":\"getType\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<AssetType | null>\",\"isStatic\":false,\"isPublic\":true},\"getStatus\":{\"name\":\"getStatus\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<AssetStatus | null>\",\"isStatic\":false,\"isPublic\":true},\"getAssociations\":{\"name\":\"getAssociations\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<AssetAssociation[]>\",\"isStatic\":false,\"isPublic\":true},\"associateWith\":{\"name\":\"associateWith\",\"async\":true,\"parameters\":[{\"name\":\"metaType\",\"type\":\"string\",\"optional\":false},{\"name\":\"metaId\",\"type\":\"string\",\"optional\":false},{\"name\":\"role\",\"type\":\"any\",\"optional\":true,\"default\":\"default\"}],\"returnType\":\"Promise<AssetAssociation>\",\"isStatic\":false,\"isPublic\":true},\"getBySlug\":{\"name\":\"getBySlug\",\"async\":true,\"parameters\":[{\"name\":\"_slug\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Asset | null>\",\"isStatic\":true,\"isPublic\":true},\"isValidImageFormat\":{\"name\":\"isValidImageFormat\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isHighResolution\":{\"name\":\"isHighResolution\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"generateAltText\":{\"name\":\"generateAltText\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"mcp\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"generateAltText\"]},\"cli\":{\"skipApiCheck\":true},\"tenantScoped\":{\"mode\":\"optional\"},\"tableName\":\"assets\",\"tableStrategy\":\"sti\"},\"extends\":\"Asset\",\"exportName\":\"Image\",\"collectionExportName\":\"ImageCollection\",\"validationRules\":[{\"field\":\"version\",\"rule\":\"required\",\"fieldType\":\"integer\"}],\"schema\":{\"tableName\":\"assets\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"assets\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"_meta_type\\\" TEXT NOT NULL,\\n \\\"_meta_data\\\" JSON,\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID,\\n \\\"name\\\" TEXT,\\n \\\"source_uri\\\" TEXT,\\n \\\"mime_type\\\" TEXT,\\n \\\"description\\\" TEXT,\\n \\\"metadata\\\" TEXT,\\n \\\"version\\\" INTEGER DEFAULT 1,\\n \\\"primary_version_id\\\" UUID,\\n \\\"type_slug\\\" TEXT,\\n \\\"status_slug\\\" TEXT,\\n \\\"owner_profile_id\\\" UUID,\\n \\\"source_asset_id\\\" UUID,\\n \\\"folder_id\\\" UUID,\\n \\\"source_type\\\" TEXT,\\n \\\"external_id\\\" TEXT,\\n \\\"external_refs\\\" TEXT,\\n \\\"width\\\" INTEGER DEFAULT 0,\\n \\\"height\\\" INTEGER DEFAULT 0,\\n \\\"alt\\\" TEXT DEFAULT ''\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"_meta_type\":{\"type\":\"TEXT\",\"notNull\":true},\"_meta_data\":{\"type\":\"JSON\",\"notNull\":false},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false},\"source_uri\":{\"type\":\"TEXT\",\"notNull\":false},\"mime_type\":{\"type\":\"TEXT\",\"notNull\":false},\"description\":{\"type\":\"TEXT\",\"notNull\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false},\"version\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":1},\"primary_version_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"foreignKey\":{\"table\":\"assets\",\"column\":\"id\",\"onDelete\":\"NO ACTION\",\"onUpdate\":\"CASCADE\"}},\"type_slug\":{\"type\":\"TEXT\",\"notNull\":false},\"status_slug\":{\"type\":\"TEXT\",\"notNull\":false},\"owner_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false},\"source_asset_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"foreignKey\":{\"table\":\"assets\",\"column\":\"id\",\"onDelete\":\"NO ACTION\",\"onUpdate\":\"CASCADE\"}},\"folder_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false},\"source_type\":{\"type\":\"TEXT\",\"notNull\":false},\"external_id\":{\"type\":\"TEXT\",\"notNull\":false},\"external_refs\":{\"type\":\"TEXT\",\"notNull\":false},\"width\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"height\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"alt\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"assets_slug_context_meta_type_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\",\"_meta_type\"],\"unique\":true,\"nullsNotDistinct\":true},{\"name\":\"assets_meta_type_idx\",\"columns\":[\"_meta_type\"]},{\"name\":\"assets_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"assets_primary_version_id_idx\",\"columns\":[\"primary_version_id\"]},{\"name\":\"assets_owner_profile_id_idx\",\"columns\":[\"owner_profile_id\"]},{\"name\":\"assets_source_asset_id_idx\",\"columns\":[\"source_asset_id\"]},{\"name\":\"assets_folder_id_idx\",\"columns\":[\"folder_id\"]}],\"version\":\"dd79a8b6\"}},\"@happyvertical/smrt-images:ImageCollection\":{\"name\":\"imagecollection\",\"className\":\"ImageCollection\",\"qualifiedName\":\"@happyvertical/smrt-images:ImageCollection\",\"collection\":\"assets\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/images/src/images.ts\",\"packageName\":\"@happyvertical/smrt-images\",\"fields\":{},\"methods\":{\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"findGlobal\":{\"name\":\"findGlobal\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"findWithGlobals\":{\"name\":\"findWithGlobals\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getByMinDimensions\":{\"name\":\"getByMinDimensions\",\"async\":true,\"parameters\":[{\"name\":\"minWidth\",\"type\":\"number\",\"optional\":false},{\"name\":\"minHeight\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getByMaxDimensions\":{\"name\":\"getByMaxDimensions\",\"async\":true,\"parameters\":[{\"name\":\"maxWidth\",\"type\":\"number\",\"optional\":false},{\"name\":\"maxHeight\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getLandscape\":{\"name\":\"getLandscape\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getPortrait\":{\"name\":\"getPortrait\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getSquare\":{\"name\":\"getSquare\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getMissingAltText\":{\"name\":\"getMissingAltText\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getHighResolution\":{\"name\":\"getHighResolution\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true},\"getByAspectRatio\":{\"name\":\"getByAspectRatio\",\"async\":true,\"parameters\":[{\"name\":\"minRatio\",\"type\":\"number\",\"optional\":false},{\"name\":\"maxRatio\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<Image[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"assets\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Image\",\"exportName\":\"ImageCollection\",\"collectionExportName\":\"ImageCollectionCollection\",\"schema\":{\"tableName\":\"assets\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"assets\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"_meta_type\\\" TEXT NOT NULL,\\n \\\"_meta_data\\\" JSON,\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID,\\n \\\"name\\\" TEXT,\\n \\\"source_uri\\\" TEXT,\\n \\\"mime_type\\\" TEXT,\\n \\\"description\\\" TEXT,\\n \\\"metadata\\\" TEXT,\\n \\\"version\\\" INTEGER DEFAULT 1,\\n \\\"primary_version_id\\\" UUID,\\n \\\"type_slug\\\" TEXT,\\n \\\"status_slug\\\" TEXT,\\n \\\"owner_profile_id\\\" UUID,\\n \\\"source_asset_id\\\" UUID,\\n \\\"folder_id\\\" UUID,\\n \\\"source_type\\\" TEXT,\\n \\\"external_id\\\" TEXT,\\n \\\"external_refs\\\" TEXT,\\n \\\"width\\\" INTEGER DEFAULT 0,\\n \\\"height\\\" INTEGER DEFAULT 0,\\n \\\"alt\\\" TEXT DEFAULT ''\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"_meta_type\":{\"type\":\"TEXT\",\"notNull\":true},\"_meta_data\":{\"type\":\"JSON\",\"notNull\":false},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false},\"source_uri\":{\"type\":\"TEXT\",\"notNull\":false},\"mime_type\":{\"type\":\"TEXT\",\"notNull\":false},\"description\":{\"type\":\"TEXT\",\"notNull\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false},\"version\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":1},\"primary_version_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"foreignKey\":{\"table\":\"assets\",\"column\":\"id\",\"onDelete\":\"NO ACTION\",\"onUpdate\":\"CASCADE\"}},\"type_slug\":{\"type\":\"TEXT\",\"notNull\":false},\"status_slug\":{\"type\":\"TEXT\",\"notNull\":false},\"owner_profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false},\"source_asset_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"foreignKey\":{\"table\":\"assets\",\"column\":\"id\",\"onDelete\":\"NO ACTION\",\"onUpdate\":\"CASCADE\"}},\"folder_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false},\"source_type\":{\"type\":\"TEXT\",\"notNull\":false},\"external_id\":{\"type\":\"TEXT\",\"notNull\":false},\"external_refs\":{\"type\":\"TEXT\",\"notNull\":false},\"width\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"height\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"alt\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"assets_slug_context_meta_type_idx\",\"columns\":[\"tenant_id\",\"slug\",\"context\",\"_meta_type\"],\"unique\":true,\"nullsNotDistinct\":true},{\"name\":\"assets_meta_type_idx\",\"columns\":[\"_meta_type\"]},{\"name\":\"assets_tenant_id_created_at_idx\",\"columns\":[\"tenant_id\",\"created_at\"]},{\"name\":\"assets_primary_version_id_idx\",\"columns\":[\"primary_version_id\"]},{\"name\":\"assets_owner_profile_id_idx\",\"columns\":[\"owner_profile_id\"]},{\"name\":\"assets_source_asset_id_idx\",\"columns\":[\"source_asset_id\"]},{\"name\":\"assets_folder_id_idx\",\"columns\":[\"folder_id\"]}],\"version\":\"dd79a8b6\"}}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-assets\",\"@happyvertical/smrt-core\",\"@happyvertical/smrt-prompts\",\"@happyvertical/smrt-tenancy\"]}"));
11
11
  //#endregion
12
12
  //#region src/prompts.ts
13
13
  var smrtImagesGenerateAltTextPrompt = definePrompt({
@@ -2,7 +2,7 @@
2
2
  "version": "1.0.0",
3
3
  "timestamp": 0,
4
4
  "packageName": "@happyvertical/smrt-images",
5
- "packageVersion": "0.49.2",
5
+ "packageVersion": "0.49.4",
6
6
  "objects": {
7
7
  "@happyvertical/smrt-images:Image": {
8
8
  "name": "image",
@@ -513,7 +513,8 @@
513
513
  "context",
514
514
  "_meta_type"
515
515
  ],
516
- "unique": true
516
+ "unique": true,
517
+ "nullsNotDistinct": true
517
518
  },
518
519
  {
519
520
  "name": "assets_meta_type_idx",
@@ -708,7 +709,7 @@
708
709
  "collectionExportName": "ImageCollectionCollection",
709
710
  "schema": {
710
711
  "tableName": "assets",
711
- "ddl": "CREATE TABLE IF NOT EXISTS \"assets\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp\n);",
712
+ "ddl": "CREATE TABLE IF NOT EXISTS \"assets\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"_meta_type\" TEXT NOT NULL,\n \"_meta_data\" JSON,\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID,\n \"name\" TEXT,\n \"source_uri\" TEXT,\n \"mime_type\" TEXT,\n \"description\" TEXT,\n \"metadata\" TEXT,\n \"version\" INTEGER DEFAULT 1,\n \"primary_version_id\" UUID,\n \"type_slug\" TEXT,\n \"status_slug\" TEXT,\n \"owner_profile_id\" UUID,\n \"source_asset_id\" UUID,\n \"folder_id\" UUID,\n \"source_type\" TEXT,\n \"external_id\" TEXT,\n \"external_refs\" TEXT,\n \"width\" INTEGER DEFAULT 0,\n \"height\" INTEGER DEFAULT 0,\n \"alt\" TEXT DEFAULT ''\n);",
712
713
  "columns": {
713
714
  "id": {
714
715
  "type": "UUID",
@@ -725,6 +726,14 @@
725
726
  "notNull": true,
726
727
  "default": ""
727
728
  },
729
+ "_meta_type": {
730
+ "type": "TEXT",
731
+ "notNull": true
732
+ },
733
+ "_meta_data": {
734
+ "type": "JSON",
735
+ "notNull": false
736
+ },
728
737
  "created_at": {
729
738
  "type": "TIMESTAMP",
730
739
  "notNull": true,
@@ -734,25 +743,156 @@
734
743
  "type": "TIMESTAMP",
735
744
  "notNull": true,
736
745
  "default": "current_timestamp"
746
+ },
747
+ "tenant_id": {
748
+ "type": "UUID",
749
+ "referenceKind": "tenantId",
750
+ "notNull": false
751
+ },
752
+ "name": {
753
+ "type": "TEXT",
754
+ "notNull": false
755
+ },
756
+ "source_uri": {
757
+ "type": "TEXT",
758
+ "notNull": false
759
+ },
760
+ "mime_type": {
761
+ "type": "TEXT",
762
+ "notNull": false
763
+ },
764
+ "description": {
765
+ "type": "TEXT",
766
+ "notNull": false
767
+ },
768
+ "metadata": {
769
+ "type": "TEXT",
770
+ "notNull": false
771
+ },
772
+ "version": {
773
+ "type": "INTEGER",
774
+ "notNull": false,
775
+ "default": 1
776
+ },
777
+ "primary_version_id": {
778
+ "type": "UUID",
779
+ "referenceKind": "foreignKey",
780
+ "notNull": false,
781
+ "foreignKey": {
782
+ "table": "assets",
783
+ "column": "id",
784
+ "onDelete": "NO ACTION",
785
+ "onUpdate": "CASCADE"
786
+ }
787
+ },
788
+ "type_slug": {
789
+ "type": "TEXT",
790
+ "notNull": false
791
+ },
792
+ "status_slug": {
793
+ "type": "TEXT",
794
+ "notNull": false
795
+ },
796
+ "owner_profile_id": {
797
+ "type": "UUID",
798
+ "referenceKind": "crossPackageRef",
799
+ "notNull": false
800
+ },
801
+ "source_asset_id": {
802
+ "type": "UUID",
803
+ "referenceKind": "foreignKey",
804
+ "notNull": false,
805
+ "foreignKey": {
806
+ "table": "assets",
807
+ "column": "id",
808
+ "onDelete": "NO ACTION",
809
+ "onUpdate": "CASCADE"
810
+ }
811
+ },
812
+ "folder_id": {
813
+ "type": "UUID",
814
+ "referenceKind": "foreignKey",
815
+ "notNull": false
816
+ },
817
+ "source_type": {
818
+ "type": "TEXT",
819
+ "notNull": false
820
+ },
821
+ "external_id": {
822
+ "type": "TEXT",
823
+ "notNull": false
824
+ },
825
+ "external_refs": {
826
+ "type": "TEXT",
827
+ "notNull": false
828
+ },
829
+ "width": {
830
+ "type": "INTEGER",
831
+ "notNull": false,
832
+ "default": 0
833
+ },
834
+ "height": {
835
+ "type": "INTEGER",
836
+ "notNull": false,
837
+ "default": 0
838
+ },
839
+ "alt": {
840
+ "type": "TEXT",
841
+ "notNull": false,
842
+ "default": ""
737
843
  }
738
844
  },
739
845
  "indexes": [
740
846
  {
741
- "name": "assets_slug_context_idx",
847
+ "name": "assets_slug_context_meta_type_idx",
742
848
  "columns": [
849
+ "tenant_id",
743
850
  "slug",
744
- "context"
851
+ "context",
852
+ "_meta_type"
745
853
  ],
746
- "unique": true
854
+ "unique": true,
855
+ "nullsNotDistinct": true
747
856
  },
748
857
  {
749
- "name": "assets_created_at_idx",
858
+ "name": "assets_meta_type_idx",
859
+ "columns": [
860
+ "_meta_type"
861
+ ]
862
+ },
863
+ {
864
+ "name": "assets_tenant_id_created_at_idx",
750
865
  "columns": [
866
+ "tenant_id",
751
867
  "created_at"
752
868
  ]
869
+ },
870
+ {
871
+ "name": "assets_primary_version_id_idx",
872
+ "columns": [
873
+ "primary_version_id"
874
+ ]
875
+ },
876
+ {
877
+ "name": "assets_owner_profile_id_idx",
878
+ "columns": [
879
+ "owner_profile_id"
880
+ ]
881
+ },
882
+ {
883
+ "name": "assets_source_asset_id_idx",
884
+ "columns": [
885
+ "source_asset_id"
886
+ ]
887
+ },
888
+ {
889
+ "name": "assets_folder_id_idx",
890
+ "columns": [
891
+ "folder_id"
892
+ ]
753
893
  }
754
894
  ],
755
- "version": "90ab8d34"
895
+ "version": "dd79a8b6"
756
896
  }
757
897
  }
758
898
  },
@@ -3,12 +3,12 @@
3
3
  "sensitiveFieldsExcluded": true,
4
4
  "generatedAt": "1970-01-01T00:00:00.000Z",
5
5
  "packageName": "@happyvertical/smrt-images",
6
- "packageVersion": "0.49.2",
6
+ "packageVersion": "0.49.4",
7
7
  "sourceManifestPath": "dist/manifest.json",
8
8
  "agentDocPath": "AGENTS.md",
9
9
  "sourceHashes": {
10
- "manifest": "43c218dbdd8c976411303d001a9fa810e1668ad4b5a459a6a28f8121117ed357",
11
- "packageJson": "66b03fea87efd1a1e84a3b553eb9821e99be906f2d1e992fe5191efc628f34d6",
10
+ "manifest": "14a99999e289be68f9efcb1bfb7b82e5b800b9ff7cb70247c904affcf55e2894",
11
+ "packageJson": "218bb6f4e327f83e3508a9a82e06778110ddba9fccb4c5d34d780bcc3f88bb0e",
12
12
  "agents": "b0cf63bd78f00cc1729ea7f1425291f8e23ab5591161cbbf0d08f4b16ace07fd"
13
13
  },
14
14
  "exports": [
@@ -1497,7 +1497,7 @@
1497
1497
  "junctionCollections": 0,
1498
1498
  "hierarchicalObjects": 0,
1499
1499
  "polymorphicAssociations": 0,
1500
- "uuidColumns": 7
1500
+ "uuidColumns": 12
1501
1501
  },
1502
1502
  "agentDoc": "# @happyvertical/smrt-images\n\nImage management with AI categorization, editing, and metadata extraction. Extends Asset via cross-package STI.\n\n## Models\n\n- **Image**: STI subclass of Asset (from smrt-assets) — stored in same `assets` table with `_meta_type='Image'`. Adds `width`, `height`, `alt` text.\n\n## Key Services\n\n- **ImageCollection**: dimension/orientation filters — `getByMinDimensions()`, `getByAspectRatio()`, `getLandscape()`, `getPortrait()`, `getSquare()`, `getHighResolution()`, `getMissingAltText()`\n- **ImageMetadataExtractor**: dimensions, format, EXIF from buffers (via `@happyvertical/images`)\n- **ImageCategorizer**: AI vision analysis → tags, description, confidence, subjects (via `@happyvertical/ai`)\n- **ImageEditor**: resize/crop/convert/thumbnail + AI editing. Creates new Image records with `parentId` linking to source.\n- **ImageDeriver**: creates derived images and, when requested, records source provenance through generic `AssetAssociation` links\n- **ImageSearch**: text search across name/description/alt with orientation filters\n- **UpstreamManager**: import from external providers with provenance tracking\n\n## AI Operations\n\n`generateAltText()` uses the `smrtImages.image.generateAltText` prompt registered via `@happyvertical/smrt-prompts` (resolves tenant overrides via `resolvePrompt()` then dispatches through `getAiClient().message()`). Computed properties: `isLandscape`, `isPortrait`, `aspectRatio`.\n\n## Prompt Registry\n\n`Image.generateAltText()` is registered with `@happyvertical/smrt-prompts` so tenants can override template/model/params at runtime:\n\n```typescript\nimport { smrtImagesGenerateAltTextPrompt } from '@happyvertical/smrt-images';\n// key: 'smrtImages.image.generateAltText'\n```\n\nOnly non-PII metadata fields are passed to the AI provider: `name`, `description`. Source URIs, internal foreign-key fields (`parentId`, `tenantId`), and the extensible `metadata` blob are intentionally excluded — source URIs may embed signed/private bucket paths and `metadata` may contain EXIF GPS data or tenant-private configuration.\n\n## UI Registry\n\nSvelte components auto-register with `ModuleUIRegistry` on import of `@happyvertical/smrt-images/svelte`. UI slot declarations live in `src/ui.ts` and are exported via `@happyvertical/smrt-images/ui`:\n\n- `assets-gallery` — `AssetsGallery.svelte`\n- `image-editor` — `ImageEditor.svelte`\n- `image-uploader` — `ImageUploader.svelte`\n\n## Gotchas\n\n- **Cross-package STI**: Image extends Asset from different package — fragile if Asset schema changes\n- **AssetAssociation usage is intentional here**: image derivation uses it for provenance, not for base-model-owned asset storage\n- **Editor bypasses collection.create()**: creates Image instances directly (skips collection validation)\n- **Derivative creation**: 3 DB calls — `collection.create()` + `store.storeFile()` + `save()`\n- **Orientation filtering is in-memory**: queries all images, then filters by dimensions\n"
1503
1503
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-images",
3
- "version": "0.49.2",
3
+ "version": "0.49.4",
4
4
  "description": "Image asset management with AI-powered categorization, search, editing, and metadata extraction for SMRT framework",
5
5
  "type": "module",
6
6
  "smrtRawPrimitives": "strict",
@@ -40,12 +40,12 @@
40
40
  "dependencies": {
41
41
  "@happyvertical/ai": "^0.89.6",
42
42
  "@happyvertical/images": "^0.89.6",
43
- "@happyvertical/smrt-assets": "0.49.2",
44
- "@happyvertical/smrt-core": "0.49.2",
45
- "@happyvertical/smrt-prompts": "0.49.2",
46
- "@happyvertical/smrt-tenancy": "0.49.2",
47
- "@happyvertical/smrt-types": "0.49.2",
48
- "@happyvertical/smrt-ui": "0.49.2",
43
+ "@happyvertical/smrt-assets": "0.49.4",
44
+ "@happyvertical/smrt-core": "0.49.4",
45
+ "@happyvertical/smrt-prompts": "0.49.4",
46
+ "@happyvertical/smrt-tenancy": "0.49.4",
47
+ "@happyvertical/smrt-types": "0.49.4",
48
+ "@happyvertical/smrt-ui": "0.49.4",
49
49
  "@happyvertical/utils": "^0.89.6",
50
50
  "jimp": "^1.6.1",
51
51
  "sharp": "^0.35.4"
@@ -54,8 +54,8 @@
54
54
  "svelte": "^5.56.4"
55
55
  },
56
56
  "devDependencies": {
57
- "@happyvertical/smrt-playground": "0.49.2",
58
- "@happyvertical/smrt-vitest": "0.49.2",
57
+ "@happyvertical/smrt-playground": "0.49.4",
58
+ "@happyvertical/smrt-vitest": "0.49.4",
59
59
  "@happyvertical/sql": "^0.89.6",
60
60
  "@sveltejs/kit": "^2.69.1",
61
61
  "@sveltejs/package": "^2.5.8",