@sweetoburrito/backstage-plugin-ai-assistant-backend-module-ingestor-catalog 0.3.5 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -42,7 +42,8 @@ function mapEntityToEmbeddingDoc(entity) {
|
|
|
42
42
|
kind: entity.kind,
|
|
43
43
|
namespace: ns,
|
|
44
44
|
name: entity.metadata.name,
|
|
45
|
-
uid: entity.metadata.uid
|
|
45
|
+
uid: entity.metadata.uid,
|
|
46
|
+
url: `/catalog/${entity.metadata.namespace || "default"}/${entity.kind.toLowerCase()}/${entity.metadata.name}`
|
|
46
47
|
},
|
|
47
48
|
content: parts.join("\n")
|
|
48
49
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-to-embedding-doc.cjs.js","sources":["../../../../src/services/ingestor/helpers/entity-to-embedding-doc.ts"],"sourcesContent":["import { Entity } from '@backstage/catalog-model';\nimport { EmbeddingDocument } from '@sweetoburrito/backstage-plugin-ai-assistant-node';\nimport { MODULE_ID } from '../../../constants/module';\n\nexport function mapEntityToEmbeddingDoc(entity: Entity): EmbeddingDocument {\n const ns = entity.metadata.namespace || 'default';\n const id = `${entity.kind.toLowerCase()}:${ns}/${entity.metadata.name}`;\n\n // Build content string (natural language summary)\n const parts: string[] = [];\n\n // Title & description\n if (entity.metadata.title) {\n parts.push(\n `${entity.kind} \"${entity.metadata.title}\" (${entity.metadata.name})`,\n );\n } else {\n parts.push(`${entity.kind} \"${entity.metadata.name}\"`);\n }\n\n if (entity.metadata.description) {\n parts.push(`Description: ${entity.metadata.description}.`);\n }\n\n // Spec (flatten key fields if present)\n if (entity.spec) {\n for (const [key, value] of Object.entries(entity.spec)) {\n if (typeof value === 'string') {\n parts.push(`${key}: ${value}`);\n } else if (Array.isArray(value)) {\n parts.push(`${key}: ${value.join(', ')}`);\n } else if (typeof value === 'object' && value !== null) {\n for (const [k, v] of Object.entries(value)) {\n if (typeof v === 'string') {\n parts.push(`${k}: ${v}`);\n }\n }\n }\n }\n }\n\n // Relations (express in plain text)\n if (entity.relations?.length) {\n const relationText = entity.relations\n .map(r => `${r.type} → ${r.targetRef}`)\n .join('; ');\n parts.push(`Relations: ${relationText}`);\n }\n\n return {\n metadata: {\n source: MODULE_ID,\n id,\n kind: entity.kind,\n namespace: ns,\n name: entity.metadata.name,\n uid: entity.metadata.uid!,\n },\n content: parts.join('\\n'),\n };\n}\n"],"names":["MODULE_ID"],"mappings":";;;;AAIO,SAAS,wBAAwB,MAAA,EAAmC;AACzE,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,QAAA,CAAS,SAAA,IAAa,SAAA;AACxC,EAAA,MAAM,EAAA,GAAK,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,CAAA;AAGrE,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,IAAI,MAAA,CAAO,SAAS,KAAA,EAAO;AACzB,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,SAAS,KAAK,CAAA,GAAA,EAAM,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,CAAA;AAAA,KACpE;AAAA,EACF,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,MAAA,CAAO,IAAI,KAAK,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACvD;AAEA,EAAA,IAAI,MAAA,CAAO,SAAS,WAAA,EAAa;AAC/B,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,EAC3D;AAGA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,EAAG;AACtD,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,MAC/B,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/B,QAAA,KAAA,CAAM,IAAA,CAAK,GAAG,GAAG,CAAA,EAAA,EAAK,MAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MAC1C,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,EAAM;AACtD,QAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1C,UAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,YAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAA;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,WAAW,MAAA,EAAQ;AAC5B,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,SAAA,CACzB,GAAA,CAAI,OAAK,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,QAAA,EAAM,CAAA,CAAE,SAAS,CAAA,CAAE,CAAA,CACrC,KAAK,IAAI,CAAA;AACZ,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,YAAY,CAAA,CAAE,CAAA;AAAA,EACzC;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU;AAAA,MACR,MAAA,EAAQA,kBAAA;AAAA,MACR,EAAA;AAAA,MACA,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,MACX,IAAA,EAAM,OAAO,QAAA,CAAS,IAAA;AAAA,MACtB,GAAA,EAAK,OAAO,QAAA,CAAS;AAAA,
|
|
1
|
+
{"version":3,"file":"entity-to-embedding-doc.cjs.js","sources":["../../../../src/services/ingestor/helpers/entity-to-embedding-doc.ts"],"sourcesContent":["import { Entity } from '@backstage/catalog-model';\nimport { EmbeddingDocument } from '@sweetoburrito/backstage-plugin-ai-assistant-node';\nimport { MODULE_ID } from '../../../constants/module';\n\nexport function mapEntityToEmbeddingDoc(entity: Entity): EmbeddingDocument {\n const ns = entity.metadata.namespace || 'default';\n const id = `${entity.kind.toLowerCase()}:${ns}/${entity.metadata.name}`;\n\n // Build content string (natural language summary)\n const parts: string[] = [];\n\n // Title & description\n if (entity.metadata.title) {\n parts.push(\n `${entity.kind} \"${entity.metadata.title}\" (${entity.metadata.name})`,\n );\n } else {\n parts.push(`${entity.kind} \"${entity.metadata.name}\"`);\n }\n\n if (entity.metadata.description) {\n parts.push(`Description: ${entity.metadata.description}.`);\n }\n\n // Spec (flatten key fields if present)\n if (entity.spec) {\n for (const [key, value] of Object.entries(entity.spec)) {\n if (typeof value === 'string') {\n parts.push(`${key}: ${value}`);\n } else if (Array.isArray(value)) {\n parts.push(`${key}: ${value.join(', ')}`);\n } else if (typeof value === 'object' && value !== null) {\n for (const [k, v] of Object.entries(value)) {\n if (typeof v === 'string') {\n parts.push(`${k}: ${v}`);\n }\n }\n }\n }\n }\n\n // Relations (express in plain text)\n if (entity.relations?.length) {\n const relationText = entity.relations\n .map(r => `${r.type} → ${r.targetRef}`)\n .join('; ');\n parts.push(`Relations: ${relationText}`);\n }\n\n return {\n metadata: {\n source: MODULE_ID,\n id,\n kind: entity.kind,\n namespace: ns,\n name: entity.metadata.name,\n uid: entity.metadata.uid!,\n url: `/catalog/${\n entity.metadata.namespace || 'default'\n }/${entity.kind.toLowerCase()}/${entity.metadata.name}`,\n },\n content: parts.join('\\n'),\n };\n}\n"],"names":["MODULE_ID"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sweetoburrito/backstage-plugin-ai-assistant-backend-module-ingestor-catalog",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "The ingestor-catalog backend module for the ai-assistant plugin.",
|
|
6
6
|
"main": "dist/index.cjs.js",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"@backstage/backend-plugin-api": "backstage:^",
|
|
32
32
|
"@backstage/catalog-model": "backstage:^",
|
|
33
33
|
"@backstage/plugin-catalog-node": "backstage:^",
|
|
34
|
-
"@sweetoburrito/backstage-plugin-ai-assistant-node": "^0.
|
|
34
|
+
"@sweetoburrito/backstage-plugin-ai-assistant-node": "^0.7.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@backstage/backend-defaults": "backstage:^",
|