From cf19564d5395d58e98417405fa36553f86530a36 Mon Sep 17 00:00:00 2001 From: Niall Thomson Date: Mon, 9 Dec 2024 12:54:05 -0700 Subject: [PATCH] feat: Add Generative AI plugin (#313) --- README.md | 1 + packages/app/package.json | 1 + packages/app/src/App.tsx | 2 + packages/app/src/components/Root/Root.tsx | 6 + packages/backend/package.json | 2 + packages/backend/src/index.ts | 3 + plugins/genai/README.md | 187 + plugins/genai/agent-langgraph/.eslintrc.js | 1 + plugins/genai/agent-langgraph/README.md | 56 + plugins/genai/agent-langgraph/config.d.ts | 67 + plugins/genai/agent-langgraph/package.json | 49 + .../src/LangGraphReactAgentType.ts | 271 ++ .../agent-langgraph/src/config/config.ts | 91 + .../genai/agent-langgraph/src/config/index.ts | 15 + .../genai/agent-langgraph/src/config/types.ts | 42 + plugins/genai/agent-langgraph/src/index.ts | 14 + plugins/genai/agent-langgraph/src/module.ts | 50 + .../genai/agent-langgraph/src/util/index.ts | 15 + .../agent-langgraph/src/util/modifier.ts | 56 + .../agent-langgraph/src/util/transform.ts | 66 + plugins/genai/backend/.eslintrc.js | 1 + plugins/genai/backend/README.md | 3 + plugins/genai/backend/config.d.ts | 37 + plugins/genai/backend/dev/index.ts | 8 + plugins/genai/backend/package.json | 69 + plugins/genai/backend/src/agent/Agent.test.ts | 302 ++ plugins/genai/backend/src/agent/Agent.ts | 117 + plugins/genai/backend/src/config/config.ts | 55 + plugins/genai/backend/src/index.ts | 15 + plugins/genai/backend/src/plugin.ts | 108 + .../src/service/DefaultAgentService.test.ts | 136 + .../src/service/DefaultAgentService.ts | 176 + plugins/genai/backend/src/service/router.ts | 121 + plugins/genai/backend/src/service/types.ts | 37 + plugins/genai/backend/src/setupTests.ts | 14 + plugins/genai/backend/src/tools/Toolkit.ts | 43 + .../backend/src/tools/catalogEntityTool.ts | 64 + .../backend/src/tools/catalogSearchTool.ts | 55 + plugins/genai/backend/src/tools/index.ts | 16 + .../backend/src/tools/invokeAgentTool.ts | 57 + .../backend/src/tools/techDocsSearchTool.ts | 56 + plugins/genai/common/.eslintrc.js | 1 + plugins/genai/common/README.md | 3 + plugins/genai/common/package.json | 49 + plugins/genai/common/src/client.ts | 59 + plugins/genai/common/src/events.ts | 36 + plugins/genai/common/src/index.ts | 16 + plugins/genai/common/src/setupTests.ts | 14 + plugins/genai/common/src/types.ts | 31 + plugins/genai/docs/agent-types.md | 18 + plugins/genai/docs/prompting-tips.md | 63 + plugins/genai/docs/tools.md | 45 + plugins/genai/frontend/.eslintrc.js | 1 + plugins/genai/frontend/README.md | 3 + plugins/genai/frontend/config.d.ts | 25 + plugins/genai/frontend/dev/index.tsx | 17 + plugins/genai/frontend/package.json | 66 + plugins/genai/frontend/src/api/AgentApi.ts | 23 + .../genai/frontend/src/api/AgentApiClient.ts | 90 + plugins/genai/frontend/src/api/index.ts | 15 + .../src/components/AgentPage/AgentPage.tsx | 151 + .../src/components/AgentPage/index.ts | 14 + .../ChatHistoryComponent.tsx | 231 ++ .../ChatHistoryComponent/ToolsModal.tsx | 96 + .../components/ChatHistoryComponent/index.ts | 14 + .../ChatInputComponent/ChatInputComponent.tsx | 97 + .../components/ChatInputComponent/index.ts | 14 + .../ChatInputComponent/style.module.css | 4 + .../genai/frontend/src/components/index.ts | 14 + .../genai/frontend/src/components/types.ts | 23 + plugins/genai/frontend/src/index.ts | 14 + plugins/genai/frontend/src/mocks/index.ts | 12 + plugins/genai/frontend/src/plugin.test.ts | 20 + plugins/genai/frontend/src/plugin.ts | 45 + plugins/genai/frontend/src/routes.ts | 19 + plugins/genai/frontend/src/setupTests.ts | 19 + plugins/genai/node/.eslintrc.js | 1 + plugins/genai/node/package.json | 52 + plugins/genai/node/src/extensions.ts | 34 + plugins/genai/node/src/index.ts | 15 + plugins/genai/node/src/setupTests.ts | 14 + plugins/genai/node/src/types.ts | 62 + yarn.lock | 3613 +++++++++++++++-- 83 files changed, 7411 insertions(+), 227 deletions(-) create mode 100644 plugins/genai/README.md create mode 100644 plugins/genai/agent-langgraph/.eslintrc.js create mode 100644 plugins/genai/agent-langgraph/README.md create mode 100644 plugins/genai/agent-langgraph/config.d.ts create mode 100644 plugins/genai/agent-langgraph/package.json create mode 100644 plugins/genai/agent-langgraph/src/LangGraphReactAgentType.ts create mode 100644 plugins/genai/agent-langgraph/src/config/config.ts create mode 100644 plugins/genai/agent-langgraph/src/config/index.ts create mode 100644 plugins/genai/agent-langgraph/src/config/types.ts create mode 100644 plugins/genai/agent-langgraph/src/index.ts create mode 100644 plugins/genai/agent-langgraph/src/module.ts create mode 100644 plugins/genai/agent-langgraph/src/util/index.ts create mode 100644 plugins/genai/agent-langgraph/src/util/modifier.ts create mode 100644 plugins/genai/agent-langgraph/src/util/transform.ts create mode 100644 plugins/genai/backend/.eslintrc.js create mode 100644 plugins/genai/backend/README.md create mode 100644 plugins/genai/backend/config.d.ts create mode 100644 plugins/genai/backend/dev/index.ts create mode 100644 plugins/genai/backend/package.json create mode 100644 plugins/genai/backend/src/agent/Agent.test.ts create mode 100644 plugins/genai/backend/src/agent/Agent.ts create mode 100644 plugins/genai/backend/src/config/config.ts create mode 100644 plugins/genai/backend/src/index.ts create mode 100644 plugins/genai/backend/src/plugin.ts create mode 100644 plugins/genai/backend/src/service/DefaultAgentService.test.ts create mode 100644 plugins/genai/backend/src/service/DefaultAgentService.ts create mode 100644 plugins/genai/backend/src/service/router.ts create mode 100644 plugins/genai/backend/src/service/types.ts create mode 100644 plugins/genai/backend/src/setupTests.ts create mode 100644 plugins/genai/backend/src/tools/Toolkit.ts create mode 100644 plugins/genai/backend/src/tools/catalogEntityTool.ts create mode 100644 plugins/genai/backend/src/tools/catalogSearchTool.ts create mode 100644 plugins/genai/backend/src/tools/index.ts create mode 100644 plugins/genai/backend/src/tools/invokeAgentTool.ts create mode 100644 plugins/genai/backend/src/tools/techDocsSearchTool.ts create mode 100644 plugins/genai/common/.eslintrc.js create mode 100644 plugins/genai/common/README.md create mode 100644 plugins/genai/common/package.json create mode 100644 plugins/genai/common/src/client.ts create mode 100644 plugins/genai/common/src/events.ts create mode 100644 plugins/genai/common/src/index.ts create mode 100644 plugins/genai/common/src/setupTests.ts create mode 100644 plugins/genai/common/src/types.ts create mode 100644 plugins/genai/docs/agent-types.md create mode 100644 plugins/genai/docs/prompting-tips.md create mode 100644 plugins/genai/docs/tools.md create mode 100644 plugins/genai/frontend/.eslintrc.js create mode 100644 plugins/genai/frontend/README.md create mode 100644 plugins/genai/frontend/config.d.ts create mode 100644 plugins/genai/frontend/dev/index.tsx create mode 100644 plugins/genai/frontend/package.json create mode 100644 plugins/genai/frontend/src/api/AgentApi.ts create mode 100644 plugins/genai/frontend/src/api/AgentApiClient.ts create mode 100644 plugins/genai/frontend/src/api/index.ts create mode 100644 plugins/genai/frontend/src/components/AgentPage/AgentPage.tsx create mode 100644 plugins/genai/frontend/src/components/AgentPage/index.ts create mode 100644 plugins/genai/frontend/src/components/ChatHistoryComponent/ChatHistoryComponent.tsx create mode 100644 plugins/genai/frontend/src/components/ChatHistoryComponent/ToolsModal.tsx create mode 100644 plugins/genai/frontend/src/components/ChatHistoryComponent/index.ts create mode 100644 plugins/genai/frontend/src/components/ChatInputComponent/ChatInputComponent.tsx create mode 100644 plugins/genai/frontend/src/components/ChatInputComponent/index.ts create mode 100644 plugins/genai/frontend/src/components/ChatInputComponent/style.module.css create mode 100644 plugins/genai/frontend/src/components/index.ts create mode 100644 plugins/genai/frontend/src/components/types.ts create mode 100644 plugins/genai/frontend/src/index.ts create mode 100644 plugins/genai/frontend/src/mocks/index.ts create mode 100644 plugins/genai/frontend/src/plugin.test.ts create mode 100644 plugins/genai/frontend/src/plugin.ts create mode 100644 plugins/genai/frontend/src/routes.ts create mode 100644 plugins/genai/frontend/src/setupTests.ts create mode 100644 plugins/genai/node/.eslintrc.js create mode 100644 plugins/genai/node/package.json create mode 100644 plugins/genai/node/src/extensions.ts create mode 100644 plugins/genai/node/src/index.ts create mode 100644 plugins/genai/node/src/setupTests.ts create mode 100644 plugins/genai/node/src/types.ts diff --git a/README.md b/README.md index d81a92e..d545083 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ For detailed documentation regarding each plugin please see below: | AWS CodePipeline | [Link](./plugins/codepipeline/README.md) | Show the status of AWS CodePipeline pipelines on the entity page. | | AWS CodeBuild | [Link](./plugins/codebuild/README.md) | Show the status of AWS CodeBuild projects on the entity page. | | AWS Config catalog module | [Link](./plugins/core/catalog-config/README.md) | Module that implements an entity provider to ingest AWS resources in to the Backstage catalog. | +| Generative AI | [Link](./plugins/genai/README.md) | Build assistants powered by Generative AI | | Cost Insights for AWS | [Link](./plugins/cost-insights/README.md) | An implementation of the Cost Insights plugin that provides AWS cost information | ## Security diff --git a/packages/app/package.json b/packages/app/package.json index 23f8c7c..0e46c84 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -18,6 +18,7 @@ "@aws/aws-codebuild-plugin-for-backstage": "workspace:^", "@aws/aws-codepipeline-plugin-for-backstage": "workspace:^", "@aws/cost-insights-plugin-for-backstage": "workspace:^", + "@aws/genai-plugin-for-backstage": "workspace:^", "@backstage-community/plugin-cost-insights": "^0.12.25", "@backstage-community/plugin-github-actions": "^0.6.16", "@backstage-community/plugin-tech-radar": "^0.7.4", diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index 864ebd2..0916bc9 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -39,6 +39,7 @@ import { RequirePermission } from '@backstage/plugin-permission-react'; import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha'; import { CostInsightsPage } from '@backstage-community/plugin-cost-insights'; import { costInsightsAwsPlugin } from '@aws/cost-insights-plugin-for-backstage'; +import { AgentChatPage } from '@aws/genai-plugin-for-backstage'; const app = createApp({ apis, @@ -113,6 +114,7 @@ const routes = ( } /> } /> } /> + } /> ); diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx index 592f1e7..06430e3 100644 --- a/packages/app/src/components/Root/Root.tsx +++ b/packages/app/src/components/Root/Root.tsx @@ -23,6 +23,7 @@ import { SidebarSpace, useSidebarOpenState, Link, + ChatIcon, } from '@backstage/core-components'; import MenuIcon from '@material-ui/icons/Menu'; import SearchIcon from '@material-ui/icons/Search'; @@ -70,6 +71,11 @@ export const Root = ({ children }: PropsWithChildren<{}>) => ( + {/* End global nav */} diff --git a/packages/backend/package.json b/packages/backend/package.json index ef339fc..ac4239a 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -21,6 +21,8 @@ "@aws/aws-codepipeline-plugin-for-backstage-backend": "workspace:^", "@aws/aws-core-plugin-for-backstage-scaffolder-actions": "workspace:^", "@aws/cost-insights-plugin-for-backstage-backend": "workspace:^", + "@aws/genai-plugin-for-backstage-backend": "workspace:^", + "@aws/genai-plugin-langgraph-agent-for-backstage": "workspace:^", "@backstage/backend-defaults": "^0.5.3", "@backstage/backend-plugin-api": "^1.0.2", "@backstage/catalog-client": "^1.8.0", diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 26c7929..4799562 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -20,4 +20,7 @@ backend.add(import('@aws/aws-core-plugin-for-backstage-scaffolder-actions')); backend.add(import('@aws/cost-insights-plugin-for-backstage-backend')); +backend.add(import('@aws/genai-plugin-for-backstage-backend')); +backend.add(import('@aws/genai-plugin-langgraph-agent-for-backstage')); + backend.start(); diff --git a/plugins/genai/README.md b/plugins/genai/README.md new file mode 100644 index 0000000..950d83b --- /dev/null +++ b/plugins/genai/README.md @@ -0,0 +1,187 @@ +# Generative AI plugin for Backstage (Experimental) + +This experimental Backstage plugin helps build generative AI assistants in a manner that can leverage the broader Backstage plugin ecosystem. It relies on "tool use" to provide LLMs with access to existing Backstage backend plugins so that the models can access data via Backstage such as the catalog, TechDocs, CI/CD, Kubernetes resources etc. + +Features: + +- Simple conversational chat interface +- Configure multiple AI "agents" for specific purposes +- Modular approach to providing agent implementations +- Provide "tools" to agents through Backstage extensions + +## Before you begin + +Considerations before you explore this plugin: + +1. Its experimental +1. Using this plugin will incur costs from your LLM provider, you are responsible for these +1. This plugin does not build in guardrails or other protective mechanisms against prompt injection, leaking of sensitive information etc. and you are responsible for these + +## Pre-requisites + +This plugin relies on external LLMs, and will generally require models that support tool-use/function-calling. Some examples of models that support this include: + +1. Anthropic Claude >= 3 (Haiku, Sonnet, Opus) +1. OpenAI +1. Meta Llama (certain models) + +The example LangGraph implementation provided can use: + +1. [Amazon Bedrock](https://aws.amazon.com/bedrock/) +1. [OpenAI](https://openai.com/) + +To explore support for other models/providers please raise a GitHub issue. + +## Installation + +NOTE: This guide will use the provided LangGraph implementation. To implement your own agent type see [Extending](#extending). + +This guide assumes that you are familiar with the general [Getting Started](../../docs/getting-started.md) documentation and have assumes you have an existing Backstage application. + +### Backend package + +Install the backend package in your Backstage app: + +```shell +yarn workspace backend add @aws/genai-plugin-for-backstage-backend @aws/genai-plugin-langgraph-agent-for-backstage +``` + +Add the plugin to the `packages/backend/src/index.ts`: + +```typescript +const backend = createBackend(); +// ... +backend.add(import('@aws/genai-plugin-for-backstage-backend')); +backend.add(import('@aws/genai-plugin-langgraph-agent-for-backstage')); +// ... +backend.start(); +``` + +Verify that the backend plugin is running in your Backstage app. You should receive `{"status":"ok"}` when accessing this URL: + +`http:///api/aws-genai/health`. + +### Frontend package + +Install the frontend package in your Backstage app: + +```shell +yarn workspace app add @aws/genai-plugin-for-backstage +``` + +Edit `packages/app/src/App.tsx` to add a route for the chat UI page: + +```typescript +import { AgentChatPage } from '@aws/genai-plugin-for-backstage'; + +{ + /* ... */ +} + +const routes = ( + + /* ... */ + } /> + +); +``` + +Now edit `packages/app/src/components/Root/Root.tsx` to add a menu item: + +```tsx +import { ChatIcon } from '@backstage/core-components'; + +{ + /* ... */ +} +export const Root = ({ children }: PropsWithChildren<{}>) => ( + + + {/* ... */} + }> + {/* ... */} + + {/* ... */} + + {/* ... */} + + {/* ... */} + +); +``` + +The URL `assistant/general` means we're going to be using an agent named `general`, which we'll configure below. + +### Creating your first agent + +This plugin is built around the notion of creating one or more "agents" that can be invoked. These are defined by configuration, so lets configure our first agent. + +Add this to your Backstage configuration file (for example `app-config.yaml`): + +```yaml +genai: + agents: + general: # This matches the URL in the frontend + description: General chat assistant + prompt: > + You are an expert in platform engineering and answer questions in a succinct and easy to understand manner. + + Answers should always be well-structured and use well-formed Markdown. + + The current user is {username} and you can provide that information if asked. + langgraph: + messagesMaxTokens: 150000 # Set based on context of chosen model, prune message history based on number of tokens + # Use appropriate snippet for your model provider + bedrock: + modelId: 'anthropic.claude-3-5-sonnet-20241022-v2:0' + region: us-west-2 + # openai: + # apiKey: ${OPENAI_API_KEY} +``` + +See the [LangGraph agent documentation](./agent-langgraph/) for the full configuration reference. + +Start the Backstage application: + +``` +yarn dev +``` + +Access the application in your browser and select the "Chat Assistant" option in the menu. Ask a general question like "What is Terraform?". + +### Adding tools + +We can provide tools/functions that can be called by agents to retrieve context or perform actions. Tools can be added to the agent using a Backstage extension point and packaged as NPM packages. + +There are several tools built in to the plugin related to core Backstage functionality. The `backstageCatalogSearch`, `backstageEntity` and `backstageTechdocsSearch` tools to give the model basic access to the Backstage catalog and TechDocs documentation. + +Update the previous agent definition to add the `tools` field: + +```yaml +genai: + agents: + general: + description: [...] + prompt: [...] + langgraph: [...] + tool: + - backstageCatalogSearch + - backstageEntity + - backstageTechdocsSearch +``` + +Restart Backstage to reload the configuration and try asking the chat assistant a question related to information in the your Backstage catalog, for example "Summarize from the Backstage catalog". + +NOTE: After Backstage starts locally there can be a delay indexing the catalog and TechDocs for search. You will not receive search results until the index is built. + +## Further reading + +You can view the rest of the documentation to understand how to evolve your chat assistant + +1. Prompting tips: Various tips on how to configure the agent system prompt. [See here](./docs/prompting-tips.md). +1. Tools: Provide tools/functions that can be called by agents to retrieve context or perform actions. [See here](./docs/tools.md). +1. Agent implementation: Provide an implementation for how an agent responds to prompts. [See here](./docs/agent-types.md). diff --git a/plugins/genai/agent-langgraph/.eslintrc.js b/plugins/genai/agent-langgraph/.eslintrc.js new file mode 100644 index 0000000..e2a53a6 --- /dev/null +++ b/plugins/genai/agent-langgraph/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/genai/agent-langgraph/README.md b/plugins/genai/agent-langgraph/README.md new file mode 100644 index 0000000..0a685b5 --- /dev/null +++ b/plugins/genai/agent-langgraph/README.md @@ -0,0 +1,56 @@ +# Generative AI plugin for Backstage - LangGraph Agent Type + +This package implements an agent for the Generative AI plugin for Backstage based on [LangGraph.js](https://github.com/langchain-ai/langgraphjs). + +Features: + +1. [ReAct pattern](https://react-lm.github.io/) to use available tools to answer prompts +1. Choose between Amazon Bedrock or OpenAI as the model provider +1. Integrate with [LangFuse](https://github.com/langfuse/langfuse) for observability + +Limitations: + +1. In-memory persistence only: Chat sessions only persist in-memory + +## Configuration + +This agent can be configured at two different levels, global and per-agent + +### Global + +Global configuration values apply to all agents, all of this is optional: + +```yaml +genai: + langgraph: + langfuse: # (Optional) Configuration for LangFuse observability + baseUrl: http://localhost:3001 # (Required) LangFuse URL + publicKey: pk-aaa # (Required) Public key + secretKey: sk-bbb # (Required) Secret key +``` + +### Per-agent + +Per-agent configuration only applies to the agent for which it corresponds. The available parameters are: + +```yaml +genai: + agents: + general: + description: [...] + prompt: [...] + langgraph: + messagesMaxTokens: 100000 # (Required) Prune message history to maximum of this number of tokens + temperature: 0 # (Optional) Model temperature + maxTokens: 4000 # (Optional) Maximum output tokens + topP: 0.9 # (Optional) Model topP + # Only include the subsequent section for your model provider + # Bedrock only + bedrock: + modelId: 'anthropic.claude-3-5-sonnet-20241022-v2:0' # (Required) Bedrock model ID + region: us-west-2 # (Required) Bedrock AWS region + # OpenAI only + openai: + apiKey: ${OPENAI_API_KEY} # (Required) OpenAI model name + modelName: 'gpt-3.5-turbo-instruct' # (Optional) OpenAI model name +``` diff --git a/plugins/genai/agent-langgraph/config.d.ts b/plugins/genai/agent-langgraph/config.d.ts new file mode 100644 index 0000000..2765904 --- /dev/null +++ b/plugins/genai/agent-langgraph/config.d.ts @@ -0,0 +1,67 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Config { + genai?: { + agents?: { + [name: string]: { + langgraph?: { + /** + * (Required) Maximum tokens to retain in context sent to the model + */ + messagesMaxTokens: number; + /** + * (Optional) Maximum tokens that will be returned by the model + */ + maxTokens?: number; + /** + * (Optional) Model temperature + */ + temperature?: number; + /** + * (Optional) Model topP + */ + topP?: number; + /** + * (Optional) Specific configuration for Amazon Bedrock + */ + bedrock?: { + /** + * (Required) Region to use to access Amazon Bedrock API + */ + region: string; + /** + * (Required) Amazon Bedrock model ID to use + * @see https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html + */ + modelId: string; + }; + /** + * (Optional) Specific configuration for OpenAI + */ + openai?: { + /** + * (Required) OpenAI API key for authentication + * @visibility secret + */ + apiKey: string; + /** + * (Optional) Name of the OpenAI model to use + */ + modelName?: string; + }; + }; + }; + }; + }; +} diff --git a/plugins/genai/agent-langgraph/package.json b/plugins/genai/agent-langgraph/package.json new file mode 100644 index 0000000..bfb910c --- /dev/null +++ b/plugins/genai/agent-langgraph/package.json @@ -0,0 +1,49 @@ +{ + "name": "@aws/genai-plugin-langgraph-agent-for-backstage", + "description": "LangGraph agent module package for the GenAI AWS plugins for Backstage", + "version": "0.0.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "backend-plugin-module", + "pluginId": "aws-genai", + "pluginPackage": "@aws/genai-plugin-for-backstage-backend" + }, + "configSchema": "config.d.ts", + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@aws/genai-plugin-for-backstage-common": "workspace:^", + "@aws/genai-plugin-for-backstage-node": "workspace:^", + "@backstage/backend-plugin-api": "^0.8.0", + "@backstage/catalog-model": "^1.7.0", + "@backstage/config": "^1.2.0", + "@langchain/aws": "^0.1.2", + "@langchain/core": "^0.3.18", + "@langchain/langgraph": "0.2.22", + "@langchain/openai": "^0.3.14", + "langfuse-langchain": "^3.29.1", + "zod": "^3.23.8" + }, + "devDependencies": { + "@backstage/cli": "^0.26.5" + }, + "files": [ + "dist", + "config.d.ts" + ] +} diff --git a/plugins/genai/agent-langgraph/src/LangGraphReactAgentType.ts b/plugins/genai/agent-langgraph/src/LangGraphReactAgentType.ts new file mode 100644 index 0000000..30364a5 --- /dev/null +++ b/plugins/genai/agent-langgraph/src/LangGraphReactAgentType.ts @@ -0,0 +1,271 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Config } from '@backstage/config'; +import { + BackstageCredentials, + LoggerService, +} from '@backstage/backend-plugin-api'; +import { + CompoundEntityRef, + stringifyEntityRef, +} from '@backstage/catalog-model'; +import { ChatBedrockConverse } from '@langchain/aws'; +import { ChatOpenAI } from '@langchain/openai'; +import { CompiledStateGraph, MemorySaver } from '@langchain/langgraph'; +import { AgentState, createReactAgent } from '@langchain/langgraph/prebuilt'; +import { + HumanMessage, + SystemMessage, + trimMessages, +} from '@langchain/core/messages'; +import { ToolInterface } from '@langchain/core/tools'; +import { ResponseTransformStream, tiktokenCounter } from './util'; +import { BaseChatModel } from '@langchain/core/language_models/chat_models'; +import { + LangGraphAgentLangFuseConfig, + LangGraphAgentConfig, + readLangGraphAgentConfig, + readSharedLangGraphAgentConfig, +} from './config'; +import { AgentConfig, AgentType } from '@aws/genai-plugin-for-backstage-node'; +import { + ChatEvent, + GenerateResponse, +} from '@aws/genai-plugin-for-backstage-common'; +import { CallbackHandler } from 'langfuse-langchain'; + +export class LangGraphReactAgentType implements AgentType { + private readonly prompt?: string; + private readonly langfuseConfig?: LangGraphAgentLangFuseConfig; + + public constructor( + private readonly llm: BaseChatModel, + private readonly tools: ToolInterface[], + private readonly agent: CompiledStateGraph< + AgentState, + Partial, + any + >, + options: { + prompt?: string; + langfuseConfig?: LangGraphAgentLangFuseConfig; + }, + ) { + this.prompt = options.prompt; + this.langfuseConfig = options.langfuseConfig; + } + + static async fromConfig( + rootConfig: Config, + agentConfig: AgentConfig, + tools: ToolInterface[], + logger: LoggerService, + ) { + const prompt = agentConfig.prompt; + + const sharedLangGraphConfig = readSharedLangGraphAgentConfig(rootConfig); + + const agentLangGraphConfig = readLangGraphAgentConfig(agentConfig.config); + + let agentModel: BaseChatModel; + + if (agentLangGraphConfig.bedrock) { + agentModel = + LangGraphReactAgentType.createBedrockModel(agentLangGraphConfig); + } else if (agentLangGraphConfig.openai) { + agentModel = + LangGraphReactAgentType.createOpenAIModel(agentLangGraphConfig); + } else { + throw new Error('No agent model configured'); + } + + logger.info( + `Instantiating langgraph-react agent ${ + agentConfig.name + } using model '${agentModel.getName()}'`, + ); + + const agentCheckpointer = new MemorySaver(); + const agent = createReactAgent({ + llm: agentModel, + tools, + checkpointSaver: agentCheckpointer, + messageModifier: agentLangGraphConfig.messagesMaxTokens + ? async e => { + return await trimMessages(e, { + maxTokens: agentLangGraphConfig.messagesMaxTokens, + strategy: 'last', + tokenCounter: tiktokenCounter, + includeSystem: true, + startOn: 'human', + }); + } + : undefined, + }); + + return new LangGraphReactAgentType(agentModel, tools, agent, { + prompt, + langfuseConfig: sharedLangGraphConfig?.langfuse, + }); + } + + private static createBedrockModel(config: LangGraphAgentConfig) { + const { modelId, region } = config.bedrock!; + + return new ChatBedrockConverse({ + model: modelId, + region: region, + streaming: true, + temperature: config.temperature, + maxTokens: config.maxTokens, + topP: config.topP, + }); + } + + private static createOpenAIModel(config: LangGraphAgentConfig) { + const { modelName, apiKey } = config.openai!; + + return new ChatOpenAI({ + apiKey: apiKey, + streaming: true, + modelName: modelName, + temperature: config.temperature, + maxTokens: config.maxTokens, + topP: config.topP, + }); + } + + private buildCallbackHandler( + sessionId: string, + userId: string, + ): CallbackHandler[] { + const callbacks: CallbackHandler[] = []; + + if (this.langfuseConfig) { + callbacks.push( + new CallbackHandler({ + ...this.langfuseConfig, + sessionId, + userId, + }), + ); + } + + return callbacks; + } + + public async stream( + userMessage: string, + sessionId: string, + newSession: boolean, + userEntityRef: CompoundEntityRef, + _: LoggerService, + options: { + credentials?: BackstageCredentials; + }, + ): Promise> { + const messages: (SystemMessage | HumanMessage)[] = []; + + if (this.prompt) { + if (newSession) { + messages.push(this.buildSystemPrompt(this.prompt, userEntityRef)); + } + } + + messages.push(new HumanMessage(userMessage)); + + const eventStreamFinalRes = this.agent.streamEvents( + { + messages, + }, + { + version: 'v2', + callbacks: this.buildCallbackHandler( + sessionId, + stringifyEntityRef(userEntityRef), + ), + configurable: { + thread_id: sessionId, + credentials: options.credentials, + }, + }, + ); + + return eventStreamFinalRes.pipeThrough( + new ResponseTransformStream(sessionId), + ); + } + + public async generate( + prompt: string, + sessionId: string, + userEntityRef: CompoundEntityRef, + logger: LoggerService, + options: { + credentials?: BackstageCredentials; + }, + ): Promise { + const messages: (SystemMessage | HumanMessage)[] = []; + + if (this.prompt) { + messages.push(this.buildSystemPrompt(this.prompt, userEntityRef)); + } + + messages.push(new HumanMessage(prompt)); + + let output: any = ''; + + const agent = createReactAgent({ + llm: this.llm, + tools: this.tools, + }); + const finalState = await agent.invoke( + { messages }, + { + callbacks: this.buildCallbackHandler( + sessionId, + stringifyEntityRef(userEntityRef), + ), + configurable: { + thread_id: sessionId, + credentials: options.credentials, + }, + }, + ); + + const outputMessages = finalState.messages.slice(messages.length); + + if (outputMessages.length > 0) { + const outputMessage = outputMessages[outputMessages.length - 1]; + + output = outputMessage.content; + } else { + logger.error(`No output messages found for session ${sessionId}`); + throw new Error(`No output messages found for session ${sessionId}`); + } + + return { + output, + }; + } + + private buildSystemPrompt( + template: string, + userEntityRef: CompoundEntityRef, + ) { + return new SystemMessage( + template.replace('{username}', userEntityRef.name), + ); + } +} diff --git a/plugins/genai/agent-langgraph/src/config/config.ts b/plugins/genai/agent-langgraph/src/config/config.ts new file mode 100644 index 0000000..4ac40b8 --- /dev/null +++ b/plugins/genai/agent-langgraph/src/config/config.ts @@ -0,0 +1,91 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Config } from '@backstage/config'; +import { + LangGraphAgentBedrockConfig, + LangGraphAgentConfig, + LangGraphAgentLangFuseConfig, + LangGraphAgentOpenAIConfig, + SharedLangGraphAgentConfig, +} from './types'; + +export function readSharedLangGraphAgentConfig( + rootConfig: Config, +): SharedLangGraphAgentConfig | undefined { + const config = rootConfig.getOptionalConfig('genai.langgraph'); + + let langfuseAgentConfig: LangGraphAgentLangFuseConfig | undefined; + + if (config) { + const langfuseConfig = config.getOptionalConfig('langfuse'); + + if (langfuseConfig) { + langfuseAgentConfig = { + baseUrl: langfuseConfig.getString('baseUrl'), + publicKey: langfuseConfig.getString('publicKey'), + secretKey: langfuseConfig.getString('secretKey'), + flushAt: langfuseConfig.getOptionalNumber('flushAt'), + }; + } + } + + return { + langfuse: langfuseAgentConfig, + }; +} + +export function readLangGraphAgentConfig( + agentConfig: Config, +): LangGraphAgentConfig { + const config = agentConfig.getConfig('langgraph'); + + return { + messagesMaxTokens: config.getNumber('messagesMaxTokens'), + maxTokens: config.getOptionalNumber('maxTokens'), + temperature: config.getOptionalNumber('temperature'), + topP: config.getOptionalNumber('topP'), + bedrock: readLangGraphAgentBedrockConfig(config), + openai: readLangGraphAgentOpenAIConfig(config), + }; +} + +export function readLangGraphAgentBedrockConfig( + agentConfig: Config, +): LangGraphAgentBedrockConfig | undefined { + if (!agentConfig.has('bedrock')) { + return undefined; + } + + const config = agentConfig.getConfig('bedrock'); + + return { + modelId: config.getString('modelId'), + region: config.getString('region'), + }; +} + +export function readLangGraphAgentOpenAIConfig( + agentConfig: Config, +): LangGraphAgentOpenAIConfig | undefined { + if (!agentConfig.has('openai')) { + return undefined; + } + + const config = agentConfig.getConfig('openai'); + + return { + apiKey: config.getString('apiKey'), + modelName: config.getOptionalString('modelName'), + }; +} diff --git a/plugins/genai/agent-langgraph/src/config/index.ts b/plugins/genai/agent-langgraph/src/config/index.ts new file mode 100644 index 0000000..41d6252 --- /dev/null +++ b/plugins/genai/agent-langgraph/src/config/index.ts @@ -0,0 +1,15 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './types'; +export * from './config'; diff --git a/plugins/genai/agent-langgraph/src/config/types.ts b/plugins/genai/agent-langgraph/src/config/types.ts new file mode 100644 index 0000000..de9a712 --- /dev/null +++ b/plugins/genai/agent-langgraph/src/config/types.ts @@ -0,0 +1,42 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface SharedLangGraphAgentConfig { + langfuse?: LangGraphAgentLangFuseConfig; +} + +export interface LangGraphAgentLangFuseConfig { + baseUrl: string; + publicKey: string; + secretKey: string; + flushAt?: number; +} + +export interface LangGraphAgentConfig { + messagesMaxTokens: number; + maxTokens?: number; + temperature?: number; + topP?: number; + bedrock?: LangGraphAgentBedrockConfig; + openai?: LangGraphAgentOpenAIConfig; +} + +export interface LangGraphAgentBedrockConfig { + region: string; + modelId: string; +} + +export interface LangGraphAgentOpenAIConfig { + apiKey: string; + modelName?: string; +} diff --git a/plugins/genai/agent-langgraph/src/index.ts b/plugins/genai/agent-langgraph/src/index.ts new file mode 100644 index 0000000..0f0097f --- /dev/null +++ b/plugins/genai/agent-langgraph/src/index.ts @@ -0,0 +1,14 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { genAiPluginForBackstageModuleLangGraphAgent as default } from './module'; diff --git a/plugins/genai/agent-langgraph/src/module.ts b/plugins/genai/agent-langgraph/src/module.ts new file mode 100644 index 0000000..5a4ba96 --- /dev/null +++ b/plugins/genai/agent-langgraph/src/module.ts @@ -0,0 +1,50 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { + AgentConfig, + agentTypeExtensionPoint, +} from '@aws/genai-plugin-for-backstage-node'; +import { LangGraphReactAgentType } from './LangGraphReactAgentType'; +import { ToolInterface } from '@langchain/core/tools'; + +export const genAiPluginForBackstageModuleLangGraphAgent = createBackendModule({ + pluginId: 'aws-genai', + moduleId: 'agent-langgraph', + register(reg) { + reg.registerInit({ + deps: { + config: coreServices.rootConfig, + logger: coreServices.logger, + agentType: agentTypeExtensionPoint, + }, + async init({ agentType, config, logger }) { + agentType.addAgentType({ + create: async (agentConfig: AgentConfig, tools: ToolInterface[]) => + LangGraphReactAgentType.fromConfig( + config, + agentConfig, + tools, + logger, + ), + + getTypeName: () => 'langgraph-react', + }); + }, + }); + }, +}); diff --git a/plugins/genai/agent-langgraph/src/util/index.ts b/plugins/genai/agent-langgraph/src/util/index.ts new file mode 100644 index 0000000..1568c42 --- /dev/null +++ b/plugins/genai/agent-langgraph/src/util/index.ts @@ -0,0 +1,15 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './transform'; +export * from './modifier'; diff --git a/plugins/genai/agent-langgraph/src/util/modifier.ts b/plugins/genai/agent-langgraph/src/util/modifier.ts new file mode 100644 index 0000000..4d4fa9f --- /dev/null +++ b/plugins/genai/agent-langgraph/src/util/modifier.ts @@ -0,0 +1,56 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { encodingForModel } from '@langchain/core/utils/tiktoken'; +import { + BaseMessage, + MessageContent, + MessageContentText, +} from '@langchain/core/messages'; + +async function strTokenCounter( + messageContent: MessageContent, +): Promise { + if (typeof messageContent === 'string') { + return (await encodingForModel('gpt-4')).encode(messageContent).length; + } + + if (messageContent.every(x => x.type === 'text' && x.text)) { + return (await encodingForModel('gpt-4')).encode( + (messageContent as MessageContentText[]).map(({ text }) => text).join(''), + ).length; + } + throw new Error( + `Unsupported message content ${JSON.stringify(messageContent)}`, + ); +} + +export async function tiktokenCounter( + messages: BaseMessage[], +): Promise { + let numTokens = 3; + const tokensPerMessage = 3; + const tokensPerName = 1; + const roleBuffer = 20; // Hardcoded buffer for role string + + for (const msg of messages) { + numTokens += + tokensPerMessage + roleBuffer + (await strTokenCounter(msg.content)); + + if (msg.name) { + numTokens += tokensPerName + (await strTokenCounter(msg.name)); + } + } + + return numTokens; +} diff --git a/plugins/genai/agent-langgraph/src/util/transform.ts b/plugins/genai/agent-langgraph/src/util/transform.ts new file mode 100644 index 0000000..8b114da --- /dev/null +++ b/plugins/genai/agent-langgraph/src/util/transform.ts @@ -0,0 +1,66 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ChatEvent } from '@aws/genai-plugin-for-backstage-common'; +import { StreamEvent } from '@langchain/core/dist/tracers/event_stream'; +import { AIMessageChunk } from '@langchain/core/messages'; + +export class ResponseTransformStream extends TransformStream< + StreamEvent, + ChatEvent +> { + constructor(sessionId: string) { + super({ + start: controller => { + controller.enqueue({ + type: 'ResponseEvent', + sessionId, + }); + }, + transform: (chunk, controller) => this.transform(chunk, controller), + flush: controller => this.flush(controller), + }); + } + + transform( + chunk: StreamEvent, + controller: TransformStreamDefaultController, + ) { + const event = chunk.event; + const data = chunk.data; + + if (event === 'on_chat_model_stream') { + const msg = data.chunk as AIMessageChunk; + if (!msg.tool_call_chunks?.length) { + const content = msg.content; + + controller.enqueue({ + type: 'ChunkEvent', + token: content.toString(), + }); + } + } else if (event === 'on_tool_start') { + const msg = data; + + controller.enqueue({ + type: 'ToolEvent', + name: chunk.name, + input: msg.input.input, + }); + } + } + + flush(controller: TransformStreamDefaultController) { + controller.terminate(); + } +} diff --git a/plugins/genai/backend/.eslintrc.js b/plugins/genai/backend/.eslintrc.js new file mode 100644 index 0000000..e2a53a6 --- /dev/null +++ b/plugins/genai/backend/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/genai/backend/README.md b/plugins/genai/backend/README.md new file mode 100644 index 0000000..18dbdb5 --- /dev/null +++ b/plugins/genai/backend/README.md @@ -0,0 +1,3 @@ +# AWS Generative AI plugin for Backstage - Backend + +This a backend plugin package for Backstage related to Generative AI. For more information see the [documentation](../README.md). diff --git a/plugins/genai/backend/config.d.ts b/plugins/genai/backend/config.d.ts new file mode 100644 index 0000000..f72a019 --- /dev/null +++ b/plugins/genai/backend/config.d.ts @@ -0,0 +1,37 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Config { + genai?: { + agents?: { + [name: string]: { + /** + * (Required) Description of the agents purpose + */ + description: string; + /** + * (Required) System prompt for the agent + */ + prompt: string; + /** + * (Optional) List of tools the agent has access to + */ + tools?: string[]; + /** + * (Optional) Params that will be passed to the agent type for this agent + */ + params?: any; + }; + }; + }; +} diff --git a/plugins/genai/backend/dev/index.ts b/plugins/genai/backend/dev/index.ts new file mode 100644 index 0000000..40908dd --- /dev/null +++ b/plugins/genai/backend/dev/index.ts @@ -0,0 +1,8 @@ +import { createBackend } from '@backstage/backend-defaults'; + +const backend = createBackend(); +backend.add(import('@backstage/plugin-auth-backend')); +backend.add(import('@backstage/plugin-auth-backend-module-guest-provider')); +backend.add(import('../src')); + +backend.start(); diff --git a/plugins/genai/backend/package.json b/plugins/genai/backend/package.json new file mode 100644 index 0000000..c48a1f3 --- /dev/null +++ b/plugins/genai/backend/package.json @@ -0,0 +1,69 @@ +{ + "name": "@aws/genai-plugin-for-backstage-backend", + "description": "Backend package for the GenAI AWS plugins for Backstage", + "version": "0.0.0", + "repository": { + "type": "git", + "url": "github:awslabs/backstage-plugins-for-aws", + "directory": "plugins/genai/backend" + }, + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "backend-plugin", + "pluginId": "aws-genai", + "pluginPackages": [ + "@aws/genai-plugin-for-backstage-backend", + "@aws/genai-plugin-for-backstage-common", + "@aws/genai-plugin-for-backstage-node", + "@aws/genai-plugin-for-backstage" + ] + }, + "configSchema": "config.d.ts", + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@aws/genai-plugin-for-backstage-common": "workspace:^", + "@aws/genai-plugin-for-backstage-node": "workspace:^", + "@backstage/backend-common": "^0.21.6", + "@backstage/backend-plugin-api": "^0.6.16", + "@backstage/catalog-client": "^1.8.0", + "@backstage/catalog-model": "^1.4.5", + "@backstage/config": "^1.2.0", + "@backstage/plugin-catalog-node": "^1.14.0", + "@langchain/core": "^0.3.18", + "@types/express": "*", + "express": "^4.17.1", + "express-promise-router": "^4.1.0", + "uuid": "^10.0.0", + "zod": "^3.23.8" + }, + "devDependencies": { + "@backstage/backend-defaults": "^0.2.16", + "@backstage/backend-test-utils": "^1.0.2", + "@backstage/cli": "^0.26.2", + "@backstage/plugin-auth-backend": "^0.22.3", + "@backstage/plugin-auth-backend-module-guest-provider": "^0.1.2", + "@types/supertest": "^2.0.12", + "@types/uuid": "^10", + "msw": "^1.0.0", + "supertest": "^6.2.4" + }, + "files": [ + "dist", + "config.d.ts" + ] +} diff --git a/plugins/genai/backend/src/agent/Agent.test.ts b/plugins/genai/backend/src/agent/Agent.test.ts new file mode 100644 index 0000000..7566688 --- /dev/null +++ b/plugins/genai/backend/src/agent/Agent.test.ts @@ -0,0 +1,302 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Agent } from './Agent'; +import { + AgentConfig, + AgentTypeFactory, +} from '@aws/genai-plugin-for-backstage-node'; +import { Toolkit } from '../tools/Toolkit'; +import { CompoundEntityRef } from '@backstage/catalog-model'; +import { mockServices } from '@backstage/backend-test-utils'; +import { ConfigReader } from '@backstage/config'; + +const mockLogger = mockServices.logger.mock(); +const mockConfig = new ConfigReader({}); + +describe('Agent', () => { + describe('constructor', () => { + it('should create an Agent instance', () => { + const agent = new Agent( + 'TestAgent', + 'Test Description', + {} as any, + mockLogger, + ); + expect(agent).toBeInstanceOf(Agent); + expect(agent.getName()).toBe('TestAgent'); + expect(agent.getDescription()).toBe('Test Description'); + }); + }); + + describe('fromConfig', () => { + it('should create an Agent instance from config', async () => { + const mockAgentConfig: AgentConfig = { + name: 'TestAgent', + prompt: 'test', + description: 'Test Description', + tools: ['tool1', 'tool2'], + config: mockConfig, + }; + const mockAgentTypeFactory = { + create: jest.fn().mockResolvedValue({}), + } as unknown as AgentTypeFactory; + const mockToolkit = { + getToolByName: jest.fn().mockReturnValue({}), + } as unknown as Toolkit; + + const agent = await Agent.fromConfig( + mockAgentConfig, + mockAgentTypeFactory, + mockToolkit, + mockLogger, + ); + + expect(agent).toBeInstanceOf(Agent); + expect(agent.getName()).toBe('TestAgent'); + expect(agent.getDescription()).toBe('Test Description'); + expect(mockToolkit.getToolByName).toHaveBeenCalledTimes(2); + expect(mockAgentTypeFactory.create).toHaveBeenCalledTimes(1); + }); + + it('should create an Agent instance with empty tools array', async () => { + const mockAgentConfig: AgentConfig = { + name: 'EmptyToolsAgent', + prompt: 'test', + description: 'Agent with no tools', + tools: [], + config: mockConfig, + }; + const mockAgentTypeFactory = { + create: jest.fn().mockResolvedValue({}), + } as unknown as AgentTypeFactory; + const mockToolkit = { + getToolByName: jest.fn(), + } as unknown as Toolkit; + + const agent = await Agent.fromConfig( + mockAgentConfig, + mockAgentTypeFactory, + mockToolkit, + mockLogger, + ); + + expect(agent).toBeInstanceOf(Agent); + expect(agent.getName()).toBe('EmptyToolsAgent'); + expect(agent.getDescription()).toBe('Agent with no tools'); + expect(mockToolkit.getToolByName).not.toHaveBeenCalled(); + expect(mockAgentTypeFactory.create).toHaveBeenCalledTimes(1); + }); + + it('should throw an error for unknown tool', async () => { + const mockAgentConfig: AgentConfig = { + name: 'TestAgent', + prompt: 'test', + description: 'Test Description', + tools: ['unknownTool'], + config: mockConfig, + }; + const mockAgentTypeFactory = {} as AgentTypeFactory; + const mockToolkit = { + getToolByName: jest.fn().mockReturnValue(null), + } as unknown as Toolkit; + + await expect( + Agent.fromConfig( + mockAgentConfig, + mockAgentTypeFactory, + mockToolkit, + mockLogger, + ), + ).rejects.toThrow('Unknown tool unknownTool'); + }); + }); + + describe('getName', () => { + it('should return the agent name', () => { + const agent = new Agent( + 'TestAgent', + 'Test Description', + {} as any, + mockLogger, + ); + expect(agent.getName()).toBe('TestAgent'); + }); + }); + + describe('getDescription', () => { + it('should return the agent description', () => { + const agent = new Agent( + 'TestAgent', + 'Test Description', + {} as any, + mockLogger, + ); + expect(agent.getDescription()).toBe('Test Description'); + }); + }); + + describe('stream', () => { + it('should call agentType.stream with correct parameters', async () => { + const mockAgentType = { + stream: jest.fn().mockResolvedValue(new ReadableStream()), + }; + const agent = new Agent( + 'TestAgent', + 'Test Description', + mockAgentType as any, + mockLogger, + ); + const userMessage = 'Hello'; + const sessionId = 'session123'; + const newSession = true; + const userEntityRef: CompoundEntityRef = { + kind: 'User', + namespace: 'default', + name: 'testuser', + }; + const options = {}; + + await agent.stream( + userMessage, + sessionId, + newSession, + userEntityRef, + options, + ); + + expect(mockAgentType.stream).toHaveBeenCalledWith( + userMessage, + sessionId, + newSession, + userEntityRef, + mockLogger, + options, + ); + }); + + it('should return a ReadableStream', async () => { + const mockAgentType = { + stream: jest.fn().mockResolvedValue(new ReadableStream()), + }; + const agent = new Agent( + 'TestAgent', + 'Test Description', + mockAgentType as any, + mockLogger, + ); + + const result = await agent.stream( + 'Hello', + 'session123', + true, + {} as CompoundEntityRef, + {}, + ); + + expect(result).toBeInstanceOf(ReadableStream); + }); + + it('should handle stream with no options', async () => { + const mockAgentType = { + stream: jest.fn().mockResolvedValue(new ReadableStream()), + }; + const agent = new Agent( + 'TestAgent', + 'Test Description', + mockAgentType as any, + mockLogger, + ); + const userEntityRef: CompoundEntityRef = { + kind: 'User', + namespace: 'default', + name: 'testuser', + }; + + await agent.stream('Hello', 'session123', false, userEntityRef, {}); + + expect(mockAgentType.stream).toHaveBeenCalledWith( + 'Hello', + 'session123', + false, + userEntityRef, + mockLogger, + {}, + ); + }); + + it('should handle errors from agentType.stream', async () => { + const mockAgentType = { + stream: jest.fn().mockRejectedValue(new Error('Stream error')), + }; + const agent = new Agent( + 'TestAgent', + 'Test Description', + mockAgentType as any, + mockLogger, + ); + + await expect( + agent.stream('Hello', 'session123', true, {} as CompoundEntityRef, {}), + ).rejects.toThrow('Stream error'); + }); + }); + + describe('sync', () => { + it('should call agentType.sync with correct parameters', async () => { + const mockAgentType = { + generate: jest.fn().mockResolvedValue({}), + }; + const agent = new Agent( + 'TestAgent', + 'Test Description', + mockAgentType as any, + mockLogger, + ); + const userMessage = 'Hello'; + const sessionId = 'session123'; + const userEntityRef: CompoundEntityRef = { + kind: 'User', + namespace: 'default', + name: 'testuser', + }; + const options = {}; + + await agent.generate(userMessage, sessionId, userEntityRef, options); + + expect(mockAgentType.generate).toHaveBeenCalledWith( + userMessage, + sessionId, + userEntityRef, + mockLogger, + options, + ); + }); + + it('should handle errors from agentType.sync', async () => { + const mockAgentType = { + generate: jest.fn().mockRejectedValue(new Error('Sync error')), + }; + const agent = new Agent( + 'TestAgent', + 'Test Description', + mockAgentType as any, + mockLogger, + ); + + await expect( + agent.generate('Hello', 'session123', {} as CompoundEntityRef, {}), + ).rejects.toThrow('Sync error'); + }); + }); +}); diff --git a/plugins/genai/backend/src/agent/Agent.ts b/plugins/genai/backend/src/agent/Agent.ts new file mode 100644 index 0000000..cc6a946 --- /dev/null +++ b/plugins/genai/backend/src/agent/Agent.ts @@ -0,0 +1,117 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Toolkit } from '../tools/Toolkit'; +import { + BackstageCredentials, + LoggerService, +} from '@backstage/backend-plugin-api'; +import { ToolInterface } from '@langchain/core/tools'; +import { CompoundEntityRef } from '@backstage/catalog-model'; +import { + AgentConfig, + AgentType, + AgentTypeFactory, +} from '@aws/genai-plugin-for-backstage-node'; +import { + ChatEvent, + GenerateResponse, +} from '@aws/genai-plugin-for-backstage-common'; + +export class Agent { + constructor( + private readonly name: string, + private readonly description: string, + private readonly agentType: AgentType, + private readonly logger: LoggerService, + ) {} + + static async fromConfig( + agentConfig: AgentConfig, + agentTypeFactory: AgentTypeFactory, + toolkit: Toolkit, + logger: LoggerService, + ): Promise { + const tools: ToolInterface[] = []; + + logger.info( + `Creating agent '${agentConfig.name}' with tools ${JSON.stringify( + agentConfig.tools, + )}`, + ); + + for (const toolName of agentConfig.tools) { + const tool = toolkit.getToolByName(toolName); + + if (!tool) { + throw new Error(`Unknown tool ${toolName}`); + } + + tools.push(tool); + } + + const agentType = await agentTypeFactory.create(agentConfig, tools); + + return new Agent( + agentConfig.name, + agentConfig.description, + agentType, + logger, + ); + } + + public getName() { + return this.name; + } + + public getDescription() { + return this.description; + } + + public async stream( + userMessage: string, + sessionId: string, + newSession: boolean, + userEntityRef: CompoundEntityRef, + options: { + credentials?: BackstageCredentials; + }, + ): Promise> { + return this.agentType.stream( + userMessage, + sessionId, + newSession, + userEntityRef, + this.logger, + options, + ); + } + + public async generate( + prompt: string, + sessionId: string, + userEntityRef: CompoundEntityRef, + options: { + responseSchema?: any; + credentials?: BackstageCredentials; + }, + ): Promise { + return this.agentType.generate( + prompt, + sessionId, + userEntityRef, + this.logger, + options, + ); + } +} diff --git a/plugins/genai/backend/src/config/config.ts b/plugins/genai/backend/src/config/config.ts new file mode 100644 index 0000000..e63b181 --- /dev/null +++ b/plugins/genai/backend/src/config/config.ts @@ -0,0 +1,55 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { AgentConfig } from '@aws/genai-plugin-for-backstage-node'; +import { Config } from '@backstage/config'; + +function getRootConfig(config: Config) { + return config.getOptionalConfig('genai'); +} + +export function readAgentsConfig(rootConfig: Config): AgentConfig[] { + const genaiConfig = getRootConfig(rootConfig); + + if (!genaiConfig) { + return []; + } + + const agentsConfig = genaiConfig.getOptionalConfig('agents'); + + if (!agentsConfig) { + return []; + } + + const result: AgentConfig[] = []; + + for (const agentName of agentsConfig.keys()) { + result.push(readAgentConfig(agentName, agentsConfig.getConfig(agentName))); + } + + return result; +} + +export function readAgentConfig( + agentName: string, + config: Config, +): AgentConfig { + return { + name: agentName, + description: config.getString('description'), + prompt: config.getString('prompt'), + type: config.getOptionalString('type'), + tools: config.getOptionalStringArray('tools') || [], + config, + }; +} diff --git a/plugins/genai/backend/src/index.ts b/plugins/genai/backend/src/index.ts new file mode 100644 index 0000000..f8cb57b --- /dev/null +++ b/plugins/genai/backend/src/index.ts @@ -0,0 +1,15 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './service/router'; +export { awsGenAiPlugin as default } from './plugin'; diff --git a/plugins/genai/backend/src/plugin.ts b/plugins/genai/backend/src/plugin.ts new file mode 100644 index 0000000..0190120 --- /dev/null +++ b/plugins/genai/backend/src/plugin.ts @@ -0,0 +1,108 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { + createBackendPlugin, + coreServices, +} from '@backstage/backend-plugin-api'; +import { createRouter } from './service/router'; +import { Toolkit } from './tools/Toolkit'; +import { DefaultAgentService } from './service/DefaultAgentService'; +import { + agentToolExtensionPoint, + agentTypeExtensionPoint, + AgentTypeFactory, +} from '@aws/genai-plugin-for-backstage-node'; +import { ToolInterface } from '@langchain/core/tools'; +import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha'; +import { + createBackstageCatalogSearchTool, + createBackstageEntityTool, + createBackstageTechDocsSearchTool, +} from './tools'; + +export const awsGenAiPlugin = createBackendPlugin({ + pluginId: 'aws-genai', + register(env) { + const toolkit = new Toolkit(); + + env.registerExtensionPoint(agentToolExtensionPoint, { + addTools(...tools: ToolInterface[]) { + toolkit.add(...tools); + }, + }); + + const agentTypeFactories: AgentTypeFactory[] = []; + + env.registerExtensionPoint(agentTypeExtensionPoint, { + addAgentType(factory: AgentTypeFactory) { + agentTypeFactories.push(factory); + }, + }); + + env.registerInit({ + deps: { + logger: coreServices.logger, + httpRouter: coreServices.httpRouter, + config: coreServices.rootConfig, + auth: coreServices.auth, + discovery: coreServices.discovery, + httpAuth: coreServices.httpAuth, + userInfo: coreServices.userInfo, + catalogApi: catalogServiceRef, + }, + async init({ + logger, + httpRouter, + config, + discovery, + auth, + httpAuth, + userInfo, + catalogApi, + }) { + const winstonLogger = loggerToWinstonLogger(logger); + + toolkit.add(createBackstageEntityTool(catalogApi, auth)); + toolkit.add(createBackstageCatalogSearchTool(discovery, auth)); + toolkit.add(createBackstageTechDocsSearchTool(discovery, auth)); + + const agentService = await DefaultAgentService.fromConfig(config, { + agentTypeFactories, + toolkit, + userInfo, + logger, + }); + + httpRouter.use( + await createRouter({ + logger: winstonLogger, + agentService, + httpAuth, + discovery, + auth, + }), + ); + httpRouter.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); + httpRouter.addAuthPolicy({ + path: '/v1/index', + allow: 'unauthenticated', + }); + }, + }); + }, +}); diff --git a/plugins/genai/backend/src/service/DefaultAgentService.test.ts b/plugins/genai/backend/src/service/DefaultAgentService.test.ts new file mode 100644 index 0000000..7b059a6 --- /dev/null +++ b/plugins/genai/backend/src/service/DefaultAgentService.test.ts @@ -0,0 +1,136 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { DefaultAgentService } from './DefaultAgentService'; +import { Agent } from '../agent/Agent'; +import { + ChatEvent, + GenerateResponse, +} from '@aws/genai-plugin-for-backstage-common'; +import { mockCredentials, mockServices } from '@backstage/backend-test-utils'; + +const loggerMock = mockServices.logger.mock(); +const userInfoMock = mockServices.userInfo.mock({ + getUserInfo: jest.fn(_ => { + return Promise.resolve({ + userEntityRef: 'user:default/guest', + ownershipEntityRefs: [], + }); + }), +}); +const credentials = mockCredentials.user('user:default/guest'); + +describe('DefaultAgentService', () => { + let agentMock: jest.Mocked; + let service: DefaultAgentService; + + beforeEach(() => { + agentMock = { + stream: jest.fn(), + generate: jest.fn(), + } as unknown as jest.Mocked; + + const agents = new Map([['testAgent', agentMock]]); + service = new DefaultAgentService(loggerMock, userInfoMock, agents); + }); + + describe('stream', () => { + it('should call agent.stream with correct parameters', async () => { + const userMessage = 'Hello'; + const options = { + agentName: 'testAgent', + sessionId: 'test-session', + credentials, + }; + const mockStream = {} as ReadableStream; + + agentMock.stream.mockResolvedValue(mockStream); + + const result = await service.stream(userMessage, options); + + expect(agentMock.stream).toHaveBeenCalledWith( + userMessage, + 'test-session', + false, + { kind: 'user', name: 'guest', namespace: 'default' }, + { credentials }, + ); + expect(result).toBe(mockStream); + }); + + it('should generate a new session ID if not provided', async () => { + const userMessage = 'Hello'; + const options = { agentName: 'testAgent', credentials }; + + agentMock.stream.mockResolvedValue({} as ReadableStream); + + await service.stream(userMessage, options); + + expect(agentMock.stream).toHaveBeenCalledWith( + userMessage, + expect.any(String), + true, + { kind: 'user', name: 'guest', namespace: 'default' }, + { credentials }, + ); + }); + + it('should throw an error if specified agent is not found', async () => { + const userMessage = 'Hello'; + const options = { agentName: 'nonExistentAgent', credentials }; + + await expect(service.stream(userMessage, options)).rejects.toThrow( + 'Agent nonExistentAgent not found', + ); + }); + }); + + describe('generate', () => { + it('should call agent.generate with correct parameters', async () => { + const prompt = 'Test prompt'; + const options = { agentName: 'testAgent', credentials }; + + agentMock.generate.mockResolvedValue({} as GenerateResponse); + + await service.generate(prompt, options); + + expect(agentMock.generate).toHaveBeenCalledWith( + prompt, + expect.any(String), + { kind: 'user', name: 'guest', namespace: 'default' }, + { credentials }, + ); + }); + + it('should throw an error if specified agent is not found', async () => { + const prompt = 'Test prompt'; + const options = { agentName: 'nonExistentAgent' }; + + await expect(service.generate(prompt, options)).rejects.toThrow( + 'Agent nonExistentAgent not found', + ); + }); + }); + + describe('getAgent', () => { + it('should return the correct agent', () => { + const result = service.getAgent('testAgent'); + expect(result).toBe(agentMock); + }); + + it('should return undefined for non-existent agent', () => { + const result = service.getAgent('nonExistentAgent'); + expect(result).toBeUndefined(); + }); + }); +}); diff --git a/plugins/genai/backend/src/service/DefaultAgentService.ts b/plugins/genai/backend/src/service/DefaultAgentService.ts new file mode 100644 index 0000000..3fc4420 --- /dev/null +++ b/plugins/genai/backend/src/service/DefaultAgentService.ts @@ -0,0 +1,176 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + BackstageCredentials, + LoggerService, + UserInfoService, +} from '@backstage/backend-plugin-api'; +import { AgentService } from './types'; +import { Config } from '@backstage/config'; +import { v4 as uuidv4 } from 'uuid'; +import { Toolkit } from '../tools/Toolkit'; +import { parseEntityRef } from '@backstage/catalog-model'; +import { readAgentsConfig } from '../config/config'; +import { Agent } from '../agent/Agent'; +import { InvokeAgentTool } from '../tools/invokeAgentTool'; +import { AgentTypeFactory } from '@aws/genai-plugin-for-backstage-node'; +import { + ChatEvent, + GenerateResponse, +} from '@aws/genai-plugin-for-backstage-common'; + +export class DefaultAgentService implements AgentService { + public constructor( + private readonly logger: LoggerService, + private readonly userInfo: UserInfoService, + private readonly agents: Map, + ) {} + + static async fromConfig( + config: Config, + options: { + agentTypeFactories: AgentTypeFactory[]; + toolkit: Toolkit; + userInfo: UserInfoService; + logger: LoggerService; + }, + ) { + const agentTypeFactoryMap = new Map( + options.agentTypeFactories.map(factory => [ + factory.getTypeName(), + factory, + ]), + ); + + const agentConfigs = readAgentsConfig(config); + const agents = new Map(); + + const agentTools = agentConfigs.map(e => { + return new InvokeAgentTool(e.name, e.description); + }); + + options.toolkit.add(...agentTools); + + for (const agentConfig of agentConfigs) { + let agentTypeFactory: AgentTypeFactory | undefined; + + if (!agentConfig.type) { + if (agentTypeFactoryMap.size === 1) { + agentTypeFactory = agentTypeFactoryMap.values().next().value!; + } else { + throw new Error( + `Agent type not specified for agent ${agentConfig.name}`, + ); + } + } else { + agentTypeFactory = agentTypeFactoryMap.get(agentConfig.type); + } + + if (!agentTypeFactory) { + throw new Error(`Unknown agent type ${agentConfig.type}`); + } + + const agent = await Agent.fromConfig( + agentConfig, + agentTypeFactory, + options.toolkit, + options.logger.child({ + agent: agentConfig.name, + }), + ); + + agents.set(agent.getName(), agent); + } + + const service = new DefaultAgentService( + options.logger, + options.userInfo, + agents, + ); + + agentTools.forEach(e => e.setAgentService(service)); + + return service; + } + + async stream( + userMessage: string, + options: { + agentName: string; + sessionId?: string; + credentials?: BackstageCredentials; + }, + ): Promise> { + let realSessionId = options.sessionId; + let newSession = false; + + if (!realSessionId) { + realSessionId = this.generateSessionId(); + newSession = true; + } + + const userEntityRef = await this.getUserEntityRef(options.credentials); + + const agent = this.getActualAgent(options.agentName); + + return agent.stream(userMessage, realSessionId, newSession, userEntityRef, { + credentials: options.credentials, + }); + } + + async generate( + prompt: string, + options: { + agentName: string; + credentials?: BackstageCredentials; + }, + ): Promise { + const realSessionId = this.generateSessionId(); + + const userEntityRef = await this.getUserEntityRef(options.credentials); + + const agent = this.getActualAgent(options.agentName); + + return agent.generate(prompt, realSessionId, userEntityRef, { + credentials: options.credentials, + }); + } + + private getActualAgent(agentName: string): Agent { + const agent = this.agents.get(agentName); + + if (!agent) { + throw new Error(`Agent ${agentName} not found`); + } + + return agent; + } + + public getAgent(agent: string): Agent | undefined { + return this.agents.get(agent); + } + + private generateSessionId() { + const sessionId = uuidv4(); + this.logger.info(`Generated session ${sessionId}`); + + return sessionId; + } + + private async getUserEntityRef(credentials?: BackstageCredentials) { + const userInfo = await this.userInfo.getUserInfo(credentials!); + + return parseEntityRef(userInfo.userEntityRef); + } +} diff --git a/plugins/genai/backend/src/service/router.ts b/plugins/genai/backend/src/service/router.ts new file mode 100644 index 0000000..47e5161 --- /dev/null +++ b/plugins/genai/backend/src/service/router.ts @@ -0,0 +1,121 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + createLegacyAuthAdapters, + errorHandler, +} from '@backstage/backend-common'; +import express from 'express'; +import Router from 'express-promise-router'; +import { + AuthService, + DiscoveryService, + HttpAuthService, + LoggerService, +} from '@backstage/backend-plugin-api'; +import { AgentService } from './types'; +import { + ChatRequest, + GenerateRequest, + ChatEvent, +} from '@aws/genai-plugin-for-backstage-common'; + +export interface RouterOptions { + logger: LoggerService; + agentService: AgentService; + discovery: DiscoveryService; + auth?: AuthService; + httpAuth?: HttpAuthService; +} + +export async function createRouter( + options: RouterOptions, +): Promise { + const { logger, agentService } = options; + + const router = Router(); + router.use(express.json()); + + const { httpAuth } = createLegacyAuthAdapters(options); + + router.post('/v1/chat', async (request, response) => { + const payload = request.body as ChatRequest; + + const credentials = await httpAuth.credentials(request); + + response.writeHead(200, { + 'Content-Type': 'text/event-stream', + Connection: 'keep-alive', + 'Cache-Control': 'no-cache', + }); + + const stream = await agentService.stream(payload.userMessage, { + ...payload, + credentials, + }); + + const reader = stream.getReader(); + + try { + // eslint-disable-next-line no-constant-condition + while (true) { + const { done, value } = await reader.read(); + if (done) break; + + response.write(stringifyEvent(value)); + + // @ts-ignore + response.flush(); + } + } catch (e: any) { + logger.error(`Agent stream failed: ${e}`, e); + + response.write( + stringifyEvent({ + type: 'ErrorEvent', + message: e.message, + }), + ); + } finally { + reader.releaseLock(); + } + + response.end(); + }); + + router.post('/v1/generate', async (request, response) => { + const payload = request.body as GenerateRequest; + + const credentials = await httpAuth.credentials(request); + + const answer = await agentService.generate(payload.prompt, { + ...payload, + credentials, + }); + + response.json({ ...answer }); + }); + + router.get('/health', (_, response) => { + logger.info('PONG!'); + response.json({ status: 'ok' }); + }); + router.use(errorHandler()); + return router; +} + +function stringifyEvent(event: ChatEvent) { + const data = `data: ${JSON.stringify(event)}\n\n`; + + return data; +} diff --git a/plugins/genai/backend/src/service/types.ts b/plugins/genai/backend/src/service/types.ts new file mode 100644 index 0000000..3c1187f --- /dev/null +++ b/plugins/genai/backend/src/service/types.ts @@ -0,0 +1,37 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + ChatEvent, + GenerateResponse, +} from '@aws/genai-plugin-for-backstage-common'; +import { BackstageCredentials } from '@backstage/backend-plugin-api'; + +export interface AgentService { + stream( + userMessage: string, + options: { + agentName: string; + sessionId?: string; + credentials?: BackstageCredentials; + }, + ): Promise>; + + generate( + prompt: string, + options: { + agentName: string; + credentials?: BackstageCredentials; + }, + ): Promise; +} diff --git a/plugins/genai/backend/src/setupTests.ts b/plugins/genai/backend/src/setupTests.ts new file mode 100644 index 0000000..19d0e85 --- /dev/null +++ b/plugins/genai/backend/src/setupTests.ts @@ -0,0 +1,14 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export {}; diff --git a/plugins/genai/backend/src/tools/Toolkit.ts b/plugins/genai/backend/src/tools/Toolkit.ts new file mode 100644 index 0000000..59f2ecb --- /dev/null +++ b/plugins/genai/backend/src/tools/Toolkit.ts @@ -0,0 +1,43 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ToolInterface } from '@langchain/core/tools'; + +export class Toolkit { + private tools: Map; + + constructor() { + this.tools = new Map(); + } + + add(...tools: ToolInterface[]): void { + tools.forEach(tool => { + const name = tool.getName(); + if (name) { + this.tools.set(name, tool); + } else { + console.warn( + 'Attempted to add a tool without a name. This tool will be skipped.', + ); + } + }); + } + + getTools(): ToolInterface[] { + return Array.from(this.tools.values()); + } + + getToolByName(name: string): ToolInterface | undefined { + return this.tools.get(name); + } +} diff --git a/plugins/genai/backend/src/tools/catalogEntityTool.ts b/plugins/genai/backend/src/tools/catalogEntityTool.ts new file mode 100644 index 0000000..b6248a2 --- /dev/null +++ b/plugins/genai/backend/src/tools/catalogEntityTool.ts @@ -0,0 +1,64 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + AuthService, + BackstageCredentials, +} from '@backstage/backend-plugin-api'; +import { CatalogApi } from '@backstage/catalog-client'; +import { stringifyEntityRef } from '@backstage/catalog-model'; +import { DynamicStructuredTool } from '@langchain/core/tools'; +import { z } from 'zod'; + +export function createBackstageEntityTool( + catalogApi: CatalogApi, + auth: AuthService, +) { + return new DynamicStructuredTool({ + get name() { + return 'backstageEntity'; + }, + description: + 'Returns information regarding an entity from the Backstage catalog.', + schema: z.object({ + entityName: z + .string() + .describe('Entity name as it appears in the Backstage catalog'), + kind: z + .string() + .describe('Entity kind as it appears in the Backstage catalog'), + namespace: z + .string() + .describe('Entity namespace as it appears in the Backstage catalog') + .default('default'), + }), + func: async ({ entityName, kind, namespace }, _, toolConfig) => { + const credentials = toolConfig?.configurable! + .credentials as BackstageCredentials; + + return JSON.stringify( + await catalogApi.getEntitiesByRefs( + { + entityRefs: [ + stringifyEntityRef({ kind, namespace, name: entityName }), + ], + }, + await auth.getPluginRequestToken({ + onBehalfOf: credentials, + targetPluginId: 'catalog', + }), + ), + ); + }, + }); +} diff --git a/plugins/genai/backend/src/tools/catalogSearchTool.ts b/plugins/genai/backend/src/tools/catalogSearchTool.ts new file mode 100644 index 0000000..b6c58bf --- /dev/null +++ b/plugins/genai/backend/src/tools/catalogSearchTool.ts @@ -0,0 +1,55 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + AuthService, + BackstageCredentials, + DiscoveryService, +} from '@backstage/backend-plugin-api'; +import { DynamicStructuredTool } from '@langchain/core/tools'; +import { z } from 'zod'; + +export function createBackstageCatalogSearchTool( + discoveryApi: DiscoveryService, + auth: AuthService, +) { + return new DynamicStructuredTool({ + get name() { + return 'backstageCatalogSearch'; + }, + description: 'Searches the Backstage catalog.', + schema: z.object({ + query: z.string().describe('Search query'), + }), + func: async ({ query }, _, toolConfig) => { + const credentials = toolConfig?.configurable! + .credentials as BackstageCredentials; + + const url = `${await discoveryApi.getBaseUrl( + 'search', + )}/query?term=${query}&types[0]=software-catalog`; + const { token } = await auth.getPluginRequestToken({ + onBehalfOf: credentials, + targetPluginId: 'search', + }); + const response = await fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}`, + }, + }); + return response.text(); + }, + }); +} diff --git a/plugins/genai/backend/src/tools/index.ts b/plugins/genai/backend/src/tools/index.ts new file mode 100644 index 0000000..8ba7da7 --- /dev/null +++ b/plugins/genai/backend/src/tools/index.ts @@ -0,0 +1,16 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './catalogEntityTool'; +export * from './catalogSearchTool'; +export * from './techDocsSearchTool'; diff --git a/plugins/genai/backend/src/tools/invokeAgentTool.ts b/plugins/genai/backend/src/tools/invokeAgentTool.ts new file mode 100644 index 0000000..d335ffe --- /dev/null +++ b/plugins/genai/backend/src/tools/invokeAgentTool.ts @@ -0,0 +1,57 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Tool } from '@langchain/core/tools'; +import { AgentService } from '../service/types'; +import { RunnableConfig } from '@langchain/core/runnables'; +import { BackstageCredentials } from '@backstage/backend-plugin-api'; + +export class InvokeAgentTool extends Tool { + static lc_name() { + return 'InvokeAgentTool'; + } + + private agentService?: AgentService; + + constructor( + public readonly name: string, + public readonly description: string, + ) { + super(); + } + + public setAgentService(agentService: AgentService) { + this.agentService = agentService; + } + + async _call(query: string, _: any, config: RunnableConfig): Promise { + const credentials = config?.configurable! + .credentials as BackstageCredentials; + + if (!this.agentService) { + throw new Error('Agent service not set in InvokeAgentTool'); + } + + try { + const response = await this.agentService.generate(query, { + agentName: this.name, + credentials, + }); + + return response.output; + } catch (e) { + console.error(e); + throw e; + } + } +} diff --git a/plugins/genai/backend/src/tools/techDocsSearchTool.ts b/plugins/genai/backend/src/tools/techDocsSearchTool.ts new file mode 100644 index 0000000..dc5122f --- /dev/null +++ b/plugins/genai/backend/src/tools/techDocsSearchTool.ts @@ -0,0 +1,56 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + AuthService, + BackstageCredentials, + DiscoveryService, +} from '@backstage/backend-plugin-api'; +import { DynamicStructuredTool } from '@langchain/core/tools'; +import { z } from 'zod'; + +export function createBackstageTechDocsSearchTool( + discoveryApi: DiscoveryService, + auth: AuthService, +) { + return new DynamicStructuredTool({ + get name() { + return 'backstageTechDocsSearch'; + }, + description: + 'Searches the Backstage TechDocs internal documentation for the organization.', + schema: z.object({ + query: z.string().describe('Search query'), + }), + func: async ({ query }, _, toolConfig) => { + const credentials = toolConfig?.configurable! + .credentials as BackstageCredentials; + + const url = `${await discoveryApi.getBaseUrl( + 'search', + )}/query?term=${query}&types[0]=techdocs`; + const { token } = await auth.getPluginRequestToken({ + onBehalfOf: credentials, + targetPluginId: 'search', + }); + const response = await fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}`, + }, + }); + return response.text(); + }, + }); +} diff --git a/plugins/genai/common/.eslintrc.js b/plugins/genai/common/.eslintrc.js new file mode 100644 index 0000000..e2a53a6 --- /dev/null +++ b/plugins/genai/common/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/genai/common/README.md b/plugins/genai/common/README.md new file mode 100644 index 0000000..cbe04d1 --- /dev/null +++ b/plugins/genai/common/README.md @@ -0,0 +1,3 @@ +# AWS Generative AI plugin for Backstage - Common + +This a common plugin package for Backstage related to Generative AI. For more information see the [documentation](../README.md). diff --git a/plugins/genai/common/package.json b/plugins/genai/common/package.json new file mode 100644 index 0000000..f3a86b2 --- /dev/null +++ b/plugins/genai/common/package.json @@ -0,0 +1,49 @@ +{ + "name": "@aws/genai-plugin-for-backstage-common", + "description": "Common functionality for the GenAI AWS plugins for Backstage", + "version": "0.0.0", + "repository": { + "type": "git", + "url": "github:awslabs/backstage-plugins-for-aws", + "directory": "plugins/genai/common" + }, + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "module": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "common-library", + "pluginId": "aws-genai", + "pluginPackages": [ + "@aws/genai-plugin-for-backstage-backend", + "@aws/genai-plugin-for-backstage-common", + "@aws/genai-plugin-for-backstage-node", + "@aws/genai-plugin-for-backstage" + ] + }, + "sideEffects": false, + "scripts": { + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "devDependencies": { + "@backstage/cli": "^0.26.2" + }, + "files": [ + "dist" + ], + "dependencies": { + "cross-fetch": "^4.0.0", + "uri-template": "^2.0.0", + "zod": "^3.23.8" + } +} diff --git a/plugins/genai/common/src/client.ts b/plugins/genai/common/src/client.ts new file mode 100644 index 0000000..4441ce5 --- /dev/null +++ b/plugins/genai/common/src/client.ts @@ -0,0 +1,59 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + AgentRequestOptions, + GenerateRequest, + GenerateResponse, +} from './types'; +import fetch from 'cross-fetch'; +import * as parser from 'uri-template'; + +const PLUGIN_ID = 'aws-genai'; + +export interface AgentClient { + generate( + request: GenerateRequest, + options: AgentRequestOptions, + ): Promise; +} + +export class DefaultAgentClient implements AgentClient { + constructor( + private readonly discoveryApi: { + getBaseUrl(pluginId: string): Promise; + }, + ) {} + + async generate( + request: GenerateRequest, + options?: AgentRequestOptions, + ): Promise { + const baseUrl = await this.discoveryApi.getBaseUrl(PLUGIN_ID); + + const uriTemplate = `/v1/generate`; + + const uri = parser.parse(uriTemplate).expand({}); + + const response = await fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'POST', + body: JSON.stringify(request), + }); + + return response.json() as Promise; + } +} diff --git a/plugins/genai/common/src/events.ts b/plugins/genai/common/src/events.ts new file mode 100644 index 0000000..61a344f --- /dev/null +++ b/plugins/genai/common/src/events.ts @@ -0,0 +1,36 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { z } from 'zod'; + +export const EventSchema = z.discriminatedUnion('type', [ + z.object({ + type: z.literal('ChunkEvent'), + token: z.string(), + }), + z.object({ + type: z.literal('ResponseEvent'), + sessionId: z.string(), + }), + z.object({ + type: z.literal('ToolEvent'), + name: z.string(), + input: z.string(), + }), + z.object({ + type: z.literal('ErrorEvent'), + message: z.string(), + }), +]); + +export type ChatEvent = z.TypeOf; diff --git a/plugins/genai/common/src/index.ts b/plugins/genai/common/src/index.ts new file mode 100644 index 0000000..a95df47 --- /dev/null +++ b/plugins/genai/common/src/index.ts @@ -0,0 +1,16 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './types'; +export * from './client'; +export * from './events'; diff --git a/plugins/genai/common/src/setupTests.ts b/plugins/genai/common/src/setupTests.ts new file mode 100644 index 0000000..19d0e85 --- /dev/null +++ b/plugins/genai/common/src/setupTests.ts @@ -0,0 +1,14 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export {}; diff --git a/plugins/genai/common/src/types.ts b/plugins/genai/common/src/types.ts new file mode 100644 index 0000000..44dfc30 --- /dev/null +++ b/plugins/genai/common/src/types.ts @@ -0,0 +1,31 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface ChatRequest { + userMessage: string; + sessionId: string | undefined; + agentName: string; +} + +export interface GenerateRequest { + prompt: string; + agentName: string; +} + +export interface AgentRequestOptions { + token: string; +} + +export interface GenerateResponse { + output: any; +} diff --git a/plugins/genai/docs/agent-types.md b/plugins/genai/docs/agent-types.md new file mode 100644 index 0000000..e407d34 --- /dev/null +++ b/plugins/genai/docs/agent-types.md @@ -0,0 +1,18 @@ +# Agent implementation + +For the purposes of this plugin we'll consider LLM agents to be AI tools that display a certain amount of reasoning capabilities and memory, with the ability to perform tasks and interact with other systems autonomously. + +As this space is rapidly evolving, this plugin takes no opinionated stance on how agents should be implemented. It can also be desirable to provide different implementations of agents for specific purposes. + +An agent implementation needs to implement the [AgentType](../node/src/types.ts) interface, which has two functions: + +1. A `stream` function for chat, session-based use-cases +2. A `generate` function for transactional use-cases + +The [LangGraph agent implementation](../agent-langgraph/) can be used as a reference. + +Agents are expected to: + +1. Apply configuration such as the system prompt +1. Appropriately invoke the list of tools provided +1. Provide "memory" of message history diff --git a/plugins/genai/docs/prompting-tips.md b/plugins/genai/docs/prompting-tips.md new file mode 100644 index 0000000..806ecf5 --- /dev/null +++ b/plugins/genai/docs/prompting-tips.md @@ -0,0 +1,63 @@ +# Prompting tips + +Here are various prompting tips that can help improve the responses from agents. + +## Limiting response length + +To help provide more succinct responses and also save on token costs you can tell models to limit their response length. + +``` +Responses should be 150 words at most. +``` + +## Markdown output + +The chat assistant UI page renders output in a Markdown component, so instructing agents to output accordingly can improve output quality. For example this will result in code snippets being formatted, the ability to provide browser links, rendering tables and so on. + +``` +Answers should always be well-structured and use well-formed Markdown. +``` + +## Teaching about the Backstage catalog + +It can help to teach agents about the how the Backstage catalog works. For example: + +``` +The Backstage catalog contains important information about the users software platform and organization. Each item in the catalog is an 'entity' that can contain the following information: + +- Metadata such as the name +- Relationships such as entities that depend on that entity, for example resources that a component relies on + +Entities can be of the following "kinds": + +- Component: A microservice or application +- Resource: infrastructure a system needs to operate like a database, object store bucket or load balancer +- User: A user in the organization +- Group: A group or team that usually has one or more User entities associated +- API: Information regarding an API within the organization, typically including an OpenAPI specification +- Template: A software template used to start a new software project + +When asked about a microservice, application or workload assume that this refers to a component in the Backstage catalog. If a tool needs an entity name, kind or namespace first search the Backstage catalog for the relevant information if it is not already available. +``` + +## Linking to catalog entities + +Agents can typically create accurate links to pages in the Backstage catalog based on results from the catalog and search tools. + +``` +When mentioning a Backstage entity by name in your response always format the entity name as a Markdown link of the format: + +[entity name](/catalog///) + +For example: + +[carts-api](/catalog/default/component/carts-api) +``` + +## Preferring internal documentation + +Its generally preferable to first search internal documentation before falling back on the models "general knowledge". + +``` +When providing a recommendation for remediation always search the TechDocs for a recommendation. If nothing is found then rely on your own knowledge. +``` diff --git a/plugins/genai/docs/tools.md b/plugins/genai/docs/tools.md new file mode 100644 index 0000000..8785a12 --- /dev/null +++ b/plugins/genai/docs/tools.md @@ -0,0 +1,45 @@ +# Tools + +The term "tool use" or "function calling" describes a mechanism where an LLM is provided functions it can request to call for things like getting additional context or taking actions. When using this approach LLMs will generally apply patterns such as ["chain of thought"](https://www.ibm.com/topics/chain-of-thoughts) to break a user prompt in to a number of separate steps that can be fulfilled by the tools it has been provided. + +## Existing tools + +| Package | Tools name | Description | +| ---------- | ------------------------- | -------------------------------------------------------------------- | +| (built-in) | `backstageCatalogSearch` | Search the Backstage catalog using the Search API | +| | `backstageEntity` | Retrieve information about a specific entity through the Catalog API | +| | `backstageTechdocsSearch` | Search TechDocs documentation using the Search API | + +## Creating tools + +This plugin provides a Backstage extension point to register additional tools which agents can use. Tools must implement the LangChain [`ToolInterface`](https://v03.api.js.langchain.com/interfaces/_langchain_core.tools.ToolInterface.html) interface, which can be done in several ways. The most common would be to use the [`DynamicStructuredTool`](https://v03.api.js.langchain.com/classes/_langchain_core.tools.DynamicStructuredTool.html) class, which allows the specification of a schema and implementation. + +See [this guide](https://js.langchain.com/docs/how_to/custom_tools) for creating tools. + +Registering tools with the plugin is done like so: + +```typescript +import { + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { agentToolExtensionPoint } from '@aws/genai-plugin-for-backstage-node'; + +export const genAiPluginForBackstageModuleExampleTools = createBackendModule({ + pluginId: 'aws-genai', + moduleId: '', + register(reg) { + reg.registerInit({ + deps: { + [...] + }, + async init({ [...] }) { + agentToolFunctions.addTools( + + ); + }, + }); + }, +}); +``` + +See the existing tools in this repository for concrete implementations. diff --git a/plugins/genai/frontend/.eslintrc.js b/plugins/genai/frontend/.eslintrc.js new file mode 100644 index 0000000..e2a53a6 --- /dev/null +++ b/plugins/genai/frontend/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/genai/frontend/README.md b/plugins/genai/frontend/README.md new file mode 100644 index 0000000..dc5e3e3 --- /dev/null +++ b/plugins/genai/frontend/README.md @@ -0,0 +1,3 @@ +# AWS Generative AI plugin for Backstage - Frontend + +This a frontend plugin package for Backstage related to Generative AI. For more information see the [documentation](../README.md). diff --git a/plugins/genai/frontend/config.d.ts b/plugins/genai/frontend/config.d.ts new file mode 100644 index 0000000..23321bd --- /dev/null +++ b/plugins/genai/frontend/config.d.ts @@ -0,0 +1,25 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Config { + genai?: { + chat?: { + /** + * (Optional) Whether to show the information button in the chat interface + * If not set, information model cannot be accessed + * @visibility frontend + */ + showInformation?: boolean; + }; + }; +} diff --git a/plugins/genai/frontend/dev/index.tsx b/plugins/genai/frontend/dev/index.tsx new file mode 100644 index 0000000..06fad12 --- /dev/null +++ b/plugins/genai/frontend/dev/index.tsx @@ -0,0 +1,17 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createDevApp } from '@backstage/dev-utils'; +import { awsGenAiPlugin } from '../src/plugin'; + +createDevApp().registerPlugin(awsGenAiPlugin).render(); diff --git a/plugins/genai/frontend/package.json b/plugins/genai/frontend/package.json new file mode 100644 index 0000000..3e496e2 --- /dev/null +++ b/plugins/genai/frontend/package.json @@ -0,0 +1,66 @@ +{ + "name": "@aws/genai-plugin-for-backstage", + "description": "Frontend package for the GenAI AWS plugins for Backstage", + "version": "0.0.0", + "repository": { + "type": "git", + "url": "github:awslabs/backstage-plugins-for-aws", + "directory": "plugins/genai/frontend" + }, + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "frontend-plugin", + "pluginId": "aws-genai", + "pluginPackages": [ + "@aws/genai-plugin-for-backstage-backend", + "@aws/genai-plugin-for-backstage-common", + "@aws/genai-plugin-for-backstage-node", + "@aws/genai-plugin-for-backstage" + ] + }, + "configSchema": "config.d.ts", + "sideEffects": false, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@aws/genai-plugin-for-backstage-common": "workspace:^", + "@backstage/core-components": "^0.14.3", + "@backstage/core-plugin-api": "^1.9.1", + "@material-ui/core": "^4.12.2", + "@material-ui/icons": "^4.9.1", + "eventsource-parser": "^2.0.1", + "ts-pattern": "^5.5.0" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0", + "react-router-dom": "6.0.0-beta.0 || ^6.3.0" + }, + "devDependencies": { + "@backstage/cli": "^0.26.2", + "@backstage/dev-utils": "^1.0.30", + "@testing-library/dom": "^9.0.0", + "@testing-library/jest-dom": "^6.0.0", + "@testing-library/react": "^14.0.0", + "@testing-library/user-event": "^14.0.0", + "msw": "^1.0.0" + }, + "files": [ + "dist", + "config.d.ts" + ] +} diff --git a/plugins/genai/frontend/src/api/AgentApi.ts b/plugins/genai/frontend/src/api/AgentApi.ts new file mode 100644 index 0000000..339e957 --- /dev/null +++ b/plugins/genai/frontend/src/api/AgentApi.ts @@ -0,0 +1,23 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createApiRef } from '@backstage/core-plugin-api'; +import { ChatEvent, ChatRequest } from '@aws/genai-plugin-for-backstage-common'; + +export const agentApiRef = createApiRef({ + id: 'plugin.aws-genai-agent.service', +}); + +export interface AgentApi { + chatSync(request: ChatRequest): AsyncGenerator; +} diff --git a/plugins/genai/frontend/src/api/AgentApiClient.ts b/plugins/genai/frontend/src/api/AgentApiClient.ts new file mode 100644 index 0000000..50f56d7 --- /dev/null +++ b/plugins/genai/frontend/src/api/AgentApiClient.ts @@ -0,0 +1,90 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api'; + +import { AgentApi } from './AgentApi'; +import { + EventSourceParserStream, + ParsedEvent, +} from 'eventsource-parser/stream'; +import { + ChatEvent, + ChatRequest, + EventSchema, +} from '@aws/genai-plugin-for-backstage-common'; + +export class AgentApiClient implements AgentApi { + private readonly discoveryApi: DiscoveryApi; + private readonly fetchApi: FetchApi; + + public constructor(options: { + discoveryApi: DiscoveryApi; + fetchApi: FetchApi; + }) { + this.discoveryApi = options.discoveryApi; + this.fetchApi = options.fetchApi; + } + + async *chatSync(request: ChatRequest): AsyncGenerator { + try { + const stream = await this.fetch('v1/chat', { + headers: { 'Content-Type': 'application/json' }, + method: 'POST', + body: JSON.stringify(request), + }); + + const reader = stream + .pipeThrough(new TextDecoderStream()) + .pipeThrough(new EventSourceParserStream()) + .pipeThrough( + new TransformStream({ + transform(parsedEvent, controller) { + // eslint-disable-next-line no-console + const data = JSON.parse(parsedEvent.data); + controller.enqueue(EventSchema.parse(data)); + }, + }), + ) + .getReader(); + + while (true) { + const { done, value } = await reader.read(); + if (done) break; + yield value; + } + } catch (e: any) { + // eslint-disable-next-line no-console + console.error(e.message); + + yield { + type: 'ErrorEvent', + message: e.message, + }; + } + } + + private async getBaseUrl(): Promise { + return this.discoveryApi.getBaseUrl('aws-genai'); + } + + private async fetch(path: string, options: {} = {}) { + const baseUrl = await this.getBaseUrl(); + const response = await this.fetchApi.fetch(`${baseUrl}/${path}`, options); + + if (!response.ok) + throw new Error(`Failed to retrieved data from path ${path}`); + + return response.body!; + } +} diff --git a/plugins/genai/frontend/src/api/index.ts b/plugins/genai/frontend/src/api/index.ts new file mode 100644 index 0000000..dd52835 --- /dev/null +++ b/plugins/genai/frontend/src/api/index.ts @@ -0,0 +1,15 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './AgentApi'; +export * from './AgentApiClient'; diff --git a/plugins/genai/frontend/src/components/AgentPage/AgentPage.tsx b/plugins/genai/frontend/src/components/AgentPage/AgentPage.tsx new file mode 100644 index 0000000..7744e4f --- /dev/null +++ b/plugins/genai/frontend/src/components/AgentPage/AgentPage.tsx @@ -0,0 +1,151 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { configApiRef, useApi } from '@backstage/core-plugin-api'; +import { Page, Header, Content, InfoCard } from '@backstage/core-components'; +import React, { useCallback, useState } from 'react'; +import { ChatHistoryComponent } from '../ChatHistoryComponent'; +import { ChatInputComponent } from '../ChatInputComponent'; +import { ChatMessage } from '../types'; +import { agentApiRef } from '../../api'; +import { match } from 'ts-pattern'; + +import { useParams } from 'react-router-dom'; +import { makeStyles } from '@material-ui/core'; + +const useStyles = makeStyles({ + flex: { + display: 'flex', + height: '100%', + flexDirection: 'column', + }, + + grow: { + flexGrow: 1, + minHeight: 'max-content', + maxHeight: '100%', + marginBottom: '1rem', + }, +}); + +export const AgentPage = ({ title = 'Chat Assistant' }: { title?: string }) => { + const classes = useStyles(); + + const agentApi = useApi(agentApiRef); + const config = useApi(configApiRef); + + const showInformation = + config.getOptionalBoolean('genai.chat.showInformation') ?? false; + + const [messages, setMessages] = useState([]); + const [sessionId, setSessionId] = useState(undefined); + + const [isLoading, setIsLoading] = useState(false); + + const params = useParams() as { agentName: string }; + const agentName = params.agentName; + + const onUserMessage = useCallback( + async (userMessage: string) => { + setMessages(value => [ + ...value, + { + payload: userMessage, + type: 'user', + tools: [], + }, + { + payload: '', + type: 'agent', + tools: [], + }, + ]); + setIsLoading(true); + + for await (const chunk of agentApi.chatSync({ + userMessage, + sessionId, + agentName, + })) { + match(chunk) + .with({ type: 'ChunkEvent' }, e => { + setMessages(oldMessages => { + const lastMessage = oldMessages[oldMessages.length - 1]; + lastMessage.payload = lastMessage.payload.concat(e.token); + + return [...oldMessages.slice(0, -1), lastMessage]; + }); + }) + .with({ type: 'ResponseEvent' }, e => { + setSessionId(e.sessionId); + }) + .with({ type: 'ToolEvent' }, e => { + setMessages(oldMessages => { + const lastMessage = oldMessages[oldMessages.length - 1]; + lastMessage.tools.push(e); + + return [...oldMessages.slice(0, -1), lastMessage]; + }); + }) + .with({ type: 'ErrorEvent' }, e => { + setMessages(oldMessages => { + const lastMessage = oldMessages[oldMessages.length - 1]; + lastMessage.payload = lastMessage.payload.concat( + `Error: ${e.message}`, + ); + lastMessage.type = 'error'; + + return [...oldMessages.slice(0, -1), lastMessage]; + }); + }) + .exhaustive(); + } + + setIsLoading(false); + }, + [agentApi, sessionId, agentName], + ); + + const onClear = () => { + setMessages([]); + setIsLoading(false); + setSessionId(undefined); + }; + + if (!agentName) { + throw new Error('agent name is not defined'); + } + + return ( + +
+ +
+ + + + +
+
+ + ); +}; diff --git a/plugins/genai/frontend/src/components/AgentPage/index.ts b/plugins/genai/frontend/src/components/AgentPage/index.ts new file mode 100644 index 0000000..b577d8d --- /dev/null +++ b/plugins/genai/frontend/src/components/AgentPage/index.ts @@ -0,0 +1,14 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { AgentPage } from './AgentPage'; diff --git a/plugins/genai/frontend/src/components/ChatHistoryComponent/ChatHistoryComponent.tsx b/plugins/genai/frontend/src/components/ChatHistoryComponent/ChatHistoryComponent.tsx new file mode 100644 index 0000000..9986307 --- /dev/null +++ b/plugins/genai/frontend/src/components/ChatHistoryComponent/ChatHistoryComponent.tsx @@ -0,0 +1,231 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { EmptyState, MarkdownContent } from '@backstage/core-components'; +import React, { useEffect, useRef } from 'react'; + +import { ChatMessage, ToolRecord } from '../types'; +import { Avatar } from '@material-ui/core'; +import Person from '@material-ui/icons/Person'; +import School from '@material-ui/icons/School'; +import Info from '@material-ui/icons/Info'; +import Error from '@material-ui/icons/Error'; +import { ToolsModal } from './ToolsModal'; +import { makeStyles } from '@material-ui/core'; + +const useStyles = makeStyles({ + container: { + display: 'flex', + flexDirection: 'column', + }, + + markdownContainer: { + flexGrow: 1, + position: 'relative', + }, + + markdown: { + position: 'absolute', + left: 0, + top: '1rem', + right: 0, + bottom: '1rem', + padding: '0 2rem', + overflow: 'auto', + }, + + ChatItem: { + display: 'flex', + justifyContent: 'flex-start', + alignItems: 'flex-start', + width: '100%', + marginBottom: '1rem', + fontSize: '16px', + background: '#f8f8fa', + color: '#4c4d53', + borderRadius: '7px', + padding: '10px', + }, + + ChatItemExpert: { + background: '#fff', + + '& $ChatItemChatText': { + background: '#fff', + }, + + '& $ChatItemAvatarIcon': { + backgroundColor: '#f59d12', + }, + }, + + ChatItemCustomer: {}, + + ChatItemMeta: { + display: 'flex', + alignItems: 'center', + flex: '0 1 auto', + marginRight: '1rem', + marginBottom: '0.5rem', + width: '2.5rem', + }, + + ChatItemContent: { + position: 'relative', + flex: '1 0 auto', + width: '100%', + }, + + ChatItemToolIcon: { + marginTop: '20px', + cursor: 'pointer', + }, + + ChatItemAvatarContainer: { + marginTop: '10px', + marginBottom: '10px', + width: '100px', + height: 'auto', + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + }, + + ChatItemAvatarIcon: {}, + + ChatItemChatText: { + position: 'relative', + width: '100%', + lineHeight: '1.3', + marginTop: '5px', + }, + + ChatItemError: { + background: '#fcf2f2', + color: '#5b2e2e', + + '& $ChatItemAvatarIcon': { + backgroundColor: '#5b2e2e', + }, + }, +}); + +export interface ChatHistoryComponentProps { + messages?: ChatMessage[]; + isStreaming?: boolean; + className?: string; + showInformation: boolean; +} + +function getMessageExtraClass(message: ChatMessage, classes: any): string { + if (message.type === 'user') { + return classes.ChatItemCustomer; + } + + if (message.type === 'error') { + return classes.ChatItemError; + } + + return classes.ChatItemExpert; +} + +function getMessageIcon(message: ChatMessage) { + if (message.type === 'user') { + return ; + } + + if (message.type === 'error') { + return ; + } + + return ; +} + +export const ChatHistoryComponent = ({ + messages, + className, + showInformation, +}: ChatHistoryComponentProps) => { + const classes = useStyles(); + + const contentRef = useRef(null); + + useEffect(() => { + if (contentRef.current) { + contentRef.current.scrollTop = contentRef.current.scrollHeight; + } + }, [messages]); + + const [open, setOpen] = React.useState(false); + const [tools, setTools] = React.useState([]); + + const handleOpen = (message: ChatMessage) => { + setOpen(true); + setTools(message.tools); + }; + + const handleClose = () => { + setOpen(false); + }; + + return ( +
+
+
+ {messages!.length === 0 && ( + + )} + + {messages!.length > 0 && + messages?.map((message, index) => ( +
+
+
+ + {getMessageIcon(message)} + +
+ {message.tools.length > 0 && showInformation && ( + handleOpen(message)} + /> + )} +
+
+ +
+
+ ))} +
+
+ +
+ ); +}; diff --git a/plugins/genai/frontend/src/components/ChatHistoryComponent/ToolsModal.tsx b/plugins/genai/frontend/src/components/ChatHistoryComponent/ToolsModal.tsx new file mode 100644 index 0000000..beeb355 --- /dev/null +++ b/plugins/genai/frontend/src/components/ChatHistoryComponent/ToolsModal.tsx @@ -0,0 +1,96 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { + Modal, + Typography, + makeStyles, + Accordion, + AccordionSummary, + AccordionDetails, +} from '@material-ui/core'; +import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; +import { ToolRecord } from '../types'; +import { MarkdownContent } from '@backstage/core-components'; + +const useStyles = makeStyles(theme => ({ + paper: { + position: 'absolute', + width: 800, + backgroundColor: theme.palette.background.paper, + border: '2px solid #000', + boxShadow: theme.shadows[5], + padding: theme.spacing(2, 4, 3), + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + }, +})); + +interface ToolParametersProps { + tool: ToolRecord; +} + +const ToolsParameters = ({ tool }: ToolParametersProps) => { + let data: any; + + try { + data = JSON.parse(tool.input); + } catch (e) { + data = tool.input; + } + + const markdown = ` +~~~json\n${JSON.stringify(data, undefined, 2)}\n~~~ +`; + + return ; +}; + +interface ToolsModalProps { + open: boolean; + onClose: () => void; + tools: ToolRecord[]; +} + +export const ToolsModal = ({ open, onClose, tools }: ToolsModalProps) => { + const classes = useStyles(); + + return ( + +
+

Tools

+ {tools.map((tool, index) => ( + + } + aria-controls={`panel${index}-content`} + id={`panel${index}-header`} + > + {tool.name} + + + + + + ))} +
+
+ ); +}; diff --git a/plugins/genai/frontend/src/components/ChatHistoryComponent/index.ts b/plugins/genai/frontend/src/components/ChatHistoryComponent/index.ts new file mode 100644 index 0000000..43030c9 --- /dev/null +++ b/plugins/genai/frontend/src/components/ChatHistoryComponent/index.ts @@ -0,0 +1,14 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { ChatHistoryComponent } from './ChatHistoryComponent'; diff --git a/plugins/genai/frontend/src/components/ChatInputComponent/ChatInputComponent.tsx b/plugins/genai/frontend/src/components/ChatInputComponent/ChatInputComponent.tsx new file mode 100644 index 0000000..42277b6 --- /dev/null +++ b/plugins/genai/frontend/src/components/ChatInputComponent/ChatInputComponent.tsx @@ -0,0 +1,97 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React, { useEffect, useRef, useState } from 'react'; +import { Button, makeStyles, TextField } from '@material-ui/core'; + +const useStyles = makeStyles({ + ChatInputLayout: { + display: 'flex', + flexDirection: 'row', + }, + + ChatInputContainer: { + flex: 1, + }, + + ChatInputButtons: { + marginLeft: '2rem', + display: 'flex', + alignItems: 'center', + }, +}); + +interface ChatInputComponentProps { + onMessage?: (message: string) => void; + disabled?: boolean; + onClear?: () => void; +} + +export const ChatInputComponent = ({ + onMessage, + disabled, + onClear, +}: ChatInputComponentProps) => { + const classes = useStyles(); + + const inputRef = useRef(null); + const [message, setMessage] = useState(''); + + useEffect(() => { + if (!disabled) { + const textArea = inputRef.current?.querySelector('textarea'); + textArea?.focus(); + } + }, [disabled]); + + const checkKeyPress = (evt: React.KeyboardEvent) => { + if (evt.code === 'Enter') { + if (!evt.shiftKey) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions + onMessage && onMessage(message); + setMessage(''); + evt.preventDefault(); + } + } + }; + + return ( +
+
+ setMessage(evt.target.value)} + fullWidth + disabled={disabled} + ref={inputRef} + /> +
+
+ +
+
+ ); +}; diff --git a/plugins/genai/frontend/src/components/ChatInputComponent/index.ts b/plugins/genai/frontend/src/components/ChatInputComponent/index.ts new file mode 100644 index 0000000..e52c54a --- /dev/null +++ b/plugins/genai/frontend/src/components/ChatInputComponent/index.ts @@ -0,0 +1,14 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { ChatInputComponent } from './ChatInputComponent'; diff --git a/plugins/genai/frontend/src/components/ChatInputComponent/style.module.css b/plugins/genai/frontend/src/components/ChatInputComponent/style.module.css new file mode 100644 index 0000000..890957e --- /dev/null +++ b/plugins/genai/frontend/src/components/ChatInputComponent/style.module.css @@ -0,0 +1,4 @@ +.clearButton { + align-self: start; + margin-bottom: 1.25rem; +} diff --git a/plugins/genai/frontend/src/components/index.ts b/plugins/genai/frontend/src/components/index.ts new file mode 100644 index 0000000..b577d8d --- /dev/null +++ b/plugins/genai/frontend/src/components/index.ts @@ -0,0 +1,14 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { AgentPage } from './AgentPage'; diff --git a/plugins/genai/frontend/src/components/types.ts b/plugins/genai/frontend/src/components/types.ts new file mode 100644 index 0000000..850eb56 --- /dev/null +++ b/plugins/genai/frontend/src/components/types.ts @@ -0,0 +1,23 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface ChatMessage { + payload: string; + type: string; + tools: ToolRecord[]; +} + +export interface ToolRecord { + name: string; + input: string; +} diff --git a/plugins/genai/frontend/src/index.ts b/plugins/genai/frontend/src/index.ts new file mode 100644 index 0000000..2ae653f --- /dev/null +++ b/plugins/genai/frontend/src/index.ts @@ -0,0 +1,14 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { awsGenAiPlugin, AgentChatPage } from './plugin'; diff --git a/plugins/genai/frontend/src/mocks/index.ts b/plugins/genai/frontend/src/mocks/index.ts new file mode 100644 index 0000000..a886a0d --- /dev/null +++ b/plugins/genai/frontend/src/mocks/index.ts @@ -0,0 +1,12 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ diff --git a/plugins/genai/frontend/src/plugin.test.ts b/plugins/genai/frontend/src/plugin.test.ts new file mode 100644 index 0000000..c5a4adf --- /dev/null +++ b/plugins/genai/frontend/src/plugin.test.ts @@ -0,0 +1,20 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { awsGenAiPlugin } from './plugin'; + +describe('aws-genai-plugin', () => { + it('should export plugin', () => { + expect(awsGenAiPlugin).toBeDefined(); + }); +}); diff --git a/plugins/genai/frontend/src/plugin.ts b/plugins/genai/frontend/src/plugin.ts new file mode 100644 index 0000000..de192da --- /dev/null +++ b/plugins/genai/frontend/src/plugin.ts @@ -0,0 +1,45 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + createApiFactory, + createPlugin, + createRoutableExtension, + discoveryApiRef, + fetchApiRef, +} from '@backstage/core-plugin-api'; +import { AgentApiClient, agentApiRef } from './api'; +import { rootRouteRef } from './routes'; + +export const awsGenAiPlugin = createPlugin({ + id: 'aws-genai', + routes: { + root: rootRouteRef, + }, + apis: [ + createApiFactory({ + api: agentApiRef, + deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef }, + factory: ({ discoveryApi, fetchApi }) => + new AgentApiClient({ discoveryApi, fetchApi }), + }), + ], +}); + +export const AgentChatPage = awsGenAiPlugin.provide( + createRoutableExtension({ + name: 'AgentChatPage', + component: () => import('./components/AgentPage').then(m => m.AgentPage), + mountPoint: rootRouteRef, + }), +); diff --git a/plugins/genai/frontend/src/routes.ts b/plugins/genai/frontend/src/routes.ts new file mode 100644 index 0000000..274cf86 --- /dev/null +++ b/plugins/genai/frontend/src/routes.ts @@ -0,0 +1,19 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createRouteRef } from '@backstage/core-plugin-api'; + +export const rootRouteRef = createRouteRef({ + id: 'aws-genai', + params: ['agentName'], +}); diff --git a/plugins/genai/frontend/src/setupTests.ts b/plugins/genai/frontend/src/setupTests.ts new file mode 100644 index 0000000..f24c809 --- /dev/null +++ b/plugins/genai/frontend/src/setupTests.ts @@ -0,0 +1,19 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import '@testing-library/jest-dom'; +import { TransformStream } from 'node:stream/web'; + +Object.defineProperties(globalThis, { + TransformStream: { value: TransformStream }, +}); diff --git a/plugins/genai/node/.eslintrc.js b/plugins/genai/node/.eslintrc.js new file mode 100644 index 0000000..e2a53a6 --- /dev/null +++ b/plugins/genai/node/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/genai/node/package.json b/plugins/genai/node/package.json new file mode 100644 index 0000000..45fef27 --- /dev/null +++ b/plugins/genai/node/package.json @@ -0,0 +1,52 @@ +{ + "name": "@aws/genai-plugin-for-backstage-node", + "description": "Node library for the GenAI AWS plugins for Backstage", + "version": "0.0.0", + "repository": { + "type": "git", + "url": "github:awslabs/backstage-plugins-for-aws", + "directory": "plugins/genai/node" + }, + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "node-library", + "pluginId": "aws-genai", + "pluginPackages": [ + "@aws/genai-plugin-for-backstage-backend", + "@aws/genai-plugin-for-backstage-common", + "@aws/genai-plugin-for-backstage-node", + "@aws/genai-plugin-for-backstage" + ] + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@aws/genai-plugin-for-backstage-common": "workspace:^", + "@backstage/backend-plugin-api": "^0.8.1", + "@backstage/catalog-model": "^1.7.0", + "@backstage/config": "^1.2.0", + "@langchain/core": "^0.3.18" + }, + "devDependencies": { + "@backstage/backend-common": "^0.24.0", + "@backstage/cli": "^0.27.0", + "aws-sdk-client-mock": "^4.0.0" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/genai/node/src/extensions.ts b/plugins/genai/node/src/extensions.ts new file mode 100644 index 0000000..7afd3cc --- /dev/null +++ b/plugins/genai/node/src/extensions.ts @@ -0,0 +1,34 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createExtensionPoint } from '@backstage/backend-plugin-api'; +import { ToolInterface } from '@langchain/core/tools'; +import { AgentTypeFactory } from './types'; + +export interface AgentToolExtensionPoint { + addTools(...tools: ToolInterface[]): void; +} + +export const agentToolExtensionPoint = + createExtensionPoint({ + id: 'aws-genai.function', + }); + +export interface AgentTypeExtensionPoint { + addAgentType(factory: AgentTypeFactory): void; +} + +export const agentTypeExtensionPoint = + createExtensionPoint({ + id: 'aws-genai.agent-type', + }); diff --git a/plugins/genai/node/src/index.ts b/plugins/genai/node/src/index.ts new file mode 100644 index 0000000..185c9fe --- /dev/null +++ b/plugins/genai/node/src/index.ts @@ -0,0 +1,15 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './extensions'; +export * from './types'; diff --git a/plugins/genai/node/src/setupTests.ts b/plugins/genai/node/src/setupTests.ts new file mode 100644 index 0000000..19d0e85 --- /dev/null +++ b/plugins/genai/node/src/setupTests.ts @@ -0,0 +1,14 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export {}; diff --git a/plugins/genai/node/src/types.ts b/plugins/genai/node/src/types.ts new file mode 100644 index 0000000..66482e1 --- /dev/null +++ b/plugins/genai/node/src/types.ts @@ -0,0 +1,62 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + BackstageCredentials, + LoggerService, +} from '@backstage/backend-plugin-api'; +import { CompoundEntityRef } from '@backstage/catalog-model'; +import { ToolInterface } from '@langchain/core/tools'; +import { + ChatEvent, + GenerateResponse, +} from '@aws/genai-plugin-for-backstage-common'; +import { Config } from '@backstage/config'; + +export interface AgentType { + stream( + userMessage: string, + sessionId: string, + newSession: boolean, + userEntityRef: CompoundEntityRef, + logger: LoggerService, + options: { + credentials?: BackstageCredentials; + }, + ): Promise>; + + generate( + prompt: string, + sessionId: string, + userEntityRef: CompoundEntityRef, + logger: LoggerService, + options: { + credentials?: BackstageCredentials; + }, + ): Promise; +} + +export interface AgentTypeFactory { + create(agentConfig: AgentConfig, tools: ToolInterface[]): Promise; + + getTypeName(): string; +} + +export interface AgentConfig { + name: string; + description: string; + prompt: string; + type?: string; + tools: string[]; + config: Config; +} diff --git a/yarn.lock b/yarn.lock index bd44a0c..0a1fbbc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -342,9 +342,9 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-cloudcontrol@npm:^3.511.0": - version: 3.699.0 - resolution: "@aws-sdk/client-cloudcontrol@npm:3.699.0" +"@aws-sdk/client-bedrock-agent-runtime@npm:^3.616.0": + version: 3.706.0 + resolution: "@aws-sdk/client-bedrock-agent-runtime@npm:3.706.0" dependencies: "@aws-crypto/sha256-browser": "npm:5.2.0" "@aws-crypto/sha256-js": "npm:5.2.0" @@ -363,6 +363,9 @@ __metadata: "@aws-sdk/util-user-agent-node": "npm:3.696.0" "@smithy/config-resolver": "npm:^3.0.12" "@smithy/core": "npm:^2.5.3" + "@smithy/eventstream-serde-browser": "npm:^3.0.13" + "@smithy/eventstream-serde-config-resolver": "npm:^3.0.10" + "@smithy/eventstream-serde-node": "npm:^3.0.12" "@smithy/fetch-http-handler": "npm:^4.1.1" "@smithy/hash-node": "npm:^3.0.10" "@smithy/invalid-dependency": "npm:^3.0.10" @@ -386,17 +389,14 @@ __metadata: "@smithy/util-middleware": "npm:^3.0.10" "@smithy/util-retry": "npm:^3.0.10" "@smithy/util-utf8": "npm:^3.0.0" - "@smithy/util-waiter": "npm:^3.1.9" - "@types/uuid": "npm:^9.0.1" tslib: "npm:^2.6.2" - uuid: "npm:^9.0.1" - checksum: 10c0/42e6671215f232324c3813096612f614b8823a4a81a9715edae743ea66e51efbb876702a37b32135e9e1573b8bdd57c8eea855f979981cbaffeddb65bb9e0d8d + checksum: 10c0/7ca45c1ae51a01577bbef545ca66739e79b8f8b57795a9553adbde9beae988d3e051dc950e3a3c50bf48890e25e3be2e5893556e60a291ce897c6dc018faec3a languageName: node linkType: hard -"@aws-sdk/client-codebuild@npm:^3.511.0": - version: 3.699.0 - resolution: "@aws-sdk/client-codebuild@npm:3.699.0" +"@aws-sdk/client-bedrock-runtime@npm:^3.602.0": + version: 3.706.0 + resolution: "@aws-sdk/client-bedrock-runtime@npm:3.706.0" dependencies: "@aws-crypto/sha256-browser": "npm:5.2.0" "@aws-crypto/sha256-js": "npm:5.2.0" @@ -415,6 +415,9 @@ __metadata: "@aws-sdk/util-user-agent-node": "npm:3.696.0" "@smithy/config-resolver": "npm:^3.0.12" "@smithy/core": "npm:^2.5.3" + "@smithy/eventstream-serde-browser": "npm:^3.0.13" + "@smithy/eventstream-serde-config-resolver": "npm:^3.0.10" + "@smithy/eventstream-serde-node": "npm:^3.0.12" "@smithy/fetch-http-handler": "npm:^4.1.1" "@smithy/hash-node": "npm:^3.0.10" "@smithy/invalid-dependency": "npm:^3.0.10" @@ -437,15 +440,18 @@ __metadata: "@smithy/util-endpoints": "npm:^2.1.6" "@smithy/util-middleware": "npm:^3.0.10" "@smithy/util-retry": "npm:^3.0.10" + "@smithy/util-stream": "npm:^3.3.1" "@smithy/util-utf8": "npm:^3.0.0" + "@types/uuid": "npm:^9.0.1" tslib: "npm:^2.6.2" - checksum: 10c0/579e905062844a67de2a370e2c5a2745b6352fbefc84cb399c47be9c0bc844ed525663506ae2fa3e9220616fc7ec68acf2fd580165b22cd966fccc5a025632cd + uuid: "npm:^9.0.1" + checksum: 10c0/5c413ac62f50f4a0ce85de624eca25cd2a072cd2731e22c2e29b14b1a60ba89ad108d4eb5999d9fa5d8b6c22514e802160a7afa6b3cd6b132ab7c270df0b6f00 languageName: node linkType: hard -"@aws-sdk/client-codecommit@npm:^3.350.0, @aws-sdk/client-codecommit@npm:^3.511.0": +"@aws-sdk/client-cloudcontrol@npm:^3.511.0": version: 3.699.0 - resolution: "@aws-sdk/client-codecommit@npm:3.699.0" + resolution: "@aws-sdk/client-cloudcontrol@npm:3.699.0" dependencies: "@aws-crypto/sha256-browser": "npm:5.2.0" "@aws-crypto/sha256-js": "npm:5.2.0" @@ -487,16 +493,17 @@ __metadata: "@smithy/util-middleware": "npm:^3.0.10" "@smithy/util-retry": "npm:^3.0.10" "@smithy/util-utf8": "npm:^3.0.0" + "@smithy/util-waiter": "npm:^3.1.9" "@types/uuid": "npm:^9.0.1" tslib: "npm:^2.6.2" uuid: "npm:^9.0.1" - checksum: 10c0/ca00a1f6ed2738fb026dc59f26b49d63b63c7acd16f30d4d9cab6c9527fe753905c5f0ec68454406d7f3368b636ac873afbc8eba532ac384030e374fc720c9f3 + checksum: 10c0/42e6671215f232324c3813096612f614b8823a4a81a9715edae743ea66e51efbb876702a37b32135e9e1573b8bdd57c8eea855f979981cbaffeddb65bb9e0d8d languageName: node linkType: hard -"@aws-sdk/client-codepipeline@npm:^3.511.0": +"@aws-sdk/client-codebuild@npm:^3.511.0": version: 3.699.0 - resolution: "@aws-sdk/client-codepipeline@npm:3.699.0" + resolution: "@aws-sdk/client-codebuild@npm:3.699.0" dependencies: "@aws-crypto/sha256-browser": "npm:5.2.0" "@aws-crypto/sha256-js": "npm:5.2.0" @@ -538,64 +545,14 @@ __metadata: "@smithy/util-middleware": "npm:^3.0.10" "@smithy/util-retry": "npm:^3.0.10" "@smithy/util-utf8": "npm:^3.0.0" - "@types/uuid": "npm:^9.0.1" tslib: "npm:^2.6.2" - uuid: "npm:^9.0.1" - checksum: 10c0/b7228a5a5fbbaa3014eb336d42d06c114eec947684356ea01abd4fe137ef93f16222bc1c67a2f5f07d426680987c2af64a58e927853fd7e08eeab466b0b3e39c - languageName: node - linkType: hard - -"@aws-sdk/client-cognito-identity@npm:3.529.1": - version: 3.529.1 - resolution: "@aws-sdk/client-cognito-identity@npm:3.529.1" - dependencies: - "@aws-crypto/sha256-browser": "npm:3.0.0" - "@aws-crypto/sha256-js": "npm:3.0.0" - "@aws-sdk/client-sts": "npm:3.529.1" - "@aws-sdk/core": "npm:3.529.1" - "@aws-sdk/credential-provider-node": "npm:3.529.1" - "@aws-sdk/middleware-host-header": "npm:3.523.0" - "@aws-sdk/middleware-logger": "npm:3.523.0" - "@aws-sdk/middleware-recursion-detection": "npm:3.523.0" - "@aws-sdk/middleware-user-agent": "npm:3.525.0" - "@aws-sdk/region-config-resolver": "npm:3.525.0" - "@aws-sdk/types": "npm:3.523.0" - "@aws-sdk/util-endpoints": "npm:3.525.0" - "@aws-sdk/util-user-agent-browser": "npm:3.523.0" - "@aws-sdk/util-user-agent-node": "npm:3.525.0" - "@smithy/config-resolver": "npm:^2.1.4" - "@smithy/core": "npm:^1.3.5" - "@smithy/fetch-http-handler": "npm:^2.4.3" - "@smithy/hash-node": "npm:^2.1.3" - "@smithy/invalid-dependency": "npm:^2.1.3" - "@smithy/middleware-content-length": "npm:^2.1.3" - "@smithy/middleware-endpoint": "npm:^2.4.4" - "@smithy/middleware-retry": "npm:^2.1.4" - "@smithy/middleware-serde": "npm:^2.1.3" - "@smithy/middleware-stack": "npm:^2.1.3" - "@smithy/node-config-provider": "npm:^2.2.4" - "@smithy/node-http-handler": "npm:^2.4.1" - "@smithy/protocol-http": "npm:^3.2.1" - "@smithy/smithy-client": "npm:^2.4.2" - "@smithy/types": "npm:^2.10.1" - "@smithy/url-parser": "npm:^2.1.3" - "@smithy/util-base64": "npm:^2.1.1" - "@smithy/util-body-length-browser": "npm:^2.1.1" - "@smithy/util-body-length-node": "npm:^2.2.1" - "@smithy/util-defaults-mode-browser": "npm:^2.1.4" - "@smithy/util-defaults-mode-node": "npm:^2.2.3" - "@smithy/util-endpoints": "npm:^1.1.4" - "@smithy/util-middleware": "npm:^2.1.3" - "@smithy/util-retry": "npm:^2.1.3" - "@smithy/util-utf8": "npm:^2.1.1" - tslib: "npm:^2.5.0" - checksum: 10c0/e44db877d03ea3fa465b77c505a94ac9d956b175f1dd75e7d81a7c0208a24b4ad852492cecd5075e54ca06eb60100801a50c83464b7ef945532c65f97c4dfed4 + checksum: 10c0/579e905062844a67de2a370e2c5a2745b6352fbefc84cb399c47be9c0bc844ed525663506ae2fa3e9220616fc7ec68acf2fd580165b22cd966fccc5a025632cd languageName: node linkType: hard -"@aws-sdk/client-config-service@npm:3.702.0, @aws-sdk/client-config-service@npm:^3.511.0": - version: 3.702.0 - resolution: "@aws-sdk/client-config-service@npm:3.702.0" +"@aws-sdk/client-codecommit@npm:^3.350.0, @aws-sdk/client-codecommit@npm:^3.511.0": + version: 3.699.0 + resolution: "@aws-sdk/client-codecommit@npm:3.699.0" dependencies: "@aws-crypto/sha256-browser": "npm:5.2.0" "@aws-crypto/sha256-js": "npm:5.2.0" @@ -637,14 +594,16 @@ __metadata: "@smithy/util-middleware": "npm:^3.0.10" "@smithy/util-retry": "npm:^3.0.10" "@smithy/util-utf8": "npm:^3.0.0" + "@types/uuid": "npm:^9.0.1" tslib: "npm:^2.6.2" - checksum: 10c0/4d8559387c19ba26a3a16bc1e13385d0072a9560efd7e50a63fa678d5660120fefa7e70b895db2f58d5290b8db97fe3a60186f25be063f26d117fd2da6888d71 + uuid: "npm:^9.0.1" + checksum: 10c0/ca00a1f6ed2738fb026dc59f26b49d63b63c7acd16f30d4d9cab6c9527fe753905c5f0ec68454406d7f3368b636ac873afbc8eba532ac384030e374fc720c9f3 languageName: node linkType: hard -"@aws-sdk/client-cost-explorer@npm:^3.568.0": +"@aws-sdk/client-codepipeline@npm:^3.511.0": version: 3.699.0 - resolution: "@aws-sdk/client-cost-explorer@npm:3.699.0" + resolution: "@aws-sdk/client-codepipeline@npm:3.699.0" dependencies: "@aws-crypto/sha256-browser": "npm:5.2.0" "@aws-crypto/sha256-js": "npm:5.2.0" @@ -686,14 +645,64 @@ __metadata: "@smithy/util-middleware": "npm:^3.0.10" "@smithy/util-retry": "npm:^3.0.10" "@smithy/util-utf8": "npm:^3.0.0" + "@types/uuid": "npm:^9.0.1" tslib: "npm:^2.6.2" - checksum: 10c0/a7395e5165d150a5ea263613b7d1876d3e88a944ca1b7a07fce19eda2b3684532b5dd57d75a1378c246548055f5d3ad4101f7f238c8a664c82d4437d7c3d85a6 + uuid: "npm:^9.0.1" + checksum: 10c0/b7228a5a5fbbaa3014eb336d42d06c114eec947684356ea01abd4fe137ef93f16222bc1c67a2f5f07d426680987c2af64a58e927853fd7e08eeab466b0b3e39c languageName: node linkType: hard -"@aws-sdk/client-ecs@npm:^3.511.0": - version: 3.703.0 - resolution: "@aws-sdk/client-ecs@npm:3.703.0" +"@aws-sdk/client-cognito-identity@npm:3.529.1": + version: 3.529.1 + resolution: "@aws-sdk/client-cognito-identity@npm:3.529.1" + dependencies: + "@aws-crypto/sha256-browser": "npm:3.0.0" + "@aws-crypto/sha256-js": "npm:3.0.0" + "@aws-sdk/client-sts": "npm:3.529.1" + "@aws-sdk/core": "npm:3.529.1" + "@aws-sdk/credential-provider-node": "npm:3.529.1" + "@aws-sdk/middleware-host-header": "npm:3.523.0" + "@aws-sdk/middleware-logger": "npm:3.523.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.523.0" + "@aws-sdk/middleware-user-agent": "npm:3.525.0" + "@aws-sdk/region-config-resolver": "npm:3.525.0" + "@aws-sdk/types": "npm:3.523.0" + "@aws-sdk/util-endpoints": "npm:3.525.0" + "@aws-sdk/util-user-agent-browser": "npm:3.523.0" + "@aws-sdk/util-user-agent-node": "npm:3.525.0" + "@smithy/config-resolver": "npm:^2.1.4" + "@smithy/core": "npm:^1.3.5" + "@smithy/fetch-http-handler": "npm:^2.4.3" + "@smithy/hash-node": "npm:^2.1.3" + "@smithy/invalid-dependency": "npm:^2.1.3" + "@smithy/middleware-content-length": "npm:^2.1.3" + "@smithy/middleware-endpoint": "npm:^2.4.4" + "@smithy/middleware-retry": "npm:^2.1.4" + "@smithy/middleware-serde": "npm:^2.1.3" + "@smithy/middleware-stack": "npm:^2.1.3" + "@smithy/node-config-provider": "npm:^2.2.4" + "@smithy/node-http-handler": "npm:^2.4.1" + "@smithy/protocol-http": "npm:^3.2.1" + "@smithy/smithy-client": "npm:^2.4.2" + "@smithy/types": "npm:^2.10.1" + "@smithy/url-parser": "npm:^2.1.3" + "@smithy/util-base64": "npm:^2.1.1" + "@smithy/util-body-length-browser": "npm:^2.1.1" + "@smithy/util-body-length-node": "npm:^2.2.1" + "@smithy/util-defaults-mode-browser": "npm:^2.1.4" + "@smithy/util-defaults-mode-node": "npm:^2.2.3" + "@smithy/util-endpoints": "npm:^1.1.4" + "@smithy/util-middleware": "npm:^2.1.3" + "@smithy/util-retry": "npm:^2.1.3" + "@smithy/util-utf8": "npm:^2.1.1" + tslib: "npm:^2.5.0" + checksum: 10c0/e44db877d03ea3fa465b77c505a94ac9d956b175f1dd75e7d81a7c0208a24b4ad852492cecd5075e54ca06eb60100801a50c83464b7ef945532c65f97c4dfed4 + languageName: node + linkType: hard + +"@aws-sdk/client-config-service@npm:3.702.0, @aws-sdk/client-config-service@npm:^3.511.0": + version: 3.702.0 + resolution: "@aws-sdk/client-config-service@npm:3.702.0" dependencies: "@aws-crypto/sha256-browser": "npm:5.2.0" "@aws-crypto/sha256-js": "npm:5.2.0" @@ -735,17 +744,14 @@ __metadata: "@smithy/util-middleware": "npm:^3.0.10" "@smithy/util-retry": "npm:^3.0.10" "@smithy/util-utf8": "npm:^3.0.0" - "@smithy/util-waiter": "npm:^3.1.9" - "@types/uuid": "npm:^9.0.1" tslib: "npm:^2.6.2" - uuid: "npm:^9.0.1" - checksum: 10c0/97eebaf3f1eca1c4eb999eef7fb726b3e4aa9cac6768f41a16e4145165c5a958e6e3259e365addc525c45024d5a79b2d20e661a87b6dc883ce896605347c2c56 + checksum: 10c0/4d8559387c19ba26a3a16bc1e13385d0072a9560efd7e50a63fa678d5660120fefa7e70b895db2f58d5290b8db97fe3a60186f25be063f26d117fd2da6888d71 languageName: node linkType: hard -"@aws-sdk/client-eventbridge@npm:^3.511.0": - version: 3.703.0 - resolution: "@aws-sdk/client-eventbridge@npm:3.703.0" +"@aws-sdk/client-cost-explorer@npm:^3.568.0": + version: 3.699.0 + resolution: "@aws-sdk/client-cost-explorer@npm:3.699.0" dependencies: "@aws-crypto/sha256-browser": "npm:5.2.0" "@aws-crypto/sha256-js": "npm:5.2.0" @@ -758,7 +764,6 @@ __metadata: "@aws-sdk/middleware-recursion-detection": "npm:3.696.0" "@aws-sdk/middleware-user-agent": "npm:3.696.0" "@aws-sdk/region-config-resolver": "npm:3.696.0" - "@aws-sdk/signature-v4-multi-region": "npm:3.696.0" "@aws-sdk/types": "npm:3.696.0" "@aws-sdk/util-endpoints": "npm:3.696.0" "@aws-sdk/util-user-agent-browser": "npm:3.696.0" @@ -789,13 +794,13 @@ __metadata: "@smithy/util-retry": "npm:^3.0.10" "@smithy/util-utf8": "npm:^3.0.0" tslib: "npm:^2.6.2" - checksum: 10c0/652f79d4311b51eadf159c14ad9989c48a57c562ec2971d0df391bdacfa842c63064541d533456d1d9402fe63b092359638eedcf9d878fbbc287983e04a75ac6 + checksum: 10c0/a7395e5165d150a5ea263613b7d1876d3e88a944ca1b7a07fce19eda2b3684532b5dd57d75a1378c246548055f5d3ad4101f7f238c8a664c82d4437d7c3d85a6 languageName: node linkType: hard -"@aws-sdk/client-resource-explorer-2@npm:^3.511.0": - version: 3.699.0 - resolution: "@aws-sdk/client-resource-explorer-2@npm:3.699.0" +"@aws-sdk/client-ecs@npm:^3.511.0": + version: 3.703.0 + resolution: "@aws-sdk/client-ecs@npm:3.703.0" dependencies: "@aws-crypto/sha256-browser": "npm:5.2.0" "@aws-crypto/sha256-js": "npm:5.2.0" @@ -837,16 +842,17 @@ __metadata: "@smithy/util-middleware": "npm:^3.0.10" "@smithy/util-retry": "npm:^3.0.10" "@smithy/util-utf8": "npm:^3.0.0" + "@smithy/util-waiter": "npm:^3.1.9" "@types/uuid": "npm:^9.0.1" tslib: "npm:^2.6.2" uuid: "npm:^9.0.1" - checksum: 10c0/d9565816f909740bae5fa15d7553a14abe3b523f50b4bfcca11cf890c9b22cc1e2994a5af51fa9424bf0c2b2d886ce88825812bba1b15301efdd4a2e1dfa240b + checksum: 10c0/97eebaf3f1eca1c4eb999eef7fb726b3e4aa9cac6768f41a16e4145165c5a958e6e3259e365addc525c45024d5a79b2d20e661a87b6dc883ce896605347c2c56 languageName: node linkType: hard -"@aws-sdk/client-resource-groups-tagging-api@npm:^3.511.0": - version: 3.699.0 - resolution: "@aws-sdk/client-resource-groups-tagging-api@npm:3.699.0" +"@aws-sdk/client-eventbridge@npm:^3.511.0": + version: 3.703.0 + resolution: "@aws-sdk/client-eventbridge@npm:3.703.0" dependencies: "@aws-crypto/sha256-browser": "npm:5.2.0" "@aws-crypto/sha256-js": "npm:5.2.0" @@ -859,6 +865,7 @@ __metadata: "@aws-sdk/middleware-recursion-detection": "npm:3.696.0" "@aws-sdk/middleware-user-agent": "npm:3.696.0" "@aws-sdk/region-config-resolver": "npm:3.696.0" + "@aws-sdk/signature-v4-multi-region": "npm:3.696.0" "@aws-sdk/types": "npm:3.696.0" "@aws-sdk/util-endpoints": "npm:3.696.0" "@aws-sdk/util-user-agent-browser": "npm:3.696.0" @@ -889,49 +896,34 @@ __metadata: "@smithy/util-retry": "npm:^3.0.10" "@smithy/util-utf8": "npm:^3.0.0" tslib: "npm:^2.6.2" - checksum: 10c0/7d5397290891d55497343366c1773848f9992887c8e7fc910b1eab6dd5b0ad1fa690b34ecff4e3ec6f6a845d6c1a4047fa87499fd597fa1460deb4f78c5ee54d + checksum: 10c0/652f79d4311b51eadf159c14ad9989c48a57c562ec2971d0df391bdacfa842c63064541d533456d1d9402fe63b092359638eedcf9d878fbbc287983e04a75ac6 languageName: node linkType: hard -"@aws-sdk/client-s3@npm:^3.350.0, @aws-sdk/client-s3@npm:^3.511.0": - version: 3.705.0 - resolution: "@aws-sdk/client-s3@npm:3.705.0" +"@aws-sdk/client-kendra@npm:^3.352.0": + version: 3.706.0 + resolution: "@aws-sdk/client-kendra@npm:3.706.0" dependencies: - "@aws-crypto/sha1-browser": "npm:5.2.0" "@aws-crypto/sha256-browser": "npm:5.2.0" "@aws-crypto/sha256-js": "npm:5.2.0" "@aws-sdk/client-sso-oidc": "npm:3.699.0" "@aws-sdk/client-sts": "npm:3.699.0" "@aws-sdk/core": "npm:3.696.0" "@aws-sdk/credential-provider-node": "npm:3.699.0" - "@aws-sdk/middleware-bucket-endpoint": "npm:3.696.0" - "@aws-sdk/middleware-expect-continue": "npm:3.696.0" - "@aws-sdk/middleware-flexible-checksums": "npm:3.701.0" "@aws-sdk/middleware-host-header": "npm:3.696.0" - "@aws-sdk/middleware-location-constraint": "npm:3.696.0" "@aws-sdk/middleware-logger": "npm:3.696.0" "@aws-sdk/middleware-recursion-detection": "npm:3.696.0" - "@aws-sdk/middleware-sdk-s3": "npm:3.696.0" - "@aws-sdk/middleware-ssec": "npm:3.696.0" "@aws-sdk/middleware-user-agent": "npm:3.696.0" "@aws-sdk/region-config-resolver": "npm:3.696.0" - "@aws-sdk/signature-v4-multi-region": "npm:3.696.0" "@aws-sdk/types": "npm:3.696.0" "@aws-sdk/util-endpoints": "npm:3.696.0" "@aws-sdk/util-user-agent-browser": "npm:3.696.0" "@aws-sdk/util-user-agent-node": "npm:3.696.0" - "@aws-sdk/xml-builder": "npm:3.696.0" "@smithy/config-resolver": "npm:^3.0.12" "@smithy/core": "npm:^2.5.3" - "@smithy/eventstream-serde-browser": "npm:^3.0.13" - "@smithy/eventstream-serde-config-resolver": "npm:^3.0.10" - "@smithy/eventstream-serde-node": "npm:^3.0.12" "@smithy/fetch-http-handler": "npm:^4.1.1" - "@smithy/hash-blob-browser": "npm:^3.1.9" "@smithy/hash-node": "npm:^3.0.10" - "@smithy/hash-stream-node": "npm:^3.1.9" "@smithy/invalid-dependency": "npm:^3.0.10" - "@smithy/md5-js": "npm:^3.0.10" "@smithy/middleware-content-length": "npm:^3.0.12" "@smithy/middleware-endpoint": "npm:^3.2.3" "@smithy/middleware-retry": "npm:^3.0.27" @@ -951,66 +943,232 @@ __metadata: "@smithy/util-endpoints": "npm:^2.1.6" "@smithy/util-middleware": "npm:^3.0.10" "@smithy/util-retry": "npm:^3.0.10" - "@smithy/util-stream": "npm:^3.3.1" "@smithy/util-utf8": "npm:^3.0.0" - "@smithy/util-waiter": "npm:^3.1.9" + "@types/uuid": "npm:^9.0.1" tslib: "npm:^2.6.2" - checksum: 10c0/4bbd342f2943d36d488632a0ee898f48b60615eb57f5bb7584b43751242ea62bb199f34e0155006c02e128ac7e3a6f1e9790bb1bf50e0592b9409ad5f6a8282b - languageName: node - linkType: hard - -"@aws-sdk/client-sso-oidc@npm:3.529.1": - version: 3.529.1 - resolution: "@aws-sdk/client-sso-oidc@npm:3.529.1" - dependencies: - "@aws-crypto/sha256-browser": "npm:3.0.0" - "@aws-crypto/sha256-js": "npm:3.0.0" - "@aws-sdk/client-sts": "npm:3.529.1" - "@aws-sdk/core": "npm:3.529.1" - "@aws-sdk/middleware-host-header": "npm:3.523.0" - "@aws-sdk/middleware-logger": "npm:3.523.0" - "@aws-sdk/middleware-recursion-detection": "npm:3.523.0" - "@aws-sdk/middleware-user-agent": "npm:3.525.0" - "@aws-sdk/region-config-resolver": "npm:3.525.0" - "@aws-sdk/types": "npm:3.523.0" - "@aws-sdk/util-endpoints": "npm:3.525.0" - "@aws-sdk/util-user-agent-browser": "npm:3.523.0" - "@aws-sdk/util-user-agent-node": "npm:3.525.0" - "@smithy/config-resolver": "npm:^2.1.4" - "@smithy/core": "npm:^1.3.5" - "@smithy/fetch-http-handler": "npm:^2.4.3" - "@smithy/hash-node": "npm:^2.1.3" - "@smithy/invalid-dependency": "npm:^2.1.3" - "@smithy/middleware-content-length": "npm:^2.1.3" - "@smithy/middleware-endpoint": "npm:^2.4.4" - "@smithy/middleware-retry": "npm:^2.1.4" - "@smithy/middleware-serde": "npm:^2.1.3" - "@smithy/middleware-stack": "npm:^2.1.3" - "@smithy/node-config-provider": "npm:^2.2.4" - "@smithy/node-http-handler": "npm:^2.4.1" - "@smithy/protocol-http": "npm:^3.2.1" - "@smithy/smithy-client": "npm:^2.4.2" - "@smithy/types": "npm:^2.10.1" - "@smithy/url-parser": "npm:^2.1.3" - "@smithy/util-base64": "npm:^2.1.1" - "@smithy/util-body-length-browser": "npm:^2.1.1" - "@smithy/util-body-length-node": "npm:^2.2.1" - "@smithy/util-defaults-mode-browser": "npm:^2.1.4" - "@smithy/util-defaults-mode-node": "npm:^2.2.3" - "@smithy/util-endpoints": "npm:^1.1.4" - "@smithy/util-middleware": "npm:^2.1.3" - "@smithy/util-retry": "npm:^2.1.3" - "@smithy/util-utf8": "npm:^2.1.1" - tslib: "npm:^2.5.0" - peerDependencies: - "@aws-sdk/credential-provider-node": ^3.529.1 - checksum: 10c0/fa677e7fba73748940204e030e0859170b523f072a28ed6621dd27049b6988bd323ac9e87b161efdfaedd74315eac601c43b9f7b35254d14745c90ad383c44fd + uuid: "npm:^9.0.1" + checksum: 10c0/0ea0f93e2fd79c30d2e5d58dc23fc1d22954384bdc99c3f9febbbd085618b029563c697a60573a79ccf537ff5592330b4a7f81b6441990ead1b92a320812b128 languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.699.0": +"@aws-sdk/client-resource-explorer-2@npm:^3.511.0": version: 3.699.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.699.0" + resolution: "@aws-sdk/client-resource-explorer-2@npm:3.699.0" + dependencies: + "@aws-crypto/sha256-browser": "npm:5.2.0" + "@aws-crypto/sha256-js": "npm:5.2.0" + "@aws-sdk/client-sso-oidc": "npm:3.699.0" + "@aws-sdk/client-sts": "npm:3.699.0" + "@aws-sdk/core": "npm:3.696.0" + "@aws-sdk/credential-provider-node": "npm:3.699.0" + "@aws-sdk/middleware-host-header": "npm:3.696.0" + "@aws-sdk/middleware-logger": "npm:3.696.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.696.0" + "@aws-sdk/middleware-user-agent": "npm:3.696.0" + "@aws-sdk/region-config-resolver": "npm:3.696.0" + "@aws-sdk/types": "npm:3.696.0" + "@aws-sdk/util-endpoints": "npm:3.696.0" + "@aws-sdk/util-user-agent-browser": "npm:3.696.0" + "@aws-sdk/util-user-agent-node": "npm:3.696.0" + "@smithy/config-resolver": "npm:^3.0.12" + "@smithy/core": "npm:^2.5.3" + "@smithy/fetch-http-handler": "npm:^4.1.1" + "@smithy/hash-node": "npm:^3.0.10" + "@smithy/invalid-dependency": "npm:^3.0.10" + "@smithy/middleware-content-length": "npm:^3.0.12" + "@smithy/middleware-endpoint": "npm:^3.2.3" + "@smithy/middleware-retry": "npm:^3.0.27" + "@smithy/middleware-serde": "npm:^3.0.10" + "@smithy/middleware-stack": "npm:^3.0.10" + "@smithy/node-config-provider": "npm:^3.1.11" + "@smithy/node-http-handler": "npm:^3.3.1" + "@smithy/protocol-http": "npm:^4.1.7" + "@smithy/smithy-client": "npm:^3.4.4" + "@smithy/types": "npm:^3.7.1" + "@smithy/url-parser": "npm:^3.0.10" + "@smithy/util-base64": "npm:^3.0.0" + "@smithy/util-body-length-browser": "npm:^3.0.0" + "@smithy/util-body-length-node": "npm:^3.0.0" + "@smithy/util-defaults-mode-browser": "npm:^3.0.27" + "@smithy/util-defaults-mode-node": "npm:^3.0.27" + "@smithy/util-endpoints": "npm:^2.1.6" + "@smithy/util-middleware": "npm:^3.0.10" + "@smithy/util-retry": "npm:^3.0.10" + "@smithy/util-utf8": "npm:^3.0.0" + "@types/uuid": "npm:^9.0.1" + tslib: "npm:^2.6.2" + uuid: "npm:^9.0.1" + checksum: 10c0/d9565816f909740bae5fa15d7553a14abe3b523f50b4bfcca11cf890c9b22cc1e2994a5af51fa9424bf0c2b2d886ce88825812bba1b15301efdd4a2e1dfa240b + languageName: node + linkType: hard + +"@aws-sdk/client-resource-groups-tagging-api@npm:^3.511.0": + version: 3.699.0 + resolution: "@aws-sdk/client-resource-groups-tagging-api@npm:3.699.0" + dependencies: + "@aws-crypto/sha256-browser": "npm:5.2.0" + "@aws-crypto/sha256-js": "npm:5.2.0" + "@aws-sdk/client-sso-oidc": "npm:3.699.0" + "@aws-sdk/client-sts": "npm:3.699.0" + "@aws-sdk/core": "npm:3.696.0" + "@aws-sdk/credential-provider-node": "npm:3.699.0" + "@aws-sdk/middleware-host-header": "npm:3.696.0" + "@aws-sdk/middleware-logger": "npm:3.696.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.696.0" + "@aws-sdk/middleware-user-agent": "npm:3.696.0" + "@aws-sdk/region-config-resolver": "npm:3.696.0" + "@aws-sdk/types": "npm:3.696.0" + "@aws-sdk/util-endpoints": "npm:3.696.0" + "@aws-sdk/util-user-agent-browser": "npm:3.696.0" + "@aws-sdk/util-user-agent-node": "npm:3.696.0" + "@smithy/config-resolver": "npm:^3.0.12" + "@smithy/core": "npm:^2.5.3" + "@smithy/fetch-http-handler": "npm:^4.1.1" + "@smithy/hash-node": "npm:^3.0.10" + "@smithy/invalid-dependency": "npm:^3.0.10" + "@smithy/middleware-content-length": "npm:^3.0.12" + "@smithy/middleware-endpoint": "npm:^3.2.3" + "@smithy/middleware-retry": "npm:^3.0.27" + "@smithy/middleware-serde": "npm:^3.0.10" + "@smithy/middleware-stack": "npm:^3.0.10" + "@smithy/node-config-provider": "npm:^3.1.11" + "@smithy/node-http-handler": "npm:^3.3.1" + "@smithy/protocol-http": "npm:^4.1.7" + "@smithy/smithy-client": "npm:^3.4.4" + "@smithy/types": "npm:^3.7.1" + "@smithy/url-parser": "npm:^3.0.10" + "@smithy/util-base64": "npm:^3.0.0" + "@smithy/util-body-length-browser": "npm:^3.0.0" + "@smithy/util-body-length-node": "npm:^3.0.0" + "@smithy/util-defaults-mode-browser": "npm:^3.0.27" + "@smithy/util-defaults-mode-node": "npm:^3.0.27" + "@smithy/util-endpoints": "npm:^2.1.6" + "@smithy/util-middleware": "npm:^3.0.10" + "@smithy/util-retry": "npm:^3.0.10" + "@smithy/util-utf8": "npm:^3.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/7d5397290891d55497343366c1773848f9992887c8e7fc910b1eab6dd5b0ad1fa690b34ecff4e3ec6f6a845d6c1a4047fa87499fd597fa1460deb4f78c5ee54d + languageName: node + linkType: hard + +"@aws-sdk/client-s3@npm:^3.350.0, @aws-sdk/client-s3@npm:^3.511.0": + version: 3.705.0 + resolution: "@aws-sdk/client-s3@npm:3.705.0" + dependencies: + "@aws-crypto/sha1-browser": "npm:5.2.0" + "@aws-crypto/sha256-browser": "npm:5.2.0" + "@aws-crypto/sha256-js": "npm:5.2.0" + "@aws-sdk/client-sso-oidc": "npm:3.699.0" + "@aws-sdk/client-sts": "npm:3.699.0" + "@aws-sdk/core": "npm:3.696.0" + "@aws-sdk/credential-provider-node": "npm:3.699.0" + "@aws-sdk/middleware-bucket-endpoint": "npm:3.696.0" + "@aws-sdk/middleware-expect-continue": "npm:3.696.0" + "@aws-sdk/middleware-flexible-checksums": "npm:3.701.0" + "@aws-sdk/middleware-host-header": "npm:3.696.0" + "@aws-sdk/middleware-location-constraint": "npm:3.696.0" + "@aws-sdk/middleware-logger": "npm:3.696.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.696.0" + "@aws-sdk/middleware-sdk-s3": "npm:3.696.0" + "@aws-sdk/middleware-ssec": "npm:3.696.0" + "@aws-sdk/middleware-user-agent": "npm:3.696.0" + "@aws-sdk/region-config-resolver": "npm:3.696.0" + "@aws-sdk/signature-v4-multi-region": "npm:3.696.0" + "@aws-sdk/types": "npm:3.696.0" + "@aws-sdk/util-endpoints": "npm:3.696.0" + "@aws-sdk/util-user-agent-browser": "npm:3.696.0" + "@aws-sdk/util-user-agent-node": "npm:3.696.0" + "@aws-sdk/xml-builder": "npm:3.696.0" + "@smithy/config-resolver": "npm:^3.0.12" + "@smithy/core": "npm:^2.5.3" + "@smithy/eventstream-serde-browser": "npm:^3.0.13" + "@smithy/eventstream-serde-config-resolver": "npm:^3.0.10" + "@smithy/eventstream-serde-node": "npm:^3.0.12" + "@smithy/fetch-http-handler": "npm:^4.1.1" + "@smithy/hash-blob-browser": "npm:^3.1.9" + "@smithy/hash-node": "npm:^3.0.10" + "@smithy/hash-stream-node": "npm:^3.1.9" + "@smithy/invalid-dependency": "npm:^3.0.10" + "@smithy/md5-js": "npm:^3.0.10" + "@smithy/middleware-content-length": "npm:^3.0.12" + "@smithy/middleware-endpoint": "npm:^3.2.3" + "@smithy/middleware-retry": "npm:^3.0.27" + "@smithy/middleware-serde": "npm:^3.0.10" + "@smithy/middleware-stack": "npm:^3.0.10" + "@smithy/node-config-provider": "npm:^3.1.11" + "@smithy/node-http-handler": "npm:^3.3.1" + "@smithy/protocol-http": "npm:^4.1.7" + "@smithy/smithy-client": "npm:^3.4.4" + "@smithy/types": "npm:^3.7.1" + "@smithy/url-parser": "npm:^3.0.10" + "@smithy/util-base64": "npm:^3.0.0" + "@smithy/util-body-length-browser": "npm:^3.0.0" + "@smithy/util-body-length-node": "npm:^3.0.0" + "@smithy/util-defaults-mode-browser": "npm:^3.0.27" + "@smithy/util-defaults-mode-node": "npm:^3.0.27" + "@smithy/util-endpoints": "npm:^2.1.6" + "@smithy/util-middleware": "npm:^3.0.10" + "@smithy/util-retry": "npm:^3.0.10" + "@smithy/util-stream": "npm:^3.3.1" + "@smithy/util-utf8": "npm:^3.0.0" + "@smithy/util-waiter": "npm:^3.1.9" + tslib: "npm:^2.6.2" + checksum: 10c0/4bbd342f2943d36d488632a0ee898f48b60615eb57f5bb7584b43751242ea62bb199f34e0155006c02e128ac7e3a6f1e9790bb1bf50e0592b9409ad5f6a8282b + languageName: node + linkType: hard + +"@aws-sdk/client-sso-oidc@npm:3.529.1": + version: 3.529.1 + resolution: "@aws-sdk/client-sso-oidc@npm:3.529.1" + dependencies: + "@aws-crypto/sha256-browser": "npm:3.0.0" + "@aws-crypto/sha256-js": "npm:3.0.0" + "@aws-sdk/client-sts": "npm:3.529.1" + "@aws-sdk/core": "npm:3.529.1" + "@aws-sdk/middleware-host-header": "npm:3.523.0" + "@aws-sdk/middleware-logger": "npm:3.523.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.523.0" + "@aws-sdk/middleware-user-agent": "npm:3.525.0" + "@aws-sdk/region-config-resolver": "npm:3.525.0" + "@aws-sdk/types": "npm:3.523.0" + "@aws-sdk/util-endpoints": "npm:3.525.0" + "@aws-sdk/util-user-agent-browser": "npm:3.523.0" + "@aws-sdk/util-user-agent-node": "npm:3.525.0" + "@smithy/config-resolver": "npm:^2.1.4" + "@smithy/core": "npm:^1.3.5" + "@smithy/fetch-http-handler": "npm:^2.4.3" + "@smithy/hash-node": "npm:^2.1.3" + "@smithy/invalid-dependency": "npm:^2.1.3" + "@smithy/middleware-content-length": "npm:^2.1.3" + "@smithy/middleware-endpoint": "npm:^2.4.4" + "@smithy/middleware-retry": "npm:^2.1.4" + "@smithy/middleware-serde": "npm:^2.1.3" + "@smithy/middleware-stack": "npm:^2.1.3" + "@smithy/node-config-provider": "npm:^2.2.4" + "@smithy/node-http-handler": "npm:^2.4.1" + "@smithy/protocol-http": "npm:^3.2.1" + "@smithy/smithy-client": "npm:^2.4.2" + "@smithy/types": "npm:^2.10.1" + "@smithy/url-parser": "npm:^2.1.3" + "@smithy/util-base64": "npm:^2.1.1" + "@smithy/util-body-length-browser": "npm:^2.1.1" + "@smithy/util-body-length-node": "npm:^2.2.1" + "@smithy/util-defaults-mode-browser": "npm:^2.1.4" + "@smithy/util-defaults-mode-node": "npm:^2.2.3" + "@smithy/util-endpoints": "npm:^1.1.4" + "@smithy/util-middleware": "npm:^2.1.3" + "@smithy/util-retry": "npm:^2.1.3" + "@smithy/util-utf8": "npm:^2.1.1" + tslib: "npm:^2.5.0" + peerDependencies: + "@aws-sdk/credential-provider-node": ^3.529.1 + checksum: 10c0/fa677e7fba73748940204e030e0859170b523f072a28ed6621dd27049b6988bd323ac9e87b161efdfaedd74315eac601c43b9f7b35254d14745c90ad383c44fd + languageName: node + linkType: hard + +"@aws-sdk/client-sso-oidc@npm:3.699.0": + version: 3.699.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.699.0" dependencies: "@aws-crypto/sha256-browser": "npm:5.2.0" "@aws-crypto/sha256-js": "npm:5.2.0" @@ -1413,7 +1571,7 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.699.0": +"@aws-sdk/credential-provider-node@npm:3.699.0, @aws-sdk/credential-provider-node@npm:^3.600.0": version: 3.699.0 resolution: "@aws-sdk/credential-provider-node@npm:3.699.0" dependencies: @@ -2424,6 +2582,106 @@ __metadata: languageName: unknown linkType: soft +"@aws/genai-plugin-for-backstage-backend@workspace:^, @aws/genai-plugin-for-backstage-backend@workspace:plugins/genai/backend": + version: 0.0.0-use.local + resolution: "@aws/genai-plugin-for-backstage-backend@workspace:plugins/genai/backend" + dependencies: + "@aws/genai-plugin-for-backstage-common": "workspace:^" + "@aws/genai-plugin-for-backstage-node": "workspace:^" + "@backstage/backend-common": "npm:^0.21.6" + "@backstage/backend-defaults": "npm:^0.2.16" + "@backstage/backend-plugin-api": "npm:^0.6.16" + "@backstage/backend-test-utils": "npm:^1.0.2" + "@backstage/catalog-client": "npm:^1.8.0" + "@backstage/catalog-model": "npm:^1.4.5" + "@backstage/cli": "npm:^0.26.2" + "@backstage/config": "npm:^1.2.0" + "@backstage/plugin-auth-backend": "npm:^0.22.3" + "@backstage/plugin-auth-backend-module-guest-provider": "npm:^0.1.2" + "@backstage/plugin-catalog-node": "npm:^1.14.0" + "@langchain/core": "npm:^0.3.18" + "@types/express": "npm:*" + "@types/supertest": "npm:^2.0.12" + "@types/uuid": "npm:^10" + express: "npm:^4.17.1" + express-promise-router: "npm:^4.1.0" + msw: "npm:^1.0.0" + supertest: "npm:^6.2.4" + uuid: "npm:^10.0.0" + zod: "npm:^3.23.8" + languageName: unknown + linkType: soft + +"@aws/genai-plugin-for-backstage-common@workspace:^, @aws/genai-plugin-for-backstage-common@workspace:plugins/genai/common": + version: 0.0.0-use.local + resolution: "@aws/genai-plugin-for-backstage-common@workspace:plugins/genai/common" + dependencies: + "@backstage/cli": "npm:^0.26.2" + cross-fetch: "npm:^4.0.0" + uri-template: "npm:^2.0.0" + zod: "npm:^3.23.8" + languageName: unknown + linkType: soft + +"@aws/genai-plugin-for-backstage-node@workspace:^, @aws/genai-plugin-for-backstage-node@workspace:plugins/genai/node": + version: 0.0.0-use.local + resolution: "@aws/genai-plugin-for-backstage-node@workspace:plugins/genai/node" + dependencies: + "@aws/genai-plugin-for-backstage-common": "workspace:^" + "@backstage/backend-common": "npm:^0.24.0" + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/catalog-model": "npm:^1.7.0" + "@backstage/cli": "npm:^0.27.0" + "@backstage/config": "npm:^1.2.0" + "@langchain/core": "npm:^0.3.18" + aws-sdk-client-mock: "npm:^4.0.0" + languageName: unknown + linkType: soft + +"@aws/genai-plugin-for-backstage@workspace:^, @aws/genai-plugin-for-backstage@workspace:plugins/genai/frontend": + version: 0.0.0-use.local + resolution: "@aws/genai-plugin-for-backstage@workspace:plugins/genai/frontend" + dependencies: + "@aws/genai-plugin-for-backstage-common": "workspace:^" + "@backstage/cli": "npm:^0.26.2" + "@backstage/core-components": "npm:^0.14.3" + "@backstage/core-plugin-api": "npm:^1.9.1" + "@backstage/dev-utils": "npm:^1.0.30" + "@material-ui/core": "npm:^4.12.2" + "@material-ui/icons": "npm:^4.9.1" + "@testing-library/dom": "npm:^9.0.0" + "@testing-library/jest-dom": "npm:^6.0.0" + "@testing-library/react": "npm:^14.0.0" + "@testing-library/user-event": "npm:^14.0.0" + eventsource-parser: "npm:^2.0.1" + msw: "npm:^1.0.0" + ts-pattern: "npm:^5.5.0" + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + languageName: unknown + linkType: soft + +"@aws/genai-plugin-langgraph-agent-for-backstage@workspace:^, @aws/genai-plugin-langgraph-agent-for-backstage@workspace:plugins/genai/agent-langgraph": + version: 0.0.0-use.local + resolution: "@aws/genai-plugin-langgraph-agent-for-backstage@workspace:plugins/genai/agent-langgraph" + dependencies: + "@aws/genai-plugin-for-backstage-common": "workspace:^" + "@aws/genai-plugin-for-backstage-node": "workspace:^" + "@backstage/backend-plugin-api": "npm:^0.8.0" + "@backstage/catalog-model": "npm:^1.7.0" + "@backstage/cli": "npm:^0.26.5" + "@backstage/config": "npm:^1.2.0" + "@langchain/aws": "npm:^0.1.2" + "@langchain/core": "npm:^0.3.18" + "@langchain/langgraph": "npm:0.2.22" + "@langchain/openai": "npm:^0.3.14" + langfuse-langchain: "npm:^3.29.1" + zod: "npm:^3.23.8" + languageName: unknown + linkType: soft + "@azure/abort-controller@npm:^1.0.0": version: 1.1.0 resolution: "@azure/abort-controller@npm:1.1.0" @@ -4227,6 +4485,52 @@ __metadata: languageName: node linkType: hard +"@backstage/backend-app-api@npm:^0.7.0, @backstage/backend-app-api@npm:^0.7.3": + version: 0.7.9 + resolution: "@backstage/backend-app-api@npm:0.7.9" + dependencies: + "@backstage/backend-common": "npm:^0.23.2" + "@backstage/backend-plugin-api": "npm:^0.6.21" + "@backstage/backend-tasks": "npm:^0.5.26" + "@backstage/cli-common": "npm:^0.1.14" + "@backstage/cli-node": "npm:^0.2.6" + "@backstage/config": "npm:^1.2.0" + "@backstage/config-loader": "npm:^1.8.1" + "@backstage/errors": "npm:^1.2.4" + "@backstage/plugin-auth-node": "npm:^0.4.16" + "@backstage/plugin-permission-node": "npm:^0.7.32" + "@backstage/types": "npm:^1.1.1" + "@manypkg/get-packages": "npm:^1.1.3" + "@types/cors": "npm:^2.8.6" + "@types/express": "npm:^4.17.6" + compression: "npm:^1.7.4" + cookie: "npm:^0.6.0" + cors: "npm:^2.8.5" + express: "npm:^4.17.1" + express-promise-router: "npm:^4.1.0" + fs-extra: "npm:^11.2.0" + helmet: "npm:^6.0.0" + jose: "npm:^5.0.0" + knex: "npm:^3.0.0" + lodash: "npm:^4.17.21" + logform: "npm:^2.3.2" + luxon: "npm:^3.0.0" + minimatch: "npm:^9.0.0" + minimist: "npm:^1.2.5" + morgan: "npm:^1.10.0" + node-fetch: "npm:^2.6.7" + node-forge: "npm:^1.3.1" + path-to-regexp: "npm:^6.2.1" + selfsigned: "npm:^2.0.0" + stoppable: "npm:^1.1.0" + triple-beam: "npm:^1.4.1" + uuid: "npm:^9.0.0" + winston: "npm:^3.2.1" + winston-transport: "npm:^4.5.0" + checksum: 10c0/afa2c0dbf8b1b4881888ef2d0aba3159f5478b86fde21ffa6e8493520a5cda39453683966d88613be685293337d482895fb9dfda2210881575435bd93c13b0ae + languageName: node + linkType: hard + "@backstage/backend-app-api@npm:^1.0.2": version: 1.0.2 resolution: "@backstage/backend-app-api@npm:1.0.2" @@ -4267,6 +4571,299 @@ __metadata: languageName: node linkType: hard +"@backstage/backend-common@npm:^0.21.6": + version: 0.21.7 + resolution: "@backstage/backend-common@npm:0.21.7" + dependencies: + "@aws-sdk/abort-controller": "npm:^3.347.0" + "@aws-sdk/client-codecommit": "npm:^3.350.0" + "@aws-sdk/client-s3": "npm:^3.350.0" + "@aws-sdk/credential-providers": "npm:^3.350.0" + "@aws-sdk/types": "npm:^3.347.0" + "@backstage/backend-app-api": "npm:^0.7.0" + "@backstage/backend-dev-utils": "npm:^0.1.4" + "@backstage/backend-plugin-api": "npm:^0.6.17" + "@backstage/cli-common": "npm:^0.1.13" + "@backstage/config": "npm:^1.2.0" + "@backstage/config-loader": "npm:^1.8.0" + "@backstage/errors": "npm:^1.2.4" + "@backstage/integration": "npm:^1.10.0" + "@backstage/integration-aws-node": "npm:^0.1.12" + "@backstage/plugin-auth-node": "npm:^0.4.12" + "@backstage/types": "npm:^1.1.1" + "@google-cloud/storage": "npm:^7.0.0" + "@keyv/memcache": "npm:^1.3.5" + "@keyv/redis": "npm:^2.5.3" + "@kubernetes/client-node": "npm:0.20.0" + "@manypkg/get-packages": "npm:^1.1.3" + "@octokit/rest": "npm:^19.0.3" + "@types/cors": "npm:^2.8.6" + "@types/dockerode": "npm:^3.3.0" + "@types/express": "npm:^4.17.6" + "@types/luxon": "npm:^3.0.0" + "@types/webpack-env": "npm:^1.15.2" + archiver: "npm:^6.0.0" + base64-stream: "npm:^1.0.0" + compression: "npm:^1.7.4" + concat-stream: "npm:^2.0.0" + cors: "npm:^2.8.5" + dockerode: "npm:^4.0.0" + express: "npm:^4.17.1" + express-promise-router: "npm:^4.1.0" + fs-extra: "npm:^11.2.0" + git-url-parse: "npm:^14.0.0" + helmet: "npm:^6.0.0" + isomorphic-git: "npm:^1.23.0" + jose: "npm:^5.0.0" + keyv: "npm:^4.5.2" + knex: "npm:^3.0.0" + lodash: "npm:^4.17.21" + logform: "npm:^2.3.2" + luxon: "npm:^3.0.0" + minimatch: "npm:^9.0.0" + mysql2: "npm:^3.0.0" + node-fetch: "npm:^2.6.7" + p-limit: "npm:^3.1.0" + pg: "npm:^8.11.3" + raw-body: "npm:^2.4.1" + tar: "npm:^6.1.12" + uuid: "npm:^9.0.0" + winston: "npm:^3.2.1" + winston-transport: "npm:^4.5.0" + yauzl: "npm:^3.0.0" + yn: "npm:^4.0.0" + peerDependencies: + pg-connection-string: ^2.3.0 + peerDependenciesMeta: + pg-connection-string: + optional: true + checksum: 10c0/cc4f6d6fb329acc3949a56bcae510c0a38bed1fd1dfb7ad7d21a58063ab6b01987c80daf6b5d42cec179badbf9249f1f4e5aeb3ad943284f717e148259398394 + languageName: node + linkType: hard + +"@backstage/backend-common@npm:^0.22.0": + version: 0.22.0 + resolution: "@backstage/backend-common@npm:0.22.0" + dependencies: + "@aws-sdk/abort-controller": "npm:^3.347.0" + "@aws-sdk/client-codecommit": "npm:^3.350.0" + "@aws-sdk/client-s3": "npm:^3.350.0" + "@aws-sdk/credential-providers": "npm:^3.350.0" + "@aws-sdk/types": "npm:^3.347.0" + "@backstage/backend-app-api": "npm:^0.7.3" + "@backstage/backend-dev-utils": "npm:^0.1.4" + "@backstage/backend-plugin-api": "npm:^0.6.18" + "@backstage/cli-common": "npm:^0.1.13" + "@backstage/config": "npm:^1.2.0" + "@backstage/config-loader": "npm:^1.8.0" + "@backstage/errors": "npm:^1.2.4" + "@backstage/integration": "npm:^1.11.0" + "@backstage/integration-aws-node": "npm:^0.1.12" + "@backstage/plugin-auth-node": "npm:^0.4.13" + "@backstage/types": "npm:^1.1.1" + "@google-cloud/storage": "npm:^7.0.0" + "@keyv/memcache": "npm:^1.3.5" + "@keyv/redis": "npm:^2.5.3" + "@kubernetes/client-node": "npm:0.20.0" + "@manypkg/get-packages": "npm:^1.1.3" + "@octokit/rest": "npm:^19.0.3" + "@types/cors": "npm:^2.8.6" + "@types/dockerode": "npm:^3.3.0" + "@types/express": "npm:^4.17.6" + "@types/luxon": "npm:^3.0.0" + "@types/webpack-env": "npm:^1.15.2" + archiver: "npm:^6.0.0" + base64-stream: "npm:^1.0.0" + compression: "npm:^1.7.4" + concat-stream: "npm:^2.0.0" + cors: "npm:^2.8.5" + dockerode: "npm:^4.0.0" + express: "npm:^4.17.1" + express-promise-router: "npm:^4.1.0" + fs-extra: "npm:^11.2.0" + git-url-parse: "npm:^14.0.0" + helmet: "npm:^6.0.0" + isomorphic-git: "npm:^1.23.0" + jose: "npm:^5.0.0" + keyv: "npm:^4.5.2" + knex: "npm:^3.0.0" + lodash: "npm:^4.17.21" + logform: "npm:^2.3.2" + luxon: "npm:^3.0.0" + minimatch: "npm:^9.0.0" + mysql2: "npm:^3.0.0" + node-fetch: "npm:^2.6.7" + p-limit: "npm:^3.1.0" + pg: "npm:^8.11.3" + raw-body: "npm:^2.4.1" + tar: "npm:^6.1.12" + uuid: "npm:^9.0.0" + winston: "npm:^3.2.1" + winston-transport: "npm:^4.5.0" + yauzl: "npm:^3.0.0" + yn: "npm:^4.0.0" + peerDependencies: + pg-connection-string: ^2.3.0 + peerDependenciesMeta: + pg-connection-string: + optional: true + checksum: 10c0/e41c263a49f42606ee2a52238d81a893e86442f1306fc3553916ae317a0e1ed0014f5a35a2d643837488e8217d37953f80565b21b3632a86ce739229c291a9dc + languageName: node + linkType: hard + +"@backstage/backend-common@npm:^0.23.2, @backstage/backend-common@npm:^0.23.3": + version: 0.23.3 + resolution: "@backstage/backend-common@npm:0.23.3" + dependencies: + "@aws-sdk/abort-controller": "npm:^3.347.0" + "@aws-sdk/client-codecommit": "npm:^3.350.0" + "@aws-sdk/client-s3": "npm:^3.350.0" + "@aws-sdk/credential-providers": "npm:^3.350.0" + "@aws-sdk/types": "npm:^3.347.0" + "@backstage/backend-dev-utils": "npm:^0.1.4" + "@backstage/backend-plugin-api": "npm:^0.7.0" + "@backstage/cli-common": "npm:^0.1.14" + "@backstage/config": "npm:^1.2.0" + "@backstage/config-loader": "npm:^1.8.1" + "@backstage/errors": "npm:^1.2.4" + "@backstage/integration": "npm:^1.13.0" + "@backstage/integration-aws-node": "npm:^0.1.12" + "@backstage/plugin-auth-node": "npm:^0.4.17" + "@backstage/types": "npm:^1.1.1" + "@google-cloud/storage": "npm:^7.0.0" + "@keyv/memcache": "npm:^1.3.5" + "@keyv/redis": "npm:^2.5.3" + "@kubernetes/client-node": "npm:0.20.0" + "@manypkg/get-packages": "npm:^1.1.3" + "@octokit/rest": "npm:^19.0.3" + "@types/cors": "npm:^2.8.6" + "@types/dockerode": "npm:^3.3.0" + "@types/express": "npm:^4.17.6" + "@types/luxon": "npm:^3.0.0" + "@types/webpack-env": "npm:^1.15.2" + archiver: "npm:^6.0.0" + base64-stream: "npm:^1.0.0" + compression: "npm:^1.7.4" + concat-stream: "npm:^2.0.0" + cors: "npm:^2.8.5" + dockerode: "npm:^4.0.0" + express: "npm:^4.17.1" + express-promise-router: "npm:^4.1.0" + fs-extra: "npm:^11.2.0" + git-url-parse: "npm:^14.0.0" + helmet: "npm:^6.0.0" + isomorphic-git: "npm:^1.23.0" + jose: "npm:^5.0.0" + keyv: "npm:^4.5.2" + knex: "npm:^3.0.0" + lodash: "npm:^4.17.21" + logform: "npm:^2.3.2" + luxon: "npm:^3.0.0" + minimatch: "npm:^9.0.0" + minimist: "npm:^1.2.5" + morgan: "npm:^1.10.0" + mysql2: "npm:^3.0.0" + node-fetch: "npm:^2.6.7" + node-forge: "npm:^1.3.1" + p-limit: "npm:^3.1.0" + path-to-regexp: "npm:^6.2.1" + pg: "npm:^8.11.3" + raw-body: "npm:^2.4.1" + selfsigned: "npm:^2.0.0" + stoppable: "npm:^1.1.0" + tar: "npm:^6.1.12" + triple-beam: "npm:^1.4.1" + uuid: "npm:^9.0.0" + winston: "npm:^3.2.1" + winston-transport: "npm:^4.5.0" + yauzl: "npm:^3.0.0" + yn: "npm:^4.0.0" + peerDependencies: + pg-connection-string: ^2.3.0 + peerDependenciesMeta: + pg-connection-string: + optional: true + checksum: 10c0/8bc8d0564719f5c7d734a6b9388b099630ee8ea76ab815f04ef0cfe9541714883c0a0b9a0d8b559c3ba3830b855773b2ac9fce95d959006f67f893c940454370 + languageName: node + linkType: hard + +"@backstage/backend-common@npm:^0.24.0, @backstage/backend-common@npm:^0.24.1": + version: 0.24.1 + resolution: "@backstage/backend-common@npm:0.24.1" + dependencies: + "@aws-sdk/abort-controller": "npm:^3.347.0" + "@aws-sdk/client-codecommit": "npm:^3.350.0" + "@aws-sdk/client-s3": "npm:^3.350.0" + "@aws-sdk/credential-providers": "npm:^3.350.0" + "@aws-sdk/types": "npm:^3.347.0" + "@backstage/backend-dev-utils": "npm:^0.1.5" + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/cli-common": "npm:^0.1.14" + "@backstage/config": "npm:^1.2.0" + "@backstage/config-loader": "npm:^1.9.0" + "@backstage/errors": "npm:^1.2.4" + "@backstage/integration": "npm:^1.14.0" + "@backstage/integration-aws-node": "npm:^0.1.12" + "@backstage/plugin-auth-node": "npm:^0.5.1" + "@backstage/types": "npm:^1.1.1" + "@google-cloud/storage": "npm:^7.0.0" + "@keyv/memcache": "npm:^1.3.5" + "@keyv/redis": "npm:^2.5.3" + "@kubernetes/client-node": "npm:0.20.0" + "@manypkg/get-packages": "npm:^1.1.3" + "@octokit/rest": "npm:^19.0.3" + "@types/cors": "npm:^2.8.6" + "@types/dockerode": "npm:^3.3.0" + "@types/express": "npm:^4.17.6" + "@types/luxon": "npm:^3.0.0" + "@types/webpack-env": "npm:^1.15.2" + archiver: "npm:^6.0.0" + base64-stream: "npm:^1.0.0" + compression: "npm:^1.7.4" + concat-stream: "npm:^2.0.0" + cors: "npm:^2.8.5" + dockerode: "npm:^4.0.0" + express: "npm:^4.17.1" + express-promise-router: "npm:^4.1.0" + fs-extra: "npm:^11.2.0" + git-url-parse: "npm:^14.0.0" + helmet: "npm:^6.0.0" + isomorphic-git: "npm:^1.23.0" + jose: "npm:^5.0.0" + keyv: "npm:^4.5.2" + knex: "npm:^3.0.0" + lodash: "npm:^4.17.21" + logform: "npm:^2.3.2" + luxon: "npm:^3.0.0" + minimatch: "npm:^9.0.0" + minimist: "npm:^1.2.5" + morgan: "npm:^1.10.0" + mysql2: "npm:^3.0.0" + node-fetch: "npm:^2.7.0" + node-forge: "npm:^1.3.1" + p-limit: "npm:^3.1.0" + path-to-regexp: "npm:^6.2.1" + pg: "npm:^8.11.3" + pg-format: "npm:^1.0.4" + raw-body: "npm:^2.4.1" + selfsigned: "npm:^2.0.0" + stoppable: "npm:^1.1.0" + tar: "npm:^6.1.12" + triple-beam: "npm:^1.4.1" + uuid: "npm:^9.0.0" + winston: "npm:^3.2.1" + winston-transport: "npm:^4.5.0" + yauzl: "npm:^3.0.0" + yn: "npm:^4.0.0" + peerDependencies: + pg-connection-string: ^2.3.0 + peerDependenciesMeta: + pg-connection-string: + optional: true + checksum: 10c0/dd5a21850cf9e031eb0e026416bada8cb3389412f97a1fd1f8b66454fbc54721590f7830c898fcab64314530d7d8cad075ba55b658d69162306460aa44b4037e + languageName: node + linkType: hard + "@backstage/backend-common@npm:^0.25.0": version: 0.25.0 resolution: "@backstage/backend-common@npm:0.25.0" @@ -4344,6 +4941,17 @@ __metadata: languageName: node linkType: hard +"@backstage/backend-defaults@npm:^0.2.16": + version: 0.2.18 + resolution: "@backstage/backend-defaults@npm:0.2.18" + dependencies: + "@backstage/backend-app-api": "npm:^0.7.3" + "@backstage/backend-common": "npm:^0.22.0" + "@backstage/plugin-events-node": "npm:^0.3.4" + checksum: 10c0/095aa12a66cd31ccd219b378622afc2f56d6e5d3ea8e650b9fd7b18369e6aafc3539f63d83bd0475603216c305d9c6c649a989e3e7bd6094f33beb75e182add9 + languageName: node + linkType: hard + "@backstage/backend-defaults@npm:^0.5.3": version: 0.5.3 resolution: "@backstage/backend-defaults@npm:0.5.3" @@ -4421,7 +5029,7 @@ __metadata: languageName: node linkType: hard -"@backstage/backend-dev-utils@npm:^0.1.5": +"@backstage/backend-dev-utils@npm:^0.1.4, @backstage/backend-dev-utils@npm:^0.1.5": version: 0.1.5 resolution: "@backstage/backend-dev-utils@npm:0.1.5" checksum: 10c0/8f1bd89cafbac2604d9371f3ff0880422e069a2c207aa9a895e91878438e1ea83e10aa18ecf666707695f3c90a4635e791b325338eb9944c01470840ba8b953f @@ -4452,6 +5060,63 @@ __metadata: languageName: node linkType: hard +"@backstage/backend-plugin-api@npm:^0.6.16, @backstage/backend-plugin-api@npm:^0.6.17, @backstage/backend-plugin-api@npm:^0.6.18, @backstage/backend-plugin-api@npm:^0.6.21": + version: 0.6.21 + resolution: "@backstage/backend-plugin-api@npm:0.6.21" + dependencies: + "@backstage/cli-common": "npm:^0.1.14" + "@backstage/config": "npm:^1.2.0" + "@backstage/errors": "npm:^1.2.4" + "@backstage/plugin-auth-node": "npm:^0.4.16" + "@backstage/plugin-permission-common": "npm:^0.7.14" + "@backstage/types": "npm:^1.1.1" + "@types/express": "npm:^4.17.6" + "@types/luxon": "npm:^3.0.0" + express: "npm:^4.17.1" + knex: "npm:^3.0.0" + luxon: "npm:^3.0.0" + checksum: 10c0/3596f01205853bd67439a608cc2fced71613734233439e4f6abda690c76142665c7a3b5f3f839121f7f1b3554795a24df9253c57335dff9297033fbcdb37f87b + languageName: node + linkType: hard + +"@backstage/backend-plugin-api@npm:^0.7.0": + version: 0.7.0 + resolution: "@backstage/backend-plugin-api@npm:0.7.0" + dependencies: + "@backstage/cli-common": "npm:^0.1.14" + "@backstage/config": "npm:^1.2.0" + "@backstage/errors": "npm:^1.2.4" + "@backstage/plugin-auth-node": "npm:^0.4.17" + "@backstage/plugin-permission-common": "npm:^0.8.0" + "@backstage/types": "npm:^1.1.1" + "@types/express": "npm:^4.17.6" + "@types/luxon": "npm:^3.0.0" + express: "npm:^4.17.1" + knex: "npm:^3.0.0" + luxon: "npm:^3.0.0" + checksum: 10c0/b8620d7b3683b53b3b3fa094a73a2391e18d7df8c4df713882ff8d2c1daf0278536fde8611e86bed2eba95f41b24e15c91109b2c556aa49b2bafb9ef4c74e468 + languageName: node + linkType: hard + +"@backstage/backend-plugin-api@npm:^0.8.0, @backstage/backend-plugin-api@npm:^0.8.1": + version: 0.8.1 + resolution: "@backstage/backend-plugin-api@npm:0.8.1" + dependencies: + "@backstage/cli-common": "npm:^0.1.14" + "@backstage/config": "npm:^1.2.0" + "@backstage/errors": "npm:^1.2.4" + "@backstage/plugin-auth-node": "npm:^0.5.1" + "@backstage/plugin-permission-common": "npm:^0.8.1" + "@backstage/types": "npm:^1.1.1" + "@types/express": "npm:^4.17.6" + "@types/luxon": "npm:^3.0.0" + express: "npm:^4.17.1" + knex: "npm:^3.0.0" + luxon: "npm:^3.0.0" + checksum: 10c0/14fbd1ce8b0f18b672479b6c0e49a57ff7a77cc965fe9928dc5ff6af31b8c8ee968b912bc3b32c26509578649d67b7717aef4c7a32017dcaaf9425e89e75e9da + languageName: node + linkType: hard + "@backstage/backend-plugin-api@npm:^1.0.0, @backstage/backend-plugin-api@npm:^1.0.2": version: 1.0.2 resolution: "@backstage/backend-plugin-api@npm:1.0.2" @@ -4471,7 +5136,28 @@ __metadata: languageName: node linkType: hard -"@backstage/backend-test-utils@npm:^1.1.0": +"@backstage/backend-tasks@npm:^0.5.26": + version: 0.5.27 + resolution: "@backstage/backend-tasks@npm:0.5.27" + dependencies: + "@backstage/backend-common": "npm:^0.23.3" + "@backstage/backend-plugin-api": "npm:^0.7.0" + "@backstage/config": "npm:^1.2.0" + "@backstage/errors": "npm:^1.2.4" + "@backstage/types": "npm:^1.1.1" + "@opentelemetry/api": "npm:^1.3.0" + "@types/luxon": "npm:^3.0.0" + cron: "npm:^3.0.0" + knex: "npm:^3.0.0" + lodash: "npm:^4.17.21" + luxon: "npm:^3.0.0" + uuid: "npm:^9.0.0" + zod: "npm:^3.22.4" + checksum: 10c0/d57a9166e37ae8b8fd0e11e6f4b0528b42fa2e669353815a124fe33634eac89655c33e2a67a55411ad3e899aeecd44e5ebb5e0dfc4b0fc9325b5f237674c4cd3 + languageName: node + linkType: hard + +"@backstage/backend-test-utils@npm:^1.0.2, @backstage/backend-test-utils@npm:^1.1.0": version: 1.1.0 resolution: "@backstage/backend-test-utils@npm:1.1.0" dependencies: @@ -4520,7 +5206,7 @@ __metadata: languageName: node linkType: hard -"@backstage/catalog-client@npm:^1.8.0": +"@backstage/catalog-client@npm:^1.6.6, @backstage/catalog-client@npm:^1.8.0": version: 1.8.0 resolution: "@backstage/catalog-client@npm:1.8.0" dependencies: @@ -4556,7 +5242,7 @@ __metadata: languageName: node linkType: hard -"@backstage/catalog-model@npm:^1.7.0, @backstage/catalog-model@npm:^1.7.1": +"@backstage/catalog-model@npm:^1.6.0, @backstage/catalog-model@npm:^1.7.0, @backstage/catalog-model@npm:^1.7.1": version: 1.7.1 resolution: "@backstage/catalog-model@npm:1.7.1" dependencies: @@ -4568,6 +5254,13 @@ __metadata: languageName: node linkType: hard +"@backstage/cli-common@npm:^0.1.13, @backstage/cli-common@npm:^0.1.15": + version: 0.1.15 + resolution: "@backstage/cli-common@npm:0.1.15" + checksum: 10c0/6155d7343814dbe1bc84073d5cdf73e00f379ffc7880a166ad8843443e7dedbe0887a389df5010b909832e8f232d4283a81b2abbda992130a865286445643ff9 + languageName: node + linkType: hard + "@backstage/cli-common@npm:^0.1.14": version: 0.1.14 resolution: "@backstage/cli-common@npm:0.1.14" @@ -4575,14 +5268,7 @@ __metadata: languageName: node linkType: hard -"@backstage/cli-common@npm:^0.1.15": - version: 0.1.15 - resolution: "@backstage/cli-common@npm:0.1.15" - checksum: 10c0/6155d7343814dbe1bc84073d5cdf73e00f379ffc7880a166ad8843443e7dedbe0887a389df5010b909832e8f232d4283a81b2abbda992130a865286445643ff9 - languageName: node - linkType: hard - -"@backstage/cli-node@npm:^0.2.10": +"@backstage/cli-node@npm:^0.2.10, @backstage/cli-node@npm:^0.2.6, @backstage/cli-node@npm:^0.2.7, @backstage/cli-node@npm:^0.2.8": version: 0.2.10 resolution: "@backstage/cli-node@npm:0.2.10" dependencies: @@ -4598,6 +5284,279 @@ __metadata: languageName: node linkType: hard +"@backstage/cli@npm:^0.26.2, @backstage/cli@npm:^0.26.5": + version: 0.26.11 + resolution: "@backstage/cli@npm:0.26.11" + dependencies: + "@backstage/catalog-model": "npm:^1.5.0" + "@backstage/cli-common": "npm:^0.1.14" + "@backstage/cli-node": "npm:^0.2.7" + "@backstage/config": "npm:^1.2.0" + "@backstage/config-loader": "npm:^1.8.1" + "@backstage/errors": "npm:^1.2.4" + "@backstage/eslint-plugin": "npm:^0.1.8" + "@backstage/integration": "npm:^1.13.0" + "@backstage/release-manifests": "npm:^0.0.11" + "@backstage/types": "npm:^1.1.1" + "@manypkg/get-packages": "npm:^1.1.3" + "@module-federation/enhanced": "npm:^0.1.19" + "@octokit/graphql": "npm:^5.0.0" + "@octokit/graphql-schema": "npm:^13.7.0" + "@octokit/oauth-app": "npm:^4.2.0" + "@octokit/request": "npm:^6.0.0" + "@pmmmwh/react-refresh-webpack-plugin": "npm:^0.5.7" + "@rollup/plugin-commonjs": "npm:^25.0.0" + "@rollup/plugin-json": "npm:^6.0.0" + "@rollup/plugin-node-resolve": "npm:^15.0.0" + "@rollup/plugin-yaml": "npm:^4.0.0" + "@spotify/eslint-config-base": "npm:^15.0.0" + "@spotify/eslint-config-react": "npm:^15.0.0" + "@spotify/eslint-config-typescript": "npm:^15.0.0" + "@sucrase/webpack-loader": "npm:^2.0.0" + "@svgr/core": "npm:6.5.x" + "@svgr/plugin-jsx": "npm:6.5.x" + "@svgr/plugin-svgo": "npm:6.5.x" + "@svgr/rollup": "npm:6.5.x" + "@svgr/webpack": "npm:6.5.x" + "@swc/core": "npm:^1.3.46" + "@swc/helpers": "npm:^0.5.0" + "@swc/jest": "npm:^0.2.22" + "@types/jest": "npm:^29.5.11" + "@types/webpack-env": "npm:^1.15.2" + "@typescript-eslint/eslint-plugin": "npm:^6.12.0" + "@typescript-eslint/parser": "npm:^6.7.2" + "@yarnpkg/lockfile": "npm:^1.1.0" + "@yarnpkg/parsers": "npm:^3.0.0" + bfj: "npm:^8.0.0" + buffer: "npm:^6.0.3" + chalk: "npm:^4.0.0" + chokidar: "npm:^3.3.1" + commander: "npm:^12.0.0" + cross-fetch: "npm:^4.0.0" + cross-spawn: "npm:^7.0.3" + css-loader: "npm:^6.5.1" + ctrlc-windows: "npm:^2.1.0" + diff: "npm:^5.0.0" + esbuild: "npm:^0.21.0" + esbuild-loader: "npm:^4.0.0" + eslint: "npm:^8.6.0" + eslint-config-prettier: "npm:^9.0.0" + eslint-formatter-friendly: "npm:^7.0.0" + eslint-plugin-deprecation: "npm:^2.0.0" + eslint-plugin-import: "npm:^2.25.4" + eslint-plugin-jest: "npm:^27.0.0" + eslint-plugin-jsx-a11y: "npm:^6.5.1" + eslint-plugin-react: "npm:^7.28.0" + eslint-plugin-react-hooks: "npm:^4.3.0" + eslint-plugin-unused-imports: "npm:^3.0.0" + eslint-webpack-plugin: "npm:^4.0.0" + express: "npm:^4.17.1" + fork-ts-checker-webpack-plugin: "npm:^9.0.0" + fs-extra: "npm:^11.2.0" + git-url-parse: "npm:^14.0.0" + glob: "npm:^7.1.7" + global-agent: "npm:^3.0.0" + handlebars: "npm:^4.7.3" + html-webpack-plugin: "npm:^5.3.1" + inquirer: "npm:^8.2.0" + jest: "npm:^29.7.0" + jest-css-modules: "npm:^2.1.0" + jest-environment-jsdom: "npm:^29.0.2" + jest-runtime: "npm:^29.0.2" + json-schema: "npm:^0.4.0" + lodash: "npm:^4.17.21" + mini-css-extract-plugin: "npm:^2.4.2" + minimatch: "npm:^9.0.0" + node-fetch: "npm:^2.6.7" + node-libs-browser: "npm:^2.2.1" + npm-packlist: "npm:^5.0.0" + ora: "npm:^5.3.0" + p-limit: "npm:^3.1.0" + p-queue: "npm:^6.6.2" + pirates: "npm:^4.0.6" + postcss: "npm:^8.1.0" + process: "npm:^0.11.10" + react-dev-utils: "npm:^12.0.0-next.60" + react-refresh: "npm:^0.14.0" + recursive-readdir: "npm:^2.2.2" + replace-in-file: "npm:^7.1.0" + rollup: "npm:^4.0.0" + rollup-plugin-dts: "npm:^6.1.0" + rollup-plugin-esbuild: "npm:^6.1.1" + rollup-plugin-postcss: "npm:^4.0.0" + rollup-pluginutils: "npm:^2.8.2" + run-script-webpack-plugin: "npm:^0.2.0" + semver: "npm:^7.5.3" + style-loader: "npm:^3.3.1" + sucrase: "npm:^3.20.2" + swc-loader: "npm:^0.2.3" + tar: "npm:^6.1.12" + terser-webpack-plugin: "npm:^5.1.3" + util: "npm:^0.12.3" + webpack: "npm:^5.70.0" + webpack-dev-server: "npm:^5.0.0" + webpack-node-externals: "npm:^3.0.0" + yaml: "npm:^2.0.0" + yml-loader: "npm:^2.1.0" + yn: "npm:^4.0.0" + zod: "npm:^3.22.4" + peerDependencies: + "@vitejs/plugin-react": ^4.0.4 + vite: ^4.4.9 + vite-plugin-html: ^3.2.0 + vite-plugin-node-polyfills: ^0.22.0 + peerDependenciesMeta: + "@vitejs/plugin-react": + optional: true + vite: + optional: true + vite-plugin-html: + optional: true + vite-plugin-node-polyfills: + optional: true + bin: + backstage-cli: bin/backstage-cli + checksum: 10c0/3b611356f4ff1fece11c72a137d83fffbb2d376176178e73e4f52c69ef3130a675165638dbd101e358acac0b88de4826316dacff92ae8528b4ea0644f0830229 + languageName: node + linkType: hard + +"@backstage/cli@npm:^0.27.0": + version: 0.27.1 + resolution: "@backstage/cli@npm:0.27.1" + dependencies: + "@backstage/catalog-model": "npm:^1.7.0" + "@backstage/cli-common": "npm:^0.1.14" + "@backstage/cli-node": "npm:^0.2.8" + "@backstage/config": "npm:^1.2.0" + "@backstage/config-loader": "npm:^1.9.1" + "@backstage/errors": "npm:^1.2.4" + "@backstage/eslint-plugin": "npm:^0.1.9" + "@backstage/integration": "npm:^1.15.0" + "@backstage/release-manifests": "npm:^0.0.11" + "@backstage/types": "npm:^1.1.1" + "@manypkg/get-packages": "npm:^1.1.3" + "@module-federation/enhanced": "npm:^0.6.0" + "@octokit/graphql": "npm:^5.0.0" + "@octokit/graphql-schema": "npm:^13.7.0" + "@octokit/oauth-app": "npm:^4.2.0" + "@octokit/request": "npm:^6.0.0" + "@pmmmwh/react-refresh-webpack-plugin": "npm:^0.5.7" + "@rollup/plugin-commonjs": "npm:^26.0.0" + "@rollup/plugin-json": "npm:^6.0.0" + "@rollup/plugin-node-resolve": "npm:^15.0.0" + "@rollup/plugin-yaml": "npm:^4.0.0" + "@spotify/eslint-config-base": "npm:^15.0.0" + "@spotify/eslint-config-react": "npm:^15.0.0" + "@spotify/eslint-config-typescript": "npm:^15.0.0" + "@sucrase/webpack-loader": "npm:^2.0.0" + "@svgr/core": "npm:6.5.x" + "@svgr/plugin-jsx": "npm:6.5.x" + "@svgr/plugin-svgo": "npm:6.5.x" + "@svgr/rollup": "npm:6.5.x" + "@svgr/webpack": "npm:6.5.x" + "@swc/core": "npm:^1.3.46" + "@swc/helpers": "npm:^0.5.0" + "@swc/jest": "npm:^0.2.22" + "@types/jest": "npm:^29.5.11" + "@types/webpack-env": "npm:^1.15.2" + "@typescript-eslint/eslint-plugin": "npm:^6.12.0" + "@typescript-eslint/parser": "npm:^6.7.2" + "@yarnpkg/lockfile": "npm:^1.1.0" + "@yarnpkg/parsers": "npm:^3.0.0" + bfj: "npm:^8.0.0" + buffer: "npm:^6.0.3" + chalk: "npm:^4.0.0" + chokidar: "npm:^3.3.1" + commander: "npm:^12.0.0" + cross-fetch: "npm:^4.0.0" + cross-spawn: "npm:^7.0.3" + css-loader: "npm:^6.5.1" + ctrlc-windows: "npm:^2.1.0" + diff: "npm:^5.0.0" + esbuild: "npm:^0.23.0" + esbuild-loader: "npm:^4.0.0" + eslint: "npm:^8.6.0" + eslint-config-prettier: "npm:^9.0.0" + eslint-formatter-friendly: "npm:^7.0.0" + eslint-plugin-deprecation: "npm:^2.0.0" + eslint-plugin-import: "npm:^2.25.4" + eslint-plugin-jest: "npm:^28.0.0" + eslint-plugin-jsx-a11y: "npm:^6.5.1" + eslint-plugin-react: "npm:^7.28.0" + eslint-plugin-react-hooks: "npm:^4.3.0" + eslint-plugin-unused-imports: "npm:^3.0.0" + eslint-webpack-plugin: "npm:^4.0.0" + express: "npm:^4.17.1" + fork-ts-checker-webpack-plugin: "npm:^9.0.0" + fs-extra: "npm:^11.2.0" + git-url-parse: "npm:^14.0.0" + glob: "npm:^7.1.7" + global-agent: "npm:^3.0.0" + handlebars: "npm:^4.7.3" + html-webpack-plugin: "npm:^5.3.1" + inquirer: "npm:^8.2.0" + jest: "npm:^29.7.0" + jest-css-modules: "npm:^2.1.0" + jest-environment-jsdom: "npm:^29.0.2" + jest-runtime: "npm:^29.0.2" + json-schema: "npm:^0.4.0" + lodash: "npm:^4.17.21" + mini-css-extract-plugin: "npm:^2.4.2" + minimatch: "npm:^9.0.0" + node-fetch: "npm:^2.7.0" + node-libs-browser: "npm:^2.2.1" + npm-packlist: "npm:^5.0.0" + ora: "npm:^5.3.0" + p-limit: "npm:^3.1.0" + p-queue: "npm:^6.6.2" + pirates: "npm:^4.0.6" + postcss: "npm:^8.1.0" + process: "npm:^0.11.10" + raw-loader: "npm:^4.0.2" + react-dev-utils: "npm:^12.0.0-next.60" + react-refresh: "npm:^0.14.0" + recursive-readdir: "npm:^2.2.2" + replace-in-file: "npm:^7.1.0" + rollup: "npm:^4.0.0" + rollup-plugin-dts: "npm:^6.1.0" + rollup-plugin-esbuild: "npm:^6.1.1" + rollup-plugin-postcss: "npm:^4.0.0" + rollup-pluginutils: "npm:^2.8.2" + run-script-webpack-plugin: "npm:^0.2.0" + semver: "npm:^7.5.3" + style-loader: "npm:^3.3.1" + sucrase: "npm:^3.20.2" + swc-loader: "npm:^0.2.3" + tar: "npm:^6.1.12" + terser-webpack-plugin: "npm:^5.1.3" + util: "npm:^0.12.3" + webpack: "npm:^5.70.0" + webpack-dev-server: "npm:^5.0.0" + webpack-node-externals: "npm:^3.0.0" + yaml: "npm:^2.0.0" + yml-loader: "npm:^2.1.0" + yn: "npm:^4.0.0" + zod: "npm:^3.22.4" + peerDependencies: + "@vitejs/plugin-react": ^4.3.1 + vite: ^5.0.0 + vite-plugin-html: ^3.2.2 + vite-plugin-node-polyfills: ^0.22.0 + peerDependenciesMeta: + "@vitejs/plugin-react": + optional: true + vite: + optional: true + vite-plugin-html: + optional: true + vite-plugin-node-polyfills: + optional: true + bin: + backstage-cli: bin/backstage-cli + checksum: 10c0/5a4bc8736deb79a76aee0333fbe04432ea16acba8f3d12b931bd54976429b3b38aac3a0308d924fdfaeddfbcf8f5058cba2d9b60b10e6c8702d40b18160f2290 + languageName: node + linkType: hard + "@backstage/cli@npm:^0.29.2": version: 0.29.2 resolution: "@backstage/cli@npm:0.29.2" @@ -4748,7 +5707,7 @@ __metadata: languageName: node linkType: hard -"@backstage/config-loader@npm:^1.9.1, @backstage/config-loader@npm:^1.9.2": +"@backstage/config-loader@npm:^1.8.0, @backstage/config-loader@npm:^1.8.1, @backstage/config-loader@npm:^1.9.0, @backstage/config-loader@npm:^1.9.1, @backstage/config-loader@npm:^1.9.2": version: 1.9.2 resolution: "@backstage/config-loader@npm:1.9.2" dependencies: @@ -4857,7 +5816,7 @@ __metadata: languageName: node linkType: hard -"@backstage/core-components@npm:^0.14.10": +"@backstage/core-components@npm:^0.14.10, @backstage/core-components@npm:^0.14.3": version: 0.14.10 resolution: "@backstage/core-components@npm:0.14.10" dependencies: @@ -5060,7 +6019,7 @@ __metadata: languageName: node linkType: hard -"@backstage/core-plugin-api@npm:^1.10.0, @backstage/core-plugin-api@npm:^1.10.1": +"@backstage/core-plugin-api@npm:^1.10.0, @backstage/core-plugin-api@npm:^1.10.1, @backstage/core-plugin-api@npm:^1.9.1": version: 1.10.1 resolution: "@backstage/core-plugin-api@npm:1.10.1" dependencies: @@ -5117,7 +6076,7 @@ __metadata: languageName: node linkType: hard -"@backstage/dev-utils@npm:^1.1.4": +"@backstage/dev-utils@npm:^1.0.30, @backstage/dev-utils@npm:^1.1.4": version: 1.1.4 resolution: "@backstage/dev-utils@npm:1.1.4" dependencies: @@ -5179,7 +6138,7 @@ __metadata: languageName: node linkType: hard -"@backstage/eslint-plugin@npm:^0.1.10": +"@backstage/eslint-plugin@npm:^0.1.10, @backstage/eslint-plugin@npm:^0.1.8, @backstage/eslint-plugin@npm:^0.1.9": version: 0.1.10 resolution: "@backstage/eslint-plugin@npm:0.1.10" dependencies: @@ -5395,37 +6354,37 @@ __metadata: languageName: node linkType: hard -"@backstage/integration@npm:^1.12.0": - version: 1.12.0 - resolution: "@backstage/integration@npm:1.12.0" +"@backstage/integration@npm:^1.10.0, @backstage/integration@npm:^1.11.0, @backstage/integration@npm:^1.13.0, @backstage/integration@npm:^1.14.0, @backstage/integration@npm:^1.15.0, @backstage/integration@npm:^1.15.1, @backstage/integration@npm:^1.15.2": + version: 1.15.2 + resolution: "@backstage/integration@npm:1.15.2" dependencies: "@azure/identity": "npm:^4.0.0" - "@backstage/config": "npm:^1.2.0" - "@backstage/errors": "npm:^1.2.4" + "@backstage/config": "npm:^1.3.0" + "@backstage/errors": "npm:^1.2.5" "@octokit/auth-app": "npm:^4.0.0" "@octokit/rest": "npm:^19.0.3" cross-fetch: "npm:^4.0.0" - git-url-parse: "npm:^14.0.0" + git-url-parse: "npm:^15.0.0" lodash: "npm:^4.17.21" luxon: "npm:^3.0.0" - checksum: 10c0/202a7959d9c750c266788b928defe440d5e312303d575806b812986a1c856366c725faa177843ea25f4c6aeb33bfc33eca629951bf2e968303b9313645a48b10 + checksum: 10c0/c99aa56a37e939b3a9c8d1dad10d96b4b25e08be09cf682c4687321dcb6c1eb4a60511745eeaf1f3a598b9b98a4f249233b7a571e6749410ee1ead857724db00 languageName: node linkType: hard -"@backstage/integration@npm:^1.15.0, @backstage/integration@npm:^1.15.1, @backstage/integration@npm:^1.15.2": - version: 1.15.2 - resolution: "@backstage/integration@npm:1.15.2" +"@backstage/integration@npm:^1.12.0": + version: 1.12.0 + resolution: "@backstage/integration@npm:1.12.0" dependencies: "@azure/identity": "npm:^4.0.0" - "@backstage/config": "npm:^1.3.0" - "@backstage/errors": "npm:^1.2.5" + "@backstage/config": "npm:^1.2.0" + "@backstage/errors": "npm:^1.2.4" "@octokit/auth-app": "npm:^4.0.0" "@octokit/rest": "npm:^19.0.3" cross-fetch: "npm:^4.0.0" - git-url-parse: "npm:^15.0.0" + git-url-parse: "npm:^14.0.0" lodash: "npm:^4.17.21" luxon: "npm:^3.0.0" - checksum: 10c0/c99aa56a37e939b3a9c8d1dad10d96b4b25e08be09cf682c4687321dcb6c1eb4a60511745eeaf1f3a598b9b98a4f249233b7a571e6749410ee1ead857724db00 + checksum: 10c0/202a7959d9c750c266788b928defe440d5e312303d575806b812986a1c856366c725faa177843ea25f4c6aeb33bfc33eca629951bf2e968303b9313645a48b10 languageName: node linkType: hard @@ -5530,6 +6489,19 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-atlassian-provider@npm:^0.2.5": + version: 0.2.5 + resolution: "@backstage/plugin-auth-backend-module-atlassian-provider@npm:0.2.5" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/plugin-auth-node": "npm:^0.5.1" + express: "npm:^4.18.2" + passport: "npm:^0.7.0" + passport-atlassian-oauth2: "npm:^2.1.0" + checksum: 10c0/5dedbe980ad3298aa77d0767987e4d7bc52e01879a179d455b9db3bba67f1a4ced2c5a1e954e6942671f4f6280bfd96cb7bacb7386ed9ef33e4a4f42e21d9019 + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-atlassian-provider@npm:^0.3.2": version: 0.3.2 resolution: "@backstage/plugin-auth-backend-module-atlassian-provider@npm:0.3.2" @@ -5556,6 +6528,22 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-aws-alb-provider@npm:^0.1.17": + version: 0.1.17 + resolution: "@backstage/plugin-auth-backend-module-aws-alb-provider@npm:0.1.17" + dependencies: + "@backstage/backend-common": "npm:^0.24.1" + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/errors": "npm:^1.2.4" + "@backstage/plugin-auth-backend": "npm:^0.22.12" + "@backstage/plugin-auth-node": "npm:^0.5.1" + jose: "npm:^5.0.0" + node-cache: "npm:^5.1.2" + node-fetch: "npm:^2.7.0" + checksum: 10c0/b8fd1db9517ea52164c57db61673e6aab1e4d8d0c9624e228f85ffe84d6cc490bffb9adb276719a596502db730cdf999a88abc19ba848c349c126c288bf3a746 + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-aws-alb-provider@npm:^0.3.0": version: 0.3.0 resolution: "@backstage/plugin-auth-backend-module-aws-alb-provider@npm:0.3.0" @@ -5571,6 +6559,22 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-azure-easyauth-provider@npm:^0.1.7": + version: 0.1.7 + resolution: "@backstage/plugin-auth-backend-module-azure-easyauth-provider@npm:0.1.7" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/catalog-model": "npm:^1.6.0" + "@backstage/errors": "npm:^1.2.4" + "@backstage/plugin-auth-node": "npm:^0.5.1" + "@types/passport": "npm:^1.0.16" + express: "npm:^4.19.2" + jose: "npm:^5.0.0" + passport: "npm:^0.7.0" + checksum: 10c0/5b45c980f2e92f498854e17251c17700f5fcd689cd8b948b7ca1ca3671f74da4d3ac933c2a6e5051237999ebd2dad9dc6345b1ff66aeaa7b3fe9b63496dff6b1 + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-azure-easyauth-provider@npm:^0.2.2": version: 0.2.2 resolution: "@backstage/plugin-auth-backend-module-azure-easyauth-provider@npm:0.2.2" @@ -5587,6 +6591,19 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-bitbucket-provider@npm:^0.1.7": + version: 0.1.7 + resolution: "@backstage/plugin-auth-backend-module-bitbucket-provider@npm:0.1.7" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/plugin-auth-node": "npm:^0.5.1" + express: "npm:^4.18.2" + passport: "npm:^0.7.0" + passport-bitbucket-oauth2: "npm:^0.1.2" + checksum: 10c0/66142a88e2cb52d9498a2ca1ea12b8fa2c27655570642db17f08000c9d2db77ec85e7b6c3f3e7ca4852fa28e51e11b3ac6cbb490d2cbe6394e90ca879a4f5f8e + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-bitbucket-provider@npm:^0.2.2": version: 0.2.2 resolution: "@backstage/plugin-auth-backend-module-bitbucket-provider@npm:0.2.2" @@ -5613,6 +6630,21 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-cloudflare-access-provider@npm:^0.2.1": + version: 0.2.1 + resolution: "@backstage/plugin-auth-backend-module-cloudflare-access-provider@npm:0.2.1" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/config": "npm:^1.2.0" + "@backstage/errors": "npm:^1.2.4" + "@backstage/plugin-auth-node": "npm:^0.5.1" + express: "npm:^4.18.2" + jose: "npm:^5.0.0" + node-fetch: "npm:^2.7.0" + checksum: 10c0/3be2d0c47e644c2418bd234557a63356dbf6e290a3436aa6d57982d1f65b44d5d69ed1aa1c8890057be891282f12bd409d4ed696711f03d9929725ff3b1af6f1 + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-cloudflare-access-provider@npm:^0.3.2": version: 0.3.2 resolution: "@backstage/plugin-auth-backend-module-cloudflare-access-provider@npm:0.3.2" @@ -5628,6 +6660,19 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-gcp-iap-provider@npm:^0.2.19": + version: 0.2.19 + resolution: "@backstage/plugin-auth-backend-module-gcp-iap-provider@npm:0.2.19" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/errors": "npm:^1.2.4" + "@backstage/plugin-auth-node": "npm:^0.5.1" + "@backstage/types": "npm:^1.1.1" + google-auth-library: "npm:^9.0.0" + checksum: 10c0/5dbe55867094bb4d3e3535a70524217e32ed80697d193aef2f1c42c965201486361e47890bce872c39ac6ab2fcb32286dbcf5ef289dd8a3e9976d2d1e654f686 + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-gcp-iap-provider@npm:^0.3.2": version: 0.3.2 resolution: "@backstage/plugin-auth-backend-module-gcp-iap-provider@npm:0.3.2" @@ -5641,6 +6686,17 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-github-provider@npm:^0.1.21": + version: 0.1.21 + resolution: "@backstage/plugin-auth-backend-module-github-provider@npm:0.1.21" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/plugin-auth-node": "npm:^0.5.1" + passport-github2: "npm:^0.1.12" + checksum: 10c0/be8519c9deb3d7542af2feaddd832d306a74f95f7287d0bef364b39b90007b3e139764acd366325ec33ae9680e013e6d4fd79cdad0cc944b5c683a17945fb5ea + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-github-provider@npm:^0.2.2": version: 0.2.2 resolution: "@backstage/plugin-auth-backend-module-github-provider@npm:0.2.2" @@ -5652,6 +6708,19 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-gitlab-provider@npm:^0.1.21": + version: 0.1.21 + resolution: "@backstage/plugin-auth-backend-module-gitlab-provider@npm:0.1.21" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/plugin-auth-node": "npm:^0.5.1" + express: "npm:^4.18.2" + passport: "npm:^0.7.0" + passport-gitlab2: "npm:^5.0.0" + checksum: 10c0/36fee87ae898063545571313a8f2eb02952e1ab88c27cc192d11f60809788bd46faa96246e93520d363df74dc1b3d59bbd7a607f521d61b96e33405cc41a296f + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-gitlab-provider@npm:^0.2.2": version: 0.2.2 resolution: "@backstage/plugin-auth-backend-module-gitlab-provider@npm:0.2.2" @@ -5665,6 +6734,18 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-google-provider@npm:^0.1.21": + version: 0.1.21 + resolution: "@backstage/plugin-auth-backend-module-google-provider@npm:0.1.21" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/plugin-auth-node": "npm:^0.5.1" + google-auth-library: "npm:^9.0.0" + passport-google-oauth20: "npm:^2.0.0" + checksum: 10c0/4ff1f4d2d7cc31b37cf1b45e9a5c59463727360eba2c1097aab33b5a9be05807eba71b1b8cb2d08ce5389b7f8c09dc418f8594ffc0526cc1b7c9801daffa539c + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-google-provider@npm:^0.2.2": version: 0.2.2 resolution: "@backstage/plugin-auth-backend-module-google-provider@npm:0.2.2" @@ -5677,6 +6758,20 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-guest-provider@npm:^0.1.2": + version: 0.1.10 + resolution: "@backstage/plugin-auth-backend-module-guest-provider@npm:0.1.10" + dependencies: + "@backstage/backend-common": "npm:^0.24.1" + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/catalog-model": "npm:^1.6.0" + "@backstage/errors": "npm:^1.2.4" + "@backstage/plugin-auth-node": "npm:^0.5.1" + passport-oauth2: "npm:^1.7.0" + checksum: 10c0/7692e9cb9adf814f2219b86bba2321897698c32a2052d3927c15bfee6320fb5f5c8ddc81f834083a33f3c70c6255a93b8a3139761b18cf748b5eebe0788d28fd + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-guest-provider@npm:^0.2.2": version: 0.2.2 resolution: "@backstage/plugin-auth-backend-module-guest-provider@npm:0.2.2" @@ -5690,6 +6785,20 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-microsoft-provider@npm:^0.1.19": + version: 0.1.19 + resolution: "@backstage/plugin-auth-backend-module-microsoft-provider@npm:0.1.19" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/plugin-auth-node": "npm:^0.5.1" + express: "npm:^4.18.2" + jose: "npm:^5.0.0" + node-fetch: "npm:^2.7.0" + passport-microsoft: "npm:^1.0.0" + checksum: 10c0/8cc496ab166dd6af0a635756e329ff17232d234d58d22c77ec536a0b9af447fced602482214a09d3ce9a5dcbab8fc880afb15e18c90bab1f3a4a8bf007861a1e + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-microsoft-provider@npm:^0.2.2": version: 0.2.2 resolution: "@backstage/plugin-auth-backend-module-microsoft-provider@npm:0.2.2" @@ -5704,6 +6813,18 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-oauth2-provider@npm:^0.2.5": + version: 0.2.5 + resolution: "@backstage/plugin-auth-backend-module-oauth2-provider@npm:0.2.5" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/plugin-auth-node": "npm:^0.5.1" + passport: "npm:^0.7.0" + passport-oauth2: "npm:^1.6.1" + checksum: 10c0/c17c36ebc6bd60c669939a8983b659f41b351210f9d316561f6308f3f99fc66f0b084c09c85c16919c6602dab4cf5a92a90eee1db83c59f289b0bab14f3e1ac6 + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-oauth2-provider@npm:^0.3.2": version: 0.3.2 resolution: "@backstage/plugin-auth-backend-module-oauth2-provider@npm:0.3.2" @@ -5716,6 +6837,18 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-oauth2-proxy-provider@npm:^0.1.17": + version: 0.1.17 + resolution: "@backstage/plugin-auth-backend-module-oauth2-proxy-provider@npm:0.1.17" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/errors": "npm:^1.2.4" + "@backstage/plugin-auth-node": "npm:^0.5.1" + jose: "npm:^5.0.0" + checksum: 10c0/8737a6b193ff1d8bcc35359e011834c025e4a3514c2ce57bc2526a12e1841d6625c71f857f1f863aefb689fa3903bf86cce8beb5e62e68651ba829bd2e409f8d + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-oauth2-proxy-provider@npm:^0.2.2": version: 0.2.2 resolution: "@backstage/plugin-auth-backend-module-oauth2-proxy-provider@npm:0.2.2" @@ -5728,6 +6861,21 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-oidc-provider@npm:^0.2.6": + version: 0.2.6 + resolution: "@backstage/plugin-auth-backend-module-oidc-provider@npm:0.2.6" + dependencies: + "@backstage/backend-common": "npm:^0.24.1" + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/plugin-auth-backend": "npm:^0.22.12" + "@backstage/plugin-auth-node": "npm:^0.5.1" + express: "npm:^4.18.2" + openid-client: "npm:^5.5.0" + passport: "npm:^0.7.0" + checksum: 10c0/344ee0d68a1725574c48071d5f76030dbf58d5072c7d71107e72afc9a2c4093900b52369cea2c77f362a7d35a7f37fe0407fae13a961df1a0a8657e4d5c3b13b + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-oidc-provider@npm:^0.3.2": version: 0.3.2 resolution: "@backstage/plugin-auth-backend-module-oidc-provider@npm:0.3.2" @@ -5742,6 +6890,19 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-okta-provider@npm:^0.0.17": + version: 0.0.17 + resolution: "@backstage/plugin-auth-backend-module-okta-provider@npm:0.0.17" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/plugin-auth-node": "npm:^0.5.1" + "@davidzemon/passport-okta-oauth": "npm:^0.0.5" + express: "npm:^4.18.2" + passport: "npm:^0.7.0" + checksum: 10c0/8c37d93fb99829c82fdf7b882d5a4452159729371723b0846ef3c0577309053e4e93425405f3d1b19e15f69acc9a8bf4b5fa0c3556ed85e4c8065f7f97ac1673 + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-okta-provider@npm:^0.1.2": version: 0.1.2 resolution: "@backstage/plugin-auth-backend-module-okta-provider@npm:0.1.2" @@ -5755,6 +6916,19 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend-module-onelogin-provider@npm:^0.1.5": + version: 0.1.5 + resolution: "@backstage/plugin-auth-backend-module-onelogin-provider@npm:0.1.5" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/plugin-auth-node": "npm:^0.5.1" + express: "npm:^4.18.2" + passport: "npm:^0.7.0" + passport-onelogin-oauth: "npm:^0.0.1" + checksum: 10c0/d84d0df8d1c35858336a0b602fb8482da17fefd3ce03baf239da891b92aa4a99fe7f9868d936ea0aac4f588ce5e295c381f26233aa32371b635db8ce99b3198c + languageName: node + linkType: hard + "@backstage/plugin-auth-backend-module-onelogin-provider@npm:^0.2.2": version: 0.2.2 resolution: "@backstage/plugin-auth-backend-module-onelogin-provider@npm:0.2.2" @@ -5768,6 +6942,70 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-auth-backend@npm:^0.22.12, @backstage/plugin-auth-backend@npm:^0.22.3": + version: 0.22.12 + resolution: "@backstage/plugin-auth-backend@npm:0.22.12" + dependencies: + "@backstage/backend-common": "npm:^0.24.1" + "@backstage/backend-plugin-api": "npm:^0.8.1" + "@backstage/catalog-client": "npm:^1.6.6" + "@backstage/catalog-model": "npm:^1.6.0" + "@backstage/config": "npm:^1.2.0" + "@backstage/errors": "npm:^1.2.4" + "@backstage/plugin-auth-backend-module-atlassian-provider": "npm:^0.2.5" + "@backstage/plugin-auth-backend-module-aws-alb-provider": "npm:^0.1.17" + "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "npm:^0.1.7" + "@backstage/plugin-auth-backend-module-bitbucket-provider": "npm:^0.1.7" + "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "npm:^0.2.1" + "@backstage/plugin-auth-backend-module-gcp-iap-provider": "npm:^0.2.19" + "@backstage/plugin-auth-backend-module-github-provider": "npm:^0.1.21" + "@backstage/plugin-auth-backend-module-gitlab-provider": "npm:^0.1.21" + "@backstage/plugin-auth-backend-module-google-provider": "npm:^0.1.21" + "@backstage/plugin-auth-backend-module-microsoft-provider": "npm:^0.1.19" + "@backstage/plugin-auth-backend-module-oauth2-provider": "npm:^0.2.5" + "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "npm:^0.1.17" + "@backstage/plugin-auth-backend-module-oidc-provider": "npm:^0.2.6" + "@backstage/plugin-auth-backend-module-okta-provider": "npm:^0.0.17" + "@backstage/plugin-auth-backend-module-onelogin-provider": "npm:^0.1.5" + "@backstage/plugin-auth-node": "npm:^0.5.1" + "@backstage/plugin-catalog-node": "npm:^1.12.6" + "@backstage/types": "npm:^1.1.1" + "@google-cloud/firestore": "npm:^7.0.0" + "@node-saml/passport-saml": "npm:^4.0.4" + "@types/express": "npm:^4.17.6" + "@types/passport": "npm:^1.0.3" + compression: "npm:^1.7.4" + connect-session-knex: "npm:^4.0.0" + cookie-parser: "npm:^1.4.5" + cors: "npm:^2.8.5" + express: "npm:^4.17.1" + express-promise-router: "npm:^4.1.0" + express-session: "npm:^1.17.1" + fs-extra: "npm:^11.2.0" + google-auth-library: "npm:^9.0.0" + jose: "npm:^5.0.0" + knex: "npm:^3.0.0" + lodash: "npm:^4.17.21" + luxon: "npm:^3.0.0" + minimatch: "npm:^9.0.0" + morgan: "npm:^1.10.0" + node-cache: "npm:^5.1.2" + node-fetch: "npm:^2.7.0" + openid-client: "npm:^5.2.1" + passport: "npm:^0.7.0" + passport-auth0: "npm:^1.4.3" + passport-github2: "npm:^0.1.12" + passport-google-oauth20: "npm:^2.0.0" + passport-microsoft: "npm:^1.0.0" + passport-oauth2: "npm:^1.6.1" + passport-onelogin-oauth: "npm:^0.0.1" + uuid: "npm:^9.0.0" + winston: "npm:^3.2.1" + yn: "npm:^4.0.0" + checksum: 10c0/09a7fa0542b6a88eb8348c1a46150e5bc50627cba53e5b140b6342349c7f6f98a13c07fe398fc44bc0dc497736375404239a64c76e53ca0a8e1ccc75a03eb3bc + languageName: node + linkType: hard + "@backstage/plugin-auth-backend@npm:^0.24.0": version: 0.24.0 resolution: "@backstage/plugin-auth-backend@npm:0.24.0" @@ -5834,7 +7072,32 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-auth-node@npm:^0.5.2, @backstage/plugin-auth-node@npm:^0.5.4": +"@backstage/plugin-auth-node@npm:^0.4.12, @backstage/plugin-auth-node@npm:^0.4.13, @backstage/plugin-auth-node@npm:^0.4.16, @backstage/plugin-auth-node@npm:^0.4.17": + version: 0.4.17 + resolution: "@backstage/plugin-auth-node@npm:0.4.17" + dependencies: + "@backstage/backend-common": "npm:^0.23.3" + "@backstage/backend-plugin-api": "npm:^0.7.0" + "@backstage/catalog-client": "npm:^1.6.5" + "@backstage/catalog-model": "npm:^1.5.0" + "@backstage/config": "npm:^1.2.0" + "@backstage/errors": "npm:^1.2.4" + "@backstage/types": "npm:^1.1.1" + "@types/express": "npm:*" + "@types/passport": "npm:^1.0.3" + express: "npm:^4.17.1" + jose: "npm:^5.0.0" + lodash: "npm:^4.17.21" + node-fetch: "npm:^2.6.7" + passport: "npm:^0.7.0" + winston: "npm:^3.2.1" + zod: "npm:^3.22.4" + zod-to-json-schema: "npm:^3.21.4" + checksum: 10c0/b4b081afc89fa24deda831787309180657ba49e93310cd03adb4931f7a7cd5d03d2d74b95f247fc22cf8f0b95b435c1942377c021eebc7534758155cad04686b + languageName: node + linkType: hard + +"@backstage/plugin-auth-node@npm:^0.5.1, @backstage/plugin-auth-node@npm:^0.5.2, @backstage/plugin-auth-node@npm:^0.5.4": version: 0.5.4 resolution: "@backstage/plugin-auth-node@npm:0.5.4" dependencies: @@ -6063,7 +7326,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-catalog-node@npm:^1.14.0": +"@backstage/plugin-catalog-node@npm:^1.12.6, @backstage/plugin-catalog-node@npm:^1.14.0": version: 1.14.0 resolution: "@backstage/plugin-catalog-node@npm:1.14.0" dependencies: @@ -6198,6 +7461,15 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-events-node@npm:^0.3.4": + version: 0.3.10 + resolution: "@backstage/plugin-events-node@npm:0.3.10" + dependencies: + "@backstage/backend-plugin-api": "npm:^0.8.1" + checksum: 10c0/f56e8d66cd4e3d089c624d41e566c6c9a4f57863f9c3edc3efb76454ca2e83cc60de15bc852a067e4163137f8af53f6b5f3740ca484f917600fe0847afebf9df + languageName: node + linkType: hard + "@backstage/plugin-events-node@npm:^0.4.5": version: 0.4.5 resolution: "@backstage/plugin-events-node@npm:0.4.5" @@ -6256,7 +7528,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-permission-common@npm:^0.8.2": +"@backstage/plugin-permission-common@npm:^0.8.0, @backstage/plugin-permission-common@npm:^0.8.1, @backstage/plugin-permission-common@npm:^0.8.2": version: 0.8.2 resolution: "@backstage/plugin-permission-common@npm:0.8.2" dependencies: @@ -6271,6 +7543,25 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-permission-node@npm:^0.7.32": + version: 0.7.32 + resolution: "@backstage/plugin-permission-node@npm:0.7.32" + dependencies: + "@backstage/backend-common": "npm:^0.23.2" + "@backstage/backend-plugin-api": "npm:^0.6.21" + "@backstage/config": "npm:^1.2.0" + "@backstage/errors": "npm:^1.2.4" + "@backstage/plugin-auth-node": "npm:^0.4.16" + "@backstage/plugin-permission-common": "npm:^0.7.14" + "@types/express": "npm:^4.17.6" + express: "npm:^4.17.1" + express-promise-router: "npm:^4.1.0" + zod: "npm:^3.22.4" + zod-to-json-schema: "npm:^3.20.4" + checksum: 10c0/bbe86af29b3a049e3f2384c73ef87da7580851de04ca36fcfcb7a3c16e359211a3779c2b0ad3d5e9deb603afba0fea7e1b94b55a0b175927e6881e439a0c93ee + languageName: node + linkType: hard + "@backstage/plugin-permission-node@npm:^0.8.5": version: 0.8.5 resolution: "@backstage/plugin-permission-node@npm:0.8.5" @@ -7624,6 +8915,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/aix-ppc64@npm:0.23.1" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/aix-ppc64@npm:0.24.0" @@ -7638,6 +8943,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/android-arm64@npm:0.23.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/android-arm64@npm:0.24.0" @@ -7652,6 +8971,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/android-arm@npm:0.23.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/android-arm@npm:0.24.0" @@ -7666,6 +8999,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/android-x64@npm:0.23.1" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/android-x64@npm:0.24.0" @@ -7680,6 +9027,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/darwin-arm64@npm:0.23.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/darwin-arm64@npm:0.24.0" @@ -7694,6 +9055,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/darwin-x64@npm:0.23.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/darwin-x64@npm:0.24.0" @@ -7708,6 +9083,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/freebsd-arm64@npm:0.23.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/freebsd-arm64@npm:0.24.0" @@ -7722,6 +9111,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/freebsd-x64@npm:0.23.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/freebsd-x64@npm:0.24.0" @@ -7736,6 +9139,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-arm64@npm:0.23.1" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-arm64@npm:0.24.0" @@ -7750,6 +9167,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-arm@npm:0.23.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-arm@npm:0.24.0" @@ -7764,6 +9195,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-ia32@npm:0.23.1" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-ia32@npm:0.24.0" @@ -7778,6 +9223,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-loong64@npm:0.23.1" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-loong64@npm:0.24.0" @@ -7792,6 +9251,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-mips64el@npm:0.23.1" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-mips64el@npm:0.24.0" @@ -7806,6 +9279,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-ppc64@npm:0.23.1" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-ppc64@npm:0.24.0" @@ -7820,6 +9307,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-riscv64@npm:0.23.1" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-riscv64@npm:0.24.0" @@ -7834,6 +9335,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-s390x@npm:0.23.1" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-s390x@npm:0.24.0" @@ -7848,6 +9363,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-x64@npm:0.23.1" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-x64@npm:0.24.0" @@ -7862,6 +9391,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/netbsd-x64@npm:0.23.1" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/netbsd-x64@npm:0.24.0" @@ -7869,6 +9412,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/openbsd-arm64@npm:0.23.1" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/openbsd-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/openbsd-arm64@npm:0.24.0" @@ -7883,6 +9433,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/openbsd-x64@npm:0.23.1" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/openbsd-x64@npm:0.24.0" @@ -7897,6 +9461,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/sunos-x64@npm:0.23.1" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/sunos-x64@npm:0.24.0" @@ -7911,6 +9489,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/win32-arm64@npm:0.23.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/win32-arm64@npm:0.24.0" @@ -7925,6 +9517,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/win32-ia32@npm:0.23.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/win32-ia32@npm:0.24.0" @@ -7939,6 +9545,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/win32-x64@npm:0.23.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/win32-x64@npm:0.24.0" @@ -9150,6 +10770,92 @@ __metadata: languageName: node linkType: hard +"@langchain/aws@npm:^0.1.2": + version: 0.1.2 + resolution: "@langchain/aws@npm:0.1.2" + dependencies: + "@aws-sdk/client-bedrock-agent-runtime": "npm:^3.616.0" + "@aws-sdk/client-bedrock-runtime": "npm:^3.602.0" + "@aws-sdk/client-kendra": "npm:^3.352.0" + "@aws-sdk/credential-provider-node": "npm:^3.600.0" + zod: "npm:^3.23.8" + zod-to-json-schema: "npm:^3.22.5" + peerDependencies: + "@langchain/core": ">=0.2.21 <0.4.0" + checksum: 10c0/ad526806ff617d0ce6ddc895c1bb1f5b941b950c513e59cbd00d30591c32da49f609e09810935e8f6be129534461d2d7d91628a4b3b496df97b8510d1e4d5f45 + languageName: node + linkType: hard + +"@langchain/core@npm:^0.3.18": + version: 0.3.22 + resolution: "@langchain/core@npm:0.3.22" + dependencies: + ansi-styles: "npm:^5.0.0" + camelcase: "npm:6" + decamelize: "npm:1.2.0" + js-tiktoken: "npm:^1.0.12" + langsmith: "npm:^0.2.8" + mustache: "npm:^4.2.0" + p-queue: "npm:^6.6.2" + p-retry: "npm:4" + uuid: "npm:^10.0.0" + zod: "npm:^3.22.4" + zod-to-json-schema: "npm:^3.22.3" + checksum: 10c0/99050e331a71a568476195b458c1980f5a3361bc286e6031497aaa7075444ac1e319be51d34822f06c7fba22c0bb230c63e3dbab918e21f9ddeb90cc82b11e0e + languageName: node + linkType: hard + +"@langchain/langgraph-checkpoint@npm:~0.0.12": + version: 0.0.13 + resolution: "@langchain/langgraph-checkpoint@npm:0.0.13" + dependencies: + uuid: "npm:^10.0.0" + peerDependencies: + "@langchain/core": ">=0.2.31 <0.4.0" + checksum: 10c0/32ca419c76d7e5110230cfc23c2682e2207a862c763ac9a035c7d919a7e02286721dfec8ef03931b43f848943ba9125a1e09eccdbb00c74b06a0408bf6940391 + languageName: node + linkType: hard + +"@langchain/langgraph-sdk@npm:~0.0.21": + version: 0.0.31 + resolution: "@langchain/langgraph-sdk@npm:0.0.31" + dependencies: + "@types/json-schema": "npm:^7.0.15" + p-queue: "npm:^6.6.2" + p-retry: "npm:4" + uuid: "npm:^9.0.0" + checksum: 10c0/5272ecf7c928de3a0b5c0ba079f8867a679054ff361136bf7c55882d5dc390686a7454cafcbd6d9b9f7acb8901b6786de30d209e596bb6c496869a0eb2d722e2 + languageName: node + linkType: hard + +"@langchain/langgraph@npm:0.2.22": + version: 0.2.22 + resolution: "@langchain/langgraph@npm:0.2.22" + dependencies: + "@langchain/langgraph-checkpoint": "npm:~0.0.12" + "@langchain/langgraph-sdk": "npm:~0.0.21" + uuid: "npm:^10.0.0" + zod: "npm:^3.23.8" + peerDependencies: + "@langchain/core": ">=0.2.36 <0.3.0 || >=0.3.9 < 0.4.0" + checksum: 10c0/7932e71be97617c481f19901d3872f293d2755355555ca760bd0f81b535d29d54228cc4fced757682a949cc66d9d9c77fed9812d5ca2156bffa703bffad5bb8d + languageName: node + linkType: hard + +"@langchain/openai@npm:^0.3.14": + version: 0.3.14 + resolution: "@langchain/openai@npm:0.3.14" + dependencies: + js-tiktoken: "npm:^1.0.12" + openai: "npm:^4.71.0" + zod: "npm:^3.22.4" + zod-to-json-schema: "npm:^3.22.3" + peerDependencies: + "@langchain/core": ">=0.2.26 <0.4.0" + checksum: 10c0/03cdd457d83b0efee1a780e78b0804a2c27a85a10d57d6182f7abdd2b90bc672e0ad5b94c7b127e63e624de96e1b4472ae95a3423cc8d2f5436198e546ad6e9b + languageName: node + linkType: hard + "@leichtgewicht/ip-codec@npm:^2.0.1": version: 2.0.4 resolution: "@leichtgewicht/ip-codec@npm:2.0.4" @@ -9497,6 +11203,17 @@ __metadata: languageName: node linkType: hard +"@module-federation/bridge-react-webpack-plugin@npm:0.6.16": + version: 0.6.16 + resolution: "@module-federation/bridge-react-webpack-plugin@npm:0.6.16" + dependencies: + "@module-federation/sdk": "npm:0.6.16" + "@types/semver": "npm:7.5.8" + semver: "npm:7.6.3" + checksum: 10c0/9725cac48e4de65a5ef1e6541dd837a0618d89957e2f2ae8a12050f7a1f129f1f4858d43b20d86a96c7f405172ffd6be5b62ab5c15ca944c8d0038077c9315cd + languageName: node + linkType: hard + "@module-federation/bridge-react-webpack-plugin@npm:0.7.7": version: 0.7.7 resolution: "@module-federation/bridge-react-webpack-plugin@npm:0.7.7" @@ -9508,6 +11225,20 @@ __metadata: languageName: node linkType: hard +"@module-federation/data-prefetch@npm:0.6.16": + version: 0.6.16 + resolution: "@module-federation/data-prefetch@npm:0.6.16" + dependencies: + "@module-federation/runtime": "npm:0.6.16" + "@module-federation/sdk": "npm:0.6.16" + fs-extra: "npm:9.1.0" + peerDependencies: + react: ">=16.9.0" + react-dom: ">=16.9.0" + checksum: 10c0/ddfe10805ce7e50772884663b38cfc3bad22c0560c8d8446375fe42212ae5fc954bed7219444e69adaa2b793cc660dd4a8e1e87490e1e3523a06568ca4f4ae85 + languageName: node + linkType: hard + "@module-federation/data-prefetch@npm:0.7.7": version: 0.7.7 resolution: "@module-federation/data-prefetch@npm:0.7.7" @@ -9522,6 +11253,65 @@ __metadata: languageName: node linkType: hard +"@module-federation/dts-plugin@npm:0.1.21": + version: 0.1.21 + resolution: "@module-federation/dts-plugin@npm:0.1.21" + dependencies: + "@module-federation/managers": "npm:0.1.21" + "@module-federation/sdk": "npm:0.1.21" + "@module-federation/third-party-dts-extractor": "npm:0.1.21" + adm-zip: "npm:^0.5.10" + ansi-colors: "npm:^4.1.3" + axios: "npm:^1.6.7" + chalk: "npm:3.0.0" + fs-extra: "npm:9.1.0" + isomorphic-ws: "npm:5.0.0" + koa: "npm:2.11.0" + lodash.clonedeepwith: "npm:4.5.0" + log4js: "npm:6.9.1" + node-schedule: "npm:2.1.1" + rambda: "npm:^9.1.0" + ws: "npm:8.17.0" + peerDependencies: + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: ^1.0.24 + peerDependenciesMeta: + vue-tsc: + optional: true + checksum: 10c0/d5ea3a6bdd1279b5056bacaf871e278cca89a86cd2c8c242e5936ff5e9e43f4c962a87f30a73d9a4e32689d1e2016f494d8343737c16482c0efde321014127c1 + languageName: node + linkType: hard + +"@module-federation/dts-plugin@npm:0.6.16": + version: 0.6.16 + resolution: "@module-federation/dts-plugin@npm:0.6.16" + dependencies: + "@module-federation/error-codes": "npm:0.6.14" + "@module-federation/managers": "npm:0.6.16" + "@module-federation/sdk": "npm:0.6.16" + "@module-federation/third-party-dts-extractor": "npm:0.6.16" + adm-zip: "npm:^0.5.10" + ansi-colors: "npm:^4.1.3" + axios: "npm:^1.7.4" + chalk: "npm:3.0.0" + fs-extra: "npm:9.1.0" + isomorphic-ws: "npm:5.0.0" + koa: "npm:2.15.3" + lodash.clonedeepwith: "npm:4.5.0" + log4js: "npm:6.9.1" + node-schedule: "npm:2.1.1" + rambda: "npm:^9.1.0" + ws: "npm:8.18.0" + peerDependencies: + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: ">=1.0.24" + peerDependenciesMeta: + vue-tsc: + optional: true + checksum: 10c0/f92e7191d11065cdbcaf818b1efc644a72350938307a42595930c6d8036693b7e134f8c0f89ed4c3f8cbd9b9d9be6b8967023c99e2ba5e991cdf5b89c2a93a57 + languageName: node + linkType: hard + "@module-federation/dts-plugin@npm:0.7.7": version: 0.7.7 resolution: "@module-federation/dts-plugin@npm:0.7.7" @@ -9552,6 +11342,61 @@ __metadata: languageName: node linkType: hard +"@module-federation/enhanced@npm:^0.1.19": + version: 0.1.21 + resolution: "@module-federation/enhanced@npm:0.1.21" + dependencies: + "@module-federation/dts-plugin": "npm:0.1.21" + "@module-federation/managers": "npm:0.1.21" + "@module-federation/manifest": "npm:0.1.21" + "@module-federation/rspack": "npm:0.1.21" + "@module-federation/runtime-tools": "npm:0.1.21" + "@module-federation/sdk": "npm:0.1.21" + upath: "npm:2.0.1" + peerDependencies: + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: ^1.0.24 + webpack: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + vue-tsc: + optional: true + webpack: + optional: true + checksum: 10c0/f7344c307713ebe014b5ca40951b61ed40513811716b873f8f31676df776c3eadffcd1e1b28c3d2ad1e0a622164f1a6544d6bfbe83999885f2cf304f4302ce61 + languageName: node + linkType: hard + +"@module-federation/enhanced@npm:^0.6.0": + version: 0.6.16 + resolution: "@module-federation/enhanced@npm:0.6.16" + dependencies: + "@module-federation/bridge-react-webpack-plugin": "npm:0.6.16" + "@module-federation/data-prefetch": "npm:0.6.16" + "@module-federation/dts-plugin": "npm:0.6.16" + "@module-federation/managers": "npm:0.6.16" + "@module-federation/manifest": "npm:0.6.16" + "@module-federation/rspack": "npm:0.6.16" + "@module-federation/runtime-tools": "npm:0.6.16" + "@module-federation/sdk": "npm:0.6.16" + btoa: "npm:^1.2.1" + upath: "npm:2.0.1" + peerDependencies: + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: ">=1.0.24" + webpack: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + vue-tsc: + optional: true + webpack: + optional: true + checksum: 10c0/eddfb0ca51593b75d520a59e781c04ee2ebeb33cdc087ec19a80bd4ccdd8cd279041dc82db8983b910c6ca0ea4713a8a5c22aaa888dda83b989401491c0f3218 + languageName: node + linkType: hard + "@module-federation/enhanced@npm:^0.7.0": version: 0.7.7 resolution: "@module-federation/enhanced@npm:0.7.7" @@ -9581,6 +11426,13 @@ __metadata: languageName: node linkType: hard +"@module-federation/error-codes@npm:0.6.14": + version: 0.6.14 + resolution: "@module-federation/error-codes@npm:0.6.14" + checksum: 10c0/60809049f470942ab99b02b2070b2e57a1b783e2467ac83340c3e6947b74c282670985dfed617d13da94a6fa7433c2a959e5c1183eecfa32f8b8ebc548da96cc + languageName: node + linkType: hard + "@module-federation/error-codes@npm:0.7.7": version: 0.7.7 resolution: "@module-federation/error-codes@npm:0.7.7" @@ -9588,6 +11440,28 @@ __metadata: languageName: node linkType: hard +"@module-federation/managers@npm:0.1.21": + version: 0.1.21 + resolution: "@module-federation/managers@npm:0.1.21" + dependencies: + "@module-federation/sdk": "npm:0.1.21" + find-pkg: "npm:2.0.0" + fs-extra: "npm:9.1.0" + checksum: 10c0/def34b983a36a5d711730f9a6898a8f70935475a0435dc6ea5fca0744cc874fdb292255cf02943c5fca411e75bfc73065fd7a6e5f54229825a824de874caa5e8 + languageName: node + linkType: hard + +"@module-federation/managers@npm:0.6.16": + version: 0.6.16 + resolution: "@module-federation/managers@npm:0.6.16" + dependencies: + "@module-federation/sdk": "npm:0.6.16" + find-pkg: "npm:2.0.0" + fs-extra: "npm:9.1.0" + checksum: 10c0/9a36c8070c343b544f89323397cce987012d8af9e4f390d9875b082535b8a83cc6fc8b688bbbfe78da447f3652dda18561f737a114bb4e4ffcb1a804c450b2a2 + languageName: node + linkType: hard + "@module-federation/managers@npm:0.7.7": version: 0.7.7 resolution: "@module-federation/managers@npm:0.7.7" @@ -9599,6 +11473,32 @@ __metadata: languageName: node linkType: hard +"@module-federation/manifest@npm:0.1.21": + version: 0.1.21 + resolution: "@module-federation/manifest@npm:0.1.21" + dependencies: + "@module-federation/dts-plugin": "npm:0.1.21" + "@module-federation/managers": "npm:0.1.21" + "@module-federation/sdk": "npm:0.1.21" + chalk: "npm:3.0.0" + find-pkg: "npm:2.0.0" + checksum: 10c0/58b68cdc9d28bca2abd32f8aba86e72477625a49278b5218736ced7b89131ea7d22c2f1da1ffe3eb90c91b2f28a7ccfddac8da4c4712ec883d946c6d6d8a95f3 + languageName: node + linkType: hard + +"@module-federation/manifest@npm:0.6.16": + version: 0.6.16 + resolution: "@module-federation/manifest@npm:0.6.16" + dependencies: + "@module-federation/dts-plugin": "npm:0.6.16" + "@module-federation/managers": "npm:0.6.16" + "@module-federation/sdk": "npm:0.6.16" + chalk: "npm:3.0.0" + find-pkg: "npm:2.0.0" + checksum: 10c0/ca6b1b547d166b8b180f120d89f7371b34a09dd356631ce9ca69dd7adfd667ace4ad2ea097be865a221fa5f1f15044be55cdbf735f252344ee31e3f3c4ac06f8 + languageName: node + linkType: hard + "@module-federation/manifest@npm:0.7.7": version: 0.7.7 resolution: "@module-federation/manifest@npm:0.7.7" @@ -9612,6 +11512,41 @@ __metadata: languageName: node linkType: hard +"@module-federation/rspack@npm:0.1.21": + version: 0.1.21 + resolution: "@module-federation/rspack@npm:0.1.21" + dependencies: + "@module-federation/dts-plugin": "npm:0.1.21" + "@module-federation/managers": "npm:0.1.21" + "@module-federation/manifest": "npm:0.1.21" + "@module-federation/runtime-tools": "npm:0.1.21" + "@module-federation/sdk": "npm:0.1.21" + checksum: 10c0/d8f81e0bada9576ab2be4349a65d2a25bd96f9a08025ae773a1ec34ca03f3a308774449c6e2e505ca790b72432c3aa28e6108471b7c7d3e59c845fc8e5196f96 + languageName: node + linkType: hard + +"@module-federation/rspack@npm:0.6.16": + version: 0.6.16 + resolution: "@module-federation/rspack@npm:0.6.16" + dependencies: + "@module-federation/bridge-react-webpack-plugin": "npm:0.6.16" + "@module-federation/dts-plugin": "npm:0.6.16" + "@module-federation/managers": "npm:0.6.16" + "@module-federation/manifest": "npm:0.6.16" + "@module-federation/runtime-tools": "npm:0.6.16" + "@module-federation/sdk": "npm:0.6.16" + peerDependencies: + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: ">=1.0.24" + peerDependenciesMeta: + typescript: + optional: true + vue-tsc: + optional: true + checksum: 10c0/9357bc9254c0dacaabd0d4bb444772de32d4935fd52b2551adf426cd32bdba97d54a21bbc293fdfc44460fdb65aa339dbb11d169a701f04f4f134f252b7dfeb9 + languageName: node + linkType: hard + "@module-federation/rspack@npm:0.7.7": version: 0.7.7 resolution: "@module-federation/rspack@npm:0.7.7" @@ -9634,6 +11569,26 @@ __metadata: languageName: node linkType: hard +"@module-federation/runtime-tools@npm:0.1.21": + version: 0.1.21 + resolution: "@module-federation/runtime-tools@npm:0.1.21" + dependencies: + "@module-federation/runtime": "npm:0.1.21" + "@module-federation/webpack-bundler-runtime": "npm:0.1.21" + checksum: 10c0/c3556ef6cab354d2c495d21e0a655e7c217c20e8f3373b658c5b3495d5bab1f9818e8709149809c3e93bca29eab4cad8e264c557bbb20887e2f914ecba9f6a26 + languageName: node + linkType: hard + +"@module-federation/runtime-tools@npm:0.6.16": + version: 0.6.16 + resolution: "@module-federation/runtime-tools@npm:0.6.16" + dependencies: + "@module-federation/runtime": "npm:0.6.16" + "@module-federation/webpack-bundler-runtime": "npm:0.6.16" + checksum: 10c0/bb9a17c82bdaca5beeac7f944b49fb813480a5ea5999e3ee29e07b6e6e19ff253a5244bdb4f2d69f2f450851a1627827927274f64d8539032a2dcab2a8bcf738 + languageName: node + linkType: hard + "@module-federation/runtime-tools@npm:0.7.7": version: 0.7.7 resolution: "@module-federation/runtime-tools@npm:0.7.7" @@ -9644,6 +11599,25 @@ __metadata: languageName: node linkType: hard +"@module-federation/runtime@npm:0.1.21": + version: 0.1.21 + resolution: "@module-federation/runtime@npm:0.1.21" + dependencies: + "@module-federation/sdk": "npm:0.1.21" + checksum: 10c0/2be87351a3aa58dabacfc08c3ff576dd16eb1caeca960f1da7102b8d8c3fe30de4c4816bf60b5cc6b11d2b94299013013255ec821b8a3e1f327b54b1f1ae89b5 + languageName: node + linkType: hard + +"@module-federation/runtime@npm:0.6.16": + version: 0.6.16 + resolution: "@module-federation/runtime@npm:0.6.16" + dependencies: + "@module-federation/error-codes": "npm:0.6.14" + "@module-federation/sdk": "npm:0.6.16" + checksum: 10c0/5520ec1f21ac8d1fdda1f876cf137bc52c8799e580a90b9bb000ae654b71ff9559289a1d972f174b885cf2381334d80bff6446134cf35bd1d52825275bbefd4d + languageName: node + linkType: hard + "@module-federation/runtime@npm:0.7.7": version: 0.7.7 resolution: "@module-federation/runtime@npm:0.7.7" @@ -9654,6 +11628,22 @@ __metadata: languageName: node linkType: hard +"@module-federation/sdk@npm:0.1.21": + version: 0.1.21 + resolution: "@module-federation/sdk@npm:0.1.21" + checksum: 10c0/8ebf13486deece525e65f9847b6fd6f3df3843d343f31f8a8186fa4ca88b0bfcc065e3e484b38e8105e0b6254aa89b9c2607fa8070291acbb624bf3522969827 + languageName: node + linkType: hard + +"@module-federation/sdk@npm:0.6.16": + version: 0.6.16 + resolution: "@module-federation/sdk@npm:0.6.16" + dependencies: + isomorphic-rslog: "npm:0.0.5" + checksum: 10c0/3dd47f299f9b775cf6cf35cb71d80e577c430a97df5100cec6f0211db67a735f4ec62ab2e288b81f7e902cdd61ea1bdfe5e574b9f038d3d6b86965488242d837 + languageName: node + linkType: hard + "@module-federation/sdk@npm:0.7.7": version: 0.7.7 resolution: "@module-federation/sdk@npm:0.7.7" @@ -9663,6 +11653,28 @@ __metadata: languageName: node linkType: hard +"@module-federation/third-party-dts-extractor@npm:0.1.21": + version: 0.1.21 + resolution: "@module-federation/third-party-dts-extractor@npm:0.1.21" + dependencies: + find-pkg: "npm:2.0.0" + fs-extra: "npm:9.1.0" + resolve: "npm:1.22.8" + checksum: 10c0/659e9086169c0bbbd8d7af3c632b59d3db09da1317b7c481a88cf9edea020baa41d0b27177c96b7852985203a735791caa401ebce4eaa87666a05543ac23f6c8 + languageName: node + linkType: hard + +"@module-federation/third-party-dts-extractor@npm:0.6.16": + version: 0.6.16 + resolution: "@module-federation/third-party-dts-extractor@npm:0.6.16" + dependencies: + find-pkg: "npm:2.0.0" + fs-extra: "npm:9.1.0" + resolve: "npm:1.22.8" + checksum: 10c0/a181963daecbd40789042b1dea33a0438fcfa6699d2bcd5eee03a7a7d9a8813a3bcf3c1ee3947da64410b136b3bdc1f8b3562ad7baa164d8b91b7538423d3ae9 + languageName: node + linkType: hard + "@module-federation/third-party-dts-extractor@npm:0.7.7": version: 0.7.7 resolution: "@module-federation/third-party-dts-extractor@npm:0.7.7" @@ -9674,6 +11686,26 @@ __metadata: languageName: node linkType: hard +"@module-federation/webpack-bundler-runtime@npm:0.1.21": + version: 0.1.21 + resolution: "@module-federation/webpack-bundler-runtime@npm:0.1.21" + dependencies: + "@module-federation/runtime": "npm:0.1.21" + "@module-federation/sdk": "npm:0.1.21" + checksum: 10c0/31d595f993e456a90623bd2cb8c7780fd8b79d3ae46a57a227ce087b33a81e56561e121621ef9b32fc789837ff4578473f9dc9165ae40b28de6a30c6e42ea5b5 + languageName: node + linkType: hard + +"@module-federation/webpack-bundler-runtime@npm:0.6.16": + version: 0.6.16 + resolution: "@module-federation/webpack-bundler-runtime@npm:0.6.16" + dependencies: + "@module-federation/runtime": "npm:0.6.16" + "@module-federation/sdk": "npm:0.6.16" + checksum: 10c0/7f8e84035b630c7f78baf673152d52a8fbd8fb36571b394c774cb43787c5945b79314db4824ea3f03ee70a1a93ed9a263b1d9b7cbb75fb59e2a8c4e9f6802649 + languageName: node + linkType: hard + "@module-federation/webpack-bundler-runtime@npm:0.7.7": version: 0.7.7 resolution: "@module-federation/webpack-bundler-runtime@npm:0.7.7" @@ -9940,6 +11972,25 @@ __metadata: languageName: node linkType: hard +"@node-saml/node-saml@npm:^4.0.4": + version: 4.0.5 + resolution: "@node-saml/node-saml@npm:4.0.5" + dependencies: + "@types/debug": "npm:^4.1.7" + "@types/passport": "npm:^1.0.11" + "@types/xml-crypto": "npm:^1.4.2" + "@types/xml-encryption": "npm:^1.2.1" + "@types/xml2js": "npm:^0.4.11" + "@xmldom/xmldom": "npm:^0.8.6" + debug: "npm:^4.3.4" + xml-crypto: "npm:^3.0.1" + xml-encryption: "npm:^3.0.2" + xml2js: "npm:^0.5.0" + xmlbuilder: "npm:^15.1.1" + checksum: 10c0/589949da26c5b7029dfdaf46d7d82d77a88d3fec374e0a8a9625793a5a910e26b354825a35df639fa37a9d1c8c592b4ef988535843471f5bc22c6a08c17c5871 + languageName: node + linkType: hard + "@node-saml/node-saml@npm:^5.0.0": version: 5.0.0 resolution: "@node-saml/node-saml@npm:5.0.0" @@ -9960,6 +12011,20 @@ __metadata: languageName: node linkType: hard +"@node-saml/passport-saml@npm:^4.0.4": + version: 4.0.4 + resolution: "@node-saml/passport-saml@npm:4.0.4" + dependencies: + "@node-saml/node-saml": "npm:^4.0.4" + "@types/express": "npm:^4.17.14" + "@types/passport": "npm:^1.0.11" + "@types/passport-strategy": "npm:^0.2.35" + passport: "npm:^0.6.0" + passport-strategy: "npm:^1.0.0" + checksum: 10c0/d40e4740046ba159c7eadf320f3eca4b53c87baa69b1afe87a7d4e28f682c6d7b1147b3d58365c45cc4fd8a5c2da65741ca979757bb7951f9dc3ae9de061d944 + languageName: node + linkType: hard + "@node-saml/passport-saml@npm:^5.0.0": version: 5.0.0 resolution: "@node-saml/passport-saml@npm:5.0.0" @@ -11636,6 +13701,25 @@ __metadata: languageName: node linkType: hard +"@rollup/plugin-commonjs@npm:^25.0.0": + version: 25.0.8 + resolution: "@rollup/plugin-commonjs@npm:25.0.8" + dependencies: + "@rollup/pluginutils": "npm:^5.0.1" + commondir: "npm:^1.0.1" + estree-walker: "npm:^2.0.2" + glob: "npm:^8.0.3" + is-reference: "npm:1.2.1" + magic-string: "npm:^0.30.3" + peerDependencies: + rollup: ^2.68.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/00d6fe41c33476dcb4b4ac3068f869b8537153646ea18f1fb9d0dfd5592792148567dd735d58ac15e2fdd4ed6c98453d20fe5343105f8cfa93d291198c9a90f5 + languageName: node + linkType: hard + "@rollup/plugin-commonjs@npm:^26.0.0": version: 26.0.3 resolution: "@rollup/plugin-commonjs@npm:26.0.3" @@ -11737,6 +13821,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.28.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@rollup/rollup-android-arm64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-android-arm64@npm:4.27.4" @@ -11744,6 +13835,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm64@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-android-arm64@npm:4.28.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-arm64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-darwin-arm64@npm:4.27.4" @@ -11751,6 +13849,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-arm64@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.28.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-x64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-darwin-x64@npm:4.27.4" @@ -11758,6 +13863,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-x64@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.28.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-freebsd-arm64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-freebsd-arm64@npm:4.27.4" @@ -11765,6 +13877,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-arm64@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.28.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-freebsd-x64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-freebsd-x64@npm:4.27.4" @@ -11772,6 +13891,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-x64@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.28.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-gnueabihf@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.27.4" @@ -11779,6 +13905,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-gnueabihf@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.28.1" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-musleabihf@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.27.4" @@ -11786,6 +13919,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-musleabihf@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.28.1" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.27.4" @@ -11793,6 +13933,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-gnu@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.28.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-musl@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.27.4" @@ -11800,6 +13947,20 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-musl@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.28.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loongarch64-gnu@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.28.1" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-powerpc64le-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.27.4" @@ -11807,6 +13968,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.28.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.27.4" @@ -11814,6 +13982,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-gnu@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.28.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-s390x-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.27.4" @@ -11821,6 +13996,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-s390x-gnu@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.28.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.27.4" @@ -11828,6 +14010,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-gnu@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.28.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-musl@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-x64-musl@npm:4.27.4" @@ -11835,6 +14024,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-musl@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.28.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-win32-arm64-msvc@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.27.4" @@ -11842,6 +14038,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-arm64-msvc@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.28.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-win32-ia32-msvc@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.27.4" @@ -11849,6 +14052,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-ia32-msvc@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.28.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@rollup/rollup-win32-x64-msvc@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.27.4" @@ -11856,6 +14066,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-x64-msvc@npm:4.28.1": + version: 4.28.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.28.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@sagold/json-pointer@npm:^5.1.2": version: 5.1.2 resolution: "@sagold/json-pointer@npm:5.1.2" @@ -14784,7 +17001,7 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:*, @types/express@npm:^4.17.21, @types/express@npm:^4.17.6": +"@types/express@npm:*, @types/express@npm:^4.17.14, @types/express@npm:^4.17.21, @types/express@npm:^4.17.6": version: 4.17.21 resolution: "@types/express@npm:4.17.21" dependencies: @@ -14948,7 +17165,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.11, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.11, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db @@ -15117,6 +17334,16 @@ __metadata: languageName: node linkType: hard +"@types/node-fetch@npm:^2.6.4": + version: 2.6.12 + resolution: "@types/node-fetch@npm:2.6.12" + dependencies: + "@types/node": "npm:*" + form-data: "npm:^4.0.0" + checksum: 10c0/7693acad5499b7df2d1727d46cff092a63896dc04645f36b973dd6dd754a59a7faba76fcb777bdaa35d80625c6a9dd7257cca9c401a4bab03b04480cda7fd1af + languageName: node + linkType: hard + "@types/node-forge@npm:^1.3.0": version: 1.3.11 resolution: "@types/node-forge@npm:1.3.11" @@ -15194,7 +17421,7 @@ __metadata: languageName: node linkType: hard -"@types/passport-strategy@npm:^0.2.38": +"@types/passport-strategy@npm:^0.2.35, @types/passport-strategy@npm:^0.2.38": version: 0.2.38 resolution: "@types/passport-strategy@npm:0.2.38" dependencies: @@ -15213,6 +17440,15 @@ __metadata: languageName: node linkType: hard +"@types/passport@npm:^1.0.11": + version: 1.0.17 + resolution: "@types/passport@npm:1.0.17" + dependencies: + "@types/express": "npm:*" + checksum: 10c0/09039429a9178117a80880c4e7d437abc83216eac5e0c97bc6f14a03a59193386cff484931dc880693f8b13a512c366ef7a51ecd8cc1a63f17366be68161f633 + languageName: node + linkType: hard + "@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0, @types/prop-types@npm:^15.7.11, @types/prop-types@npm:^15.7.3": version: 15.7.11 resolution: "@types/prop-types@npm:15.7.11" @@ -15354,6 +17590,13 @@ __metadata: languageName: node linkType: hard +"@types/retry@npm:0.12.0": + version: 0.12.0 + resolution: "@types/retry@npm:0.12.0" + checksum: 10c0/7c5c9086369826f569b83a4683661557cab1361bac0897a1cefa1a915ff739acd10ca0d62b01071046fe3f5a3f7f2aec80785fe283b75602dc6726781ea3e328 + languageName: node + linkType: hard + "@types/retry@npm:0.12.2": version: 0.12.2 resolution: "@types/retry@npm:0.12.2" @@ -15368,7 +17611,7 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:7.5.8, @types/semver@npm:^7.5.0": +"@types/semver@npm:7.5.8, @types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0": version: 7.5.8 resolution: "@types/semver@npm:7.5.8" checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa @@ -15574,6 +17817,13 @@ __metadata: languageName: node linkType: hard +"@types/uuid@npm:^10, @types/uuid@npm:^10.0.0": + version: 10.0.0 + resolution: "@types/uuid@npm:10.0.0" + checksum: 10c0/9a1404bf287164481cb9b97f6bb638f78f955be57c40c6513b7655160beb29df6f84c915aaf4089a1559c216557dc4d2f79b48d978742d3ae10b937420ddac60 + languageName: node + linkType: hard + "@types/uuid@npm:^9.0.1": version: 9.0.8 resolution: "@types/uuid@npm:9.0.8" @@ -15615,7 +17865,17 @@ __metadata: languageName: node linkType: hard -"@types/xml-encryption@npm:^1.2.4": +"@types/xml-crypto@npm:^1.4.2": + version: 1.4.6 + resolution: "@types/xml-crypto@npm:1.4.6" + dependencies: + "@types/node": "npm:*" + xpath: "npm:0.0.27" + checksum: 10c0/9b0c745316a58d3b3a5633adfbc9886e858b63f5a3a09aedf5afa2713e806b1aac9247070db76a26a6ed0967221ce62868f26dd66f1d8a7cebb3cf49ee0af62b + languageName: node + linkType: hard + +"@types/xml-encryption@npm:^1.2.1, @types/xml-encryption@npm:^1.2.4": version: 1.2.4 resolution: "@types/xml-encryption@npm:1.2.4" dependencies: @@ -15624,7 +17884,7 @@ __metadata: languageName: node linkType: hard -"@types/xml2js@npm:^0.4.14": +"@types/xml2js@npm:^0.4.11, @types/xml2js@npm:^0.4.14": version: 0.4.14 resolution: "@types/xml2js@npm:0.4.14" dependencies: @@ -15692,6 +17952,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/scope-manager@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/visitor-keys": "npm:5.62.0" + checksum: 10c0/861253235576c1c5c1772d23cdce1418c2da2618a479a7de4f6114a12a7ca853011a1e530525d0931c355a8fd237b9cd828fac560f85f9623e24054fd024726f + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/scope-manager@npm:6.21.0" @@ -15729,6 +17999,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/types@npm:5.62.0" + checksum: 10c0/7febd3a7f0701c0b927e094f02e82d8ee2cada2b186fcb938bc2b94ff6fbad88237afc304cbaf33e82797078bbbb1baf91475f6400912f8b64c89be79bfa4ddf + languageName: node + linkType: hard + "@typescript-eslint/types@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/types@npm:6.21.0" @@ -15743,6 +18020,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/visitor-keys": "npm:5.62.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + semver: "npm:^7.3.7" + tsutils: "npm:^3.21.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/d7984a3e9d56897b2481940ec803cb8e7ead03df8d9cfd9797350be82ff765dfcf3cfec04e7355e1779e948da8f02bc5e11719d07a596eb1cb995c48a95e38cf + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" @@ -15798,6 +18093,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:^5.10.0": + version: 5.62.0 + resolution: "@typescript-eslint/utils@npm:5.62.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@types/json-schema": "npm:^7.0.9" + "@types/semver": "npm:^7.3.12" + "@typescript-eslint/scope-manager": "npm:5.62.0" + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/typescript-estree": "npm:5.62.0" + eslint-scope: "npm:^5.1.1" + semver: "npm:^7.3.7" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/f09b7d9952e4a205eb1ced31d7684dd55cee40bf8c2d78e923aa8a255318d97279825733902742c09d8690f37a50243f4c4d383ab16bd7aefaf9c4b438f785e1 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:^6.0.0 || ^7.0.0 || ^8.0.0": version: 8.16.0 resolution: "@typescript-eslint/utils@npm:8.16.0" @@ -15815,6 +18128,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + eslint-visitor-keys: "npm:^3.3.0" + checksum: 10c0/7c3b8e4148e9b94d9b7162a596a1260d7a3efc4e65199693b8025c71c4652b8042501c0bc9f57654c1e2943c26da98c0f77884a746c6ae81389fcb0b513d995d + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" @@ -15938,6 +18261,16 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/ast@npm:1.14.1" + dependencies: + "@webassemblyjs/helper-numbers": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + checksum: 10c0/67a59be8ed50ddd33fbb2e09daa5193ac215bf7f40a9371be9a0d9797a114d0d1196316d2f3943efdb923a3d809175e1563a3cb80c814fb8edccd1e77494972b + languageName: node + linkType: hard + "@webassemblyjs/floating-point-hex-parser@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" @@ -15945,6 +18278,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" + checksum: 10c0/0e88bdb8b50507d9938be64df0867f00396b55eba9df7d3546eb5dc0ca64d62e06f8d881ec4a6153f2127d0f4c11d102b6e7d17aec2f26bb5ff95a5e60652412 + languageName: node + linkType: hard + "@webassemblyjs/helper-api-error@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" @@ -15952,6 +18292,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-api-error@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" + checksum: 10c0/31be497f996ed30aae4c08cac3cce50c8dcd5b29660383c0155fce1753804fc55d47fcba74e10141c7dd2899033164e117b3bcfcda23a6b043e4ded4f1003dfb + languageName: node + linkType: hard + "@webassemblyjs/helper-buffer@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/helper-buffer@npm:1.12.1" @@ -15959,6 +18306,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-buffer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" + checksum: 10c0/0d54105dc373c0fe6287f1091e41e3a02e36cdc05e8cf8533cdc16c59ff05a646355415893449d3768cda588af451c274f13263300a251dc11a575bc4c9bd210 + languageName: node + linkType: hard + "@webassemblyjs/helper-numbers@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" @@ -15970,6 +18324,17 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-numbers@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" + dependencies: + "@webassemblyjs/floating-point-hex-parser": "npm:1.13.2" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/9c46852f31b234a8fb5a5a9d3f027bc542392a0d4de32f1a9c0075d5e8684aa073cb5929b56df565500b3f9cc0a2ab983b650314295b9bf208d1a1651bfc825a + languageName: node + linkType: hard + "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" @@ -15977,6 +18342,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" + checksum: 10c0/c4355d14f369b30cf3cbdd3acfafc7d0488e086be6d578e3c9780bd1b512932352246be96e034e2a7fcfba4f540ec813352f312bfcbbfe5bcfbf694f82ccc682 + languageName: node + linkType: hard + "@webassemblyjs/helper-wasm-section@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/helper-wasm-section@npm:1.12.1" @@ -15989,6 +18361,18 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-wasm-section@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + checksum: 10c0/1f9b33731c3c6dbac3a9c483269562fa00d1b6a4e7133217f40e83e975e636fd0f8736e53abd9a47b06b66082ecc976c7384391ab0a68e12d509ea4e4b948d64 + languageName: node + linkType: hard + "@webassemblyjs/ieee754@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/ieee754@npm:1.11.6" @@ -15998,6 +18382,15 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/ieee754@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/ieee754@npm:1.13.2" + dependencies: + "@xtuc/ieee754": "npm:^1.2.0" + checksum: 10c0/2e732ca78c6fbae3c9b112f4915d85caecdab285c0b337954b180460290ccd0fb00d2b1dc4bb69df3504abead5191e0d28d0d17dfd6c9d2f30acac8c4961c8a7 + languageName: node + linkType: hard + "@webassemblyjs/leb128@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/leb128@npm:1.11.6" @@ -16007,6 +18400,15 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/leb128@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/leb128@npm:1.13.2" + dependencies: + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/dad5ef9e383c8ab523ce432dfd80098384bf01c45f70eb179d594f85ce5db2f80fa8c9cba03adafd85684e6d6310f0d3969a882538975989919329ac4c984659 + languageName: node + linkType: hard + "@webassemblyjs/utf8@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/utf8@npm:1.11.6" @@ -16014,6 +18416,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/utf8@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/utf8@npm:1.13.2" + checksum: 10c0/d3fac9130b0e3e5a1a7f2886124a278e9323827c87a2b971e6d0da22a2ba1278ac9f66a4f2e363ecd9fac8da42e6941b22df061a119e5c0335f81006de9ee799 + languageName: node + linkType: hard + "@webassemblyjs/wasm-edit@npm:^1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wasm-edit@npm:1.12.1" @@ -16030,6 +18439,22 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wasm-edit@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/helper-wasm-section": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-opt": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + "@webassemblyjs/wast-printer": "npm:1.14.1" + checksum: 10c0/5ac4781086a2ca4b320bdbfd965a209655fe8a208ca38d89197148f8597e587c9a2c94fb6bd6f1a7dbd4527c49c6844fcdc2af981f8d793a97bf63a016aa86d2 + languageName: node + linkType: hard + "@webassemblyjs/wasm-gen@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wasm-gen@npm:1.12.1" @@ -16043,6 +18468,19 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wasm-gen@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/d678810d7f3f8fecb2e2bdadfb9afad2ec1d2bc79f59e4711ab49c81cec578371e22732d4966f59067abe5fba8e9c54923b57060a729d28d408e608beef67b10 + languageName: node + linkType: hard + "@webassemblyjs/wasm-opt@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wasm-opt@npm:1.12.1" @@ -16055,6 +18493,18 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wasm-opt@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + checksum: 10c0/515bfb15277ee99ba6b11d2232ddbf22aed32aad6d0956fe8a0a0a004a1b5a3a277a71d9a3a38365d0538ac40d1b7b7243b1a244ad6cd6dece1c1bb2eb5de7ee + languageName: node + linkType: hard + "@webassemblyjs/wasm-parser@npm:1.12.1, @webassemblyjs/wasm-parser@npm:^1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wasm-parser@npm:1.12.1" @@ -16069,6 +18519,20 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/95427b9e5addbd0f647939bd28e3e06b8deefdbdadcf892385b5edc70091bf9b92fa5faac3fce8333554437c5d85835afef8c8a7d9d27ab6ba01ffab954db8c6 + languageName: node + linkType: hard + "@webassemblyjs/wast-printer@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wast-printer@npm:1.12.1" @@ -16079,6 +18543,16 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wast-printer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wast-printer@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/8d7768608996a052545251e896eac079c98e0401842af8dd4de78fba8d90bd505efb6c537e909cd6dae96e09db3fa2e765a6f26492553a675da56e2db51f9d24 + languageName: node + linkType: hard + "@whatwg-node/events@npm:^0.1.0": version: 0.1.1 resolution: "@whatwg-node/events@npm:0.1.1" @@ -16116,7 +18590,7 @@ __metadata: languageName: node linkType: hard -"@xmldom/xmldom@npm:^0.8.10, @xmldom/xmldom@npm:^0.8.3, @xmldom/xmldom@npm:^0.8.5": +"@xmldom/xmldom@npm:^0.8.10, @xmldom/xmldom@npm:^0.8.3, @xmldom/xmldom@npm:^0.8.5, @xmldom/xmldom@npm:^0.8.6, @xmldom/xmldom@npm:^0.8.8": version: 0.8.10 resolution: "@xmldom/xmldom@npm:0.8.10" checksum: 10c0/c7647c442502720182b0d65b17d45d2d95317c1c8c497626fe524bda79b4fb768a9aa4fae2da919f308e7abcff7d67c058b102a9d641097e9a57f0b80187851f @@ -16528,7 +19002,7 @@ __metadata: languageName: node linkType: hard -"any-promise@npm:^1.0.0": +"any-promise@npm:^1.0.0, any-promise@npm:^1.1.0": version: 1.3.0 resolution: "any-promise@npm:1.3.0" checksum: 10c0/60f0298ed34c74fef50daab88e8dab786036ed5a7fad02e012ab57e376e0a0b4b29e83b95ea9b5e7d89df762f5f25119b83e00706ecaccb22cfbacee98d74889 @@ -16559,6 +19033,7 @@ __metadata: "@aws/aws-codebuild-plugin-for-backstage": "workspace:^" "@aws/aws-codepipeline-plugin-for-backstage": "workspace:^" "@aws/cost-insights-plugin-for-backstage": "workspace:^" + "@aws/genai-plugin-for-backstage": "workspace:^" "@backstage-community/plugin-cost-insights": "npm:^0.12.25" "@backstage-community/plugin-github-actions": "npm:^0.6.16" "@backstage-community/plugin-tech-radar": "npm:^0.7.4" @@ -16653,6 +19128,20 @@ __metadata: languageName: node linkType: hard +"archiver-utils@npm:^4.0.1": + version: 4.0.1 + resolution: "archiver-utils@npm:4.0.1" + dependencies: + glob: "npm:^8.0.0" + graceful-fs: "npm:^4.2.0" + lazystream: "npm:^1.0.0" + lodash: "npm:^4.17.15" + normalize-path: "npm:^3.0.0" + readable-stream: "npm:^3.6.0" + checksum: 10c0/fc646fe1f8e3650383b6f79384e1c8f69caf7685c705221e23393a674ee1d67331e246250a72b03ec2fbdb2cfe30adc2d4287f6357684d6843d604738bf2c870 + languageName: node + linkType: hard + "archiver-utils@npm:^5.0.0, archiver-utils@npm:^5.0.2": version: 5.0.2 resolution: "archiver-utils@npm:5.0.2" @@ -16683,6 +19172,21 @@ __metadata: languageName: node linkType: hard +"archiver@npm:^6.0.0": + version: 6.0.2 + resolution: "archiver@npm:6.0.2" + dependencies: + archiver-utils: "npm:^4.0.1" + async: "npm:^3.2.4" + buffer-crc32: "npm:^0.2.1" + readable-stream: "npm:^3.6.0" + readdir-glob: "npm:^1.1.2" + tar-stream: "npm:^3.0.0" + zip-stream: "npm:^5.0.1" + checksum: 10c0/23a470d468c01cd40fc13b6bd3dbc6d04c4f7b770785dcc7e1e4af256c3d79c4ffd7f7e0e84ae320437e5b8d0a2117aecfca0586b8c0fbd6edc3e04977c438cc + languageName: node + linkType: hard + "archiver@npm:^7.0.0": version: 7.0.1 resolution: "archiver@npm:7.0.1" @@ -17202,6 +19706,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:^1.6.7": + version: 1.7.9 + resolution: "axios@npm:1.7.9" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/b7a41e24b59fee5f0f26c1fc844b45b17442832eb3a0fb42dd4f1430eb4abc571fe168e67913e8a1d91c993232bd1d1ab03e20e4d1fee8c6147649b576fc1b0b + languageName: node + linkType: hard + "axios@npm:^1.7.4": version: 1.7.8 resolution: "axios@npm:1.7.8" @@ -17392,6 +19907,8 @@ __metadata: "@aws/aws-codepipeline-plugin-for-backstage-backend": "workspace:^" "@aws/aws-core-plugin-for-backstage-scaffolder-actions": "workspace:^" "@aws/cost-insights-plugin-for-backstage-backend": "workspace:^" + "@aws/genai-plugin-for-backstage-backend": "workspace:^" + "@aws/genai-plugin-langgraph-agent-for-backstage": "workspace:^" "@backstage/backend-defaults": "npm:^0.5.3" "@backstage/backend-plugin-api": "npm:^1.0.2" "@backstage/catalog-client": "npm:^1.8.0" @@ -18206,6 +20723,13 @@ __metadata: languageName: node linkType: hard +"camelcase@npm:6, camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 + languageName: node + linkType: hard + "camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -18213,13 +20737,6 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^6.2.0": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 - languageName: node - linkType: hard - "caniuse-api@npm:^3.0.0": version: 3.0.0 resolution: "caniuse-api@npm:3.0.0" @@ -18810,7 +21327,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^10.0.0": +"commander@npm:^10.0.0, commander@npm:^10.0.1": version: 10.0.1 resolution: "commander@npm:10.0.1" checksum: 10c0/53f33d8927758a911094adadda4b2cbac111a5b377d8706700587650fd8f45b0bbe336de4b5c3fe47fd61f420a3d9bd452b6e0e6e5600a7e74d7bf0174f6efe3 @@ -18909,6 +21426,18 @@ __metadata: languageName: node linkType: hard +"compress-commons@npm:^5.0.1": + version: 5.0.3 + resolution: "compress-commons@npm:5.0.3" + dependencies: + crc-32: "npm:^1.2.0" + crc32-stream: "npm:^5.0.0" + normalize-path: "npm:^3.0.0" + readable-stream: "npm:^3.6.0" + checksum: 10c0/ca7fe7ec4feb2854876df928192fc9b2bece15690e171d771a23a8e54a97ef78c057791d0fadc5c6c6703831687facd1f2428bb0dff3187caa2d631d92be69fc + languageName: node + linkType: hard + "compress-commons@npm:^6.0.2": version: 6.0.2 resolution: "compress-commons@npm:6.0.2" @@ -19233,7 +21762,7 @@ __metadata: languageName: node linkType: hard -"cookie@npm:0.6.0, cookie@npm:~0.6.0": +"cookie@npm:0.6.0, cookie@npm:^0.6.0, cookie@npm:~0.6.0": version: 0.6.0 resolution: "cookie@npm:0.6.0" checksum: 10c0/f2318b31af7a31b4ddb4a678d024514df5e705f9be5909a192d7f116cfb6d45cbacf96a473fa733faa95050e7cff26e7832bb3ef94751592f1387b71c8956686 @@ -19268,6 +21797,16 @@ __metadata: languageName: node linkType: hard +"cookies@npm:~0.8.0": + version: 0.8.0 + resolution: "cookies@npm:0.8.0" + dependencies: + depd: "npm:~2.0.0" + keygrip: "npm:~1.1.0" + checksum: 10c0/0af32f30d1ece0596efc05782c66b9d61659e20c6cc5b695452abf5ceb51883ef43c5c73d86badd7d028a0da7d39f864c95f33640aef04f97fad70f35986bea3 + languageName: node + linkType: hard + "cookies@npm:~0.9.0": version: 0.9.1 resolution: "cookies@npm:0.9.1" @@ -19421,6 +21960,16 @@ __metadata: languageName: node linkType: hard +"crc32-stream@npm:^5.0.0": + version: 5.0.1 + resolution: "crc32-stream@npm:5.0.1" + dependencies: + crc-32: "npm:^1.2.0" + readable-stream: "npm:^3.4.0" + checksum: 10c0/32fdffdd6e80f08ffef03a120a23fad7fdd04bd9c386dd8b9c8d27f58b32b78f6a1f43a327812858a0237aec72d55b77e33f5229cbbc0ee4856a71ea010c6aa8 + languageName: node + linkType: hard + "crc32-stream@npm:^6.0.0": version: 6.0.0 resolution: "crc32-stream@npm:6.0.0" @@ -19621,6 +22170,30 @@ __metadata: languageName: node linkType: hard +"css-loader@npm:^6.5.1": + version: 6.11.0 + resolution: "css-loader@npm:6.11.0" + dependencies: + icss-utils: "npm:^5.1.0" + postcss: "npm:^8.4.33" + postcss-modules-extract-imports: "npm:^3.1.0" + postcss-modules-local-by-default: "npm:^4.0.5" + postcss-modules-scope: "npm:^3.2.0" + postcss-modules-values: "npm:^4.0.0" + postcss-value-parser: "npm:^4.2.0" + semver: "npm:^7.5.4" + peerDependencies: + "@rspack/core": 0.x || 1.x + webpack: ^5.0.0 + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: 10c0/bb52434138085fed06a33e2ffbdae9ee9014ad23bf60f59d6b7ee67f28f26c6b1764024d3030bd19fd884d6ee6ee2224eaed64ad19eb18fbbb23d148d353a965 + languageName: node + linkType: hard + "css-loader@npm:^7.0.0": version: 7.1.2 resolution: "css-loader@npm:7.1.2" @@ -20129,6 +22702,15 @@ __metadata: languageName: node linkType: hard +"debug@npm:~3.1.0": + version: 3.1.0 + resolution: "debug@npm:3.1.0" + dependencies: + ms: "npm:2.0.0" + checksum: 10c0/5bff34a352d7b2eaa31886eeaf2ee534b5461ec0548315b2f9f80bd1d2533cab7df1fa52e130ce27bc31c3945fbffb0fc72baacdceb274b95ce853db89254ea4 + languageName: node + linkType: hard + "debuglog@npm:^1.0.1": version: 1.0.1 resolution: "debuglog@npm:1.0.1" @@ -20146,7 +22728,7 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^1.1.0": +"decamelize@npm:1.2.0, decamelize@npm:^1.1.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 @@ -20396,7 +22978,7 @@ __metadata: languageName: node linkType: hard -"depd@npm:~1.1.2": +"depd@npm:^1.1.2, depd@npm:~1.1.2": version: 1.1.2 resolution: "depd@npm:1.1.2" checksum: 10c0/acb24aaf936ef9a227b6be6d495f0d2eb20108a9a6ad40585c5bda1a897031512fef6484e4fdbb80bd249fdaa82841fa1039f416ece03188e677ba11bcfda249 @@ -21057,6 +23639,13 @@ __metadata: languageName: node linkType: hard +"error-inject@npm:^1.0.0": + version: 1.0.0 + resolution: "error-inject@npm:1.0.0" + checksum: 10c0/428e777562ea0c7c3f19c5955e80aa7ecdc8b76e12ffb9b315a64354bf7d8831d2789523c340cbd453906070edd9e035b88b199ba84f3e145292ec9cc797067c + languageName: node + linkType: hard + "error-stack-parser@npm:^2.0.6": version: 2.1.4 resolution: "error-stack-parser@npm:2.1.4" @@ -21340,6 +23929,169 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.21.0": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de + languageName: node + linkType: hard + +"esbuild@npm:^0.23.0": + version: 0.23.1 + resolution: "esbuild@npm:0.23.1" + dependencies: + "@esbuild/aix-ppc64": "npm:0.23.1" + "@esbuild/android-arm": "npm:0.23.1" + "@esbuild/android-arm64": "npm:0.23.1" + "@esbuild/android-x64": "npm:0.23.1" + "@esbuild/darwin-arm64": "npm:0.23.1" + "@esbuild/darwin-x64": "npm:0.23.1" + "@esbuild/freebsd-arm64": "npm:0.23.1" + "@esbuild/freebsd-x64": "npm:0.23.1" + "@esbuild/linux-arm": "npm:0.23.1" + "@esbuild/linux-arm64": "npm:0.23.1" + "@esbuild/linux-ia32": "npm:0.23.1" + "@esbuild/linux-loong64": "npm:0.23.1" + "@esbuild/linux-mips64el": "npm:0.23.1" + "@esbuild/linux-ppc64": "npm:0.23.1" + "@esbuild/linux-riscv64": "npm:0.23.1" + "@esbuild/linux-s390x": "npm:0.23.1" + "@esbuild/linux-x64": "npm:0.23.1" + "@esbuild/netbsd-x64": "npm:0.23.1" + "@esbuild/openbsd-arm64": "npm:0.23.1" + "@esbuild/openbsd-x64": "npm:0.23.1" + "@esbuild/sunos-x64": "npm:0.23.1" + "@esbuild/win32-arm64": "npm:0.23.1" + "@esbuild/win32-ia32": "npm:0.23.1" + "@esbuild/win32-x64": "npm:0.23.1" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/08c2ed1105cc3c5e3a24a771e35532fe6089dd24a39c10097899072cef4a99f20860e41e9294e000d86380f353b04d8c50af482483d7f69f5208481cce61eec7 + languageName: node + linkType: hard + "esbuild@npm:^0.24.0": version: 0.24.0 resolution: "esbuild@npm:0.24.0" @@ -21597,6 +24349,24 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-jest@npm:^27.0.0": + version: 27.9.0 + resolution: "eslint-plugin-jest@npm:27.9.0" + dependencies: + "@typescript-eslint/utils": "npm:^5.10.0" + peerDependencies: + "@typescript-eslint/eslint-plugin": ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: "*" + peerDependenciesMeta: + "@typescript-eslint/eslint-plugin": + optional: true + jest: + optional: true + checksum: 10c0/b8b09f7d8ba3d84a8779a6e95702a6e4dce45ab034e4edf5ddb631e77cd38dcdf791dfd9228e0a0d1d80d1eb2d278deb62ad2ec39f10fb8fd43cec07304e0c38 + languageName: node + linkType: hard + "eslint-plugin-jest@npm:^28.0.0": version: 28.9.0 resolution: "eslint-plugin-jest@npm:28.9.0" @@ -21700,7 +24470,7 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:5.1.1": +"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" dependencies: @@ -21924,6 +24694,13 @@ __metadata: languageName: node linkType: hard +"eventsource-parser@npm:^2.0.1": + version: 2.0.1 + resolution: "eventsource-parser@npm:2.0.1" + checksum: 10c0/a96a80fcee39f5ad3b368b0745d019e44373a5925146c82c313808f8ff941d7c3bc0e45884a74a047ddef4ce80b4dc24152ae51087910f850114b3843aa78daa + languageName: node + linkType: hard + "evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": version: 1.0.3 resolution: "evp_bytestokey@npm:1.0.3" @@ -22683,6 +25460,13 @@ __metadata: languageName: node linkType: hard +"form-data-encoder@npm:1.7.2": + version: 1.7.2 + resolution: "form-data-encoder@npm:1.7.2" + checksum: 10c0/56553768037b6d55d9de524f97fe70555f0e415e781cb56fc457a68263de3d40fadea2304d4beef2d40b1a851269bd7854e42c362107071892cb5238debe9464 + languageName: node + linkType: hard + "form-data@npm:^2.3.2, form-data@npm:^2.5.0": version: 2.5.1 resolution: "form-data@npm:2.5.1" @@ -22723,6 +25507,16 @@ __metadata: languageName: node linkType: hard +"formdata-node@npm:^4.3.2": + version: 4.4.1 + resolution: "formdata-node@npm:4.4.1" + dependencies: + node-domexception: "npm:1.0.0" + web-streams-polyfill: "npm:4.0.0-beta.3" + checksum: 10c0/74151e7b228ffb33b565cec69182694ad07cc3fdd9126a8240468bb70a8ba66e97e097072b60bcb08729b24c7ce3fd3e0bd7f1f80df6f9f662b9656786e76f6a + languageName: node + linkType: hard + "formidable@npm:^2.1.2": version: 2.1.2 resolution: "formidable@npm:2.1.2" @@ -23303,7 +26097,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.1, glob@npm:^8.1.0": +"glob@npm:^8.0.0, glob@npm:^8.0.1, glob@npm:^8.0.3, glob@npm:^8.1.0": version: 8.1.0 resolution: "glob@npm:8.1.0" dependencies: @@ -24041,7 +26835,7 @@ __metadata: languageName: node linkType: hard -"html-webpack-plugin@npm:^5.6.3": +"html-webpack-plugin@npm:^5.3.1, html-webpack-plugin@npm:^5.6.3": version: 5.6.3 resolution: "html-webpack-plugin@npm:5.6.3" dependencies: @@ -25285,6 +28079,13 @@ __metadata: languageName: node linkType: hard +"isomorphic-rslog@npm:0.0.5": + version: 0.0.5 + resolution: "isomorphic-rslog@npm:0.0.5" + checksum: 10c0/1b5837ee5dd8eeaa4fce3bfd7b439aeb2c793e41d72988316fd22dd83edd1fda928f4879ec3e86af4c16732624cf16d6c6040d147c311abbd0b490a1f15ef889 + languageName: node + linkType: hard + "isomorphic-rslog@npm:0.0.6": version: 0.0.6 resolution: "isomorphic-rslog@npm:0.0.6" @@ -25987,6 +28788,15 @@ __metadata: languageName: node linkType: hard +"js-tiktoken@npm:^1.0.12": + version: 1.0.15 + resolution: "js-tiktoken@npm:1.0.15" + dependencies: + base64-js: "npm:^1.5.1" + checksum: 10c0/f37811b344234b170487a552c6cd6e3f17100a2fcb1a39e702c01e49e0633345ee604601504388baa6d6623fa3ab5864063a563eb987ffb0b2b7abb69ec8e616 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -26706,6 +29516,15 @@ __metadata: languageName: node linkType: hard +"koa-compose@npm:^3.0.0": + version: 3.2.1 + resolution: "koa-compose@npm:3.2.1" + dependencies: + any-promise: "npm:^1.1.0" + checksum: 10c0/10f695cf75906d0054d60d29e3a18e8df8962f1a050823bf503711819294283aae92fc145b86ea8e5dd438fc938a501145a8b6447e87cb6374084434eeeeed2f + languageName: node + linkType: hard + "koa-compose@npm:^4.1.0": version: 4.1.0 resolution: "koa-compose@npm:4.1.0" @@ -26713,6 +29532,16 @@ __metadata: languageName: node linkType: hard +"koa-convert@npm:^1.2.0": + version: 1.2.0 + resolution: "koa-convert@npm:1.2.0" + dependencies: + co: "npm:^4.6.0" + koa-compose: "npm:^3.0.0" + checksum: 10c0/0f6415b383d257ac2b40043199fc99ba366e278c96e54501f590cd44191d36fd5824988c49b399444a9702e0906b869f2f3ca1ee87063d3df7130e44aa0b460e + languageName: node + linkType: hard + "koa-convert@npm:^2.0.0": version: 2.0.0 resolution: "koa-convert@npm:2.0.0" @@ -26723,6 +29552,38 @@ __metadata: languageName: node linkType: hard +"koa@npm:2.11.0": + version: 2.11.0 + resolution: "koa@npm:2.11.0" + dependencies: + accepts: "npm:^1.3.5" + cache-content-type: "npm:^1.0.0" + content-disposition: "npm:~0.5.2" + content-type: "npm:^1.0.4" + cookies: "npm:~0.8.0" + debug: "npm:~3.1.0" + delegates: "npm:^1.0.0" + depd: "npm:^1.1.2" + destroy: "npm:^1.0.4" + encodeurl: "npm:^1.0.2" + error-inject: "npm:^1.0.0" + escape-html: "npm:^1.0.3" + fresh: "npm:~0.5.2" + http-assert: "npm:^1.3.0" + http-errors: "npm:^1.6.3" + is-generator-function: "npm:^1.0.7" + koa-compose: "npm:^4.1.0" + koa-convert: "npm:^1.2.0" + on-finished: "npm:^2.3.0" + only: "npm:~0.0.2" + parseurl: "npm:^1.3.2" + statuses: "npm:^1.5.0" + type-is: "npm:^1.6.16" + vary: "npm:^1.1.2" + checksum: 10c0/3db559f6d2957e5e93fc6a007d96458d8788a34863805781a4b613d96e13e7d92e3c5ee7218e46637289426667322b6aad44afcef0745b5e47b0573e7390452e + languageName: node + linkType: hard + "koa@npm:2.15.3": version: 2.15.3 resolution: "koa@npm:2.15.3" @@ -26761,6 +29622,55 @@ __metadata: languageName: node linkType: hard +"langfuse-core@npm:^3.31.1": + version: 3.31.1 + resolution: "langfuse-core@npm:3.31.1" + dependencies: + mustache: "npm:^4.2.0" + checksum: 10c0/9ffa69e72e4cbba4c0bc58122bd60dd1c9addd766a6cce3d63c6b975e14dfb25189cb96ae3bd576a1edd2e378f27b5198f426058d4f5e9c71de324bdf17541b0 + languageName: node + linkType: hard + +"langfuse-langchain@npm:^3.29.1": + version: 3.31.1 + resolution: "langfuse-langchain@npm:3.31.1" + dependencies: + langfuse: "npm:^3.31.1" + langfuse-core: "npm:^3.31.1" + peerDependencies: + langchain: ">=0.0.157 <0.4.0" + checksum: 10c0/5295e506d13634cd974cebeb8371646f5ee353bae2eb7b4f0daa82bd3a598444d4db23f5ef6c6d569275fe1ba0b690e656603461dd8439c50b0086371fe5750b + languageName: node + linkType: hard + +"langfuse@npm:^3.31.1": + version: 3.31.1 + resolution: "langfuse@npm:3.31.1" + dependencies: + langfuse-core: "npm:^3.31.1" + checksum: 10c0/280757c745b9e12c36eff9acb25b51372f891f352967d38099103018783fc2f5a4d657194cf26243e6a36a4a96a4a00e4daf5c4c2659dbc4805d3b051675a152 + languageName: node + linkType: hard + +"langsmith@npm:^0.2.8": + version: 0.2.11 + resolution: "langsmith@npm:0.2.11" + dependencies: + "@types/uuid": "npm:^10.0.0" + commander: "npm:^10.0.1" + p-queue: "npm:^6.6.2" + p-retry: "npm:4" + semver: "npm:^7.6.3" + uuid: "npm:^10.0.0" + peerDependencies: + openai: "*" + peerDependenciesMeta: + openai: + optional: true + checksum: 10c0/631ff17356216dafbe2635173a7af40b5024a274ffee17be8ca85b76a10f440c9220ab1e1c6c9742d9fa2ca77abb0dc2e388dab5effaeb08167b60a878ec6dd7 + languageName: node + linkType: hard + "language-subtag-registry@npm:^0.3.20": version: 0.3.22 resolution: "language-subtag-registry@npm:0.3.22" @@ -28950,6 +31860,15 @@ __metadata: languageName: node linkType: hard +"mustache@npm:^4.2.0": + version: 4.2.0 + resolution: "mustache@npm:4.2.0" + bin: + mustache: bin/mustache + checksum: 10c0/1f8197e8a19e63645a786581d58c41df7853da26702dbc005193e2437c98ca49b255345c173d50c08fe4b4dbb363e53cb655ecc570791f8deb09887248dd34a2 + languageName: node + linkType: hard + "mute-stream@npm:0.0.8": version: 0.0.8 resolution: "mute-stream@npm:0.0.8" @@ -29206,7 +32125,7 @@ __metadata: languageName: node linkType: hard -"node-domexception@npm:^1.0.0": +"node-domexception@npm:1.0.0, node-domexception@npm:^1.0.0": version: 1.0.0 resolution: "node-domexception@npm:1.0.0" checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b @@ -30047,6 +32966,28 @@ __metadata: languageName: node linkType: hard +"openai@npm:^4.71.0": + version: 4.76.0 + resolution: "openai@npm:4.76.0" + dependencies: + "@types/node": "npm:^18.11.18" + "@types/node-fetch": "npm:^2.6.4" + abort-controller: "npm:^3.0.0" + agentkeepalive: "npm:^4.2.1" + form-data-encoder: "npm:1.7.2" + formdata-node: "npm:^4.3.2" + node-fetch: "npm:^2.6.7" + peerDependencies: + zod: ^3.23.8 + peerDependenciesMeta: + zod: + optional: true + bin: + openai: bin/cli + checksum: 10c0/f0b53906ba72e6d21405353f26ae3dd4327f3cbe212787fac321089772fccaaabfcd699abb8632e19c1eb536bd31e9fff3d1f90f7de693d86ae9624c04a9d74b + languageName: node + linkType: hard + "openapi-merge@npm:^1.3.2": version: 1.3.2 resolution: "openapi-merge@npm:1.3.2" @@ -30296,6 +33237,16 @@ __metadata: languageName: node linkType: hard +"p-retry@npm:4": + version: 4.6.2 + resolution: "p-retry@npm:4.6.2" + dependencies: + "@types/retry": "npm:0.12.0" + retry: "npm:^0.13.1" + checksum: 10c0/d58512f120f1590cfedb4c2e0c42cb3fa66f3cea8a4646632fcb834c56055bb7a6f138aa57b20cc236fb207c9d694e362e0b5c2b14d9b062f67e8925580c73b0 + languageName: node + linkType: hard + "p-retry@npm:^6.2.0": version: 6.2.0 resolution: "p-retry@npm:6.2.0" @@ -30675,6 +33626,17 @@ __metadata: languageName: node linkType: hard +"passport@npm:^0.6.0": + version: 0.6.0 + resolution: "passport@npm:0.6.0" + dependencies: + passport-strategy: "npm:1.x.x" + pause: "npm:0.0.1" + utils-merge: "npm:^1.0.1" + checksum: 10c0/1d8651a4a1a72b84ea08c498cff9cfc209aebfe18baed4cf93292ded3f8e30a04e30b404fdfce39dfb6aa7247e205f1df43fbfd7bc7c1a67a600884359d46ee6 + languageName: node + linkType: hard + "passport@npm:^0.7.0": version: 0.7.0 resolution: "passport@npm:0.7.0" @@ -30811,7 +33773,7 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:^6.3.0": +"path-to-regexp@npm:^6.2.1, path-to-regexp@npm:^6.3.0": version: 6.3.0 resolution: "path-to-regexp@npm:6.3.0" checksum: 10c0/73b67f4638b41cde56254e6354e46ae3a2ebc08279583f6af3d96fe4664fc75788f74ed0d18ca44fa4a98491b69434f9eee73b97bb5314bd1b5adb700f5c18d6 @@ -33723,6 +36685,78 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.0.0": + version: 4.28.1 + resolution: "rollup@npm:4.28.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.28.1" + "@rollup/rollup-android-arm64": "npm:4.28.1" + "@rollup/rollup-darwin-arm64": "npm:4.28.1" + "@rollup/rollup-darwin-x64": "npm:4.28.1" + "@rollup/rollup-freebsd-arm64": "npm:4.28.1" + "@rollup/rollup-freebsd-x64": "npm:4.28.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.28.1" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.28.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.28.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.28.1" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.28.1" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.28.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.28.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.28.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.28.1" + "@rollup/rollup-linux-x64-musl": "npm:4.28.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.28.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.28.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.28.1" + "@types/estree": "npm:1.0.6" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loongarch64-gnu": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/2d2d0433b7cb53153a04c7b406f342f31517608dc57510e49177941b9e68c30071674b83a0292ef1d87184e5f7c6d0f2945c8b3c74963074de10c75366fe2c14 + languageName: node + linkType: hard + "rollup@npm:^4.27.3": version: 4.27.4 resolution: "rollup@npm:4.27.4" @@ -33849,6 +36883,13 @@ __metadata: languageName: node linkType: hard +"run-script-webpack-plugin@npm:^0.2.0": + version: 0.2.0 + resolution: "run-script-webpack-plugin@npm:0.2.0" + checksum: 10c0/940c102705afdd2d506680a3570f9b7ba0901bc68b2d063b486329c3cba98deb5a64cfb6fc2643394eff2bd1da9ff67d49726579420fd52a0bbc6db3a55a2752 + languageName: node + linkType: hard + "rxjs@npm:^7.5.5, rxjs@npm:^7.8.1": version: 7.8.1 resolution: "rxjs@npm:7.8.1" @@ -34049,7 +37090,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.6.3, semver@npm:^7.6.0": +"semver@npm:7.6.3, semver@npm:^7.6.0, semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -36275,6 +39316,13 @@ __metadata: languageName: node linkType: hard +"ts-pattern@npm:^5.5.0": + version: 5.5.0 + resolution: "ts-pattern@npm:5.5.0" + checksum: 10c0/4ae1fbeadcf193e72b27419d5fe71f559c100e45710eabf29e2ff3a8fa9ba29adfcd6d5d7d8169b95e2b264683a2eb8d94dbd3c893357b045b52b0c34c2b7c72 + languageName: node + linkType: hard + "ts-toolbelt@npm:^9.6.0": version: 9.6.0 resolution: "ts-toolbelt@npm:9.6.0" @@ -37157,6 +40205,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^10.0.0": + version: 10.0.0 + resolution: "uuid@npm:10.0.0" + bin: + uuid: dist/bin/uuid + checksum: 10c0/eab18c27fe4ab9fb9709a5d5f40119b45f2ec8314f8d4cf12ce27e4c6f4ffa4a6321dc7db6c515068fa373c075b49691ba969f0010bf37f44c37ca40cd6bf7fe + languageName: node + linkType: hard + "uuid@npm:^11.0.0": version: 11.0.3 resolution: "uuid@npm:11.0.3" @@ -37472,6 +40529,13 @@ __metadata: languageName: node linkType: hard +"web-streams-polyfill@npm:4.0.0-beta.3": + version: 4.0.0-beta.3 + resolution: "web-streams-polyfill@npm:4.0.0-beta.3" + checksum: 10c0/a9596779db2766990117ed3a158e0b0e9f69b887a6d6ba0779940259e95f99dc3922e534acc3e5a117b5f5905300f527d6fbf8a9f0957faf1d8e585ce3452e8e + languageName: node + linkType: hard + "web-streams-polyfill@npm:^3.0.3": version: 3.3.3 resolution: "web-streams-polyfill@npm:3.3.3" @@ -37566,6 +40630,13 @@ __metadata: languageName: node linkType: hard +"webpack-node-externals@npm:^3.0.0": + version: 3.0.0 + resolution: "webpack-node-externals@npm:3.0.0" + checksum: 10c0/9f645a4dc8e122dac43cdc8c1367d4b44af20c79632438b633acc1b4fe64ea7ba1ad6ab61bd0fc46e1b873158c48d8c7a25a489cdab1f31299f00eb3b81cfc61 + languageName: node + linkType: hard + "webpack-sources@npm:^1.4.3": version: 1.4.3 resolution: "webpack-sources@npm:1.4.3" @@ -37583,6 +40654,42 @@ __metadata: languageName: node linkType: hard +"webpack@npm:^5.70.0": + version: 5.97.1 + resolution: "webpack@npm:5.97.1" + dependencies: + "@types/eslint-scope": "npm:^3.7.7" + "@types/estree": "npm:^1.0.6" + "@webassemblyjs/ast": "npm:^1.14.1" + "@webassemblyjs/wasm-edit": "npm:^1.14.1" + "@webassemblyjs/wasm-parser": "npm:^1.14.1" + acorn: "npm:^8.14.0" + browserslist: "npm:^4.24.0" + chrome-trace-event: "npm:^1.0.2" + enhanced-resolve: "npm:^5.17.1" + es-module-lexer: "npm:^1.2.1" + eslint-scope: "npm:5.1.1" + events: "npm:^3.2.0" + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.2.11" + json-parse-even-better-errors: "npm:^2.3.1" + loader-runner: "npm:^4.2.0" + mime-types: "npm:^2.1.27" + neo-async: "npm:^2.6.2" + schema-utils: "npm:^3.2.0" + tapable: "npm:^2.1.1" + terser-webpack-plugin: "npm:^5.3.10" + watchpack: "npm:^2.4.1" + webpack-sources: "npm:^3.2.3" + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 10c0/a12d3dc882ca582075f2c4bd88840be8307427245c90a8a0e0b372d73560df13fcf25a61625c9e7edc964981d16b5a8323640562eb48347cf9dd2f8bd1b39d35 + languageName: node + linkType: hard + "webpack@npm:^5.94.0": version: 5.96.1 resolution: "webpack@npm:5.96.1" @@ -37976,6 +41083,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:8.17.0": + version: 8.17.0 + resolution: "ws@npm:8.17.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/55241ec93a66fdfc4bf4f8bc66c8eb038fda2c7a4ee8f6f157f2ca7dc7aa76aea0c0da0bf3adb2af390074a70a0e45456a2eaf80e581e630b75df10a64b0a990 + languageName: node + linkType: hard + "ws@npm:^8.11.0, ws@npm:^8.12.0, ws@npm:^8.13.0, ws@npm:^8.15.0": version: 8.16.0 resolution: "ws@npm:8.16.0" @@ -38007,6 +41129,16 @@ __metadata: languageName: node linkType: hard +"xml-crypto@npm:^3.0.1": + version: 3.2.0 + resolution: "xml-crypto@npm:3.2.0" + dependencies: + "@xmldom/xmldom": "npm:^0.8.8" + xpath: "npm:0.0.32" + checksum: 10c0/adfeeb810c0b25674c78386c1b537561e6d8bdf69cef0852e47559d0eb96aa20edb22dd70efa35eefae3aa98602736ce9a54f78f6dea685bd4d4f18032d803af + languageName: node + linkType: hard + "xml-crypto@npm:^6.0.0": version: 6.0.0 resolution: "xml-crypto@npm:6.0.0" @@ -38091,6 +41223,13 @@ __metadata: languageName: node linkType: hard +"xpath@npm:0.0.27": + version: 0.0.27 + resolution: "xpath@npm:0.0.27" + checksum: 10c0/d51bc49435e807b640f6187f7aabd3e0c93073408c0636273c948d0d1a02243cb07d434a74d7b12509547053ee4bcc944c31c1afc6e0e6e9417d5312f5e58e5c + languageName: node + linkType: hard + "xpath@npm:0.0.32": version: 0.0.32 resolution: "xpath@npm:0.0.32" @@ -38292,6 +41431,17 @@ __metadata: languageName: node linkType: hard +"zip-stream@npm:^5.0.1": + version: 5.0.2 + resolution: "zip-stream@npm:5.0.2" + dependencies: + archiver-utils: "npm:^4.0.1" + compress-commons: "npm:^5.0.1" + readable-stream: "npm:^3.6.0" + checksum: 10c0/cb5c4b57771a03429188ae73f90744f6996aa98c885852970de1c8bed3351c8a931cce0cf74cf37b9fa3727a07119236def871ec6d05c9becbc80746f52dd795 + languageName: node + linkType: hard + "zip-stream@npm:^6.0.1": version: 6.0.1 resolution: "zip-stream@npm:6.0.1" @@ -38312,6 +41462,15 @@ __metadata: languageName: node linkType: hard +"zod-to-json-schema@npm:^3.22.3, zod-to-json-schema@npm:^3.22.5": + version: 3.23.5 + resolution: "zod-to-json-schema@npm:3.23.5" + peerDependencies: + zod: ^3.23.3 + checksum: 10c0/bf50455f446c96b9a161476347ebab6e3bcae7fdf1376ce0b74248e79db733590164476dac2fc481a921868f705fefdcafd223a98203a700b3f01ba1cda6aa90 + languageName: node + linkType: hard + "zod-validation-error@npm:^3.4.0": version: 3.4.0 resolution: "zod-validation-error@npm:3.4.0" @@ -38321,7 +41480,7 @@ __metadata: languageName: node linkType: hard -"zod@npm:^3.22.4": +"zod@npm:^3.22.4, zod@npm:^3.23.8": version: 3.23.8 resolution: "zod@npm:3.23.8" checksum: 10c0/8f14c87d6b1b53c944c25ce7a28616896319d95bc46a9660fe441adc0ed0a81253b02b5abdaeffedbeb23bdd25a0bf1c29d2c12dd919aef6447652dd295e3e69