{
  "schemaVersion": 1,
  "sensitiveFieldsExcluded": true,
  "generatedAt": "1970-01-01T00:00:00.000Z",
  "packageName": "@happyvertical/smrt-ads",
  "packageVersion": "0.43.2",
  "sourceManifestPath": "dist/manifest.json",
  "agentDocPath": "AGENTS.md",
  "sourceHashes": {
    "manifest": "206b23db63e58efd9e8389bf699270570a2b199ca707758669e4e63e3225ae84",
    "packageJson": "fdffbb52c201cdaafbcef239fd5dcc12f87b1ddbde3178d1022f1a82e3eb267b",
    "agents": "38d00ca384af711a76359907e4d9806733168d7b4b31f7610cd0c418fc72d566"
  },
  "exports": [
    ".",
    "./manifest",
    "./manifest.json"
  ],
  "dependencies": {
    "@happyvertical/smrt-core": "workspace:*",
    "@happyvertical/smrt-tenancy": "workspace:*",
    "@happyvertical/smrt-commerce": "workspace:*",
    "@happyvertical/smrt-vitest": "workspace:*",
    "@happyvertical/sql": "catalog:",
    "@types/node": "24.13.2",
    "fast-glob": "3.3.3",
    "typescript": "5.9.3",
    "vite": "8.1.4",
    "vitest": "4.1.10"
  },
  "smrtDependencies": [
    "@happyvertical/smrt-commerce",
    "@happyvertical/smrt-core",
    "@happyvertical/smrt-tenancy",
    "@happyvertical/smrt-vitest"
  ],
  "sdkDependencies": [
    "@happyvertical/sql"
  ],
  "tags": [],
  "risks": [],
  "objects": [
    {
      "name": "AdDeliveryTierCollection",
      "qualifiedName": "@happyvertical/smrt-ads:AdDeliveryTierCollection",
      "collection": "addeliverytiers",
      "tableName": "ad_delivery_tier_collections",
      "packageName": "@happyvertical/smrt-ads",
      "extends": "SmrtCollection",
      "fields": [],
      "relationships": [],
      "methods": [
        "findByPricingModel",
        "findByPriority",
        "findCPM",
        "findFixedPricing",
        "findPerformanceBased",
        "getHighestPriority"
      ],
      "methodSignatures": [
        {
          "name": "findByPricingModel",
          "async": true,
          "params": [
            "pricingModel: PricingModel"
          ],
          "returns": "Promise<AdDeliveryTier[]>"
        },
        {
          "name": "findByPriority",
          "async": true,
          "returns": "Promise<AdDeliveryTier[]>"
        },
        {
          "name": "findCPM",
          "async": true,
          "returns": "Promise<AdDeliveryTier[]>"
        },
        {
          "name": "findFixedPricing",
          "async": true,
          "returns": "Promise<AdDeliveryTier[]>"
        },
        {
          "name": "findPerformanceBased",
          "async": true,
          "returns": "Promise<AdDeliveryTier[]>"
        },
        {
          "name": "getHighestPriority",
          "async": true,
          "returns": "Promise<AdDeliveryTier | null>"
        }
      ],
      "surfaces": [],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AdEventCollection",
      "qualifiedName": "@happyvertical/smrt-ads:AdEventCollection",
      "collection": "adevents",
      "tableName": "ad_event_collections",
      "packageName": "@happyvertical/smrt-ads",
      "extends": "SmrtCollection",
      "fields": [],
      "relationships": [],
      "methods": [
        "countByType",
        "countClicks",
        "countConversions",
        "countImpressions",
        "findByDateRange",
        "findBySite",
        "findByTenant",
        "findByType",
        "findByVariation",
        "findByZone",
        "findClicks",
        "findConversions",
        "findGlobal",
        "findImpressions",
        "findWithGlobals",
        "getVariationStats"
      ],
      "methodSignatures": [
        {
          "name": "countByType",
          "async": true,
          "params": [
            "variationId: string",
            "eventType: AdEventType"
          ],
          "returns": "Promise<number>"
        },
        {
          "name": "countClicks",
          "async": true,
          "params": [
            "variationId: string"
          ],
          "returns": "Promise<number>"
        },
        {
          "name": "countConversions",
          "async": true,
          "params": [
            "variationId: string"
          ],
          "returns": "Promise<number>"
        },
        {
          "name": "countImpressions",
          "async": true,
          "params": [
            "variationId: string"
          ],
          "returns": "Promise<number>"
        },
        {
          "name": "findByDateRange",
          "async": true,
          "params": [
            "start: Date",
            "end: Date"
          ],
          "returns": "Promise<AdEvent[]>"
        },
        {
          "name": "findBySite",
          "async": true,
          "params": [
            "siteId: string"
          ],
          "returns": "Promise<AdEvent[]>"
        },
        {
          "name": "findByTenant",
          "async": true,
          "params": [
            "tenantId: string"
          ],
          "returns": "Promise<AdEvent[]>"
        },
        {
          "name": "findByType",
          "async": true,
          "params": [
            "eventType: AdEventType"
          ],
          "returns": "Promise<AdEvent[]>"
        },
        {
          "name": "findByVariation",
          "async": true,
          "params": [
            "variationId: string"
          ],
          "returns": "Promise<AdEvent[]>"
        },
        {
          "name": "findByZone",
          "async": true,
          "params": [
            "zoneId: string"
          ],
          "returns": "Promise<AdEvent[]>"
        },
        {
          "name": "findClicks",
          "async": true,
          "returns": "Promise<AdEvent[]>"
        },
        {
          "name": "findConversions",
          "async": true,
          "returns": "Promise<AdEvent[]>"
        },
        {
          "name": "findGlobal",
          "async": true,
          "returns": "Promise<AdEvent[]>"
        },
        {
          "name": "findImpressions",
          "async": true,
          "returns": "Promise<AdEvent[]>"
        },
        {
          "name": "findWithGlobals",
          "async": true,
          "params": [
            "tenantId: string"
          ],
          "returns": "Promise<AdEvent[]>"
        },
        {
          "name": "getVariationStats",
          "async": true,
          "params": [
            "variationId: string"
          ],
          "returns": "Promise<object>"
        }
      ],
      "surfaces": [],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AdFormatCollection",
      "qualifiedName": "@happyvertical/smrt-ads:AdFormatCollection",
      "collection": "adformats",
      "tableName": "ad_format_collections",
      "packageName": "@happyvertical/smrt-ads",
      "extends": "SmrtCollection",
      "fields": [],
      "relationships": [],
      "methods": [
        "findBanners",
        "findByDimensions",
        "findByType",
        "findNative",
        "findVideo"
      ],
      "methodSignatures": [
        {
          "name": "findBanners",
          "async": true,
          "returns": "Promise<AdFormat[]>"
        },
        {
          "name": "findByDimensions",
          "async": true,
          "params": [
            "width: number",
            "height: number"
          ],
          "returns": "Promise<AdFormat | null>"
        },
        {
          "name": "findByType",
          "async": true,
          "params": [
            "formatType: AdFormatType"
          ],
          "returns": "Promise<AdFormat[]>"
        },
        {
          "name": "findNative",
          "async": true,
          "returns": "Promise<AdFormat[]>"
        },
        {
          "name": "findVideo",
          "async": true,
          "returns": "Promise<AdFormat[]>"
        }
      ],
      "surfaces": [],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AdGroupCollection",
      "qualifiedName": "@happyvertical/smrt-ads:AdGroupCollection",
      "collection": "adgroups",
      "tableName": "ad_group_collections",
      "packageName": "@happyvertical/smrt-ads",
      "extends": "SmrtCollection",
      "fields": [],
      "relationships": [],
      "methods": [
        "findActive",
        "findByContract",
        "findByStatus",
        "findByTenant",
        "findByTier",
        "findByVertical",
        "findByZone",
        "findCompleted",
        "findDrafts",
        "findEligibleForZone",
        "findGlobal",
        "findPaused",
        "findWithGlobals"
      ],
      "methodSignatures": [
        {
          "name": "findActive",
          "async": true,
          "returns": "Promise<AdGroup[]>"
        },
        {
          "name": "findByContract",
          "async": true,
          "params": [
            "contractId: string"
          ],
          "returns": "Promise<AdGroup[]>"
        },
        {
          "name": "findByStatus",
          "async": true,
          "params": [
            "status: AdGroupStatus"
          ],
          "returns": "Promise<AdGroup[]>"
        },
        {
          "name": "findByTenant",
          "async": true,
          "params": [
            "tenantId: string"
          ],
          "returns": "Promise<AdGroup[]>"
        },
        {
          "name": "findByTier",
          "async": true,
          "params": [
            "tierId: string"
          ],
          "returns": "Promise<AdGroup[]>"
        },
        {
          "name": "findByVertical",
          "async": true,
          "params": [
            "verticalSlug: string"
          ],
          "returns": "Promise<AdGroup[]>"
        },
        {
          "name": "findByZone",
          "async": true,
          "params": [
            "zoneId: string"
          ],
          "returns": "Promise<AdGroup[]>"
        },
        {
          "name": "findCompleted",
          "async": true,
          "returns": "Promise<AdGroup[]>"
        },
        {
          "name": "findDrafts",
          "async": true,
          "returns": "Promise<AdGroup[]>"
        },
        {
          "name": "findEligibleForZone",
          "async": true,
          "params": [
            "zoneId: string"
          ],
          "returns": "Promise<AdGroup[]>"
        },
        {
          "name": "findGlobal",
          "async": true,
          "returns": "Promise<AdGroup[]>"
        },
        {
          "name": "findPaused",
          "async": true,
          "returns": "Promise<AdGroup[]>"
        },
        {
          "name": "findWithGlobals",
          "async": true,
          "params": [
            "tenantId: string"
          ],
          "returns": "Promise<AdGroup[]>"
        }
      ],
      "surfaces": [],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AdVariationCollection",
      "qualifiedName": "@happyvertical/smrt-ads:AdVariationCollection",
      "collection": "advariations",
      "tableName": "ad_variation_collections",
      "packageName": "@happyvertical/smrt-ads",
      "extends": "SmrtCollection",
      "fields": [],
      "relationships": [],
      "methods": [
        "findActive",
        "findActiveByGroup",
        "findByFormat",
        "findByGroup",
        "findByStatus",
        "findByTenant",
        "findDrafts",
        "findGlobal",
        "findPaused",
        "findTopPerformers",
        "findWithGlobals",
        "selectByWeight"
      ],
      "methodSignatures": [
        {
          "name": "findActive",
          "async": true,
          "returns": "Promise<AdVariation[]>"
        },
        {
          "name": "findActiveByGroup",
          "async": true,
          "params": [
            "groupId: string"
          ],
          "returns": "Promise<AdVariation[]>"
        },
        {
          "name": "findByFormat",
          "async": true,
          "params": [
            "formatId: string"
          ],
          "returns": "Promise<AdVariation[]>"
        },
        {
          "name": "findByGroup",
          "async": true,
          "params": [
            "groupId: string"
          ],
          "returns": "Promise<AdVariation[]>"
        },
        {
          "name": "findByStatus",
          "async": true,
          "params": [
            "status: AdVariationStatus"
          ],
          "returns": "Promise<AdVariation[]>"
        },
        {
          "name": "findByTenant",
          "async": true,
          "params": [
            "tenantId: string"
          ],
          "returns": "Promise<AdVariation[]>"
        },
        {
          "name": "findDrafts",
          "async": true,
          "returns": "Promise<AdVariation[]>"
        },
        {
          "name": "findGlobal",
          "async": true,
          "returns": "Promise<AdVariation[]>"
        },
        {
          "name": "findPaused",
          "async": true,
          "returns": "Promise<AdVariation[]>"
        },
        {
          "name": "findTopPerformers",
          "async": true,
          "params": [
            "limit?: number"
          ],
          "returns": "Promise<AdVariation[]>"
        },
        {
          "name": "findWithGlobals",
          "async": true,
          "params": [
            "tenantId: string"
          ],
          "returns": "Promise<AdVariation[]>"
        },
        {
          "name": "selectByWeight",
          "async": true,
          "params": [
            "groupId: string"
          ],
          "returns": "Promise<AdVariation | null>"
        }
      ],
      "surfaces": [],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AdDeliveryTier",
      "qualifiedName": "@happyvertical/smrt-ads:AdDeliveryTier",
      "collection": "addeliverytiers",
      "tableName": "ad_delivery_tiers",
      "packageName": "@happyvertical/smrt-ads",
      "extends": "SmrtObject",
      "fields": [
        {
          "name": "name",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "priority",
          "type": "integer",
          "required": false,
          "columnType": "INTEGER",
          "default": 0
        },
        {
          "name": "pricingModel",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "description",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        }
      ],
      "relationships": [],
      "methods": [
        "isFixedPricing",
        "isHigherPriorityThan",
        "isPerformanceBased"
      ],
      "methodSignatures": [
        {
          "name": "isFixedPricing",
          "returns": "boolean"
        },
        {
          "name": "isHigherPriorityThan",
          "params": [
            "other: AdDeliveryTier"
          ],
          "returns": "boolean"
        },
        {
          "name": "isPerformanceBased",
          "returns": "boolean"
        }
      ],
      "surfaces": [
        {
          "kind": "api",
          "name": "addeliverytiers.list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
          "path": "/addeliverytiers",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "addeliverytiers.get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
          "path": "/addeliverytiers/[id]",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "addeliverytiers.create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
          "path": "/addeliverytiers",
          "method": "POST"
        },
        {
          "kind": "api",
          "name": "addeliverytiers.update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
          "path": "/addeliverytiers/[id]",
          "method": "PATCH"
        },
        {
          "kind": "cli",
          "name": "addeliverytier_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
        },
        {
          "kind": "cli",
          "name": "addeliverytier_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
        },
        {
          "kind": "cli",
          "name": "addeliverytier_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
        },
        {
          "kind": "cli",
          "name": "addeliverytier_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
        },
        {
          "kind": "cli",
          "name": "addeliverytier_delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
        },
        {
          "kind": "mcp",
          "name": "addeliverytier_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
        },
        {
          "kind": "mcp",
          "name": "addeliverytier_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
        }
      ],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AdEvent",
      "qualifiedName": "@happyvertical/smrt-ads:AdEvent",
      "collection": "adevents",
      "tableName": "ad_events",
      "packageName": "@happyvertical/smrt-ads",
      "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": "variationId",
          "type": "foreignKey",
          "required": false,
          "related": "AdVariation",
          "columnType": "UUID"
        },
        {
          "name": "zoneId",
          "type": "crossPackageRef",
          "required": false,
          "related": "@happyvertical/smrt-properties:Zone",
          "columnType": "UUID"
        },
        {
          "name": "siteId",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "eventType",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "timestamp",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "metadata",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        }
      ],
      "relationships": [
        {
          "name": "variationId",
          "type": "foreignKey",
          "required": false,
          "related": "AdVariation",
          "columnType": "UUID"
        },
        {
          "name": "zoneId",
          "type": "crossPackageRef",
          "required": false,
          "related": "@happyvertical/smrt-properties:Zone",
          "columnType": "UUID"
        }
      ],
      "methods": [
        "_setLoadedRelationship",
        "classifyConstraintError",
        "clearEmbeddings",
        "delete",
        "describe",
        "destroy",
        "do",
        "executeToolCall",
        "forget",
        "forgetScope",
        "generateEmbeddings",
        "getAiUsageSnapshot",
        "getAvailableTools",
        "getEmbedding",
        "getFields",
        "getId",
        "getMetadata",
        "getRelated",
        "getSavedId",
        "getSlug",
        "hasStaleEmbeddings",
        "initialize",
        "is",
        "isClick",
        "isConversion",
        "isImpression",
        "isRelatedLoaded",
        "isSaved",
        "listAiUsage",
        "loadDataFromDb",
        "loadFromId",
        "loadFromSlug",
        "loadRelated",
        "loadRelatedMany",
        "markAsPersisted",
        "recall",
        "recallAll",
        "remember",
        "requireInsertOnSave",
        "resetAiUsage",
        "save",
        "setMetadata",
        "summarizeAiUsage",
        "toJSON",
        "toPlainObject",
        "toPublicJSON",
        "withDatabase"
      ],
      "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": "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": "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": "hasStaleEmbeddings",
          "async": true,
          "returns": "Promise<boolean>"
        },
        {
          "name": "initialize",
          "async": true,
          "returns": "Promise"
        },
        {
          "name": "is",
          "async": true,
          "params": [
            "criteria: string",
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "isClick",
          "returns": "boolean"
        },
        {
          "name": "isConversion",
          "returns": "boolean"
        },
        {
          "name": "isImpression",
          "returns": "boolean"
        },
        {
          "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": "setMetadata",
          "params": [
            "data: 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>"
        },
        {
          "name": "withDatabase",
          "async": true,
          "params": [
            "db: DatabaseInterface",
            "operation: Function"
          ],
          "returns": "Promise<T>"
        }
      ],
      "tenant": {
        "scoped": true,
        "mode": "optional",
        "field": "tenantId"
      },
      "tableStrategy": "sti",
      "conflictColumns": [
        "tenant_id",
        "slug",
        "context",
        "_meta_type"
      ],
      "surfaces": [
        {
          "kind": "api",
          "name": "adevents.create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-ads:AdEvent",
          "path": "/adevents",
          "method": "POST"
        },
        {
          "kind": "api",
          "name": "adevents.list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-ads:AdEvent",
          "path": "/adevents",
          "method": "GET"
        },
        {
          "kind": "mcp",
          "name": "adevent_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-ads:AdEvent"
        }
      ],
      "relationshipFeatures": [
        "crossPackageRef",
        "foreignKey",
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AdFormat",
      "qualifiedName": "@happyvertical/smrt-ads:AdFormat",
      "collection": "adformats",
      "tableName": "ad_formats",
      "packageName": "@happyvertical/smrt-ads",
      "extends": "SmrtObject",
      "fields": [
        {
          "name": "name",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "width",
          "type": "integer",
          "required": false,
          "columnType": "INTEGER",
          "default": 0
        },
        {
          "name": "height",
          "type": "integer",
          "required": false,
          "columnType": "INTEGER",
          "default": 0
        },
        {
          "name": "formatType",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "description",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        }
      ],
      "relationships": [],
      "methods": [
        "getDimensions",
        "matchesDimensions"
      ],
      "methodSignatures": [
        {
          "name": "getDimensions",
          "returns": "string"
        },
        {
          "name": "matchesDimensions",
          "params": [
            "width: number",
            "height: number"
          ],
          "returns": "boolean"
        }
      ],
      "surfaces": [
        {
          "kind": "api",
          "name": "adformats.list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-ads:AdFormat",
          "path": "/adformats",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "adformats.get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-ads:AdFormat",
          "path": "/adformats/[id]",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "adformats.create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-ads:AdFormat",
          "path": "/adformats",
          "method": "POST"
        },
        {
          "kind": "api",
          "name": "adformats.update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-ads:AdFormat",
          "path": "/adformats/[id]",
          "method": "PATCH"
        },
        {
          "kind": "cli",
          "name": "adformat_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-ads:AdFormat"
        },
        {
          "kind": "cli",
          "name": "adformat_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-ads:AdFormat"
        },
        {
          "kind": "cli",
          "name": "adformat_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-ads:AdFormat"
        },
        {
          "kind": "cli",
          "name": "adformat_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-ads:AdFormat"
        },
        {
          "kind": "cli",
          "name": "adformat_delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-ads:AdFormat"
        },
        {
          "kind": "mcp",
          "name": "adformat_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-ads:AdFormat"
        },
        {
          "kind": "mcp",
          "name": "adformat_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-ads:AdFormat"
        }
      ],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AdGroup",
      "qualifiedName": "@happyvertical/smrt-ads:AdGroup",
      "collection": "adgroups",
      "tableName": "ad_groups",
      "packageName": "@happyvertical/smrt-ads",
      "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": "contractId",
          "type": "crossPackageRef",
          "required": false,
          "related": "@happyvertical/smrt-commerce:Contract",
          "columnType": "UUID"
        },
        {
          "name": "tierId",
          "type": "foreignKey",
          "required": false,
          "related": "AdDeliveryTier",
          "columnType": "UUID"
        },
        {
          "name": "name",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "verticalSlug",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "targeting",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "zoneIds",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "startDate",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "endDate",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "dailyBudget",
          "type": "decimal",
          "required": false,
          "columnType": "REAL",
          "default": 0
        },
        {
          "name": "totalBudget",
          "type": "decimal",
          "required": false,
          "columnType": "REAL",
          "default": 0
        },
        {
          "name": "status",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        }
      ],
      "relationships": [
        {
          "name": "contractId",
          "type": "crossPackageRef",
          "required": false,
          "related": "@happyvertical/smrt-commerce:Contract",
          "columnType": "UUID"
        },
        {
          "name": "tierId",
          "type": "foreignKey",
          "required": false,
          "related": "AdDeliveryTier",
          "columnType": "UUID"
        }
      ],
      "methods": [
        "_setLoadedRelationship",
        "addZoneId",
        "classifyConstraintError",
        "clearEmbeddings",
        "delete",
        "describe",
        "destroy",
        "do",
        "executeToolCall",
        "forget",
        "forgetScope",
        "generateEmbeddings",
        "getAiUsageSnapshot",
        "getAvailableTools",
        "getEmbedding",
        "getFields",
        "getId",
        "getRelated",
        "getSavedId",
        "getSlug",
        "getTargeting",
        "getZoneIds",
        "hasEnded",
        "hasStaleEmbeddings",
        "hasStarted",
        "hasZoneId",
        "initialize",
        "is",
        "isActive",
        "isCompleted",
        "isDraft",
        "isPaused",
        "isRelatedLoaded",
        "isSaved",
        "listAiUsage",
        "loadDataFromDb",
        "loadFromId",
        "loadFromSlug",
        "loadRelated",
        "loadRelatedMany",
        "markAsPersisted",
        "recall",
        "recallAll",
        "remember",
        "removeZoneId",
        "requireInsertOnSave",
        "resetAiUsage",
        "save",
        "setTargeting",
        "setZoneIds",
        "summarizeAiUsage",
        "toJSON",
        "toPlainObject",
        "toPublicJSON",
        "withDatabase"
      ],
      "methodSignatures": [
        {
          "name": "_setLoadedRelationship",
          "params": [
            "fieldName: string",
            "value: any"
          ],
          "returns": "void"
        },
        {
          "name": "addZoneId",
          "params": [
            "zoneId: string"
          ],
          "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": "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": "getTargeting",
          "returns": "Record<string>"
        },
        {
          "name": "getZoneIds",
          "returns": "string[]"
        },
        {
          "name": "hasEnded",
          "returns": "boolean"
        },
        {
          "name": "hasStaleEmbeddings",
          "async": true,
          "returns": "Promise<boolean>"
        },
        {
          "name": "hasStarted",
          "returns": "boolean"
        },
        {
          "name": "hasZoneId",
          "params": [
            "zoneId: string"
          ],
          "returns": "boolean"
        },
        {
          "name": "initialize",
          "async": true,
          "returns": "Promise"
        },
        {
          "name": "is",
          "async": true,
          "params": [
            "criteria: string",
            "options?: AiOperationOptions"
          ],
          "returns": "any"
        },
        {
          "name": "isActive",
          "returns": "boolean"
        },
        {
          "name": "isCompleted",
          "returns": "boolean"
        },
        {
          "name": "isDraft",
          "returns": "boolean"
        },
        {
          "name": "isPaused",
          "returns": "boolean"
        },
        {
          "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": "removeZoneId",
          "params": [
            "zoneId: string"
          ],
          "returns": "void"
        },
        {
          "name": "requireInsertOnSave",
          "returns": "void"
        },
        {
          "name": "resetAiUsage",
          "returns": "void"
        },
        {
          "name": "save",
          "async": true,
          "returns": "any"
        },
        {
          "name": "setTargeting",
          "params": [
            "rules: Record<string>"
          ],
          "returns": "void"
        },
        {
          "name": "setZoneIds",
          "params": [
            "ids: 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>"
        },
        {
          "name": "withDatabase",
          "async": true,
          "params": [
            "db: DatabaseInterface",
            "operation: Function"
          ],
          "returns": "Promise<T>"
        }
      ],
      "tenant": {
        "scoped": true,
        "mode": "optional",
        "field": "tenantId"
      },
      "tableStrategy": "sti",
      "conflictColumns": [
        "tenant_id",
        "slug",
        "context",
        "_meta_type"
      ],
      "surfaces": [
        {
          "kind": "api",
          "name": "adgroups.list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-ads:AdGroup",
          "path": "/adgroups",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "adgroups.get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-ads:AdGroup",
          "path": "/adgroups/[id]",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "adgroups.create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-ads:AdGroup",
          "path": "/adgroups",
          "method": "POST"
        },
        {
          "kind": "api",
          "name": "adgroups.update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-ads:AdGroup",
          "path": "/adgroups/[id]",
          "method": "PATCH"
        },
        {
          "kind": "cli",
          "name": "adgroup_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-ads:AdGroup"
        },
        {
          "kind": "cli",
          "name": "adgroup_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-ads:AdGroup"
        },
        {
          "kind": "cli",
          "name": "adgroup_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-ads:AdGroup"
        },
        {
          "kind": "cli",
          "name": "adgroup_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-ads:AdGroup"
        },
        {
          "kind": "cli",
          "name": "adgroup_delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-ads:AdGroup"
        },
        {
          "kind": "mcp",
          "name": "adgroup_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-ads:AdGroup"
        },
        {
          "kind": "mcp",
          "name": "adgroup_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-ads:AdGroup"
        },
        {
          "kind": "mcp",
          "name": "adgroup_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-ads:AdGroup"
        }
      ],
      "relationshipFeatures": [
        "crossPackageRef",
        "foreignKey",
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "AdVariation",
      "qualifiedName": "@happyvertical/smrt-ads:AdVariation",
      "collection": "advariations",
      "tableName": "ad_variations",
      "packageName": "@happyvertical/smrt-ads",
      "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": "groupId",
          "type": "foreignKey",
          "required": false,
          "related": "AdGroup",
          "columnType": "UUID"
        },
        {
          "name": "formatId",
          "type": "foreignKey",
          "required": false,
          "related": "AdFormat",
          "columnType": "UUID"
        },
        {
          "name": "assetId",
          "type": "crossPackageRef",
          "required": false,
          "related": "@happyvertical/smrt-assets:Asset",
          "columnType": "UUID"
        },
        {
          "name": "name",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "clickUrl",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "altText",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "weight",
          "type": "integer",
          "required": false,
          "columnType": "INTEGER",
          "default": 1
        },
        {
          "name": "status",
          "type": "text",
          "required": false,
          "columnType": "TEXT"
        },
        {
          "name": "impressions",
          "type": "integer",
          "required": false,
          "columnType": "INTEGER",
          "default": 0
        },
        {
          "name": "clicks",
          "type": "integer",
          "required": false,
          "columnType": "INTEGER",
          "default": 0
        }
      ],
      "relationships": [
        {
          "name": "groupId",
          "type": "foreignKey",
          "required": false,
          "related": "AdGroup",
          "columnType": "UUID"
        },
        {
          "name": "formatId",
          "type": "foreignKey",
          "required": false,
          "related": "AdFormat",
          "columnType": "UUID"
        },
        {
          "name": "assetId",
          "type": "crossPackageRef",
          "required": false,
          "related": "@happyvertical/smrt-assets:Asset",
          "columnType": "UUID"
        }
      ],
      "methods": [
        "_setLoadedRelationship",
        "classifyConstraintError",
        "clearEmbeddings",
        "delete",
        "describe",
        "destroy",
        "do",
        "executeToolCall",
        "forget",
        "forgetScope",
        "generateEmbeddings",
        "getAiUsageSnapshot",
        "getAvailableTools",
        "getCTR",
        "getEmbedding",
        "getFields",
        "getId",
        "getRelated",
        "getSavedId",
        "getSlug",
        "hasStaleEmbeddings",
        "initialize",
        "is",
        "isActive",
        "isDraft",
        "isPaused",
        "isRelatedLoaded",
        "isSaved",
        "listAiUsage",
        "loadDataFromDb",
        "loadFromId",
        "loadFromSlug",
        "loadRelated",
        "loadRelatedMany",
        "markAsPersisted",
        "recall",
        "recallAll",
        "recordClick",
        "recordImpression",
        "remember",
        "requireInsertOnSave",
        "resetAiUsage",
        "save",
        "summarizeAiUsage",
        "toJSON",
        "toPlainObject",
        "toPublicJSON",
        "withDatabase"
      ],
      "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": "getCTR",
          "returns": "number"
        },
        {
          "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": "isActive",
          "returns": "boolean"
        },
        {
          "name": "isDraft",
          "returns": "boolean"
        },
        {
          "name": "isPaused",
          "returns": "boolean"
        },
        {
          "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": "recordClick",
          "returns": "void"
        },
        {
          "name": "recordImpression",
          "returns": "void"
        },
        {
          "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>"
        },
        {
          "name": "withDatabase",
          "async": true,
          "params": [
            "db: DatabaseInterface",
            "operation: Function"
          ],
          "returns": "Promise<T>"
        }
      ],
      "tenant": {
        "scoped": true,
        "mode": "optional",
        "field": "tenantId"
      },
      "tableStrategy": "sti",
      "conflictColumns": [
        "tenant_id",
        "slug",
        "context",
        "_meta_type"
      ],
      "surfaces": [
        {
          "kind": "api",
          "name": "advariations.list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-ads:AdVariation",
          "path": "/advariations",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "advariations.get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-ads:AdVariation",
          "path": "/advariations/[id]",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "advariations.create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-ads:AdVariation",
          "path": "/advariations",
          "method": "POST"
        },
        {
          "kind": "api",
          "name": "advariations.update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-ads:AdVariation",
          "path": "/advariations/[id]",
          "method": "PATCH"
        },
        {
          "kind": "cli",
          "name": "advariation_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-ads:AdVariation"
        },
        {
          "kind": "cli",
          "name": "advariation_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-ads:AdVariation"
        },
        {
          "kind": "cli",
          "name": "advariation_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-ads:AdVariation"
        },
        {
          "kind": "cli",
          "name": "advariation_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-ads:AdVariation"
        },
        {
          "kind": "cli",
          "name": "advariation_delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-ads:AdVariation"
        },
        {
          "kind": "mcp",
          "name": "advariation_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-ads:AdVariation"
        },
        {
          "kind": "mcp",
          "name": "advariation_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-ads:AdVariation"
        },
        {
          "kind": "mcp",
          "name": "advariation_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-ads:AdVariation"
        }
      ],
      "relationshipFeatures": [
        "crossPackageRef",
        "foreignKey",
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    }
  ],
  "surfaces": [
    {
      "kind": "api",
      "name": "addeliverytiers.list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
      "path": "/addeliverytiers",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "addeliverytiers.get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
      "path": "/addeliverytiers/[id]",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "addeliverytiers.create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
      "path": "/addeliverytiers",
      "method": "POST"
    },
    {
      "kind": "api",
      "name": "addeliverytiers.update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
      "path": "/addeliverytiers/[id]",
      "method": "PATCH"
    },
    {
      "kind": "cli",
      "name": "addeliverytier_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
    },
    {
      "kind": "cli",
      "name": "addeliverytier_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
    },
    {
      "kind": "cli",
      "name": "addeliverytier_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
    },
    {
      "kind": "cli",
      "name": "addeliverytier_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
    },
    {
      "kind": "cli",
      "name": "addeliverytier_delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
    },
    {
      "kind": "mcp",
      "name": "addeliverytier_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
    },
    {
      "kind": "mcp",
      "name": "addeliverytier_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
    },
    {
      "kind": "api",
      "name": "adevents.create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-ads:AdEvent",
      "path": "/adevents",
      "method": "POST"
    },
    {
      "kind": "api",
      "name": "adevents.list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-ads:AdEvent",
      "path": "/adevents",
      "method": "GET"
    },
    {
      "kind": "mcp",
      "name": "adevent_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-ads:AdEvent"
    },
    {
      "kind": "api",
      "name": "adformats.list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-ads:AdFormat",
      "path": "/adformats",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "adformats.get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-ads:AdFormat",
      "path": "/adformats/[id]",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "adformats.create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-ads:AdFormat",
      "path": "/adformats",
      "method": "POST"
    },
    {
      "kind": "api",
      "name": "adformats.update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-ads:AdFormat",
      "path": "/adformats/[id]",
      "method": "PATCH"
    },
    {
      "kind": "cli",
      "name": "adformat_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-ads:AdFormat"
    },
    {
      "kind": "cli",
      "name": "adformat_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-ads:AdFormat"
    },
    {
      "kind": "cli",
      "name": "adformat_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-ads:AdFormat"
    },
    {
      "kind": "cli",
      "name": "adformat_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-ads:AdFormat"
    },
    {
      "kind": "cli",
      "name": "adformat_delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-ads:AdFormat"
    },
    {
      "kind": "mcp",
      "name": "adformat_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-ads:AdFormat"
    },
    {
      "kind": "mcp",
      "name": "adformat_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-ads:AdFormat"
    },
    {
      "kind": "api",
      "name": "adgroups.list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-ads:AdGroup",
      "path": "/adgroups",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "adgroups.get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-ads:AdGroup",
      "path": "/adgroups/[id]",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "adgroups.create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-ads:AdGroup",
      "path": "/adgroups",
      "method": "POST"
    },
    {
      "kind": "api",
      "name": "adgroups.update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-ads:AdGroup",
      "path": "/adgroups/[id]",
      "method": "PATCH"
    },
    {
      "kind": "cli",
      "name": "adgroup_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-ads:AdGroup"
    },
    {
      "kind": "cli",
      "name": "adgroup_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-ads:AdGroup"
    },
    {
      "kind": "cli",
      "name": "adgroup_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-ads:AdGroup"
    },
    {
      "kind": "cli",
      "name": "adgroup_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-ads:AdGroup"
    },
    {
      "kind": "cli",
      "name": "adgroup_delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-ads:AdGroup"
    },
    {
      "kind": "mcp",
      "name": "adgroup_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-ads:AdGroup"
    },
    {
      "kind": "mcp",
      "name": "adgroup_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-ads:AdGroup"
    },
    {
      "kind": "mcp",
      "name": "adgroup_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-ads:AdGroup"
    },
    {
      "kind": "api",
      "name": "advariations.list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-ads:AdVariation",
      "path": "/advariations",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "advariations.get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-ads:AdVariation",
      "path": "/advariations/[id]",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "advariations.create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-ads:AdVariation",
      "path": "/advariations",
      "method": "POST"
    },
    {
      "kind": "api",
      "name": "advariations.update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-ads:AdVariation",
      "path": "/advariations/[id]",
      "method": "PATCH"
    },
    {
      "kind": "cli",
      "name": "advariation_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-ads:AdVariation"
    },
    {
      "kind": "cli",
      "name": "advariation_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-ads:AdVariation"
    },
    {
      "kind": "cli",
      "name": "advariation_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-ads:AdVariation"
    },
    {
      "kind": "cli",
      "name": "advariation_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-ads:AdVariation"
    },
    {
      "kind": "cli",
      "name": "advariation_delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-ads:AdVariation"
    },
    {
      "kind": "mcp",
      "name": "advariation_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-ads:AdVariation"
    },
    {
      "kind": "mcp",
      "name": "advariation_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-ads:AdVariation"
    },
    {
      "kind": "mcp",
      "name": "advariation_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-ads:AdVariation"
    }
  ],
  "prompts": [],
  "relationshipsV2": {
    "foreignKeyFields": 4,
    "crossPackageRefFields": 3,
    "junctionCollections": 0,
    "hierarchicalObjects": 0,
    "polymorphicAssociations": 0,
    "uuidColumns": 20
  },
  "agentDoc": "# @happyvertical/smrt-ads\n\nAd delivery with priority waterfall, weighted A/B testing, and immutable event tracking.\n\n## Models\n\n- **AdFormat**: IAB standard dimensions (width, height, type: banner/native/video)\n- **AdDeliveryTier**: priority levels — Sponsorship (1, FIXED pricing) > Standard (2, CPM) > House (3, fallback)\n- **AdGroup**: campaign with targeting, budget, zone restrictions\n- **AdVariation** (STI): creative variant with weighted selection for A/B. `weight=2` is 2x more likely than `weight=1`. Denormalized `impressions`/`clicks` fields.\n- **AdEvent** (STI, immutable): impression/click/conversion tracking. **Create-only** — no update/delete in API/MCP. `cli: false` (high-volume).\n\n## Cross-Package References (all plain string IDs)\n\n`contractId` → smrt-commerce, `zoneId`/`siteId` → smrt-properties, `assetId` → smrt-assets, `verticalSlug` → smrt-tags\n\n## Tenancy\n\nOptional tenancy via `@TenantScoped({ mode: 'optional' })` is applied to the\nthree transactional models — `AdGroup`, `AdVariation`, and `AdEvent` — which\nparticipate in per-tenant ad serving and event tracking.\n\n`AdFormat` and `AdDeliveryTier` are deliberately **NOT** tenant-scoped: they\nare shared catalog/lookup tables.\n\n- `AdFormat` rows describe IAB standard ad dimensions (e.g. `728x90`\n  Leaderboard, `300x250` Medium Rectangle). The dimensions are an industry\n  standard, not a tenant-specific configuration.\n- `AdDeliveryTier` rows describe the priority waterfall for ad selection\n  (Sponsorship → Standard → House). Tiers are part of the package's\n  ad-serving contract; per-tenant tier definitions would fragment the\n  selection algorithm without a clear use case.\n\nEither model can still be filtered by tenant manually if a deployment ever\nneeds tenant-specific overrides, but the default is global. This mirrors the\ndocumented exception pattern in `packages/secrets/AGENTS.md` (`TenantKey`).\nEach `@smrt(...)` block on these two classes carries an inline comment\npointing back here.\n\n## Gotchas\n\n- **Priority waterfall**: lower priority number = higher priority in selection\n- **Weight is relative integer**: not percentage — probability calculated from total weight across variations\n- **Denormalized counts need async refresh**: impressions/clicks on AdVariation are eventually consistent\n- **No frequency capping or budget enforcement built-in**: external responsibility\n- **Targeting rules stored as JSON string**: no schema validation\n- **Optional tenancy** on `AdGroup`, `AdVariation`, `AdEvent` only — see Tenancy section above for `AdFormat`/`AdDeliveryTier` rationale\n"
}