@sweetoburrito/backstage-plugin-ai-assistant-backend 0.17.0 → 0.18.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.
- package/README.md +24 -0
- package/config.d.ts +22 -0
- package/dist/services/tools.cjs.js +86 -7
- package/dist/services/tools.cjs.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -26,3 +26,27 @@ package with `yarn start`. It is a limited setup that is most convenient when
|
|
|
26
26
|
developing the plugin backend itself.
|
|
27
27
|
|
|
28
28
|
If you want to run the entire project, including the frontend, run `yarn start` from the root directory.
|
|
29
|
+
|
|
30
|
+
## Tool Configuration
|
|
31
|
+
|
|
32
|
+
You can control tool behavior for all users through backend config:
|
|
33
|
+
|
|
34
|
+
- `aiAssistant.tools.core`: tools that are always enabled and not user-toggleable.
|
|
35
|
+
- `aiAssistant.tools.defaultEnabled`: tools enabled by default for users who do not yet have saved `user-tools` settings.
|
|
36
|
+
|
|
37
|
+
Both settings accept entries with `provider` and `name`:
|
|
38
|
+
|
|
39
|
+
```yaml
|
|
40
|
+
aiAssistant:
|
|
41
|
+
tools:
|
|
42
|
+
core:
|
|
43
|
+
- provider: core
|
|
44
|
+
name: search-knowledge-base
|
|
45
|
+
defaultEnabled:
|
|
46
|
+
- provider: core
|
|
47
|
+
name: search-knowledge-base
|
|
48
|
+
- provider: mcp server:foo
|
|
49
|
+
name: foo_someTool
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
For MCP tools, use provider format `mcp server:<server-name>`.
|
package/config.d.ts
CHANGED
|
@@ -45,6 +45,28 @@ export interface Config {
|
|
|
45
45
|
maxChunkProcessingSize?: number;
|
|
46
46
|
};
|
|
47
47
|
};
|
|
48
|
+
tools?: {
|
|
49
|
+
/**
|
|
50
|
+
* List of tools that should always be enabled and not user-toggleable.
|
|
51
|
+
*
|
|
52
|
+
* For MCP tools, provider format is: `mcp server:<server-name>`.
|
|
53
|
+
*/
|
|
54
|
+
core?: Array<{
|
|
55
|
+
provider: string;
|
|
56
|
+
name: string;
|
|
57
|
+
}>;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* List of tools enabled by default for users that don't have existing
|
|
61
|
+
* `user-tools` settings.
|
|
62
|
+
*
|
|
63
|
+
* For MCP tools, provider format is: `mcp server:<server-name>`.
|
|
64
|
+
*/
|
|
65
|
+
defaultEnabled?: Array<{
|
|
66
|
+
provider: string;
|
|
67
|
+
name: string;
|
|
68
|
+
}>;
|
|
69
|
+
};
|
|
48
70
|
mcp: {
|
|
49
71
|
/**
|
|
50
72
|
* @visibility secret
|
|
@@ -6,10 +6,59 @@ var tools = require('@langchain/core/tools');
|
|
|
6
6
|
|
|
7
7
|
const createToolsService = async ({
|
|
8
8
|
mcp,
|
|
9
|
-
auth
|
|
9
|
+
auth,
|
|
10
|
+
config
|
|
10
11
|
}) => {
|
|
11
12
|
const tools$1 = [];
|
|
12
13
|
const coreTools = [];
|
|
14
|
+
const areSameTools = (left, right) => left.name === right.name && left.provider === right.provider;
|
|
15
|
+
const getConfiguredTools = (path) => {
|
|
16
|
+
const configuredTools = config.getOptionalConfigArray(path);
|
|
17
|
+
if (!configuredTools) {
|
|
18
|
+
return void 0;
|
|
19
|
+
}
|
|
20
|
+
return configuredTools.map((tool) => ({
|
|
21
|
+
name: tool.getString("name"),
|
|
22
|
+
provider: tool.getString("provider")
|
|
23
|
+
}));
|
|
24
|
+
};
|
|
25
|
+
const uniqTools = (allTools) => {
|
|
26
|
+
const toolMap = new Map(
|
|
27
|
+
allTools.map((tool) => [`${tool.provider}:${tool.name}`, tool])
|
|
28
|
+
);
|
|
29
|
+
return Array.from(toolMap.values());
|
|
30
|
+
};
|
|
31
|
+
const resolveCoreTools = (allTools) => {
|
|
32
|
+
const configuredCoreTools = getConfiguredTools("aiAssistant.tools.core");
|
|
33
|
+
if (configuredCoreTools === void 0) {
|
|
34
|
+
return coreTools;
|
|
35
|
+
}
|
|
36
|
+
return allTools.filter(
|
|
37
|
+
(tool) => configuredCoreTools.some(
|
|
38
|
+
(configuredTool) => areSameTools(configuredTool, {
|
|
39
|
+
name: tool.name,
|
|
40
|
+
provider: tool.provider
|
|
41
|
+
})
|
|
42
|
+
)
|
|
43
|
+
);
|
|
44
|
+
};
|
|
45
|
+
const resolveDefaultEnabledTools = (allTools, resolvedCore) => {
|
|
46
|
+
const configuredDefaultTools = getConfiguredTools(
|
|
47
|
+
"aiAssistant.tools.defaultEnabled"
|
|
48
|
+
);
|
|
49
|
+
if (configuredDefaultTools === void 0) {
|
|
50
|
+
return resolvedCore;
|
|
51
|
+
}
|
|
52
|
+
const resolvedConfiguredDefaultTools = allTools.filter(
|
|
53
|
+
(tool) => configuredDefaultTools.some(
|
|
54
|
+
(configuredTool) => areSameTools(configuredTool, {
|
|
55
|
+
name: tool.name,
|
|
56
|
+
provider: tool.provider
|
|
57
|
+
})
|
|
58
|
+
)
|
|
59
|
+
);
|
|
60
|
+
return uniqTools(resolvedConfiguredDefaultTools.concat(resolvedCore));
|
|
61
|
+
};
|
|
13
62
|
const registerTools = async (providers) => {
|
|
14
63
|
tools$1.push(...providers);
|
|
15
64
|
};
|
|
@@ -20,12 +69,30 @@ const createToolsService = async ({
|
|
|
20
69
|
credentials
|
|
21
70
|
}) => {
|
|
22
71
|
const mcpTools = await mcp.getTools(credentials);
|
|
23
|
-
const availableTools = tools$1.concat(mcpTools).concat(coreTools)
|
|
72
|
+
const availableTools = uniqTools(tools$1.concat(mcpTools).concat(coreTools));
|
|
73
|
+
const resolvedCoreTools = resolveCoreTools(availableTools);
|
|
74
|
+
const resolvedDefaultEnabledTools = resolveDefaultEnabledTools(
|
|
75
|
+
availableTools,
|
|
76
|
+
resolvedCoreTools
|
|
77
|
+
);
|
|
78
|
+
const availableUserTools = availableTools.map((tool) => ({
|
|
24
79
|
name: tool.name,
|
|
25
80
|
provider: tool.provider,
|
|
26
|
-
description: tool.description
|
|
81
|
+
description: tool.description,
|
|
82
|
+
isCore: resolvedCoreTools.some(
|
|
83
|
+
(coreTool) => areSameTools(coreTool, {
|
|
84
|
+
name: tool.name,
|
|
85
|
+
provider: tool.provider
|
|
86
|
+
})
|
|
87
|
+
),
|
|
88
|
+
enabledByDefault: resolvedDefaultEnabledTools.some(
|
|
89
|
+
(defaultTool) => areSameTools(defaultTool, {
|
|
90
|
+
name: tool.name,
|
|
91
|
+
provider: tool.provider
|
|
92
|
+
})
|
|
93
|
+
)
|
|
27
94
|
}));
|
|
28
|
-
return
|
|
95
|
+
return availableUserTools;
|
|
29
96
|
};
|
|
30
97
|
const getPrincipalTools = async ({
|
|
31
98
|
credentials,
|
|
@@ -36,8 +103,19 @@ const createToolsService = async ({
|
|
|
36
103
|
return tools$1.filter(filter).map((t) => new tools.DynamicStructuredTool(t));
|
|
37
104
|
}
|
|
38
105
|
const mcpTools = await mcp.getTools(credentials);
|
|
39
|
-
const
|
|
40
|
-
const
|
|
106
|
+
const availableTools = uniqTools(tools$1.concat(mcpTools).concat(coreTools));
|
|
107
|
+
const resolvedCoreTools = resolveCoreTools(availableTools);
|
|
108
|
+
const userSelectableTools = availableTools.filter(
|
|
109
|
+
(tool) => !resolvedCoreTools.some(
|
|
110
|
+
(coreTool) => areSameTools(coreTool, {
|
|
111
|
+
name: tool.name,
|
|
112
|
+
provider: tool.provider
|
|
113
|
+
})
|
|
114
|
+
)
|
|
115
|
+
);
|
|
116
|
+
const allTools = uniqTools(
|
|
117
|
+
userSelectableTools.filter(filter).concat(resolvedCoreTools)
|
|
118
|
+
);
|
|
41
119
|
return allTools.map((t) => new tools.DynamicStructuredTool(t));
|
|
42
120
|
};
|
|
43
121
|
return {
|
|
@@ -53,7 +131,8 @@ const toolsServiceRef = backendPluginApi.createServiceRef({
|
|
|
53
131
|
service,
|
|
54
132
|
deps: {
|
|
55
133
|
mcp: index.mcpServiceRef,
|
|
56
|
-
auth: backendPluginApi.coreServices.auth
|
|
134
|
+
auth: backendPluginApi.coreServices.auth,
|
|
135
|
+
config: backendPluginApi.coreServices.rootConfig
|
|
57
136
|
},
|
|
58
137
|
factory: async (options) => {
|
|
59
138
|
return createToolsService(options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.cjs.js","sources":["../../src/services/tools.ts"],"sourcesContent":["import {\n BackstageCredentials,\n coreServices,\n createServiceFactory,\n createServiceRef,\n ServiceRef,\n AuthService,\n} from '@backstage/backend-plugin-api';\nimport {\n Tool,\n EnabledTool,\n} from '@sweetoburrito/backstage-plugin-ai-assistant-common';\nimport { McpService, mcpServiceRef } from './mcp';\nimport { DynamicStructuredTool } from '@langchain/core/tools';\n\nexport type ToolsService = {\n registerTools: (tools: Tool[]) => void;\n registerCoreTools: (tools: Tool[]) => void;\n getAvailableUserTools: (options: {\n credentials: BackstageCredentials;\n }) => Promise<EnabledTool[]>;\n getPrincipalTools: (options: {\n credentials: BackstageCredentials;\n filter?: (tool: Tool) => boolean;\n }) => Promise<DynamicStructuredTool[]>;\n};\n\nexport type CreateToolsServiceOptions = {\n mcp: McpService;\n auth: AuthService;\n};\n\nconst createToolsService = async ({\n mcp,\n auth,\n}: CreateToolsServiceOptions): Promise<ToolsService> => {\n const tools: Tool[] = [];\n const coreTools: Tool[] = [];\n\n const registerTools: ToolsService['registerTools'] = async providers => {\n tools.push(...providers);\n };\n\n const registerCoreTools: ToolsService['registerCoreTools'] =\n async providers => {\n coreTools.push(...providers.map(tool => ({ ...tool, provider: 'core' })));\n };\n\n const getAvailableUserTools: ToolsService['getAvailableUserTools'] = async ({\n credentials,\n }) => {\n const mcpTools = await mcp.getTools(credentials);\n\n const availableTools: EnabledTool[] = tools\n .concat(mcpTools)\n .concat(coreTools)\n .map(tool => ({\n name: tool.name,\n provider: tool.provider,\n description: tool.description,\n }));\n\n return availableTools;\n };\n\n const getPrincipalTools: ToolsService['getPrincipalTools'] = async ({\n credentials,\n filter = () => true,\n }) => {\n const isUser = auth.isPrincipal(credentials, 'user');\n\n if (!isUser) {\n return tools.filter(filter).map(t => new DynamicStructuredTool(t));\n }\n\n const mcpTools = await mcp.getTools(credentials);\n\n const userTools = tools.concat(mcpTools);\n\n const allTools: Tool[] = userTools\n .filter(filter)\n .concat(coreTools.filter(filter));\n return allTools.map(t => new DynamicStructuredTool(t));\n };\n\n return {\n registerTools,\n registerCoreTools,\n getAvailableUserTools,\n getPrincipalTools,\n };\n};\n\nexport const toolsServiceRef: ServiceRef<ToolsService, 'plugin', 'singleton'> =\n createServiceRef<ToolsService>({\n id: 'ai-assistant.tools-service',\n defaultFactory: async service =>\n createServiceFactory({\n service,\n deps: {\n mcp: mcpServiceRef,\n auth: coreServices.auth,\n },\n factory: async options => {\n return createToolsService(options);\n },\n }),\n });\n"],"names":["tools","DynamicStructuredTool","createServiceRef","createServiceFactory","mcpServiceRef","coreServices"],"mappings":";;;;;;AAgCA,MAAM,qBAAqB,OAAO;AAAA,EAChC,GAAA;AAAA,EACA;AACF,CAAA,KAAwD;AACtD,EAAA,MAAMA,UAAgB,EAAC;AACvB,EAAA,MAAM,YAAoB,EAAC;AAE3B,EAAA,MAAM,aAAA,GAA+C,OAAM,SAAA,KAAa;AACtE,IAAAA,OAAA,CAAM,IAAA,CAAK,GAAG,SAAS,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,iBAAA,GACJ,OAAM,SAAA,KAAa;AACjB,IAAA,SAAA,CAAU,IAAA,CAAK,GAAG,SAAA,CAAU,GAAA,CAAI,CAAA,IAAA,MAAS,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,MAAA,EAAO,CAAE,CAAC,CAAA;AAAA,EAC1E,CAAA;AAEF,EAAA,MAAM,wBAA+D,OAAO;AAAA,IAC1E;AAAA,GACF,KAAM;AACJ,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA;AAE/C,IAAA,MAAM,cAAA,GAAgCA,QACnC,MAAA,CAAO,QAAQ,EACf,MAAA,CAAO,SAAS,CAAA,CAChB,GAAA,CAAI,CAAA,IAAA,MAAS;AAAA,MACZ,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,aAAa,IAAA,CAAK;AAAA,KACpB,CAAE,CAAA;AAEJ,IAAA,OAAO,cAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,oBAAuD,OAAO;AAAA,IAClE,WAAA;AAAA,IACA,SAAS,MAAM;AAAA,GACjB,KAAM;AACJ,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,WAAA,EAAa,MAAM,CAAA;AAEnD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAOA,OAAA,CAAM,OAAO,MAAM,CAAA,CAAE,IAAI,CAAA,CAAA,KAAK,IAAIC,2BAAA,CAAsB,CAAC,CAAC,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA;AAE/C,IAAA,MAAM,SAAA,GAAYD,OAAA,CAAM,MAAA,CAAO,QAAQ,CAAA;AAEvC,IAAA,MAAM,QAAA,GAAmB,UACtB,MAAA,CAAO,MAAM,EACb,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,MAAM,CAAC,CAAA;AAClC,IAAA,OAAO,SAAS,GAAA,CAAI,CAAA,CAAA,KAAK,IAAIC,2BAAA,CAAsB,CAAC,CAAC,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA,iBAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AAEO,MAAM,kBACXC,iCAAA,CAA+B;AAAA,EAC7B,EAAA,EAAI,4BAAA;AAAA,EACJ,cAAA,EAAgB,OAAM,OAAA,KACpBC,qCAAA,CAAqB;AAAA,IACnB,OAAA;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,GAAA,EAAKC,mBAAA;AAAA,MACL,MAAMC,6BAAA,CAAa;AAAA,KACrB;AAAA,IACA,OAAA,EAAS,OAAM,OAAA,KAAW;AACxB,MAAA,OAAO,mBAAmB,OAAO,CAAA;AAAA,IACnC;AAAA,GACD;AACL,CAAC;;;;"}
|
|
1
|
+
{"version":3,"file":"tools.cjs.js","sources":["../../src/services/tools.ts"],"sourcesContent":["import {\n BackstageCredentials,\n coreServices,\n createServiceFactory,\n createServiceRef,\n ServiceRef,\n AuthService,\n RootConfigService,\n} from '@backstage/backend-plugin-api';\nimport {\n Tool,\n EnabledTool,\n} from '@sweetoburrito/backstage-plugin-ai-assistant-common';\nimport { McpService, mcpServiceRef } from './mcp';\nimport { DynamicStructuredTool } from '@langchain/core/tools';\n\nexport type ToolsService = {\n registerTools: (tools: Tool[]) => void;\n registerCoreTools: (tools: Tool[]) => void;\n getAvailableUserTools: (options: {\n credentials: BackstageCredentials;\n }) => Promise<EnabledTool[]>;\n getPrincipalTools: (options: {\n credentials: BackstageCredentials;\n filter?: (tool: Tool) => boolean;\n }) => Promise<DynamicStructuredTool[]>;\n};\n\nexport type CreateToolsServiceOptions = {\n mcp: McpService;\n auth: AuthService;\n config: RootConfigService;\n};\n\ntype ToolSelector = Pick<EnabledTool, 'name' | 'provider'>;\n\nconst createToolsService = async ({\n mcp,\n auth,\n config,\n}: CreateToolsServiceOptions): Promise<ToolsService> => {\n const tools: Tool[] = [];\n const coreTools: Tool[] = [];\n\n const areSameTools = (left: ToolSelector, right: ToolSelector) =>\n left.name === right.name && left.provider === right.provider;\n\n const getConfiguredTools = (path: string): ToolSelector[] | undefined => {\n const configuredTools = config.getOptionalConfigArray(path);\n\n if (!configuredTools) {\n return undefined;\n }\n\n return configuredTools.map(tool => ({\n name: tool.getString('name'),\n provider: tool.getString('provider'),\n }));\n };\n\n const uniqTools = (allTools: Tool[]): Tool[] => {\n const toolMap = new Map(\n allTools.map(tool => [`${tool.provider}:${tool.name}`, tool]),\n );\n\n return Array.from(toolMap.values());\n };\n\n const resolveCoreTools = (allTools: Tool[]): Tool[] => {\n const configuredCoreTools = getConfiguredTools('aiAssistant.tools.core');\n\n if (configuredCoreTools === undefined) {\n return coreTools;\n }\n\n return allTools.filter(tool =>\n configuredCoreTools.some(configuredTool =>\n areSameTools(configuredTool, {\n name: tool.name,\n provider: tool.provider,\n }),\n ),\n );\n };\n\n const resolveDefaultEnabledTools = (\n allTools: Tool[],\n resolvedCore: Tool[],\n ) => {\n const configuredDefaultTools = getConfiguredTools(\n 'aiAssistant.tools.defaultEnabled',\n );\n\n if (configuredDefaultTools === undefined) {\n return resolvedCore;\n }\n\n const resolvedConfiguredDefaultTools = allTools.filter(tool =>\n configuredDefaultTools.some(configuredTool =>\n areSameTools(configuredTool, {\n name: tool.name,\n provider: tool.provider,\n }),\n ),\n );\n\n return uniqTools(resolvedConfiguredDefaultTools.concat(resolvedCore));\n };\n\n const registerTools: ToolsService['registerTools'] = async providers => {\n tools.push(...providers);\n };\n\n const registerCoreTools: ToolsService['registerCoreTools'] =\n async providers => {\n coreTools.push(...providers.map(tool => ({ ...tool, provider: 'core' })));\n };\n\n const getAvailableUserTools: ToolsService['getAvailableUserTools'] = async ({\n credentials,\n }) => {\n const mcpTools = await mcp.getTools(credentials);\n\n const availableTools = uniqTools(tools.concat(mcpTools).concat(coreTools));\n\n const resolvedCoreTools = resolveCoreTools(availableTools);\n const resolvedDefaultEnabledTools = resolveDefaultEnabledTools(\n availableTools,\n resolvedCoreTools,\n );\n\n const availableUserTools: EnabledTool[] = availableTools.map(tool => ({\n name: tool.name,\n provider: tool.provider,\n description: tool.description,\n isCore: resolvedCoreTools.some(coreTool =>\n areSameTools(coreTool, {\n name: tool.name,\n provider: tool.provider,\n }),\n ),\n enabledByDefault: resolvedDefaultEnabledTools.some(defaultTool =>\n areSameTools(defaultTool, {\n name: tool.name,\n provider: tool.provider,\n }),\n ),\n }));\n\n return availableUserTools;\n };\n\n const getPrincipalTools: ToolsService['getPrincipalTools'] = async ({\n credentials,\n filter = () => true,\n }) => {\n const isUser = auth.isPrincipal(credentials, 'user');\n\n if (!isUser) {\n return tools.filter(filter).map(t => new DynamicStructuredTool(t));\n }\n\n const mcpTools = await mcp.getTools(credentials);\n\n const availableTools = uniqTools(tools.concat(mcpTools).concat(coreTools));\n const resolvedCoreTools = resolveCoreTools(availableTools);\n\n const userSelectableTools = availableTools.filter(\n tool =>\n !resolvedCoreTools.some(coreTool =>\n areSameTools(coreTool, {\n name: tool.name,\n provider: tool.provider,\n }),\n ),\n );\n\n const allTools: Tool[] = uniqTools(\n userSelectableTools.filter(filter).concat(resolvedCoreTools),\n );\n\n return allTools.map(t => new DynamicStructuredTool(t));\n };\n\n return {\n registerTools,\n registerCoreTools,\n getAvailableUserTools,\n getPrincipalTools,\n };\n};\n\nexport const toolsServiceRef: ServiceRef<ToolsService, 'plugin', 'singleton'> =\n createServiceRef<ToolsService>({\n id: 'ai-assistant.tools-service',\n defaultFactory: async service =>\n createServiceFactory({\n service,\n deps: {\n mcp: mcpServiceRef,\n auth: coreServices.auth,\n config: coreServices.rootConfig,\n },\n factory: async options => {\n return createToolsService(options);\n },\n }),\n });\n"],"names":["tools","DynamicStructuredTool","createServiceRef","createServiceFactory","mcpServiceRef","coreServices"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sweetoburrito/backstage-plugin-ai-assistant-backend",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"@langchain/core": "^1.1.19",
|
|
43
43
|
"@langchain/mcp-adapters": "^1.1.2",
|
|
44
44
|
"@langchain/textsplitters": "^1.0.1",
|
|
45
|
-
"@sweetoburrito/backstage-plugin-ai-assistant-common": "^0.
|
|
46
|
-
"@sweetoburrito/backstage-plugin-ai-assistant-node": "^0.11.
|
|
45
|
+
"@sweetoburrito/backstage-plugin-ai-assistant-common": "^0.10.0",
|
|
46
|
+
"@sweetoburrito/backstage-plugin-ai-assistant-node": "^0.11.1",
|
|
47
47
|
"express": "^4.17.1",
|
|
48
48
|
"express-promise-router": "^4.1.0",
|
|
49
49
|
"knex": "^3.1.0",
|