@sweetoburrito/backstage-plugin-ai-assistant-node 0.8.0 → 0.9.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.
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.cjs.js","sources":["../src/extensions.ts"],"sourcesContent":["import { createExtensionPoint } from '@backstage/backend-plugin-api';\nimport { Ingestor } from './types/ingestor';\nimport { Embeddings } from '@langchain/core/embeddings';\nimport { BaseChatModel } from '@langchain/core/language_models/chat_models';\nimport { CallbackProvider } from './types';\nimport { Tool } from '@sweetoburrito/backstage-plugin-ai-assistant-common';\nimport { ZodType } from 'zod';\n\nexport type DataIngestorExtensionPoint = {\n registerIngestor: (ingestor: Ingestor) => void;\n};\n\nexport const dataIngestorExtensionPoint =\n createExtensionPoint<DataIngestorExtensionPoint>({\n id: 'ai-assistant.data-ingestor',\n });\n\nexport type EmbeddingsProvider = {\n getEmbeddings: () => Promise<Omit<Embeddings, 'caller'>>;\n};\n\nexport type EmbeddingsProviderExtensionPoint = {\n register: (provider: EmbeddingsProvider) => void;\n};\n\nexport const embeddingsProviderExtensionPoint =\n createExtensionPoint<EmbeddingsProviderExtensionPoint>({\n id: 'ai-assistant.embeddings-provider',\n });\n\nexport type Model = {\n id: string;\n chatModel: BaseChatModel;\n};\n\nexport type ModelProviderExtensionPoint = {\n register: (model: Model) => void;\n};\n\nexport const modelProviderExtensionPoint =\n createExtensionPoint<ModelProviderExtensionPoint>({\n id: 'ai-assistant.model-provider',\n });\n\nexport type ToolExtensionPoint = {\n register: (tool: Tool<ZodType>) => void;\n};\n\nexport const toolExtensionPoint = createExtensionPoint<ToolExtensionPoint>({\n id: 'ai-assistant.tool',\n});\n\nexport type CallbackExtensionPoint = {\n register: (callback: CallbackProvider) => void;\n};\n\nexport const callbackProviderExtensionPoint =\n createExtensionPoint<CallbackExtensionPoint>({\n id: 'ai-assistant.callback',\n });\n"],"names":["createExtensionPoint"],"mappings":";;;;AAYO,MAAM,6BACXA,qCAAA,CAAiD;AAAA,EAC/C,EAAA,EAAI;AACN,CAAC;AAUI,MAAM,mCACXA,qCAAA,CAAuD;AAAA,EACrD,EAAA,EAAI;AACN,CAAC;AAWI,MAAM,8BACXA,qCAAA,CAAkD;AAAA,EAChD,EAAA,EAAI;AACN,CAAC;AAMI,MAAM,qBAAqBA,qCAAA,CAAyC;AAAA,EACzE,EAAA,EAAI;AACN,CAAC;AAMM,MAAM,iCACXA,qCAAA,CAA6C;AAAA,EAC3C,EAAA,EAAI;AACN,CAAC;;;;;;;;"}
1
+ {"version":3,"file":"extensions.cjs.js","sources":["../src/extensions.ts"],"sourcesContent":["import { createExtensionPoint } from '@backstage/backend-plugin-api';\nimport { Ingestor } from './types/ingestor';\nimport { Model } from './types/model';\nimport { Embeddings } from '@langchain/core/embeddings';\nimport { CallbackProvider } from './types';\nimport { Tool } from '@sweetoburrito/backstage-plugin-ai-assistant-common';\nimport { ZodType } from 'zod';\n\nexport type DataIngestorExtensionPoint = {\n registerIngestor: (ingestor: Ingestor) => void;\n};\n\nexport const dataIngestorExtensionPoint =\n createExtensionPoint<DataIngestorExtensionPoint>({\n id: 'ai-assistant.data-ingestor',\n });\n\nexport type EmbeddingsProvider = {\n getEmbeddings: () => Promise<Omit<Embeddings, 'caller'>>;\n};\n\nexport type EmbeddingsProviderExtensionPoint = {\n register: (provider: EmbeddingsProvider) => void;\n};\n\nexport const embeddingsProviderExtensionPoint =\n createExtensionPoint<EmbeddingsProviderExtensionPoint>({\n id: 'ai-assistant.embeddings-provider',\n });\n\nexport type ModelProviderExtensionPoint = {\n register: (model: Model) => void;\n};\n\nexport const modelProviderExtensionPoint =\n createExtensionPoint<ModelProviderExtensionPoint>({\n id: 'ai-assistant.model-provider',\n });\n\nexport type ToolExtensionPoint = {\n register: (tool: Tool<ZodType>) => void;\n};\n\nexport const toolExtensionPoint = createExtensionPoint<ToolExtensionPoint>({\n id: 'ai-assistant.tool',\n});\n\nexport type CallbackExtensionPoint = {\n register: (callback: CallbackProvider) => void;\n};\n\nexport const callbackProviderExtensionPoint =\n createExtensionPoint<CallbackExtensionPoint>({\n id: 'ai-assistant.callback',\n });\n"],"names":["createExtensionPoint"],"mappings":";;;;AAYO,MAAM,6BACXA,qCAAA,CAAiD;AAAA,EAC/C,EAAA,EAAI;AACN,CAAC;AAUI,MAAM,mCACXA,qCAAA,CAAuD;AAAA,EACrD,EAAA,EAAI;AACN,CAAC;AAMI,MAAM,8BACXA,qCAAA,CAAkD;AAAA,EAChD,EAAA,EAAI;AACN,CAAC;AAMI,MAAM,qBAAqBA,qCAAA,CAAyC;AAAA,EACzE,EAAA,EAAI;AACN,CAAC;AAMM,MAAM,iCACXA,qCAAA,CAA6C;AAAA,EAC3C,EAAA,EAAI;AACN,CAAC;;;;;;;;"}
package/dist/index.cjs.js CHANGED
@@ -5,6 +5,7 @@ var tool = require('./utils/tool.cjs.js');
5
5
  var streamToString = require('./utils/stream-to-string.cjs.js');
6
6
  var encrypt = require('./utils/encrypt.cjs.js');
7
7
  var getUser = require('./utils/get-user.cjs.js');
8
+ var aiAssistant = require('./services/ai-assistant.cjs.js');
8
9
 
9
10
 
10
11
 
@@ -18,4 +19,5 @@ exports.streamToString = streamToString.streamToString;
18
19
  exports.decrypt = encrypt.decrypt;
19
20
  exports.encrypt = encrypt.encrypt;
20
21
  exports.getUser = getUser.getUser;
22
+ exports.aiAssistantServiceRef = aiAssistant.aiAssistantServiceRef;
21
23
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
2
- import { LoggerService, RootConfigService, SchedulerService, CacheService, BackstageCredentials } from '@backstage/backend-plugin-api';
2
+ import { LoggerService, RootConfigService, SchedulerService, CacheService, AuthService, BackstageCredentials, DiscoveryService, ServiceRef } from '@backstage/backend-plugin-api';
3
3
  import { Embeddings } from '@langchain/core/embeddings';
4
4
  import { BaseCallbackHandler } from '@langchain/core/callbacks/base';
5
- import { JsonValue, Message, Tool } from '@sweetoburrito/backstage-plugin-ai-assistant-common';
5
+ import { JsonValue, Message, Tool, EnabledTool } from '@sweetoburrito/backstage-plugin-ai-assistant-common';
6
6
  import { BaseChatModel } from '@langchain/core/language_models/chat_models';
7
7
  import { ZodType } from 'zod';
8
+ import { UserEntity } from '@backstage/catalog-model';
8
9
  import { CatalogService } from '@backstage/plugin-catalog-node';
9
10
 
10
11
  type EmbeddingsSource = string;
@@ -84,6 +85,11 @@ type CallbackProvider = {
84
85
  chainMetadataCallback?: ChainMetadataCallback;
85
86
  };
86
87
 
88
+ type Model = {
89
+ id: string;
90
+ chatModel: BaseChatModel;
91
+ };
92
+
87
93
  type DataIngestorExtensionPoint = {
88
94
  registerIngestor: (ingestor: Ingestor) => void;
89
95
  };
@@ -95,10 +101,6 @@ type EmbeddingsProviderExtensionPoint = {
95
101
  register: (provider: EmbeddingsProvider) => void;
96
102
  };
97
103
  declare const embeddingsProviderExtensionPoint: _backstage_backend_plugin_api.ExtensionPoint<EmbeddingsProviderExtensionPoint>;
98
- type Model = {
99
- id: string;
100
- chatModel: BaseChatModel;
101
- };
102
104
  type ModelProviderExtensionPoint = {
103
105
  register: (model: Model) => void;
104
106
  };
@@ -122,7 +124,35 @@ declare function streamToString(readableStream: NodeJS.ReadableStream | null): P
122
124
  declare const encrypt: (text: string, key: string) => string;
123
125
  declare const decrypt: (encryptedText: string, key: string) => string;
124
126
 
125
- declare const getUser: (cache: CacheService, userEntityRef: string, credentials: BackstageCredentials, catalog: CatalogService) => Promise<any>;
127
+ declare const getUser: (cache: CacheService, userEntityRef: string, catalog: CatalogService, auth: AuthService) => Promise<UserEntity | undefined>;
128
+
129
+ type AiAssistantService = {
130
+ summarize: (options: {
131
+ content: string;
132
+ credentials: BackstageCredentials;
133
+ length?: string;
134
+ prompt?: string;
135
+ }) => Promise<string>;
136
+ prompt: (options: {
137
+ messages: Message[];
138
+ tools?: EnabledTool[];
139
+ modelId?: string;
140
+ systemPrompt?: string;
141
+ context?: string;
142
+ metadata: {
143
+ runName: string;
144
+ userId: string;
145
+ };
146
+ credentials: BackstageCredentials;
147
+ }) => Promise<{
148
+ messages: Message[];
149
+ }>;
150
+ };
151
+ type AiAssistantServiceOptions = {
152
+ auth: AuthService;
153
+ discovery: DiscoveryService;
154
+ };
155
+ declare const aiAssistantServiceRef: ServiceRef<AiAssistantService, 'plugin', 'singleton'>;
126
156
 
127
- export { callbackProviderExtensionPoint, createAssistantTool, dataIngestorExtensionPoint, decrypt, embeddingsProviderExtensionPoint, encrypt, getUser, modelProviderExtensionPoint, streamToString, toolExtensionPoint };
128
- export type { AugmentationIndexer, CallbackExtensionPoint, CallbackProvider, ChainCallback, ChainCallbackOptions, ChainMetadata, ChainMetadataCallback, DataIngestionPipeline, DataIngestionPipelineOptions, DataIngestorExtensionPoint, Embedding, EmbeddingDocument, EmbeddingDocumentMetadata, EmbeddingsProvider, EmbeddingsProviderExtensionPoint, EmbeddingsSource, EntityFilterShape, Ingestor, IngestorOptions, Model, ModelProviderExtensionPoint, ScoreCallback, ToolExtensionPoint, VectorStore };
157
+ export { aiAssistantServiceRef, callbackProviderExtensionPoint, createAssistantTool, dataIngestorExtensionPoint, decrypt, embeddingsProviderExtensionPoint, encrypt, getUser, modelProviderExtensionPoint, streamToString, toolExtensionPoint };
158
+ export type { AiAssistantService, AiAssistantServiceOptions, AugmentationIndexer, CallbackExtensionPoint, CallbackProvider, ChainCallback, ChainCallbackOptions, ChainMetadata, ChainMetadataCallback, DataIngestionPipeline, DataIngestionPipelineOptions, DataIngestorExtensionPoint, Embedding, EmbeddingDocument, EmbeddingDocumentMetadata, EmbeddingsProvider, EmbeddingsProviderExtensionPoint, EmbeddingsSource, EntityFilterShape, Ingestor, IngestorOptions, Model, ModelProviderExtensionPoint, ScoreCallback, ToolExtensionPoint, VectorStore };
@@ -0,0 +1,73 @@
1
+ 'use strict';
2
+
3
+ var backendPluginApi = require('@backstage/backend-plugin-api');
4
+
5
+ const createAiAssistantService = ({
6
+ auth,
7
+ discovery
8
+ }) => {
9
+ const summarize = async ({
10
+ content,
11
+ credentials,
12
+ length = "a few sentences",
13
+ prompt: prompt2
14
+ }) => {
15
+ const baseUrl = await discovery.getBaseUrl("ai-assistant");
16
+ const { token } = await auth.getPluginRequestToken({
17
+ onBehalfOf: credentials,
18
+ targetPluginId: "ai-assistant"
19
+ });
20
+ const response = await fetch(`${baseUrl}/summary/content`, {
21
+ method: "POST",
22
+ body: JSON.stringify({ content, length, prompt: prompt2 }),
23
+ headers: {
24
+ "Content-Type": "application/json",
25
+ Authorization: `Bearer ${token}`
26
+ }
27
+ });
28
+ const data = await response.json();
29
+ return data.summary;
30
+ };
31
+ const prompt = async (options) => {
32
+ const { credentials, ...rest } = options;
33
+ const baseUrl = await discovery.getBaseUrl("ai-assistant");
34
+ const { token } = await auth.getPluginRequestToken({
35
+ onBehalfOf: credentials,
36
+ targetPluginId: "ai-assistant"
37
+ });
38
+ const response = await fetch(`${baseUrl}/agent/prompt`, {
39
+ method: "POST",
40
+ body: JSON.stringify({ ...rest }),
41
+ headers: {
42
+ "Content-Type": "application/json",
43
+ Authorization: `Bearer ${token}`
44
+ }
45
+ });
46
+ const body = await response.json();
47
+ const messages = body.messages;
48
+ return {
49
+ messages
50
+ };
51
+ };
52
+ return {
53
+ summarize,
54
+ prompt
55
+ };
56
+ };
57
+ const aiAssistantServiceRef = backendPluginApi.createServiceRef({
58
+ id: "ai-assistant.ai-assistant-service",
59
+ defaultFactory: async (service) => backendPluginApi.createServiceFactory({
60
+ service,
61
+ deps: {
62
+ config: backendPluginApi.coreServices.rootConfig,
63
+ auth: backendPluginApi.coreServices.auth,
64
+ discovery: backendPluginApi.coreServices.discovery
65
+ },
66
+ factory: async (options) => {
67
+ return createAiAssistantService(options);
68
+ }
69
+ })
70
+ });
71
+
72
+ exports.aiAssistantServiceRef = aiAssistantServiceRef;
73
+ //# sourceMappingURL=ai-assistant.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-assistant.cjs.js","sources":["../../src/services/ai-assistant.ts"],"sourcesContent":["import {\n createServiceFactory,\n createServiceRef,\n coreServices,\n} from '@backstage/backend-plugin-api';\n\nimport type {\n ServiceRef,\n BackstageCredentials,\n AuthService,\n DiscoveryService,\n} from '@backstage/backend-plugin-api';\nimport {\n EnabledTool,\n Message,\n} from '@sweetoburrito/backstage-plugin-ai-assistant-common';\n\nexport type AiAssistantService = {\n summarize: (options: {\n content: string;\n credentials: BackstageCredentials;\n length?: string;\n prompt?: string;\n }) => Promise<string>;\n\n prompt: (options: {\n messages: Message[];\n tools?: EnabledTool[];\n modelId?: string;\n systemPrompt?: string;\n context?: string;\n metadata: {\n runName: string;\n userId: string;\n };\n credentials: BackstageCredentials;\n }) => Promise<{\n messages: Message[];\n }>;\n};\n\nexport type AiAssistantServiceOptions = {\n auth: AuthService;\n discovery: DiscoveryService;\n};\n\nconst createAiAssistantService = ({\n auth,\n discovery,\n}: AiAssistantServiceOptions): AiAssistantService => {\n const summarize: AiAssistantService['summarize'] = async ({\n content,\n credentials,\n length = 'a few sentences',\n prompt,\n }) => {\n const baseUrl = await discovery.getBaseUrl('ai-assistant');\n\n const { token } = await auth.getPluginRequestToken({\n onBehalfOf: credentials,\n targetPluginId: 'ai-assistant',\n });\n\n const response = await fetch(`${baseUrl}/summary/content`, {\n method: 'POST',\n body: JSON.stringify({ content, length, prompt }),\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n });\n\n const data = await response.json();\n return data.summary as string;\n };\n\n const prompt: AiAssistantService['prompt'] = async options => {\n const { credentials, ...rest } = options;\n\n const baseUrl = await discovery.getBaseUrl('ai-assistant');\n\n const { token } = await auth.getPluginRequestToken({\n onBehalfOf: credentials,\n targetPluginId: 'ai-assistant',\n });\n\n const response = await fetch(`${baseUrl}/agent/prompt`, {\n method: 'POST',\n body: JSON.stringify({ ...rest }),\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n });\n\n const body = await response.json();\n\n const messages = body.messages as Message[];\n\n return {\n messages,\n };\n };\n\n return {\n summarize,\n prompt,\n };\n};\n\nexport const aiAssistantServiceRef: ServiceRef<\n AiAssistantService,\n 'plugin',\n 'singleton'\n> = createServiceRef<AiAssistantService>({\n id: 'ai-assistant.ai-assistant-service',\n defaultFactory: async service =>\n createServiceFactory({\n service,\n deps: {\n config: coreServices.rootConfig,\n auth: coreServices.auth,\n discovery: coreServices.discovery,\n },\n factory: async options => {\n return createAiAssistantService(options);\n },\n }),\n});\n"],"names":["prompt","createServiceRef","createServiceFactory","coreServices"],"mappings":";;;;AA8CA,MAAM,2BAA2B,CAAC;AAAA,EAChC,IAAA;AAAA,EACA;AACF,CAAA,KAAqD;AACnD,EAAA,MAAM,YAA6C,OAAO;AAAA,IACxD,OAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA,GAAS,iBAAA;AAAA,IACT,MAAA,EAAAA;AAAA,GACF,KAAM;AACJ,IAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,UAAA,CAAW,cAAc,CAAA;AAEzD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,KAAK,qBAAA,CAAsB;AAAA,MACjD,UAAA,EAAY,WAAA;AAAA,MACZ,cAAA,EAAgB;AAAA,KACjB,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,gBAAA,CAAA,EAAoB;AAAA,MACzD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,SAAA,CAAU,EAAE,SAAS,MAAA,EAAQ,MAAA,EAAAA,SAAQ,CAAA;AAAA,MAChD,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,UAAU,KAAK,CAAA;AAAA;AAChC,KACD,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd,CAAA;AAEA,EAAA,MAAM,MAAA,GAAuC,OAAM,OAAA,KAAW;AAC5D,IAAA,MAAM,EAAE,WAAA,EAAa,GAAG,IAAA,EAAK,GAAI,OAAA;AAEjC,IAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,UAAA,CAAW,cAAc,CAAA;AAEzD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,KAAK,qBAAA,CAAsB;AAAA,MACjD,UAAA,EAAY,WAAA;AAAA,MACZ,cAAA,EAAgB;AAAA,KACjB,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,aAAA,CAAA,EAAiB;AAAA,MACtD,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,GAAG,MAAM,CAAA;AAAA,MAChC,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,UAAU,KAAK,CAAA;AAAA;AAChC,KACD,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,IAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AAEtB,IAAA,OAAO;AAAA,MACL;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AAEO,MAAM,wBAITC,iCAAA,CAAqC;AAAA,EACvC,EAAA,EAAI,mCAAA;AAAA,EACJ,cAAA,EAAgB,OAAM,OAAA,KACpBC,qCAAA,CAAqB;AAAA,IACnB,OAAA;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,QAAQC,6BAAA,CAAa,UAAA;AAAA,MACrB,MAAMA,6BAAA,CAAa,IAAA;AAAA,MACnB,WAAWA,6BAAA,CAAa;AAAA,KAC1B;AAAA,IACA,OAAA,EAAS,OAAM,OAAA,KAAW;AACxB,MAAA,OAAO,yBAAyB,OAAO,CAAA;AAAA,IACzC;AAAA,GACD;AACL,CAAC;;;;"}
@@ -1,10 +1,11 @@
1
1
  'use strict';
2
2
 
3
- const getUser = async (cache, userEntityRef, credentials, catalog) => {
3
+ const getUser = async (cache, userEntityRef, catalog, auth) => {
4
4
  const cached = await cache.get(userEntityRef);
5
5
  if (cached) {
6
6
  return JSON.parse(String(cached));
7
7
  }
8
+ const credentials = await auth.getOwnServiceCredentials();
8
9
  const user = await catalog.getEntityByRef(userEntityRef, {
9
10
  credentials
10
11
  });
@@ -1 +1 @@
1
- {"version":3,"file":"get-user.cjs.js","sources":["../../src/utils/get-user.ts"],"sourcesContent":["import {\n BackstageCredentials,\n CacheService,\n} from '@backstage/backend-plugin-api';\nimport { UserEntity } from '@backstage/catalog-model';\nimport { CatalogService } from '@backstage/plugin-catalog-node';\n\nexport const getUser = async (\n cache: CacheService,\n userEntityRef: string,\n credentials: BackstageCredentials,\n catalog: CatalogService,\n) => {\n const cached = await cache.get(userEntityRef);\n\n if (cached) {\n return JSON.parse(String(cached));\n }\n\n const user = (await catalog.getEntityByRef(userEntityRef, {\n credentials,\n })) as UserEntity | undefined;\n await cache.set(userEntityRef, JSON.stringify(user));\n\n return user;\n};\n"],"names":[],"mappings":";;AAOO,MAAM,OAAA,GAAU,OACrB,KAAA,EACA,aAAA,EACA,aACA,OAAA,KACG;AACH,EAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,GAAA,CAAI,aAAa,CAAA;AAE5C,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,EAClC;AAEA,EAAA,MAAM,IAAA,GAAQ,MAAM,OAAA,CAAQ,cAAA,CAAe,aAAA,EAAe;AAAA,IACxD;AAAA,GACD,CAAA;AACD,EAAA,MAAM,MAAM,GAAA,CAAI,aAAA,EAAe,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAEnD,EAAA,OAAO,IAAA;AACT;;;;"}
1
+ {"version":3,"file":"get-user.cjs.js","sources":["../../src/utils/get-user.ts"],"sourcesContent":["import { AuthService, CacheService } from '@backstage/backend-plugin-api';\nimport { UserEntity } from '@backstage/catalog-model';\nimport { CatalogService } from '@backstage/plugin-catalog-node';\n\nexport const getUser = async (\n cache: CacheService,\n userEntityRef: string,\n catalog: CatalogService,\n auth: AuthService,\n): Promise<UserEntity | undefined> => {\n const cached = await cache.get(userEntityRef);\n\n if (cached) {\n return JSON.parse(String(cached));\n }\n\n const credentials = await auth.getOwnServiceCredentials();\n\n const user = (await catalog.getEntityByRef(userEntityRef, {\n credentials,\n })) as UserEntity | undefined;\n await cache.set(userEntityRef, JSON.stringify(user));\n\n return user;\n};\n"],"names":[],"mappings":";;AAIO,MAAM,OAAA,GAAU,OACrB,KAAA,EACA,aAAA,EACA,SACA,IAAA,KACoC;AACpC,EAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,GAAA,CAAI,aAAa,CAAA;AAE5C,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,EAClC;AAEA,EAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,wBAAA,EAAyB;AAExD,EAAA,MAAM,IAAA,GAAQ,MAAM,OAAA,CAAQ,cAAA,CAAe,aAAA,EAAe;AAAA,IACxD;AAAA,GACD,CAAA;AACD,EAAA,MAAM,MAAM,GAAA,CAAI,aAAA,EAAe,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAEnD,EAAA,OAAO,IAAA;AACT;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sweetoburrito/backstage-plugin-ai-assistant-node",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Node.js library for the ai-assistant plugin",
6
6
  "main": "dist/index.cjs.js",
@@ -39,7 +39,8 @@
39
39
  "@backstage/catalog-model": "backstage:^",
40
40
  "@backstage/plugin-catalog-node": "backstage:^",
41
41
  "@langchain/core": "^0.3.72",
42
- "@sweetoburrito/backstage-plugin-ai-assistant-common": "^0.7.0",
42
+ "@langchain/mcp-adapters": "^1.0.3",
43
+ "@sweetoburrito/backstage-plugin-ai-assistant-common": "^0.8.0",
43
44
  "zod": "^4.1.11"
44
45
  },
45
46
  "typesVersions": {