{
  "schemaVersion": 1,
  "sensitiveFieldsExcluded": true,
  "generatedAt": "1970-01-01T00:00:00.000Z",
  "packageName": "@happyvertical/smrt-tags",
  "packageVersion": "0.43.3",
  "sourceManifestPath": "dist/manifest.json",
  "agentDocPath": "AGENTS.md",
  "sourceHashes": {
    "manifest": "dbe74d3e5e15582819183cc05ec38ca5f945a3aae5a900af71b2f4679d08829d",
    "packageJson": "eb10f456354b02ad838d9134578ffac889d6f1df8a7b0c8f3dcdd2ada39c63e1",
    "agents": "900516b49407d5a521c2f0f2bdb2d4ab0c97e620808115718779f7ecf3ace222"
  },
  "exports": [
    ".",
    "./manifest",
    "./manifest.json",
    "./utils"
  ],
  "dependencies": {
    "@happyvertical/ai": "catalog:",
    "@happyvertical/files": "catalog:",
    "@happyvertical/logger": "catalog:",
    "@happyvertical/smrt-core": "workspace:*",
    "@happyvertical/smrt-tenancy": "workspace:*",
    "@happyvertical/sql": "catalog:",
    "@happyvertical/utils": "catalog:",
    "@types/node": "24.13.2",
    "typescript": "5.9.3",
    "vite": "8.1.4",
    "vitest": "4.1.10"
  },
  "smrtDependencies": [
    "@happyvertical/smrt-core",
    "@happyvertical/smrt-tenancy"
  ],
  "sdkDependencies": [
    "@happyvertical/ai",
    "@happyvertical/files",
    "@happyvertical/logger",
    "@happyvertical/sql",
    "@happyvertical/utils"
  ],
  "tags": [],
  "risks": [],
  "objects": [
    {
      "name": "TagAlias",
      "qualifiedName": "@happyvertical/smrt-tags:TagAlias",
      "collection": "tagaliases",
      "tableName": "tag_aliases",
      "packageName": "@happyvertical/smrt-tags",
      "extends": "SmrtObject",
      "fields": [
        {
          "name": "created_at",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "updated_at",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "tagSlug",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "alias",
          "type": "text",
          "required": true,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "language",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "tenantId",
          "type": "text",
          "required": false,
          "columnType": "UUID"
        },
        {
          "name": "createdAt",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        }
      ],
      "relationships": [],
      "methods": [
        "_setLoadedRelationship",
        "classifyConstraintError",
        "clearEmbeddings",
        "delete",
        "describe",
        "destroy",
        "do",
        "executeToolCall",
        "forget",
        "forgetScope",
        "generateEmbeddings",
        "getAiUsageSnapshot",
        "getAliasesForTag",
        "getAvailableTools",
        "getEmbedding",
        "getFields",
        "getId",
        "getRelated",
        "getSavedId",
        "getSlug",
        "getTag",
        "hasStaleEmbeddings",
        "initialize",
        "is",
        "isRelatedLoaded",
        "isSaved",
        "listAiUsage",
        "loadDataFromDb",
        "loadFromId",
        "loadFromSlug",
        "loadRelated",
        "loadRelatedMany",
        "markAsPersisted",
        "recall",
        "recallAll",
        "remember",
        "requireInsertOnSave",
        "resetAiUsage",
        "save",
        "searchByAlias",
        "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": "getAliasesForTag",
          "async": true,
          "static": true,
          "params": [
            "_tagSlug: string"
          ],
          "returns": "Promise<TagAlias[]>"
        },
        {
          "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": "getTag",
          "async": true,
          "returns": "Promise<Tag | null>"
        },
        {
          "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": "searchByAlias",
          "async": true,
          "static": true,
          "params": [
            "_alias: string",
            "_language?: string"
          ],
          "returns": "Promise<Tag[]>"
        },
        {
          "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": "tagaliases.list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-tags:TagAlias",
          "path": "/tagaliases",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "tagaliases.get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-tags:TagAlias",
          "path": "/tagaliases/[id]",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "tagaliases.create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-tags:TagAlias",
          "path": "/tagaliases",
          "method": "POST"
        },
        {
          "kind": "api",
          "name": "tagaliases.update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-tags:TagAlias",
          "path": "/tagaliases/[id]",
          "method": "PATCH"
        },
        {
          "kind": "api",
          "name": "tagaliases.delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-tags:TagAlias",
          "path": "/tagaliases/[id]",
          "method": "DELETE"
        },
        {
          "kind": "cli",
          "name": "tagalias_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-tags:TagAlias"
        },
        {
          "kind": "cli",
          "name": "tagalias_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-tags:TagAlias"
        },
        {
          "kind": "cli",
          "name": "tagalias_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-tags:TagAlias"
        },
        {
          "kind": "cli",
          "name": "tagalias_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-tags:TagAlias"
        },
        {
          "kind": "cli",
          "name": "tagalias_delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-tags:TagAlias"
        },
        {
          "kind": "mcp",
          "name": "tagalias_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-tags:TagAlias"
        },
        {
          "kind": "mcp",
          "name": "tagalias_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-tags:TagAlias"
        },
        {
          "kind": "mcp",
          "name": "tagalias_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-tags:TagAlias"
        }
      ],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "TagAliasCollection",
      "qualifiedName": "@happyvertical/smrt-tags:TagAliasCollection",
      "collection": "tagaliases",
      "tableName": "tag_alias_collections",
      "packageName": "@happyvertical/smrt-tags",
      "extends": "SmrtCollection",
      "fields": [],
      "relationships": [],
      "methods": [
        "addAlias",
        "bulkAddAliases",
        "findByTenant",
        "findGlobal",
        "findMatchingAliases",
        "findWithGlobals",
        "getAliasesByLanguage",
        "getAliasesForTag",
        "removeAlias",
        "searchByAlias"
      ],
      "methodSignatures": [
        {
          "name": "addAlias",
          "async": true,
          "params": [
            "tagSlug: string",
            "alias: string",
            "language?: string",
            "context?: string"
          ],
          "returns": "Promise<TagAlias>"
        },
        {
          "name": "bulkAddAliases",
          "async": true,
          "params": [
            "tagSlug: string",
            "aliases: Array<object>"
          ],
          "returns": "Promise<TagAlias[]>"
        },
        {
          "name": "findByTenant",
          "async": true,
          "params": [
            "tenantId: string"
          ],
          "returns": "Promise<TagAlias[]>"
        },
        {
          "name": "findGlobal",
          "async": true,
          "returns": "Promise<TagAlias[]>"
        },
        {
          "name": "findMatchingAliases",
          "async": true,
          "params": [
            "query: string",
            "language?: string"
          ],
          "returns": "Promise<TagAlias[]>"
        },
        {
          "name": "findWithGlobals",
          "async": true,
          "params": [
            "tenantId: string"
          ],
          "returns": "Promise<TagAlias[]>"
        },
        {
          "name": "getAliasesByLanguage",
          "async": true,
          "params": [
            "tagSlug: string"
          ],
          "returns": "Promise<Map<string, string[]>>"
        },
        {
          "name": "getAliasesForTag",
          "async": true,
          "params": [
            "tagSlug: string",
            "language?: string"
          ],
          "returns": "Promise<TagAlias[]>"
        },
        {
          "name": "removeAlias",
          "async": true,
          "params": [
            "aliasId: string"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "searchByAlias",
          "async": true,
          "params": [
            "alias: string",
            "language?: string"
          ],
          "returns": "Promise<Tag[]>"
        }
      ],
      "surfaces": [],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "Tag",
      "qualifiedName": "@happyvertical/smrt-tags:Tag",
      "collection": "tags",
      "tableName": "tags",
      "packageName": "@happyvertical/smrt-tags",
      "extends": "SmrtHierarchical",
      "fields": [
        {
          "name": "created_at",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "updated_at",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "parentId",
          "type": "foreignKey",
          "required": false,
          "related": "Tag",
          "columnType": "UUID"
        },
        {
          "name": "name",
          "type": "text",
          "required": true,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "level",
          "type": "integer",
          "required": false,
          "columnType": "INTEGER",
          "default": 0
        },
        {
          "name": "description",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "metadata",
          "type": "text",
          "required": false,
          "columnType": "TEXT",
          "default": ""
        },
        {
          "name": "tenantId",
          "type": "text",
          "required": false,
          "columnType": "UUID"
        },
        {
          "name": "createdAt",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        },
        {
          "name": "updatedAt",
          "type": "datetime",
          "required": false,
          "columnType": "TIMESTAMP"
        }
      ],
      "relationships": [
        {
          "name": "parentId",
          "type": "foreignKey",
          "required": false,
          "related": "Tag",
          "columnType": "UUID"
        }
      ],
      "methods": [
        "_setLoadedRelationship",
        "classifyConstraintError",
        "clearEmbeddings",
        "delete",
        "describe",
        "destroy",
        "do",
        "executeToolCall",
        "forget",
        "forgetScope",
        "generateEmbeddings",
        "getAiUsageSnapshot",
        "getAncestors",
        "getAvailableTools",
        "getBySlug",
        "getChildren",
        "getDescendants",
        "getEmbedding",
        "getFields",
        "getHierarchy",
        "getId",
        "getMetadata",
        "getParent",
        "getRelated",
        "getRootTags",
        "getSavedId",
        "getSlug",
        "hasStaleEmbeddings",
        "initialize",
        "is",
        "isRelatedLoaded",
        "isSaved",
        "listAiUsage",
        "loadDataFromDb",
        "loadFromId",
        "loadFromSlug",
        "loadRelated",
        "loadRelatedMany",
        "markAsPersisted",
        "moveTo",
        "recall",
        "recallAll",
        "remember",
        "requireInsertOnSave",
        "resetAiUsage",
        "save",
        "setMetadata",
        "summarizeAiUsage",
        "toJSON",
        "toPlainObject",
        "toPublicJSON",
        "updateMetadata",
        "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": "getAncestors",
          "async": true,
          "returns": "Promise"
        },
        {
          "name": "getAvailableTools",
          "returns": "AITool[]"
        },
        {
          "name": "getBySlug",
          "async": true,
          "static": true,
          "params": [
            "_slug: string",
            "_context?: string"
          ],
          "returns": "Promise<Tag | null>"
        },
        {
          "name": "getChildren",
          "async": true,
          "returns": "Promise"
        },
        {
          "name": "getDescendants",
          "async": true,
          "returns": "Promise"
        },
        {
          "name": "getEmbedding",
          "async": true,
          "params": [
            "fieldName: string",
            "model?: string"
          ],
          "returns": "Promise<number[] | null>"
        },
        {
          "name": "getFields",
          "async": true,
          "returns": "Promise<any>"
        },
        {
          "name": "getHierarchy",
          "async": true,
          "returns": "Promise<HierarchyView>"
        },
        {
          "name": "getId",
          "async": true,
          "returns": "any"
        },
        {
          "name": "getMetadata",
          "returns": "TagMetadata"
        },
        {
          "name": "getParent",
          "async": true,
          "returns": "Promise<null>"
        },
        {
          "name": "getRelated",
          "async": true,
          "params": [
            "fieldName: string",
            "opts?: LoadRelatedOptions"
          ],
          "returns": "Promise<any>"
        },
        {
          "name": "getRootTags",
          "async": true,
          "static": true,
          "params": [
            "_context?: string"
          ],
          "returns": "Promise<Tag[]>"
        },
        {
          "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": "moveTo",
          "async": true,
          "params": [
            "newParent: string | null"
          ],
          "returns": "Promise<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: TagMetadata"
          ],
          "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": "updateMetadata",
          "params": [
            "updates: Partial<TagMetadata>"
          ],
          "returns": "void"
        },
        {
          "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": "tags.list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-tags:Tag",
          "path": "/tags",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "tags.get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-tags:Tag",
          "path": "/tags/[id]",
          "method": "GET"
        },
        {
          "kind": "api",
          "name": "tags.create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-tags:Tag",
          "path": "/tags",
          "method": "POST"
        },
        {
          "kind": "api",
          "name": "tags.update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-tags:Tag",
          "path": "/tags/[id]",
          "method": "PATCH"
        },
        {
          "kind": "api",
          "name": "tags.delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-tags:Tag",
          "path": "/tags/[id]",
          "method": "DELETE"
        },
        {
          "kind": "cli",
          "name": "tag_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-tags:Tag"
        },
        {
          "kind": "cli",
          "name": "tag_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-tags:Tag"
        },
        {
          "kind": "cli",
          "name": "tag_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-tags:Tag"
        },
        {
          "kind": "cli",
          "name": "tag_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-tags:Tag"
        },
        {
          "kind": "cli",
          "name": "tag_delete",
          "operation": "delete",
          "objectName": "@happyvertical/smrt-tags:Tag"
        },
        {
          "kind": "mcp",
          "name": "tag_list",
          "operation": "list",
          "objectName": "@happyvertical/smrt-tags:Tag"
        },
        {
          "kind": "mcp",
          "name": "tag_get",
          "operation": "get",
          "objectName": "@happyvertical/smrt-tags:Tag"
        },
        {
          "kind": "mcp",
          "name": "tag_create",
          "operation": "create",
          "objectName": "@happyvertical/smrt-tags:Tag"
        },
        {
          "kind": "mcp",
          "name": "tag_update",
          "operation": "update",
          "objectName": "@happyvertical/smrt-tags:Tag"
        }
      ],
      "relationshipFeatures": [
        "SmrtHierarchical",
        "foreignKey",
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    },
    {
      "name": "TagCollection",
      "qualifiedName": "@happyvertical/smrt-tags:TagCollection",
      "collection": "tags",
      "tableName": "tag_collections",
      "packageName": "@happyvertical/smrt-tags",
      "extends": "SmrtCollection",
      "fields": [],
      "relationships": [],
      "methods": [
        "calculateLevel",
        "cleanupUnused",
        "findByTenant",
        "findGlobal",
        "findWithGlobals",
        "getChildren",
        "getHierarchy",
        "getOrCreate",
        "getRootTags",
        "listByContext",
        "mergeTag",
        "moveTag"
      ],
      "methodSignatures": [
        {
          "name": "calculateLevel",
          "async": true,
          "params": [
            "parentSlug: string | null",
            "context?: string"
          ],
          "returns": "Promise<number>"
        },
        {
          "name": "cleanupUnused",
          "async": true,
          "params": [
            "context?: string"
          ],
          "returns": "Promise<number>"
        },
        {
          "name": "findByTenant",
          "async": true,
          "params": [
            "tenantId: string"
          ],
          "returns": "Promise<Tag[]>"
        },
        {
          "name": "findGlobal",
          "async": true,
          "returns": "Promise<Tag[]>"
        },
        {
          "name": "findWithGlobals",
          "async": true,
          "params": [
            "tenantId: string"
          ],
          "returns": "Promise<Tag[]>"
        },
        {
          "name": "getChildren",
          "async": true,
          "params": [
            "parentSlug: string",
            "context?: string"
          ],
          "returns": "Promise<Tag[]>"
        },
        {
          "name": "getHierarchy",
          "async": true,
          "params": [
            "slug: string",
            "context?: string"
          ],
          "returns": "Promise<TagHierarchy>"
        },
        {
          "name": "getOrCreate",
          "async": true,
          "params": [
            "slug: string",
            "context?: string"
          ],
          "returns": "Promise<Tag>"
        },
        {
          "name": "getRootTags",
          "async": true,
          "params": [
            "context?: string"
          ],
          "returns": "Promise<Tag[]>"
        },
        {
          "name": "listByContext",
          "async": true,
          "params": [
            "context: string",
            "parentSlug?: string | null"
          ],
          "returns": "Promise<Tag[]>"
        },
        {
          "name": "mergeTag",
          "async": true,
          "params": [
            "fromSlug: string",
            "toSlug: string",
            "context?: string"
          ],
          "returns": "Promise<void>"
        },
        {
          "name": "moveTag",
          "async": true,
          "params": [
            "slug: string",
            "newParentSlug: string | null",
            "context?: string"
          ],
          "returns": "Promise<void>"
        }
      ],
      "surfaces": [],
      "relationshipFeatures": [
        "uuidColumns"
      ],
      "tags": [],
      "risks": []
    }
  ],
  "surfaces": [
    {
      "kind": "api",
      "name": "tagaliases.list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-tags:TagAlias",
      "path": "/tagaliases",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "tagaliases.get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-tags:TagAlias",
      "path": "/tagaliases/[id]",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "tagaliases.create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-tags:TagAlias",
      "path": "/tagaliases",
      "method": "POST"
    },
    {
      "kind": "api",
      "name": "tagaliases.update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-tags:TagAlias",
      "path": "/tagaliases/[id]",
      "method": "PATCH"
    },
    {
      "kind": "api",
      "name": "tagaliases.delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-tags:TagAlias",
      "path": "/tagaliases/[id]",
      "method": "DELETE"
    },
    {
      "kind": "cli",
      "name": "tagalias_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-tags:TagAlias"
    },
    {
      "kind": "cli",
      "name": "tagalias_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-tags:TagAlias"
    },
    {
      "kind": "cli",
      "name": "tagalias_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-tags:TagAlias"
    },
    {
      "kind": "cli",
      "name": "tagalias_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-tags:TagAlias"
    },
    {
      "kind": "cli",
      "name": "tagalias_delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-tags:TagAlias"
    },
    {
      "kind": "mcp",
      "name": "tagalias_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-tags:TagAlias"
    },
    {
      "kind": "mcp",
      "name": "tagalias_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-tags:TagAlias"
    },
    {
      "kind": "mcp",
      "name": "tagalias_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-tags:TagAlias"
    },
    {
      "kind": "api",
      "name": "tags.list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-tags:Tag",
      "path": "/tags",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "tags.get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-tags:Tag",
      "path": "/tags/[id]",
      "method": "GET"
    },
    {
      "kind": "api",
      "name": "tags.create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-tags:Tag",
      "path": "/tags",
      "method": "POST"
    },
    {
      "kind": "api",
      "name": "tags.update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-tags:Tag",
      "path": "/tags/[id]",
      "method": "PATCH"
    },
    {
      "kind": "api",
      "name": "tags.delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-tags:Tag",
      "path": "/tags/[id]",
      "method": "DELETE"
    },
    {
      "kind": "cli",
      "name": "tag_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-tags:Tag"
    },
    {
      "kind": "cli",
      "name": "tag_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-tags:Tag"
    },
    {
      "kind": "cli",
      "name": "tag_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-tags:Tag"
    },
    {
      "kind": "cli",
      "name": "tag_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-tags:Tag"
    },
    {
      "kind": "cli",
      "name": "tag_delete",
      "operation": "delete",
      "objectName": "@happyvertical/smrt-tags:Tag"
    },
    {
      "kind": "mcp",
      "name": "tag_list",
      "operation": "list",
      "objectName": "@happyvertical/smrt-tags:Tag"
    },
    {
      "kind": "mcp",
      "name": "tag_get",
      "operation": "get",
      "objectName": "@happyvertical/smrt-tags:Tag"
    },
    {
      "kind": "mcp",
      "name": "tag_create",
      "operation": "create",
      "objectName": "@happyvertical/smrt-tags:Tag"
    },
    {
      "kind": "mcp",
      "name": "tag_update",
      "operation": "update",
      "objectName": "@happyvertical/smrt-tags:Tag"
    }
  ],
  "prompts": [],
  "relationshipsV2": {
    "foreignKeyFields": 1,
    "crossPackageRefFields": 0,
    "junctionCollections": 0,
    "hierarchicalObjects": 1,
    "polymorphicAssociations": 0,
    "uuidColumns": 7
  },
  "agentDoc": "# @happyvertical/smrt-tags\n\nHierarchical tagging with context-scoped slugs and multi-language aliases.\n\n## Models\n\n- **Tag** (STI, extends `SmrtHierarchical`): public identifier is `slug` (not UUID) + `context` (default: 'global'), but the hierarchy FK is `parentId` (UUID) since R3-B. `TagCollection.moveTag` / `mergeTag` / `getChildren` keep slug-string signatures and resolve to UUIDs internally. `level` is a denormalised depth recalculated on `moveTag`. Metadata JSON.\n- **TagAlias**: language-specific translations/aliases (ISO 639-1 `language` code, nullable). Optional context scoping.\n\n## Key Collection Methods\n\n- `getOrCreate(slug, options)`: auto-generates name from slug\n- `moveTag(slug, newParentSlug)`: circular reference detection, level recalculation\n- `mergeTag(sourceSlug, targetSlug)`: moves children + aliases from source to target, then deletes source\n- `cleanupUnused()`: only deletes tags with no children AND no aliases\n- `findWithGlobals(tenantId)`: tenant + global tags\n\n## Gotchas\n\n- **Slug stored in protected `_slug`**: has override getter/setter (not standard SmrtObject slug behavior)\n- **Context defaults to 'global'**: if not specified\n- **Optional tenancy** with nullable tenantId\n"
}