{
  "schemaVersion": 1,
  "sensitiveFieldsExcluded": true,
  "generatedAt": "1970-01-01T00:00:00.000Z",
  "packageName": "@happyvertical/smrt-assets",
  "packageVersion": "0.42.7",
  "sourceManifestPath": "dist/manifest.json",
  "agentDocPath": "AGENTS.md",
  "sourceHashes": {
    "manifest": "bd0cb3cb4e7e85163543d83192990bf8a1389b07911c86fa1068061ab275a21b",
    "packageJson": "08ed814f0f0d5e747bc02baa7d4ad440f244d42cf92bcda316b3cbea98c4d80c",
    "agents": "7d3a64dc7e114069e8a2357253360dcaa94550ed3662148e1b9146bf9cd30b79"
  },
  "exports": [
    ".",
    "./filesystem",
    "./manifest",
    "./manifest.json",
    "./playground",
    "./svelte",
    "./ui",
    "./workbench"
  ],
  "dependencies": {
    "@happyvertical/ai": "catalog:",
    "@happyvertical/files": "catalog:",
    "@happyvertical/logger": "catalog:",
    "@happyvertical/smrt-core": "workspace:*",
    "@happyvertical/smrt-tags": "workspace:*",
    "@happyvertical/smrt-tenancy": "workspace:*",
    "@happyvertical/smrt-types": "workspace:*",
    "@happyvertical/smrt-ui": "workspace:*",
    "@happyvertical/sql": "catalog:",
    "@happyvertical/utils": "catalog:",
    "@happyvertical/smrt-playground": "workspace:*",
    "@happyvertical/smrt-vitest": "workspace:*",
    "@sveltejs/adapter-auto": "^7.0.1",
    "@sveltejs/kit": "^2.69.1",
    "@sveltejs/package": "^2.5.8",
    "@sveltejs/vite-plugin-svelte": "^7.1.2",
    "@types/node": "24.13.2",
    "svelte": "^5.56.4",
    "svelte-check": "^4.7.1",
    "tslib": "^2.8.1",
    "typescript": "5.9.3",
    "vite": "8.1.4",
    "vitest": "4.1.10"
  },
  "smrtDependencies": [
    "@happyvertical/smrt-core",
    "@happyvertical/smrt-playground",
    "@happyvertical/smrt-tags",
    "@happyvertical/smrt-tenancy",
    "@happyvertical/smrt-types",
    "@happyvertical/smrt-ui",
    "@happyvertical/smrt-vitest"
  ],
  "sdkDependencies": [
    "@happyvertical/ai",
    "@happyvertical/files",
    "@happyvertical/logger",
    "@happyvertical/sql",
    "@happyvertical/utils"
  ],
  "tags": [],
  "risks": [],
  "objects": [
    {
      "name": "AssetAssociation",
      "qualifiedName": "@happyvertical/smrt-assets:AssetAssociation",
      "collection": "assetassociations",
      "tableName": "asset_associations",
      "packageName": "@happyvertical/smrt-assets",
      "extends": "SmrtPolymorphicAssociation",
      "fields": [
        {
          "name": "metaType",
          "type": "text",
          "required": true,
          "columnType": "TEXT"
        },
        {
          "name": "metaId",
          "type": "text",
          "required": true,
          "columnType": "TEXT"
        },
        {
          "name": "role",
          "type": "text",
          "required": true,
          "columnType": "TEXT"
        },
        {
          "name": "sortOrder",
          "type": "integer",
          "required": false,
          "columnType": "INTEGER",
          "default": 0
        },
        {
          "name": "tenantId",
          "type": "text",
          "required": false,
          "columnType": "UUID"
        },
        {
          "name": "assetId",
          "type": "foreignKey",
          "required": true,
          "related": "Asset",
          "columnType": "UUID"
        }
      ],
      "relationships": [
        {
          "name": "assetId",
          "type": "foreignKey",
          "required": true,
          "related": "Asset",
          "columnType": "UUID"
        }
      ],
      "methods": [
        "hydrate"
      ],
      "methodSignatures": [
        {
          "name": "hydrate",
          "async": true,
          "returns": "Promise<T | null>"
        }
      ],
      "tenant": {
        "scoped": true,
        "mode": "optional",
        "field": "tenantId"
      },
      "conflictColumns": [
        "asset_id",
        "meta_type",
        "meta_id",
        "role"
      ],
      "surfaces": [
        {
          "kind": "api",
          "name": "assetassociations.list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:AssetAssociation",
          "path": "/assetassociations",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "assetassociations.get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:AssetAssociation",
          "path": "/assetassociations/[id]",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "assetassociations.create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:AssetAssociation",
          "path": "/assetassociations",
          "method": "POST"
        },
        {
          "kind": "api",
          "name": "assetassociations.delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-assets:AssetAssociation",
          "path": "/assetassociations/[id]",
          "method": "DELETE"
        },
        {
          "kind": "cli",
          "name": "assetassociation_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:AssetAssociation"
        },
        {
          "kind": "cli",
          "name": "assetassociation_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:AssetAssociation"
        },
        {
          "kind": "cli",
          "name": "assetassociation_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:AssetAssociation"
        },
        {
          "kind": "cli",
          "name": "assetassociation_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-assets:AssetAssociation"
        },
        {
          "kind": "cli",
          "name": "assetassociation_delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-assets:AssetAssociation"
        },
        {
          "kind": "mcp",
          "name": "assetassociation_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:AssetAssociation"
        },
        {
          "kind": "mcp",
          "name": "assetassociation_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:AssetAssociation"
        },
        {
          "kind": "mcp",
          "name": "assetassociation_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:AssetAssociation"
        }
      ],
      "relationshipFeatures": [
        "SmrtPolymorphicAssociation",
        "foreignKey",
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AssetAssociationCollection",
      "qualifiedName": "@happyvertical/smrt-assets:AssetAssociationCollection",
      "collection": "assetassociations",
      "tableName": "asset_association_collections",
      "packageName": "@happyvertical/smrt-assets",
      "extends": "SmrtJunction",
      "fields": [],
      "relationships": [],
      "methods": [
        "attach",
        "byLeft",
        "byRight",
        "detach",
        "setLinks"
      ],
      "methodSignatures": [
        {
          "name": "attach",
          "async": true,
          "params": [
            "metaType: string",
            "metaId: string",
            "assetId: string",
            "opts?: JunctionAttachOptions"
          ],
          "returns": "Promise<AssetAssociation>"
        },
        {
          "name": "byLeft",
          "async": true,
          "params": [
            "metaType: string",
            "metaId: string",
            "opts?: JunctionFilterOptions"
          ],
          "returns": "Promise<AssetAssociation[]>"
        },
        {
          "name": "byRight",
          "async": true,
          "params": [
            "rightId: string",
            "opts?: JunctionFilterOptions"
          ],
          "returns": "Promise<TItem[]>"
        },
        {
          "name": "detach",
          "async": true,
          "params": [
            "metaType: string",
            "metaId: string",
            "assetId: string",
            "opts?: JunctionFilterOptions"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "setLinks",
          "async": true,
          "params": [
            "metaType: string",
            "metaId: string",
            "assetIds: string[]",
            "opts?: JunctionAttachOptions"
          ],
          "returns": "Promise<void>"
        }
      ],
      "surfaces": [],
      "relationshipFeatures": [
        "SmrtJunction",
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AssetMetafield",
      "qualifiedName": "@happyvertical/smrt-assets:AssetMetafield",
      "collection": "assetmetafields",
      "tableName": "asset_metafields",
      "packageName": "@happyvertical/smrt-assets",
      "extends": "SmrtObject",
      "fields": [
        {
          "name": "created_at",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "updated_at",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "name",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "validation",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        }
      ],
      "relationships": [],
      "methods": [
        "_setLoadedRelationship",
        "classifyConstraintError",
        "clearEmbeddings",
        "delete",
        "describe",
        "destroy",
        "do",
        "executeToolCall",
        "forget",
        "forgetScope",
        "generateEmbeddings",
        "getAiUsageSnapshot",
        "getAvailableTools",
        "getBySlug",
        "getEmbedding",
        "getFields",
        "getId",
        "getRelated",
        "getSavedId",
        "getSlug",
        "getValidation",
        "hasStaleEmbeddings",
        "initialize",
        "is",
        "isRelatedLoaded",
        "isSaved",
        "listAiUsage",
        "loadDataFromDb",
        "loadFromId",
        "loadFromSlug",
        "loadRelated",
        "loadRelatedMany",
        "markAsPersisted",
        "recall",
        "recallAll",
        "remember",
        "requireInsertOnSave",
        "resetAiUsage",
        "save",
        "setValidation",
        "summarizeAiUsage",
        "toJSON",
        "toPlainObject",
        "toPublicJSON"
      ],
      "methodSignatures": [
        {
          "name": "_setLoadedRelationship",
          "params": [
            "fieldName: string",
            "value: any"
          ],
          "returns": "void"
        },
        {
          "name": "classifyConstraintError",
          "static": true,
          "params": [
            "message: string"
          ],
          "returns": "'unique' | 'not_null' | null"
        },
        {
          "name": "clearEmbeddings",
          "async": true,
          "returns": "Promise<void>"
        },
        {
          "name": "delete",
          "async": true,
          "returns": "Promise<void>"
        },
        {
          "name": "describe",
          "async": true,
          "params": [
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "destroy",
          "returns": "void"
        },
        {
          "name": "do",
          "async": true,
          "params": [
            "instructions: string",
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "executeToolCall",
          "async": true,
          "params": [
            "toolCall: ToolCall"
          ],
          "returns": "Promise<ToolCallResult>"
        },
        {
          "name": "forget",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "forgetScope",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise<number>"
        },
        {
          "name": "generateEmbeddings",
          "async": true,
          "params": [
            "options?: GenerateEmbeddingsOptions"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "getAiUsageSnapshot",
          "returns": "AiUsageSnapshot | undefined"
        },
        {
          "name": "getAvailableTools",
          "returns": "AITool[]"
        },
        {
          "name": "getBySlug",
          "async": true,
          "static": true,
          "params": [
            "_slug: string"
          ],
          "returns": "Promise<AssetMetafield | null>"
        },
        {
          "name": "getEmbedding",
          "async": true,
          "params": [
            "fieldName: string",
            "model?: string"
          ],
          "returns": "Promise<number[] | null>"
        },
        {
          "name": "getFields",
          "async": true,
          "returns": "Promise<any>"
        },
        {
          "name": "getId",
          "async": true,
          "returns": "any"
        },
        {
          "name": "getRelated",
          "async": true,
          "params": [
            "fieldName: string",
            "opts?: LoadRelatedOptions"
          ],
          "returns": "Promise<any>"
        },
        {
          "name": "getSavedId",
          "async": true,
          "returns": "any"
        },
        {
          "name": "getSlug",
          "async": true,
          "returns": "any"
        },
        {
          "name": "getValidation",
          "returns": "Record<string>"
        },
        {
          "name": "hasStaleEmbeddings",
          "async": true,
          "returns": "Promise<boolean>"
        },
        {
          "name": "initialize",
          "async": true,
          "returns": "Promise"
        },
        {
          "name": "is",
          "async": true,
          "params": [
            "criteria: string",
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "isRelatedLoaded",
          "params": [
            "fieldName: string"
          ],
          "returns": "boolean"
        },
        {
          "name": "isSaved",
          "async": true,
          "returns": "any"
        },
        {
          "name": "listAiUsage",
          "async": true,
          "params": [
            "options?: AiUsageListOptions"
          ],
          "returns": "Promise<SmrtAiUsageRecord[]>"
        },
        {
          "name": "loadDataFromDb",
          "async": true,
          "params": [
            "data: Record<string>"
          ],
          "returns": "any"
        },
        {
          "name": "loadFromId",
          "async": true,
          "returns": "any"
        },
        {
          "name": "loadFromSlug",
          "async": true,
          "returns": "any"
        },
        {
          "name": "loadRelated",
          "async": true,
          "params": [
            "fieldName: string",
            "opts?: LoadRelatedOptions"
          ],
          "returns": "Promise<any>"
        },
        {
          "name": "loadRelatedMany",
          "async": true,
          "params": [
            "fieldName: string",
            "opts?: LoadRelatedOptions"
          ],
          "returns": "Promise<any[]>"
        },
        {
          "name": "markAsPersisted",
          "returns": "void"
        },
        {
          "name": "recall",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise"
        },
        {
          "name": "recallAll",
          "async": true,
          "params": [
            "options?: object"
          ],
          "returns": "Promise<Map<string>>"
        },
        {
          "name": "remember",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "requireInsertOnSave",
          "returns": "void"
        },
        {
          "name": "resetAiUsage",
          "returns": "void"
        },
        {
          "name": "save",
          "async": true,
          "returns": "any"
        },
        {
          "name": "setValidation",
          "params": [
            "rules: Record<string>"
          ],
          "returns": "void"
        },
        {
          "name": "summarizeAiUsage",
          "async": true,
          "params": [
            "options?: AiUsageSummaryOptions"
          ],
          "returns": "Promise<Record<string, AiUsageStats>>"
        },
        {
          "name": "toJSON",
          "returns": "any"
        },
        {
          "name": "toPlainObject",
          "returns": "Record<string>"
        },
        {
          "name": "toPublicJSON",
          "params": [
            "options?: PublicJsonOptions"
          ],
          "returns": "Record<string>"
        }
      ],
      "tableStrategy": "sti",
      "surfaces": [
        {
          "kind": "api",
          "name": "assetmetafields.list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:AssetMetafield",
          "path": "/assetmetafields",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "assetmetafields.get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:AssetMetafield",
          "path": "/assetmetafields/[id]",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "assetmetafields.create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:AssetMetafield",
          "path": "/assetmetafields",
          "method": "POST"
        },
        {
          "kind": "api",
          "name": "assetmetafields.update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-assets:AssetMetafield",
          "path": "/assetmetafields/[id]",
          "method": "PATCH"
        },
        {
          "kind": "api",
          "name": "assetmetafields.delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-assets:AssetMetafield",
          "path": "/assetmetafields/[id]",
          "method": "DELETE"
        },
        {
          "kind": "cli",
          "name": "assetmetafield_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:AssetMetafield"
        },
        {
          "kind": "cli",
          "name": "assetmetafield_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:AssetMetafield"
        },
        {
          "kind": "cli",
          "name": "assetmetafield_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:AssetMetafield"
        },
        {
          "kind": "cli",
          "name": "assetmetafield_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-assets:AssetMetafield"
        },
        {
          "kind": "cli",
          "name": "assetmetafield_delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-assets:AssetMetafield"
        },
        {
          "kind": "mcp",
          "name": "assetmetafield_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:AssetMetafield"
        },
        {
          "kind": "mcp",
          "name": "assetmetafield_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:AssetMetafield"
        },
        {
          "kind": "mcp",
          "name": "assetmetafield_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:AssetMetafield"
        }
      ],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AssetMetafieldCollection",
      "qualifiedName": "@happyvertical/smrt-assets:AssetMetafieldCollection",
      "collection": "assetmetafields",
      "tableName": "asset_metafield_collections",
      "packageName": "@happyvertical/smrt-assets",
      "extends": "SmrtCollection",
      "fields": [],
      "relationships": [],
      "methods": [
        "getOrCreate",
        "initializeCommonMetafields"
      ],
      "methodSignatures": [
        {
          "name": "getOrCreate",
          "async": true,
          "params": [
            "slug: string",
            "name?: string",
            "validation?: string | Record<string>"
          ],
          "returns": "Promise<AssetMetafield>"
        },
        {
          "name": "initializeCommonMetafields",
          "async": true,
          "returns": "Promise<void>"
        }
      ],
      "surfaces": [],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AssetStatus",
      "qualifiedName": "@happyvertical/smrt-assets:AssetStatus",
      "collection": "assetstatuses",
      "tableName": "asset_statuses",
      "packageName": "@happyvertical/smrt-assets",
      "extends": "SmrtObject",
      "fields": [
        {
          "name": "created_at",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "updated_at",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "name",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "description",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        }
      ],
      "relationships": [],
      "methods": [
        "_setLoadedRelationship",
        "classifyConstraintError",
        "clearEmbeddings",
        "delete",
        "describe",
        "destroy",
        "do",
        "executeToolCall",
        "forget",
        "forgetScope",
        "generateEmbeddings",
        "getAiUsageSnapshot",
        "getAvailableTools",
        "getBySlug",
        "getEmbedding",
        "getFields",
        "getId",
        "getRelated",
        "getSavedId",
        "getSlug",
        "hasStaleEmbeddings",
        "initialize",
        "is",
        "isRelatedLoaded",
        "isSaved",
        "listAiUsage",
        "loadDataFromDb",
        "loadFromId",
        "loadFromSlug",
        "loadRelated",
        "loadRelatedMany",
        "markAsPersisted",
        "recall",
        "recallAll",
        "remember",
        "requireInsertOnSave",
        "resetAiUsage",
        "save",
        "summarizeAiUsage",
        "toJSON",
        "toPlainObject",
        "toPublicJSON"
      ],
      "methodSignatures": [
        {
          "name": "_setLoadedRelationship",
          "params": [
            "fieldName: string",
            "value: any"
          ],
          "returns": "void"
        },
        {
          "name": "classifyConstraintError",
          "static": true,
          "params": [
            "message: string"
          ],
          "returns": "'unique' | 'not_null' | null"
        },
        {
          "name": "clearEmbeddings",
          "async": true,
          "returns": "Promise<void>"
        },
        {
          "name": "delete",
          "async": true,
          "returns": "Promise<void>"
        },
        {
          "name": "describe",
          "async": true,
          "params": [
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "destroy",
          "returns": "void"
        },
        {
          "name": "do",
          "async": true,
          "params": [
            "instructions: string",
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "executeToolCall",
          "async": true,
          "params": [
            "toolCall: ToolCall"
          ],
          "returns": "Promise<ToolCallResult>"
        },
        {
          "name": "forget",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "forgetScope",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise<number>"
        },
        {
          "name": "generateEmbeddings",
          "async": true,
          "params": [
            "options?: GenerateEmbeddingsOptions"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "getAiUsageSnapshot",
          "returns": "AiUsageSnapshot | undefined"
        },
        {
          "name": "getAvailableTools",
          "returns": "AITool[]"
        },
        {
          "name": "getBySlug",
          "async": true,
          "static": true,
          "params": [
            "_slug: string"
          ],
          "returns": "Promise<AssetStatus | null>"
        },
        {
          "name": "getEmbedding",
          "async": true,
          "params": [
            "fieldName: string",
            "model?: string"
          ],
          "returns": "Promise<number[] | null>"
        },
        {
          "name": "getFields",
          "async": true,
          "returns": "Promise<any>"
        },
        {
          "name": "getId",
          "async": true,
          "returns": "any"
        },
        {
          "name": "getRelated",
          "async": true,
          "params": [
            "fieldName: string",
            "opts?: LoadRelatedOptions"
          ],
          "returns": "Promise<any>"
        },
        {
          "name": "getSavedId",
          "async": true,
          "returns": "any"
        },
        {
          "name": "getSlug",
          "async": true,
          "returns": "any"
        },
        {
          "name": "hasStaleEmbeddings",
          "async": true,
          "returns": "Promise<boolean>"
        },
        {
          "name": "initialize",
          "async": true,
          "returns": "Promise"
        },
        {
          "name": "is",
          "async": true,
          "params": [
            "criteria: string",
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "isRelatedLoaded",
          "params": [
            "fieldName: string"
          ],
          "returns": "boolean"
        },
        {
          "name": "isSaved",
          "async": true,
          "returns": "any"
        },
        {
          "name": "listAiUsage",
          "async": true,
          "params": [
            "options?: AiUsageListOptions"
          ],
          "returns": "Promise<SmrtAiUsageRecord[]>"
        },
        {
          "name": "loadDataFromDb",
          "async": true,
          "params": [
            "data: Record<string>"
          ],
          "returns": "any"
        },
        {
          "name": "loadFromId",
          "async": true,
          "returns": "any"
        },
        {
          "name": "loadFromSlug",
          "async": true,
          "returns": "any"
        },
        {
          "name": "loadRelated",
          "async": true,
          "params": [
            "fieldName: string",
            "opts?: LoadRelatedOptions"
          ],
          "returns": "Promise<any>"
        },
        {
          "name": "loadRelatedMany",
          "async": true,
          "params": [
            "fieldName: string",
            "opts?: LoadRelatedOptions"
          ],
          "returns": "Promise<any[]>"
        },
        {
          "name": "markAsPersisted",
          "returns": "void"
        },
        {
          "name": "recall",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise"
        },
        {
          "name": "recallAll",
          "async": true,
          "params": [
            "options?: object"
          ],
          "returns": "Promise<Map<string>>"
        },
        {
          "name": "remember",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "requireInsertOnSave",
          "returns": "void"
        },
        {
          "name": "resetAiUsage",
          "returns": "void"
        },
        {
          "name": "save",
          "async": true,
          "returns": "any"
        },
        {
          "name": "summarizeAiUsage",
          "async": true,
          "params": [
            "options?: AiUsageSummaryOptions"
          ],
          "returns": "Promise<Record<string, AiUsageStats>>"
        },
        {
          "name": "toJSON",
          "returns": "any"
        },
        {
          "name": "toPlainObject",
          "returns": "Record<string>"
        },
        {
          "name": "toPublicJSON",
          "params": [
            "options?: PublicJsonOptions"
          ],
          "returns": "Record<string>"
        }
      ],
      "tableStrategy": "sti",
      "surfaces": [
        {
          "kind": "api",
          "name": "assetstatuses.list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:AssetStatus",
          "path": "/assetstatuses",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "assetstatuses.get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:AssetStatus",
          "path": "/assetstatuses/[id]",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "assetstatuses.create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:AssetStatus",
          "path": "/assetstatuses",
          "method": "POST"
        },
        {
          "kind": "api",
          "name": "assetstatuses.update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-assets:AssetStatus",
          "path": "/assetstatuses/[id]",
          "method": "PATCH"
        },
        {
          "kind": "api",
          "name": "assetstatuses.delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-assets:AssetStatus",
          "path": "/assetstatuses/[id]",
          "method": "DELETE"
        },
        {
          "kind": "cli",
          "name": "assetstatus_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:AssetStatus"
        },
        {
          "kind": "cli",
          "name": "assetstatus_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:AssetStatus"
        },
        {
          "kind": "cli",
          "name": "assetstatus_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:AssetStatus"
        },
        {
          "kind": "cli",
          "name": "assetstatus_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-assets:AssetStatus"
        },
        {
          "kind": "cli",
          "name": "assetstatus_delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-assets:AssetStatus"
        },
        {
          "kind": "mcp",
          "name": "assetstatus_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:AssetStatus"
        },
        {
          "kind": "mcp",
          "name": "assetstatus_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:AssetStatus"
        },
        {
          "kind": "mcp",
          "name": "assetstatus_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:AssetStatus"
        }
      ],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AssetStatusCollection",
      "qualifiedName": "@happyvertical/smrt-assets:AssetStatusCollection",
      "collection": "assetstatuses",
      "tableName": "asset_status_collections",
      "packageName": "@happyvertical/smrt-assets",
      "extends": "SmrtCollection",
      "fields": [],
      "relationships": [],
      "methods": [
        "getOrCreate",
        "initializeCommonStatuses"
      ],
      "methodSignatures": [
        {
          "name": "getOrCreate",
          "async": true,
          "params": [
            "slug: string",
            "name?: string",
            "description?: string"
          ],
          "returns": "Promise<AssetStatus>"
        },
        {
          "name": "initializeCommonStatuses",
          "async": true,
          "returns": "Promise<void>"
        }
      ],
      "surfaces": [],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AssetType",
      "qualifiedName": "@happyvertical/smrt-assets:AssetType",
      "collection": "assettypes",
      "tableName": "asset_types",
      "packageName": "@happyvertical/smrt-assets",
      "extends": "SmrtObject",
      "fields": [
        {
          "name": "created_at",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "updated_at",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "name",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "description",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        }
      ],
      "relationships": [],
      "methods": [
        "_setLoadedRelationship",
        "classifyConstraintError",
        "clearEmbeddings",
        "delete",
        "describe",
        "destroy",
        "do",
        "executeToolCall",
        "forget",
        "forgetScope",
        "generateEmbeddings",
        "getAiUsageSnapshot",
        "getAvailableTools",
        "getBySlug",
        "getEmbedding",
        "getFields",
        "getId",
        "getRelated",
        "getSavedId",
        "getSlug",
        "hasStaleEmbeddings",
        "initialize",
        "is",
        "isRelatedLoaded",
        "isSaved",
        "listAiUsage",
        "loadDataFromDb",
        "loadFromId",
        "loadFromSlug",
        "loadRelated",
        "loadRelatedMany",
        "markAsPersisted",
        "recall",
        "recallAll",
        "remember",
        "requireInsertOnSave",
        "resetAiUsage",
        "save",
        "summarizeAiUsage",
        "toJSON",
        "toPlainObject",
        "toPublicJSON"
      ],
      "methodSignatures": [
        {
          "name": "_setLoadedRelationship",
          "params": [
            "fieldName: string",
            "value: any"
          ],
          "returns": "void"
        },
        {
          "name": "classifyConstraintError",
          "static": true,
          "params": [
            "message: string"
          ],
          "returns": "'unique' | 'not_null' | null"
        },
        {
          "name": "clearEmbeddings",
          "async": true,
          "returns": "Promise<void>"
        },
        {
          "name": "delete",
          "async": true,
          "returns": "Promise<void>"
        },
        {
          "name": "describe",
          "async": true,
          "params": [
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "destroy",
          "returns": "void"
        },
        {
          "name": "do",
          "async": true,
          "params": [
            "instructions: string",
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "executeToolCall",
          "async": true,
          "params": [
            "toolCall: ToolCall"
          ],
          "returns": "Promise<ToolCallResult>"
        },
        {
          "name": "forget",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "forgetScope",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise<number>"
        },
        {
          "name": "generateEmbeddings",
          "async": true,
          "params": [
            "options?: GenerateEmbeddingsOptions"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "getAiUsageSnapshot",
          "returns": "AiUsageSnapshot | undefined"
        },
        {
          "name": "getAvailableTools",
          "returns": "AITool[]"
        },
        {
          "name": "getBySlug",
          "async": true,
          "static": true,
          "params": [
            "_slug: string"
          ],
          "returns": "Promise<AssetType | null>"
        },
        {
          "name": "getEmbedding",
          "async": true,
          "params": [
            "fieldName: string",
            "model?: string"
          ],
          "returns": "Promise<number[] | null>"
        },
        {
          "name": "getFields",
          "async": true,
          "returns": "Promise<any>"
        },
        {
          "name": "getId",
          "async": true,
          "returns": "any"
        },
        {
          "name": "getRelated",
          "async": true,
          "params": [
            "fieldName: string",
            "opts?: LoadRelatedOptions"
          ],
          "returns": "Promise<any>"
        },
        {
          "name": "getSavedId",
          "async": true,
          "returns": "any"
        },
        {
          "name": "getSlug",
          "async": true,
          "returns": "any"
        },
        {
          "name": "hasStaleEmbeddings",
          "async": true,
          "returns": "Promise<boolean>"
        },
        {
          "name": "initialize",
          "async": true,
          "returns": "Promise"
        },
        {
          "name": "is",
          "async": true,
          "params": [
            "criteria: string",
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "isRelatedLoaded",
          "params": [
            "fieldName: string"
          ],
          "returns": "boolean"
        },
        {
          "name": "isSaved",
          "async": true,
          "returns": "any"
        },
        {
          "name": "listAiUsage",
          "async": true,
          "params": [
            "options?: AiUsageListOptions"
          ],
          "returns": "Promise<SmrtAiUsageRecord[]>"
        },
        {
          "name": "loadDataFromDb",
          "async": true,
          "params": [
            "data: Record<string>"
          ],
          "returns": "any"
        },
        {
          "name": "loadFromId",
          "async": true,
          "returns": "any"
        },
        {
          "name": "loadFromSlug",
          "async": true,
          "returns": "any"
        },
        {
          "name": "loadRelated",
          "async": true,
          "params": [
            "fieldName: string",
            "opts?: LoadRelatedOptions"
          ],
          "returns": "Promise<any>"
        },
        {
          "name": "loadRelatedMany",
          "async": true,
          "params": [
            "fieldName: string",
            "opts?: LoadRelatedOptions"
          ],
          "returns": "Promise<any[]>"
        },
        {
          "name": "markAsPersisted",
          "returns": "void"
        },
        {
          "name": "recall",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise"
        },
        {
          "name": "recallAll",
          "async": true,
          "params": [
            "options?: object"
          ],
          "returns": "Promise<Map<string>>"
        },
        {
          "name": "remember",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "requireInsertOnSave",
          "returns": "void"
        },
        {
          "name": "resetAiUsage",
          "returns": "void"
        },
        {
          "name": "save",
          "async": true,
          "returns": "any"
        },
        {
          "name": "summarizeAiUsage",
          "async": true,
          "params": [
            "options?: AiUsageSummaryOptions"
          ],
          "returns": "Promise<Record<string, AiUsageStats>>"
        },
        {
          "name": "toJSON",
          "returns": "any"
        },
        {
          "name": "toPlainObject",
          "returns": "Record<string>"
        },
        {
          "name": "toPublicJSON",
          "params": [
            "options?: PublicJsonOptions"
          ],
          "returns": "Record<string>"
        }
      ],
      "tableStrategy": "sti",
      "surfaces": [
        {
          "kind": "api",
          "name": "assettypes.list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:AssetType",
          "path": "/assettypes",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "assettypes.get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:AssetType",
          "path": "/assettypes/[id]",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "assettypes.create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:AssetType",
          "path": "/assettypes",
          "method": "POST"
        },
        {
          "kind": "api",
          "name": "assettypes.update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-assets:AssetType",
          "path": "/assettypes/[id]",
          "method": "PATCH"
        },
        {
          "kind": "api",
          "name": "assettypes.delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-assets:AssetType",
          "path": "/assettypes/[id]",
          "method": "DELETE"
        },
        {
          "kind": "cli",
          "name": "assettype_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:AssetType"
        },
        {
          "kind": "cli",
          "name": "assettype_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:AssetType"
        },
        {
          "kind": "cli",
          "name": "assettype_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:AssetType"
        },
        {
          "kind": "cli",
          "name": "assettype_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-assets:AssetType"
        },
        {
          "kind": "cli",
          "name": "assettype_delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-assets:AssetType"
        },
        {
          "kind": "mcp",
          "name": "assettype_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:AssetType"
        },
        {
          "kind": "mcp",
          "name": "assettype_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:AssetType"
        },
        {
          "kind": "mcp",
          "name": "assettype_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:AssetType"
        }
      ],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AssetTypeCollection",
      "qualifiedName": "@happyvertical/smrt-assets:AssetTypeCollection",
      "collection": "assettypes",
      "tableName": "asset_type_collections",
      "packageName": "@happyvertical/smrt-assets",
      "extends": "SmrtCollection",
      "fields": [],
      "relationships": [],
      "methods": [
        "getOrCreate",
        "initializeCommonTypes"
      ],
      "methodSignatures": [
        {
          "name": "getOrCreate",
          "async": true,
          "params": [
            "slug: string",
            "name?: string",
            "description?: string"
          ],
          "returns": "Promise<AssetType>"
        },
        {
          "name": "initializeCommonTypes",
          "async": true,
          "returns": "Promise<void>"
        }
      ],
      "surfaces": [],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "Asset",
      "qualifiedName": "@happyvertical/smrt-assets:Asset",
      "collection": "assets",
      "tableName": "assets",
      "packageName": "@happyvertical/smrt-assets",
      "extends": "SmrtObject",
      "fields": [
        {
          "name": "created_at",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "updated_at",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "tenantId",
          "type": "text",
          "required": false,
          "columnType": "UUID"
        },
        {
          "name": "name",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "sourceUri",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "mimeType",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "description",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "metadata",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "version",
          "type": "integer",
          "required": true,
          "columnType": "INTEGER",
          "default": 1
        },
        {
          "name": "primaryVersionId",
          "type": "foreignKey",
          "required": false,
          "related": "Asset",
          "columnType": "UUID"
        },
        {
          "name": "typeSlug",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "statusSlug",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "ownerProfileId",
          "type": "crossPackageRef",
          "required": false,
          "related": "@happyvertical/smrt-profiles:Profile",
          "columnType": "UUID"
        },
        {
          "name": "sourceAssetId",
          "type": "foreignKey",
          "required": false,
          "related": "Asset",
          "columnType": "UUID"
        },
        {
          "name": "folderId",
          "type": "foreignKey",
          "required": false,
          "related": "Folder",
          "columnType": "UUID"
        },
        {
          "name": "sourceType",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "externalId",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "externalRefs",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "createdAt",
          "type": "text",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "updatedAt",
          "type": "text",
          "required": false,
          "columnType": "TIMESTAMP"
        }
      ],
      "relationships": [
        {
          "name": "primaryVersionId",
          "type": "foreignKey",
          "required": false,
          "related": "Asset",
          "columnType": "UUID"
        },
        {
          "name": "ownerProfileId",
          "type": "crossPackageRef",
          "required": false,
          "related": "@happyvertical/smrt-profiles:Profile",
          "columnType": "UUID"
        },
        {
          "name": "sourceAssetId",
          "type": "foreignKey",
          "required": false,
          "related": "Asset",
          "columnType": "UUID"
        },
        {
          "name": "folderId",
          "type": "foreignKey",
          "required": false,
          "related": "Folder",
          "columnType": "UUID"
        }
      ],
      "methods": [
        "_setLoadedRelationship",
        "associateWith",
        "classifyConstraintError",
        "clearEmbeddings",
        "delete",
        "describe",
        "destroy",
        "do",
        "executeToolCall",
        "forget",
        "forgetScope",
        "generateEmbeddings",
        "getAiUsageSnapshot",
        "getAssociations",
        "getAvailableTools",
        "getBySlug",
        "getDerivatives",
        "getEmbedding",
        "getExternalRef",
        "getExternalRefs",
        "getFields",
        "getId",
        "getMetadata",
        "getRelated",
        "getSavedId",
        "getSlug",
        "getSource",
        "getStatus",
        "getTags",
        "getType",
        "hasStaleEmbeddings",
        "hasTag",
        "initialize",
        "is",
        "isRelatedLoaded",
        "isSaved",
        "listAiUsage",
        "loadDataFromDb",
        "loadFromId",
        "loadFromSlug",
        "loadRelated",
        "loadRelatedMany",
        "markAsPersisted",
        "mergeMetadata",
        "recall",
        "recallAll",
        "remember",
        "requireInsertOnSave",
        "resetAiUsage",
        "save",
        "setExternalRef",
        "setMetadata",
        "summarizeAiUsage",
        "toJSON",
        "toPlainObject",
        "toPublicJSON"
      ],
      "methodSignatures": [
        {
          "name": "_setLoadedRelationship",
          "params": [
            "fieldName: string",
            "value: any"
          ],
          "returns": "void"
        },
        {
          "name": "associateWith",
          "async": true,
          "params": [
            "metaType: string",
            "metaId: string",
            "role?: any"
          ],
          "returns": "Promise<AssetAssociation>"
        },
        {
          "name": "classifyConstraintError",
          "static": true,
          "params": [
            "message: string"
          ],
          "returns": "'unique' | 'not_null' | null"
        },
        {
          "name": "clearEmbeddings",
          "async": true,
          "returns": "Promise<void>"
        },
        {
          "name": "delete",
          "async": true,
          "returns": "Promise<void>"
        },
        {
          "name": "describe",
          "async": true,
          "params": [
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "destroy",
          "returns": "void"
        },
        {
          "name": "do",
          "async": true,
          "params": [
            "instructions: string",
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "executeToolCall",
          "async": true,
          "params": [
            "toolCall: ToolCall"
          ],
          "returns": "Promise<ToolCallResult>"
        },
        {
          "name": "forget",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "forgetScope",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise<number>"
        },
        {
          "name": "generateEmbeddings",
          "async": true,
          "params": [
            "options?: GenerateEmbeddingsOptions"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "getAiUsageSnapshot",
          "returns": "AiUsageSnapshot | undefined"
        },
        {
          "name": "getAssociations",
          "async": true,
          "returns": "Promise<AssetAssociation[]>"
        },
        {
          "name": "getAvailableTools",
          "returns": "AITool[]"
        },
        {
          "name": "getBySlug",
          "async": true,
          "static": true,
          "params": [
            "_slug: string"
          ],
          "returns": "Promise<Asset | null>"
        },
        {
          "name": "getDerivatives",
          "async": true,
          "returns": "Promise<Asset[]>"
        },
        {
          "name": "getEmbedding",
          "async": true,
          "params": [
            "fieldName: string",
            "model?: string"
          ],
          "returns": "Promise<number[] | null>"
        },
        {
          "name": "getExternalRef",
          "params": [
            "provider: string"
          ],
          "returns": "AssetExternalReference | null"
        },
        {
          "name": "getExternalRefs",
          "returns": "Record<string, AssetExternalReference>"
        },
        {
          "name": "getFields",
          "async": true,
          "returns": "Promise<any>"
        },
        {
          "name": "getId",
          "async": true,
          "returns": "any"
        },
        {
          "name": "getMetadata",
          "returns": "Record<string>"
        },
        {
          "name": "getRelated",
          "async": true,
          "params": [
            "fieldName: string",
            "opts?: LoadRelatedOptions"
          ],
          "returns": "Promise<any>"
        },
        {
          "name": "getSavedId",
          "async": true,
          "returns": "any"
        },
        {
          "name": "getSlug",
          "async": true,
          "returns": "any"
        },
        {
          "name": "getSource",
          "async": true,
          "returns": "Promise<Asset | null>"
        },
        {
          "name": "getStatus",
          "async": true,
          "returns": "Promise<AssetStatus | null>"
        },
        {
          "name": "getTags",
          "async": true,
          "returns": "Promise<Tag[]>"
        },
        {
          "name": "getType",
          "async": true,
          "returns": "Promise<AssetType | null>"
        },
        {
          "name": "hasStaleEmbeddings",
          "async": true,
          "returns": "Promise<boolean>"
        },
        {
          "name": "hasTag",
          "async": true,
          "params": [
            "tagSlug: string"
          ],
          "returns": "Promise<boolean>"
        },
        {
          "name": "initialize",
          "async": true,
          "returns": "Promise"
        },
        {
          "name": "is",
          "async": true,
          "params": [
            "criteria: string",
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "isRelatedLoaded",
          "params": [
            "fieldName: string"
          ],
          "returns": "boolean"
        },
        {
          "name": "isSaved",
          "async": true,
          "returns": "any"
        },
        {
          "name": "listAiUsage",
          "async": true,
          "params": [
            "options?: AiUsageListOptions"
          ],
          "returns": "Promise<SmrtAiUsageRecord[]>"
        },
        {
          "name": "loadDataFromDb",
          "async": true,
          "params": [
            "data: Record<string>"
          ],
          "returns": "any"
        },
        {
          "name": "loadFromId",
          "async": true,
          "returns": "any"
        },
        {
          "name": "loadFromSlug",
          "async": true,
          "returns": "any"
        },
        {
          "name": "loadRelated",
          "async": true,
          "params": [
            "fieldName: string",
            "opts?: LoadRelatedOptions"
          ],
          "returns": "Promise<any>"
        },
        {
          "name": "loadRelatedMany",
          "async": true,
          "params": [
            "fieldName: string",
            "opts?: LoadRelatedOptions"
          ],
          "returns": "Promise<any[]>"
        },
        {
          "name": "markAsPersisted",
          "returns": "void"
        },
        {
          "name": "mergeMetadata",
          "params": [
            "metadata: Record<string>"
          ],
          "returns": "void"
        },
        {
          "name": "recall",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise"
        },
        {
          "name": "recallAll",
          "async": true,
          "params": [
            "options?: object"
          ],
          "returns": "Promise<Map<string>>"
        },
        {
          "name": "remember",
          "async": true,
          "params": [
            "options: object"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "requireInsertOnSave",
          "returns": "void"
        },
        {
          "name": "resetAiUsage",
          "returns": "void"
        },
        {
          "name": "save",
          "async": true,
          "returns": "any"
        },
        {
          "name": "setExternalRef",
          "params": [
            "provider: string",
            "reference: any"
          ],
          "returns": "void"
        },
        {
          "name": "setMetadata",
          "params": [
            "metadata: Record<string>"
          ],
          "returns": "void"
        },
        {
          "name": "summarizeAiUsage",
          "async": true,
          "params": [
            "options?: AiUsageSummaryOptions"
          ],
          "returns": "Promise<Record<string, AiUsageStats>>"
        },
        {
          "name": "toJSON",
          "returns": "any"
        },
        {
          "name": "toPlainObject",
          "returns": "Record<string>"
        },
        {
          "name": "toPublicJSON",
          "params": [
            "options?: PublicJsonOptions"
          ],
          "returns": "Record<string>"
        }
      ],
      "tenant": {
        "scoped": true,
        "mode": "optional",
        "field": "tenantId"
      },
      "tableStrategy": "sti",
      "conflictColumns": [
        "tenant_id",
        "slug",
        "context",
        "_meta_type"
      ],
      "surfaces": [
        {
          "kind": "api",
          "name": "assets.list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:Asset",
          "path": "/assets",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "assets.get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:Asset",
          "path": "/assets/[id]",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "assets.create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:Asset",
          "path": "/assets",
          "method": "POST"
        },
        {
          "kind": "api",
          "name": "assets.update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-assets:Asset",
          "path": "/assets/[id]",
          "method": "PATCH"
        },
        {
          "kind": "api",
          "name": "assets.delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-assets:Asset",
          "path": "/assets/[id]",
          "method": "DELETE"
        },
        {
          "kind": "cli",
          "name": "asset_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:Asset"
        },
        {
          "kind": "cli",
          "name": "asset_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:Asset"
        },
        {
          "kind": "cli",
          "name": "asset_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:Asset"
        },
        {
          "kind": "cli",
          "name": "asset_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-assets:Asset"
        },
        {
          "kind": "cli",
          "name": "asset_delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-assets:Asset"
        },
        {
          "kind": "mcp",
          "name": "asset_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:Asset"
        },
        {
          "kind": "mcp",
          "name": "asset_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:Asset"
        },
        {
          "kind": "mcp",
          "name": "asset_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:Asset"
        },
        {
          "kind": "mcp",
          "name": "asset_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-assets:Asset"
        }
      ],
      "relationshipFeatures": [
        "crossPackageRef",
        "foreignKey",
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AssetCollection",
      "qualifiedName": "@happyvertical/smrt-assets:AssetCollection",
      "collection": "assets",
      "tableName": "asset_collections",
      "packageName": "@happyvertical/smrt-assets",
      "extends": "SmrtCollection",
      "fields": [],
      "relationships": [],
      "methods": [
        "addTag",
        "createNewVersion",
        "findByTenant",
        "findGlobal",
        "findWithGlobals",
        "getByFolder",
        "getByMimeType",
        "getByOwner",
        "getByStatus",
        "getByTag",
        "getByType",
        "getDerivatives",
        "getLatestVersion",
        "listVersions",
        "removeTag",
        "rollbackToVersion"
      ],
      "methodSignatures": [
        {
          "name": "addTag",
          "async": true,
          "params": [
            "assetId: string",
            "tagSlug: string"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "createNewVersion",
          "async": true,
          "params": [
            "primaryVersionId: string",
            "newSourceUri: string",
            "updates?: Partial<Asset>"
          ],
          "returns": "Promise<Asset>"
        },
        {
          "name": "findByTenant",
          "async": true,
          "params": [
            "tenantId: string"
          ],
          "returns": "Promise<Asset[]>"
        },
        {
          "name": "findGlobal",
          "async": true,
          "returns": "Promise<Asset[]>"
        },
        {
          "name": "findWithGlobals",
          "async": true,
          "params": [
            "tenantId: string"
          ],
          "returns": "Promise<Asset[]>"
        },
        {
          "name": "getByFolder",
          "async": true,
          "params": [
            "folderId: string"
          ],
          "returns": "Promise<Asset[]>"
        },
        {
          "name": "getByMimeType",
          "async": true,
          "params": [
            "mimePattern: string"
          ],
          "returns": "Promise<Asset[]>"
        },
        {
          "name": "getByOwner",
          "async": true,
          "params": [
            "ownerProfileId: string"
          ],
          "returns": "Promise<Asset[]>"
        },
        {
          "name": "getByStatus",
          "async": true,
          "params": [
            "statusSlug: string"
          ],
          "returns": "Promise<Asset[]>"
        },
        {
          "name": "getByTag",
          "async": true,
          "params": [
            "tagSlug: string"
          ],
          "returns": "Promise<Asset[]>"
        },
        {
          "name": "getByType",
          "async": true,
          "params": [
            "typeSlug: string"
          ],
          "returns": "Promise<Asset[]>"
        },
        {
          "name": "getDerivatives",
          "async": true,
          "params": [
            "sourceAssetId: string"
          ],
          "returns": "Promise<Asset[]>"
        },
        {
          "name": "getLatestVersion",
          "async": true,
          "params": [
            "primaryVersionId: string"
          ],
          "returns": "Promise<Asset | null>"
        },
        {
          "name": "listVersions",
          "async": true,
          "params": [
            "primaryVersionId: string"
          ],
          "returns": "Promise<Asset[]>"
        },
        {
          "name": "removeTag",
          "async": true,
          "params": [
            "assetId: string",
            "tagSlug: string"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "rollbackToVersion",
          "async": true,
          "params": [
            "primaryVersionId: string",
            "targetVersion: number"
          ],
          "returns": "Promise<Asset>"
        }
      ],
      "surfaces": [],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "Folder",
      "qualifiedName": "@happyvertical/smrt-assets:Folder",
      "collection": "folders",
      "tableName": "folders",
      "packageName": "@happyvertical/smrt-assets",
      "extends": "SmrtHierarchical",
      "fields": [
        {
          "name": "parentId",
          "type": "foreignKey",
          "required": false,
          "related": "Folder",
          "columnType": "UUID"
        },
        {
          "name": "tenantId",
          "type": "text",
          "required": false,
          "columnType": "UUID"
        },
        {
          "name": "name",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "description",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "ownerProfileId",
          "type": "crossPackageRef",
          "required": false,
          "related": "@happyvertical/smrt-profiles:Profile",
          "columnType": "UUID"
        },
        {
          "name": "createdAt",
          "type": "text",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "updatedAt",
          "type": "text",
          "required": false,
          "columnType": "TIMESTAMP"
        }
      ],
      "relationships": [
        {
          "name": "parentId",
          "type": "foreignKey",
          "required": false,
          "related": "Folder",
          "columnType": "UUID"
        },
        {
          "name": "ownerProfileId",
          "type": "crossPackageRef",
          "required": false,
          "related": "@happyvertical/smrt-profiles:Profile",
          "columnType": "UUID"
        }
      ],
      "methods": [
        "getAncestors",
        "getBySlug",
        "getChildren",
        "getDescendants",
        "getHierarchy",
        "getParent",
        "moveTo"
      ],
      "methodSignatures": [
        {
          "name": "getAncestors",
          "async": true,
          "returns": "Promise"
        },
        {
          "name": "getBySlug",
          "async": true,
          "static": true,
          "params": [
            "_slug: string"
          ],
          "returns": "Promise<Folder | null>"
        },
        {
          "name": "getChildren",
          "async": true,
          "returns": "Promise"
        },
        {
          "name": "getDescendants",
          "async": true,
          "returns": "Promise"
        },
        {
          "name": "getHierarchy",
          "async": true,
          "returns": "Promise<HierarchyView>"
        },
        {
          "name": "getParent",
          "async": true,
          "returns": "Promise<null>"
        },
        {
          "name": "moveTo",
          "async": true,
          "params": [
            "newParent: string | null"
          ],
          "returns": "Promise<void>"
        }
      ],
      "tenant": {
        "scoped": true,
        "mode": "optional",
        "field": "tenantId"
      },
      "conflictColumns": [
        "tenant_id",
        "slug",
        "context"
      ],
      "surfaces": [
        {
          "kind": "api",
          "name": "folders.list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:Folder",
          "path": "/folders",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "folders.get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:Folder",
          "path": "/folders/[id]",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "folders.create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:Folder",
          "path": "/folders",
          "method": "POST"
        },
        {
          "kind": "api",
          "name": "folders.update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-assets:Folder",
          "path": "/folders/[id]",
          "method": "PATCH"
        },
        {
          "kind": "api",
          "name": "folders.delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-assets:Folder",
          "path": "/folders/[id]",
          "method": "DELETE"
        },
        {
          "kind": "cli",
          "name": "folder_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:Folder"
        },
        {
          "kind": "cli",
          "name": "folder_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:Folder"
        },
        {
          "kind": "cli",
          "name": "folder_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:Folder"
        },
        {
          "kind": "cli",
          "name": "folder_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-assets:Folder"
        },
        {
          "kind": "cli",
          "name": "folder_delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-assets:Folder"
        },
        {
          "kind": "mcp",
          "name": "folder_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-assets:Folder"
        },
        {
          "kind": "mcp",
          "name": "folder_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-assets:Folder"
        },
        {
          "kind": "mcp",
          "name": "folder_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-assets:Folder"
        },
        {
          "kind": "mcp",
          "name": "folder_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-assets:Folder"
        }
      ],
      "relationshipFeatures": [
        "SmrtHierarchical",
        "crossPackageRef",
        "foreignKey",
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "FolderCollection",
      "qualifiedName": "@happyvertical/smrt-assets:FolderCollection",
      "collection": "folders",
      "tableName": "folder_collections",
      "packageName": "@happyvertical/smrt-assets",
      "extends": "SmrtCollection",
      "fields": [],
      "relationships": [],
      "methods": [
        "getContents",
        "getPath",
        "getTree",
        "moveAsset"
      ],
      "methodSignatures": [
        {
          "name": "getContents",
          "async": true,
          "params": [
            "folderId: string",
            "assetCollection: AssetCollection"
          ],
          "returns": "Promise<Asset[]>"
        },
        {
          "name": "getPath",
          "async": true,
          "params": [
            "folderId: string"
          ],
          "returns": "Promise<Folder[]>"
        },
        {
          "name": "getTree",
          "async": true,
          "params": [
            "rootId?: string"
          ],
          "returns": "Promise<Folder[]>"
        },
        {
          "name": "moveAsset",
          "async": true,
          "params": [
            "asset: Asset",
            "folderId: string | null"
          ],
          "returns": "Promise<void>"
        }
      ],
      "surfaces": [],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    }
  ],
  "surfaces": [
    {
      "kind": "api",
      "name": "assetassociations.list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:AssetAssociation",
      "path": "/assetassociations",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "assetassociations.get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:AssetAssociation",
      "path": "/assetassociations/[id]",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "assetassociations.create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:AssetAssociation",
      "path": "/assetassociations",
      "method": "POST"
    },
    {
      "kind": "api",
      "name": "assetassociations.delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-assets:AssetAssociation",
      "path": "/assetassociations/[id]",
      "method": "DELETE"
    },
    {
      "kind": "cli",
      "name": "assetassociation_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:AssetAssociation"
    },
    {
      "kind": "cli",
      "name": "assetassociation_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:AssetAssociation"
    },
    {
      "kind": "cli",
      "name": "assetassociation_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:AssetAssociation"
    },
    {
      "kind": "cli",
      "name": "assetassociation_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-assets:AssetAssociation"
    },
    {
      "kind": "cli",
      "name": "assetassociation_delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-assets:AssetAssociation"
    },
    {
      "kind": "mcp",
      "name": "assetassociation_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:AssetAssociation"
    },
    {
      "kind": "mcp",
      "name": "assetassociation_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:AssetAssociation"
    },
    {
      "kind": "mcp",
      "name": "assetassociation_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:AssetAssociation"
    },
    {
      "kind": "api",
      "name": "assetmetafields.list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:AssetMetafield",
      "path": "/assetmetafields",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "assetmetafields.get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:AssetMetafield",
      "path": "/assetmetafields/[id]",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "assetmetafields.create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:AssetMetafield",
      "path": "/assetmetafields",
      "method": "POST"
    },
    {
      "kind": "api",
      "name": "assetmetafields.update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-assets:AssetMetafield",
      "path": "/assetmetafields/[id]",
      "method": "PATCH"
    },
    {
      "kind": "api",
      "name": "assetmetafields.delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-assets:AssetMetafield",
      "path": "/assetmetafields/[id]",
      "method": "DELETE"
    },
    {
      "kind": "cli",
      "name": "assetmetafield_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:AssetMetafield"
    },
    {
      "kind": "cli",
      "name": "assetmetafield_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:AssetMetafield"
    },
    {
      "kind": "cli",
      "name": "assetmetafield_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:AssetMetafield"
    },
    {
      "kind": "cli",
      "name": "assetmetafield_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-assets:AssetMetafield"
    },
    {
      "kind": "cli",
      "name": "assetmetafield_delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-assets:AssetMetafield"
    },
    {
      "kind": "mcp",
      "name": "assetmetafield_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:AssetMetafield"
    },
    {
      "kind": "mcp",
      "name": "assetmetafield_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:AssetMetafield"
    },
    {
      "kind": "mcp",
      "name": "assetmetafield_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:AssetMetafield"
    },
    {
      "kind": "api",
      "name": "assetstatuses.list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:AssetStatus",
      "path": "/assetstatuses",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "assetstatuses.get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:AssetStatus",
      "path": "/assetstatuses/[id]",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "assetstatuses.create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:AssetStatus",
      "path": "/assetstatuses",
      "method": "POST"
    },
    {
      "kind": "api",
      "name": "assetstatuses.update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-assets:AssetStatus",
      "path": "/assetstatuses/[id]",
      "method": "PATCH"
    },
    {
      "kind": "api",
      "name": "assetstatuses.delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-assets:AssetStatus",
      "path": "/assetstatuses/[id]",
      "method": "DELETE"
    },
    {
      "kind": "cli",
      "name": "assetstatus_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:AssetStatus"
    },
    {
      "kind": "cli",
      "name": "assetstatus_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:AssetStatus"
    },
    {
      "kind": "cli",
      "name": "assetstatus_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:AssetStatus"
    },
    {
      "kind": "cli",
      "name": "assetstatus_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-assets:AssetStatus"
    },
    {
      "kind": "cli",
      "name": "assetstatus_delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-assets:AssetStatus"
    },
    {
      "kind": "mcp",
      "name": "assetstatus_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:AssetStatus"
    },
    {
      "kind": "mcp",
      "name": "assetstatus_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:AssetStatus"
    },
    {
      "kind": "mcp",
      "name": "assetstatus_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:AssetStatus"
    },
    {
      "kind": "api",
      "name": "assettypes.list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:AssetType",
      "path": "/assettypes",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "assettypes.get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:AssetType",
      "path": "/assettypes/[id]",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "assettypes.create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:AssetType",
      "path": "/assettypes",
      "method": "POST"
    },
    {
      "kind": "api",
      "name": "assettypes.update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-assets:AssetType",
      "path": "/assettypes/[id]",
      "method": "PATCH"
    },
    {
      "kind": "api",
      "name": "assettypes.delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-assets:AssetType",
      "path": "/assettypes/[id]",
      "method": "DELETE"
    },
    {
      "kind": "cli",
      "name": "assettype_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:AssetType"
    },
    {
      "kind": "cli",
      "name": "assettype_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:AssetType"
    },
    {
      "kind": "cli",
      "name": "assettype_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:AssetType"
    },
    {
      "kind": "cli",
      "name": "assettype_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-assets:AssetType"
    },
    {
      "kind": "cli",
      "name": "assettype_delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-assets:AssetType"
    },
    {
      "kind": "mcp",
      "name": "assettype_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:AssetType"
    },
    {
      "kind": "mcp",
      "name": "assettype_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:AssetType"
    },
    {
      "kind": "mcp",
      "name": "assettype_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:AssetType"
    },
    {
      "kind": "api",
      "name": "assets.list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:Asset",
      "path": "/assets",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "assets.get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:Asset",
      "path": "/assets/[id]",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "assets.create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:Asset",
      "path": "/assets",
      "method": "POST"
    },
    {
      "kind": "api",
      "name": "assets.update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-assets:Asset",
      "path": "/assets/[id]",
      "method": "PATCH"
    },
    {
      "kind": "api",
      "name": "assets.delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-assets:Asset",
      "path": "/assets/[id]",
      "method": "DELETE"
    },
    {
      "kind": "cli",
      "name": "asset_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:Asset"
    },
    {
      "kind": "cli",
      "name": "asset_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:Asset"
    },
    {
      "kind": "cli",
      "name": "asset_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:Asset"
    },
    {
      "kind": "cli",
      "name": "asset_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-assets:Asset"
    },
    {
      "kind": "cli",
      "name": "asset_delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-assets:Asset"
    },
    {
      "kind": "mcp",
      "name": "asset_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:Asset"
    },
    {
      "kind": "mcp",
      "name": "asset_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:Asset"
    },
    {
      "kind": "mcp",
      "name": "asset_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:Asset"
    },
    {
      "kind": "mcp",
      "name": "asset_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-assets:Asset"
    },
    {
      "kind": "api",
      "name": "folders.list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:Folder",
      "path": "/folders",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "folders.get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:Folder",
      "path": "/folders/[id]",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "folders.create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:Folder",
      "path": "/folders",
      "method": "POST"
    },
    {
      "kind": "api",
      "name": "folders.update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-assets:Folder",
      "path": "/folders/[id]",
      "method": "PATCH"
    },
    {
      "kind": "api",
      "name": "folders.delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-assets:Folder",
      "path": "/folders/[id]",
      "method": "DELETE"
    },
    {
      "kind": "cli",
      "name": "folder_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:Folder"
    },
    {
      "kind": "cli",
      "name": "folder_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:Folder"
    },
    {
      "kind": "cli",
      "name": "folder_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:Folder"
    },
    {
      "kind": "cli",
      "name": "folder_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-assets:Folder"
    },
    {
      "kind": "cli",
      "name": "folder_delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-assets:Folder"
    },
    {
      "kind": "mcp",
      "name": "folder_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-assets:Folder"
    },
    {
      "kind": "mcp",
      "name": "folder_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-assets:Folder"
    },
    {
      "kind": "mcp",
      "name": "folder_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-assets:Folder"
    },
    {
      "kind": "mcp",
      "name": "folder_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-assets:Folder"
    }
  ],
  "prompts": [],
  "relationshipsV2": {
    "foreignKeyFields": 5,
    "crossPackageRefFields": 2,
    "junctionCollections": 1,
    "hierarchicalObjects": 1,
    "polymorphicAssociations": 1,
    "uuidColumns": 22
  },
  "agentDoc": "# @happyvertical/smrt-assets\n\nProvider-agnostic asset management with versioning, type classification, and generic/provenance associations.\n\n## Models\n\n- **Asset** (STI base): versioning via `primaryVersionId` chain + `version` number. `ownerProfileId`, `typeSlug`, `statusSlug`, `mimeType`, `sourceUri`. Derivation chain via `sourceAssetId` (R3-D — was `parentId` before the rename; column `source_asset_id`).\n- **AssetType** / **AssetStatus**: lookup tables for classification and lifecycle.\n- **AssetMetafield**: custom metadata field definitions with JSON validation rules.\n- **Folder**: hierarchical container for assets. Own `SmrtHierarchical` model with its own `folders` table (R3-D — was an STI subclass of Asset before). `Asset.folderId` points to the folder.\n- **AssetAssociation**: generic/provenance polymorphic join — `assetId` + `metaType` + `metaId` + `role` + `sortOrder`. Use it when a relationship is not owned by a base/domain model join table like `content_assets`, `profile_assets`, `event_assets`, `place_assets`, or `product_assets`.\n\n## Key Patterns\n\n- **Versioning**: `createNewVersion()` increments version, chains via `primaryVersionId`. `findVersions()` to retrieve history.\n- **Tag integration**: `addTag()`/`removeTag()` use raw `db.upsert()` on `asset_tags` join table (not a SMRT model).\n- **AssetStore**: abstraction for provider-agnostic file I/O (S3, local, etc.).\n- **Ownership rule**: base/domain-owned asset relationships should live on noun join tables such as `content_assets`, `profile_assets`, `event_assets`, `place_assets`, and `product_assets`; keep `AssetAssociation` for generic/provenance links like image derivation.\n\n## Runtime surface\n\nApps and agents should depend on the public **asset runtime** rather than hand-wiring a collection + store per-package (#1128).\n\n- `createAssetRuntime({ db, storage })` → `AssetRuntime` bundling `AssetCollection`, `AssetAssociationCollection`, and an initialized `AssetStore`.\n- `AssetRuntime.storeSourceAsset(name, data, opts)` — create a new source asset (record + bytes).\n- `AssetRuntime.storeDerivedAsset(source, name, data, opts)` — create a derivative with `sourceAssetId` set and (by default) a provenance `AssetAssociation` under a chosen role.\n- `AssetRuntime.linkDerivation(source, derivative, { role })` — record provenance without touching bytes.\n- `AssetRuntime.setExtractionStatus(asset, status, { error?, extractedAt? })` — write canonical extraction metadata into the asset's description JSON sidecar. Non-destructive: if `description` is free-form prose or non-object JSON, the original value is preserved under the reserved `text` key instead of being overwritten. Existing JSON objects are merged into.\n\nAgents that need asset I/O should accept an `AssetRuntimeLike` in their options rather than asking callers to pass a store + collection separately.\n\n## Serving contract\n\n- `serveAsset({ runtime, asset, tenantId?, disposition?, canAccess?, headers?, remoteMode? })` → standard Web `Response`.\n  - `404` when the id doesn't resolve; `403` when the tenant mismatches or `canAccess` denies; `302` when `remoteMode: 'redirect'` and the asset's `sourceUri` is `http(s)`; `502` when `remoteMode: 'proxy'` and the origin fetch fails; `500` on store read errors or unexpected failures; `200` otherwise with `Content-Type`, `Content-Length`, and `Content-Disposition` set.\n  - Assets whose `sourceUri` is `http(s)` are supported via `remoteMode`: `'proxy'` (default, fetch and return bytes), `'redirect'` (302 to the origin), or `'error'` (treat as misconfiguration). Pass `fetchImpl` to swap the fetch client.\n  - `Content-Disposition` filenames are sanitised (control characters stripped, `\"` / `\\` / `/` replaced) to prevent header injection on untrusted asset names.\n  - The 500 body is a generic `'Internal error serving asset'`; the underlying error is logged via `console.error` so operators can debug without leaking paths/bucket names to clients.\n  - Works in SvelteKit `+server.ts` endpoints, Hono, and any runtime with a global `Response` (Node 18+). Pass `responseCtor` for older runtimes.\n- `resolveAssetForServing(options)` → `{ asset, data, contentType, filename, size }` when callers want to render their own framework response. Throws `AssetServeError(status)` on the same failure modes.\n\n## Source/derived vocabulary\n\nThe following roles are exported as `ASSET_ROLES` and should be preferred over ad-hoc strings when apps want cross-package tooling (serving, UI pickers) to agree on meaning:\n\n| Role | Use |\n|------|-----|\n| `source_document` | original upstream document (agenda PDF, minutes) |\n| `document_image` | page/extracted image derived from a source document |\n| `thumbnail` | preview rendition of another asset |\n| `proof` | non-canonical evidence asset backing a fact |\n| `derivation_source` | \"came from\" link on generated media |\n| `attachment` | generic owner-join link |\n| `hero` | primary/featured asset on an owner |\n\nCanonical metadata keys are exported as `ASSET_METADATA_KEYS`: `extractionStatus`, `extractionError`, `extractedAt`, `sourceUrl`, `sourceHash`, `pageNumber`. Extraction status values live in `ASSET_EXTRACTION_STATUS` (`pending | running | succeeded | failed`).\n\n## UI Registry\n\nThe `./ui` subpath exports `ASSETS_MODULE_META` and `ASSETS_UI_SLOTS` so registry-driven hosts (smrt-chat, dynamic admin shells) can discover the package's Svelte components without a hard import.\n\n```ts\nimport { ASSETS_MODULE_META, ASSETS_UI_SLOTS } from '@happyvertical/smrt-assets/ui';\nimport '@happyvertical/smrt-assets/svelte'; // side-effect: ModuleUIRegistry.register(...)\nimport { ModuleUIRegistry } from '@happyvertical/smrt-ui/registry';\n\nconst AssetManager = ModuleUIRegistry.get('@happyvertical/smrt-assets', 'asset-manager');\n```\n\nRegistered slots: `asset-manager` (admin), `asset-grid` / `asset-list` (list), `asset-detail` (detail), `asset-toolbar` / `asset-action-bar` (action), `asset-create-modal` (form). Slot IDs are stable contracts — host apps reference them by string.\n\n## Gotchas\n\n- **Files SDK is a lazy boundary (#1979)**: `AssetStore` loads `@happyvertical/files` through `src/files-runtime.ts` (bundler-invisible), because smrt-assets is reachable from provider-neutral consumer graphs via profiles. Node/tsx/vite-dev runtimes resolve it on first file operation; fully-bundled deployments import `@happyvertical/smrt-assets/filesystem` at startup. Never import the files SDK statically from modules reachable from `src/index.ts`.\n- **Version history manual**: `findVersions()` chaining required — no ORM shortcut\n- **Tag management uses raw SQL**: `asset_tags` is a join table, not an SMRT model\n- **Folder tree traversal**: via `SmrtHierarchical` (`getParent`/`getChildren`/`getAncestors`/`getDescendants`/`getHierarchy`/`moveTo`); `FolderCollection.getTree(rootId?)` and `getPath(folderId)` wrap these for convenience\n- **AssetAssociation polymorphic FK**: requires manual `metaType` string matching\n- **Optional tenancy**: assets can be global (tenantId=null) or tenant-scoped\n"
}